From aae3d66503198f4362a60b359079927c3c758ba7 Mon Sep 17 00:00:00 2001 From: Motion Team <motion@xcally.com> Date: Wed, 26 Oct 2016 12:57:10 +0200 Subject: [PATCH] Built motion from commit 1d5a56b.|0.0.148 --- public/app/4a68e305.app.js | 91 - public/app/fc371ddc.app.js | 91 + public/assets/plugins/jscripty/js/Actions.js | 635 +- public/assets/plugins/jscripty/js/Dialogs.js | 1195 +-- public/assets/plugins/jscripty/js/Editor.js | 889 +- public/assets/plugins/jscripty/js/EditorUi.js | 1346 +-- public/assets/plugins/jscripty/js/Graph.js | 645 +- public/assets/plugins/jscripty/js/Menus.js | 717 +- public/assets/plugins/jscripty/js/Shapes.js | 1235 +-- public/assets/plugins/jscripty/js/Sidebar.js | 794 +- public/assets/plugins/jscripty/js/Toolbar.js | 408 +- public/assets/plugins/jscripty/js/custom.js | 284 +- public/assets/plugins/mxgraph/js/mxClient.js |18738 +------------------- public/assets/plugins/square/js/Actions.js | 639 +- public/assets/plugins/square/js/Dialogs.js | 1277 +-- public/assets/plugins/square/js/Editor.js | 889 +- public/assets/plugins/square/js/EditorUi.js | 1624 +-- public/assets/plugins/square/js/Graph.js | 645 +- public/assets/plugins/square/js/Menus.js | 717 +- public/assets/plugins/square/js/Shapes.js | 1235 +-- public/assets/plugins/square/js/Sidebar.js | 933 +- public/assets/plugins/square/js/Toolbar.js | 408 +- public/assets/plugins/square/js/custom.js | 308 +- public/index.html | 2 +- release-notes/changelog_0.0.148.txt | 10 +- server/api/_apidoc.js | 22 +- server/api/action/action.controller.js | 89 +- server/api/action/action.events.js | 37 +- server/api/action/action.socket.js | 33 +- server/api/action/index.js | 14 +- server/api/agent/agent.controller.js | 1145 +-- server/api/agent/agent.events.js | 37 +- server/api/agent/agent.socket.js | 52 +- server/api/agent/index.js | 313 +- server/api/ami/ami.ami.js | 37 +- server/api/ami/ami.controller.js | 38 +- server/api/ami/ami.events.js | 37 +- server/api/ami/ami.socket.js | 33 +- server/api/ami/index.js | 13 +- server/api/automation/automation.controller.js | 206 +- server/api/automation/automation.events.js | 37 +- server/api/automation/automation.socket.js | 29 +- server/api/automation/index.js | 17 +- .../api/canned_answer/canned_answer.controller.js | 132 +- server/api/canned_answer/canned_answer.events.js | 37 +- server/api/canned_answer/canned_answer.socket.js | 29 +- server/api/canned_answer/index.js | 17 +- server/api/chanspy/chanspy.controller.js | 108 +- server/api/chanspy/chanspy.events.js | 37 +- server/api/chanspy/chanspy.socket.js | 29 +- server/api/chanspy/index.js | 17 +- .../chat_application.controller.js | 98 +- .../chat_application/chat_application.events.js | 37 +- .../chat_application/chat_application.socket.js | 29 +- server/api/chat_application/index.js | 18 +- .../chat_disposition.controller.js | 112 +- .../chat_disposition/chat_disposition.events.js | 37 +- .../chat_disposition/chat_disposition.socket.js | 33 +- server/api/chat_disposition/index.js | 19 +- server/api/chat_enquiry/enquiry.controller.js | 124 +- server/api/chat_enquiry/enquiry.events.js | 37 +- server/api/chat_enquiry/enquiry.socket.js | 29 +- server/api/chat_enquiry/index.js | 20 +- server/api/chat_message/chat_message.controller.js | 107 +- server/api/chat_message/chat_message.events.js | 37 +- server/api/chat_message/chat_message.socket.js | 63 +- server/api/chat_message/index.js | 19 +- .../chat_proactive_action.controller.js | 113 +- .../chat_proactive_action.events.js | 37 +- .../chat_proactive_action.socket.js | 29 +- server/api/chat_proactive_action/index.js | 18 +- server/api/chat_queue/chat_queue.controller.js | 238 +- server/api/chat_queue/chat_queue.events.js | 37 +- server/api/chat_queue/chat_queue.socket.js | 29 +- server/api/chat_queue/index.js | 24 +- server/api/chat_room/chat_room.controller.js | 656 +- server/api/chat_room/chat_room.events.js | 37 +- server/api/chat_room/chat_room.socket.js | 29 +- server/api/chat_room/index.js | 33 +- server/api/chat_visitor/chat_visitor.controller.js | 105 +- server/api/chat_visitor/chat_visitor.events.js | 37 +- server/api/chat_visitor/chat_visitor.socket.js | 29 +- server/api/chat_visitor/index.js | 18 +- server/api/chat_website/chat_website.controller.js | 580 +- server/api/chat_website/chat_website.events.js | 37 +- server/api/chat_website/chat_website.socket.js | 29 +- server/api/chat_website/index.js | 41 +- .../chat_websites_field.controller.js | 113 +- .../chat_websites_field.events.js | 37 +- .../chat_websites_field.socket.js | 29 +- server/api/chat_websites_field/index.js | 19 +- server/api/company/company.controller.js | 147 +- server/api/company/company.events.js | 37 +- server/api/company/company.socket.js | 29 +- server/api/company/index.js | 19 +- .../contact_manager/contact_manager.controller.js | 715 +- .../api/contact_manager/contact_manager.events.js | 37 +- .../api/contact_manager/contact_manager.socket.js | 29 +- server/api/contact_manager/index.js | 24 +- .../api/custom_report/custom_report.controller.js | 569 +- server/api/custom_report/custom_report.events.js | 37 +- server/api/custom_report/custom_report.socket.js | 29 +- server/api/custom_report/index.js | 25 +- server/api/dashboard/dashboard.controller.js | 321 +- server/api/dashboard/dashboard.events.js | 37 +- server/api/dashboard/dashboard.socket.js | 29 +- server/api/dashboard/index.js | 20 +- .../default_metric/default_metric.controller.js | 159 +- server/api/default_metric/index.js | 20 +- .../default_report/default_report.controller.js | 393 +- server/api/default_report/default_report.events.js | 37 +- server/api/default_report/default_report.socket.js | 29 +- server/api/default_report/index.js | 22 +- server/api/desk_account/desk_account.controller.js | 256 +- server/api/desk_account/desk_account.events.js | 37 +- server/api/desk_account/desk_account.socket.js | 29 +- server/api/desk_account/index.js | 19 +- .../desk_configuration.controller.js | 146 +- .../desk_configuration.events.js | 37 +- .../desk_configuration.socket.js | 29 +- server/api/desk_configuration/index.js | 19 +- server/api/desk_field/desk_field.controller.js | 105 +- server/api/desk_field/desk_field.events.js | 37 +- server/api/desk_field/desk_field.socket.js | 29 +- server/api/desk_field/index.js | 17 +- .../extracted_report.controller.js | 208 +- .../extracted_report/extracted_report.events.js | 37 +- .../extracted_report/extracted_report.socket.js | 29 +- server/api/extracted_report/index.js | 18 +- server/api/fax_account/fax_account.controller.js | 476 +- server/api/fax_account/fax_account.events.js | 37 +- server/api/fax_account/fax_account.socket.js | 29 +- server/api/fax_account/index.js | 32 +- .../fax_application/fax_application.controller.js | 95 +- .../api/fax_application/fax_application.events.js | 37 +- .../api/fax_application/fax_application.socket.js | 29 +- server/api/fax_application/index.js | 16 +- .../fax_attachment/fax_attachment.controller.js | 141 +- server/api/fax_attachment/fax_attachment.events.js | 37 +- server/api/fax_attachment/fax_attachment.socket.js | 29 +- server/api/fax_attachment/index.js | 17 +- .../fax_disposition/fax_disposition.controller.js | 113 +- .../api/fax_disposition/fax_disposition.events.js | 37 +- .../api/fax_disposition/fax_disposition.socket.js | 29 +- server/api/fax_disposition/index.js | 17 +- server/api/fax_message/fax_message.ami.js | 65 +- server/api/fax_message/fax_message.controller.js | 176 +- server/api/fax_message/fax_message.events.js | 37 +- server/api/fax_message/fax_message.socket.js | 29 +- server/api/fax_message/index.js | 31 +- server/api/fax_queue/fax_queue.controller.js | 214 +- server/api/fax_queue/fax_queue.events.js | 37 +- server/api/fax_queue/fax_queue.socket.js | 29 +- server/api/fax_queue/index.js | 22 +- server/api/fax_room/fax_room.controller.js | 475 +- server/api/fax_room/fax_room.events.js | 37 +- server/api/fax_room/fax_room.socket.js | 70 +- server/api/fax_room/index.js | 32 +- .../freshdesk_account.controller.js | 240 +- .../freshdesk_account/freshdesk_account.events.js | 37 +- .../freshdesk_account/freshdesk_account.socket.js | 29 +- server/api/freshdesk_account/index.js | 22 +- .../freshdesk_configuration.controller.js | 147 +- .../freshdesk_configuration.events.js | 37 +- .../freshdesk_configuration.socket.js | 29 +- server/api/freshdesk_configuration/index.js | 20 +- .../freshdesk_field/freshdesk_field.controller.js | 105 +- .../api/freshdesk_field/freshdesk_field.events.js | 37 +- .../api/freshdesk_field/freshdesk_field.socket.js | 29 +- server/api/freshdesk_field/index.js | 19 +- server/api/integration/index.js | 16 +- server/api/integration/integration.controller.js | 169 +- server/api/integration/integration.events.js | 37 +- server/api/integration/integration.socket.js | 29 +- server/api/interval/index.js | 202 +- server/api/interval/interval.controller.js | 198 +- server/api/interval/interval.events.js | 37 +- server/api/interval/interval.socket.js | 29 +- server/api/jscripty_project/index.js | 34 +- .../jscripty_project.controller.js | 1027 +-- .../jscripty_project/jscripty_project.events.js | 37 +- .../jscripty_project/jscripty_project.socket.js | 29 +- server/api/license/index.js | 13 +- server/api/license/license.controller.js | 136 +- server/api/list/index.js | 29 +- server/api/list/list.controller.js | 464 +- server/api/list/list.events.js | 37 +- server/api/list/list.socket.js | 29 +- server/api/mail_account/index.js | 32 +- server/api/mail_account/mail_account.controller.js | 529 +- server/api/mail_account/mail_account.events.js | 37 +- server/api/mail_account/mail_account.socket.js | 29 +- server/api/mail_application/index.js | 18 +- .../mail_application.controller.js | 103 +- .../mail_application/mail_application.events.js | 37 +- .../mail_application/mail_application.socket.js | 29 +- server/api/mail_attachment/index.js | 18 +- .../mail_attachment/mail_attachment.controller.js | 98 +- .../api/mail_attachment/mail_attachment.events.js | 37 +- .../api/mail_attachment/mail_attachment.socket.js | 29 +- server/api/mail_disposition/index.js | 19 +- .../mail_disposition.controller.js | 112 +- .../mail_disposition/mail_disposition.events.js | 37 +- .../mail_disposition/mail_disposition.socket.js | 29 +- server/api/mail_message/index.js | 22 +- server/api/mail_message/mail_message.controller.js | 208 +- server/api/mail_message/mail_message.events.js | 37 +- server/api/mail_message/mail_message.socket.js | 29 +- server/api/mail_queue/index.js | 22 +- server/api/mail_queue/mail_queue.controller.js | 236 +- server/api/mail_queue/mail_queue.events.js | 37 +- server/api/mail_queue/mail_queue.socket.js | 29 +- server/api/mail_room/index.js | 33 +- server/api/mail_room/mail_room.controller.js | 485 +- server/api/mail_room/mail_room.events.js | 37 +- server/api/mail_room/mail_room.socket.js | 29 +- server/api/mail_server_in/index.js | 18 +- .../mail_server_in/mail_server_in.controller.js | 97 +- server/api/mail_server_in/mail_server_in.events.js | 37 +- server/api/mail_server_in/mail_server_in.socket.js | 43 +- server/api/mail_server_out/index.js | 20 +- .../mail_server_out/mail_server_out.controller.js | 158 +- .../api/mail_server_out/mail_server_out.events.js | 37 +- .../api/mail_server_out/mail_server_out.socket.js | 43 +- server/api/metric/index.js | 19 +- server/api/metric/metric.controller.js | 136 +- server/api/metric/metric.events.js | 37 +- server/api/metric/metric.socket.js | 55 +- server/api/module/index.js | 12 +- server/api/module/module.controller.js | 26 +- server/api/module/module.events.js | 37 +- server/api/module/module.socket.js | 29 +- server/api/motionbar/index.js | 12 +- server/api/motionbar/motionbar.controller.js | 33 +- server/api/motionbar/motionbar.events.js | 37 +- server/api/motionbar/motionbar.socket.js | 31 +- server/api/network_externip/index.js | 17 +- .../network_externip.controller.js | 132 +- .../network_externip/network_externip.events.js | 37 +- .../network_externip/network_externip.socket.js | 29 +- server/api/network_localnet/index.js | 17 +- .../network_localnet.controller.js | 129 +- .../network_localnet/network_localnet.events.js | 37 +- .../network_localnet/network_localnet.socket.js | 29 +- server/api/openchannel_account/index.js | 31 +- .../openchannel_account.controller.js | 553 +- .../openchannel_account.events.js | 37 +- .../openchannel_account.socket.js | 33 +- server/api/openchannel_application/index.js | 16 +- .../openchannel_application.controller.js | 130 +- .../openchannel_application.events.js | 37 +- .../openchannel_application.socket.js | 33 +- server/api/openchannel_disposition/index.js | 17 +- .../openchannel_disposition.controller.js | 111 +- .../openchannel_disposition.events.js | 37 +- .../openchannel_disposition.socket.js | 33 +- server/api/openchannel_message/index.js | 19 +- .../openchannel_message.controller.js | 171 +- .../openchannel_message.events.js | 37 +- .../openchannel_message.socket.js | 48 +- server/api/openchannel_queue/index.js | 23 +- .../openchannel_queue.controller.js | 247 +- .../openchannel_queue/openchannel_queue.events.js | 37 +- .../openchannel_queue/openchannel_queue.socket.js | 33 +- server/api/openchannel_room/index.js | 26 +- .../openchannel_room.controller.js | 400 +- .../openchannel_room/openchannel_room.events.js | 37 +- .../openchannel_room/openchannel_room.socket.js | 34 +- server/api/pause/index.js | 163 +- server/api/pause/pause.controller.js | 151 +- server/api/pause/pause.events.js | 37 +- server/api/pause/pause.socket.js | 29 +- server/api/report_agent/index.js | 14 +- server/api/report_agent/report_agent.controller.js | 108 +- server/api/report_agent/report_agent.events.js | 37 +- server/api/report_agent/report_agent.socket.js | 31 +- server/api/report_call/index.js | 20 +- server/api/report_call/report_call.controller.js | 177 +- server/api/report_call/report_call.events.js | 37 +- server/api/report_call/report_call.socket.js | 29 +- server/api/report_chat/index.js | 15 +- server/api/report_chat/report_chat.controller.js | 164 +- server/api/report_chat/report_chat.events.js | 37 +- server/api/report_chat/report_chat.socket.js | 43 +- server/api/report_chat_session/index.js | 20 +- .../report_chat_session.controller.js | 226 +- .../report_chat_session.events.js | 37 +- .../report_chat_session.socket.js | 103 +- server/api/report_dial/index.js | 15 +- server/api/report_dial/report_dial.controller.js | 117 +- server/api/report_dial/report_dial.events.js | 37 +- server/api/report_dial/report_dial.socket.js | 31 +- server/api/report_fax/index.js | 14 +- server/api/report_fax/report_fax.controller.js | 106 +- server/api/report_fax/report_fax.events.js | 37 +- server/api/report_fax/report_fax.socket.js | 45 +- server/api/report_fax_session/index.js | 16 +- .../report_fax_session.controller.js | 239 +- .../report_fax_session.events.js | 37 +- .../report_fax_session.socket.js | 105 +- server/api/report_integration/index.js | 15 +- .../report_integration.controller.js | 62 +- .../report_integration.events.js | 35 +- .../report_integration.socket.js | 42 +- server/api/report_mail/index.js | 15 +- server/api/report_mail/report_mail.controller.js | 114 +- server/api/report_mail/report_mail.events.js | 37 +- server/api/report_mail/report_mail.socket.js | 47 +- server/api/report_mail_session/index.js | 17 +- .../report_mail_session.controller.js | 156 +- .../report_mail_session.events.js | 37 +- .../report_mail_session.socket.js | 105 +- server/api/report_member/index.js | 13 +- .../api/report_member/report_member.controller.js | 35 +- server/api/report_member/report_member.events.js | 37 +- server/api/report_member/report_member.socket.js | 46 +- server/api/report_openchannel/index.js | 15 +- .../report_openchannel.controller.js | 118 +- .../report_openchannel.events.js | 37 +- .../report_openchannel.socket.js | 46 +- server/api/report_openchannel_session/index.js | 17 +- .../report_openchannel_session.controller.js | 156 +- .../report_openchannel_session.events.js | 37 +- .../report_openchannel_session.socket.js | 91 +- server/api/report_queue/index.js | 28 +- server/api/report_queue/report_queue.controller.js | 624 +- server/api/report_queue/report_queue.events.js | 37 +- server/api/report_queue/report_queue.socket.js | 94 +- server/api/report_sms/index.js | 17 +- server/api/report_sms/report_sms.controller.js | 180 +- server/api/report_sms/report_sms.events.js | 37 +- server/api/report_sms/report_sms.socket.js | 47 +- server/api/report_sms_session/index.js | 17 +- .../report_sms_session.controller.js | 156 +- .../report_sms_session.events.js | 37 +- .../report_sms_session.socket.js | 105 +- server/api/report_square/index.js | 15 +- .../api/report_square/report_square.controller.js | 73 +- server/api/report_square/report_square.events.js | 37 +- server/api/report_square/report_square.socket.js | 45 +- server/api/report_square_detail/index.js | 14 +- .../report_square_detail.controller.js | 45 +- .../report_square_detail.events.js | 37 +- .../report_square_detail.socket.js | 46 +- server/api/report_tiger_dial/index.js | 13 +- .../report_tiger_dial.controller.js | 40 +- .../report_tiger_dial/report_tiger_dial.events.js | 37 +- .../report_tiger_dial/report_tiger_dial.socket.js | 46 +- server/api/report_tree/index.js | 13 +- server/api/report_tree/report_tree.controller.js | 44 +- server/api/report_tree/report_tree.events.js | 37 +- server/api/report_tree/report_tree.socket.js | 33 +- server/api/salesforce_account/index.js | 29 +- .../salesforce_account.controller.js | 520 +- .../salesforce_account.events.js | 37 +- .../salesforce_account.socket.js | 33 +- server/api/salesforce_configuration/index.js | 18 +- .../salesforce_configuration.controller.js | 148 +- .../salesforce_configuration.events.js | 37 +- .../salesforce_configuration.socket.js | 33 +- server/api/salesforce_field/index.js | 18 +- .../salesforce_field.controller.js | 105 +- .../salesforce_field/salesforce_field.events.js | 37 +- .../salesforce_field/salesforce_field.socket.js | 33 +- server/api/scheduler/index.js | 20 +- server/api/scheduler/scheduler.controller.js | 131 +- server/api/scheduler/scheduler.events.js | 37 +- server/api/scheduler/scheduler.socket.js | 33 +- server/api/setting/index.js | 29 +- server/api/setting/setting.controller.js | 418 +- server/api/setting/setting.events.js | 37 +- server/api/setting/setting.socket.js | 33 +- server/api/sms_account/index.js | 32 +- server/api/sms_account/sms_account.controller.js | 678 +- server/api/sms_account/sms_account.events.js | 37 +- server/api/sms_account/sms_account.socket.js | 33 +- server/api/sms_application/index.js | 16 +- .../sms_application/sms_application.controller.js | 131 +- .../api/sms_application/sms_application.events.js | 37 +- .../api/sms_application/sms_application.socket.js | 33 +- server/api/sms_disposition/index.js | 17 +- .../sms_disposition/sms_disposition.controller.js | 96 +- .../api/sms_disposition/sms_disposition.events.js | 37 +- .../api/sms_disposition/sms_disposition.socket.js | 33 +- server/api/sms_message/index.js | 19 +- server/api/sms_message/sms_message.controller.js | 171 +- server/api/sms_message/sms_message.events.js | 37 +- server/api/sms_message/sms_message.socket.js | 48 +- server/api/sms_queue/index.js | 22 +- server/api/sms_queue/sms_queue.controller.js | 243 +- server/api/sms_queue/sms_queue.events.js | 37 +- server/api/sms_queue/sms_queue.socket.js | 33 +- server/api/sms_room/index.js | 27 +- server/api/sms_room/sms_room.controller.js | 400 +- server/api/sms_room/sms_room.events.js | 37 +- server/api/sms_room/sms_room.socket.js | 34 +- server/api/sound/index.js | 18 +- server/api/sound/sound.controller.js | 279 +- server/api/sound/sound.events.js | 37 +- server/api/sound/sound.socket.js | 33 +- server/api/square_odbc/index.js | 18 +- server/api/square_odbc/square_odbc.controller.js | 136 +- server/api/square_odbc/square_odbc.events.js | 37 +- server/api/square_odbc/square_odbc.socket.js | 33 +- server/api/square_project/index.js | 18 +- .../square_project/square_project.controller.js | 134 +- server/api/square_project/square_project.events.js | 37 +- server/api/square_project/square_project.socket.js | 33 +- server/api/square_recording/index.js | 18 +- .../square_recording.controller.js | 184 +- .../square_recording/square_recording.events.js | 37 +- .../square_recording/square_recording.socket.js | 33 +- server/api/sugarcrm_account/index.js | 21 +- .../sugarcrm_account.controller.js | 203 +- .../sugarcrm_account/sugarcrm_account.events.js | 37 +- .../sugarcrm_account/sugarcrm_account.socket.js | 33 +- server/api/sugarcrm_configuration/index.js | 18 +- .../sugarcrm_configuration.controller.js | 146 +- .../sugarcrm_configuration.events.js | 37 +- .../sugarcrm_configuration.socket.js | 33 +- server/api/sugarcrm_field/index.js | 18 +- .../sugarcrm_field/sugarcrm_field.controller.js | 105 +- server/api/sugarcrm_field/sugarcrm_field.events.js | 37 +- server/api/sugarcrm_field/sugarcrm_field.socket.js | 33 +- server/api/tag/index.js | 172 +- server/api/tag/tag.controller.js | 210 +- server/api/tag/tag.events.js | 37 +- server/api/tag/tag.socket.js | 33 +- server/api/team/index.js | 248 +- server/api/team/team.controller.js | 253 +- server/api/team/team.events.js | 37 +- server/api/team/team.socket.js | 33 +- server/api/telephone/index.js | 175 +- server/api/telephone/telephone.controller.js | 158 +- server/api/telephone/telephone.events.js | 37 +- server/api/telephone/telephone.socket.js | 33 +- server/api/template/index.js | 183 +- server/api/template/template.controller.js | 109 +- server/api/template/template.events.js | 37 +- server/api/template/template.socket.js | 33 +- server/api/trigger/index.js | 262 +- server/api/trigger/trigger.controller.js | 217 +- server/api/trigger/trigger.events.js | 37 +- server/api/trigger/trigger.socket.js | 33 +- server/api/trunk/index.js | 227 +- server/api/trunk/trunk.controller.js | 112 +- server/api/trunk/trunk.events.js | 37 +- server/api/trunk/trunk.socket.js | 48 +- server/api/update/index.js | 15 +- server/api/update/update.controller.js | 88 +- server/api/user/index.js | 262 +- server/api/user/user.controller.js | 710 +- server/api/user/user.events.js | 37 +- server/api/user/user.socket.js | 35 +- server/api/user_has_chat_queue/index.js | 16 +- .../user_has_chat_queue.controller.js | 104 +- .../user_has_chat_queue.events.js | 37 +- .../user_has_chat_queue.socket.js | 33 +- .../user_has_chat_queue_permit.events.js | 36 +- .../user_has_chat_queue_permit.socket.js | 35 +- server/api/user_has_chat_room/index.js | 17 +- .../user_has_chat_room.controller.js | 97 +- .../user_has_chat_room.events.js | 37 +- .../user_has_chat_room.socket.js | 61 +- server/api/user_has_fax_queue/index.js | 16 +- .../user_has_fax_queue.controller.js | 104 +- .../user_has_fax_queue.events.js | 37 +- .../user_has_fax_queue.socket.js | 33 +- .../user_has_fax_queue_permit.events.js | 36 +- .../user_has_fax_queue_permit.socket.js | 35 +- server/api/user_has_list/index.js | 16 +- .../api/user_has_list/user_has_list.controller.js | 99 +- server/api/user_has_list/user_has_list.events.js | 37 +- server/api/user_has_list/user_has_list.socket.js | 33 +- server/api/user_has_mail_queue/index.js | 16 +- .../user_has_mail_queue.controller.js | 96 +- .../user_has_mail_queue.events.js | 37 +- .../user_has_mail_queue.socket.js | 33 +- .../user_has_mail_queue_permit.events.js | 36 +- .../user_has_mail_queue_permit.socket.js | 35 +- server/api/user_has_openchannel_queue/index.js | 17 +- .../user_has_openchannel_queue.controller.js | 110 +- .../user_has_openchannel_queue.events.js | 37 +- .../user_has_openchannel_queue.socket.js | 33 +- .../user_has_openchannel_queue_permit.events.js | 36 +- .../user_has_openchannel_queue_permit.socket.js | 35 +- server/api/user_has_sms_queue/index.js | 16 +- .../user_has_sms_queue.controller.js | 104 +- .../user_has_sms_queue.events.js | 37 +- .../user_has_sms_queue.socket.js | 33 +- .../user_has_sms_queue_permit.events.js | 36 +- .../user_has_sms_queue_permit.socket.js | 35 +- server/api/user_has_team/index.js | 16 +- .../api/user_has_team/user_has_team.controller.js | 97 +- server/api/user_has_team/user_has_team.events.js | 37 +- server/api/user_has_team/user_has_team.socket.js | 33 +- server/api/user_has_voice_queue/index.js | 13 +- .../user_has_voice_queue.controller.js | 21 +- .../user_has_voice_queue.events.js | 37 +- .../user_has_voice_queue.socket.js | 59 +- .../user_has_voice_queue_permit.events.js | 36 +- .../user_has_voice_queue_permit.socket.js | 35 +- server/api/variable/index.js | 167 +- server/api/variable/variable.controller.js | 118 +- server/api/variable/variable.events.js | 37 +- server/api/variable/variable.socket.js | 33 +- server/api/voice_context/index.js | 17 +- .../api/voice_context/voice_context.controller.js | 228 +- server/api/voice_context/voice_context.events.js | 37 +- server/api/voice_context/voice_context.socket.js | 33 +- server/api/voice_disposition/index.js | 19 +- .../voice_disposition.controller.js | 113 +- .../voice_disposition/voice_disposition.events.js | 37 +- .../voice_disposition/voice_disposition.socket.js | 33 +- server/api/voice_extension/index.js | 17 +- .../voice_extension/voice_extension.controller.js | 149 +- .../api/voice_extension/voice_extension.events.js | 37 +- .../api/voice_extension/voice_extension.socket.js | 33 +- server/api/voice_musiconhold/index.js | 22 +- .../voice_musiconhold.controller.js | 291 +- .../voice_musiconhold/voice_musiconhold.events.js | 37 +- .../voice_musiconhold/voice_musiconhold.socket.js | 33 +- server/api/voice_queue/index.js | 21 +- server/api/voice_queue/voice_queue.controller.js | 305 +- server/api/voice_queue/voice_queue.events.js | 37 +- server/api/voice_queue/voice_queue.socket.js | 87 +- server/api/voice_recording/index.js | 20 +- .../voice_recording/voice_recording.controller.js | 249 +- .../api/voice_recording/voice_recording.events.js | 37 +- .../api/voice_recording/voice_recording.socket.js | 33 +- server/api/voice_voicemail/index.js | 18 +- .../voice_voicemail/voice_voicemail.controller.js | 191 +- .../api/voice_voicemail/voice_voicemail.events.js | 37 +- .../api/voice_voicemail/voice_voicemail.socket.js | 33 +- server/api/voice_voicemail_messages/index.js | 16 +- .../voice_voicemail_messages.controller.js | 107 +- .../voice_voicemail_messages.events.js | 37 +- .../voice_voicemail_messages.socket.js | 33 +- server/api/widget/index.js | 14 +- server/api/widget/widget.controller.js | 148 +- server/api/xchatty/index.js | 29 +- server/api/xchatty/xchatty.controller.js | 1234 +-- server/api/zendesk_account/index.js | 29 +- .../zendesk_account/zendesk_account.controller.js | 516 +- .../api/zendesk_account/zendesk_account.events.js | 37 +- .../api/zendesk_account/zendesk_account.socket.js | 33 +- server/api/zendesk_configuration/index.js | 17 +- .../zendesk_configuration.controller.js | 182 +- .../zendesk_configuration.events.js | 37 +- .../zendesk_configuration.socket.js | 33 +- server/api/zendesk_field/index.js | 15 +- .../api/zendesk_field/zendesk_field.controller.js | 94 +- server/api/zendesk_field/zendesk_field.events.js | 37 +- server/api/zendesk_field/zendesk_field.socket.js | 33 +- server/app.js | 136 +- server/auth/auth.service.js | 151 +- server/auth/facebook/index.js | 22 +- server/auth/facebook/passport.js | 38 +- server/auth/google/index.js | 25 +- server/auth/google/passport.js | 34 +- server/auth/index.js | 23 +- server/auth/local/index.js | 214 +- server/auth/local/local.ami.js | 52 +- server/auth/local/passport.js | 43 +- server/auth/twitter/index.js | 21 +- server/auth/twitter/passport.js | 36 +- server/config/agi/agi.js | 1850 +-- server/config/agi/index.js | 132 +- server/config/ami/action.js | 783 +- server/config/ami/acw.js | 198 +- server/config/ami/agent.js | 127 +- server/config/ami/ami.js | 370 +- server/config/ami/call.js | 71 +- server/config/ami/cleaner.js | 152 +- server/config/ami/dial.js | 111 +- server/config/ami/fax.js | 655 +- server/config/ami/index.js | 255 +- server/config/ami/member.js | 105 +- server/config/ami/network.js | 92 +- server/config/ami/queue_caller.js | 109 +- server/config/ami/queue_member.js | 100 +- server/config/ami/recording.js | 84 +- server/config/ami/transfer.js | 57 +- server/config/ami/trunk.js | 195 +- server/config/ami/user.js | 111 +- server/config/ami/voice_context.js | 96 +- server/config/analytics.js | 1 + server/config/autodialer/index.js | 126 +- server/config/autodialer/process.js | 27 +- server/config/automations/chat.js | 191 +- server/config/automations/fax.js | 192 +- server/config/automations/mail.js | 192 +- server/config/chat.js | 110 +- server/config/express.js | 81 +- server/config/fax.js | 241 +- server/config/history/history.js | 132 +- server/config/history/reportMove.js | 51 +- server/config/imap/imap.js | 106 +- server/config/imap/index.js | 604 +- server/config/integration.js | 25 +- server/config/integrations/index.js | 88 +- server/config/integrations/motionbar.js | 102 +- server/config/integrations/salesforce.js | 584 +- server/config/integrations/zendesk.js | 638 +- server/config/license/hardware.js | 60 +- server/config/license/index.js | 88 +- server/config/license/license.service.js | 366 +- server/config/local.env.sample.js | 24 +- server/config/logger.js | 121 +- server/config/openchannel/custom.js | 275 +- server/config/openchannel/index.js | 24 +- server/config/routing/agent.js | 119 +- server/config/routing/fidelity.js | 106 +- server/config/routing/queue.js | 302 +- server/config/routing/replyMail.js | 87 +- server/config/routing/scheduler.js | 347 +- server/config/routing/sendMail.js | 83 +- server/config/routing/sendSms.js | 57 +- server/config/routing/structure.js | 141 +- server/config/scheduler/index.js | 104 +- server/config/scheduler/reports.js | 229 +- server/config/seed.js | 4006 +----- server/config/seedp.js | 8018 +--------- server/config/sms/index.js | 24 +- server/config/sms/skebby.js | 111 +- server/config/sms/sms.js | 286 +- server/config/sms/twilio.js | 23 +- server/config/smtp/index.js | 132 +- server/config/smtp/smtp.js | 397 +- server/config/socketio.js | 316 +- server/config/tools/channelSpy.js | 110 +- server/config/tools/chatRoom.js | 105 +- server/config/tools/dashboard.js | 1249 +-- server/config/tools/faxAccount.js | 258 +- server/config/tools/faxRoom.js | 36 +- server/config/tools/index.js | 27 +- server/config/tools/interval.js | 75 +- server/config/tools/mailAccount.js | 41 +- server/config/tools/mailRoom.js | 36 +- server/config/tools/openchannelRoom.js | 27 +- server/config/tools/queueParameters.js | 385 +- server/config/tools/smsRoom.js | 27 +- server/config/tools/system.js | 61 +- server/config/tools/user.js | 220 +- server/config/triggers/chat.js | 142 +- server/config/triggers/cm.js | 26 +- server/config/triggers/index.js | 355 +- server/config/triggers/jscripty.js | 22 +- server/config/triggers/mail.js | 222 +- server/config/triggers/sms.js | 66 +- server/config/triggers/urlForward.js | 76 +- server/config/triggers/util.js | 119 +- server/config/triggers/voice.js | 8 +- server/config/util/error.js | 25 +- server/config/util/index.js | 785 +- .../20160801125118-placeholder.js | 24 +- .../20160916135658-report-session.js | 20 +- .../20160920170835-report_tdial.js | 15 +- .../20161005162141-report_tdial_history.js | 473 +- server/routes.js | 172 +- server/services/dashboard/hooks/index.js | 13 +- server/services/dashboard/hooks/voice.js | 90 +- server/services/dashboard/index.js | 20 +- server/services/dashboard/workers/index.js | 194 +- server/services/dashboard/workers/voice.js | 227 +- server/utils/report_build.js | 547 +- server/utils/report_extraction.js | 300 +- server/utils/voice_extension.js | 322 +- 668 files changed, 761 insertions(+), 111606 deletions(-) delete mode 100644 public/app/4a68e305.app.js create mode 100644 public/app/fc371ddc.app.js diff --git a/public/app/4a68e305.app.js b/public/app/4a68e305.app.js deleted file mode 100644 index ffa2b7c..0000000 --- a/public/app/4a68e305.app.js +++ /dev/null @@ -1,91 +0,0 @@ -"use strict";angular.module("xCallyShuttleApp",["adf","adf.structures.base","adf.widget.clock","adf.widget.iframe","adf.widget.counter","adf.widget.pie-chart","angular-md5","angular.filter","angularFileUpload","ngLetterAvatar","vAccordion","btford.socket-io","chart.js","checklist-model","colorpicker.module","frapontillo.bootstrap-switch","LocalStorageModule","mgo-angular-wizard","ng-slide-down","ngAnimate","ngBootstrap","ngCookies","ngCsv","ngFileSaver","ngJsTree","ngMap","ngPapaParse","ngResource","ngSanitize","notification","oc.lazyLoad","pascalprecht.translate","remoteValidation","smart-table","sprintf","timer","toastr","permission","ui-notification","ui.bootstrap.modal","ui.bootstrap.dropdown","ui.bootstrap.popover","ui.bootstrap.timepicker","ui.bootstrap.tooltip","ui.bootstrap.tpls","ui.bootstrap.accordion","ui.bootstrap.progressbar","ui.bootstrap.buttons","ui.bootstrap.typeahead","ui.grid","ui.grid.autoResize","ui.grid.draggable-rows","ui.grid.exporter","ui.grid.grouping","ui.grid.moveColumns","ui.grid.pagination","ui.grid.treeView","ui.grid.selection","ui.grid.exporter","ui.grid.resizeColumns","ui.router","ui.navbar","ui.select","ui.sortable","xeditable","ngAudio","truncate","ngScrollbars","ngEmoticons","angularSpinner","builder","builder.components","validator","angular-clipboard","ng-code-mirror","angularMoment","jsonFormatter","ui.bootstrap-slider","ui.bootstrap.datepicker","prettyBytes","bootstrapLightbox","rzModule","ckeditor","ngTagsInput","ngJoyRide","adf.widget.linklist"]).constant("CKEDITOR_BASEPATH","assets/plugins/ckeditor/").config(["$stateProvider","$urlRouterProvider","$locationProvider","$httpProvider","$translateProvider","localStorageServiceProvider","dashboardProvider","ScrollBarsProvider","tagsInputConfigProvider",function(a,b,c,d,e,f,g,h,i){i.setActiveInterpolation("tagsInput",{placeholder:!0}),b.otherwise(function(a){var b=a.get("$state");b.go("landing")}),e.useStaticFilesLoader({prefix:"assets/languages/locale-",suffix:".json"}),e.preferredLanguage("en_EN"),e.fallbackLanguage("en_EN"),e.useLocalStorage(),e.useSanitizeValueStrategy(null),c.html5Mode(!0),d.interceptors.push("authInterceptor"),g.structure("4-4-4",{rows:[{columns:[{styleClass:"col-md-4"},{styleClass:"col-md-4"},{styleClass:"col-md-4"}]}]}).structure("3-3-3-3",{rows:[{columns:[{styleClass:"col-md-3"},{styleClass:"col-md-3"},{styleClass:"col-md-3"},{styleClass:"col-md-3"}]}]}),f.setPrefix("motion"),h.defaults={scrollButtons:{scrollAmount:"auto",enable:!0},axis:"y"}}]).factory("authInterceptor",["$rootScope","$q","$cookieStore","$location",function(a,b,c,d){return{request:function(a){return a.headers=a.headers||{},c.get("token")?a.headers.Authorization="Bearer "+c.get("token"):d.path().match(/\/reset\/.[0-9]*/)||d.path("/login"),a}}}]).run(["$rootScope","$location","$state","$stateParams","$window","$q","Auth","RoleStore","editableThemes","editableOptions","License","User","PermissionStore","localStorageService",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n){a.$state=c,a.$stateParams=d,i.bs3.inputClass="input-sm",i.bs3.buttonsClass="btn-xs",j.theme="bs3",a.$on("$stateChangeStart",function(a,c){g.isLoggedInAsync(function(a){!c.authenticate||a||b.path().match(/\/reset\/.[0-9]*/)||b.path("/login")})}),a.updateTableConfig=function(a,b){var c=_.find(a,{name:"All"});c&&(c.value=b)},a.settings={patternName:"[A-Za-z0-9._\\+*!\\-\\[\\]]+",patternPassword:"^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[~!@#$%^&\\-_=+\\[\\{\\]\\}.])[0-9a-zA-Z~!@#$%^&\\-_=+\\[\\{\\]\\}.]{8,}$",patternPasswordLight:"^[a-zA-Z0-9~!@#$%^&\\-_=+\\[\\{\\]\\}.]{6,}$",patternGateway:"^(?:yes|no|[0-9]+)$",patternFaxdetect:"^(?:yes|no|t38|cng|[0-9]+)$",layout:{pageSidebarClosed:n.get("sidebarClosed")||!1,pageQuickSidebarOpened:!1,pageBodySolid:!1,pageAutoScrollOnLoad:1e3}},k.get().$promise.then(function(b){a.license=b.license,a.settings.soundPath=b.soundPath||"/var/opt/motion/server/files/sounds/converted",a.settings.logo=b.logo,a.settings.defaultLogo=b.defaultLogo,a.settings.loginLogo=b.loginLogo,a.settings.defaultLoginLogo=b.defaultLoginLogo,a.settings.footerWhiteLabel=b.footerWhiteLabel,a.settings.defaultFooterWhiteLabel=b.defaultFooterWhiteLabel,m.definePermission("hasCm",function(){return a.license.cm}),m.definePermission("hasChat",function(){return a.license.chat}),m.definePermission("hasMail",function(){return a.license.mail}),m.definePermission("hasFax",function(){return a.license.fax}),m.definePermission("hasSms",function(){return a.license.messaging}),m.definePermission("hasDialer",function(){return a.license.dialer}),m.definePermission("hasJscripty",function(){return a.license.jscripty}),m.definePermission("hasUpdate",function(){return a.license.update}),m.definePermission("hasCustom",function(){return a.license.custom}),m.definePermission("hasOpenChannel",function(){return a.license.openchannel})})["catch"](function(a){console.log(a)}),m.definePermission("agent",function(){return g.isAgent()}),m.definePermission("admin",function(){return g.isAdmin()}),m.definePermission("user",function(a,b){var c=f.defer(),d=g.getCurrentUser().$promise;return d?d.then(function(a){_.includes(_.map(a.Modules,"id"),b.toState.data.permissions.id)&&"user"===a.role?c.resolve():c.reject()})["catch"](function(){c.reject()}):c.resolve(),c.promise})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.analytics",{url:"/analytics",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:17}}})}]),angular.module("xCallyShuttleApp").factory("Extracted",["$resource",function(a){return a("/api/analytics/extracted/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.analytics.extracted",{url:"/extracted",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("AnalyticExtractedListCtrl",["$scope","$translate","gridOptions","Extracted","uiGridConstants",function(a,b,c,d,e){a.moment=moment,a.Extracted=d,a.initView=function(){var b={exporterCsvFilename:"ExtractedReports.csv",columnDefs:[{name:"name"},{name:"startDate",displayName:"APPLICATION_START_DATE",filterHeaderTemplate:'<div class="ui-grid-filter-container row"><div ng-repeat="colFilter in col.filters" class="col-md-6 col-md-offset-0 col-sm-5 col-sm-offset-0 col-xs-5 col-xs-offset-0"><div custom-grid-date-filter-header></div></div></div>',filters:[{name:"From",condition:e.filter.GREATER_THAN_OR_EQUAL,hasTime:!0},{name:"To",condition:e.filter.LESS_THAN_OR_EQUAL,hasTime:!0}],sort:{direction:e.DESC,priority:0}},{name:"endDate",displayName:"APPLICATION_END_DATE",filterHeaderTemplate:'<div class="ui-grid-filter-container row"><div ng-repeat="colFilter in col.filters" class="col-md-6 col-md-offset-0 col-sm-5 col-sm-offset-0 col-xs-5 col-xs-offset-0"><div custom-grid-date-filter-header></div></div></div>',filters:[{name:"From",condition:e.filter.GREATER_THAN_OR_EQUAL,hasTime:!0},{name:"To",condition:e.filter.LESS_THAN_OR_EQUAL,hasTime:!0}]},{name:"createdAt",displayName:"APPLICATION_RUN_DATE",filterHeaderTemplate:'<div class="ui-grid-filter-container row"><div ng-repeat="colFilter in col.filters" class="col-md-6 col-md-offset-0 col-sm-5 col-sm-offset-0 col-xs-5 col-xs-offset-0"><div custom-grid-date-filter-header></div></div></div>',filters:[{name:"From",condition:e.filter.GREATER_THAN_OR_EQUAL,hasTime:!0},{name:"To",condition:e.filter.LESS_THAN_OR_EQUAL,hasTime:!0}]},{name:"output"},{name:"type"},{name:"status"},{name:"action",width:140,buttons:[{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"},{directive:"<motion-file-download data-ng-show=\"row.entity.status == 'completed'\" resource=\"grid.appScope.Extracted\" params=\"{id:row.entity.id,controller:'download'}\" mimetype=\"'application/'+row.entity.output.toLowerCase()\" filename=\"row.entity.name+'_'+row.entity.startDate.toString()+'_'+row.entity.endDate.toString()+'.'+row.entity.output.toLowerCase()\"></motion-file-download>"}]}]};a.gridOptions=c.gridOptions(d,b,a)}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.analytics.extracted.list",{url:"/list",templateUrl:"app/analytic/extracted/list/list.html",controller:"AnalyticExtractedListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"smart-table",insertBefore:"#ng_load_plugins_before",files:["assets/css/smart_table.css"]}])}]}})}]),angular.module("xCallyShuttleApp").factory("DefaultMetric",["$resource",function(a){return a("/api/analytics/metrics/default/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("AnalyticMetricListCreateModalCtrl",["$scope","$uibModalInstance","Metric","xAlert","$translate","report",function(a,b,c,d,e,f){a.forms={dashboard:void 0},a.item={},a.tables=f.tables,a.ok=function(){return c.save(a.item).$promise.then(function(){b.close()})["catch"](function(a){d.error(a)})},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("AnalyticMetricListCtrl",["$scope","xAlert","Modal","$uibModal","$log","gridOptions","Metric","DefaultMetric","$translate",function(a,b,c,d,e,f,g,h,i){a.$translate=i,a.initView=function(){var b={exporterCsvFilename:"Metrics.csv",columnDefs:[{name:"name"},{name:"table",cellTemplate:"<div style=\"padding:5px\">{{'APPLICATION_'+row.entity.table.toUpperCase() | translate}}</div>"},{name:"description"},{name:"action",width:125,buttons:[{"class":"blue-hoki",href:"/analytics/metrics/view/{{row.entity.id}}/settings",name:"settings"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=f.gridOptions(g,b,a)},a.showMetric=function(a){d.open({animation:!0,templateUrl:"app/analytic/metric/list/view.modal.html",controller:"AnalyticMetricListViewModalCtrl",resolve:{metric:a}})},a.cloneMetric=function(c){return h.get({id:c,controller:"clone"}).$promise.then(function(){b.show(i.instant("MESSAGE_WELL_DONE"),"success"),a.gridOptions.getPage()})["catch"](function(a){b.error(a)})},a.create=function(){var c=d.open({animation:!0,templateUrl:"app/analytic/metric/list/create.modal.html",controller:"AnalyticMetricListCreateModalCtrl"});c.result.then(function(){b.show(i.instant("MESSAGE_WELL_DONE")+"!","success"),a.gridOptions.getPage()},function(){e.info("Modal dismissed at: "+new Date)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.analytics.metrics.list",{url:"/list",templateUrl:"app/analytic/metric/list/list.html",controller:"AnalyticMetricListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"smart-table",insertBefore:"#ng_load_plugins_before",files:["assets/css/smart_table.css"]}])}]}})}]),angular.module("xCallyShuttleApp").controller("AnalyticMetricListViewModalCtrl",["$scope","$uibModalInstance","metric","xAlert","$translate","report",function(a,b,c,d,e,f){a.item=c,a.tables=f.tables,a.close=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").factory("Metric",["$resource",function(a){return a("/api/analytics/metrics/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.analytics.metrics",{url:"/metrics",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("AnalyticMetricViewCtrl",["$scope","xAlert","$translate","$stateParams","$location","Metric","report",function(a,b,c,d,e,f,g){a.tables=g.tables,a.getMetric=function(){return f.get({id:d.id}).$promise.then(function(b){a.metric=b})["catch"](function(a){e.path("/analytics/metrics/list")})},a.updateMetric=function(){return f.update({id:d.id},a.metric).$promise.then(function(){b.show(c.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){b.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.analytics.metrics.view",{url:"/view/:id",templateUrl:"app/analytic/metric/view/view.html",controller:"AnalyticMetricViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.analytics.metrics.view.settings",{url:"/settings",templateUrl:"app/analytic/metric/view/view.settings.html"})}]),angular.module("xCallyShuttleApp").factory("CustomReport",["$resource",function(a){return a("/api/analytics/reports/custom/:precontroller/:id/:controller/:action",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("DefaultReport",["$resource",function(a){return a("/api/analytics/reports/default/:id/:controller/:action",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("ReportListCopyModalCtrl",["$scope","$uibModalInstance","$log","customTreeData",function(a,b,c,d){a.customTreeData=d,a.forms={dashboard:void 0},a.customTreeConfig={multiple:!1,animation:!0,core:{error:function(a){c.error("treeCtrl: error from js tree - "+angular.toJson(a))},check_callback:!0}},a.ac=function(){return!0},a.initCustomScopeTree=function(){a.customTree=a.customTreeInstance.jstree(!0),a.customTree.deselect_all(),a.customTree.open_all()},a.ok=function(){a.customTree.get_selected(!0).length?b.close({parent:a.customTree.get_selected(!0).pop().id}):a.showAlert=!0},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("ReportListCreateModalCtrl",["$scope","$uibModalInstance","path",function(a,b,c){a.path=c,a.forms={dashboard:void 0},a.item={},a.ok=function(){a.item.model=JSON.stringify({title:a.item.name}),b.close(a.item)},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("ReportListExtractModalCtrl",["$scope","$uibModalInstance","$translate",function(a,b,c){a.daily=!1,a.dailySwitch={onText:c.instant("APPLICATION_TODAY"),offText:c.instant("APPLICATION_RANGE"),isActive:!0,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"primary"},a.dates={startDate:moment().subtract(1,"days").startOf("day"),endDate:moment().subtract(1,"days").endOf("day")},a.ranges={},a.ranges[c.instant("APPLICATION_YESTERDAY")]=[moment().subtract(1,"days").startOf("day"),moment().subtract(1,"days").endOf("day")],a.ranges[c.instant("APPLICATION_LAST_SEVEN_DAYS")]=[moment().subtract("days",7).startOf("day"),moment().subtract(1,"days").endOf("day")],a.ranges[c.instant("APPLICATION_LAST_THIRTY_DAYS")]=[moment().subtract("days",30),moment()],a.ranges[c.instant("APPLICATION_LAST_MONTH")]=[moment().subtract(1,"months").startOf("month"),moment().subtract(1,"months").endOf("month")],a.timepicker={timePickerIncrement:1,timePicker12Hour:!1},a.dailyTime={start:moment("00:00","HH:mm"),end:moment("23:59","HH:mm")},a.maxdate=moment().subtract(1,"days").endOf("day").format("YYYY-MM-DD HH:mm"),a.extract=function(c){var d={startDate:moment(a.dates.startDate).format("YYYY-MM-DD"),endDate:moment(a.dates.endDate).format("YYYY-MM-DD"),startTime:a.daily?moment(a.dailyTime.start).format("HH:mm"):moment(a.dates.startDate).format("HH:mm"),endTime:a.daily?moment(a.dailyTime.end).format("HH:mm"):moment(a.dates.endDate).format("HH:mm"),daily:a.daily,action:c};b.close(d)},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("AnalyticReportListCtrl",["$scope","xAlert","$translate","$location","$log","Modal","$uibModal","FileSaver","Blob","gridOptions","CustomReport","DefaultReport","ReportTree","localStorageService",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n){function o(){var b=n.get("lastMotionReportNode")||!1,c=n.get("lastMotionReportTree")||!1;return b&&c?(a[c+"Tree"].open_node({id:b}),a[c+"Tree"].select_node({id:b}),!0):!1}function p(b,c){var d={parent:c.id};a.selectedNode=b?a.defaultTree.get_path(c," / "):a.customTree.get_path(c," / "),a.gridOptions?a.gridOptions.getPage({parent:c.id},b?l:k):a.gridOptions=j.gridOptions(b?l:k,q,a,d)}var q={exporterCsvFilename:"reports.csv",columnDefs:[{name:"name"},{name:"description"},{name:"manage",width:120,buttons:[{"class":"{{grid.appScope.defaultTreeActive ? 'display-none' : 'blue-hoki'}}",href:"/analytics/reports/view/{{row.entity.id}}/settings",title:c.instant("APPLICATION_SETTINGS"),name:"settings"},{"class":"{{grid.appScope.defaultTreeActive ? 'display-none' : 'red-sunglo'}}",title:c.instant("APPLICATION_DELETE"),name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"},{"class":"green",title:c.instant("APPLICATION_COPY"),name:"copy",onClick:"grid.appScope.copy(row.entity.id)"},{"class":"purple",title:c.instant("APPLICATION_EXPORT"),name:"export",onClick:"grid.appScope.export(row.entity.id)"}]},{name:"actions",width:60,buttons:[{"class":"yellow",name:"preview",title:c.instant("APPLICATION_PREVIEW"),onClick:"grid.appScope.preview(row.entity.id)"},{"class":"green-turquoise",name:"run",title:c.instant("APPLICATION_RUN"),onClick:"grid.appScope.extract(row.entity.id)"}]}]};a.searchField="",a.ac=function(){return!0},a.initDefaultScopeTree=function(){a.defaultTree=a.defaultTreeInstance.jstree(!0),a.defaultTree.deselect_all(),a.defaultTree.close_all(),a.defaultTreeReady=!0,a.defaultTreeActive=!0,a.previousDefaultNode=""},a.initCustomScopeTree=function(){a.customTree=a.customTreeInstance.jstree(!0),a.customTree.deselect_all(),a.customTree.close_all(),a.customTreeReady=!0,a.previousCustomNode=""},a.$watchGroup(["defaultTreeReady","customTreeReady"],function(b,c,d){b[0]&&b[1]&&(o()||(a.defaultTree.open_node({id:1}),a.customTree.open_node({id:1}),a.defaultTree.select_node({id:"1"})))}),a.updateCustomTree=function(){var c={tree:angular.toJson(a.customTree.get_json("#",{flat:!0}))};return m.update({id:2},c).$promise.then(function(a){console.log("Custom Tree Updated")})["catch"](function(a){b.error(a)})},a.configTrees=function(){a.defaultTreeConfig={multiple:!1,animation:!0,core:{error:function(a){e.error("treeCtrl: error from js tree - "+angular.toJson(a))},check_callback:!0,themes:{name:"default",url:"../../../assets/css/jstree-metronic/style.css"}},plugins:["search"]},a.customTreeConfig={multiple:!1,animation:!0,core:{error:function(a){e.error("treeCtrl: error from js tree - "+angular.toJson(a))},check_callback:function(a,b,c,d,e){return console.log(a),!0},themes:{name:"default",url:"../../../assets/css/jstree-metronic/style.css"}},plugins:["contextmenu","dnd","search"],contextmenu:{items:function(b,d){var e={create:{label:c.instant("APPLICATION_CREATE"),action:function(c){a.customTree.create_node(b),a.customTree.open_node(b)}},rename:{label:c.instant("APPLICATION_RENAME"),action:function(c){a.customTree.edit(b)}},remove:{label:c.instant("APPLICATION_REMOVE"),action:function(c){a.deleteNode(b)}}};return"#"===b.parent&&(delete e.rename,delete e.remove),d(e),e}}}},a.deleteNode=function(d){var f=g.open({animation:!0,templateUrl:"app/analytic/report/list/deleteNode.modal.html",controller:["$scope","$uibModalInstance","node",function(a,b,c){a.node=c,a.ok=function(){b.close()},a.cancel=function(){b.dismiss("cancel")}}],resolve:{node:function(){return d.text}}});f.result.then(function(){return k["delete"]({precontroller:"node",id:d.id}).$promise.then(function(){b.show(c.instant("MESSAGE_WELL_DONE"),"success"),a.customTree.delete_node(d),a.previousCustomNode==d.id&&a.customTree.select_node({id:d.parent})})["catch"](function(a){b.error(a)})},function(){e.info("Modal dismissed at: "+new Date)})},a.searchTrees=function(){a.defaultTree.search(a.searchField),a.customTree.search(a.searchField)},a.selectDefaultNode=function(){if(a.customTreeReady){a.previousCustomNode="";var b=a.defaultTree.get_selected(!0),c=b.pop();if(a.defaultTree.deselect_node(b[0],!0),a.customTree.deselect_all(),a.defaultTree.select_node(c,!0),c.id===a.previousDefaultNode)return void console.log("def");a.previousDefaultNode=c.id,n.set("lastMotionReportNode",c.id),n.set("lastMotionReportTree","default"),a.defaultTreeActive=!0,p(!0,c)}},a.selectCustomNode=function(){if(a.defaultTreeReady){a.previousDefaultNode="";var b=a.customTree.get_selected(!0),c=b.pop();if(a.customTree.deselect_node(b[0],!0),a.defaultTree.deselect_all(),a.customTree.select_node(c,!0),c.id===a.previousCustomNode)return void console.log("cus");a.previousCustomNode=c.id,n.set("lastMotionReportNode",c.id),n.set("lastMotionReportTree","custom"),a.defaultTreeActive=!1,p(!1,c)}},a.getTrees=function(){return m.query().$promise.then(function(b){a.defaultTreeData=JSON.parse(b[0].tree),a.customTreeData=JSON.parse(b[1].tree),a.configTrees()})["catch"](function(a){b.error(a)})},a.create=function(){var c=g.open({animation:!0,templateUrl:"app/analytic/report/list/create.modal.html",controller:"ReportListCreateModalCtrl",resolve:{path:function(){return a.selectedNode}}});c.result.then(function(c){return c.parent=a.previousCustomNode,k.save(c).$promise.then(function(a){d.path("/analytics/reports/view/"+a.id+"/settings")})["catch"](function(a){b.error(a)})},function(){e.info("Modal dismissed at: "+new Date)})},a.copy=function(d){var f=a.defaultTreeActive?l:k,h=g.open({animation:!0,templateUrl:"app/analytic/report/list/copy.modal.html",controller:"ReportListCopyModalCtrl",resolve:{customTreeData:function(){return a.customTree.get_json("#",{flat:!0})}}});h.result.then(function(e){return f.save({id:d,controller:"copy"},e).$promise.then(function(){a.gridOptions.getPage(),b.show(c.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){b.error(a)})},function(){e.info("Modal dismissed at: "+new Date)})},a["export"]=function(c){var d=a.defaultTreeActive?l:k;return d.get({id:c,controller:"export"}).$promise.then(function(a){var b=new i([angular.toJson(a)],{type:"application/json;charset=utf-8"});h.saveAs(b,a.name+".json")})["catch"](function(a){b.error(a)})},a["import"]=function(d){var e=JSON.parse(d);e.parent=a.previousCustomNode;var f=!(!e.name||!e.parent),g=!0;return _.forEach(e.Fields,function(a){a.field&&a.alias||(g=!1)}),f&&g?k.save({controller:"import"},e).$promise.then(function(){a.gridOptions.getPage(),b.show(c.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){b.error(a)}):void b.show(c.instant("MESSAGE_INVALID_JSON"),"danger")},a.preview=function(b){g.open({animation:!0,templateUrl:"app/analytic/report/list/preview.modal.html",controller:"ReportListPreviewModalCtrl",size:"full",resolve:{report:function(){return{id:b,tree:a.defaultTreeActive?"default":"custom"}}}})},a.extract=function(d){var f=g.open({animation:!0,templateUrl:"app/analytic/report/list/extract.modal.html",controller:"ReportListExtractModalCtrl",size:"md",resolve:{report:function(){return{id:d,tree:a.defaultTreeActive?"default":"custom"}}}});f.result.then(function(e){e.daily||delete e.daily;var f=a.defaultTreeActive?l:k;return f.get(_.merge({id:d,controller:"extract"},e)).$promise.then(function(){b.show(c.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){b.error(a)})},function(){e.info("Modal dismissed at: "+new Date)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.analytics.reports.list",{url:"/list",templateUrl:"app/analytic/report/list/list.html",controller:"AnalyticReportListCtrl"})}]),angular.module("xCallyShuttleApp").controller("ReportListPreviewModalCtrl",["$scope","$uibModalInstance","report","xAlert","$translate","$timeout","CustomReport","DefaultReport",function(a,b,c,d,e,f,g,h){a.daily=!1,a.dailySwitch={onText:e.instant("APPLICATION_TODAY"),offText:e.instant("APPLICATION_RANGE"),isActive:!0,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"primary"},a.dates={startDate:moment().subtract(1,"days").startOf("day"),endDate:moment().subtract(1,"days").endOf("day")},a.ranges={},a.ranges[e.instant("APPLICATION_YESTERDAY")]=[moment().subtract(1,"days").startOf("day"),moment().subtract(1,"days").endOf("day")],a.ranges[e.instant("APPLICATION_LAST_SEVEN_DAYS")]=[moment().subtract("days",7).startOf("day"),moment().subtract(1,"days").endOf("day")],a.ranges[e.instant("APPLICATION_LAST_THIRTY_DAYS")]=[moment().subtract("days",30),moment()],a.ranges[e.instant("APPLICATION_LAST_MONTH")]=[moment().subtract(1,"months").startOf("month"),moment().subtract(1,"months").endOf("month")],a.timepicker={timePickerIncrement:1,timePicker12Hour:!1},a.dailyTime={start:moment("00:00","HH:mm"),end:moment("23:59","HH:mm")},a.maxdate=moment().subtract(1,"days").endOf("day").format("YYYY-MM-DD HH:mm");var i={offset:0,limit:25,sort:null,where:{},order:{}};a.gridOptions={paginationPageSizes:[10,25,50],paginationPageSize:25,useExternalPagination:!0,enableSorting:!1,enableFiltering:!0,useExternalFiltering:!0,enableGrouping:!1,enableColumnMenus:!1,treeRowHeaderAlwaysVisible:!1,gridMenuShowHideColumns:!1,enableGridMenu:!1,onRegisterApi:function(b){a.gridApi=b,b.pagination.on.paginationChanged(a,function(b,c){i.offset=(b-1)*c,i.limit=c,a.getPage()}),b.core.on.filterChanged(a,function(){var b=this.grid,c={};b.columns.forEach(function(a){a.filters[0].term&&(c[a.field]=a.filters[0].term)}),i.where=c,a.getPage()})}},a.getPage=function(){var b={offset:i.offset,limit:i.limit,startDate:moment(a.dates.startDate).format("YYYY-MM-DD"),endDate:moment(a.dates.endDate).format("YYYY-MM-DD"),startTime:a.daily?moment(a.dailyTime.start).format("HH:mm"):moment(a.dates.startDate).format("HH:mm"),endTime:a.daily?moment(a.dailyTime.end).format("HH:mm"):moment(a.dates.endDate).format("HH:mm"),daily:a.daily};_.forOwn(i.where,function(a,c){b[c]=a});var e="custom"===c.tree?g:h;return e.get(_.merge({id:c.id,controller:"preview"},b)).$promise.then(function(b){a.gridOptions.totalItems=b.count,a.gridOptions.paginationPageSizes[3]=b.count,a.gridOptions.data=b.rows,a.showResult=!0})["catch"](function(a){d.error(a)})},a.cancel=function(){b.dismiss("cancel")},f(function(){a.getPage()})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.analytics.reports",{url:"/reports",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").factory("ReportAgent",["$resource",function(a){return a("/api/report/agents/:id/:controller",{name:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("ReportIntegration",["$resource",function(a){return a("/api/report/integrations/:id/:controller",{name:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("ReportMember",["$resource",function(a){return a("/api/report/members/:id/:controller",{name:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("ReportTree",["$resource",function(a){return a("/api/analytics/reports/trees/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("AnalyticReportViewCtrl",["$scope","xAlert","$translate","$stateParams","$location","ReportAgent","ReportCall","ReportMailSession","ReportSmsSession","ReportMember","ReportQueue","ReportIntegration","ReportChatSession","DefaultReport","CustomReport","Metric","report",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){function r(c){var d=_.find(a.tables,{value:c}).resource;d.get({controller:"describe"}).$promise.then(function(b){a.tableFields=_.map(b,function(a,b){return"$promise"!==b&&"$resolved"!==b?{name:b,value:b}:void 0})})["catch"](function(a){b.error(a)})["finally"](function(){s(c)})}function s(c){return p.get({controller:"table",table:c}).$promise.then(function(b){_.forEach(b.rows,function(b){a.tableFields.push({name:"<strong>Metric.</strong>"+b.name,alias:b.name,value:b.metric,MetricId:b.id})})})["catch"](function(a){b.error(a)})}function t(a){return String(a).replace(/</g,"<").replace(/>/g,">")}function u(a){if(!a)return"";for(var b="(",c=0;c<a.rules.length;c++)if(c>0&&(b+=" <strong>"+a.operator+"</strong> "),a.rules[c].group)b+=u(a.rules[c].group);else switch(b+=a.rules[c].field,a.rules[c].condition){case"IS NULL":case"IS NOT NULL":b+=" "+t(a.rules[c].condition);break;case"IS EMPTY":b+=" = ''";break;case"IS NOT EMPTY":b+=" != ''";break;default:b+=" "+t(a.rules[c].condition)+" "+a.rules[c].value}return b+")"}a.$translate=c,a.tempReport={},a.tables=q.tables;var v={group:{operator:"AND",rules:[]}};a.getReport=function(){return a.firstLoad=!0,o.get({id:d.id}).$promise.then(function(b){a.report=b,_.forEach(a.report.Fields,function(a){delete a.id}),a.report.conditions=a.report.conditions?JSON.parse(a.report.conditions):_.clone(v,!0),a.report.Fields.length&&a.getPreview()})["catch"](function(a){console.error(a),e.path("/analytics/reports/list")})},a.randomName=function(a,b){var c=[];for(a=a||5,b=b||"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";--a;)c.push(b.charAt(Math.floor(Math.random()*b.length)));return c.join("")},a.$watch("report.table",function(b,c){b&&(r(b),c&&(a.tempReport[c]={conditions:a.report.conditions,fields:a.report.Fields}),a.firstLoad?a.firstLoad=!1:a.tempReport[b]?(a.report.Fields=a.tempReport[b].fields,a.report.conditions=a.tempReport[b].conditions):(a.report.Fields=[],a.report.conditions=_.clone(v,!0)))},!0),a.setMetricId=function(b,c){a.report.Fields[c].MetricId=b.MetricId?b.MetricId:null,a.report.Fields[c].alias=b.MetricId?b.alias:b.name},a.groupByField=[{name:"APPLICATION_YES",value:!0},{name:"APPLICATION_NO",value:!1}],a.functions=[{name:"Sum",value:"SUM"},{name:"Count",value:"COUNT"},{name:"Count Distinct",value:"COUNT DISTINCT"},{name:"Maximum",value:"MAX"},{name:"Minimum",value:"MIN"},{name:"Average",value:"AVG"},{name:"Group Concat",value:"GROUP_CONCAT"},{name:"Group Concat(asc)",value:"GROUP_CONCAT ASC"},{name:"Group Concat(desc)",value:"GROUP_CONCAT DESC"}],a.formatFunctions=[{name:"Sec To Time",value:"SEC_TO_TIME"},{name:"Date",value:"DATE"},{name:"Hour",value:"HOUR"},{name:"Round",value:"ROUND"},{name:"Unix TimeStamp",value:"UNIX_TIMESTAMP"}],a.addField=function(){a.report.Fields.push({groupBy:!1,custom:!1})},a.removeField=function(b){a.report.Fields.splice(b,1)},a.sortableOptions={"ui-floating":!0,cancel:".unsortable",handle:".report-field-handle",axis:"y"},a.toggleCustom=function(b){b.custom=!b.custom,b.custom||_.find(a.tableFields,{value:b.field})||(b.field=null)},a.updateReport=function(){if(a.report.Fields.length){var e=angular.copy(a.report);return console.log(e.conditions),e.conditions=angular.toJson(e.conditions),_.forEach(e.Fields,function(a){a.custom&&delete a.MetricId}),o.update({id:d.id},e).$promise.then(function(){b.show(c.instant("MESSAGE_WELL_DONE")+"!","success"),a.getPreview()})["catch"](function(a){b.error(a)})}b.show(c.instant("MESSAGE_SELECT_A_FIELD"),"danger")},a.$watch("report.conditions",function(b){a.output=b?u(b.group):"()"},!0),a.getPreview=function(){return a.gridOptions=null,o.get({id:d.id,controller:"preview",limit:20}).$promise.then(function(b){a.gridOptions={enableFiltering:!0,treeRowHeaderAlwaysVisible:!1,enableGridMenu:!0,data:b.rows}})["catch"](function(a){console.log(a),b.show(c.instant(a.message||"MESSAGE_QUERY_NOT_VALID"),"warning")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.analytics.reports.view",{url:"/view/:id",templateUrl:"app/analytic/report/view/view.html",controller:"AnalyticReportViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.analytics.reports.view.settings",{url:"/settings",templateUrl:"app/analytic/report/view/view.settings.html"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels",{url:"/channels",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user","agent"],redirectTo:"landing",id:6}}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat",{url:"/chat",template:"<div ui-view></div>", -"abstract":!0,data:{permissions:{only:["admin","user","agent"],redirectTo:"landing",id:8}}})}]),angular.module("xCallyShuttleApp").factory("ChatEnquiry",["$resource",function(a){return a("/api/chat/enquiries/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("ChatReport",["$resource",function(a){return a("/api/report/chats/:id/:controller1/:controller2",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("ChatVisitor",["$resource",function(a){return a("/api/chat/visitors/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("ChatMessage",["$resource",function(a){return a("/api/chat/messages/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("ChatRoom",["$resource",function(a){return a("/api/chat/rooms/:id/:controller",{id:"@id"},{me:{method:"GET",isArray:!0,params:{id:"me"}},users:{method:"GET",params:{id:"users"}},externals:{method:"GET",isArray:!0,params:{id:"type",controller:"external"}},groups:{method:"GET",isArray:!0,params:{id:"groups"}},update:{method:"PUT"},patch:{method:"PATCH"}})}]),angular.module("xCallyShuttleApp").controller("ChatOfflineListCtrl",["$scope","ChatEnquiry","gridOptions","uiGridConstants",function(a,b,c,d){a.initView=function(){var e={exporterCsvFilename:"chat_offline_messages.csv",columnDefs:[{name:"username",cellClass:"text-center"},{name:"email",cellClass:"text-center"},{name:"ChatWebsite.name",displayName:"Website",cellClass:"text-center"},{name:"createdAt",displayName:"createdAt",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div><span am-time-ago="row.entity.createdAt"></span></div>',field:"createdAt",sort:{direction:d.DESC,priority:0}},{name:"action",width:75,buttons:[{"class":"blue-hoki",href:"/channels/chat/offline/view/{{row.entity.id}}",name:"detail"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.fullname, row.entity.id)"}]}]};a.gridOptions=c.gridOptions(b,e,a)}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.offline.list",{url:"/list",templateUrl:"app/channels/chat/offline/list/list.html",controller:"ChatOfflineListCtrl"})}]),angular.module("xCallyShuttleApp").directive("enquiryMessage",["$rootScope","$translate","MailMessage","List","xAlert",function(a,b,c,d,e){return{restrict:"E",scope:{message:"=",listId:"="},templateUrl:"app/channels/chat/offline/message/message.directive.html",link:function(c){c.openContact=function(f){return c.listId?d.save({listId:c.listId,controller:"contacts"},{email:f}).$promise.then(function(b){var c=_.find(a.$root.workspaces,{contactID:b.id});c?c.active=!0:a.$root.workspaces.push({active:!0,"class":"icon-user",contactID:b.id,name:b.email,type:"contact"})})["catch"](function(a){e.error(a)}):void e.show(b.instant("MESSAGE_NO_LIST_CONFIGURED"),"info")}}}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.offline",{url:"/offline",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:32}}})}]),angular.module("xCallyShuttleApp").controller("ChatOfflineViewCtrl",["$scope","$stateParams","$translate","$rootScope","ChatEnquiry","List","xAlert",function(a,b,c,d,e,f,g){a.initView=function(){return e.get({id:b.id}).$promise.then(function(b){a.enquiry=b})["catch"](function(a){g.error(a)})},a.openContact=function(b){return a.enquiry.ChatWebsite.ListId?f.save({listId:a.enquiry.ChatWebsite.ListId,controller:"contacts"},{email:b}).$promise.then(function(a){var b=_.find(d.$root.workspaces,{contactID:a.id});b?b.active=!0:d.$root.workspaces.push({active:!0,"class":"icon-user",contactID:a.id,name:a.email,type:"contact"})})["catch"](function(a){g.error(a)}):void g.show(c.instant("MESSAGE_NO_LIST_CONFIGURED"),"info")}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.offline.view",{url:"/view/:id",templateUrl:"app/channels/chat/offline/view/view.html",controller:"ChatOfflineViewCtrl"})}]),angular.module("xCallyShuttleApp").controller("ChatOnlineListCtrl",["$scope","ChatRoom","gridOptions",function(a,b,c){a.initView=function(){var d={exporterCsvFilename:"chat_online_messages.csv",columnDefs:[{name:"ChatVisitor.fullname",displayName:"APPLICATION_FULLNAME",cellClass:"text-center"},{name:"ChatVisitor.email",displayName:"APPLICATION_EMAIL",cellClass:"text-center"},{name:"action",width:100,buttons:[{"class":"blue-hoki",href:"/channels/chat/online/view/{{row.entity.id}}/detail",name:"detail"}]}]};a.gridOptions=c.gridOptions(b,d,a,{id:"online"})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.online.list",{url:"/list",templateUrl:"app/channels/chat/online/list/list.html",controller:"ChatOnlineListCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.online",{url:"/online",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:8}}})}]),angular.module("xCallyShuttleApp").controller("ChatOnlineViewCtrl",["$scope","$stateParams","ChatRoom",function(a,b,c){a.initView=function(){return a.config={autoHideScrollbar:!1,theme:"light",advanced:{updateOnContentResize:!0},setHeight:400,scrollInertia:0},c.get({id:b.id}).$promise.then(function(b){a.chatRoom=b})["catch"](function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.online.view",{url:"/view/:id",templateUrl:"app/channels/chat/online/view/view.html",controller:"ChatOnlineViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.channels.chat.online.view.detail",{url:"/detail",templateUrl:"app/channels/chat/online/view/view.detail.html",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/news.css"]}])}]}})}]),angular.module("xCallyShuttleApp").controller("PreviewCtrl",["$scope",function(a){a.message="Hello"}]),angular.module("xCallyShuttleApp").directive("preview",["$rootScope",function(a){return{templateUrl:"app/channels/chat/preview/preview.html",restrict:"EA",link:function(a,b,c){}}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("preview",{url:"/preview",templateUrl:"app/channels/chat/preview/preview.html",controller:"PreviewCtrl",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:8}}})}]),angular.module("xCallyShuttleApp").factory("ChatQueue",["$resource",function(a){return a("/api/chat/queues/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("ChatQueueListCtrl",["$scope","ChatQueue","gridOptions","Auth","$uibModal",function(a,b,c,d,e){a.initView=function(){a.Auth=d;var e={exporterCsvFilename:"chat_queues.csv",columnDefs:[{name:"name"},{name:"description"},{name:"strategy"},{name:"timeout"},{name:"action",width:100,buttons:[{"class":"blue-hoki",href:"/channels/chat/queues/view/{{row.entity.id}}/settings",name:"settings"},{"class":"green-meadow",href:"/channels/chat/queues/view/{{row.entity.id}}/agents",name:"agents",hide:"user"===d.getCurrentUser().role},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=c.gridOptions(b,e,a)},a.createItem=function(){var b=e.open({animation:!0,templateUrl:"app/channels/chat/queue/list/list.create.modal.html",controller:"ChatQueueListCreateCtrl",size:"lg"});b.result.then(function(){a.gridOptions.getPage()})}}]),angular.module("xCallyShuttleApp").controller("ChatQueueListCreateCtrl",["$scope","$uibModalInstance","$translate","xAlert","ChatQueue","Team",function(a,b,c,d,e,f){a.form={},a.item={penalty:0,agents:[]},a.getTeams=function(){return f.get({controller:"associations"}).$promise.then(function(b){a.teams=b.rows}).then(function(){ComponentsDropdowns.bindQueue(a.teams,[],function(){return{select:function(b){a.item.agents=_.union(a.item.agents,b)},deselect:function(b){a.item.agents=_.difference(a.item.agents,b)}}})})["catch"](function(a){console.error(a)})},a.save=function(){return e.save(a.item).$promise.then(function(a){d.show(c.instant("MESSAGE_WELL_DONE"),"success"),b.close(a)})["catch"](function(a){d.error(a)})},a.cancel=function(){b.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.queues.list",{url:"/list",templateUrl:"app/channels/chat/queue/list/list.html",controller:"ChatQueueListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/jquery-multi-select/css/multi-select.css","assets/plugins/jquery-multi-select/js/jquery.multi-select.js","assets/plugins/jquery-quicksearch/jquery.quicksearch.js","assets/scripts/components-dropdowns.js"]})}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.queues",{url:"/queues",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:30}}})}]),angular.module("xCallyShuttleApp").controller("ChatQueueViewCtrl",["$scope","$http","xAlert","$translate","$stateParams","ChatQueue","Team","Auth",function(a,b,c,d,e,f,g,h){a.Auth=h;var i=function(){return{select:function(b){return f.save({id:a.queue.id,controller:"agents"},{agents:b,penalty:a.queue.penalty}).$promise.then(function(){a.getTeams()})["catch"](function(a){console.log(a)})},deselect:function(b){return f["delete"]({id:a.queue.id,controller:"agents",agents:b}).$promise.then(function(){a.getTeams()})["catch"](function(a){console.log(a)})}}};a.getQueue=function(){b.get("/api/chat/queues/"+e.id).success(function(b){b.penalty=0,a.queue=b}).error(function(a){console.error(a)})},a.updateChatQueue=function(){var f=angular.copy(a.queue);b.put("/api/chat/queues/"+e.id,f).success(function(){c.show(d.instant("MESSAGE_WELL_DONE")+"!","success")}).error(function(b){a.queue=f,b.errors.forEach(function(a){c.error(err)})})},a.getTeams=function(){return g.get({controller:"associations"}).$promise.then(function(b){return a.teams=b.rows,f.get({id:e.id,controller:"agents"}).$promise}).then(function(b){ComponentsDropdowns.bindChatQueue(a.teams,_.map(b.rows,function(a){return{id:a.id,penalty:a.UserHasChatQueue.penalty}}),i)})["catch"](function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.queues.view",{url:"/view/:id",templateUrl:"app/channels/chat/queue/view/view.html",controller:"ChatQueueViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.channels.chat.queues.view.settings",{url:"/settings",templateUrl:"app/channels/chat/queue/view/view.settings.html"}).state("main.channels.chat.queues.view.agents",{url:"/agents",templateUrl:"app/channels/chat/queue/view/view.agents.html",cache:!1,serie:!0,resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/jquery-multi-select/css/multi-select.css","assets/plugins/jquery-multi-select/js/jquery.multi-select.js","assets/plugins/jquery-quicksearch/jquery.quicksearch.js","assets/scripts/components-dropdowns.js"]})}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.realtime",{url:"/realtime",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:33}}})}]),angular.module("xCallyShuttleApp").controller("ChatRealtimeViewAgentCtrl",["$scope","$log","$uibModal","$translate","socket","xAlert","Agent","Pause","Action","ChatQueue","usSpinnerService","$q","uiGridConstants","Auth",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n){function o(){return k.spin("grid-spinner"),g.get(t).$promise.then(function(b){a.gridOptions.totalItems=b.count,a.gridOptions.data=[],b.rows.forEach(function(a){q(a)})})["catch"](function(a){f.error(a)})["finally"](function(){k.stop("grid-spinner")})}function p(){e.socket.on("agent:save",function(b){b=b.newValues||b;var c=_.find(a.gridOptions.data,{agentId:b.id,isAgent:!0});c&&(c.online=_.has(b,"online")?b.online:c.online,c.lastLoginAt=_.has(b,"lastLoginAt")?b.lastLoginAt:c.lastLoginAt,c.pause=_.has(b,"smsPause")?b.chatPause:c.chatPause,c.pauseType=_.has(b,"pauseType")?b.pauseType:c.pauseType,c.lastPauseAt=_.has(b,"lastPauseAt")?b.lastPauseAt:c.lastPauseAt,c.ipaddr=_.has(b,"ipaddr")?b.ipaddr:c.ipaddr,c.port=_.has(b,"port")?b.port:c.port,c.fullcontact=_.has(b,"fullcontact")?b.fullcontact:c.fullcontact,c.useragent=_.has(b,"useragent")?b.useragent:c.useragent,c.lastms=_.has(b,"lastms")?b.lastms:c.lastms,c.internal=_.has(b,"internal")?b.internal:c.internal,_.map(a.gridOptions.data,function(a){a.isAgent||a.agentId!==b.id||(a.online=_.has(b,"online")?b.online:a.online)}))}),e.socket.on("agent:remove",function(b){_.remove(a.gridOptions.data,{agentId:b.id})}),e.socket.on("user_has_chat_queue:save",function(b){var c=_.includes(_.map(a.CurrentUser.PChatQueues,"id"),b.ChatQueueId)||n.isAdmin();if(c){var d=_.find(a.gridOptions.data,{agentId:b.UserId,isAgent:!0});if(d){var e=a.gridOptions.data.indexOf(d);a.gridOptions.data.splice(e+1,0,{isAgent:!1,agentId:b.UserId,queue:b.queue,queueId:b.ChatQueueId,agent:b.membername,online:d.online})}}}),e.socket.on("user_has_chat_queue:remove",function(b){_.remove(a.gridOptions.data,{agentId:b.UserId,queueId:b.ChatQueueId})})}function q(b){a.gridOptions.data.push({isAgent:!0,agentId:b.id,agent:b.name,online:b.online,lastLoginAt:b.lastLoginAt,lastPauseAt:b.lastPauseAt,pause:b.chatPause,pauseType:b.pauseType,ipaddr:b.ipaddr,port:b.port,fullcontact:b.fullcontact,useragent:b.useragent,lastms:b.lastms,internal:b.internal,$$treeLevel:0}),b.ChatQueues.forEach(function(c){a.gridOptions.data.push({isAgent:!1,agentId:b.id,queue:c.name,queueId:c.id,agent:b.name,online:b.online})})}function r(){return h.get().$promise.then(function(b){a.pauses=b.rows,e.syncUpdates("pause",a.pauses)})["catch"](function(a){f.error(a)})}function s(){return j.get().$promise.then(function(b){a.chatQueues=b.rows,e.syncUpdates("chat_queue",a.chatQueues)})["catch"](function(a){f.error(a)})}a.chatQueues=[];var t={controller:"realtime",controller1:"chat",offset:0,limit:10};a.moment=moment,a.initAgents=function(){a.gridOptions={enableGridMenu:!0,headerCellFilter:"translate",enableHorizontalScrollbar:0,enableVerticalScrollbar:0,enableFiltering:!0,showGridFooter:!0,paginationPageSizes:[10,25,50,75],paginationPageSize:10,useExternalPagination:!0,useExternalSorting:!0,useExternalFiltering:!0,multiSelect:!0,showTreeExpandNoChildren:!0,columnDefs:[{name:"name",displayName:"APPLICATION_AGENT",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div data-ng-if="row.entity.isAgent">{{row.entity.agent}} <{{row.entity.internal}}></div>'},{name:"online",displayName:"APPLICATION_ONLINE",width:150,headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div data-ng-if="row.entity.online != null && row.entity.isAgent"><i class="fa" data-ng-class="{\'font-green\':row.entity.online, \'font-red\':!row.entity.online,\'fa-user\':row.entity.online,\'fa-user-times\':!row.entity.online}"></i> <span data-ng-if="row.entity.online" class="left-margin">(<css-timer start-time="row.entity.lastLoginAt)"></css-timer>)</span></div>',filter:{type:m.filter.SELECT,selectOptions:[{value:"true",label:"ONLINE"},{value:"false",label:"OFFLINE"}]}},{name:"chatPause",displayName:"APPLICATION_PAUSE",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div data-ng-if="row.entity.pause != null && row.entity.online" class="ui-grid-vcenter" data-ng-class="{\'paused-agent\':row.entity.pause}"><i data-ng-if="row.entity.pause" data-ng-click="grid.appScope.pause(row.entity.agentId,\'unpause\')" class="fa fa-play font-green pointer-cursor left-margin" title="{{\'APPLICATION_RESUME\' | translate}}"></i><i class="fa fa-pause font-yellow pointer-cursor" data-ng-click="grid.appScope.pause(row.entity.agentId,\'pause\',\'DEFAULT PAUSE\')" title="{{\'APPLICATION_DEFAULT_PAUSE\' | translate}}"></i><select data-ng-if="grid.appScope.pauses.length" class="pause-select pointer-cursor" data-ng-model="grid.appScope.pauseType" data-ng-change="grid.appScope.pause(row.entity.agentId,\'pause\',grid.appScope.pauseType)"><option class="pointer-cursor" data-ng-repeat="pause in grid.appScope.pauses">{{pause.name}}</option></select> <span data-ng-if="row.entity.pause">({{row.entity.pauseType}})</span><span class="left-margin"><css-timer data-ng-if="row.entity.pause" start-time="row.entity.lastPauseAt"></css-timer></span></div>',filter:{type:m.filter.SELECT,selectOptions:[{value:"true",label:"PAUSED"},{value:"false",label:"NOT PAUSED"}]},enableSorting:!1,enableColumnMenu:!1},{name:"queue",displayName:"APPLICATION_QUEUE",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1},{name:"action",displayName:"",width:170,cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div><button data-ng-if="row.entity.queueId" class="btn btn-xs red-sunglo" data-ng-click="grid.appScope.leaveQueue(row.entity.agentId,row.entity.queueId)"><i class="icon-ban"></i> {{\'APPLICATION_LEAVE\' | translate}}</button><button data-ng-if="row.entity.isAgent && row.treeNode.children.length < grid.appScope.chatQueues.length" class="btn btn-xs blue-hoki" data-ng-click="grid.appScope.joinQueue(row.entity.agentId)"><i class="icon-plus"></i> {{\'APPLICATION_JOIN_QUEUE\' | translate}}</button><div>',enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1}],data:[],gridMenuTitleFilter:function(a){var b=l.defer();return b.resolve(d.instant(a)),b.promise},onRegisterApi:function(b){a.gridApi=b,a.gridApi.grid.registerDataChangeCallback(function(){u(a.gridApi.core.getVisibleRows(a.gridApi.grid).length)}),a.gridApi.treeBase.on.rowExpanded(a,function(b){u(a.gridApi.core.getVisibleRows(a.gridApi.grid).length+b.treeNode.children.length)}),a.gridApi.treeBase.on.rowCollapsed(a,function(b){u(a.gridApi.core.getVisibleRows(a.gridApi.grid).length-b.treeNode.children.length)}),a.gridApi.core.on.sortChanged(a,function(a,b){0===b.length?t.order=null:t.order=b[0].name+" "+b[0].sort.direction.toUpperCase(),o()}),a.gridApi.pagination.on.paginationChanged(a,function(a,b){t.offset=(a-1)*b,t.limit=b,o()}),a.gridApi.core.on.filterChanged(a,function(){var a=this.grid;a.columns.forEach(function(a){a.filters[0].term?t[a.name]=a.filters[0].term:delete t[a.name]}),o()})}},o(),r(),s(),$timeout(function(){p()})};var u=function(a){var b=a?30*a+130:270;angular.element(document.getElementsByClassName("ui-grid")[0]).css("height",b+"px"),angular.element(document.getElementsByClassName("ui-grid-viewport")).css("height",30*a+"px")};a.$on("$destroy",function(){e.unsyncUpdates("agent"),e.unsyncUpdates("user_has_chat_queue")}),a.pause=function(b,c,e){return e&&(a.pauseType=null),i.save({name:c,agent:b,type:e||"DEFAULT PAUSE",data4:e||"DEFAULT PAUSE",channel:"chat"}).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){f.error(a)})},a.joinQueue=function(e){var g=c.open({animation:!0,templateUrl:"app/channels/chat/realtime/view/agent/queue.modal.add.html",controller:"ChatRealtimeViewAgentQueueModalCtrl",resolve:{queues:function(){return _.reject(a.chatQueues,function(b){return!!_.find(a.gridOptions.data,{queue:b.name,isAgent:!1,agentId:e})})}}});g.result.then(function(b){return i.save({name:"QueueAdd",agent:e,queues:_.filter(a.chatQueues,function(a){return _.includes(b.queues,a.id)}),channel:"chat",data1:e,data3:b.queues.join(","),data4:"chat"}).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){f.error(a)})},function(){b.info("Modal dismissed at: "+new Date)})},a.leaveQueue=function(a,b){return i.save({name:"QueueRemove",agent:a,queueId:b,channel:"chat",data1:a,data3:b,data4:"chat"}).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){f.error(a)})},a.showInfo=function(a){c.open({animation:!0,templateUrl:"app/channels/chat/realtime/view/agent/agent.modal.info.html",controller:"ChatRealtimeViewAgentInfoModalCtrl",resolve:{agent:a}})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.realtime.view.agents",{url:"/agents",templateUrl:"app/channels/chat/realtime/view/agent/agent.html",controller:"ChatRealtimeViewAgentCtrl"})}]),angular.module("xCallyShuttleApp").controller("ChatRealtimeViewAgentInfoModalCtrl",["$scope","$uibModalInstance","$http","agent",function(a,b,c,d){a.agent=d,a.close=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("ChatRealtimeViewAgentQueueModalCtrl",["$scope","$uibModalInstance","$http","queues",function(a,b,c,d){a.queues=d,a.item={},a.save=function(){b.close(a.item)},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("ChatRealtimeViewApplicationCtrl",["$scope","$log","$uibModal","$translate","socket","xAlert","ReportChatSession","usSpinnerService","$q","uiGridConstants","$timeout",function(a,b,c,d,e,f,g,h,i,j,k){function l(){return h.spin("spinner-grid"),g.get({controller:"waiting",controller2:"applications"}).$promise.then(function(b){a.gridOptions.data=b.rows})["catch"](function(a){f.error(a)})["finally"](function(){m(),h.stop("spinner-grid")})}function m(){e.socket.on("report_chat_session:save",function(b){var c=_.find(a.gridOptions.data,{id:b.id});c?(_.merge(c,b),b.leaveAt&&k(function(){_.remove(a.gridOptions.data,{id:b.id})},1e4)):b.leaveAt||a.gridOptions.data.push(b)}),e.socket.on("report_chat_session:remove",function(b){_.remove(a.gridOptions.data,{id:b.id})})}a.moment=moment,a.initApplications=function(){a.gridOptions={headerCellFilter:"translate",enableHorizontalScrollbar:0,enableVerticalScrollbar:0,enableFiltering:!0,columnDefs:[{name:"uniqueid",displayName:"APPLICATION_UNIQUEID",headerCellFilter:"translate"},{name:"websitename",displayName:"APPLICATION_WEBSITE",headerCellFilter:"translate"},{name:"application",displayName:"APPLICATION_APPLICATION",headerCellFilter:"translate"},{name:"status",displayName:"APPLICATION_STATUS",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div><span data-ng-if="!row.entity.leaveAt">{{\'APPLICATION_QUEUESTATUS_WAITING\' | translate}}</span><span data-ng-if="row.entity.leaveAt && row.entity.abandon">{{\'APPLICATION_QUEUESTATUS_ABANDON\' | translate}}</span><span data-ng-if="row.entity.leaveAt && row.entity.complete">{{\'APPLICATION_QUEUESTATUS_COMPLETE\' | translate}}</span><span data-ng-if="row.entity.leaveAt && row.entity.timeout">{{\'APPLICATION_TIMEOUT\' | translate}}</span> <span data-ng-if="!row.entity.leaveAt">[<timer start-time="grid.appScope.moment(row.entity.updatedAt).unix()*1000">{{hhours}}:{{mminutes}}:{{sseconds}}</timer>]</span></div>',enableSorting:!1,enableColumnMenu:!1,enableFiltering:!1},{name:"membername",displayName:"APPLICATION_AGENT",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{row.entity.membername || ''}}</span></div>"},{name:"queuename",displayName:"APPLICATION_QUEUE",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{row.entity.queuename || ''}}</span></div>"}],data:[],gridMenuTitleFilter:function(a){var b=i.defer();return b.resolve(d.instant(a)),b.promise},onRegisterApi:function(b){a.gridApi=b,a.gridApi.grid.registerDataChangeCallback(function(){n(a.gridOptions.data.length)})}},l()};var n=function(a){var b=a?30*a+60:270;angular.element(document.getElementsByClassName("ui-grid")[0]).css("height",b+"px"),angular.element(document.getElementsByClassName("ui-grid-viewport")).css("height",30*a+"px")};a.$on("$destroy",function(){e.unsyncUpdates("report_chat_session")})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.realtime.view.applications",{url:"/applications",templateUrl:"app/channels/chat/realtime/view/application/application.html",controller:"ChatRealtimeViewApplicationCtrl"})}]),angular.module("xCallyShuttleApp").controller("ChatRealtimeViewCtrl",["$scope",function(a){a.agents=[{name:"Queues",link:"main.chat.realtime.view.agent.queues"},{name:"Timeline",link:"main.chat.realtime.view.agent.timeline"}],a.sessions=[{name:"Sessions",link:"main.chat.realtime.view.sessions"}]}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.realtime.view",{url:"/view",templateUrl:"app/channels/chat/realtime/view/view.html",controller:"ChatRealtimeViewCtrl"})}]),angular.module("xCallyShuttleApp").factory("ReportChatSession",["$resource",function(a){return a("/api/report/chat/sessions/:id/:controller/:controller2",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.room.external",{url:"/external",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("ChatRoomExternalListCtrl",["$scope","$timeout","socket","Auth","ChatRoom","usSpinnerService","Tag","$uibModal","uibButtonConfig",function(a,b,c,d,e,f,g,h,i){function j(){return g.get().$promise.then(function(b){a.tags=_.map(b.rows,"name")})["catch"](function(a){console.error(a)})}a.openChat=function(b){return e.get({id:b.id}).$promise.then(function(b){var c=_.find(a.workspaces,{id:b.id,type:"chatRoom"});c?c.active=!0:a.workspaces.push({id:b.id,name:b.ChatVisitor.fullname,type:"chatRoom","class":"icon-bubble",active:!0})})["catch"](function(a){console.error(a)})},a.initView=function(){i.activeClass="green-haze",a.id=[],a.query={status:"OPEN",tags:[]},a.gridOptions={enableGridMenu:!1,enableFiltering:!0,enableHorizontalScrollbar:0,enableVerticalScrollbar:0,paginationPageSizes:[10,25,50,75],paginationPageSize:10,flatEntityAccess:!0,showGridFooter:!0,fastWatch:!0,columnDefs:[{name:"id",displayName:"",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div><span>#{{row.entity.id}}</span></div>",width:75,enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1},{name:"userpic",displayName:"",width:35,cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div> <ng-letter-avatar height="20" width="20" fontsize="12" data="{{row.entity.ChatVisitor.fullname}}" avatarcustombgcolor="#B0B0B0" charCount="2" avatarcustomborder="border:2px solid #EA4C61" shape="round"></ng-letter-avatar> </div>',enableColumnMenu:!1,enableSorting:!1,enableFiltering:!1},{name:"fullname",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div><span style="padding-left: 5px;" class="pull-left">{{row.entity.ChatVisitor.fullname}}</span></div>',enableSorting:!0,enableFiltering:!0,enableColumnMenu:!0},{name:"action",cellTemplate:'<div><a class="btn btn-xs green-meadow" href="#" data-ng-click="grid.appScope.openChat(row.entity)">{{\'APPLICATION_CHAT\' | translate}}</a></div>',cellClass:"ui-grid-vcenter",width:100,enableFiltering:!1,enableSorting:!1,enableColumnMenu:!1}],data:[],onRegisterApi:function(b){a.gridApi=b,a.gridApi.selection&&(a.gridApi.selection.on.rowSelectionChanged(a,function(b){b.isSelected?a.id.push(a.gridApi.grid.options.primaryKey?b.entity[a.gridApi.grid.options.primaryKey]:b.entity.id):_.pull(a.id,a.gridApi.grid.options.primaryKey?b.entity[a.gridApi.grid.options.primaryKey]:b.entity.id)}),a.gridApi.selection.on.rowSelectionChangedBatch(a,function(b){b[0].isSelected?a.id=_.union(a.id,_.map(b,a.gridApi.grid.options.primaryKey?"entity."+a.gridApi.grid.options.primaryKey:"entity.id")):_.map(b,a.gridApi.grid.options.primaryKey?"entity."+a.gridApi.grid.options.primaryKey:"entity.id").forEach(function(b){_.pull(a.id,b)})}))}},a.getPage(),j()},a.tagItems=function(){h.open({animation:!0,templateUrl:"app/channels/chat/room/view.tags.modal.html",controller:"ChatRoomViewModalTagCtrl",resolve:{id:function(){return a.id}}}).result.then(function(){a.gridApi.selection.clearSelectedRows(),a.id=[]})},a.onChanged=function(){a.getPage()},a.$watch("query.status",function(){a.getPage()},!0),a.getPage=function(){return f.spin("spinner-grid"),e.get(_.merge({id:"externals"},a.query)).$promise.then(function(b){a.gridOptions.data=b.rows})["catch"](function(a){console.error(a)})["finally"](function(){f.stop("spinner-grid")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.room.external.list",{url:"/list",templateUrl:"app/channels/chat/room/external/list/list.html",controller:"ChatRoomExternalListCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.room.group",{url:"/group",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("ChatRoomGroupListCtrl",["$scope","$timeout","Auth","ChatRoom","usSpinnerService","Tag","uibButtonConfig",function(a,b,c,d,e,f,g){function h(){return f.get().$promise.then(function(b){a.tags=_.map(b.rows,"name")})["catch"](function(a){console.error(a)})}a.getFullnames=function(a){var b=_.map(a.Users,"fullname");return a.ChatVisitor&&b.unshift(a.ChatVisitor.fullname),_.without(b,c.getCurrentUser().fullname).join(", ")},a.openChat=function(b){return d.get({id:b.id}).$promise.then(function(c){var d=_.find(a.workspaces,{id:c.id,type:"chatRoom"});d?d.active=!0:a.workspaces.push({id:c.id,data:b,name:a.getFullnames(c),type:"chatRoom","class":"icon-bubble",active:!0})})["catch"](function(a){console.error(a)})},a.initView=function(){g.activeClass="green-haze",a.query={status:"OPEN",tags:[]},a.currentUser=c.getCurrentUser(),a.gridOptions={enableGridMenu:!1,enableColumnResizing:!0,enableHorizontalScrollbar:0,enableVerticalScrollbar:0,paginationPageSizes:[10,25,50,75],paginationPageSize:10,flatEntityAccess:!0,showGridFooter:!0,fastWatch:!0,columnDefs:[{name:"userpic",displayName:"",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div> <ng-letter-avatar data-ng-if="row.entity.ChatVisitor" height="20" width="20" fontsize="12" data="{{row.entity.ChatVisitor.fullname}}" avatarcustombgcolor="#B0B0B0" charCount="2" avatarcustomborder="border:2px solid #EA4C61" shape="round"></ng-letter-avatar> <ng-letter-avatar data-ng-repeat="user in row.entity.Users | filter:{ id: \'!\' + grid.appScope.currentUser.id} track by user.id" style="margin-right: 3px;" height="20" width="20" fontsize="12" data="{{user.fullname}}" avatarcustombgcolor="#B0B0B0" charCount="2" avatarcustomborder="border:2px solid #3399CC" shape="round"></ng-letter-avatar> </div>',enableColumnMenu:!1,enableSorting:!1,enableFiltering:!1},{name:"Users",displayName:"",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{grid.appScope.getFullnames(row.entity)}}</div>",enableSorting:!0,enableFiltering:!0,enableColumnMenu:!0},{name:"action",cellTemplate:'<div><a class="btn btn-xs green-meadow" href="#" data-ng-click="grid.appScope.openChat(row.entity)">{{\'APPLICATION_CHAT\' | translate}}</a></div>',cellClass:"ui-grid-vcenter",width:100,enableFiltering:!1,enableSorting:!1,enableColumnMenu:!1}],data:[]},a.getPage(),h()},a.onChanged=function(){a.getPage()},a.$watch("query.status",function(){a.getPage()},!0),a.getPage=function(){return e.spin("spinner-grid"), -d.get(_.merge({id:"groups"},a.query)).$promise.then(function(b){a.gridOptions.data=b.rows})["catch"](function(a){console.error(a)})["finally"](function(){e.stop("spinner-grid")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.room.group.list",{url:"/list",templateUrl:"app/channels/chat/room/group/list/list.html",controller:"ChatRoomGroupListCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.room.internal",{url:"/internal",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("ChatRoomInternalListCtrl",["$scope","$timeout","socket","Auth","ChatRoom","usSpinnerService",function(a,b,c,d,e,f){a.openChat=function(b){return e.users({users:[d.getCurrentUser().id,b.id]}).$promise.then(function(c){var d=_.find(a.workspaces,{id:c.id,type:"chatRoom"});d?d.active=!0:a.workspaces.push({id:c.id,name:b.fullname,type:"chatRoom","class":"icon-bubble",active:!0})})["catch"](function(a){console.error(a)})},a.initView=function(){a.gridOptions={enableGridMenu:!1,enableFiltering:!0,enableHorizontalScrollbar:0,enableVerticalScrollbar:0,paginationPageSizes:[10,25,50,75],paginationPageSize:10,flatEntityAccess:!0,showGridFooter:!0,fastWatch:!0,columnDefs:[{name:"userpic",displayName:"",width:35,cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div> <ng-letter-avatar height="20" width="20" fontsize="12" data="{{row.entity.fullname}}" avatarcustombgcolor="#B0B0B0" charCount="2" avatarcustomborder="border:2px solid #3399CC" shape="round"></ng-letter-avatar> </div>',enableColumnMenu:!1,enableSorting:!1,enableFiltering:!1},{name:"fullname",enableSorting:!0,enableFiltering:!0,enableColumnMenu:!0},{name:"action",cellTemplate:'<div><a class="btn btn-xs green-meadow" href="#" data-ng-click="grid.appScope.openChat(row.entity)">{{\'APPLICATION_CHAT\' | translate}}</a></div>',cellClass:"ui-grid-vcenter",width:100,enableFiltering:!1,enableSorting:!1,enableColumnMenu:!1}],data:[]},c.socket.on("user:save",function(b){if(b.online&&d.getCurrentUser().id!==b.id){var c=_.find(a.gridOptions.data,{id:b.id});c?_.merge(c,b):a.gridOptions.data.push(b)}else _.remove(a.gridOptions.data,{id:b.id})}),b(function(){c.socket.on("agent:save",function(b){if(b.online&&d.getCurrentUser().id!==b.id){var c=_.find(a.gridOptions.data,{id:b.id});c?_.merge(c,b):a.gridOptions.data.push(b)}else _.remove(a.gridOptions.data,{id:b.id})})}),e.get({id:"agents"}).$promise.then(function(b){a.gridOptions.data=b.rows})["catch"](function(a){console.error(a)})["finally"](function(){f.stop("spinner-grid")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.room.internal.list",{url:"/list",templateUrl:"app/channels/chat/room/internal/list/list.html",controller:"ChatRoomInternalListCtrl"})}]),angular.module("xCallyShuttleApp").controller("ChatRoomAddCtrl",["$scope","$uibModalInstance","Agent","items",function(a,b,c,d){a.items=d,a.agents=c.get(function(b){a.agents=b,a.items.forEach(function(b){_.remove(a.agents.rows,{id:b.id})})}),a.selected={items:[]},a.ok=function(){b.close(_.union(_.map(a.selected.items,"id"),_.map(a.items,"id")))},a.cancel=function(){b.dismiss()}}]),angular.module("xCallyShuttleApp").controller("ChatRoomCloseCtrl",["$scope","$uibModalInstance","closed","ChatWebsite","websiteId",function(a,b,c,d,e){a.modal={title:"APPLICATION_CONFIRM_CLOSE",text:"MESSAGE_ARE_YOU_SURE_YOU_WANT_TO_CLOSE_THE_CHAT"},a.initDisposition=function(){return d.get({websiteId:e,controller:"dispositions"}).$promise.then(function(b){a.dispositions=b.rows})["catch"](function(a){console.error(a)})},a.item={},a.closed=c,a.ok=function(){b.close(a.item)},a.cancel=function(){b.dismiss()}}]),angular.module("xCallyShuttleApp").directive("chatRoom",["$interval","$rootScope","$uibModal","$notification","$window","socket","Auth","ChatRoom","ngAudio","xAlert","Tag","CannedAnswer","List","$translate",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n){return{restrict:"E",scope:{workspace:"="},templateUrl:"app/channels/chat/room/room.directive.html",link:function(a){a.user=g.getCurrentUser(),a.message={body:""},a.openContact=function(c){return a.chatRoom.ChatWebsite.List?m.save({listId:a.chatRoom.ChatWebsite.List.id,controller:"contacts"},{email:c}).$promise.then(function(a){var c=_.find(b.$root.workspaces,{contactID:a.id});c?c.active=!0:b.$root.workspaces.push({active:!0,"class":"icon-user",contactID:a.id,name:a.email,type:"contact"})})["catch"](function(a){console.error(a)}):void j.show(n.instant("MESSAGE_NO_LIST_CONFIGURED"),"info")},a.modelOptions={debounce:{"default":500,blur:250},getterSetter:!0},a.form={},a.panelLeft="col-md-4",a.panelRight="col-md-8",a.onSelect=function(){a.message.body=a.modelOptions.selectedAnswer,delete a.modelOptions.selectedAnswer},a.togglePanelLeft=function(){a.panelLeft?(a.panelLeft=null,a.panelRight="col-md-12"):(a.panelLeft="col-md-4",a.panelRight="col-md-8")},a.options={link:!0,linkTarget:"_blank",pdf:{embed:!0},image:{embed:!0},audio:{embed:!0},code:{highlight:!0,lineNumbers:!1},basicVideo:!0},a.getAnswers=function(a){return l.get({key:a}).$promise.then(function(a){return console.log(a),_.map(a.rows,"value")})},a.isMyRoom=function(b){return!!_.find(b,{id:a.user.id})},h.get({id:a.workspace.id}).$promise.then(function(c){a.chatRoom=c,a.form.tags=c.tags,a.chatRoom.ChatVisitor&&(a.chatRoom.ChatVisitors=[],a.chatRoom.ChatVisitors.push(a.chatRoom.ChatVisitor)),f.socket.on("chat_room:save",function(b){a.chatRoom.id===b.id&&_.merge(a.chatRoom,b)}),f.socket.on("user_has_chat_room:save",function(b){return b.UserId!=a.user.id&&b.ChatRoomId==a.chatRoom.id?h.get({id:"agents",controller:b.UserId}).$promise.then(function(b){var c=_.map(a.chatRoom.Users,"fullname");a.chatRoom.ChatVisitor&&c.unshift(a.chatRoom.ChatVisitor.fullname),a.chatRoom.Users.push(b),a.workspace.name=_.without(c,g.getCurrentUser().fullname).join(", ")})["catch"](function(a){console.error(a)}):void 0}),f.socket.on("chat_message:save",function(c){a.chatRoom.id==c.ChatRoomId&&(a.user.id!=c.UserId&&a.chatRoom.ChatMessages.push(c),!b.settings.layout.onFocus&&e.Notification&&d("CHAT CHANNEL",{icon:"assets/images/media/channels/chat64.png",body:"NEW Chat Message!",delay:5e3}),a.workspace.active||(i.load("api/xchatty/assets?resource=notification/xc_blubb.mp3").play(),a.workspace.unread++))})})["catch"](function(a){console.error(a)}),k.get().$promise.then(function(b){a.tags=_.map(b.rows,"name")})["catch"](function(a){console.error(a)}),a.closeRoom=function(b){return c.open({animation:!0,templateUrl:"app/channels/chat/room/room.close.html",controller:"ChatRoomCloseCtrl",resolve:{closed:function(){return"CLOSED"===a.chatRoom.status},websiteId:function(){return a.chatRoom.ChatWebsiteId}}}).result.then(function(a){var c={id:b,status:"CLOSED",completeReason:"agent"};return a.disposition&&(c.disposition=a.disposition),h.update(c).$promise["catch"](function(a){j.error(a)})})},a.onChanged=function(b){return h.update({id:b},{tags:a.form.tags}).$promise["catch"](function(a){console.error(a)})},a.addAgent=function(b){c.open({animation:!0,templateUrl:"app/channels/chat/room/room.add.html",controller:"ChatRoomAddCtrl",resolve:{items:function(){return _.map(a.chatRoom.Users||[],function(a){return{id:a.id,fullname:a.fullname}})}}}).result.then(function(a){return h.update({id:b,controller:"users"},{users:a}).$promise["catch"](function(a){j.error(a)})})},a.sendMessage=function(){var b={body:angular.copy(a.message.body),createdAt:moment(),UserId:a.user.id,User:{fullname:a.user.fullname}};return a.message.body.trim().length?(a.chatRoom.ChatMessages.push(b),a.message.body="",h.save({id:a.chatRoom.id,controller:"messages"},{body:b.body}).$promise["catch"](function(a){console.error(a)})):void 0}}}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.room",{url:"/room",templateUrl:"app/channels/chat/room/room.html",data:{permissions:{only:["admin","user","agent"],redirectTo:"landing",id:31}},resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/inbox.css"]}])}]}})}]),angular.module("xCallyShuttleApp").controller("ChatRoomViewModalTagCtrl",["$scope","$uibModalInstance","$translate","$stateParams","Tag","ChatRoom","xAlert","id",function(a,b,c,d,e,f,g,h){a.initModal=function(){return a.tags=[],a.item={tags:[]},a.modal={dismissable:!0,title:"APPLICATION_MESSAGE_SEND_RETRY",text:"MESSAGE_MESSAGE_SEND_RETRY",buttons:[{"class":"btn-success",text:"APPLICATION_TAG",click:function(){var d={status:!0};return f.patch({id:h},{tags:a.item.tags}).$promise["catch"](function(){d.status=!1,g.show(c.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})["finally"](function(){b.close(d)})}},{"class":"default",text:"APPLICATION_CANCEL",click:function(a){b.dismiss(a)}}]},e.get().$promise.then(function(b){a.tags=_.map(b.rows,"name")})["catch"](function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").controller("ChatVisitorListCtrl",["$scope","ChatVisitor","gridOptions","$uibModal",function(a,b,c,d){a.initView=function(){var d={exporterCsvFilename:"chat_visitors.csv",columnDefs:[{name:"fullname",cellClass:"text-center"},{name:"email",cellClass:"text-center"},{name:"origin",cellClass:"text-center"},{name:"createdAt",displayName:"createdAt",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div><span am-time-ago="row.entity.createdAt"></span></div>'},{name:"action",width:100,buttons:[{"class":"blue-hoki",href:"/channels/chat/visitors/view/{{row.entity.id}}/profile",name:"profile"}]}]};a.gridOptions=c.gridOptions(b,d,a)}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.visitors.list",{url:"/list",templateUrl:"app/channels/chat/visitor/list/list.html",controller:"ChatVisitorListCtrl"})}]),angular.module("xCallyShuttleApp").controller("ChatVisitorViewCtrl",["$scope","$stateParams","ChatVisitor",function(a,b,c){a.initView=function(){return c.get({id:b.id}).$promise.then(function(b){a.chatVisitor=b})["catch"](function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.visitors.view",{url:"/view/:id",templateUrl:"app/channels/chat/visitor/view/view.html",controller:"ChatVisitorViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.channels.chat.visitors.view.profile",{url:"/profile",templateUrl:"app/channels/chat/visitor/view/view.profile.html"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.visitors",{url:"/visitors",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:8}}})}]),angular.module("xCallyShuttleApp").factory("ChatApplication",["$resource",function(a){return a("/api/chat/applications/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("ChatWebsite",["$resource",function(a){return a("/api/chat/websites/:websiteId/:controller/:id",{id:"@websiteId"},{update:{method:"PUT"},updateFields:{method:"PUT",isArray:!0}})}]),angular.module("xCallyShuttleApp").controller("ChatWebsiteListCtrl",["$scope","gridOptions","ChatWebsite",function(a,b,c){a.initView=function(){var d={exporterCsvFilename:"chat_websites.csv",columnDefs:[{name:"name"},{name:"description"},{name:"address"},{name:"action",width:75,buttons:[{"class":"blue-hoki",href:"/channels/chat/websites/view/{{row.entity.id}}/embedding/view",name:"embedding"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=b.gridOptions(c,d,a)}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.websites.list",{url:"/list",templateUrl:"app/channels/chat/website/list/list.html",controller:"ChatWebsiteListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"smart-table",insertBefore:"#ng_load_plugins_before",files:["assets/css/smart_table.css"]}])}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.websites.view.actions",{url:"/actions",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("ChatWebsiteViewActionListCtrl",["$scope","gridOptions","ChatWebsite","$http","$translate","$stateParams","socket","xAlert","Modal",function(a,b,c,d,e,f,g,h,i){a.initActons=function(){var d={draggable:!0,exporterCsvFilename:"chat_applications.csv",enableSorting:!1,enableFiltering:!1,columnDefs:[{name:"app",cellClass:"text-center"},{name:"name",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div><span>{{row.entity.ChatQueue ? row.entity.ChatQueue.name : row.entity.User.name}}</span></div>"},{name:"timeout",cellClass:"text-center"},{name:"interval",displayName:"APPLICATION_TIME_INTERVAL",cellClass:"text-center",cellTemplate:"<div><span>{{row.entity.Interval ? row.entity.Interval.name : row.entity.interval}}</span></div>"},{name:"action",width:125,buttons:[{"class":"blue-hoki",href:"/channels/chat/websites/view/{{row.entity.ChatWebsiteId}}/actions/view/{{row.entity.id}}",name:"profile"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.app, row.entity.id)"}]}]};a.gridOptions=b.gridOptions(c,d,a,{websiteId:f.websiteId,controller:"applications"})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.websites.view.actions.list",{url:"/list",templateUrl:"app/channels/chat/website/view/action/list/list.html",controller:"ChatWebsiteViewActionListCtrl"})}]),angular.module("xCallyShuttleApp").controller("ChatWebsiteViewActionViewCtrl",["$scope","$http","$stateParams","$translate","$location","xAlert","WizardHandler","socket","application","interval","ChatWebsite","ChatQueue","Agent","Interval","Template","MailAccount","SmsAccount",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){a.isActive=!0,a.size="small",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.initAction=function(){return a.$application=i.application,a.$stateParams=c,a.$interval=j.interval,a.forms={},a.apps=[{name:"Queue",value:"queue"},{name:"Agent",value:"agent"},{name:"SendMail",value:"sendMail"},{name:"SendSMS",value:"sendSms"}],k.get({websiteId:c.websiteId,controller:"applications",id:c.actionId}).$promise.then(function(b){if(a.application=b,a.application.alwaysTime=!1,a.application.IntervalId)a.application.intType="list";else switch(a.application.interval){case"*,*,*,*":a.application.intType="always";break;default:a.application.intType="custom"}if("always"===a.application.intType||"custom"===a.application.intType){var c=a.application.interval.split(",");"*"===c[0]?a.application.alwaysTime=!0:(a.application.t_from=moment(new Date),a.application.t_to=moment(new Date),a.application.t_from.hour(c[0].split("-")[0].split(":")[0]),a.application.t_from.minute(c[0].split("-")[0].split(":")[1]),a.application.t_to.hour(c[0].split("-")[1].split(":")[0]),a.application.t_to.minute(c[0].split("-")[1].split(":")[1])),"*"===c[1]?(a.application.wd_from="always",a.application.wd_to="always"):(a.application.wd_from=c[1].split("-")[0],a.application.wd_to=c[1].split("-")[1]),"*"===c[2]?(a.application.md_from="always",a.application.md_to="always"):(a.application.md_from=c[2].split("-")[0],a.application.md_to=c[2].split("-")[1]),"*"===c[3]?(a.application.m_from="always",a.application.m_to="always"):(a.application.m_from=c[3].split("-")[0],a.application.m_to=c[3].split("-")[1])}a.$watch("application.t_from",function(b){a.application.t_from_hm=moment(b).format("HH:mm")}),a.$watch("application.t_to",function(b){a.application.t_to_hm=moment(b).format("HH:mm")})})["catch"](function(a){f.error(a)})},a.getQueues=function(){return l.get().$promise.then(function(b){a.queues=b.rows})["catch"](function(a){f.error(a)})},a.getAgents=function(){return m.get().$promise.then(function(b){a.agents=b.rows})["catch"](function(a){f.error(a)})},a.getIntervals=function(){return n.get().$promise.then(function(b){a.intervals=b.rows})["catch"](function(a){f.error(a)})},a.getSmsAccounts=function(){return q.get().$promise.then(function(b){a.smsAccounts=b.rows})["catch"](function(a){console.error(a)})},a.getTemplates=function(){return o.get().$promise.then(function(b){a.templates=b.rows})["catch"](function(a){console.error(a)})},a.getMailAccounts=function(){return p.get().$promise.then(function(b){a.mailAccounts=b.rows})["catch"](function(a){console.error(a)})},a.updateItem=function(){switch(a.application.intType){case"always":a.application.interval="*,*,*,*",a.application.IntervalId=null;break;case"list":var b=_.find(a.intervals,{id:a.application.IntervalId});a.application.interval=b?"":"*,*,*,*",a.application.IntervalId=b?a.application.IntervalId:null;break;case"custom":var g,h,i,j,l;g=a.application.t_from&&a.application.t_to&&!a.application.alwaysTime?moment(a.application.t_from).format("HH:mm")+"-"+moment(a.application.t_to).format("HH:mm"):"*",a.application.wd_from&&"always"!==a.application.wd_from?(h=a.application.wd_from,a.application.wd_to&&"always"!==a.application.wd_to&&(h+="-"+a.application.wd_to)):h="*",a.application.md_from&&"always"!==a.application.md_from?(i=a.application.md_from,a.application.md_to&&"always"!==a.application.md_to&&(i+="-"+a.application.md_to)):i="*",a.application.m_from&&"always"!==a.application.m_from?(j=a.application.m_from,a.application.m_to&&"always"!==a.application.m_to&&(j+="-"+a.application.m_to)):j="*",l=g+","+h+","+i+","+j,a.application.interval=l,a.application.IntervalId=null}return k.update({websiteId:c.websiteId,controller:"applications",id:c.actionId},a.application).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success"),e.path("/channels/chat/websites/view/"+c.websiteId+"/actions/list")})["catch"](function(a){f.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.websites.view.actions.view",{url:"/view/:actionId",templateUrl:"app/channels/chat/website/view/action/view/view.html",controller:"ChatWebsiteViewActionViewCtrl"})}]),angular.module("xCallyShuttleApp").controller("ChatWebsiteViewActionWizardCtrl",["$scope","$http","Agent","Interval","ChatQueue","$stateParams","$translate","$location","xAlert","WizardHandler","socket","application","interval","ChatWebsite","Template","MailAccount","SmsAccount",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){a.isActive=!0,a.size="small",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.initWizard=function(){a.apps=[{name:"Queue",value:"queue"},{name:"Agent",value:"agent"},{name:"SendMail",value:"sendMail"},{name:"SendSMS",value:"sendSms"}],a.$application=l.application,a.$stateParams=f,a.$interval=m.interval,a.forms={},a.application={app:"queue",intType:"always",alwaysTime:!0},a.$watch("application.t_from",function(b){a.application.t_from_hm=moment(b).format("HH:mm")}),a.$watch("application.t_to",function(b){a.application.t_to_hm=moment(b).format("HH:mm")})},a.getQueues=function(){return e.get().$promise.then(function(b){a.queues=b.rows})["catch"](function(a){console.error(a)})},a.getAgents=function(){return c.get().$promise.then(function(b){a.agents=b.rows})["catch"](function(a){i.error(a)})},a.getIntervals=function(){return d.get().$promise.then(function(b){a.intervals=b.rows})["catch"](function(a){i.error(a)})},a.getSmsAccounts=function(){return q.get().$promise.then(function(b){a.smsAccounts=b.rows})["catch"](function(a){console.error(a)})},a.getTemplates=function(){return o.get().$promise.then(function(b){a.templates=b.rows})["catch"](function(a){console.error(a)})},a.getMailAccounts=function(){return p.get().$promise.then(function(b){a.mailAccounts=b.rows})["catch"](function(a){console.error(a)})},a.createItem=function(){switch(a.application.intType){case"always":a.application.interval="*,*,*,*",a.application.IntervalId=null;break;case"list":var b=_.find(a.intervals,{id:a.application.IntervalId});a.application.interval=b?"":"*,*,*,*",a.application.IntervalId=b?a.application.IntervalId:null;break;case"custom":var c,d,e,j,k;c=a.application.t_from&&a.application.t_to&&!a.application.alwaysTime?moment(a.application.t_from).format("HH:mm")+"-"+moment(a.application.t_to).format("HH:mm"):"*",a.application.wd_from&&"always"!==a.application.wd_from?(d=a.application.wd_from,a.application.wd_to&&"always"!==a.application.wd_to&&(d+="-"+a.application.wd_to)):d="*",a.application.md_from&&"always"!==a.application.md_from?(e=a.application.md_from,a.application.md_to&&"always"!==a.application.md_to&&(e+="-"+a.application.md_to)):e="*",a.application.m_from&&"always"!==a.application.m_from?(j=a.application.m_from,a.application.m_to&&"always"!==a.application.m_to&&(j+="-"+a.application.m_to)):j="*",k=c+","+d+","+e+","+j,a.application.interval=k,a.application.IntervalId=null}return n.save({websiteId:f.websiteId,controller:"applications"},a.application).$promise.then(function(){i.show(g.instant("MESSAGE_WELL_DONE"),"success"),h.path("/channels/chat/websites/view/"+f.websiteId+"/actions/list")})["catch"](function(a){i.error(a)})},a.formValidation=function(a){return a},a.next=function(){j.wizard().next()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.websites.view.actions.wizard",{url:"/wizard",templateUrl:"app/channels/chat/website/view/action/wizard/wizard.html",controller:"ChatWebsiteViewActionWizardCtrl"})}]),angular.module("xCallyShuttleApp").factory("ChatDisposition",["$resource",function(a){return a("/api/chat/dispositions/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("ChatWebsiteViewModalDispositionAddCtrl",["$scope","$uibModalInstance","ChatWebsite","id","xAlert","$translate",function(a,b,c,d,e,f){a.ok=function(){return c.save({websiteId:d,controller:"dispositions"},{name:a.name}).$promise.then(function(a){b.close(a)})["catch"](function(a){e.show(f.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("ChatWebsiteDispositionViewCtrl",["$scope","$stateParams","$uibModal","$translate","ChatWebsite","xAlert",function(a,b,c,d,e,f){a.initView=function(){return e.get({websiteId:b.websiteId,controller:"dispositions"}).$promise.then(function(b){a.dispositions=b.rows})["catch"](function(a){console.error(a),f.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},a.updateDisposition=function(a,c){return e.update({websiteId:b.websiteId,controller:"dispositions",id:a},{name:c}).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE")+"!","success")})["catch"](function(a){console.error(a),f.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},a.deleteDisposition=function(c){return console.log("delete"),e.remove({websiteId:b.websiteId,controller:"dispositions",id:c}).$promise.then(function(){_.remove(a.dispositions,{id:c})})["catch"](function(a){console.error(a),f.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},a.addDisposition=function(){return c.open({animation:!0,templateUrl:"app/channels/chat/website/view/disposition/modal/add.modal.html",controller:"ChatWebsiteViewModalDispositionAddCtrl",resolve:{id:function(){return b.websiteId}}}).result.then(function(b){b&&a.dispositions.push(b)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.websites.view.dispositions",{url:"/dispositions",controller:"ChatWebsiteDispositionViewCtrl",templateUrl:"app/channels/chat/website/view/disposition/view/view.html"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.websites.view.embedding",{url:"/embedding",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("ChatWebsiteViewEmbeddingViewCtrl",["$scope","$stateParams","$translate","clipboard","xAlert","ChatWebsite",function(a,b,c,d,e,f){a.initView=function(){return f.get({websiteId:b.websiteId,controller:"snippet"}).$promise.then(function(b){a.snippetCode=b.html})["catch"](function(a){e.error(a)})},a.copyToClipboard=function(){d.copyText(a.snippetCode),e.show(c.instant("MESSAGE_TEXT_COPIED_CLIPBOARD")+"!","success")}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.websites.view.embedding.view",{url:"/view",templateUrl:"app/channels/chat/website/view/embedding/view/view.html",controller:"ChatWebsiteViewEmbeddingViewCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.websites.view.form",{url:"/forms",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("ChatWebsiteViewFormViewCtrl",["$scope","$builder","$validator","$stateParams","$translate","ChatWebsite","xAlert",function(a,b,c,d,e,f,g){a.saveForm=function(a){var c=angular.copy(b.forms[a]);return c.length>3?g.show("You can insert at least 3 input elements","danger"):(_.forEach(c,function(a){delete a.id}),f.updateFields({websiteId:d.websiteId,controller:"fields",id:a},c).$promise.then(function(){g.show(e.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){g.error(a)}))},a.getChatWebsiteFields=function(a){return f.query({websiteId:d.websiteId,controller:"fields",id:a}).$promise.then(function(c){_.forEach(c,function(c){b.addFormObject(a,c)})})["catch"](function(a){g.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.websites.view.form.view",{url:"/view",templateUrl:"app/channels/chat/website/view/form/view/view.html",controller:"ChatWebsiteViewFormViewCtrl"})}]),angular.module("xCallyShuttleApp").controller("ChatWebsiteHooksViewCtrl",["$scope","ChatWebsite","Pause","$http","$stateParams","$translate","$location","xAlert",function(a,b,c,d,e,f,g,h){a.account={},a.isActive=!0,a.size="small",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.CONST_TIMEOUT=3e4,a.initView=function(){a.types=[{value:"",name:"-- None --"},{name:"HTTP GET",value:"GET"},{name:"HTTP POST",value:"POST"}],c.get().$promise.then(function(b){a.pauses=b.rows})["catch"](function(a){h.error(a)}),b.get({id:e.websiteId}).$promise.then(function(b){console.log(b),a.account=b,a.account.actions.length<1&&a.account.actions.push({action:"pause",enabled:!1,type:null})})["catch"](function(a){h.error(a)})},a.resetActionData=function(a){a.type=null},a.updateItem=function(){return console.log(a.account),b.update({id:e.websiteId},a.account).$promise.then(function(){h.show(f.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){h.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.websites.view.hooks",{url:"/hooks",controller:"ChatWebsiteHooksViewCtrl",templateUrl:"app/channels/chat/website/view/hooks/view/view.html"})}]),angular.module("xCallyShuttleApp").controller("ChatWebsiteViewProactiveListCtrl",["$scope","gridOptions","ChatWebsite","$http","$translate","$stateParams","$uibModal",function(a,b,c,d,e,f,g){a.initProactiveActions=function(){var d={exporterCsvFilename:"telephones.csv",columnDefs:[{name:"name"},{name:"type"},{name:"action",width:125,buttons:[{"class":"blue-hoki",onClick:"grid.appScope.createItem(row.entity)",name:"profile"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=b.gridOptions(c,d,a,{websiteId:f.websiteId,controller:"proactive"})},a.createItem=function(b){var c=g.open({animation:!0,templateUrl:"app/channels/chat/website/view/proactive/list/list.create.modal.html",controller:"ChatWebsiteProactiveListCreateCtrl",resolve:{item:b}});c.result.then(function(){a.gridOptions.getPage()})}}]),angular.module("xCallyShuttleApp").controller("ChatWebsiteProactiveListCreateCtrl",["$scope","$translate","$uibModalInstance","$stateParams","ChatWebsite","xAlert","item",function(a,b,c,d,e,f,g){a.form={},a.item=g||{},a.title=g?b.instant("APPLICATION_EDIT_PROACTIVE_ACTION"):b.instant("APPLICATION_NEW_PROACTIVE_ACTION"),a.possibleType=[{type:"mouseOver",title:"Mouse Over"},{type:"timeout",title:"Timeout"}],a.save=function(){return g?e.update({websiteId:d.websiteId,controller:"proactive",id:a.item.id},a.item).$promise.then(function(a){f.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)})["catch"](function(a){f.error(a)}):e.save({websiteId:d.websiteId,controller:"proactive"},a.item).$promise.then(function(a){f.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)})["catch"](function(a){f.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.websites.view.proactive.list",{url:"/list",templateUrl:"app/channels/chat/website/view/proactive/list/list.html",controller:"ChatWebsiteViewProactiveListCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.websites.view.proactive",{url:"/proactive",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("ChatWebsiteSettingViewCtrl",["$scope","$stateParams","$translate","$location","$timeout","socket","xAlert","ChatWebsite","List",function(a,b,c,d,e,f,g,h,i){a.initView=function(){return i.get().$promise.then(function(b){a.lists=b.rows})["catch"](function(a){console.error(a)})},a.updateItemChatWebsite=function(){return h.update({id:b.websiteId},{ListId:a.chatWebsite.ListId}).$promise.then(function(){g.show(c.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){g.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.websites.view.settings",{url:"/settings",controller:"ChatWebsiteSettingViewCtrl",templateUrl:"app/channels/chat/website/view/setting/view/view.html"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.websites.view.snippet",{url:"/snippet",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("ChatWebsiteViewSnippetViewCtrl",["$scope","$http","$stateParams","$translate","Template","$rootScope","FileUploader","$cookieStore","xAlert","ChatWebsite",function(a,b,c,d,e,f,g,h,i,j){a.$translate=d,a.statePreview={state:"online"},a.radioSwitch={isActive:!!f.license.custom,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"};var k=a.uploader=new g({url:"api/chat/websites/"+c.websiteId+"/logo",queueLimit:1,withCredentials:!0,headers:{Authorization:"Bearer "+h.get("token")}});k.filters.push({name:"imageFilter",fn:function(a){var b="|"+a.type.slice(a.type.lastIndexOf("/")+1)+"|";return-1!=="|jpg|png|jpeg|".indexOf(b)}}),k.onSuccessItem=function(b,c){a.chatWebsite.logo=c.logo,i.show(d.instant("MESSAGE_WELL_DONE"),"success")},k.onErrorItem=function(){i.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")},k.onCompleteAll=function(){k.clearQueue()},a.enquirySwitch={onText:"On",offText:"Off",isActive:!0,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.fidelitySwitch={isActive:!0,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.lang={HeaderCurrentlyChatting:"Live Chat",HeaderOffline:"Contact us", -OperatorOfflineMessage:"It appears as if all operators are currently offline.",OfflineMessage:"<strong>We're not online.</strong><br/>It doesn't mean we're not there to help - leave your message below and we'll be in touch as soon as possible.",EnquiryMessagePlaceholder:"Your message...",EnquiryButtonText:"Leave message",EnquirySubmitSuccess:"Your message was sucessfully submitted - we will contact you as soon as possible.",OperatorComposing:"{fullname} is typing...",FirstMessageText:"",ExitChatButtonText:"Exit Chat",ExitChatQuestionText:"Are you sure?",ExitChatButtonConfirmText:"Yes",ExitChatButtonCancelText:"No",MessagePlaceholderText:"Your message...",MessageSendButtonText:"Send",ValidationEmailRequired:"Please enter your email address",ValidationEmailInvalid:"Please enter a valid email address",ValidationEmailMaxLength:"The email address may not exceed 85 characters",ValidationUsernameRequired:"Please enter your name",ValidationUsernameMaxLength:"The name may not exceed 45 characters",ValidationEnquiryRequired:"Please enter your enquiry",ValidationEnquiryMaxLength:"The enquiry may not exceed 1500 characters",ValidationMessageRequired:"Please enter your message",ValidationMessageMaxLength:"The message may not exceed 750 characters"},a.initView=function(){return j.get({id:c.websiteId}).$promise.then(function(b){return a.chatWebsite=b,e.get().$promise}).then(function(b){a.templates=b.rows})["catch"](function(a){i.error(a)})},a.updateItem=function(){return j.update({id:a.chatWebsite.id},a.chatWebsite).$promise.then(function(){i.show(d.instant("MESSAGE_CHAT_WEBSITE_UPDATE_SUCCESS")+"!","success")})["catch"](function(a){i.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.websites.view.snippet.view",{url:"/view",templateUrl:"app/channels/chat/website/view/snippet/view/view.html",controller:"ChatWebsiteViewSnippetViewCtrl"})}]),angular.module("xCallyShuttleApp").controller("ChatWebsiteViewCtrl",["$scope","xAlert","$http","$location","$stateParams","$translate","WizardHandler","ChatApplication","ChatWebsite",function(a,b,c,d,e,f,g,h,i){a.initView=function(){return i.get({id:e.websiteId}).$promise.then(function(b){a.chatWebsite=b})["catch"](function(a){b.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.websites.view",{url:"/view/:websiteId",templateUrl:"app/channels/chat/website/view/view.html",controller:"ChatWebsiteViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]}])}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.websites",{url:"/websites",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:29}}})}]),angular.module("xCallyShuttleApp").controller("ChatWebsiteWizardCtrl",["$scope","$http","$location","$translate","WizardHandler","xAlert","ChatWebsite",function(a,b,c,d,e,f,g){a.$translate=d,a.next=function(){e.wizard().next()},a.exitValidation=function(a){return a},a.initWizard=function(){a.forms={formSetting:void 0,formAppearance:void 0,formLabel:void 0,formFunctionality:void 0},a.item={},a.item.remote=c.protocol()+"://"+location.host,a.item.color="#000080",a.item.color_focus="#000080",a.item.color_button="#000080",a.item.header_shape="rounded",a.item.animation=!0,a.item.header_online="We are here!",a.item.online_message="<strong>Questions?</strong><br />Insert your name and email address to start a live-chat with our support team.",a.item.name_title="Name",a.item.username_placeholder="Your name",a.item.email_title="Email Address",a.item.email_placeholder="Your e-mail address",a.item.start_chat_button="Chat",a.item.rating_message="Would you like rate this chat?",a.item.rating_send="Send",a.item.rating_skip="Skip",a.item.header_offline="Contact us",a.item.offline_message="<strong>We're not online.</strong><br />It doesn't mean we're not there to help - leave your message below and we'll be in touch as soon as possible.",a.item.message_title="Message",a.item.enquiry_message_placeholder="Your message...",a.item.enquiry_button="Leave message",a.item.agents_busy="In this moment all agents are busy. Try again!",a.item.download_transcript=!0},a.createItem=function(){return g.save(a.item).$promise.then(function(){f.show(d.instant("MESSAGE_CHAT_WEBSITE_CREATE_SUCCESS"),"success"),c.path("/channels/chat/websites/list")})["catch"](function(a){f.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.websites.wizard",{url:"/wizard",templateUrl:"app/channels/chat/website/wizard/wizard.html",controller:"ChatWebsiteWizardCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.fax.accounts",{url:"/accounts",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:38}}})}]),angular.module("xCallyShuttleApp").controller("FaxAccountListCtrl",["$scope","$uibModal","gridOptions","FaxAccount",function(a,b,c,d){a.initView=function(){var b={exporterCsvFilename:"chat_websites.csv",columnDefs:[{name:"name"},{name:"description"},{name:"localstationid"},{name:"TrunkName",displayName:"APPLICATION_TRUNK"},{name:"action",width:75,buttons:[{"class":"blue-hoki",href:"/channels/fax/accounts/view/{{row.entity.id}}/settings",name:"settings"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=c.gridOptions(d,b,a)},a.createItem=function(){var c=b.open({animation:!0,templateUrl:"app/channels/fax/account/list/list.create.modal.html",controller:"FaxAccountListCreateCtrl"});c.result.then(function(){a.gridOptions.getPage()})}}]),angular.module("xCallyShuttleApp").controller("FaxAccountListCreateCtrl",["$scope","$uibModalInstance","$translate","xAlert","FaxAccount","Trunk",function(a,b,c,d,e,f){a.initWizard=function(){return a.form={},a.item={},a.trunks=[],f.get().$promise.then(function(b){a.trunks=b.rows})["catch"](function(a){d.error(a)})},a.save=function(){return e.save(a.item).$promise.then(function(a){d.show(c.instant("MESSAGE_WELL_DONE"),"success"),b.close(a)})["catch"](function(a){d.error(a)})},a.cancel=function(){b.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.fax.accounts.list",{url:"/list",templateUrl:"app/channels/fax/account/list/list.html",controller:"FaxAccountListCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.fax.accounts.view.actions",{url:"/actions",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("FaxAccountViewActionListCtrl",["$scope","gridOptions","FaxAccount","$http","$translate","$stateParams",function(a,b,c,d,e,f){a.initActons=function(){var d={draggable:!0,exporterCsvFilename:"fax_applications.csv",enableSorting:!1,enableFiltering:!1,columnDefs:[{name:"app",cellClass:"text-center"},{name:"name",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div><span>{{row.entity.app == "queue" ? row.entity.FaxQueue.name : row.entity.User.name}}</span></div>'},{name:"timeout",cellClass:"text-center"},{name:"interval",displayName:"APPLICATION_TIME_INTERVAL",cellClass:"text-center",cellTemplate:"<div><span>{{row.entity.Interval ? row.entity.Interval.name : row.entity.interval}}</span></div>"},{name:"action",width:125,buttons:[{"class":"blue-hoki",href:"/channels/fax/accounts/view/{{row.entity.FaxAccountId}}/actions/view/{{row.entity.id}}",name:"profile"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.app, row.entity.id)"}]}]};a.gridOptions=b.gridOptions(c,d,a,{accountId:f.accountId,controller:"applications"})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.fax.accounts.view.actions.list",{url:"/list",templateUrl:"app/channels/fax/account/view/action/list/list.html",controller:"FaxAccountViewActionListCtrl"})}]),angular.module("xCallyShuttleApp").controller("FaxAccountViewActionViewCtrl",["$scope","$http","$stateParams","$translate","$location","xAlert","WizardHandler","socket","application","interval","Agent","Interval","FaxQueue","FaxAccount","Template","MailAccount","SmsAccount",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){a.isActive=!0,a.size="small",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.initAction=function(){return a.$application=i.application,a.$stateParams=c,a.$interval=j.interval,a.forms={},a.apps=[{name:"Queue",value:"queue"},{name:"Agent",value:"agent"},{name:"SendMail",value:"sendMail"},{name:"SendSMS",value:"sendSms"}],n.get({accountId:c.accountId,controller:"applications",id:c.actionId}).$promise.then(function(b){if(a.application=b,a.application.alwaysTime=!1,a.application.IntervalId)a.application.intType="list";else switch(a.application.interval){case"*,*,*,*":a.application.intType="always";break;default:a.application.intType="custom"}if("always"===a.application.intType||"custom"===a.application.intType){var c=a.application.interval.split(",");"*"===c[0]?a.application.alwaysTime=!0:(a.application.t_from=moment(new Date),a.application.t_to=moment(new Date),a.application.t_from.hour(c[0].split("-")[0].split(":")[0]),a.application.t_from.minute(c[0].split("-")[0].split(":")[1]),a.application.t_to.hour(c[0].split("-")[1].split(":")[0]),a.application.t_to.minute(c[0].split("-")[1].split(":")[1])),"*"===c[1]?(a.application.wd_from="always",a.application.wd_to="always"):(a.application.wd_from=c[1].split("-")[0],a.application.wd_to=c[1].split("-")[1]),"*"===c[2]?(a.application.md_from="always",a.application.md_to="always"):(a.application.md_from=c[2].split("-")[0],a.application.md_to=c[2].split("-")[1]),"*"===c[3]?(a.application.m_from="always",a.application.m_to="always"):(a.application.m_from=c[3].split("-")[0],a.application.m_to=c[3].split("-")[1])}a.$watch("application.t_from",function(b){a.application.t_from_hm=moment(b).format("HH:mm")}),a.$watch("application.t_to",function(b){a.application.t_to_hm=moment(b).format("HH:mm")})})["catch"](function(a){f.error(a)})},a.getQueues=function(){return m.get().$promise.then(function(b){a.queues=b.rows})["catch"](function(a){console.error(a)})},a.getAgents=function(){return k.get().$promise.then(function(b){a.agents=b.rows})["catch"](function(a){console.error(a)})},a.getIntervals=function(){return l.get().$promise.then(function(b){a.intervals=b.rows})["catch"](function(a){console.error(a)})},a.getSmsAccounts=function(){return q.get().$promise.then(function(b){a.smsAccounts=b.rows})["catch"](function(a){console.error(a)})},a.getTemplates=function(){return o.get().$promise.then(function(b){a.templates=b.rows})["catch"](function(a){console.error(a)})},a.getMailAccounts=function(){return p.get().$promise.then(function(b){a.mailAccounts=b.rows})["catch"](function(a){console.error(a)})},a.updateItem=function(){switch(a.application.intType){case"always":a.application.interval="*,*,*,*",a.application.IntervalId=null;break;case"list":var b=_.find(a.intervals,{id:a.application.IntervalId});a.application.interval=b?"":"*,*,*,*",a.application.IntervalId=b?a.application.IntervalId:null;break;case"custom":var g,h,i,j,k;g=a.application.t_from&&a.application.t_to&&!a.application.alwaysTime?moment(a.application.t_from).format("HH:mm")+"-"+moment(a.application.t_to).format("HH:mm"):"*",a.application.wd_from&&"always"!==a.application.wd_from?(h=a.application.wd_from,a.application.wd_to&&"always"!==a.application.wd_to&&(h+="-"+a.application.wd_to)):h="*",a.application.md_from&&"always"!==a.application.md_from?(i=a.application.md_from,a.application.md_to&&"always"!==a.application.md_to&&(i+="-"+a.application.md_to)):i="*",a.application.m_from&&"always"!==a.application.m_from?(j=a.application.m_from,a.application.m_to&&"always"!==a.application.m_to&&(j+="-"+a.application.m_to)):j="*",k=g+","+h+","+i+","+j,a.application.interval=k,a.application.IntervalId=null}return n.update({accountId:c.accountId,controller:"applications",id:c.actionId},a.application).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success"),e.path("/channels/fax/accounts/view/"+c.accountId+"/actions/list")})["catch"](function(a){f.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.fax.accounts.view.actions.view",{url:"/view/:actionId",templateUrl:"app/channels/fax/account/view/action/view/view.html",controller:"FaxAccountViewActionViewCtrl"})}]),angular.module("xCallyShuttleApp").controller("FaxAccountViewActionWizardCtrl",["$scope","$http","Agent","FaxQueue","Interval","$stateParams","$translate","$location","xAlert","WizardHandler","socket","application","interval","FaxAccount","Template","MailAccount","SmsAccount",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){a.isActive=!0,a.size="small",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.initWizard=function(){a.apps=[{name:"Queue",value:"queue"},{name:"Agent",value:"agent"},{name:"SendMail",value:"sendMail"},{name:"SendSMS",value:"sendSms"}],a.$application=l.application,a.$stateParams=f,a.$interval=m.interval,a.forms={},a.application={alwaysTime:!0},a.$watch("application.t_from",function(b){a.application.t_from_hm=moment(b).format("HH:mm")}),a.$watch("application.t_to",function(b){a.application.t_to_hm=moment(b).format("HH:mm")})},a.getQueues=function(){return d.get().$promise.then(function(b){a.queues=b.rows})["catch"](function(a){console.error(a)})},a.getAgents=function(){return c.get().$promise.then(function(b){a.agents=b.rows})["catch"](function(a){console.error(a)})},a.getIntervals=function(){return e.get().$promise.then(function(b){a.intervals=b.rows})["catch"](function(a){console.error(a)})},a.getSmsAccounts=function(){return q.get().$promise.then(function(b){a.smsAccounts=b.rows})["catch"](function(a){console.error(a)})},a.getTemplates=function(){return o.get().$promise.then(function(b){a.templates=b.rows})["catch"](function(a){console.error(a)})},a.getMailAccounts=function(){return p.get().$promise.then(function(b){a.mailAccounts=b.rows})["catch"](function(a){console.error(a)})},a.createItem=function(){switch(a.application.intType){case"always":a.application.interval="*,*,*,*",a.application.IntervalId=null;break;case"list":var b=_.find(a.intervals,{id:a.application.IntervalId});a.application.interval=b?"":"*,*,*,*",a.application.IntervalId=b?a.application.IntervalId:null;break;case"custom":var c,d,e,j,k;c=a.application.t_from&&a.application.t_to&&!a.application.alwaysTime?moment(a.application.t_from).format("HH:mm")+"-"+moment(a.application.t_to).format("HH:mm"):"*",a.application.wd_from&&"always"!==a.application.wd_from?(d=a.application.wd_from,a.application.wd_to&&"always"!==a.application.wd_to&&(d+="-"+a.application.wd_to)):d="*",a.application.md_from&&"always"!==a.application.md_from?(e=a.application.md_from,a.application.md_to&&"always"!==a.application.md_to&&(e+="-"+a.application.md_to)):e="*",a.application.m_from&&"always"!==a.application.m_from?(j=a.application.m_from,a.application.m_to&&"always"!==a.application.m_to&&(j+="-"+a.application.m_to)):j="*",k=c+","+d+","+e+","+j,a.application.interval=k,a.application.IntervalId=null}return n.save({accountId:f.accountId,controller:"applications"},a.application).$promise.then(function(){i.show(g.instant("MESSAGE_WELL_DONE"),"success"),h.path("/channels/fax/accounts/view/"+f.accountId+"/actions/list")})["catch"](function(a){i.error(a)})},a.formValidation=function(a){return a},a.next=function(){j.wizard().next()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.fax.accounts.view.actions.wizard",{url:"/wizard",templateUrl:"app/channels/fax/account/view/action/wizard/wizard.html",controller:"FaxAccountViewActionWizardCtrl"})}]),angular.module("xCallyShuttleApp").factory("FaxDisposition",["$resource",function(a){return a("/api/fax/dispositions/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("FaxInboxViewModaDispositionAddCtrl",["$scope","$uibModalInstance","FaxAccount","id","xAlert",function(a,b,c,d,e){a.ok=function(){return c.save({accountId:d,controller:"dispositions"},{name:a.name}).$promise.then(function(a){b.close(a)})["catch"](function(a){e.error(a)})},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("FaxAccountDispositionViewCtrl",["$scope","$stateParams","$uibModal","$translate","FaxAccount","xAlert",function(a,b,c,d,e,f){a.initView=function(){return e.get({accountId:b.accountId,controller:"dispositions"}).$promise.then(function(b){a.dispositions=b.rows})["catch"](function(a){f.error(a)})},a.updateDisposition=function(a,c){return e.update({accountId:b.accountId,controller:"dispositions",id:a},{name:c}).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE")+"!","success")})["catch"](function(a){f.error(a)})},a.deleteDisposition=function(c){return e.remove({accountId:b.accountId,controller:"dispositions",id:c}).$promise.then(function(){_.remove(a.dispositions,{id:c})})["catch"](function(a){f.error(a)})},a.addDisposition=function(){return c.open({animation:!0,templateUrl:"app/channels/fax/account/view/disposition/modal/add.modal.html",controller:"FaxInboxViewModaDispositionAddCtrl",resolve:{id:function(){return b.accountId}}}).result.then(function(b){b&&a.dispositions.push(b)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.fax.accounts.view.dispositions",{url:"/dispositions",controller:"FaxAccountDispositionViewCtrl",templateUrl:"app/channels/fax/account/view/disposition/view/view.html"})}]),angular.module("xCallyShuttleApp").controller("FaxAccountHooksViewCtrl",["$scope","FaxAccount","Pause","$http","$stateParams","clipboard","$translate","$location","xAlert","List",function(a,b,c,d,e,f,g,h,i,j){a.account={},a.isActive=!0,a.size="small",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.CONST_TIMEOUT=3e4,a.initView=function(){a.types=[{value:"",name:"-- None --"},{name:"HTTP GET",value:"GET"},{name:"HTTP POST",value:"POST"}],c.get().$promise.then(function(b){a.pauses=b.rows})["catch"](function(a){i.error(a)}),b.get({id:e.accountId}).$promise.then(function(b){a.account=b,a.account.actions.length<1&&a.account.actions.push({action:"pause",enabled:!1,type:null})})["catch"](function(a){i.error(a)})},a.resetActionData=function(a){a.type=null},a.updateItemFaxAccount=function(){return console.log(a.account),b.update({id:e.accountId},a.account).$promise.then(function(){i.show(g.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){i.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.fax.accounts.view.hooks",{url:"/hooks",controller:"FaxAccountHooksViewCtrl",templateUrl:"app/channels/fax/account/view/hooks/view/view.html"})}]),angular.module("xCallyShuttleApp").controller("FaxAccountSettingViewCtrl",["$scope","$stateParams","$translate","FaxAccount","List","Trunk","xAlert",function(a,b,c,d,e,f,g){a.isActive=!0,a.size="small",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.initView=function(){return a.rate=["2400","4800","7200","9600","12000","14400"],a.techs=["SIP","IAX","DADHI","KHOMP"],f.get().$promise.then(function(b){a.trunks=b.rows})["catch"](function(a){g.error(a)}),e.get().$promise.then(function(b){a.lists=b.rows})["catch"](function(a){g.error(a)}),d.get({id:b.accountId}).$promise.then(function(b){a.account=b})["catch"](function(a){g.error(a)})},a.updateItemFaxAccount=function(){return d.update({id:b.accountId},a.account).$promise.then(function(){g.show(c.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){g.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.fax.accounts.view.settings",{url:"/settings",controller:"FaxAccountSettingViewCtrl",templateUrl:"app/channels/fax/account/view/setting/view/view.html"})}]),angular.module("xCallyShuttleApp").controller("FaxAccountViewCtrl",["$scope","$http","$stateParams","$translate","$location","WizardHandler","socket","xAlert","Modal","FaxAccount",function(a,b,c,d,e,f,g,h,i,j){a.initView=function(){return j.get({id:c.accountId}).$promise.then(function(b){a.account=b})["catch"](function(a){h.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.fax.accounts.view",{url:"/view/:accountId",templateUrl:"app/channels/fax/account/view/view.html",controller:"FaxAccountViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]})}]}})}]),angular.module("xCallyShuttleApp").controller("FaxAccountWizardCtrl",["$scope","$http","$location","$translate","xAlert","WizardHandler","Trunk","FaxAccount",function(a,b,c,d,e,f,g,h){a.translate=d,a.isActive=!0,a.size="small",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.initWizard=function(){return a.$translate=d,a.forms={},a.item={},a.rate=["2400","4800","7200","9600","12000","14400"],a.techs=["SIP","IAX","DADHI","KHOMP"],a.item.headerinfo="xCALLY Motion Fax",a.item.ecm="yes",a.item.minrate="4800",a.item.maxrate="14400",a.item.modem="v17,v27,v29",a.item.gateway="no",a.item.faxdetect="no",a.item.t38timeout=5e3,a.item.tech="SIP",g.get().$promise.then(function(b){a.trunks=b.rows})["catch"](function(a){e.error(a)})},a.next=function(){f.wizard().next()},a.previous=function(){f.wizard().previous()},a.exitValidation=function(a){return a},a.createItem=function(){return h.save(a.item).$promise.then(function(a){e.show(d.instant("MESSAGE_WELL_DONE"),"success"),c.path("/channels/fax/accounts/list")})["catch"](function(a){e.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.fax.accounts.wizard",{url:"/wizard",templateUrl:"app/channels/fax/account/wizard/wizard.html",controller:"FaxAccountWizardCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.fax",{url:"/fax",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user","agent"],redirectTo:"landing",id:10}}})}]),angular.module("xCallyShuttleApp").factory("FaxAccount",["$resource",function(a){return a("/api/fax/accounts/:accountId/:controller/:id",{id:"@accountId"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("FaxAttachment",["$resource",function(a){return a("/api/fax/attachments/:id/:controller",{id:"@id"})}]),angular.module("xCallyShuttleApp").factory("FaxMessage",["$resource",function(a){return a("/api/fax/messages/:id/:controller",{id:"@id",controller:"@controller"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("FaxReport",["$resource",function(a){return a("/api/report/faxs/:id/:controller1/:controller2",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("FaxRoom",["$resource",function(a){return a("/api/fax/rooms/:id/:controller",{id:"@id",controller:"@controller"},{update:{method:"PUT"},patch:{method:"PATCH"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.fax.inbox",{url:"/inbox",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user","agent"],redirectTo:"landing",id:40}}})}]),angular.module("xCallyShuttleApp").controller("FaxInboxInfoModalCtrl",["$scope","$translate","$uibModalInstance","$stateParams","xAlert","messageId","FaxMessage",function(a,b,c,d,e,f,g){a.data=null,a.initInfo=function(){g.get({id:f}).$promise.then(function(b){a.data={channel:b.channel,channelstate:b.channelstate,channelstatedesc:b.channelstatedesc,uniqueid:b.uniqueid,localstationid:b.localstationid,remotestationid:b.remotestationid,pagestransferred:b.pagestransferred,resolution:b.resolution,transferrate:b.transferrate,lastStatus:b.lastStatus,error:b.error,retry:b.retry}})["catch"](function(b){switch(b.status){case 404:a.data=null;break;default:e.error(b)}})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").directive("faxMessage",["$rootScope","$translate","$uibModal","FaxMessage","List","xAlert",function(a,b,c,d,e,f){return{restrict:"E",scope:{message:"=",listId:"="},templateUrl:"app/channels/fax/inbox/message/message.directive.html",link:function(g){g.openContact=function(c){return g.listId?e.save({listId:g.listId,controller:"contacts"},{fax:c}).$promise.then(function(b){var c=_.find(a.$root.workspaces,{contactID:b.id});c?c.active=!0:a.$root.workspaces.push({active:!0,"class":"icon-user",contactID:b.id,name:b.fax,type:"contact"})})["catch"](function(a){f.error(a)}):void f.show(b.instant("MESSAGE_NO_LIST_CONFIGURED"),"info")},g.info=function(a){c.open({animation:!0,templateUrl:"app/channels/fax/inbox/message/info.modal.html",controller:"FaxInboxInfoModalCtrl",resolve:{messageId:function(){return a.id}}})},g.retry=function(a){return d.update({id:a,status:"SENDING"}).$promise["catch"](function(a){console.error(a)})}}}}]),angular.module("xCallyShuttleApp").directive("faxNote",["$translate","Modal","Auth","FaxMessage","xAlert",function(a,b,c,d,e){return{restrict:"E",scope:{message:"="},templateUrl:"app/channels/fax/inbox/note/note.directive.html",link:function(f){f.Auth=c,f.deleteNote=b.confirm["delete"](function(){return d.remove({id:f.message.id}).$promise.then(function(){e.show(a.instant("MESSAGE_WELL_DONE")+"!","success")})["catch"](function(a){e.error(a)})})}}}]),angular.module("xCallyShuttleApp").controller("FaxInboxViewModalNoteCtrl",["$scope","$uibModalInstance","$translate","id","FaxRoom","xAlert",function(a,b,c,d,e,f){a.initModal=function(){a.item={}},a.ok=function(){return e.save({id:d,controller:"messages"},{text:a.item.text,status:"NOTE"}).$promise.then(function(){f.show(c.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){f.error(a)})["finally"](function(){b.close()})},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").directive("faxRoom",["$cookieStore","$translate","$uibModal","$timeout","FaxAccount","FaxRoom","FaxMessage","FileUploader","xAlert","usSpinnerService","socket","Tag","Auth","FaxAttachment","List",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){return{restrict:"E",scope:{workspace:"="},templateUrl:"app/channels/fax/inbox/room/room.directive.html",link:function(m){function p(a){if(a){var b=_.words(a),c=_.map(b,function(a){return a?a[0]:""});return c.join("").toUpperCase()}return!1}m.$on("$destroy",function(){}),m.initForm=function(){m.forms={compose:{}}},m.getContacts=function(a){return m.listId?o.get({listId:m.listId,controller:"contacts",fax:a}).$promise.then(function(a){return a.rows})["catch"](function(a){console.error(a)}):[]},m.setList=function(a){m.listId=a};var q=[];m.expanded=!0,m.modelOptions={debounce:{"default":500,blur:250},getterSetter:!0},m.panelLeft=null,m.panelRight="col-md-12",m.form={from:"",to:m.workspace.data&&m.workspace.data.to?m.workspace.data.to:"",disabled:!1},k.socket.on("fax_message:remove",function(a){_.remove(m.faxRoom.FaxMessages,{id:a.id})}),k.socket.on("fax_message:save",function(a){return m.workspace.id&&a.FaxRoomId==m.workspace.id?(m.workspace.active||m.workspace.unread++,g.get({id:a.id}).$promise.then(function(a){m.faxRoom||(m.faxRoom={FaxMessages:[]});var b=_.findIndex(m.faxRoom.FaxMessages,{id:a.id});b>-1?_.merge(m.faxRoom.FaxMessages[b],a):m.faxRoom.FaxMessages.unshift(a),m.panelLeft="col-md-6",m.panelRight="col-md-6"})["catch"](function(a){console.error(a)})):void 0});var r=m.uploader=new h({url:"api/fax/attachments",autoUpload:!0,withCredentials:!0,queueLimit:1,headers:{Authorization:"Bearer "+a.get("token")}});return r.filters.push({name:"uploadFilter",fn:function(a){var b="|"+a.type.slice(a.type.lastIndexOf("/")+1)+"|";return-1!=="|pdf|tiff|tif".indexOf(b)}}),r.onWhenAddingFileFailed=function(a,c){switch(c.name){case"queueLimit":i.show(b.instant("MESSAGE_QUEUE_LIMIT_EXCEEDED"),"danger");break;case"uploadFilter":i.show(b.instant("MESSAGE_WRONG_FILE_FORMAT"),"danger");break;default:i.show(b.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")}},r.removeFromQueue=function(a){var c=this;return n["delete"]({id:a.basename}).$promise.then(function(){var b=c.getIndexOfItem(a),d=c.queue[b];d.isUploading&&d.cancel(),c.queue.splice(b,1),d._destroy(),c.progress=c._getTotalProgress(),q=_.reject(q,{basename:a.basename})})["catch"](function(){i.show(b.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},r.onErrorItem=function(){i.show(b.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")},r.onSuccessItem=function(a,b){var c={path:b.path,name:b.name,basename:b.basename,type:b.type};a=_.merge(a,c),q.push(c)},m.getMessageMailId=function(a){var b=a.UserId?"imgFaxUserId"+a.UserId:"imgFaxVisitorId";return b+=m.faxRoom.id.toString()+a.id.toString()},m.togglePanelLeft=function(){m.panelLeft?(m.panelLeft=null,m.panelRight="col-md-12"):(m.panelLeft="col-md-6",m.panelRight="col-md-6")},m.closeRoom=function(){return c.open({animation:!0,templateUrl:"app/channels/fax/inbox/status/status.modal.html",controller:"FaxInboxStatusModalCtrl",resolve:{status:function(){return m.faxRoom.status},accountId:function(){return m.faxRoom.FaxAccount.id}}}).result.then(function(a){return f.update({id:m.workspace.id},a).$promise["catch"](function(a){i.error(a)})})},m.loadAgents=function(){c.open({animation:!0,templateUrl:"app/channels/fax/inbox/view/view.agents.modal.html",controller:"FaxInboxViewModalAgentCtrl",resolve:{roomId:function(){return m.workspace.id}}})},m.cancel=function(){m.form.disabled=!1,m.form.from="",m.form.to=""},m.loadNote=function(){c.open({animation:!0,templateUrl:"app/channels/fax/inbox/note/note.modal.html",controller:"FaxInboxViewModalNoteCtrl",resolve:{id:function(){return m.workspace.id}}})},m.getMessageFaxId=function(a){var b=a.UserId?"imgFaxUserId"+a.UserId:"imgFaxVisitorId";return b+=m.faxRoom.id.toString()+a.id.toString()},m.getMessageRoomAvatar=function(a,b,c,e){d(function(){var d=b?"#imgFaxUserId"+b:"#imgFaxVisitorId";d+=m.faxRoom.id.toString()+a.toString(),angular.element(d).avatar({useGravatar:!1,initials:e?[]:p(c),fallbackImage:e?"api/users/avatar/"+e:"api/users/avatar/unknown_avatar"})})},m.onChanged=function(){return f.update({id:m.workspace.id},{tags:m.form.tags}).$promise["catch"](function(a){i.error(a)})},m.sendFax=function(){j.spin("spinner-grid");var a={from:m.form.from,to:m.form.to[0].fax||"",status:"SENDING",FaxAttachments:q,FaxRoomId:m.faxRoom?m.faxRoom.id:null},c=_.find(m.faxAccounts,{localstationid:m.form.from});return c?e.save({accountId:c.id,controller:"send"},a).$promise.then(function(a){return r.queue=[],q=[],i.show(b.instant("MESSAGE_WELL_DONE"),"success"),m.SmsRoom?m.SmsRoom:f.get({id:"messages",controller:a.id}).$promise}).then(function(a){a&&(m.workspace.id=a.id,m.workspace.name=a.contact,m.faxRoom=a,m.panelLeft="col-md-6",m.panelRight="col-md-6",m.expanded=!1)})["catch"](function(a){i.error(a)})["finally"](function(){j.stop("spinner-grid")}):(console.log("Can not find account"),void j.stop("spinner-grid"))},l.get().$promise.then(function(a){m.tags=_.map(a.rows,"name")})["catch"](function(a){console.error(a)}),e.get().$promise.then(function(a){m.faxAccounts=a.rows})["catch"](function(a){console.error(a)}),m.workspace.id?(m.panelLeft="col-md-6",m.panelRight="col-md-6",f.get({id:m.workspace.id}).$promise.then(function(a){m.faxRoom=a,m.form.from=a.FaxAccount.localstationid,m.form.tags=a.tags,m.workspace.name=a.contact||"No number",m.expanded=!1; -var b=_.findLast(a.FaxMessages,{status:"RECEIVED"});return b&&(m.form.to=[{fax:b.from}]),k.socket.on("fax_room:save",function(a){a.id===m.workspace.id&&_.merge(m.faxRoom,a)}),a})["catch"](function(a){i.error(a)})["finally"](function(){j.stop("spinner-grid"),m.form.disabled=!1})):(m.panelLeft=null,m.panelRight="col-md-12",j.stop("spinner-grid"),void 0)}}}]),angular.module("xCallyShuttleApp").controller("FaxInboxStatusModalCtrl",["$scope","$uibModalInstance","FaxAccount","status","accountId",function(a,b,c,d,e){a.modal={title:"APPLICATION_CONFIRM_CLOSE",text:"MESSAGE_ARE_YOU_SURE_YOU_WANT_TO_CLOSE_THE_FAX"},a.initDisposition=function(){return a.item={disposition:null,status:"CLOSED"},c.get({accountId:e,controller:"dispositions"}).$promise.then(function(b){a.dispositions=b.rows})["catch"](function(a){console.error(a)})},a.ok=function(){b.close(a.item)},a.cancel=function(){b.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.fax.inbox.view.account",{url:"/account/:id",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user","agent"],redirectTo:"landing",id:10}}})}]),angular.module("xCallyShuttleApp").controller("FaxInboxViewAccountListCtrl",["$scope","$rootScope","$uibModal","$translate","$stateParams","$state","Tag","usSpinnerService","socket","FaxAccount","FaxRoom","gridOptions","uiGridConstants","Auth","Modal","xAlert","localStorageService","uibButtonConfig",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r){a.openRoom=function(b){var c=_.find(a.workspaces,{id:b,type:"faxRoom"});return c?c.active=!0:a.workspaces.push({id:b,type:"faxRoom","class":"fa fa-fax",active:!0}),b&&"agent"===n.getCurrentUser().role&&"PENDING"!==a.query.status&&"CLOSED"!==a.query.status?k.patch({id:b},{status:"OPEN",openReason:"agent"}).$promise["catch"](function(a){console.error(a)}):void 0},a.getPage=function(){h.spin("spinner-grid");var b={accountId:e.id,controller:"rooms"};return a.query&&_.merge(b,a.query),j.query(b).$promise.then(function(b){q.set("faxAccountId",e.id),a.gridOptions.data=b,i.socket.on("fax_room:save",function(b){if(b.FaxAccountId==e.id){var c=_.find(a.gridOptions.data,{id:b.id});c?c.status!==b.status?_.remove(a.gridOptions.data,{id:b.id}):_.merge(c,b):a.query.status===b.status&&a.gridOptions.data.push(b)}}),i.socket.on("fax_room:remove",function(b){_.remove(a.gridOptions.data,{id:b.id})})})["catch"](function(a){p.error(a)})["finally"](function(){h.stop("spinner-grid")})},a.initView=function(){r.activeClass="green-haze",a.id=[],a.isAdmin=n.isAdmin(),a.isAgent=n.isAgent(),a.uncheckable=!1,a.query={status:q.get("faxStatus")?q.get("faxStatus"):"NEW",tags:q.get("faxTags")?q.get("faxTags"):[]},a.$watch("query.status",function(){q.set("faxStatus",a.query.status),a.getPage(a.query)},!0),j.get().$promise.then(function(b){a.faxAccounts=b.rows})["catch"](function(a){console.error(a)}),g.get().$promise.then(function(b){a.tags=_.map(b.rows,"name")})["catch"](function(a){console.error(a)}),a.gridOptions={exporterCsvFilename:"fax_rooms.csv",enableRowHeaderSelection:!0,paginationPageSizes:[10,25,50,75],paginationPageSize:10,enableFiltering:!0,enableSorting:!0,enableGridMenu:!1,flatEntityAccess:!0,showGridFooter:!0,fastWatch:!0,enableSelectAll:!0,enableHorizontalScrollbar:0,enableVerticalScrollbar:0,columnDefs:[{name:"lastEvent",displayName:"",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div> <span data-ng-class=\"{'icon-arrow-up font-green': row.entity.lastEvent === 'SENT', 'icon-arrow-up font-yellow': row.entity.lastEvent === 'SENDING', 'icon-arrow-down font-green': row.entity.lastEvent === 'RECEIVED', 'icon-close font-red': row.entity.lastEvent === 'FAILED', 'icon-question': !row.entity.lastEvent}\"> </span> </div>",width:30,enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1},{name:"tags",displayName:"",headerCellTemplate:'<i class="icon-tag" style="margin-top: 8px; margin-left: 8px;"></i>',cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div><i data-ng-class=\"row.entity.tags.length ? 'icon-tag' : ''\" title=\"{{row.entity.tags}}\"></i></div>",width:30,enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1},{name:"id",displayName:"Id",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div><span>#{{row.entity.id}}</span></div>",width:75,enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1},{name:"contact",cellClass:"text-center"},{name:"disposition",displayName:"APPLICATION_DISPOSITION",headerCellFilter:"translate"},{name:"updatedAt",cellFilter:"date:'MM/dd/yyyy HH:mm'",width:120,enableSorting:!1,enableFiltering:!1,sort:{direction:m.DESC}},{name:"action",cellTemplate:'<div> <a class="btn btn-icon-only font-green" data-ng-hide="row.entity.waiting" data-ng-click="grid.appScope.openRoom(row.entity.id, row.entity.contact)"><i class="fa fa-fax" aria-hidden="true"></i></a> <a class="btn btn-icon-only font-red" data-ng-show="grid.appScope.isAdmin" data-ng-click="grid.appScope.deleteItem(row.entity.id, row.entity.id)"><i class="fa fa-trash" aria-hidden="true"></i> </div>',enableSorting:!1,cellClass:"ui-grid-vcenter",width:70,enableFiltering:!1,enableColumnMenu:!1}],data:[],onRegisterApi:function(b){a.gridApi=b,a.gridApi.selection&&(a.gridApi.selection.on.rowSelectionChanged(a,function(b){b.isSelected?a.id.push(a.gridApi.grid.options.primaryKey?b.entity[a.gridApi.grid.options.primaryKey]:b.entity.id):_.pull(a.id,a.gridApi.grid.options.primaryKey?b.entity[a.gridApi.grid.options.primaryKey]:b.entity.id)}),a.gridApi.selection.on.rowSelectionChangedBatch(a,function(b){b[0].isSelected?a.id=_.union(a.id,_.map(b,a.gridApi.grid.options.primaryKey?"entity."+a.gridApi.grid.options.primaryKey:"entity.id")):_.map(b,a.gridApi.grid.options.primaryKey?"entity."+a.gridApi.grid.options.primaryKey:"entity.id").forEach(function(b){_.pull(a.id,b)})}))}},a.getPage(a.query)},a.onChanged=function(){q.set("faxTags",a.query.tags),a.getPage(a.query)},a.loadAgents=function(a){c.open({animation:!0,templateUrl:"app/channels/fax/inbox/view/view.agents.modal.html",controller:"FaxInboxViewModalAgentCtrl",resolve:{roomId:a}})},a.tagItems=function(){c.open({animation:!0,templateUrl:"app/channels/fax/inbox/view/view.tags.modal.html",controller:"FaxInboxViewModalTagCtrl",resolve:{id:function(){return a.id}}}).result.then(function(){a.gridApi.selection.clearSelectedRows(),a.id=[]})},a.deleteItem=o.confirm["delete"](function(b){var c={id:b};return k.remove(c).$promise.then(function(){a.getPage(),p.show(d.instant("MESSAGE_WELL_DONE")+"!","success"),a.gridApi.selection.clearSelectedRows(),a.id=[]})["catch"](function(a){p.error(a)})}),a.deleteItems=o.confirm["delete"](function(){var b={ids:a.id};return k["delete"](b).$promise.then(function(){a.getPage(),p.show(d.instant("MESSAGE_WELL_DONE")+"!","success"),a.gridApi.selection.clearSelectedRows(),a.id=[]})["catch"](function(a){p.error(a)})}),a.disposeItems=function(){return c.open({animation:!0,templateUrl:"app/channels/fax/inbox/status/status.modal.html",controller:"FaxInboxStatusModalCtrl",resolve:{status:function(){return null},accountId:function(){return e.id}}}).result.then(function(b){return k.patch({id:a.id},b).$promise.then(function(){a.gridApi.selection.clearSelectedRows(),a.id=[]})["catch"](function(a){p.error(a)})})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.fax.inbox.view.account.list",{url:"/list",templateUrl:"app/channels/fax/inbox/view/account/list/list.html",controller:"FaxInboxViewAccountListCtrl",data:{permissions:{only:["admin","user","agent"],redirectTo:"landing",id:10}}})}]),angular.module("xCallyShuttleApp").controller("FaxInboxViewModalAgentCtrl",["$scope","$uibModalInstance","$translate","$stateParams","Agent","FaxRoom","xAlert","roomId",function(a,b,c,d,e,f,g,h){a.initModal=function(){a.agents=[],a.item={agents:[]},e.get().$promise.then(function(b){b.rows.forEach(function(b){a.agents.push(b)})})["catch"](function(a){console.error(a)}),f.query({id:h,controller:"agents"}).$promise.then(function(b){b.forEach(function(b){a.agents.push(b),a.item.agents.push(b.id)})})["catch"](function(a){console.error(a)}),a.modal={dismissable:!0,title:"APPLICATION_MESSAGE_SEND_RETRY",text:"MESSAGE_MESSAGE_SEND_RETRY",buttons:[{classes:"btn btn-success",text:"APPLICATION_RETRY",click:function(a){b.close(a)}},{classes:"btn default",text:"APPLICATION_CANCEL",click:function(a){b.dismiss(a)}}]}},a.ok=function(){return f.update({id:h,controller:"agents",agents:a.item.agents}).$promise.then(function(){g.show(c.instant("MESSAGE_WELL_DONE"),"success"),b.close()})["catch"](function(a){console.error(a)})},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("FaxInboxViewCtrl",["$scope","$timeout","$location","localStorageService","FaxAccount","xAlert",function(a,b,c,d,e,f){a.initView=function(){return e.get().$promise.then(function(b){var e=null;a.faxAccounts=b.rows,a.faxAccounts.length&&(e="/channels/fax/inbox/view/account/"+(d.get("faxAccountId")||a.faxAccounts[0].id)+"/list"),e&&c.path(e)})["catch"](function(a){f.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.fax.inbox.view",{url:"/view",templateUrl:"app/channels/fax/inbox/view/view.html",controller:"FaxInboxViewCtrl",reload:!0,resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/inbox.css"]}])}]}})}]),angular.module("xCallyShuttleApp").controller("FaxInboxViewModalStatusCtrl",["$scope","$uibModalInstance","$translate","$stateParams","$location","FaxRoom","xAlert","id","status",function(a,b,c,d,e,f,g,h,i){a.initModal=function(){a.modal={dismissable:!0,title:"APPLICATION_STATUS",html:"<p>"+c.instant("MESSAGE_CHANGE_STATUS")+"<strong> "+i+"</strong>?</p>",status:i,buttons:[{classes:"btn btn-success",text:"APPLICATION_CONFIRM",click:function(a){return f.update({id:h},{status:i}).$promise.then(function(){g.show(c.instant("MESSAGE_STATUS_UPDATE_SUCCESS"),"success"),b.close(a)})["catch"](function(a){g.error(a)})}},{classes:"btn default",text:"APPLICATION_CANCEL",click:function(a){b.dismiss(a)}}]}}}]),angular.module("xCallyShuttleApp").controller("FaxInboxViewModalTagCtrl",["$scope","$uibModalInstance","$translate","$stateParams","Tag","FaxRoom","xAlert","id",function(a,b,c,d,e,f,g,h){console.log(h),a.initModal=function(){return a.tags=[],a.item={tags:[]},a.modal={dismissable:!0,title:"APPLICATION_MESSAGE_SEND_RETRY",text:"MESSAGE_MESSAGE_SEND_RETRY",buttons:[{"class":"btn-success",text:"APPLICATION_TAG",click:function(){var d={status:!0};return f.patch({id:h},{tags:a.item.tags}).$promise["catch"](function(){d.status=!1,g.show(c.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})["finally"](function(){b.close(d)})}},{"class":"default",text:"APPLICATION_CANCEL",click:function(a){b.dismiss(a)}}]},e.get().$promise.then(function(b){a.tags=_.map(b.rows,"name")})["catch"](function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").factory("FaxQueue",["$resource",function(a){return a("/api/fax/queues/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("FaxQueueListCtrl",["$scope","FaxQueue","gridOptions","Auth","$uibModal",function(a,b,c,d,e){a.initView=function(){a.Auth=d;var e={exporterCsvFilename:"fax_queues.csv",columnDefs:[{name:"name"},{name:"description"},{name:"strategy"},{name:"timeout"},{name:"action",width:100,buttons:[{"class":"blue-hoki",href:"/channels/fax/queues/view/{{row.entity.id}}/settings",name:"settings"},{"class":"green-meadow",href:"/channels/fax/queues/view/{{row.entity.id}}/agents",name:"agents",hide:"user"===d.getCurrentUser().role},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=c.gridOptions(b,e,a)},a.createItem=function(){var b=e.open({animation:!0,templateUrl:"app/channels/fax/queue/list/list.create.modal.html",controller:"FaxQueueListCreateCtrl",size:"lg"});b.result.then(function(b){console.log(b),a.gridOptions.getPage()})}}]),angular.module("xCallyShuttleApp").controller("FaxQueueListCreateCtrl",["$scope","$uibModalInstance","$translate","xAlert","FaxQueue","Team","strategies",function(a,b,c,d,e,f,g){a.form={},a.strategies=g,a.item={penalty:0,agents:[]},a.getTeams=function(){return f.get({controller:"associations"}).$promise.then(function(b){a.teams=b.rows}).then(function(){ComponentsDropdowns.bindQueue(a.teams,[],function(){return{select:function(b){a.item.agents=_.union(a.item.agents,b)},deselect:function(b){a.item.agents=_.difference(a.item.agents,b)}}})})["catch"](function(a){console.error(a)})},a.save=function(){return e.save(a.item).$promise.then(function(a){d.show(c.instant("MESSAGE_WELL_DONE"),"success"),b.close(a)})["catch"](function(a){d.error(a)})},a.cancel=function(){b.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.fax.queues.list",{url:"/list",templateUrl:"app/channels/fax/queue/list/list.html",controller:"FaxQueueListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/jquery-multi-select/css/multi-select.css","assets/plugins/jquery-multi-select/js/jquery.multi-select.js","assets/plugins/jquery-quicksearch/jquery.quicksearch.js","assets/scripts/components-dropdowns.js"]})}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.fax.queues",{url:"/queues",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:39}}})}]),angular.module("xCallyShuttleApp").controller("FaxQueueViewCtrl",["$scope","$http","$translate","$stateParams","xAlert","FaxQueue","Team","Auth","strategies",function(a,b,c,d,e,f,g,h,i){a.Auth=h,a.strategies=i;var j=function(){return{select:function(b){return f.save({id:a.queue.id,controller:"agents"},{agents:b,penalty:a.queue.penalty}).$promise.then(function(){a.getTeams()})["catch"](function(a){console.error(a)})},deselect:function(b){return f["delete"]({id:a.queue.id,controller:"agents",agents:b}).$promise.then(function(){a.getTeams()})["catch"](function(a){console.error(a)})}}};a.getQueue=function(){return f.get({id:d.id}).$promise.then(function(b){b.penalty=0,a.queue=b})["catch"](function(a){e.error(a)})},a.updateFaxQueue=function(){return f.update({id:d.id},{name:a.queue.name,description:a.queue.description,timeout:a.queue.timeout,strategy:a.queue.strategy}).$promise.then(function(){e.show(c.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){e.error(a)})},a.getTeams=function(){return g.get({controller:"associations"}).$promise.then(function(b){return a.teams=b.rows,f.get({id:d.id,controller:"agents"}).$promise}).then(function(b){ComponentsDropdowns.bindMailQueue(a.teams,_.map(b.rows,function(a){return{id:a.id,penalty:a.UserHasFaxQueue.penalty}}),j)})["catch"](function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.fax.queues.view",{url:"/view/:id",templateUrl:"app/channels/fax/queue/view/view.html",controller:"FaxQueueViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.channels.fax.queues.view.settings",{url:"/settings",templateUrl:"app/channels/fax/queue/view/view.settings.html"}).state("main.channels.fax.queues.view.agents",{url:"/agents",templateUrl:"app/channels/fax/queue/view/view.agents.html",cache:!1,serie:!0,resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/jquery-multi-select/css/multi-select.css","assets/plugins/jquery-multi-select/js/jquery.multi-select.js","assets/plugins/jquery-quicksearch/jquery.quicksearch.js","assets/scripts/components-dropdowns.js"]})}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.fax.realtime",{url:"/realtime",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:41}}})}]),angular.module("xCallyShuttleApp").controller("FaxRealtimeViewAgentCtrl",["$scope","$log","$uibModal","$translate","socket","xAlert","Agent","Pause","Action","FaxQueue","usSpinnerService","$q","uiGridConstants","Auth",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n){function o(){return k.spin("grid-spinner"),g.get(t).$promise.then(function(b){a.gridOptions.totalItems=b.count,a.gridOptions.data=[],b.rows.forEach(function(a){q(a)})})["catch"](function(a){f.error(a)})["finally"](function(){k.stop("grid-spinner")})}function p(){e.socket.on("agent:save",function(b){b=b.newValues||b;var c=_.find(a.gridOptions.data,{agentId:b.id,isAgent:!0});c&&(c.online=_.has(b,"online")?b.online:c.online,c.lastLoginAt=_.has(b,"lastLoginAt")?b.lastLoginAt:c.lastLoginAt,c.pause=_.has(b,"smsPause")?b.faxPause:c.faxPause,c.pauseType=_.has(b,"pauseType")?b.pauseType:c.pauseType,c.lastPauseAt=_.has(b,"lastPauseAt")?b.lastPauseAt:c.lastPauseAt,c.ipaddr=_.has(b,"ipaddr")?b.ipaddr:c.ipaddr,c.port=_.has(b,"port")?b.port:c.port,c.fullcontact=_.has(b,"fullcontact")?b.fullcontact:c.fullcontact,c.useragent=_.has(b,"useragent")?b.useragent:c.useragent,c.lastms=_.has(b,"lastms")?b.lastms:c.lastms,c.internal=_.has(b,"internal")?b.internal:c.internal,_.map(a.gridOptions.data,function(a){a.isAgent||a.agentId!==b.id||(a.online=_.has(b,"online")?b.online:a.online)}))}),e.socket.on("agent:remove",function(b){_.remove(a.gridOptions.data,{agentId:b.id})}),e.socket.on("user_has_fax_queue:save",function(b){var c=_.includes(_.map(a.CurrentUser.PFaxQueues,"id"),b.FaxQueueId)||n.isAdmin();if(c){var d=_.find(a.gridOptions.data,{agentId:b.UserId,isAgent:!0});if(d){var e=a.gridOptions.data.indexOf(d);a.gridOptions.data.splice(e+1,0,{isAgent:!1,agentId:b.UserId,queue:b.queue,queueId:b.FaxQueueId,agent:b.membername,online:d.online})}}}),e.socket.on("user_has_fax_queue:remove",function(b){_.remove(a.gridOptions.data,{agentId:b.UserId,queueId:b.FaxQueueId})})}function q(b){a.gridOptions.data.push({isAgent:!0,agentId:b.id,agent:b.name,online:b.online,lastLoginAt:b.lastLoginAt,lastPauseAt:b.lastPauseAt,pause:b.faxPause,pauseType:b.pauseType,ipaddr:b.ipaddr,port:b.port,fullcontact:b.fullcontact,useragent:b.useragent,lastms:b.lastms,internal:b.internal,$$treeLevel:0}),b.FaxQueues.forEach(function(c){a.gridOptions.data.push({isAgent:!1,agentId:b.id,queue:c.name,queueId:c.id,agent:b.name,online:b.online})})}function r(){return h.get().$promise.then(function(b){a.pauses=b.rows,e.syncUpdates("pause",a.pauses)})["catch"](function(a){f.error(a)})}function s(){return j.get().$promise.then(function(b){a.faxQueues=b.rows,e.syncUpdates("fax_queue",a.faxQueues)})["catch"](function(a){f.error(a)})}a.faxQueues=[];var t={controller:"realtime",controller1:"fax",offset:0,limit:10};a.moment=moment,a.initAgents=function(){a.gridOptions={enableGridMenu:!0,headerCellFilter:"translate",enableHorizontalScrollbar:0,enableVerticalScrollbar:0,enableFiltering:!0,showGridFooter:!0,paginationPageSizes:[10,25,50,75],paginationPageSize:10,useExternalPagination:!0,useExternalSorting:!0,useExternalFiltering:!0,multiSelect:!0,showTreeExpandNoChildren:!0,columnDefs:[{name:"name",displayName:"APPLICATION_AGENT",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div data-ng-if="row.entity.isAgent">{{row.entity.agent}} <{{row.entity.internal}}></div>'},{name:"online",displayName:"APPLICATION_ONLINE",width:150,headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div data-ng-if="row.entity.online != null && row.entity.isAgent"><i class="fa" data-ng-class="{\'font-green\':row.entity.online, \'font-red\':!row.entity.online,\'fa-user\':row.entity.online,\'fa-user-times\':!row.entity.online}"></i> <span data-ng-if="row.entity.online" class="left-margin">(<css-timer start-time="row.entity.lastLoginAt"></css-timer>)</span></div>',filter:{type:m.filter.SELECT,selectOptions:[{value:"true",label:"ONLINE"},{value:"false",label:"OFFLINE"}]}},{name:"faxPause",width:300,displayName:"APPLICATION_PAUSE",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div data-ng-if="row.entity.pause != null && row.entity.online" class="ui-grid-vcenter" data-ng-class="{\'paused-agent\':row.entity.pause}"><i data-ng-if="row.entity.pause" data-ng-click="grid.appScope.pause(row.entity.agentId,\'unpause\')" class="fa fa-play font-green pointer-cursor left-margin" title="{{\'APPLICATION_RESUME\' | translate}}"></i><i class="fa fa-pause font-yellow pointer-cursor" data-ng-click="grid.appScope.pause(row.entity.agentId,\'pause\',\'DEFAULT PAUSE\')" title="{{\'APPLICATION_DEFAULT_PAUSE\' | translate}}"></i><select data-ng-if="grid.appScope.pauses.length" class="pause-select pointer-cursor" data-ng-model="grid.appScope.pauseType" data-ng-change="grid.appScope.pause(row.entity.agentId,\'pause\',grid.appScope.pauseType)"><option class="pointer-cursor" data-ng-repeat="pause in grid.appScope.pauses">{{pause.name}}</option></select> <span data-ng-if="row.entity.pause">({{row.entity.pauseType}})</span><span class="left-margin"><css-timer data-ng-if="row.entity.pause" start-time="row.entity.lastPauseAt"></css-timer></span></div>',filter:{type:m.filter.SELECT,selectOptions:[{value:"true",label:"PAUSED"},{value:"false",label:"NOT PAUSED"}]},enableSorting:!1,enableColumnMenu:!1},{name:"queue",displayName:"APPLICATION_QUEUE",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1},{name:"action",displayName:"",width:170,cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div><button data-ng-if="row.entity.queueId" class="btn btn-xs red-sunglo" data-ng-click="grid.appScope.leaveQueue(row.entity.agentId,row.entity.queueId)"><i class="icon-ban"></i> {{\'APPLICATION_LEAVE\' | translate}}</button><button data-ng-if="row.entity.isAgent && row.treeNode.children.length < grid.appScope.faxQueues.length" class="btn btn-xs blue-hoki" data-ng-click="grid.appScope.joinQueue(row.entity.agentId)"><i class="icon-plus"></i> {{\'APPLICATION_JOIN_QUEUE\' | translate}}</button><div>',enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1}],data:[],gridMenuTitleFilter:function(a){var b=l.defer();return b.resolve(d.instant(a)),b.promise},onRegisterApi:function(b){a.gridApi=b,a.gridApi.grid.registerDataChangeCallback(function(){u(a.gridApi.core.getVisibleRows(a.gridApi.grid).length)}),a.gridApi.treeBase.on.rowExpanded(a,function(b){u(a.gridApi.core.getVisibleRows(a.gridApi.grid).length+b.treeNode.children.length)}),a.gridApi.treeBase.on.rowCollapsed(a,function(b){u(a.gridApi.core.getVisibleRows(a.gridApi.grid).length-b.treeNode.children.length)}),a.gridApi.core.on.sortChanged(a,function(a,b){0===b.length?t.order=null:t.order=b[0].name+" "+b[0].sort.direction.toUpperCase(),o()}),a.gridApi.pagination.on.paginationChanged(a,function(a,b){t.offset=(a-1)*b,t.limit=b,o()}),a.gridApi.core.on.filterChanged(a,function(){var a=this.grid;a.columns.forEach(function(a){a.filters[0].term?t[a.name]=a.filters[0].term:delete t[a.name]}),o()})}},o(),r(),s(),$timeout(function(){p()})};var u=function(a){var b=a?30*a+130:270;angular.element(document.getElementsByClassName("ui-grid")[0]).css("height",b+"px"),angular.element(document.getElementsByClassName("ui-grid-viewport")).css("height",30*a+"px")};a.$on("$destroy",function(){e.unsyncUpdates("agent"),e.unsyncUpdates("user_has_fax_queue")}),a.pause=function(b,c,e){return e&&(a.pauseType=null),i.save({name:c,agent:b,type:e||"DEFAULT PAUSE",data4:e||"DEFAULT PAUSE",channel:"fax"}).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){f.error(a)})},a.joinQueue=function(e){var g=c.open({animation:!0,templateUrl:"app/channels/fax/realtime/view/agent/queue.modal.add.html",controller:"FaxRealtimeViewAgentQueueModalCtrl",resolve:{queues:function(){return _.reject(a.faxQueues,function(b){return!!_.find(a.gridOptions.data,{queue:b.name,isAgent:!1,agentId:e})})}}});g.result.then(function(b){return i.save({name:"QueueAdd",agent:e,queues:_.filter(a.faxQueues,function(a){return _.includes(b.queues,a.id)}),channel:"fax",data1:e,data3:b.queues.join(","),data4:"fax"}).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){f.error(a)})},function(){b.info("Modal dismissed at: "+new Date)})},a.leaveQueue=function(a,b){return i.save({name:"QueueRemove",agent:a,queueId:b,channel:"fax",data1:a,data3:b,data4:"fax"}).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){f.error(a)})},a.showInfo=function(a){c.open({animation:!0,templateUrl:"app/channels/fax/realtime/view/agent/agent.modal.info.html",controller:"FaxRealtimeViewAgentInfoModalCtrl",resolve:{agent:a}})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.fax.realtime.view.agents",{url:"/agents",templateUrl:"app/channels/fax/realtime/view/agent/agent.html",controller:"FaxRealtimeViewAgentCtrl"})}]),angular.module("xCallyShuttleApp").controller("FaxRealtimeViewAgentInfoModalCtrl",["$scope","$uibModalInstance","$http","agent",function(a,b,c,d){a.agent=d,a.close=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("FaxRealtimeViewAgentQueueModalCtrl",["$scope","$uibModalInstance","$http","queues",function(a,b,c,d){a.queues=d,a.item={},a.save=function(){b.close(a.item)},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("FaxRealtimeViewApplicationCtrl",["$scope","$log","$uibModal","$translate","socket","xAlert","ReportFaxSession","usSpinnerService","$q","uiGridConstants","$timeout",function(a,b,c,d,e,f,g,h,i,j,k){function l(){return h.spin("spinner-grid"),g.get({controller:"waiting",controller2:"applications"}).$promise.then(function(b){a.gridOptions.data=b.rows})["catch"](function(a){f.error(a)})["finally"](function(){m(),h.stop("spinner-grid")})}function m(){e.socket.on("report_fax_session:save",function(b){var c=_.find(a.gridOptions.data,{id:b.id});c?(_.merge(c,b),b.leaveAt&&k(function(){_.remove(a.gridOptions.data,{id:b.id})},1e4)):b.leaveAt||a.gridOptions.data.push(b)}),e.socket.on("report_fax_session:remove",function(b){_.remove(a.gridOptions.data,{id:b.id})})}a.moment=moment,a.initApplications=function(){a.gridOptions={headerCellFilter:"translate",enableHorizontalScrollbar:0,enableVerticalScrollbar:0,enableFiltering:!0,columnDefs:[{name:"uniqueid",displayName:"APPLICATION_UNIQUEID",headerCellFilter:"translate"},{name:"accountname",displayName:"APPLICATION_ACCOUNT",headerCellFilter:"translate"},{name:"application",displayName:"APPLICATION_APPLICATION",headerCellFilter:"translate"},{name:"status",displayName:"APPLICATION_STATUS",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div><span data-ng-if="!row.entity.leaveAt">{{\'APPLICATION_QUEUESTATUS_WAITING\' | translate}}</span><span data-ng-if="row.entity.leaveAt && row.entity.complete">{{\'APPLICATION_QUEUESTATUS_COMPLETE\' | translate}}</span><span data-ng-if="row.entity.leaveAt && row.entity.timeout">{{\'APPLICATION_TIMEOUT\' | translate}}</span> <span data-ng-if="!row.entity.leaveAt">[<css-timer start-time="row.entity.updatedAt"></css-timer>]</span></div>',enableSorting:!1,enableColumnMenu:!1,enableFiltering:!1},{name:"membername",displayName:"APPLICATION_AGENT",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{row.entity.membername || ''}}</span></div>"},{name:"queuename",displayName:"APPLICATION_QUEUE",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{row.entity.queuename || ''}}</span></div>"}],data:[],gridMenuTitleFilter:function(a){var b=i.defer();return b.resolve(d.instant(a)),b.promise},onRegisterApi:function(b){a.gridApi=b,a.gridApi.grid.registerDataChangeCallback(function(){n(a.gridOptions.data.length)})}},l()};var n=function(a){var b=a?30*a+60:270;angular.element(document.getElementsByClassName("ui-grid")[0]).css("height",b+"px"),angular.element(document.getElementsByClassName("ui-grid-viewport")).css("height",30*a+"px")};a.$on("$destroy",function(){e.unsyncUpdates("report_fax_session")})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.fax.realtime.view.applications",{url:"/applications",templateUrl:"app/channels/fax/realtime/view/application/application.html",controller:"FaxRealtimeViewApplicationCtrl"})}]),angular.module("xCallyShuttleApp").controller("FaxRealtimeViewCtrl",["$scope","$state",function(a,b){a.agents=[{name:"Queues",link:"main.channels.fax.realtime.view.agents.queues"},{name:"Timeline",link:"main.channels.fax.realtime.view.agents.timeline"}],a.sessions=[{name:"Sessions",link:"main.channels.fax.realtime.view.sessions"}],a.tree={queues:[{name:"Queues",link:"main.channels.fax.realtime.view.agents.queues"},{name:"Timeline",link:"main.channels.fax.realtime.view.agents.timeline"}],sessions:[{name:"Sessions",link:"main.channels.fax.realtime.view.sessions"}]}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.fax.realtime.view",{url:"/view",templateUrl:"app/channels/fax/realtime/view/view.html",controller:"FaxRealtimeViewCtrl"})}]),angular.module("xCallyShuttleApp").factory("ReportFaxSession",["$resource",function(a){return a("/api/report/fax/sessions/:id/:controller/:controller2",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("MailAccount",["$resource",function(a){return a("/api/mail/accounts/:accountId/:controller/:id",{id:"@accountId"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.mail.accounts",{url:"/accounts",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:34}}})}]),angular.module("xCallyShuttleApp").controller("MailAccountListCtrl",["$scope","$stateParams","gridOptions","MailAccount","socket",function(a,b,c,d,e){a.$on("$destroy",function(){e.unsyncUpdates("mail_server_in")}),a.initView=function(){e.socket.on("mail_server_in:save",function(b){var c=_.find(a.gridOptions.data,{id:b.MailAccountId});c&&(c.MailServerIn.state=b.state,c.MailServerIn.source=JSON.parse(b.source))});var f={exporterCsvFilename:"mail_accounts.csv",columnDefs:[{name:"name"},{name:"description"},{name:"address"},{name:"MailServerIn.state",width:100,cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div> <span data-ng-if="row.entity.MailServerIn" class="label label-sm" data-ng-class="row.entity.MailServerIn.state === \'CONNECTED\' ? \'label-success\' : \'label-danger\'">{{row.entity.MailServerIn.state}}</span> <span data-ng-if="!row.entity.MailServerIn" class="label label-sm label-info" >{{\'APPLICATION_DISABLED\' | translate | uppercase}}</span> </div>',displayName:"IMAP",enableSorting:!1,enableFiltering:!1},{name:"MailServerOut.state",width:110,cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div><span class=\"label label-sm\" data-ng-class=\"row.entity.MailServerOut.state === 'CONNECTED' ? 'label-success' : 'label-danger'\">{{row.entity.MailServerOut.state}}</span></div>",displayName:"SMTP",enableSorting:!1,enableFiltering:!1},{name:"action",width:75,buttons:[{"class":"blue-hoki",href:"/channels/mail/accounts/view/{{row.entity.id}}/settings",name:"profile"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=c.gridOptions(d,f,a,{accountId:b.accountId})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.mail.accounts.list",{ -url:"/list",templateUrl:"app/channels/mail/account/list/list.html",controller:"MailAccountListCtrl"})}]),angular.module("xCallyShuttleApp").factory("MailServerIn",["$resource",function(a){return a("/api/mail/servers/in/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("MailServerOut",["$resource",function(a){return a("/api/mail/servers/out/:id/:controller",{id:"@id"},{update:{method:"PUT"},test:{method:"GET"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.mail.accounts.view.actions",{url:"/actions",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("MailAccountViewActionListCtrl",["$scope","gridOptions","MailAccount","$http","$translate","$stateParams",function(a,b,c,d,e,f){a.initActons=function(){var d={draggable:!0,exporterCsvFilename:"mail_applications.csv",enableSorting:!1,enableFiltering:!1,columnDefs:[{name:"app",cellClass:"text-center"},{name:"name",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div><span>{{row.entity.app == "queue" ? row.entity.MailQueue.name : row.entity.User.name}}</span></div>'},{name:"timeout",cellClass:"text-center"},{name:"interval",displayName:"APPLICATION_TIME_INTERVAL",cellClass:"text-center",cellTemplate:"<div><span>{{row.entity.Interval ? row.entity.Interval.name : row.entity.interval}}</span></div>"},{name:"action",width:125,buttons:[{"class":"blue-hoki",href:"/channels/mail/accounts/view/{{row.entity.MailAccountId}}/actions/view/{{row.entity.id}}",name:"profile"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.app, row.entity.id)"}]}]};a.gridOptions=b.gridOptions(c,d,a,{accountId:f.accountId,controller:"applications"})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.mail.accounts.view.actions.list",{url:"/list",templateUrl:"app/channels/mail/account/view/action/list/list.html",controller:"MailAccountViewActionListCtrl"})}]),angular.module("xCallyShuttleApp").controller("MailAccountViewActionViewCtrl",["$scope","$http","$stateParams","$translate","$location","xAlert","WizardHandler","socket","application","interval","Agent","Interval","MailQueue","MailAccount","Template","SmsAccount",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){a.isActive=!0,a.size="small",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.initAction=function(){return a.$application=i.application,a.$stateParams=c,a.$interval=j.interval,a.forms={},a.apps=[{name:"Queue",value:"queue"},{name:"Agent",value:"agent"},{name:"SendMail",value:"sendMail"},{name:"ReplyMail",value:"replyMail"},{name:"SendSMS",value:"sendSms"}],a.types=[{key:"APPLICATION_REPLY",value:"reply"},{key:"APPLICATION_REPLY_TO_ALL",value:"replyAll"}],n.get({accountId:c.accountId,controller:"applications",id:c.actionId}).$promise.then(function(b){if(a.application=b,a.application.alwaysTime=!1,a.application.IntervalId)a.application.intType="list";else switch(a.application.interval){case"*,*,*,*":a.application.intType="always";break;default:a.application.intType="custom"}if("always"===a.application.intType||"custom"===a.application.intType){var c=a.application.interval.split(",");"*"===c[0]?a.application.alwaysTime=!0:(a.application.t_from=moment(new Date),a.application.t_to=moment(new Date),a.application.t_from.hour(c[0].split("-")[0].split(":")[0]),a.application.t_from.minute(c[0].split("-")[0].split(":")[1]),a.application.t_to.hour(c[0].split("-")[1].split(":")[0]),a.application.t_to.minute(c[0].split("-")[1].split(":")[1])),"*"===c[1]?(a.application.wd_from="always",a.application.wd_to="always"):(a.application.wd_from=c[1].split("-")[0],a.application.wd_to=c[1].split("-")[1]),"*"===c[2]?(a.application.md_from="always",a.application.md_to="always"):(a.application.md_from=c[2].split("-")[0],a.application.md_to=c[2].split("-")[1]),"*"===c[3]?(a.application.m_from="always",a.application.m_to="always"):(a.application.m_from=c[3].split("-")[0],a.application.m_to=c[3].split("-")[1])}a.$watch("application.t_from",function(b){a.application.t_from_hm=moment(b).format("HH:mm")}),a.$watch("application.t_to",function(b){a.application.t_to_hm=moment(b).format("HH:mm")})})["catch"](function(a){console.error(a),f.error(a)})},a.getQueues=function(){return m.get().$promise.then(function(b){a.queues=b.rows})["catch"](function(a){console.error(a)})},a.getAgents=function(){return k.get().$promise.then(function(b){a.agents=b.rows})["catch"](function(a){console.error(a)})},a.getIntervals=function(){return l.get().$promise.then(function(b){a.intervals=b.rows})["catch"](function(a){console.error(a)})},a.getTemplates=function(){return o.get().$promise.then(function(b){a.templates=b.rows})["catch"](function(a){console.error(a)})},a.getMailAccounts=function(){return n.get().$promise.then(function(b){a.mailAccounts=b.rows})["catch"](function(a){console.error(a)})},a.getSmsAccounts=function(){return p.get().$promise.then(function(b){a.smsAccounts=b.rows})["catch"](function(a){console.error(a)})},a.updateItem=function(){switch(a.application.intType){case"always":a.application.interval="*,*,*,*",a.application.IntervalId=null;break;case"list":var b=_.find(a.intervals,{id:a.application.IntervalId});a.application.interval=b?"":"*,*,*,*",a.application.IntervalId=b?a.application.IntervalId:null;break;case"custom":var g,h,i,j,k;g=a.application.t_from&&a.application.t_to&&!a.application.alwaysTime?moment(a.application.t_from).format("HH:mm")+"-"+moment(a.application.t_to).format("HH:mm"):"*",a.application.wd_from&&"always"!==a.application.wd_from?(h=a.application.wd_from,a.application.wd_to&&"always"!==a.application.wd_to&&(h+="-"+a.application.wd_to)):h="*",a.application.md_from&&"always"!==a.application.md_from?(i=a.application.md_from,a.application.md_to&&"always"!==a.application.md_to&&(i+="-"+a.application.md_to)):i="*",a.application.m_from&&"always"!==a.application.m_from?(j=a.application.m_from,a.application.m_to&&"always"!==a.application.m_to&&(j+="-"+a.application.m_to)):j="*",k=g+","+h+","+i+","+j,a.application.interval=k,a.application.IntervalId=null}return n.update({accountId:c.accountId,controller:"applications",id:c.actionId},a.application).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success"),e.path("/channels/mail/accounts/view/"+c.accountId+"/actions/list")})["catch"](function(a){f.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.mail.accounts.view.actions.view",{url:"/view/:actionId",templateUrl:"app/channels/mail/account/view/action/view/view.html",controller:"MailAccountViewActionViewCtrl"})}]),angular.module("xCallyShuttleApp").controller("MailAccountViewActionWizardCtrl",["$scope","$http","Agent","Template","MailQueue","MailAccount","Interval","$stateParams","$translate","$location","xAlert","WizardHandler","socket","application","interval","SmsAccount",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){a.isActive=!0,a.size="small",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.initWizard=function(){a.apps=[{name:"Queue",value:"queue"},{name:"Agent",value:"agent"},{name:"SendMail",value:"sendMail"},{name:"ReplyMail",value:"replyMail"},{name:"SendSMS",value:"sendSms"}],a.types=[{key:"APPLICATION_REPLY",value:"reply"},{key:"APPLICATION_REPLY_TO_ALL",value:"replyAll"}],a.$application=n.application,a.$stateParams=h,a.$interval=o.interval,a.forms={},a.application={alwaysTime:!0},a.$watch("application.t_from",function(b){a.application.t_from_hm=moment(b).format("HH:mm")}),a.$watch("application.t_to",function(b){a.application.t_to_hm=moment(b).format("HH:mm")})},a.getQueues=function(){return e.get().$promise.then(function(b){a.queues=b.rows})["catch"](function(a){console.error(a)})},a.getAgents=function(){return c.get().$promise.then(function(b){a.agents=b.rows})["catch"](function(a){console.error(a)})},a.getTemplates=function(){return d.get().$promise.then(function(b){a.templates=b.rows})["catch"](function(a){console.error(a)})},a.getSmsAccounts=function(){return p.get().$promise.then(function(b){a.smsAccounts=b.rows})["catch"](function(a){console.error(a)})},a.getMailAccounts=function(){return f.get().$promise.then(function(b){a.mailAccounts=b.rows})["catch"](function(a){console.error(a)})},a.getIntervals=function(){return g.get().$promise.then(function(b){a.intervals=b.rows})["catch"](function(a){console.error(a)})},a.createItem=function(){switch(a.application.intType){case"always":a.application.interval="*,*,*,*",a.application.IntervalId=null;break;case"list":var b=_.find(a.intervals,{id:a.application.IntervalId});a.application.interval=b?"":"*,*,*,*",a.application.IntervalId=b?a.application.IntervalId:null;break;case"custom":var c,d,e,g,i;c=a.application.t_from&&a.application.t_to&&!a.application.alwaysTime?moment(a.application.t_from).format("HH:mm")+"-"+moment(a.application.t_to).format("HH:mm"):"*",a.application.wd_from&&"always"!==a.application.wd_from?(d=a.application.wd_from,a.application.wd_to&&"always"!==a.application.wd_to&&(d+="-"+a.application.wd_to)):d="*",a.application.md_from&&"always"!==a.application.md_from?(e=a.application.md_from,a.application.md_to&&"always"!==a.application.md_to&&(e+="-"+a.application.md_to)):e="*",a.application.m_from&&"always"!==a.application.m_from?(g=a.application.m_from,a.application.m_to&&"always"!==a.application.m_to&&(g+="-"+a.application.m_to)):g="*",i=c+","+d+","+e+","+g,a.application.interval=i,a.application.IntervalId=null}return f.save({accountId:h.accountId,controller:"applications"},a.application).$promise.then(function(){j.path("/channels/mail/accounts/view/"+h.accountId+"/actions/list")})["catch"](function(a){console.error(a)})},a.formValidation=function(a){return a},a.next=function(){l.wizard().next()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.mail.accounts.view.actions.wizard",{url:"/wizard",templateUrl:"app/channels/mail/account/view/action/wizard/wizard.html",controller:"MailAccountViewActionWizardCtrl"})}]),angular.module("xCallyShuttleApp").factory("MailDisposition",["$resource",function(a){return a("/api/mail/dispositions/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("MailInboxViewModaDispositionAddCtrl",["$scope","$uibModalInstance","MailAccount","id","xAlert","$translate",function(a,b,c,d,e,f){a.ok=function(){return c.save({accountId:d,controller:"dispositions"},{name:a.name}).$promise.then(function(a){b.close(a)})["catch"](function(a){e.show(f.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("MailAccountDispositionViewCtrl",["$scope","$stateParams","$uibModal","$translate","MailAccount","xAlert",function(a,b,c,d,e,f){a.initView=function(){return e.get({accountId:b.accountId,controller:"dispositions"}).$promise.then(function(b){a.dispositions=b.rows})["catch"](function(a){console.error(a),f.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},a.updateDisposition=function(a,c){return e.update({accountId:b.accountId,controller:"dispositions",id:a},{name:c}).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE")+"!","success")})["catch"](function(a){console.error(a),f.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},a.deleteDisposition=function(c){return console.log("delete"),e.remove({accountId:b.accountId,controller:"dispositions",id:c}).$promise.then(function(){_.remove(a.dispositions,{id:c})})["catch"](function(a){console.error(a),f.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},a.addDisposition=function(){return c.open({animation:!0,templateUrl:"app/channels/mail/account/view/disposition/modal/add.modal.html",controller:"MailInboxViewModaDispositionAddCtrl",resolve:{id:function(){return b.accountId}}}).result.then(function(b){b&&a.dispositions.push(b)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.mail.accounts.view.dispositions",{url:"/dispositions",controller:"MailAccountDispositionViewCtrl",templateUrl:"app/channels/mail/account/view/disposition/view/view.html"})}]),angular.module("xCallyShuttleApp").controller("MailAccountHooksViewCtrl",["$scope","MailAccount","Pause","$http","$stateParams","clipboard","$translate","$location","xAlert","List",function(a,b,c,d,e,f,g,h,i,j){a.account={},a.isActive=!0,a.size="small",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.CONST_TIMEOUT=3e4,a.initView=function(){a.types=[{value:"",name:"-- None --"},{name:"HTTP GET",value:"GET"},{name:"HTTP POST",value:"POST"}],c.get().$promise.then(function(b){a.pauses=b.rows})["catch"](function(a){i.error(a)}),b.get({id:e.accountId}).$promise.then(function(b){a.account=b,a.account.actions.length<1&&a.account.actions.push({action:"pause",enabled:!1,type:null})})["catch"](function(a){i.error(a)})},a.resetActionData=function(a){a.type=null},a.updateItemMailAccount=function(){return console.log(a.account),b.update({id:e.accountId},a.account).$promise.then(function(){i.show(g.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){i.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.mail.accounts.view.hooks",{url:"/hooks",controller:"MailAccountHooksViewCtrl",templateUrl:"app/channels/mail/account/view/hooks/view/view.html"})}]),angular.module("xCallyShuttleApp").controller("MailAccountOtherViewCtrl",["$scope","$rootScope","$stateParams","$translate","xAlert","MailAccount",function(a,b,c,d,e,f){a.initView=function(){return a.options={language:b.language,allowedContent:!0,entities:!1,skin:"office2013",contentsCss:"/assets/css/global/richparams.css",extraPlugins:"autogrow",autoGrow_minHeight:450,disableNativeSpellChecker:!1,toolbar:[{name:"clipboard",items:["Cut","Copy","Paste","PasteText","PasteFromWord","-","Undo","Redo"]},{name:"links",items:["Link","Unlink","Anchor"]},{name:"insert",items:["Image","Table","HorizontalRule","SpecialChar"]},{name:"tools",items:["Maximize"]},{name:"document",items:["Source"]},"/",{name:"basicstyles",items:["Bold","Italic","Underline","Strike","Subscript","Superscript","-","RemoveFormat"]},{name:"paragraph",items:["NumberedList","BulletedList","-","Outdent","Indent","-","Blockquote"]},{name:"styles",items:["Styles","Format"]},"/",{name:"motion",items:["voice","chat","mail"]}]},f.get({id:c.accountId}).$promise.then(function(b){console.log(b),a.account=b})["catch"](function(a){e.error(a)})},a.updateItemMailAccount=function(){return f.update({id:c.accountId},{whiteLabel:a.account.whiteLabel,signature:a.account.signature}).$promise.then(function(){e.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){e.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.mail.accounts.view.other",{url:"/other",controller:"MailAccountOtherViewCtrl",templateUrl:"app/channels/mail/account/view/other/view/view.html"})}]),angular.module("xCallyShuttleApp").controller("MailAccountSettingViewCtrl",["$scope","$http","$stateParams","$translate","$location","$timeout","socket","xAlert","MailAccount","MailMessage","MailServerIn","MailServerOut","usSpinnerService","List","Template",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){a.imapDisabled=!1,a.smtpDisabled=!1,a.isActive=!0,a.size="small",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.CONST_TIMEOUT=3e4,a.$on("$destroy",function(){g.socket.removeAllListeners("mail_message:sent"),g.socket.removeAllListeners("mail_message:failed")}),a.initView=function(){return g.socket.on("mail_message:sent",function(){h.show(d.instant("MESSAGE_WELL_DONE"),"success"),m.stop("spinner-grid")}),g.socket.on("mail_message:failed",function(){h.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger"),m.stop("spinner-grid")}),n.get().$promise.then(function(b){a.lists=b.rows})["catch"](function(a){console.error(a)}),o.get().$promise.then(function(b){a.templates=b.rows})["catch"](function(a){console.error(a)}),i.get({id:c.accountId}).$promise.then(function(b){a.account=b,a.account.MailServerIn&&(a.account.MailServerIn.source=JSON.parse(a.account.MailServerIn.source),a.account.MailServerOut.source=JSON.parse(a.account.MailServerOut.source),g.socket.on("mail_server_in:state",function(b){if(b.id===a.account.MailServerIn.id)switch(a.account.MailServerIn.state=b.state,a.account.MailServerIn.source=JSON.parse(b.source),b.state){case"CONNECTING":break;default:m.stop("spinner-grid"),a.imapDisabled=!1}})),g.socket.on("mail_server_out:state",function(b){if(b.id===a.account.MailServerOut.id)switch(a.account.MailServerOut.state=b.state,a.account.MailServerOut.source=JSON.parse(b.source),b.state){case"CONNECTING":break;default:m.stop("spinner-grid"),a.smtpDisabled=!1}})})["catch"](function(a){h.error(a)})},a.updateItemMailAccount=function(){return i.update({id:c.accountId},{name:a.account.name,description:a.account.description,address:a.account.address,fidelity:a.account.fidelity,timeout:a.account.timeout,service:a.account.service,ListId:a.account.ListId,TemplateId:a.account.TemplateId}).$promise.then(function(){h.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){h.error(a)})},a.updateItemMailServerIn=function(){var b=angular.copy(a.account.MailServerIn);return delete b.source,m.spin("spinner-grid"),a.imapDisabled=!0,k.update({id:b.id},b).$promise.then(function(){h.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){h.error(a)})},a.updateItemMailServerOut=function(){var b=angular.copy(a.account.MailServerOut);return delete b.source,m.spin("spinner-grid"),a.smtpDisabled=!0,l.update({id:b.id},b).$promise.then(function(){h.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){h.error(a)})},a.test=function(){return m.spin("spinner-grid"),a.smtpDisabled=!0,l.update({id:a.account.MailServerOut.id},{state:"CONNECTING"}).$promise["catch"](function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.mail.accounts.view.settings",{url:"/settings",controller:"MailAccountSettingViewCtrl",templateUrl:"app/channels/mail/account/view/setting/view/view.html"})}]),angular.module("xCallyShuttleApp").controller("MailAccountViewCtrl",["$scope","$stateParams","MailAccount",function(a,b,c){a.initView=function(){return c.get({id:b.accountId}).$promise.then(function(b){a.account=b})["catch"](function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.mail.accounts.view",{url:"/view/:accountId",controller:"MailAccountViewCtrl",templateUrl:"app/channels/mail/account/view/view.html",resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]})}]}})}]),angular.module("xCallyShuttleApp").controller("MailAccountWizardCtrl",["$scope","$http","$location","$translate","WizardHandler","xAlert","MailAccount",function(a,b,c,d,e,f,g){a.isActive=!0,a.size="small",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.initWizard=function(){a.forms={},a.item={MailServerIn:{port:993,ssl:!0,"delete":!1,protocol:"IMAP",filter:"UNSEEN",mailbox:"INBOX",keepalive:!0,authTimeout:5,connTimeout:10},MailServerOut:{port:465,ssl:!0}}},a.goNext=function(){e.wizard().next()},a.formValidation=function(a){return a},a.createItem=function(){return g.save(a.item).$promise.then(function(){c.path("/channels/mail/accounts/list")})["catch"](function(a){f.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.mail.accounts.wizard",{url:"/wizard",templateUrl:"app/channels/mail/account/wizard/wizard.html",controller:"MailAccountWizardCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.mail.inbox",{url:"/inbox",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user","agent"],redirectTo:"landing",id:36}}})}]),angular.module("xCallyShuttleApp").controller("MailInboxInfoModalCtrl",["$scope","$translate","$uibModalInstance","$stateParams","xAlert","uniqueId","ReportSquare",function(a,b,c,d,e,f,g){a.data=null,a.initInfo=function(){g.get({controller:"show",uniqueid:f}).$promise.then(function(b){a.data={id:b.id,channel:b.channel,uniqueid:b.uniqueid,callerid:b.callerid,calleridname:b.calleridname,project_name:b.project_name,extension:b.extension}})["catch"](function(b){switch(b.status){case 404:a.data=null;break;default:e.error(b)}})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").directive("mailMessage",["$rootScope","$translate","MailMessage","List","xAlert","Lightbox","$uibModal",function(a,b,c,d,e,f,g){return{restrict:"E",scope:{message:"=",listId:"="},templateUrl:"app/channels/mail/inbox/message/message.directive.html",link:function(h){h.openPreview=function(a){f.openModal(["api/mail/attachments/"+a],0)},h.openContact=function(c){return h.listId?d.save({listId:h.listId,controller:"contacts"},{email:c}).$promise.then(function(b){var c=_.find(a.$root.workspaces,{contactID:b.id});c?c.active=!0:a.$root.workspaces.push({active:!0,"class":"icon-user",contactID:b.id,name:b.email,type:"contact"})})["catch"](function(a){console.error(a)}):void e.show(b.instant("MESSAGE_NO_LIST_CONFIGURED"),"info")},h.info=function(a){g.open({animation:!0,templateUrl:"app/channels/mail/inbox/message/info.modal.html",controller:"MailInboxInfoModalCtrl",resolve:{uniqueId:function(){return a}}})},h.retry=function(a){return c.update({id:a,status:"SENDING"}).$promise["catch"](function(a){console.error(a)})}}}}]),angular.module("xCallyShuttleApp").directive("mailNote",["$translate","Modal","Auth","MailMessage","xAlert",function(a,b,c,d,e){return{restrict:"E",scope:{message:"="},templateUrl:"app/channels/mail/inbox/note/note.directive.html",link:function(f){f.Auth=c,f.deleteNote=b.confirm["delete"](function(){return d.remove({id:f.message.id}).$promise.then(function(){e.show(a.instant("MESSAGE_WELL_DONE")+"!","success")})["catch"](function(a){e.error(a)})})}}}]),angular.module("xCallyShuttleApp").controller("MailInboxViewModalNoteCtrl",["$scope","$uibModalInstance","$translate","id","MailRoom","xAlert",function(a,b,c,d,e,f){a.initModal=function(){a.item={}},a.ok=function(){return e.save({id:d,controller:"messages",controller2:"send"},{text:a.item.text,status:"NOTE"}).$promise.then(function(){f.show(c.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(){f.show(c.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})["finally"](function(){b.close()})},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").directive("mailRoom",["$rootScope","$cookieStore","$translate","$uibModal","$timeout","Tag","CannedAnswer","MailAttachment","List","MailAccount","MailRoom","MailMessage","FileUploader","xAlert","usSpinnerService","socket","Auth",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){return{restrict:"E",scope:{workspace:"="},templateUrl:"app/channels/mail/inbox/room/room.directive.html",link:function(e){function r(a){var b="";return e.mailRoom.MailAccount.signature&&(b+="<br>"+e.mailRoom.MailAccount.signature),a?b+"<br><blockquote>"+a.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'").replace(/\n/g,"<br>")+"</blockquote>":void 0}e.onCKReady=function(a){e.ckEditorInstance=a},e.$on("$destroy",function(){console.log("mailRoom directive $destroy")});var s=[];e.user=q.getCurrentUser(),e.getContacts=function(a){return e.listId?i.get({listId:e.listId,controller:"contacts",email:a}).$promise.then(function(a){return a.rows})["catch"](function(a){console.error(a)}):[]},e.setList=function(a){e.listId=a},e.options={language:a.language,allowedContent:!0,entities:!1,skin:"office2013",extraPlugins:"autogrow",autoGrow_minHeight:600,autoGrow_maxHeight:600,disableNativeSpellChecker:!1,toolbar:[{name:"clipboard",items:["Cut","Copy","Paste","-","Undo","Redo"]},{name:"links",items:["Link","Unlink","Anchor"]},{name:"insert",items:["Image","Table","HorizontalRule","SpecialChar"]},{name:"tools",items:["Maximize"]},"/",{name:"basicstyles",items:["Bold","Italic","Underline","Strike","Subscript","Superscript","-","RemoveFormat"]},{name:"paragraph",items:["NumberedList","BulletedList","-","Outdent","Indent","-","Blockquote"]},{name:"styles",items:["Styles","Format"]}]},e.expanded=!0,e.modelOptions={debounce:{"default":500,blur:250},getterSetter:!0},e.panelLeft=null,e.panelRight="col-md-12",e.forms={},e.form={from:[],to:e.workspace.data&&e.workspace.data.to?[e.workspace.data.to]:[],cc:[],bcc:[],tags:[],html:"",disabled:!1},p.socket.on("mail_message:remove",function(a){_.remove(e.mailRoom.MailMessages,{id:a.id})}),p.socket.on("mail_message:save",function(a){return e.workspace.id&&a.MailRoomId==e.workspace.id?(e.workspace.active||e.workspace.unread++,l.get({id:a.id}).$promise.then(function(a){e.mailRoom||(e.mailRoom={MailMessages:[]});var b=_.findIndex(e.mailRoom.MailMessages,{id:a.id});b>-1?_.merge(e.mailRoom.MailMessages[b],a):e.mailRoom.MailMessages.unshift(a),e.panelLeft="col-md-6",e.panelRight="col-md-6"})["catch"](function(a){console.error(a)})):void 0});var t=e.uploader=new m({url:"api/mail/attachments",autoUpload:!0,withCredentials:!0,headers:{Authorization:"Bearer "+b.get("token")}});return t.onErrorItem=function(){n.show(c.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")},t.removeFromQueue=function(a){var b=this;return h["delete"]({id:a.basename}).$promise.then(function(){var c=b.getIndexOfItem(a),d=b.queue[c];d.isUploading&&d.cancel(),b.queue.splice(c,1),d._destroy(),b.progress=b._getTotalProgress(),s=_.reject(s,{basename:a.basename})})["catch"](function(){n.show(c.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},t.onSuccessItem=function(a,b){var c={size:b.size,path:b.path,name:b.name,basename:b.basename,type:b.type};a=_.merge(a,c),s.push(c)},e.openRoom=function(b){var c=_.find(a.workspaces,{id:b,type:"mailRoom"});c?c.active=!0:a.workspaces.push({id:b,type:"mailRoom","class":"icon-envelope",active:!0})},e.togglePanelLeft=function(){e.panelLeft?(e.panelLeft=null,e.panelRight="col-md-12"):(e.panelLeft="col-md-6",e.panelRight="col-md-6")},e.onSelectAnswer=function(){e.ckEditorInstance.insertHtml(e.modelOptions.selectedAnswer),delete e.modelOptions.selectedAnswer},e.getAnswers=function(a){return g.get({key:a}).$promise.then(function(a){return _.map(a.rows,"value")})},e.closeRoom=function(){return d.open({animation:!0,templateUrl:"app/channels/mail/inbox/status/status.modal.html",controller:"MailInboxStatusModalCtrl",resolve:{accountId:function(){return e.mailRoom.MailAccount.id}}}).result.then(function(a){return k.patch({id:e.workspace.id},a).$promise["catch"](function(a){n.error(a)})})},e.loadNote=function(){return d.open({animation:!0,templateUrl:"app/channels/mail/inbox/note/note.modal.html",controller:"MailInboxViewModalNoteCtrl",resolve:{id:function(){return e.workspace.id}}})},e.onChanged=function(){return k.update({id:e.workspace.id},{tags:e.form.tags}).$promise["catch"](function(a){console.error(a)})},e.sendMail=function(){o.spin("spinner-grid"),e.form.disabled=!0;var a={},b={subject:e.form.subject||(e.mailRoom?e.mailRoom.subject:null),from:e.form.from,to:_.map(e.form.to,"email"),cc:_.map(e.form.cc,"email"),bcc:_.map(e.form.bcc,"email"),html:e.form.html||null,text:e.form.text||null,inReplyTo:a.messageId||null,status:"SENDING",MailAttachments:s};return e.mailRoom?(a=_.last(e.mailRoom.MailMessages,{status:"RECEIVED"}),b.inReplyTo=a.messageId||null,k.save({id:e.workspace.id,controller:"messages",controller2:"send"},b).$promise.then(function(){e.form.html="",t.queue=[],s=[],n.show(c.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(){n.show(c.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})["finally"](function(){o.stop("spinner-grid"),e.form.disabled=!1})):l.save(b).$promise.then(function(a){n.show(c.instant("MESSAGE_MAIL_MESSAGE_SEND_SUCCESS"),"success"),e.form.html="",t.queue=[],s=[],e.workspace.id=a.id,e.workspace.name=a.subject,e.mailRoom=a,e.expanded=!1})["catch"](function(){n.show(c.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})["finally"](function(){o.stop("spinner-grid"),e.form.disabled=!1})},f.get().$promise.then(function(a){e.tags=_.map(a.rows,"name")})["catch"](function(a){console.error(a)}),j.get().$promise.then(function(a){e.mailAccounts=a.rows})["catch"](function(a){console.error(a)}),e.workspace.id?(e.panelLeft="col-md-6",e.panelRight="col-md-6",k.get({id:e.workspace.id}).$promise.then(function(a){e.mailRoom=a,e.expanded=!1,e.listId=a.MailAccount.ListId,e.workspace.name=a.subject||"No subject",e.form.from.push(a.MailAccount.address),e.form.tags=a.tags;var b=_.findLast(e.mailRoom.MailMessages,{status:"RECEIVED"});return b&&(e.form.to=_.map(_.union(b.from,b.to),function(a){return{email:a}}),e.form.to=_.remove(e.form.to,function(b){return b.email!==a.MailAccount.address}),e.form.cc=_.map(b.cc,function(a){return{email:a}}),e.form.bcc=_.map(b.bcc,function(a){return{email:a}}),e.form.subject="Re: "+(b.subject||"No subject"),e.form.html=r(b.text)),p.socket.on("mail_room:save",function(a){a.id===e.workspace.id&&_.merge(e.mailRoom,a)}),a})["catch"](function(a){console.error(a)})["finally"](function(){o.stop("spinner-grid"),e.form.disabled=!1})):(e.panelLeft=null,e.panelRight="col-md-12",o.stop("spinner-grid"),void 0)}}}]),angular.module("xCallyShuttleApp").controller("MailInboxStatusModalCtrl",["$scope","$uibModalInstance","MailAccount","accountId",function(a,b,c,d){a.modal={title:"APPLICATION_CONFIRM_CLOSE",text:"MESSAGE_ARE_YOU_SURE_YOU_WANT_TO_CLOSE_THE_MAIL"},a.initDisposition=function(){return a.item={disposition:null,status:"CLOSED"},c.get({accountId:d,controller:"dispositions"}).$promise.then(function(b){a.dispositions=b.rows})["catch"](function(a){console.error(a)})},a.ok=function(){b.close(a.item)},a.cancel=function(){b.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.mail.inbox.view.account",{url:"/account/:id",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user","agent"],redirectTo:"landing",id:9}}})}]),angular.module("xCallyShuttleApp").controller("MailInboxViewAccountListCtrl",["$scope","$rootScope","$uibModal","$translate","$stateParams","$state","Tag","uibButtonConfig","usSpinnerService","socket","MailAccount","MailRoom","uiGridConstants","Auth","Modal","xAlert","localStorageService",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){a.openRoom=function(b,c){var d=_.find(a.workspaces,{id:b,type:"mailRoom"});return d&&b?d.active=!0:a.workspaces.push({id:b,subject:c,type:"mailRoom","class":"icon-envelope",active:!0}),b&&"agent"===n.getCurrentUser().role&&"PENDING"!==a.query.status&&"CLOSED"!==a.query.status?l.patch({id:b},{status:"OPEN",openReason:"agent"}).$promise["catch"](function(a){console.error(a)}):void 0},a.getPage=function(){i.spin("spinner-grid");var b={accountId:e.id,controller:"rooms"};return a.query&&_.merge(b,a.query),k.query(b).$promise.then(function(b){q.set("mailAccountId",e.id),a.gridOptions.data=b,j.socket.on("mail_room:save",function(b){if(b.MailAccountId==e.id){var c=_.find(a.gridOptions.data,{id:b.id});c?c.status!==b.status?_.remove(a.gridOptions.data,{id:b.id}):_.merge(c,b):a.query.status===b.status&&a.gridOptions.data.push(b)}}),j.socket.on("mail_room:remove",function(b){_.remove(a.gridOptions.data,{id:b.id})})})["catch"](function(a){console.error(a)})["finally"](function(){i.stop("spinner-grid")})},a.initView=function(){h.activeClass="green-haze",a.id=[],a.isAdmin=n.isAdmin(), -a.isAgent=n.isAgent(),a.uncheckable=!1,a.query={status:q.get("mailStatus")?q.get("mailStatus"):"NEW",tags:q.get("mailTags")?q.get("mailTags"):[]},a.$watch("query.status",function(){q.set("mailStatus",a.query.status),a.getPage()},!0),k.get().$promise.then(function(b){a.mailAccounts=b.rows})["catch"](function(a){console.error(a)}),g.get().$promise.then(function(b){a.tags=_.map(b.rows,"name")})["catch"](function(a){console.error(a)}),a.gridOptions={exporterCsvFilename:"mail_rooms.csv",enableRowHeaderSelection:!0,paginationPageSizes:[10,25,50,75],paginationPageSize:10,enableFiltering:!0,enableSorting:!0,enableGridMenu:!1,flatEntityAccess:!0,showGridFooter:!0,fastWatch:!0,enableSelectAll:!0,enableHorizontalScrollbar:0,enableVerticalScrollbar:0,columnDefs:[{name:"lastEvent",displayName:"",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div> <span data-ng-class=\"{'icon-arrow-up font-green': row.entity.lastEvent === 'SENT', 'icon-arrow-up font-yellow': row.entity.lastEvent === 'SENDING', 'icon-arrow-down font-green': row.entity.lastEvent === 'RECEIVED', 'icon-close font-red': row.entity.lastEvent === 'FAILED', 'icon-question': !row.entity.lastEvent}\"> </span> </div>",width:30,enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1},{name:"attachment",displayName:"",headerCellTemplate:'<i class="icon-paper-clip" style="margin-top: 8px; margin-left: 8px;"></i>',cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div><i data-ng-class=\"row.entity.attachment ? 'icon-paper-clip' : ''\"></i></div>",width:30,enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1},{name:"tags",displayName:"",headerCellTemplate:'<i class="icon-tag" style="margin-top: 8px; margin-left: 8px;"></i>',cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div><i data-ng-class=\"row.entity.tags.length ? 'icon-tag' : ''\" title=\"{{row.entity.tags}}\"></i></div>",width:30,enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1},{name:"id",displayName:"Id",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div><span>#{{row.entity.id}}</span></div>",width:75,enableSorting:!0,enableFiltering:!0,enableColumnMenu:!1},{name:"subject"},{name:"from",cellClass:"text-center"},{name:"disposition",displayName:"APPLICATION_DISPOSITION",headerCellFilter:"translate"},{name:"updatedAt",cellFilter:"date:'dd/MM/yyyy HH:mm'",width:120,enableSorting:!1,enableFiltering:!1,sort:{direction:m.DESC}},{name:"action",cellTemplate:'<div> <a class="btn btn-icon-only" data-ng-disabled="row.entity.waiting" data-ng-class="row.entity.waiting ? \'font-blue\' : \'font-green\'" data-ng-click="grid.appScope.openRoom(row.entity.id, row.entity.subject)"><i class="fa" data-ng-class="row.entity.waiting ? \'fa-repeat\' : \'fa-envelope\' " aria-hidden="true"></i></a> <a class="btn btn-icon-only font-red" data-ng-disabled="row.entity.waiting" data-ng-show="grid.appScope.isAdmin" data-ng-click="grid.appScope.deleteItem(row.entity.id, row.entity.id)"><i class="fa fa-trash" aria-hidden="true"></i></a> </div>',enableSorting:!1,cellClass:"ui-grid-vcenter",width:70,enableFiltering:!1,enableColumnMenu:!1}],data:[],onRegisterApi:function(b){a.gridApi=b,a.gridApi.selection&&(a.gridApi.selection.on.rowSelectionChanged(a,function(b){b.isSelected?a.id.push(a.gridApi.grid.options.primaryKey?b.entity[a.gridApi.grid.options.primaryKey]:b.entity.id):_.pull(a.id,a.gridApi.grid.options.primaryKey?b.entity[a.gridApi.grid.options.primaryKey]:b.entity.id)}),a.gridApi.selection.on.rowSelectionChangedBatch(a,function(b){b[0].isSelected?a.id=_.union(a.id,_.map(b,a.gridApi.grid.options.primaryKey?"entity."+a.gridApi.grid.options.primaryKey:"entity.id")):_.map(b,a.gridApi.grid.options.primaryKey?"entity."+a.gridApi.grid.options.primaryKey:"entity.id").forEach(function(b){_.pull(a.id,b)})}))}},a.getPage(a.query)},a.onChanged=function(){q.set("mailTags",a.query.tags),a.getPage(a.query)},a.tagItems=function(){return c.open({animation:!0,templateUrl:"app/channels/mail/inbox/view/view.tags.modal.html",controller:"MailInboxViewModalTagCtrl",resolve:{id:function(){return a.id}}}).result.then(function(){a.gridApi.selection.clearSelectedRows(),a.id=[]})},a.disposeItems=function(){return c.open({animation:!0,templateUrl:"app/channels/mail/inbox/status/status.modal.html",controller:"MailInboxStatusModalCtrl",resolve:{status:function(){return null},accountId:function(){return e.id}}}).result.then(function(b){return l.patch({id:a.id},b).$promise.then(function(){a.gridApi.selection.clearSelectedRows(),a.id=[]})["catch"](function(a){p.error(a)})})},a.deleteItem=o.confirm["delete"](function(b){var c={id:b};return l.remove(c).$promise.then(function(){a.getPage(),p.show(d.instant("MESSAGE_WELL_DONE")+"!","success"),a.gridApi.selection.clearSelectedRows(),a.id=[]})["catch"](function(a){p.error(a)})}),a.deleteItems=o.confirm["delete"](function(){var b={ids:a.id};return l["delete"](b).$promise.then(function(){a.getPage(),p.show(d.instant("MESSAGE_WELL_DONE")+"!","success"),a.gridApi.selection.clearSelectedRows(),a.id=[]})["catch"](function(a){p.error(a)})})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.mail.inbox.view.account.list",{url:"/list",templateUrl:"app/channels/mail/inbox/view/account/list/list.html",controller:"MailInboxViewAccountListCtrl",data:{permissions:{only:["admin","user","agent"],redirectTo:"landing",id:9}}})}]),angular.module("xCallyShuttleApp").controller("MailInboxViewModalAgentCtrl",["$scope","$uibModalInstance","$translate","$stateParams","Agent","Auth","MailRoom","xAlert","roomId",function(a,b,c,d,e,f,g,h,i){var j=[];a.initModal=function(){return a.agents=[],a.item={agents:[]},e.get().$promise.then(function(b){for(var c=0;c<b.rows.length;c++)a.agents.push(b.rows[c]);return g.query({id:i,controller:"agents"}).$promise}).then(function(b){for(var c=0;c<b.length;c++)f.isAgent()||a.item.agents.push(b[c]),j.push(b[c].id)})["catch"](function(a){console.error(a)})},a.ok=function(){return j=f.isAgent()?_.union(j,a.item.agents):angular.copy(a.item.agents),g.update({id:i,controller:"agents",agents:j}).$promise.then(function(){h.show(c.instant("MESSAGE_WELL_DONE"),"success"),b.close()})["catch"](function(a){console.error(a)})},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("MailInboxViewCtrl",["$scope","$timeout","$location","localStorageService","MailAccount",function(a,b,c,d,e){a.initView=function(){return e.get().$promise.then(function(b){var e=null;a.mailAccounts=b.rows,a.mailAccounts.length&&(e="/channels/mail/inbox/view/account/"+(d.get("mailAccountId")||a.mailAccounts[0].id)+"/list"),e&&c.path(e)})["catch"](function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.mail.inbox.view",{url:"/view",templateUrl:"app/channels/mail/inbox/view/view.html",controller:"MailInboxViewCtrl",reload:!0,resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/inbox.css"]}])}]}})}]),angular.module("xCallyShuttleApp").controller("MailInboxViewModalTagCtrl",["$scope","$uibModalInstance","$translate","$stateParams","Tag","MailRoom","xAlert","id",function(a,b,c,d,e,f,g,h){a.initModal=function(){return a.tags=[],a.item={tags:[]},a.modal={dismissable:!0,title:"APPLICATION_MESSAGE_SEND_RETRY",text:"MESSAGE_MESSAGE_SEND_RETRY",buttons:[{"class":"btn-success",text:"APPLICATION_TAG",click:function(){var d={status:!0};return f.patch({id:h},{tags:a.item.tags}).$promise["catch"](function(){d.status=!1,g.show(c.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})["finally"](function(){b.close(d)})}},{"class":"default",text:"APPLICATION_CANCEL",click:function(a){b.dismiss(a)}}]},e.get().$promise.then(function(b){a.tags=_.map(b.rows,"name")})["catch"](function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").controller("MailInboxViewModalTemplateCtrl",["$scope","$uibModalInstance","Template",function(a,b,c){a.initModal=function(){return a.item={},c.get().$promise.then(function(b){a.templates=b.rows})["catch"](function(a){console.error(a)})},a.ok=function(){b.close(a.item)},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.mail",{url:"/mail",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user","agent"],redirectTo:"landing",id:9}}})}]),angular.module("xCallyShuttleApp").factory("MailReport",["$resource",function(a){return a("/api/report/mails/:id/:controller1/:controller2",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("MailRoom",["$resource",function(a){return a("/api/mail/rooms/:id/:controller/:controller2",{id:"@id",controller:"@controller"},{update:{method:"PUT"},patch:{method:"PATCH"}})}]),angular.module("xCallyShuttleApp").factory("MailAttachment",["$resource",function(a){return a("/api/mail/attachments/:id/:controller",{id:"@id"})}]),angular.module("xCallyShuttleApp").factory("MailMessage",["$resource",function(a){return a("/api/mail/messages/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("MailQueueListCtrl",["$scope","MailQueue","gridOptions","$uibModal","Auth",function(a,b,c,d,e){a.initView=function(){a.Auth=e;var d={exporterCsvFilename:"voice_queues.csv",columnDefs:[{name:"name"},{name:"description"},{name:"timeout"},{name:"strategy"},{name:"action",width:100,buttons:[{"class":"blue-hoki",href:"/channels/mail/queues/view/{{row.entity.id}}/settings",name:"settings"},{"class":"green-meadow",href:"/channels/mail/queues/view/{{row.entity.id}}/agents",name:"agents",hide:"user"===e.getCurrentUser().role},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=c.gridOptions(b,d,a)},a.createItem=function(){var b=d.open({animation:!0,templateUrl:"app/channels/mail/queue/list/list.create.modal.html",controller:"MailQueueListCreateCtrl",size:"lg"});b.result.then(function(){a.gridOptions.getPage()})}}]),angular.module("xCallyShuttleApp").controller("MailQueueListCreateCtrl",["$scope","$uibModalInstance","$translate","xAlert","MailQueue","Team","strategies",function(a,b,c,d,e,f,g){a.form={},a.strategies=g,a.item={penalty:0,agents:[]},a.getTeams=function(){return f.get({controller:"associations"}).$promise.then(function(b){a.teams=b.rows}).then(function(){ComponentsDropdowns.bindQueue(a.teams,[],function(){return{select:function(b){a.item.agents=_.union(a.item.agents,b)},deselect:function(b){a.item.agents=_.difference(a.item.agents,b)}}})})["catch"](function(a){console.error(a)})},a.save=function(){return e.save(a.item).$promise.then(function(a){b.close(a)})["catch"](function(a){d.error(a)})},a.cancel=function(){b.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.mail.queues.list",{url:"/list",templateUrl:"app/channels/mail/queue/list/list.html",controller:"MailQueueListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/jquery-multi-select/css/multi-select.css","assets/plugins/jquery-multi-select/js/jquery.multi-select.js","assets/plugins/jquery-quicksearch/jquery.quicksearch.js","assets/scripts/components-dropdowns.js"]})}]}})}]),angular.module("xCallyShuttleApp").factory("MailQueue",["$resource",function(a){return a("/api/mail/queues/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.mail.queues",{url:"/queues",template:"<div ui-view></div>","abstract":!0,resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/jquery-multi-select/css/multi-select.css","assets/plugins/jquery-multi-select/js/jquery.multi-select.js","assets/scripts/components-dropdowns.js"]})}]},data:{permissions:{only:["admin","user"],redirectTo:"landing",id:35}}})}]),angular.module("xCallyShuttleApp").controller("MailQueueViewCtrl",["$scope","$http","$translate","$stateParams","xAlert","Team","MailQueue","Auth","strategies",function(a,b,c,d,e,f,g,h,i){a.Auth=h,a.strategies=i;var j=function(){return{select:function(b){return g.save({id:a.queue.id,controller:"agents"},{agents:b,penalty:a.queue.penalty}).$promise.then(function(){a.getTeams()})["catch"](function(a){console.error(a)})},deselect:function(b){return g["delete"]({id:a.queue.id,controller:"agents",agents:b}).$promise.then(function(){a.getTeams()})["catch"](function(a){console.error(a)})}}};a.getQueue=function(){return g.get({id:d.id}).$promise.then(function(b){b.penalty=0,a.queue=b})["catch"](function(a){console.error(a)})},a.updateMailQueue=function(){return g.update({id:d.id},{name:a.queue.name,description:a.queue.description,timeout:a.queue.timeout,strategy:a.queue.strategy}).$promise.then(function(){e.show(c.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){e.error(a)})},a.getTeams=function(){return f.get({controller:"associations"}).$promise.then(function(b){return a.teams=b.rows,g.get({id:d.id,controller:"agents"}).$promise}).then(function(b){ComponentsDropdowns.bindMailQueue(a.teams,_.map(b.rows,function(a){return{id:a.id,penalty:a.UserHasMailQueue.penalty}}),j)})["catch"](function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.mail.queues.view",{url:"/view/:id",templateUrl:"app/channels/mail/queue/view/view.html",controller:"MailQueueViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.channels.mail.queues.view.settings",{url:"/settings",templateUrl:"app/channels/mail/queue/view/view.settings.html"}).state("main.channels.mail.queues.view.agents",{url:"/agents",templateUrl:"app/channels/mail/queue/view/view.agents.html",cache:!1,serie:!0,resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/jquery-multi-select/css/multi-select.css","assets/plugins/jquery-multi-select/js/jquery.multi-select.js","assets/plugins/jquery-quicksearch/jquery.quicksearch.js","assets/scripts/components-dropdowns.js"]})}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.mail.realtime",{url:"/realtime",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:37}}})}]),angular.module("xCallyShuttleApp").controller("MailRealtimeViewAgentCtrl",["$scope","$log","$uibModal","$translate","socket","xAlert","Agent","Pause","Action","MailQueue","usSpinnerService","$q","uiGridConstants","Auth",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n){function o(){return k.spin("grid-spinner"),g.get(t).$promise.then(function(b){a.gridOptions.totalItems=b.count,a.gridOptions.data=[],b.rows.forEach(function(a){q(a)})})["catch"](function(a){f.error(a)})["finally"](function(){k.stop("grid-spinner")})}function p(){e.socket.on("agent:save",function(b){b=b.newValues||b;var c=_.find(a.gridOptions.data,{agentId:b.id,isAgent:!0});c&&(c.online=_.has(b,"online")?b.online:c.online,c.lastLoginAt=_.has(b,"lastLoginAt")?b.lastLoginAt:c.lastLoginAt,c.pause=_.has(b,"smsPause")?b.mailPause:c.mailPause,c.pauseType=_.has(b,"pauseType")?b.pauseType:c.pauseType,c.lastPauseAt=_.has(b,"lastPauseAt")?b.lastPauseAt:c.lastPauseAt,c.ipaddr=_.has(b,"ipaddr")?b.ipaddr:c.ipaddr,c.port=_.has(b,"port")?b.port:c.port,c.fullcontact=_.has(b,"fullcontact")?b.fullcontact:c.fullcontact,c.useragent=_.has(b,"useragent")?b.useragent:c.useragent,c.lastms=_.has(b,"lastms")?b.lastms:c.lastms,c.internal=_.has(b,"internal")?b.internal:c.internal,_.map(a.gridOptions.data,function(a){a.isAgent||a.agentId!==b.id||(a.online=_.has(b,"online")?b.online:a.online)}))}),e.socket.on("agent:remove",function(b){_.remove(a.gridOptions.data,{agentId:b.id})}),e.socket.on("user_has_mail_queue:save",function(b){var c=_.includes(_.map(a.CurrentUser.PMailQueues,"id"),b.MailQueueId)||n.isAdmin();if(c){var d=_.find(a.gridOptions.data,{agentId:b.UserId,isAgent:!0});if(d){var e=a.gridOptions.data.indexOf(d);a.gridOptions.data.splice(e+1,0,{isAgent:!1,agentId:b.UserId,queue:b.queue,queueId:b.MailQueueId,agent:b.membername,online:d.online})}}}),e.socket.on("user_has_mail_queue:remove",function(b){_.remove(a.gridOptions.data,{agentId:b.UserId,queueId:b.MailQueueId})})}function q(b){a.gridOptions.data.push({isAgent:!0,agentId:b.id,agent:b.name,online:b.online,lastLoginAt:b.lastLoginAt,lastPauseAt:b.lastPauseAt,pause:b.mailPause,pauseType:b.pauseType,ipaddr:b.ipaddr,port:b.port,fullcontact:b.fullcontact,useragent:b.useragent,lastms:b.lastms,internal:b.internal,$$treeLevel:0}),b.MailQueues.forEach(function(c){a.gridOptions.data.push({isAgent:!1,agentId:b.id,queue:c.name,queueId:c.id,agent:b.name,online:b.online})})}function r(){return h.get().$promise.then(function(b){a.pauses=b.rows,e.syncUpdates("pause",a.pauses)})["catch"](function(a){f.error(a)})}function s(){return j.get().$promise.then(function(b){a.mailQueues=b.rows,e.syncUpdates("mail_queue",a.mailQueues)})["catch"](function(a){f.error(a)})}a.mailQueues=[];var t={controller:"realtime",controller1:"mail",offset:0,limit:10};a.moment=moment,a.initAgents=function(){a.gridOptions={enableGridMenu:!0,headerCellFilter:"translate",enableHorizontalScrollbar:0,enableVerticalScrollbar:0,enableFiltering:!0,showGridFooter:!0,paginationPageSizes:[10,25,50,75],paginationPageSize:10,useExternalPagination:!0,useExternalSorting:!0,useExternalFiltering:!0,multiSelect:!0,showTreeExpandNoChildren:!0,columnDefs:[{name:"name",displayName:"APPLICATION_AGENT",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div data-ng-if="row.entity.isAgent">{{row.entity.agent}} <{{row.entity.internal}}></div>'},{name:"online",displayName:"APPLICATION_ONLINE",width:150,headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div data-ng-if="row.entity.online != null && row.entity.isAgent"><i class="fa" data-ng-class="{\'font-green\':row.entity.online, \'font-red\':!row.entity.online,\'fa-user\':row.entity.online,\'fa-user-times\':!row.entity.online}"></i> <span data-ng-if="row.entity.online" class="left-margin">(<css-timer start-time="row.entity.lastLoginAt"></css-timer>)</span></div>',filter:{type:m.filter.SELECT,selectOptions:[{value:"true",label:"ONLINE"},{value:"false",label:"OFFLINE"}]}},{name:"mailPause",displayName:"APPLICATION_PAUSE",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div data-ng-if="row.entity.pause != null && row.entity.online" class="ui-grid-vcenter" data-ng-class="{\'paused-agent\':row.entity.pause}"><i data-ng-if="row.entity.pause" data-ng-click="grid.appScope.pause(row.entity.agentId,\'unpause\')" class="fa fa-play font-green pointer-cursor left-margin" title="{{\'APPLICATION_RESUME\' | translate}}"></i><i class="fa fa-pause font-yellow pointer-cursor" data-ng-click="grid.appScope.pause(row.entity.agentId,\'pause\',\'DEFAULT PAUSE\')" title="{{\'APPLICATION_DEFAULT_PAUSE\' | translate}}"></i><select data-ng-if="grid.appScope.pauses.length" class="pause-select pointer-cursor" data-ng-model="grid.appScope.pauseType" data-ng-change="grid.appScope.pause(row.entity.agentId,\'pause\',grid.appScope.pauseType)"><option class="pointer-cursor" data-ng-repeat="pause in grid.appScope.pauses">{{pause.name}}</option></select> <span data-ng-if="row.entity.pause">({{row.entity.pauseType}})</span><span class="left-margin"><css-timer data-ng-if="row.entity.pause" start-time="row.entity.lastPauseAt"></css-timer></span></div>',filter:{type:m.filter.SELECT,selectOptions:[{value:"true",label:"PAUSED"},{value:"false",label:"NOT PAUSED"}]},enableSorting:!1,enableColumnMenu:!1},{name:"queue",displayName:"APPLICATION_QUEUE",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1},{name:"action",displayName:"",width:170,cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div><button data-ng-if="row.entity.queueId" class="btn btn-xs red-sunglo" data-ng-click="grid.appScope.leaveQueue(row.entity.agentId,row.entity.queueId)"><i class="icon-ban"></i> {{\'APPLICATION_LEAVE\' | translate}}</button><button data-ng-if="row.entity.isAgent && row.treeNode.children.length < grid.appScope.mailQueues.length" class="btn btn-xs blue-hoki" data-ng-click="grid.appScope.joinQueue(row.entity.agentId)"><i class="icon-plus"></i> {{\'APPLICATION_JOIN_QUEUE\' | translate}}</button><div>',enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1}],data:[],gridMenuTitleFilter:function(a){var b=l.defer();return b.resolve(d.instant(a)),b.promise},onRegisterApi:function(b){a.gridApi=b,a.gridApi.grid.registerDataChangeCallback(function(){u(a.gridApi.core.getVisibleRows(a.gridApi.grid).length)}),a.gridApi.treeBase.on.rowExpanded(a,function(b){u(a.gridApi.core.getVisibleRows(a.gridApi.grid).length+b.treeNode.children.length)}),a.gridApi.treeBase.on.rowCollapsed(a,function(b){u(a.gridApi.core.getVisibleRows(a.gridApi.grid).length-b.treeNode.children.length)}),a.gridApi.core.on.sortChanged(a,function(a,b){0===b.length?t.order=null:t.order=b[0].name+" "+b[0].sort.direction.toUpperCase(),o()}),a.gridApi.pagination.on.paginationChanged(a,function(a,b){t.offset=(a-1)*b,t.limit=b,o()}),a.gridApi.core.on.filterChanged(a,function(){var a=this.grid;a.columns.forEach(function(a){a.filters[0].term?t[a.name]=a.filters[0].term:delete t[a.name]}),o()})}},o(),r(),s(),$timeout(function(){p()})};var u=function(a){var b=a?30*a+130:270;angular.element(document.getElementsByClassName("ui-grid")[0]).css("height",b+"px"),angular.element(document.getElementsByClassName("ui-grid-viewport")).css("height",30*a+"px")};a.$on("$destroy",function(){e.unsyncUpdates("agent"),e.unsyncUpdates("user_has_mail_queue")}),a.pause=function(b,c,e){return e&&(a.pauseType=null),i.save({name:c,agent:b,type:e||"DEFAULT PAUSE",data4:e||"DEFAULT PAUSE",channel:"mail"}).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){f.error(a)})},a.joinQueue=function(e){var g=c.open({animation:!0,templateUrl:"app/channels/mail/realtime/view/agent/queue.modal.add.html",controller:"MailRealtimeViewAgentQueueModalCtrl",resolve:{queues:function(){return _.reject(a.mailQueues,function(b){return!!_.find(a.gridOptions.data,{queue:b.name,isAgent:!1,agentId:e})})}}});g.result.then(function(b){return i.save({name:"QueueAdd",agent:e,queues:_.filter(a.mailQueues,function(a){return _.includes(b.queues,a.id)}),channel:"mail",data1:e,data3:b.queues.join(","),data4:"mail"}).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){f.error(a)})},function(){b.info("Modal dismissed at: "+new Date)})},a.leaveQueue=function(a,b){return i.save({name:"QueueRemove",agent:a,queueId:b,channel:"mail",data1:a,data3:b,data4:"mail"}).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){f.error(a)})},a.showInfo=function(a){c.open({animation:!0,templateUrl:"app/channels/mail/realtime/view/agent/agent.modal.info.html",controller:"MailRealtimeViewAgentInfoModalCtrl",resolve:{agent:a}})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.mail.realtime.view.agents",{url:"/agents",templateUrl:"app/channels/mail/realtime/view/agent/agent.html",controller:"MailRealtimeViewAgentCtrl"})}]),angular.module("xCallyShuttleApp").controller("MailRealtimeViewAgentInfoModalCtrl",["$scope","$uibModalInstance","$http","agent",function(a,b,c,d){a.agent=d,a.close=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("MailRealtimeViewAgentQueueModalCtrl",["$scope","$uibModalInstance","$http","queues",function(a,b,c,d){a.queues=d,a.item={},a.save=function(){b.close(a.item)},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("MailRealtimeViewApplicationCtrl",["$scope","$log","$uibModal","$translate","socket","xAlert","ReportMailSession","usSpinnerService","$q","uiGridConstants","$timeout",function(a,b,c,d,e,f,g,h,i,j,k){function l(){return h.spin("spinner-grid"),g.get({controller:"waiting",controller2:"applications"}).$promise.then(function(b){a.gridOptions.data=b.rows})["catch"](function(a){f.error(a)})["finally"](function(){m(),h.stop("spinner-grid")})}function m(){e.socket.on("report_mail_session:save",function(b){var c=_.find(a.gridOptions.data,{id:b.id});c?(_.merge(c,b),b.leaveAt&&k(function(){_.remove(a.gridOptions.data,{id:b.id})},1e4)):b.leaveAt||a.gridOptions.data.push(b)}),e.socket.on("report_mail_session:remove",function(b){_.remove(a.gridOptions.data,{id:b.id})})}a.moment=moment,a.initApplications=function(){a.gridOptions={headerCellFilter:"translate",enableHorizontalScrollbar:0,enableVerticalScrollbar:0,enableFiltering:!0,columnDefs:[{name:"uniqueid",displayName:"APPLICATION_UNIQUEID",headerCellFilter:"translate"},{name:"application",displayName:"APPLICATION_APPLICATION",headerCellFilter:"translate"},{name:"status",displayName:"APPLICATION_STATUS",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div><span data-ng-if="!row.entity.leaveAt">{{\'APPLICATION_QUEUESTATUS_WAITING\' | translate}}</span><span data-ng-if="row.entity.leaveAt && row.entity.complete">{{\'APPLICATION_QUEUESTATUS_COMPLETE\' | translate}}</span><span data-ng-if="row.entity.leaveAt && row.entity.timeout">{{\'APPLICATION_TIMEOUT\' | translate}}</span> <span data-ng-if="!row.entity.leaveAt">[<css-timer start-time="row.entity.updatedAt"></css-timer>]</span></div>',enableSorting:!1,enableColumnMenu:!1,enableFiltering:!1},{name:"membername",displayName:"APPLICATION_AGENT",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{row.entity.membername || ''}}</span></div>"},{name:"queuename",displayName:"APPLICATION_QUEUE",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{row.entity.queuename || ''}}</span></div>"}],data:[],gridMenuTitleFilter:function(a){var b=i.defer();return b.resolve(d.instant(a)),b.promise},onRegisterApi:function(b){a.gridApi=b,a.gridApi.grid.registerDataChangeCallback(function(){n(a.gridOptions.data.length)})}},l()};var n=function(a){var b=a?30*a+60:270;angular.element(document.getElementsByClassName("ui-grid")[0]).css("height",b+"px"),angular.element(document.getElementsByClassName("ui-grid-viewport")).css("height",30*a+"px")};a.$on("$destroy",function(){e.unsyncUpdates("report_mail_session")})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.mail.realtime.view.applications",{url:"/applications",templateUrl:"app/channels/mail/realtime/view/application/application.html",controller:"MailRealtimeViewApplicationCtrl"})}]),angular.module("xCallyShuttleApp").controller("MailRealtimeViewCtrl",["$scope","$state",function(a,b){a.agents=[{name:"Queues",link:"main.channels.mail.realtime.view.agents.queues"},{name:"Timeline",link:"main.channels.mail.realtime.view.agents.timeline"}],a.sessions=[{name:"Sessions",link:"main.channels.mail.realtime.view.sessions"}],a.tree={queues:[{name:"Queues",link:"main.channels.mail.realtime.view.agents.queues"},{name:"Timeline",link:"main.channels.mail.realtime.view.agents.timeline"}],sessions:[{name:"Sessions",link:"main.channels.mail.realtime.view.sessions"}]}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.mail.realtime.view",{url:"/view",templateUrl:"app/channels/mail/realtime/view/view.html",controller:"MailRealtimeViewCtrl"})}]),angular.module("xCallyShuttleApp").factory("ReportMailSession",["$resource",function(a){return a("/api/report/mail/sessions/:id/:controller/:controller2",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("OpenChannelAccount",["$resource",function(a){return a("/api/openchannel/accounts/:accountId/:controller/:id",{id:"@accountId"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.openchannel.accounts",{url:"/accounts",template:"<div ui-view></div>",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:46}}})}]),angular.module("xCallyShuttleApp").controller("OpenChannelAccountListCtrl",["$scope","OpenChannelAccount","gridOptions","$stateParams","xAlert","$translate",function(a,b,c,d,e,f){a.initView=function(){var e={exporterCsvFilename:"openchannel_accounts.csv",columnDefs:[{name:"id",displayName:"ID",cellClass:"text-center",width:75,enableSorting:!1,enableFiltering:!1},{name:"name"},{name:"description"},{name:"action",width:75,buttons:[{"class":"blue-hoki",href:"/channels/openchannel/accounts/view/{{row.entity.id}}/settings",name:"profile"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=c.gridOptions(b,e,a,{accountId:d.accountId})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.openchannel.accounts.list",{url:"/list",templateUrl:"app/channels/openchannel/account/list/list.html",controller:"OpenChannelAccountListCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.openchannel.accounts.view.actions",{url:"/actions",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").factory("OpenChannelApplication",["$resource",function(a){return a("/api/openchannel/applications/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("OpenChannelAccountViewActionListCtrl",["$scope","gridOptions","OpenChannelAccount","$http","$translate","$stateParams","xAlert",function(a,b,c,d,e,f,g){a.initActions=function(){var d={draggable:!0,exporterCsvFilename:"openchannel_applications.csv",enableSorting:!1,enableFiltering:!1,columnDefs:[{name:"app",cellClass:"text-center"},{name:"name",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div><span>{{row.entity.app == "queue" ? row.entity.OpenchannelQueue.name : row.entity.User.name}}</span></div>'},{name:"timeout",cellClass:"text-center"},{name:"interval",displayName:"APPLICATION_TIME_INTERVAL",cellClass:"text-center",cellTemplate:"<div><span>{{row.entity.Interval ? row.entity.Interval.name : row.entity.interval}}</span></div>"},{name:"action",width:125,buttons:[{"class":"blue-hoki",href:"/channels/openchannel/accounts/view/{{row.entity.OpenchannelAccountId}}/actions/view/{{row.entity.id}}",name:"profile"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.app, row.entity.id)"}]}]};a.gridOptions=b.gridOptions(c,d,a,{accountId:f.accountId,controller:"applications"})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.openchannel.accounts.view.actions.list",{url:"/list",templateUrl:"app/channels/openchannel/account/view/action/list/list.html",controller:"OpenChannelAccountViewActionListCtrl"})}]),angular.module("xCallyShuttleApp").controller("OpenChannelAccountViewActionViewCtrl",["$scope","$http","$stateParams","$translate","$location","xAlert","WizardHandler","socket","application","interval","Agent","Interval","OpenChannelQueue","OpenChannelAccount","OpenChannelApplication","Template","MailAccount","SmsAccount",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r){a.isActive=!0,a.size="small",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.initAction=function(){return a.$application=i.application,a.$stateParams=c, -a.$interval=j.interval,a.forms={},a.apps=[{name:"Queue",value:"queue"},{name:"Agent",value:"agent"},{name:"SendMail",value:"sendMail"},{name:"SendSMS",value:"sendSms"}],o.get({id:c.actionId}).$promise.then(function(b){if(a.application=b,a.application.alwaysTime=!1,a.application.IntervalId)a.application.intType="list";else switch(a.application.interval){case"*,*,*,*":a.application.intType="always";break;default:a.application.intType="custom"}if("always"===a.application.intType||"custom"===a.application.intType){var c=a.application.interval.split(",");"*"===c[0]?a.application.alwaysTime=!0:(a.application.t_from=moment(new Date),a.application.t_to=moment(new Date),a.application.t_from.hour(c[0].split("-")[0].split(":")[0]),a.application.t_from.minute(c[0].split("-")[0].split(":")[1]),a.application.t_to.hour(c[0].split("-")[1].split(":")[0]),a.application.t_to.minute(c[0].split("-")[1].split(":")[1])),"*"===c[1]?(a.application.wd_from="always",a.application.wd_to="always"):(a.application.wd_from=c[1].split("-")[0],a.application.wd_to=c[1].split("-")[1]),"*"===c[2]?(a.application.md_from="always",a.application.md_to="always"):(a.application.md_from=c[2].split("-")[0],a.application.md_to=c[2].split("-")[1]),"*"===c[3]?(a.application.m_from="always",a.application.m_to="always"):(a.application.m_from=c[3].split("-")[0],a.application.m_to=c[3].split("-")[1])}a.$watch("application.t_from",function(b){a.application.t_from_hm=moment(b).format("HH:mm")}),a.$watch("application.t_to",function(b){a.application.t_to_hm=moment(b).format("HH:mm")})})["catch"](function(a){f.error(a)})},a.getQueues=function(){return m.get().$promise.then(function(b){a.queues=b.rows})["catch"](function(a){console.error(a)})},a.getSmsAccounts=function(){return r.get().$promise.then(function(b){a.smsAccounts=b.rows})["catch"](function(a){console.error(a)})},a.getAgents=function(){return k.get().$promise.then(function(b){a.agents=b.rows})["catch"](function(a){console.error(a)})},a.getIntervals=function(){return l.get().$promise.then(function(b){a.intervals=b.rows})["catch"](function(a){console.error(a)})},a.updateItem=function(){switch(a.application.intType){case"always":a.application.interval="*,*,*,*",a.application.IntervalId=null;break;case"list":var b=_.find(a.intervals,{id:a.application.IntervalId});a.application.interval=b?"":"*,*,*,*",a.application.IntervalId=b?a.application.IntervalId:null;break;case"custom":var g,h,i,j,k;g=a.application.t_from&&a.application.t_to&&!a.application.alwaysTime?moment(a.application.t_from).format("HH:mm")+"-"+moment(a.application.t_to).format("HH:mm"):"*",a.application.wd_from&&"always"!==a.application.wd_from?(h=a.application.wd_from,a.application.wd_to&&"always"!==a.application.wd_to&&(h+="-"+a.application.wd_to)):h="*",a.application.md_from&&"always"!==a.application.md_from?(i=a.application.md_from,a.application.md_to&&"always"!==a.application.md_to&&(i+="-"+a.application.md_to)):i="*",a.application.m_from&&"always"!==a.application.m_from?(j=a.application.m_from,a.application.m_to&&"always"!==a.application.m_to&&(j+="-"+a.application.m_to)):j="*",k=g+","+h+","+i+","+j,a.application.interval=k,a.application.IntervalId=null}return n.update({accountId:c.accountId,controller:"applications",id:c.actionId},a.application).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success"),e.path("/channels/openchannel/accounts/view/"+c.accountId+"/actions/list")})["catch"](function(a){f.error(a)})},a.getTemplates=function(){return p.get().$promise.then(function(b){a.templates=b.rows})["catch"](function(a){console.error(a)})},a.getMailAccounts=function(){return q.get().$promise.then(function(b){a.mailAccounts=b.rows})["catch"](function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.openchannel.accounts.view.actions.view",{url:"/view/:actionId",templateUrl:"app/channels/openchannel/account/view/action/view/view.html",controller:"OpenChannelAccountViewActionViewCtrl"})}]),angular.module("xCallyShuttleApp").controller("OpenChannelAccountViewActionWizardCtrl",["$scope","$http","Agent","OpenChannelQueue","Interval","$stateParams","$translate","$location","xAlert","WizardHandler","socket","application","interval","OpenChannelApplication","OpenChannelAccount","Template","MailAccount","SmsAccount",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r){a.isActive=!0,a.size="small",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.initWizard=function(){a.apps=[{name:"Queue",value:"queue"},{name:"Agent",value:"agent"},{name:"SendMail",value:"sendMail"},{name:"SendSMS",value:"sendSms"}],a.$application=l.application,a.$stateParams=f,a.$interval=m.interval,a.forms={},a.application={alwaysTime:!0},a.$watch("application.t_from",function(b){a.application.t_from_hm=moment(b).format("HH:mm")}),a.$watch("application.t_to",function(b){a.application.t_to_hm=moment(b).format("HH:mm")})},a.getQueues=function(){return d.get().$promise.then(function(b){console.log(b),a.queues=b.rows})["catch"](function(a){console.error(a)})},a.getAgents=function(){return c.get().$promise.then(function(b){a.agents=b.rows})["catch"](function(a){console.error(a)})},a.getSmsAccounts=function(){return r.get().$promise.then(function(b){a.smsAccounts=b.rows})["catch"](function(a){console.error(a)})},a.getIntervals=function(){return e.get().$promise.then(function(b){a.intervals=b.rows})["catch"](function(a){console.error(a)})},a.createItem=function(){switch(a.application.intType){case"always":a.application.interval="*,*,*,*",a.application.IntervalId=null;break;case"list":var b=_.find(a.intervals,{id:a.application.IntervalId});a.application.interval=b?"":"*,*,*,*",a.application.IntervalId=b?a.application.IntervalId:null;break;case"custom":var c,d,e,j,k;c=a.application.t_from&&a.application.t_to&&!a.application.alwaysTime?moment(a.application.t_from).format("HH:mm")+"-"+moment(a.application.t_to).format("HH:mm"):"*",a.application.wd_from&&"always"!==a.application.wd_from?(d=a.application.wd_from,a.application.wd_to&&"always"!==a.application.wd_to&&(d+="-"+a.application.wd_to)):d="*",a.application.md_from&&"always"!==a.application.md_from?(e=a.application.md_from,a.application.md_to&&"always"!==a.application.md_to&&(e+="-"+a.application.md_to)):e="*",a.application.m_from&&"always"!==a.application.m_from?(j=a.application.m_from,a.application.m_to&&"always"!==a.application.m_to&&(j+="-"+a.application.m_to)):j="*",k=c+","+d+","+e+","+j,a.application.interval=k,a.application.IntervalId=null}return o.save({accountId:f.accountId,controller:"applications"},a.application).$promise.then(function(){i.show(g.instant("MESSAGE_WELL_DONE"),"success"),h.path("/channels/openchannel/accounts/view/"+f.accountId+"/actions/list")})["catch"](function(a){i.error(a)})},a.formValidation=function(a){return a},a.next=function(){j.wizard().next()},a.getMailAccounts=function(){return q.get().$promise.then(function(b){a.mailAccounts=b.rows})["catch"](function(a){console.error(a)})},a.getTemplates=function(){return p.get().$promise.then(function(b){a.templates=b.rows})["catch"](function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.openchannel.accounts.view.actions.wizard",{url:"/wizard",templateUrl:"app/channels/openchannel/account/view/action/wizard/wizard.html",controller:"OpenChannelAccountViewActionWizardCtrl"})}]),angular.module("xCallyShuttleApp").controller("OpenChannelAccountApiViewCtrl",["$scope","OpenChannelAccount","$http","$stateParams","clipboard","$translate","$location","xAlert",function(a,b,c,d,e,f,g,h){a.copyToClipboard=function(a){e.copyText(a),h.show(f.instant("MESSAGE_TEXT_COPIED_CLIPBOARD")+"!","success")},a.initView=function(){b.get({id:d.accountId}).$promise.then(function(b){a.account=b,a.receiveurl=a.account.remote+"/api/openchannel/accounts/"+a.account.id+"/receive"})["catch"](function(a){h.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.openchannel.accounts.view.api",{url:"/api",controller:"OpenChannelAccountApiViewCtrl",templateUrl:"app/channels/openchannel/account/view/api/view/view.html"})}]),angular.module("xCallyShuttleApp").factory("OpenChannelDisposition",["$resource",function(a){return a("/api/openchannel/dispositions/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("OpenChannelInboxViewModaDispositionAddCtrl",["$scope","$uibModalInstance","OpenChannelAccount","id",function(a,b,c,d){a.ok=function(){return c.save({accountId:d,controller:"dispositions"},{name:a.name}).$promise.then(function(a){b.close(a)})},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("OpenChannelAccountDispositionViewCtrl",["$scope","$stateParams","$uibModal","$translate","OpenChannelAccount","xAlert",function(a,b,c,d,e,f){a.initView=function(){return e.get({accountId:b.accountId,controller:"dispositions"}).$promise.then(function(b){a.dispositions=b.rows})["catch"](function(a){console.error(a),f.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},a.updateDisposition=function(a,c){return e.update({accountId:b.accountId,controller:"dispositions",id:a},{name:c}).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE")+"!","success")})["catch"](function(a){console.error(a),f.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},a.deleteDisposition=function(c){return console.log("delete"),e.remove({accountId:b.accountId,controller:"dispositions",id:c}).$promise.then(function(){_.remove(a.dispositions,{id:c})})["catch"](function(a){console.error(a),f.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},a.addDisposition=function(){return c.open({animation:!0,templateUrl:"app/channels/openchannel/account/view/disposition/modal/add.modal.html",controller:"OpenChannelInboxViewModaDispositionAddCtrl",resolve:{id:function(){return b.accountId}}}).result.then(function(b){b&&a.dispositions.push(b)})["catch"](function(a){console.error(a),f.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.openchannel.accounts.view.dispositions",{url:"/dispositions",controller:"OpenChannelAccountDispositionViewCtrl",templateUrl:"app/channels/openchannel/account/view/disposition/view/view.html"})}]),angular.module("xCallyShuttleApp").controller("OpenChannelAccountHooksViewCtrl",["$scope","OpenChannelAccount","Pause","$http","$stateParams","$translate","$location","xAlert",function(a,b,c,d,e,f,g,h){a.account={},a.isActive=!0,a.size="small",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.CONST_TIMEOUT=3e4,a.initView=function(){a.types=[{value:"",name:"-- None --"},{name:"HTTP GET",value:"GET"},{name:"HTTP POST",value:"POST"}],c.get().$promise.then(function(b){a.pauses=b.rows})["catch"](function(a){h.error(a)}),b.get({id:e.accountId}).$promise.then(function(b){a.account=b,a.account.actions.length<1&&a.account.actions.push({action:"pause",enabled:!1,type:null})})["catch"](function(a){h.error(a)})},a.resetActionData=function(a){a.type=null},a.updateItem=function(){return console.log(a.account),b.update({id:e.accountId},a.account).$promise.then(function(){h.show(f.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){h.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.openchannel.accounts.view.hooks",{url:"/hooks",controller:"OpenChannelAccountHooksViewCtrl",templateUrl:"app/channels/openchannel/account/view/hooks/view/view.html"})}]),angular.module("xCallyShuttleApp").controller("OpenChannelAccountSettingViewCtrl",["$scope","OpenChannelAccount","$http","$stateParams","clipboard","$translate","$location","xAlert","List",function(a,b,c,d,e,f,g,h,i){a.isActive=!0,a.size="small",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.CONST_TIMEOUT=3e4,a.types=[{name:"HTTP GET",value:"GET"},{name:"HTTP POST",value:"POST"}],a.account={},a.initView=function(){i.get().$promise.then(function(b){a.lists=b.rows})["catch"](function(a){console.error(a)}),b.get({id:d.accountId}).$promise.then(function(b){a.account=b})["catch"](function(a){h.error(a)})},a.updateItem=function(){return b.update({id:d.accountId},a.account).$promise.then(function(){h.show(f.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){h.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.openchannel.accounts.view.settings",{url:"/settings",controller:"OpenChannelAccountSettingViewCtrl",templateUrl:"app/channels/openchannel/account/view/setting/view/view.html"})}]),angular.module("xCallyShuttleApp").controller("OpenChannelAccountViewCtrl",["$scope","OpenChannelAccount","$http","$stateParams","clipboard","$translate","$location","xAlert","List",function(a,b,c,d,e,f,g,h,i){a.initView=function(){return a.account={},b.get({id:d.accountId}).$promise.then(function(b){a.account=b,console.log(b)})["catch"](function(a){h.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.openchannel.accounts.view",{url:"/view/:accountId",templateUrl:"app/channels/openchannel/account/view/view.html",controller:"OpenChannelAccountViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]})}]}})}]),angular.module("xCallyShuttleApp").controller("OpenChannelAccountWizardCtrl",["$scope","$http","$location","$translate","WizardHandler","xAlert","OpenChannelAccount",function(a,b,c,d,e,f,g){a.isActive=!0,a.size="small",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.initWizard=function(){a.forms={},a.item={},a.item.remote=c.protocol()+"://"+location.host},a.goNext=function(){e.wizard().next()},a.formValidation=function(a){return a},a.createItem=function(){return g.save(a.item).$promise.then(function(){c.path("/channels/openchannel/accounts/list")})["catch"](function(a){f.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.openchannel.accounts.wizard",{url:"/wizard",templateUrl:"app/channels/openchannel/account/wizard/wizard.html",controller:"OpenChannelAccountWizardCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.openchannel.inbox",{url:"/inbox",template:"<div ui-view></div>",data:{permissions:{only:["admin","user","agent"],redirectTo:"landing",id:48}}})}]),angular.module("xCallyShuttleApp").controller("OpenChannelInboxInfoModalCtrl",["$scope","$translate","$uibModalInstance","$stateParams","xAlert","data",function(a,b,c,d,e,f){a.data=null,a.initInfo=function(){f&&(a.data=_.isEmpty(JSON.parse(f))?null:JSON.parse(f))},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").directive("message",["$rootScope","OpenChannelMessage","List","xAlert","$translate","$uibModal",function(a,b,c,d,e,f){return{restrict:"E",scope:{Message:"=message",accounttype:"=accounttype",listId:"="},templateUrl:"app/channels/openchannel/inbox/message/message.html",link:function(b){b.openContact=function(f,g){if(b.listId){if(!g)return;var h;switch(f){case"phone":h={phone:g};break;case"email":h={email:g};break;default:return}return c.save({listId:b.listId,controller:"contacts"},h).$promise.then(function(b){var c=_.find(a.$root.workspaces,{contactID:b.id});c?c.active=!0:a.$root.workspaces.push({active:!0,"class":"icon-user",contactID:b.id,name:b.phone,type:"contact"})})["catch"](function(a){console.error(a)})}d.show(e.instant("MESSAGE_NO_LIST_CONFIGURED"),"info")},b.info=function(a){f.open({animation:!0,templateUrl:"app/channels/openchannel/inbox/message/info.modal.html",controller:"OpenChannelInboxInfoModalCtrl",resolve:{data:function(){return a}}})}}}}]),angular.module("xCallyShuttleApp").directive("openchannelRoom",["OpenChannelReport","$cookieStore","$translate","$uibModal","$timeout","Tag","CannedAnswer","Auth","OpenChannelAccount","OpenChannelRoom","OpenChannelMessage","xAlert","usSpinnerService","socket","$stateParams","$rootScope",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){return{restrict:"E",scope:{workspace:"=",index:"=",submit:"&onSubmit"},templateUrl:"app/channels/openchannel/inbox/room/room.directive.html",link:function(a){a.modelOptions={debounce:{"default":500,blur:250},getterSetter:!0},a.panelLeft=null,a.panelRight="col-md-12",a.togglePanelLeft=function(){a.panelLeft?(a.panelLeft=null,a.panelRight="col-md-12"):(a.panelLeft="col-md-6",a.panelRight="col-md-6")},a.form={disabled:!1,from:"",to:a.workspace.data&&a.workspace.data.to?a.workspace.data.to:"",body:""},n.socket.on("openchannel_message:save",function(b){return a.workspace.id&&b.OpenchannelRoomId==a.workspace.id?k.get({id:b.id}).$promise.then(function(b){a.Room||(a.Room={OpenchannelMessages:[]});var c=_.findIndex(a.Room.OpenchannelMessages,{id:b.id});c>-1?_.merge(a.Room.OpenchannelMessages[c],b):a.Room.OpenchannelMessages.unshift(b),a.panelLeft="col-md-6",a.panelRight="col-md-6"})["catch"](function(a){console.error(a)}):void 0}),n.socket.on("openchannel_message:update",function(b){if(a.Room&&b.OpenchannelRoomId==a.workspace.id){var c=_.find(a.Room.OpenchannelMessages,{id:b.id});c&&_.merge(c,b)}}),n.socket.on("openchannel_room:save",function(b){a.Room&&b.id==a.workspace.id&&(a.Room.status=b.status,a.Room.disposition=b.disposition)}),a.closeRoom=function(b){return d.open({animation:!0,templateUrl:"app/channels/openchannel/inbox/view/view.status.modal.html",controller:"OpenChannelInboxViewModalStatusCtrl",resolve:{closed:function(){return"CLOSED"===a.Room.status},accountId:function(){return a.Room.OpenchannelAccountId}}}).result.then(function(a){var c={id:b,status:"CLOSED"};return a.disposition&&(c.disposition=a.disposition),j.update(c).$promise["catch"](function(a){l.error(a)})})},a.openRoom=function(a,b){var c=_.find(p.workspaces,{id:a,type:"openchannelRoom"});c?c.active=!0:p.workspaces.push({id:a,name:b,type:"openchannelRoom","class":"icon-globe",active:!0})},f.get().$promise.then(function(b){a.tags=_.map(b.rows,"name")})["catch"](function(a){console.error(a)}),i.get().$promise.then(function(b){a.Accounts=b.rows})["catch"](function(a){console.error(a)}),a.workspace.id?(a.panelLeft="col-md-6",a.panelRight="col-md-6",j.get({id:a.workspace.id}).$promise.then(function(b){a.Room=b,a.form.from=a.Room.OpenchannelAccount.name,a.form.to=a.Room.contact,a.form.tags=a.Room.tags})["catch"](function(a){console.error(a)})["finally"](function(){m.stop("spinner-grid"),a.form.disabled=!1})):m.stop("spinner-grid"),a.onSelect=function(){a.form.body+=a.modelOptions.selectedAnswer,delete a.modelOptions.selectedAnswer},a.onSelectAnswer=function(b){a.form.body+=b,a.selectedAnswer=""},a.getAnswers=function(a){return g.get({key:a}).$promise.then(function(a){return _.map(a.rows,"value")})},a.loadAgents=function(){d.open({animation:!0,templateUrl:"app/channels/openchannel/inbox/view/view.agents.modal.html",controller:"OpenChannelInboxViewModalAgentCtrl",resolve:{roomId:function(){return a.workspace.id}}})},a.onChanged=function(){return j.patch({id:a.workspace.id},{tags:a.form.tags}).$promise["catch"](function(a){console.error(a)})},a.sendMessage=function(){m.spin("spinner-grid");var b=_.find(a.Accounts,{name:a.form.from}).id;if(b){var d={from:a.form.from,to:a.form.to,body:a.form.body,OpenchannelRoomId:a.Room?a.Room.id:null};return i.save({accountId:b,controller:"send"},d).$promise.then(function(b){return l.show(c.instant("MESSAGE_WELL_DONE"),"success"),a.Room?a.Room:j.get({id:"messages",controller:b.id}).$promise}).then(function(b){b&&(a.form.body="",a.workspace.id=b.id,a.workspace.name=b.contact,a.Room=b,a.panelLeft="col-md-6",a.panelRight="col-md-6")})["catch"](function(a){l.error(a)})["finally"](function(){m.stop("spinner-grid")})}}}}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.openchannel.inbox.view.account",{url:"/account/:id",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("OpenChannelInboxViewAccountListCtrl",["$scope","$rootScope","$uibModal","$translate","$stateParams","$state","Tag","usSpinnerService","socket","OpenChannelAccount","OpenChannelRoom","gridOptions","uiGridConstants","Auth","Modal","xAlert","uibButtonConfig","localStorageService",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r){a.loadAgents=function(a){c.open({animation:!0,templateUrl:"app/channels/openchannel/inbox/view/view.agents.modal.html",controller:"OpenChannelInboxViewModalAgentCtrl",resolve:{roomId:a}})},a.initView=function(){q.activeClass="green-haze",a.id=[],a.isAdmin=n.isAdmin(),a.isAgent=n.isAgent(),a.uncheckable=!1,a.query={status:r.get("openchannelStatus")?r.get("openchannelStatus"):"NEW",tags:r.get("openchannelTags")?r.get("openchannelTags"):[]},a.$watch("query.status",function(){r.set("openchannelStatus",a.query.status),a.getPage()},!0),g.get().$promise.then(function(b){a.tags=_.map(b.rows,"name")})["catch"](function(a){console.error(a)}),a.gridOptions={exporterCsvFilename:"openchannel_rooms.csv",enableRowHeaderSelection:!0,paginationPageSizes:[10,25,50,75],paginationPageSize:10,enableFiltering:!0,enableSorting:!0,enableGridMenu:!1,flatEntityAccess:!0,showGridFooter:!0,fastWatch:!0,enableSelectAll:!0,enableHorizontalScrollbar:0,enableVerticalScrollbar:0,columnDefs:[{name:"lastEvent",displayName:"",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div> <span data-ng-class=\"{'icon-arrow-up font-green': row.entity.lastEvent === 'SENT', 'icon-arrow-up font-yellow': row.entity.lastEvent === 'SENDING', 'icon-arrow-down font-green': row.entity.lastEvent === 'RECEIVED', 'icon-close font-red': row.entity.lastEvent === 'FAILED', 'icon-question': !row.entity.lastEvent}\"> </span> </div>",width:30,enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1},{name:"tags",displayName:"",headerCellTemplate:'<i class="icon-tag" style="margin-top: 8px; margin-left: 8px;"></i>',cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div><i data-ng-class=\"row.entity.tags.length ? 'icon-tag' : ''\" title=\"{{row.entity.tags}}\"></i></div>",width:30,enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1},{name:"id",displayName:"Id",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div><span>#{{row.entity.id}}</span></div>",width:75,enableSorting:!1,enableFiltering:!0,enableColumnMenu:!1},{name:"contact",cellClass:"text-center"},{name:"disposition",cellClass:"text-center"},{name:"updatedAt",cellFilter:"date:'MM/dd/yyyy HH:mm'",width:120,enableSorting:!1,enableFiltering:!1,sort:{direction:m.DESC}},{name:"action",cellTemplate:'<div> <a class="btn btn-icon-only font-green" data-ng-click="grid.appScope.openRoom(row.entity.id, row.entity.contact)"><i class="glyphicon glyphicon-comment" aria-hidden="true"></i></a> <a class="btn btn-icon-only font-red" data-ng-show="grid.appScope.isAdmin" data-ng-click="grid.appScope.deleteItem(row.entity.id,row.entity.id)"><i class="fa fa-trash" aria-hidden="true"></i> </div>',enableSorting:!1,cellClass:"ui-grid-vcenter",width:90,enableFiltering:!1,enableColumnMenu:!1}],data:[],onRegisterApi:function(b){a.gridApi=b,a.gridApi.selection&&(a.gridApi.selection.on.rowSelectionChanged(a,function(b){b.isSelected?a.id.push(a.gridApi.grid.options.primaryKey?b.entity[a.gridApi.grid.options.primaryKey]:b.entity.id):_.pull(a.id,a.gridApi.grid.options.primaryKey?b.entity[a.gridApi.grid.options.primaryKey]:b.entity.id)}),a.gridApi.selection.on.rowSelectionChangedBatch(a,function(b){b[0].isSelected?a.id=_.union(a.id,_.map(b,a.gridApi.grid.options.primaryKey?"entity."+a.gridApi.grid.options.primaryKey:"entity.id")):_.map(b,a.gridApi.grid.options.primaryKey?"entity."+a.gridApi.grid.options.primaryKey:"entity.id").forEach(function(b){_.pull(a.id,b)})}))}},i.socket.on("openchannel_room:remove",function(b){_.remove(a.workspaces,{id:b.id,type:"openchannelRoom"}),_.remove(a.gridOptions.data,{id:b.id})}),a.getPage(a.query)},a.onChanged=function(){a.getPage(a.query)},a.tagItems=function(){return c.open({animation:!0,templateUrl:"app/channels/openchannel/inbox/view/view.tags.modal.html",controller:"OpenChannelInboxViewModalTagCtrl",resolve:{id:function(){return a.id}}}).result.then(function(){a.gridApi.selection.clearSelectedRows(),a.id=[],a.getPage()})},a.openRoom=function(b,c){var d=_.find(a.workspaces,{id:b,type:"openchannelRoom"});return d?d.active=!0:a.workspaces.push({id:b,name:c,type:"openchannelRoom","class":"icon-globe",active:!0}),b&&"agent"===n.getCurrentUser().role&&"PENDING"!==a.query.status&&"CLOSED"!==a.query.status?k.patch({id:b},{status:"OPEN",openReason:"agent"}).$promise["catch"](function(a){console.error(a)}):void 0},a.getPage=function(b){h.spin("spinner-grid");var c={accountId:e.id,controller:"rooms"};return b&&_.merge(c,b),a.query&&_.merge(c,a.query),j.query(c).$promise.then(function(b){r.set("openchannelAccountId",e.id),a.gridOptions.data=b,i.socket.on("openchannel_room:save",function(b){if(b.OpenchannelAccountId==e.id){var c=_.find(a.gridOptions.data,{id:b.id});c?c.status!==b.status?_.remove(a.gridOptions.data,{id:b.id}):_.merge(c,b):a.query.status===b.status&&a.gridOptions.data.push(b)}}),i.socket.on("openchannel_room:remove",function(b){_.remove(a.gridOptions.data,{id:b.id})})})["catch"](function(a){console.error(a)})["finally"](function(){h.stop("spinner-grid")})},a.deleteItem=o.confirm["delete"](function(b){var c={id:b};return console.log(c),k["delete"](c).$promise.then(function(){a.getPage(),p.show(d.instant("MESSAGE_WELL_DONE")+"!","success"),a.gridApi.selection.clearSelectedRows(),a.id=[]})["catch"](function(a){p.error(a)})}),a.deleteItems=o.confirm["delete"](function(){var b={ids:a.id};return k["delete"](b).$promise.then(function(){a.getPage(),p.show(d.instant("MESSAGE_WELL_DONE")+"!","success"),a.gridApi.selection.clearSelectedRows(),a.id=[]})["catch"](function(a){p.error(a)})})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.openchannel.inbox.view.account.list",{url:"/list",templateUrl:"app/channels/openchannel/inbox/view/account/list/list.html",controller:"OpenChannelInboxViewAccountListCtrl"})}]),angular.module("xCallyShuttleApp").controller("OpenChannelInboxViewModalAgentCtrl",["$scope","$uibModalInstance","$translate","$stateParams","Agent","OpenChannelRoom","xAlert","roomId",function(a,b,c,d,e,f,g,h){a.initModal=function(){a.agents=[],a.item={agents:[]},e.get().$promise.then(function(b){b.rows.forEach(function(b){a.agents.push(b)})})["catch"](function(a){console.error(a)}),f.query({id:h,controller:"agents"}).$promise.then(function(b){b.forEach(function(b){a.agents.push(b),a.item.agents.push(b.id)})})["catch"](function(a){console.error(a)}),a.modal={dismissable:!0,title:"APPLICATION_MESSAGE_SEND_RETRY",text:"MESSAGE_MESSAGE_SEND_RETRY",buttons:[{classes:"btn btn-success",text:"APPLICATION_RETRY",click:function(a){b.close(a)}},{classes:"btn default",text:"APPLICATION_CANCEL",click:function(a){b.dismiss(a)}}]}},a.ok=function(){return f.update({id:h,controller:"agents",agents:a.item.agents}).$promise.then(function(){g.show(c.instant("MESSAGE_WELL_DONE"),"success"),b.close()})["catch"](function(a){console.error(a)})},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("OpenChannelInboxViewCtrl",["$scope","$location","$stateParams","$translate","$uibModal","socket","Auth","xAlert","OpenChannelRoom","OpenChannelAccount","localStorageService",function(a,b,c,d,e,f,g,h,i,j,k){a.initView=function(){j.get().$promise.then(function(c){var d=null;a.Accounts=c.rows,a.Accounts.length&&(d="/channels/openchannel/inbox/view/account/"+(k.get("openchannelAccountId")||a.Accounts[0].id)+"/list"),d&&b.path(d)})["catch"](function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.openchannel.inbox.view",{url:"/view",templateUrl:"app/channels/openchannel/inbox/view/view.html",controller:"OpenChannelInboxViewCtrl",reload:!0,resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/inbox.css"]}])}]}})}]),angular.module("xCallyShuttleApp").controller("OpenChannelInboxViewModalStatusCtrl",["$scope","$uibModalInstance","closed","OpenChannelAccount","accountId",function(a,b,c,d,e){a.modal={title:"APPLICATION_CONFIRM_CLOSE",text:"MESSAGE_ARE_YOU_SURE_YOU_WANT_TO_CLOSE"},a.initDisposition=function(){return d.get({accountId:e,controller:"dispositions"}).$promise.then(function(b){a.dispositions=b.rows})["catch"](function(a){console.error(a)})},a.item={},a.closed=c,a.ok=function(){b.close(a.item)},a.cancel=function(){b.dismiss()}}]),angular.module("xCallyShuttleApp").controller("OpenChannelInboxViewModalTagCtrl",["$scope","$uibModalInstance","$translate","$stateParams","Tag","OpenChannelRoom","xAlert","id",function(a,b,c,d,e,f,g,h){a.initModal=function(){return a.tags=[],a.item={tags:[]},a.modal={dismissable:!0,title:"APPLICATION_MESSAGE_SEND_RETRY",text:"MESSAGE_MESSAGE_SEND_RETRY",buttons:[{"class":"btn-success",text:"APPLICATION_TAG",click:function(){var d={status:!0};return f.patch({id:h},{tags:a.item.tags}).$promise.then(function(){g.show(c.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(){d.status=!1,g.show(c.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})["finally"](function(){b.close(d)})}},{"class":"default",text:"APPLICATION_CANCEL",click:function(a){b.dismiss(a)}}]},e.get().$promise.then(function(b){a.tags=_.map(b.rows,"name")})["catch"](function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.openchannel",{url:"/openchannel",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user","agent"],redirectTo:"landing",id:20}}})}]),angular.module("xCallyShuttleApp").factory("OpenChannelReport",["$resource",function(a){return a("/api/report/openchannel/:id/:controller1/:controller2",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("OpenChannelRoom",["$resource",function(a){return a("/api/openchannel/rooms/:id/:controller",{id:"@id",controller:"@controller"},{update:{method:"PUT"},patch:{method:"PATCH"}})}]),angular.module("xCallyShuttleApp").factory("OpenChannelMessage",["$resource",function(a){return a("/api/openchannel/messages/:id/:controller",{id:"@id",controller:"@controller"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("OpenChannelQueueListCtrl",["$scope","OpenChannelQueue","gridOptions","$uibModal","xAlert","Auth",function(a,b,c,d,e,f){a.initView=function(){a.Auth=f;var d={exporterCsvFilename:"openchanel_queues.csv",columnDefs:[{name:"name"},{name:"description"},{name:"timeout"},{name:"strategy"},{name:"action",width:100,buttons:[{"class":"blue-hoki",href:"/channels/openchannel/queues/view/{{row.entity.id}}/settings",name:"settings"},{"class":"green-meadow",href:"/channels/openchannel/queues/view/{{row.entity.id}}/agents",name:"agents",hide:"user"===f.getCurrentUser().role},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=c.gridOptions(b,d,a)},a.createItem=function(){var b=d.open({animation:!0,templateUrl:"app/channels/openchannel/queue/list/list.create.modal.html",controller:"OpenChannelQueueListCreateCtrl",size:"lg"});b.result.then(function(b){console.log(b),a.gridOptions.getPage()})}}]),angular.module("xCallyShuttleApp").controller("OpenChannelQueueListCreateCtrl",["$scope","$uibModalInstance","$translate","xAlert","OpenChannelQueue","Team","strategies",function(a,b,c,d,e,f,g){ -a.form={},a.strategies=g,a.item={penalty:0,agents:[]},a.getTeams=function(){return f.get({controller:"associations"}).$promise.then(function(b){a.teams=b.rows}).then(function(){ComponentsDropdowns.bindQueue(a.teams,[],function(){return{select:function(b){a.item.agents=_.union(a.item.agents,b)},deselect:function(b){a.item.agents=_.difference(a.item.agents,b)}}})})["catch"](function(a){console.error(a)})},a.save=function(){return console.log(a.item),e.save(a.item).$promise.then(function(a){b.close(a)})["catch"](function(a){d.error(a)})},a.cancel=function(){b.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.openchannel.queues.list",{url:"/list",templateUrl:"app/channels/openchannel/queue/list/list.html",controller:"OpenChannelQueueListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/jquery-multi-select/css/multi-select.css","assets/plugins/jquery-multi-select/js/jquery.multi-select.js","assets/plugins/jquery-quicksearch/jquery.quicksearch.js","assets/scripts/components-dropdowns.js"]})}]}})}]),angular.module("xCallyShuttleApp").factory("OpenChannelQueue",["$resource",function(a){return a("/api/openchannel/queues/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.openchannel.queues",{url:"/queues",template:"<div ui-view></div>",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:47}}})}]),angular.module("xCallyShuttleApp").controller("OpenChannelQueueViewCtrl",["$scope","$http","Auth","$translate","$stateParams","xAlert","Team","OpenChannelQueue","strategies",function(a,b,c,d,e,f,g,h,i){a.strategies=i,a.Auth=c;var j=function(){return{select:function(b){return h.save({id:a.queue.id,controller:"agents"},{agents:b,penalty:a.queue.penalty}).$promise.then(function(b){console.log("sel",b),a.getTeams()})["catch"](function(a){console.error(a)})},deselect:function(b){return h["delete"]({id:a.queue.id,controller:"agents",agents:b}).$promise.then(function(b){console.log("desel",b),a.getTeams()})["catch"](function(a){console.error(a)})}}};a.getQueue=function(){return h.get({id:e.id}).$promise.then(function(b){b.penalty=0,a.queue=b})["catch"](function(a){console.error(a)})},a.updateQueue=function(){return h.update({id:e.id},{name:a.queue.name,description:a.queue.description,timeout:a.queue.timeout,strategy:a.queue.strategy}).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){f.error(a)})},a.getTeams=function(){return g.get({controller:"associations"}).$promise.then(function(b){return a.teams=b.rows,console.log(b.rows),h.get({id:e.id,controller:"agents"}).$promise}).then(function(b){console.log(b),ComponentsDropdowns.bindQueue(a.teams,_.map(b.rows,function(a){return{id:a.id,penalty:a.UserHasOpenchannelQueue.penalty}}),j)})["catch"](function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.openchannel.queues.view",{url:"/view/:id",templateUrl:"app/channels/openchannel/queue/view/view.html",controller:"OpenChannelQueueViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.channels.openchannel.queues.view.settings",{url:"/settings",templateUrl:"app/channels/openchannel/queue/view/view.settings.html"}).state("main.channels.openchannel.queues.view.agents",{url:"/agents",templateUrl:"app/channels/openchannel/queue/view/view.agents.html",cache:!1,serie:!0,resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/jquery-multi-select/css/multi-select.css","assets/plugins/jquery-multi-select/js/jquery.multi-select.js","assets/plugins/jquery-quicksearch/jquery.quicksearch.js","assets/scripts/components-dropdowns.js"]})}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.openchannel.realtime",{url:"/realtime",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:49}}})}]),angular.module("xCallyShuttleApp").controller("OpenChannelRealtimeViewAgentCtrl",["$scope","$log","$uibModal","$translate","socket","xAlert","Agent","Pause","Action","OpenChannelQueue","usSpinnerService","$q","uiGridConstants",function(a,b,c,d,e,f,g,h,i,j,k,l,m){function n(){return k.spin("grid-spinner"),g.get(s).$promise.then(function(b){a.gridOptions.totalItems=b.count,a.gridOptions.data=[],b.rows.forEach(function(a){p(a)})})["catch"](function(a){f.error(a)})["finally"](function(){k.stop("grid-spinner")})}function o(){e.socket.on("agent:save",function(b){b=b.newValues||b;var c=_.find(a.gridOptions.data,{agentId:b.id,isAgent:!0});c&&(c.online=_.has(b,"online")?b.online:c.online,c.lastLoginAt=_.has(b,"lastLoginAt")?b.lastLoginAt:c.lastLoginAt,c.pause=_.has(b,"smsPause")?b.openchannelPause:c.openchannelPause,c.pauseType=_.has(b,"pauseType")?b.pauseType:c.pauseType,c.lastPauseAt=_.has(b,"lastPauseAt")?b.lastPauseAt:c.lastPauseAt,c.ipaddr=_.has(b,"ipaddr")?b.ipaddr:c.ipaddr,c.port=_.has(b,"port")?b.port:c.port,c.fullcontact=_.has(b,"fullcontact")?b.fullcontact:c.fullcontact,c.useragent=_.has(b,"useragent")?b.useragent:c.useragent,c.lastms=_.has(b,"lastms")?b.lastms:c.lastms,c.internal=_.has(b,"internal")?b.internal:c.internal,_.map(a.gridOptions.data,function(a){a.isAgent||a.agentId!==b.id||(a.online=_.has(b,"online")?b.online:a.online)}))}),e.socket.on("agent:remove",function(b){_.remove(a.gridOptions.data,{agentId:b.id})}),e.socket.on("user_has_openchannel_queue:save",function(b){console.log("new queue",b);var c=_.find(a.gridOptions.data,{agentId:b.UserId,isAgent:!0}),d=a.gridOptions.data.indexOf(c);a.gridOptions.data.splice(d+1,0,{isAgent:!1,agentId:b.UserId,queue:b.queue,queueId:b.OpenchannelQueueId,agent:b.membername,online:c.online})}),e.socket.on("user_has_openchannel_queue:remove",function(b){_.remove(a.gridOptions.data,{agentId:b.UserId,queueId:b.OpenchannelQueueId})})}function p(b){a.gridOptions.data.push({isAgent:!0,agentId:b.id,agent:b.name,online:b.online,lastLoginAt:b.lastLoginAt,lastPauseAt:b.lastPauseAt,pause:b.openchannelPause,pauseType:b.pauseType,ipaddr:b.ipaddr,port:b.port,fullcontact:b.fullcontact,useragent:b.useragent,lastms:b.lastms,internal:b.internal,$$treeLevel:0}),b.OpenchannelQueues.forEach(function(c){a.gridOptions.data.push({isAgent:!1,agentId:b.id,queue:c.name,queueId:c.id,agent:b.name,online:b.online})})}function q(){return h.get().$promise.then(function(b){a.pauses=b.rows,e.syncUpdates("pause",a.pauses)})["catch"](function(a){f.error(a)})}function r(){return j.get().$promise.then(function(b){a.openchannelQueues=b.rows,e.syncUpdates("openchannel_queue",a.openchannelQueues)})["catch"](function(a){f.error(a)})}a.openchannelQueues=[];var s={controller:"realtime",controller1:"openchannel",offset:0,limit:10};a.moment=moment,a.initAgents=function(){a.gridOptions={enableGridMenu:!0,headerCellFilter:"translate",enableHorizontalScrollbar:0,enableVerticalScrollbar:0,enableFiltering:!0,showGridFooter:!0,paginationPageSizes:[10,25,50,75],paginationPageSize:10,useExternalPagination:!0,useExternalSorting:!0,useExternalFiltering:!0,multiSelect:!0,showTreeExpandNoChildren:!0,columnDefs:[{name:"name",displayName:"APPLICATION_AGENT",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div data-ng-if="row.entity.isAgent">{{row.entity.agent}} <{{row.entity.internal}}></div>'},{name:"online",displayName:"APPLICATION_ONLINE",width:150,headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div data-ng-if="row.entity.online != null && row.entity.isAgent"><i class="fa" data-ng-class="{\'font-green\':row.entity.online, \'font-red\':!row.entity.online,\'fa-user\':row.entity.online,\'fa-user-times\':!row.entity.online}"></i> <span data-ng-if="row.entity.online" class="left-margin">(<css-timer start-time="row.entity.lastLoginAt"></css-timer>)</span></div>',filter:{type:m.filter.SELECT,selectOptions:[{value:"true",label:"ONLINE"},{value:"false",label:"OFFLINE"}]}},{name:"openchannelPause",displayName:"APPLICATION_PAUSE",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div data-ng-if="row.entity.pause != null && row.entity.online" class="ui-grid-vcenter" data-ng-class="{\'paused-agent\':row.entity.pause}"><i data-ng-if="row.entity.pause" data-ng-click="grid.appScope.pause(row.entity.agentId,\'unpause\')" class="fa fa-play font-green pointer-cursor left-margin" title="{{\'APPLICATION_RESUME\' | translate}}"></i><i class="fa fa-pause font-yellow pointer-cursor" data-ng-click="grid.appScope.pause(row.entity.agentId,\'pause\',\'DEFAULT PAUSE\')" title="{{\'APPLICATION_DEFAULT_PAUSE\' | translate}}"></i><select data-ng-if="grid.appScope.pauses.length" class="pause-select pointer-cursor" data-ng-model="grid.appScope.pauseType" data-ng-change="grid.appScope.pause(row.entity.agentId,\'pause\',grid.appScope.pauseType)"><option class="pointer-cursor" data-ng-repeat="pause in grid.appScope.pauses">{{pause.name}}</option></select> <span data-ng-if="row.entity.pause" class="left-margin">({{row.entity.pauseType}})</span><span class="left-margin"><css-timer data-ng-if="row.entity.pause" start-time="row.entity.lastPauseAt"></css-timer></span></div>',filter:{type:m.filter.SELECT,selectOptions:[{value:"true",label:"PAUSED"},{value:"false",label:"NOT PAUSED"}]},enableSorting:!1,enableColumnMenu:!1},{name:"queue",displayName:"APPLICATION_QUEUE",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1},{name:"action",displayName:"",width:170,cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div><button data-ng-if="row.entity.queueId" class="btn btn-xs red-sunglo" data-ng-click="grid.appScope.leaveQueue(row.entity.agentId,row.entity.queueId)"><i class="icon-ban"></i> {{\'APPLICATION_LEAVE\' | translate}}</button><button data-ng-if="row.entity.isAgent && row.treeNode.children.length < grid.appScope.openchannelQueues.length" class="btn btn-xs blue-hoki" data-ng-click="grid.appScope.joinQueue(row.entity.agentId)"><i class="icon-plus"></i> {{\'APPLICATION_JOIN_QUEUE\' | translate}}</button><div>',enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1}],data:[],gridMenuTitleFilter:function(a){var b=l.defer();return b.resolve(d.instant(a)),b.promise},onRegisterApi:function(b){a.gridApi=b,a.gridApi.grid.registerDataChangeCallback(function(){t(a.gridApi.core.getVisibleRows(a.gridApi.grid).length)}),a.gridApi.treeBase.on.rowExpanded(a,function(b){t(a.gridApi.core.getVisibleRows(a.gridApi.grid).length+b.treeNode.children.length)}),a.gridApi.treeBase.on.rowCollapsed(a,function(b){t(a.gridApi.core.getVisibleRows(a.gridApi.grid).length-b.treeNode.children.length)}),a.gridApi.core.on.sortChanged(a,function(a,b){0===b.length?s.order=null:s.order=b[0].name+" "+b[0].sort.direction.toUpperCase(),n()}),a.gridApi.pagination.on.paginationChanged(a,function(a,b){s.offset=(a-1)*b,s.limit=b,n()}),a.gridApi.core.on.filterChanged(a,function(){var a=this.grid;a.columns.forEach(function(a){a.filters[0].term?s[a.name]=a.filters[0].term:delete s[a.name]}),n()})}},n(),q(),r(),$timeout(function(){o()})};var t=function(a){var b=a?30*a+130:270;angular.element(document.getElementsByClassName("ui-grid")[0]).css("height",b+"px"),angular.element(document.getElementsByClassName("ui-grid-viewport")).css("height",30*a+"px")};a.$on("$destroy",function(){e.unsyncUpdates("agent"),e.unsyncUpdates("user_has_openchannel_queue")}),a.pause=function(b,c,e){return e&&(a.pauseType=null),i.save({name:c,agent:b,type:e||"DEFAULT PAUSE",data4:e||"DEFAULT PAUSE",channel:"openchannel"}).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){f.error(a)})},a.joinQueue=function(e){var g=c.open({animation:!0,templateUrl:"app/channels/openchannel/realtime/view/agent/queue.modal.add.html",controller:"OpenChannelRealtimeViewAgentQueueModalCtrl",resolve:{queues:function(){return _.reject(a.openchannelQueues,function(b){return!!_.find(a.gridOptions.data,{queue:b.name,isAgent:!1,agentId:e})})}}});g.result.then(function(b){return i.save({name:"QueueAdd",agent:e,queues:_.filter(a.openchannelQueues,function(a){return _.includes(b.queues,a.id)}),channel:"openchannel",data1:e,data3:b.queues.join(","),data4:"openchannel"}).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){f.error(a)})},function(){b.info("Modal dismissed at: "+new Date)})},a.leaveQueue=function(a,b){return i.save({name:"QueueRemove",agent:a,queueId:b,channel:"openchannel",data1:a,data3:b,data4:"openchannel"}).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){f.error(a)})},a.showInfo=function(a){c.open({animation:!0,templateUrl:"app/channels/openchannel/realtime/view/agent/agent.modal.info.html",controller:"OpenChannelRealtimeViewAgentInfoModalCtrl",resolve:{agent:a}})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.openchannel.realtime.view.agents",{url:"/agents",templateUrl:"app/channels/openchannel/realtime/view/agent/agent.html",controller:"OpenChannelRealtimeViewAgentCtrl"})}]),angular.module("xCallyShuttleApp").controller("OpenChannelRealtimeViewAgentInfoModalCtrl",["$scope","$uibModalInstance","$http","agent",function(a,b,c,d){a.agent=d,a.close=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("OpenChannelRealtimeViewAgentQueueModalCtrl",["$scope","$uibModalInstance","$http","queues",function(a,b,c,d){a.queues=d,a.item={},a.save=function(){b.close(a.item)},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("OpenChannelRealtimeViewApplicationCtrl",["$scope","$log","$uibModal","$translate","socket","xAlert","ReportOpenChannelSession","usSpinnerService","$q","uiGridConstants","$timeout",function(a,b,c,d,e,f,g,h,i,j,k){function l(){return h.spin("spinner-grid"),g.get({controller:"waiting",controller2:"applications"}).$promise.then(function(b){a.gridOptions.data=b.rows})["catch"](function(a){f.error(a)})["finally"](function(){m(),h.stop("spinner-grid")})}function m(){e.socket.on("report_openchannel_session:save",function(b){var c=_.find(a.gridOptions.data,{id:b.id});c?(_.merge(c,b),b.leaveAt&&k(function(){_.remove(a.gridOptions.data,{id:b.id})},1e4)):b.leaveAt||a.gridOptions.data.push(b)}),e.socket.on("report_openchannel_session:remove",function(b){_.remove(a.gridOptions.data,{id:b.id})})}a.moment=moment,a.initApplications=function(){a.gridOptions={headerCellFilter:"translate",enableHorizontalScrollbar:0,enableVerticalScrollbar:0,enableFiltering:!0,columnDefs:[{name:"uniqueid",displayName:"APPLICATION_UNIQUEID",headerCellFilter:"translate"},{name:"accountname",displayName:"APPLICATION_ACCOUNT",headerCellFilter:"translate"},{name:"application",displayName:"APPLICATION_APPLICATION",headerCellFilter:"translate"},{name:"status",displayName:"APPLICATION_STATUS",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div><span data-ng-if="!row.entity.leaveAt">{{\'APPLICATION_QUEUESTATUS_WAITING\' | translate}}</span><span data-ng-if="row.entity.leaveAt && row.entity.complete">{{\'APPLICATION_QUEUESTATUS_COMPLETE\' | translate}}</span><span data-ng-if="row.entity.leaveAt && row.entity.timeout">{{\'APPLICATION_TIMEOUT\' | translate}}</span> <span data-ng-if="!row.entity.leaveAt">[<css-timer start-time="row.entity.updatedAt"></css-timer>]</span></div>',enableSorting:!1,enableColumnMenu:!1,enableFiltering:!1},{name:"membername",displayName:"APPLICATION_AGENT",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{row.entity.membername || ''}}</span></div>"},{name:"queuename",displayName:"APPLICATION_QUEUE",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{row.entity.queuename || ''}}</span></div>"}],data:[],gridMenuTitleFilter:function(a){var b=i.defer();return b.resolve(d.instant(a)),b.promise},onRegisterApi:function(b){a.gridApi=b,a.gridApi.grid.registerDataChangeCallback(function(){n(a.gridOptions.data.length)})}},l()};var n=function(a){var b=a?30*a+60:270;angular.element(document.getElementsByClassName("ui-grid")[0]).css("height",b+"px"),angular.element(document.getElementsByClassName("ui-grid-viewport")).css("height",30*a+"px")};a.$on("$destroy",function(){e.unsyncUpdates("report_openchannel_session")})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.openchannel.realtime.view.applications",{url:"/applications",templateUrl:"app/channels/openchannel/realtime/view/application/application.html",controller:"OpenChannelRealtimeViewApplicationCtrl"})}]),angular.module("xCallyShuttleApp").controller("OpenChannelRealtimeViewCtrl",["$scope","$state",function(a,b){a.agents=[{name:"Queues",link:"main.channels.openchannel.realtime.view.agents.queues"},{name:"Timeline",link:"main.channels.openchannel.realtime.view.agents.timeline"}],a.sessions=[{name:"Sessions",link:"main.channels.openchannel.realtime.view.sessions"}],a.tree={queues:[{name:"Queues",link:"main.channels.openchannel.realtime.view.agents.queues"},{name:"Timeline",link:"main.channels.openchannel.realtime.view.agents.timeline"}],sessions:[{name:"Sessions",link:"main.channels.openchannel.realtime.view.sessions"}]}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.openchannel.realtime.view",{url:"/view",templateUrl:"app/channels/openchannel/realtime/view/view.html",controller:"OpenChannelRealtimeViewCtrl"})}]),angular.module("xCallyShuttleApp").factory("ReportOpenChannelSession",["$resource",function(a){return a("/api/report/openchannel/sessions/:id/:controller/:controller2",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.realtime",{url:"/realtime",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:12}}})}]),angular.module("xCallyShuttleApp").controller("RealtimeViewAgentCtrl",["$scope","$log","$uibModal","$translate","socket","xAlert","Agent","Pause","Action","usSpinnerService","$q","uiGridConstants","$timeout",function(a,b,c,d,e,f,g,h,i,j,k,l,m){function n(b){return j.spin("grid-spinner"),g.get(q).$promise.then(function(b){a.gridOptions.totalItems=b.count,a.gridOptions.data=b.rows})["catch"](function(a){f.error(a)})["finally"](function(){b&&m(function(){o()}),j.stop("grid-spinner")})}function o(){e.socket.on("agent:save",function(b){var c=_.find(a.gridOptions.data,{id:b.id});c&&_.merge(c,b)}),e.socket.on("agent:remove",function(b){_.remove(a.gridOptions.data,{id:b.id})})}function p(){return h.get().$promise.then(function(b){a.pauses=b.rows,e.syncUpdates("pause",a.pauses)})["catch"](function(a){f.error(a)})}var q={controller:"realtime",offset:0,limit:10};a.moment=moment,a.initAgents=function(){a.gridOptions={enableGridMenu:!0,headerCellFilter:"translate",enableHorizontalScrollbar:0,enableVerticalScrollbar:0,enableFiltering:!0,showGridFooter:!0,paginationPageSizes:[10,25,50,75],paginationPageSize:10,useExternalPagination:!0,useExternalSorting:!0,useExternalFiltering:!0,showTreeExpandNoChildren:!0,columnDefs:[{name:"name",displayName:"APPLICATION_AGENT",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{row.entity.name}} <{{row.entity.internal}}></div>"},{name:"online",displayName:"APPLICATION_ONLINE",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div data-ng-if="row.entity.online != null"><i class="fa" data-ng-class="{\'font-green\':row.entity.online, \'font-red\':!row.entity.online,\'fa-user\':row.entity.online,\'fa-user-times\':!row.entity.online}"></i> <span data-ng-if="row.entity.online" class="left-margin">(<css-timer start-time="row.entity.lastLoginAt"></css-timer>)</span></div>',filter:{type:l.filter.SELECT,selectOptions:[{value:"true",label:"ONLINE"},{value:"false",label:"OFFLINE"}]}},{name:"pauseStatus",displayName:"APPLICATION_PAUSE",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div><span class="left-margin"><i data-ng-if="row.entity.voicePause || row.entity.mailPause || row.entity.chatPause || row.entity.faxPause || row.entity.smsPause" data-ng-click="grid.appScope.pause(row.entity.id,\'unpause\',null,null)" class="fa fa-play font-green pointer-cursor" title="{{\'APPLICATION_RESUME\' | translate}}"></i> <i class="fa fa-pause font-yellow pointer-cursor" data-ng-click="grid.appScope.pause(row.entity.id,\'pause\',\'DEFAULT PAUSE\')" title="{{\'APPLICATION_DEFAULT_PAUSE\' | translate}}"></i></span><select data-ng-if="grid.appScope.pauses.length" class="pause-select pointer-cursor" data-ng-model="grid.appScope.pauseType" data-ng-change="grid.appScope.pause(row.entity.id,\'pause\',grid.appScope.pauseType)"><option class="pointer-cursor" data-ng-repeat="pause in grid.appScope.pauses">{{pause.name}}</option></select><span data-ng-if="row.entity.voicePause || row.entity.mailPause || row.entity.chatPause || row.entity.faxPause || row.entity.smsPause"> [{{row.entity.pauseType}}][<css-timer start-time="row.entity.lastPauseAt"></css-timer>]</span></div>'},{name:"voicePause",displayName:"APPLICATION_VOICE",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div data-ng-if="row.entity.online" data-ng-class="{\'paused-agent\':row.entity.voicePause}"><span class="left-margin"><i data-ng-if="row.entity.voicePause" data-ng-click="grid.appScope.pause(row.entity.id,\'unpause\',null,\'voice\')" class="fa fa-play font-green pointer-cursor" title="{{\'APPLICATION_RESUME\' | translate}}"></i></span></div>',filter:{type:l.filter.SELECT,selectOptions:[{value:"true",label:d.instant("APPLICATION_PAUSED")},{value:"connect",label:d.instant("APPLICATION_NOT_PAUSED")}]},enableSorting:!1,enableColumnMenu:!1},{name:"mailPause",displayName:"APPLICATION_MAIL",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div data-ng-if="row.entity.online" data-ng-class="{\'paused-agent\':row.entity.mailPause}"><span class="left-margin"><i data-ng-if="row.entity.mailPause" data-ng-click="grid.appScope.pause(row.entity.id,\'unpause\',null,\'mail\')" class="fa fa-play font-green pointer-cursor" title="{{\'APPLICATION_RESUME\' | translate}}"></i></span></div>',filter:{type:l.filter.SELECT,selectOptions:[{value:"true",label:d.instant("APPLICATION_PAUSED")},{value:"connect",label:d.instant("APPLICATION_NOT_PAUSED")}]},enableSorting:!1,enableColumnMenu:!1},{name:"chatPause",displayName:"APPLICATION_CHAT",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div data-ng-if="row.entity.online" data-ng-class="{\'paused-agent\':row.entity.chatPause}"><span class="left-margin"><i data-ng-if="row.entity.chatPause" data-ng-click="grid.appScope.pause(row.entity.id,\'unpause\',null,\'chat\')" class="fa fa-play font-green pointer-cursor" title="{{\'APPLICATION_RESUME\' | translate}}"></i></span></div>',filter:{type:l.filter.SELECT,selectOptions:[{value:"true",label:d.instant("APPLICATION_PAUSED")},{value:"connect",label:d.instant("APPLICATION_NOT_PAUSED")}]},enableSorting:!1,enableColumnMenu:!1},{name:"faxPause",displayName:"APPLICATION_FAX",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div data-ng-if="row.entity.online" data-ng-class="{\'paused-agent\':row.entity.faxPause}"><span class="left-margin"><i data-ng-if="row.entity.faxPause" data-ng-click="grid.appScope.pause(row.entity.id,\'unpause\',null,\'fax\')" class="fa fa-play font-green pointer-cursor" title="{{\'APPLICATION_RESUME\' | translate}}"></i></span></div>',filter:{type:l.filter.SELECT,selectOptions:[{value:"true",label:d.instant("APPLICATION_PAUSED")},{value:"connect",label:d.instant("APPLICATION_NOT_PAUSED")}]},enableSorting:!1,enableColumnMenu:!1},{name:"smsPause",displayName:"APPLICATION_SMS",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div data-ng-if="row.entity.online" data-ng-class="{\'paused-agent\':row.entity.smsPause}"><span class="left-margin"><i data-ng-if="row.entity.smsPause" data-ng-click="grid.appScope.pause(row.entity.id,\'unpause\',null,\'sms\')" class="fa fa-play font-green pointer-cursor" title="{{\'APPLICATION_RESUME\' | translate}}"></i></span></div>',filter:{type:l.filter.SELECT,selectOptions:[{value:"true",label:d.instant("APPLICATION_PAUSED")},{value:"connect",label:d.instant("APPLICATION_NOT_PAUSED")}]},enableSorting:!1,enableColumnMenu:!1}],data:[],gridMenuTitleFilter:function(a){var b=k.defer();return b.resolve(d.instant(a)),b.promise},onRegisterApi:function(b){a.gridApi=b,a.gridApi.grid.registerDataChangeCallback(function(){r(a.gridApi.core.getVisibleRows(a.gridApi.grid).length)}),a.gridApi.core.on.sortChanged(a,function(a,b){0===b.length?q.order=null:q.order=b[0].name+" "+b[0].sort.direction.toUpperCase(),n()}),a.gridApi.pagination.on.paginationChanged(a,function(a,b){q.offset=(a-1)*b,q.limit=b,n()}),a.gridApi.core.on.filterChanged(a,function(){var a=this.grid;a.columns.forEach(function(a){a.filters[0].term?q[a.name]=a.filters[0].term:delete q[a.name]}),n()})}},n(!0),p()};var r=function(a){var b=a?30*a+130:270;angular.element(document.getElementsByClassName("ui-grid")[0]).css("height",b+"px"),angular.element(document.getElementsByClassName("ui-grid-viewport")).css("height",30*a+"px")};a.$on("$destroy",function(){e.unsyncUpdates("agent")}),a.pause=function(b,c,e,g){return e&&(a.pauseType=null),i.save({name:c,agent:b,type:e||"DEFAULT PAUSE",data4:e||"DEFAULT PAUSE",channel:g||"all"}).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){f.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.realtime.view.agents",{url:"/agents",templateUrl:"app/channels/realtime/view/agent/agent.html",controller:"RealtimeViewAgentCtrl"})}]),angular.module("xCallyShuttleApp").controller("RealtimeViewAgentInfoModalCtrl",["$scope","$uibModalInstance","$http","agent",function(a,b,c,d){a.agent=d,a.close=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("RealtimeViewAgentQueueModalCtrl",["$scope","$uibModalInstance","$http","queues",function(a,b,c,d){a.queues=d,a.item={},a.save=function(){b.close(a.item)},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("RealtimeViewCtrl",["$scope",function(a){}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.realtime.view",{url:"/view",templateUrl:"app/channels/realtime/view/view.html",controller:"RealtimeViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]}])}]}})}]),angular.module("xCallyShuttleApp").factory("ReportCall",["$resource",function(a){return a("/api/report/calls/:id/:controller",{name:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("ReportDial",["$resource",function(a){return a("/api/report/dials/:id/:controller/:controller2",{name:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("SmsAccount",["$resource",function(a){return a("/api/sms/accounts/:accountId/:controller/:id",{id:"@accountId"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.sms.accounts",{url:"/accounts",template:"<div ui-view></div>",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:42}}})}]),angular.module("xCallyShuttleApp").controller("SmsAccountListCtrl",["$scope","SmsAccount","gridOptions","$stateParams","xAlert","$translate",function(a,b,c,d,e,f){a.message="Hello",a.initView=function(){var e={exporterCsvFilename:"sms_accounts.csv",columnDefs:[{name:"id",displayName:"ID",cellClass:"text-center",width:75,enableSorting:!1,enableFiltering:!1},{name:"name"},{name:"description"},{name:"type",displayName:"APPLICATION_ACCOUNT_TYPE"},{name:"action",width:100,buttons:[{"class":"blue-hoki",href:"/channels/sms/accounts/view/{{row.entity.id}}/settings",name:"profile"},{"class":"green-jungle",name:"check",onClick:"grid.appScope.checkAccount(row.entity.id)"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=c.gridOptions(b,e,a,{accountId:d.accountId})},a.checkAccount=function(a){return b.get({accountId:a,controller:"check"}).$promise.then(function(){e.show(f.instant("MESSAGE_ACCOUNT_VERIFIED"),"success")})["catch"](function(a){e.show(f.instant("MESSAGE_ACCOUNT_INVALID"),"danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.sms.accounts.list",{url:"/list",templateUrl:"app/channels/sms/account/list/list.html",controller:"SmsAccountListCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.sms.accounts.view.actions",{url:"/actions",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").factory("SmsApplication",["$resource",function(a){return a("/api/sms/applications/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("SmsAccountViewActionListCtrl",["$scope","gridOptions","SmsAccount","$http","$translate","$stateParams","xAlert",function(a,b,c,d,e,f,g){a.initActions=function(){var d={draggable:!0,exporterCsvFilename:"sms_applications.csv",enableSorting:!1,enableFiltering:!1,columnDefs:[{name:"app",cellClass:"text-center"},{name:"name",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div><span>{{row.entity.app == "queue" ? row.entity.SmsQueue.name : row.entity.User.name}}</span></div>'},{name:"timeout",cellClass:"text-center"},{name:"interval",displayName:"APPLICATION_TIME_INTERVAL",cellClass:"text-center",cellTemplate:"<div><span>{{row.entity.Interval ? row.entity.Interval.name : row.entity.interval}}</span></div>"},{name:"action",width:125,buttons:[{"class":"blue-hoki",href:"/channels/sms/accounts/view/{{row.entity.SmsAccountId}}/actions/view/{{row.entity.id}}",name:"profile"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.app, row.entity.id)"}]}]};a.gridOptions=b.gridOptions(c,d,a,{accountId:f.accountId,controller:"applications"})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.sms.accounts.view.actions.list",{url:"/list",templateUrl:"app/channels/sms/account/view/action/list/list.html",controller:"SmsAccountViewActionListCtrl"})}]),angular.module("xCallyShuttleApp").controller("SmsAccountViewActionViewCtrl",["$scope","$http","$stateParams","$translate","$location","xAlert","WizardHandler","socket","application","interval","Agent","Interval","SmsQueue","SmsAccount","Template","MailAccount","SmsApplication",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){a.isActive=!0,a.size="small",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.initAction=function(){return a.$application=i.application,a.$stateParams=c,a.$interval=j.interval,a.forms={},a.apps=[{name:"Queue",value:"queue"},{name:"Agent",value:"agent"},{name:"SendMail",value:"sendMail"},{name:"SendSMS",value:"sendSms"}],q.get({id:c.actionId}).$promise.then(function(b){if(a.application=b,a.application.alwaysTime=!1,a.application.IntervalId)a.application.intType="list";else switch(a.application.interval){case"*,*,*,*":a.application.intType="always"; -break;default:a.application.intType="custom"}if("always"===a.application.intType||"custom"===a.application.intType){var c=a.application.interval.split(",");"*"===c[0]?a.application.alwaysTime=!0:(a.application.t_from=moment(new Date),a.application.t_to=moment(new Date),a.application.t_from.hour(c[0].split("-")[0].split(":")[0]),a.application.t_from.minute(c[0].split("-")[0].split(":")[1]),a.application.t_to.hour(c[0].split("-")[1].split(":")[0]),a.application.t_to.minute(c[0].split("-")[1].split(":")[1])),"*"===c[1]?(a.application.wd_from="always",a.application.wd_to="always"):(a.application.wd_from=c[1].split("-")[0],a.application.wd_to=c[1].split("-")[1]),"*"===c[2]?(a.application.md_from="always",a.application.md_to="always"):(a.application.md_from=c[2].split("-")[0],a.application.md_to=c[2].split("-")[1]),"*"===c[3]?(a.application.m_from="always",a.application.m_to="always"):(a.application.m_from=c[3].split("-")[0],a.application.m_to=c[3].split("-")[1])}a.$watch("application.t_from",function(b){a.application.t_from_hm=moment(b).format("HH:mm")}),a.$watch("application.t_to",function(b){a.application.t_to_hm=moment(b).format("HH:mm")})})["catch"](function(a){f.error(a)})},a.getQueues=function(){return m.get().$promise.then(function(b){a.queues=b.rows})["catch"](function(a){console.error(a)})},a.getAgents=function(){return k.get().$promise.then(function(b){a.agents=b.rows})["catch"](function(a){console.error(a)})},a.getIntervals=function(){return l.get().$promise.then(function(b){a.intervals=b.rows})["catch"](function(a){console.error(a)})},a.getTemplates=function(){return o.get().$promise.then(function(b){a.templates=b.rows})["catch"](function(a){console.error(a)})},a.getMailAccounts=function(){return p.get().$promise.then(function(b){a.mailAccounts=b.rows})["catch"](function(a){console.error(a)})},a.getSmsAccounts=function(){return n.get().$promise.then(function(b){a.smsAccounts=b.rows})["catch"](function(a){console.error(a)})},a.updateItem=function(){switch(a.application.intType){case"always":a.application.interval="*,*,*,*",a.application.IntervalId=null;break;case"list":var b=_.find(a.intervals,{id:a.application.IntervalId});a.application.interval=b?"":"*,*,*,*",a.application.IntervalId=b?a.application.IntervalId:null;break;case"custom":var g,h,i,j,k;g=a.application.t_from&&a.application.t_to&&!a.application.alwaysTime?moment(a.application.t_from).format("HH:mm")+"-"+moment(a.application.t_to).format("HH:mm"):"*",a.application.wd_from&&"always"!==a.application.wd_from?(h=a.application.wd_from,a.application.wd_to&&"always"!==a.application.wd_to&&(h+="-"+a.application.wd_to)):h="*",a.application.md_from&&"always"!==a.application.md_from?(i=a.application.md_from,a.application.md_to&&"always"!==a.application.md_to&&(i+="-"+a.application.md_to)):i="*",a.application.m_from&&"always"!==a.application.m_from?(j=a.application.m_from,a.application.m_to&&"always"!==a.application.m_to&&(j+="-"+a.application.m_to)):j="*",k=g+","+h+","+i+","+j,a.application.interval=k,a.application.IntervalId=null}return n.update({accountId:c.accountId,controller:"applications",id:c.actionId},a.application).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success"),e.path("/channels/sms/accounts/view/"+c.accountId+"/actions/list")})["catch"](function(a){f.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.sms.accounts.view.actions.view",{url:"/view/:actionId",templateUrl:"app/channels/sms/account/view/action/view/view.html",controller:"SmsAccountViewActionViewCtrl"})}]),angular.module("xCallyShuttleApp").controller("SmsAccountViewActionWizardCtrl",["$scope","$http","Agent","SmsQueue","Interval","$stateParams","$translate","$location","xAlert","WizardHandler","socket","application","interval","SmsAccount","Template","MailAccount",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){a.isActive=!0,a.size="small",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.initWizard=function(){a.apps=[{name:"Queue",value:"queue"},{name:"Agent",value:"agent"},{name:"SendMail",value:"sendMail"},{name:"SendSMS",value:"sendSms"}],a.$application=l.application,a.$stateParams=f,a.$interval=m.interval,a.forms={},a.application={alwaysTime:!0},a.$watch("application.t_from",function(b){a.application.t_from_hm=moment(b).format("HH:mm")}),a.$watch("application.t_to",function(b){a.application.t_to_hm=moment(b).format("HH:mm")})},a.getQueues=function(){return d.get().$promise.then(function(b){console.log(b),a.queues=b.rows})["catch"](function(a){console.error(a)})},a.getAgents=function(){return c.get().$promise.then(function(b){a.agents=b.rows})["catch"](function(a){console.error(a)})},a.getIntervals=function(){return e.get().$promise.then(function(b){a.intervals=b.rows})["catch"](function(a){console.error(a)})},a.getTemplates=function(){return o.get().$promise.then(function(b){a.templates=b.rows})["catch"](function(a){console.error(a)})},a.getMailAccounts=function(){return p.get().$promise.then(function(b){a.mailAccounts=b.rows})["catch"](function(a){console.error(a)})},a.getSmsAccounts=function(){return n.get().$promise.then(function(b){a.smsAccounts=b.rows})["catch"](function(a){console.error(a)})},a.createItem=function(){switch(a.application.intType){case"always":a.application.interval="*,*,*,*",a.application.IntervalId=null;break;case"list":var b=_.find(a.intervals,{id:a.application.IntervalId});a.application.interval=b?"":"*,*,*,*",a.application.IntervalId=b?a.application.IntervalId:null;break;case"custom":var c,d,e,j,k;c=a.application.t_from&&a.application.t_to&&!a.application.alwaysTime?moment(a.application.t_from).format("HH:mm")+"-"+moment(a.application.t_to).format("HH:mm"):"*",a.application.wd_from&&"always"!==a.application.wd_from?(d=a.application.wd_from,a.application.wd_to&&"always"!==a.application.wd_to&&(d+="-"+a.application.wd_to)):d="*",a.application.md_from&&"always"!==a.application.md_from?(e=a.application.md_from,a.application.md_to&&"always"!==a.application.md_to&&(e+="-"+a.application.md_to)):e="*",a.application.m_from&&"always"!==a.application.m_from?(j=a.application.m_from,a.application.m_to&&"always"!==a.application.m_to&&(j+="-"+a.application.m_to)):j="*",k=c+","+d+","+e+","+j,a.application.interval=k,a.application.IntervalId=null}return n.save({accountId:f.accountId,controller:"applications"},a.application).$promise.then(function(){i.show(g.instant("MESSAGE_WELL_DONE"),"success"),h.path("/channels/sms/accounts/view/"+f.accountId+"/actions/list")})["catch"](function(a){i.error(a)})},a.formValidation=function(a){return a},a.next=function(){j.wizard().next()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.sms.accounts.view.actions.wizard",{url:"/wizard",templateUrl:"app/channels/sms/account/view/action/wizard/wizard.html",controller:"SmsAccountViewActionWizardCtrl"})}]),angular.module("xCallyShuttleApp").controller("SmsAccountApiViewCtrl",["$scope","SmsAccount","$http","$stateParams","clipboard","$translate","$location","xAlert",function(a,b,c,d,e,f,g,h){a.copyToClipboard=function(a){e.copyText(a),h.show(f.instant("MESSAGE_TEXT_COPIED_CLIPBOARD")+"!","success")},a.initView=function(){b.get({id:d.accountId}).$promise.then(function(b){a.account=b,a.deliveryurl=a.account.remote+"/api/sms/accounts/"+a.account.id+"/messageStatus",a.receiveurl=a.account.remote+"/api/sms/accounts/"+a.account.id+"/receive"})["catch"](function(a){h.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.sms.accounts.view.api",{url:"/api",controller:"SmsAccountApiViewCtrl",templateUrl:"app/channels/sms/account/view/api/view/view.html"})}]),angular.module("xCallyShuttleApp").factory("SmsDisposition",["$resource",function(a){return a("/api/sms/dispositions/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("SmsInboxViewModaDispositionAddCtrl",["$scope","$uibModalInstance","SmsAccount","id",function(a,b,c,d){a.ok=function(){return c.save({accountId:d,controller:"dispositions"},{name:a.name}).$promise.then(function(a){b.close(a)})},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("SmsAccountDispositionViewCtrl",["$scope","$stateParams","$uibModal","$translate","SmsAccount","xAlert",function(a,b,c,d,e,f){a.initView=function(){return e.get({accountId:b.accountId,controller:"dispositions"}).$promise.then(function(b){a.dispositions=b.rows})["catch"](function(a){console.error(a),f.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},a.updateDisposition=function(a,c){return e.update({accountId:b.accountId,controller:"dispositions",id:a},{name:c}).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE")+"!","success")})["catch"](function(a){console.error(a),f.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},a.deleteDisposition=function(c){return console.log("delete"),e.remove({accountId:b.accountId,controller:"dispositions",id:c}).$promise.then(function(){_.remove(a.dispositions,{id:c})})["catch"](function(a){console.error(a),f.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},a.addDisposition=function(){return c.open({animation:!0,templateUrl:"app/channels/sms/account/view/disposition/modal/add.modal.html",controller:"SmsInboxViewModaDispositionAddCtrl",resolve:{id:function(){return b.accountId}}}).result.then(function(b){b&&a.dispositions.push(b)})["catch"](function(a){console.error(a),f.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.sms.accounts.view.dispositions",{url:"/dispositions",controller:"SmsAccountDispositionViewCtrl",templateUrl:"app/channels/sms/account/view/disposition/view/view.html"})}]),angular.module("xCallyShuttleApp").controller("SmsAccountHooksViewCtrl",["$scope","SmsAccount","Pause","$http","$stateParams","clipboard","$translate","$location","xAlert",function(a,b,c,d,e,f,g,h,i){a.account={},a.isActive=!0,a.size="small",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.CONST_TIMEOUT=3e4,a.initView=function(){a.types=[{value:"",name:"-- None --"},{name:"HTTP GET",value:"GET"},{name:"HTTP POST",value:"POST"}],c.get().$promise.then(function(b){a.pauses=b.rows})["catch"](function(a){i.error(a)}),b.get({id:e.accountId}).$promise.then(function(b){a.account=b,a.account.actions.length<1&&a.account.actions.push({action:"pause",enabled:!1,type:null})})["catch"](function(a){i.error(a)})},a.resetActionData=function(a){a.type=null},a.updateItemSmsAccount=function(){return console.log(a.account),b.update({id:e.accountId},a.account).$promise.then(function(){i.show(g.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){i.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.sms.accounts.view.hooks",{url:"/hooks",controller:"SmsAccountHooksViewCtrl",templateUrl:"app/channels/sms/account/view/hooks/view/view.html"})}]),angular.module("xCallyShuttleApp").controller("SmsAccountSettingViewCtrl",["$scope","SmsAccount","Pause","$http","$stateParams","clipboard","$translate","$location","xAlert","List",function(a,b,c,d,e,f,g,h,i,j){a.isActive=!0,a.size="small",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.CONST_TIMEOUT=3e4,a.types=[{name:"HTTP GET",value:"GET"},{name:"HTTP POST",value:"POST"}],a.account={},a.initView=function(){j.get().$promise.then(function(b){a.lists=b.rows})["catch"](function(a){console.error(a)}),b.get({id:e.accountId}).$promise.then(function(b){a.account=b})["catch"](function(a){i.error(a)})},a.updateItemSmsAccount=function(){return b.update({id:e.accountId},a.account).$promise.then(function(){i.show(g.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){i.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.sms.accounts.view.settings",{url:"/settings",controller:"SmsAccountSettingViewCtrl",templateUrl:"app/channels/sms/account/view/setting/view/view.html"})}]),angular.module("xCallyShuttleApp").controller("SmsAccountViewCtrl",["$scope","SmsAccount","$http","$stateParams","clipboard","$translate","$location","xAlert","List",function(a,b,c,d,e,f,g,h,i){a.initView=function(){return a.account={},b.get({id:d.accountId}).$promise.then(function(b){a.account=b,console.log(b)})["catch"](function(a){h.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.sms.accounts.view",{url:"/view/:accountId",templateUrl:"app/channels/sms/account/view/view.html",controller:"SmsAccountViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]})}]}})}]),angular.module("xCallyShuttleApp").controller("SmsAccountWizardCtrl",["$scope","$http","$location","$translate","WizardHandler","xAlert","SmsAccount",function(a,b,c,d,e,f,g){a.isActive=!0,a.size="small",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.initWizard=function(){a.forms={},a.item={},a.item.remote=c.protocol()+"://"+location.host},a.goNext=function(){e.wizard().next()},a.formValidation=function(a){return a},a.createItem=function(){return console.log(a.item),g.save(a.item).$promise.then(function(){c.path("/channels/sms/accounts/list")})["catch"](function(a){f.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.sms.accounts.wizard",{url:"/wizard",templateUrl:"app/channels/sms/account/wizard/wizard.html",controller:"SmsAccountWizardCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.sms.inbox",{url:"/inbox",template:"<div ui-view></div>",data:{permissions:{only:["admin","user","agent"],redirectTo:"landing",id:44}}})}]),angular.module("xCallyShuttleApp").directive("smsRoom",["$cookieStore","$translate","$uibModal","$timeout","Tag","CannedAnswer","Auth","SmsAccount","SmsRoom","SmsMessage","xAlert","usSpinnerService","socket","$stateParams","$rootScope",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){return{restrict:"E",scope:{workspace:"=",index:"=",submit:"&onSubmit"},templateUrl:"app/channels/sms/inbox/room/room.directive.html",link:function(a){a.modelOptions={debounce:{"default":500,blur:250},getterSetter:!0},a.panelLeft=null,a.panelRight="col-md-12",a.togglePanelLeft=function(){a.panelLeft?(a.panelLeft=null,a.panelRight="col-md-12"):(a.panelLeft="col-md-6",a.panelRight="col-md-6")},a.form={disabled:!1,from:"",to:a.workspace.data&&a.workspace.data.to?a.workspace.data.to:"",body:""},m.socket.on("sms_message:save",function(b){return a.workspace.id&&b.SmsRoomId==a.workspace.id?j.get({id:b.id}).$promise.then(function(b){a.SmsRoom||(a.SmsRoom={SmsMessages:[]});var c=_.findIndex(a.SmsRoom.SmsMessages,{id:b.id});c>-1?_.merge(a.SmsRoom.SmsMessages[c],b):a.SmsRoom.SmsMessages.unshift(b),a.panelLeft="col-md-6",a.panelRight="col-md-6"})["catch"](function(a){console.error(a)}):void 0}),m.socket.on("sms_message:update",function(b){if(a.SmsRoom&&b.SmsRoomId==a.workspace.id){var c=_.find(a.SmsRoom.SmsMessages,{id:b.id});c&&_.merge(c,b)}}),m.socket.on("sms_room:save",function(b){a.SmsRoom&&b.id==a.workspace.id&&(a.SmsRoom.status=b.status,a.SmsRoom.disposition=b.disposition)}),a.closeRoom=function(b){return c.open({animation:!0,templateUrl:"app/channels/sms/inbox/view/view.status.modal.html",controller:"SmsInboxViewModalStatusCtrl",resolve:{closed:function(){return"CLOSED"===a.SmsRoom.status},accountId:function(){return a.SmsRoom.SmsAccountId}}}).result.then(function(a){var c={id:b,status:"CLOSED"};return a.disposition&&(c.disposition=a.disposition),i.update(c).$promise["catch"](function(a){k.error(a)})})},a.openRoom=function(a,b){var c=_.find(o.workspaces,{id:a,type:"smsRoom"});c?c.active=!0:o.workspaces.push({id:a,name:b,type:"smsRoom","class":"glyphicon glyphicon-comment",active:!0})},e.get().$promise.then(function(b){a.tags=_.map(b.rows,"name")})["catch"](function(a){console.error(a)}),h.get().$promise.then(function(b){a.smsAccounts=b.rows})["catch"](function(a){console.error(a)}),a.workspace.id?(a.panelLeft="col-md-6",a.panelRight="col-md-6",i.get({id:a.workspace.id}).$promise.then(function(b){a.SmsRoom=b,a.form.from=a.SmsRoom.SmsAccount.phone,a.form.to=a.SmsRoom.contact,a.form.tags=a.SmsRoom.tags})["catch"](function(a){console.error(a)})["finally"](function(){l.stop("spinner-grid"),a.form.disabled=!1})):l.stop("spinner-grid"),a.onSelect=function(){a.form.body+=a.modelOptions.selectedAnswer,delete a.modelOptions.selectedAnswer},a.onSelectAnswer=function(b){a.form.body+=b,a.selectedAnswer=""},a.getAnswers=function(a){return f.get({key:a}).$promise.then(function(a){return _.map(a.rows,"value")})},a.onChanged=function(){return i.patch({id:a.workspace.id},{tags:a.form.tags}).$promise["catch"](function(a){console.error(a)})},a.sendSMS=function(){l.spin("spinner-grid");var c=_.find(a.smsAccounts,{phone:a.form.from}),d={body:a.form.body,SmsRoomId:a.SmsRoom?a.SmsRoom.id:null};return"twilio"===c.type?(d.from=/^[\+][0-9]+$/.test(a.form.from)?a.form.from:"+"+a.form.from,d.to=/^[\+][0-9]+$/.test(a.form.to)?a.form.to:"+"+a.form.to):(d.from=/^[\+][0-9]+$/.test(a.form.from)?a.form.from.replace("+",""):a.form.from,d.to=/^[\+][0-9]+$/.test(a.form.to)?a.form.to.replace("+",""):a.form.to),c?h.save({accountId:c.id,controller:"send"},d).$promise.then(function(c){return k.show(b.instant("MESSAGE_WELL_DONE"),"success"),a.SmsRoom?a.SmsRoom:i.get({id:"messages",controller:c.id}).$promise}).then(function(b){b&&(a.form.body="",a.workspace.id=b.id,a.workspace.name=b.contact,a.SmsRoom=b,a.panelLeft="col-md-6",a.panelRight="col-md-6")})["catch"](function(a){k.error(a)})["finally"](function(){l.stop("spinner-grid")}):void console.log("Can not find account")}}}}]),angular.module("xCallyShuttleApp").controller("SmsInboxInfoModalCtrl",["$scope","$translate","$uibModalInstance","$stateParams","xAlert","data","uniqueId","ReportSquare",function(a,b,c,d,e,f,g,h){a.data=null,a.initInfo=function(){f&&(a.data=_.isEmpty(JSON.parse(f))?null:JSON.parse(f)),g&&h.get({controller:"show",uniqueid:g}).$promise.then(function(b){a.data={id:b.id,channel:b.channel,uniqueid:b.uniqueid,callerid:b.callerid,calleridname:b.calleridname,project_name:b.project_name,extension:b.extension}})["catch"](function(b){switch(b.status){case 404:a.data=null;break;default:e.error(b)}})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").directive("sms",["$rootScope","SmsMessage","List","xAlert","$translate","$uibModal",function(a,b,c,d,e,f){return{restrict:"E",scope:{smsMessage:"=message",accounttype:"=accounttype",listId:"="},templateUrl:"app/channels/sms/inbox/sms/sms.html",link:function(b){b.openContact=function(f){return b.listId?c.save({listId:b.listId,controller:"contacts"},{mobile:f}).$promise.then(function(b){var c=_.find(a.$root.workspaces,{contactID:b.id});c?c.active=!0:a.$root.workspaces.push({active:!0,"class":"icon-user",contactID:b.id,name:b.phone,type:"contact"})})["catch"](function(a){console.error(a)}):void d.show(e.instant("MESSAGE_NO_LIST_CONFIGURED"),"info")},b.info=function(a,b){f.open({animation:!0,templateUrl:"app/channels/sms/inbox/sms/info.modal.html",controller:"SmsInboxInfoModalCtrl",resolve:{data:function(){return b},uniqueId:function(){return a}}})}}}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.sms.inbox.view.account",{url:"/account/:id",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user","agent"],redirectTo:"landing",id:11}}})}]),angular.module("xCallyShuttleApp").controller("SmsInboxViewAccountListCtrl",["$scope","$rootScope","$uibModal","$translate","$stateParams","$state","Tag","usSpinnerService","socket","SmsAccount","SmsRoom","gridOptions","uiGridConstants","Auth","Modal","xAlert","uibButtonConfig","localStorageService",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r){a.initView=function(){q.activeClass="green-haze",a.id=[],a.isAdmin=n.isAdmin(),a.isAgent=n.isAgent(),a.uncheckable=!1,a.query={status:r.get("smsStatus")?r.get("smsStatus"):"NEW",tags:r.get("smsTags")?r.get("smsTags"):[]},a.$watch("query.status",function(){r.set("smsStatus",a.query.status),a.getPage()},!0),g.get().$promise.then(function(b){a.tags=_.map(b.rows,"name")})["catch"](function(a){console.error(a)}),a.gridOptions={exporterCsvFilename:"sms_rooms.csv",enableRowHeaderSelection:!0,paginationPageSizes:[10,25,50,75],paginationPageSize:10,enableFiltering:!0,enableSorting:!0,enableGridMenu:!1,flatEntityAccess:!0,showGridFooter:!0,fastWatch:!0,enableSelectAll:!0,enableHorizontalScrollbar:0,enableVerticalScrollbar:0,columnDefs:[{name:"lastEvent",displayName:"",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div> <span data-ng-class=\"{'icon-arrow-up font-green': row.entity.lastEvent === 'SENT', 'icon-arrow-up font-yellow': row.entity.lastEvent === 'SENDING', 'icon-arrow-down font-green': row.entity.lastEvent === 'RECEIVED', 'icon-close font-red': row.entity.lastEvent === 'FAILED', 'icon-question': !row.entity.lastEvent}\"> </span> </div>",width:30,enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1},{name:"tags",displayName:"",headerCellTemplate:'<i class="icon-tag" style="margin-top: 8px; margin-left: 8px;"></i>',cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div><i data-ng-class=\"row.entity.tags.length ? 'icon-tag' : ''\" title=\"{{row.entity.tags}}\"></i></div>",width:30,enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1},{name:"id",displayName:"Id",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div><span>#{{row.entity.id}}</span></div>",width:75,enableSorting:!1,enableFiltering:!0,enableColumnMenu:!1},{name:"contact",cellClass:"text-center"},{name:"disposition",cellClass:"text-center"},{name:"updatedAt",cellFilter:"date:'MM/dd/yyyy HH:mm'",width:120,enableSorting:!1,enableFiltering:!1,sort:{direction:m.DESC}},{name:"action",cellTemplate:'<div> <a class="btn btn-icon-only font-green" data-ng-click="grid.appScope.openRoom(row.entity.id, row.entity.contact)"><i class="glyphicon glyphicon-comment" aria-hidden="true"></i></a> <a class="btn btn-icon-only font-red" data-ng-show="grid.appScope.isAdmin" data-ng-click="grid.appScope.deleteItem(row.entity.id,row.entity.id)"><i class="fa fa-trash" aria-hidden="true"></i> </div>',enableSorting:!1,cellClass:"ui-grid-vcenter",width:90,enableFiltering:!1,enableColumnMenu:!1}],data:[],onRegisterApi:function(b){a.gridApi=b,a.gridApi.selection&&(a.gridApi.selection.on.rowSelectionChanged(a,function(b){b.isSelected?a.id.push(a.gridApi.grid.options.primaryKey?b.entity[a.gridApi.grid.options.primaryKey]:b.entity.id):_.pull(a.id,a.gridApi.grid.options.primaryKey?b.entity[a.gridApi.grid.options.primaryKey]:b.entity.id)}),a.gridApi.selection.on.rowSelectionChangedBatch(a,function(b){b[0].isSelected?a.id=_.union(a.id,_.map(b,a.gridApi.grid.options.primaryKey?"entity."+a.gridApi.grid.options.primaryKey:"entity.id")):_.map(b,a.gridApi.grid.options.primaryKey?"entity."+a.gridApi.grid.options.primaryKey:"entity.id").forEach(function(b){_.pull(a.id,b)})}))}},i.socket.on("sms_room:remove",function(b){_.remove(a.workspaces,{id:b.id,type:"smsRoom"}),_.remove(a.gridOptions.data,{id:b.id})}),a.getPage(a.query)},a.onChanged=function(){a.getPage(a.query)},a.tagItems=function(){return c.open({animation:!0,templateUrl:"app/channels/sms/inbox/view/view.tags.modal.html",controller:"SmsInboxViewModalTagCtrl",resolve:{id:function(){return a.id}}}).result.then(function(){a.gridApi.selection.clearSelectedRows(),a.id=[],a.getPage()})},a.disposeItems=function(){return c.open({animation:!0,templateUrl:"app/channels/sms/inbox/view/view.status.modal.html",controller:"SmsInboxViewModalStatusCtrl",resolve:{accountId:function(){return e.id}}}).result.then(function(b){return console.log(b,a.id),k.patch({id:a.id},b).$promise.then(function(){a.gridApi.selection.clearSelectedRows(),a.id=[]})["catch"](function(a){p.error(a)})})},a.openRoom=function(b,c){var d=_.find(a.workspaces,{id:b,type:"smsRoom"});return d?d.active=!0:a.workspaces.push({id:b,name:c,type:"smsRoom","class":"glyphicon glyphicon-comment",active:!0}),b&&"agent"===n.getCurrentUser().role&&"PENDING"!==a.query.status&&"CLOSED"!==a.query.status?k.patch({id:b},{status:"OPEN",openReason:"agent"}).$promise["catch"](function(a){console.error(a)}):void 0},a.getPage=function(b){h.spin("spinner-grid");var c={accountId:e.id,controller:"rooms"};return b&&_.merge(c,b),a.query&&_.merge(c,a.query),j.query(c).$promise.then(function(b){r.set("smsAccountId",e.id),a.gridOptions.data=b,i.socket.on("sms_room:save",function(b){if(console.log("data",b),console.log(b.SmsAccountId,e.id),b.SmsAccountId==e.id){var c=_.find(a.gridOptions.data,{id:b.id});c?c.status!==b.status?_.remove(a.gridOptions.data,{id:b.id}):_.merge(c,b):a.query.status===b.status&&a.gridOptions.data.push(b)}}),i.socket.on("sms_room:remove",function(b){_.remove(a.gridOptions.data,{id:b.id})})})["catch"](function(a){console.error(a)})["finally"](function(){h.stop("spinner-grid")})},a.deleteItem=o.confirm["delete"](function(b){var c={id:b};return console.log(c),k["delete"](c).$promise.then(function(){a.getPage(),p.show(d.instant("MESSAGE_WELL_DONE")+"!","success"),a.gridApi.selection.clearSelectedRows(),a.id=[]})["catch"](function(a){p.error(a)})}),a.deleteItems=o.confirm["delete"](function(){var b={ids:a.id};return k["delete"](b).$promise.then(function(){a.getPage(),p.show(d.instant("MESSAGE_WELL_DONE")+"!","success"),a.gridApi.selection.clearSelectedRows(),a.id=[]})["catch"](function(a){p.error(a)})})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.sms.inbox.view.account.list",{url:"/list",templateUrl:"app/channels/sms/inbox/view/account/list/list.html",controller:"SmsInboxViewAccountListCtrl",data:{permissions:{only:["admin","user","agent"],redirectTo:"landing",id:11}}})}]),angular.module("xCallyShuttleApp").controller("SmsInboxViewModalAgentCtrl",["$scope","$uibModalInstance","$translate","$stateParams","Agent","SmsRoom","xAlert","roomId",function(a,b,c,d,e,f,g,h){a.initModal=function(){a.agents=[],a.item={agents:[]},e.get().$promise.then(function(b){b.rows.forEach(function(b){a.agents.push(b)})})["catch"](function(a){console.error(a)}),f.query({id:h,controller:"agents"}).$promise.then(function(b){b.forEach(function(b){a.agents.push(b),a.item.agents.push(b.id)})})["catch"](function(a){console.error(a)}),a.modal={dismissable:!0,title:"APPLICATION_MESSAGE_SEND_RETRY",text:"MESSAGE_MESSAGE_SEND_RETRY",buttons:[{classes:"btn btn-success",text:"APPLICATION_RETRY",click:function(a){b.close(a)}},{classes:"btn default",text:"APPLICATION_CANCEL",click:function(a){b.dismiss(a)}}]}},a.ok=function(){return f.update({id:h,controller:"agents",agents:a.item.agents}).$promise.then(function(){g.show(c.instant("MESSAGE_WELL_DONE"),"success"),b.close()})["catch"](function(a){console.error(a)})},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("SmsInboxViewCtrl",["$scope","$location","$stateParams","$translate","$uibModal","socket","Auth","xAlert","SmsRoom","SmsAccount","localStorageService",function(a,b,c,d,e,f,g,h,i,j,k){a.initView=function(){return j.get().$promise.then(function(c){var d=null;a.smsAccounts=c.rows,a.smsAccounts.length&&(d="/channels/sms/inbox/view/account/"+(k.get("smsAccountId")||a.smsAccounts[0].id)+"/list"),d&&b.path(d)})["catch"](function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.sms.inbox.view",{url:"/view",templateUrl:"app/channels/sms/inbox/view/view.html",controller:"SmsInboxViewCtrl",reload:!0,resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/inbox.css"]}])}]}})}]),angular.module("xCallyShuttleApp").controller("SmsInboxViewModalStatusCtrl",["$scope","$uibModalInstance","SmsAccount","accountId",function(a,b,c,d){a.modal={title:"APPLICATION_CONFIRM_CLOSE",text:"MESSAGE_ARE_YOU_SURE_YOU_WANT_TO_CLOSE_THE_SMS"},a.initDisposition=function(){return a.item={status:"CLOSED"},c.get({accountId:d,controller:"dispositions"}).$promise.then(function(b){a.dispositions=b.rows})["catch"](function(a){console.error(a)})},a.ok=function(){b.close(a.item)},a.cancel=function(){b.dismiss()}}]),angular.module("xCallyShuttleApp").controller("SmsInboxViewModalTagCtrl",["$scope","$uibModalInstance","$translate","$stateParams","Tag","SmsRoom","xAlert","id",function(a,b,c,d,e,f,g,h){console.log(h),a.initModal=function(){return a.tags=[],a.item={tags:[]},a.modal={dismissable:!0,title:"APPLICATION_MESSAGE_SEND_RETRY",text:"MESSAGE_MESSAGE_SEND_RETRY",buttons:[{"class":"btn-success",text:"APPLICATION_TAG",click:function(){var d={status:!0};return f.patch({id:h},{tags:a.item.tags}).$promise.then(function(){g.show(c.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(){d.status=!1,g.show(c.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})["finally"](function(){b.close(d)})}},{"class":"default",text:"APPLICATION_CANCEL",click:function(a){b.dismiss(a)}}]},e.get().$promise.then(function(b){a.tags=_.map(b.rows,"name")})["catch"](function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").controller("SmsInboxViewModalTemplateCtrl",["$scope","$uibModalInstance","Template",function(a,b,c){a.initModal=function(){return a.item={},c.get().$promise.then(function(b){a.templates=b.rows})["catch"](function(a){console.error(a)})},a.ok=function(){b.close(a.item)},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("SmsQueueListCtrl",["$scope","SmsQueue","gridOptions","$uibModal","xAlert","Auth",function(a,b,c,d,e,f){a.initView=function(){a.Auth=f;var d={exporterCsvFilename:"voice_queues.csv",columnDefs:[{name:"name"},{name:"description"},{name:"timeout"},{name:"strategy"},{name:"action",width:100,buttons:[{"class":"blue-hoki",href:"/channels/sms/queues/view/{{row.entity.id}}/settings",name:"settings"},{"class":"green-meadow",href:"/channels/sms/queues/view/{{row.entity.id}}/agents",name:"agents",hide:"user"===f.getCurrentUser().role},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=c.gridOptions(b,d,a)},a.createItem=function(){var b=d.open({animation:!0,templateUrl:"app/channels/sms/queue/list/list.create.modal.html",controller:"SmsQueueListCreateCtrl",size:"lg"});b.result.then(function(b){console.log(b),a.gridOptions.getPage()})}}]),angular.module("xCallyShuttleApp").controller("SmsQueueListCreateCtrl",["$scope","$uibModalInstance","$translate","xAlert","SmsQueue","Team","strategies",function(a,b,c,d,e,f,g){a.form={},a.strategies=g,a.item={penalty:0,agents:[]},a.getTeams=function(){return f.get({controller:"associations"}).$promise.then(function(b){a.teams=b.rows}).then(function(){ComponentsDropdowns.bindQueue(a.teams,[],function(){return{select:function(b){a.item.agents=_.union(a.item.agents,b)},deselect:function(b){a.item.agents=_.difference(a.item.agents,b)}}})})["catch"](function(a){console.error(a)})},a.save=function(){return console.log(a.item),e.save(a.item).$promise.then(function(a){b.close(a)})["catch"](function(a){d.error(a)})},a.cancel=function(){b.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.sms.queues.list",{url:"/list",templateUrl:"app/channels/sms/queue/list/list.html",controller:"SmsQueueListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load({ -insertBefore:"#ng_load_plugins_before",files:["assets/plugins/jquery-multi-select/css/multi-select.css","assets/plugins/jquery-multi-select/js/jquery.multi-select.js","assets/plugins/jquery-quicksearch/jquery.quicksearch.js","assets/scripts/components-dropdowns.js"]})}]}})}]),angular.module("xCallyShuttleApp").factory("SmsQueue",["$resource",function(a){return a("/api/sms/queues/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.sms.queues",{url:"/queues",template:"<div ui-view></div>",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:43}}})}]),angular.module("xCallyShuttleApp").controller("SmsQueueViewCtrl",["$scope","$http","Auth","$translate","$stateParams","xAlert","Team","SmsQueue","strategies",function(a,b,c,d,e,f,g,h,i){a.strategies=i,a.Auth=c;var j=function(){return{select:function(b){return h.save({id:a.queue.id,controller:"agents"},{agents:b,penalty:a.queue.penalty}).$promise.then(function(b){console.log("sel",b),a.getTeams()})["catch"](function(a){console.error(a)})},deselect:function(b){return h["delete"]({id:a.queue.id,controller:"agents",agents:b}).$promise.then(function(b){console.log("desel",b),a.getTeams()})["catch"](function(a){console.error(a)})}}};a.getQueue=function(){return h.get({id:e.id}).$promise.then(function(b){b.penalty=0,a.queue=b})["catch"](function(a){console.error(a)})},a.updateSmsQueue=function(){return h.update({id:e.id},{name:a.queue.name,description:a.queue.description,timeout:a.queue.timeout,strategy:a.queue.strategy}).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){f.error(a)})},a.getTeams=function(){return g.get({controller:"associations"}).$promise.then(function(b){return a.teams=b.rows,console.log(b.rows),h.get({id:e.id,controller:"agents"}).$promise}).then(function(b){console.log(b),ComponentsDropdowns.bindSmsQueue(a.teams,_.map(b.rows,function(a){return{id:a.id,penalty:a.UserHasSmsQueue.penalty}}),j)})["catch"](function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.sms.queues.view",{url:"/view/:id",templateUrl:"app/channels/sms/queue/view/view.html",controller:"SmsQueueViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.channels.sms.queues.view.settings",{url:"/settings",templateUrl:"app/channels/sms/queue/view/view.settings.html"}).state("main.channels.sms.queues.view.agents",{url:"/agents",templateUrl:"app/channels/sms/queue/view/view.agents.html",cache:!1,serie:!0,resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/jquery-multi-select/css/multi-select.css","assets/plugins/jquery-multi-select/js/jquery.multi-select.js","assets/plugins/jquery-quicksearch/jquery.quicksearch.js","assets/scripts/components-dropdowns.js"]})}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.sms.realtime",{url:"/realtime",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:45}}})}]),angular.module("xCallyShuttleApp").controller("SmsRealtimeViewAgentCtrl",["$scope","$log","$uibModal","$translate","socket","xAlert","Agent","Pause","Action","SmsQueue","usSpinnerService","$q","uiGridConstants",function(a,b,c,d,e,f,g,h,i,j,k,l,m){function n(){return k.spin("grid-spinner"),g.get(s).$promise.then(function(b){a.gridOptions.totalItems=b.count,a.gridOptions.data=[],b.rows.forEach(function(a){p(a)})})["catch"](function(a){f.error(a)})["finally"](function(){k.stop("grid-spinner")})}function o(){e.socket.on("agent:save",function(b){b=b.newValues||b;var c=_.find(a.gridOptions.data,{agentId:b.id,isAgent:!0});c&&(c.online=_.has(b,"online")?b.online:c.online,c.lastLoginAt=_.has(b,"lastLoginAt")?b.lastLoginAt:c.lastLoginAt,c.pause=_.has(b,"smsPause")?b.smsPause:c.smsPause,c.pauseType=_.has(b,"pauseType")?b.pauseType:c.pauseType,c.lastPauseAt=_.has(b,"lastPauseAt")?b.lastPauseAt:c.lastPauseAt,c.ipaddr=_.has(b,"ipaddr")?b.ipaddr:c.ipaddr,c.port=_.has(b,"port")?b.port:c.port,c.fullcontact=_.has(b,"fullcontact")?b.fullcontact:c.fullcontact,c.useragent=_.has(b,"useragent")?b.useragent:c.useragent,c.lastms=_.has(b,"lastms")?b.lastms:c.lastms,c.internal=_.has(b,"internal")?b.internal:c.internal,_.map(a.gridOptions.data,function(a){a.isAgent||a.agentId!==b.id||(a.online=_.has(b,"online")?b.online:a.online)}))}),e.socket.on("agent:remove",function(b){_.remove(a.gridOptions.data,{agentId:b.id})}),e.socket.on("user_has_sms_queue:save",function(b){console.log("new queue",b);var c=_.find(a.gridOptions.data,{agentId:b.UserId,isAgent:!0}),d=a.gridOptions.data.indexOf(c);a.gridOptions.data.splice(d+1,0,{isAgent:!1,agentId:b.UserId,queue:b.queue,queueId:b.SmsQueueId,agent:b.membername,online:c.online})}),e.socket.on("user_has_sms_queue:remove",function(b){_.remove(a.gridOptions.data,{agentId:b.UserId,queueId:b.SmsQueueId})})}function p(b){a.gridOptions.data.push({isAgent:!0,agentId:b.id,agent:b.name,online:b.online,lastLoginAt:b.lastLoginAt,lastPauseAt:b.lastPauseAt,pause:b.smsPause,pauseType:b.pauseType,ipaddr:b.ipaddr,port:b.port,fullcontact:b.fullcontact,useragent:b.useragent,lastms:b.lastms,internal:b.internal,$$treeLevel:0}),b.SmsQueues.forEach(function(c){a.gridOptions.data.push({isAgent:!1,agentId:b.id,queue:c.name,queueId:c.id,agent:b.name,online:b.online})})}function q(){return h.get().$promise.then(function(b){a.pauses=b.rows,e.syncUpdates("pause",a.pauses)})["catch"](function(a){f.error(a)})}function r(){return j.get().$promise.then(function(b){a.smsQueues=b.rows,e.syncUpdates("sms_queue",a.smsQueues)})["catch"](function(a){f.error(a)})}a.smsQueues=[];var s={controller:"realtime",controller1:"sms",offset:0,limit:10};a.moment=moment,a.initAgents=function(){a.gridOptions={enableGridMenu:!0,headerCellFilter:"translate",enableHorizontalScrollbar:0,enableVerticalScrollbar:0,enableFiltering:!0,showGridFooter:!0,paginationPageSizes:[10,25,50,75],paginationPageSize:10,useExternalPagination:!0,useExternalSorting:!0,useExternalFiltering:!0,multiSelect:!0,showTreeExpandNoChildren:!0,columnDefs:[{name:"name",displayName:"APPLICATION_AGENT",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div data-ng-if="row.entity.isAgent">{{row.entity.agent}} <{{row.entity.internal}}></div>'},{name:"online",displayName:"APPLICATION_ONLINE",width:150,headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div data-ng-if="row.entity.online != null && row.entity.isAgent"><i class="fa" data-ng-class="{\'font-green\':row.entity.online, \'font-red\':!row.entity.online,\'fa-user\':row.entity.online,\'fa-user-times\':!row.entity.online}"></i> <span data-ng-if="row.entity.online" class="left-margin">(<css-timer start-time="row.entity.lastLoginAt"></css-timer>)</span></div>',filter:{type:m.filter.SELECT,selectOptions:[{value:"true",label:"ONLINE"},{value:"false",label:"OFFLINE"}]}},{name:"smsPause",displayName:"APPLICATION_PAUSE",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div data-ng-if="row.entity.pause != null && row.entity.online" class="ui-grid-vcenter" data-ng-class="{\'paused-agent\':row.entity.pause}"><i data-ng-if="row.entity.pause" data-ng-click="grid.appScope.pause(row.entity.agentId,\'unpause\')" class="fa fa-play font-green pointer-cursor left-margin" title="{{\'APPLICATION_RESUME\' | translate}}"></i><i class="fa fa-pause font-yellow pointer-cursor" data-ng-click="grid.appScope.pause(row.entity.agentId,\'pause\',\'DEFAULT PAUSE\')" title="{{\'APPLICATION_DEFAULT_PAUSE\' | translate}}"></i><select data-ng-if="grid.appScope.pauses.length" class="pause-select pointer-cursor" data-ng-model="grid.appScope.pauseType" data-ng-change="grid.appScope.pause(row.entity.agentId,\'pause\',grid.appScope.pauseType)"><option class="pointer-cursor" data-ng-repeat="pause in grid.appScope.pauses">{{pause.name}}</option></select> <span data-ng-if="row.entity.pause" class="left-margin">({{row.entity.pauseType}})</span><span class="left-margin"><css-timer data-ng-if="row.entity.pause" start-time="row.entity.lastPauseAt"></css-timer></span></div>',filter:{type:m.filter.SELECT,selectOptions:[{value:"true",label:"PAUSED"},{value:"false",label:"NOT PAUSED"}]},enableSorting:!1,enableColumnMenu:!1},{name:"queue",displayName:"APPLICATION_QUEUE",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1},{name:"action",displayName:"",width:170,cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div><button data-ng-if="row.entity.queueId" class="btn btn-xs red-sunglo" data-ng-click="grid.appScope.leaveQueue(row.entity.agentId,row.entity.queueId)"><i class="icon-ban"></i> {{\'APPLICATION_LEAVE\' | translate}}</button><button data-ng-if="row.entity.isAgent && row.treeNode.children.length < grid.appScope.smsQueues.length" class="btn btn-xs blue-hoki" data-ng-click="grid.appScope.joinQueue(row.entity.agentId)"><i class="icon-plus"></i> {{\'APPLICATION_JOIN_QUEUE\' | translate}}</button><div>',enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1}],data:[],gridMenuTitleFilter:function(a){var b=l.defer();return b.resolve(d.instant(a)),b.promise},onRegisterApi:function(b){a.gridApi=b,a.gridApi.grid.registerDataChangeCallback(function(){t(a.gridApi.core.getVisibleRows(a.gridApi.grid).length)}),a.gridApi.treeBase.on.rowExpanded(a,function(b){t(a.gridApi.core.getVisibleRows(a.gridApi.grid).length+b.treeNode.children.length)}),a.gridApi.treeBase.on.rowCollapsed(a,function(b){t(a.gridApi.core.getVisibleRows(a.gridApi.grid).length-b.treeNode.children.length)}),a.gridApi.core.on.sortChanged(a,function(a,b){0===b.length?s.order=null:s.order=b[0].name+" "+b[0].sort.direction.toUpperCase(),n()}),a.gridApi.pagination.on.paginationChanged(a,function(a,b){s.offset=(a-1)*b,s.limit=b,n()}),a.gridApi.core.on.filterChanged(a,function(){var a=this.grid;a.columns.forEach(function(a){a.filters[0].term?s[a.name]=a.filters[0].term:delete s[a.name]}),n()})}},n(),q(),r(),$timeout(function(){o()})};var t=function(a){var b=a?30*a+130:270;angular.element(document.getElementsByClassName("ui-grid")[0]).css("height",b+"px"),angular.element(document.getElementsByClassName("ui-grid-viewport")).css("height",30*a+"px")};a.$on("$destroy",function(){e.unsyncUpdates("agent"),e.unsyncUpdates("user_has_sms_queue")}),a.pause=function(b,c,e){return e&&(a.pauseType=null),i.save({name:c,agent:b,type:e||"DEFAULT PAUSE",data4:e||"DEFAULT PAUSE",channel:"sms"}).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){f.error(a)})},a.joinQueue=function(e){var g=c.open({animation:!0,templateUrl:"app/channels/sms/realtime/view/agent/queue.modal.add.html",controller:"SmsRealtimeViewAgentQueueModalCtrl",resolve:{queues:function(){return _.reject(a.smsQueues,function(b){return!!_.find(a.gridOptions.data,{queue:b.name,isAgent:!1,agentId:e})})}}});g.result.then(function(b){return i.save({name:"QueueAdd",agent:e,queues:_.filter(a.smsQueues,function(a){return _.includes(b.queues,a.id)}),channel:"sms",data1:e,data3:b.queues.join(","),data4:"sms"}).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){f.error(a)})},function(){b.info("Modal dismissed at: "+new Date)})},a.leaveQueue=function(a,b){return i.save({name:"QueueRemove",agent:a,queueId:b,channel:"sms",data1:a,data3:b,data4:"sms"}).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){f.error(a)})},a.showInfo=function(a){c.open({animation:!0,templateUrl:"app/channels/sms/realtime/view/agent/agent.modal.info.html",controller:"SmsRealtimeViewAgentInfoModalCtrl",resolve:{agent:a}})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.sms.realtime.view.agents",{url:"/agents",templateUrl:"app/channels/sms/realtime/view/agent/agent.html",controller:"SmsRealtimeViewAgentCtrl"})}]),angular.module("xCallyShuttleApp").controller("SmsRealtimeViewAgentInfoModalCtrl",["$scope","$uibModalInstance","$http","agent",function(a,b,c,d){a.agent=d,a.close=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("SmsRealtimeViewAgentQueueModalCtrl",["$scope","$uibModalInstance","$http","queues",function(a,b,c,d){a.queues=d,a.item={},a.save=function(){b.close(a.item)},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("SmsRealtimeViewApplicationCtrl",["$scope","$log","$uibModal","$translate","socket","xAlert","ReportSmsSession","usSpinnerService","$q","uiGridConstants","$timeout",function(a,b,c,d,e,f,g,h,i,j,k){function l(){return h.spin("spinner-grid"),g.get({controller:"waiting",controller2:"applications"}).$promise.then(function(b){a.gridOptions.data=b.rows})["catch"](function(a){f.error(a)})["finally"](function(){m(),h.stop("spinner-grid")})}function m(){e.socket.on("report_sms_session:save",function(b){var c=_.find(a.gridOptions.data,{id:b.id});c?(_.merge(c,b),b.leaveAt&&k(function(){_.remove(a.gridOptions.data,{id:b.id})},1e4)):b.leaveAt||a.gridOptions.data.push(b)}),e.socket.on("report_sms_session:remove",function(b){_.remove(a.gridOptions.data,{id:b.id})})}a.moment=moment,a.initApplications=function(){a.gridOptions={headerCellFilter:"translate",enableHorizontalScrollbar:0,enableVerticalScrollbar:0,enableFiltering:!0,columnDefs:[{name:"uniqueid",displayName:"APPLICATION_UNIQUEID",headerCellFilter:"translate"},{name:"accountname",displayName:"APPLICATION_ACCOUNT",headerCellFilter:"translate"},{name:"application",displayName:"APPLICATION_APPLICATION",headerCellFilter:"translate"},{name:"status",displayName:"APPLICATION_STATUS",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div><span data-ng-if="!row.entity.leaveAt">{{\'APPLICATION_QUEUESTATUS_WAITING\' | translate}}</span><span data-ng-if="row.entity.leaveAt && row.entity.complete">{{\'APPLICATION_QUEUESTATUS_COMPLETE\' | translate}}</span><span data-ng-if="row.entity.leaveAt && row.entity.timeout">{{\'APPLICATION_TIMEOUT\' | translate}}</span> <span data-ng-if="!row.entity.leaveAt">[<css-timer start-time="row.entity.updatedAt"></css-timer>]</span></div>',enableSorting:!1,enableColumnMenu:!1,enableFiltering:!1},{name:"membername",displayName:"APPLICATION_AGENT",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{row.entity.membername || ''}}</span></div>"},{name:"queuename",displayName:"APPLICATION_QUEUE",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{row.entity.queuename || ''}}</span></div>"}],data:[],gridMenuTitleFilter:function(a){var b=i.defer();return b.resolve(d.instant(a)),b.promise},onRegisterApi:function(b){a.gridApi=b,a.gridApi.grid.registerDataChangeCallback(function(){n(a.gridOptions.data.length)})}},l()};var n=function(a){var b=a?30*a+60:270;angular.element(document.getElementsByClassName("ui-grid")[0]).css("height",b+"px"),angular.element(document.getElementsByClassName("ui-grid-viewport")).css("height",30*a+"px")};a.$on("$destroy",function(){e.unsyncUpdates("report_sms_session")})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.sms.realtime.view.applications",{url:"/applications",templateUrl:"app/channels/sms/realtime/view/application/application.html",controller:"SmsRealtimeViewApplicationCtrl"})}]),angular.module("xCallyShuttleApp").controller("SmsRealtimeViewCtrl",["$scope","$state",function(a,b){a.agents=[{name:"Queues",link:"main.channels.sms.realtime.view.agents.queues"},{name:"Timeline",link:"main.channels.sms.realtime.view.agents.timeline"}],a.sessions=[{name:"Sessions",link:"main.channels.sms.realtime.view.sessions"}],a.tree={queues:[{name:"Queues",link:"main.channels.sms.realtime.view.agents.queues"},{name:"Timeline",link:"main.channels.sms.realtime.view.agents.timeline"}],sessions:[{name:"Sessions",link:"main.channels.sms.realtime.view.sessions"}]}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.sms.realtime.view",{url:"/view",templateUrl:"app/channels/sms/realtime/view/view.html",controller:"SmsRealtimeViewCtrl"})}]),angular.module("xCallyShuttleApp").factory("ReportSmsSession",["$resource",function(a){return a("/api/report/sms/sessions/:id/:controller/:controller2",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.sms",{url:"/sms",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user","agent"],redirectTo:"landing",id:11}}})}]),angular.module("xCallyShuttleApp").factory("SmsQueue",["$resource",function(a){return a("/api/sms/queues/:id/:controller",{name:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("SmsReport",["$resource",function(a){return a("/api/report/sms/:id/:controller1/:controller2",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("SmsMessage",["$resource",function(a){return a("/api/sms/messages/:id/:controller",{id:"@id",controller:"@controller"},{update:{method:"PUT"},patch:{method:"PATCH"}})}]),angular.module("xCallyShuttleApp").factory("SmsRoom",["$resource",function(a){return a("/api/sms/rooms/:id/:controller",{id:"@id",controller:"@controller"},{update:{method:"PUT"},patch:{method:"PATCH"}})}]),angular.module("xCallyShuttleApp").factory("ChanSpy",["$resource",function(a){return a("/api/chanspy/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.chanspy",{url:"/chanspy",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:27}}})}]),angular.module("xCallyShuttleApp").controller("ChanSpyListCtrl",["$scope","$uibModal","ChanSpy","gridOptions",function(a,b,c,d){a.initView=function(){var b={exporterCsvFilename:"chanspy.csv",columnDefs:[{name:"name"},{name:"prefix"},{name:"description"},{name:"action",width:75,buttons:[{"class":"blue-hoki",href:"/channels/voice/chanspy/view/{{row.entity.id}}/settings",name:"settings"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=d.gridOptions(c,b,a)},a.createItem=function(){var c=b.open({animation:!0,templateUrl:"app/channels/voice/chanspy/list/list.create.modal.html",controller:"ChanSpyListCreateCtrl"});c.result.then(function(b){a.gridOptions.getPage()})}}]),angular.module("xCallyShuttleApp").controller("ChanSpyListCreateCtrl",["$scope","$translate","$uibModalInstance","ChanSpy","xAlert",function(a,b,c,d,e){a.form={},a.item={},a.recordSwitch={onText:"On",offText:"Off",isActive:!0,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.options=[{name:"APPLICATION_CHANSPY_OPTION_b",value:"b"},{name:"APPLICATION_CHANSPY_OPTION_B",value:"B"},{name:"APPLICATION_CHANSPY_OPTION_E",value:"E"},{name:"APPLICATION_CHANSPY_OPTION_o",value:"o"},{name:"APPLICATION_CHANSPY_OPTION_q",value:"q"},{name:"APPLICATION_CHANSPY_OPTION_s",value:"s"},{name:"APPLICATION_CHANSPY_OPTION_S",value:"S"},{name:"APPLICATION_CHANSPY_OPTION_w",value:"w"},{name:"APPLICATION_CHANSPY_OPTION_W",value:"W"}],a.save=function(){return a.item.options=a.item.options.join(""),d.save(a.item).$promise.then(function(a){e.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)})["catch"](function(a){e.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.chanspy.list",{url:"/list",templateUrl:"app/channels/voice/chanspy/list/list.html",controller:"ChanSpyListCtrl"})}]),angular.module("xCallyShuttleApp").controller("ChanSpyViewCtrl",["$scope","$translate","$stateParams","xAlert","ChanSpy",function(a,b,c,d,e){a.recordSwitch={onText:"On",offText:"Off",isActive:!0,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.options=[{name:"APPLICATION_CHANSPY_OPTION_b",value:"b"},{name:"APPLICATION_CHANSPY_OPTION_B",value:"B"},{name:"APPLICATION_CHANSPY_OPTION_E",value:"E"},{name:"APPLICATION_CHANSPY_OPTION_o",value:"o"},{name:"APPLICATION_CHANSPY_OPTION_q",value:"q"},{name:"APPLICATION_CHANSPY_OPTION_s",value:"s"},{name:"APPLICATION_CHANSPY_OPTION_S",value:"S"},{name:"APPLICATION_CHANSPY_OPTION_w",value:"w"},{name:"APPLICATION_CHANSPY_OPTION_W",value:"W"}],a.getChanSpy=function(){return e.get({id:c.id}).$promise.then(function(b){b.options=b.options.split(""),a.chanspy=b})["catch"](function(a){d.error(a)})},a.updateChanSpy=function(){var f=angular.copy(a.chanspy);return f.options=f.options.join(""),e.update({id:c.id},f).$promise.then(function(){d.show(b.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){d.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.chanspy.view",{url:"/view/:id",templateUrl:"app/channels/voice/chanspy/view/view.html",controller:"ChanSpyViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.channels.voice.chanspy.view.settings",{url:"/settings",templateUrl:"app/channels/voice/chanspy/view/view.settings.html"})}]),angular.module("xCallyShuttleApp").factory("VoiceContext",["$resource",function(a){return a("/api/voice/contexts/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.contexts",{url:"/contexts",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:22}}})}]),angular.module("xCallyShuttleApp").controller("VoiceContextListCtrl",["$scope","VoiceContext","gridOptions","$uibModal","xAlert","$translate",function(a,b,c,d,e,f){a.initView=function(){var d={exporterCsvFilename:"voice_contexts.csv",columnDefs:[{name:"name"},{name:"description"},{name:"action",width:75,buttons:[{"class":"{{row.entity.defaultEntry ? 'blue-hoki disabled' : 'blue-hoki'}}",href:"/channels/voice/contexts/view/{{row.entity.id}}/settings",name:"settings"},{"class":"{{row.entity.defaultEntry ? 'red-sunglo disabled' : 'red-sunglo'}}",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=c.gridOptions(b,d,a)},a.createItem=function(){var c=d.open({animation:!0,templateUrl:"app/channels/voice/context/list/create.modal.html",controller:["$scope","$uibModalInstance",function(a,b){a.form={},a.item={},a.ok=function(){b.close(a.item)},a.cancel=function(){b.dismiss("cancel")}}]});c.result.then(function(c){return b.save(c).$promise.then(function(){a.gridOptions.getPage(),e.show(f.instant("MESSAGE_WELL_DONE")+"!","success")})["catch"](function(a){e.error(a)})})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.contexts.list",{url:"/list",templateUrl:"app/channels/voice/context/list/list.html",controller:"VoiceContextListCtrl"})}]),angular.module("xCallyShuttleApp").controller("VoiceContextViewCtrl",["$scope","$http","xAlert","$translate","$stateParams","$location",function(a,b,c,d,e,f){a.getContext=function(){b.get("/api/voice/contexts/"+e.id).success(function(b){a.context=b}).error(function(a){console.error(a),f.path("/voice/contexts/list")})},a.updateVoiceContext=function(){var f=angular.copy(a.context);b.put("/api/voice/contexts/"+e.id,f).success(function(){c.show(d.instant("MESSAGE_WELL_DONE")+"!","success")}).error(function(b){c.error(b),a.context=f})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.contexts.view",{url:"/view/:id",templateUrl:"app/channels/voice/context/view/view.html",controller:"VoiceContextViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.channels.voice.contexts.view.settings",{url:"/settings",templateUrl:"app/channels/voice/context/view/view.settings.html"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.dispositions",{url:"/dispositions",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:28}}})}]),angular.module("xCallyShuttleApp").controller("VoiceDispositionListCtrl",["$scope","$stateParams","$uibModal","$translate","VoiceDisposition","xAlert",function(a,b,c,d,e,f){a.initView=function(){return e.get().$promise.then(function(b){a.dispositions=b.rows})["catch"](function(a){console.error(a),f.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},a.updateDisposition=function(a,b){return e.update({id:a},{name:b}).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE")+"!","success")})["catch"](function(a){console.error(a),f.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},a.deleteDisposition=function(b){return e.remove({id:b}).$promise.then(function(){_.remove(a.dispositions,{id:b}),f.show(d.instant("MESSAGE_WELL_DONE")+"!","success")})["catch"](function(a){console.error(a),f.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},a.addDisposition=function(){return c.open({animation:!0,templateUrl:"app/channels/voice/disposition/list/modal/add.modal.html",controller:"VoiceDispositionListModalDispositionAddCtrl"}).result.then(function(b){b&&(a.dispositions.push(b),f.show(d.instant("MESSAGE_WELL_DONE")+"!","success"))})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.dispositions.list",{url:"/list",templateUrl:"app/channels/voice/disposition/list/list.html",controller:"VoiceDispositionListCtrl"})}]),angular.module("xCallyShuttleApp").controller("VoiceDispositionListModalDispositionAddCtrl",["$scope","$uibModalInstance","VoiceDisposition","xAlert","$translate",function(a,b,c,d,e){a.ok=function(){return c.save({name:a.name}).$promise.then(function(a){b.close(a)})["catch"](function(a){d.show(e.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").factory("VoiceDisposition",["$resource",function(a){return a("/api/voice/dispositions/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("VoiceMohListCtrl",["$scope","gridOptions","VoiceMoh","$uibModal","xAlert","$translate",function(a,b,c,d,e,f){a.initView=function(){var d={exporterCsvFilename:"voice_mohs.csv",columnDefs:[{name:"name"},{name:"directory"},{name:"sort"},{name:"description"},{name:"action",width:75,buttons:[{"class":"blue-hoki",href:"/channels/voice/mohs/view/{{row.entity.id}}/settings",name:"settings"},{"class":"{{row.entity.defaultEntry ? 'red-sunglo disabled' : 'red-sunglo'}}",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=b.gridOptions(c,d,a)},a.createItem=function(){var b=d.open({animation:!0,templateUrl:"app/channels/voice/moh/list/create.modal.html",controller:["$scope","$uibModalInstance",function(a,b){a.form={},a.item={},a.ok=function(){b.close(a.item)},a.cancel=function(){b.dismiss("cancel")}}]});b.result.then(function(b){return c.save(b).$promise.then(function(){a.gridOptions.getPage(),e.show(f.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){e.error(a)})})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.mohs.list",{url:"/list",templateUrl:"app/channels/voice/moh/list/list.html",controller:"VoiceMohListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"smart-table",insertBefore:"#ng_load_plugins_before",files:["assets/css/smart_table.css"]}])}]}})}]),angular.module("xCallyShuttleApp").factory("VoiceMoh",["$resource",function(a){return a("/api/voice/musiconholds/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.mohs",{url:"/mohs",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:24}}})}]),angular.module("xCallyShuttleApp").controller("VoiceMohViewCtrl",["$scope","$http","xAlert","$translate","VoiceMoh","$stateParams","socket","Modal","$sce","$location","Sound",function(a,b,c,d,e,f,g,h,i,j,k){a.$translate=d,a.audioSources={},a.sortOptions=[{value:"random",name:"APPLICATION_RANDOM"},{value:"alpha",name:"APPLICATION_ALPHABETICAL"}],a.getMoh=function(){return e.get({id:f.id}).$promise.then(function(b){delete b.stamp,a.moh=b})["catch"](function(a){c.error(a)})},a.updateVoiceMoh=function(){return console.log("update"),e.update({id:f.id},a.moh).$promise.then(function(){c.show(d.instant("MESSAGE_WELL_DONE")+"!","success")})["catch"](function(a){c.error(a)})},a.addMohs=function(){return e.save({id:f.id,controller:"files"},a.item).$promise.then(function(){j.path("/channels/voice/mohs/view/"+f.id+"/audios")})["catch"](function(a){c.error(a)})},a.getAudioFiles=function(){return e.get({id:f.id,controller:"files"}).$promise.then(function(b){a.audioFiles=b.files,a.mohPath=b.path,a.audioFiles.forEach(function(a){l(a)})})["catch"](function(a){c.error(a)})},a.getSecureSrc=function(a){return i.trustAsResourceUrl(a)},a.getSounds=function(){return a.item={sounds:[]},k.get().$promise.then(function(b){a.soundList=b.rows})["catch"](function(a){c.error(a)})};var l=function(c){b.get("/api/voice/musiconholds/stream",{params:{path:encodeURI(a.mohPath+"/"+c)}}).success(function(b){a.audioSources[c]="data:audio/ogg;base64,"+b}).error(function(a){console.error(a)})};a.deleteItem=h.confirm["delete"](function(e){b["delete"]("/api/voice/musiconholds/"+f.id+"/files",{params:{filename:e}}).success(function(){_.remove(a.audioFiles,function(a){return a===e}),c.show(d.instant("MESSAGE_WELL_DONE")+"!","success")}).error(function(a){c.error(a)})})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.mohs.view",{url:"/view/:id",templateUrl:"app/channels/voice/moh/view/view.html",controller:"VoiceMohViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.channels.voice.mohs.view.settings",{url:"/settings",templateUrl:"app/channels/voice/moh/view/view.settings.html"}).state("main.channels.voice.mohs.view.audios",{url:"/audios",templateUrl:"app/channels/voice/moh/view/view.audios.html",cache:!1}).state("main.channels.voice.mohs.view.add",{url:"/add",templateUrl:"app/channels/voice/moh/view/view.addFiles.html",cache:!1})}]),angular.module("xCallyShuttleApp").controller("VoiceQueueListCtrl",["$scope","$rootScope","$uibModal","VoiceQueue","gridOptions","Auth",function(a,b,c,d,e,f){a.initView=function(){a.Auth=f;var b={exporterCsvFilename:"voice_queues.csv",primaryKey:"name",columnDefs:[{name:"name"},{name:"strategy"},{name:"description"},{name:"action",width:100,buttons:[{"class":"blue-hoki",href:"/channels/voice/queues/view/{{row.entity.name}}/settings",name:"settings"},{"class":"green-meadow",href:"/channels/voice/queues/view/{{row.entity.name}}/agents",name:"agents",hide:"user"===f.getCurrentUser().role},{ -"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.name)"}]}]};a.gridOptions=e.gridOptions(d,b,a)},a.createItem=function(){var b=c.open({animation:!0,templateUrl:"app/channels/voice/queue/list/list.create.modal.html",controller:"VoiceQueueListCreateCtrl",size:"lg"});b.result.then(function(){a.gridOptions.getPage()})}}]),angular.module("xCallyShuttleApp").controller("VoiceQueueListCreateCtrl",["$scope","$uibModalInstance","$translate","xAlert","VoiceQueue","Team",function(a,b,c,d,e,f){a.form={},a.item={penalty:0,agents:[]},a.getTeams=function(){return f.get({controller:"associations"}).$promise.then(function(b){a.teams=b.rows}).then(function(){ComponentsDropdowns.bindQueue(a.teams,[],function(){return{select:function(b){a.item.agents=_.union(a.item.agents,b),console.log(a.item.agents)},deselect:function(b){a.item.agents=_.difference(a.item.agents,b),console.log(a.item.agents)}}})})["catch"](function(a){console.error(a)})},a.save=function(){return e.save(a.item).$promise.then(function(a){d.show(c.instant("MESSAGE_WELL_DONE"),"success"),b.close(a)})["catch"](function(a){d.error(a)})},a.cancel=function(){b.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.queues.list",{url:"/list",templateUrl:"app/channels/voice/queue/list/list.html",controller:"VoiceQueueListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/jquery-multi-select/css/multi-select.css","assets/plugins/jquery-multi-select/js/jquery.multi-select.js","assets/plugins/jquery-quicksearch/jquery.quicksearch.js","assets/scripts/components-dropdowns.js"]})}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.queues",{url:"/queues",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin"],redirectTo:"landing"}}})}]),angular.module("xCallyShuttleApp").factory("ReportQueue",["$resource",function(a){return a("/api/report/queues/:id/:controller/:controller2",{name:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("UserHasVoiceQueue",["$resource",function(a){return a("/api/voice/user_has_queues/:controller",{name:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("VoiceQueueViewCtrl",["$scope","xAlert","$translate","$stateParams","socket","$location","VoiceQueue","VoiceContext","Team","Auth","VoiceMoh","Sound","Setting",function(a,b,c,d,e,f,g,h,i,j,k,l,m){a.penalty=0,a.Auth=j,a.binaryChoices=[{name:"Yes",value:1},{name:"No",value:0}],a.recordSwitch={onText:"On",offText:"Off",isActive:!0,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.autoPauseValues=[{name:"No",value:"no"},{name:"Yes",value:"all"}],a.monitorFormats=[{name:"wav",value:"wav"},{name:"gsm",value:"gsm"},{name:"Inactive",value:""}],a.queueAnnounces=[{display_name:"Default",path:null},{display_name:"Disabled",path:""}];var n=function(){return{select:function(b){return g.save({id:a.queue.name,controller:"agents"},{agents:b,penalty:a.queue.penalty}).$promise.then(function(){a.getTeams()})["catch"](function(a){console.log(a)})},deselect:function(b){return g["delete"]({id:a.queue.name,controller:"agents",agents:b}).$promise.then(function(){a.getTeams()})["catch"](function(a){console.log(a)})}}};a.getQueue=function(){return g.get({id:d.id}).$promise.then(function(b){b.joinempty=""===b.joinempty?[]:b.joinempty.split(","),b.leavewhenempty=""===b.leavewhenempty?[]:b.leavewhenempty.split(","),b.periodic_announce=""===b.periodic_announce?[]:b.periodic_announce.split(","),b.setinterfacevar="yes"===b.setinterfacevar,b.setqueuevar="yes"===b.setqueuevar,b.setqueueentryvar="yes"===b.setqueueentryvar,b.penalty=0,a.queue=b})["catch"](function(a){f.path("/channels/voice/queues/list")})},a.updateVoiceQueue=function(){var e=angular.copy(a.queue);return e.joinempty=e.joinempty.join(","),e.leavewhenempty=e.leavewhenempty.join(","),e.periodic_announce=e.periodic_announce.join(","),e.setinterfacevar=e.setinterfacevar?"yes":"no",e.setqueuevar=e.setqueuevar?"yes":"no",e.setqueueentryvar=e.setqueueentryvar?"yes":"no",e.context||(e.context=null),g.update({id:d.id},e).$promise.then(function(){b.show(c.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){b.error(a)})},a.getTeams=function(){return i.get({controller:"associations"}).$promise.then(function(b){return a.teams=b.rows,g.get({id:d.id,controller:"agents"}).$promise}).then(function(b){ComponentsDropdowns.bindQueue(a.teams,_.map(b.rows,function(a){return{id:a.id,penalty:a.UserHasVoiceQueue.penalty}}),n)})["catch"](function(a){console.error(a)})},a.getContexts=function(){return h.get().$promise.then(function(b){a.voiceContexts=b.rows})["catch"](function(a){b.error(data)})},a.getMohs=function(){return k.get().$promise.then(function(b){a.voiceMohs=b.rows,e.syncUpdates("voice_musiconhold",a.voiceMohs)})["catch"](function(a){b.error(a)})},a.getSounds=function(){var b;return m.get({id:1}).$promise.then(function(a){return b=a,l.get().$promise}).then(function(c){var d=b.soundPath||"/var/opt/motion/server/files/sounds/converted";_.forEach(c.rows,function(a){a.path=(d+"/"+a.save_name).replace(/\/+/g,"/").replace(/\\+/g,"\\")}),a.queueAnnounces=a.queueAnnounces.concat(c.rows),a.periodicAnnounces=angular.copy(c.rows),c.rows.unshift({display_name:"None",path:""}),a.sounds=c.rows,e.syncUpdates("sound",a.sounds)})["catch"](function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.queues.view",{url:"/view/:id",templateUrl:"app/channels/voice/queue/view/view.html",controller:"VoiceQueueViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.channels.voice.queues.view.settings",{url:"/settings",templateUrl:"app/channels/voice/queue/view/view.settings.html"}).state("main.channels.voice.queues.view.agents",{url:"/agents",templateUrl:"app/channels/voice/queue/view/view.agents.html",cache:!1,serie:!0,resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/jquery-multi-select/css/multi-select.css","assets/plugins/jquery-multi-select/js/jquery.multi-select.js","assets/plugins/jquery-quicksearch/jquery.quicksearch.js","assets/scripts/components-dropdowns.js"]})}]}})}]),angular.module("xCallyShuttleApp").factory("VoiceQueue",["$resource",function(a){return a("/api/voice/queues/:id/:controller",{name:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.realtime",{url:"/realtime",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:26}}})}]),angular.module("xCallyShuttleApp").controller("VoiceRealtimeViewAbandonedCtrl",["$scope","$translate","socket","xAlert","ReportQueue","usSpinnerService","$q","Auth","uiGridConstants",function(a,b,c,d,e,f,g,h,i){function j(){return f.spin("spinner-grid"),e.get({controller:"abandoned",controller2:"all"}).$promise.then(function(b){a.gridOptions.data=b.rows})["catch"](function(a){d.error(a)})["finally"](function(){k(),f.stop("spinner-grid")})}function k(){c.socket.on("report_queue:update",function(b){b.queuecallerabandon&&a.gridOptions.data.unshift(b)})}a.radioSwitch={size:"mini",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"success",onColor:"danger"};a.initAbandoned=function(){a.agent=h.getCurrentUser(),a.gridOptions={exporterCsvFilename:"abandoned_calls.csv",enableRowHeaderSelection:!0,paginationPageSizes:[10,25,50,75],paginationPageSize:10,enableFiltering:!0,enableSorting:!0,enableGridMenu:!1,flatEntityAccess:!0,showGridFooter:!0,fastWatch:!0,enableSelectAll:!1,enableHorizontalScrollbar:0,enableVerticalScrollbar:1,columnDefs:[{name:"queue",displayName:"APPLICATION_QUEUE",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter"},{name:"calleridnum",displayName:"APPLICATION_CALLERIDNUM",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter"},{name:"updatedAt",displayName:"APPLICATION_DATE",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{row.entity.updatedAt | date:'yyyy-MM-dd HH:mm:ss'}}</div>"},{name:"lastAssignedTo",cellClass:"text-center ui-grid-vcenter",displayName:"APPLICATION_LAST_ASSIGNED_TO",headerCellFilter:"translate"},{name:"assigned",displayName:"APPLICATION_STATUS",headerCellFilter:"translate",cellTemplate:'<div class="centered-uigrid-td"><input data-ng-change="grid.appScope.updateItem(row.entity)", bs-switch ng-model="row.entity.assigned" type="checkbox" switch-active="{{ !row.entity.assigned || grid.appScope.agent.name === row.entity.lastAssignedTo }}" switch-on-text="{{ \'APPLICATION_ASSIGNED\' | translate }}" switch-off-text="{{ \'APPLICATION_FREE\' | translate }}" switch-on-color="{{ grid.appScope.radioSwitch.onColor }}" switch-off-color="{{ grid.appScope.radioSwitch.offColor }}" switch-animate="{{ grid.appScope.radioSwitch.animate }}" switch-size="{{ grid.appScope.radioSwitch.size }}" switch-label="{{ grid.appScope.radioSwitch.label }}" switch-icon="{{ grid.appScope.radioSwitch.icon }}" switch-radio-off="{{ grid.appScope.radioSwitch.radioOff }}" switch-label-width="{{ grid.appScope.radioSwitch.labelWidth }}" switch-handle-width="{{ grid.appScope.radioSwitch.handleWidth }}"></div>',enableFiltering:!1}],data:[],gridMenuTitleFilter:function(a){var c=g.defer();return c.resolve(b.instant(a)),c.promise},onRegisterApi:function(b){a.gridApi=b}},j()},a.updateItem=function(c){return e.update({id:c.id},{assigned:c.assigned,lastAssignedTo:c.assigned?a.agent.name:void 0}).$promise.then(function(){d.show(b.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){d.error(a)})};a.$on("$destroy",function(){c.unsyncUpdates("report_queue")})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.realtime.view.abandoned",{url:"/abandoned",templateUrl:"app/channels/voice/realtime/view/abandoned/abandoned.html",controller:"VoiceRealtimeViewAbandonedCtrl"})}]),angular.module("xCallyShuttleApp").controller("VoiceRealtimeViewAgentCtrl",["$scope","$log","$uibModal","$translate","socket","xAlert","Agent","Pause","Action","VoiceQueue","usSpinnerService","$q","uiGridConstants","Auth","$timeout",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){function p(){return k.spin("grid-spinner"),g.get(u).$promise.then(function(b){a.gridOptions.totalItems=b.count,a.gridOptions.data=[],b.rows.forEach(function(a){r(a)})})["catch"](function(a){f.error(a)})["finally"](function(){k.stop("grid-spinner")})}function q(){e.socket.on("agent:save",function(b){b=b.newValues||b;var c=_.find(a.gridOptions.data,{agentId:b.id,isAgent:!0});c&&(c.online=_.has(b,"online")?b.online:c.online,c.lastLoginAt=_.has(b,"lastLoginAt")?b.lastLoginAt:c.lastLoginAt,c.pause=_.has(b,"voicePause")?b.voicePause:c.pause,c.pauseType=_.has(b,"pauseType")?b.pauseType:c.pauseType,c.lastPauseAt=_.has(b,"lastPauseAt")?b.lastPauseAt:c.lastPauseAt,c.status=_.has(b,"status")?b.status:c.status,c.statusAt=_.has(b,"statusAt")?b.statusAt:c.statusAt,c.queueStatus=_.has(b,"queueStatus")?b.queueStatus:c.queueStatus,c.queueStatusAt=_.has(b,"queueStatusAt")?b.queueStatusAt:c.queueStatusAt,c.lastQueue=_.has(b,"lastQueue")?b.lastQueue:c.lastQueue,c.ipaddr=_.has(b,"ipaddr")?b.ipaddr:c.ipaddr,c.port=_.has(b,"port")?b.port:c.port,c.fullcontact=_.has(b,"fullcontact")?b.fullcontact:c.fullcontact,c.useragent=_.has(b,"useragent")?b.useragent:c.useragent,c.lastms=_.has(b,"lastms")?b.lastms:c.lastms,c.internal=_.has(b,"internal")?b.internal:c.internal,_.map(a.gridOptions.data,function(a){a.isAgent||a.agentId!==b.id||(a.online=_.has(b,"online")?b.online:a.online)}))}),e.socket.on("agent:remove",function(b){_.remove(a.gridOptions.data,{agentId:b.id})}),e.socket.on("user_has_voice_queue:save",function(b){var c=_.includes(_.map(a.CurrentUser.PVoiceQueues,"name"),b.queue)||n.isAdmin(),d=_.find(a.gridOptions.data,{agentId:b.UserId,queue:b.queue});if(!d&&b.logged&&c){var e=_.find(a.gridOptions.data,{agentId:b.UserId,isAgent:!0}),f=a.gridOptions.data.indexOf(e);a.gridOptions.data.splice(f+1,0,{isAgent:!1,agentId:b.UserId,queue:b.queue,agent:b.membername,callstaken:b.callstaken?b.callstaken:0,online:e.online})}else d&&!b.logged?_.remove(a.gridOptions.data,{agentId:b.UserId,queue:b.queue}):d&&b.logged&&c&&(d.callstaken=b.callstaken?b.callstaken:0)}),e.socket.on("user_has_voice_queue:remove",function(b){_.remove(a.gridOptions.data,{agentId:b.UserId,queue:b.queue})})}function r(b){a.gridOptions.data.push({isAgent:!0,agentId:b.id,agent:b.name,online:b.online,lastLoginAt:b.lastLoginAt,lastPauseAt:b.lastPauseAt,pause:b.voicePause,pauseType:b.pauseType,status:b.status||"UNKNOWN",statusAt:b.statusAt,queueStatus:b.queueStatus||"READY",queueStatusAt:b.queueStatusAt,lastQueue:b.lastQueue,ipaddr:b.ipaddr,port:b.port,fullcontact:b.fullcontact,useragent:b.useragent,lastms:b.lastms,internal:b.internal,$$treeLevel:0}),b.VoiceQueues.forEach(function(c){c.UserHasVoiceQueue.logged&&a.gridOptions.data.push({isAgent:!1,agentId:b.id,queue:c.name,agent:b.name,callstaken:c.UserHasVoiceQueue.callstaken?c.UserHasVoiceQueue.callstaken:0,online:b.online})})}function s(){return h.get().$promise.then(function(b){a.pauses=b.rows,e.syncUpdates("pause",a.pauses)})["catch"](function(a){f.error(a)})}function t(){return j.get().$promise.then(function(b){a.voiceQueues=b.rows,e.syncUpdates("voice_queue",a.voiceQueues)})["catch"](function(a){f.error(a)})}a.voiceQueues=[];var u={controller:"realtime",controller1:"voice",offset:0,limit:10};a.moment=moment,a.initAgents=function(){a.gridOptions={enableGridMenu:!0,headerCellFilter:"translate",enableHorizontalScrollbar:0,enableVerticalScrollbar:0,enableFiltering:!0,showGridFooter:!0,paginationPageSizes:[10,25,50,75],paginationPageSize:10,useExternalPagination:!0,useExternalSorting:!0,useExternalFiltering:!0,multiSelect:!0,showTreeExpandNoChildren:!0,columnDefs:[{name:"name",displayName:"APPLICATION_AGENT",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div data-ng-if="row.entity.isAgent">{{row.entity.agent}} <{{row.entity.internal}}></div>'},{name:"online",displayName:"APPLICATION_ONLINE",width:150,headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div data-ng-if="row.entity.online != null && row.entity.isAgent"><i class="fa" data-ng-class="{\'font-green\':row.entity.online, \'font-red\':!row.entity.online,\'fa-user\':row.entity.online,\'fa-user-times\':!row.entity.online}"></i> <span data-ng-if="row.entity.online" class="left-margin">(<css-timer start-time="row.entity.lastLoginAt"></css-timer>)</span></div>',filter:{type:m.filter.SELECT,selectOptions:[{value:"true",label:"ONLINE"},{value:"false",label:"OFFLINE"}]}},{name:"status",displayName:"APPLICATION_PHONE_STATUS",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div data-ng-if=\"row.entity.isAgent\">{{'APPLICATION_'+row.entity.status | translate}} <span data-ng-if=\"row.entity.statusAt && (row.entity.status === 'BUSY' || row.entity.status === 'ONHOLD' || row.entity.status === 'INUSE')\">(<css-timer start-time=\"row.entity.statusAt\"></css-timer>)</span></span></div>",filter:{type:m.filter.SELECT,selectOptions:[{value:"UNKNOWN",label:d.instant("APPLICATION_UNKNOWN")},{value:"NOT_INUSE",label:d.instant("APPLICATION_NOT_INUSE")},{value:"INUSE",label:d.instant("APPLICATION_INUSE")},{value:"BUSY",label:d.instant("APPLICATION_BUSY")},{value:"INVALID",label:d.instant("APPLICATION_INVALID")},{value:"UNAVAILABLE",label:d.instant("APPLICATION_UNAVAILABLE")},{value:"RINGING",label:d.instant("APPLICATION_RINGING")},{value:"RINGINUSE",label:d.instant("APPLICATION_RINGINUSE")},{value:"ONHOLD",label:d.instant("APPLICATION_ONHOLD")}]}},{name:"queueStatus",displayName:"APPLICATION_QUEUE_STATUS",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div data-ng-if="row.entity.isAgent && row.entity.online" class="ui-grid-vcenter" data-ng-class="{\'paused-agent\':row.entity.pause}"><span class="left-margin"><i data-ng-if="row.entity.pause" data-ng-click="grid.appScope.pause(row.entity.agentId,\'unpause\')" class="fa fa-play font-green pointer-cursor" title="{{\'APPLICATION_RESUME\' | translate}}"></i><i class="fa fa-pause font-yellow pointer-cursor" data-ng-click="grid.appScope.pause(row.entity.agentId,\'pause\',\'DEFAULT PAUSE\')" title="{{\'APPLICATION_DEFAULT_PAUSE\' | translate}}"></i></span><select data-ng-if="grid.appScope.pauses.length" class="pause-select pointer-cursor" data-ng-model="grid.appScope.pauseType" data-ng-change="grid.appScope.pause(row.entity.agentId,\'pause\',grid.appScope.pauseType)"><option class="pointer-cursor" data-ng-repeat="pause in grid.appScope.pauses">{{pause.name}}</option></select><span> {{\'APPLICATION_\'+row.entity.queueStatus.toUpperCase() | translate}}</span><span data-ng-if="(row.entity.queueStatus!==\'complete\' && (row.entity.queueStatus!==\'paused\' || row.entity.pauseType === \'ACW\'))"> [{{row.entity.lastQueue}}]</span><span data-ng-if="row.entity.pause"> [{{row.entity.pauseType}}]</span><span data-ng-if="row.entity.queueStatusAt && row.entity.queueStatus!==\'complete\'">[<css-timer start-time="row.entity.lastPauseAt"></css-timer>]</span></div>',filter:{type:m.filter.SELECT,selectOptions:[{value:"paused",label:d.instant("APPLICATION_PAUSED")},{value:"connect",label:d.instant("APPLICATION_CONNECT")},{value:"complete",label:d.instant("APPLICATION_COMPLETE")},{value:"called",label:d.instant("APPLICATION_CALLED")}]},enableSorting:!1,enableColumnMenu:!1},{name:"queue",displayName:"APPLICATION_QUEUE",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1},{name:"callstaken",displayName:"APPLICATION_CALLS_TAKEN",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div data-ng-if="row.entity.callstaken !== null">{{row.entity.callstaken}}</div>',enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1,width:100},{name:"action",displayName:"",width:170,cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div><button data-ng-if="row.entity.queue" class="btn btn-xs red-sunglo" data-ng-click="grid.appScope.leaveQueue(row.entity.agentId,row.entity.queue)"><i class="icon-ban"></i> {{\'APPLICATION_LEAVE\' | translate}}</button><button data-ng-if="row.entity.isAgent && row.treeNode.children.length < grid.appScope.voiceQueues.length" class="btn btn-xs blue-hoki" data-ng-click="grid.appScope.joinQueue(row.entity.agentId)"><i class="icon-plus"></i> {{\'APPLICATION_JOIN_QUEUE\' | translate}}</button> <button data-ng-if="row.entity.isAgent" class="btn btn-xs blue-madison" data-ng-click="grid.appScope.showInfo(row.entity)"><i class="icon-info"></i></button><div>',enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1}],data:[],gridMenuTitleFilter:function(a){var b=l.defer();return b.resolve(d.instant(a)),b.promise},onRegisterApi:function(b){a.gridApi=b,a.gridApi.grid.registerDataChangeCallback(function(){v(a.gridApi.core.getVisibleRows(a.gridApi.grid).length)}),a.gridApi.treeBase.on.rowExpanded(a,function(b){v(a.gridApi.core.getVisibleRows(a.gridApi.grid).length+b.treeNode.children.length)}),a.gridApi.treeBase.on.rowCollapsed(a,function(b){v(a.gridApi.core.getVisibleRows(a.gridApi.grid).length-b.treeNode.children.length)}),a.gridApi.core.on.sortChanged(a,function(a,b){0===b.length?u.order=null:u.order=b[0].name+" "+b[0].sort.direction.toUpperCase(),p()}),a.gridApi.pagination.on.paginationChanged(a,function(a,b){u.offset=(a-1)*b,u.limit=b,p()}),a.gridApi.core.on.filterChanged(a,function(){var a=this.grid;a.columns.forEach(function(a){a.filters[0].term?u[a.name]=a.filters[0].term:delete u[a.name]}),p()})}},p(),s(),t(),o(function(){q()})};var v=function(a){var b=a?30*a+130:270;angular.element(document.getElementsByClassName("ui-grid")[0]).css("height",b+"px"),angular.element(document.getElementsByClassName("ui-grid-viewport")).css("height",30*a+"px")};a.$on("$destroy",function(){e.unsyncUpdates("agent"),e.unsyncUpdates("user_has_voice_queue")}),a.pause=function(b,c,e){return e&&(a.pauseType=null),i.save({name:c,agent:b,type:e||"DEFAULT PAUSE",data4:e||"DEFAULT PAUSE",channel:"voice"}).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){f.error(a)})},a.joinQueue=function(e){var g=c.open({animation:!0,templateUrl:"app/channels/voice/realtime/view/agent/queue.modal.add.html",controller:"VoiceRealtimeViewAgentQueueModalCtrl",resolve:{queues:function(){return _.reject(a.voiceQueues,function(b){return!!_.find(a.gridOptions.data,{queue:b.name,isAgent:!1,agentId:e})})}}});g.result.then(function(a){return i.save({name:"QueueAdd",agent:e,queues:a.queues,channel:"voice",data1:e,data3:a.queues.join(","),data4:"voice"}).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){f.error(a)})},function(){b.info("Modal dismissed at: "+new Date)})},a.leaveQueue=function(a,b){return i.save({name:"QueueRemove",agent:a,queue:b,channel:"voice",data1:a,data3:b,data4:"voice"}).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){f.error(a)})},a.showInfo=function(a){c.open({animation:!0,templateUrl:"app/channels/voice/realtime/view/agent/agent.modal.info.html",controller:"VoiceRealtimeViewAgentInfoModalCtrl",resolve:{agent:a}})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.realtime.view.agents",{url:"/agents",templateUrl:"app/channels/voice/realtime/view/agent/agent.html",controller:"VoiceRealtimeViewAgentCtrl"})}]),angular.module("xCallyShuttleApp").controller("VoiceRealtimeViewAgentInfoModalCtrl",["$scope","$uibModalInstance","agent",function(a,b,c){a.agent=c,a.close=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("VoiceRealtimeViewAgentQueueModalCtrl",["$scope","$uibModalInstance","$http","queues",function(a,b,c,d){a.queues=d,a.item={},a.save=function(){b.close(a.item)},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("VoiceRealtimeViewOutboundCtrl",["$scope","$log","$uibModal","$translate","socket","xAlert","ReportDial","Pause","Action","usSpinnerService","$q","uiGridConstants","$timeout","Auth",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n){function o(){return j.spin("spinner-grid"),g.get({controller:"active",controller2:"calls"}).$promise.then(function(b){a.gridOptions.data=b.rows})["catch"](function(a){f.error(a)})["finally"](function(){p(),j.stop("spinner-grid")})}function p(){e.socket.on("report_dial:save",function(b){a.gridOptions.data.unshift(b)}),e.socket.on("report_dial:update",function(b){var c=_.find(a.gridOptions.data,{id:b.id});c&&(_.merge(c,b),!b.endtime||b.answertime&&b.answertime==b.endtime||m(function(){_.remove(a.gridOptions.data,{id:b.id})},1e4))})}a.moment=moment,a.initDials=function(){a.gridOptions={paginationPageSizes:[10,25,50,75],paginationPageSize:10,headerCellFilter:"translate",enableHorizontalScrollbar:0,enableVerticalScrollbar:0,enableFiltering:!0,columnDefs:[{name:"uniqueid",displayName:"APPLICATION_UNIQUEID",headerCellFilter:"translate",cellClass:"text-center"},{name:"agent",displayName:"APPLICATION_AGENT",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{row.entity.channel.split('/')[1].split('-')[0]}}</div>"},{name:"calleridnum",displayName:"APPLICATION_CALLERID",headerCellFilter:"translate",cellClass:"text-center"},{name:"dialstring",cellClass:"text-center"},{name:"status",displayName:"APPLICATION_STATUS",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div><span data-ng-if="!row.entity.endtime">{{\'APPLICATION_RINGING\' | translate}}</span><span data-ng-if="row.entity.answertime && row.entity.answertime == row.entity.endtime">{{\'APPLICATION_TALKING\' | translate}}</span><span data-ng-if="row.entity.answertime && row.entity.answertime != row.entity.endtime">{{\'APPLICATION_COMPLETE\' | translate}}</span><span data-ng-if="row.entity.endtime && !row.entity.answertime">{{\'APPLICATION_\'+row.entity.dialstatus | translate}}</span><span data-ng-if="(!row.entity.endtime && !row.entity.answertime) || (row.entity.answertime && row.entity.answertime == row.entity.endtime)"> [<css-timer start-time="row.entity.updatedAt"></css-timer>]</div>',enableSorting:!1,enableColumnMenu:!1,enableFiltering:!1}],data:[],gridMenuTitleFilter:function(a){var b=k.defer();return b.resolve(d.instant(a)),b.promise},onRegisterApi:function(b){a.gridApi=b,a.gridApi.grid.registerDataChangeCallback(function(){q(a.gridOptions.data.length)})}},o()};var q=function(a){var b=a?30*a+100:270;angular.element(document.getElementsByClassName("ui-grid")[0]).css("height",b+"px"),angular.element(document.getElementsByClassName("ui-grid-viewport")).css("height",30*a+"px")};a.$on("$destroy",function(){e.unsyncUpdates("report_dial")})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.realtime.view.outbound",{url:"/outbound",templateUrl:"app/channels/voice/realtime/view/outbound/outbound.html",controller:"VoiceRealtimeViewOutboundCtrl"})}]),angular.module("xCallyShuttleApp").controller("VoiceRealtimeViewParameterCtrl",["$scope","$translate","Dashboard","VoiceQueue","Auth","socket","uiGridConstants",function(a,b,c,d,e,f,g){function h(a){var b=a?30*a+150:270;angular.element(document.getElementsByClassName("ui-grid")[0]).css("height",b+"px"),angular.element(document.getElementsByClassName("ui-grid-viewport")).css("height",30*a+"px")}function i(b){var c=_.find(a.gridOptions.data,{name:b.name});c&&(_.merge(c,b),a.$apply())}var j={offset:0,limit:10};a.initParameters=function(){var b;switch(a.user=e.getCurrentUser(),a.$on("$destroy",function(){b&&(b.terminate(),f.socket.removeAllListeners("dashboard:voice:init"),f.socket.removeAllListeners("dashboard:voice:waiting"),f.socket.removeAllListeners("dashboard:voice:active"),f.socket.removeAllListeners("dashboard:voice:complete"),f.socket.removeAllListeners("dashboard:voice:abandon"),f.socket.removeAllListeners("dashboard:voice:unmanaged"),f.socket.removeAllListeners("dashboard:voice:holdtime"),f.socket.removeAllListeners("dashboard:voice:talktime"))}),a.user.role){case"admin":c.get({id:"voice",controller:"init"}).$promise.then(function(b){for(var c in b.queues)b.queues[c].waiting=b.queues[c].waiting||0,b.queues[c].active=b.queues[c].active||0,b.queues[c].complete=b.queues[c].complete||0,b.queues[c].abandon=b.queues[c].abandon||0,b.queues[c].unmanaged=b.queues[c].unmanaged||0,b.queues[c].holdtime=b.queues[c].holdtime||0,b.queues[c].talktime=b.queues[c].talktime||0,a.gridOptions.data.push(b.queues[c])})["catch"](function(a){console.error(a)});break;case"user":c.get({id:"voice",controller:"init"}).$promise.then(function(b){for(var c in b.queues){var d=_.find(a.user.PVoiceQueues,{name:c});d&&(b.queues[c].waiting=b.queues[c].waiting||0,b.queues[c].active=b.queues[c].active||0,b.queues[c].complete=b.queues[c].complete||0,b.queues[c].abandon=b.queues[c].abandon||0,b.queues[c].unmanaged=b.queues[c].unmanaged||0,b.queues[c].holdtime=b.queues[c].holdtime||0,b.queues[c].talktime=b.queues[c].talktime||0,a.gridOptions.data.push(b.queues[c]))}})["catch"](function(a){console.error(a)})}f.socket.on("dashboard:voice:waiting",function(a){i(a)}),f.socket.on("dashboard:voice:active",function(a){i(a)}),f.socket.on("dashboard:voice:complete",function(a){i(a)}),f.socket.on("dashboard:voice:abandon",function(a){i(a)}),f.socket.on("dashboard:voice:unmanaged",function(a){i(a)}),f.socket.on("dashboard:voice:talktime",function(a){i(a)}),f.socket.on("dashboard:voice:holdtime",function(a){i(a)})},a.gridOptions={headerCellFilter:"translate",enableHorizontalScrollbar:0,enableVerticalScrollbar:0,enableFiltering:!0,enableSorting:!0,showGridFooter:!0,paginationPageSizes:[10,25,50,75],paginationPageSize:10,columnDefs:[{name:"name",displayName:"APPLICATION_QUEUE",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter"},{name:"waiting",displayName:"APPLICATION_WAITING",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1},{name:"active",displayName:"APPLICATION_ACTIVE",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1},{name:"complete",displayName:"APPLICATION_ANSWERED",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",enableSorting:!1,enableColumnMenu:!1,filters:[{condition:g.filter.GREATER_THAN_OR_EQUAL,placeholder:"from"},{condition:g.filter.LESS_THAN_OR_EQUAL,placeholder:"to"}]},{name:"abandon",displayName:"APPLICATION_ABANDONED",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",enableSorting:!1,enableColumnMenu:!1,filters:[{condition:g.filter.GREATER_THAN_OR_EQUAL,placeholder:"from"},{condition:g.filter.LESS_THAN_OR_EQUAL,placeholder:"to"}]},{name:"unmanaged",displayName:"APPLICATION_UNMANAGED",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",enableSorting:!1,enableColumnMenu:!1,filters:[{condition:g.filter.GREATER_THAN_OR_EQUAL,placeholder:"from"},{condition:g.filter.LESS_THAN_OR_EQUAL,placeholder:"to"}]},{name:"holdtime",displayName:"APPLICATION_HOLDTIME",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{row.entity.holdtime | secToTime | date:'HH:mm:ss'}}</div>",enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1},{name:"talktime",displayName:"APPLICATION_TALKTIME",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{row.entity.talktime | secToTime | date:'HH:mm:ss'}}</div>",enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1},{name:"totalCalls",displayName:"APPLICATION_TOTAL_CALLS",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{row.entity.complete + row.entity.abandon + row.entity.unmanaged}}</div>",enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1}],data:[],onRegisterApi:function(b){a.gridApi=b,a.gridApi.core.on.sortChanged(a,function(a,b){0===b.length?j.order=null:j.order=b[0].name+" "+b[0].sort.direction.toUpperCase()}),a.gridApi.pagination.on.paginationChanged(a,function(a,b){h(b),j.offset=(a-1)*b,j.limit=b}),a.gridApi.core.on.filterChanged(a,function(){var a=this.grid;a.columns.forEach(function(a){a.filters.length>1?a.filters.forEach(function(b){b.term?64===b.condition?j[a.name+"_uiFrom"]=b.term:256===b.condition&&(j[a.name+"_uiTo"]=b.term):64===b.condition?delete j[a.name+"_uiFrom"]:256===b.condition&&delete j[a.name+"_uiTo"]}):a.filters.length&&a.filters[0].term?j[a.name]=a.filters[0].term:delete j[a.name]})})}}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.realtime.view.parameters",{url:"/parameters",templateUrl:"app/channels/voice/realtime/view/parameter/parameter.html",controller:"VoiceRealtimeViewParameterCtrl"})}]),angular.module("xCallyShuttleApp").controller("VoiceRealtimeViewQueueCtrl",["$scope","$log","$uibModal","$translate","socket","xAlert","VoiceQueue","usSpinnerService","$q","uiGridConstants","Auth",function(a,b,c,d,e,f,g,h,i,j,k){function l(b){return h.spin("spinner-grid"),g.get(o).$promise.then(function(b){a.gridOptions.totalItems=b.count,a.gridOptions.data=[],b.rows.forEach(function(a){n(a)})})["catch"](function(a){f.error(a)})["finally"](function(){b&&m(),h.stop("spinner-grid")})}function m(){e.socket.on("voice_queue:save",function(b){var c=_.find(a.gridOptions.data,{ -queueName:b.name});c||l()}),e.socket.on("voice_queue:remove",function(b){_.remove(a.gridOptions.data,{queueId:b.id})}),e.socket.on("user_has_voice_queue:save",function(b){var c=_.find(a.gridOptions.data,{agentId:b.UserId,queue:b.queue});if(!c&&b.logged){var d=_.find(a.gridOptions.data,{queueName:b.queue}),e=a.gridOptions.data.indexOf(d);a.gridOptions.data.splice(e+1,0,{isAgent:!0,agent:b.membername,callstaken:b.callstaken?b.callstaken:0,lastcall:b.lastcall,status:b.statusdesc,paused:b.paused,reason:b.reason,agentId:b.UserId,queue:b.queue})}else c&&!b.logged?_.remove(a.gridOptions.data,{agentId:b.UserId,queue:b.queue}):c&&b.logged&&userHasQueue&&(c.callstaken=b.callstaken?b.callstaken:0,c.lastcall=b.lastcall,c.status=b.statusdesc,c.paused=b.paused,c.reason=b.reason)}),e.socket.on("user_has_voice_queue:remove",function(b){_.remove(a.gridOptions.data,{agentId:b.UserId,queue:b.queue})})}function n(b){a.gridOptions.data.push({name:b.name,$$treeLevel:0,queueName:b.name}),b.Users.forEach(function(b){b.UserHasVoiceQueue.logged&&a.gridOptions.data.push({isAgent:!0,agent:b.UserHasVoiceQueue.membername,callstaken:b.UserHasVoiceQueue.callstaken?b.UserHasVoiceQueue.callstaken:0,lastcall:b.UserHasVoiceQueue.lastcall,status:b.UserHasVoiceQueue.statusdesc,paused:b.UserHasVoiceQueue.paused,reason:b.UserHasVoiceQueue.reason,agentId:b.UserHasVoiceQueue.UserId,queue:b.UserHasVoiceQueue.queue})})}var o={controller:"realtime",controller2:"voice",offset:0,limit:10};a.moment=moment,a.initQueues=function(){a.gridOptions={enableGridMenu:!0,headerCellFilter:"translate",enableHorizontalScrollbar:0,enableVerticalScrollbar:0,enableFiltering:!0,showGridFooter:!0,paginationPageSizes:[10,25,50,75],paginationPageSize:10,useExternalPagination:!0,useExternalSorting:!0,useExternalFiltering:!0,multiSelect:!0,showTreeExpandNoChildren:!0,columnDefs:[{name:"name",displayName:"APPLICATION_QUEUE",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter"},{name:"agent",displayName:"APPLICATION_AGENT_NAME",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter"},{name:"callstaken",displayName:"APPLICATION_CALLS_TAKEN",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div data-ng-if="row.entity.isAgent">{{row.entity.callstaken}}</div>'},{name:"lastcall",displayName:"APPLICATION_LAST_CALL",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div data-ng-if=\"row.entity.isAgent\">{{row.entity.lastcall | date:'yyyy-MM-dd HH:mm:ss'}}</div>"},{name:"status",displayName:"APPLICATION_STATUS",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div data-ng-if=\"row.entity.isAgent\">{{'APPLICATION_'+row.entity.status | translate}}</div>"},{name:"paused",displayName:"APPLICATION_PAUSED",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div data-ng-if=\"row.entity.isAgent\">{{(row.entity.paused ? 'APPLICATION_YES' : 'APPLICATION_NO') | translate}}</div>"},{name:"reason",displayName:"APPLICATION_REASON",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div data-ng-if="row.entity.isAgent && row.entity.paused">{{row.entity.reason}}</div>'}],data:[],gridMenuTitleFilter:function(a){var b=i.defer();return b.resolve(d.instant(a)),b.promise},onRegisterApi:function(b){a.gridApi=b,a.gridApi.grid.registerDataChangeCallback(function(){p(a.gridApi.core.getVisibleRows(a.gridApi.grid).length)}),a.gridApi.treeBase.on.rowExpanded(a,function(b){p(a.gridApi.core.getVisibleRows(a.gridApi.grid).length+b.treeNode.children.length)}),a.gridApi.treeBase.on.rowCollapsed(a,function(b){p(a.gridApi.core.getVisibleRows(a.gridApi.grid).length-b.treeNode.children.length)}),a.gridApi.core.on.sortChanged(a,function(a,b){0===b.length?o.order=null:o.order=b[0].name+" "+b[0].sort.direction.toUpperCase(),l()}),a.gridApi.pagination.on.paginationChanged(a,function(a,b){o.offset=(a-1)*b,o.limit=b,l()}),a.gridApi.core.on.filterChanged(a,function(){var a=this.grid;a.columns.forEach(function(a){a.filters[0].term?o[a.name]=a.filters[0].term:delete o[a.name]}),l()})}},l(!0)};var p=function(a){var b=a?30*a+130:270;angular.element(document.getElementsByClassName("ui-grid")[0]).css("height",b+"px"),angular.element(document.getElementsByClassName("ui-grid-viewport")).css("height",30*a+"px")};a.$on("$destroy",function(){e.unsyncUpdates("voice_queue"),e.unsyncUpdates("user_has_voice_queue")})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.realtime.view.queues",{url:"/queues",templateUrl:"app/channels/voice/realtime/view/queue/queue.html",controller:"VoiceRealtimeViewQueueCtrl"})}]),angular.module("xCallyShuttleApp").controller("VoiceRealtimeViewQueueCallsCtrl",["$scope","$log","$uibModal","$translate","socket","xAlert","ReportQueue","Pause","Action","usSpinnerService","$q","uiGridConstants","$timeout",function(a,b,c,d,e,f,g,h,i,j,k,l,m){function n(){return j.spin("spinner-grid"),g.get({controller:"waiting",controller2:"calls"}).$promise.then(function(b){a.gridOptions.data=b.rows})["catch"](function(a){f.error(a)})["finally"](function(){o(),j.stop("spinner-grid")})}function o(){e.socket.on("report_queue:save",function(b){a.gridOptions.data.unshift(b)}),e.socket.on("report_queue:update",function(b){var c=_.find(a.gridOptions.data,{id:b.id});if(c){var d={queuecallerabandon:b.queuecallerabandon,queuecallerleave:b.queuecallerleave};delete b.queuecallerabandon,delete b.queuecallerleave,_.merge(c,b),d.queuecallerabandon&&(c.queuecallerabandon=d.queuecallerabandon),d.queuecallerleave&&(c.queuecallerleave=d.queuecallerleave),(c.queuecallerabandon||c.queuecallercomplete)&&m(function(){_.remove(a.gridOptions.data,{id:b.id})},3e3)}})}a.moment=moment,a.initQueues=function(){a.gridOptions={headerCellFilter:"translate",paginationPageSizes:[10,25,50,75],paginationPageSize:10,enableHorizontalScrollbar:0,enableVerticalScrollbar:0,enableFiltering:!0,columnDefs:[{name:"queue",displayName:"APPLICATION_QUEUE",headerCellFilter:"translate"},{name:"status",displayName:"APPLICATION_STATUS",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div><span data-ng-if="!row.entity.queuecallerleaveAt">{{\'APPLICATION_QUEUESTATUS_WAITING\' | translate}}</span><span data-ng-if="row.entity.queuecallerleaveAt && !row.entity.queuecallerabandon && !row.entity.queuecallercomplete">{{\'APPLICATION_ACTIVE\' | translate}}</span><span data-ng-if="row.entity.queuecallerleaveAt && row.entity.queuecallerabandon">{{\'APPLICATION_QUEUESTATUS_ABANDON\' | translate}}</span><span data-ng-if="row.entity.queuecallerleaveAt && row.entity.queuecallercomplete">{{\'APPLICATION_QUEUESTATUS_COMPLETE\' | translate}}</span><span data-ng-if="!row.entity.queuecallercomplete && !row.entity.queuecallerabandon"> [<css-timer start-time="row.entity.updatedAt"></css-timer>]</div>',enableSorting:!1,enableColumnMenu:!1,enableFiltering:!1},{name:"caller",displayName:"APPLICATION_CALLER",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{row.entity.calleridnum || ''}} {{row.entity.calleridname || ''}}</div>",enableSorting:!1,enableColumnMenu:!1,enableFiltering:!1},{name:"position",displayName:"APPLICATION_POSITION",headerCellFilter:"translate"},{name:"lastAssignedTo",displayName:"APPLICATION_AGENT",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",enableSorting:!1,enableColumnMenu:!1,enableFiltering:!1}],data:[],gridMenuTitleFilter:function(a){var b=k.defer();return b.resolve(d.instant(a)),b.promise},onRegisterApi:function(b){a.gridApi=b,a.gridApi.grid.registerDataChangeCallback(function(){p(a.gridOptions.data.length)})}},n()};var p=function(a){var b=a?30*a+100:270;angular.element(document.getElementsByClassName("ui-grid")[0]).css("height",b+"px"),angular.element(document.getElementsByClassName("ui-grid-viewport")).css("height",30*a+"px")};a.$on("$destroy",function(){e.unsyncUpdates("report_queue")})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.realtime.view.queuecalls",{url:"/queuecalls",templateUrl:"app/channels/voice/realtime/view/queuecalls/queuecalls.html",controller:"VoiceRealtimeViewQueueCallsCtrl"})}]),angular.module("xCallyShuttleApp").controller("VoiceRealtimeViewTelephoneCtrl",["$scope","$log","$uibModal","$translate","socket","xAlert","Telephone","Pause","Action","usSpinnerService","$q","uiGridConstants","$timeout",function(a,b,c,d,e,f,g,h,i,j,k,l,m){function n(){return j.spin("spinner-grid"),g.get(p).$promise.then(function(b){a.gridOptions.totalItems=b.count,a.gridOptions.data=b.rows})["catch"](function(a){f.error(a)})["finally"](function(){j.stop("spinner-grid")})}function o(){e.socket.on("agent:save",function(b){var c=_.find(a.gridOptions.data,{id:b.id});c&&(c.status=b.status,c.statusAt=b.statusAt,c.ipaddr=b.ipaddr,c.port=b.port,c.fullcontact=b.fullcontact,c.useragent=b.useragent,c.lastms=b.lastms,c.internal=b.internal)}),e.socket.on("agent:remove",function(b){_.remove(a.gridOptions.data,{id:b.id})})}var p={offset:0,limit:10};a.moment=moment,a.initTelephones=function(){a.gridOptions={enableGridMenu:!0,headerCellFilter:"translate",enableHorizontalScrollbar:0,enableVerticalScrollbar:0,enableFiltering:!0,showGridFooter:!0,paginationPageSizes:[10,25,50,75],paginationPageSize:10,useExternalPagination:!0,useExternalSorting:!0,useExternalFiltering:!0,multiSelect:!0,showTreeExpandNoChildren:!0,columnDefs:[{name:"name",displayName:"APPLICATION_TELEPHONE",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{row.entity.name}} <{{row.entity.internal}}></div>"},{name:"status",displayName:"APPLICATION_PHONE_STATUS",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{'APPLICATION_'+row.entity.status | translate}} <span data-ng-if=\"row.entity.statusAt && (row.entity.status === 'BUSY' || row.entity.status === 'ONHOLD' || row.entity.status === 'INUSE')\">(<css-timer start-time=\"row.entity.statusAt\"></css-timer>)</span></span></div>",filter:{type:l.filter.SELECT,selectOptions:[{value:"UNKNOWN",label:d.instant("APPLICATION_UNKNOWN")},{value:"NOT_INUSE",label:d.instant("APPLICATION_NOT_INUSE")},{value:"INUSE",label:d.instant("APPLICATION_INUSE")},{value:"BUSY",label:d.instant("APPLICATION_BUSY")},{value:"INVALID",label:d.instant("APPLICATION_INVALID")},{value:"UNAVAILABLE",label:d.instant("APPLICATION_UNAVAILABLE")},{value:"RINGING",label:d.instant("APPLICATION_RINGING")},{value:"RINGINUSE",label:d.instant("APPLICATION_RINGINUSE")},{value:"ONHOLD",label:d.instant("APPLICATION_ONHOLD")}]}},{name:"action",displayName:"",width:170,cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div><button class="btn btn-xs blue-madison" data-ng-click="grid.appScope.showInfo(row.entity)"><i class="icon-info"></i></button><div>',enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1}],data:[],gridMenuTitleFilter:function(a){var b=k.defer();return b.resolve(d.instant(a)),b.promise},onRegisterApi:function(b){a.gridApi=b,a.gridApi.grid.registerDataChangeCallback(function(){q(a.gridOptions.data.length)}),a.gridApi.core.on.sortChanged(a,function(a,b){0===b.length?p.order=null:p.order=b[0].name+" "+b[0].sort.direction.toUpperCase(),n()}),a.gridApi.pagination.on.paginationChanged(a,function(a,b){p.offset=(a-1)*b,p.limit=b,n()}),a.gridApi.core.on.filterChanged(a,function(){var a=this.grid;a.columns.forEach(function(a){a.filters[0].term?p[a.name]=a.filters[0].term:delete p[a.name]}),n()})}},n(),m(function(){o()})};var q=function(a){var b=a?30*a+130:270;angular.element(document.getElementsByClassName("ui-grid")[0]).css("height",b+"px"),angular.element(document.getElementsByClassName("ui-grid-viewport")).css("height",30*a+"px")};a.$on("$destroy",function(){e.unsyncUpdates("agent")}),a.showInfo=function(a){c.open({animation:!0,templateUrl:"app/channels/voice/realtime/view/telephone/telephone.modal.info.html",controller:"VoiceRealtimeViewTelephoneInfoModalCtrl",resolve:{telephone:a}})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.realtime.view.telephones",{url:"/telephones",templateUrl:"app/channels/voice/realtime/view/telephone/telephone.html",controller:"VoiceRealtimeViewTelephoneCtrl",data:{permissions:{only:["admin","user"],redirectTo:"main.dashboard.voice"}}})}]),angular.module("xCallyShuttleApp").controller("VoiceRealtimeViewTelephoneInfoModalCtrl",["$scope","$uibModalInstance","$http","telephone",function(a,b,c,d){a.telephone=d,a.close=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("VoiceRealtimeViewCtrl",["$scope","Auth",function(a,b){a.Auth=b}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.realtime.view",{url:"/view",templateUrl:"app/channels/voice/realtime/view/view.html",controller:"VoiceRealtimeViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]}])}]}})}]),angular.module("xCallyShuttleApp").controller("VoiceRecordingListCtrl",["$scope","$translate","$sce","Recording","gridOptions","xAlert","uiGridConstants","Auth",function(a,b,c,d,e,f,g,h){a.Recording=d,a.updateRating=function(a,c){return d.update({id:a,rating:c}).$promise.then(function(){f.show(b.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){f.error(a)})},a.initView=function(){var b={exporterCsvFilename:"recordings.csv",rowHeight:30,primaryKey:"id",columnDefs:[{name:"uniqueid"},{name:"customerPhone",displayName:"APPLICATION_CUSTOMER_PHONE",cellClass:"text-center ui-grid-vcenter"},{name:"membername"},{name:"type",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div><i data-ng-class=\"{'icon-call-in font-green':row.entity.type === 'inbound','icon-call-out font-red':row.entity.type === 'outbound','icon-question':row.entity.type === 'unknown','icon-earphones font-purple':row.entity.type === 'internal'}\"></i></div>",filter:{type:g.filter.SELECT,selectOptions:[{value:"inbound",label:"Inbound"},{value:"internal",label:"Internal"},{value:"outbound",label:"Outbound"},{value:"unknown",label:"Unknown"}]}},{name:"queue"},{name:"createdAt",displayName:"APPLICATION_DATE",headerCellFilter:"translate",filterHeaderTemplate:'<div class="ui-grid-filter-container row"><div ng-repeat="colFilter in col.filters" class="col-md-6 col-md-offset-0 col-sm-5 col-sm-offset-0 col-xs-5 col-xs-offset-0"><div custom-grid-date-filter-header></div></div></div>',filters:[{name:"From",condition:g.filter.GREATER_THAN_OR_EQUAL},{name:"To",condition:g.filter.LESS_THAN_OR_EQUAL}],sort:{direction:g.DESC,priority:0}},{name:"rating",filter:{type:g.filter.SELECT,selectOptions:[{value:1,label:"1"},{value:2,label:"2"},{value:3,label:"3"},{value:4,label:"4"},{value:5,label:"5"}]},cellClass:"ui-grid-vcenter",width:"100",cellTemplate:'<div><uib-rating data-ng-model="row.entity.rating" data-ng-click="grid.appScope.updateRating(row.entity.id, row.entity.rating)" aria-labelledby="default-rating"></uib-rating></div>'},{name:"audio",displayName:"",width:100,enableSorting:!1,enableFiltering:!1,cellClass:"ui-grid-vcenter",cellTemplate:"<div><audio-file-download data-ng-if=\"row.entity.value.split('.').pop() == 'wav'\" params=\"{id:row.entity.id,controller:'stream'}\" resource=\"grid.appScope.Recording\"></audio-file-download><span data-ng-if=\"row.entity.value.split('.').pop() == 'gsm'\" title=\"{{'MESSAGE_GSM_PREVIEW_NOT_SUPPORTED' | translate}}\">{{'MESSAGE_GSM_PREVIEW_NOT_SUPPORTED' | translate}}</span></div>"},{name:"action",width:80,buttons:[{directive:"<motion-file-download params=\"{id:row.entity.id,controller:'stream'}\" resource=\"grid.appScope.Recording\" mimetype=\"'audio/'+row.entity.value.split('.').pop()\" btnclass=\"btn btn-xs blue-hoki\" filename=\"row.entity.uniqueid+'.'+row.entity.value.split('.').pop()\"></motion-file-download>"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.uniqueid, row.entity.id)",hide:!h.isAdmin()}]}]};a.gridOptions=e.gridOptions(d,b,a)}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.recordings.list",{url:"/list",templateUrl:"app/channels/voice/recording/list/list.html",controller:"VoiceRecordingListCtrl"})}]),angular.module("xCallyShuttleApp").factory("Recording",["$resource",function(a){return a("/api/voice/recordings/:id/:controller",{id:"@id"},{update:{method:"PUT"},patch:{method:"PATCH"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.recordings",{url:"/recordings",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user","agent"],redirectTo:"landing",id:25}}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.routes.inbound",{url:"/inbound",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("VoiceRouteInboundListCreateCtrl",["$scope","$uibModalInstance","Route","application","xAlert","$location","$translate",function(a,b,c,d,e,f,g){a.$application=d.application,a.forms={route:void 0},a.item={type:"inbound",appdata:"Inbound Call",context:"from-voip-provider"},a.ok=function(){return a.item.exten=a.$application.checkUnderscore(a.item.exten),c.save(a.item).$promise.then(function(a){b.close(a),f.path("/channels/voice/routes/inbound/view/"+a.id+"/applications")})["catch"](function(a){console.log(a),e.error(a)})},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("VoiceRouteInboundListCtrl",["$scope","$http","socket","$translate","$rootScope","xAlert","Modal","stResource","gridOptions","Route","$uibModal","$location","$log",function(a,b,c,d,e,f,g,h,i,j,k,l,m){a.initView=function(){var b={exporterCsvFilename:"InboundRoutes.csv",columnDefs:[{name:"exten",displayName:"APPLICATION_PHONE_NUMBER"},{name:"description"},{name:"applications",cellClass:"ui-grid-vcenter",cellTemplate:'<div data-ng-if="row.entity.Applications.length"><span data-ng-repeat="app in row.entity.Applications | limitTo:2">{{app.app}}({{app.appdata[0]}}), </span>...</div><div data-ng-if="!row.entity.Applications.length">{{\'MESSAGE_NO_AVAILABLE_APPLICATIONS\' | translate}}</div>',enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1},{name:"action",width:75,buttons:[{"class":"blue-hoki",href:"/channels/voice/routes/inbound/view/{{row.entity.id}}/settings",name:"settings"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.exten, row.entity.id)"}]}]};a.gridOptions=i.gridOptions(j,b,a,{type:"inbound"})},a.create=function(){k.open({animation:!0,templateUrl:"app/channels/voice/route/inbound/list/create.modal.html",controller:"VoiceRouteInboundListCreateCtrl"})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.routes.inbound.list",{url:"/list",templateUrl:"app/channels/voice/route/inbound/list/list.html",controller:"VoiceRouteInboundListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"smart-table",insertBefore:"#ng_load_plugins_before",files:["assets/css/smart_table.css"]}])}]}})}]),angular.module("xCallyShuttleApp").controller("VoiceRouteInboundViewCtrl",["$scope","$translate","$stateParams","socket","$location","WizardHandler","Modal","xAlert","application","interval","Route","VoiceQueue","Sound","SquareProject","VoiceContext","Interval","VoiceMail","User","Agent","Telephone","Trunk","Team",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v){function w(b){var c,d;if("always"===b.intType)c=null,d="*,*,*,*";else if("list"===b.intType)d=b.IntervalId?_.find(a.Intervals,{id:b.IntervalId}).name:"*,*,*,*",c=b.IntervalId||null;else if("custom"===b.intType){c=null;var e,f,g,h;e=b.t_from&&b.t_to&&!b.alwaysTime?moment(b.t_from).format("HH:mm")+"-"+moment(b.t_to).format("HH:mm"):"*",b.wd_from&&"always"!==b.wd_from?(f=b.wd_from,b.wd_to&&"always"!==b.wd_to&&(f+="-"+b.wd_to)):f="*",b.md_from&&"always"!==b.md_from?(g=b.md_from,b.md_to&&"always"!==b.md_to&&(g+="-"+b.md_to)):g="*",b.m_from&&"always"!==b.m_from?(h=b.m_from,b.m_to&&"always"!==b.m_to&&(h+="-"+b.m_to)):h="*",d=e+","+f+","+g+","+h}void 0===a.selectedApp?(a.application.interval=d,a.application.IntervalId=c):(a.route.Applications[a.selectedApp].interval=d,a.route.Applications[a.selectedApp].IntervalId=c)}function x(){if(a.interval.intType=a.route.Applications[a.selectedApp].IntervalId?"list":"*,*,*,*"===a.route.Applications[a.selectedApp].interval?"always":"custom",a.interval.IntervalId=a.route.Applications[a.selectedApp].IntervalId,!a.route.Applications[a.selectedApp].IntervalId){var b,c=a.route.Applications[a.selectedApp].interval?a.route.Applications[a.selectedApp].interval.split(","):["*","*","*","*"];c.forEach(function(c,d){switch(d){case 0:"*"!==c?(b=c.split("-"),a.interval.t_from=moment(b[0],"HH:mm"),a.interval.t_to=moment(b[1],"HH:mm"),a.interval.alwaysTime=!1):(a.interval.t_from=moment(new Date),a.interval.t_to=moment(new Date),a.interval.alwaysTime=!0);break;case 1:"*"!==c?(b=c.split("-"),a.interval.wd_from=b[0],a.interval.wd_to=b[1]?b[1]:"always"):(a.interval.wd_from="always",a.interval.wd_to="always");break;case 2:"*"!==c?(b=c.split("-"),a.interval.md_from=b[0],a.interval.md_to=b[1]?b[1]:"always"):(a.interval.md_from="always",a.interval.md_to="always");break;case 3:"*"!==c?(b=c.split("-"),a.interval.m_from=b[0],a.interval.m_to=b[1]?b[1]:"always"):(a.interval.m_from="always",a.interval.m_to="always")}})}}a.alwaysSwitch={isActive:!0,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.$translate=b,a.selectedApp=void 0,a.showGrid=!0,a.$application=i.application,a.$interval=j.interval,a.selectedRows=[],a._=_,a.gridOptions={enableHorizontalScrollbar:0,enableVerticalScrollbar:0,enableSorting:!1,rowTemplate:'<div grid="grid" class="ui-grid-draggable-row" draggable="true"><div ng-repeat="(colRenderIndex, col) in colContainer.renderedColumns track by col.colDef.name" class="ui-grid-cell" ng-class="{ \'ui-grid-row-header-cell\': col.isRowHeader, \'custom\': true }" ui-grid-cell></div></div>',columnDefs:[{name:"app",headerCellFilter:"translate",displayName:"APPLICATION_APPLICATION",enableColumnMenu:!1},{name:"appType",headerCellFilter:"translate",displayName:"APPLICATION_INFO",cellClass:"ui-grid-vcenter",cellTemplate:"<div>{{'APPLICATION_APPS_'+(row.entity.appType || (grid.appScope._.find(grid.appScope.$application.applications,{value:row.entity.app}) ? row.entity.app : 'custom')).toUpperCase() | translate}}</div>",enableColumnMenu:!1},{name:"appdata",headerCellFilter:"translate",displayName:"APPLICATION_ARGUMENTS",cellClass:"ui-grid-vcenter",cellTemplate:"<div>{{row.entity.appdata.join(',')}}</div>",enableColumnMenu:!1},{name:"interval",headerCellFilter:"translate",displayName:"APPLICATION_TIME_INTERVAL",enableColumnMenu:!1},{name:"action",enableColumnMenu:!1,headerCellFilter:"translate",displayName:"APPLICATION_ACTION",width:125,cellClass:"ui-grid-vcenter",cellTemplate:'<div><a class="btn btn-xs blue-hoki" data-ng-click="grid.appScope.openApplication(grid.appScope.gridOptions.data.indexOf(row.entity))"><i class="icon-settings"></i></a><a class="btn btn-xs red-sunglo" data-ng-click="grid.appScope.deleteApp(row.entity.app+\' application\', grid.appScope.gridOptions.data.indexOf(row.entity))"><i class="fa fa-trash"></i></a></div>'}],onRegisterApi:function(b){b.selection.on.rowSelectionChanged(a,function(b){b.isSelected?a.selectedRows.push(b.entity):_.pull(a.selectedRows,b.entity)}),b.selection.on.rowSelectionChangedBatch(a,function(b){b[0].isSelected?a.selectedRows=_.map(b,"entity"):a.selectedRows=[]}),b.draggableRows.on.rowDropped(a,function(b,c){a.updateRoute()}),b.grid.registerDataChangeCallback(function(){y(a.gridOptions.data.length)})}};var y=function(a){var b=a?30*a+120:177;angular.element(document.getElementsByClassName("ui-grid")[0]).css("height",b+"px")};a.initApplication=function(b){b&&(a.selectedApp=void 0),a.forms={settings:void 0,interval:void 0},a.application={},a.interval={intType:"always",t_from:moment(new Date),t_to:moment(new Date),wd_from:"always",wd_to:"always",md_from:"always",md_to:"always",m_from:"always",m_to:"always",alwaysTime:!0},a.main={app:""}},a.$watch("interval",function(a){a&&w(a)},!0),a.updateSetAppdata=function(){a.application.variable&&a.application.value&&"Set"===a.main.app.value?a.application.appdata[0]=a.application.variable+"="+a.application.value:a.application.appdata[0]=null},a.updateSetAppdataSettings=function(){a.application.variable&&a.application.value&&"Set"===a.main.app.value?a.route.Applications[a.selectedApp].appdata[0]=a.application.variable+"="+a.application.value:a.route.Applications[a.selectedApp].appdata[0]=null},a.$watch("main.app",function(b){if(b){var c,d,e={},f={};switch(void 0===a.selectedApp&&(a.application={appType:b.type,app:b.value,interval:a.application.interval||"*,*,*,*",appdata:[]}),b.value){case"Queue":c=l,d=m;break;case"Playback":c=m;break;case"AGI":c=n;break;case"Goto":c=o;break;case"Voicemail":c=q;break;case"Dial":switch(b.type){case"internalDial":c=r,e={controller:"all"};break;case"externalDial":c=u}}if(c)return c.get(e).$promise.then(function(b){a.items=b.rows}).then(function(){return d?d.get(f).$promise:void 0}).then(function(b){b&&(a.items2=b.rows)})["catch"](function(a){h.error(a)})}},!0),a.deselectAndRedirect=function(b){a.selectedApp=void 0,e.path(b)},a.initRingGroup=function(){var b,c,d;return void 0===a.selectedApp?a.usersArray=[]:a.usersArray=_.map(a.route.Applications[a.selectedApp].appdata[0].split("&"),function(a){return a.split("/")[1]}),r.get().$promise.then(function(a){return b=a,s.get().$promise}).then(function(a){return c=a,t.get().$promise}).then(function(e){d=e,ComponentsDropdowns.bindUserByRole(b,c,d,function(b){a.usersArray=_.union(b,a.usersArray),void 0===a.selectedApp?(a.application.appdata[0]=null,a.application.appdata[0]=_.map(a.usersArray,function(a){return"SIP/"+a}).join("&")):(a.route.Applications[a.selectedApp].appdata[0]=null,a.route.Applications[a.selectedApp].appdata[0]=_.map(a.usersArray,function(a){return"SIP/"+a}).join("&"))},function(b){a.usersArray=_.difference(a.usersArray,b),void 0===a.selectedApp?(a.application.appdata[0]=null,a.application.appdata[0]=_.map(a.usersArray,function(a){return"SIP/"+a}).join("&")):(a.route.Applications[a.selectedApp].appdata[0]=null,a.route.Applications[a.selectedApp].appdata[0]=_.map(a.usersArray,function(a){return"SIP/"+a}).join("&"))},a.route.Applications[a.selectedApp]?a.route.Applications[a.selectedApp].appdata:null)})["catch"](function(a){console.error(a)})},a.getIntervals=function(){return p.get().$promise.then(function(b){a.Intervals=b.rows,d.syncUpdates("interval",a.Intervals)})["catch"](function(a){h.error(a)})},a.getRoute=function(){return k.get({id:c.id}).$promise.then(function(b){a.route=b,a.gridOptions.data=b.Applications,y(a.gridOptions.data.length)})["catch"](function(a){e.path("/channels/voice/routes/inbound/list")})},a.getApplication=function(){if(void 0===a.selectedApp)e.path("/channels/voice/routes/inbound/list");else{if(a.showGrid=!0,a.route.Applications[a.selectedApp].appType)a.main.app=_.find(a.$application.applications,{type:a.route.Applications[a.selectedApp].appType});else{var b=_.find(a.$application.applications,{value:a.route.Applications[a.selectedApp].app});if(b)a.main.app=b;else{a.main.app=_.find(a.$application.applications,{type:"custom"});var c=a.route.Applications[a.selectedApp].appdata.join(",");a.route.Applications[a.selectedApp].appdata=[c],a.route.Applications[a.selectedApp].appType="custom"}}if("Set"===a.main.app.value){var d=a.route.Applications[a.selectedApp].appdata[0].split("=");a.application.variable=d[0],a.application.value=d[1]}x()}},a.openApplication=function(b){a.selectedApp=b,a.showGrid=!1,e.path("/channels/voice/routes/inbound/view/"+c.id+"/applications/settings")},a.updateRoute=function(d){return a.route.exten=a.$application.checkUnderscore(a.route.exten),_.forEach(a.route.Applications,function(a){if("custom"!==a.appType)switch(a.app){case"Dial":var b;switch(a.appType){case"externalDial":b=3;break;case"internalDial":b=2;break;default:b=2}a.appdata[b]=a.appdata[b]||"",a.appdata[b]+=(_.includes(a.appdata[b],"x")?"":"x")+(_.includes(a.appdata[b],"X")?"":"X");break;case"Queue":a.appdata[1]=a.appdata[1]||"",a.appdata[1]+=(_.includes(a.appdata[1],"x")?"":"x")+(_.includes(a.appdata[1],"X")?"":"X")}}),k.update({id:a.route.id},a.route).$promise.then(function(f){a.selectedApp=void 0,h.show(b.instant("MESSAGE_WELL_DONE")+"!","success"),d&&e.path("/channels/voice/routes/inbound/view/"+c.id+"/"+d)})["catch"](function(a){console.log(a),h.error(a)})},a.getContexts=function(){return o.get().$promise.then(function(b){a.voiceContexts=b.rows,d.syncUpdates("voice_context",a.voiceContexts)})["catch"](function(a){h.error(a)})},a.deleteApp=g.confirm["delete"](function(b){a.route.Applications.splice(b,1),a.updateRoute()}),a.deleteItems=g.confirm["delete"](function(){_.remove(a.route.Applications,function(b){return _.includes(a.selectedRows,b)}),a.selectedRows=[],a.updateRoute()}),a.addApplication=function(){a.route.Applications.push(a.application),a.updateRoute("applications")},a.goNext=function(){f.wizard().next()},a.previous=function(){f.wizard().previous()},a.formValidation=function(a){return a},a.$on("destroy",function(){d.unsyncUpdates("voice_extension")})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.routes.inbound.view",{url:"/view/:id",templateUrl:"app/channels/voice/route/inbound/view/view.html",controller:"VoiceRouteInboundViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.channels.voice.routes.inbound.view.settings",{url:"/settings",templateUrl:"app/channels/voice/route/inbound/view/view.settings.html"}).state("main.channels.voice.routes.inbound.view.applications",{url:"/applications",templateUrl:"app/channels/voice/route/inbound/view/view.applications.html"}).state("main.channels.voice.routes.inbound.view.application",{url:"/application",templateUrl:"app/channels/voice/route/view.application.html",resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/jquery-multi-select/css/multi-select.css","assets/plugins/jquery-multi-select/js/jquery.multi-select.js","assets/plugins/jquery-quicksearch/jquery.quicksearch.js","assets/scripts/components-dropdowns.js"]})}]}}).state("main.channels.voice.routes.inbound.view.applications.settings",{url:"/settings",templateUrl:"app/channels/voice/route/view.applicationSettings.html",resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/jquery-multi-select/css/multi-select.css","assets/plugins/jquery-multi-select/js/jquery.multi-select.js","assets/plugins/jquery-quicksearch/jquery.quicksearch.js","assets/scripts/components-dropdowns.js"]})}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.routes.internal",{url:"/internal",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("VoiceRouteInternalListCreateCtrl",["$scope","$uibModalInstance","Route","application","$location","$translate","xAlert",function(a,b,c,d,e,f,g){a.$application=d.application,a.forms={route:void 0},a.item={type:"internal",appdata:"Internal Call",context:"from-sip"},a.ok=function(){return a.item.exten=a.$application.checkUnderscore(a.item.exten),c.save(a.item).$promise.then(function(a){b.close(a),e.path("/channels/voice/routes/internal/view/"+a.id+"/applications")})["catch"](function(a){ -g.error(a)})},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("VoiceRouteInternalListCtrl",["$scope","$http","socket","$translate","$rootScope","xAlert","Modal","stResource","gridOptions","Route","$uibModal","$location","$log",function(a,b,c,d,e,f,g,h,i,j,k,l,m){a.initView=function(){var b={exporterCsvFilename:"InternalRoutes.csv",columnDefs:[{name:"exten",displayName:"APPLICATION_PHONE_NUMBER"},{name:"description"},{name:"applications",cellClass:"ui-grid-vcenter",cellTemplate:'<div data-ng-if="row.entity.Applications.length"><span data-ng-repeat="app in row.entity.Applications | limitTo:2">{{app.app}}({{app.appdata[0]}}),</span>...</div><div data-ng-if="!row.entity.Applications.length">{{\'MESSAGE_NO_AVAILABLE_APPLICATIONS\' | translate}}</div>',enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1},{name:"action",width:75,buttons:[{"class":"blue-hoki",href:"/channels/voice/routes/internal/view/{{row.entity.id}}/settings",name:"settings"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.exten, row.entity.id)"}]}]};a.gridOptions=i.gridOptions(j,b,a,{type:"internal"})},a.create=function(){k.open({animation:!0,templateUrl:"app/channels/voice/route/internal/list/create.modal.html",controller:"VoiceRouteInternalListCreateCtrl"})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.routes.internal.list",{url:"/list",templateUrl:"app/channels/voice/route/internal/list/list.html",controller:"VoiceRouteInternalListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"smart-table",insertBefore:"#ng_load_plugins_before",files:["assets/css/smart_table.css"]}])}]}})}]),angular.module("xCallyShuttleApp").controller("VoiceRouteInternalViewCtrl",["$scope","$translate","$stateParams","socket","$location","WizardHandler","Modal","xAlert","application","interval","Route","VoiceQueue","Sound","SquareProject","VoiceContext","Interval","VoiceMail","User","Agent","Telephone","Trunk",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u){function v(b){var c,d;if("always"===b.intType)c=null,d="*,*,*,*";else if("list"===b.intType)d=b.IntervalId?_.find(a.Intervals,{id:b.IntervalId}).name:"*,*,*,*",c=b.IntervalId||null;else if("custom"===b.intType){c=null;var e,f,g,h;e=b.t_from&&b.t_to&&!b.alwaysTime?moment(b.t_from).format("HH:mm")+"-"+moment(b.t_to).format("HH:mm"):"*",b.wd_from&&"always"!==b.wd_from?(f=b.wd_from,b.wd_to&&"always"!==b.wd_to&&(f+="-"+b.wd_to)):f="*",b.md_from&&"always"!==b.md_from?(g=b.md_from,b.md_to&&"always"!==b.md_to&&(g+="-"+b.md_to)):g="*",b.m_from&&"always"!==b.m_from?(h=b.m_from,b.m_to&&"always"!==b.m_to&&(h+="-"+b.m_to)):h="*",d=e+","+f+","+g+","+h}void 0===a.selectedApp?(a.application.interval=d,a.application.IntervalId=c):(a.route.Applications[a.selectedApp].interval=d,a.route.Applications[a.selectedApp].IntervalId=c)}function w(){if(a.interval.intType=a.route.Applications[a.selectedApp].IntervalId?"list":"*,*,*,*"===a.route.Applications[a.selectedApp].interval?"always":"custom",a.interval.IntervalId=a.route.Applications[a.selectedApp].IntervalId,!a.route.Applications[a.selectedApp].IntervalId){var b,c=a.route.Applications[a.selectedApp].interval?a.route.Applications[a.selectedApp].interval.split(","):["*","*","*","*"];c.forEach(function(c,d){switch(d){case 0:"*"!==c?(b=c.split("-"),a.interval.t_from=moment(b[0],"HH:mm"),a.interval.t_to=moment(b[1],"HH:mm"),a.interval.alwaysTime=!1):(a.interval.t_from=moment(new Date),a.interval.t_to=moment(new Date),a.interval.alwaysTime=!0);break;case 1:"*"!==c?(b=c.split("-"),a.interval.wd_from=b[0],a.interval.wd_to=b[1]?b[1]:"always"):(a.interval.wd_from="always",a.interval.wd_to="always");break;case 2:"*"!==c?(b=c.split("-"),a.interval.md_from=b[0],a.interval.md_to=b[1]?b[1]:"always"):(a.interval.md_from="always",a.interval.md_to="always");break;case 3:"*"!==c?(b=c.split("-"),a.interval.m_from=b[0],a.interval.m_to=b[1]?b[1]:"always"):(a.interval.m_from="always",a.interval.m_to="always")}})}}a.alwaysSwitch={isActive:!0,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.$translate=b,a.selectedApp=void 0,a.showGrid=!0,a.$application=i.application,a.$interval=j.interval,a._=_,a.selectedRows=[],a.gridOptions={enableHorizontalScrollbar:0,enableVerticalScrollbar:0,enableSorting:!1,rowTemplate:'<div grid="grid" class="ui-grid-draggable-row" draggable="true"><div ng-repeat="(colRenderIndex, col) in colContainer.renderedColumns track by col.colDef.name" class="ui-grid-cell" ng-class="{ \'ui-grid-row-header-cell\': col.isRowHeader, \'custom\': true }" ui-grid-cell></div></div>',columnDefs:[{name:"app",headerCellFilter:"translate",displayName:"APPLICATION_APPLICATION",enableColumnMenu:!1},{name:"appType",headerCellFilter:"translate",displayName:"APPLICATION_INFO",cellClass:"ui-grid-vcenter",cellTemplate:"<div>{{'APPLICATION_APPS_'+(row.entity.appType || (grid.appScope._.find(grid.appScope.$application.applications,{value:row.entity.app}) ? row.entity.app : 'custom')).toUpperCase() | translate}}</div>",enableColumnMenu:!1},{name:"appdata",headerCellFilter:"translate",displayName:"APPLICATION_ARGUMENTS",cellClass:"ui-grid-vcenter",cellTemplate:"<div>{{row.entity.appdata.join(',')}}</div>",enableColumnMenu:!1},{name:"interval",headerCellFilter:"translate",displayName:"APPLICATION_TIME_INTERVAL",enableColumnMenu:!1},{name:"action",enableColumnMenu:!1,headerCellFilter:"translate",displayName:"APPLICATION_ACTION",width:125,cellClass:"ui-grid-vcenter",cellTemplate:'<div><a class="btn btn-xs blue-hoki" data-ng-click="grid.appScope.openApplication(grid.appScope.gridOptions.data.indexOf(row.entity))"><i class="icon-settings"></i></a><a class="btn btn-xs red-sunglo" data-ng-click="grid.appScope.deleteApp(row.entity.app+\' application\', grid.appScope.gridOptions.data.indexOf(row.entity))"><i class="fa fa-trash"></i></a></div>'}],onRegisterApi:function(b){b.selection.on.rowSelectionChanged(a,function(b){b.isSelected?a.selectedRows.push(b.entity):_.pull(a.selectedRows,b.entity)}),b.selection.on.rowSelectionChangedBatch(a,function(b){b[0].isSelected?a.selectedRows=_.map(b,"entity"):a.selectedRows=[]}),b.draggableRows.on.rowDropped(a,function(b,c){a.updateRoute()}),b.grid.registerDataChangeCallback(function(){x(a.gridOptions.data.length)})}},a.deleteItems=g.confirm["delete"](function(){_.remove(a.route.Applications,function(b){return _.includes(a.selectedRows,b)}),a.selectedRows=[],a.updateRoute()}),a.initRingGroup=function(){var b,c,d;return void 0===a.selectedApp?a.usersArray=[]:a.usersArray=_.map(a.route.Applications[a.selectedApp].appdata[0].split("&"),function(a){return a.split("/")[1]}),r.get().$promise.then(function(a){return b=a,s.get().$promise}).then(function(a){return c=a,t.get().$promise}).then(function(e){d=e,ComponentsDropdowns.bindUserByRole(b,c,d,function(b){a.usersArray=_.union(b,a.usersArray),void 0===a.selectedApp?(a.application.appdata[0]=null,a.application.appdata[0]=_.map(a.usersArray,function(a){return"SIP/"+a}).join("&")):(a.route.Applications[a.selectedApp].appdata[0]=null,a.route.Applications[a.selectedApp].appdata[0]=_.map(a.usersArray,function(a){return"SIP/"+a}).join("&"))},function(b){a.usersArray=_.difference(a.usersArray,b),void 0===a.selectedApp?(a.application.appdata[0]=null,a.application.appdata[0]=_.map(a.usersArray,function(a){return"SIP/"+a}).join("&")):(a.route.Applications[a.selectedApp].appdata[0]=null,a.route.Applications[a.selectedApp].appdata[0]=_.map(a.usersArray,function(a){return"SIP/"+a}).join("&"))},a.route.Applications[a.selectedApp]?a.route.Applications[a.selectedApp].appdata:null)})["catch"](function(a){console.error(a)})};var x=function(a){var b=a?30*a+120:177;angular.element(document.getElementsByClassName("ui-grid")[0]).css("height",b+"px")};a.initApplication=function(b){b&&(a.selectedApp=void 0),a.forms={settings:void 0,interval:void 0},a.application={},a.interval={intType:"always",t_from:moment(new Date),t_to:moment(new Date),wd_from:"always",wd_to:"always",md_from:"always",md_to:"always",m_from:"always",m_to:"always",alwaysTime:!0},a.main={app:""}},a.$watch("interval",function(a){a&&v(a)},!0),a.updateSetAppdata=function(){a.application.variable&&a.application.value&&"Set"===a.main.app.value?a.application.appdata[0]=a.application.variable+"="+a.application.value:a.application.appdata[0]=null},a.updateSetAppdataSettings=function(){a.application.variable&&a.application.value&&"Set"===a.main.app.value?a.route.Applications[a.selectedApp].appdata[0]=a.application.variable+"="+a.application.value:a.application.appdata[0]=null},a.$watch("main.app",function(b){if(b){var c,d,e={},f={};switch(void 0===a.selectedApp&&(a.application={appType:b.type,app:b.value,interval:a.application.interval||"*,*,*,*",appdata:[]}),b.value){case"Queue":c=l,d=m;break;case"Playback":c=m;break;case"AGI":c=n;break;case"Goto":c=o;break;case"Voicemail":c=q;break;case"Dial":switch(b.type){case"internalDial":c=r,e={controller:"all"};break;case"externalDial":c=u}}if(c)return c.get(e).$promise.then(function(b){a.items=b.rows}).then(function(){return d?d.get(f).$promise:void 0}).then(function(b){b&&(a.items2=b.rows)})["catch"](function(a){h.error(a)})}},!0),a.deselectAndRedirect=function(b){a.selectedApp=void 0,e.path(b)},a.getIntervals=function(){return p.get().$promise.then(function(b){a.Intervals=b.rows,d.syncUpdates("interval",a.Intervals)})["catch"](function(a){h.error(a)})},a.getRoute=function(){return k.get({id:c.id}).$promise.then(function(b){a.route=b,a.gridOptions.data=b.Applications,x(a.gridOptions.data.length)})["catch"](function(a){e.path("/channels/voice/routes/internal/list")})},a.getApplication=function(){if(void 0===a.selectedApp)e.path("/channels/voice/routes/internal/list");else{if(a.showGrid=!0,a.route.Applications[a.selectedApp].appType)a.main.app=_.find(a.$application.applications,{type:a.route.Applications[a.selectedApp].appType});else{var b=_.find(a.$application.applications,{value:a.route.Applications[a.selectedApp].app});if(b)a.main.app=b;else{a.main.app=_.find(a.$application.applications,{type:"custom"});var c=a.route.Applications[a.selectedApp].appdata.join(",");a.route.Applications[a.selectedApp].appdata=[c],a.route.Applications[a.selectedApp].appType="custom"}}if("Set"===a.main.app.value){var d=a.route.Applications[a.selectedApp].appdata[0].split("=");a.application.variable=d[0],a.application.value=d[1]}w()}},a.openApplication=function(b){a.selectedApp=b,a.showGrid=!1,e.path("/channels/voice/routes/internal/view/"+c.id+"/applications/settings")},a.updateRoute=function(d){return a.route.exten=a.$application.checkUnderscore(a.route.exten),_.forEach(a.route.Applications,function(a){if("custom"!==a.appType)switch(a.app){case"Dial":var b;switch(a.appType){case"externalDial":b=3;break;case"internalDial":b=2;break;default:b=2}a.appdata[b]=a.appdata[b]||"",a.appdata[b]+=(_.includes(a.appdata[b],"x")?"":"x")+(_.includes(a.appdata[b],"X")?"":"X");break;case"Queue":a.appdata[1]=a.appdata[1]||"",a.appdata[1]+=(_.includes(a.appdata[1],"x")?"":"x")+(_.includes(a.appdata[1],"X")?"":"X")}}),k.update({id:a.route.id},a.route).$promise.then(function(f){a.selectedApp=void 0,h.show(b.instant("MESSAGE_WELL_DONE")+"!","success"),d&&e.path("/channels/voice/routes/internal/view/"+c.id+"/"+d)})["catch"](function(a){h.error(a)})},a.getContexts=function(){return o.get().$promise.then(function(b){a.voiceContexts=b.rows,d.syncUpdates("voice_context",a.voiceContexts)})["catch"](function(a){h.error(a)})},a.deleteApp=g.confirm["delete"](function(b){a.route.Applications.splice(b,1),a.updateRoute()}),a.addApplication=function(){a.route.Applications.push(a.application),a.updateRoute("applications")},a.goNext=function(){f.wizard().next()},a.previous=function(){f.wizard().previous()},a.formValidation=function(a){return a},a.$on("destroy",function(){d.unsyncUpdates("voice_extension")})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.routes.internal.view",{url:"/view/:id",templateUrl:"app/channels/voice/route/internal/view/view.html",controller:"VoiceRouteInternalViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.channels.voice.routes.internal.view.settings",{url:"/settings",templateUrl:"app/channels/voice/route/internal/view/view.settings.html"}).state("main.channels.voice.routes.internal.view.applications",{url:"/applications",templateUrl:"app/channels/voice/route/internal/view/view.applications.html"}).state("main.channels.voice.routes.internal.view.application",{url:"/application",templateUrl:"app/channels/voice/route/view.application.html",resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/jquery-multi-select/css/multi-select.css","assets/plugins/jquery-multi-select/js/jquery.multi-select.js","assets/plugins/jquery-quicksearch/jquery.quicksearch.js","assets/scripts/components-dropdowns.js"]})}]}}).state("main.channels.voice.routes.internal.view.applications.settings",{url:"/settings",templateUrl:"app/channels/voice/route/view.applicationSettings.html",resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/jquery-multi-select/css/multi-select.css","assets/plugins/jquery-multi-select/js/jquery.multi-select.js","assets/plugins/jquery-quicksearch/jquery.quicksearch.js","assets/scripts/components-dropdowns.js"]})}]}})}]),angular.module("xCallyShuttleApp").controller("VoiceRouteOutboundListCreateCtrl",["$scope","$uibModalInstance","Route","application","xAlert","$translate","$location","Tag",function(a,b,c,d,e,f,g,h){a.$application=d.application,a.forms={route:void 0},a.item={type:"outbound",appdata:"Outbound Call",context:"from-sip"},a.getTags=function(){return h.get().$promise.then(function(b){b.rows.unshift({name:"--"}),a.tags=b.rows})["catch"](function(a){e.error(a)})},a.ok=function(){return a.item.exten=a.$application.checkUnderscore(a.item.exten),c.save(a.item).$promise.then(function(a){b.close(a),g.path("/channels/voice/routes/outbound/view/"+a.id+"/routes")})["catch"](function(a){e.error(a)})},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("VoiceRouteOutboundListCtrl",["$scope","$http","socket","$translate","$rootScope","xAlert","Modal","stResource","gridOptions","Route","$uibModal","$location","$log",function(a,b,c,d,e,f,g,h,i,j,k,l,m){a.initView=function(){var b={exporterCsvFilename:"OutboundRoutes.csv",columnDefs:[{name:"exten",displayName:"APPLICATION_DESTINATION_PATTERN"},{name:"description"},{name:"applications",cellClass:"ui-grid-vcenter",cellTemplate:'<div data-ng-if="row.entity.Applications.length"><span data-ng-repeat="app in row.entity.Applications | limitTo:2">{{app.app}}({{app.appdata[0]}}),</span>...</div><div data-ng-if="!row.entity.Applications.length">{{\'MESSAGE_NO_AVAILABLE_APPLICATIONS\' | translate}}</div>',enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1},{name:"action",width:75,buttons:[{"class":"blue-hoki",href:"/channels/voice/routes/outbound/view/{{row.entity.id}}/settings",name:"settings"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.exten, row.entity.id)"}]}]};a.gridOptions=i.gridOptions(j,b,a,{type:"outbound"})},a.create=function(){k.open({animation:!0,templateUrl:"app/channels/voice/route/outbound/list/create.modal.html",controller:"VoiceRouteOutboundListCreateCtrl"})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.routes.outbound.list",{url:"/list",templateUrl:"app/channels/voice/route/outbound/list/list.html",controller:"VoiceRouteOutboundListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"smart-table",insertBefore:"#ng_load_plugins_before",files:["assets/css/smart_table.css"]}])}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.routes.outbound",{url:"/outbound",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("VoiceRouteOutboundViewCtrl",["$scope","xAlert","$translate","$stateParams","socket","$location","WizardHandler","Modal","application","interval","Route","Trunk","VoiceContext","Interval","Tag",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){function p(b){var c,d;if("always"===b.intType)c=null,d="*,*,*,*";else if("list"===b.intType)d=b.IntervalId?_.find(a.Intervals,{id:b.IntervalId}).name:"*,*,*,*",c=b.IntervalId||null;else if("custom"===b.intType){c=null;var e,f,g,h;e=b.t_from&&b.t_to&&!b.alwaysTime?moment(b.t_from).format("HH:mm")+"-"+moment(b.t_to).format("HH:mm"):"*",b.wd_from&&"always"!==b.wd_from?(f=b.wd_from,b.wd_to&&"always"!==b.wd_to&&(f+="-"+b.wd_to)):f="*",b.md_from&&"always"!==b.md_from?(g=b.md_from,b.md_to&&"always"!==b.md_to&&(g+="-"+b.md_to)):g="*",b.m_from&&"always"!==b.m_from?(h=b.m_from,b.m_to&&"always"!==b.m_to&&(h+="-"+b.m_to)):h="*",d=e+","+f+","+g+","+h}void 0===a.selectedApp?(a.application.interval=d,a.application.IntervalId=c):(a.route.Applications[a.selectedApp].interval=d,a.route.Applications[a.selectedApp].IntervalId=c)}function q(){if(a.interval.intType=a.route.Applications[a.selectedApp].IntervalId?"list":"*,*,*,*"===a.route.Applications[a.selectedApp].interval?"always":"custom",a.interval.IntervalId=a.route.Applications[a.selectedApp].IntervalId,!a.route.Applications[a.selectedApp].IntervalId){var b,c=a.route.Applications[a.selectedApp].interval?a.route.Applications[a.selectedApp].interval.split(","):["*","*","*","*"];c.forEach(function(c,d){switch(d){case 0:"*"!==c?(b=c.split("-"),a.interval.t_from=moment(b[0],"HH:mm"),a.interval.t_to=moment(b[1],"HH:mm"),a.interval.alwaysTime=!1):(a.interval.t_from=moment(new Date),a.interval.t_to=moment(new Date),a.interval.alwaysTime=!0);break;case 1:"*"!==c?(b=c.split("-"),a.interval.wd_from=b[0],a.interval.wd_to=b[1]?b[1]:"always"):(a.interval.wd_from="always",a.interval.wd_to="always");break;case 2:"*"!==c?(b=c.split("-"),a.interval.md_from=b[0],a.interval.md_to=b[1]?b[1]:"always"):(a.interval.md_from="always",a.interval.md_to="always");break;case 3:"*"!==c?(b=c.split("-"),a.interval.m_from=b[0],a.interval.m_to=b[1]?b[1]:"always"):(a.interval.m_from="always",a.interval.m_to="always")}})}}a.$translate=c,a.selectedApp=void 0,a.showGrid=!0,a.$application=i.application,a.$interval=j.interval,a._=_,a.recordSwitch={onText:"On",offText:"Off",isActive:!0,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.alwaysSwitch={isActive:!0,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.selectedRows=[],a.gridOptions={enableHorizontalScrollbar:0,enableVerticalScrollbar:0,enableSorting:!1,rowTemplate:'<div grid="grid" class="ui-grid-draggable-row" draggable="true"><div ng-repeat="(colRenderIndex, col) in colContainer.renderedColumns track by col.colDef.name" class="ui-grid-cell" ng-class="{ \'ui-grid-row-header-cell\': col.isRowHeader, \'custom\': true }" ui-grid-cell></div></div>',columnDefs:[{name:"app",displayName:"APPLICATION_APPLICATION",cellClass:"ui-grid-vcenter",cellTemplate:"<div><span data-ng-if=\"row.entity.appType === 'externalDial'\">Default</span><span data-ng-if=\"row.entity.appType !== 'externalDial'\">{{row.entity.app}}</span></div>",headerCellFilter:"translate",enableColumnMenu:!1},{name:"appType",headerCellFilter:"translate",displayName:"APPLICATION_INFO",cellClass:"ui-grid-vcenter",cellTemplate:"<div>{{'APPLICATION_APPS_'+(row.entity.appType || (grid.appScope._.find(grid.appScope.$application.applications,{value:row.entity.app}) ? row.entity.app : 'custom')).toUpperCase() | translate}}</div>",enableColumnMenu:!1},{name:"appdata",displayName:"APPLICATION_ARGUMENTS",headerCellFilter:"translate",cellClass:"ui-grid-vcenter",cellTemplate:"<div>{{row.entity.appdata.join(',')}}</div>",enableColumnMenu:!1},{name:"interval",displayName:"APPLICATION_TIME_INTERVAL",headerCellFilter:"translate",enableColumnMenu:!1},{name:"action",displayName:"APPLICATION_ACTION",headerCellFilter:"translate",width:125,enableColumnMenu:!1,cellClass:"ui-grid-vcenter",cellTemplate:'<div><a class="btn btn-xs blue-hoki" data-ng-click="grid.appScope.openApplication(grid.appScope.gridOptions.data.indexOf(row.entity))"><i class="icon-settings"></i></a><a class="btn btn-xs red-sunglo" data-ng-click="grid.appScope.deleteApp(row.entity.app+\' application\', grid.appScope.gridOptions.data.indexOf(row.entity))"><i class="fa fa-trash"></i></a></div>'}],onRegisterApi:function(b){b.selection.on.rowSelectionChanged(a,function(b){b.isSelected?a.selectedRows.push(b.entity):_.pull(a.selectedRows,b.entity)}),b.selection.on.rowSelectionChangedBatch(a,function(b){b[0].isSelected?a.selectedRows=_.map(b,"entity"):a.selectedRows=[]}),b.draggableRows.on.rowDropped(a,function(b,c){a.updateRoute()}),b.grid.registerDataChangeCallback(function(){r(a.gridOptions.data.length)})}},a.deleteItems=h.confirm["delete"](function(){_.remove(a.route.Applications,function(b){return _.includes(a.selectedRows,b)}),a.selectedRows=[],a.updateRoute()});var r=function(a){var b=a?30*a+120:177;angular.element(document.getElementsByClassName("ui-grid")[0]).css("height",b+"px")};a.initApplication=function(b){b&&(a.selectedApp=void 0),a.forms={info:void 0,interval:void 0},a.application={},a.interval={intType:"always",t_from:moment(new Date),t_to:moment(new Date),wd_from:"always",wd_to:"always",md_from:"always",md_to:"always",m_from:"always",m_to:"always",alwaysTime:!0},a.main={app:""},a.applications=[{name:"Default",value:"Dial",type:"outboundDial"},{name:"Custom",value:"custom",type:"custom"}]},a.$watch("interval",function(a){a&&p(a)},!0),a.$watch("main.app",function(c){if(c){var d,e;switch(void 0===a.selectedApp&&(a.application={appType:c.type,app:c.value,interval:a.application.interval||"*,*,*,*",appdata:[]}),c.value){case"Dial":d=l;break;default:d=null,e=null}if(d)return d.get().$promise.then(function(b){a.items=b.rows}).then(function(){return e?e.get().$promise:void 0}).then(function(b){b&&(a.items2=b.rows)})["catch"](function(a){b.error(a)})}},!0),a.deselectAndRedirect=function(b){a.selectedApp=void 0,f.path(b)},a.getIntervals=function(){return n.get().$promise.then(function(b){a.Intervals=b.rows,e.syncUpdates("interval",a.Intervals)})["catch"](function(a){b.error(a)})},a.getRoute=function(){return k.get({id:d.id}).$promise.then(function(b){a.route=b,a.gridOptions.data=b.Applications,r(a.gridOptions.data.length)})["catch"](function(a){f.path("/channels/voice/routes/outbound/list")})},a.getApplication=function(){if(void 0===a.selectedApp)f.path("/channels/voice/routes/outbound/list");else{if(a.showGrid=!0,a.route.Applications[a.selectedApp].appType)a.main.app=_.find(a.applications,{type:a.route.Applications[a.selectedApp].appType});else{a.main.app=_.find(a.applications,{type:"custom"});var b=a.route.Applications[a.selectedApp].appdata.join(",");a.route.Applications[a.selectedApp].appdata=[b],a.route.Applications[a.selectedApp].appType="custom"}q()}},a.openApplication=function(b){a.selectedApp=b,a.showGrid=!1,f.path("/channels/voice/routes/outbound/view/"+d.id+"/routes/settings")},a.updateRoute=function(e){return a.route.exten=a.$application.checkUnderscore(a.route.exten),_.forEach(a.route.Applications,function(a){"outboundDial"===a.appType&&(a.appdata[4]=a.appdata[4]||"",a.appdata[4]+=(_.includes(a.appdata[4],"x")?"":"x")+(_.includes(a.appdata[4],"X")?"":"X"))}),k.update({id:a.route.id},a.route).$promise.then(function(g){a.selectedApp=void 0,b.show(c.instant("MESSAGE_WELL_DONE")+"!","success"),e&&f.path("/channels/voice/routes/outbound/view/"+d.id+"/"+e)})["catch"](function(a){b.error(a)})},a.getContexts=function(){return m.get().$promise.then(function(b){a.voiceContexts=b.rows,e.syncUpdates("voice_context",a.voiceContexts)})["catch"](function(a){b.error(a)})},a.getTags=function(){return o.get().$promise.then(function(b){b.rows.unshift({name:"--"}),a.tags=b.rows})["catch"](function(a){b.error(a)})},a.deleteApp=h.confirm["delete"](function(b){a.route.Applications.splice(b,1),a.updateRoute()}),a.addApplication=function(){a.route.Applications.push(a.application),a.updateRoute("routes")},a.goNext=function(){g.wizard().next()},a.previous=function(){g.wizard().previous()},a.formValidation=function(a){return a},a.$on("destroy",function(){e.unsyncUpdates("voice_extension")})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.routes.outbound.view",{url:"/view/:id",templateUrl:"app/channels/voice/route/outbound/view/view.html",controller:"VoiceRouteOutboundViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.channels.voice.routes.outbound.view.settings",{url:"/settings",templateUrl:"app/channels/voice/route/outbound/view/view.settings.html"}).state("main.channels.voice.routes.outbound.view.routes",{url:"/routes",templateUrl:"app/channels/voice/route/outbound/view/view.routes.html"}).state("main.channels.voice.routes.outbound.view.route",{url:"/route",templateUrl:"app/channels/voice/route/outbound/view/view.route.html"}).state("main.channels.voice.routes.outbound.view.routes.settings",{url:"/settings",templateUrl:"app/channels/voice/route/outbound/view/view.routeSettings.html"})}]),angular.module("xCallyShuttleApp").factory("Route",["$resource",function(a){return a("/api/voice/extensions/:id",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.routes",{url:"/routes",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:21}}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice",{url:"/voice",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user","agent"],redirectTo:"landing",id:7}}})}]),angular.module("xCallyShuttleApp").controller("VoiceVoicemailListCtrl",["$scope","VoiceMail","gridOptions",function(a,b,c){a.initView=function(){var d={exporterCsvFilename:"voice_mails.csv",primaryKey:"uniqueid",columnDefs:[{name:"mailbox"},{name:"fullname"},{name:"email"},{name:"action",width:75,buttons:[{"class":"blue-hoki",href:"/channels/voice/voicemails/view/{{row.entity.uniqueid}}/settings",name:"profile"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.mailbox, row.entity.uniqueid)"}]}]};a.gridOptions=c.gridOptions(b,d,a)}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.voicemails.list",{url:"/list",templateUrl:"app/channels/voice/voicemail/list/list.html",controller:"VoiceVoicemailListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"smart-table",insertBefore:"#ng_load_plugins_before",files:["assets/css/smart_table.css"]}])}]}})}]),angular.module("xCallyShuttleApp").controller("VoiceVoicemailViewCtrl",["$scope","VoiceMail","VoiceMailMessage","VoiceContext","$http","xAlert","$translate","$stateParams","socket","$sce","Modal","$location","gridOptions",function(a,b,c,d,e,f,g,h,i,j,k,l,m){function n(){var b={exporterCsvFilename:"voice_mail_messages.csv",primaryKey:"id",columnDefs:[{name:"callerid"},{name:"stamp",displayName:"APPLICATION_DATE",cellClass:"ui-grid-vcenter",cellTemplate:"<div>{{grid.appScope.moment(row.entity.stamp).format('YYYY-MM-DD HH:mm:ss')}}</div>"},{name:"duration",cellClass:"ui-grid-vcenter",cellTemplate:"<div>{{row.entity.duration*1000 | date:'mm:ss'}}</div>"},{name:"audio",displayName:"",width:225,enableSorting:!1,enableFiltering:!1,buttons:[{directive:'<audio-file-download params="{id:row.entity.id,controller:\'download\'}" resource="grid.appScope.VoiceMailMessage"></audio-file-download>'}]},{name:"action",width:150,buttons:[{directive:'<motion-file-download params="{id:row.entity.id,controller:\'download\'}" resource="grid.appScope.VoiceMailMessage" mimetype="audio/wav" btnclass="btn btn-xs blue-hoki" filename="row.entity.msg_id+\'.wav\'"></motion-file-download>'},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.id, row.entity.id)"}]}]};a.gridOptions=m.gridOptions(c,b,a,{mailbox:a.voicemail.mailbox,context:a.voicemail.context})}a.moment=moment,a["switch"]={isActive:!0,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.VoiceMailMessage=c,a.getVoicemail=function(){return b.get({id:h.uniqueid}).$promise.then(function(b){delete b.password,delete b.stamp,a.voicemail=b})["catch"](function(a){l.path("/voice/voicemails/list")})},a.updateVoiceVoicemail=function(){return b.update({id:h.uniqueid},a.voicemail).$promise.then(function(){f.show(g.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){f.error(a)})},a.getContexts=function(){return d.get().$promise.then(function(b){a.voiceContexts=b.rows})["catch"](function(a){f.error(a)})},a.getMessages=function(){return a.voicemail?void n():b.get({id:h.uniqueid}).$promise.then(function(b){delete b.password,delete b.stamp,a.voicemail=b,n()})["catch"](function(a){l.path("/voice/voicemails/view/"+h.uniqueid+"/settings")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.voicemails.view",{url:"/view/:uniqueid",templateUrl:"app/channels/voice/voicemail/view/view.html",controller:"VoiceVoicemailViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.channels.voice.voicemails.view.settings",{url:"/settings",templateUrl:"app/channels/voice/voicemail/view/view.settings.html"}).state("main.channels.voice.voicemails.view.messages",{url:"/messages",templateUrl:"app/channels/voice/voicemail/view/view.messages.html"})}]),angular.module("xCallyShuttleApp").factory("VoiceMail",["$resource",function(a){return a("/api/voice/voicemails/:id/:controller",{uniqueid:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.voicemails",{url:"/voicemails",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:23}}})}]),angular.module("xCallyShuttleApp").factory("VoiceMailMessage",["$resource",function(a){return a("/api/voice/voicemails/messages/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("VoiceVoicemailWizardCtrl",["$scope","VoiceMail","xAlert","WizardHandler","$location","Setting",function(a,b,c,d,e,f){a.initWizard=function(){a.form={},a.item={context:"from-voicemail"}},a.next=function(){d.wizard().next()},a.previous=function(){d.wizard().previous()},a.exitValidation=function(a){return a},a.getFirstFreeMailbox=function(){f.get({controller:"mailbox"}).$promise.then(function(b){a.item.mailbox=b.value})["catch"](function(a){c.error(a)})},a.createItem=function(){return a.item.customer_id=a.item.mailbox,b.save(a.item).$promise.then(function(){e.path("/channels/voice/voicemails/list")})["catch"](function(a){c.error(data)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.voicemails.wizard",{url:"/wizard",templateUrl:"app/channels/voice/voicemail/wizard/wizard.html",controller:"VoiceVoicemailWizardCtrl"})}]),angular.module("xCallyShuttleApp").factory("VoiceQueue",["$resource",function(a){ -return a("/api/voice/queues/:id/:controller/:controller2",{name:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("Company",["$resource",function(a){return a("/api/contactmanager/companies/:id/:controller",{name:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.contactmanager.companies",{url:"/companies",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:5}}})}]),angular.module("xCallyShuttleApp").controller("CompanyListCreateModalCtrl",["$scope","$uibModalInstance",function(a,b){a.forms={dashboard:void 0},a.item={},a.ok=function(){a.item.model=JSON.stringify({title:a.item.name}),b.close(a.item)},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("ContactManagerCompanyListCtrl",["$scope","$translate","xAlert","Modal","$uibModal","$log","Company","gridOptions","$location",function(a,b,c,d,e,f,g,h,i){a.initView=function(){var b={exporterCsvFilename:"Companies.csv",columnDefs:[{name:"name"},{name:"description"},{name:"action",width:100,buttons:[{"class":"blue-hoki",name:"profile",href:"/contactmanager/companies/view/{{row.entity.id}}/settings"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"},{"class":"green-turquoise",name:"contacts",uisref:"main.contactmanager.contacts.list({companyId:{{row.entity.id}}})"}]}]};a.gridOptions=h.gridOptions(g,b,a)},a.create=function(){var a=e.open({animation:!0,size:"lg",templateUrl:"app/contactmanager/company/list/create.modal.html",controller:"CompanyListCreateModalCtrl"});a.result.then(function(a){return g.save(a).$promise.then(function(a){i.path("/contactmanager/companies/view/"+a.id+"/settings")})["catch"](function(a){c.error(a)})},function(){f.info("Modal dismissed at: "+new Date)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.contactmanager.companies.list",{url:"/list",templateUrl:"app/contactmanager/company/list/list.html",controller:"ContactManagerCompanyListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"smart-table",insertBefore:"#ng_load_plugins_before",files:["assets/css/smart_table.css"]}])}]}})}]),angular.module("xCallyShuttleApp").controller("ContactManagerCompanyViewCtrl",["$scope","xAlert","$translate","$stateParams","$location","Company",function(a,b,c,d,e,f){a.getCompany=function(){return f.get({id:d.id}).$promise.then(function(b){a.company=b})["catch"](function(a){e.path("/contactmanager/companies/list")})},a.updateCompany=function(){return f.update({id:d.id},a.company).$promise.then(function(){b.show(c.instant("MESSAGE_WELL_DONE")+"!","success")})["catch"](function(a){b.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.contactmanager.companies.view",{url:"/view/:id",templateUrl:"app/contactmanager/company/view/view.html",controller:"ContactManagerCompanyViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.contactmanager.companies.view.settings",{url:"/settings",templateUrl:"app/contactmanager/company/view/view.settings.html"})}]),angular.module("xCallyShuttleApp").factory("Contact",["$resource",function(a){return a("/api/contactmanager/contacts/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.contactmanager.contacts",{url:"/contacts",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("ContactManagerListCopyModalCtrl",["$scope","$uibModalInstance","xAlert","List","Contact","$translate",function(a,b,c,d,e,f){a.item={},a.getLists=function(){return d.get().$promise.then(function(b){a.lists=b.rows})["catch"](function(a){c.error(a)})},a.ok=function(){b.close(a.item)},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("ContactManagerListImportModalCtrl",["$scope","$uibModalInstance","indexes","csv","xAlert","socket","List","Contact","$translate","Company",function(a,b,c,d,e,f,g,h,i,j){function k(b){if(b>=a.csvLength||a.stopped)return void(a.importing=!1);for(var c,f=[],g=b;b+200>g&&g<a.csvLength;g++)c={},_.forOwn(a.item,function(b,e){switch(e){case"tags":c.tags=[],a.item.tags.forEach(function(a){""!==d[g][a]&&c.tags.push(d[g][a])});break;default:c[e]=d[g][b]}}),c.tags=c.tags?c.tags.join(","):void 0,c.ListId=a.item.ListId,c.CompanyId=a.item.CompanyId||null,f.push(c);return h.save({controller:"bulk"},{contacts:f}).$promise.then(function(b){a["import"].success+=b.ok*a.addingQuote,a["import"].succeeded+=b.ok,a["import"].fail+=b.ko*a.addingQuote,a["import"].failed+=b.ko,k(g)})["catch"](function(b){a.stopped=!0,e.error(b),k(g)})}a.indexes=c,a.importing=!1,a.submitted=!1,a.stopped=!1,a["import"]={success:0,fail:0,succeeded:0,failed:0},a.csvLength=d.length,a.addingQuote=100/a.csvLength,a.forms={csv:void 0},a.item={},a.start=function(){a.importing=!0,a.submitted=!0,k(0)},a.getLists=function(){return g.get().$promise.then(function(b){a.lists=b.rows,a.item.ListId=1,a.getCustomFields()})["catch"](function(a){e.error(a)})},a.getCompanies=function(){return j.get().$promise.then(function(b){a.companies=b.rows})["catch"](function(a){e.error(a)})},a.getCustomFields=function(){return g.get({listId:a.item.ListId,controller:"customfields"}).$promise.then(function(b){b.rows.forEach(function(a){a.values=JSON.parse(a.values)}),a.customFields=b.rows,f.socket.on("custom_field:remove",function(b){_.remove(a.customFields,function(a){return b.id==a.id})}),f.socket.on("custom_field:save",function(b){if(b.ListId===a.item.ListId){var c=_.find(a.customFields,{id:b.id});c||("string"==typeof b.values&&(b.values=JSON.parse(b.values)),a.customFields.push(b))}})})["catch"](function(a){console.error(a),e.error(a)})},a.close=function(){b.close()},a.stop=function(){a.stopped=!0}}]),angular.module("xCallyShuttleApp").controller("ContactManagerContactListCtrl",["$scope","$translate","Modal","FileUploader","Papa","$uibModal","$log","Contact","gridOptions","List","uiGridConstants","xAlert","socket","$stateParams","Auth","Company",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){a.Auth=o,a.initView=function(){var c;return j.get().$promise.then(function(b){return a.lists=[],a.customFields=[],b.rows.forEach(function(b,c){_.forEach(b.CustomFields,function(b){a.customFields.push({name:b.name,alias:b.alias})}),a.lists.push({value:b.id,label:b.name})}),p.get().$promise}).then(function(b){a.companies=[],b.rows.forEach(function(b,c){a.companies.push({value:b.id,label:b.name})})}).then(function(){var d=[{"class":"blue-hoki",name:"profile",onClick:"grid.appScope.openContactTab(row.entity)"}];o.isAgent()||(d.push({"class":"green",title:b.instant("APPLICATION_COPY"),name:"copy",onClick:"grid.appScope.copy(row.entity.id)"}),d.push({"class":"red-sunglo",name:"delete",title:b.instant("APPLICATION_DELETE"),onClick:"grid.appScope.deleteItem(row.entity.fullname, row.entity.id)"})),c={exporterCsvFilename:"Contacts.csv",columnDefs:[{name:"firstName"},{name:"lastName"},{name:"phone"},{name:"email"},{name:"ListId",displayName:"APPLICATION_LIST",field:"List.name",filter:{type:k.filter.SELECT,term:n.listId||null,selectOptions:a.lists},cellTemplate:'<div class="centered-uigrid-td"><a href="/contactmanager/lists/view/{{row.entity.ListId}}/settings">{{row.entity.List.name}}</a></div>'},{name:"CompanyId",displayName:"APPLICATION_COMPANY",field:"Company.name",filter:{type:k.filter.SELECT,term:n.companyId||null,selectOptions:a.companies},cellTemplate:'<div class="centered-uigrid-td"><a href="/contactmanager/companies/view/{{row.entity.CompanyId}}/settings">{{row.entity.Company.name}}</a></div>'},{name:"tags",filterHeaderTemplate:'<div class="ui-grid-filter-container row"><div ng-repeat="colFilter in col.filters" class="col-md-12 col-md-offset-0 col-sm-12 col-sm-offset-0 col-xs-12 col-xs-offset-0"><div custom-grid-tags-filter-header></div></div></div>',filters:[{name:"tags"}],cellTemplate:"<div class=\"centered-uigrid-td\">{{row.entity.tags.join(',')}}</div>"}]},_.forEach(a.customFields,function(a){c.columnDefs.push({name:a.name,displayName:a.alias,visible:!1})}),c.columnDefs.push({name:"action",width:100,buttons:d}),a.gridOptions=i.gridOptions(h,c,a),m.socket.on("contact_manager:remove",function(b){a.gridOptions.getPage()})})["catch"](function(a){l.error(a)})},d.FileSelect.prototype.isEmptyAfterSelection=function(){return!0};var q=a.uploader=new d({queueLimit:1,clearInputAfterAddedToQueue:!0});q.onAfterAddingFile=function(b){console.log("fileadded"),e.parse(b._file,{header:!0,complete:function(b){a.uploader.clearQueue(),a["import"](b.data)},error:function(a){console.log(a)}})},a["import"]=function(b){var c=f.open({animation:!0,size:"lg",backdrop:"static",keyboard:!1,templateUrl:"app/contactmanager/contact/list/import.modal.html",controller:"ContactManagerListImportModalCtrl",resolve:{indexes:function(){return _.keys(b[0])},csv:function(){return b}}});c.result.then(function(b){a.gridOptions.getPage()},function(){g.info("Modal dismissed at: "+new Date)})},a.copy=function(b){var c=f.open({animation:!0,size:"small",templateUrl:"app/contactmanager/contact/list/copy.modal.html",controller:"ContactManagerListCopyModalCtrl"});c.result.then(function(c){return h.save({id:b,controller:"copy"},c).$promise.then(function(b){a.openContactTab({firstName:b.firstName,lastName:b.lastName,id:b.id})})["catch"](function(a){l.error(a)})},function(){g.info("Modal dismissed at: "+new Date)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.contactmanager.contacts.list",{url:"/list",templateUrl:"app/contactmanager/contact/list/list.html",params:{listId:null,companyId:null},controller:"ContactManagerContactListCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.contactmanager",{url:"/contactmanager",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user","agent"],redirectTo:"landing",id:5}}})}]),angular.module("xCallyShuttleApp").factory("List",["$resource",function(a){return a("/api/contactmanager/lists/:listId/:controller/:id",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.contactmanager.lists",{url:"/lists",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:5}}})}]),angular.module("xCallyShuttleApp").controller("ContactManagerListListCreateModalCtrl",["$scope","$uibModalInstance",function(a,b){a.forms={dashboard:void 0},a.item={},a.ok=function(){b.close(a.item)},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("ContactManagerListListCtrl",["$scope","$http","$translate","Modal","xAlert","$uibModal","$log","List","gridOptions",function(a,b,c,d,e,f,g,h,i){a.initView=function(){var b={exporterCsvFilename:"Lists.csv",columnDefs:[{name:"name"},{name:"description"},{name:"action",width:100,buttons:[{"class":"blue-hoki",name:"settings",href:"/contactmanager/lists/view/{{row.entity.id}}/settings"},{"class":"green-turquoise",name:"contacts",uisref:"main.contactmanager.contacts.list({listId:{{row.entity.id}}})"},{"class":"{{row.entity.defaultEntry ? 'red-sunglo disabled' : 'red-sunglo'}}",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=i.gridOptions(h,b,a)},a.create=function(){var d=f.open({animation:!0,templateUrl:"app/contactmanager/list/list/create.modal.html",controller:"ContactManagerListListCreateModalCtrl"});d.result.then(function(d){b.post("/api/contactmanager/lists/",d).then(function(b){a.gridOptions.getPage(),e.show(c.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){e.error(a)})},function(){g.info("Modal dismissed at: "+new Date)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.contactmanager.lists.list",{url:"/list",templateUrl:"app/contactmanager/list/list/list.html",controller:"ContactManagerListListCtrl"})}]),angular.module("xCallyShuttleApp").controller("ContactManagerListCustomFieldViewCreateModalCtrl",["$scope","$uibModalInstance","$translate",function(a,b,c){a.$translate=c,a.forms={dashboard:void 0},a.item={},a.choices=[{value:""}],a.addField=function(){a.choices.push({})},a.removeField=function(b){a.choices.splice(b,1)},a.types=[{name:"APPLICATION_TEXT",value:"text"},{name:"APPLICATION_SELECT",value:"select"}],a.ok=function(){"select"===a.item.type&&(a.item.values=angular.toJson(a.choices)),b.close(a.item)},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("ContactManagerListViewCtrl",["$scope","xAlert","$translate","$stateParams","socket","$location","$uibModal","$log","Modal","List","Team","gridOptions",function(a,b,c,d,e,f,g,h,i,j,k,l){function m(a){var b=a.split(""),c=0,d=0;return b.shift(),b.forEach(function(a,b){"{"===a?c++:"}"===a&&(c--,c||(d=b+1))}),d?JSON.parse("["+a.substr(1,d)+"]"):[]}var n=function(){return{select:function(b){return j.save({listId:a.list.id,controller:"agents"},{agents:b}).$promise.then(function(){a.getTeams()})["catch"](function(a){console.log(a)})},deselect:function(b){return j["delete"]({listId:a.list.id,controller:"agents",agents:b}).$promise.then(function(){a.getTeams()})["catch"](function(a){console.log(a)})}}};a.getList=function(){return j.get({listId:d.id}).$promise.then(function(b){a.list=b})["catch"](function(a){f.path("/contactmanager/lists/list")})},a.updateList=function(){return j.update({id:d.id},a.list).$promise.then(function(){b.show(c.instant("MESSAGE_WELL_DONE")+"!","success")})["catch"](function(a){b.error(a)})},a.getTeams=function(){return k.get({controller:"associations"}).$promise.then(function(b){return a.teams=b.rows,a.list?void 0:a.getList()}).then(function(){return a.list.defaultEntry&&f.path("/contactmanager/lists/list"),j.get({listId:d.id,controller:"agents"}).$promise}).then(function(b){ComponentsDropdowns.bindQueue(a.teams,_.map(b.rows,function(a){return{id:a.id}}),n)})["catch"](function(a){console.error(a)})},a.initCustomFields=function(){var b={exporterCsvFilename:"customfields.csv",primaryKey:"id",columnDefs:[{name:"alias",displayName:"APPLICATION_NAME"},{name:"name",displayName:"APPLICATION_FIELD"},{name:"type"},{name:"description"},{name:"action",width:200,buttons:[{"class":"blue-hoki",href:"/contactmanager/lists/view/{{grid.appScope.$stateParams.id}}/customfields/settings/{{row.entity.id}}",name:"settings"},{"class":"red-sunglo",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)",name:"delete"}]}]};a.gridOptions=l.gridOptions(j,b,a,{listId:d.id,controller:"customfields"})},a.create=function(){var e=g.open({animation:!0,templateUrl:"app/contactmanager/list/view/create.modal.html",controller:"ContactManagerListCustomFieldViewCreateModalCtrl"});e.result.then(function(e){return j.save({listId:d.id,controller:"customfields"},e).$promise.then(function(){a.gridOptions.getPage(),b.show(c.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){b.error(a)})},function(){h.info("Modal dismissed at: "+new Date)})},a.getCustomField=function(){return j.get({listId:d.id,controller:"customfields",id:d.cfId}).$promise.then(function(b){if(a.customField=b,"select"===a.customField.type)try{a.choices=JSON.parse(a.customField.values)}catch(c){a.choices=m(a.customField.values)}})["catch"](function(a){console.error(a)})},a.updateCustomField=function(){var e=angular.copy(a.customField);return"select"===e.type&&(e.values=angular.toJson(a.choices)),j.update({listId:d.id,controller:"customfields",id:d.cfId},e).$promise.then(function(){b.show(c.instant("MESSAGE_WELL_DONE")+"!","success")})["catch"](function(a){b.error(a)})},a.addField=function(){a.choices.push({})},a.removeField=function(b){a.choices.splice(b,1)}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.contactmanager.lists.view",{url:"/view/:id",templateUrl:"app/contactmanager/list/view/view.html",controller:"ContactManagerListViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.contactmanager.lists.view.settings",{url:"/settings",templateUrl:"app/contactmanager/list/view/view.settings.html"}).state("main.contactmanager.lists.view.agents",{url:"/agents",templateUrl:"app/contactmanager/list/view/view.agents.html",cache:!1,serie:!0,resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/jquery-multi-select/css/multi-select.css","assets/plugins/jquery-multi-select/js/jquery.multi-select.js","assets/plugins/jquery-quicksearch/jquery.quicksearch.js","assets/scripts/components-dropdowns.js"]})}]}}).state("main.contactmanager.lists.view.customfields",{url:"/customfields",templateUrl:"app/contactmanager/list/view/view.customFields.html"}).state("main.contactmanager.lists.view.customfields.settings",{url:"/settings/:cfId",templateUrl:"app/contactmanager/list/view/view.customFieldSettings.html",controller:"ContactManagerListViewCtrl"})}]),angular.module("xCallyShuttleApp").controller("DashboardChatCtrl",["$scope","Auth","ChatRoom","socket","Agent","$q","$translate","ReportChatSession","$timeout",function(a,b,c,d,e,f,g,h,i){a.Auth=b,a.moment=moment,a["new"]=0,a.open=0,a.unmanaged=0,a.closed=0;var j=function(a){var b=a?30*a+130:270;angular.element(document.getElementsByClassName("ui-grid")[0]).css("height",b+"px"),angular.element(document.getElementsByClassName("ui-grid-viewport")).css("height",30*a+"px")};a.initAgent=function(){a.table1={enableGridMenu:!1,enableHorizontalScrollbar:0,enableVerticalScrollbar:0,multiSelect:!0,columnDefs:[{name:"UserHasChatQueue.queue",headerCellFilter:"translate",displayName:"APPLICATION_QUEUE",cellClass:"text-center ui-grid-vcenter"}],data:[],onRegisterApi:function(b){a.gridApi=b,a.gridApi.grid.registerDataChangeCallback(function(){j(a.gridApi.core.getVisibleRows(a.gridApi.grid).length)})}},a.table2={headerCellFilter:"translate",enableHorizontalScrollbar:0,enableVerticalScrollbar:0,enableFiltering:!0,columnDefs:[{name:"roomid",displayName:"APPLICATION_INTERACTION_ID",headerCellFilter:"translate"},{name:"websitename",displayName:"APPLICATION_WEBSITE",headerCellFilter:"translate"},{name:"application",displayName:"APPLICATION_APPLICATION",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{row.entity.application}} <span data-ng-if=\"row.entity.application == 'queue' && row.entity.queuename\">({{row.entity.queuename}})</span></div>"},{name:"status",displayName:"APPLICATION_STATUS",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div><span data-ng-if="!row.entity.leaveAt">{{\'APPLICATION_QUEUESTATUS_WAITING\' | translate}}</span><span data-ng-if="row.entity.leaveAt && row.entity.abandon">{{\'APPLICATION_QUEUESTATUS_ABANDON\' | translate}}</span><span data-ng-if="row.entity.leaveAt && row.entity.complete">{{\'APPLICATION_QUEUESTATUS_COMPLETE\' | translate}}</span><span data-ng-if="row.entity.leaveAt && row.entity.timeout">{{\'APPLICATION_TIMEOUT\' | translate}}</span><span data-ng-if="!row.entity.leaveAt"> [<css-timer start-time="row.entity.updatedAt"></css-timer>]</span></div>',enableSorting:!1,enableColumnMenu:!1,enableFiltering:!1},{name:"membername",displayName:"APPLICATION_AGENT",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{row.entity.membername || ''}}</div>"}],data:[],gridMenuTitleFilter:function(a){var b=f.defer();return b.resolve(g.instant(a)),b.promise},onRegisterApi:function(b){a.gridApi=b,a.gridApi.grid.registerDataChangeCallback(function(){j(a.table2.data.length)})}},e.get({id:b.getCurrentUser().id,controller:"chat",controller1:"queues"}).$promise.then(function(b){a.table1.data=b.rows})["finally"](function(){d.socket.on("user_has_chat_queue:save",function(c){c.UserId!=b.getCurrentUser().id||_.find(a.table1.data,{id:c.ChatQueueId})||a.table1.data.push({id:c.ChatQueueId,UserHasChatQueue:c})}),d.socket.on("user_has_chat_queue:remove",function(c){c.UserId===b.getCurrentUser().id&&_.remove(a.table1.data,{id:c.ChatQueueId})})})["catch"](function(a){console.error(a)}),h.get({controller:"waiting",controller2:"applications"}).$promise.then(function(b){a.table2.data=b.rows})["finally"](function(){d.socket.on("report_chat_session:save",function(b){var c=_.find(a.table2.data,{id:b.id});c?(_.merge(c,b),b.leaveAt&&i(function(){_.remove(a.table2.data,{id:b.id})},1e4)):b.leaveAt||a.table2.data.push(b)}),d.socket.on("report_chat_session:remove",function(b){_.remove(a.table2.data,{id:b.id})})})["catch"](function(a){console.log(a)})},a.initWidget=function(b){var e;switch(b){case"unmanaged":e=c;break;default:e=h}return e.get({id:b}).$promise.then(function(c){a[b]=c.value,a.charts={interactions:{labels:[g.instant("APPLICATION_DASHBOARD_NEW"),g.instant("APPLICATION_DASHBOARD_OPEN"),g.instant("APPLICATION_UNMANAGED"),g.instant("APPLICATION_DASHBOARD_CLOSED"),g.instant("APPLICATION_DASHBOARD_ABANDONED")],values:[a["new"],a.open,a.unmanaged,a.closed,a.abandoned],colours:["#44B6AE","#578EBE","#35AA47","#8775A7","#f3c200"]}},d.socket.on("report_chat_dashboard:"+b,function(c){a[b]=c.value,a.charts.interactions.values=[a["new"],a.open,a.unmanaged,a.closed]})})["catch"](function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").controller("DashboardCtrl",["$scope","$translate","Auth",function(a,b,c){}]),angular.module("xCallyShuttleApp").factory("Dashboard",["$resource",function(a){return a("/api/dashboards/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.dashboard",{"abstract":!0,url:"/dashboard",templateUrl:"app/dashboard/dashboard.html",controller:"DashboardCtrl",data:{permissions:{only:["admin","user","agent"],redirectTo:"landing",id:1}}}).state("main.dashboard.voice",{url:"/voice",controller:"DashboardVoiceCtrl",templateUrl:"app/dashboard/voice/voice.html"}).state("main.dashboard.chat",{url:"/chat",controller:"DashboardChatCtrl",templateUrl:"app/dashboard/chat/chat.html",data:{permissions:{redirectTo:"landing",id:8}}}).state("main.dashboard.mail",{url:"/mail",controller:"DashboardMailCtrl",templateUrl:"app/dashboard/mail/mail.html",data:{permissions:{redirectTo:"landing",id:9}}}).state("main.dashboard.fax",{url:"/fax",controller:"DashboardFaxCtrl",templateUrl:"app/dashboard/fax/fax.html",data:{permissions:{redirectTo:"landing",id:10}}}).state("main.dashboard.sms",{url:"/sms",controller:"DashboardSmsCtrl",templateUrl:"app/dashboard/sms/sms.html",data:{permissions:{redirectTo:"landing",id:11}}}).state("main.dashboard.openchannel",{url:"/openchannel",controller:"DashboardOpenChannelCtrl",templateUrl:"app/dashboard/openchannel/openchannel.html",data:{permissions:{redirectTo:"landing",id:20}}})}]),angular.module("xCallyShuttleApp").controller("DashboardFaxCtrl",["$scope","Auth","FaxRoom","socket","Agent","$translate","$q","ReportFaxSession","$timeout",function(a,b,c,d,e,f,g,h,i){a.Auth=b,a.moment=moment,a["new"]=0,a.open=0,a.pending=0,a.closed=0,a.initAgent=function(){a.table1={enableGridMenu:!1,enableHorizontalScrollbar:0,enableVerticalScrollbar:0,multiSelect:!0,columnDefs:[{name:"UserHasFaxQueue.queue",headerCellFilter:"translate",displayName:"APPLICATION_QUEUE",cellClass:"text-center ui-grid-vcenter"}],data:[],onRegisterApi:function(b){a.gridApi=b}},a.table2={headerCellFilter:"translate",enableHorizontalScrollbar:0,enableVerticalScrollbar:0,enableFiltering:!0,columnDefs:[{name:"roomid",displayName:"APPLICATION_INTERACTION_ID",headerCellFilter:"translate"},{name:"accountname",displayName:"APPLICATION_ACCOUNT_NAME",headerCellFilter:"translate"},{name:"application",displayName:"APPLICATION_APPLICATION",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{row.entity.application}} <span data-ng-if=\"row.entity.application == 'queue' && row.entity.queuename\">({{row.entity.queuename}})</span></div>"},{name:"status",displayName:"APPLICATION_STATUS",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div><span data-ng-if="!row.entity.leaveAt">{{\'APPLICATION_QUEUESTATUS_WAITING\' | translate}}</span><span data-ng-if="row.entity.leaveAt && row.entity.complete">{{\'APPLICATION_QUEUESTATUS_COMPLETE\' | translate}}</span><span data-ng-if="row.entity.leaveAt && row.entity.timeout">{{\'APPLICATION_TIMEOUT\' | translate}}</span><span data-ng-if="!row.entity.leaveAt"> [<css-timer start-time="row.entity.updatedAt"></css-timer>]</span></div>',enableSorting:!1,enableColumnMenu:!1,enableFiltering:!1},{name:"membername",displayName:"APPLICATION_AGENT",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{row.entity.membername || ''}}</span></div>"}],data:[],gridMenuTitleFilter:function(a){var b=g.defer();return b.resolve(f.instant(a)),b.promise},onRegisterApi:function(b){a.gridApi=b}},e.get({id:b.getCurrentUser().id,controller:"fax",controller1:"queues"}).$promise.then(function(b){a.table1.data=b.rows})["finally"](function(){d.socket.on("user_has_fax_queue:save",function(c){c.UserId!=b.getCurrentUser().id||_.find(a.table1.data,{id:c.FaxQueueId})||a.table1.data.push({id:c.FaxQueueId,UserHasFaxQueue:c})}),d.socket.on("user_has_fax_queue:remove",function(c){c.UserId===b.getCurrentUser().id&&_.remove(a.table1.data,{id:c.FaxQueueId})})})["catch"](function(a){console.error(a)}),h.get({controller:"waiting",controller2:"applications"}).$promise.then(function(b){a.table2.data=b.rows})["finally"](function(){d.socket.on("report_fax_session:save",function(b){var c=_.find(a.table2.data,{id:b.id});c?(_.merge(c,b),b.leaveAt&&i(function(){_.remove(a.table2.data,{id:b.id})},1e4)):b.leaveAt||a.table2.data.push(b)}),d.socket.on("report_fax_session:remove",function(b){_.remove(a.table2.data,{id:b.id})})})["catch"](function(a){console.log(a)})},a.initWidget=function(b){var e;switch(b){case"timeout":case"waiting":e=h;break;default:e=c}return e.get({id:b}).$promise.then(function(c){a[b]=c.value,a.charts={interactions:{labels:[f.instant("APPLICATION_DASHBOARD_NEW"),f.instant("APPLICATION_DASHBOARD_OPEN"),f.instant("APPLICATION_DASHBOARD_PENDING"),f.instant("APPLICATION_DASHBOARD_CLOSED")],values:[a["new"],a.open,a.pending,a.closed],colours:["#44B6AE","#578EBE","#35AA47","#8775A7"]}},d.socket.on("report_fax_dashboard:"+b,function(c){a[b]=c.value,a.charts.interactions.values=[a["new"],a.open,a.pending,a.closed]})})["catch"](function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").controller("DashboardMailCtrl",["$scope","Auth","MailRoom","socket","Agent","$translate","$q","ReportMailSession","$timeout",function(a,b,c,d,e,f,g,h,i){a.Auth=b,a.moment=moment,a["new"]=0,a.open=0,a.pending=0,a.closed=0,a.charts={interactions:{labels:[f.instant("APPLICATION_DASHBOARD_NEW"),f.instant("APPLICATION_DASHBOARD_OPEN"),f.instant("APPLICATION_DASHBOARD_PENDING"),f.instant("APPLICATION_DASHBOARD_CLOSED")],values:[a["new"],a.open,a.pending,a.closed],colours:["#44B6AE","#578EBE","#35AA47","#8775A7"]}},a.initAgent=function(){a.table1={enableGridMenu:!1,enableHorizontalScrollbar:0,enableVerticalScrollbar:0,multiSelect:!0,columnDefs:[{name:"UserHasMailQueue.queue",headerCellFilter:"translate",displayName:"APPLICATION_QUEUE",cellClass:"text-center ui-grid-vcenter"}],data:[],onRegisterApi:function(b){a.gridApi=b}},a.table2={headerCellFilter:"translate",enableHorizontalScrollbar:0,enableVerticalScrollbar:0,enableFiltering:!0,columnDefs:[{name:"roomid",displayName:"APPLICATION_INTERACTION_ID",headerCellFilter:"translate"},{name:"accountname",displayName:"APPLICATION_ACCOUNT_NAME",headerCellFilter:"translate"},{name:"application",displayName:"APPLICATION_APPLICATION",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{row.entity.application}} <span data-ng-if=\"row.entity.application == 'queue' && row.entity.queuename\">({{row.entity.queuename}})</span></div>"},{name:"status",displayName:"APPLICATION_STATUS",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div><span data-ng-if="!row.entity.leaveAt">{{\'APPLICATION_QUEUESTATUS_WAITING\' | translate}}</span><span data-ng-if="row.entity.leaveAt && row.entity.complete">{{\'APPLICATION_QUEUESTATUS_COMPLETE\' | translate}}</span><span data-ng-if="row.entity.leaveAt && row.entity.timeout">{{\'APPLICATION_TIMEOUT\' | translate}}</span><span data-ng-if="!row.entity.leaveAt"> [<css-timer start-time="row.entity.updatedAt"></css-timer>]</span></div>',enableSorting:!1,enableColumnMenu:!1,enableFiltering:!1},{name:"membername",displayName:"APPLICATION_AGENT",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{row.entity.membername || ''}}</span></div>"}],data:[],gridMenuTitleFilter:function(a){var b=g.defer();return b.resolve(f.instant(a)),b.promise},onRegisterApi:function(b){a.gridApi=b,a.gridApi.grid.registerDataChangeCallback(function(){})}},e.get({id:b.getCurrentUser().id,controller:"mail",controller1:"queues"}).$promise.then(function(b){a.table1.data=b.rows})["finally"](function(){d.socket.on("user_has_mail_queue:save",function(c){c.UserId!=b.getCurrentUser().id||_.find(a.table1.data,{id:c.MailQueueId})||a.table1.data.push({id:c.MailQueueId,UserHasMailQueue:c})}),d.socket.on("user_has_mail_queue:remove",function(c){c.UserId===b.getCurrentUser().id&&_.remove(a.table1.data,{id:c.MailQueueId})})})["catch"](function(a){console.error(a)}),h.get({controller:"waiting",controller2:"applications"}).$promise.then(function(b){a.table2.data=b.rows})["finally"](function(){d.socket.on("report_mail_session:save",function(b){var c=_.find(a.table2.data,{id:b.id});c?(_.merge(c,b),b.leaveAt&&i(function(){_.remove(a.table2.data,{id:b.id})},1e4)):b.leaveAt||a.table2.data.push(b)}),d.socket.on("report_mail_session:remove",function(b){_.remove(a.table2.data,{id:b.id})})})["catch"](function(a){console.log(a)})},a.initWidget=function(b){var e;switch(b){case"timeout":case"waiting":e=h;break;default:e=c}return e.get({id:b}).$promise.then(function(c){a[b]=c.value,a.charts={interactions:{labels:[f.instant("APPLICATION_DASHBOARD_NEW"),f.instant("APPLICATION_DASHBOARD_OPEN"),f.instant("APPLICATION_DASHBOARD_PENDING"),f.instant("APPLICATION_DASHBOARD_CLOSED")],values:[a["new"],a.open,a.pending,a.closed],colours:["#44B6AE","#578EBE","#35AA47","#8775A7"]}},d.socket.on("report_mail_dashboard:"+b,function(c){a[b]=c.value,a.charts.interactions.values=[a["new"],a.open,a.pending,a.closed]})})["catch"](function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").controller("DashboardOpenChannelCtrl",["$scope","Auth","OpenChannelRoom","socket","Agent","$translate","$q","ReportOpenChannelSession","$timeout",function(a,b,c,d,e,f,g,h,i){a.Auth=b,a.moment=moment,a["new"]=0,a.open=0,a.pending=0,a.closed=0,a.initAgent=function(){a.table1={enableGridMenu:!1,enableHorizontalScrollbar:0,enableVerticalScrollbar:0,multiSelect:!0,columnDefs:[{name:"UserHasOpenchannelQueue.queue",headerCellFilter:"translate",displayName:"APPLICATION_QUEUE",cellClass:"text-center ui-grid-vcenter"}],data:[],onRegisterApi:function(b){a.gridApi=b}},a.table2={headerCellFilter:"translate",enableHorizontalScrollbar:0,enableVerticalScrollbar:0,enableFiltering:!0,columnDefs:[{name:"roomid",displayName:"APPLICATION_INTERACTION_ID",headerCellFilter:"translate"},{name:"accountname",displayName:"APPLICATION_ACCOUNT_NAME",headerCellFilter:"translate"},{name:"application",displayName:"APPLICATION_APPLICATION",headerCellFilter:"translate", -cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{row.entity.application}} <span data-ng-if=\"row.entity.application == 'queue' && row.entity.queuename\">({{row.entity.queuename}})</span></div>"},{name:"status",displayName:"APPLICATION_STATUS",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div><span data-ng-if="!row.entity.leaveAt">{{\'APPLICATION_QUEUESTATUS_WAITING\' | translate}}</span><span data-ng-if="row.entity.leaveAt && row.entity.complete">{{\'APPLICATION_QUEUESTATUS_COMPLETE\' | translate}}</span><span data-ng-if="row.entity.leaveAt && row.entity.timeout">{{\'APPLICATION_TIMEOUT\' | translate}}</span><span data-ng-if="!row.entity.leaveAt"> [<css-timer start-time="row.entity.updatedAt"></css-timer>]</span></div>',enableSorting:!1,enableColumnMenu:!1,enableFiltering:!1},{name:"membername",displayName:"APPLICATION_AGENT",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{row.entity.membername || ''}}</span></div>"}],data:[],gridMenuTitleFilter:function(a){var b=g.defer();return b.resolve(f.instant(a)),b.promise},onRegisterApi:function(b){a.gridApi=b}},e.get({id:b.getCurrentUser().id,controller:"openchannel",controller1:"queues"}).$promise.then(function(b){a.table1.data=b.rows})["finally"](function(){d.socket.on("user_has_openchannel_queue:save",function(c){c.UserId!=b.getCurrentUser().id||_.find(a.table1.data,{id:c.OpenChannelQueueId})||a.table1.data.push({id:c.OpenChannelQueueId,UserHasOpenChannelQueue:c})}),d.socket.on("user_has_openchannel_queue:remove",function(c){c.UserId===b.getCurrentUser().id&&_.remove(a.table1.data,{id:c.OpenChannelQueueId})})})["catch"](function(a){console.error(a)}),h.get({controller:"waiting",controller2:"applications"}).$promise.then(function(b){a.table2.data=b.rows})["finally"](function(){d.socket.on("report_openchannel_session:save",function(b){var c=_.find(a.table2.data,{id:b.id});c?(_.merge(c,b),b.leaveAt&&i(function(){_.remove(a.table2.data,{id:b.id})},1e4)):b.leaveAt||a.table2.data.push(b)}),d.socket.on("report_openchannel_session:remove",function(b){_.remove(a.table2.data,{id:b.id})})})["catch"](function(a){console.log(a)})},a.initWidget=function(b){var e;switch(b){case"timeout":case"waiting":e=h;break;default:e=c}return e.get({id:b}).$promise.then(function(c){a[b]=c.value,a.charts={interactions:{labels:[f.instant("APPLICATION_DASHBOARD_NEW"),f.instant("APPLICATION_DASHBOARD_OPEN"),f.instant("APPLICATION_DASHBOARD_PENDING"),f.instant("APPLICATION_DASHBOARD_CLOSED")],values:[a["new"],a.open,a.pending,a.closed],colours:["#44B6AE","#578EBE","#35AA47","#8775A7"]}},d.socket.on("report_openchannel_dashboard:"+b,function(c){a[b]=c.value,a.charts.interactions.values=[a["new"],a.open,a.pending,a.closed]})})["catch"](function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").controller("DashboardSmsCtrl",["$scope","Auth","SmsRoom","socket","Agent","$translate","$q","ReportSmsSession","$timeout",function(a,b,c,d,e,f,g,h,i){a.Auth=b,a.moment=moment,a["new"]=0,a.open=0,a.pending=0,a.closed=0,a.initAgent=function(){a.table1={enableGridMenu:!1,enableHorizontalScrollbar:0,enableVerticalScrollbar:0,multiSelect:!0,columnDefs:[{name:"UserHasSmsQueue.queue",headerCellFilter:"translate",displayName:"APPLICATION_QUEUE",cellClass:"text-center ui-grid-vcenter"}],data:[],onRegisterApi:function(b){a.gridApi=b}},a.table2={headerCellFilter:"translate",enableHorizontalScrollbar:0,enableVerticalScrollbar:0,enableFiltering:!0,columnDefs:[{name:"roomid",displayName:"APPLICATION_INTERACTION_ID",headerCellFilter:"translate"},{name:"accountname",displayName:"APPLICATION_ACCOUNT_NAME",headerCellFilter:"translate"},{name:"application",displayName:"APPLICATION_APPLICATION",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{row.entity.application}} <span data-ng-if=\"row.entity.application == 'queue' && row.entity.queuename\">({{row.entity.queuename}})</span></div>"},{name:"status",displayName:"APPLICATION_STATUS",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div><span data-ng-if="!row.entity.leaveAt">{{\'APPLICATION_QUEUESTATUS_WAITING\' | translate}}</span><span data-ng-if="row.entity.leaveAt && row.entity.complete">{{\'APPLICATION_QUEUESTATUS_COMPLETE\' | translate}}</span><span data-ng-if="row.entity.leaveAt && row.entity.timeout">{{\'APPLICATION_TIMEOUT\' | translate}}</span><span data-ng-if="!row.entity.leaveAt"> [<css-timer start-time="row.entity.updatedAt"></css-timer>]</span></div>',enableSorting:!1,enableColumnMenu:!1,enableFiltering:!1},{name:"membername",displayName:"APPLICATION_AGENT",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{row.entity.membername || ''}}</span></div>"}],data:[],gridMenuTitleFilter:function(a){var b=g.defer();return b.resolve(f.instant(a)),b.promise},onRegisterApi:function(b){a.gridApi=b}},e.get({id:b.getCurrentUser().id,controller:"sms",controller1:"queues"}).$promise.then(function(b){a.table1.data=b.rows})["finally"](function(){d.socket.on("user_has_sms_queue:save",function(c){c.UserId!=b.getCurrentUser().id||_.find(a.table1.data,{id:c.SmsQueueId})||a.table1.data.push({id:c.SmsQueueId,UserHasSmsQueue:c})}),d.socket.on("user_has_sms_queue:remove",function(c){c.UserId===b.getCurrentUser().id&&_.remove(a.table1.data,{id:c.SmsQueueId})})})["catch"](function(a){console.error(a)}),h.get({controller:"waiting",controller2:"applications"}).$promise.then(function(b){a.table2.data=b.rows})["finally"](function(){d.socket.on("report_sms_session:save",function(b){var c=_.find(a.table2.data,{id:b.id});c?(_.merge(c,b),b.leaveAt&&i(function(){_.remove(a.table2.data,{id:b.id})},1e4)):b.leaveAt||a.table2.data.push(b)}),d.socket.on("report_sms_session:remove",function(b){_.remove(a.table2.data,{id:b.id})})})["catch"](function(a){console.log(a)})},a.initWidget=function(b){var e;switch(b){case"timeout":case"waiting":e=h;break;default:e=c}return e.get({id:b}).$promise.then(function(c){a[b]=c.value,a.charts={interactions:{labels:[f.instant("APPLICATION_DASHBOARD_NEW"),f.instant("APPLICATION_DASHBOARD_OPEN"),f.instant("APPLICATION_DASHBOARD_PENDING"),f.instant("APPLICATION_DASHBOARD_CLOSED")],values:[a["new"],a.open,a.pending,a.closed],colours:["#44B6AE","#578EBE","#35AA47","#8775A7"]}},d.socket.on("report_sms_dashboard:"+b,function(c){a[b]=c.value,a.charts.interactions.values=[a["new"],a.open,a.pending,a.closed]})})["catch"](function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").controller("DashboardVoiceCtrl",["$scope","$rootScope","$timeout","Auth","ReportQueue","ReportCall","Agent","VoiceQueue","Dashboard","socket",function(a,b,c,d,e,f,g,h,i,j){a.moment=moment,a.radioSwitch={size:"mini",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"success",onColor:"danger"};var k=function(a,b){var c=a?30*a+130:177;angular.element(document.getElementsByName(b)[0]).css("height",c+"px")};a.initUser=function(){var b;if(a.user=d.getCurrentUser(),a.voice={},a.$on("$destroy",function(){b&&(b.terminate(),j.socket.removeAllListeners("dashboard:voice:waiting"),j.socket.removeAllListeners("dashboard:voice:active"),j.socket.removeAllListeners("dashboard:voice:complete"),j.socket.removeAllListeners("dashboard:voice:abandon"),j.socket.removeAllListeners("dashboard:voice:unmanaged"),j.socket.removeAllListeners("dashboard:voice:holdtime"),j.socket.removeAllListeners("dashboard:voice:talktime"))}),a.onmessage=function(b){a.voice=b.data,a.$apply()},window.Worker){switch(b=new Worker("assets/workers/dashboard/voice/worker.js"),a.user.role){case"admin":h.get().$promise.then(function(a){return b.postMessage({evt:"myQueues",queues:a.rows}),i.get({id:"voice",controller:"init"}).$promise}).then(function(a){a.evt="dashboard:voice:init",b.postMessage(a)})["catch"](function(a){console.error(a)});break;case"user":b.postMessage({evt:"myQueues",queues:a.user.PVoiceQueues}),i.get({id:"voice",controller:"init"}).$promise.then(function(a){a.evt="dashboard:voice:init",b.postMessage(a)})}b.onmessage=a.onmessage}j.socket.on("dashboard:voice:waiting",function(a){a.evt="dashboard:voice:waiting",b.postMessage(a)}),j.socket.on("dashboard:voice:active",function(a){a.evt="dashboard:voice:active",b.postMessage(a)}),j.socket.on("dashboard:voice:complete",function(a){a.evt="dashboard:voice:complete",b.postMessage(a)}),j.socket.on("dashboard:voice:abandon",function(a){a.evt="dashboard:voice:abandon",b.postMessage(a)}),j.socket.on("dashboard:voice:unmanaged",function(a){a.evt="dashboard:voice:unmanaged",b.postMessage(a)}),j.socket.on("dashboard:voice:talktime",function(a){a.evt="dashboard:voice:talktime",b.postMessage(a)}),j.socket.on("dashboard:voice:holdtime",function(a){a.evt="dashboard:voice:holdtime",b.postMessage(a)}),j.socket.on("dashboard:voice:outbound",function(a){a.evt="dashboard:voice:outbound",b.postMessage(a)})},a.initAgent=function(){return a.agent=d.getCurrentUser(),j.socket.on("voice:queue:agent:join",function(b){b.loggedAt=moment().format("YYYY-MM-DD HH:mm:ss"),b.callstaken=0,a.table1.data.push(b)}),j.socket.on("voice:queue:agent:leave",function(b){_.remove(a.table1.data,{queue:b.queue})}),a.table1={enableHorizontalScrollbar:0,enableVerticalScrollbar:0,enableFiltering:!0,enableSorting:!0,showGridFooter:!0,paginationPageSizes:[10,25,50,75],paginationPageSize:10,columnDefs:[{name:"queue",headerCellFilter:"translate",displayName:"APPLICATION_QUEUE",cellClass:"text-center ui-grid-vcenter"},{name:"loggedAt",displayName:"logged At",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div><span am-time-ago="row.entity.loggedAt"></span></div>'},{name:"lastcall",headerCellFilter:"translate",displayName:"APPLICATION_LAST_CALL",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div><span am-time-ago="row.entity.lastcall"></span></div>'},{name:"callstaken",headerCellFilter:"translate",displayName:"APPLICATION_CALLS_TAKEN",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div><span>{{row.entity.callstaken || 0}}</span></div>"}],data:[],onRegisterApi:function(b){a.gridApi=b,a.gridApi.grid.registerDataChangeCallback(function(){k(a.table1.paginationPageSize>a.table1.data.length?a.table1.data.length:a.table1.paginationPageSize,"table1")}),a.gridApi.pagination.on.paginationChanged(a,function(b,c){k(c>a.table1.data.length?a.table1.data.length:c,"table1")})}},a.table2={enableGridMenu:!1,enableHorizontalScrollbar:0,enableVerticalScrollbar:0,multiSelect:!1,columnDefs:[{name:"queue",displayName:"APPLICATION_QUEUE",headerCellFilter:"translate"},{name:"status",displayName:"APPLICATION_STATUS",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div><span data-ng-if="!row.entity.queuecallerleaveAt">{{\'APPLICATION_QUEUESTATUS_WAITING\' | translate}}</span><span data-ng-if="row.entity.queuecallerleaveAt && !row.entity.queuecallercomplete && !row.entity.queuecallerabandon">{{\'APPLICATION_TALKING\' | translate}}</span><span data-ng-if="row.entity.queuecallercomplete">{{\'APPLICATION_QUEUESTATUS_COMPLETE\' | translate}}</span><span data-ng-if="row.entity.queuecallerabandon">{{\'APPLICATION_QUEUESTATUS_ABANDON\' | translate}}</span><span data-ng-if="!row.entity.queuecallerleaveAt">[<css-timer start-time="row.entity.updatedAt"></css-timer>]</span></div>',enableSorting:!1,enableColumnMenu:!1,enableFiltering:!1},{name:"caller",displayName:"APPLICATION_CALLER",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{row.entity.calleridnum || ''}} {{row.entity.calleridname || ''}}</span></div>",enableSorting:!1,enableColumnMenu:!1,enableFiltering:!1},{name:"position",displayName:"APPLICATION_POSITION",headerCellFilter:"translate"},{name:"lastAssignedTo",displayName:"APPLICATION_AGENT",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter"}],data:[],onRegisterApi:function(b){a.gridApi1=b,a.gridApi1.grid.registerDataChangeCallback(function(){k(a.gridApi1.core.getVisibleRows(a.gridApi1.grid).length,"table2")})}},a.table3={exporterCsvFilename:"abandoned_calls.csv",enableRowHeaderSelection:!0,paginationPageSizes:[10,25,50,75],paginationPageSize:10,enableFiltering:!0,enableSorting:!0,enableGridMenu:!1,flatEntityAccess:!0,showGridFooter:!0,fastWatch:!0,enableSelectAll:!1,enableHorizontalScrollbar:0,enableVerticalScrollbar:1,columnDefs:[{name:"queue",displayName:"APPLICATION_QUEUE",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter"},{name:"caller",displayName:"APPLICATION_CALLER",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{row.entity.calleridnum || ''}} {{row.entity.calleridname || ''}}</div>"},{name:"createdAt",displayName:"APPLICATION_DATE",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{row.entity.updatedAt | date:'yyyy-MM-dd HH:mm:ss'}}</div>"},{name:"lastAssignedTo",cellClass:"text-center ui-grid-vcenter",displayName:"APPLICATION_LAST_ASSIGNED_TO",headerCellFilter:"translate"},{name:"assigned",displayName:"APPLICATION_STATUS",headerCellFilter:"translate",cellTemplate:'<div class="centered-uigrid-td"><input data-ng-change="grid.appScope.updateItem(row.entity)", bs-switch ng-model="row.entity.assigned" type="checkbox" switch-active="{{ !row.entity.assigned || grid.appScope.agent.name === row.entity.lastAssignedTo }}" switch-on-text="{{ \'APPLICATION_ASSIGNED\' | translate }}" switch-off-text="{{ \'APPLICATION_FREE\' | translate }}" switch-on-color="{{ grid.appScope.radioSwitch.onColor }}" switch-off-color="{{ grid.appScope.radioSwitch.offColor }}" switch-animate="{{ grid.appScope.radioSwitch.animate }}" switch-size="{{ grid.appScope.radioSwitch.size }}" switch-label="{{ grid.appScope.radioSwitch.label }}" switch-icon="{{ grid.appScope.radioSwitch.icon }}" switch-radio-off="{{ grid.appScope.radioSwitch.radioOff }}" switch-label-width="{{ grid.appScope.radioSwitch.labelWidth }}" switch-handle-width="{{ grid.appScope.radioSwitch.handleWidth }}"></div>',enableFiltering:!1}],data:[],onRegisterApi:function(b){a.gridApi2=b,a.gridApi2.grid.registerDataChangeCallback(function(){k(a.gridApi2.core.getVisibleRows(a.gridApi2.grid).length,"table3")})}},g.get({id:d.getCurrentUser().id,controller:"voice",controller1:"queues"}).$promise.then(function(b){a.table1.data=_.map(b.rows,function(a){return{queue:a.UserHasVoiceQueue.queue,loggedAt:a.UserHasVoiceQueue.loggedAt,callstaken:a.UserHasVoiceQueue.callstaken,lastcall:a.UserHasVoiceQueue.lastcall}})})["finally"](function(){k(a.table1.paginationPageSize>a.table1.data.length?a.table1.data.length:a.table1.paginationPageSize,"table1"),j.socket.on("voice:queue:update",function(b){var c=_.find(a.table1.data,{queue:b.queue});c?_.merge(c,b):a.table1.data.push(b)}),j.socket.on("user_has_voice_queue:remove",function(b){b.UserId===d.getCurrentUser().id&&_.remove(a.table1.data,{queue:b.queue})}),j.socket.on("user_has_voice_queue:save",function(b){if(b.UserId===d.getCurrentUser().id){var c=_.find(a.table1.data,{queue:b.queue});!c&&b.logged&&a.table1.data.unshift({queue:b.queue,loggedAt:moment(),lastcall:null,callstaken:0})}})})["catch"](function(a){console.error(a)}),e.get({id:"waiting",controller:"calls"}).$promise.then(function(b){a.table2.data=b.rows})["finally"](function(){j.socket.on("report_queue:save",function(b){a.table2.data.push(b)}),j.socket.on("report_queue:update",function(b){var d=_.find(a.table2.data,{id:b.id});d&&(_.merge(d,b),b.queuecallerleaveAt&&c(function(){_.remove(a.table2.data,{id:b.id})},3e3))})})["catch"](function(a){console.error(a)}),e.get({controller:"abandoned",controller2:"all"}).$promise.then(function(b){a.table3.data=b.rows})["catch"](function(a){console.error(a)})["finally"](function(){j.socket.on("report_queue:update",function(b){b.queuecallerabandon&&a.table3.data.unshift(b)})})},a.updateItem=function(b){return e.update({id:b.id},{assigned:b.assigned,lastAssignedTo:b.assigned?a.agent.name:void 0}).$promise["catch"](function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.desk",{url:"/desk",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin"],redirectTo:"main.dashboard.voice"}}})}]),angular.module("xCallyShuttleApp").factory("DeskAccount",["$resource",function(a){return a("/api/desk/accounts/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("DeskListCtrl",["$scope","$http","$rootScope","xAlert","$translate","socket","Modal","stResource",function(a,b,c,d,e,f,g,h){a.conf={accountsByPage:{name:"10",value:10}},a.accountsByPage=[{name:"10",value:10},{name:"25",value:25},{name:"50",value:50},{name:"All",value:0}],a.accounts={checked:[]},a.check=function(b,c){c?a.accounts.checked=angular.copy(_.map(a.displayedDeskAccounts,"id")):a.accounts.checked=[]},a.getAccounts=function(b){return _.map(a.displayedDeskAccounts,function(a){var c={};return b.forEach(function(b){c[b]=a[b]}),c})},a.initList=function(b){f.unsyncUpdates("desk_account"),b.url="/api/desk/accounts",h.getPage(b).then(function(d){a.displayedDeskAccounts=d.rows,b.pagination.numberOfPages=d.total_pages,c.updateTableConfig(a.accountsByPage,a.displayedDeskAccounts.length),c.updateTableConfig(a.conf.accountsByPage,a.displayedDeskAccounts.length)}),f.socket.on("desk_account:save",function(){a.initList(b)}),f.socket.on("desk_account:remove",function(c){a.accounts.checked=_.without(a.accounts.checked,c.id),a.initList(b)})},a.deleteItem=g.confirm["delete"](function(a){b["delete"]("/api/desk/accounts/"+a).success(function(){d.show(e.instant("MESSAGE_WELL_DONE")+"!","success")}).error(function(a){d.error(a)})}),a.deleteItems=g.confirm["delete"](function(){b["delete"]("/api/desk/accounts",{params:{id:a.accounts.checked}}).success(function(){d.show(e.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){d.error(a)})}),a.checkAccount=function(a){b.get("/api/desk/accounts/"+a+"/check").then(function(){d.show(e.instant("MESSAGE_ACCOUNT_VERIFIED"),"success")})["catch"](function(){d.show(e.instant("MESSAGE_ACCOUNT_INVALID"),"danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.desk.list",{url:"/list",templateUrl:"app/desk/list/list.html",controller:"DeskListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"smart-table",insertBefore:"#ng_load_plugins_before",files:["assets/css/smart_table.css"]}])}]}})}]),angular.module("xCallyShuttleApp").controller("DeskViewCtrl",["$scope","$http","$stateParams","$translate","$location","WizardHandler","socket","xAlert","Modal","desk_com",function(a,b,c,d,e,f,g,h,i,j){a.$stateParams=c,a.config={autoHideScrollbar:!1,theme:"dark",advanced:{updateOnContentResize:!0},setHeight:500,scrollInertia:0},a.initConfiguration=function(){a.formsConfiguration={},a.configuration={}},a.goNext=function(){f.wizard().next()},a.formValidation=function(a){return a},a.$on("$destroy",function(){g.unsyncUpdates("desk_configuration"),g.unsyncUpdates("desk_field")}),a.initView=function(){b.get("/api/desk/accounts/"+c.id).success(function(b){a.account=b}).error(function(a){h.error(a)})},a.updateItem=function(){b.put("/api/desk/accounts/"+c.id,a.account).success(function(){h.show(d.instant("MESSAGE_WELL_DONE")+".","success")}).error(function(){h.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG")+".","danger")})},a.getConfigurations=function(){b.get("/api/desk/configurations",{params:{AccountId:c.id}}).success(function(b){a.configurations=b,g.socket.on("desk_configuration:remove",function(b){_.remove(a.configurations,{id:b.id})})}).error(function(a){h.error(a)})},a.deleteConfiguration=i.confirm["delete"](function(a){b["delete"]("api/desk/configurations/"+a).success(function(){h.show(d.instant("MESSAGE_WELL_DONE"),"success")}).error(function(){h.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})}),a.createConfiguration=function(){a.configuration.AccountId=c.id,b.post("api/desk/configurations",a.configuration).success(function(a){e.path("desk/view/"+c.id+"/configurations/settings/"+a.id)}).error(function(){h.show("Something went wrong!","danger")})},a.fieldType=["string","variable"],a.descFieldType=["string","key_value"],a.getFields=function(){b.get("/api/desk/accounts/"+c.id+"/fields").success(function(b){a.accountFields=j.fields.concat(b)}).error(function(a){h.error(a)})},a.getConfiguration=function(){b.get("/api/desk/configurations/"+c.configurationId).success(function(b){a.configurationName=b.name,a.subjectConfig=b.Subject,a.descriptionConfig=b.Description,a.fieldConfig=b.Field,g.socket.on("desk_field:remove",function(b){_.remove(a.subjectConfig,{id:b.id}),_.remove(a.descriptionConfig,{id:b.id}),_.remove(a.fieldConfig,{id:b.id})})}).error(function(a){h.error(a)})},a.getVariables=function(){b.get("/api/variables").success(function(b){a.variables=b.rows}).error(function(a){h.error(a)})},a.removeItem=function(a){b["delete"]("api/desk/fields/"+a.id).success(function(){h.show(d.instant("MESSAGE_WELL_DONE"),"success")}).error(function(){h.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},a.addItemSubject=function(){var d={type:"string",content:""};b.post("/api/desk/configurations/"+c.configurationId+"/subject",d).success(function(b){a.subjectConfig.push(b)}).error(function(){h.show("Something went wrong!","danger")})},a.addItemDescription=function(){var d={type:"string",content:""};b.post("/api/desk/configurations/"+c.configurationId+"/description",d).success(function(b){a.descriptionConfig.push(b)}).error(function(){h.show("Something went wrong!","danger")})},a.addItemField=function(){var d={content:""};b.post("/api/desk/configurations/"+c.configurationId+"/field",d).success(function(b){a.fieldConfig.push(b)}).error(function(){h.show("Something went wrong!","danger")})},a.updateField=function(a){b.put("/api/desk/fields/"+a.id,a).success(function(){}).error(function(){h.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG")+".","danger")})},a.changeType=function(b){"variable"===b.type?b.content="":"string"===b.type&&(b.VariableId=null),a.updateField(b)},a.changeDescType=function(b){"key_value"===b.type?(b.content="","string"===b.keyType?b.VariableId=null:"variable"===b.keyType&&(b.keyContent="")):"string"===b.type&&(b.VariableId=null,b.key="",b.keyContent=""),a.updateField(b)},a.changeFieldType=function(b){if(b.content="",b.idField){var c=_.find(a.accountFields,"id",b.idField);c&&(b.customField=_.result(c,"custom",!0))}a.updateField(b)},a.getSystemFieldOptions=function(b){if(b){var c=_.find(a.accountFields,"id",b);return c?c.data.choices?c.data.choices:null:void 0}}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.desk.view",{url:"/view/:id",templateUrl:"app/desk/view/view.html",controller:"DeskViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.desk.view.account",{url:"/account",templateUrl:"app/desk/view/view.account.html"}).state("main.desk.view.configurations",{url:"/configurations",templateUrl:"app/desk/view/view.configurations.html"}).state("main.desk.view.configurations.settings",{url:"/settings/:configurationId",templateUrl:"app/desk/view/view.configurationSettings.html",controller:"DeskViewCtrl"}).state("main.desk.view.configuration",{url:"/configuration",templateUrl:"app/desk/view/view.configuration.html"})}]),angular.module("xCallyShuttleApp").controller("DeskWizardCtrl",["$scope","$http","$location","$translate","xAlert","WizardHandler",function(a,b,c,d,e,f){a.translate=d,a.initWizard=function(){a.$translate=d,a.forms={},a.item={}},a.next=function(){f.wizard().next()},a.exitValidation=function(a){return a},a.createItem=function(){console.log(a.item),b.post("api/desk/accounts",a.item).success(function(){e.show(d.instant("MESSAGE_WELL_DONE")+".","success"),c.path("/desk/list")}).error(function(){e.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG")+".","danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.desk.wizard",{url:"/wizard",templateUrl:"app/desk/wizard/wizard.html",controller:"DeskWizardCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.freshdesk",{url:"/freshdesk",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin"],redirectTo:"main.dashboard.voice"}}})}]),angular.module("xCallyShuttleApp").factory("FreshdeskAccount",["$resource",function(a){return a("/api/freshdesk/accounts/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("FreshdeskListCtrl",["$scope","$http","$rootScope","xAlert","$translate","socket","Modal","stResource",function(a,b,c,d,e,f,g,h){a.conf={accountsByPage:{name:"10",value:10}},a.accountsByPage=[{name:"10",value:10},{name:"25",value:25},{name:"50",value:50},{name:"All",value:0}],a.accounts={checked:[]},a.check=function(b,c){c?a.accounts.checked=angular.copy(_.map(a.displayedFreshdeskAccounts,"id")):a.accounts.checked=[]},a.getAccounts=function(b){return _.map(a.displayedFreshdeskAccounts,function(a){var c={};return b.forEach(function(b){c[b]=a[b]}),c})},a.initList=function(b){f.unsyncUpdates("freshdesk_account"),b.url="/api/freshdesk/accounts",h.getPage(b).then(function(d){a.displayedFreshdeskAccounts=d.rows,b.pagination.numberOfPages=d.total_pages,c.updateTableConfig(a.accountsByPage,a.displayedFreshdeskAccounts.length),c.updateTableConfig(a.conf.accountsByPage,a.displayedFreshdeskAccounts.length)}),f.socket.on("freshdesk_account:save",function(){a.initList(b)}),f.socket.on("freshdesk_account:remove",function(c){a.accounts.checked=_.without(a.accounts.checked,c.id),a.initList(b)})},a.deleteItem=g.confirm["delete"](function(a){b["delete"]("/api/freshdesk/accounts/"+a).success(function(){d.show(e.instant("MESSAGE_WELL_DONE")+"!","success")}).error(function(a){d.error(a)})}),a.deleteItems=g.confirm["delete"](function(){b["delete"]("/api/freshdesk/accounts",{params:{id:a.accounts.checked}}).success(function(){d.show(e.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){d.error(a)})}),a.checkAccount=function(a){b.get("/api/freshdesk/accounts/"+a+"/check").then(function(){d.show(e.instant("MESSAGE_ACCOUNT_VERIFIED"),"success")})["catch"](function(){d.show(e.instant("MESSAGE_ACCOUNT_INVALID"),"danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.freshdesk.list",{url:"/list",templateUrl:"app/freshdesk/list/list.html",controller:"FreshdeskListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"smart-table",insertBefore:"#ng_load_plugins_before",files:["assets/css/smart_table.css"]}])}]}})}]),angular.module("xCallyShuttleApp").controller("FreshdeskViewCtrl",["$scope","$http","$stateParams","$translate","$location","$filter","WizardHandler","socket","xAlert","Modal",function(a,b,c,d,e,f,g,h,i,j){a.$stateParams=c,a.config={autoHideScrollbar:!1,theme:"dark",advanced:{updateOnContentResize:!0},setHeight:500,scrollInertia:0},a.initConfiguration=function(){a.formsConfiguration={},a.configuration={}},a.goNext=function(){g.wizard().next()},a.formValidation=function(a){return a},a.$on("$destroy",function(){h.unsyncUpdates("freshdesk_configuration"),h.unsyncUpdates("freshdesk_field")}),a.initView=function(){b.get("/api/freshdesk/accounts/"+c.id).success(function(b){a.account=b}).error(function(a){i.error(a)})},a.updateItem=function(){b.put("/api/freshdesk/accounts/"+c.id,a.account).success(function(){i.show(d.instant("MESSAGE_WELL_DONE")+".","success")}).error(function(){i.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG")+".","danger")})},a.getConfigurations=function(){b.get("/api/freshdesk/configurations",{params:{AccountId:c.id}}).success(function(b){a.configurations=b,h.socket.on("freshdesk_configuration:remove",function(b){_.remove(a.configurations,{id:b.id})})}).error(function(a){i.error(a)})},a.deleteConfiguration=j.confirm["delete"](function(a){b["delete"]("api/freshdesk/configurations/"+a).success(function(){i.show(d.instant("MESSAGE_WELL_DONE"),"success")}).error(function(){i.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})}),a.createConfiguration=function(){a.configuration.AccountId=c.id,b.post("api/freshdesk/configurations",a.configuration).success(function(a){e.path("freshdesk/view/"+c.id+"/configurations/settings/"+a.id)}).error(function(){i.show("Something went wrong!","danger")})},a.fieldType=["string","variable"],a.descFieldType=["string","key_value"],a.getFields=function(){b.get("/api/freshdesk/accounts/"+c.id+"/fields").success(function(b){a.accountFields=[],b=f("freshdesk")(b),_.forEach(b,function(b){a.accountFields.push(b.ticket_field)})}).error(function(a){i.error(a)})},a.getConfiguration=function(){b.get("/api/freshdesk/configurations/"+c.configurationId).success(function(b){a.configurationName=b.name,a.subjectConfig=b.Subject,a.descriptionConfig=b.Description,a.fieldConfig=b.Field,h.socket.on("freshdesk_field:remove",function(b){_.remove(a.subjectConfig,{id:b.id}),_.remove(a.descriptionConfig,{id:b.id}),_.remove(a.fieldConfig,{id:b.id})})}).error(function(a){i.error(a)})},a.getVariables=function(){b.get("/api/variables").success(function(b){a.variables=b.rows}).error(function(a){i.error(a)})},a.removeItem=function(a){b["delete"]("api/freshdesk/fields/"+a.id).success(function(){i.show(d.instant("MESSAGE_WELL_DONE"),"success")}).error(function(){i.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},a.addItemSubject=function(){var d={type:"string",content:""};b.post("/api/freshdesk/configurations/"+c.configurationId+"/subject",d).success(function(b){a.subjectConfig.push(b)}).error(function(){i.show("Something went wrong!","danger")})},a.addItemDescription=function(){var d={type:"string",content:""};b.post("/api/freshdesk/configurations/"+c.configurationId+"/description",d).success(function(b){a.descriptionConfig.push(b)}).error(function(){i.show("Something went wrong!","danger")})},a.addItemField=function(){var d={content:""};b.post("/api/freshdesk/configurations/"+c.configurationId+"/field",d).success(function(b){a.fieldConfig.push(b)}).error(function(){i.show("Something went wrong!","danger")})},a.updateField=function(a){b.put("/api/freshdesk/fields/"+a.id,a).success(function(){}).error(function(){i.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG")+".","danger")})},a.changeType=function(b){"variable"===b.type?b.content="":"string"===b.type&&(b.VariableId=null),a.updateField(b)},a.changeDescType=function(b){"key_value"===b.type?(b.content="","string"===b.keyType?b.VariableId=null:"variable"===b.keyType&&(b.keyContent="")):"string"===b.type&&(b.VariableId=null,b.key="",b.keyContent=""),a.updateField(b)},a.changeFieldType=function(b){if(b.content="",b.idField){var c=_.find(a.accountFields,"name",b.idField);c&&(b.customField=!_.result(c,"default",!0))}a.updateField(b)},a.getSystemFieldOptions=function(b){if(b){var c=_.find(a.accountFields,"name",b);return c?c.choices.length>0?c.choices:null:void 0}}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.freshdesk.view",{url:"/view/:id",templateUrl:"app/freshdesk/view/view.html",controller:"FreshdeskViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.freshdesk.view.account",{url:"/account",templateUrl:"app/freshdesk/view/view.account.html"}).state("main.freshdesk.view.configurations",{url:"/configurations",templateUrl:"app/freshdesk/view/view.configurations.html"}).state("main.freshdesk.view.configurations.settings",{url:"/settings/:configurationId",templateUrl:"app/freshdesk/view/view.configurationSettings.html",controller:"FreshdeskViewCtrl"}).state("main.freshdesk.view.configuration",{url:"/configuration",templateUrl:"app/freshdesk/view/view.configuration.html"})}]),angular.module("xCallyShuttleApp").controller("FreshdeskWizardCtrl",["$scope","$http","$location","$translate","xAlert","WizardHandler",function(a,b,c,d,e,f){ -a.translate=d,a.initWizard=function(){a.$translate=d,a.forms={},a.item={}},a.next=function(){f.wizard().next()},a.exitValidation=function(a){return a},a.createItem=function(){console.log(a.item),b.post("api/freshdesk/accounts",a.item).success(function(){e.show(d.instant("MESSAGE_WELL_DONE")+".","success"),c.path("/freshdesk/list")}).error(function(){e.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG")+".","danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.freshdesk.wizard",{url:"/wizard",templateUrl:"app/freshdesk/wizard/wizard.html",controller:"FreshdeskWizardCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.iframe",{url:"/iframe",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("IframeViewCtrl",["$scope","Auth","Integration","xAlert","$translate","$sce",function(a,b,c,d,e,f){a.Auth=b,a.initView=function(){return c.get({state:"iframe"}).$promise.then(function(c){a.iframe=_.first(c.rows),a.iframe.remoteUri?a.url=f.trustAsResourceUrl(a.iframe.remoteUri):b.isAgent()&&d.show(e.instant("MESSAGE_NO_IFRAME_CONFIGURED")+".","danger")})["catch"](function(a){d.error(a)})},a.updateItem=function(){return b.isAgent()?void 0:c.update({id:a.iframe.id},a.iframe).$promise.then(function(){d.show(e.instant("MESSAGE_WELL_DONE")+".","success")})["catch"](function(a){d.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.iframe.view",{url:"/view",templateUrl:"app/iframe/view/view.html",controller:"IframeViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]}])}]}})}]),angular.module("xCallyShuttleApp").factory("Integration",["$resource",function(a){return a("/api/integrations/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.integrations",{url:"/integrations",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:19}}})}]),angular.module("xCallyShuttleApp").controller("IntegrationListCtrl",["$scope","Modal","socket","FileUploader","Integration","xAlert",function(a,b,c,d,e,f){a.integrationsByPage=10;var g=a.uploader=new d({url:"api/integrations",autoUpload:!0,removeAfterUpload:!0});g.filters.push({name:"zipFilter",fn:function(a){var b="|"+a.type.slice(a.type.lastIndexOf("/")+1)+"|";return-1!=="|zip|".indexOf(b)}}),g.onSuccessItem=function(a,b,c,d){console.info("onSuccessItem",a,b,c,d),f.show(b.name,"success")},g.onErrorItem=function(a,b,c,d){console.info("onErrorItem",a,b,c,d),b.errors.forEach(function(a){f.error(err)})},a.deleteItem=b.confirm["delete"](function(a){e["delete"]({id:a},function(){f.show("Integration Removed","success")},function(a){f.error(a)})}),a.initList=function(){a.integrations=e.query({},function(a){c.syncUpdates("integration",a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.integrations.list",{url:"/list",templateUrl:"app/integration/list/list.html",controller:"IntegrationListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/plugins/bootstrap-fileinput/bootstrap-fileinput.js"]})}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.jscripty",{url:"/jscripty",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").factory("JscriptyProject",["$resource",function(a){return a("/api/jscripty/projects/:id/:controller/:action/:action2",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("JscriptyProjectListCtrl",["$scope","$uibModal","JscriptyProject","gridOptions","Auth",function(a,b,c,d,e){a.Auth=e,a.initView=function(){var b={exporterCsvFilename:"jscriptyProjects.csv",columnDefs:[{name:"name"},{name:"description"},{name:"action",width:300,buttons:[{"class":"blue-hoki",icon:"icon-settings",href:"/jscripty/projects/view/{{row.entity.id}}",hide:e.isAgent()},{"class":" green-turquoise",icon:"fa fa-play",onClick:"grid.appScope.openJscriptyTab(row.entity)"},{"class":"purple",icon:"icon-book-open",href:"/jscripty/projects/report/{{row.entity.id}}/sessions",hide:e.isAgent()},{"class":"red-sunglo",icon:"fa fa-trash",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)",hide:e.isAgent()}]}]};a.gridOptions=d.gridOptions(c,b,a)},a.createItem=function(){var c=b.open({animation:!0,templateUrl:"app/jscripty/project/list/list.create.modal.html",controller:"JscriptyProjectListCreateCtrl"});c.result.then(function(b){console.log(b),a.gridOptions.getPage()})}}]),angular.module("xCallyShuttleApp").controller("JscriptyProjectListCreateCtrl",["$scope","$translate","$uibModalInstance","JscriptyProject","xAlert",function(a,b,c,d,e){a.form={},a.item={},a.save=function(){return d.save(a.item).$promise.then(function(a){e.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)})["catch"](function(a){console.log(a),e.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.jscripty.projects.list",{url:"/list",templateUrl:"app/jscripty/project/list/list.html",controller:"JscriptyProjectListCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.jscripty.projects",{url:"/projects",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("JscriptyProjectReportCtrl",["$scope","uiGridConstants","$http","$state","$stateParams","socket","Auth","Modal","xAlert","$translate","$rootScope","gridOptions","JscriptyProject","$location",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n){a.projectStats={started:0,incomplete:0,completed:0},a.projectId=e.id,a.initView=function(){m.get({id:e.id}).$promise.then(function(b){a.project=b})["catch"](function(a){i.error(a)}),m.get({id:e.id,controller:"sessions"}).$promise.then(function(b){var c=_.groupBy(b.rows,"status");a.projectStats.started=c.started?c.started.length:0,a.projectStats.completed=c.completed?c.completed.length:0,a.projectStats.incomplete=c.incomplete?c.incomplete.length:0})["catch"](function(a){i.error(a)})},a.pdf=function(a,b){var c=[];if(a){var d=html2canvas(document.getElementById(a)),e=d.parse(),f=d.render(e),g=f.toDataURL("image/png");c.push({image:g,width:500,style:"img"})}b.length&&_.forEach(b,function(a){var b=html2canvas(document.getElementById(a.question_id)),d=b.parse(),e=b.render(d),f=e.toDataURL("image/png");c.push({image:f,width:500,style:"img"})});var h={content:c};pdfMake.createPdf(h).download("Project_summary.pdf")},a.getProjectSessions=function(){var c={exporterCsvFilename:"jscriptyProjects.csv",columnDefs:[{name:"session_id",displayName:"APPLICATION_SESSIONID"},{name:"queue",displayName:"APPLICATION_QUEUE"},{name:"membername",displayName:"APPLICATION_AGENT"},{name:"calleridnum",displayName:"APPLICATION_CALLERIDNUM"},{name:"createdAt",displayName:"APPLICATION_STARTEDAT",filterHeaderTemplate:'<div class="ui-grid-filter-container row"><div ng-repeat="colFilter in col.filters" class="col-md-6 col-md-offset-0 col-sm-5 col-sm-offset-0 col-xs-5 col-xs-offset-0"><div custom-grid-date-filter-header></div></div></div>',filters:[{name:"From",condition:b.filter.GREATER_THAN_OR_EQUAL},{name:"To",condition:b.filter.LESS_THAN_OR_EQUAL}]},{name:"completedAt",displayName:"APPLICATION_COMPLETEDAT",filterHeaderTemplate:'<div class="ui-grid-filter-container row"><div ng-repeat="colFilter in col.filters" class="col-md-6 col-md-offset-0 col-sm-5 col-sm-offset-0 col-xs-5 col-xs-offset-0"><div custom-grid-date-filter-header></div></div></div>',filters:[{name:"From",condition:b.filter.GREATER_THAN_OR_EQUAL},{name:"To",condition:b.filter.LESS_THAN_OR_EQUAL}]},{name:"status",displayName:"APPLICATION_STATUS"},{name:"last_question_id",displayName:"APPLICATION_LASTQUESTIONID"},{name:"action",width:100,buttons:[{"class":"blue-hoki",href:"/jscripty/projects/report/{{row.entity.projectId}}/session/{{row.entity.session_id}}",name:"Detail"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteSession(row.entity.session_id)"}]}]};a.gridOptions=l.gridOptions(m,c,a,{id:e.id,controller:"sessions"})},a.deleteSession=function(b){m["delete"]({id:e.id,controller:"sessions",action:b}).$promise.then(function(b){a.gridOptions.getPage(),a.initView(),i.show(j.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){i.error(a)})},a.getSessionDetails=function(){m.get({id:e.id,controller:"sessions",action:e.sessionId}).$promise.then(function(b){a.session=b,a.sessionQuestions=b.ReportJscriptyQuestions})["catch"](function(a){i.error(a)})},a.getQuestionSummary=function(){var b={exporterCsvFilename:"jscriptyProjects.csv",columnDefs:[{name:"question_id",displayName:"APPLICATION_QUESTIONID"},{name:"question_type",displayName:"APPLICATION_QUESTIONTYPE"},{name:"question_label",displayName:"APPLICATION_QUESTIONLABEL"},{name:"question_text",displayName:"APPLICATION_QUESTION"},{name:"count",displayName:"APPLICATION_COUNT",enableFiltering:!1},{name:"action",width:100,buttons:[{"class":"blue-hoki",href:"/jscripty/projects/report/"+e.id+"/detail/{{row.entity.question_id}}",name:"Detail"}]}]};a.gridOptions=l.gridOptions(m,b,a,{id:e.id,controller:"questions",action:"summary"})},a.getQuestionInputs=function(){var b={exporterCsvFilename:"jscriptyProjects.csv",columnDefs:[{name:"session_id",displayName:"APPLICATION_SESSIONID"},{name:"question_id",displayName:"APPLICATION_QUESTIONID",enableFiltering:!1},{name:"question_label",displayName:"APPLICATION_QUESTIONLABEL",enableFiltering:!1},{name:"question_text",displayName:"APPLICATION_QUESTION",enableFiltering:!1},{name:"input_label",displayName:"APPLICATION_INPUTLABEL",enableFiltering:!1},{name:"input_value",cellTemplate:'<div uib-tooltip="{{row.entity.input_value}}">{{row.entity.input_value}}</div>',displayName:"APPLICATION_INPUTVALUE",enableFiltering:!1}]};a.gridOptions=l.gridOptions(m,b,a,{id:e.id,controller:"inputs"})},a.getProjectDetail=function(){a.projectDetail=[],m.query({id:e.id,controller:"questions",action:"detail"}).$promise.then(function(b){console.log(e.questionId),e.questionId?a.projectDetail.push(_.find(b,function(a){return a.question_id==parseInt(e.questionId)})):a.projectDetail=b,console.log(a.projectDetail)})["catch"](function(a){i.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.jscripty.projects.report",{url:"/report/:id",templateUrl:"app/jscripty/project/report/report.html",controller:"JscriptyProjectReportCtrl"}).state("main.jscripty.projects.report.sessions",{url:"/sessions",templateUrl:"app/jscripty/project/report/report.sessions.html"}).state("main.jscripty.projects.report.summary",{url:"/summary",templateUrl:"app/jscripty/project/report/report.summary.html"}).state("main.jscripty.projects.report.inputs",{url:"/inputs",templateUrl:"app/jscripty/project/report/report.inputs.html"}).state("main.jscripty.projects.report.detail",{url:"/detail",templateUrl:"app/jscripty/project/report/report.detail.html"}).state("main.jscripty.projects.report.questionDetail",{url:"/detail/:questionId",controller:"JscriptyProjectReportCtrl",templateUrl:"app/jscripty/project/report/report.detail.html"}).state("main.jscripty.projects.report.sessionDetail",{url:"/session/:sessionId",controller:"JscriptyProjectReportCtrl",templateUrl:"app/jscripty/project/report/report.session.detail.html"})}]),angular.module("xCallyShuttleApp").controller("JscriptyProjectViewCtrl",["$scope","$http","$state","$stateParams","socket","Auth","Modal","xAlert","$translate","$rootScope",function(a,b,c,d,e,f,g,h,i,j){a.jscriptyProject={},a.getProject=function(){b.get("/api/jscripty/projects/"+d.id).success(function(b){a.jscriptyProject=b,angular.element(document).ready(function(){window.onerror=function(a,b,c){try{if(null!=a&&-1!=a.indexOf("Script error."));else{var d=new Image;d.src="assets/plugins/mxgraph/images/1x1.png?msg="+encodeURIComponent(a)+"&url="+encodeURIComponent(b)+"&lnum="+encodeURIComponent(c)}}catch(e){}},b.token=f.getToken();var a=new EditorUi(new Editor);a.openString(b.draft,b.name,b),a.editor.graphChangeListener=function(a,b){var c=b.properties.rtChange||!1;c||(this.modified=!0)}}),e.syncUpdates("jscripty_project",[b],function(a,c,d){c.id===b.id})})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.jscripty.projects.view",{url:"/view/:id",templateUrl:"app/jscripty/project/view/view.html",controller:"JscriptyProjectViewCtrl",authenticate:!0,resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",serie:!0,cache:!1,files:["assets/plugins/mxgraph/css/common.css","assets/plugins/mxgraph/css/explorer.css","assets/plugins/mxgraph/styles/grapheditor.css","assets/plugins/mxgraph/styles/custom.css","assets/plugins/jscripty/js/custom.js","assets/plugins/mxgraph/js/mxClient.js","assets/plugins/jscripty/js/Editor.js","assets/plugins/jscripty/js/Graph.js","assets/plugins/jscripty/js/EditorUi.js","assets/plugins/jscripty/js/Actions.js","assets/plugins/jscripty/js/Menus.js","assets/plugins/jscripty/js/Sidebar.js","assets/plugins/jscripty/js/Toolbar.js","assets/plugins/jscripty/js/Dialogs.js"]}])}]}})}]),angular.module("xCallyShuttleApp").controller("LandingCtrl",["$scope","$location","$window","$timeout","Auth","Setting","YourDashboard",function(a,b,c,d,e,f,g){function h(b,c){var d,f,g=b.length;for(d=0;g>d;d++)if(_.includes(c,b[d].id))if(b[d].SubModules&&b[d].SubModules.length){if(f=h(b[d].SubModules,c))return f}else switch(b[d].id){case 2:var i={};i[e.getRole()]=!0;var j=_.find(a.tempDashboards,i);if(j)return"/tools/yourdashboards/show/"+j.id;break;default:return b[d].path}}function i(c){c||(a.message="MESSAGE_NO_AVAILABLE_MODULES"),d(function(){b.path(c)},500)}a.initLanding=function(){a.year=moment().year(),f.get({controller:"info"}).$promise.then(function(b){a.info=b})["catch"](function(a){console.error(a)});var c,d;return(d=e.getCurrentUser().$promise)?d.then(function(b){switch(c=b,c.role){case"user":if(_.includes(_.map(b.Modules,"id"),2))return g.get().$promise.then(function(d){a.tempDashboards=d.rows,i(h(c.Modules,_.map(b.Modules,"id")))})["catch"](function(){_.remove(c.Modules,{id:2}),i(h(c.Modules,_.map(b.Modules,"id")))});i(h(c.Modules,_.map(b.Modules,"id")));break;case"admin":case"agent":i("/dashboard/voice")}})["catch"](function(a){console.error(a),b.path("/login")}):void b.path("/login")}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("landing",{url:"/landing",templateUrl:"app/landing/landing.html",controller:"LandingCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/error.css","assets/css/login.css"]}])}]}})}]),angular.module("xCallyShuttleApp").controller("LoginCtrl",["$scope","Auth","$location","$window","$rootScope","Setting","xAlert","$stateParams",function(a,b,c,d,e,f,g,h){a.year=moment().year(),a.recovered=h.reset,a.userLogin={},a.userSignUp={},a.loginSubmitted=!1,a.signupSubmitted=!1,a.errorLogin=!1,a.errorSignup=!1,a.errorLog="",a.forgotPassword=!1,a.showRecoverMessage=!1,a.flagLogin1=!1,a.getInfo=function(){return f.get({controller:"info"}).$promise.then(function(b){a.info=b})["catch"](function(a){console.error(a)})},a.toggleLogin=function(){a.flagLogin1=!a.flagLogin1},a.toggleForgotPassword=function(b){a.showRecoverMessage=!1,a.userLogin.email="",a.forgotPassword=b},e.bodyLayout="login",a.$on("$viewContentLoaded",function(){Metronic.init(),Layout.init()}),a.recover=function(){b.recover({email:a.userLogin.email}).then(function(){a.showRecoverMessage=!0})["catch"](function(b){console.log(b),a.showRecoverMessage=!1,g.error(b)})},a.login=function(d){a.loginSubmitted=!0,d.$valid?b.login({name:a.userLogin.name,password:a.userLogin.password,remember:a.userLogin.remember}).then(function(){c.path("/landing")})["catch"](function(b){a.errorLog=b.message||"error",a.errorLogin=!0}):a.errorLogin=!0},a.signup=function(c){a.signupSubmitted=!0,c.$valid?b.createUser({email:a.userSignUp.email,fullname:a.userSignUp.fullname,name:a.userSignUp.name,password:a.userSignUp.password,role:a.userSignUp.role,online:!0})["catch"](function(b){a.errorLog=b.message||"error",a.errorSignup=!0}):a.errorSignup=!0},a.loginOauth=function(a){d.location.href="/auth/"+a}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("login",{url:"/login",templateUrl:"app/login/login.html",params:{reset:null},controller:"LoginCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/login.css"]}])}]}})}]),angular.module("xCallyShuttleApp").factory("Action",["$resource",function(a){return a("/api/actions/:name/:controller",{name:"@name"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("Ami",["$resource",function(a){return a("/api/ami/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("ChooseContactModalCtrl",["$scope","$uibModalInstance","data","xAlert","$translate","Contact",function(a,b,c,d,e,f){function g(){return f.get({id:c.eventId,controller:"checkevent"}).$promise.then(function(b){a.contacts=b.rows})["catch"](function(a){d.error(a)})}function h(){return delete c.type,f.get(c).$promise.then(function(b){a.contacts=b.rows})["catch"](function(a){d.error(a)})}a.open=function(a){b.close(a)},a.getContacts=function(){switch(c.type){case"event":g();break;case"detail":h();break;default:b.dismiss("cancel")}},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("CloseEditedTabModalCtrl",["$scope","$uibModalInstance",function(a,b){a.close=function(){b.close()},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("CloseEditedTabModalJscriptyCtrl",["$scope","$uibModalInstance","project","JscriptyProject","xAlert",function(a,b,c,d,e){a.init=function(){a.project=c},a.close=function(){d.update({id:a.project.projectId,controller:"sessions",action:a.project.sessionId},{status:"incomplete",completedAt:Date(),last_question_id:a.project.lastQuestionId}).$promise.then(function(a){e.show("Project Ended","success")}),b.close()},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("ContactManagerSetDisposition",["$scope","$uibModalInstance","VoiceDisposition",function(a,b,c){a.initDisposition=function(){return c.get().$promise.then(function(b){a.dispositions=b.rows})["catch"](function(a){console.error(a)})},a.item={},a.ok=function(){b.close(a.item)},a.cancel=function(){b.dismiss()}}]),angular.module("xCallyShuttleApp").controller("customGridDateFilterModalCtrl",["$scope","$rootScope","$log","$uibModalInstance","term","hasTime",function(a,b,c,d,e,f){if(a.hasTime=f,a.dateTime={},e)if(f){var g=e.split(" ");a.dateTime.filterDate=moment(g[0]),a.dateTime.time=e[1]?moment(g[1],"HH:mm"):moment()}else a.dateTime.filterDate=moment(e);else f&&(a.dateTime.time=moment());a.setFilterDate=function(b){d.close({date:moment(b).format("YYYY-MM-DD").toString(),time:f?a.dateTime.time?moment(a.dateTime.time).format("HH:mm").toString():moment().format("HH:mm").toString():null})},a.cancelDateFilter=function(){d.dismiss()}}]),angular.module("xCallyShuttleApp").controller("customGridTagsModalCtrl",["$scope","$rootScope","$log","$uibModalInstance","term","Tag","xAlert",function(a,b,c,d,e,f,g){a.initModal=function(){return a.item={},f.get().$promise.then(function(b){a.tags=_.map(b.rows,"name"),a.item.myTags=e})["catch"](function(a){console.log("error retrieving tags"),g.error(a),d.dismiss()})},a.setFilterTags=function(){d.close(a.item.myTags)},a.cancelTagsFilter=function(){d.dismiss()}}]),angular.module("xCallyShuttleApp").factory("templateVariable",["$translate",function(a){return[{id:"voice",label:a.instant("APPLICATION_VOICE"),title:a.instant("APPLICATION_VOICE"),groups:[{label:a.instant("APPLICATION_QUEUE"),values:[{value:"{{uniqueid}}",label:a.instant("APPLICATION_UNIQUEID"),description:a.instant("APPLICATION_UNIQUEID")},{value:"{{calleridnum}}",label:a.instant("APPLICATION_CALLERIDNUM"),description:a.instant("APPLICATION_CALLERIDNUM")},{value:"{{calleridname}}",label:a.instant("APPLICATION_CALLERIDNAME"),description:a.instant("APPLICATION_CALLERIDNAME")},{value:"{{queue}}",label:a.instant("APPLICATION_QUEUE"),description:a.instant("APPLICATION_QUEUE")},{value:"{{interface}}",label:a.instant("APPLICATION_INTERFACE"),description:a.instant("APPLICATION_INTERFACE")},{value:"{{membername}}",label:a.instant("APPLICATION_MEMBERNAME"),description:a.instant("APPLICATION_MEMBERNAME")},{value:"{{holdtime}}",label:a.instant("APPLICATION_HOLDTIME"),description:a.instant("APPLICATION_HOLDTIME")},{value:"{{talktime}}",label:a.instant("APPLICATION_TALKTIME"),description:a.instant("APPLICATION_TALKTIME")},{value:"{{connectedlinenum}}",label:a.instant("APPLICATION_CONNECTEDLINENUM"),description:a.instant("APPLICATION_CONNECTEDLINENUM")},{value:"{{connectedlinename}}",label:a.instant("APPLICATION_CONNECTEDLINENAME"),description:a.instant("APPLICATION_CONNECTEDLINENAME")},{value:"{{agentconnectAt}}",label:a.instant("APPLICATION_CONNECTED_AT"),description:a.instant("APPLICATION_CONNECTED_AT")},{value:"{{agentcalledAt}}",label:a.instant("APPLICATION_CALLED_AT"),description:a.instant("APPLICATION_CALLED_AT")},{value:"{{agentcompleteAt}}",label:a.instant("APPLICATION_COMPLETED_AT"),description:a.instant("APPLICATION_AGENT_CALLED_AT")},{value:"{{reason}}",label:a.instant("APPLICATION_REASON"),description:a.instant("APPLICATION_REASON")},{value:"{{lastevent}}",label:a.instant("APPLICATION_LAST_EVENT"),description:a.instant("APPLICATION_LAST_EVENT")},{value:"{{channel}}",label:a.instant("APPLICATION_CHANNEL"),description:a.instant("APPLICATION_CHANNEL")}]}]},{id:"chat",label:a.instant("APPLICATION_CHAT"),title:a.instant("APPLICATION_CHAT"),groups:[{label:a.instant("APPLICATION_VARIABLES"),values:[{value:"{{username}}",label:a.instant("APPLICATION_USERNAME"),description:a.instant("APPLICATION_USERNAME")},{value:"{{email}}",label:a.instant("APPLICATION_MAIL"),description:a.instant("APPLICATION_MAIL")},{value:"{{text}}",label:a.instant("APPLICATION_TEXT"),description:a.instant("APPLICATION_TEXT")},{value:"{{chatWebsite}}",label:a.instant("APPLICATION_WEBSITE"),description:a.instant("APPLICATION_WEBSITE")}]}]},{id:"mail",label:a.instant("APPLICATION_MAIL"),title:a.instant("APPLICATION_MAIL"),groups:[{label:a.instant("APPLICATION_INTERACTION"),values:[{value:"{{interactionId}}",label:a.instant("APPLICATION_INTERACTION_ID"),description:a.instant("APPLICATION_INTERACTION_ID")},{value:"{{subject}}",label:a.instant("APPLICATION_SUBJECT"),description:a.instant("APPLICATION_SUBJECT")},{value:"{{{body}}}",label:a.instant("APPLICATION_MESSAGE"),description:a.instant("APPLICATION_MESSAGE")},{value:"{{accountName}}",label:a.instant("APPLICATION_ACCOUNT"),description:a.instant("APPLICATION_ACCOUNT")},{value:"{{from}}",label:"From",description:"From"},{value:"{{to}}",label:"To",description:"To"},{value:"{{cc}}",label:"Cc",description:"Cc"},{value:"{{agentName}}",label:a.instant("APPLICATION_AGENT_NAME"),description:a.instant("APPLICATION_AGENT_NAME")},{value:"{{agentEmail}}",label:a.instant("APPLICATION_AGENT_EMAIL"),description:a.instant("APPLICATION_AGENT_EMAIL")},{value:"{{createdAt}}",label:a.instant("APPLICATION_CREATED_AT"),description:a.instant("APPLICATION_CREATED_AT")}]}]}]}]),angular.module("xCallyShuttleApp").controller("gridDatePickerFilterCtrl",["$scope","$timeout","$uibModal","uiGridConstants",function(a,b,c,d){b(function(){a.col.colDef.name;a.openDatePicker=function(b){var d=c.open({templateUrl:"app/main/customDateFilter.modal.html",controller:"customGridDateFilterModalCtrl",size:"md",windowClass:"custom-date-filter-modal",resolve:{term:[function(){return b.term||null}],hasTime:b.hasTime||!1}});d.result.then(function(c){a.colFilter.listTerm=[],a.colFilter.term=c.date,b.hasTime&&(a.colFilter.term+=" "+c.time)})}})}]),angular.module("xCallyShuttleApp").factory("gridOptions",["Modal","xAlert","$translate","$interval","$q","usSpinnerService",function(a,b,c,d,e,f){return{gridOptions:function(d,g,h,i,j,k,l){function m(a,b){a.filter&&a.filter.term&&b&&(o[a.name]=a.filter.term),a.filters&&(a.filters.length>1?a.filters.forEach(function(b){b.term?64===b.condition?o[a.name+"_uiFrom"]=b.term:256===b.condition&&(o[a.name+"_uiTo"]=b.term):64===b.condition?delete o[a.name+"_uiFrom"]:256===b.condition&&delete o[a.name+"_uiTo"]}):a.filters.length&&a.filters[0].term?o[a.name]=a.filters[0].term:delete o[a.name])}h.id=[];var n=k?"gridOptions"+k:"gridOptions",o={offset:0,limit:10},p={offset:0,limit:10};g.draggable&&(g.rowTemplate='<div grid="grid" class="ui-grid-draggable-row" draggable="true"><div ng-repeat="(colRenderIndex, col) in colContainer.renderedColumns track by col.colDef.name" class="ui-grid-cell" ng-class="{ \'ui-grid-row-header-cell\': col.isRowHeader, \'custom\': true }" ui-grid-cell></div></div>',g.useExternalPagination=!1,g.enablePaginationControls=!1,g.showGridFooter=!1);var q=function(a){var b=a&&a>h[n].paginationPageSize?h[n].paginationPageSize:a,c=b?30*b+120:177,d=angular.element(document.getElementsByName(n)).length?angular.element(document.getElementsByName(n)[0]):angular.element(document.getElementsByClassName("ui-grid")[0]);d.css("height",c+"px")},r=function(a,b){return h[n].enablePaginationControls||(delete o.offset,delete o.limit),f.spin("spinner-grid"),i=a||i,d=b||d,d.get(i?_.merge(o,i):o).$promise.then(function(a){h[n].totalItems=a.count,h[n].data=a.rows,q(a.rows.length),l&&l()})["catch"](function(a){console.error(a)})["finally"](function(){f.stop("spinner-grid")})};return h.deleteItem=a.confirm["delete"](function(a){var e=i?angular.copy(i):{};return _.merge(e,{id:a}),d.remove(e).$promise.then(function(){r(),b.show(c.instant("MESSAGE_WELL_DONE")+"!","success"),h.gridApi.selection.clearSelectedRows(),h.id=[]})["catch"](function(a){b.error(a)})}),h.deleteItems=a.confirm["delete"](function(){var a=i?angular.copy(i):{};return _.merge(a,{ids:h.id}),d["delete"](a).$promise.then(function(){r(),b.show(c.instant("MESSAGE_WELL_DONE")+"!","success"),h.gridApi.selection.clearSelectedRows(),h.id=[]})["catch"](function(a){b.error(a)})}),g.columnDefs.forEach(function(a){m(a,!0),a.hasOwnProperty("displayName")||(a.displayName="APPLICATION_"+a.name.toUpperCase()),a.headerCellFilter="translate",a.hasOwnProperty("buttons")&&(a.displayName="",a.cellClass="ui-grid-vcenter",a.enableSorting=!1,a.enableFiltering=!1,a.enableColumnMenu=!1,a.cellTemplate="<div>",a.buttons.forEach(function(b){if(b.directive)a.cellTemplate+=b.directive;else{if(a.cellTemplate+="<a",a.cellTemplate+=b.hide?' data-ng-hide="'+b.hide+'" ':" ",a.cellTemplate+=b["class"]?' class="btn btn-xs '+b["class"]+'" ':" ",a.cellTemplate+=b.href?' data-ng-href="'+b.href+'" ':" ",a.cellTemplate+=b.uisref?' ui-sref="'+b.uisref+'" ':" ",a.cellTemplate+=b.onClick?' data-ng-click="'+b.onClick+'" ':" ",a.cellTemplate+=b.title?' title="'+b.title+'"':"",a.cellTemplate+=">",a.cellTemplate+=b.icon?'<i class="'+b.icon+'"></i>':"",b.name)switch(b.name){case"delete":a.cellTemplate+='<i class="icon-trash" title="'+b.name+'"></i>';break;case"profile":case"settings":case"detail":case"embedding":a.cellTemplate+='<i class="icon-settings" title="'+b.name+'"></i>';break;case"view":a.cellTemplate+='<i class="icon-doc" title="'+b.name+'"></i>';break;case"clone":a.cellTemplate+='<i class="icon-docs" title="'+b.name+'"></i>';break;case"permits":a.cellTemplate+='<i class="icon-key"></i>';break;case"copy":a.cellTemplate+='<i class="fa fa-files-o" title="'+b.name+'"></i>';break;case"select":a.cellTemplate+='<i class="icon-check" title="'+b.name+'"></i>';break;case"preview":a.cellTemplate+='<i class="icon-magnifier" title="'+b.name+'"></i>';break;case"contacts":a.cellTemplate+='<i class="fa fa-users" title="'+b.name+'"></i>';break;case"download":case"export":a.cellTemplate+='<i class="fa fa-download" title="'+b.name+'"></i>';break;case"agents":a.cellTemplate+='<i class="icon-people" title="'+b.name+'"></i>';break;case"run":a.cellTemplate+='<i class="fa fa-cogs" title="'+b.name+'"></i>';break;case"mailRoom":a.cellTemplate+='<i class="fa fa-envelope"></i>';break;case"chatRoom":a.cellTemplate+='<i class="fa fa-users"></i>';break;case"faxRoom":a.cellTemplate+='<i class="fa fa-fax"></i>';break;case"smsRoom":a.cellTemplate+='<i class="glyphicon glyphicon-comment"></i>';break;case"check":a.cellTemplate+='<i class="fa fa-check" title="'+b.name+'"></i>';break;case"queues":a.cellTemplate+='<i class="icon-docs" title="'+b.name+'"></i>';break;default:a.cellTemplate+="{{'APPLICATION_"+b.name.toUpperCase()+"' | translate}}"}else a.cellTemplate+=b.displayName?"{{'"+b.displayName+"' | translate}}":"";a.cellTemplate+="</a> "}}),a.cellTemplate+="<div>",delete a.buttons)}),_.merge({enableGridMenu:!0,headerCellFilter:"translate",enableHorizontalScrollbar:0,enableVerticalScrollbar:0,enableRowSelection:!0,enableSelectAll:!0,enableFiltering:!0,showGridFooter:!0,paginationPageSizes:[10,25,50,75],paginationPageSize:10,useExternalPagination:!0,useExternalSorting:!0,useExternalFiltering:!0,multiSelect:!0,getPage:r,gridMenuTitleFilter:function(a){var b=e.defer();return b.resolve(c.instant(a)),b.promise},exporterAllDataFn:function(){return p.offset=o.offset,p.limit=o.limit,o={offset:0,limit:null},r().then(function(){o.offset=p.offset,o.limit=p.limit,r()})},exporterFieldCallback:function(a,b,c,d){if("applications"===c.field&&b.entity.Applications){var e="";return _.forEach(b.entity.Applications,function(a){e+=a.app+"("+a.appdata.join(",")+")"}),e}return d},exporterHeaderFilter:c.instant,onRegisterApi:function(a){h.gridApi=a,h.gridApi.selection&&(h.gridApi.selection.on.rowSelectionChanged(h,function(a){a.isSelected?h.id.push(h.gridApi.grid.options.primaryKey?a.entity[h.gridApi.grid.options.primaryKey]:a.entity.id):_.pull(h.id,h.gridApi.grid.options.primaryKey?a.entity[h.gridApi.grid.options.primaryKey]:a.entity.id)}),h.gridApi.selection.on.rowSelectionChangedBatch(h,function(a){a[0].isSelected?h.id=_.union(h.id,_.map(a,h.gridApi.grid.options.primaryKey?"entity."+h.gridApi.grid.options.primaryKey:"entity.id")):_.map(a,h.gridApi.grid.options.primaryKey?"entity."+h.gridApi.grid.options.primaryKey:"entity.id").forEach(function(a){_.pull(h.id,a)})})),h.gridApi.core.on.sortChanged(h,function(a,b){0===b.length?o.order=null:o.order=b[0].name+" "+b[0].sort.direction.toUpperCase(),r()});for(var e=0;e<h.gridOptions.columnDefs.length;e++)if(h.gridOptions.columnDefs[e].hasOwnProperty("sort")){o.order=h.gridOptions.columnDefs[e].name+" "+h.gridOptions.columnDefs[e].sort.direction.toUpperCase();break}h.gridApi.pagination.on.paginationChanged(h,function(a,b){o.offset=(a-1)*b,o.limit=b,r()}),h.gridApi.core.on.filterChanged(h,function(){var a=this.grid;a.columns.forEach(function(a){m(a)}),r()}),h.gridApi.draggableRows&&h.gridApi.draggableRows.on.rowDropped(h,function(a){a.fromIndex!==a.toIndex&&d.update(i,h[n].data).$promise.then(function(){b.show(c.instant("MESSAGE_WELL_DONE")+"!","success")})["catch"](function(a){b.error(a)})["finally"](function(){r()})}),j||r()}},g)}}}]),angular.module("xCallyShuttleApp").controller("gridTagsFilterCtrl",["$scope","$timeout","$uibModal","uiGridConstants",function(a,b,c,d){b(function(){a.col.colDef.name;a.openTags=function(b){var d=c.open({templateUrl:"app/main/customTagsFilter.modal.html",controller:"customGridTagsModalCtrl",size:"md",resolve:{term:[function(){if(b.term){var a=b.term.split(";");return a.pop(),a}return[]}]}});d.result.then(function(b){a.colFilter.listTerm=[],b.length&&(a.colFilter.term=b.join(";")+";")})}})}]),angular.module("xCallyShuttleApp").controller("MainCtrl",["$scope","$rootScope","$translate","$timeout","socket","Auth","xAlert","$uibModal","$log","$state","Contact","$window","$location","localStorageService",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n){ -function o(){b.activeTour={main:!1},b.tourConfig={main:[{type:"function",fn:function(){b.tempTourPath=m.path()}},{type:"title",heading:c.instant("TOUR_MAIN_WELCOME"),text:'<div class="row"><div id="title-text" class="col-md-12"><span class="main-text">'+c.instant("TOUR_MAIN_DISCOVER_MOTION")+"</span><br/></div></div>",curtainClass:"myCurtainClass"}]},(f.isAdmin()||b.userModules[1])&&(b.tourConfig.main=b.tourConfig.main.concat([{type:"location_change",path:"/dashboard/voice"},{type:"title",heading:c.instant("TOUR_MAIN_DASHBOARD"),text:c.instant("TOUR_MAIN_DASHBOARD_MESSAGE"),curtainClass:"myCurtainClass"}])),(f.isAdmin()||b.userModules[2])&&(b.tourConfig.main=b.tourConfig.main.concat([{type:"location_change",path:"/tools/yourdashboards/show/1"},{type:"title",heading:c.instant("TOUR_MAIN_YOURDASHBOARD"),text:c.instant("TOUR_MAIN_YOURDASHBOARD_MESSAGE"),curtainClass:"myCurtainClass"}])),(f.isAdmin()||b.userModules[4])&&(b.tourConfig.main=b.tourConfig.main.concat([{type:"location_change",path:"/staff/agents/list"},{type:"title",heading:c.instant("TOUR_MAIN_AGENTS"),text:c.instant("TOUR_MAIN_AGENTS_MESSAGE"),curtainClass:"myCurtainClass"}])),f.isAdmin()&&(b.tourConfig.main=b.tourConfig.main.concat([{type:"location_change",path:"/channels/voice/queues/list"},{type:"title",heading:c.instant("TOUR_MAIN_VOICE_QUEUE"),text:c.instant("TOUR_MAIN_VOICE_QUEUE_ADD_MESSAGE"),curtainClass:"myCurtainClass"}])),b.license.chat&&(f.isAdmin()||b.userModules[30])&&(b.tourConfig.main=b.tourConfig.main.concat([{type:"location_change",path:"/channels/chat/queues/list"},{type:"title",heading:c.instant("TOUR_MAIN_CHAT_QUEUE"),text:c.instant("TOUR_MAIN_CHAT_QUEUE_MESSAGE"),curtainClass:"myCurtainClass"}])),b.license.openchannel&&(f.isAdmin()||b.userModules[46])&&(b.tourConfig.main=b.tourConfig.main.concat([{type:"location_change",path:"/channels/openchannel/accounts/list"},{type:"title",heading:c.instant("TOUR_MAIN_OPENCHANNEL"),text:c.instant("TOUR_MAIN_OPENCHANNEL_MESSAGE"),curtainClass:"myCurtainClass"}])),(f.isAdmin()||b.userModules[14])&&(b.tourConfig.main=b.tourConfig.main.concat([{type:"location_change",path:"/square/projects/list"},{type:"title",heading:c.instant("TOUR_MAIN_SQUARE_PROJECT"),text:c.instant("TOUR_MAIN_SQUARE_PROJECT_MESSAGE"),curtainClass:"myCurtainClass"}])),(f.isAdmin()||b.userModules[52])&&(b.tourConfig.main=b.tourConfig.main.concat([{type:"location_change",path:"/tools/trunks/list"},{type:"title",heading:c.instant("TOUR_MAIN_TRUNKS"),text:c.instant("TOUR_MAIN_TRUNKS_MESSAGE"),curtainClass:"myCurtainClass"}])),(f.isAdmin()||b.userModules[52])&&(b.tourConfig.main=b.tourConfig.main.concat([{type:"location_change",path:"/tools/triggers/list"},{type:"title",heading:c.instant("TOUR_MAIN_TRIGGERS"),text:c.instant("TOUR_MAIN__MESSAGE"),curtainClass:"myCurtainClass"}])),b.license.jscripty&&(f.isAdmin()||b.userModules[50])&&(b.tourConfig.main=b.tourConfig.main.concat([{type:"location_change",path:"/jscripty/projects/list"},{type:"title",heading:c.instant("TOUR_MAIN_JSCRIPTY"),text:c.instant("TOUR_MAIN_JSCRIPTY_MESSAGE"),curtainClass:"myCurtainClass"}])),(f.isAdmin()||b.userModules[17])&&(b.tourConfig.main=b.tourConfig.main.concat([{type:"location_change",path:"/analytics/reports/list"},{type:"title",heading:c.instant("TOUR_MAIN_REPORTS"),text:c.instant("TOUR_MAIN_REPORTS_MESSAGE"),curtainClass:"myCurtainClass"}])),b.tourConfig.main=b.tourConfig.main.concat([{type:"title",heading:c.instant("TOUR_MAIN_END"),text:c.instant("TOUR_MAIN_END_MESSAGE"),curtainClass:"myCurtainClass"}])}a.awesomeThings=[],b.workspaces=[],a.Auth=f,b.userModules={},a.keepMeLoggedModalInstance=void 0,f.getCurrentUser().$promise.then(function(a){a.Modules.forEach(function(a){b.userModules[a.id]=!0}),o()})["catch"](function(a){g.error(a)}),b.onTourFinish=function(){n.set("skipTour",!0),b.tempTourPath&&m.path(b.tempTourPath)},b.onTourSkip=function(){n.set("skipTour",!0)},d(function(){n.get("skipTour")||(b.activeTour.main=!0)}),a.select=function(a){switch(a.type){case"chatRoom":case"mailRoom":case"faxRoom":a.unread=0}},e.socket.on("agent:save",function(b){!b.online&&f.isAgent()&&(a.keepMeLoggedModalInstance||(a.keepMeLoggedModalInstance=h.open({animation:!0,backdrop:"static",keyboard:!1,templateUrl:"app/main/keepMeLogged.modal.html",controller:["$scope","$uibModalInstance",function(a,b){a.close=function(){b.close(!0)},a.cancel=function(){b.close(!1)}}]}),a.keepMeLoggedModalInstance.result.then(function(a){a?l.location.reload():(f.logout(),m.path("/login"))})))}),a.openTdTab=function(a){b.workspaces.push({type:"tdDisposal",name:"Motion Dialer Disposition","class":"icon-control-forward",active:!0,spooler:a})},a.deselect=function(){},a.isAdmin=f.isAdmin,a.isLoggedIn=f.isLoggedIn,a.getCurrentUser=f.getCurrentUser,a.CurrentUser=f.getCurrentUser(),e.socket.on("user_has_voice_queue_permit:change",function(){a.CurrentUser=f.getCurrentUser()}),e.socket.on("user_has_chat_queue_permit:change",function(){a.CurrentUser=f.getCurrentUser()}),e.socket.on("user_has_mail_queue_permit:change",function(){a.CurrentUser=f.getCurrentUser()}),e.socket.on("user_has_fax_queue_permit:change",function(){a.CurrentUser=f.getCurrentUser()}),e.socket.on("user_has_sms_queue_permit:change",function(){a.CurrentUser=f.getCurrentUser()}),a.mainTab={active:!0},a.closeJscriptyTab=function(a){if(b.workspaces[a].edited){var c=h.open({animation:!0,templateUrl:"app/main/closeEditedTab.modal.jscripty.html",controller:"CloseEditedTabModalJscriptyCtrl",resolve:{project:b.workspaces[a]}});c.result.then(function(){b.workspaces.splice(a,1)})}else b.workspaces.splice(a,1)},b.closeTab=function(a){var c;b.workspaces[a].edited?"jscripty"===b.workspaces[a].type?b.workspaces[a].end():(c=h.open({animation:!0,templateUrl:"app/main/closeEditedTab.modal.html",controller:"CloseEditedTabModalCtrl"}),c.result.then(function(){b.workspaces.splice(a,1)},function(){i.info("Modal dismissed at: "+new Date)})):b.workspaces.splice(a,1)},a.createContact=function(d,e){return e.CompanyId||delete e.CompanyId,k.save(e).$promise.then(function(e){b.workspaces.splice(d,1);var f=e.firstName;e.lastName&&(f+=" "+e.lastName),a.openContactTab({firstName:e.firstName,lastName:e.lastName,id:e.id}),g.show(c.instant("MESSAGE_WELL_DONE")+"!","success")})["catch"](function(a){g.error(a)})};var p=function(b){var c=h.open({animation:!0,templateUrl:"app/main/chooseContact.modal.html",controller:"ChooseContactModalCtrl",resolve:{data:function(){return{type:"event",eventId:b.id}}}});c.result.then(function(c){c?a.openContactTab(c,b):a.newContact(b)},function(){i.info("Modal dismissed at: "+new Date)})};a.updateContact=function(a,d){var e=angular.copy(d);return e.CompanyId||(e.CompanyId=null),k.update({id:e.id},e).$promise.then(function(){b.workspaces[a].edited=!1,g.show(c.instant("MESSAGE_WELL_DONE")+"!","success")})["catch"](function(a){g.error(a)})},e.socket.on("report_integration:contactmanager",function(a){p(a)}),e.socket.on("report_integration:jscripty",function(b){a.openJscriptyTab({name:"Jscripty",id:b.projectId,calleridnum:b.calleridnum,calleridname:b.calleridname,queue:b.queue,membername:b.membername})}),e.socket.on("report_integration:salesforce",function(a){l.open(a.url,"_blank")}),e.socket.on("report_integration:tdDisposal",function(b){a.openTdTab(b)}),b.openContactTab=function(a,c){var d=_.find(b.workspaces,{contactID:a.id});if(d)d.active=!0;else{var e=a.firstName;a.lastName&&(e+=" "+a.lastName),b.workspaces.push({name:e,type:"contact",contactID:a.id,"class":"icon-user",active:!0,data:c||null})}},a.openJscriptyTab=function(a){b.workspaces.push({name:a.name,type:"jscripty",active:!0,data:a})},a.newContact=function(a){b.workspaces.push({name:"New Contact",type:"newContact","class":"icon-user",active:!0,data:a||null})},a.$on("$viewContentLoaded",function(){Metronic.init()}),b.language=c.use(),a.changeLanguage=function(a){return c.use(a).then(function(a){b.language=a,-1!==["main.jscripty.projects.view","main.square.projects.view"].indexOf(j.current.name)&&l.location.reload()})["catch"](function(a){console.error(a)})},a.$on("$destroy",function(){console.log("main $destroy"),e.unsyncUpdates("user_has_voice_queue_permit"),e.unsyncUpdates("user_has_chat_queue_permit"),e.unsyncUpdates("user_has_mail_queue_permit"),e.unsyncUpdates("user_has_fax_queue_permit"),e.unsyncUpdates("user_has_sms_queue_permit")})}]),angular.module("xCallyShuttleApp").directive("ngSpinnerBar",["$rootScope",function(a){return{link:function(b,c){c.addClass("hide"),a.$on("$stateChangeStart",function(){"spinner-page"===c[0].id&&c.removeClass("hide")}),a.$on("$stateChangeSuccess",function(){"spinner-page"===c[0].id&&(c.addClass("hide"),$("body").removeClass("page-on-load"),Layout.setSidebarMenuActiveLink("match"),setTimeout(function(){Metronic.scrollTop()},1e3))}),a.$on("$spinnerStart",function(){"spinner-request"===c[0].id&&c.removeClass("hide")}),a.$on("$spinnerStop",function(){"spinner-request"===c[0].id&&c.addClass("hide")}),a.$on("$stateNotFound",function(){"spinner-page"===c[0].id&&c.addClass("hide")}),a.$on("$stateChangeError",function(){"spinner-page"===c[0].id&&c.addClass("hide")})}}}]).directive("a",function(){return{restrict:"E",link:function(a,b,c){(c.ngClick||""===c.href||"#"===c.href)&&b.on("click",function(a){a.preventDefault()})}}}).directive("nxEqual",function(){return{require:"ngModel",link:function(a,b,c,d){return c.nxEqual?(a.$watch(c.nxEqual,function(a){d.$setValidity("nxEqual",a===d.$viewValue)}),void d.$parsers.push(function(b){var e=b===a.$eval(c.nxEqual);return d.$setValidity("nxEqual",e),e?b:void 0})):void console.error("nxEqual expects a model as an argument!")}}}).directive("ngEnter",function(){return function(a,b,c){b.bind("keydown keypress",function(b){13===b.which&&(a.$apply(function(){a.$eval(c.ngEnter)}),b.preventDefault())})}}).directive("dropdownMenuHover",function(){return{link:function(a,b){b.dropdownHover()}}}).directive("uiSelectRequired",function(){return{require:"ngModel",link:function(a,b,c,d){d.$validators.uiSelectRequired=function(a){return a&&a.length}}}}).directive("rpattern",function(){return{restrict:"A",require:"ngModel",link:function(a,b,c,d){function e(a,b){return null==b||""===b||!h||a.test(b)?(d.$setValidity("pattern",!0),b):void d.$setValidity("pattern",!1)}var f,g=c.rpattern,h=!0;g&&(g.match(/^\/(.*)\/$/)?(g=new RegExp(g.substr(1,g.length-2)),f=function(a){return e(g,a)}):f=function(b){var c=a.$eval(g);if(!c||!c.test)throw new Error("Expected "+g+" to be a RegExp but was "+c);return e(c,b)}),d.$formatters.push(f),d.$parsers.push(f),c.$observe("required",function(a){h=a,f(d.$viewValue)})}}}).directive("newContact",["$compile","xAlert","socket","$translate","$timeout","List","Tag","Company","ReportCall","$uibModal","$rootScope","Auth",function(a,b,c,d,e,f,g,h,i,j,k,l){return{restrict:"E",scope:{workspace:"=",index:"=",submit:"&onSubmit"},templateUrl:"app/main/template/template.contactTab.html",compile:function(a,m){return function(a,m,n){function o(){a.$watch("contact",function(b,c){angular.equals(b,c)||(a.workspace.edited=!0)},!0)}a.license=k.license,a.Auth=l,a.forms={general:{}},a.firstLoad=!0,a.detail={tab:"main"},a.contact={CompanyId:"",disposed:!1},a.submitButtonLabel=d.instant("APPLICATION_CONFIRM"),a.getAgent=function(){return l.getCurrentUser().$promise.then(function(b){a.agent=b})["catch"](function(a){b.error(a)})},a.callPhoneBar=function(c,e){var f;switch(e){case"call":f="http://127.0.0.1:"+a.agent.phoneBarRemoteControlPort+"/api/originate/"+c;break;case"transfer":f="http://127.0.0.1:"+a.agent.phoneBarRemoteControlPort+"/api/transfer?number="+c;break;default:f="http://127.0.0.1:"+a.agent.phoneBarRemoteControlPort+"/api/originate/"+c}return $http.get(f).success(function(){b.show(d.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){b.error(a)})},a.dispose=function(){return j.open({animation:!0,templateUrl:"app/main/cm.disposition.html",controller:"ContactManagerSetDisposition"}).result.then(function(c){return i.update({id:a.workspace.data.uniqueid},c).$promise.then(function(){a.contact.disposed=!0,b.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){b.error(a)})})},a.init=function(){a.workspace.data&&(a.contact.firstName=a.workspace.data.calleridname?a.workspace.data.calleridname:a.workspace.data.messageId?a.workspace.data.messageId:a.workspace.data.uniqueid?a.workspace.data.uniqueid:"",a.workspace.data.calleridnum&&(a.contact.phone=a.workspace.data.calleridnum),a.workspace.data.from&&(a.contact.email=a.workspace.data.from)),a.getTags(),a.getCompanies(),a.getLists(),a.getAgent()},a.getLists=function(){return f.get().$promise.then(function(b){a.lists=b.rows,c.syncUpdates("list",a.lists),a.contact.ListId=a.lists[0]?a.lists[0].id:null,a.getCustomFields()})["catch"](function(a){b.error(a)})},a.getCustomFields=function(){return f.get({listId:a.contact.ListId,controller:"customfields"}).$promise.then(function(b){a.customFields=b.rows,a.customFields.forEach(function(a){a.values=JSON.parse(a.values)}),c.socket.on("custom_field:remove",function(b){_.remove(a.customFields,function(a){return b.id==a.id})}),c.socket.on("custom_field:save",function(b){if(b.ListId===a.contact.ListId){var c=_.find(a.customFields,{id:b.id});c||("string"==typeof b.values&&(b.values=JSON.parse(b.values)),a.customFields.push(b))}}),!a.firstLoad||a.workspace.data?(a.workspace.edited=!0,a.firstLoad=!1):(a.firstLoad=!1,o())})["catch"](function(a){console.error(a),b.error(a)})},a.getTags=function(){return g.get().$promise.then(function(b){a.tags=_.map(b.rows,"name")})["catch"](function(a){console.error(a),b.error(a)})},a.getCompanies=function(){return h.get().$promise.then(function(b){a.companies=b.rows,a.companies.unshift({id:"",name:"-- None --"}),c.syncUpdates("company",a.companies)})["catch"](function(a){console.error(a),b.error(a)})},e(function(){a.init()})}}}}]).directive("contact",["$compile","xAlert","socket","$timeout","List","Tag","Company","Contact","$translate","gridOptions","$uibModal","ReportCall","$rootScope","usSpinnerService","uiGridConstants","$log","Auth","$http",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r){return{restrict:"E",scope:{workspace:"=",index:"=",submit:"&onSubmit"},templateUrl:"app/main/template/template.contactTab.html",compile:function(a,j){return function(a,j,s){function t(b){var c=[],d={};_.forEach(a.columns[a.log[b].show][a.log[b].detail].indexes,function(e,f){d={name:e,displayName:a.columns[a.log[b].show][a.log[b].detail].header[f],headerCellFilter:"translate",enableSorting:!1,enableColumnMenu:!1},"createdAt"===e&&(d.cellTemplate="<div class=\"centered-uigrid-td\">{{row.entity.createdAt | date:'dd/MM/yyyy HH:mm:ss'}}</div>",d.filterHeaderTemplate='<div class="ui-grid-filter-container row"><div ng-repeat="colFilter in col.filters" class="col-md-6 col-md-offset-0 col-sm-5 col-sm-offset-0 col-xs-5 col-xs-offset-0"><div custom-grid-date-filter-header></div></div></div>',d.filters=[{name:"From",condition:o.filter.GREATER_THAN_OR_EQUAL},{name:"To",condition:o.filter.LESS_THAN_OR_EQUAL}]),c.push(d)}),a.columns[a.log[b].show][a.log[b].detail].actions&&c.push(a.columns[a.log[b].show][a.log[b].detail].actions),c.forEach(function(a){u(a,b,!0),a.hasOwnProperty("displayName")||(a.displayName="APPLICATION_"+a.name.toUpperCase()),a.headerCellFilter="translate",a.hasOwnProperty("buttons")&&(a.displayName="",a.cellClass="ui-grid-vcenter",a.enableSorting=!1,a.enableFiltering=!1,a.enableColumnMenu=!1,a.cellTemplate="<div>",a.buttons.forEach(function(b){if(b.directive)a.cellTemplate+=b.directive;else{if(a.cellTemplate+="<a",a.cellTemplate+=b.hide?' data-ng-hide="'+b.hide+'" ':" ",a.cellTemplate+=b["class"]?' class="btn btn-xs '+b["class"]+'" ':" ",a.cellTemplate+=b.href?' data-ng-href="'+b.href+'" ':" ",a.cellTemplate+=b.uisref?' ui-sref="'+b.uisref+'" ':" ",a.cellTemplate+=b.onClick?' data-ng-click="'+b.onClick+'" ':" ",a.cellTemplate+=b.title?' title="'+b.title+'"':"",a.cellTemplate+=">",a.cellTemplate+=b.icon?'<i class="'+b.icon+'"></i>':"",b.name)switch(b.name){case"delete":a.cellTemplate+='<i class="fa fa-trash"></i>';break;case"profile":case"settings":case"detail":case"embedding":a.cellTemplate+='<i class="icon-settings"></i>';break;case"agents":a.cellTemplate+='<i class="icon-people"></i>';break;case"run":a.cellTemplate+='<i class="fa fa-cogs"></i>';break;case"mailRoom":a.cellTemplate+='<i class="fa fa-envelope"></i>';break;case"chatRoom":a.cellTemplate+='<i class="fa fa-users"></i>';break;case"faxRoom":a.cellTemplate+='<i class="fa fa-fax"></i>';break;case"smsRoom":a.cellTemplate+='<i class="glyphicon glyphicon-comment"></i>';break;default:a.cellTemplate+="{{'APPLICATION_"+b.name.toUpperCase()+"' | translate}}"}else a.cellTemplate+=b.displayName?"{{'"+b.displayName+"' | translate}}":"";a.cellTemplate+="</a> "}}),a.cellTemplate+="<div>",delete a.buttons)});var e={enablePaginationControls:!0,exporterCsvFilename:b+".csv",columnDefs:c,enableGridMenu:!0,headerCellFilter:"translate",enableHorizontalScrollbar:0,enableVerticalScrollbar:0,enableFiltering:!0,showGridFooter:!0,paginationPageSizes:[10,25,50,75],paginationPageSize:10,useExternalPagination:!0,useExternalSorting:!0,useExternalFiltering:!0,showTreeExpandNoChildren:!0,data:[],gridMenuTitleFilter:function(a){var b=$q.defer();return b.resolve(i.instant(a)),b.promise},onRegisterApi:function(c){a.gridApi=c,a.gridApi.grid.registerDataChangeCallback(function(){}),a.gridApi.core.on.sortChanged(a,function(a,c){0===c.length?v.order=null:v.order=c[0].name+" "+c[0].sort.direction.toUpperCase(),w(b)}),a.gridApi.pagination.on.paginationChanged(a,function(a,c){v.offset=(a-1)*c,v.limit=c,w(b)}),a.gridApi.core.on.filterChanged(a,function(){var a=this.grid;a.columns.forEach(function(a){u(a,b)}),w(b)})}};w(b,e)}function u(a,b,c){a.filter&&a.filter.term&&c&&(v[b][a.name]=a.filter.term),a.filters&&(a.filters.length>1?a.filters.forEach(function(c){c.term?64===c.condition?v[b][a.name+"_uiFrom"]=c.term:256===c.condition&&(v[b][a.name+"_uiTo"]=c.term):64===c.condition?delete v[b][a.name+"_uiFrom"]:256===c.condition&&delete v[b][a.name+"_uiTo"]}):a.filters.length&&a.filters[0].term?v[b][a.name]=a.filters[0].term:delete v[b][a.name])}a.moment=moment,a.license=m.license,a.forms={general:{}},a.detail={tab:"main"},a.log={daily:{show:"phone",type:"inbound",detail:"general"},history:{show:"phone",type:"inbound",detail:"general"}},a.columns={phone:{general:{header:["APPLICATION_SOURCE","APPLICATION_DESTINATION","APPLICATION_DISPOSITION","APPLICATION_DATE"],indexes:["source","destination","disposition","createdAt"]},queue:{header:["APPLICATION_CALLERID","APPLICATION_QUEUE","APPLICATION_DATE"],indexes:["calleridnum","queue","createdAt"]}},email:{general:{header:["APPLICATION_FROM","APPLICATION_TO","APPLICATION_DISPOSITION","APPLICATION_DATE"],indexes:["from","account","disposition","createdAt"],actions:{name:"action",displayName:"",width:40,buttons:[{"class":"green",name:"mailRoom",onClick:"grid.appScope.openRoom(row.entity.id, 'mailRoom')"}]}}},chat:{general:{header:["APPLICATION_WEBSITE","APPLICATION_VISITOR","APPLICATION_DISPOSITION","APPLICATION_DATE"],indexes:["website","contact","disposition","createdAt"],actions:{name:"action",displayName:"",width:40,buttons:[{"class":"green",name:"chatRoom",onClick:"grid.appScope.openRoom(row.entity.id, 'chatRoom')"}]}}},fax:{general:{header:["APPLICATION_FROM","APPLICATION_TO","APPLICATION_DISPOSITION","APPLICATION_DATE"],indexes:["contact","account","disposition","createdAt"],actions:{name:"action",displayName:"",width:40,buttons:[{"class":"green",name:"faxRoom",onClick:"grid.appScope.openRoom(row.entity.id, 'faxRoom')"}]}}},sms:{general:{header:["APPLICATION_ACCOUNT","APPLICATION_FROM","APPLICATION_DISPOSITION","APPLICATION_DATE"],indexes:["account","contact","disposition","createdAt"],actions:{name:"action",displayName:"",width:40,buttons:[{"class":"green",name:"smsRoom",onClick:"grid.appScope.openRoom(row.entity.id, 'smsRoom')"}]}}}},a.Auth=q,a.getAgent=function(){return q.getCurrentUser().$promise.then(function(b){a.agent=b})["catch"](function(a){b.error(a)})},a.callPhoneBar=function(c,d){var e;switch(d){case"call":e="http://127.0.0.1:"+a.agent.phoneBarRemoteControlPort+"/api/originate/"+c;break;case"transfer":e="http://127.0.0.1:"+a.agent.phoneBarRemoteControlPort+"/api/transfer?number="+c;break;default:e="http://127.0.0.1:"+a.agent.phoneBarRemoteControlPort+"/api/originate/"+c}return r.get(e).success(function(){b.show(i.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){b.error(a)})},a.copy=function(a){var c=k.open({animation:!0,size:"small",templateUrl:"app/contactmanager/contact/list/copy.modal.html",controller:"ContactManagerListCopyModalCtrl"});c.result.then(function(c){return h.save({id:a,controller:"copy"},c).$promise.then(function(a){m.openContactTab({firstName:a.firstName,lastName:a.lastName,id:a.id})})["catch"](function(a){b.error(a)})},function(){p.info("Modal dismissed at: "+new Date)})},a.merge=function(c){var d=k.open({animation:!0,size:"lg",templateUrl:"app/main/mergeContact.choose.modal.html",controller:"ContactManagerMergeContactChoose",resolve:{listId:c.ListId}});d.result.then(function(d){var e=k.open({animation:!0,size:"lg",templateUrl:"app/main/mergeContact.merge.modal.html",controller:"ContactManagerMergeContactMerge",resolve:{contactId:d,mergeContact:c}});e.result.then(function(e){return e.oldContact=c.id,h.save({id:d,controller:"merge"},e).$promise.then(function(b){m.workspaces.splice(a.index,1),_.remove(m.workspaces,{contactID:b.id}),m.openContactTab({firstName:b.firstName,lastName:b.lastName,id:b.id})})["catch"](function(a){b.error(a)})},function(){p.info("Modal dismissed at: "+new Date)})},function(){p.info("Modal dismissed at: "+new Date)})},a.dispose=function(){return k.open({animation:!0,templateUrl:"app/main/cm.disposition.modal.html",controller:"ContactManagerSetDisposition"}).result.then(function(c){return l.update({id:a.workspace.data.uniqueid},c).$promise.then(function(){a.contact.disposed=!0,b.show(i.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){b.error(a)})})},a.companyInfo=function(b){k.open({animation:!0,size:"lg",templateUrl:"app/main/company.info.modal.html",controller:["$scope","$uibModalInstance","company",function(a,b,c){a.company=c,a.close=function(){b.dismiss("cancel")}}],resolve:{company:_.find(a.companies,{id:b})}})},a.updateLog=function(b,c,d,e){c&&(a.log[b].show=c),d&&(a.log[b].detail=d),e&&(a.log[b].type=e),t(b)},a.openRoom=function(a,b,c){var d=_.find(m.workspaces,{id:a,type:b});if(d)d.active=!0;else{var e;switch(b){case"mailRoom":e="icon-envelope";break;case"chatRoom":e="fa fa-users";break;case"faxRoom":e="fa fa-fax";break;case"smsRoom":e="glyphicon glyphicon-comment"}m.workspaces.push({id:a,type:b,"class":e,active:!0,data:c})}};var v={daily:{offset:0,limit:10},history:{offset:0,limit:10}},w=function(b,c){return n.spin("spinner-grid"),h.get(_.merge(_.merge({id:a.workspace.contactID,controller:"log",logType:b,order:"createdAt DESC"},a.log[b]),v[b])).$promise.then(function(d){c&&(a["gridOptions"+b]=c),a["gridOptions"+b].totalItems=d.count,a["gridOptions"+b].data=d.rows,x("gridOptions"+b,d.rows.length)})["catch"](function(a){console.error(a)})["finally"](function(){n.stop("spinner-grid")})},x=function(a,b){var c=b?30*b+120:177;angular.element(document.getElementsByName(a)[0]).css("height",c+"px")};a.getContact=function(){return h.get({id:a.workspace.contactID}).$promise.then(function(b){a.contact=b,a.contact.CompanyId||(a.contact.CompanyId=""),a.getCustomFields(b.ListId),a.updateLog("daily"),a.updateLog("history")})["catch"](function(a){console.error(a),b.error(a)})},a.getTags=function(){return f.get().$promise.then(function(b){a.tags=_.map(b.rows,"name")})["catch"](function(a){console.error(a),b.error(a)})},a.getCompanies=function(){return g.get().$promise.then(function(b){a.companies=b.rows,a.companies.unshift({id:"",name:"-- None --"}),c.syncUpdates("company",a.companies)})["catch"](function(a){console.error(a),b.error(a)})},a.getCustomFields=function(d){return a.customFields=[],e.get({listId:d,controller:"customfields"}).$promise.then(function(b){b.rows.forEach(function(b){try{"select"===b.type&&(b.values=JSON.parse(b.values)),a.customFields.push(b)}catch(c){console.log("Cf not valid:",b.alias)}}),c.socket.on("custom_field:remove",function(b){_.remove(a.customFields,function(a){return b.id==a.id})}),c.socket.on("custom_field:save",function(b){if(b.ListId===d){var c=_.find(a.customFields,{id:b.id});c||("string"==typeof b.values&&(b.values=JSON.parse(b.values)),a.customFields.push(b))}})})["catch"](function(a){console.error(a),b.error(a)})},d(function(){a.getTags(),a.getCompanies(),a.getContact(),a.getAgent()})}}}}]).directive("jscripty",["$compile","xAlert","$http","socket","JscriptyProject",function(a,b,c,d,e){return{restrict:"E",scope:{workspace:"=",index:"=",submit:"&onSubmit"},templateUrl:"app/main/template/template.jscriptyTab.html",compile:function(a,d){return function(a,d,f){a.count=0,a.questions=[];var g,h=a.workspace.data.id;c.get("/api/jscripty/projects/"+h+"/download").success(function(b){b?c.post("/api/jscripty/projects/"+h+"/sessions",{projectId:h,status:"started",queue:a.workspace.data.queue,calleridnum:a.workspace.data.calleridnum,callername:a.workspace.data.callername,membername:a.workspace.data.membername}).success(function(c){g=c.session_id,a.workspace.edited=!0,a.workspace.sessionId=g,a.workspace.projectId=h;var d=mxUtils.parseXml(b),e=new mxCodec(d);a.decObj=e.decode(d.documentElement);var f=_.find(a.decObj.cells,function(a){return a.vertex&&"start"==a.value.nodeName});if("OFF"==f.getAttribute("state")){var j=_.find(f.edges,function(a){return a.source.id==f.id}).target;a.questions[a.count]=a.currentQuestion=i(j)}else a.questions[a.count]=a.currentQuestion=f;a.saveQuestions()}):(console.log("No project published!"),alert("No project published!"),a.submit({index:a.index}))}),a.next=function(b,c){switch(a.currentQuestion.answer&&a.currentQuestion.answer!=c&&(a.questions=_.take(a.questions,a.count+1)),a.currentQuestion.answer=c,b.value.nodeName){case"question":b=i(b)}a.questions[a.count]=a.currentQuestion,a.currentQuestion=b,a.count++,a.questions[a.count]=b,a.saveQuestions()};var i=function(a){var b=[];return a.options=[],_.forEach(a.edges,function(c,d){if(c.source.id==a.id&&c.value){var e=String(c.value).split(",");e.length>1?(_.forEach(e,function(b,d){var e=Object.create(c);e.setValue(b),a.edges.push(e),a.options.push(b)}),b.push(c)):a.options.push(e[0])}}),_.forEach(b,function(b){_.remove(a.edges,function(a){return a.value==b.value&&a.id==b.id})}),a};a.end=function(){a.saveQuestions(),a.workspace.lastQuestionId=a.questions[a.questions.length-1].id,"end"==a.questions[a.questions.length-1].value.nodeName&&(a.workspace.edited=!1,e.update({id:h,controller:"sessions",action:g},{status:"completed",completedAt:Date(),last_question_id:a.questions[a.questions.length-1].id}).$promise.then(function(a){b.show("Project Ended","success")})),a.submit({index:a.index})},a.workspace.end=a.end,a.back=function(){a.count--,a.currentQuestion=a.questions[a.count]},a.setCurrentQuestion=function(b){a.count=b,a.currentQuestion=a.questions[a.count]},a.saveQuestions=function(){for(var c=[],d=[],f=0;f<a.questions.length;f++){if(a.questions[f].children)for(var i=a.questions[f].children,j=0;j<i.length;j++)d[j]={input_id:i[j].id,input_type:i[j].getAttribute("type"),input_label:i[j].getAttribute("label"),input_value:"checkbox"!=i[j].getAttribute("type")||i[j].answer?i[j].answer:!1};c[f]={sessionId:g,projectId:h,question_id:a.questions[f].id,question_type:a.questions[f].value.nodeName,question_label:a.questions[f].getAttribute("label"),question_text:a.questions[f].getAttribute("question")||a.questions[f].getAttribute("text"),question_other_label:a.questions[f].getAttribute("other"),question_other_answer:a.questions[f].otheranswer,question_answer:a.questions[f].answer,question_options:a.questions[f].options?JSON.stringify({options:a.questions[f].options}):null,index:f,ReportJscriptyInputs:d},d=[]}e.save({id:h,controller:"sessions",action:g,action2:"questions"},c).$promise.then(function(a){})["catch"](function(a){b.error(a)})}}}}}]).directive("reportBuilder",["$compile",function(a){return{restrict:"E",scope:{group:"=",fields:"=",forms:"=",firstCall:"="},templateUrl:"app/main/template/template.reportBuilderView.html",compile:function(b,c){var d,e;return d=b.contents().remove(),function(b,c,f){b.operators=[{name:"AND"},{name:"OR"}],b.conditions=[{name:"="},{name:"!="},{name:"<"},{name:"<="},{name:">"},{name:">="},{name:"LIKE"},{name:"NOT LIKE"},{name:"IS NULL"},{name:"IS NOT NULL"},{name:"IS EMPTY"},{name:"IS NOT EMPTY"}],b.inputIsRequired=function(a){if(a.condition)switch(a.condition){case"IS NULL":case"IS NOT NULL":case"IS EMPTY":case"IS NOT EMPTY":a.required=!1;break;default:a.required=!0}},b.addCondition=function(){b.group.rules.push({condition:"=",field:"",value:""})},b.removeCondition=function(a){b.group.rules.splice(a,1)},b.addGroup=function(){b.group.rules.push({group:{operator:"AND",rules:[{condition:"=",field:"",value:""}]}})},b.randomName=function(a,b){var c=[];for(a=a||5,b=b||"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";--a;)c.push(b.charAt(Math.floor(Math.random()*b.length)));return c.join("")},b.removeGroup=function(){b.$parent.group&&b.$parent.group.rules.splice(b.$parent.$index,1)},e||(e=a(d)),c.append(e(b,function(a){return a}))}}}}]).directive("dynamicName",["$compile",function(a){return{restrict:"A",terminal:!0,priority:1e3,link:function(b,c,d){c.attr("name",b.$eval(d.dynamicName)),c.removeAttr("dynamic-name"),a(c)(b)}}}]).directive("onReadFile",["$parse",function(a){return{restrict:"A",scope:!1,link:function(b,c,d){var e=a(d.onReadFile);c.on("change",function(a){var c=new FileReader;c.onload=function(a){b.$apply(function(){e(b,{$fileContent:a.target.result})})},c.readAsText((a.srcElement||a.target).files[0])})}}}]).directive("motionFileDownload",["xAlert","$translate","$timeout","$location","FileSaver","$compile",function(a,b,c,d,e,f){return{restrict:"E",template:'<a uib-tooltip=\'{{tooltiptext}}\' class="{{btnclass || \'btn default btn-xs blue-hoki\'}}" href="" data-ng-click="download()" ><i class="icon-cloud-download"></i>{{btncontent || \'\'}}</a>',scope:{mimetype:"=",filename:"=",resource:"=",params:"=",btnclass:"@",btncontent:"@",tooltiptext:"@"},link:function(b,c,d){var f=c.children()[0];b.$on("download-start",function(){$(f).attr("disabled","disabled")}),b.$on("downloaded",function(a,c){var d=base64ToBlob(c,b.mimetype);e.saveAs(d,b.filename),$(f).attr("disabled",!1)}),b.download=function(){return b.$emit("download-start"),b.resource.get(b.params).$promise.then(function(a){b.$emit("downloaded",a.downloadString)})["catch"](function(b){a.error(b),$(f).attr("disabled",!1)})}}}}]).directive("audioFileDownload",["xAlert","$translate","$uibModal",function(a,b,c){return{restrict:"E",template:'<button type="button" class="btn default btn-xs blue-hoki" data-ng-click="download()"><i class="fa fa-play"></i> {{ \'APPLICATION_PREVIEW\' | translate}}</button>',scope:{resource:"=",params:"="},link:function(b,d,e){var f=d.children()[0];b.$on("download-start",function(a,c){b.tempHtml=$(f).html(),$(f).attr("disabled","disabled").html('<i class="icon-refresh"></i> Loading...')}),b.$on("downloaded",function(a,d){c.open({animation:!0,size:"small",templateUrl:"app/main/audioFileDownload.play.modal.html",controller:["$scope","$uibModalInstance","$sce","audio",function(a,b,c,d){a.audio=c.trustAsResourceUrl("data:audio/wav;base64,"+d.data),a.close=function(){b.dismiss("cancel")}}],resolve:{audio:function(){return{data:d}}}});$(f).html(b.tempHtml).attr("disabled",!1)}),b.$on("error",function(a,c){$(f).html(b.tempHtml).attr("disabled",!1)}),b.download=function(){return b.$emit("download-start"),b.resource.get(b.params).$promise.then(function(a){b.$emit("downloaded",a.downloadString)})["catch"](function(c){a.error(c),b.$emit("error")})}}}}]).directive("uiRequired",function(){return{require:"ngModel",link:function(a,b,c,d){d.$validators.required=function(a,b){ -return!(b&&0===b.length&&"true"===c.uiRequired)},c.$observe("uiRequired",function(){d.$setValidity("required",!("true"===c.uiRequired&&d.$viewValue&&0===d.$viewValue.length))})}}}).directive("schrollBottom",function(){return{scope:{schrollBottom:"="},link:function(a,b){a.$watchCollection("schrollBottom",function(a){a&&$(b).scrollTop($(b)[0].scrollHeight)})}}}).directive("customGridDateFilterHeader",function(){return{templateUrl:"app/main/customDateFilterHeader.html",controller:"gridDatePickerFilterCtrl"}}).directive("customGridTagsFilterHeader",function(){return{templateUrl:"app/main/customTagsFilterHeader.html",controller:"gridTagsFilterCtrl"}}).directive("infiniteScroll",["$window",function(a){return{link:function(a,b,c){var d=parseInt(c.threshold)||0,e=b[0];b.bind("scroll",function(){a.$eval(c.canLoad)&&e.scrollTop+e.offsetHeight>=e.scrollHeight-d&&a.$apply(c.infiniteScroll)})}}}]).directive("tigerDialDisposal",["$compile","xAlert","socket","$translate","$timeout","$rootScope","MotionDialerSpooler","Agent",function(a,b,c,d,e,f,g,h){return{restrict:"E",scope:{workspace:"=",index:"="},templateUrl:"app/main/template/template.tigerDialDisposal.html",compile:function(a,c){return function(a,c,i){a.moment=moment,a.entitySpooler={},a.forms={td:{}},a.init=function(){return h.get().$promise.then(function(b){a.agents=[],b&&b.rows.forEach(function(b){a.agents.push("SIP/"+b.name)})})["catch"](function(a){b.error(a)})},a.save=function(){var c;switch(a.entitySpooler.retrieve){case"CLOSED":c=g.close({id:parseInt(a.workspace.spooler.ticketId)});break;case"OPEN":c=g.open({id:parseInt(a.workspace.spooler.ticketId)});break;case"BLACK_LIST":c=g.blacklist({id:parseInt(a.workspace.spooler.ticketId)});break;case"PLANNED":c=g.planning({id:parseInt(a.workspace.spooler.ticketId),date:moment(a.entitySpooler.planningtime).format("YYYY-MM-DD HH:mm")});break;case"PLANNED_PEER":c=g.planningpeer({id:parseInt(a.workspace.spooler.ticketId),date:moment(a.entitySpooler.planningtime).format("YYYY-MM-DD HH:mm"),peer:a.entitySpooler.planningpeer})}c?c.$promise.then(function(c){c.status>0?b.show(d.instant("MESSAGE_WELL_DONE"),"success"):c.response?c.response.RMI.errors.forEach(function(c){c?(b.show(c.field+": "+c.error,"danger"),f.workspaces.splice(a.index,1)):b.show("Please, check your connection!","danger")}):b.show("Please, check your connection!","danger")})["catch"](function(a){b.error(a)}):b.show("RETRIEVE NOT FOUND","danger")},e(function(){a.init()})}}}}]).directive("cssTimer",["$window","$interval",function(a,b){return{restrict:"EA",template:"<span>{{ millis | formatMilliseconds | date:format }}</span>",scope:{interval:"@",format:"@",startTime:"="},link:function(a,c,d){function e(){a.millis=Math.abs((new Date).getTime()-new Date(a.startTime).getTime())+1e3,a.activeInterval=b(function(){a.millis+=a.interval},a.interval)}a.interval||(a.interval=1e3),a.format||(a.format="HH:mm:ss"),e(),a.$watch("startTime",function(c,d){b.cancel(a.activeInterval),e()},!0)}}}]),angular.module("xCallyShuttleApp").filter("propsFilter",function(){return function(a,b){var c=[];return angular.isArray(a)?a.forEach(function(a){for(var d=!1,e=Object.keys(b),f=0;f<e.length;f++){var g=e[f],h=b[g].toLowerCase();if(-1!==a[g].toString().toLowerCase().indexOf(h)){d=!0;break}}d&&c.push(a)}):c=a,c}}).filter("capitalize",function(){return function(a){return a?a.replace(/([^\W_]+[^\s-]*) */g,function(a){return a.charAt(0).toUpperCase()+a.substr(1).toLowerCase()}):""}}).filter("salesforce",function(){var a=["CallDisposition","CallDurationInSeconds","CallObject","CallType","IsArchived","Priority","Status","Type"];return function(b){return _.remove(b,function(b){return b.custom===!1&&a.indexOf(b.name)<0}),b}}).filter("sugarcrm",function(){var a=["account_id","account_name","account_name1","assigned_user_name","assigned_user_id","case_number","created_by","created_by_name","date_entered","date_modified","deleted","description","id","modified_by_name","modified_user_id","name"];return function(b){return _.remove(b,function(b){return a.indexOf(b.name)>=0}),b}}).filter("freshdesk",function(){var a=["requester","subject","agent","description"];return function(b){return _.remove(b,function(b){return a.indexOf(b.ticket_field.name)>=0}),b}}).filter("zendesk",function(){var a=["subject","assignee","description"];return function(b){return _.remove(b,function(b){return a.indexOf(b.type)>=0}),b}}).filter("slice",function(){return function(a,b,c){return a?a.slice(b,c):void 0}}).filter("trusted",["$sce",function(a){var b=document.createElement("div");return function(c){return b.innerHTML=c,a.trustAsHtml(b.textContent)}}]).filter("formatMilliseconds",[function(){return function(a){return new Date(1970,0,1).setMilliseconds(a)}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main",{"abstract":!0,templateUrl:"app/main/main.html",controller:"MainCtrl",resolve:{authorization:["$q","Auth","$state","$timeout","$location","localStorageService",function(a,b,c,d,e,f){return b.getToken()?a.when():(f.remove("loggedIn"),d(function(){e.path("/login")}),a.reject())}],deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css","assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/plugins/mxgraph/js/mxClient.js","assets/plugins/ckeditor/ckeditor.js","assets/css/login.css"]}])}]}})}]),angular.module("xCallyShuttleApp").factory("xAlert",["$translate","Notification","$state",function(a,b,c){return{show:function(c,d){switch(d){case"success":b.success({message:c,title:'<i class="glyphicon glyphicon-ok"></i> <strong>'+a.instant("MESSAGE_SUCCESS")+"!</strong>",delay:5e3});break;case"info":b.info({message:c,title:'<i class="glyphicon glyphicon-info-sign"></i> <strong>'+a.instant("MESSAGE_INFO")+"!</strong>",delay:5e3});break;case"danger":b.error({message:c,title:'<i class="glyphicon glyphicon-exclamation-sign"></i> <strong>'+a.instant("MESSAGE_ERROR")+"!</strong>",delay:1e4});break;case"warning":b.warning({message:c,title:'<i class="glyphicon glyphicon-warning-sign"></i> <strong>'+a.instant("MESSAGE_WARNING")+"!</strong>",delay:1e4});break;default:b.info(c)}},error:function(d){var e,f;d?d.status&&401===d.status?(e="Unauthorized!",f=!0):d.data?(e=d.data.translatedMessage||d.data.message||d.data||"Generic Error",console.log(d)):e=d.translatedMessage||d.message||"Generic Error":e="Generic Error",b.error({message:a.instant(e),title:'<i class="glyphicon glyphicon-exclamation-sign"></i> <strong>'+a.instant("MESSAGE_ERROR")+"!</strong>",delay:1e4}),f&&c.go("login")}}}]).factory("stResource",["$q","$filter","$timeout","$rootScope","$http","$translate","xAlert",function(a,b,c,d,e,f,g){return{getPage:function(b){var c={page:Math.ceil(b.pagination.start/b.pagination.number),per_page:b.pagination.number};b.sort.predicate&&(c.sort_by=b.sort.predicate,c.sort_order=b.sort.reverse?"DESC":"ASC"),_.forIn(b.search.predicateObject,function(a,b){c[b]=a}),b.search.params&&(c.clientQuery={},_.forIn(b.search.params,function(a,b){c.clientQuery[b]=a})),d.$broadcast("$spinnerStart"),e.get(b.url,{params:c}).success(function(a){f.resolve(a),d.$broadcast("$spinnerStop")}).error(function(a){g.error(a),d.$broadcast("$spinnerStop")});var f=a.defer();return f.promise}}}]).factory("xNotification",["$translate","Notification","$rootScope",function(a,b,c){return{show:function(d,e,f,g,h,i){var j=c.$new(),k={message:e,title:d,templateUrl:"app/main/template/template.notification.html",delay:g,scope:j};switch(j.acceptBtn=a.instant("APPLICATION_ACCEPT"),j.rejectBtn=a.instant("APPLICATION_REJECT"),j.nAccept=h,j.nReject=i,f){case"chat":j["class"]="alert-info",j.icon="icon-bubble";break;case"mail":j["class"]="alert-success",j.icon="icon-envelope";break;case"fax":j["class"]="alert-warning",j.icon="fa fa-fax";break;case"sms":j["class"]="alert-danger",j.icon="glyphicon glyphicon-comment";break;case"openchannel":j["class"]="alert-danger",j.icon="icon-globe";break;default:j["class"]="alert-info"}return new b(k)}}}]),angular.module("xCallyShuttleApp").controller("ContactManagerMergeContactChoose",["$scope","$translate","Contact","gridOptions","List","uiGridConstants","xAlert","$stateParams","Company","$uibModalInstance","listId",function(a,b,c,d,e,f,g,h,i,j,k){a.initView=function(){var b;return e.get().$promise.then(function(b){return a.lists=[],a.customFields=[],b.rows.forEach(function(b,c){_.forEach(b.CustomFields,function(b){a.customFields.push({name:b.name,alias:b.alias})}),a.lists.push({value:b.id,label:b.name})}),i.get().$promise}).then(function(b){a.companies=[],b.rows.forEach(function(b,c){a.companies.push({value:b.id,label:b.name})})}).then(function(){var e=[{"class":"blue-hoki",name:"select",onClick:"grid.appScope.choose(row.entity.id)"}];b={exporterCsvFilename:"Contacts.csv",columnDefs:[{name:"firstName"},{name:"lastName"},{name:"phone"},{name:"email"},{name:"ListId",displayName:"APPLICATION_LIST",field:"List.name",enableFiltering:!1},{name:"CompanyId",displayName:"APPLICATION_COMPANY",field:"Company.name",filter:{type:f.filter.SELECT,term:h.companyId||null,selectOptions:a.companies}}]},_.forEach(a.customFields,function(a){b.columnDefs.push({name:a.name,displayName:a.alias,visible:!1})}),b.columnDefs.push({name:"action",width:30,buttons:e}),a.gridOptions=d.gridOptions(c,b,a,{ListId:k})})["catch"](function(a){g.error(a)})},a.choose=function(a){j.close(a)},a.cancel=function(){j.dismiss()}}]),angular.module("xCallyShuttleApp").controller("ContactManagerMergeContactMerge",["$scope","$translate","Contact","xAlert","Company","$uibModalInstance","contactId","List","mergeContact","Tag",function(a,b,c,d,e,f,g,h,i,j){a.initView=function(){return e.get().$promise.then(function(b){return a.companies=b.rows,a.companies.unshift({id:"",name:"-- None --"}),j.get().$promise}).then(function(b){return a.tags=_.map(b.rows,"name"),c.get({id:g}).$promise}).then(function(b){a.fields={},a.contact={};var c=_.merge(_.keys(b),_.keys(i));return _.forEach(c,function(c){switch(c){case"tags":a.contact.tags=_.union(b.tags||[],i.tags||[]);break;case"$promise":case"$resolved":break;default:a.fields[c]=[],b[c]&&a.fields[c].push(b[c]),i[c]&&a.fields[c].push(i[c]),a.contact[c]=a.fields[c][0]||null}}),h.get({listId:b.ListId,controller:"customfields"}).$promise}).then(function(b){a.customFields=b.rows,a.customFields.forEach(function(a){a.values=JSON.parse(a.values)})})["catch"](function(a){d.error(a)})},a.merge=function(){a.contact.CompanyId||(a.contact.CompanyId=null),f.close(a.contact)},a.cancel=function(){f.dismiss()}}]),angular.module("xCallyShuttleApp").factory("Widget",["$resource",function(a){return a("/api/widgets/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("MarketCtrl",["$scope","$http","$translate","socket","xAlert","Modal","$timeout","Integration",function(a,b,c,d,e,f,g,h){function i(a,b){return Math.floor(Math.random()*(b-a+1))+a}a.initView=function(){return h.get().$promise.then(function(b){a.integrations=b.rows,a.groupedIntegration=_.chunk(a.integrations,4),d.syncUpdates("integration",a.integrations,function(){a.groupedIntegration=_.chunk(a.integrations,4)})})["catch"](function(a){e.error(a,"danger")})},a.isProgressing=!1,a.$on("$destroy",function(){d.unsyncUpdates("integration")}),a.installIntegration=function(b){return navigator.onLine?(a.status="Downloading",a.percentage=i(1,50),a.isProgressing=!0,b.downloading=!0,h.update({id:b.id},{active:!0}).$promise.then(function(){g(function(){a.percentage=i(51,99),a.status="Installing"},2500),g(function(){a.percentage=100,a.isProgressing=!1,a.status="Completed!",b.downloading=!1,e.show(c.instant("MESSAGE_WELL_DONE")+".","success")},5e3)})["catch"](function(){b.downloading=!1,a.percentage=0,a.isProgressing=!1,e.show(c.instant("MESSAGE_SOMETHING_WENT_WRONG")+".","danger")})):void e.show(c.instant("MESSAGE_NO_INTERNET_CONNECTION")+".","danger")},a.uninstallIntegration=function(b){return navigator.onLine?(a.status="Uninstalling",a.percentage=i(1,99),a.isProgressing=!0,b.downloading=!0,h.update({id:b.id},{active:!1}).$promise.then(function(){g(function(){a.percentage=100,a.isProgressing=!1,a.status="Completed!",b.downloading=!1,e.show(c.instant("MESSAGE_WELL_DONE")+".","success")},5e3)})["catch"](function(){b.downloading=!1,a.percentage=0,a.isProgressing=!1,e.show(c.instant("MESSAGE_SOMETHING_WENT_WRONG")+".","danger")})):void e.show(c.instant("MESSAGE_NO_INTERNET_CONNECTION")+".","danger")}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.market",{url:"/market",templateUrl:"app/market/market.html",controller:"MarketCtrl",data:{permissions:{only:["admin"],redirectTo:"main.dashboard.voice"}}})}]),angular.module("xCallyShuttleApp").controller("MotionbarCtrl",["$scope","$stateParams","$cookieStore","$window","$location","Auth",function(a,b,c,d,e,f){console.log(b),b.token&&b.userId&&b.role&&b.redirectTo?(f.loginWithToken(b.token,b.userId,b.role),d.location.href=decodeURIComponent(b.redirectTo)):e.path("/login")}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("motionbar",{url:"/motionbar?redirectTo&token&userId&role",template:"<div ui-view></div>",controller:"MotionbarCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.motiondialer.blacklist",{url:"/blacklist",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("MotionDialerBlackListListCtrl",["$scope","$uibModal","$translate","xAlert","Modal","MotionDialerBlackList","uiGridConstants",function(a,b,c,d,e,f,g){a.initView=function(){a.gridOptions={paginationPageSizes:[10,25,50,75],paginationPageSize:10,enableFiltering:!0,enableSorting:!0,enableGridMenu:!0,flatEntityAccess:!0,showGridFooter:!0,fastWatch:!0,columnDefs:[{name:"id",width:60},{name:"phone"},{name:"description",enableSorting:!1},{name:"updatedtime",sort:{direction:g.DESC},enableFiltering:!1},{name:"action",cellTemplate:'<div><a class="btn btn-xs red-sunglo" data-ng-click="grid.appScope.deleteItem(row.entity.phone, row.entity.id)"><i class="icon-trash"></i></a></div>',enableSorting:!1,cellClass:"ui-grid-vcenter",enableFiltering:!1}]},f.list({page:1,size:6e5}).$promise.then(function(b){b.status>0?a.gridOptions.data=b.response.RMI.rows:d.show("Please, check your connection!","danger")})["catch"](function(a){d.error(a)})},a.createItem=function(){var c=b.open({animation:!0,templateUrl:"app/motiondialer/blacklist/list/list.create.modal.html",controller:"MotionDialerBlackListListCreateCtrl"});c.result.then(function(b){a.gridOptions.data.push(b.response.RMI)})},a.deleteItem=e.confirm["delete"](function(b){return f["delete"]({id:b}).$promise.then(function(e){e.status>0?(_.remove(a.gridOptions.data,{id:b}),d.show(c.instant("MESSAGE_WELL_DONE"),"success")):d.show(e.message||"Please, check your connection!","danger")})["catch"](function(a){d.error(a)})})}]),angular.module("xCallyShuttleApp").controller("MotionDialerBlackListListCreateCtrl",["$scope","$translate","$uibModalInstance","MotionDialerBlackList","xAlert",function(a,b,c,d,e){a.form={},a.item={},a.save=function(){return d.insert(a.item).$promise.then(function(a){a.status>0?(e.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)):e.show(a.message||"Please, check your connection!","danger")})["catch"](function(a){e.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.motiondialer.blacklist.list",{url:"/list",templateUrl:"app/motiondialer/blacklist/list/list.html",controller:"MotionDialerBlackListListCtrl",authenticate:!0})}]),angular.module("xCallyShuttleApp").factory("MotionDialerBlackList",["$resource",function(a){return a("/api/rest/blacklist/:controller",null,{list:{method:"POST",params:{controller:"list"}},insert:{method:"POST",params:{controller:"insert"}},"delete":{method:"POST",params:{controller:"delete"}},find:{method:"POST",params:{controller:"find"}},update:{method:"POST",params:{controller:"update"}}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.motiondialer.info",{url:"/info",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").factory("MotionDialerSystem",["$resource",function(a){return a("/api/rest/system/:controller",null,{properties:{method:"POST",params:{controller:"properties"}}})}]),angular.module("xCallyShuttleApp").controller("MotionDialerInfoViewCtrl",["$scope","xAlert","MotionDialerSystem",function(a,b,c){a.getProperties=function(){return c.properties().$promise.then(function(c){console.log(c),c.status>0?a.properties=c.response.RMI:b.show(c.message||"Please, check your connection!","danger")})["catch"](function(a){b.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.motiondialer.info.view",{url:"/view",templateUrl:"app/motiondialer/info/view/view.html",controller:"MotionDialerInfoViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.motiondialer.info.view.about",{url:"/about",templateUrl:"app/motiondialer/info/view/view.about.html"}).state("main.motiondialer.info.view.details",{url:"/details",templateUrl:"app/motiondialer/info/view/view.details.html"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.motiondialer.lists",{url:"/lists",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("MotionDialerListListCtrl",["$scope","$uibModal","$translate","xAlert","Modal","MotionDialerList","uiGridConstants","usSpinnerService",function(a,b,c,d,e,f,g,h){a.initView=function(){return a.gridOptions={paginationPageSizes:[10,25,50,75],paginationPageSize:10,enableFiltering:!0,enableSorting:!0,enableGridMenu:!0,flatEntityAccess:!0,showGridFooter:!0,fastWatch:!0,columnDefs:[{name:"id",width:60},{name:"name"},{name:"description",enableSorting:!1},{name:"updatedtime",sort:{direction:g.DESC},enableFiltering:!1},{name:"action",cellTemplate:'<div><a class="btn btn-xs blue-hoki" href="/motiondialer/lists/view/{{row.entity.id}}/settings"><i class="icon-settings"></i></a> <a class="btn btn-xs red-sunglo" data-ng-click="grid.appScope.deleteItem(row.entity.name, row.entity.id)"><i class="icon-trash"></i></a></div>',enableSorting:!1,cellClass:"ui-grid-vcenter",enableFiltering:!1}]},f.list({page:1,size:6e5}).$promise.then(function(b){b.status>0?a.gridOptions.data=b.response.RMI.rows:d.show("Please, check your connection!","danger")})["catch"](function(a){d.error(a)})["finally"](function(){h.stop("spinner-grid")})},a.createItem=function(){var c=b.open({animation:!0,templateUrl:"app/motiondialer/list/list/list.create.modal.html",controller:"MotionDialerListListCreateCtrl"});c.result.then(function(b){a.gridOptions.data.push(b.response.RMI)})},a.deleteItem=e.confirm["delete"](function(b){return f["delete"]({id:b}).$promise.then(function(e){e.status>0?(_.remove(a.gridOptions.data,{id:b}),d.show(c.instant("MESSAGE_WELL_DONE"),"success")):d.show(e.message||"Please, check your connection!","danger")})["catch"](function(a){d.error(a)})})}]),angular.module("xCallyShuttleApp").controller("MotionDialerListListCreateCtrl",["$scope","$translate","$uibModalInstance","MotionDialerList","xAlert",function(a,b,c,d,e){a.form={},a.item={},a.save=function(){return d.insert(a.item).$promise.then(function(a){a.status>0?(e.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)):e.show(a.message||"Please, check your connection!","danger")})["catch"](function(a){e.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.motiondialer.lists.list",{url:"/list",templateUrl:"app/motiondialer/list/list/list.html",controller:"MotionDialerListListCtrl",authenticate:!0})}]),angular.module("xCallyShuttleApp").factory("MotionDialerContact",["$resource",function(a){return a("/api/rest/contact/:controller",null,{list:{method:"POST",params:{controller:"list"}},insert:{method:"POST",params:{controller:"insert"}},"delete":{method:"POST",params:{controller:"delete"}},find:{method:"POST",params:{controller:"find"}},update:{method:"POST",params:{controller:"update"}}})}]),angular.module("xCallyShuttleApp").factory("MotionDialerList",["$resource",function(a){return a("/api/rest/list/:controller",null,{list:{method:"POST",params:{controller:"list"}},insert:{method:"POST",params:{controller:"insert"}},"delete":{method:"POST",params:{controller:"delete"}},find:{method:"POST",params:{controller:"find"}},update:{method:"POST",params:{controller:"update"}}})}]),angular.module("xCallyShuttleApp").controller("MotionDialerViewContactCreateCtrl",["$scope","$translate","$uibModalInstance","$stateParams","MotionDialerContact","xAlert","MotionDialerTimezone",function(a,b,c,d,e,f,g){a.form={},a.item={},a.timezones=g.list(),a.save=function(){return console.log(a.item),e.insert({id_list:parseInt(d.id),name:a.item.name,phones:a.item.phones.trim().split(","),description:a.item.description||""}).$promise.then(function(a){console.log(a),a.status>0?(f.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)):f.show(a.message||"Please, check your connection!","danger")})["catch"](function(a){f.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").controller("MotionDialerListContactImportModalCtrl",["$scope","$uibModalInstance","$stateParams","indexes","csv","xAlert","MotionDialerContact","MotionDialerTimezone",function(a,b,c,d,e,f,g,h){function i(b){if(b>=a.csvLength||a.stopped)return void(a.importing=!1);var d={id_list:parseInt(c.id),name:"",phones:[],variables:[],description:"",account:"",timezone:""},f={};return _.forOwn(a.item,function(a,c){switch(c){case"phones":_.forEach(a,function(a){e[b][a]&&d.phones.push(e[b][a])});break;case"variables":_.forEach(a,function(a){e[b][a]&&(f={},f[a]=e[b][a],d.variables.push(f))});break;default:d[c]=e[b][a]}}),d.phones.length?(d.timezone||delete d.timezone,g.insert(d).$promise.then(function(b){b.status>0?(a["import"].success+=j,a["import"].succeeded++,k.push(b.response.RMI)):(console.log(b),a["import"].fail+=j,a["import"].failed++)})["catch"](function(b){console.log(b),a["import"].fail+=j,a["import"].failed++})["finally"](function(){i(b+1)})):(a.noPhone.push(b+2),a["import"].fail+=j,a["import"].failed++,i(b+1),void 0)}a.form={},a.item={},a.timezones=h.list(),a.uiTimeZones=[],_.forEach(a.timezones,function(b){_.forEach(b.zones,function(c){c.group=b.group,a.uiTimeZones.push(c)})}),console.log(d),console.log(e),a.indexes=d,a.importing=!1,a.submitted=!1,a.stopped=!1,a["import"]={success:0,fail:0,succeeded:0,failed:0},a.csvLength=e.length;var j=100/a.csvLength,k=[];a.start=function(){a.noPhone=[],a.importing=!0,a.submitted=!0,i(0)},a.close=function(){b.close(k)},a.stop=function(){a.stopped=!0}}]),angular.module("xCallyShuttleApp").controller("MotionDialerListViewCtrl",["$scope","$translate","$stateParams","$uibModal","xAlert","uiGridConstants","usSpinnerService","MotionDialerList","MotionDialerContact","Modal","FileUploader","Papa",function(a,b,c,d,e,f,g,h,i,j,k,l){a.getList=function(){return h.find({id:parseInt(c.id)}).$promise.then(function(b){b.status>0?a.list=b.response.RMI:e.show(b.message||"Please, check your connection!","danger")})["catch"](function(a){e.error(a)})},a.updateList=function(){return h.update({id:a.list.id,name:a.list.name,description:a.list.description}).$promise.then(function(a){a.status>0?e.show(b.instant("MESSAGE_WELL_DONE"),"success"):e.show(a.message||"Please, check your connection!","danger")})["catch"](function(a){e.error(a)})},a.getContacts=function(){return a.gridOptions={paginationPageSizes:[10,25,50,75],paginationPageSize:10,enableFiltering:!0,enableSorting:!0,enableGridMenu:!0,flatEntityAccess:!0,showGridFooter:!0,fastWatch:!0,columnDefs:[{name:"name"},{name:"phones",cellTemplate:"<div>{{row.entity.phones.join(',')}}</div>",cellClass:"ui-grid-vcenter"},{name:"description",enableSorting:!1},{name:"updatedtime",sort:{direction:f.DESC},enableFiltering:!1},{name:"action",cellTemplate:'<div><a class="btn btn-xs red-sunglo" data-ng-click="grid.appScope.deleteContact(row.entity.name, row.entity.id)"><i class="icon-trash"></i></a></div>',enableSorting:!1,cellClass:"ui-grid-vcenter",enableFiltering:!1}]},i.list({id_list:parseInt(c.id),page:1,size:6e5}).$promise.then(function(b){b.status>0?a.gridOptions.data=b.response.RMI.rows:e.show(b.message||"Please, check your connection!","danger")})["catch"](function(a){e.error(a)})["finally"](function(){g.stop("spinner-grid")})},a.deleteContact=j.confirm["delete"](function(c){return i["delete"]({id:c}).$promise.then(function(d){d.status>0?(_.remove(a.gridOptions.data,{id:c}),e.show(b.instant("MESSAGE_WELL_DONE"),"success")):e.show(d.message||"Please, check your connection!","danger")})["catch"](function(a){e.error(a)})}),a.createContact=function(){var b=d.open({animation:!0,templateUrl:"app/motiondialer/list/view/view.contact.create.modal.html",controller:"MotionDialerViewContactCreateCtrl"});b.result.then(function(b){a.gridOptions.data.push(b.response.RMI)})};var m=a.uploader=new k({queueLimit:1,clearInputAfterAddedToQueue:!0});m.onAfterAddingFile=function(b){l.parse(b._file,{header:!0,complete:function(b){a.uploader.clearQueue(),a["import"](b.data)},error:function(a){e.error(a)}})},a["import"]=function(b){var c=d.open({animation:!0,backdrop:"static",keyboard:!1,templateUrl:"app/motiondialer/list/view/view.contact.import.modal.html",controller:"MotionDialerListContactImportModalCtrl",resolve:{indexes:function(){return _.keys(b[0])},csv:function(){return b}}});c.result.then(function(b){console.log(b),a.gridOptions.data=a.gridOptions.data.concat(b)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.motiondialer.lists.view",{url:"/view/:id",templateUrl:"app/motiondialer/list/view/view.html",controller:"MotionDialerListViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.motiondialer.lists.view.settings",{url:"/settings",templateUrl:"app/motiondialer/list/view/view.settings.html"}).state("main.motiondialer.lists.view.contacts",{url:"/contacts",templateUrl:"app/motiondialer/list/view/view.contacts.html"})}]),angular.module("xCallyShuttleApp").factory("MotionDialerTimezone",function(){return{list:function(){return[{group:"US (Common)",zones:[{value:"America/Puerto_Rico",name:"Puerto Rico (Atlantic)"},{value:"America/New_York",name:"New York (Eastern)"},{value:"America/Chicago",name:"Chicago (Central)"},{value:"America/Denver",name:"Denver (Mountain)"},{value:"America/Phoenix",name:"Phoenix (MST)"},{value:"America/Los_Angeles",name:"Los Angeles (Pacific)"},{value:"America/Anchorage",name:"Anchorage (Alaska)"},{value:"Pacific/Honolulu",name:"Honolulu (Hawaii)"}]},{group:"America",zones:[{value:"America/Adak",name:"Adak"},{value:"America/Anchorage",name:"Anchorage"},{value:"America/Anguilla",name:"Anguilla"},{value:"America/Antigua",name:"Antigua"},{value:"America/Araguaina",name:"Araguaina"},{value:"America/Argentina/Buenos_Aires",name:"Argentina - Buenos Aires"},{value:"America/Argentina/Catamarca",name:"Argentina - Catamarca"},{value:"America/Argentina/ComodRivadavia",name:"Argentina - ComodRivadavia"},{value:"America/Argentina/Cordoba",name:"Argentina - Cordoba"},{value:"America/Argentina/Jujuy",name:"Argentina - Jujuy"},{value:"America/Argentina/La_Rioja",name:"Argentina - La Rioja"},{value:"America/Argentina/Mendoza",name:"Argentina - Mendoza"},{value:"America/Argentina/Rio_Gallegos",name:"Argentina - Rio Gallegos"},{value:"America/Argentina/Salta",name:"Argentina - Salta"},{value:"America/Argentina/San_Juan",name:"Argentina - San Juan"},{value:"America/Argentina/San_Luis",name:"Argentina - San Luis"},{value:"America/Argentina/Tucuman",name:"Argentina - Tucuman"},{value:"America/Argentina/Ushuaia",name:"Argentina - Ushuaia"},{value:"America/Aruba",name:"Aruba"},{value:"America/Asuncion",name:"Asuncion"},{value:"America/Atikokan",name:"Atikokan"},{value:"America/Atka",name:"Atka"},{value:"America/Bahia",name:"Bahia"},{value:"America/Barbados",name:"Barbados"},{value:"America/Belem",name:"Belem"},{value:"America/Belize",name:"Belize"},{value:"America/Blanc-Sablon",name:"Blanc-Sablon"},{value:"America/Boa_Vista",name:"Boa Vista"},{value:"America/Bogota",name:"Bogota"},{value:"America/Boise",name:"Boise"},{value:"America/Buenos_Aires",name:"Buenos Aires"},{value:"America/Cambridge_Bay",name:"Cambridge Bay"},{value:"America/Campo_Grande",name:"Campo Grande"},{value:"America/Cancun",name:"Cancun"},{value:"America/Caracas",name:"Caracas"},{value:"America/Catamarca",name:"Catamarca"},{value:"America/Cayenne",name:"Cayenne"},{value:"America/Cayman",name:"Cayman"},{value:"America/Chicago",name:"Chicago"},{value:"America/Chihuahua",name:"Chihuahua"},{value:"America/Coral_Harbour",name:"Coral Harbour"},{value:"America/Cordoba",name:"Cordoba"},{value:"America/Costa_Rica",name:"Costa Rica"},{value:"America/Cuiaba",name:"Cuiaba"},{value:"America/Curacao",name:"Curacao"},{value:"America/Danmarkshavn",name:"Danmarkshavn"},{value:"America/Dawson",name:"Dawson"},{value:"America/Dawson_Creek",name:"Dawson Creek"},{value:"America/Denver",name:"Denver"},{value:"America/Detroit",name:"Detroit"},{value:"America/Dominica",name:"Dominica"},{value:"America/Edmonton",name:"Edmonton"},{value:"America/Eirunepe",name:"Eirunepe"},{value:"America/El_Salvador",name:"El Salvador"},{value:"America/Ensenada",name:"Ensenada"},{value:"America/Fortaleza",name:"Fortaleza"},{value:"America/Fort_Wayne",name:"Fort Wayne"},{value:"America/Glace_Bay",name:"Glace Bay"},{value:"America/Godthab",name:"Godthab"},{value:"America/Goose_Bay",name:"Goose Bay"},{value:"America/Grand_Turk",name:"Grand Turk"},{value:"America/Grenada",name:"Grenada"},{value:"America/Guadeloupe",name:"Guadeloupe"},{value:"America/Guatemala",name:"Guatemala"},{value:"America/Guayaquil",name:"Guayaquil"},{value:"America/Guyana",name:"Guyana"},{value:"America/Halifax",name:"Halifax"},{value:"America/Havana",name:"Havana"},{value:"America/Hermosillo",name:"Hermosillo"},{value:"America/Indiana/Indianapolis",name:"Indiana - Indianapolis"},{value:"America/Indiana/Knox",name:"Indiana - Knox"},{value:"America/Indiana/Marengo",name:"Indiana - Marengo"},{value:"America/Indiana/Petersburg",name:"Indiana - Petersburg"},{value:"America/Indiana/Tell_City",name:"Indiana - Tell City"},{value:"America/Indiana/Vevay",name:"Indiana - Vevay"},{value:"America/Indiana/Vincennes",name:"Indiana - Vincennes"},{value:"America/Indiana/Winamac",name:"Indiana - Winamac"},{value:"America/Indianapolis",name:"Indianapolis"},{value:"America/Inuvik",name:"Inuvik"},{value:"America/Iqaluit",name:"Iqaluit"},{value:"America/Jamaica",name:"Jamaica"},{value:"America/Jujuy",name:"Jujuy"},{value:"America/Juneau",name:"Juneau"},{value:"America/Kentucky/Louisville",name:"Kentucky - Louisville"},{value:"America/Kentucky/Monticello",name:"Kentucky - Monticello"},{value:"America/Knox_IN",name:"Knox IN"},{value:"America/La_Paz",name:"La Paz"},{value:"America/Lima",name:"Lima"},{value:"America/Los_Angeles",name:"Los Angeles"},{value:"America/Louisville",name:"Louisville"},{value:"America/Maceio",name:"Maceio"},{value:"America/Managua",name:"Managua"},{value:"America/Manaus",name:"Manaus"},{value:"America/Marigot",name:"Marigot"},{value:"America/Martinique",name:"Martinique"},{value:"America/Matamoros",name:"Matamoros"},{value:"America/Mazatlan",name:"Mazatlan"},{value:"America/Mendoza",name:"Mendoza"},{value:"America/Menominee",name:"Menominee"},{value:"America/Merida",name:"Merida"},{value:"America/Mexico_City",name:"Mexico City"},{value:"America/Miquelon",name:"Miquelon"},{value:"America/Moncton",name:"Moncton"},{value:"America/Monterrey", -name:"Monterrey"},{value:"America/Montevideo",name:"Montevideo"},{value:"America/Montreal",name:"Montreal"},{value:"America/Montserrat",name:"Montserrat"},{value:"America/Nassau",name:"Nassau"},{value:"America/New_York",name:"New York"},{value:"America/Nipigon",name:"Nipigon"},{value:"America/Nome",name:"Nome"},{value:"America/Noronha",name:"Noronha"},{value:"America/North_Dakota/Center",name:"North Dakota - Center"},{value:"America/North_Dakota/New_Salem",name:"North Dakota - New Salem"},{value:"America/Ojinaga",name:"Ojinaga"},{value:"America/Panama",name:"Panama"},{value:"America/Pangnirtung",name:"Pangnirtung"},{value:"America/Paramaribo",name:"Paramaribo"},{value:"America/Phoenix",name:"Phoenix"},{value:"America/Port-au-Prince",name:"Port-au-Prince"},{value:"America/Porto_Acre",name:"Porto Acre"},{value:"America/Port_of_Spain",name:"Port of Spain"},{value:"America/Porto_Velho",name:"Porto Velho"},{value:"America/Puerto_Rico",name:"Puerto Rico"},{value:"America/Rainy_River",name:"Rainy River"},{value:"America/Rankin_Inlet",name:"Rankin Inlet"},{value:"America/Recife",name:"Recife"},{value:"America/Regina",name:"Regina"},{value:"America/Resolute",name:"Resolute"},{value:"America/Rio_Branco",name:"Rio Branco"},{value:"America/Rosario",name:"Rosario"},{value:"America/Santa_Isabel",name:"Santa Isabel"},{value:"America/Santarem",name:"Santarem"},{value:"America/Santiago",name:"Santiago"},{value:"America/Santo_Domingo",name:"Santo Domingo"},{value:"America/Sao_Paulo",name:"Sao Paulo"},{value:"America/Scoresbysund",name:"Scoresbysund"},{value:"America/Shiprock",name:"Shiprock"},{value:"America/St_Barthelemy",name:"St Barthelemy"},{value:"America/St_Johns",name:"St Johns"},{value:"America/St_Kitts",name:"St Kitts"},{value:"America/St_Lucia",name:"St Lucia"},{value:"America/St_Thomas",name:"St Thomas"},{value:"America/St_Vincent",name:"St Vincent"},{value:"America/Swift_Current",name:"Swift Current"},{value:"America/Tegucigalpa",name:"Tegucigalpa"},{value:"America/Thule",name:"Thule"},{value:"America/Thunder_Bay",name:"Thunder Bay"},{value:"America/Tijuana",name:"Tijuana"},{value:"America/Toronto",name:"Toronto"},{value:"America/Tortola",name:"Tortola"},{value:"America/Vancouver",name:"Vancouver"},{value:"America/Virgin",name:"Virgin"},{value:"America/Whitehorse",name:"Whitehorse"},{value:"America/Winnipeg",name:"Winnipeg"},{value:"America/Yakutat",name:"Yakutat"},{value:"America/Yellowknife",name:"Yellowknife"}]},{group:"Europe",zones:[{value:"Europe/Amsterdam",name:"Amsterdam"},{value:"Europe/Andorra",name:"Andorra"},{value:"Europe/Athens",name:"Athens"},{value:"Europe/Belfast",name:"Belfast"},{value:"Europe/Belgrade",name:"Belgrade"},{value:"Europe/Berlin",name:"Berlin"},{value:"Europe/Bratislava",name:"Bratislava"},{value:"Europe/Brussels",name:"Brussels"},{value:"Europe/Bucharest",name:"Bucharest"},{value:"Europe/Budapest",name:"Budapest"},{value:"Europe/Chisinau",name:"Chisinau"},{value:"Europe/Copenhagen",name:"Copenhagen"},{value:"Europe/Dublin",name:"Dublin"},{value:"Europe/Gibraltar",name:"Gibraltar"},{value:"Europe/Guernsey",name:"Guernsey"},{value:"Europe/Helsinki",name:"Helsinki"},{value:"Europe/Isle_of_Man",name:"Isle of Man"},{value:"Europe/Istanbul",name:"Istanbul"},{value:"Europe/Jersey",name:"Jersey"},{value:"Europe/Kaliningrad",name:"Kaliningrad"},{value:"Europe/Kiev",name:"Kiev"},{value:"Europe/Lisbon",name:"Lisbon"},{value:"Europe/Ljubljana",name:"Ljubljana"},{value:"Europe/London",name:"London"},{value:"Europe/Luxembourg",name:"Luxembourg"},{value:"Europe/Madrid",name:"Madrid"},{value:"Europe/Malta",name:"Malta"},{value:"Europe/Mariehamn",name:"Mariehamn"},{value:"Europe/Minsk",name:"Minsk"},{value:"Europe/Monaco",name:"Monaco"},{value:"Europe/Moscow",name:"Moscow"},{value:"Europe/Nicosia",name:"Nicosia"},{value:"Europe/Oslo",name:"Oslo"},{value:"Europe/Paris",name:"Paris"},{value:"Europe/Podgorica",name:"Podgorica"},{value:"Europe/Prague",name:"Prague"},{value:"Europe/Riga",name:"Riga"},{value:"Europe/Rome",name:"Rome"},{value:"Europe/Samara",name:"Samara"},{value:"Europe/San_Marino",name:"San Marino"},{value:"Europe/Sarajevo",name:"Sarajevo"},{value:"Europe/Simferopol",name:"Simferopol"},{value:"Europe/Skopje",name:"Skopje"},{value:"Europe/Sofia",name:"Sofia"},{value:"Europe/Stockholm",name:"Stockholm"},{value:"Europe/Tallinn",name:"Tallinn"},{value:"Europe/Tirane",name:"Tirane"},{value:"Europe/Tiraspol",name:"Tiraspol"},{value:"Europe/Uzhgorod",name:"Uzhgorod"},{value:"Europe/Vaduz",name:"Vaduz"},{value:"Europe/Vatican",name:"Vatican"},{value:"Europe/Vienna",name:"Vienna"},{value:"Europe/Vilnius",name:"Vilnius"},{value:"Europe/Volgograd",name:"Volgograd"},{value:"Europe/Warsaw",name:"Warsaw"},{value:"Europe/Zagreb",name:"Zagreb"},{value:"Europe/Zaporozhye",name:"Zaporozhye"},{value:"Europe/Zurich",name:"Zurich"}]},{group:"Asia",zones:[{value:"Asia/Aden",name:"Aden"},{value:"Asia/Almaty",name:"Almaty"},{value:"Asia/Amman",name:"Amman"},{value:"Asia/Anadyr",name:"Anadyr"},{value:"Asia/Aqtau",name:"Aqtau"},{value:"Asia/Aqtobe",name:"Aqtobe"},{value:"Asia/Ashgabat",name:"Ashgabat"},{value:"Asia/Ashkhabad",name:"Ashkhabad"},{value:"Asia/Baghdad",name:"Baghdad"},{value:"Asia/Bahrain",name:"Bahrain"},{value:"Asia/Baku",name:"Baku"},{value:"Asia/Bangkok",name:"Bangkok"},{value:"Asia/Beirut",name:"Beirut"},{value:"Asia/Bishkek",name:"Bishkek"},{value:"Asia/Brunei",name:"Brunei"},{value:"Asia/Calcutta",name:"Calcutta"},{value:"Asia/Choibalsan",name:"Choibalsan"},{value:"Asia/Chongqing",name:"Chongqing"},{value:"Asia/Chungking",name:"Chungking"},{value:"Asia/Colombo",name:"Colombo"},{value:"Asia/Dacca",name:"Dacca"},{value:"Asia/Damascus",name:"Damascus"},{value:"Asia/Dhaka",name:"Dhaka"},{value:"Asia/Dili",name:"Dili"},{value:"Asia/Dubai",name:"Dubai"},{value:"Asia/Dushanbe",name:"Dushanbe"},{value:"Asia/Gaza",name:"Gaza"},{value:"Asia/Harbin",name:"Harbin"},{value:"Asia/Ho_Chi_Minh",name:"Ho Chi Minh"},{value:"Asia/Hong_Kong",name:"Hong Kong"},{value:"Asia/Hovd",name:"Hovd"},{value:"Asia/Irkutsk",name:"Irkutsk"},{value:"Asia/Istanbul",name:"Istanbul"},{value:"Asia/Jakarta",name:"Jakarta"},{value:"Asia/Jayapura",name:"Jayapura"},{value:"Asia/Jerusalem",name:"Jerusalem"},{value:"Asia/Kabul",name:"Kabul"},{value:"Asia/Kamchatka",name:"Kamchatka"},{value:"Asia/Karachi",name:"Karachi"},{value:"Asia/Kashgar",name:"Kashgar"},{value:"Asia/Kathmandu",name:"Kathmandu"},{value:"Asia/Katmandu",name:"Katmandu"},{value:"Asia/Kolkata",name:"Kolkata"},{value:"Asia/Krasnoyarsk",name:"Krasnoyarsk"},{value:"Asia/Kuala_Lumpur",name:"Kuala Lumpur"},{value:"Asia/Kuching",name:"Kuching"},{value:"Asia/Kuwait",name:"Kuwait"},{value:"Asia/Macao",name:"Macao"},{value:"Asia/Macau",name:"Macau"},{value:"Asia/Magadan",name:"Magadan"},{value:"Asia/Makassar",name:"Makassar"},{value:"Asia/Manila",name:"Manila"},{value:"Asia/Muscat",name:"Muscat"},{value:"Asia/Nicosia",name:"Nicosia"},{value:"Asia/Novokuznetsk",name:"Novokuznetsk"},{value:"Asia/Novosibirsk",name:"Novosibirsk"},{value:"Asia/Omsk",name:"Omsk"},{value:"Asia/Oral",name:"Oral"},{value:"Asia/Phnom_Penh",name:"Phnom Penh"},{value:"Asia/Pontianak",name:"Pontianak"},{value:"Asia/Pyongyang",name:"Pyongyang"},{value:"Asia/Qatar",name:"Qatar"},{value:"Asia/Qyzylorda",name:"Qyzylorda"},{value:"Asia/Rangoon",name:"Rangoon"},{value:"Asia/Riyadh",name:"Riyadh"},{value:"Asia/Saigon",name:"Saigon"},{value:"Asia/Sakhalin",name:"Sakhalin"},{value:"Asia/Samarkand",name:"Samarkand"},{value:"Asia/Seoul",name:"Seoul"},{value:"Asia/Shanghai",name:"Shanghai"},{value:"Asia/Singapore",name:"Singapore"},{value:"Asia/Taipei",name:"Taipei"},{value:"Asia/Tashkent",name:"Tashkent"},{value:"Asia/Tbilisi",name:"Tbilisi"},{value:"Asia/Tehran",name:"Tehran"},{value:"Asia/Tel_Aviv",name:"Tel Aviv"},{value:"Asia/Thimbu",name:"Thimbu"},{value:"Asia/Thimphu",name:"Thimphu"},{value:"Asia/Tokyo",name:"Tokyo"},{value:"Asia/Ujung_Pandang",name:"Ujung Pandang"},{value:"Asia/Ulaanbaatar",name:"Ulaanbaatar"},{value:"Asia/Ulan_Bator",name:"Ulan Bator"},{value:"Asia/Urumqi",name:"Urumqi"},{value:"Asia/Vientiane",name:"Vientiane"},{value:"Asia/Vladivostok",name:"Vladivostok"},{value:"Asia/Yakutsk",name:"Yakutsk"},{value:"Asia/Yekaterinburg",name:"Yekaterinburg"},{value:"Asia/Yerevan",name:"Yerevan"}]},{group:"Africa",zones:[{value:"Africa/Abidjan",name:"Abidjan"},{value:"Africa/Accra",name:"Accra"},{value:"Africa/Addis_Ababa",name:"Addis Ababa"},{value:"Africa/Algiers",name:"Algiers"},{value:"Africa/Asmara",name:"Asmara"},{value:"Africa/Asmera",name:"Asmera"},{value:"Africa/Bamako",name:"Bamako"},{value:"Africa/Bangui",name:"Bangui"},{value:"Africa/Banjul",name:"Banjul"},{value:"Africa/Bissau",name:"Bissau"},{value:"Africa/Blantyre",name:"Blantyre"},{value:"Africa/Brazzaville",name:"Brazzaville"},{value:"Africa/Bujumbura",name:"Bujumbura"},{value:"Africa/Cairo",name:"Cairo"},{value:"Africa/Casablanca",name:"Casablanca"},{value:"Africa/Ceuta",name:"Ceuta"},{value:"Africa/Conakry",name:"Conakry"},{value:"Africa/Dakar",name:"Dakar"},{value:"Africa/Dar_es_Salaam",name:"Dar es Salaam"},{value:"Africa/Djibouti",name:"Djibouti"},{value:"Africa/Douala",name:"Douala"},{value:"Africa/El_Aaiun",name:"El Aaiun"},{value:"Africa/Freetown",name:"Freetown"},{value:"Africa/Gaborone",name:"Gaborone"},{value:"Africa/Harare",name:"Harare"},{value:"Africa/Johannesburg",name:"Johannesburg"},{value:"Africa/Kampala",name:"Kampala"},{value:"Africa/Khartoum",name:"Khartoum"},{value:"Africa/Kigali",name:"Kigali"},{value:"Africa/Kinshasa",name:"Kinshasa"},{value:"Africa/Lagos",name:"Lagos"},{value:"Africa/Libreville",name:"Libreville"},{value:"Africa/Lome",name:"Lome"},{value:"Africa/Luanda",name:"Luanda"},{value:"Africa/Lubumbashi",name:"Lubumbashi"},{value:"Africa/Lusaka",name:"Lusaka"},{value:"Africa/Malabo",name:"Malabo"},{value:"Africa/Maputo",name:"Maputo"},{value:"Africa/Maseru",name:"Maseru"},{value:"Africa/Mbabane",name:"Mbabane"},{value:"Africa/Mogadishu",name:"Mogadishu"},{value:"Africa/Monrovia",name:"Monrovia"},{value:"Africa/Nairobi",name:"Nairobi"},{value:"Africa/Ndjamena",name:"Ndjamena"},{value:"Africa/Niamey",name:"Niamey"},{value:"Africa/Nouakchott",name:"Nouakchott"},{value:"Africa/Ouagadougou",name:"Ouagadougou"},{value:"Africa/Porto-Novo",name:"Porto-Novo"},{value:"Africa/Sao_Tome",name:"Sao Tome"},{value:"Africa/Timbuktu",name:"Timbuktu"},{value:"Africa/Tripoli",name:"Tripoli"},{value:"Africa/Tunis",name:"Tunis"},{value:"Africa/Windhoek",name:"Windhoek"}]},{group:"Australia",zones:[{value:"Australia/ACT",name:"ACT"},{value:"Australia/Adelaide",name:"Adelaide"},{value:"Australia/Brisbane",name:"Brisbane"},{value:"Australia/Broken_Hill",name:"Broken Hill"},{value:"Australia/Canberra",name:"Canberra"},{value:"Australia/Currie",name:"Currie"},{value:"Australia/Darwin",name:"Darwin"},{value:"Australia/Eucla",name:"Eucla"},{value:"Australia/Hobart",name:"Hobart"},{value:"Australia/LHI",name:"LHI"},{value:"Australia/Lindeman",name:"Lindeman"},{value:"Australia/Lord_Howe",name:"Lord Howe"},{value:"Australia/Melbourne",name:"Melbourne"},{value:"Australia/North",name:"North"},{value:"Australia/NSW",name:"NSW"},{value:"Australia/Perth",name:"Perth"},{value:"Australia/Queensland",name:"Queensland"},{value:"Australia/South",name:"South"},{value:"Australia/Sydney",name:"Sydney"},{value:"Australia/Tasmania",name:"Tasmania"},{value:"Australia/Victoria",name:"Victoria"},{value:"Australia/West",name:"West"},{value:"Australia/Yancowinna",name:"Yancowinna"}]},{group:"Indian",zones:[{value:"Indian/Antananarivo",name:"Antananarivo"},{value:"Indian/Chagos",name:"Chagos"},{value:"Indian/Christmas",name:"Christmas"},{value:"Indian/Cocos",name:"Cocos"},{value:"Indian/Comoro",name:"Comoro"},{value:"Indian/Kerguelen",name:"Kerguelen"},{value:"Indian/Mahe",name:"Mahe"},{value:"Indian/Maldives",name:"Maldives"},{value:"Indian/Mauritius",name:"Mauritius"},{value:"Indian/Mayotte",name:"Mayotte"},{value:"Indian/Reunion",name:"Reunion"}]},{group:"Atlantic",zones:[{value:"Atlantic/Azores",name:"Azores"},{value:"Atlantic/Bermuda",name:"Bermuda"},{value:"Atlantic/Canary",name:"Canary"},{value:"Atlantic/Cape_Verde",name:"Cape Verde"},{value:"Atlantic/Faeroe",name:"Faeroe"},{value:"Atlantic/Faroe",name:"Faroe"},{value:"Atlantic/Jan_Mayen",name:"Jan Mayen"},{value:"Atlantic/Madeira",name:"Madeira"},{value:"Atlantic/Reykjavik",name:"Reykjavik"},{value:"Atlantic/South_Georgia",name:"South Georgia"},{value:"Atlantic/Stanley",name:"Stanley"},{value:"Atlantic/St_Helena",name:"St Helena"}]},{group:"Pacific",zones:[{value:"Pacific/Apia",name:"Apia"},{value:"Pacific/Auckland",name:"Auckland"},{value:"Pacific/Chatham",name:"Chatham"},{value:"Pacific/Easter",name:"Easter"},{value:"Pacific/Efate",name:"Efate"},{value:"Pacific/Enderbury",name:"Enderbury"},{value:"Pacific/Fakaofo",name:"Fakaofo"},{value:"Pacific/Fiji",name:"Fiji"},{value:"Pacific/Funafuti",name:"Funafuti"},{value:"Pacific/Galapagos",name:"Galapagos"},{value:"Pacific/Gambier",name:"Gambier"},{value:"Pacific/Guadalcanal",name:"Guadalcanal"},{value:"Pacific/Guam",name:"Guam"},{value:"Pacific/Honolulu",name:"Honolulu"},{value:"Pacific/Johnston",name:"Johnston"},{value:"Pacific/Kiritimati",name:"Kiritimati"},{value:"Pacific/Kosrae",name:"Kosrae"},{value:"Pacific/Kwajalein",name:"Kwajalein"},{value:"Pacific/Majuro",name:"Majuro"},{value:"Pacific/Marquesas",name:"Marquesas"},{value:"Pacific/Midway",name:"Midway"},{value:"Pacific/Nauru",name:"Nauru"},{value:"Pacific/Niue",name:"Niue"},{value:"Pacific/Norfolk",name:"Norfolk"},{value:"Pacific/Noumea",name:"Noumea"},{value:"Pacific/Pago_Pago",name:"Pago Pago"},{value:"Pacific/Palau",name:"Palau"},{value:"Pacific/Pitcairn",name:"Pitcairn"},{value:"Pacific/Ponape",name:"Ponape"},{value:"Pacific/Port_Moresby",name:"Port Moresby"},{value:"Pacific/Rarotonga",name:"Rarotonga"},{value:"Pacific/Saipan",name:"Saipan"},{value:"Pacific/Samoa",name:"Samoa"},{value:"Pacific/Tahiti",name:"Tahiti"},{value:"Pacific/Tarawa",name:"Tarawa"},{value:"Pacific/Tongatapu",name:"Tongatapu"},{value:"Pacific/Truk",name:"Truk"},{value:"Pacific/Wake",name:"Wake"},{value:"Pacific/Wallis",name:"Wallis"},{value:"Pacific/Yap",name:"Yap"}]},{group:"Antarctica",zones:[{value:"Antarctica/Casey",name:"Casey"},{value:"Antarctica/Davis",name:"Davis"},{value:"Antarctica/DumontDUrville",name:"DumontDUrville"},{value:"Antarctica/Macquarie",name:"Macquarie"},{value:"Antarctica/Mawson",name:"Mawson"},{value:"Antarctica/McMurdo",name:"McMurdo"},{value:"Antarctica/Palmer",name:"Palmer"},{value:"Antarctica/Rothera",name:"Rothera"},{value:"Antarctica/South_Pole",name:"South Pole"},{value:"Antarctica/Syowa",name:"Syowa"},{value:"Antarctica/Vostok",name:"Vostok"}]},{group:"Arctic",zones:[{value:"Arctic/Longyearbyen",name:"Longyearbyen"}]},{group:"UTC",zones:[{value:"UTC",name:"UTC"}]},{group:"Manual Offsets",zones:[{value:"UTC-12",name:"UTC-12"},{value:"UTC-11",name:"UTC-11"},{value:"UTC-10",name:"UTC-10"},{value:"UTC-9",name:"UTC-9"},{value:"UTC-8",name:"UTC-8"},{value:"UTC-7",name:"UTC-7"},{value:"UTC-6",name:"UTC-6"},{value:"UTC-5",name:"UTC-5"},{value:"UTC-4",name:"UTC-4"},{value:"UTC-3",name:"UTC-3"},{value:"UTC-2",name:"UTC-2"},{value:"UTC-1",name:"UTC-1"},{value:"UTC+0",name:"UTC+0"},{value:"UTC+1",name:"UTC+1"},{value:"UTC+2",name:"UTC+2"},{value:"UTC+3",name:"UTC+3"},{value:"UTC+4",name:"UTC+4"},{value:"UTC+5",name:"UTC+5"},{value:"UTC+6",name:"UTC+6"},{value:"UTC+7",name:"UTC+7"},{value:"UTC+8",name:"UTC+8"},{value:"UTC+9",name:"UTC+9"},{value:"UTC+10",name:"UTC+10"},{value:"UTC+11",name:"UTC+11"},{value:"UTC+12",name:"UTC+12"},{value:"UTC+13",name:"UTC+13"},{value:"UTC+14",name:"UTC+14"}]}]}}}),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.motiondialer",{url:"/motiondialer",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:16}}})}]),angular.module("xCallyShuttleApp").controller("MotionDialerProcessListCtrl",["$scope","$uibModal","$translate","xAlert","Modal","MotionDialerProcess","uiGridConstants","usSpinnerService",function(a,b,c,d,e,f,g,h){a.initView=function(){return a.gridOptions={paginationPageSizes:[10,25,50,75],paginationPageSize:10,enableFiltering:!0,enableSorting:!0,enableGridMenu:!0,flatEntityAccess:!0,showGridFooter:!0,fastWatch:!0,columnDefs:[{name:"id",width:60},{name:"name"},{name:"queue",enableSorting:!1},{name:"extension",enableSorting:!1},{name:"id_list",enableSorting:!1,cellTemplate:'<div><a class="btn btn-xs grey-cascade" href="/motiondialer/lists/view/{{row.entity.id_list}}/settings">{{row.entity.id_list}}</a></div>',cellClass:"ui-grid-vcenter"},{name:"status",cellTemplate:"<div><a class=\"btn btn-xs\" data-ng-class=\"row.entity.status == 'STOP' ? 'red-sunglo' : 'green-meadow'\" data-ng-href=\"#\">{{ (row.entity.status === 'RUN') ? 'RUNNING' : 'STOPPED'}}</a></div>",cellClass:"ui-grid-vcenter",filter:{type:g.filter.SELECT,selectOptions:[{value:"RUN",label:"RUNNING"},{value:"STOP",label:"STOPPED"}]}},{name:"updatedtime",sort:{direction:g.DESC},enableFiltering:!1},{name:"action",cellTemplate:'<div><a class="btn btn-xs blue-hoki" href="/motiondialer/processes/view/{{row.entity.id}}/overview"><i class="icon-settings"></i></a><a class="btn btn-xs red-sunglo" data-ng-click="grid.appScope.deleteItem(row.entity.name, row.entity.id)"><i class="icon-trash"></i></a></div>',enableSorting:!1,cellClass:"ui-grid-vcenter",enableFiltering:!1}]},f.list({page:1,size:6e5}).$promise.then(function(b){console.log(b),b.status>0?a.gridOptions.data=b.response.RMI.rows:d.show("Please, check your connection!","danger")})["catch"](function(a){d.error(a)})["finally"](function(){h.stop("spinner-grid")})},a.createProcessQueue=function(){var c=b.open({animation:!0,templateUrl:"app/motiondialer/process/list/list.create.queue.modal.html",controller:"MotionDialerProcessListCreateQueueCtrl"});c.result.then(function(b){a.gridOptions.data.push(b.response.RMI)})},a.createProcessSquare=function(){var c=b.open({animation:!0,templateUrl:"app/motiondialer/process/list/list.create.square.modal.html",controller:"MotionDialerProcessListCreateSquareCtrl"});c.result.then(function(b){a.gridOptions.data.push(b.response.RMI)})},a.deleteItem=e.confirm["delete"](function(b){return f["delete"]({id:b}).$promise.then(function(e){e.status>0?(_.remove(a.gridOptions.data,{id:b}),d.show(c.instant("MESSAGE_WELL_DONE"),"success")):d.show(e.message||"Please, check your connection!","danger")})["catch"](function(a){d.error(a)})})}]),angular.module("xCallyShuttleApp").controller("MotionDialerProcessListCreateQueueCtrl",["$scope","$translate","$uibModalInstance","MotionDialerProcess","MotionDialerList","Trunk","VoiceQueue","Route","xAlert",function(a,b,c,d,e,f,g,h,i){a.form={},a.item={fetch_sort:"ASC",timeout:3},a.initModal=function(){return g.get().$promise.then(function(b){return a.queues={},b&&(a.queues=b.rows),f.get().$promise}).then(function(b){return a.trunks={},b&&(a.trunks=b.rows),a.trunks.push({name:"fake"}),e.list({page:1,size:6e5}).$promise}).then(function(b){a.lists={},b.status>0?a.lists=b.response.RMI.rows:i.show("Please, check your connection!","danger")})["catch"](function(a){i.error(a)})},a.save=function(){console.log(a.item);var e="_process_"+a.item.name+Math.round(1e5*Math.random()),f="Generated by Motion Dialer, Process Queue"+(a.item.description?", "+a.item.description:"");return h.save({appdata:"Internal Call",context:"from-sip",exten:e.replace(/\s/g,"_"),type:"internal",description:f,Applications:[{appdata:["CDR(type)=tigerdial"],app:"Set",interval:"*,*,*,*",type:"internal"},{appdata:["QUEUE_PRIO=99"],app:"Set",interval:"*,*,*,*",type:"internal"},{appdata:["CALLERID(name)=${AUTODIAL_NAME}"],app:"Set",interval:"*,*,*,*",type:"internal"},{appdata:["CALLERID(num)=${AUTODIAL_PHONE}"],app:"Set",interval:"*,*,*,*",type:"internal"},{appdata:[a.item.queue.name,"","","",a.item.timeout],app:"Queue",interval:"*,*,*,*",type:"internal"}]}).$promise.then(function(b){return d.insert({name:a.item.name,id_list:a.item.list.id,queue:a.item.queue.name,device:a.item.device.name,context:"from-sip",extension:e.replace(/\s/g,"_"),description:a.item.description,auto_closed:!0,fetch_sort:a.item.fetch_sort,hooks:[{target:"http://localhost:9000/api/report/integrations/tdDisposal",type:"http",http_method:"POST",json:"true",event:"hangup"}]}).$promise}).then(function(a){a.status>0?(i.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)):i.show(a.message||"Please, check your connection!","danger")})["catch"](function(a){i.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").controller("MotionDialerProcessListCreateSquareCtrl",["$scope","$translate","$uibModalInstance","MotionDialerProcess","MotionDialerList","SquareProject","Trunk","Route","xAlert",function(a,b,c,d,e,f,g,h,i){a.form={},a.item={fetch_sort:"ASC"},a.initModal=function(){return f.get().$promise.then(function(b){return a.projects={},b&&(a.projects=b.rows),g.get().$promise}).then(function(b){return a.trunks={},b&&(a.trunks=b.rows),a.trunks.push({name:"fake"}),e.list({page:1,size:6e5}).$promise}).then(function(b){a.lists={},b.status>0?a.lists=b.response.RMI.rows:i.show("Please, check your connection!","danger")})["catch"](function(a){i.error(a)})},a.save=function(){console.log(a.item);var e="_process_"+a.item.name+Math.round(1e5*Math.random()),f="Generated by Motion Dialer, Process Square"+(a.item.description?", "+a.item.description:"");return h.save({appdata:"Internal Call",context:"from-sip",exten:e.replace(/\s/g,"_"),type:"internal",description:f,Applications:[{appdata:["CDR(type)=tigerdial"],app:"Set",interval:"*,*,*,*",type:"internal"},{appdata:["agi://127.0.0.1/square",a.item.project.name],app:"AGI",interval:"*,*,*,*",type:"internal"}]}).$promise.then(function(b){return d.insert({name:a.item.name,id_list:a.item.list.id,queue:"none",device:a.item.device.name,context:"from-sip",extension:e.replace(/\s/g,"_"),description:a.item.description,auto_closed:!0,channel_limit:15,fetch_sort:a.item.fetch_sort}).$promise}).then(function(a){a.status>0?(i.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)):i.show(a.message||"Please, check your connection!","danger")})["catch"](function(a){i.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.motiondialer.processes.list",{url:"/list",templateUrl:"app/motiondialer/process/list/list.html",controller:"MotionDialerProcessListCtrl",authenticate:!0})}]),angular.module("xCallyShuttleApp").factory("MotionDialerProcess",["$resource",function(a){return a("/api/rest/process/:controller",null,{list:{method:"POST",params:{controller:"list"}},insert:{method:"POST",params:{controller:"insert"}},"delete":{method:"POST",params:{controller:"delete"}},find:{method:"POST",params:{controller:"find"}},update:{method:"POST",params:{controller:"update"}}})}]),angular.module("xCallyShuttleApp").factory("MotionDialerSpooler",["$resource",function(a){return a("/api/rest/spooler/:controller/:retrieve/:peer",null,{list:{method:"POST",params:{controller:"list"}},"delete":{method:"POST",params:{controller:"delete"}},find:{method:"POST",params:{controller:"find"}},summary:{method:"POST",params:{controller:"summary"}},close:{method:"POST",params:{controller:"retrieve",retrieve:"close"}},open:{method:"POST",params:{controller:"retrieve",retrieve:"open"}},blacklist:{method:"POST",params:{controller:"retrieve",retrieve:"blacklist"}},planning:{method:"POST",params:{controller:"retrieve",retrieve:"planning"}},planningpeer:{method:"POST",params:{controller:"retrieve",retrieve:"planning",peer:"peer"}}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.motiondialer.processes",{url:"/processes",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("MotionDialerProcessViewCtrl",["$scope","$translate","$stateParams","$uibModal","xAlert","uiGridConstants","usSpinnerService","MotionDialerProcess","MotionDialerSpooler","Modal","VoiceQueue",function(a,b,c,d,e,f,g,h,i,j,k){a.process={},a.techs=["SIP","IAX","LOCAL","KHOMP"],a.dialFormats=["tech/device/number","tech/number@device"],a.checkDuplicates=["ALWAYS","IFOPEN","NO"],a.codecs=["g729","ilbc","gsm","ulaw","alaw"],a.getProcess=function(){return h.find({id:parseInt(c.id)}).$promise.then(function(b){console.log(b),b.status>0?(b.response.RMI.codecs=b.response.RMI.codecs.split(","),a.process=b.response.RMI,a.process.hooks&&a.process.hooks.length?a.process.disposal=!0:a.process.disposal=!1):e.show(b.message||"Please, check your connection!","danger")})["catch"](function(a){e.error(a)})},a.getSummary=function(){return i.summary({id_process:parseInt(c.id)}).$promise.then(function(b){if(b.status>0){a.summary=b.response.RMI.totals,a.total=0;for(var c=0;c<a.summary.length;c++)a.total+=a.summary[c][1]}else e.show(b.message||"Please, check your connection!","danger")})["catch"](function(a){e.error(a)})["finally"](function(){g.stop("spinner-grid")})},a.updateProcess=function(){var c=_.clone(a.process);return delete c.updatedtime,delete c.id_list,delete c.createdtime,delete c.runtime,delete c.fetch_sort,c.codecs=c.codecs.join(","),""===c.timezone&&delete c.timezone,c.disposal?c.hooks=[{target:"http://localhost:9000/api/report/integrations/tdDisposal",type:"http",http_method:"POST",json:"true",event:"hangup"}]:c.hooks=[],delete c.disposal,h.update(c).$promise.then(function(c){c.status>0?(c.response.RMI.codecs=c.response.RMI.codecs.split(","),a.process=c.response.RMI,a.process.hooks&&a.process.hooks.length?a.process.disposal=!0:a.process.disposal=!1,e.show(b.instant("MESSAGE_WELL_DONE"),"success")):c.response.RMI.errors.forEach(function(a){a?e.show(a.field+": "+a.error,"danger"):e.show("Please, check your connection!","danger")})})["catch"](function(a){e.error(a)})},a.getSpooler=function(){return g.spin("spinner-grid"),a.gridOptions||(a.gridOptions={paginationPageSizes:[10,25,50,75],paginationPageSize:10,enableFiltering:!0,enableSorting:!0,enableGridMenu:!0,flatEntityAccess:!0,showGridFooter:!0,fastWatch:!0,headerCellFilter:"translate",columnDefs:[{name:"name"},{name:"phones",cellTemplate:"<div>{{row.entity.phones.join(',')}}</div>",cellClass:"ui-grid-vcenter"},{name:"retrieve",displayName:"APPLICATION_STATUS",headerCellFilter:"translate",filter:{type:f.filter.SELECT,selectOptions:[{value:"PLANNED_PEER",label:"PLANNED PEER"},{value:"PLANNED",label:"PLANNED"},{value:"BLACK_LIST",label:"BLACKLIST"},{value:"OPEN",label:"OPEN"},{value:"CLOSED",label:"CLOSED"},{value:"MAX_ATTEMPTS",label:"MAX ATTEMPTS"},{value:"COUNTER_BLOCK",label:"COUNTER BLOCK"},{value:"PLANNED_REQUEST",label:"PLANNED REQUEST"},{value:"DELETE",label:"DELETE"}]}},{name:"counter",enableFiltering:!1},{name:"planningtime",cellTemplate:"<div>{{row.entity.planningtime | date:'yyyy-MM-dd HH:mm'}}</div>",cellClass:"ui-grid-vcenter",enableFiltering:!1},{name:"action",cellTemplate:'<div><a class="btn btn-xs green" data-ng-click="grid.appScope.historySpooler(row.entity.history)"><i class="icon-info"></i></a> <a class="btn btn-xs blue-hoki" data-ng-click="grid.appScope.editSpooler(row.entity)"><i class="icon-settings"></i></a> <a class="btn btn-xs red-sunglo" data-ng-click="grid.appScope.deleteSpooler(row.entity.phones.join(), row.entity.id)"><i class="fa fa-trash"></i></a></div>',enableSorting:!1,cellClass:"ui-grid-vcenter",enableFiltering:!1}]}),i.list({id_process:parseInt(c.id),page:1,size:6e5}).$promise.then(function(b){b.status>0?a.gridOptions.data=b.response.RMI.rows:e.show(b.message||"Please, check your connection!","danger")})["catch"](function(a){e.error(a)})["finally"](function(){g.stop("spinner-grid")})},a.deleteSpooler=j.confirm["delete"](function(c){return i["delete"]({id:c}).$promise.then(function(d){d.status>0?(_.remove(a.gridOptions.data,{id:c}),e.show(b.instant("MESSAGE_WELL_DONE"),"success")):e.show(d.message||"Please, check your connection!","danger")})["catch"](function(a){e.error(a)})}),a.historySpooler=function(b){var c=d.open({animation:!0,templateUrl:"app/motiondialer/process/view/view.spooler.history.modal.html",controller:"MotionDialerViewSpoolerHistoryCtrl",resolve:{historySpooler:function(){return b}}});c.result.then(function(b){a.gridOptions.data.push(b.response.RMI)})},a.editSpooler=function(a){var b=d.open({animation:!0,templateUrl:"app/motiondialer/process/view/view.spooler.edit.modal.html",controller:"MotionDialerViewSpoolerEditCtrl",resolve:{entitySpooler:function(){return a}}});b.result.then(function(){})},a.initSettings=function(){return a.queues=null,k.get().$promise.then(function(b){b&&(a.queues=b.rows)})["catch"](function(a){e.error(a)})},a.createInterval=function(b){var c=d.open({animation:!0,templateUrl:"app/motiondialer/process/view/view.create.interval.modal.html",controller:"MotionDialerViewCreateIntervalCtrl",resolve:{objectProcess:function(){return a.process},intervalType:function(){return b},intervalValue:function(){return b?"8:00-20:00|MON-FRI|*|*":"00:01-07:59|SAT-SUN|*|*"}}});c.result.then(function(b){a.process=b})},a.editInterval=function(b,c){var e=d.open({animation:!0,templateUrl:"app/motiondialer/process/view/view.create.interval.modal.html",controller:"MotionDialerViewCreateIntervalCtrl",resolve:{objectProcess:function(){return a.process},intervalType:function(){return b},intervalValue:function(){return c}}});e.result.then(function(b){a.process=b})},a.deleteInterval=j.confirm["delete"](function(c,d){var f={id:a.process.id};return d?(f.intervals=[],f.intervals=f.intervals.concat(a.process.intervals),f.intervals.splice(c,1)):(f.not_intervals=[],f.not_intervals=f.not_intervals.concat(a.process.not_intervals),f.not_intervals.splice(c,1)),h.update(f).$promise.then(function(c){c.status>0?(c.response.RMI.codecs=c.response.RMI.codecs.split(","),a.process=c.response.RMI,e.show(b.instant("MESSAGE_WELL_DONE"),"success")):c.response.RMI.errors.forEach(function(a){a?e.show(a.field+": "+a.error,"danger"):e.show("Please, check your connection!","danger")})})["catch"](function(a){e.error(a)})}),a.runOrStop=function(){var b=d.open({animation:!0,templateUrl:"app/motiondialer/process/view/view.run.process.modal.html",controller:"MotionDialerViewRunProcessCtrl",resolve:{statusProcess:function(){return a.process.status}}});b.result.then(function(b){a.process.status=b.status})}}]),angular.module("xCallyShuttleApp").controller("MotionDialerViewCreateIntervalCtrl",["$scope","$translate","$uibModalInstance","$stateParams","MotionDialerProcess","xAlert","objectProcess","intervalType","intervalValue","interval",function(a,b,c,d,e,f,g,h,i,j){function k(a){var b,c=a.split("|"),d={};return c.forEach(function(a,c){switch(c){case 0:"*"!==a?(b=a.split("-"),d.t_from=moment(b[0],"HH:mm"),d.t_to=moment(b[1],"HH:mm"),d.alwaysTime=!1):(d.t_from=moment(new Date),d.t_to=moment(new Date),d.alwaysTime=!0);break;case 1:"*"!==a?(b=a.split("-"),d.wd_from=b[0].toLowerCase(),d.wd_to=b[1]?b[1].toLowerCase():"always"):(d.wd_from="always",d.wd_to="always");break;case 2:"*"!==a?(b=a.split("-"),d.md_from=b[0],d.md_to=b[1]?b[1]:"always"):(d.md_from="always",d.md_to="always");break;case 3:"*"!==a?(b=a.split("-"),d.m_from=b[0],d.m_to=b[1]?b[1]:"always"):(d.m_from="always",d.m_to="always")}}),d}function l(a){var b,c,d,e;return b=a.t_from&&a.t_to&&!a.alwaysTime?moment(a.t_from).format("HH:mm")+"-"+moment(a.t_to).format("HH:mm"):"*",a.wd_from&&"always"!==a.wd_from?(c=a.wd_from.toUpperCase(),a.wd_to&&"always"!==a.wd_to&&(c+="-"+a.wd_to.toUpperCase())):c="*",a.md_from&&"always"!==a.md_from?(d=a.md_from,a.md_to&&"always"!==a.md_to&&(d+="-"+a.md_to)):d="*",a.m_from&&"always"!==a.m_from?(e=a.m_from,a.m_to&&"always"!==a.m_to&&(e+="-"+a.m_to)):e="*",b+"|"+c+"|"+d+"|"+e}a.form={},a.$interval=j.interval,a.splittedInterval=k(i),a.save=function(){var d=l(a.splittedInterval);console.log(d);var i={id:g.id};return h?(i.intervals=[],i.intervals=i.intervals.concat(g.intervals),i.intervals.push(d)):(i.not_intervals=[],i.not_intervals=i.not_intervals.concat(g.not_intervals),i.not_intervals.push(d)),console.log(i), -e.update(i).$promise.then(function(a){a.status>0?(a.response.RMI.codecs=a.response.RMI.codecs.split(","),f.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a.response.RMI)):a.response.RMI.errors.forEach(function(a){a?f.show(a.field+": "+a.error,"danger"):f.show("Please, check your connection!","danger")})})["catch"](function(a){f.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.motiondialer.processes.view",{url:"/view/:id",templateUrl:"app/motiondialer/process/view/view.html",controller:"MotionDialerProcessViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.motiondialer.processes.view.overview",{url:"/overview",templateUrl:"app/motiondialer/process/view/view.overview.html"}).state("main.motiondialer.processes.view.settings",{url:"/settings",templateUrl:"app/motiondialer/process/view/view.settings.html"}).state("main.motiondialer.processes.view.intervals",{url:"/intervals",templateUrl:"app/motiondialer/process/view/view.intervals.html"}).state("main.motiondialer.processes.view.spooler",{url:"/spooler",templateUrl:"app/motiondialer/process/view/view.spooler.html"})}]),angular.module("xCallyShuttleApp").controller("MotionDialerViewRunProcessCtrl",["$scope","$stateParams","$uibModalInstance","$translate","statusProcess","MotionDialerProcess","xAlert",function(a,b,c,d,e,f,g){a.status="RUN"===e?"STOP":"RUN",a.yes=function(){f.update({id:parseInt(b.id),status:a.status}).$promise.then(function(a){a.status>0?(g.show(d.instant("MESSAGE_WELL_DONE"),"success"),c.close(a.response.RMI)):g.show(a.message||"Please, check your connection!","danger")})["catch"](function(a){g.error(a)})},a.no=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").controller("MotionDialerViewSpoolerEditCtrl",["$scope","$translate","$uibModalInstance","$stateParams","MotionDialerSpooler","xAlert","entitySpooler","Agent",function(a,b,c,d,e,f,g,h){a.moment=moment,a.initModal=function(){return h.get().$promise.then(function(b){a.agents=[],b&&b.rows.forEach(function(b){a.agents.push("SIP/"+b.name)})})["catch"](function(a){f.error(a)})},a.entitySpooler=g,a.save=function(){var d;switch(a.entitySpooler.retrieve){case"CLOSED":d=e.close({id:parseInt(a.entitySpooler.id)});break;case"OPEN":d=e.open({id:parseInt(a.entitySpooler.id)});break;case"BLACK_LIST":d=e.blacklist({id:parseInt(a.entitySpooler.id)});break;case"PLANNED":d=e.planning({id:parseInt(a.entitySpooler.id),date:moment(a.entitySpooler.planningtime).format("YYYY-MM-DD HH:mm")});break;case"PLANNED_PEER":d=e.planningpeer({id:parseInt(a.entitySpooler.id),date:moment(a.entitySpooler.planningtime).format("YYYY-MM-DD HH:mm"),peer:a.entitySpooler.planningpeer})}d?d.$promise.then(function(a){console.log(a),a.status>0?(f.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close()):a.response.RMI.errors.forEach(function(a){a?f.show(a.field+": "+a.error,"danger"):f.show("Please, check your connection!","danger")})})["catch"](function(a){f.error(a)}):f.show("RETRIEVE NOT FOUND","danger")},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").controller("MotionDialerViewSpoolerHistoryCtrl",["$scope","$translate","$uibModalInstance","$stateParams","MotionDialerSpooler","xAlert","historySpooler",function(a,b,c,d,e,f,g){a.historySpooler=g,a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").factory("ReportMotionDialer",["$resource",function(a){return a("/api/report/motiondialer/:id/:controller",{name:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("ResetCtrl",["$scope","Auth","$location","$window","$rootScope","Setting","xAlert","$stateParams","$state",function(a,b,c,d,e,f,g,h,i){a.userReset={},a.getInfo=function(){return f.get({controller:"info"}).$promise.then(function(b){a.info=b})["catch"](function(a){console.error(a)})},e.bodyLayout="login",a.$on("$viewContentLoaded",function(){Metronic.init(),Layout.init()}),a.reset=function(){b.reset({token:h.token,password:a.userReset.password}).then(function(){i.go("login",{reset:!0})})["catch"](function(a){g.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("reset",{url:"/reset/:token",templateUrl:"app/reset/reset.html",controller:"ResetCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/login.css"]}])}]}})}]),angular.module("xCallyShuttleApp").controller("SalesforceListCtrl",["$scope","SalesforceAccount","gridOptions","xAlert","$translate",function(a,b,c,d,e){a.initView=function(){var d={exporterCsvFilename:"salesforce_account.csv",columnDefs:[{name:"name",displayName:"APPLICATION_NAME"},{name:"username"},{name:"remoteUri",displayName:"APPLICATION_URI"},{name:"action",buttons:[{"class":"blue-hoki",href:"/salesforce/view/{{row.entity.id}}/account",name:"profile"},{"class":"green-jungle",name:"check",onClick:"grid.appScope.checkAccount(row.entity.id)"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=c.gridOptions(b,d,a)},a.checkAccount=function(a){return b.check({id:a}).$promise.then(function(){d.show(e.instant("MESSAGE_ACCOUNT_VERIFIED"),"success")})["catch"](function(){d.show(e.instant("MESSAGE_ACCOUNT_INVALID"),"danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.salesforce.list",{url:"/list",templateUrl:"app/salesforce/list/list.html",controller:"SalesforceListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"smart-table",insertBefore:"#ng_load_plugins_before",files:["assets/css/smart_table.css"]}])}]}})}]),angular.module("xCallyShuttleApp").factory("SalesforceAccount",["$resource",function(a){return a("/api/salesforce/accounts/:id/:controller",{id:"@id"},{update:{method:"PUT"},fields:{params:{controller:"fields"},isArray:!0},check:{params:{controller:"check"}}})}]).factory("SalesforceConfiguration",["$resource",function(a){return a("/api/salesforce/accounts/:accountId/configurations/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]).factory("SalesforceField",["$resource",function(a){return a("/api/salesforce/accounts/:accountId/configurations/:configurationId/fields/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.salesforce",{url:"/salesforce",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin"],redirectTo:"main.dashboard.voice"}}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.salesforce.view.configurations",{url:"/configurations",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("SalesforceViewConfigurationListCtrl",["$scope","$stateParams","$translate","gridOptions","SalesforceConfiguration","$uibModal",function(a,b,c,d,e,f){a.initView=function(){var c={exporterCsvFilename:"salesforce_configurations.csv",columnDefs:[{name:"name"},{name:"description"},{name:"action",width:125,buttons:[{"class":"blue-hoki",href:"/salesforce/view/{{row.entity.AccountId}}/configurations/view/{{row.entity.id}}",name:"profile"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=d.gridOptions(e,c,a,{accountId:b.id})},a.createItem=function(){var b=f.open({animation:!0,templateUrl:"app/salesforce/view/configuration/list/create.modal.html",controller:"SalesforceCreateConfigurationCtrl"});b.result.then(function(){a.gridOptions.getPage()})}}]),angular.module("xCallyShuttleApp").controller("SalesforceCreateConfigurationCtrl",["$scope","$translate","$uibModalInstance","SalesforceConfiguration","xAlert","$stateParams","channel",function(a,b,c,d,e,f,g){a.form={},a.item={},a.channels=g,a.item.channel="voice",a.item.type="Queue",a.save=function(){return d.save({accountId:f.id},a.item).$promise.then(function(a){e.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)})["catch"](function(a){e.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.salesforce.view.configurations.list",{url:"/list",templateUrl:"app/salesforce/view/configuration/list/list.html",controller:"SalesforceViewConfigurationListCtrl"})}]),angular.module("xCallyShuttleApp").controller("SalesforceViewConfigurationViewCtrl",["$scope","$filter","$stateParams","$translate","socket","variable","xAlert","SalesforceAccount","SalesforceConfiguration","SalesforceField","Variable",function(a,b,c,d,e,f,g,h,i,j,k){a.$on("$destroy",function(){e.unsyncUpdates("salesforce_field")}),a.config={autoHideScrollbar:!1,theme:"dark",advanced:{updateOnContentResize:!0},setHeight:300,scrollInertia:0},a.fieldType=[{type:"string",title:"String"},{type:"variable",title:"Variable"},{type:"customVariable",title:"Custom Variable"}],a.descFieldType=[{type:"string",title:"String"},{type:"keyValue",title:"Key Value"}],a.groupVariableByGroup=function(a){switch(a.group){case"voice_queue":return"Voice: Queue";default:return"Other"}},a.initView=function(){a.configurationName="",a.subjectConfig=[],a.descriptionConfig=[],a.fieldConfig=[],a.variables=f},a.getConfiguration=function(){return i.get({accountId:c.id,id:c.configurationId}).$promise.then(function(b){a.configurationName=b.name,a.subjectConfig=b.Subject,a.descriptionConfig=b.Description,a.fieldConfig=b.Field,e.socket.on("salesforce_field:remove",function(b){_.remove(a.subjectConfig,{id:b.id}),_.remove(a.descriptionConfig,{id:b.id}),_.remove(a.fieldConfig,{id:b.id})})})["catch"](function(a){g.error(a)})},a.getCustomVariables=function(){return k.get().$promise.then(function(b){a.customVariables=b.rows})["catch"](function(a){g.error(a)})},a.getFields=function(){return h.fields({id:c.id}).$promise.then(function(c){a.accountFields=_.sortByOrder(b("salesforce")(c),"name","asc"),console.log(a.accountFields)})["catch"](function(a){g.error(a)})},a.addItem=function(b){var d={};switch(b){case"subject":case"description":d={type:"string",content:""};break;case"field":d={content:""}}return i.save({accountId:c.id,id:c.configurationId,controller:b},d).$promise.then(function(c){switch(b){case"subject":a.subjectConfig.push(c);break;case"description":a.descriptionConfig.push(c);break;case"field":a.fieldConfig.push(c)}})["catch"](function(a){g.error(a)})},a.changeType=function(b){"variable"===b.type?(b.content="",b.variableName=""):"string"===b.type?(b.VariableId=null,b.variableName=""):"customVariable"===b.type&&(b.VariableId=null,b.content=""),a.updateField(b)},a.updateField=function(a){return j.update({accountId:c.id,configurationId:c.configurationId,id:a.id},a).$promise.then(function(){})["catch"](function(a){g.error(a)})},a.removeItem=function(a){return j["delete"]({accountId:c.id,configurationId:c.configurationId,id:a.id}).$promise.then(function(){g.show(d.instant("MESSAGE_WELL_DONE")+"!","success")})["catch"](function(a){g.error(a)})},a.changeDescType=function(b){"keyValue"===b.type?(b.content="","string"===b.keyType?(b.VariableId=null,b.variableName=""):"variable"===b.keyType?(b.keyContent="",b.VariableId=null):"customVariable"===b.keyType&&(b.keyContent="",b.variableName="")):"string"===b.type&&(b.VariableId=null,b.variableName="",b.key="",b.keyContent=""),a.updateField(b)},a.getSystemFieldOptions=function(b){if(b){var c=_.find(a.accountFields,"name",b);if(c)switch(c.type){case"picklist":return c.picklistValues;default:return}}}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.salesforce.view.configurations.view",{url:"/view/:configurationId",templateUrl:"app/salesforce/view/configuration/view/view.html",controller:"SalesforceViewConfigurationViewCtrl"})}]),angular.module("xCallyShuttleApp").controller("SalesforceViewCtrl",["$scope","$http","$stateParams","$translate","$location","WizardHandler","socket","xAlert","Modal","$filter","SalesforceAccount",function(a,b,c,d,e,f,g,h,i,j,k){a.initView=function(){return k.get({id:c.id}).$promise.then(function(b){a.account=b})["catch"](function(a){h.error(a)})},a.updateItem=function(){return k.update({id:c.id},a.account).$promise.then(function(){h.show(d.instant("MESSAGE_WELL_DONE")+".","success")})["catch"](function(a){h.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.salesforce.view",{url:"/view/:id",templateUrl:"app/salesforce/view/view.html",controller:"SalesforceViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.salesforce.view.account",{url:"/account",templateUrl:"app/salesforce/view/view.account.html"})}]),angular.module("xCallyShuttleApp").controller("SalesforceWizardCtrl",["$scope","$http","$location","$translate","xAlert","WizardHandler",function(a,b,c,d,e,f){a.translate=d,a.initWizard=function(){a.$translate=d,a.forms={},a.item={},a.item.serverUrl=c.protocol()+"://"+location.host},a.next=function(){f.wizard().next()},a.exitValidation=function(a){return a},a.createItem=function(){console.log(a.item),b.post("api/salesforce/accounts",a.item).success(function(){e.show(d.instant("MESSAGE_WELL_DONE")+".","success"),c.path("/salesforce/list")}).error(function(a){e.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.salesforce.wizard",{url:"/wizard",templateUrl:"app/salesforce/wizard/wizard.html",controller:"SalesforceWizardCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.customization",{url:"/customization",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("CustomizationGeneralViewCtrl",["$scope","gridOptions","$uibModal","FileUploader","$cookieStore","xAlert","$translate","Setting","$rootScope",function(a,b,c,d,e,f,g,h,i){a.radioSwitch={isActive:!!i.license.custom,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"};var j=a.uploader=new d({url:"api/settings/logo/main",queueLimit:1,withCredentials:!0,headers:{Authorization:"Bearer "+e.get("token")}});j.filters.push({name:"imageFilter",fn:function(a){var b="|"+a.type.slice(a.type.lastIndexOf("/")+1)+"|";return-1!=="|jpg|png|jpeg|".indexOf(b)}}),j.onSuccessItem=function(a,b){i.settings.logo=b.logo,f.show(g.instant("MESSAGE_WELL_DONE"),"success")},j.onErrorItem=function(){f.show(g.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")},j.onCompleteAll=function(){j.clearQueue()};var k=a.uploader2=new d({url:"api/settings/logo/login",queueLimit:1,withCredentials:!0,headers:{Authorization:"Bearer "+e.get("token")}});k.filters.push({name:"imageFilter",fn:function(a){var b="|"+a.type.slice(a.type.lastIndexOf("/")+1)+"|";return-1!=="|jpg|png|jpeg|".indexOf(b)}}),k.onSuccessItem=function(a,b){f.show(g.instant("MESSAGE_WELL_DONE"),"success")},k.onErrorItem=function(){f.show(g.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")},k.onCompleteAll=function(){k.clearQueue()},a.initView=function(){return h.get({id:1}).$promise.then(function(b){a.settings={defaultLogo:b.defaultLogo,defaultLoginLogo:b.defaultLoginLogo,footerWhiteLabel:b.footerWhiteLabel,defaultFooterWhiteLabel:b.defaultFooterWhiteLabel}})["catch"](function(a){f.error(a)})},a.update=function(){return h.update({id:1},a.settings).$promise.then(function(b){_.merge(i.settings,a.settings),f.show(g.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){f.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.customization.view.general",{url:"/general",templateUrl:"app/setting/customization/view/general/general.html",controller:"CustomizationGeneralViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/scripts/jquery.sparkline.min.js","assets/plugins/bootstrap-fileinput/bootstrap-fileinput.js","assets/scripts/profile.js"]})}]}})}]),angular.module("xCallyShuttleApp").controller("CustomizationViewCtrl",["$scope",function(a){}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.customization.view",{url:"/view",templateUrl:"app/setting/customization/view/view.html",controller:"CustomizationViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.general",{url:"/general",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("GeneralMainViewCtrl",["$scope","xAlert","$translate","Setting",function(a,b,c,d){a.initView=function(){return d.get({id:1}).$promise.then(function(b){a.settings={agi_port:b.agi_port,min_internal:b.min_internal,min_mailbox:b.min_mailbox,securePassword:b.securePassword}})["catch"](function(a){b.error(a)})},a.update=function(){return d.update({id:1},a.settings).$promise.then(function(a){b.show(c.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){b.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.general.view.main",{url:"/main",templateUrl:"app/setting/general/view/main/main.html",controller:"GeneralMainViewCtrl"})}]),angular.module("xCallyShuttleApp").controller("GeneralViewCtrl",["$scope",function(a){}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.general.view",{url:"/view",templateUrl:"app/setting/general/view/view.html",controller:"GeneralViewCtrl"})}]),angular.module("xCallyShuttleApp").factory("License",["$resource",function(a){return a("/api/licenses/:id/:controller",{id:"@id"},{request:{method:"POST",params:{id:"request"}}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.license",{url:"/license",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("LicenseUpdateCtrl",["$scope","$translate","$uibModalInstance","xAlert","Setting",function(a,b,c,d,e){a.form={},a.item={},a.getLicense=function(){return e.get({id:1}).$promise.then(function(b){a.item.license=b.license})["catch"](function(a){d.error(a)})},a.update=function(){return e.update({id:1},a.item).$promise.then(function(a){d.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)})["catch"](function(a){d.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").controller("LicenseViewCtrl",["$scope","$rootScope","$translate","License","xAlert","$window","$uibModal",function(a,b,c,d,e,f,g){a.radioSwitch={isActive:!0,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.initView=function(){return d.get(function(b){a.item=b.license})},a.submitRequest=function(){return d.request(a.item,function(){e.show(c.instant("MESSAGE_WELL_DONE"),"success")},function(a){switch(a.status){case 304:e.show(a.statusText,"info");break;default:e.error(a)}})},a.updateLicense=function(){var a=g.open({animation:!0,templateUrl:"app/setting/license/view/update.modal.html",controller:"LicenseUpdateCtrl"});a.result.then(function(){f.location.reload()})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.license.view",{url:"/view",templateUrl:"app/setting/license/view/view.html",controller:"LicenseViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/pricing-tables.css"]}])}]}})}]),angular.module("xCallyShuttleApp").factory("Externip",["$resource",function(a){return a("/api/network/externips/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("Localnet",["$resource",function(a){return a("/api/network/localnets/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.network",{url:"/network",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("ExternipCtrl",["$scope","$uibModal","gridOptions","Externip",function(a,b,c,d){a.initView=function(){var b={exporterCsvFilename:"network_externip.csv",columnDefs:[{name:"value"},{name:"action",buttons:[{"class":"blue-hoki",onClick:"grid.appScope.createItem(row.entity)",name:"profile"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=c.gridOptions(d,b,a)},a.createItem=function(c){var d=b.open({animation:!0,templateUrl:"app/setting/network/view/externip/externip.create.modal.html",controller:"ExternipCreateCtrl",resolve:{item:c}});d.result.then(function(){a.gridOptions.getPage()})}}]),angular.module("xCallyShuttleApp").controller("ExternipCreateCtrl",["$scope","$translate","$uibModalInstance","$stateParams","Externip","xAlert","item",function(a,b,c,d,e,f,g){a.initModal=function(){a.form={},a.item=g||{},a.title=g?b.instant("APPLICATION_EDIT_EXTERNIP"):b.instant("APPLICATION_NEW_EXTERNIP")},a.save=function(){return g?e.update({id:a.item.id},a.item).$promise.then(function(a){f.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)})["catch"](function(a){f.error(a)}):e.save({},a.item).$promise.then(function(a){f.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)})["catch"](function(a){f.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.network.view.externip",{url:"/externip",templateUrl:"app/setting/network/view/externip/externip.html",controller:"ExternipCtrl"})}]),angular.module("xCallyShuttleApp").controller("LocalnetCtrl",["$scope","gridOptions","Localnet","$uibModal",function(a,b,c,d){a.initView=function(){var d={exporterCsvFilename:"network_localnet.csv",columnDefs:[{name:"value"},{name:"action",buttons:[{"class":"blue-hoki",onClick:"grid.appScope.createItem(row.entity)",name:"profile"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=b.gridOptions(c,d,a)},a.createItem=function(b){var c=d.open({animation:!0,templateUrl:"app/setting/network/view/localnet/localnet.create.modal.html",controller:"LocalnetCreateCtrl",resolve:{item:b}});c.result.then(function(){a.gridOptions.getPage()})}}]),angular.module("xCallyShuttleApp").controller("LocalnetCreateCtrl",["$scope","$translate","$uibModalInstance","$stateParams","Localnet","xAlert","item",function(a,b,c,d,e,f,g){a.initModal=function(){if(a.form={},a.item=g||{},a.title=g?b.instant("APPLICATION_EDIT_LOCALNET"):b.instant("APPLICATION_NEW_LOCALNET"),g&&g.value){var c=a.item.value.split("/");c.length>1&&(a.item.address=c[0],a.item.mask=c[1])}},a.save=function(){var d=a.item.address+"/"+a.item.mask;return g?e.update({id:a.item.id},{value:d}).$promise.then(function(a){f.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)})["catch"](function(a){f.error(a)}):e.save({},{value:d}).$promise.then(function(a){f.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)})["catch"](function(a){f.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.network.view.localnet",{url:"/localnet",templateUrl:"app/setting/network/view/localnet/localnet.html",controller:"LocalnetCtrl"})}]),angular.module("xCallyShuttleApp").controller("NetworkViewCtrl",function(){}),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.network.view",{url:"/view",templateUrl:"app/setting/network/view/view.html",controller:"NetworkViewCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting",{url:"/setting",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:18}}})}]),angular.module("xCallyShuttleApp").factory("Setting",["$resource",function(a){return a("/api/settings/:id/:controller/:param",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("Smtp",["$resource",function(a){return a("/api/mail/servers/out/:id/:controller/:controller2",{id:"@id"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.smtp",{url:"/smtp",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("SmtpViewCtrl",["$scope","$stateParams","$translate","socket","MailServerOut","Setting","MailAccount","xAlert",function(a,b,c,d,e,f,g,h){a.initView=function(){return a.smtpDisabled=!1,a.isActive=!0,a.size="small",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.CONST_TIMEOUT=3e4,a.item={account:{service:!0,MailServerOut:{ssl:!1}}},a.$on("$destroy",function(){d.socket.removeAllListeners("mail_server_out:state")}),d.socket.on("mail_server_out:state",function(b){a.item&&Number(b.id)===a.item.account.MailServerOut.id&&(a.item.account.MailServerOut.state=b.state,a.item.account.MailServerOut.source=JSON.parse(b.source))}),f.get({id:"smtp"}).$promise.then(function(b){a.item.account=b})["catch"](function(b){switch(b.status){case 404:a.item.account.name=null,a.item.account.address=null,a.item.account.MailServerOut={ssl:!1},h.show("Service SMTP server not configured.","info");break;default:h.error(b)}})},a.updateItem=function(){return a.item.account.id?(delete a.item.account.MailServerOut.state,delete a.item.account.MailServerOut.source,f.update({id:"smtp",controller:a.item.account.id},a.item.account).$promise.then(function(){h.show(c.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){h.error(a)})):f.save({id:"smtp"},{description:"Custom Account",name:a.item.account.name,address:a.item.account.address,service:a.item.account.service,custom:!0,MailServerOut:a.item.account.MailServerOut}).$promise.then(function(b){a.item.account=b,h.show(c.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){h.error(a)})},a.test=function(){return e.get({id:a.item.account.MailServerOut.id,controller:"test"}).$promise["catch"](function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.smtp.view",{url:"/view",templateUrl:"app/setting/smtp/view/view.html",controller:"SmtpViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.system",{url:"/system",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("SystemViewConsoleCtrl",["$scope","Setting","xAlert","usSpinnerService","$timeout","$translate","socket",function(a,b,c,d,e,f,g){function h(b){var c=_.findIndex(a.commandHistory.commands,function(a){return a===b});-1!==c&&a.commandHistory.commands.splice(c,1),a.commandHistory.commands.unshift(b)}a.output="<b>"+f.instant("APPLICATION_CONSOLE_WELCOME")+"</b><br/>",a.item={command:""},a.commandHistory={commands:[],index:-1},a.busy=!1,a.cmdFocus=function(){e(function(){angular.element("#command").trigger("focus")})},a.sendCmd=function(){return a.commandHistory.index=-1,a.tmp=a.item.command,a.item.command="",a.output+="<b>motion*CLI> "+a.tmp+"</b><br>",a.tmp?(h(a.tmp.trim()),a.busy=!0,d.spin("console-spinner"),b.save({controller:"asterisk"},{command:a.tmp}).$promise):void 0},g.socket.on("console:result",function(b){a.output+=b.content.replace(/(?:\r\n|\r|\n)/g,"<br />").replace("Response: Follows<br />Privilege: Command<br />","").replace(/ActionID: .[0-9]*<br \/>/,"").replace(/ActionID: .[0-9]*/,"")+"<br>",d.stop("console-spinner"),a.busy=!1,a.cmdFocus()}),g.socket.on("console:error",function(b){d.stop("console-spinner"),a.output+="command error:"+b.data.message+"<br>",a.busy=!1,a.cmdFocus()}),a.keyUp=function(b){switch(b.keyCode){case 40:a.commandHistory.commands[a.commandHistory.index-1]?a.item.command=a.commandHistory.commands[--a.commandHistory.index]:(a.item.command="",a.commandHistory.index=-1);break;case 38:a.commandHistory.commands[a.commandHistory.index+1]&&(a.item.command=a.commandHistory.commands[++a.commandHistory.index]);break;case 37:break;case 39:break;default:a.commandHistory.index=-1}},e(function(){angular.element("#command").trigger("focus"),d.stop("console-spinner")})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.system.view.console",{url:"/console",templateUrl:"app/setting/system/view/console/console.html",controller:"SystemViewConsoleCtrl"})}]),angular.module("xCallyShuttleApp").controller("SystemViewGeneralCtrl",["$scope","$stateParams","$translate","socket","Setting","xAlert","usSpinnerService",function(a,b,c,d,e,f,g){function h(b){a.system.memory={labels:_.keys(b.memory.details),values:_.values(_.map(b.memory.details,function(a){return Math.round(a/1024)})),Total:Math.round(b.memory.Total/1024)},g.stop("memory-spinner"),a.system.disks=[],_.forEach(b.disks,function(b){a.system.disks.push({mount:b.mount,size:Number((b.size/1048576).toFixed(2)),values:_.values(_.map(b.details,function(a){return Number((a/1048576).toFixed(2))})),labels:_.keys(b.details)})}),a.system.mount=a.system.disks[0],g.stop("disk-spinner"),a.system.cpu={motion:Math.round(b.cpu.motion),cores:[]},_.forEach(b.cpu.cores,function(b){delete b.nice,delete b.irq,a.system.cpu.cores.push({labels:_.keys(b),values:_.values(b),colours:["#803690","#DCDCDC","#00ADF9"]})}),g.stop("cpu-spinner")}a.system={mount:void 0},a.initView=function(){return g.spin("memory-spinner"),g.spin("disk-spinner"),g.spin("cpu-spinner"),e.get({controller:"system"}).$promise.then(function(a){h(a)})["catch"](function(a){f.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.system.view.general",{url:"/general",templateUrl:"app/setting/system/view/general/general.html",controller:"SystemViewGeneralCtrl"})}]),angular.module("xCallyShuttleApp").controller("SystemViewLogsCtrl",["$scope","$stateParams","$translate","socket","Setting","xAlert","usSpinnerService",function(a,b,c,d,e,f,g){a.initView=function(){return a.logs={errors:"",output:""},g.spin("logs-spinner"),e.get({controller:"logs"}).$promise.then(function(b){a.logs=b,g.stop("logs-spinner")})["catch"](function(a){f.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.system.view.logs",{url:"/logs",templateUrl:"app/setting/system/view/logs/logs.html",controller:"SystemViewLogsCtrl"})}]),angular.module("xCallyShuttleApp").controller("SystemViewCtrl",["$scope",function(a){}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.system.view",{url:"/view",templateUrl:"app/setting/system/view/view.html",controller:"SystemViewCtrl"})}]),angular.module("xCallyShuttleApp").controller("UpdateListCtrl",["$scope","gridOptions","$uibModal","$location","Update","xAlert","$log","$translate","$state",function(a,b,c,d,e,f,g,h,i){a.initCounter=function(){a.$on("timer-stopped",function(a,b){f.show(h.instant("MESSAGE_UPDATE_COMPLETED")+'<a href="https://wiki.xcallymotion.com/display/XMD/xCally+Motion+service+manager#xCallyMotionservicemanager-pm2start|stop|restartmotion" target="_blank" style="color: blue;"> Read more</a>',"success"),i.go("main.setting.updates.list")})},a.initView=function(){return e.get({controller:"current" -}).$promise.then(function(b){a.currentVersion=b.currentVersion,a.latestVersion=b.latestVersion})["catch"](function(a){console.log(a)})},a.pull=function(){var a=c.open({animation:!0,templateUrl:"app/setting/update/list/list.pull.html",controller:"UpdateListPullCtrl"});a.result.then(function(){return d.path("/setting/updates/landing"),e.pull().$promise.then(function(a){var b=!1;a&&(a.summary&&_.forOwn(a.summary,function(a){a&&(b=!0)}),(a.insertions&&!_.isEmpty(a.insertions)||a.deletions&&!_.isEmpty(a.deletions))&&(b=!0)),b?f.show(h.instant("MESSAGE_PULL_COMPLETED"),"success"):(f.show(h.instant("MESSAGE_NO_UPDATES"),"success"),d.path("/setting/updates/list"))})["catch"](function(a){console.log(a),f.error(a),d.path("/setting/updates/list")})},function(){g.info("Modal dismissed at: "+new Date)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.updates.list",{url:"/list",templateUrl:"app/setting/update/list/list.html",controller:"UpdateListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"css",insertBefore:"#ng_load_plugins_before",files:["assets/css/pricing-table.css"]}])}]}}).state("main.setting.updates.landing",{url:"/landing",templateUrl:"app/setting/update/list/landing.html",controller:"UpdateListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"css",insertBefore:"#ng_load_plugins_before",files:["assets/css/error.css"]}])}]}})}]),angular.module("xCallyShuttleApp").controller("UpdateListPullCtrl",["$scope","$uibModalInstance",function(a,b){a.modal={dismissable:!0,title:"Confirm Update",html:"Are you sure you want to update?",buttons:[{classes:"btn btn-success",text:"Update",click:function(){b.close()}},{classes:"btn default",text:"Cancel",click:function(){b.dismiss("cancel")}}]}}]),angular.module("xCallyShuttleApp").factory("Update",["$resource",function(a){return a("/api/updates/:id/:controller",{id:"@id"},{pull:{method:"GET",params:{id:"pull"}}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.updates",{url:"/updates",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["hasUpdate"],redirectTo:"main.dashboard.voice"}}})}]),angular.module("xCallyShuttleApp").controller("SquareOdbcListCtrl",["$scope","$uibModal","$translate","SquareOdbc","gridOptions","xAlert",function(a,b,c,d,e,f){a.initView=function(){var b={exporterCsvFilename:"odbc.csv",columnDefs:[{name:"name"},{name:"dsn",displayName:"APPLICATION_ODBC"},{name:"description"},{name:"action",width:250,buttons:[{"class":"blue-hoki",href:"/square/odbc/view/{{row.entity.id}}/settings",name:"settings"},{"class":"green-jungle",name:"check",onClick:"grid.appScope.checkConnection(row.entity.id)"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=e.gridOptions(d,b,a)},a.createItem=function(){var c=b.open({animation:!0,templateUrl:"app/square/odbc/list/list.create.modal.html",controller:"SquareOdbcListCreateCtrl"});c.result.then(function(){a.gridOptions.getPage()})},a.checkConnection=function(a){return d.get({id:a,controller:"check"}).$promise.then(function(){f.show(c.instant("MESSAGE_CONNECTION_VERIFIED"),"success")})["catch"](function(){f.show(c.instant("MESSAGE_CONNECTION_INVALID"),"danger")})}}]),angular.module("xCallyShuttleApp").controller("SquareOdbcListCreateCtrl",["$scope","$translate","$uibModalInstance","SquareOdbc","xAlert",function(a,b,c,d,e){a.form={},a.item={},a.item.dsn||(a.item.dsn="DRIVER=MySQL;SERVER=127.0.0.1;UID=xcall;PWD=password;DATABASE=motion"),a.save=function(){return d.save(a.item).$promise.then(function(a){e.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)})["catch"](function(a){e.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.square.odbc.list",{url:"/list",templateUrl:"app/square/odbc/list/list.html",controller:"SquareOdbcListCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.square.odbc",{url:"/odbc",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").factory("SquareOdbc",["$resource",function(a){return a("/api/square/odbc/:id/:controller",{name:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("SquareOdbcViewCtrl",["$scope","$translate","$stateParams","SquareOdbc","xAlert",function(a,b,c,d,e){a.odbc={},a.getOdbc=function(){return d.get({id:c.id}).$promise.then(function(b){a.odbc=b})["catch"](function(a){e.error(a)})},a.updateOdbc=function(){var f=angular.copy(a.odbc);return d.update({id:c.id},f).$promise.then(function(){e.show(b.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){e.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.square.odbc.view",{url:"/view/:id",templateUrl:"app/square/odbc/view/view.html",controller:"SquareOdbcViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.square.odbc.view.settings",{url:"/settings",templateUrl:"app/square/odbc/view/view.settings.html"})}]),angular.module("xCallyShuttleApp").controller("SquareProjectListCtrl",["$scope","$uibModal","SquareProject","gridOptions",function(a,b,c,d){a.initView=function(){var b={exporterCsvFilename:"projects.csv",columnDefs:[{name:"name"},{name:"description"},{name:"action",width:160,buttons:[{"class":"blue-hoki",href:"/square/projects/view/{{row.entity.id}}",name:"settings"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=d.gridOptions(c,b,a)},a.createItem=function(){var c=b.open({animation:!0,templateUrl:"app/square/project/list/list.create.modal.html",controller:"SquareProjectListCreateCtrl"});c.result.then(function(b){console.log(b),a.gridOptions.getPage()})}}]),angular.module("xCallyShuttleApp").controller("SquareProjectListCreateCtrl",["$scope","$translate","$uibModalInstance","SquareProject","xAlert",function(a,b,c,d,e){a.form={},a.item={},a.save=function(){return d.save(a.item).$promise.then(function(a){e.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)})["catch"](function(a){e.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.square.projects.list",{url:"/list",templateUrl:"app/square/project/list/list.html",controller:"SquareProjectListCtrl",authenticate:!0})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.square.projects",{url:"/projects",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").factory("SquareProject",["$resource",function(a){return a("/api/square/projects/:id/:controller",{name:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("SquareProjectViewCtrl",["$scope","$stateParams","Auth","xAlert","SquareProject","socket","$translate","$log","$uibModal",function(a,b,c,d,e,f,g,h,i){a.squareProject={},a.$on("$destroy",function(){f.unsyncUpdates("square_project")}),a.getProject=function(){return e.get({id:b.id}).$promise.then(function(b){a.squareProject=b,angular.element(document).ready(function(){window.onerror=function(a,b,c){try{if(null!==a&&-1!==a.indexOf("Script error."));else{var e=new Image;e.src="assets/plugins/mxgraph/images/1x1.png?msg="+encodeURIComponent(a)+"&url="+encodeURIComponent(b)+"&lnum="+encodeURIComponent(c)}}catch(f){d.error(f)}},b.token=c.getToken();var a=new EditorUi(new Editor);a.openString(b.preproduction,b.name,b),a.editor.graphChangeListener=function(a,b){var c=b.properties.rtChange||!1;c||(this.modified=!0)}}),f.socket.on("square_project:save",function(c){c.id===b.id&&(a.squareProject=_.merge(a.squareProject,c))})})["catch"](function(a){d.error(a)})},a.editNotes=function(){var c=i.open({animation:!0,templateUrl:"app/square/project/view/projectNotes.modal.html",controller:["$scope","$uibModalInstance","notes",function(a,b,c){a.notes=c,a.close=function(){b.close(a.notes)},a.cancel=function(){b.dismiss("cancel")}}],resolve:{notes:{value:a.squareProject.notes}}});c.result.then(function(a){return e.update({id:b.id},{notes:a.value}).$promise.then(function(){d.show(g.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){d.error(a)})},function(){h.info("Modal dismissed at: "+new Date)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.square.projects.view",{url:"/view/:id",templateUrl:"app/square/project/view/view.html",controller:"SquareProjectViewCtrl",authenticate:!0,resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",serie:!0,cache:!1,files:["assets/plugins/mxgraph/css/common.css","assets/plugins/mxgraph/css/explorer.css","assets/plugins/mxgraph/styles/grapheditor.css","assets/plugins/mxgraph/styles/custom.css","assets/plugins/square/js/custom.js","assets/plugins/mxgraph/js/mxClient.js","assets/plugins/square/js/Editor.js","assets/plugins/square/js/Graph.js","assets/plugins/square/js/EditorUi.js","assets/plugins/square/js/Actions.js","assets/plugins/square/js/Menus.js","assets/plugins/square/js/Sidebar.js","assets/plugins/square/js/Toolbar.js","assets/plugins/square/js/Dialogs.js"]}])}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.square.realtime",{url:"/realtime",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:14}}})}]),angular.module("xCallyShuttleApp").factory("ReportSquare",["$resource",function(a){return a("/api/report/square/:id/:controller",{name:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("ReportSquareDetail",["$resource",function(a){return a("/api/report/square/details/:id/:controller",{name:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("SquareRealtimeViewGeneralCtrl",["$scope","$log","$uibModal","$translate","socket","xAlert","ReportSquare","usSpinnerService","$q","uiGridConstants",function(a,b,c,d,e,f,g,h,i,j){function k(b){return h.spin("spinner-grid"),g.get(m).$promise.then(function(b){a.gridOptions.totalItems=b.count,a.gridOptions.data=b.rows})["catch"](function(a){f.error(a)})["finally"](function(){b&&l(),h.stop("spinner-grid")})}function l(){e.socket.on("report_square:save",function(b){if(b.leaveAt){var c=_.remove(a.gridOptions.data,{id:b.id});c&&k()}else{var d=_.find(a.gridOptions.data,{id:b.id});if(!d&&a.gridOptions.data.length<m.limit){var e=_.clone(m);if(_.forEach(["offset","limit","controller","order"],function(a){delete e[a]}),_.isEmpty(e))a.gridOptions.data.push(b);else{var f=!0;_.forOwn(e,function(a,c){_.includes(b[c],a)||(f=!1)}),f&&a.gridOptions.data.push(b)}}}})}var m={controller:"realtime",offset:0,limit:25};a.moment=moment,a.init=function(){a.gridOptions={enableGridMenu:!0,headerCellFilter:"translate",enableHorizontalScrollbar:0,enableVerticalScrollbar:0,enableFiltering:!0,showGridFooter:!0,paginationPageSizes:[10,25,50,75],paginationPageSize:25,useExternalPagination:!0,useExternalSorting:!0,useExternalFiltering:!0,showTreeExpandNoChildren:!0,columnDefs:[{name:"uniqueid"},{name:"callerid"},{name:"extension"},{name:"project_name",displayName:"APPLICATION_PROJECT",headerCellFilter:"translate"},{name:"joinAt",displayName:"APPLICATION_ELAPSED_TIME",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div><css-timer start-time="row.entity.joinAt"></css-timer></div>',enableSorting:!1,enableColumnMenu:!1,enableFiltering:!1}],data:[],gridMenuTitleFilter:function(a){var b=i.defer();return b.resolve(d.instant(a)),b.promise},onRegisterApi:function(b){a.gridApi=b,a.gridApi.grid.registerDataChangeCallback(function(){n(a.gridApi.core.getVisibleRows(a.gridApi.grid).length)}),a.gridApi.core.on.sortChanged(a,function(a,b){0===b.length?m.order=null:m.order=b[0].name+" "+b[0].sort.direction.toUpperCase(),k()}),a.gridApi.pagination.on.paginationChanged(a,function(a,b){m.offset=(a-1)*b,m.limit=b,k()}),a.gridApi.core.on.filterChanged(a,function(){var a=this.grid;a.columns.forEach(function(a){a.filters[0].term?m[a.name]=a.filters[0].term:delete m[a.name]}),k()})}},k(!0)};var n=function(a){var b=a?30*a+130:270;angular.element(document.getElementsByClassName("ui-grid")[0]).css("height",b+"px"),angular.element(document.getElementsByClassName("ui-grid-viewport")).css("height",30*a+"px")};a.$on("$destroy",function(){e.unsyncUpdates("report_square")})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.square.realtime.view.general",{url:"/general",templateUrl:"app/square/realtime/view/general/general.html",controller:"SquareRealtimeViewGeneralCtrl"})}]),angular.module("xCallyShuttleApp").controller("SquareRealtimeViewCtrl",["$scope",function(a){}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.square.realtime.view",{url:"/view",templateUrl:"app/square/realtime/view/view.html",controller:"SquareRealtimeViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]}])}]}})}]),angular.module("xCallyShuttleApp").controller("SquareRecordingListCtrl",["$scope","SquareRecording","gridOptions","uiGridConstants",function(a,b,c,d){a.SquareRecording=b;a.initView=function(){var e={exporterCsvFilename:"recordings.csv",rowHeight:30,columnDefs:[{name:"uniqueid"},{name:"callerid",displayName:"APPLICATION_CALLERIDNUM"},{name:"filename"},{name:"extension"},{name:"projectName",displayName:"APPLICATION_PROJECT"},{name:"createdAt",displayName:"APPLICATION_DATE",cellFilter:"date:'yyyy-MM-dd HH:mm'",filterHeaderTemplate:'<div class="ui-grid-filter-container row"><div ng-repeat="colFilter in col.filters" class="col-md-6 col-md-offset-0 col-sm-5 col-sm-offset-0 col-xs-5 col-xs-offset-0"><div custom-grid-date-filter-header></div></div></div>',filters:[{name:"From",condition:d.filter.GREATER_THAN_OR_EQUAL,hasTime:!0},{name:"To",condition:d.filter.LESS_THAN_OR_EQUAL,hasTime:!0}],sort:{direction:d.DESC,priority:0}},{name:"audio",displayName:"",width:100,enableSorting:!1,enableFiltering:!1,cellClass:"ui-grid-vcenter",cellTemplate:"<div><audio-file-download data-ng-if=\"row.entity.savePath.split('.').pop() == 'wav'\" params=\"{id:row.entity.id,controller:'stream'}\" resource=\"grid.appScope.SquareRecording\"></audio-file-download><span data-ng-if=\"row.entity.value.split('.').pop() == 'gsm'\" title=\"{{'MESSAGE_GSM_PREVIEW_NOT_SUPPORTED' | translate}}\">{{'MESSAGE_GSM_PREVIEW_NOT_SUPPORTED' | translate}}</span></div>"},{name:"action",width:80,buttons:[{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.filename || row.entity.uniqueid, row.entity.id)"},{directive:"<motion-file-download params=\"{id:row.entity.id,controller:'stream'}\" resource=\"grid.appScope.SquareRecording\" mimetype=\"'audio/'+row.entity.value.split('.').pop()\" btnclass=\"btn btn-xs blue-hoki\" filename=\"(row.entity.filename || row.entity.uniqueid)+'.'+row.entity.savePath.split('.').pop()\"></motion-file-download>"}]}]};a.gridOptions=c.gridOptions(b,e,a)}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.square.recordings.list",{url:"/list",templateUrl:"app/square/recording/list/list.html",controller:"SquareRecordingListCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.square.recordings",{url:"/recordings",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").factory("SquareRecording",["$resource",function(a){return a("/api/square/recordings/:id/:controller",{id:"@id"},{update:{method:"PUT"},patch:{method:"PATCH"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.square",{url:"/square",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:14}}})}]),angular.module("xCallyShuttleApp").factory("Agent",["$resource",function(a){return a("/api/agents/:id/:controller/:controller1/:controller2/:controller3",{id:"@id"},{changePassword:{method:"PUT",params:{controller:"password"}},update:{method:"PUT"},patch:{method:"PATCH"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff.agents",{url:"/agents",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user","agent"],redirectTo:"landing",id:4}}})}]),angular.module("xCallyShuttleApp").controller("AgentListCtrl",["$scope","$timeout","Agent","Auth","gridOptions",function(a,b,c,d,e){a.initView=function(){a.Auth=d;var b={exporterCsvFilename:"agents.csv",columnDefs:[{name:"fullname"},{name:"name",displayName:"APPLICATION_USERNAME"},{name:"internal"},{name:"email"},{name:"description"},{name:"action",width:100,buttons:[{"class":"blue-hoki",href:"/staff/agents/view/{{row.entity.id}}/account",name:"profile"},{"class":"green-meadow",href:"/staff/agents/view/{{row.entity.id}}/queues/voice",name:"queues"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.fullname, row.entity.id)"}]}]};a.gridOptions=e.gridOptions(c,b,a)}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff.agents.list",{url:"/list",templateUrl:"app/staff/agent/list/list.html",controller:"AgentListCtrl",data:{permissions:{only:["admin","user","agent"],redirectTo:"landing",id:4}}})}]),angular.module("xCallyShuttleApp").controller("AgentViewCtrl",["$scope","$http","xAlert","$translate","$stateParams","$cookieStore","Agent","FileUploader","Auth","MailQueue","User","VoiceQueue","ChatQueue","FaxQueue","SmsQueue","OpenChannelQueue","Setting",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){a.Auth=i,a.radioSwitch={isActive:!0,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.recordSwitch={onText:"On",offText:"Off",isActive:!0,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.initVoiceQueues=function(){var a={},b={};return l.get().$promise.then(function(b){return a.queues=_.map(b.rows,function(a){return{name:a.name}}),g.get({id:e.id,controller:"voice",controller2:"queues"}).$promise}).then(function(a){b.queues=_.map(a.rows,function(a){return{name:a.name}})}).then(function(){ComponentsDropdowns.bindAgent(a,b,"voice",e.id,g)})["catch"](function(a){console.error(a)})},a.initChatQueues=function(){var a={},b={};return m.get().$promise.then(function(b){return a.queues=_.map(b.rows,function(a){return{id:a.id,name:a.name}}),g.get({id:e.id,controller:"chat",controller2:"queues"}).$promise}).then(function(a){b.queues=_.map(a.rows,function(a){return{id:a.id,name:a.name}})}).then(function(){ComponentsDropdowns.bindAgent(a,b,"chat",e.id,g)})["catch"](function(a){console.error(a)})},a.initMailQueues=function(){var a={},b={};return j.get().$promise.then(function(b){return a.queues=_.map(b.rows,function(a){return{id:a.id,name:a.name}}),g.get({id:e.id,controller:"mail",controller2:"queues"}).$promise}).then(function(a){b.queues=_.map(a.rows,function(a){return{id:a.id,name:a.name}})}).then(function(){ComponentsDropdowns.bindAgent(a,b,"mail",e.id,g)})["catch"](function(a){console.error(a)})},a.initSmsQueues=function(){var a={},b={};return o.get().$promise.then(function(b){return a.queues=_.map(b.rows,function(a){return{id:a.id,name:a.name}}),g.get({id:e.id,controller:"sms",controller2:"queues"}).$promise}).then(function(a){b.queues=_.map(a.rows,function(a){return{id:a.id,name:a.name}})}).then(function(){ComponentsDropdowns.bindAgent(a,b,"sms",e.id,g)})["catch"](function(a){console.error(a)})},a.initFaxQueues=function(){var a={},b={};return n.get().$promise.then(function(b){return a.queues=_.map(b.rows,function(a){return{id:a.id,name:a.name}}),g.get({id:e.id,controller:"fax",controller2:"queues"}).$promise}).then(function(a){b.queues=_.map(a.rows,function(a){return{id:a.id,name:a.name}})}).then(function(){ComponentsDropdowns.bindAgent(a,b,"fax",e.id,g)})["catch"](function(a){console.error(a)})},a.initOpenchannelQueues=function(){var a={},b={};return p.get().$promise.then(function(b){return a.queues=_.map(b.rows,function(a){return{id:a.id,name:a.name}}),g.get({id:e.id,controller:"openchannel",controller2:"queues"}).$promise}).then(function(a){b.queues=_.map(a.rows,function(a){return{id:a.id,name:a.name}})}).then(function(){ComponentsDropdowns.bindAgent(a,b,"openchannel",e.id,g)})["catch"](function(a){console.error(a)})},a.updatePassword=function(){var b={newPassword:a.agent.newPwd};return i.isAdmin()?b.id=e.id:b.oldPassword=a.agent.currentPwd,k.changePassword(b).$promise.then(function(){c.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){c.error(a)})};var r=a.uploader=new h({url:"api/users/"+e.id+"/avatar",queueLimit:1,withCredentials:!0,headers:{Authorization:"Bearer "+f.get("token")}});r.filters.push({name:"imageFilter",fn:function(a){var b="|"+a.type.slice(a.type.lastIndexOf("/")+1)+"|";return-1!=="|jpg|png|jpeg|".indexOf(b)}}),r.onSuccessItem=function(b,e){a.agent.userpic=e.userpic,a.agent.id===i.getCurrentUser().id&&(i.getCurrentUser().userpic=e.userpic),c.show(d.instant("MESSAGE_WELL_DONE"),"success")},r.onErrorItem=function(){c.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")},r.onCompleteAll=function(){r.clearQueue()},a.initView=function(){return g.get({id:e.id}).$promise.then(function(b){return a.agent=b,a.agent.transport=a.agent.transport?a.agent.transport.split(","):[],a.agent.allow=a.agent.allow?a.agent.allow.split(";"):[],a.agent.nat=a.agent.nat?a.agent.nat.split(","):[],q.get({id:1}).$promise}).then(function(b){a.setting=b})["catch"](function(a){c.error(a)})},a.patchItem=function(){return g.update({id:e.id},{chatCapacity:a.agent.chatCapacity,mailCapacity:a.agent.mailCapacity,faxCapacity:a.agent.faxCapacity,smsCapacity:a.agent.smsCapacity,openchannelCapacity:a.agent.openchannelCapacity}).$promise.then(function(){c.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){c.error(a)})},a.updateItem=function(){var b=angular.copy(a.agent);return delete b.password,delete b.md5secret,b.transport=b.transport.join(","),b.allow=b.allow.join(";"),b.nat=b.nat.join(","),g.update({id:e.id},b).$promise.then(function(){c.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){c.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff.agents.view",{url:"/view/:id",templateUrl:"app/staff/agent/view/view.html",controller:"AgentViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]},data:{permissions:{only:["admin","user","agent"],redirectTo:"landing",id:4}}}).state("main.staff.agents.view.account",{url:"/account",templateUrl:"app/staff/agent/view/view.account.html",data:{permissions:{only:["admin","user","agent"],redirectTo:"landing",id:4}},resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/scripts/jquery.sparkline.min.js","assets/plugins/bootstrap-fileinput/bootstrap-fileinput.js","assets/scripts/profile.js"]})}]}}).state("main.staff.agents.view.voice",{url:"/voice",templateUrl:"app/staff/agent/view/view.voice.html",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:4}}}).state("main.staff.agents.view.chat",{url:"/chat",templateUrl:"app/staff/agent/view/view.chat.html",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:4}}}).state("main.staff.agents.view.mail",{url:"/mail",templateUrl:"app/staff/agent/view/view.mail.html",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:4}}}).state("main.staff.agents.view.fax",{url:"/fax",templateUrl:"app/staff/agent/view/view.fax.html",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:4}}}).state("main.staff.agents.view.sms",{url:"/sms",templateUrl:"app/staff/agent/view/view.sms.html",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:4}}}).state("main.staff.agents.view.openchannel",{url:"/openchannel",templateUrl:"app/staff/agent/view/view.openchannel.html",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:4}}}).state("main.staff.agents.view.motionbar",{url:"/motionbar",templateUrl:"app/staff/agent/view/view.motionbar.html",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:4}}}).state("main.staff.agents.view.queues",{url:"/queues",templateUrl:"app/staff/agent/view/view.queues.html",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:4}},cache:!1,serie:!0,resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/jquery-multi-select/css/multi-select.css","assets/plugins/jquery-multi-select/js/jquery.multi-select.js","assets/plugins/jquery-quicksearch/jquery.quicksearch.js","assets/scripts/components-dropdowns.js"]})}]}}).state("main.staff.agents.view.queues.voice",{url:"/voice",templateUrl:"app/staff/agent/view/view.queues.voice.html",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:7}}}).state("main.staff.agents.view.queues.chat",{url:"/chat",templateUrl:"app/staff/agent/view/view.queues.chat.html",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:8}}}).state("main.staff.agents.view.queues.mail",{url:"/mail",templateUrl:"app/staff/agent/view/view.queues.mail.html",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:9}}}).state("main.staff.agents.view.queues.fax",{url:"/fax",templateUrl:"app/staff/agent/view/view.queues.fax.html",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:10}}}).state("main.staff.agents.view.queues.sms",{url:"/sms",templateUrl:"app/staff/agent/view/view.queues.sms.html",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:11}}}).state("main.staff.agents.view.queues.openchannel",{url:"/openchannel",templateUrl:"app/staff/agent/view/view.queues.openchannel.html",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:20}}})}]),angular.module("xCallyShuttleApp").controller("AgentWizardCtrl",["$scope","$rootScope","$location","$translate","$http","Agent","VoiceQueue","ChatQueue","MailQueue","SmsQueue","FaxQueue","OpenChannelQueue","Setting","xAlert","WizardHandler",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){a.maxAmount=1e3,a._data={voice:{queues:[]},chat:{queues:[]},mail:{queues:[]},sms:{queues:[]},fax:{queues:[]},openchannel:{queues:[]}},a._agent=angular.copy(a._data),a.forms={info:void 0,voice:void 0},a.item={role:"agent",allow:["alaw","ulaw","gsm"],transport:["udp"],context:"from-sip"},a.next=function(){o.wizard().next()},a.getAmount=function(){return m.get({controller:"internal",internal:a.item.minInternal}).$promise.then(function(b){a.item.minInternal=Number(b.value),a.maxAmount=b.range||1e3})["catch"](function(a){n.error(a)})},a.exitValidation=function(a){return a},a.getFirstFreeInternal=function(){return m.get({controller:"internal"}).$promise.then(function(b){return a.internal=b,a.item.internal=b.value,a.item.minInternal=b.value,a.maxAmount=b.range||1e3,m.get({id:1}).$promise}).then(function(b){a.setting=b})["catch"](function(a){n.error(a)})},a.createItem=function(){var b=angular.copy(a.item);return delete b.minInternal,b.transport&&(b.transport=b.transport.join(",")),a.item.allow&&(b.allow=b.allow.join(";")),b.channels=a._agent,f.save(b).$promise.then(function(a){c.path("/staff/agents/view/"+a.id+"/queues/voice")})["catch"](function(a){console.log(a),n.error(a)})},a.createItems=function(){var b=angular.copy(a.item);return delete b.internal,b.transport&&(b.transport=b.transport.join(",")),b.allow&&(b.allow=b.allow.join(";")),f.save({id:"bulk"},b).$promise.then(function(){c.path("/staff/agents/list")})["catch"](function(a){console.log(a),n.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff.agents.wizard",{url:"/wizard",templateUrl:"app/staff/agent/wizard/wizard.html",controller:"AgentWizardCtrl",data:{permissions:{only:["admin"],redirectTo:"main.dashboard.voice"}},resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/jquery-multi-select/css/multi-select.css","assets/plugins/jquery-multi-select/js/jquery.multi-select.js","assets/plugins/jquery-quicksearch/jquery.quicksearch.js","assets/scripts/components-dropdowns.js"]})}]}}).state("main.staff.agents.bulk",{url:"/bulk",templateUrl:"app/staff/agent/wizard/wizard-bulk.html",controller:"AgentWizardCtrl",data:{permissions:{only:["admin"],redirectTo:"main.dashboard.voice"}}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff",{url:"/staff",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("TeamCreateCtrl",["$scope","$uibModalInstance","Team","xAlert",function(a,b,c,d){a.form={},a.item={},a.ok=function(){return c.save(a.item).$promise.then(function(){b.close(a.item)})["catch"](function(a){d.error(a)})},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("TeamListCtrl",["$scope","Team","gridOptions","$uibModal",function(a,b,c,d){a.initView=function(){var d={exporterCsvFilename:"teams.csv",columnDefs:[{name:"name"},{name:"description"},{name:"action",width:100,buttons:[{"class":"{{row.entity.defaultEntry ? 'blue-hoki disabled' : 'blue-hoki'}}",href:"/staff/teams/view/{{row.entity.id}}/settings",name:"profile"},{"class":"{{row.entity.defaultEntry ? 'green-turquoise disabled' : 'green-turquoise'}}",name:"agents",href:"/staff/teams/view/{{row.entity.id}}/agents"},{"class":"{{row.entity.defaultEntry ? 'red-sunglo disabled' : 'red-sunglo'}}",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=c.gridOptions(b,d,a)},a.createItem=function(){d.open({animation:!0,templateUrl:"app/staff/team/list/create.modal.html",controller:"TeamCreateCtrl"}).result.then(function(){a.gridOptions.getPage()})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff.teams.list",{url:"/list",templateUrl:"app/staff/team/list/list.html",controller:"TeamListCtrl"})}]),angular.module("xCallyShuttleApp").factory("Team",["$resource",function(a){return a("/api/teams/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff.teams",{url:"/teams",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin"],redirectTo:"landing"}}})}]),angular.module("xCallyShuttleApp").controller("TeamViewCtrl",["$scope","$http","$stateParams","$translate","Team","Agent","xAlert",function(a,b,c,d,e,f,g){var h=function(){return{select:function(b){return console.log("agents",b),e.save({id:a.team.id,controller:"agents"},{agents:b})},deselect:function(b){return e["delete"]({id:a.team.id,controller:"agents",agents:b})}}};a.initView=function(){return e.get({id:c.id}).$promise.then(function(b){a.team=b})["catch"](function(a){g.error(a)})},a.initAgents=function(){return f.get().$promise.then(function(b){return a.agents=b.rows,e.get({id:c.id,controller:"agents"}).$promise}).then(function(b){ComponentsDropdowns.bindTeam(_.map(b.rows,"id"),_.map(a.agents,function(a){return{id:a.id,name:a.name,fullname:a.fullname,internal:a.internal}}),h)})["catch"](function(a){g.error(a)})},a.updateItem=function(){var b=angular.copy(a.team);return e.update({id:c.id},b).$promise.then(function(){g.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){ -g.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff.teams.view",{url:"/view/:id",templateUrl:"app/staff/team/view/view.html",controller:"TeamViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.staff.teams.view.agents",{url:"/agents",templateUrl:"app/staff/team/view/view.agents.html",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/jquery-multi-select/css/multi-select.css","assets/plugins/jquery-multi-select/js/jquery.multi-select.js","assets/plugins/jquery-quicksearch/jquery.quicksearch.js","assets/scripts/components-dropdowns.js"]}])}]}}).state("main.staff.teams.view.settings",{url:"/settings",templateUrl:"app/staff/team/view/view.settings.html"})}]),angular.module("xCallyShuttleApp").controller("TelephoneListCtrl",["$scope","Telephone","gridOptions",function(a,b,c){a.initView=function(){var d={exporterCsvFilename:"telephones.csv",columnDefs:[{name:"fullname"},{name:"name"},{name:"internal"},{name:"description"},{name:"action",width:75,buttons:[{"class":"blue-hoki",href:"/staff/telephones/view/{{row.entity.id}}/account",name:"profile"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.fullname, row.entity.id)"}]}]};a.gridOptions=c.gridOptions(b,d,a)}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff.telephones.list",{url:"/list",templateUrl:"app/staff/telephone/list/list.html",controller:"TelephoneListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"smart-table",insertBefore:"#ng_load_plugins_before",files:["assets/css/smart_table.css"]}])}]}})}]),angular.module("xCallyShuttleApp").factory("Telephone",["$resource",function(a){return a("/api/telephones/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff.telephones",{url:"/telephones",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin"],redirectTo:"landing"}}})}]),angular.module("xCallyShuttleApp").controller("TelephoneViewCtrl",["$scope","$http","$stateParams","$translate","$cookieStore","Auth","xAlert","Telephone","Setting",function(a,b,c,d,e,f,g,h,i){a.initView=function(){return a.Auth=f,a.forms={},h.get({id:c.id}).$promise.then(function(b){return delete b.password,a.item=b,a.item.transport=a.item.transport?a.item.transport.split(","):[],a.item.allow=a.item.allow?a.item.allow.split(";"):[],i.get({id:1}).$promise}).then(function(b){a.setting=b})["catch"](function(a){g.error(a)})},a.updateItem=function(){var b=angular.copy(a.item);return b.transport=b.transport.join(","),b.allow=b.allow.join(";"),h.update(b).$promise.then(function(){g.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){g.error(a)})},a.updatePassword=function(){return h.update({password:a.item.password}).$promise.then(function(){g.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){g.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff.telephones.view",{url:"/view/:id",templateUrl:"app/staff/telephone/view/view.html",controller:"TelephoneViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.staff.telephones.view.account",{url:"/account",templateUrl:"app/staff/telephone/view/view.account.html",resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css","assets/scripts/jquery.sparkline.min.js","assets/plugins/bootstrap-fileinput/bootstrap-fileinput.js","assets/scripts/profile.js"]})}]}}).state("main.staff.telephones.view.voice",{url:"/voice",templateUrl:"app/staff/telephone/view/view.voice.html",data:{permissions:{only:["admin"],redirectTo:"main.dashboard.voice"}}})}]),angular.module("xCallyShuttleApp").controller("TelephoneWizardCtrl",["$scope","$http","$location","WizardHandler","xAlert","$translate","Telephone","Setting",function(a,b,c,d,e,f,g,h){a.forms={},a.item={allow:["alaw","ulaw","gsm"],transport:["udp"],context:"from-sip"},a.next=function(){d.wizard().next()},a.exitValidation=function(a){return a},a.getFirstFreeInternal=function(){return h.get({controller:"internal"}).$promise.then(function(b){return a.item.internal=b.value,h.get({id:1}).$promise}).then(function(b){a.setting=b})["catch"](function(a){e.error(a)})},a.createItem=function(){var b=angular.copy(a.item);return b.transport&&(b.transport=b.transport.join(",")),a.item.allow&&(b.allow=b.allow.join(";")),g.save(b).$promise.then(function(){c.path("/staff/telephones/list")})["catch"](function(a){e.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff.telephones.wizard",{url:"/wizard",templateUrl:"app/staff/telephone/wizard/wizard.html",controller:"TelephoneWizardCtrl"})}]),angular.module("xCallyShuttleApp").controller("UserListCtrl",["$scope","$timeout","User","Auth","gridOptions",function(a,b,c,d,e){function f(a){if(a){var b=_.words(a),c=_.map(b,function(a){return a?a[0]:""});return c.join("").toUpperCase()}return!1}a.getUserAvatar=function(a,c,d){b(function(){angular.element("#userImg"+a).avatar({useGravatar:!1,initials:d?[]:f(c),fallbackImage:"api/users/avatar/"+d,size:80})})},a.isAdmin=function(a){return"admin"===a},a.initView=function(){var b={exporterCsvFilename:"users.csv",columnDefs:[{name:"fullname"},{name:"name",displayName:"APPLICATION_USERNAME"},{name:"internal"},{name:"email"},{name:"description"},{name:"action",width:100,buttons:[{"class":"blue-hoki",href:"/staff/users/view/{{row.entity.id}}/account",name:"profile"},{"class":"green-meadow",href:"/staff/users/view/{{row.entity.id}}/permit/voice",name:"permits",hide:"grid.appScope.isAdmin(row.entity.role)"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.fullname, row.entity.id)"}]}]};a.gridOptions=e.gridOptions(c,b,a)}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff.users.list",{url:"/list",templateUrl:"app/staff/user/list/list.html",controller:"UserListCtrl"})}]),angular.module("xCallyShuttleApp").factory("Module",["$resource",function(a){return a("/api/modules/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("User",["$resource",function(a){return a("/api/users/:id/:controller/:controller2/:controller3",{id:"@id"},{changePassword:{method:"PUT",params:{controller:"password"}},update:{method:"PUT"},me:{method:"GET",params:{id:"me"}}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff.users",{url:"/users",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin"],redirectTo:"landing"}}})}]),angular.module("xCallyShuttleApp").controller("UserViewCtrl",["$scope","$stateParams","$cookieStore","$translate","FileUploader","User","Auth","xAlert","MailQueue","VoiceQueue","ChatQueue","FaxQueue","SmsQueue","OpenChannelQueue","Team","Module","Setting",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){function r(a,b){var c,d,e=b.length;for(c=0;e>c;c++){if(b[c].id===a)return b[c];if(b[c].SubModules&&b[c].SubModules.length&&(d=r(a,b[c].SubModules)))return d}}function s(b){var c=r(b.ModuleId,a.modules);if(b.status===!0)c.status=!0;else{var d=_.filter(c.SubModules,{status:!0});d.length||(c.status=!1)}c.ModuleId&&s(c)}function t(a,b){a.forEach(function(a){a.status=b,a.SubModules&&a.SubModules.length&&t(a.SubModules,b)})}function u(a,b){b.forEach(function(b){_.find(a,{id:b.id})?b.status=!0:b.status=!1,b.SubModules&&b.SubModules.length&&u(a,b.SubModules)})}function v(a,b){return a=_.union(a,_.map(_.filter(b,{status:!0}),"id")),b.forEach(function(b){b.SubModules&&b.SubModules.length&&(a=_.union(a,v(a,b.SubModules)))}),a}a.Auth=g,a._=_,a.moduleSwitch={onText:"On",offText:"Off",isActive:!0,size:"mini",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.initVoiceQueues=function(){var a={},c={};return j.get().$promise.then(function(c){return a.queues=_.map(c.rows,function(a){return{name:a.name}}),f.query({id:b.id,controller:"allowed",controller2:"voice",controller3:"queues"}).$promise}).then(function(a){c.queues=_.map(a,function(a){return{name:a.name}})}).then(function(){ComponentsDropdowns.bindPermit(a,c,"voice",b.id,f)})["catch"](function(a){console.error(a)})},a.initChatQueues=function(){var a={},c={};return k.get().$promise.then(function(c){return a.queues=_.map(c.rows,function(a){return{id:a.id,name:a.name}}),f.query({id:b.id,controller:"allowed",controller2:"chat",controller3:"queues"}).$promise}).then(function(a){c.queues=_.map(a,function(a){return{id:a.id,name:a.name}})}).then(function(){ComponentsDropdowns.bindPermit(a,c,"chat",b.id,f)})["catch"](function(a){console.error(a)})},a.initMailQueues=function(){var a={},c={};return i.get().$promise.then(function(c){return a.queues=_.map(c.rows,function(a){return{id:a.id,name:a.name}}),f.query({id:b.id,controller:"allowed",controller2:"mail",controller3:"queues"}).$promise}).then(function(a){c.queues=_.map(a,function(a){return{id:a.id,name:a.name}})}).then(function(){ComponentsDropdowns.bindPermit(a,c,"mail",b.id,f)})["catch"](function(a){console.error(a)})},a.initSmsQueues=function(){var a={},c={};return m.get().$promise.then(function(c){return a.queues=_.map(c.rows,function(a){return{id:a.id,name:a.name}}),f.query({id:b.id,controller:"allowed",controller2:"sms",controller3:"queues"}).$promise}).then(function(a){c.queues=_.map(a,function(a){return{id:a.id,name:a.name}})}).then(function(){ComponentsDropdowns.bindPermit(a,c,"sms",b.id,f)})["catch"](function(a){console.error(a)})},a.initFaxQueues=function(){var a={},c={};return l.get().$promise.then(function(c){return a.queues=_.map(c.rows,function(a){return{id:a.id,name:a.name}}),f.query({id:b.id,controller:"allowed",controller2:"fax",controller3:"queues"}).$promise}).then(function(a){c.queues=_.map(a,function(a){return{id:a.id,name:a.name}})}).then(function(){ComponentsDropdowns.bindPermit(a,c,"fax",b.id,f)})["catch"](function(a){console.error(a)})},a.initOpenchannelQueues=function(){var a={},c={};return n.get().$promise.then(function(c){return a.queues=_.map(c.rows,function(a){return{id:a.id,name:a.name}}),f.query({id:b.id,controller:"allowed",controller2:"openchannel",controller3:"queues"}).$promise}).then(function(a){c.queues=_.map(a,function(a){return{id:a.id,name:a.name}})}).then(function(){ComponentsDropdowns.bindPermit(a,c,"openchannel",b.id,f)})["catch"](function(a){console.error(a)})},a.initView=function(){return f.get({id:b.id}).$promise.then(function(b){return a.user=b,a.user.transport=a.user.transport?a.user.transport.split(","):[],a.user.allow=a.user.allow?a.user.allow.split(";"):[],q.get({id:1}).$promise}).then(function(b){a.setting=b})["catch"](function(a){h.error(a)})},a.updateItem=function(){var c=angular.copy(a.user);return delete c.password,delete c.md5secret,c.transport=c.transport.join(","),c.allow=c.allow.join(";"),f.update({id:b.id},c).$promise.then(function(){h.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){h.error(a)})},a.updatePassword=function(){var c={newPassword:a.user.newPwd};return g.isAdmin()?c.id=b.id:c.oldPassword=a.user.currentPwd,f.changePassword(c).$promise.then(function(){h.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){h.error(a)})};var w=a.uploader=new e({url:"api/users/"+b.id+"/avatar",queueLimit:1,withCredentials:!0,headers:{Authorization:"Bearer "+c.get("token")}});w.filters.push({name:"imageFilter",fn:function(a){var b="|"+a.type.slice(a.type.lastIndexOf("/")+1)+"|";return-1!=="|jpg|png|jpeg|".indexOf(b)}}),a.getModules=function(){return a.associatedModules=[],p.get().$promise.then(function(c){return a.modules=_.filter(c.rows,function(a){return!a.ModuleId}),f.query({id:b.id,controller:"allowed",controller2:"modules"}).$promise}).then(function(b){u(b,a.modules)})["catch"](function(a){h.error(a)})},a.updatePermissions=function(c){c.ModuleId&&s(c),c.SubModules&&c.SubModules.length&&t(c.SubModules,c.status);var e=v([],a.modules);return f.save({id:b.id,controller:"allowed",controller2:"modules"},{modules:e}).$promise.then(function(){h.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){h.error(a)})},w.onSuccessItem=function(b,c){a.user.userpic=c.userpic,a.user.id===g.getCurrentUser().id&&(g.getCurrentUser().userpic=c.userpic),h.show(d.instant("MESSAGE_WELL_DONE"),"success")},w.onErrorItem=function(){h.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")},w.onCompleteAll=function(){w.clearQueue()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff.users.view",{url:"/view/:id",templateUrl:"app/staff/user/view/view.html",controller:"UserViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.staff.users.view.account",{url:"/account",templateUrl:"app/staff/user/view/view.account.html",resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css","assets/scripts/jquery.sparkline.min.js","assets/plugins/bootstrap-fileinput/bootstrap-fileinput.js","assets/scripts/profile.js"]})}]}}).state("main.staff.users.view.voice",{url:"/voice",templateUrl:"app/staff/user/view/view.voice.html",data:{permissions:{only:["admin"],redirectTo:"main.dashboard.voice"}}}).state("main.staff.users.view.permit",{url:"/permit",templateUrl:"app/staff/user/view/view.permit.html",data:{permissions:{only:["admin"],redirectTo:"main.dashboard.voice"}},cache:!1,serie:!0,resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/jquery-multi-select/css/multi-select.css","assets/plugins/jquery-multi-select/js/jquery.multi-select.js","assets/plugins/jquery-quicksearch/jquery.quicksearch.js","assets/scripts/components-dropdowns.js"]})}]}}).state("main.staff.users.view.permit.voice",{url:"/voice",templateUrl:"app/staff/user/view/view.permit.voice.html",data:{permissions:{only:["admin"],redirectTo:"main.dashboard.voice"}}}).state("main.staff.users.view.permit.chat",{url:"/chat",templateUrl:"app/staff/user/view/view.permit.chat.html",data:{permissions:{only:["admin"],redirectTo:"main.dashboard.chat"}}}).state("main.staff.users.view.permit.mail",{url:"/mail",templateUrl:"app/staff/user/view/view.permit.mail.html",data:{permissions:{only:["admin"],redirectTo:"main.dashboard.mail"}}}).state("main.staff.users.view.permit.fax",{url:"/fax",templateUrl:"app/staff/user/view/view.permit.fax.html",data:{permissions:{only:["admin"],redirectTo:"main.dashboard.fax"}}}).state("main.staff.users.view.permit.sms",{url:"/sms",templateUrl:"app/staff/user/view/view.permit.sms.html",data:{permissions:{only:["admin"],redirectTo:"main.dashboard.sms"}}}).state("main.staff.users.view.permit.openchannel",{url:"/openchannel",templateUrl:"app/staff/user/view/view.permit.openchannel.html",data:{permissions:{only:["admin"],redirectTo:"main.dashboard.openchannel"}}}).state("main.staff.users.view.permit.modules",{url:"/modules",templateUrl:"app/staff/user/view/view.permit.modules.html",data:{permissions:{only:["admin"],redirectTo:"main.dashboard.voice"}}})}]),angular.module("xCallyShuttleApp").controller("UserWizardCtrl",["$scope","$location","WizardHandler","xAlert","$translate","User","Setting","Auth",function(a,b,c,d,e,f,g,h){a.initWizard=function(){return a.Auht=h,a.forms={info:void 0,voice:void 0},a.item={role:"user",host:"dynamic",context:"from-sip"},g.get({controller:"internal"}).$promise.then(function(b){return a.item.internal=b.value,g.get({id:1}).$promise}).then(function(b){a.setting=b})["catch"](function(a){d.error(a)})},a.next=function(){c.wizard().next()},a.exitValidation=function(a){return a},a.createItem=function(){return f.save(a.item).$promise.then(function(a){b.path("user"===a.role?"/staff/users/view/"+a.id+"/permit/voice":"/staff/users/view/"+a.id+"/account")})["catch"](function(a){d.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff.users.wizard",{url:"/wizard",templateUrl:"app/staff/user/wizard/wizard.html",controller:"UserWizardCtrl"})}]),angular.module("xCallyShuttleApp").controller("SugarcrmListCtrl",["$scope","SugarcrmAccount","gridOptions","xAlert","$translate","Modal",function(a,b,c,d,e,f){a.initView=function(){var d={exporterCsvFilename:"sugarcrm_account.csv",columnDefs:[{name:"name",displayName:"APPLICATION_NAME"},{name:"username"},{name:"remoteUri",displayName:"APPLICATION_REMOTE_ADDRESS"},{name:"action",width:250,buttons:[{"class":"blue-hoki",href:"/sugarcrm/view/{{row.entity.id}}/account",name:"profile"},{"class":"green-jungle",name:"check",onClick:"grid.appScope.checkAccount(row.entity.id)"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=c.gridOptions(b,d,a)},a.checkAccount=function(a){return b.get({id:a,controller:"check"}).$promise.then(function(){d.show(e.instant("MESSAGE_ACCOUNT_VERIFIED"),"success")})["catch"](function(a){d.show(e.instant("MESSAGE_ACCOUNT_INVALID"),"danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.sugarcrm.list",{url:"/list",templateUrl:"app/sugarcrm/list/list.html",controller:"SugarcrmListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"smart-table",insertBefore:"#ng_load_plugins_before",files:["assets/css/smart_table.css"]}])}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.sugarcrm",{url:"/sugarcrm",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin"],redirectTo:"main.dashboard.voice"}}})}]),angular.module("xCallyShuttleApp").factory("SugarcrmAccount",["$resource",function(a){return a("/api/sugarcrm/accounts/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("SugarcrmConfiguration",["$resource",function(a){return a("/api/sugarcrm/configurations/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("SugarcrmField",["$resource",function(a){return a("/api/sugarcrm/fields/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("SugarcrmViewCtrl",["$scope","$http","$stateParams","$translate","$location","$filter","WizardHandler","socket","xAlert","Modal",function(a,b,c,d,e,f,g,h,i,j){a.$stateParams=c,a.config={autoHideScrollbar:!1,theme:"dark",advanced:{updateOnContentResize:!0},setHeight:500,scrollInertia:0},a.initConfiguration=function(){a.formsConfiguration={},a.configuration={}},a.goNext=function(){g.wizard().next()},a.formValidation=function(a){return a},a.$on("$destroy",function(){h.unsyncUpdates("sugarcrm_configuration"),h.unsyncUpdates("sugarcrm_field")}),a.initView=function(){b.get("/api/sugarcrm/accounts/"+c.id).success(function(b){a.account=b}).error(function(a){i.error(a)})},a.updateItem=function(){b.put("/api/sugarcrm/accounts/"+c.id,a.account).success(function(){i.show(d.instant("MESSAGE_WELL_DONE")+".","success")}).error(function(){i.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG")+".","danger")})},a.getConfigurations=function(){b.get("/api/sugarcrm/configurations",{params:{AccountId:c.id}}).success(function(b){a.configurations=b,h.socket.on("sugarcrm_configuration:remove",function(b){_.remove(a.configurations,{id:b.id})})}).error(function(a){i.error(a)})},a.deleteConfiguration=j.confirm["delete"](function(a){b["delete"]("api/sugarcrm/configurations/"+a).success(function(){i.show(d.instant("MESSAGE_WELL_DONE"),"success")}).error(function(){i.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})}),a.createConfiguration=function(){a.configuration.AccountId=c.id,b.post("api/sugarcrm/configurations",a.configuration).success(function(a){e.path("sugarcrm/view/"+c.id+"/configurations/settings/"+a.id)}).error(function(){i.show("Something went wrong!","danger")})},a.fieldType=["string","variable"],a.descFieldType=["string","key_value"],a.getFields=function(){b.get("/api/sugarcrm/accounts/"+c.id+"/fields").success(function(b){a.accountFields=_.sortByOrder(f("sugarcrm")(_.toArray(b)),"name","asc"),_.forEach(b,function(a){a.options=_.toArray(a.options)})}).error(function(a){i.error(a)})},a.getConfiguration=function(){b.get("/api/sugarcrm/configurations/"+c.configurationId).success(function(b){a.configurationName=b.name,a.subjectConfig=b.Subject,a.descriptionConfig=b.Description,a.fieldConfig=b.Field,h.socket.on("sugarcrm_field:remove",function(b){_.remove(a.subjectConfig,{id:b.id}),_.remove(a.descriptionConfig,{id:b.id}),_.remove(a.fieldConfig,{id:b.id})})}).error(function(a){i.error(a)})},a.getVariables=function(){b.get("/api/variables").success(function(b){a.variables=b.rows}).error(function(a){i.error(a)})},a.removeItem=function(a){b["delete"]("api/sugarcrm/fields/"+a.id).success(function(){i.show(d.instant("MESSAGE_WELL_DONE"),"success")}).error(function(){i.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},a.addItemSubject=function(){var d={type:"string",content:""};b.post("/api/sugarcrm/configurations/"+c.configurationId+"/subject",d).success(function(b){a.subjectConfig.push(b)}).error(function(){i.show("Something went wrong!","danger")})},a.addItemDescription=function(){var d={type:"string",content:""};b.post("/api/sugarcrm/configurations/"+c.configurationId+"/description",d).success(function(b){a.descriptionConfig.push(b)}).error(function(){i.show("Something went wrong!","danger")})},a.addItemField=function(){var d={content:""};b.post("/api/sugarcrm/configurations/"+c.configurationId+"/field",d).success(function(b){a.fieldConfig.push(b)}).error(function(){i.show("Something went wrong!","danger")})},a.updateField=function(a){b.put("/api/sugarcrm/fields/"+a.id,a).success(function(){}).error(function(){i.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG")+".","danger")})},a.changeType=function(b){"variable"===b.type?b.content="":"string"===b.type&&(b.VariableId=null),a.updateField(b)},a.changeDescType=function(b){"key_value"===b.type?(b.content="","string"===b.keyType?b.VariableId=null:"variable"===b.keyType&&(b.keyContent="")):"string"===b.type&&(b.VariableId=null,b.key="",b.keyContent=""),a.updateField(b)},a.changeFieldType=function(b){b.content="",a.updateField(b)},a.getSystemFieldOptions=function(b){if(b){var c=_.find(a.accountFields,"name",b);return c?c.options.length>0?c.options:null:void 0}}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.sugarcrm.view",{url:"/view/:id",templateUrl:"app/sugarcrm/view/view.html",controller:"SugarcrmViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.sugarcrm.view.account",{url:"/account",templateUrl:"app/sugarcrm/view/view.account.html"}).state("main.sugarcrm.view.configurations",{url:"/configurations",templateUrl:"app/sugarcrm/view/view.configurations.html"}).state("main.sugarcrm.view.configurations.settings",{url:"/settings/:configurationId",templateUrl:"app/sugarcrm/view/view.configurationSettings.html",controller:"SugarcrmViewCtrl"}).state("main.sugarcrm.view.configuration",{url:"/configuration",templateUrl:"app/sugarcrm/view/view.configuration.html"})}]),angular.module("xCallyShuttleApp").controller("SugarcrmkWizardCtrl",["$scope","$http","$location","$translate","xAlert","WizardHandler",function(a,b,c,d,e,f){a.translate=d,a.initWizard=function(){a.$translate=d,a.forms={},a.item={}},a.next=function(){f.wizard().next()},a.exitValidation=function(a){return a},a.createItem=function(){b.post("api/sugarcrm/accounts",a.item).success(function(){e.show(d.instant("MESSAGE_WELL_DONE")+".","success"),c.path("/sugarcrm/list")}).error(function(){e.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG")+".","danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.sugarcrm.wizard",{url:"/wizard",templateUrl:"app/sugarcrm/wizard/wizard.html",controller:"SugarcrmkWizardCtrl"})}]),angular.module("xCallyShuttleApp").factory("CannedAnswer",["$resource",function(a){return a("/api/answers/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.answers",{url:"/answers",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:58}}})}]),angular.module("xCallyShuttleApp").controller("AnswerListCtrl",["$scope","$uibModal","CannedAnswer","gridOptions",function(a,b,c,d){a.initView=function(){var b={exporterCsvFilename:"answers.csv",columnDefs:[{name:"key",displayName:"APPLICATION_NAME"},{name:"value"},{name:"description"},{name:"action",width:75,buttons:[{"class":"blue-hoki",href:"/tools/answers/view/{{row.entity.id}}/settings",name:"settings"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.key, row.entity.id)"}]}]};a.gridOptions=d.gridOptions(c,b,a)},a.createItem=function(){b.open({animation:!0,templateUrl:"app/tools/answer/list/list.create.modal.html",controller:"AnswerListCreateCtrl"}).result.then(function(b){a.gridOptions.getPage()})}}]),angular.module("xCallyShuttleApp").controller("AnswerListCreateCtrl",["$scope","$translate","$uibModalInstance","CannedAnswer","xAlert",function(a,b,c,d,e){a.form={},a.item={},a.save=function(){return d.save(a.item).$promise.then(function(a){e.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)})["catch"](function(a){e.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.answers.list",{url:"/list",templateUrl:"app/tools/answer/list/list.html",controller:"AnswerListCtrl"})}]),angular.module("xCallyShuttleApp").controller("AnswerViewCtrl",["$scope","$http","xAlert","$translate","$stateParams","$location","CannedAnswer",function(a,b,c,d,e,f,g){a.getAnswer=function(){return g.get({id:e.id}).$promise.then(function(b){a.answer=b})["catch"](function(a){c.error(a)})},a.updateAnswer=function(){var b=angular.copy(a.answer);return g.update({id:e.id},b).$promise.then(function(){c.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){c.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.answers.view",{url:"/view/:id",templateUrl:"app/tools/answer/view/view.html",controller:"AnswerViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.tools.answers.view.settings",{url:"/settings",templateUrl:"app/tools/answer/view/view.settings.html"})}]),angular.module("xCallyShuttleApp").factory("Automation",["$resource",function(a){return a("/api/automations/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.automations",{url:"/automations",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:51}}})}]),angular.module("xCallyShuttleApp").controller("AutomationListCtrl",["$scope","$http","$translate","xAlert","Automation","gridOptions",function(a,b,c,d,e,f){a.onText="On",a.offText="Off",a.isActive=!0,a.size="mini",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.initView=function(){var b={exporterCsvFilename:"Automations.csv",columnDefs:[{name:"name"},{name:"description"},{name:"channel"},{name:"status",cellTemplate:'<div class="centered-uigrid-td"><input data-ng-change="grid.appScope.updateItem(row.entity)", bs-switch ng-model="row.entity.status" type="checkbox" switch-active="{{ grid.appScope.isActive }}" switch-on-text="{{ grid.appScope.onText }}" switch-off-text="{{ grid.appScope.offText }}" switch-on-color="{{ grid.appScope.onColor }}" switch-off-color="{{ grid.appScope.offColor }}" switch-animate="{{ grid.appScope.animate }}" switch-size="{{ grid.appScope.size }}" switch-label="{{ grid.appScope.label }}" switch-icon="{{ grid.appScope.icon }}" switch-radio-off="{{ grid.appScope.radioOff }}" switch-label-width="{{ grid.appScope.labelWidth }}" switch-handle-width="{{ grid.appScope.handleWidth }}"></div>',width:100,enableFiltering:!1},{name:"action",width:75,buttons:[{"class":"blue-hoki",href:"/tools/automations/view/{{row.entity.id}}/settings",name:"settings"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=f.gridOptions(e,b,a)},a.updateItem=function(a){return e.update({id:a.id},a).$promise.then(function(){d.show(c.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){console.error(a),d.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.automations.list",{url:"/list",templateUrl:"app/tools/automation/list/list.html",controller:"AutomationListCtrl"})}]),angular.module("xCallyShuttleApp").controller("AutomationViewCtrl",["$scope","$stateParams","$http","$translate","xAlert","automations","Automation","$location",function(a,b,c,d,e,f,g,h){a.$automations=f,a.recordSwitch={onText:"On",offText:"Off",isActive:!0,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.forms={general:{}},a.addCondition=function(b){a.automation[b].push({field:"",operator:"",value:""})},a.removeCondition=function(b,c){a.automation[b].splice(c,1)},a.addAction=function(){a.automation.Actions.push({action:"",data1:"",data2:"",data3:"",data4:"",data5:""})},a.resetActionData=function(a){a.data1="",a.data2="",a.data3="",a.data4="",a.data5=""},a.removeAction=function(b){a.automation.Actions.splice(b,1)},a.initView=function(){return g.get({id:b.id}).$promise.then(function(b){a.automation=b})["catch"](function(a){e.error(a),h.path("/tools/automations/list")})},a.updateAutomation=function(){return g.update({id:b.id},a.automation).$promise.then(function(){e.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){console.error(a),e.error(a)})},a.exitValidation=function(b){return console.log(b&&(a.automation.All.length||a.automation.Any.length)&&a.automation.Actions.length),!(!b||!a.automation.All.length&&!a.automation.Any.length||!a.automation.Actions.length)}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.automations.view",{url:"/view/:id",templateUrl:"app/tools/automation/view/view.html",controller:"AutomationViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]})}]}}).state("main.tools.automations.view.settings",{url:"/settings",templateUrl:"app/tools/automation/view/view.settings.html"}).state("main.tools.automations.view.routes",{url:"/routes",templateUrl:"app/tools/automation/view/view.routes.html"}).state("main.tools.automations.view.application",{url:"/application",templateUrl:"app/tools/automation/view/view.application.html" -})}]),angular.module("xCallyShuttleApp").controller("AutomationWizardCtrl",["$scope","$http","$location","xAlert","automations","WizardHandler","Automation",function(a,b,c,d,e,f,g){a.$automations=e,a.statusSwitch={onText:"On",offText:"Off",isActive:!0,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.tempData={voice:{},mail:{},chat:{},fax:{}},a.item={All:[],Any:[],Actions:[]},a.forms={general:void 0,settings:void 0},a.addCondition=function(b){a.item[b].push({field:"",operator:"",value:""})},a.removeCondition=function(b,c){a.item[b].splice(c,1)},a.addAction=function(){a.item.Actions.push({action:"",data1:"",data2:"",data3:"",data4:"",data5:""})},a.resetActionData=function(a){a.data1="",a.data2="",a.data3="",a.data4="",a.data5=""},a.removeAction=function(b){a.item.Actions.splice(b,1)},a.$watch("item.channel",function(b,c){c&&(a.tempData[c].All=_.clone(a.item.All,!0),a.tempData[c].Any=_.clone(a.item.Any,!0),a.tempData[c].Actions=_.clone(a.item.Actions,!0)),a.item.All=a.tempData[b].All?a.tempData[b].All:[],a.item.Any=a.tempData[b].Any?a.tempData[b].Any:[],a.item.Actions=a.tempData[b].Actions?a.tempData[b].Actions:[]},!0),a.item.channel="mail",a.createItem=function(){return g.save(a.item).$promise.then(function(){c.path("/tools/automations/list")})["catch"](function(a){console.error(a),d.error(a)})},a.next=function(){f.wizard().next()},a.previous=function(){f.wizard().previous()},a.exitValidation=function(a){return a},a.exitSettingsValidation=function(b){return!(!b||!a.item.All.length&&!a.item.Any.length||!a.item.Actions.length)}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.automations.wizard",{url:"/wizard",templateUrl:"app/tools/automation/wizard/wizard.html",controller:"AutomationWizardCtrl"})}]),angular.module("xCallyShuttleApp").factory("Interval",["$resource",function(a){return a("/api/intervals/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.intervals",{url:"/intervals",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:53}}})}]),angular.module("xCallyShuttleApp").controller("IntervalListCtrl",["$scope","$uibModal","Interval","gridOptions",function(a,b,c,d){a.initView=function(){var b={exporterCsvFilename:"intervals.csv",columnDefs:[{name:"name"},{name:"description"},{name:"action",width:75,buttons:[{"class":"blue-hoki",href:"/tools/intervals/view/{{row.entity.id}}/settings",name:"settings"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=d.gridOptions(c,b,a)},a.createItem=function(){var c=b.open({animation:!0,templateUrl:"app/tools/interval/list/list.create.modal.html",controller:"IntervalListCreateCtrl"});c.result.then(function(b){console.log(b),a.gridOptions.getPage()})}}]),angular.module("xCallyShuttleApp").controller("IntervalListCreateCtrl",["$scope","$translate","$uibModalInstance","Interval","xAlert",function(a,b,c,d,e){a.form={},a.item={},a.save=function(){return d.save(a.item).$promise.then(function(a){e.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)})["catch"](function(a){e.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.intervals.list",{url:"/list",templateUrl:"app/tools/interval/list/list.html",controller:"IntervalListCtrl"})}]),angular.module("xCallyShuttleApp").controller("IntervalViewCtrl",["$scope","$http","xAlert","$translate","$stateParams","socket","$location","WizardHandler","Modal","interval",function(a,b,c,d,e,f,g,h,i,j){function k(b){var c,d,e,f;c=b.t_from&&b.t_to&&!b.alwaysTime?moment(b.t_from).format("HH:mm")+"-"+moment(b.t_to).format("HH:mm"):"*",b.wd_from&&"always"!==b.wd_from?(d=b.wd_from,b.wd_to&&"always"!==b.wd_to&&(d+="-"+b.wd_to)):d="*",b.md_from&&"always"!==b.md_from?(e=b.md_from,b.md_to&&"always"!==b.md_to&&(e+="-"+b.md_to)):e="*",b.m_from&&"always"!==b.m_from?(f=b.m_from,b.m_to&&"always"!==b.m_to&&(f+="-"+b.m_to)):f="*",void 0!==a.selectedSubInterval?a.interval.SubIntervals[a.selectedSubInterval].interval=c+","+d+","+e+","+f:a.subinterval.interval=c+","+d+","+e+","+f}a.$translate=d,a.$interval=j.interval,a.selectedSubInterval=void 0,a["switch"]={isActive:!0,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.gridOptions={columnDefs:[{name:"name",displayName:"APPLICATION_NAME",headerCellFilter:"translate"},{name:"interval",displayName:"APPLICATION_INTERVAL",headerCellFilter:"translate"},{name:"action",displayName:"APPLICATION_ACTION",headerCellFilter:"translate",width:125,cellTemplate:'<a class="btn btn-xs blue-hoki" data-ng-click="grid.appScope.openSubInterval(grid.appScope.gridOptions.data.indexOf(row.entity))">{{\'APPLICATION_SETTINGS\' | translate}}</a><a class="btn btn-xs red-sunglo" data-ng-click="grid.appScope.deleteSubInterval(row.entity.name+\' interval\', grid.appScope.gridOptions.data.indexOf(row.entity))">{{\'APPLICATION_DELETE\' | translate}}</a>'}]},a.forms={subinterval:void 0,general:void 0},a.initSubInterval=function(b){b&&(a.selectedSubInterval=void 0),a.subinterval={},a.splittedInterval={t_from:moment(new Date),t_to:moment(new Date),wd_from:"always",wd_to:"always",md_from:"always",md_to:"always",m_from:"always",m_to:"always",alwaysTime:!0}},a.next=function(){h.wizard().next()},a.previous=function(){h.wizard().previous()},a.exitValidation=function(a){return a},a.deselectAndRedirect=function(b){a.selectedSubInterval=void 0,g.path(b)},a.getInterval=function(){b.get("/api/intervals/"+e.id).success(function(b){a.interval=b,a.gridOptions.data=b.SubIntervals}).error(function(a){console.error(a),g.path("/tools/intervals/list")})},a.openSubInterval=function(b){a.selectedSubInterval=b,g.path("/tools/intervals/view/"+e.id+"/subintervals/settings")},a.updateInterval=function(f){a.selectedSubInterval=void 0,b.put("/api/intervals/"+e.id,a.interval).success(function(){a.getInterval(),c.show(d.instant("MESSAGE_WELL_DONE")+"!","success"),f&&g.path("/tools/intervals/view/"+e.id+"/"+f)}).error(function(a){c.error(a)})},a.getSubInterval=function(){void 0===a.selectedSubInterval&&g.path("/tools/intervals/list"),a.splittedInterval={t_from:moment(new Date),t_to:moment(new Date)};var b,c=a.interval.SubIntervals[a.selectedSubInterval]?a.interval.SubIntervals[a.selectedSubInterval].interval.split(","):["*","*","*","*"];c.forEach(function(c,d){switch(d){case 0:"*"!==c?(b=c.split("-"),a.splittedInterval.t_from=moment(b[0],"HH:mm"),a.splittedInterval.t_to=moment(b[1],"HH:mm"),a.splittedInterval.alwaysTime=!1):(a.splittedInterval.t_from=moment(new Date),a.splittedInterval.t_to=moment(new Date),a.splittedInterval.alwaysTime=!0);break;case 1:"*"!==c?(b=c.split("-"),a.splittedInterval.wd_from=b[0],a.splittedInterval.wd_to=b[1]?b[1]:"always"):(a.splittedInterval.wd_from="always",a.splittedInterval.wd_to="always");break;case 2:"*"!==c?(b=c.split("-"),a.splittedInterval.md_from=b[0],a.splittedInterval.md_to=b[1]?b[1]:"always"):(a.splittedInterval.md_from="always",a.splittedInterval.md_to="always");break;case 3:"*"!==c?(b=c.split("-"),a.splittedInterval.m_from=b[0],a.splittedInterval.m_to=b[1]?b[1]:"always"):(a.splittedInterval.m_from="always",a.splittedInterval.m_to="always")}})},a.$watch("splittedInterval",function(a){a&&k(a)},!0),a.addSubInterval=function(){a.interval.SubIntervals.push(a.subinterval),a.updateInterval("subintervals")},a.deleteSubInterval=i.confirm["delete"](function(b){a.interval.SubIntervals.splice(b,1),a.updateInterval()})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.intervals.view",{url:"/view/:id",templateUrl:"app/tools/interval/view/view.html",controller:"IntervalViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.tools.intervals.view.settings",{url:"/settings",templateUrl:"app/tools/interval/view/view.settings.html"}).state("main.tools.intervals.view.subintervals",{url:"/subintervals",templateUrl:"app/tools/interval/view/view.subintervals.html"}).state("main.tools.intervals.view.subinterval",{url:"/subinterval",templateUrl:"app/tools/interval/view/view.subinterval.html"}).state("main.tools.intervals.view.subintervals.settings",{url:"/settings",templateUrl:"app/tools/interval/view/view.subintervalSettings.html"})}]),angular.module("xCallyShuttleApp").controller("PauseListCtrl",["$scope","$log","$uibModal","$translate","Pause","gridOptions",function(a,b,c,d,e,f){a.initView=function(){var b={exporterCsvFilename:"pauses.csv",columnDefs:[{name:"name"},{name:"description"},{name:"action",width:75,buttons:[{"class":"blue-hoki",href:"/tools/pauses/view/{{row.entity.id}}/settings",name:"settings"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=f.gridOptions(e,b,a)},a.createItem=function(){var b=c.open({animation:!0,templateUrl:"app/tools/pause/list/list.create.modal.html",controller:"PauseListCreateCtrl"});b.result.then(function(b){console.log(b),a.gridOptions.getPage()})}}]),angular.module("xCallyShuttleApp").controller("PauseListCreateCtrl",["$scope","$translate","$uibModalInstance","Pause","xAlert",function(a,b,c,d,e){a.form={},a.item={},a.save=function(){return d.save(a.item).$promise.then(function(a){e.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)})["catch"](function(a){e.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.pauses.list",{url:"/list",templateUrl:"app/tools/pause/list/list.html",controller:"PauseListCtrl"})}]),angular.module("xCallyShuttleApp").factory("Pause",["$resource",function(a){return a("/api/pauses/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.pauses",{url:"/pauses",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:57}}})}]),angular.module("xCallyShuttleApp").controller("PauseViewCtrl",["$scope","$http","xAlert","$translate","$stateParams","$location","Pause",function(a,b,c,d,e,f,g){a.getPause=function(){return g.get({id:e.id}).$promise.then(function(b){a.pause=b})["catch"](function(a){c.error(a)})},a.updatePause=function(){var b=angular.copy(a.pause);return g.update({id:e.id},b).$promise.then(function(){c.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){c.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.pauses.view",{url:"/view/:id",templateUrl:"app/tools/pause/view/view.html",controller:"PauseViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.tools.pauses.view.settings",{url:"/settings",templateUrl:"app/tools/pause/view/view.settings.html"})}]),angular.module("xCallyShuttleApp").controller("SchedulerListCtrl",["$scope","Scheduler","gridOptions","xAlert","$translate","socket",function(a,b,c,d,e,f){a._=_,a.switches={isActive:!0,size:"mini",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.scheduleTypes=[{name:"APPLICATION_REPORT_EXTRACTION",value:"report"},{name:"APPLICATION_HISTORY_MOVE",value:"history"},{name:"APPLICATION_DB_BACKUP",value:"backup"}],a.initView=function(){var d={exporterCsvFilename:"Schedules.csv",columnDefs:[{name:"name"},{name:"type",cellTemplate:'<div class="centered-uigrid-td">{{grid.appScope._.find(grid.appScope.scheduleTypes,{value:row.entity.type}).name | translate}}</div>'},{name:"description"},{name:"active",cellTemplate:'<div class="centered-uigrid-td"><input data-ng-change="grid.appScope.updateItem(row.entity)", bs-switch ng-model="row.entity.active" type="checkbox" switch-active="{{ grid.appScope.switches.isActive }}" switch-on-text="{{ \'APPLICATION_YES\' | translate }}" switch-off-text="{{ \'APPLICATION_NO\' | translate }}" switch-on-color="{{ grid.appScope.switches.onColor }}" switch-off-color="{{ grid.appScope.switches.offColor }}" switch-animate="{{ grid.appScope.switches.animate }}" switch-size="{{ grid.appScope.switches.size }}" switch-label="{{ grid.appScope.switches.label }}" switch-icon="{{ grid.appScope.switches.icon }}" switch-radio-off="{{ grid.appScope.switches.radioOff }}" switch-label-width="{{ grid.appScope.switches.labelWidth }}" switch-handle-width="{{ grid.appScope.switches.handleWidth }}"></div>',enableFiltering:!1,enableSorting:!1},{name:"sendMail",displayName:"APPLICATION_SEND_MAIL",cellTemplate:'<div data-ng-if="row.entity.type == \'report\'" class="centered-uigrid-td"><input data-ng-change="grid.appScope.updateItem(row.entity)", bs-switch ng-model="row.entity.sendMail" type="checkbox" switch-active="{{ grid.appScope.switches.isActive }}" switch-on-text="{{ \'APPLICATION_YES\' | translate }}" switch-off-text="{{ \'APPLICATION_NO\' | translate }}" switch-on-color="{{ grid.appScope.switches.onColor }}" switch-off-color="{{ grid.appScope.switches.offColor }}" switch-animate="{{ grid.appScope.switches.animate }}" switch-size="{{ grid.appScope.switches.size }}" switch-label="{{ grid.appScope.switches.label }}" switch-icon="{{ grid.appScope.switches.icon }}" switch-radio-off="{{ grid.appScope.switches.radioOff }}" switch-label-width="{{ grid.appScope.switches.labelWidth }}" switch-handle-width="{{ grid.appScope.switches.handleWidth }}"></div>',enableFiltering:!1,enableSorting:!1},{name:"action",width:100,buttons:[{"class":"blue-hoki",href:"/tools/scheduler/view/{{row.entity.id}}/settings",name:"settings"},{"class":"green-turquoise",name:"run",onClick:"grid.appScope.runSchedule(row.entity.id)"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=c.gridOptions(b,d,a)},a.updateItem=function(a){return b.update({id:a.id},a).$promise.then(function(){d.show(e.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){console.error(a),d.error(a)})},a.runSchedule=function(a){return b.get({id:a,controller:"run"}).$promise.then(function(){d.show(e.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){console.error(a),d.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.scheduler.list",{url:"/list",templateUrl:"app/tools/scheduler/list/list.html",controller:"SchedulerListCtrl"})}]),angular.module("xCallyShuttleApp").factory("Scheduler",["$resource",function(a){return a("/api/scheduler/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.scheduler",{url:"/scheduler",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:61}}})}]),angular.module("xCallyShuttleApp").controller("SchedulerViewCtrl",["$scope","xAlert","$translate","$stateParams","socket","$location","ReportTree","Scheduler","DefaultReport","CustomReport","$timeout","MailServerOut",function(a,b,c,d,e,f,g,h,i,j,k,l){function m(){switch(a.schedule.cronType=a.rangeExec.type,a.rangeExec.type){case"daily":a.schedule.cron="00 "+a.rangeExec.hour+" * * *";break;case"weekly":a.schedule.cron="00 "+a.rangeExec.hour+" * * "+a.rangeExec.weekDays.join(",");break;case"monthly":a.schedule.cron="00 "+a.rangeExec.hour+" "+a.rangeExec.monthDay+" * *"}}function n(b){var c;switch(b.cronType){case"daily":a.rangeExec.hour=Number(b.cron.split(" ")[1]),a.rangeExec.type=b.cronType;break;case"weekly":c=b.cron.split(" "),a.rangeExec.hour=Number(c[1]),c[4].split(",").forEach(function(b){a.rangeExec.weekDays.push(Number(b))}),a.rangeExec.type=b.cronType;break;case"monthly":c=b.cron.split(" "),a.rangeExec.hour=Number(c[1]),a.rangeExec.monthDay=Number(c[2]),a.rangeExec.type=b.cronType;break;case"currentDay":a.switchValues.today=!0}a.$watch("rangeExec",function(b){a.switchValues.today||m()},!0)}a.forms={},a.rangeExec={weekDays:[],monthDay:null,hour:0,type:null},a.initReports=function(){var c;return a.reports=[],a.tempTodayCron=null,g.query().$promise.then(function(b){return a.defaultTreeData=JSON.parse(b[0].tree),a.customTreeData=JSON.parse(b[1].tree),i.get().$promise}).then(function(b){return a.defRep=b.rows,a.defRep.length&&_.forEach(a.defRep,function(b){c=_.find(a.defaultTreeData,{id:b.parent}),c&&(b.parent="Motion Reports - "+c.text,b.type="default")}),j.get().$promise}).then(function(b){return a.cusRep=b.rows,a.cusRep.length&&_.forEach(a.cusRep,function(b){c=_.find(a.customTreeData,{id:b.parent}),c&&(b.parent="Custom Reports - "+c.text,b.type="custom")}),l.get().$promise}).then(function(b){a.mailServers=b.rows})["catch"](function(a){b.error(a)})},a.initView=function(){return h.get({id:d.id}).$promise.then(function(b){a.schedule=b,n(b)}).then(function(){e.socket.on("schedule:update",function(b){a.schedule.id===b.id&&(a.schedule.active=b.active,a.schedule.sendMail=b.sendMail)})})["catch"](function(a){console.error(a),f.path("/tools/scheduler/list")})},a.refreshSlider=function(){k(function(){a.$broadcast("rzSliderForceRender"),a.refreshSlider=null})},a.monthDays=function(){for(var a=[],b=1;31>=b;b++)a.push(b);return a}(),a.hours=function(){for(var a=[],b=0;23>=b;b++)a.push(b);return a}(),a.setReportTree=function(b){a.schedule.reportType=b.type},a.validitySlider={ceil:24,floor:0,showTicks:!0},a.switchValues={today:!1},a.switches={isActive:!0,size:"mini",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.scheduleTypes=[{name:"APPLICATION_REPORT_EXTRACTION",value:"report"}],a.todayCron=[{name:"15 min",value:"*/15 * * * *"},{name:"30 min",value:"*/30 * * * *"},{name:"1 h",value:"0 * * * *"}],a.reportRanges=[{name:"APPLICATION_PREVIOUS_DAY",value:"yesterday"},{name:"APPLICATION_LAST_SEVEN_DAYS",value:"last7"},{name:"APPLICATION_LAST_THIRTY_DAYS",value:"last30"},{name:"APPLICATION_LAST_MONTH",value:"lastMonth"}],a.cronTypes=[{name:"APPLICATION_DAY",value:"daily"},{name:"APPLICATION_WEEK",value:"weekly"},{name:"APPLICATION_MONTH",value:"monthly"}],a.weekDays=[{name:"APPLICATION_MONDAY",value:1},{name:"APPLICATION_TUESDAY",value:2},{name:"APPLICATION_WEDNESDAY",value:3},{name:"APPLICATION_THURSDAY",value:4},{name:"APPLICATION_FRIDAY",value:5},{name:"APPLICATION_SATURDAY",value:6},{name:"APPLICATION_SUNDAY",value:0}],a.checkToday=function(){a.switchValues.today?(a.schedule.cron=angular.copy(a.tempTodayCron),a.schedule.cronType="currentDay"):(a.tempTodayCron=angular.copy(a.schedule.cron),a.schedule.cron=void 0,m())},a.updateSchedule=function(){return h.update({id:a.schedule.id},a.schedule).$promise.then(function(){b.show(c.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){console.error(a),b.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.scheduler.view",{url:"/view/:id",templateUrl:"app/tools/scheduler/view/view.html",controller:"SchedulerViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.tools.scheduler.view.settings",{url:"/settings",templateUrl:"app/tools/scheduler/view/view.settings.html"})}]),angular.module("xCallyShuttleApp").controller("SchedulerWizardCtrl",["$scope","WizardHandler","$location","xAlert","Scheduler","ReportTree","$translate","DefaultReport","CustomReport","MailServerOut",function(a,b,c,d,e,f,g,h,i,j){function k(){switch(a.item.cronType=a.rangeExec.type,a.rangeExec.type){case"daily":a.item.cron="00 "+a.rangeExec.hour+" * * *";break;case"weekly":a.item.cron="00 "+a.rangeExec.hour+" * * "+a.rangeExec.weekDays.join(",");break;case"monthly":a.item.cron="00 "+a.rangeExec.hour+" "+a.rangeExec.monthDay+" * *"}}a.forms={},a.item={validityStart:8,validityEnd:16,type:"report",reportType:"default"},a.initReports=function(){a.reports=[];var b;return f.query().$promise.then(function(b){return a.defaultTreeData=JSON.parse(b[0].tree),a.customTreeData=JSON.parse(b[1].tree),h.get().$promise}).then(function(c){return a.defRep=c.rows,a.defRep.length&&_.forEach(a.defRep,function(c){b=_.find(a.defaultTreeData,{id:c.parent}),b&&(c.parent="Motion Reports - "+b.text,c.type="default")}),i.get().$promise}).then(function(c){return a.cusRep=c.rows,a.cusRep.length&&_.forEach(a.cusRep,function(c){b=_.find(a.customTreeData,{id:c.parent}),b&&(c.parent="Custom Reports - "+b.text,c.type="custom")}),j.get().$promise}).then(function(b){a.mailServers=b.rows;var c=_.find(a.mailServers,{MailAccountId:null});c&&(c.username+=" (custom)")})["catch"](function(a){d.error(a)})},a.setReportTree=function(b){a.item.reportType=b.type},a.validitySlider={ceil:24,floor:0,showTicks:!0},a.switchValues={today:!1},a.switches={isActive:!0,size:"mini",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.scheduleTypes=[{name:"APPLICATION_REPORT_EXTRACTION",value:"report"}],a.todayCron=[{name:"15 min",value:"*/15 * * * *"},{name:"30 min",value:"*/30 * * * *"},{name:"1 h",value:"0 * * * *"}],a.reportRanges=[{name:"APPLICATION_PREVIOUS_DAY",value:"yesterday"},{name:"APPLICATION_LAST_SEVEN_DAYS",value:"last7"},{name:"APPLICATION_LAST_THIRTY_DAYS",value:"last30"},{name:"APPLICATION_LAST_MONTH",value:"lastMonth"}],a.cronTypes=[{name:"APPLICATION_DAY",value:"daily"},{name:"APPLICATION_WEEK",value:"weekly"},{name:"APPLICATION_MONTH",value:"monthly"}],a.weekDays=[{name:"APPLICATION_MONDAY",value:1},{name:"APPLICATION_TUESDAY",value:2},{name:"APPLICATION_WEDNESDAY",value:3},{name:"APPLICATION_THURSDAY",value:4},{name:"APPLICATION_FRIDAY",value:5},{name:"APPLICATION_SATURDAY",value:6},{name:"APPLICATION_SUNDAY",value:0}],a.tempTodayCron=null,a.checkToday=function(){a.switchValues.today?(a.item.cron=angular.copy(a.tempTodayCron),a.item.cronType="currentDay"):(a.tempTodayCron=angular.copy(a.item.cron),a.item.cron=void 0,k())},a.monthDays=function(){for(var a=[],b=1;31>=b;b++)a.push(b);return a}(),a.hours=function(){for(var a=[],b=0;23>=b;b++)a.push(b);return a}(),a.rangeExec={weekDays:[],monthDay:null,hour:0,type:null},a.$watch("rangeExec",function(b){a.switchValues.today||k()},!0),a.next=function(){b.wizard().next()},a.previous=function(){b.wizard().previous()},a.exitValidation=function(a){return a},a.createItem=function(){return e.save(a.item).$promise.then(function(){c.path("/tools/scheduler/list")})["catch"](function(a){d.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.scheduler.wizard",{url:"/wizard",templateUrl:"app/tools/scheduler/wizard/wizard.html",controller:"SchedulerWizardCtrl"})}]),angular.module("xCallyShuttleApp").controller("SoundListCtrl",["$scope","$http","socket","Modal","$q","FileUploader","$translate","xAlert","$cookieStore","$sce","Sound",function(a,b,c,d,e,f,g,h,i,j,k){a.Sound=k,a.isCollapsed=!0,a.downloadButtonClass="btn btn-xs blue-hoki",a["delete"]=d.confirm["delete"](function(a){b["delete"]("/api/sounds/"+a).success(function(a){}).error(function(a){console.log(a)})}),a.updateAudio=function(a,c){var d=e.defer();return b.put("/api/sounds/"+a,c).success(function(a){d.resolve()}).error(function(a){console.log(a.message),d.reject(a.message)}),d.promise},a.$on("$destroy",function(){c.unsyncUpdates("sound")}),a.initList=function(){b.get("/api/sounds").success(function(b){a.sounds=b.rows,b.rows.length||(a.isCollapsed=!1),c.syncUpdates("sound",a.sounds,function(){a.sounds.length||(a.isCollapsed=!1)})})};var l=a.uploader=new f({url:"/api/sounds",withCredentials:!0,headers:{Authorization:"Bearer "+i.get("token")}});l.filters.push({name:"customFilter",fn:function(a,b){return this.queue.length<10}}),l.onWhenAddingFileFailed=function(a,b,c){console.info("onWhenAddingFileFailed",a,b,c)},l.onAfterAddingFile=function(a){console.info("onAfterAddingFile",a)},l.onAfterAddingAll=function(a){console.info("onAfterAddingAll",a)},l.onBeforeUploadItem=function(a){console.info("onBeforeUploadItem",a)},l.onProgressItem=function(a,b){console.info("onProgressItem",a,b),a.isUploading=!0},l.onProgressAll=function(a){console.info("onProgressAll",a)},l.onSuccessItem=function(a,b,c,d){console.info("onSuccessItem",a,b,c,d),a.isUploading=!1},l.onErrorItem=function(a,b,c,d){console.info("onErrorItem",a,b,c,d),a.responseMessage=b,a.isUploading=!1},l.onCancelItem=function(a,b,c,d){console.info("onCancelItem",a,b,c,d),a.isUploading=!1},l.onCompleteItem=function(a,b,c,d){console.info("onCompleteItem",a,b,c,d),a.isUploading=!1},l.onCompleteAll=function(){console.info("onCompleteAll")}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.sounds.list",{url:"/list",templateUrl:"app/tools/sound/list/list.html",controller:"SoundListCtrl",authenticate:!0,resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/plugins/bootstrap-fileinput/bootstrap-fileinput.js"]})}]}})}]),angular.module("xCallyShuttleApp").factory("Sound",["$resource",function(a){return a("/api/sounds/:id/:controller",{name:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.sounds",{url:"/sounds",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:60}}})}]),angular.module("xCallyShuttleApp").controller("TagListCtrl",["$scope","$uibModal","Tag","gridOptions","$rootScope",function(a,b,c,d,e){a.initView=function(){var b={exporterCsvFilename:"tag.csv",columnDefs:[{name:"name"},{name:"description"},{name:"action",width:75,buttons:[{"class":"blue-hoki",href:"/tools/tags/view/{{row.entity.id}}/settings",name:"settings"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=d.gridOptions(c,b,a)},a.createItem=function(){var c=b.open({animation:!0,templateUrl:"app/tools/tag/list/list.create.modal.html",controller:"TagListCreateCtrl"});c.result.then(function(){a.gridOptions.getPage()})}}]),angular.module("xCallyShuttleApp").controller("TagListCreateCtrl",["$scope","$translate","$uibModalInstance","Tag","xAlert",function(a,b,c,d,e){a.form={},a.item={},a.save=function(){return d.save(a.item).$promise.then(function(a){e.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)})["catch"](function(a){e.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.tags.list",{url:"/list",templateUrl:"app/tools/tag/list/list.html",controller:"TagListCtrl"})}]),angular.module("xCallyShuttleApp").factory("Tag",["$resource",function(a){return a("/api/tags/:id/:controller/:tag",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.tags",{url:"/tags",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:55}}})}]),angular.module("xCallyShuttleApp").controller("TagViewCtrl",["$scope","$http","xAlert","$translate","$stateParams","$location","Tag","gridOptions","List","Company","Contact","uiGridConstants","usSpinnerService",function(a,b,c,d,e,f,g,h,i,j,k,l,m){function n(){m.stop("spinner-grid"),a.readyGrid=!0}a.getTag=function(){return g.get({id:e.id}).$promise.then(function(b){a.tag=b})["catch"](function(a){c.error(a)})},a.updateTag=function(){var b=angular.copy(a.tag);return g.update({id:e.id},b).$promise.then(function(){c.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){c.error(a)})},a.initChat=function(){m.spin("spinner-grid");var b={enableRowSelection:!1,exporterCsvFilename:"tagChat.csv",columnDefs:[{name:"type"},{name:"status"},{name:"ChatWebsite.name",displayName:"APPLICATION_WEBSITE"},{name:"ChatVisitor.email",displayName:"APPLICATION_VISITOR"},{name:"action",width:40,buttons:[{"class":"green",name:"chatRoom",onClick:"grid.appScope.openRoom(row.entity.id, 'chatRoom')"}]}]};a.gridOptions=h.gridOptions(g,b,a,{controller:"chat",tag:a.tag.name},null,null,n())},a.initMail=function(){m.spin("spinner-grid");var b={enableRowSelection:!1,exporterCsvFilename:"tagMail.csv",columnDefs:[{name:"subject"},{name:"from"},{name:"account"},{name:"status"},{name:"action",width:40,buttons:[{"class":"green",name:"mailRoom",onClick:"grid.appScope.openRoom(row.entity.id, 'mailRoom')"}]}]};a.gridOptions=h.gridOptions(g,b,a,{controller:"mail",tag:a.tag.name},null,null,n())},a.initFax=function(){m.spin("spinner-grid");var b={enableRowSelection:!1,exporterCsvFilename:"tagFax.csv",columnDefs:[{name:"from"},{name:"account"},{name:"status"},{name:"action",width:40,buttons:[{"class":"green",name:"faxRoom",onClick:"grid.appScope.openRoom(row.entity.id, 'faxRoom')"}]}]};a.gridOptions=h.gridOptions(g,b,a,{controller:"fax",tag:a.tag.name},null,null,n())},a.initSms=function(){m.spin("spinner-grid");var b={enableRowSelection:!1,exporterCsvFilename:"tagSms.csv",columnDefs:[{name:"from"},{name:"status"},{name:"action",width:40,buttons:[{"class":"green",name:"smsRoom",onClick:"grid.appScope.openRoom(row.entity.id, 'smsRoom')"}]}]};a.gridOptions=h.gridOptions(g,b,a,{controller:"sms",tag:a.tag.name},null,null,n())},a.initContacts=function(){a.readyGrid=!1,m.spin("spinner-grid");var b;return i.get().$promise.then(function(b){return a.lists=[],b.rows.forEach(function(b,c){a.lists.push({value:b.id,label:b.name})}),j.get().$promise}).then(function(b){a.companies=[],b.rows.forEach(function(b,c){a.companies.push({value:b.id,label:b.name})})}).then(function(){b={enableRowSelection:!1,exporterCsvFilename:"tagContacts.csv",columnDefs:[{name:"firstName"},{name:"lastName"},{name:"phone"},{name:"email"},{name:"ListId",displayName:"APPLICATION_LIST",field:"List.name",filter:{type:l.filter.SELECT,selectOptions:a.lists}},{name:"CompanyId",displayName:"APPLICATION_COMPANY",field:"Company.name",filter:{type:l.filter.SELECT,term:e.companyId||null,selectOptions:a.companies}},{name:"action",width:40,buttons:[{"class":"blue-hoki",name:"profile",onClick:"grid.appScope.openContactTab(row.entity)"}]}]},a.gridOptions=h.gridOptions(g,b,a,{controller:"contacts",tag:a.tag.name},null,null,n())})["catch"](function(a){c.error(a)})},a.openRoom=function(b,c){var d=_.find(a.workspaces,{id:b,type:c});if(d)d.active=!0;else{var e;switch(c){case"mailRoom":e="icon-envelope";break;case"chatRoom":e="fa fa-users";break;case"faxRoom":e="fa fa-fax";break;case"smsRoom":e="glyphicon glyphicon-comment"}a.workspaces.push({id:b,type:c,"class":e,active:!0})}}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.tags.view",{url:"/view/:id",templateUrl:"app/tools/tag/view/view.html",controller:"TagViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.tools.tags.view.settings",{url:"/settings",templateUrl:"app/tools/tag/view/view.settings.html"}).state("main.tools.tags.view.chat",{url:"/chat",templateUrl:"app/tools/tag/view/view.chat.html"}).state("main.tools.tags.view.mail",{url:"/mail",templateUrl:"app/tools/tag/view/view.mail.html"}).state("main.tools.tags.view.fax",{url:"/fax",templateUrl:"app/tools/tag/view/view.fax.html"}).state("main.tools.tags.view.sms",{ -url:"/sms",templateUrl:"app/tools/tag/view/view.sms.html"}).state("main.tools.tags.view.contacts",{url:"/contacts",templateUrl:"app/tools/tag/view/view.contacts.html"})}]),angular.module("xCallyShuttleApp").controller("TemplateListCtrl",["$scope","Template","gridOptions",function(a,b,c){a.initView=function(){var d={exporterCsvFilename:"templates.csv",columnDefs:[{name:"name"},{name:"description"},{name:"action",width:75,buttons:[{"class":"blue-hoki",href:"/tools/templates/view/{{row.entity.id}}/settings",name:"settings"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=c.gridOptions(b,d,a)}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.templates.list",{url:"/list",templateUrl:"app/tools/template/list/list.html",controller:"TemplateListCtrl"})}]),angular.module("xCallyShuttleApp").factory("Template",["$resource",function(a){return a("/api/templates/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.templates",{url:"/templates",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:56}}})}]),angular.module("xCallyShuttleApp").controller("TemplateViewCtrl",["$scope","$rootScope","$http","$translate","$stateParams","xAlert","Template","templateVariable","Variable",function(a,b,c,d,e,f,g,h,i){a.initItem=function(){CKEDITOR.plugins.addExternal("richparams","/assets/plugins/ckeditor-richparams/"),a.options={language:b.language,allowedContent:!0,entities:!1,skin:"office2013",contentsCss:"/assets/css/global/richparams.css",extraPlugins:"richparams,autogrow",autoGrow_minHeight:450,richparams:h,disableNativeSpellChecker:!1,toolbar:[{name:"clipboard",items:["Cut","Copy","Paste","PasteText","PasteFromWord","-","Undo","Redo"]},{name:"links",items:["Link","Unlink","Anchor"]},{name:"insert",items:["Image","Table","HorizontalRule","SpecialChar"]},{name:"tools",items:["Maximize"]},{name:"document",items:["Source"]},"/",{name:"basicstyles",items:["Bold","Italic","Underline","Strike","Subscript","Superscript","-","RemoveFormat"]},{name:"paragraph",items:["NumberedList","BulletedList","-","Outdent","Indent","-","Blockquote"]},{name:"styles",items:["Styles","Format"]},"/",{name:"motion",items:["voice","chat","mail"]}]},a.form={},a.item={},a.item=g.get({id:e.id})},a.updateItem=function(){return g.update(a.item).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){f.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.templates.view",{url:"/view/:id",templateUrl:"app/tools/template/view/view.html",controller:"TemplateViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.tools.templates.view.settings",{url:"/settings",templateUrl:"app/tools/template/view/view.settings.html"})}]),angular.module("xCallyShuttleApp").controller("TemplateWizardCtrl",["$scope","$rootScope","$location","$http","WizardHandler","xAlert","Template","templateVariable",function(a,b,c,d,e,f,g,h){a.initWizard=function(){CKEDITOR.plugins.addExternal("richparams","/assets/plugins/ckeditor-richparams/"),a.options={language:b.language,allowedContent:!0,entities:!1,skin:"office2013",contentsCss:"/assets/css/global/richparams.css",extraPlugins:"richparams,autogrow",autoGrow_minHeight:450,disableNativeSpellChecker:!1,richparams:h,toolbar:[{name:"clipboard",items:["Cut","Copy","Paste","PasteText","PasteFromWord","-","Undo","Redo"]},{name:"links",items:["Link","Unlink","Anchor"]},{name:"insert",items:["Image","Table","HorizontalRule","SpecialChar"]},{name:"tools",items:["Maximize"]},{name:"document",items:["Source"]},"/",{name:"basicstyles",items:["Bold","Italic","Underline","Strike","Subscript","Superscript","-","RemoveFormat"]},{name:"paragraph",items:["NumberedList","BulletedList","-","Outdent","Indent","-","Blockquote"]},{name:"styles",items:["Styles","Format"]},"/",{name:"motion",items:["voice","chat","mail"]}]},a.item={},a.form={}},a.exitValidation=function(a){return a},a.createItem=function(){return g.save({name:a.item.name,description:a.item.description,subject:a.item.subject||null,html:a.item.html||null,text:a.item.text||null}).$promise.then(function(){c.path("/tools/templates/list")})["catch"](function(a){f.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.templates.wizard",{url:"/wizard",templateUrl:"app/tools/template/wizard/wizard.html",controller:"TemplateWizardCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools",{url:"/tools",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user","agent"],redirectTo:"landing",id:13}}})}]),angular.module("xCallyShuttleApp").controller("TriggerListCtrl",["$scope","$http","$translate","Modal","xAlert","Trigger","gridOptions",function(a,b,c,d,e,f,g){a.onText="On",a.offText="Off",a.isActive=!0,a.size="mini",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.initView=function(){var b={exporterCsvFilename:"Triggers.csv",columnDefs:[{name:"name"},{name:"description"},{name:"channel"},{name:"status",cellTemplate:'<div class="centered-uigrid-td"><input data-ng-change="grid.appScope.updateItem(row.entity)", bs-switch ng-model="row.entity.status" type="checkbox" switch-active="{{ grid.appScope.isActive }}" switch-on-text="{{ grid.appScope.onText }}" switch-off-text="{{ grid.appScope.offText }}" switch-on-color="{{ grid.appScope.onColor }}" switch-off-color="{{ grid.appScope.offColor }}" switch-animate="{{ grid.appScope.animate }}" switch-size="{{ grid.appScope.size }}" switch-label="{{ grid.appScope.label }}" switch-icon="{{ grid.appScope.icon }}" switch-radio-off="{{ grid.appScope.radioOff }}" switch-label-width="{{ grid.appScope.labelWidth }}" switch-handle-width="{{ grid.appScope.handleWidth }}"></div>',width:100,enableFiltering:!1},{name:"action",width:75,buttons:[{"class":"blue-hoki",href:"/tools/triggers/view/{{row.entity.id}}/settings",name:"settings"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=g.gridOptions(f,b,a)},a.updateItem=function(a){return f.update({id:a.id},a).$promise.then(function(){e.show(c.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){e.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.triggers.list",{url:"/list",templateUrl:"app/tools/trigger/list/list.html",controller:"TriggerListCtrl"})}]),angular.module("xCallyShuttleApp").factory("Trigger",["$resource",function(a){return a("/api/triggers/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.triggers",{url:"/triggers",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:50}}})}]),angular.module("xCallyShuttleApp").controller("TriggerViewCtrl",["$scope","$stateParams","$http","$translate","xAlert","triggers","Trigger","$location",function(a,b,c,d,e,f,g,h){a.$triggers=f,a.recordSwitch={onText:"On",offText:"Off",isActive:!0,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.forms={general:{}},a.addCondition=function(b){a.trigger[b].push({field:"",operator:"",value:""})},a.removeCondition=function(b,c){a.trigger[b].splice(c,1)},a.addAction=function(){a.trigger.Actions.push({action:"",data1:"",data2:"",data3:"",data4:"",data5:""})},a.resetActionData=function(a){a.data1="",a.data2="",a.data3="",a.data4="",a.data5=""},a.removeAction=function(b){a.trigger.Actions.splice(b,1)},a.initView=function(){return g.get({id:b.id}).$promise.then(function(b){a.trigger=b})["catch"](function(a){e.error(a),h.path("/tools/triggers/list")})},a.updateTrigger=function(){return g.update({id:b.id},a.trigger).$promise.then(function(){e.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){console.error(a),e.error(a)})},a.exitValidation=function(b){return!(!b||!a.trigger.All.length&&!a.trigger.Any.length||!a.trigger.Actions.length)}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.triggers.view",{url:"/view/:id",templateUrl:"app/tools/trigger/view/view.html",controller:"TriggerViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]})}]}}).state("main.tools.triggers.view.settings",{url:"/settings",templateUrl:"app/tools/trigger/view/view.settings.html"}).state("main.tools.triggers.view.routes",{url:"/routes",templateUrl:"app/tools/trigger/view/view.routes.html"}).state("main.tools.triggers.view.application",{url:"/application",templateUrl:"app/tools/trigger/view/view.application.html"})}]),angular.module("xCallyShuttleApp").controller("TriggerWizardCtrl",["$scope","$http","$location","xAlert","triggers","WizardHandler","Trigger",function(a,b,c,d,e,f,g){a.$triggers=e,a.statusSwitch={onText:"On",offText:"Off",isActive:!0,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.tempData={voice:{},mail:{},chat:{},fax:{}},a.item={All:[],Any:[],Actions:[]},a.forms={general:void 0,settings:void 0},a.addCondition=function(b){a.item[b].push({field:"",operator:"",value:""})},a.removeCondition=function(b,c){a.item[b].splice(c,1)},a.addAction=function(){a.item.Actions.push({action:"",data1:"",data2:"",data3:"",data4:"",data5:""})},a.resetActionData=function(a){a.data1="",a.data2="",a.data3="",a.data4="",a.data5=""},a.removeAction=function(b){a.item.Actions.splice(b,1)},a.$watch("item.channel",function(b,c){c&&(a.tempData[c].All=_.clone(a.item.All,!0),a.tempData[c].Any=_.clone(a.item.Any,!0),a.tempData[c].Actions=_.clone(a.item.Actions,!0)),a.item.All=a.tempData[b].All?a.tempData[b].All:[],a.item.Any=a.tempData[b].Any?a.tempData[b].Any:[],a.item.Actions=a.tempData[b].Actions?a.tempData[b].Actions:[]},!0),a.item.channel="voice",a.createItem=function(){return g.save(a.item).$promise.then(function(){c.path("/tools/triggers/list")})["catch"](function(a){console.error(a),d.error(a)})},a.next=function(){f.wizard().next()},a.previous=function(){f.wizard().previous()},a.exitValidation=function(a){return a},a.exitSettingsValidation=function(b){return!(!b||!a.item.All.length&&!a.item.Any.length||!a.item.Actions.length)}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.triggers.wizard",{url:"/wizard",templateUrl:"app/tools/trigger/wizard/wizard.html",controller:"TriggerWizardCtrl"})}]),angular.module("xCallyShuttleApp").controller("TrunkListCtrl",["$scope","Trunk","gridOptions","xAlert","$translate","socket",function(a,b,c,d,e,f){function g(){f.socket.on("trunk:update",function(b){var c=_.find(a.gridOptions.data,{name:b.name});c&&(c.status=b.status,c.peerstatus=b.peerstatus)})}a.isActive=!0,a.size="mini",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.initView=function(){var d={exporterCsvFilename:"Trunks.csv",columnDefs:[{name:"name"},{name:"active",cellTemplate:'<div class="centered-uigrid-td"><input data-ng-change="grid.appScope.updateItem(row.entity)", bs-switch ng-model="row.entity.active" type="checkbox" switch-active="{{ grid.appScope.isActive }}" switch-on-text="{{ \'APPLICATION_YES\' | translate }}" switch-off-text="{{ \'APPLICATION_NO\' | translate }}" switch-on-color="{{ grid.appScope.onColor }}" switch-off-color="{{ grid.appScope.offColor }}" switch-animate="{{ grid.appScope.animate }}" switch-size="{{ grid.appScope.size }}" switch-label="{{ grid.appScope.label }}" switch-icon="{{ grid.appScope.icon }}" switch-radio-off="{{ grid.appScope.radioOff }}" switch-label-width="{{ grid.appScope.labelWidth }}" switch-handle-width="{{ grid.appScope.handleWidth }}"></div>'},{name:"host"},{name:"description"},{name:"status",cellTemplate:'<div class="centered-uigrid-td" data-ng-if="row.entity.active && row.entity.registry && row.entity.status">{{row.entity.status}}</div>'},{name:"peerstatus",cellTemplate:'<div class="centered-uigrid-td" data-ng-if="row.entity.active && row.entity.peerstatus">{{row.entity.peerstatus}}</div>'},{name:"action",width:75,buttons:[{"class":"blue-hoki",href:"/tools/trunks/view/{{row.entity.name}}/settings",name:"settings"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.name)"}]}]};a.gridOptions=c.gridOptions(b,d,a,null,null,null,g)},a.updateItem=function(a){return b.update({id:a.name},a).$promise.then(function(){d.show(e.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){console.error(a),d.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.trunks.list",{url:"/list",templateUrl:"app/tools/trunk/list/list.html",controller:"TrunkListCtrl"})}]),angular.module("xCallyShuttleApp").factory("Trunk",["$resource",function(a){return a("/api/trunks/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.trunks",{url:"/trunks",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:52}}})}]),angular.module("xCallyShuttleApp").controller("TrunkViewCtrl",["$scope","$http","xAlert","$translate","$stateParams","socket","$location","Trunk","VoiceContext",function(a,b,c,d,e,f,g,h,i){a.activeSwitch={isActive:!0,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.initView=function(){return h.get({id:e.id}).$promise.then(function(b){b.nat=b.nat?b.nat.split(","):[],b.allow=b.allow?b.allow.split(";"):[],b.insecure=b.insecure?b.insecure.split(","):[],b.transport=b.transport?b.transport.split(","):[],a.trunk=b}).then(function(){f.socket.on("trunk:update",function(b){a.trunk.name===b.name&&(a.trunk.status=b.status)})})["catch"](function(a){console.error(a),g.path("/tools/trunks/list")})},a.updateTrunk=function(){""===a.trunk.password&&delete a.trunk.password;var b=angular.copy(a.trunk);return b.nat=b.nat.join(","),b.allow=b.allow.join(";"),b.insecure=b.insecure.join(","),b.transport=b.transport.join(","),h.update({id:e.id},b).$promise.then(function(){c.show(d.instant("MESSAGE_WELL_DONE")+"!","success")})["catch"](function(a){c.error(a)})},a.getContexts=function(){return i.get().$promise.then(function(b){a.voiceContexts=b.rows})["catch"](function(a){c.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.trunks.view",{url:"/view/:id",templateUrl:"app/tools/trunk/view/view.html",controller:"TrunkViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.tools.trunks.view.settings",{url:"/settings",templateUrl:"app/tools/trunk/view/view.settings.html"})}]),angular.module("xCallyShuttleApp").controller("TrunkWizardCtrl",["$scope","WizardHandler","$location","xAlert","Trunk",function(a,b,c,d,e){a.initWizard=function(){a.forms={},a.item={context:"from-voip-provider"}},a.next=function(){b.wizard().next()},a.previous=function(){b.wizard().previous()},a.exitValidation=function(a){return a},a.createItem=function(){return a.item.fromuser=a.item.defaultuser,a.item.fromdomain=a.item.host,e.save(a.item).$promise.then(function(){c.path("/tools/trunks/list")})["catch"](function(a){d.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.trunks.wizard",{url:"/wizard",templateUrl:"app/tools/trunk/wizard/wizard.html",controller:"TrunkWizardCtrl"})}]),angular.module("xCallyShuttleApp").controller("VariableListCtrl",["$scope","$uibModal","Variable","gridOptions",function(a,b,c,d){a.initView=function(){var b={exporterCsvFilename:"variables.csv",columnDefs:[{name:"name"},{name:"description"},{name:"action",width:75,buttons:[{"class":"blue-hoki",href:"/tools/variables/view/{{row.entity.id}}/settings",name:"settings"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=d.gridOptions(c,b,a)},a.createItem=function(){var c=b.open({animation:!0,templateUrl:"app/tools/variable/list/list.create.modal.html",controller:"VariableListCreateCtrl"});c.result.then(function(b){console.log(b),a.gridOptions.getPage()})}}]),angular.module("xCallyShuttleApp").controller("VariableListCreateCtrl",["$scope","$translate","$uibModalInstance","Variable","xAlert",function(a,b,c,d,e){a.form={},a.item={},a.save=function(){return d.save(a.item).$promise.then(function(a){e.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)})["catch"](function(a){e.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.variables.list",{url:"/list",templateUrl:"app/tools/variable/list/list.html",controller:"VariableListCtrl"})}]),angular.module("xCallyShuttleApp").factory("Variable",["$resource",function(a){return a("/api/variables/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.variables",{url:"/variables",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:54}}})}]),angular.module("xCallyShuttleApp").controller("VariableViewCtrl",["$scope","$translate","$stateParams","xAlert","Variable",function(a,b,c,d,e){a.getVariable=function(){return e.get({id:c.id}).$promise.then(function(b){a.variable=b})["catch"](function(a){d.error(a)})},a.updateVariable=function(){return e.update({id:c.id},a.variable).$promise.then(function(){d.show(b.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){d.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.variables.view",{url:"/view/:id",templateUrl:"app/tools/variable/view/view.html",controller:"VariableViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.tools.variables.view.settings",{url:"/settings",templateUrl:"app/tools/variable/view/view.settings.html"})}]),angular.module("xCallyShuttleApp").controller("YourdashboardListCloneModalCtrl",["$scope","$uibModalInstance",function(a,b){a.forms={dashboard:void 0},a.item={},a.ok=function(){b.close(a.item)},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("YourdashboardListCreateModalCtrl",["$scope","$uibModalInstance",function(a,b){a.forms={dashboard:void 0},a.item={},a.ok=function(){a.item.model=JSON.stringify({title:a.item.name}),b.close(a.item)},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("YourdashboardListCtrl",["$scope","$http","$translate","xAlert","Modal","$uibModal","$log","YourDashboard","gridOptions",function(a,b,c,d,e,f,g,h,i){a.initView=function(){var b={exporterCsvFilename:"voice_contexts.csv",columnDefs:[{name:"name"},{name:"description"},{name:"action",width:125,buttons:[{"class":"green",href:"/tools/yourdashboards/show/{{row.entity.id}}",name:"view"},{"class":"blue-hoki",href:"/tools/yourdashboards/view/{{row.entity.id}}/settings",name:"settings"},{"class":"{{row.entity.defaultEntry ? 'red-sunglo disabled' : 'red-sunglo'}}",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"},{"class":"purple",name:"clone",onClick:"grid.appScope.clone(row.entity.id)"}]}]};a.gridOptions=i.gridOptions(h,b,a)},a.create=function(){var b=f.open({animation:!0,templateUrl:"app/tools/yourdashboard/list/create.modal.html",controller:"YourdashboardListCreateModalCtrl"});b.result.then(function(b){return h.save(b).$promise.then(function(){d.show(c.instant("MESSAGE_WELL_DONE"),"success"),a.gridOptions.getPage()})["catch"](function(a){console.error(a),d.error(a)})},function(){g.info("Modal dismissed at: "+new Date)})},a.clone=function(b){var e=f.open({animation:!0,templateUrl:"app/tools/yourdashboard/list/clone.modal.html",controller:"YourdashboardListCloneModalCtrl"});e.result.then(function(e){return h.save({id:b,controller:"clone"},e).$promise.then(function(){d.show(c.instant("MESSAGE_WELL_DONE"),"success"),a.gridOptions.getPage()})["catch"](function(a){console.error(a),d.error(a)})},function(){g.info("Modal dismissed at: "+new Date)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.yourdashboards.list",{url:"/list",templateUrl:"app/tools/yourdashboard/list/list.html",controller:"YourdashboardListCtrl",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:59}}})}]),angular.module("xCallyShuttleApp").controller("LeaveEditedDashboardModalCtrl",["$scope","$uibModalInstance",function(a,b){a.close=function(){b.close()},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("YourdashboardShowCtrl",["$scope","$rootScope","localStorageService","xAlert","$translate","Auth","$stateParams","$location","$uibModal","$log","YourDashboard",function(a,b,c,d,e,f,g,h,i,j,k){function l(a){var b,c;if(!a)return 0;for(a=a.toString(),b=c=a.length;b--;){var d=a[b].charCodeAt();d>=56320&&57343>=d&&b--,d>127&&2047>=d?c++:d>2047&&65535>=d&&(c+=2)}return c}a.Auth=f,a.editMode=!1,a.getDashboard=function(){return k.get({id:g.id}).$promise.then(function(b){!b[f.getRole()]&&h.path("/landing");var c={name:"dashboard",structure:"4-8",enableconfirmdelete:!0,maximizable:!0,collapsible:!0};b.model=JSON.parse(b.model||'{"title":"Dashboard"}'),b.editable=!(!f.isAdmin()||!b.editable),a.dashboard=_.merge(c,b)})["catch"](function(a){h.path("/tools/yourdashboards/list")})},a.$on("$locationChangeStart",function(b,c,d){if(a.editMode){b.preventDefault();var e=i.open({animation:!0,templateUrl:"app/tools/yourdashboard/show/leaveEditedDashboard.modal.html",controller:"LeaveEditedDashboardModalCtrl"});e.result.then(function(b){a.editMode=!1;var d=location.protocol+"//"+location.host;h.path(c.replace(d,""))},function(){j.info("Modal dismissed at: "+new Date)})}});var m=function(c,f,h){var i=angular.copy(a.dashboard);return i.name=a.dashboard.model.title,i.model=JSON.stringify(i.model),l(i.model)<=64e3?k.update({id:g.id},i).$promise.then(function(){d.show(e.instant("MESSAGE_DASHBOARD_SAVED")+"!","success"),a.editMode=!1})["catch"](function(b){d.error(b),i.model=JSON.parse(i.model),i.name="dashboard",a.dashboard=i}):(d.show(e.instant("MESSAGE_DASHBOARD_TOO_BIG")+"!","warning"),void b.$broadcast("adfToggleEditMode"))};a.$on("adfDashboardChanged",m),a.$on("adfIsEditMode",function(){a.editMode=!0}),a.$on("destroy",function(){console.log("main dashboard")})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.yourdashboards.show",{url:"/show/:id",templateUrl:"app/tools/yourdashboard/show/show.html",controller:"YourdashboardShowCtrl",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:2}}})}]),angular.module("xCallyShuttleApp").controller("YourdashboardViewCtrl",["$scope","$rootScope","xAlert","$translate","$stateParams","$location","YourDashboard",function(a,b,c,d,e,f,g){a.radioSwitch={isActive:!0,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.getDashboard=function(){return g.get({id:e.id}).$promise.then(function(b){delete b.model,a.dashboard=b})["catch"](function(){f.path("/tools/yourdashboards/list")})},a.updateDashboard=function(){var b=angular.copy(a.dashboard);return g.update({id:e.id},b).$promise.then(function(){c.show(d.instant("MESSAGE_WELL_DONE")+"!","success")})["catch"](function(d){c.error(d),a.dashboard=b})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.yourdashboards.view",{url:"/view/:id",templateUrl:"app/tools/yourdashboard/view/view.html",controller:"YourdashboardViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]},data:{permissions:{only:["admin","user"],redirectTo:"landing",id:59}}}).state("main.tools.yourdashboards.view.settings",{url:"/settings",templateUrl:"app/tools/yourdashboard/view/view.settings.html"})}]),angular.module("xCallyShuttleApp").factory("YourDashboard",["$resource",function(a){return a("/api/dashboards/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.yourdashboards",{url:"/yourdashboards",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("ZendeskListCtrl",["$scope","ZendeskAccount","gridOptions","xAlert","$translate",function(a,b,c,d,e){a.initView=function(){var d={exporterCsvFilename:"zendesk_account.csv",columnDefs:[{name:"name",displayName:"APPLICATION_NAME"},{name:"username"},{name:"remoteUri",displayName:"APPLICATION_URI"},{name:"action",buttons:[{"class":"blue-hoki",href:"/zendesk/view/{{row.entity.id}}/account",name:"profile"},{"class":"green-jungle",name:"check",onClick:"grid.appScope.checkAccount(row.entity.id)"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=c.gridOptions(b,d,a)},a.checkAccount=function(a){return b.check({id:a}).$promise.then(function(){d.show(e.instant("MESSAGE_ACCOUNT_VERIFIED"),"success")})["catch"](function(){d.show(e.instant("MESSAGE_ACCOUNT_INVALID"),"danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.zendesk.list",{url:"/list",templateUrl:"app/zendesk/list/list.html",controller:"ZendeskListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"smart-table",insertBefore:"#ng_load_plugins_before",files:["assets/css/smart_table.css"]}])}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.zendesk.view.configurations",{url:"/configurations",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("ZendeskViewConfigurationListCtrl",["$scope","$stateParams","$translate","gridOptions","ZendeskConfiguration","$uibModal",function(a,b,c,d,e,f){a.initView=function(){var c={exporterCsvFilename:"zendesk_configurations.csv",columnDefs:[{name:"name"},{name:"description"},{name:"action",width:125,buttons:[{"class":"blue-hoki",href:"/zendesk/view/{{row.entity.AccountId}}/configurations/view/{{row.entity.id}}",name:"profile"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=d.gridOptions(e,c,a,{accountId:b.id})},a.createItem=function(){var b=f.open({animation:!0,templateUrl:"app/zendesk/view/configuration/list/create.modal.html",controller:"ZendeskCreateConfigurationCtrl"});b.result.then(function(){a.gridOptions.getPage()})}}]),angular.module("xCallyShuttleApp").controller("ZendeskCreateConfigurationCtrl",["$scope","$translate","$uibModalInstance","ZendeskConfiguration","xAlert","$stateParams","channel",function(a,b,c,d,e,f,g){a.form={},a.item={},a.channels=g,a.item.channel="voice",a.item.type="Queue",a.save=function(){return d.save({accountId:f.id},a.item).$promise.then(function(a){e.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)})["catch"](function(a){e.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.zendesk.view.configurations.list",{url:"/list",templateUrl:"app/zendesk/view/configuration/list/list.html",controller:"ZendeskViewConfigurationListCtrl"})}]),angular.module("xCallyShuttleApp").controller("ZendeskViewConfigurationViewCtrl",["$scope","$stateParams","$filter","$translate","socket","ZendeskConfiguration","xAlert","variable","Variable","ZendeskAccount","Tag","ZendeskField",function(a,b,c,d,e,f,g,h,i,j,k,l){a.$on("$destroy",function(){e.unsyncUpdates("zendesk_field")}),a.config={autoHideScrollbar:!1,theme:"dark",advanced:{updateOnContentResize:!0},setHeight:300,scrollInertia:0},a.fieldType=[{type:"string",title:"String"},{type:"variable",title:"Variable"},{type:"customVariable",title:"Custom Variable"}],a.descFieldType=[{type:"string",title:"String"},{type:"keyValue",title:"Key Value"}],a.groupVariableByGroup=function(a){switch(a.group){case"voice_queue":return"Voice: Queue";case"voice_outbound":return"Voice: Outbound";default:return"Other"}},a.initView=function(){a.configurationName="",a.subjectConfig=[],a.descriptionConfig=[],a.fieldConfig=[],a.selectedTags={tags:[]},a.variables=h},a.getConfiguration=function(){return f.get({accountId:b.id,id:b.configurationId}).$promise.then(function(b){a.configurationName=b.name,a.subjectConfig=b.Subject,a.descriptionConfig=b.Description,a.fieldConfig=b.Field,a.selectedTags={tags:_.map(b.Tags,function(a){return a.id})},e.socket.on("zendesk_field:remove",function(b){_.remove(a.subjectConfig,{id:b.id}),_.remove(a.descriptionConfig,{id:b.id}),_.remove(a.fieldConfig,{id:b.id})})})["catch"](function(a){g.error(a)})},a.getCustomVariables=function(){return i.get().$promise.then(function(b){a.customVariables=b.rows})["catch"](function(a){g.error(a)})},a.getFields=function(){return j.fields({id:b.id}).$promise.then(function(b){a.accountFields=c("zendesk")(b)})["catch"](function(a){g.error(a)})},a.getTags=function(){return k.get().$promise.then(function(b){a.tags=b.rows})["catch"](function(a){g.error(a)})},a.addItem=function(c){var d={};switch(c){case"subject":case"description":d={type:"string",content:""};break;case"field":d={content:""}}return f.save({accountId:b.id,id:b.configurationId,controller:c},d).$promise.then(function(b){switch(c){case"subject":a.subjectConfig.push(b);break;case"description":a.descriptionConfig.push(b);break;case"field":a.fieldConfig.push(b)}})["catch"](function(a){g.error(a)})},a.changeType=function(b){"variable"===b.type?(b.content="",b.variableName=""):"string"===b.type?(b.VariableId=null,b.variableName=""):"customVariable"===b.type&&(b.VariableId=null,b.content=""),a.updateField(b)},a.updateField=function(a){return l.update({accountId:b.id,configurationId:b.configurationId,id:a.id},a).$promise.then(function(){})["catch"](function(a){g.error(a)})},a.removeItem=function(a){return l["delete"]({accountId:b.id,configurationId:b.configurationId,id:a.id}).$promise.then(function(){g.show(d.instant("MESSAGE_WELL_DONE")+"!","success")})["catch"](function(a){g.error(a)})},a.changeDescType=function(b){"keyValue"===b.type?(b.content="","string"===b.keyType?(b.VariableId=null,b.variableName=""):"variable"===b.keyType?(b.keyContent="",b.VariableId=null):"customVariable"===b.keyType&&(b.keyContent="",b.variableName="")):"string"===b.type&&(b.VariableId=null,b.variableName="",b.key="",b.keyContent=""),a.updateField(b)},a.changeFieldType=function(b){if(b.content="",b.variableName="",b.nameField="",b.VariableId=null,b.idField){var c=_.find(a.accountFields,"id",b.idField);c&&(c.system_field_options?(b.customField=!1,b.nameField=c.title.toLowerCase()):b.customField=!0)}a.updateField(b)},a.updateTags=function(){return f.update({accountId:b.id, -id:b.configurationId,controller:"tags"},a.selectedTags.tags).$promise.then(function(){g.show(d.instant("MESSAGE_WELL_DONE")+".","success")})["catch"](function(a){g.error(a)})},a.getSystemFieldOptions=function(b){if(b){var c=_.find(a.accountFields,"id",b);return c?c.system_field_options?c.system_field_options:null:void 0}}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.zendesk.view.configurations.view",{url:"/view/:configurationId",templateUrl:"app/zendesk/view/configuration/view/view.html",controller:"ZendeskViewConfigurationViewCtrl"})}]),angular.module("xCallyShuttleApp").controller("ZendeskViewCtrl",["$scope","$stateParams","$translate","xAlert","Modal","ZendeskAccount",function(a,b,c,d,e,f){a.initView=function(){return f.get({id:b.id}).$promise.then(function(b){a.account=b})["catch"](function(a){d.error(a)})},a.updateItem=function(){return f.update({id:b.id},a.account).$promise.then(function(){d.show(c.instant("MESSAGE_WELL_DONE")+".","success")})["catch"](function(a){d.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.zendesk.view",{url:"/view/:id",templateUrl:"app/zendesk/view/view.html",controller:"ZendeskViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.zendesk.view.account",{url:"/account",templateUrl:"app/zendesk/view/view.account.html"})}]),angular.module("xCallyShuttleApp").controller("ZendeskWizardCtrl",["$scope","$http","$location","$translate","xAlert","WizardHandler","ZendeskAccount",function(a,b,c,d,e,f,g){a.translate=d,a.initWizard=function(){a.$translate=d,a.forms={},a.item={},a.item.authType="password",a.item.serverUrl=c.protocol()+"://"+location.host},a.next=function(){f.wizard().next()},a.exitValidation=function(a){return a},a.createItem=function(){return g.save(a.item).$promise.then(function(){e.show(d.instant("MESSAGE_WELL_DONE")+".","success"),c.path("/zendesk/list")})["catch"](function(a){e.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.zendesk.wizard",{url:"/wizard",templateUrl:"app/zendesk/wizard/wizard.html",controller:"ZendeskWizardCtrl"})}]),angular.module("xCallyShuttleApp").factory("ZendeskAccount",["$resource",function(a){return a("/api/zendesk/accounts/:id/:controller",{id:"@id"},{update:{method:"PUT"},fields:{params:{controller:"fields"},isArray:!0},check:{params:{controller:"check"}}})}]).factory("ZendeskConfiguration",["$resource",function(a){return a("/api/zendesk/accounts/:accountId/configurations/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]).factory("ZendeskField",["$resource",function(a){return a("/api/zendesk/accounts/:accountId/configurations/:configurationId/fields/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.zendesk",{url:"/zendesk",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").factory("Auth",["$location","$rootScope","$http","User","$cookieStore","$q","localStorageService",function(a,b,c,d,e,f,g){var h={};return e.get("token")&&(h=d.me()),{login:function(a,i){var j=i||angular.noop,k=f.defer();return c.post("/auth/local",{name:a.name,password:a.password,remember:a.remember}).success(function(a){return e.put("role",a.role),e.put("token",a.token),e.put("userId",a.userId),g.set("loggedIn",!0),h=d.me({},function(){b.$broadcast("login")}),k.resolve(a),j()}).error(function(a){return this.logout(),k.reject(a),j(a)}.bind(this)),k.promise},recover:function(a,b){var d=b||angular.noop,e=f.defer();return c.post("/auth/local/recover",{email:a.email}).success(function(a){return e.resolve(a),d()}).error(function(a){return e.reject(a),d(a)}.bind(this)),e.promise},reset:function(a,b){var d=b||angular.noop,e=f.defer();return c.post("/auth/local/reset/"+a.token,{password:a.password}).success(function(a){return e.resolve(a),d()}).error(function(a){return e.reject(a),d(a)}.bind(this)),e.promise},loginWithToken:function(a,c,f){e.put("role",f),e.put("token",a),e.put("userId",c),h=d.me({},function(){b.$broadcast("login")})},logout:function(){e.remove("role"),e.remove("token"),e.remove("userId"),g.set("loggedIn"),h={},b.$broadcast("logout")},createUser:function(a,b){var c=b||angular.noop;return d.save(a,function(b){return e.put("token",b.token),h=d.me(),c(a)},function(a){return this.logout(),c(a)}.bind(this)).$promise},changePassword:function(a,b,c){var e=c||angular.noop;return d.changePassword({id:h.id},{oldPassword:a,newPassword:b},function(a){return e(null,a)},function(a){return e(a)}).$promise},getCurrentUser:function(){return h},isLoggedIn:function(){return h.hasOwnProperty("role")},isLoggedInAsync:function(a){h.hasOwnProperty("$promise")?h.$promise.then(function(){a(!0)})["catch"](function(){a(!1)}):a(h.hasOwnProperty("role")?!0:!1)},isAdmin:function(){return"admin"===(e.get("role")||h.role)},isUser:function(){return"user"===(e.get("role")||h.role)},isAgent:function(){return"agent"===(e.get("role")||h.role)},getRole:function(){return h.role},getToken:function(){return e.get("token")}}}]),angular.module("xCallyShuttleApp").directive("actionBuilderAccountEmail",["$compile","$timeout","MailAccount","xAlert","Template",function(a,b,c,d,e){return{restrict:"E",scope:{element:"=",form:"="},templateUrl:"components/directives/action/accountEmail/actionBuilder.html",compile:function(f){function g(a,b){var c=[];for(a=a||5,b=b||"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";--a;)c.push(b.charAt(Math.floor(Math.random()*b.length)));return c.join("")}var h,i;return h=f.contents().remove(),function(f,j){f.randomName=g(),b(function(){return c.get().$promise.then(function(a){return _.forEach(a.rows,function(a){a.id=String(a.id)}),f.accounts=a,e.get().$promise}).then(function(a){_.forEach(a.rows,function(a){a.id=String(a.id)}),f.templates=a.rows})["catch"](function(a){d.error(a)})}),i||(i=a(h)),j.append(i(f,function(a){return a}))}}}}]),angular.module("xCallyShuttleApp").directive("actionBuilderAccountSms",["$compile","$timeout","SmsAccount","xAlert",function(a,b,c,d){return{restrict:"E",scope:{element:"=",form:"="},templateUrl:"components/directives/action/accountSms/actionBuilder.html",compile:function(e){function f(a,b){var c=[];for(a=a||5,b=b||"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";--a;)c.push(b.charAt(Math.floor(Math.random()*b.length)));return c.join("")}var g,h;return g=e.contents().remove(),function(e,i){e.randomName=f(),b(function(){return c.get().$promise.then(function(a){_.forEach(a.rows,function(a){a.id=String(a.id)}),e.accounts=a})["catch"](function(a){d.error(a)})}),h||(h=a(g)),i.append(h(e,function(a){return a}))}}}}]),angular.module("xCallyShuttleApp").directive("actionBuilderAccountTemplate",["$compile","xAlert","$http","$timeout","Template","MailAccount",function(a,b,c,d,e,f){return{restrict:"E",scope:{element:"=",form:"="},templateUrl:"components/directives/action/accountTemplate/actionBuilder.html",compile:function(c){function g(a,b){var c=[];for(a=a||5,b=b||"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";--a;)c.push(b.charAt(Math.floor(Math.random()*b.length)));return c.join("")}var h,i;return h=c.contents().remove(),function(c,j){c.randomName=g(),d(function(){return e.get().$promise.then(function(a){_.forEach(a.rows,function(a){a.id=String(a.id)}),c.templates=a}).then(function(){return f.get()}).then(function(a){c.accounts=a})["catch"](function(a){b.error(a)})}),i||(i=a(h)),j.append(i(c,function(a){return a}))}}}}]),angular.module("xCallyShuttleApp").directive("actionBuilderClose",["$compile",function(a){return{restrict:"E",scope:{element:"=",form:"="},templateUrl:"components/directives/action/close/actionBuilder.html",compile:function(b){function c(a,b){var c=[];for(a=a||5,b=b||"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";--a;)c.push(b.charAt(Math.floor(Math.random()*b.length)));return c.join("")}var d,e;return d=b.contents().remove(),function(b,f){b.randomName=c(),e||(e=a(d)),f.append(e(b,function(a){return a}))}}}}]),angular.module("xCallyShuttleApp").directive("actionBuilderEmail",["$compile","xAlert","$timeout","Template",function(a,b,c,d){return{restrict:"E",scope:{element:"=",form:"="},templateUrl:"components/directives/action/email/actionBuilder.html",compile:function(e){function f(a,b){var c=[];for(a=a||5,b=b||"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";--a;)c.push(b.charAt(Math.floor(Math.random()*b.length)));return c.join("")}var g,h;return g=e.contents().remove(),function(e,i){e.randomName=f(),c(function(){return d.get().$promise.then(function(a){_.forEach(a.rows,function(a){a.id=String(a.id)}),e.templates=a.rows})["catch"](function(a){b.error(a)})}),h||(h=a(g)),i.append(h(e,function(a){return a}))}}}}]),angular.module("xCallyShuttleApp").directive("actionBuilderForward",["$compile",function(a){return{restrict:"E",scope:{element:"=",form:"="},templateUrl:"components/directives/action/forward/actionBuilder.html",compile:function(b){function c(a,b){var c=[];for(a=a||5,b=b||"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";--a;)c.push(b.charAt(Math.floor(Math.random()*b.length)));return c.join("")}var d,e;return d=b.contents().remove(),function(b,f){b.randomName=c(),e||(e=a(d)),f.append(e(b,function(a){return a}))}}}}]),angular.module("xCallyShuttleApp").directive("actionBuilderHttp",["$compile",function(a){return{restrict:"E",scope:{element:"=",form:"="},templateUrl:"components/directives/action/http/actionBuilder.html",compile:function(b){function c(a,b){var c=[];for(a=a||5,b=b||"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";--a;)c.push(b.charAt(Math.floor(Math.random()*b.length)));return c.join("")}var d,e;return d=b.contents().remove(),function(b,f){b.randomName=c(),b.methods=["GET","POST"],e||(e=a(d)),f.append(e(b,function(a){return a}))}}}}]),angular.module("xCallyShuttleApp").directive("actionBuilderIntegration",["$compile","xAlert","$http","$timeout","Integration","$translate","ZendeskAccount","DeskAccount","SalesforceAccount","FreshdeskAccount","SugarcrmAccount",function(a,b,c,d,e,f,g,h,i,j,k){return{restrict:"E",scope:{element:"=",form:"="},templateUrl:"components/directives/action/integration/actionBuilder.html",compile:function(c){function f(a,b){var c=[];for(a=a||5,b=b||"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";--a;)c.push(b.charAt(Math.floor(Math.random()*b.length)));return c.join("")}var l,m;return l=c.contents().remove(),function(c,n){c.randomName=f(),d(function(){return e.get({active:1}).$promise.then(function(a){_.remove(a.rows,function(a){return"iframe"===a.state}),c.integrations=a.rows,c.element.data1&&o()})["catch"](function(a){b.error(a)})});var o=function(){var a;switch(c.element.data1){case"zendesk":a=g;break;case"desk":a=h;break;case"salesforce":a=i;break;case"freshdesk":a=j;break;case"sugarcrm":a=k}return a?a.get().$promise.then(function(a){c.accounts=a.rows,c.element.data2&&p()})["catch"](function(a){b.error(a)}):void 0},p=function(){c.configurations=_.find(c.accounts,{id:Number(c.element.data2)}).Configurations};c.changeIntegration=function(){c.element.data2="",o()},c.changeAccount=function(){c.element.data3="",p()},m||(m=a(l)),n.append(m(c,function(a){return a}))}}}}]),angular.module("xCallyShuttleApp").directive("actionBuilderJscripty",["$compile","xAlert","$http","$timeout","Template","$translate","JscriptyProject",function(a,b,c,d,e,f,g){return{restrict:"E",scope:{element:"=",form:"="},templateUrl:"components/directives/action/jscripty/actionBuilder.html",compile:function(c){var e,f;return e=c.contents().remove(),function(c,h){function i(a,b){var c=[];for(a=a||5,b=b||"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";--a;)c.push(b.charAt(Math.floor(Math.random()*b.length)));return c.join("")}c.randomName=i(),d(function(){return g.get().$promise.then(function(a){_.forEach(a.rows,function(a){a.id=String(a.id)}),c.projects=a.rows})["catch"](function(a){b.error(a)})}),f||(f=a(e)),h.append(f(c,function(a){return a}))}}}}]),angular.module("xCallyShuttleApp").directive("actionBuilderMotionBar",["$compile","xAlert","$http","$timeout","Template",function(a,b,c,d,e){return{restrict:"E",scope:{element:"=",form:"="},templateUrl:"components/directives/action/motionbar/actionBuilder.html",compile:function(c){var f,g;return f=c.contents().remove(),function(c,h){function i(){return e.get().$promise.then(function(a){_.forEach(a.rows,function(a){a.id=String(a.id)}),c.templates=a.rows})["catch"](function(a){b.error(a)})}function j(a,b){var c=[];for(a=a||5,b=b||"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";--a;)c.push(b.charAt(Math.floor(Math.random()*b.length)));return c.join("")}c.randomName=j(),c.motionActions=[{name:"Popup",value:"0"},{name:"URL",value:"1"},{name:"Windows App",value:"2"}],c.changeMode=function(){c.element.data2="",c.element.data3="",i()},d(function(){return i()}),g||(g=a(f)),h.append(g(c,function(a){return a}))}}}}]),angular.module("xCallyShuttleApp").directive("actionBuilderStatus",["$compile",function(a){return{restrict:"E",scope:{element:"=",form:"="},templateUrl:"components/directives/action/status/actionBuilder.html",compile:function(b){var c,d;return c=b.contents().remove(),function(b,e){function f(a,b){var c=[];for(a=a||5,b=b||"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";--a;)c.push(b.charAt(Math.floor(Math.random()*b.length)));return c.join("")}b.randomName=f(),b.states=[{name:"APPLICATION_STATUS_NEW",value:"NEW"},{name:"APPLICATION_STATUS_OPEN",value:"OPEN"},{name:"APPLICATION_STATUS_PENDING",value:"PENDING"},{name:"APPLICATION_STATUS_CLOSED",value:"CLOSED"}],d||(d=a(c)),e.append(d(b,function(a){return a}))}}}}]),angular.module("xCallyShuttleApp").directive("actionBuilderTag",["$compile","xAlert","$http","$timeout","Tag",function(a,b,c,d,e){return{restrict:"E",scope:{myElement:"=element",form:"="},templateUrl:"components/directives/action/tag/actionBuilder.html",compile:function(c){function f(a,b){var c=[];for(a=a||5,b=b||"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";--a;)c.push(b.charAt(Math.floor(Math.random()*b.length)));return c.join("")}var g,h;return g=c.contents().remove(),function(c,i){console.log("myElement",c.myElement),c.randomName=f(),c.data={tags:c.myElement.data1?c.myElement.data1.split(";"):[]},c.$watch("data.tags",function(a){c.myElement.data1=a.join(";")}),d(function(){return e.get().$promise.then(function(a){c.tags=a.rows})["catch"](function(a){b.error(a)})}),h||(h=a(g)),i.append(h(c,function(a){return a}))}}}}]),angular.module("xCallyShuttleApp").directive("actionBuilderTemplate",["$compile","xAlert","$timeout","Template",function(a,b,c,d){return{restrict:"E",scope:{element:"=",form:"="},templateUrl:"components/directives/action/template/actionBuilder.html",compile:function(e){function f(a,b){var c=[];for(a=a||5,b=b||"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";--a;)c.push(b.charAt(Math.floor(Math.random()*b.length)));return c.join("")}var g,h;return g=e.contents().remove(),function(e,i){e.randomName=f(),c(function(){return d.get().$promise.then(function(a){_.forEach(a.rows,function(a){a.id=String(a.id)}),e.templates=a.rows})["catch"](function(a){b.error(a)})}),h||(h=a(g)),i.append(h(e,function(a){return a}))}}}}]),angular.module("xCallyShuttleApp").directive("actionBuilderUrlForward",["$compile",function(a){return{restrict:"E",scope:{element:"=",form:"="},templateUrl:"components/directives/action/urlforward/actionBuilder.html",compile:function(b){function c(a,b){var c=[];for(a=a||5,b=b||"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";--a;)c.push(b.charAt(Math.floor(Math.random()*b.length)));return c.join("")}var d,e;return d=b.contents().remove(),function(b,f){b.randomName=c(),b.types=[{name:"HTTP GET",value:"GET"},{name:"HTTP POST",value:"POST"}],e||(e=a(d)),f.append(e(b,function(a){return a}))}}}}]),angular.module("xCallyShuttleApp").directive("conditionBuilder",["$compile","$timeout","$translate","xAlert",function(a,b,c,d){return{restrict:"E",scope:{element:"=",serviceindex:"=",service:"=",form:"="},templateUrl:"components/directives/condition/conditionBuilder.html",compile:function(e){var f,g;return f=e.contents().remove(),function(e,h){function i(a){var b=_.find(e.service.services[e.serviceindex].conditions,{value:a});if(b)if(e.elementType=b.type,b.arr)e.values=b.arr;else if(b.resource)return b.resource.get(b.params||{}).$promise.then(function(a){e.values=_.map(a.rows,function(a){return{name:a[b.resName||b.resValue],value:a[b.resValue]}})})["catch"](function(a){d.show(c.instant(a.message),"danger")})}function j(a,b){var c=[];for(a=a||5,b=b||"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";--a;)c.push(b.charAt(Math.floor(Math.random()*b.length)));return c.join("")}e._=_,e.randomName=j(),b(function(){e.element.field&&i(e.element.field)}),e.checkCondition=function(a){e.element.value="",e.element.operator="",i(a)},g||(g=a(f)),h.append(g(e,function(a){return a}))}}}}]),angular.module("xCallyShuttleApp").factory("xNotificationLicense",["Notification","$rootScope","$location",function(a,b,c){return{show:function(d){var e=b.$new();return e["class"]="alert-warning",e.icon="fa fa-exclamation-triangle",e.more=function(){c.path("/setting/license/view")},new a({delay:d,templateUrl:"components/factories/xNotificationLicense/xNotificationLicense.html",scope:e})}}}]),angular.module("xCallyShuttleApp").filter("secToTime",[function(){return function(a){return new Date(1970,0,1).setSeconds(a)}}]),angular.module("xCallyShuttleApp").controller("FooterController",["$scope","Setting",function(a,b){a.year=moment().year(),a.$on("$includeContentLoaded",function(){Layout.initFooter()}),a.initFooter=function(){return b.get({controller:"info"}).$promise.then(function(b){a.info=b})["catch"](function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").controller("HeaderController",["$scope","$rootScope","$location","$state","$http","$interval","$notification","Auth","xAlert","socket","xNotificationLicense","toastr","localStorageService","Agent","SmsReport","MailReport","OpenChannelReport","ChatReport","ChatRoom","xNotification","$timeout","$translate","$window","User","Pause","Action","FaxReport","List","MailAccount","ChatWebsite","FaxAccount","SmsAccount","OpenChannelAccount","ReportAgent","$uibModal","$log","ReportDial",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K){function L(a,b,c){return null===b&&(b=50),null===c&&(c="..."),a&&a.length>b?a.substring(0,b-c.length)+c:a}function M(b){var c,d="reason";switch(b){case"mail":c=p;break;case"chat":c=r;break;case"fax":c=A;break;case"sms":c=o;break;case"agent":c=H,d="lastevent";break;case"dial":c=K,d="dialstatus";break;case"openchannel":c=q;break;default:return}return c.get({limit:10,order:"updatedAt DESC"}).$promise.then(function(c){_.forEach(c.rows,function(a){if(a[d])switch(a[d].toLowerCase()){case"answer":case"connect":case"complete":a.status="taken";break;case"answered_elsewhere":a.status="taken_elsewhere";break;case"called":a.status="lost";break;case"busy":a.status="busy";break;case"rejected":a.status="rejected";break;case"cancel":case"abandoned":a.status="abandoned"}}),a.agentNotifications[b].rows=c.rows,j.socket.on("report_"+b+":save",function(c){c.status="none",a.agentNotifications[b].rows.unshift(c),"agent"!==b&&"dial"!==b&&(a.agentNotifications[b].timeout[c.id]=setTimeout(function(){clearTimeout(a.agentNotifications[b].timeout[c.id]),_.find(a.agentNotifications[b].rows,{id:c.id}).status="lost",angular.element(document.getElementById("header_"+b+"_notification_bar")).hasClass("open")||a.agentNotifications[b]["new"]++,delete a.agentNotifications[b].timeout[c.id]},1e3*c.timeslot))}),j.socket.on("report_"+b+":update",function(c){if("agent"===b){var e=_.find(a.activeCalls,{id:c.id});e&&(c.agentcomplete||c.agentringnoanswer||c.agentdump)?_.remove(a.activeCalls,{id:c.id}):!c.agentconnectAt||c.agentcomplete||c.agentringnoanswer||c.agentdump||a.activeCalls.push(c)}var f=_.find(a.agentNotifications[b].rows,{id:c.id});if(f&&("agent"!==b&&"dial"!==b&&a.agentNotifications[b].timeout[c.id]&&(clearTimeout(a.agentNotifications[b].timeout[c.id]),delete a.agentNotifications[b].timeout[c.id]),c[d])){switch(c[d].toLowerCase()){case"answer":case"connect":case"complete":c.status="taken";break;case"answered_elsewhere":c.status="taken_elsewhere",angular.element(document.getElementById("header_"+b+"_notification_bar")).hasClass("open")||a.agentNotifications.chat["new"]++;break;case"busy":c.status="busy",angular.element(document.getElementById("header_"+b+"_notification_bar")).hasClass("open")||a.agentNotifications[b]["new"]++;break;case"rejected":c.status="rejected";break;case"cancel":case"abandoned":c.status="abandoned",angular.element(document.getElementById("header_"+b+"_notification_bar")).hasClass("open")||a.agentNotifications[b]["new"]++}_.merge(f,c)}})})["catch"](function(a){i.error(a)})}function N(){return a.headerAgent=h.getCurrentUser(),a.readyTimer=1e3*moment().unix(),y.get().$promise.then(function(b){a.headerPauses=b.rows,j.syncUpdates("pause",a.headerPauses)}).then(function(){j.socket.on("agent:save",function(b){a.headerAgent.id===b.id&&(_.merge(a.headerAgent,b),b.voicePause&&b.mailPause&&b.chatPause&&b.faxPause&&b.smsPause&&b.openchannelPause||(a.readyTimer=1e3*moment().unix()))})})["finally"](function(){h.getCurrentUser().loginInPause&&!m.get("loggedIn")&&a.headerPause("pause")})["catch"](function(a){console.log("Error synchronizing agent status:",a)})}function O(){return H.get({id:"active",controller:"calls"}).$promise.then(function(b){a.activeCalls=b.rows})["catch"](function(a){i.error(a)})}a.moment=moment,$(document).on("click",".tabbed-dropdown",function(a){a.stopPropagation()}),a.license.token!==a.license.token2&&(h.isAdmin()||h.isUser())&&f(function(){"main.setting.license.view"!==d.current.name&&k.show(3e4)},3e4),a.openRoom=function(b,c){var d=_.find(a.workspaces,{id:b,type:c});if(d)d.active=!0;else{var e;switch(c){case"mailRoom":e="icon-envelope";break;case"chatRoom":e="fa fa-users";break;case"faxRoom":e="fa fa-fax";break;case"smsRoom":e="glyphicon glyphicon-comment";break;case"openchannelRoom":e="icon-globe"}a.workspaces.push({id:b,type:c,"class":e,active:!0})}},a.toggleSidebar=function(){b.settings.layout.pageSidebarClosed=!b.settings.layout.pageSidebarClosed,m.set("sidebarClosed",b.settings.layout.pageSidebarClosed)},a.chooseContact=function(b){var c=I.open({animation:!0,templateUrl:"app/main/chooseContact.modal.html",controller:"ChooseContactModalCtrl",resolve:{data:function(){return{type:"detail",phone:b,mobile:b}}}});c.result.then(function(c){c?a.openContactTab(c):a.newContact({calleridnum:b})},function(){J.info("Modal dismissed at: "+new Date)})},a.loadNotifications=function(b){if(!a.busyLoad[b].end){a.busyLoad[b].busy=!0;var c,d="reason";switch(b){case"mail":c=p;break;case"chat":c=r;break;case"fax":c=A;break;case"sms":c=o;break;case"agent":c=H,d="lastevent";break;case"dial":c=K,d="dialstatus";break;case"openchannel":c=q;break;default:return}return c.get({limit:10,offset:a.agentNotifications[b].rows.length,order:"updatedAt DESC"}).$promise.then(function(c){c.rows.length?(_.forEach(c.rows,function(a){if(a[d])switch(a[d].toLowerCase()){case"answer":case"connect":case"complete":a.status="taken";break;case"answered_elsewhere":a.status="taken_elsewhere";break;case"called":a.status="lost";break;case"busy":a.status="busy";break;case"rejected":a.status="rejected";break;case"abandoned":a.status="abandoned"}}),a.agentNotifications[b].rows=a.agentNotifications[b].rows.concat(c.rows)):a.busyLoad[b].end=!0,a.busyLoad[b].busy=!1})["catch"](function(a){i.error(a)})}},a.headerPause=function(b,c,d){return z.save({name:b,agent:a.headerAgent.id,type:c||"DEFAULT PAUSE",data4:c||"DEFAULT PAUSE",channel:d||"all"}).$promise.then(function(){i.show(v.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){i.error(a)})},h.isAgent()&&(N(),a.agentNotifications={mail:{rows:[],"new":0,timeout:{}},chat:{rows:[],"new":0,timeout:{}},fax:{rows:[],"new":0,timeout:{}},sms:{rows:[],"new":0,timeout:{}},agent:{rows:[],"new":0},dial:{rows:[],"new":0},openchannel:{rows:[],"new":0}},a.busyLoad={mail:{busy:!1,end:!1},chat:{busy:!1,end:!1},fax:{busy:!1,end:!1},sms:{busy:!1,end:!1},agent:{busy:!1,end:!1},dial:{busy:!1,end:!1},openchannel:{busy:!1,end:!1}},O(),M("agent"),M("dial"),a.license.mail&&M("mail"),a.license.chat&&M("chat"),a.license.fax&&M("fax"),a.license.messaging&&M("sms"),a.license.openchannel&&M("openchannel")),j.socket.on("user_has_chat_room:save",function(b){var c;return s.get({id:Number(b.ChatRoomId)}).$promise.then(function(b){console.log("chatRoom",b),c=b;var d=_.find(a.workspaces,{id:Number(c.id),type:"chatRoom"});d?d.name=a.getFullnames(c):a.workspaces.push({id:c.id,name:a.getFullnames(c),type:"chatRoom","class":"icon-bubble",unread:1})})["catch"](function(a){console.error(a)})}),j.socket.on("chat_message:save",function(b){var c;if(b.UserId!==h.getCurrentUser().id){var d=_.find(a.workspaces,{id:Number(b.ChatRoomId),type:"chatRoom"});if(!d)return s.get({id:Number(b.ChatRoomId)}).$promise.then(function(b){c=b,a.workspaces.push({id:c.id,name:a.getFullnames(b),type:"chatRoom","class":"icon-bubble",unread:1})})["catch"](function(a){console.error(a)})}});var P=function(){return w.Notification},Q=function(){b.settings.layout.onFocus=!0},R=function(){b.settings.layout.onFocus=!1};w.onfocus=Q,w.onblur=R,a.getFullnames=function(a){var b=_.map(a.Users,"fullname");return a.ChatVisitor&&b.unshift(a.ChatVisitor.fullname),_.without(b,h.getCurrentUser().fullname).join(", ")},a.openContact=function(b,c,d){if(d&&"<unknown>"!==d){var e,f;switch(b){case"mail":e=C,f={email:d};break;case"chat":e=D,f={email:d};break;case"fax":e=E,f={fax:d};break;case"sms":e=F,f={mobile:d};break;default:return}return e.get({id:c}).$promise.then(function(a){return a.ListId?B.save({listId:a.ListId,controller:"contacts"},f).$promise:null}).then(function(b){if(b){var c=_.find(a.workspaces,{contactID:b.id});c?c.active=!0:a.workspaces.push({active:!0,"class":"icon-user",contactID:b.id,name:b.email,type:"contact"})}else i.show(v.instant("MESSAGE_NO_LIST_CONFIGURED"),"info")})["catch"](function(a){console.error(a)})}},a.initHeader=function(){"agent"===h.getCurrentUser().role&&(j.socket.on("report_chat:save",function(a){P&&!b.settings.layout.onFocus&&g("CHAT CHANNEL",{icon:"assets/images/media/channels/chat64.png",body:"NEW Incoming Chat Visitor!",delay:1e3*a.timeslot});var c="<b>"+v.instant("APPLICATION_FROM")+"</b>: "+a.visitorname+"<br><b>"+v.instant("APPLICATION_EMAIL")+"</b>: "+a.visitoremail;"queue"===a.application&&(c+="<br><b>"+v.instant("APPLICATION_QUEUE")+"</b>: "+a.queuename),t.show(v.instant("APPLICATION_NEW_CHAT_REQUEST"),c,"chat",1e3*a.timeslot,function(){return r.get({id:a.id,controller1:"accept",controller2:a.uniqueid}).$promise.then(function(){i.show("Chat properly assigned","success")})["catch"](function(a){switch(a.status){case 504:i.show(v.instant("MESSAGE_CHAT_ALREADY_MANAGED"),"info");break;default:i.error(a)}})},function(){return r.get({id:a.id,controller1:"reject"}).$promise.then(function(){i.show("Chat properly rejected","success")})["catch"](function(a){i.error(a)})})}),j.socket.on("report_mail:save",function(c){var d=_.find(a.workspaces,{id:c.roomid,type:"mailRoom"});if(!d){var e="<b>"+v.instant("APPLICATION_ACCOUNT")+"</b>: "+c.accountname+"<br> <b>"+v.instant("APPLICATION_FROM")+"</b>: "+c.from+"<br> <b>"+v.instant("APPLICATION_SUBJECT")+"</b>: "+(L(c.subject,30,"...")||"No subject");"queue"===c.application&&(e+="<br><b>"+v.instant("APPLICATION_QUEUE")+"</b>: "+c.queuename),t.show(v.instant("APPLICATION_NEW_MAIL_REQUEST"),e,"mail",1e3*c.timeslot,function(){return p.get({id:c.id,controller1:"accept",controller2:c.uniqueid}).$promise.then(function(){var b=_.find(a.workspaces,{id:c.roomid,type:"mailRoom"});b?b.active=!0:a.workspaces.push({id:c.roomid,name:c.subject||"No subject",type:"mailRoom","class":"icon-envelope",active:!0,unread:0})})["catch"](function(a){switch(a.status){case 504:i.show(v.instant("MESSAGE_MAIL_ALREADY_MANAGED"),"info");break;default:i.error(a)}})},function(){return p.get({id:c.id,controller1:"reject"}).$promise["catch"](function(a){i.error(a)})}),P&&!b.settings.layout.onFocus?g("MAIL CHANNEL",{icon:"assets/images/media/channels/mail64.png",body:"NEW Incoming Mail Message!",delay:1e3*c.timeslot}):console.log("Notification API not supported in your browser")}}),j.socket.on("report_sms:save",function(b){var c="<b>"+v.instant("APPLICATION_ACCOUNT")+"</b>: "+b.accountname+"<br> <b>"+v.instant("APPLICATION_FROM")+"</b>: "+b.from;"queue"===b.application&&(c+="<br><b>"+v.instant("APPLICATION_QUEUE")+"</b>: "+b.queuename),t.show(v.instant("APPLICATION_NEW_SMS_REQUEST"),c,"sms",1e3*b.timeslot,function(){return o.get({id:b.id,controller1:"accept",controller2:b.uniqueid}).$promise.then(function(){var c=_.find(a.workspaces,{id:b.roomid,type:"smsRoom"});c?c.active=!0:a.workspaces.push({id:b.roomid,name:b.from,type:"smsRoom","class":"glyphicon glyphicon-comment",active:!0})})["catch"](function(a){switch(a.status){case 504:i.show(v.instant("MESSAGE_SMS_ALREADY_MANAGED"),"info");break;default:i.error(a)}})},function(){return o.get({id:b.id,controller1:"reject"}).$promise.then(function(){i.show("SMS properly rejected","success")})["catch"](function(a){i.error(a)})}),P?g("SMS CHANNEL",{icon:"assets/images/media/channels/chat64.png",body:"NEW Incoming SMS Message!",delay:1e3*b.timeslot}):console.log("Notification API not supported in your browser")}),j.socket.on("report_openchannel:save",function(b){var c="<b>"+v.instant("APPLICATION_ACCOUNT")+"</b>: "+b.accountname+"<br> <b>"+v.instant("APPLICATION_FROM")+"</b>: "+b.from;"queue"===b.application&&(c+="<br><b>"+v.instant("APPLICATION_QUEUE")+"</b>: "+b.queuename),t.show(v.instant("APPLICATION_NEW_MESSAGE"),c,"openchannel",1e3*b.timeslot,function(){return q.get({id:b.id,controller1:"accept",controller2:b.uniqueid}).$promise.then(function(){var c=_.find(a.workspaces,{id:b.roomid,type:"openchannelRoom"});c?c.active=!0:a.workspaces.push({id:b.roomid,name:b.from,type:"openchannelRoom","class":"icon-globe",active:!0})})["catch"](function(a){switch(a.status){case 504:i.show(v.instant("MESSAGE_ALREADY_MANAGED"),"info");break;default:i.error(a)}})},function(){return q.get({id:b.id,controller1:"reject"}).$promise.then(function(){i.show("Message properly rejected","success")})["catch"](function(a){i.error(a)})}),P?g("OPEN CHANNEL",{icon:"assets/images/media/channels/chat64.png",body:"NEW Incoming Message!",delay:1e3*b.timeslot}):console.log("Notification API not supported in your browser")}),j.socket.on("report_fax:save",function(c){var d=_.find(a.workspaces,{id:c.roomid,type:"faxRoom"});if(!d){var e="<b>"+v.instant("APPLICATION_ACCOUNT")+"</b>: "+c.accountname+"<br> <b>"+v.instant("APPLICATION_PHONE")+"</b>: "+c.from;"queue"===c.application&&(e+="<br><b>"+v.instant("APPLICATION_QUEUE")+"</b>: "+c.queuename),t.show(v.instant("APPLICATION_NEW_FAX_REQUEST"),e,"fax",1e3*c.timeslot,function(){return A.get({id:c.id,controller1:"accept",controller2:c.uniqueid}).$promise.then(function(){var b=_.find(a.workspaces,{id:c.roomid,type:"faxRoom"});b?b.active=!0:a.workspaces.push({id:c.roomid,name:c.from,type:"faxRoom","class":"fa fa-fax",active:!0,unread:0})})["catch"](function(a){switch(a.status){case 504:i.show(v.instant("MESSAGE_FAX_ALREADY_MANAGED"),"info");break;default:i.error(a)}})},function(){return A.get({id:c.id,controller1:"reject"}).$promise["catch"](function(a){i.err(a)})}),P&&!b.settings.layout.onFocus?g("FAX CHANNEL",{icon:"assets/images/media/channels/telephone124.png",body:"NEW Incoming Fax Message!",delay:1e3*c.timeslot}):console.log("Notification API not supported in your browser")}})); -},a.logout=function(){return e.get("/auth/local/logout").success(function(){h.logout(),c.path("/login")}).error(function(a){console.error(a)})},a.isActive=function(a){return a===c.path()},a.$on("$destroy",function(){console.log("header $destroy"),j.unsyncUpdates("pause"),j.unsyncUpdates("agent"),j.unsyncUpdates("report_chat"),j.unsyncUpdates("report_mail"),j.unsyncUpdates("report_fax"),j.unsyncUpdates("report_sms"),j.unsyncUpdates("report_openchannel"),j.unsyncUpdates("user_has_chat_room"),j.unsyncUpdates("chat_message")})}]),angular.module("xCallyShuttleApp").factory("Modal",["$rootScope","$uibModal",function(a,b){function c(c,d){var e=a.$new();return c=c||{},d=d||"modal-default",angular.extend(e,c),b.open({templateUrl:"components/modal/delete.html",windowClass:d,scope:e})}return{confirm:{"delete":function(a){return a=a||angular.noop,function(){var b,d=Array.prototype.slice.call(arguments),e=d.shift();b=c({modal:{dismissable:!0,title:"Confirm Delete",html:"<p>Are you sure you want to delete"+(e?"<strong> "+e+"</strong>":" selected items")+"?</p>",buttons:[{classes:"btn red",text:"Delete",click:function(a){b.close(a)}},{classes:"btn default",text:"Cancel",click:function(a){b.dismiss(a)}}]}},"over-topbar center"),b.result.then(function(b){a.apply(b,d)})}}}}}]),angular.module("xCallyShuttleApp").service("application",function(){var a={applications:[{type:null,name:"APPLICATION_QUEUE",value:"Queue"},{type:null,name:"APPLICATION_PLAYBACK",value:"Playback"},{type:null,name:"Dial",value:"Dial"},{type:"internalDial",name:"APPLICATION_INTERNAL_DIAL",value:"Dial"},{type:"externalDial",name:"APPLICATION_EXTERNAL_DIAL",value:"Dial"},{type:"RingGroup",name:"Ring Group",value:"Dial"},{type:null,name:"Cally-Square Project",value:"AGI"},{type:null,name:"GoTo",value:"Goto"},{type:null,name:"Hangup",value:"Hangup"},{type:null,name:"Set",value:"Set"},{type:"custom",name:"Custom",value:"custom"},{type:null,name:"APPLICATION_VOICEMAIL",value:"Voicemail"}],queueOptions:[{value:"C",name:"APPLICATION_QUEUE_OPTION_C"},{value:"c",name:"APPLICATION_QUEUE_OPTION_c"},{value:"d",name:"APPLICATION_QUEUE_OPTION_d"},{value:"F",name:"APPLICATION_QUEUE_OPTION_F"},{value:"h",name:"APPLICATION_QUEUE_OPTION_h"},{value:"H",name:"APPLICATION_QUEUE_OPTION_H"},{value:"n",name:"APPLICATION_QUEUE_OPTION_n"},{value:"i",name:"APPLICATION_QUEUE_OPTION_i"},{value:"I",name:"APPLICATION_QUEUE_OPTION_I"},{value:"r",name:"APPLICATION_QUEUE_OPTION_r"},{value:"R",name:"APPLICATION_QUEUE_OPTION_R"},{value:"t",name:"APPLICATION_QUEUE_OPTION_t"},{value:"T",name:"APPLICATION_QUEUE_OPTION_T"},{value:"w",name:"APPLICATION_QUEUE_OPTION_w"},{value:"W",name:"APPLICATION_QUEUE_OPTION_W"},{value:"k",name:"APPLICATION_QUEUE_OPTION_k"},{value:"K",name:"APPLICATION_QUEUE_OPTION_K"},{value:"x",name:"APPLICATION_QUEUE_OPTION_x"},{value:"X",name:"APPLICATION_QUEUE_OPTION_X"}],audioOptions:[{value:"skip",name:"APPLICATION_PLAYBACK_OPTION_SKIP"},{value:"noanswer",name:"APPLICATION_PLAYBACK_OPTION_NOANSWER"},{value:"j",name:"APPLICATION_PLAYBACK_OPTION_J"},{value:"say",name:"APPLICATION_PLAYBACK_OPTION_SAY"}],hangupCauses:[{value:"",name:"--"},{value:"1",name:"APPLICATION_HANGUP_CAUSE_1"},{value:"16",name:"APPLICATION_HANGUP_CAUSE_16"},{value:"17",name:"APPLICATION_HANGUP_CAUSE_17"},{value:"18",name:"APPLICATION_HANGUP_CAUSE_18"},{value:"21",name:"APPLICATION_HANGUP_CAUSE_21"},{value:"22",name:"APPLICATION_HANGUP_CAUSE_22"},{value:"27",name:"APPLICATION_HANGUP_CAUSE_27"},{value:"38",name:"APPLICATION_HANGUP_CAUSE_38"},{value:"41",name:"APPLICATION_HANGUP_CAUSE_41"}],intTypes:[{value:"always",name:"APPLICATION_ALWAYS"},{value:"custom",name:"APPLICATION_CUSTOM"},{value:"list",name:"APPLICATION_FROM_LIST"}],checkUnderscore:function(a){return 0===a.indexOf("_")?a:"_"+a}};return{application:a}}),angular.module("xCallyShuttleApp").service("automations",function(){var a={mail:{conditions:[{name:"APPLICATION_STATUS",value:"status",type:"select",arr:[{name:"APPLICATION_STATUS_NEW",value:"NEW"},{name:"APPLICATION_STATUS_OPEN",value:"OPEN"},{name:"APPLICATION_STATUS_CLOSED",value:"CLOSED"},{name:"APPLICATION_STATUS_PENDING",value:"PENDING"}],operators:[{value:"equals",name:"APPLICATION_EQUALS_TO"},{value:"not_equals",name:"APPLICATION_NOT_EQUALS_TO"}]},{name:"APPLICATION_HOURS_SINCE_CREATED",value:"createdAt",type:"input",operators:[{value:"greater_or_equal",name:"APPLICATION_GTE_TO"},{value:"less_or_equal",name:"APPLICATION_LTE_TO"},{value:"greater",name:"APPLICATION_GREATER_THAN"},{value:"less",name:"APPLICATION_LESS_THAN"}]}],actions:[{name:"APPLICATION_STATUS",value:"status"}]},chat:{conditions:[{name:"APPLICATION_STATUS",value:"status",type:"select",arr:[{name:"APPLICATION_STATUS_NEW",value:"NEW"},{name:"APPLICATION_STATUS_OPEN",value:"OPEN"},{name:"APPLICATION_STATUS_CLOSED",value:"CLOSED"},{name:"APPLICATION_STATUS_PENDING",value:"PENDING"}],operators:[{value:"equals",name:"APPLICATION_EQUALS_TO"},{value:"not_equals",name:"APPLICATION_NOT_EQUALS_TO"}]},{name:"APPLICATION_HOURS_SINCE_CREATED",value:"createdAt",type:"input",operators:[{value:"greater_or_equal",name:"APPLICATION_GTE_TO"},{value:"less_or_equal",name:"APPLICATION_LTE_TO"},{value:"greater",name:"APPLICATION_GREATER_THAN"},{value:"less",name:"APPLICATION_LESS_THAN"}]}],actions:[{name:"APPLICATION_STATUS",value:"status"}]},fax:{conditions:[{name:"APPLICATION_STATUS",value:"status",type:"select",arr:[{name:"APPLICATION_STATUS_NEW",value:"NEW"},{name:"APPLICATION_STATUS_OPEN",value:"OPEN"},{name:"APPLICATION_STATUS_CLOSED",value:"CLOSED"}],operators:[{value:"equals",name:"APPLICATION_EQUALS_TO"},{value:"not_equals",name:"APPLICATION_NOT_EQUALS_TO"}]},{name:"APPLICATION_HOURS_SINCE_CREATED",value:"createdAt",type:"input",operators:[{value:"greater_or_equal",name:"APPLICATION_GTE_TO"},{value:"less_or_equal",name:"APPLICATION_LTE_TO"},{value:"greater",name:"APPLICATION_GREATER_THAN"},{value:"less",name:"APPLICATION_LESS_THAN"}]}],actions:[{name:"APPLICATION_STATUS",value:"status"}]}},b=["mail","fax","chat"];return{services:a,channels:b}}),angular.module("xCallyShuttleApp").service("channel",function(){var a=[{name:"Voice",value:"voice"}];return a}),angular.module("xCallyShuttleApp").service("desk_com",function(){var a=[{id:"priority",label:"Priority",custom:!1,data:{choices:[1,2,3,4,5,6,7,8,9,10]}},{id:"status",label:"Status",custom:!1,data:{choices:["new","open","pending","resolved","closed"]}},{id:"type",label:"Type",custom:!1,data:{choices:["chat","twitter","email","qna","facebook","phone"]}}];return{fields:a}}),angular.module("xCallyShuttleApp").service("interval",function(){var a={months:[{value:"always",name:"APPLICATION_ALWAYS"},{value:"jan",name:"APPLICATION_JANUARY"},{value:"feb",name:"APPLICATION_FEBRUARY"},{value:"mar",name:"APPLICATION_MARCH"},{value:"apr",name:"APPLICATION_APRIL"},{value:"may",name:"APPLICATION_MAY"},{value:"jun",name:"APPLICATION_JUNE"},{value:"jul",name:"APPLICATION_JULY"},{value:"aug",name:"APPLICATION_AUGUST"},{value:"sep",name:"APPLICATION_SEPTEMBER"},{value:"oct",name:"APPLICATION_OCTOBER"},{value:"nov",name:"APPLICATION_NOVEMBER"},{value:"dec",name:"APPLICATION_DECEMBER"}],monthsNumber:[{value:"always",name:"APPLICATION_ALWAYS"},{value:"1",name:"APPLICATION_JANUARY"},{value:"2",name:"APPLICATION_FEBRUARY"},{value:"3",name:"APPLICATION_MARCH"},{value:"4",name:"APPLICATION_APRIL"},{value:"5",name:"APPLICATION_MAY"},{value:"6",name:"APPLICATION_JUNE"},{value:"7",name:"APPLICATION_JULY"},{value:"8",name:"APPLICATION_AUGUST"},{value:"9",name:"APPLICATION_SEPTEMBER"},{value:"10",name:"APPLICATION_OCTOBER"},{value:"11",name:"APPLICATION_NOVEMBER"},{value:"12",name:"APPLICATION_DECEMBER"}],daysOfWeek:[{value:"always",name:"APPLICATION_ALWAYS"},{value:"mon",name:"APPLICATION_MONDAY"},{value:"tue",name:"APPLICATION_TUESDAY"},{value:"wed",name:"APPLICATION_WEDNESDAY"},{value:"thu",name:"APPLICATION_THURSDAY"},{value:"fri",name:"APPLICATION_FRIDAY"},{value:"sat",name:"APPLICATION_SATURDAY"},{value:"sun",name:"APPLICATION_SUNDAY"}],daysOfMonth:["always",1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31]};return{interval:a}}),angular.module("xCallyShuttleApp").service("report",["ReportAgent","ReportCall","ReportMailSession","ReportMember","ReportQueue","ReportIntegration","ReportChatSession","ReportSmsSession","Contact","Recording","ReportSquare","ReportSquareDetail","User","ReportFaxSession","MailRoom","MailMessage","FaxRoom","FaxMessage","ChatRoom","ChatMessage","SmsRoom","SmsMessage","OpenChannelRoom","OpenChannelMessage","ReportOpenChannelSession","ReportMotionDialer","UserHasVoiceQueue",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A){var B=[{value:"users",resource:m,channel:"General"},{value:"cm_contacts",resource:i,channel:"General"},{value:"report_integration_history",resource:f,channel:"General"},{value:"report_agent_history",resource:a,channel:"Voice"},{value:"report_call_history",resource:b,channel:"Voice"},{value:"report_member_history",resource:d,channel:"Voice"},{value:"report_queue_history",resource:e,channel:"Voice"},{value:"voice_recordings",resource:j,channel:"Voice"},{value:"report_square_history",resource:k,channel:"Voice"},{value:"report_square_details_history",resource:l,channel:"Voice"},{value:"report_tdial",resource:z,channel:"Voice"},{value:"report_chat_session_history",resource:g,channel:"Chat"},{value:"chat_rooms",resource:s,channel:"Chat"},{value:"chat_messages",resource:t,channel:"Chat"},{value:"report_mail_session_history",resource:c,channel:"Mail"},{value:"mail_rooms",resource:o,channel:"Mail"},{value:"mail_messages",resource:p,channel:"Mail"},{value:"report_fax_session_history",resource:n,channel:"Fax"},{value:"fax_rooms",resource:q,channel:"Fax"},{value:"fax_messages",resource:r,channel:"Fax"},{value:"report_sms_session_history",resource:h,channel:"Sms"},{value:"sms_rooms",resource:u,channel:"Sms"},{value:"sms_messages",resource:v,channel:"Sms"},{value:"report_openchannel_session_history",resource:y,channel:"Open Channel"},{value:"openchannel_rooms",resource:w,channel:"Open Channel"},{value:"openchannel_messages",resource:x,channel:"Open Channel"},{value:"user_has_voice_queues",resource:A,channel:"Voice"}];return{tables:B}}]),angular.module("xCallyShuttleApp").service("strategies",function(){return["beepall","roundrobin","rrmemory"]}),angular.module("xCallyShuttleApp").service("triggers",["VoiceQueue","Route",function(a,b){var c={voice:{conditions:[{name:"APPLICATION_QUEUE",value:"queue",type:"select",resource:a,resValue:"name",operators:[{value:"equals",name:"APPLICATION_EQUALS_TO"},{value:"not_equals",name:"APPLICATION_NOT_EQUALS_TO"}]},{name:"APPLICATION_CALL_STATUS",value:"lastevent",type:"select",arr:[{name:"ringing",value:"called"},{name:"up",value:"connect"},{name:"hangup",value:"complete"},{name:"rejected",value:"rejected"},{name:"abandoned",value:"abandoned"}],operators:[{value:"equals",name:"APPLICATION_EQUALS_TO"},{value:"not_equals",name:"APPLICATION_NOT_EQUALS_TO"}]},{name:"APPLICATION_OUTBOUND_ROUTE",value:"routeId",type:"select",resource:b,resValue:"id",resName:"exten",params:{type:"outbound"},operators:[{value:"equals",name:"APPLICATION_EQUALS_TO"},{value:"not_equals",name:"APPLICATION_NOT_EQUALS_TO"}]}],actions:[{name:"APPLICATION_CONTACT_MANAGER",value:"contactManager"},{name:"APPLICATION_INTEGRATIONS",value:"integration",propertyField:"select"},{name:"APPLICATION_MOTION_BAR",value:"motionbar",propertyField:"select"},{name:"APPLICATION_JSCRIPTY",value:"jscripty",propertyField:"select"},{name:"APPLICATION_URL_FORWARD",value:"urlForward"}]},mail:{conditions:[{name:"APPLICATION_FROM",value:"from",type:"input",operators:[{value:"contains",name:"APPLICATION_CONTAINS"},{value:"not_contains",name:"APPLICATION_NOT_CONTAINS"}]},{name:"APPLICATION_TO",value:"to",type:"input",operators:[{value:"contains",name:"APPLICATION_CONTAINS"},{value:"not_contains",name:"APPLICATION_NOT_CONTAINS"}]},{name:"APPLICATION_CC",value:"cc",type:"input",operators:[{value:"contains",name:"APPLICATION_CONTAINS"},{value:"not_contains",name:"APPLICATION_NOT_CONTAINS"}]},{name:"APPLICATION_SUBJECT",value:"subject",type:"input",operators:[{value:"equals",name:"APPLICATION_EQUALS_TO"},{value:"not_equals",name:"APPLICATION_NOT_EQUALS_TO"},{value:"contains",name:"APPLICATION_CONTAINS"},{value:"not_contains",name:"APPLICATION_NOT_CONTAINS"}]},{name:"APPLICATION_BODY",value:"text",type:"input",operators:[{value:"equals",name:"APPLICATION_EQUALS_TO"},{value:"not_equals",name:"APPLICATION_NOT_EQUALS_TO"},{value:"contains",name:"APPLICATION_CONTAINS"},{value:"not_contains",name:"APPLICATION_NOT_CONTAINS"}]}],actions:[{name:"APPLICATION_TEMPLATE",value:"template"},{name:"APPLICATION_EMAIL",value:"email"},{name:"APPLICATION_EMAIL_FROM_ACCOUNT",value:"accountEmail"},{name:"APPLICATION_SMS",value:"accountSms"},{name:"APPLICATION_FORWARD",value:"forward"},{name:"APPLICATION_TAG",value:"tag"},{name:"APPLICATION_HTTP_REQUEST",value:"http"},{name:"APPLICATION_CLOSE",value:"close"}]},chat:{conditions:[{name:"APPLICATION_NAME",value:"fullname",type:"input",operators:[{value:"equals",name:"APPLICATION_EQUALS_TO"},{value:"not_equals",name:"APPLICATION_NOT_EQUALS_TO"}]},{name:"APPLICATION_EMAIL",value:"email",type:"input",operators:[{value:"contains",name:"APPLICATION_CONTAINS"},{value:"not_contains",name:"APPLICATION_NOT_CONTAINS"}]}],actions:[{name:"APPLICATION_EMAIL_FROM_ACCOUNT",value:"accountEmail"},{name:"APPLICATION_SMS",value:"accountSms"},{name:"APPLICATION_TEMPLATE",value:"accountTemplate"},{name:"APPLICATION_TAG",value:"tag"},{name:"APPLICATION_HTTP_REQUEST",value:"http"},{name:"APPLICATION_CLOSE",value:"close"}]},sms:{conditions:[{name:"APPLICATION_FROM",value:"from",type:"input",operators:[{value:"contains",name:"APPLICATION_CONTAINS"},{value:"not_contains",name:"APPLICATION_NOT_CONTAINS"}]},{name:"APPLICATION_BODY",value:"body",type:"input",operators:[{value:"equals",name:"APPLICATION_EQUALS_TO"},{value:"not_equals",name:"APPLICATION_NOT_EQUALS_TO"},{value:"contains",name:"APPLICATION_CONTAINS"},{value:"not_contains",name:"APPLICATION_NOT_CONTAINS"}]}],actions:[{name:"APPLICATION_EMAIL_FROM_ACCOUNT",value:"accountEmail"},{name:"APPLICATION_SMS",value:"accountSms"},{name:"APPLICATION_TEMPLATE",value:"accountTemplate"},{name:"APPLICATION_TAG",value:"tag"},{name:"APPLICATION_HTTP_REQUEST",value:"http"},{name:"APPLICATION_CLOSE",value:"close"}]}},d=["voice","mail","chat","sms"];return{services:c,channels:d}}]),angular.module("xCallyShuttleApp").service("variable",function(){var a=[{title:"Unique ID",name:"uniqueid",group:"voice_queue"},{title:"Caller Number",name:"calleridnum",group:"voice_queue"},{title:"Caller Name",name:"calleridname",group:"voice_queue"},{title:"Queue",name:"queue",group:"voice_queue"},{title:"Called Number",name:"destcalleridnum",group:"voice_queue"},{title:"Called Name",name:"destcalleridname",group:"voice_queue"},{title:"Hold Time",name:"holdtime",group:"voice_queue"},{title:"Talk Time",name:"talktime",group:"voice_queue"},{title:"Connected Time",name:"agentconnectAt",group:"voice_queue"},{title:"Called Time",name:"agentcalledAt",group:"voice_queue"},{title:"DNID",name:"destexten",group:"voice_queue"},{title:"Complete Time",name:"agentcompleteAt",group:"voice_queue"},{title:"No Answer Time",name:"agentringnoanswerAt",group:"voice_queue"},{title:"Recording URL",name:"recordingURL",group:"voice_queue"},{title:"Unique ID",name:"uniqueid",group:"voice_outbound"},{title:"Caller Number",name:"calleridnum",group:"voice_outbound"},{title:"Caller Name",name:"calleridname",group:"voice_outbound"},{title:"Called Number",name:"destcalleridnum",group:"voice_outbound"},{title:"Called Name",name:"destcalleridname",group:"voice_outbound"},{title:"Start Time",name:"starttime",group:"voice_outbound"},{title:"Answer Time",name:"answertime",group:"voice_outbound"},{title:"Complete Time",name:"endtime",group:"voice_outbound"},{title:"Recording URL",name:"recordingURL",group:"voice_outbound"},{title:"Member Name",name:"membername",group:"voice_outbound"}];return a}),angular.module("xCallyShuttleApp").controller("SidebarController",["$scope","$rootScope","$resource","$location","Auth","Dashboard","Integration","xAlert","$stateParams","socket","$uibModal","Setting",function(a,b,c,d,e,f,g,h,i,j,k,l){a.Auth=e,a.$on("$includeContentLoaded",function(){Metronic.init(),Layout.initSidebar()}),a.getSidebarDashboards=function(){return f.get().$promise.then(function(a){b.dashboards=a.rows,j.syncUpdates("dashboard",b.dashboards)})["catch"](function(){h.show("Error loading your dashboards","danger")})},a.about=function(){k.open({animation:!0,size:"sm",templateUrl:"app/main/about.modal.html",controller:["$scope","$uibModalInstance",function(a,b){a.year=moment().year(),a.getInfo=function(){return l.get({controller:"info"}).$promise.then(function(b){a.info=b})["catch"](function(a){console.error(a)})},a.close=function(){b.dismiss("cancel")}}]})},a.getSidebarIntegrations=function(){return e.isAdmin()||e.isAgent()||b.userModules[19]?g.get().$promise.then(function(b){a.integrations=b.rows,j.syncUpdates("integration",a.integrations)})["catch"](function(a){h.error(a)}):void 0},a.$on("sidebar $destroy",function(){console.log("destroy"),j.unsyncUpdates("dashboard"),j.unsyncUpdates("integration")})}]),angular.module("xCallyShuttleApp").factory("socket",["$rootScope","$window","socketFactory","Auth",function(a,b,c,d){var e=d.getCurrentUser(),f=io("",{query:"token="+d.getToken()+"&userId="+e.id+"&name="+e.name+"&role="+(e.role||"agent")+"&source=browser",path:"/socket.io-client"}),g=c({ioSocket:f});return a.$on("logout",function(){g&&(g.disconnect(!0),b.location.reload())}),{socket:g,syncUpdates:function(a,b,c){c=c||angular.noop,g.on(a+":save",function(a){var d=_.find(b,{id:a.id}),e=b.indexOf(d),f="created";d?(_.merge(b[e],a),f="updated"):b.unshift(a),c(f,a,b)}),g.on(a+":remove",function(a){var d="deleted";_.remove(b,{id:a.id}),c(d,a,b)})},unsyncUpdates:function(a){g.removeAllListeners(a+":save"),g.removeAllListeners(a+":update"),g.removeAllListeners(a+":remove")},syncUpdatesByAttributes:function(a,b,c,d){d=d||angular.noop,g.on(a+":save",function(a){var e=!0;if(_.forIn(b,function(b,c){return a[c]&&a[c]===b?!0:e=!1}),e){var f=_.find(c,{id:a.id}),g=c.indexOf(f),h="created";f?(_.merge(c[g],a),h="updated"):c.unshift(a),d(h,a,c)}}),g.on(a+":remove",function(a){var b="deleted";_.remove(c,{id:a.id}),d(b,a,c)})},syncMailMessageUpdates:function(a,b,c,d){d=d||angular.noop,g.on(a+":"+b+":save",function(a){var b=_.find(c,{id:a.id}),e=c.indexOf(b),f="created";b?(_.merge(c[e],a),f="updated"):c.unshift(a),d(f,a)}),g.on(a+":"+b+":remove",function(a){var b="deleted";_.remove(c,{id:a.id}),d(b,a,c)})},unsyncMailMessageUpdates:function(a,b){g.removeAllListeners(a+":"+b+":save"),g.removeAllListeners(a+":"+b+":remove")},syncFaxMessageUpdates:function(a,b,c,d){d=d||angular.noop,g.on(a+":"+b+":save",function(a){var b=_.find(c,{id:a.id}),e=c.indexOf(b),f="created";b?(_.merge(c[e],a),f="updated"):c.unshift(a),d(f,a)}),g.on(a+":"+b+":remove",function(a){var b="deleted";_.remove(c,{id:a.id}),d(b,a,c)})},unsyncFaxMessageUpdates:function(a,b){g.removeAllListeners(a+":"+b+":save"),g.removeAllListeners(a+":"+b+":remove")}}}]),function(a,b){angular.module("adf.widget.counter",["adf.provider"]).config(["dashboardProvider",function(a){a.widget("counter",{title:"Single Value",description:"Single Value for db results",templateUrl:"{widgetsPath}/counter/src/view.html",controller:"apiwidgetCounterViewCtrl",edit:{templateUrl:"{widgetsPath}/counter/src/edit.html",controller:"apiwidgetCounterEditCtrl"}})}]).service("apiServiceCounter",["Widget",function(a){return{get:function(b){return a.get({select:b.select,condition:encodeURIComponent(b.condition),table:b.report.replace("_history",""),controller:"counter"}).$promise.then(function(a){return a})["catch"](function(a){console.log(a)})}}}]).controller("apiwidgetCounterEditCtrl",["$scope","report",function(a,b){a.config.reportTables=b.tables,a.config.colors=[{name:"Grey",value:"grey"},{name:"Grey 2",value:"grey-cascade"},{name:"Grey 3",value:"grey-silver"},{name:"Grey 4",value:"grey-steel"},{name:"Grey 5",value:"grey-carrara"},{name:"Grey 6",value:"grey-gallery"},{name:"Blue",value:"blue"},{name:"Blue 2",value:"blue-hoki"},{name:"Blue 3",value:"blue-steel"},{name:"Blue 4",value:"blue-madison"},{name:"Blue 5",value:"blue-chambray"},{name:"Blue 6",value:"blue-ebonyclay"},{name:"Red",value:"red"},{name:"Red 2",value:"red-pink"},{name:"Red 3",value:"red-sunglo"},{name:"Red 4",value:"red-intense"},{name:"Red 5",value:"red-thunderbird"},{name:"Red 6",value:"red-flamingo"},{name:"Green",value:"green"},{name:"Green 2",value:"green-meadow"},{name:"Green 3",value:"green-seagreen"},{name:"Green 4",value:"green-turquoise"},{name:"Green 5",value:"green-haze"},{name:"Green 6",value:"green-jungle"},{name:"Purple",value:"purple"},{name:"Purple 2",value:"purple-plum"},{name:"Purple 3",value:"purple-medium"},{name:"Purple 4",value:"purple-studio"},{name:"Purple 5",value:"purple-wisteria"},{name:"Purple 6",value:"purple-seance"},{name:"Yellow",value:"yellow"},{name:"Yellow 2",value:"yellow-gold"},{name:"Yellow 3",value:"yellow-casablanca"},{name:"Yellow 4",value:"yellow-crusta"},{name:"Yellow 5",value:"yellow-lemon"},{name:"Yellow 6",value:"yellow-saffron"}],a.config.icons=[{name:"Talk bubbles",value:"fa-comments"},{name:"Bar Chart",value:"fa-bar-chart"},{name:"Shopping Cart",value:"fa-shopping-cart"},{name:"Globe",value:"fa-globe"},{name:"Volume Control Phone",value:"fa-volume-control-phone"},{name:"Comments",value:"fa-comments-o"},{name:"Commenting",value:"fa-commenting-o"},{name:"Coffee",value:"fa-coffee"},{name:"Clock",value:"fa-clock-o"},{name:"Envelope",value:"fa-envelope-o"},{name:"Hourglass",value:"fa-hourglass-half"},{name:"Percent",value:"fa-percent"}],a.config.select=a.config.select?a.config.select:"COUNT(*)",a.config.timeout=a.config.timeout>=5?a.config.timeout:5,a.config.color=a.config.color?a.config.color:"blue-madison",a.config.icon=a.config.icon?a.config.icon:"fa-comments",a.config.link=a.config.link?a.config.link:"#",a.config.linkText=a.config.linkText?a.config.linkText:"VIEW MORE"}]).controller("apiwidgetCounterViewCtrl",["$scope","$interval","apiServiceCounter",function(a,b,c){a.config.timeout=a.config.timeout>=5?a.config.timeout:5,a.config.condition=a.config.condition?a.config.condition:null,a.config.color=a.config.color?a.config.color:"blue-madison",a.config.icon=a.config.icon?a.config.icon:"fa-comments",a.config.link=a.config.link?a.config.link:"#",a.config.linkText=a.config.linkText?a.config.linkText:"VIEW MORE",a.counterApiCall=function(){a.config.report&&c.get(a.config).then(function(b){b?b.result&&b.result.length>1||_.keys(b.result[0]).length>1?(a.tooManyResults=!0,a.result=null):(a.tooManyResults=!1,null!==_.values(b.result[0])[0]?a.result=_.values(b.result[0])[0].toString():a.result="--"):a.result=null})},a.counterApiCall();var d=b(function(){a.counterApiCall()},1e3*parseInt(a.config.timeout));a.$on("$destroy",function(){b.cancel(d)})}]),angular.module("adf.widget.counter").run(["$templateCache",function(a){a.put("{widgetsPath}/counter/src/edit.html","<form role=form><div class=form-group><label for=select>Select</label> <input type=text class=form-control id=condition ng-model=config.select placeholder=Select></div><div class=form-group><label class=control-label>From</label><ui-select data-ng-model=config.report name=report theme=bootstrap><ui-select-match placeholder=From>{{'APPLICATION_'+$select.selected.value.toUpperCase() | translate}}</ui-select-match><ui-select-choices group-by=\"'channel'\" repeat=\"table.value as table in config.reportTables | filter: $select.search\"><div ng-bind-html=\"'APPLICATION_'+table.value.toUpperCase() | translate | highlight: $select.search\"></div></ui-select-choices></ui-select></div><div class=form-group><label for=condition>Where</label> <input type=text class=form-control id=condition ng-model=config.condition placeholder=Where></div><div class=form-group><label for=condition>{{'APPLICATION_REFRESH_TIMEOUT' | translate}}</label> <input type=number class=form-control id=timeout ng-model=config.timeout placeholder=\"{{'APPLICATION_REFRESH_TIMEOUT' | translate}}\" min=5></div><div class=form-group><label class=control-label>{{'APPLICATION_WIDGET_COLOR' | translate}}</label><ui-select data-ng-model=config.color name=color theme=bootstrap><ui-select-match placeholder=\"{{ 'APPLICATION_WIDGET_COLOR' | translate }}\"><div data-ng-class=\"'bg-'+$select.selected.value\"> </div></ui-select-match><ui-select-choices repeat=\"color.value as color in config.colors | filter: $select.search\"><div data-ng-class=\"'bg-'+color.value\"> </div></ui-select-choices></ui-select></div><div class=form-group><label class=control-label>{{'APPLICATION_WIDGET_ICON' | translate}}</label><ui-select data-ng-model=config.icon name=icon theme=bootstrap><ui-select-match placeholder=\"{{ 'APPLICATION_WIDGET_ICON' | translate }}\"><i class=fa ng-class=$select.selected.value></i></ui-select-match><ui-select-choices repeat=\"icon.value as icon in config.icons | filter: $select.search\"><i class=fa ng-class=icon.value></i></ui-select-choices></ui-select></div><div class=form-group><label for=condition>{{'APPLICATION_WIDGET_DETAILS' | translate}}</label> <input type=text class=form-control id=details ng-model=config.details maxlength=30 placeholder=\"{{'APPLICATION_WIDGET_DETAILS' | translate}}\"></div><div class=form-group><label for=condition>{{'APPLICATION_WIDGET_LINK' | translate}}</label> <input type=text class=form-control id=link ng-model=config.link placeholder=http://yourlink></div><div class=form-group><label for=condition>{{'APPLICATION_WIDGET_LINK_TEXT' | translate}}</label> <input type=text class=form-control id=linkText ng-model=config.linkText maxlength=30 placeholder=\"{{'APPLICATION_WIDGET_LINK_TEXT' | translate}}\"></div></form>"),a.put("{widgetsPath}/counter/src/view.html",'<div class=dashboard-stat ng-class=config.color ng-if=result><div class=visual><i class=fa ng-class=config.icon></i></div><div class=details><div class=number>{{result}}</div><div class=desc>{{config.details}}</div></div><a class=more href={{config.link}}>{{config.linkText}} <i class="m-icon-swapright m-icon-white"></i></a></div><div class="alert alert-danger" role=alert ng-if=!config.report><span class="glyphicon glyphicon-exclamation-sign" aria-hidden=true></span> <span class=sr-only>{{\'APPLICATION_ERROR\' | translate}}:</span> {{\'MESSAGE_WIDGET_SELECT_REPORT\' | translate}}</div><div class="alert alert-danger" role=alert ng-if=tooManyResults><span class="glyphicon glyphicon-exclamation-sign" aria-hidden=true></span> <span class=sr-only>{{\'APPLICATION_ERROR\' | translate}}:</span> {{\'MESSAGE_TOO_MANY_RESULTS\' | translate}}</div><div class="alert alert-danger" role=alert ng-if="!result && !tooManyResults"><span class="glyphicon glyphicon-exclamation-sign" aria-hidden=true></span> <span class=sr-only>{{\'APPLICATION_ERROR\' | translate}}:</span> {{\'MESSAGE_QUERY_NOT_VALID\' | translate}}</div>')}])}(window),function(a,b){angular.module("adf.widget.pie-chart",["adf.provider"]).config(["dashboardProvider",function(a){a.widget("pie-chart",{title:"Pie-Chart",description:"Display a pie-chart starting from DB values",templateUrl:"{widgetsPath}/pie-chart/src/view.html",controller:"apiWidgetPieChartViewCtrl",edit:{templateUrl:"{widgetsPath}/pie-chart/src/edit.html",controller:"apiWidgetPieChartEditCtrl"}})}]).service("apiServicePieChart",["Widget",function(a){return{get:function(b){return a.get({condition:encodeURIComponent(b.condition),table:b.report.replace("_history",""),fields:b.fields,controller:"piechart"}).$promise.then(function(a){return a})["catch"](function(a){console.log(a)})}}}]).controller("apiWidgetPieChartEditCtrl",["$scope","report",function(a,b){function c(){return a.config.fields||(a.config.fields=[{column:"",alias:""}]),a.config.fields}a.config.reportTables=b.tables,a.config.timeout=a.config.timeout>=5?a.config.timeout:5,a.config.fields=a.config.fields?a.config.fields:[{column:"",alias:""}],a.addField=function(){c().push({})},a.removeField=function(a){c().splice(a,1)}}]).controller("apiWidgetPieChartViewCtrl",["$scope","$interval","apiServicePieChart",function(a,b,c){a.config.timeout=a.config.timeout>=5?a.config.timeout:5,a.pieChartApiCall=function(){a.config.report&&a.config.fields.length&&""!==a.config.fields[0].column&&""!==a.config.fields[0].alias&&c.get(a.config).then(function(b){if(b&&b.result&&1===b.result.length){a.labels=[],a.data=[];for(var c in b.result[0])a.labels.push(c),a.data.push(b.result[0][c])}else a.labels=[],a.data=[]})},a.pieChartApiCall();var d=b(function(){a.pieChartApiCall()},1e3*parseInt(a.config.timeout));a.$on("$destroy",function(){b.cancel(d)})}]),angular.module("adf.widget.pie-chart").run(["$templateCache",function(a){a.put("{widgetsPath}/pie-chart/src/edit.html","<form role=form><div class=form-group><label class=control-label>{{'APPLICATION_REPORT' | translate}}</label><ui-select data-ng-model=config.report name=report theme=bootstrap><ui-select-match placeholder=\"{{ 'APPLICATION_REPORT' | translate }}\">{{'APPLICATION_'+$select.selected.value.toUpperCase() | translate}}</ui-select-match><ui-select-choices group-by=\"'channel'\" repeat=\"table.value as table in config.reportTables | filter: $select.search\"><div ng-bind-html=\"'APPLICATION_'+table.value.toUpperCase() | translate | highlight: $select.search\"></div></ui-select-choices></ui-select></div><div><label class=control-label>{{'APPLICATION_FIELDS' | translate}}</label></div><div class=padding-bottom ng-repeat=\"field in config.fields\"><div class=form-group><div class=input-group><input type=text class=form-control ng-model=field.column> <span class=input-group-addon>as</span> <input type=text class=form-control ng-model=field.alias> <span class=input-group-btn ng-if=\"config.fields.length>1\"><button class=\"btn btn-danger\" type=button data-ng-click=removeField($index)><i class=\"fa fa-times\"></i> {{'APPLICATION_REMOVE' | translate}}</button></span></div></div></div><button type=button class=\"btn btn-sm green mbottom20\" ng-click=addField()><i class=\"fa fa-plus\"></i> {{'APPLICATION_ADD_FIELD' | translate}}</button><div class=form-group><label for=condition>{{'APPLICATION_CONDITION' | translate}}</label> <input type=text class=form-control id=condition ng-model=config.condition placeholder=\"{{'APPLICATION_CONDITION' | translate}}\"></div><div class=form-group><label for=condition>{{'APPLICATION_REFRESH_TIMEOUT' | translate}}</label> <input type=number class=form-control id=timeout ng-model=config.timeout placeholder=\"{{'APPLICATION_REFRESH_TIMEOUT' | translate}}\" min=5></div></form>"),a.put("{widgetsPath}/pie-chart/src/view.html",'<div ng-if=labels.length ng-style=config.style><canvas id=doughnut class="chart chart-doughnut" chart-data=data chart-labels=labels legend=true></canvas></div><div class="alert alert-danger" role=alert ng-if=!config.report><span class="glyphicon glyphicon-exclamation-sign" aria-hidden=true></span> <span class=sr-only>{{\'APPLICATION_ERROR\' | translate}}:</span> {{\'MESSAGE_WIDGET_SELECT_REPORT\' | translate}}</div><div class="alert alert-danger" role=alert ng-if=!labels.length><span class="glyphicon glyphicon-exclamation-sign" aria-hidden=true></span> <span class=sr-only>{{\'APPLICATION_ERROR\' | translate}}:</span> {{\'MESSAGE_ENTER_VALID_CONDITION\' | translate}}</div><div class="alert alert-danger" role=alert ng-if=!labels.length><span class="glyphicon glyphicon-exclamation-sign" aria-hidden=true></span> <span class=sr-only>{{\'APPLICATION_ERROR\' | translate}}:</span> {{\'MESSAGE_ENTER_ONE_VALID_METRIC_AND_CHECK_OTHER\' | translate}}</div>')}])}(window),function(a,b){angular.module("adf.widget.table",["adf.provider"]).value("apiServiceUrlTable","/api/widgets/table").config(["dashboardProvider",function(a){a.widget("table",{title:"Table",description:"Show tabbed results from db",templateUrl:"{widgetsPath}/table/src/view.html", -controller:"apiWidgetTableViewCtrl",edit:{templateUrl:"{widgetsPath}/table/src/edit.html",controller:"apiWidgetTableEditCtrl"}})}]).service("apiServiceTable",["$q","$http","apiServiceUrlTable",function(a,b,c){return{get:function(d){var e=a.defer();return b.get(c,{params:{condition:encodeURIComponent(d.condition),table:d.report,fields:d.fields}}).success(function(a){a?e.resolve(a):e.reject()}).error(function(a){console.log(a),e.reject()}),e.promise}}}]).controller("apiWidgetTableEditCtrl",["$scope",function(a){function b(){return a.config.fields||(a.config.fields=[{column:"",alias:""}]),a.config.fields}a.config.reportTables=[{name:"Agents",value:"agent"},{name:"Calls",value:"call"},{name:"Dials",value:"dial"},{name:"Members",value:"member"},{name:"Queues",value:"queue"}],a.config.timeout=a.config.timeout?a.config.timeout:1,a.config.height=a.config.height?a.config.height:350,a.config.fields=a.config.fields?a.config.fields:[{column:"",alias:""}],a.addField=function(){b().push({})},a.removeField=function(a){b().splice(a,1)}}]).controller("apiWidgetTableViewCtrl",["$scope","$interval","apiServiceTable",function(a,b,c){a.config.timeout=a.config.timeout?a.config.timeout:1,a.config.height=a.config.height?a.config.height:350,a.config.style={"max-height":a.config.height+"px",overflow:"scroll"},a.tableApiCall=function(){a.config.condition&&a.config.report&&a.config.fields.length&&""!==a.config.fields[0].column&&""!==a.config.fields[0].alias&&c.get(a.config).then(function(b){a.results=b})},a.tableApiCall();var d=b(function(){a.tableApiCall()},1e3*parseInt(a.config.timeout));a.$on("$destroy",function(){b.cancel(d)})}]),angular.module("adf.widget.table").run(["$templateCache",function(a){a.put("{widgetsPath}/table/src/edit.html",'<form role=form><div class=form-group><label class=control-label>{{\'APPLICATION_REPORT\' | translate}}</label><ui-select data-ng-model=config.report name=report theme=bootstrap><ui-select-match placeholder="{{ \'APPLICATION_REPORT\' | translate }}">{{$select.selected.name}}</ui-select-match><ui-select-choices repeat="report.value as report in config.reportTables | filter: $select.search"><div ng-bind-html="report.name | highlight: $select.search"></div></ui-select-choices></ui-select></div><div><label class=control-label>{{\'APPLICATION_METRICS\' | translate}}</label></div><div class=padding-bottom ng-repeat="field in config.fields"><div class=form-group><div class=input-group><input type=text class=form-control ng-model=field.column> <span class=input-group-addon>as</span> <input type=text class=form-control ng-model=field.alias> <span class=input-group-btn ng-if="config.fields.length>1"><button class="btn btn-danger" type=button data-ng-click=removeField($index)><i class="fa fa-times"></i> {{\'APPLICATION_REMOVE\' | translate}}</button></span></div></div></div><button type=button class="btn btn-sm green mbottom20" ng-click=addField()><i class="fa fa-plus"></i> {{\'APPLICATION_ADD_FIELD\' | translate}}</button><div class=form-group><label for=condition>{{\'APPLICATION_CONDITION\' | translate}}</label> <input type=text class=form-control id=condition ng-model=config.condition placeholder="{{\'APPLICATION_CONDITION\' | translate}}"></div><div class=form-group><label for=condition>{{\'APPLICATION_REFRESH_TIMEOUT\' | translate}}</label> <input type=number class=form-control id=timeout ng-model=config.timeout placeholder="{{\'APPLICATION_REFRESH_TIMEOUT\' | translate}}" min=1></div><div class=form-group><label for=condition>{{\'APPLICATION_WIDGET_MAX_HEIGHT\' | translate}}</label> <input type=number class=form-control id=height ng-model=config.height placeholder="{{\'APPLICATION_WIDGET_MAX_HEIGHT\' | translate}}" min=350></div></form>'),a.put("{widgetsPath}/table/src/view.html",'<div ng-if=results ng-style=config.style><table st-table=results class="table table-striped table-bordered table-hover"><div class=table-responsive><thead><tr><th colspan={{config.fields.length}}><div class=row><div class=col-md-6></div><div class=col-md-6><div class="input-group input-medium pull-right"><input st-search placeholder="{{ \'APPLICATION_SEARCH\' | translate }}" class=form-control type=search> <span class=input-group-addon><i class="fa fa-search"></i></span></div></div></div></th></tr><tr><th ng-repeat="field in config.fields">{{field.alias}}</th></tr></thead><tbody><tr data-ng-repeat="result in results" class=animate-repeat><td ng-repeat="field in config.fields">{{result[field.alias]}}</td></tr><tr data-ng-hide=results.length><td colspan={{config.fields.length}} style=text-align:center;><i>{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</i></td></tr></tbody><tfoot><tr><td colspan={{config.fields.length}} class=text-center><div st-pagination class=pagination st-items-by-page=10 st-displayed-pages=3></div></td></tr></tfoot></div></table></div><div class="alert alert-danger" role=alert ng-if=!config.report><span class="glyphicon glyphicon-exclamation-sign" aria-hidden=true></span> <span class=sr-only>{{\'APPLICATION_ERROR\' | translate}}:</span> {{\'MESSAGE_WIDGET_SELECT_REPORT\' | translate}}</div><div class="alert alert-danger" role=alert ng-if=!results><span class="glyphicon glyphicon-exclamation-sign" aria-hidden=true></span> <span class=sr-only>{{\'APPLICATION_ERROR\' | translate}}:</span> {{\'MESSAGE_ENTER_VALID_CONDITION\' | translate}}</div><div class="alert alert-danger" role=alert ng-if=!results><span class="glyphicon glyphicon-exclamation-sign" aria-hidden=true></span> <span class=sr-only>{{\'APPLICATION_ERROR\' | translate}}:</span> {{\'MESSAGE_ENTER_ONE_VALID_FIELD_AND_CHECK_OTHER\' | translate}}</div>')}])}(window);var Metronic=function(){var a,b=!1,c=!1,d=!1,e=!1,f=[],g="assets/",h="img/",i="plugins/",j="css/",k={blue:"#89C4F4",red:"#F3565D",green:"#1bbc9b",purple:"#9b59b6",grey:"#95a5a6",yellow:"#F8CB00"},l=function(){"rtl"===$("body").css("direction")&&(b=!0),c=!!navigator.userAgent.match(/MSIE 8.0/),d=!!navigator.userAgent.match(/MSIE 9.0/),e=!!navigator.userAgent.match(/MSIE 10.0/),e&&$("html").addClass("ie10"),(e||d||c)&&$("html").addClass("ie")},m=function(){for(var a=0;a<f.length;a++){var b=f[a];b.call()}},n=function(){var a;if(c){var b;$(window).resize(function(){b!=document.documentElement.clientHeight&&(a&&clearTimeout(a),a=setTimeout(function(){m()},50),b=document.documentElement.clientHeight)})}else $(window).resize(function(){a&&clearTimeout(a),a=setTimeout(function(){m()},50)})},o=function(){$("body").on("click",".portlet > .portlet-title > .tools > a.remove",function(a){a.preventDefault();var b=$(this).closest(".portlet");$("body").hasClass("page-portlet-fullscreen")&&$("body").removeClass("page-portlet-fullscreen"),b.find(".portlet-title .fullscreen").tooltip("destroy"),b.find(".portlet-title > .tools > .reload").tooltip("destroy"),b.find(".portlet-title > .tools > .remove").tooltip("destroy"),b.find(".portlet-title > .tools > .config").tooltip("destroy"),b.find(".portlet-title > .tools > .collapse, .portlet > .portlet-title > .tools > .expand").tooltip("destroy"),b.remove()}),$("body").on("click",".portlet > .portlet-title .fullscreen",function(a){a.preventDefault();var b=$(this).closest(".portlet");if(b.hasClass("portlet-fullscreen"))$(this).removeClass("on"),b.removeClass("portlet-fullscreen"),$("body").removeClass("page-portlet-fullscreen"),b.children(".portlet-body").css("height","auto");else{var c=Metronic.getViewPort().height-b.children(".portlet-title").outerHeight()-parseInt(b.children(".portlet-body").css("padding-top"))-parseInt(b.children(".portlet-body").css("padding-bottom"));$(this).addClass("on"),b.addClass("portlet-fullscreen"),$("body").addClass("page-portlet-fullscreen"),b.children(".portlet-body").css("height",c)}}),$("body").on("click",".portlet > .portlet-title > .tools > a.reload",function(a){a.preventDefault();var b=$(this).closest(".portlet").children(".portlet-body"),c=$(this).attr("data-url"),d=$(this).attr("data-error-display");c?(Metronic.blockUI({target:b,animate:!0,overlayColor:"none"}),$.ajax({type:"GET",cache:!1,url:c,dataType:"html",success:function(a){Metronic.unblockUI(b),b.html(a)},error:function(a,c,e){Metronic.unblockUI(b);var f="Error on reloading the content. Please check your connection and try again.";"toastr"==d&&toastr?toastr.error(f):"notific8"==d&&$.notific8?($.notific8("zindex",11500),$.notific8(f,{theme:"ruby",life:3e3})):alert(f)}})):(Metronic.blockUI({target:b,animate:!0,overlayColor:"none"}),window.setTimeout(function(){Metronic.unblockUI(b)},1e3))}),$('.portlet .portlet-title a.reload[data-load="true"]').click(),$("body").on("click",".portlet > .portlet-title > .tools > .collapse, .portlet .portlet-title > .tools > .expand",function(a){a.preventDefault()})},p=function(){if($().uniform){var a=$("input[type=checkbox]:not(.toggle, .make-switch, .icheck), input[type=radio]:not(.toggle, .star, .make-switch, .icheck)");a.size()>0&&a.each(function(){0===$(this).parents(".checker").size()&&$(this).show()})}},q=function(){$().iCheck&&$(".icheck").each(function(){var a=$(this).attr("data-checkbox")?$(this).attr("data-checkbox"):"icheckbox_minimal-grey",b=$(this).attr("data-radio")?$(this).attr("data-radio"):"iradio_minimal-grey";a.indexOf("_line")>-1||b.indexOf("_line")>-1?$(this).iCheck({checkboxClass:a,radioClass:b,insert:'<div class="icheck_line-icon"></div>'+$(this).attr("data-label")}):$(this).iCheck({checkboxClass:a,radioClass:b})})},r=function(){$().bootstrapSwitch&&$(".make-switch").bootstrapSwitch()},s=function(){$().confirmation&&$("[data-toggle=confirmation]").confirmation({container:"body",btnOkClass:"btn-xs btn-success",btnCancelClass:"btn-xs btn-danger"})},t=function(){$("body").on("shown.bs.collapse",".accordion.scrollable",function(a){Metronic.scrollTo($(a.target))})},u=function(){if(location.hash){var a=location.hash.substr(1);$('a[href="#'+a+'"]').parents(".tab-pane:hidden").each(function(){var a=$(this).attr("id");$('a[href="#'+a+'"]').click()}),$('a[href="#'+a+'"]').click()}},v=function(){$("body").on("hide.bs.modal",function(){$(".modal:visible").size()>1&&$("html").hasClass("modal-open")===!1?$("html").addClass("modal-open"):$(".modal:visible").size()<=1&&$("html").removeClass("modal-open")}),$("body").on("show.bs.modal",".modal",function(){$(this).hasClass("modal-scroll")&&$("body").addClass("modal-open-noscroll")}),$("body").on("hide.bs.modal",".modal",function(){$("body").removeClass("modal-open-noscroll")}),$("body").on("hidden.bs.modal",".modal:not(.modal-cached)",function(){$(this).removeData("bs.modal")})},w=function(){$(".tooltips").tooltip(),$(".portlet > .portlet-title .fullscreen").tooltip({container:"body",title:"Fullscreen"}),$(".portlet > .portlet-title > .tools > .reload").tooltip({container:"body",title:"Reload"}),$(".portlet > .portlet-title > .tools > .remove").tooltip({container:"body",title:"Remove"}),$(".portlet > .portlet-title > .tools > .config").tooltip({container:"body",title:"Settings"}),$(".portlet > .portlet-title > .tools > .collapse, .portlet > .portlet-title > .tools > .expand").tooltip({container:"body",title:"Collapse/Expand"})},x=function(){$("body").on("click",".dropdown-menu.hold-on-click",function(a){a.stopPropagation()})},y=function(){$("body").on("click",'[data-close="alert"]',function(a){$(this).parent(".alert").hide(),$(this).closest(".note").hide(),a.preventDefault()}),$("body").on("click",'[data-close="note"]',function(a){$(this).closest(".note").hide(),a.preventDefault()}),$("body").on("click",'[data-remove="note"]',function(a){$(this).closest(".note").remove(),a.preventDefault()})},z=function(){$('[data-hover="dropdown"]').not(".hover-initialized").each(function(){$(this).dropdownHover(),$(this).addClass("hover-initialized")})},A=function(){$(".popovers").popover(),$(document).on("click.bs.popover.data-api",function(b){a&&a.popover("hide")})},B=function(){Metronic.initSlimScroll(".scroller")},C=function(){jQuery.fancybox&&$(".fancybox-button").size()>0&&$(".fancybox-button").fancybox({groupAttr:"data-rel",prevEffect:"none",nextEffect:"none",closeBtn:!0,helpers:{title:{type:"inside"}}})},D=function(){(c||d)&&$("input[placeholder]:not(.placeholder-no-fix), textarea[placeholder]:not(.placeholder-no-fix)").each(function(){var a=$(this);""===a.val()&&""!==a.attr("placeholder")&&a.addClass("placeholder").val(a.attr("placeholder")),a.focus(function(){a.val()==a.attr("placeholder")&&a.val("")}),a.blur(function(){""!==a.val()&&a.val()!=a.attr("placeholder")||a.val(a.attr("placeholder"))})})},E=function(){$().select2&&$(".select2me").select2({placeholder:"Select"})};return{init:function(){l(),n(),p(),q(),r(),B(),C(),E(),o(),y(),x(),u(),w(),A(),t(),v(),s(),D()},initAjax:function(){p(),q(),r(),z(),B(),E(),C(),x(),w(),A(),t(),s()},initComponents:function(){this.initAjax()},setLastPopedPopover:function(b){a=b},addResizeHandler:function(a){f.push(a)},runResizeHandlers:function(){m()},scrollTo:function(a,b){var c=a&&a.size()>0?a.offset().top:0;a&&($("body").hasClass("page-header-fixed")&&(c-=$(".page-header").height()),c+=b?b:-1*a.height()),$("html,body").animate({scrollTop:c},"slow")},initSlimScroll:function(a){$(a).each(function(){if(!$(this).attr("data-initialized")){var a;a=$(this).attr("data-height")?$(this).attr("data-height"):$(this).css("height"),$(this).slimScroll({allowPageScroll:!0,size:"7px",color:$(this).attr("data-handle-color")?$(this).attr("data-handle-color"):"#bbb",wrapperClass:$(this).attr("data-wrapper-class")?$(this).attr("data-wrapper-class"):"slimScrollDiv",railColor:$(this).attr("data-rail-color")?$(this).attr("data-rail-color"):"#eaeaea",position:b?"left":"right",height:a,alwaysVisible:"1"==$(this).attr("data-always-visible"),railVisible:"1"==$(this).attr("data-rail-visible"),disableFadeOut:!0}),$(this).attr("data-initialized","1")}})},destroySlimScroll:function(a){$(a).each(function(){if("1"===$(this).attr("data-initialized")){$(this).removeAttr("data-initialized"),$(this).removeAttr("style");var a={};$(this).attr("data-handle-color")&&(a["data-handle-color"]=$(this).attr("data-handle-color")),$(this).attr("data-wrapper-class")&&(a["data-wrapper-class"]=$(this).attr("data-wrapper-class")),$(this).attr("data-rail-color")&&(a["data-rail-color"]=$(this).attr("data-rail-color")),$(this).attr("data-always-visible")&&(a["data-always-visible"]=$(this).attr("data-always-visible")),$(this).attr("data-rail-visible")&&(a["data-rail-visible"]=$(this).attr("data-rail-visible")),$(this).slimScroll({wrapperClass:$(this).attr("data-wrapper-class")?$(this).attr("data-wrapper-class"):"slimScrollDiv",destroy:!0});var b=$(this);$.each(a,function(a,c){b.attr(a,c)})}})},scrollTop:function(){Metronic.scrollTo()},blockUI:function(a){a=$.extend(!0,{},a);var b="";if(b=a.animate?'<div class="loading-message '+(a.boxed?"loading-message-boxed":"")+'"><div class="block-spinner-bar"><div class="bounce1"></div><div class="bounce2"></div><div class="bounce3"></div></div></div>':a.iconOnly?'<div class="loading-message '+(a.boxed?"loading-message-boxed":"")+'"><img src="'+this.getGlobalImgPath()+'loading-spinner-blue.gif" align=""></div>':a.textOnly?'<div class="loading-message '+(a.boxed?"loading-message-boxed":"")+'"><span> '+(a.message?a.message:"LOADING...")+"</span></div>":'<div class="loading-message '+(a.boxed?"loading-message-boxed":"")+'"><img src="'+this.getGlobalImgPath()+'loading-spinner-blue.gif" align=""><span> '+(a.message?a.message:"LOADING...")+"</span></div>",a.target){var c=$(a.target);c.height()<=$(window).height()&&(a.cenrerY=!0),c.block({message:b,baseZ:a.zIndex?a.zIndex:1e3,centerY:void 0!==a.cenrerY?a.cenrerY:!1,css:{top:"10%",border:"0",padding:"0",backgroundColor:"none"},overlayCSS:{backgroundColor:a.overlayColor?a.overlayColor:"#555",opacity:a.boxed?.05:.1,cursor:"wait"}})}else $.blockUI({message:b,baseZ:a.zIndex?a.zIndex:1e3,css:{border:"0",padding:"0",backgroundColor:"none"},overlayCSS:{backgroundColor:a.overlayColor?a.overlayColor:"#555",opacity:a.boxed?.05:.1,cursor:"wait"}})},unblockUI:function(a){a?$(a).unblock({onUnblock:function(){$(a).css("position",""),$(a).css("zoom","")}}):$.unblockUI()},startPageLoading:function(a){a&&a.animate?($(".page-spinner-bar").remove(),$("body").append('<div class="page-spinner-bar"><div class="bounce1"></div><div class="bounce2"></div><div class="bounce3"></div></div>')):($(".page-loading").remove(),$("body").append('<div class="page-loading"><img src="'+this.getGlobalImgPath()+'loading-spinner-blue.gif"/> <span>'+(a&&a.message?a.message:"Loading...")+"</span></div>"))},stopPageLoading:function(){$(".page-loading, .page-spinner-bar").remove()},alert:function(a){a=$.extend(!0,{container:"",place:"append",type:"success",message:"",close:!0,reset:!0,focus:!0,closeInSeconds:0,icon:""},a);var b=Metronic.getUniqueID("Metronic_alert"),c='<div id="'+b+'" class="Metronic-alerts alert alert-'+a.type+' fade in">'+(a.close?'<button type="button" class="close" data-dismiss="alert" aria-hidden="true"></button>':"")+(""!==a.icon?'<i class="fa-lg fa fa-'+a.icon+'"></i> ':"")+a.message+"</div>";return a.reset&&$(".Metronic-alerts").remove(),a.container?"append"==a.place?$(a.container).append(c):$(a.container).prepend(c):$("body").hasClass("page-container-bg-solid")?$(".page-title").after(c):$(".page-bar").size()>0?$(".page-bar").after(c):$(".page-breadcrumb").after(c),a.focus&&Metronic.scrollTo($("#"+b)),a.closeInSeconds>0&&setTimeout(function(){$("#"+b).remove()},1e3*a.closeInSeconds),b},initUniform:function(a){a?$(a).each(function(){0===$(this).parents(".checker").size()&&($(this).show(),$(this).uniform())}):p()},updateUniform:function(a){$.uniform.update(a)},initFancybox:function(){C()},getActualVal:function(a){return a=$(a),a.val()===a.attr("placeholder")?"":a.val()},getURLParameter:function(a){var b,c,d=window.location.search.substring(1),e=d.split("&");for(b=0;b<e.length;b++)if(c=e[b].split("="),c[0]==a)return unescape(c[1]);return null},isTouchDevice:function(){try{return document.createEvent("TouchEvent"),!0}catch(a){return!1}},getViewPort:function(){var a=window,b="inner";return"innerWidth"in window||(b="client",a=document.documentElement||document.body),{width:a[b+"Width"],height:a[b+"Height"]}},getUniqueID:function(a){return"prefix_"+Math.floor(Math.random()*(new Date).getTime())},isIE8:function(){return c},isIE9:function(){return d},isRTL:function(){return b},isAngularJsApp:function(){return"undefined"!=typeof angular},getAssetsPath:function(){return g},setAssetsPath:function(a){g=a},setGlobalImgPath:function(a){h=a},getGlobalImgPath:function(){return g+h},setGlobalPluginsPath:function(a){i=a},getGlobalPluginsPath:function(){return g+i},getGlobalCssPath:function(){return g+j},getBrandColor:function(a){return k[a]?k[a]:""},getResponsiveBreakpoint:function(a){var b={xs:480,sm:768,md:900,lg:1200};return b[a]?b[a]:0}}}(),Layout=function(){var a="img/",b="css/",c=Metronic.getResponsiveBreakpoint("md"),d=function(){var a,b=$(".page-content"),d=$(".page-sidebar"),e=$("body");if(e.hasClass("page-footer-fixed")===!0&&e.hasClass("page-sidebar-fixed")===!1){var f=Metronic.getViewPort().height-$(".page-footer").outerHeight()-$(".page-header").outerHeight();b.height()<f&&b.attr("style","min-height:"+f+"px")}else{if(e.hasClass("page-sidebar-fixed"))a=g(),e.hasClass("page-footer-fixed")===!1&&(a-=$(".page-footer").outerHeight());else{var h=$(".page-header").outerHeight(),i=$(".page-footer").outerHeight();a=Metronic.getViewPort().width<c?Metronic.getViewPort().height-h-i:d.height()+20,a+h+i<=Metronic.getViewPort().height&&(a=Metronic.getViewPort().height-h-i)}b.attr("style","min-height:"+a+"px")}},e=function(a,b){var d=location.hash.toLowerCase(),e=$(".page-sidebar-menu");if("click"===a||"set"===a?b=$(b):"match"===a&&e.find("li > a").each(function(){var a=$(this).attr("href").toLowerCase();return a.length>1&&d.substr(1,a.length-1)==a.substr(1)?void(b=$(this)):void 0}),b&&0!=b.size()&&"javascript:;"!==b.attr("href").toLowerCase()&&"#"!==b.attr("href").toLowerCase()){parseInt(e.data("slide-speed")),e.data("keep-expanded");e.find("li.active").removeClass("active"),e.find("li > a > .selected").remove(),e.hasClass("page-sidebar-menu-hover-submenu")===!1?e.find("li.open").each(function(){0===$(this).children(".sub-menu").size()&&($(this).removeClass("open"),$(this).find("> a > .arrow.open").removeClass("open"))}):e.find("li.open").removeClass("open"),b.parents("li").each(function(){$(this).addClass("active"),$(this).find("> a > span.arrow").addClass("open"),1===$(this).parent("ul.page-sidebar-menu").size()&&$(this).find("> a").append('<span class="selected"></span>'),1===$(this).children("ul.sub-menu").size()&&$(this).addClass("open")}),"click"===a&&Metronic.getViewPort().width<c&&$(".page-sidebar").hasClass("in")&&$(".page-header .responsive-toggler").click()}},f=function(){jQuery(".page-sidebar").on("click","li > a",function(a){var b=$(this).next().hasClass("sub-menu");if(!(Metronic.getViewPort().width>=c&&1===$(this).parents(".page-sidebar-menu-hover-submenu").size())){if(b===!1)return void(Metronic.getViewPort().width<c&&$(".page-sidebar").hasClass("in")&&$(".page-header .responsive-toggler").click());if(!$(this).next().hasClass("sub-menu always-open")){var e=$(this).parent().parent(),f=$(this),g=$(".page-sidebar-menu"),h=jQuery(this).next(),i=g.data("auto-scroll"),j=parseInt(g.data("slide-speed")),k=g.data("keep-expanded");k!==!0&&(e.children("li.open").children("a").children(".arrow").removeClass("open"),e.children("li.open").children(".sub-menu:not(.always-open)").slideUp(j),e.children("li.open").removeClass("open"));var l=-200;h.is(":visible")?(jQuery(".arrow",jQuery(this)).removeClass("open"),jQuery(this).parent().removeClass("open"),h.slideUp(j,function(){i===!0&&$("body").hasClass("page-sidebar-closed")===!1&&($("body").hasClass("page-sidebar-fixed")?g.slimScroll({scrollTo:f.position().top}):Metronic.scrollTo(f,l)),d()})):b&&(jQuery(".arrow",jQuery(this)).addClass("open"),jQuery(this).parent().addClass("open"),h.slideDown(j,function(){i===!0&&$("body").hasClass("page-sidebar-closed")===!1&&($("body").hasClass("page-sidebar-fixed")?g.slimScroll({scrollTo:f.position().top}):Metronic.scrollTo(f,l)),d()})),a.preventDefault()}}}),jQuery(".page-sidebar").on("click"," li > a.ajaxify",function(a){a.preventDefault(),Metronic.scrollTop();var b=$(this).attr("href"),d=jQuery(".page-sidebar ul"),e=($(".page-content"),$(".page-content .page-content-body"));d.children("li.active").removeClass("active"),d.children("arrow.open").removeClass("open"),$(this).parents("li").each(function(){$(this).addClass("active"),$(this).children("a > span.arrow").addClass("open")}),$(this).parents("li").addClass("active"),Metronic.getViewPort().width<c&&$(".page-sidebar").hasClass("in")&&$(".page-header .responsive-toggler").click(),Metronic.startPageLoading();var f=$(this);$.ajax({type:"GET",cache:!1,url:b,dataType:"html",success:function(a){0===f.parents("li.open").size()&&$(".page-sidebar-menu > li.open > a").click(),Metronic.stopPageLoading(),e.html(a),Layout.fixContentHeight(),Metronic.initAjax()},error:function(a,b,c){Metronic.stopPageLoading(),e.html("<h4>Could not load the requested content.</h4>")}})}),jQuery(".page-content").on("click",".ajaxify",function(a){a.preventDefault(),Metronic.scrollTop();var b=$(this).attr("href"),d=($(".page-content"),$(".page-content .page-content-body"));Metronic.startPageLoading(),Metronic.getViewPort().width<c&&$(".page-sidebar").hasClass("in")&&$(".page-header .responsive-toggler").click(),$.ajax({type:"GET",cache:!1,url:b,dataType:"html",success:function(a){Metronic.stopPageLoading(),d.html(a),Layout.fixContentHeight(),Metronic.initAjax()},error:function(a,b,c){d.html("<h4>Could not load the requested content.</h4>"),Metronic.stopPageLoading()}})}),i(),$(".page-sidebar").on("click",".sidebar-search .remove",function(a){a.preventDefault(),$(".sidebar-search").removeClass("open")}),$(".page-sidebar .sidebar-search").on("keypress","input.form-control",function(a){return 13==a.which?($(".sidebar-search").submit(),!1):void 0}),0!==$(".sidebar-search").size()&&($(".sidebar-search .input-group").on("click",function(a){a.stopPropagation()}),$("body").on("click",function(){$(".sidebar-search").hasClass("open")&&$(".sidebar-search").removeClass("open")}))},g=function(){var a=Metronic.getViewPort().height-$(".page-header").outerHeight();return $("body").hasClass("page-footer-fixed")&&(a-=$(".page-footer").outerHeight()),a},h=function(){var a=$(".page-sidebar-menu");return Metronic.destroySlimScroll(a),0===$(".page-sidebar-fixed").size()?void d():void(Metronic.getViewPort().width>=c&&(a.attr("data-height",g()),Metronic.initSlimScroll(a),d()))},i=function(){var a=$("body");a.hasClass("page-sidebar-fixed")&&$(".page-sidebar").on("mouseenter",function(){a.hasClass("page-sidebar-closed")&&$(this).find(".page-sidebar-menu").removeClass("page-sidebar-menu-closed")}).on("mouseleave",function(){a.hasClass("page-sidebar-closed")&&$(this).find(".page-sidebar-menu").addClass("page-sidebar-menu-closed")})},j=function(){$("body");$.cookie&&"1"===$.cookie("sidebar_closed")&&Metronic.getViewPort().width>=c?($("body").addClass("page-sidebar-closed"),$(".page-sidebar-menu").addClass("page-sidebar-menu-closed")):$.cookie&&$.cookie("sidebar_closed","0")},k=function(){$(".page-header").on("click",'.hor-menu a[data-toggle="tab"]',function(a){a.preventDefault();var b=$(".hor-menu .nav"),c=b.find("li.current");$("li.active",c).removeClass("active"),$(".selected",c).remove();var d=$(this).parents("li").last();d.addClass("current"),d.find("a:first").append('<span class="selected"></span>')}),$(".page-header").on("click",".search-form",function(a){$(this).addClass("open"),$(this).find(".form-control").focus(),$(".page-header .search-form .form-control").on("blur",function(a){$(this).closest(".search-form").removeClass("open"),$(this).unbind("blur")})}),$(".page-header").on("keypress",".hor-menu .search-form .form-control",function(a){return 13==a.which?($(this).closest(".search-form").submit(),!1):void 0}),$(".page-header").on("mousedown",".search-form.open .submit",function(a){a.preventDefault(),a.stopPropagation(),$(this).closest(".search-form").submit()}),$('[data-hover="megamenu-dropdown"]').not(".hover-initialized").each(function(){$(this).dropdownHover(),$(this).addClass("hover-initialized")}),$(document).on("click",".mega-menu-dropdown .dropdown-menu",function(a){a.stopPropagation()})},l=function(){$("body").on("shown.bs.tab",'a[data-toggle="tab"]',function(){d()})},m=function(){var a=300,b=500;navigator.userAgent.match(/iPhone|iPad|iPod/i)?$(window).bind("touchend touchcancel touchleave",function(c){$(this).scrollTop()>a?$(".scroll-to-top").fadeIn(b):$(".scroll-to-top").fadeOut(b)}):$(window).scroll(function(){$(this).scrollTop()>a?$(".scroll-to-top").fadeIn(b):$(".scroll-to-top").fadeOut(b)}),$(".scroll-to-top").click(function(a){return a.preventDefault(),$("html, body").animate({scrollTop:0},b),!1})},n=function(){var a,b=$(".full-height-content");if(a=Metronic.getViewPort().height-$(".page-header").outerHeight(!0)-$(".page-footer").outerHeight(!0)-$(".page-title").outerHeight(!0)-$(".page-bar").outerHeight(!0),b.hasClass("portlet")){var d=b.find(".portlet-body");if(Metronic.getViewPort().width<c)return void Metronic.destroySlimScroll(d.find(".full-height-content-body"));a=a-b.find(".portlet-title").outerHeight(!0)-parseInt(b.find(".portlet-body").css("padding-top"))-parseInt(b.find(".portlet-body").css("padding-bottom"))-2,b.hasClass("full-height-content-scrollable")?(a-=35,d.find(".full-height-content-body").css("height",a),Metronic.initSlimScroll(d.find(".full-height-content-body"))):d.css("min-height",a)}else{if(Metronic.getViewPort().width<c)return void Metronic.destroySlimScroll(b.find(".full-height-content-body"));b.hasClass("full-height-content-scrollable")?(a-=35,b.find(".full-height-content-body").css("height",a),Metronic.initSlimScroll(b.find(".full-height-content-body"))):b.css("min-height",a)}};return{initHeader:function(){k()},setSidebarMenuActiveLink:function(a,b){e(a,b)},initSidebar:function(){h(),f(),j(),Metronic.isAngularJsApp()&&e("match"),Metronic.addResizeHandler(h)},initContent:function(){n(),l(),Metronic.addResizeHandler(d),Metronic.addResizeHandler(n)},initFooter:function(){m()},init:function(){this.initHeader(),this.initSidebar(),this.initContent(),this.initFooter()},fixContentHeight:function(){d()},initFixedSidebarHoverEffect:function(){i()},initFixedSidebar:function(){h()},getLayoutImgPath:function(){return Metronic.getAssetsPath()+a},getLayoutCssPath:function(){return Metronic.getAssetsPath()+b}}}();angular.module("xCallyShuttleApp").run(["$templateCache",function(a){a.put("app/analytic/extracted/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-file-pdf-o"></i>\n <a href="/analytics/extracted/list">{{ \'APPLICATION_EXTRACTED_REPORTS\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="fa fa-file-pdf-o font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_EXTRACTED_REPORTS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <!-- <a class="btn btn-icon-only btn-default fullscreen" href="#"></a> -->\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n\n<!-- END PAGE CONTENT-->\n'),a.put("app/analytic/metric/list/create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_METRIC\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="forms.metric" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.metric.name.$touched || forms.metric.$submitted) && forms.metric.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="(forms.metric.name.$touched || forms.metric.$submitted) && forms.metric.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START TABLE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.metric.table.$touched || forms.metric.$submitted) && forms.metric.table.$invalid}">\n <label class="control-label">{{\'APPLICATION_TABLE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="item.table" name="table" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{\'APPLICATION_\'+$select.selected.value.toUpperCase() | translate}}</ui-select-match>\n <ui-select-choices repeat="table.value as table in tables | filter: $select.search">\n <div ng-bind-html="\'APPLICATION_\'+table.value.toUpperCase() | translate | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.metric.table.$touched || forms.metric.$submitted) && forms.metric.table.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TABLE-->\n\n <!-- START METRIC -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.metric.metric.$touched || forms.metric.$submitted) && forms.metric.metric.$invalid}">\n <label class="control-label">{{\'APPLICATION_METRIC\' | translate}}<span class="required" aria-required="true">*</span></label>\n <textarea type="text" name="metric" placeholder="{{\'APPLICATION_METRIC\' | translate}}" class="form-control" data-ng-model="item.metric" required/></textarea>\n <span data-ng-show="(forms.metric.metric.$touched || forms.metric.$submitted) && forms.metric.metric.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END METRIC -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="ok()" ng-disabled="forms.metric.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'), -a.put("app/analytic/metric/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-calculator"></i>\n <a href="/analytics/metrics/list">{{ \'APPLICATION_METRICS\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <!-- <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-calculator font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_DEFAULT_METRICS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n </div>\n </div> -->\n <!-- <div class="portlet-body"> -->\n <!-- START TABLE -->\n <!-- <div ui-grid="gridOptionsDefault" data-ng-if="gridOptionsDefault" name="gridOptionsDefault" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptionsDefault.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div> -->\n <!-- END TABLE -->\n <!-- </div> -->\n <div class="portlet-title"><!-- removed margin-top20 class from title when commented the default metrics section-->\n <div class="caption font-green-sharp">\n <i class="icon-calculator font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_METRICS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <button class="btn green-jungle " ng-click="create()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_METRIC\' | translate }}\n </button>\n </div>\n <!-- <a class="btn btn-icon-only btn-default fullscreen" href="#"></a> -->\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" data-ng-if="gridOptions" name="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/analytic/metric/list/view.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_METRIC\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="forms.metric" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.metric.name.$touched || forms.metric.$submitted) && forms.metric.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}</label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required readonly/>\n <span data-ng-show="(forms.metric.name.$touched || forms.metric.$submitted) && forms.metric.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START TABLE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.metric.table.$touched || forms.metric.$submitted) && forms.metric.table.$invalid}">\n <label class="control-label">{{\'APPLICATION_TABLE\' | translate}}</label>\n <ui-select data-ng-model="item.table" name="table" theme="bootstrap" required data-ng-disabled="true">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{\'APPLICATION_\'+$select.selected.value.toUpperCase() | translate}}</ui-select-match>\n <ui-select-choices repeat="table.value as table in tables | filter: $select.search">\n <div ng-bind-html="\'APPLICATION_\'+table.value.toUpperCase() | translate | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.metric.table.$touched || forms.metric.$submitted) && forms.metric.table.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TABLE-->\n\n <!-- START METRIC -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.metric.metric.$touched || forms.metric.$submitted) && forms.metric.metric.$invalid}">\n <label class="control-label">{{\'APPLICATION_METRIC\' | translate}}</label>\n <textarea type="text" name="metric" placeholder="{{\'APPLICATION_METRIC\' | translate}}" class="form-control" data-ng-model="item.metric" required readonly/></textarea>\n <span data-ng-show="(forms.metric.metric.$touched || forms.metric.$submitted) && forms.metric.metric.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END METRIC -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description" readonly></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn default" type="button" ng-click="close()">{{ \'APPLICATION_CLOSE\' | translate }}</button>\n</div>\n'),a.put("app/analytic/metric/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getMetric()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-eye"></i>\n <a href="/analytics/metrics/list">{{ \'APPLICATION_METRICS\' | translate }}</a>\n <i data-ng-show="metric" class="fa fa-angle-right"></i>\n </li>\n <li data-ng-show="metric">\n <a href="#">{{metric.name}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/metric.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{metric.name}}\n </div>\n <!-- <div class="profile-usertitle-job">\n {{user.role}}\n </div> -->\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.analytics.metrics.view.settings\')}">\n <a data-ng-href="/analytics/metrics/view/{{metric.id}}/settings">\n <i class="icon-settings"></i>\n {{ \'APPLICATION_SETTINGS\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/analytic/metric/view/view.settings.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_METRIC\' | translate}} {{ \'APPLICATION_SETTINGS\' | translate}} </span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n </li>\n </ul>\n </div>\n\n <div class="portlet-body">\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.general" data-ng-submit="forms.general.$valid && updateMetric()" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="metric.name" required/>\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START TABLE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.table.$touched || forms.general.$submitted) && forms.general.table.$invalid}">\n <label class="control-label">{{\'APPLICATION_TABLE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="metric.table" name="table" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{\'APPLICATION_\'+$select.selected.value.toUpperCase() | translate}}</ui-select-match>\n <ui-select-choices repeat="table.value as table in tables | filter: $select.search">\n <div ng-bind-html="\'APPLICATION_\'+table.value.toUpperCase() | translate | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.general.table.$touched || forms.general.$submitted) && forms.general.table.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TABLE-->\n\n <!-- START METRIC -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.metric.$touched || forms.general.$submitted) && forms.general.metric.$invalid}">\n <label class="control-label">{{\'APPLICATION_METRIC\' | translate}}<span class="required" aria-required="true">*</span></label>\n <textarea type="text" name="metric" placeholder="{{\'APPLICATION_METRIC\' | translate}}" class="form-control" data-ng-model="metric.metric" required/></textarea>\n <span data-ng-show="(forms.general.metric.$touched || forms.general.$submitted) && forms.general.metric.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END METRIC -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="metric.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END ADVANCED TAB -->\n\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/analytic/report/list/copy.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_COPY_REPORT\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp" style="padding-left:10px;">\n <i class="icon-folder font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_COPY_TO\' | translate }} </span>\n </div>\n </div>\n <div class="portlet-body">\n <div js-tree="customTreeConfig" ng-model="customTreeData" should-apply="ac()" tree="customTreeInstance" tree-events="ready:initCustomScopeTree;"></div>\n </div>\n </div>\n <div class="has-error">\n <span data-ng-show="showAlert" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_SELECT_FOLDER\' | translate}}.\n </span>\n </div>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" data-ng-click="ok()">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/analytic/report/list/create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_REPORT\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="forms.report" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.report.name.$touched || forms.report.$submitted) && forms.report.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="(forms.report.name.$touched || forms.report.$submitted) && forms.report.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.report.name.$touched || forms.report.$submitted) && forms.report.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_PATH\' | translate}}<span class="required" aria-required="true"></span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_PATH\' | translate}}" class="form-control" data-ng-model="path" disabled/>\n <span data-ng-show="(forms.report.name.$touched || forms.report.$submitted) && forms.report.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="ok()" ng-disabled="forms.report.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/analytic/report/list/deleteNode.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_DELETE_FOLDER\' | translate }}</h3>\n</div>\n<div class="modal-body">\n<p>\n {{\'MESSAGE_DELETE_NODE\' | translate}} : <b>{{node}}</b>?\n</p>\n<p>\n {{\'MESSAGE_ALL_REPORTS_WILL_BE_DELETED\' | translate}}\n</p>\n</div>\n<div class="modal-footer">\n <button class="btn btn-danger" type="button" ng-click="ok()" ng-disabled="forms.report.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/analytic/report/list/extract.modal.html",'<div class="modal-header">\n <button type="button" ng-click="cancel()" class="close">×</button>\n <h4 class="modal-title">{{ \'APPLICATION_EXTRACT_REPORT\' | translate }}</h4>\n</div>\n<div class="modal-body" style="text-align:center;">\n <form name="forms.report" class="form-inline mbottom20" novalidate>\n <div class="form-group" data-ng-class="{\'hidden\':daily}">\n <label class="control-label">{{\'APPLICATION_DATE_RANGE\' | translate}}</label>\n <input type="daterange" name="dates" ranges="ranges" style="min-width:190px;" enabletimepicker="timepicker" placeholder="{{\'APPLICATION_DATE_RANGE\' | translate}}" class="form-control" data-ng-model="dates" max-date="{{maxdate}}" data-ng-required="!daily" data-ng-disabled="daily" data-ng-class="{\'disabled-invisible\':daily}" style="cursor:pointer;" readonly/>\n </div>\n <div class="form-group" data-ng-if="daily">\n <label class="control-label">{{\'APPLICATION_FROM\' | translate}}</label>\n </div>\n <div class="form-group" data-ng-if="daily">\n <uib-timepicker ng-model="dailyTime.start" ng-change="changed()" hour-step="1" minute-step="1" show-meridian="false"></uib-timepicker>\n </div>\n <div class="form-group" data-ng-if="daily">\n <label class="control-label">{{\'APPLICATION_TO\' | translate}}</label>\n </div>\n <div class="form-group" data-ng-if="daily">\n <uib-timepicker ng-model="dailyTime.end" ng-change="changed()" hour-step="1" minute-step="1" show-meridian="false"></uib-timepicker>\n </div>\n <!-- START STATUS -->\n <div class="form-group">\n <input\n bs-switch\n class="form-control"\n ng-model="daily"\n type="checkbox"\n name="auth"\n switch-active="{{ dailySwitch.isActive }}"\n switch-on-text="{{ dailySwitch.onText }}"\n switch-off-text="{{ dailySwitch.offText }}"\n switch-on-color="{{ dailySwitch.onColor }}"\n switch-off-color="{{ dailySwitch.offColor }}"\n switch-animate="{{ dailySwitch.animate }}"\n switch-size="{{ dailySwitch.size }}"\n switch-label="{{ dailySwitch.label }}"\n switch-icon="{{ dailySwitch.icon }}"\n switch-radio-off="{{ dailySwitch.radioOff }}"\n switch-label-width="{{ dailySwitch.labelWidth }}"\n switch-handle-width="{{ dailySwitch.handleWidth }}">\n </div>\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn default green-jungle" type="button" data-ng-click="extract(\'csv\')"><i class="fa fa-file-excel-o"></i> {{ \'APPLICATION_SAVE_AS_CSV\' | translate }}</button>\n <button class="btn default red-intense" type="button" data-ng-click="extract(\'pdf\')"><i class="fa fa-file-pdf-o"></i> {{ \'APPLICATION_SAVE_AS_PDF\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/analytic/report/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getTrees()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-book-open"></i>\n <a href="/analytics/reports/list">{{ \'APPLICATION_REPORTS\' | translate }}</a>\n </li>\n </ul>\n </div>\n <div class="col-fixed">\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp" style="padding-left:10px;">\n <i class="icon-folder font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_FOLDERS\' | translate }} </span>\n </div>\n <div class="inputs">\n <div class="portlet-input input-inline input-small">\n <div class="input-icon right">\n <i class="icon-magnifier"></i>\n <input type="text" data-ng-model="searchField" data-ng-change="searchTrees()" class="form-control input-circle" placeholder="search...">\n </div>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <div js-tree="defaultTreeConfig" ng-model="defaultTreeData" should-apply="ac()" tree="defaultTreeInstance" tree-events="ready:initDefaultScopeTree;select_node:selectDefaultNode;"></div>\n <div js-tree="customTreeConfig" ng-model="customTreeData" should-apply="ac()" tree="customTreeInstance" tree-events="ready:initCustomScopeTree;select_node:selectCustomNode;rename_node:updateCustomTree;delete_node:updateCustomTree;move_node:updateCustomTree;create_node:updateCustomTree;"></div>\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n <div class="row tree-row">\n <div class="col-md-12">\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-book-open font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_REPORTS\' | translate }}<span data-ng-if="selectedNode"> - {{selectedNode}}</span></span>\n </div>\n <div data-ng-if="!defaultTreeActive" class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <span class="btn default btn-file">\n <span class="fileinput-new">\n <i class="icon-cloud-upload"></i> {{\'APPLICATION_IMPORT_FROM_JSON\' | translate}}</span>\n <input type="file" on-read-file="import($fileContent)"/>\n </span>\n </div>\n <div class="btn-group">\n <button class="btn green-jungle " ng-click="create()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_REPORT\' | translate }}\n </button>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <div ng-slide-down="gridOptions" lazy-render duration="1">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n </div>\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/analytic/report/list/preview.modal.html",'<div class="modal-header">\n <button type="button" ng-click="cancel()" class="close">×</button>\n <h4 class="modal-title">{{ \'APPLICATION_REPORT_PREVIEW\' | translate }}</h4>\n</div>\n<div class="modal-body" style="text-align:center;">\n <form name="forms.report" class="form-inline mbottom20" novalidate>\n <div class="form-group" data-ng-class="{\'hidden\':daily}">\n <label class="control-label">{{\'APPLICATION_DATE_RANGE\' | translate}}<span class="required" aria-required="true"></span></label>\n <input type="daterange" name="dates" ranges="ranges" style="min-width:190px;" enabletimepicker="timepicker" placeholder="{{\'APPLICATION_DATE_RANGE\' | translate}}" class="form-control" data-ng-model="dates" data-ng-change="getPage()" max-date="{{maxdate}}" data-ng-required="!daily" data-ng-disabled="daily" data-ng-class="{\'disabled-invisible\':daily}" style="cursor:pointer;" readonly/>\n </div>\n <div class="form-group" data-ng-if="daily">\n <label class="control-label">{{\'APPLICATION_FROM\' | translate}}</label>\n </div>\n <div class="form-group" data-ng-if="daily">\n <uib-timepicker ng-model="dailyTime.start" ng-change="changed()" hour-step="1" minute-step="1" show-meridian="false"></uib-timepicker>\n </div>\n <div class="form-group" data-ng-if="daily">\n <label class="control-label">{{\'APPLICATION_TO\' | translate}}</label>\n </div>\n <div class="form-group" data-ng-if="daily">\n <uib-timepicker ng-model="dailyTime.end" ng-change="changed()" hour-step="1" minute-step="1" show-meridian="false"></uib-timepicker>\n </div>\n <div class="form-group" data-ng-if="daily">\n <button class="btn btn-small btn-sm btn-success" data-ng-click="getPage()">Apply</button>\n </div>\n <div class="form-group">\n <input\n bs-switch\n class="form-control"\n ng-model="daily"\n type="checkbox"\n name="auth"\n data-ng-change="getPage()"\n switch-active="{{ dailySwitch.isActive }}"\n switch-on-text="{{ dailySwitch.onText }}"\n switch-off-text="{{ dailySwitch.offText }}"\n switch-on-color="{{ dailySwitch.onColor }}"\n switch-off-color="{{ dailySwitch.offColor }}"\n switch-animate="{{ dailySwitch.animate }}"\n switch-size="{{ dailySwitch.size }}"\n switch-label="{{ dailySwitch.label }}"\n switch-icon="{{ dailySwitch.icon }}"\n switch-radio-off="{{ dailySwitch.radioOff }}"\n switch-label-width="{{ dailySwitch.labelWidth }}"\n switch-handle-width="{{ dailySwitch.handleWidth }}">\n </div>\n </form>\n <div ng-slide-down="showResult" lazy-render duration="1">\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-exporter class="grid extract-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n </div>\n</div>\n<div class="modal-footer">\n<button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CLOSE\' | translate }}</button>\n</div>\n'),a.put("app/analytic/report/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getReport()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-book-open"></i>\n <a href="/analytics/reports/list">{{ \'APPLICATION_REPORTS\' | translate }}</a>\n <i data-ng-show="report" class="fa fa-angle-right"></i>\n </li>\n <li data-ng-show="report">\n <a href="#">{{report.name}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/analytic/report/view/view.settings.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <div class="caption-subject font-blue-madison bold uppercase dot">{{ \'APPLICATION_REPORT\' | translate}} {{ \'APPLICATION_SETTINGS\' | translate}} - {{report.name}} </div>\n </div>\n <ul class="nav nav-tabs">\n <li>\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n </li>\n <li class="active">\n <a href="#" data-target="#tab_1_2" data-toggle="tab">{{ \'APPLICATION_BUILD\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_3" data-toggle="tab" data-ng-click="showResult = true">{{ \'APPLICATION_TEST_PREVIEW\' | translate}}</a>\n </li>\n </ul>\n </div>\n\n <div class="portlet-body">\n\n <div class="tab-content">\n\n <!-- GENERAL TAB -->\n <div class="tab-pane" id="tab_1_1">\n <form name="forms.general" data-ng-submit="forms.report.$valid && forms.general.$valid && updateReport()" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="report.name" required/>\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="report.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}" />\n </form>\n </div>\n <!-- END GENERAL TAB -->\n\n <!-- BUILD TAB -->\n <div class="tab-pane active" id="tab_1_2">\n <form name="forms.report" data-ng-submit="forms.report.$valid && forms.general.$valid && updateReport()" novalidate>\n <!-- START TABLE INPUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.report.table.$touched || forms.report.$submitted) && forms.report.table.$invalid}">\n <label class="control-label">{{\'APPLICATION_TABLE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="report.table" name="table" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{\'APPLICATION_\'+$select.selected.value.toUpperCase() | translate}}</ui-select-match>\n <ui-select-choices group-by="\'channel\'" repeat="table.value as table in tables | filter: $select.search">\n <div ng-bind-html="\'APPLICATION_\'+table.value.toUpperCase() | translate | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.report.table.$touched || forms.report.$submitted) && forms.report.table.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TABLE INPUT-->\n <div data-ng-if="report.table" class="mbottom20 pbottom20 table-responsive">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_FIELDS\' | translate}} </span>\n </div>\n </div>\n <!-- START TABLE -->\n <table class="table table-striped table-bordered table-hover">\n <thead>\n <tr>\n <th>{{ \'APPLICATION_FIELD\' | translate }} / {{ \'APPLICATION_METRIC\' | translate }}</th>\n <th style="min-width:167px;">{{ \'APPLICATION_ALIAS\' | translate }}</th>\n <th>{{ \'APPLICATION_FUNCTION\' | translate }}</th>\n <th>{{ \'APPLICATION_FORMAT\' | translate }}</th>\n <th>{{ \'APPLICATION_GROUP_BY\' | translate }}</th>\n <th>{{ \'APPLICATION_ORDER_BY\' | translate }}</th>\n <th></th>\n <th style="min-width:66px;"></th>\n </tr>\n </thead>\n <tbody ui-sortable="sortableOptions" data-ng-model="report.Fields">\n <tr data-ng-repeat="field in report.Fields">\n <td>\n <!-- START FIELD -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.report.$submitted && !field.field}">\n <!-- <label class="control-label">{{\'APPLICATION_FIELD\' | translate}}<span class="required" aria-required="true">*</span></label> -->\n <div class="input-group">\n <ui-select data-ng-if="!field.custom" data-ng-model="field.field" dynamic-name="randomName()" theme="bootstrap" on-select="setMetricId($item,$index)" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}"><span ng-bind-html="$select.selected.name"></span></ui-select-match>\n <ui-select-choices repeat="tableField.value as tableField in tableFields | filter: $select.search">\n <div ng-bind-html="tableField.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <input data-ng-if="field.custom" type="text" dynamic-name="randomName()" placeholder="{{\'APPLICATION_CUSTOM\' | translate}}" class="form-control" data-ng-model="field.field" required/>\n <span class="input-group-btn">\n <button type="button" data-ng-click="toggleCustom(field)" class="btn btn-default">\n <span class="icon-pencil" data-ng-class="{\'font-blue\':field.custom}"></span>\n </button>\n </span>\n </div>\n <span data-ng-show="forms.report.$submitted && !field.field" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END FIELD-->\n </td>\n <td>\n <!-- START ALIAS -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.report.$submitted && !field.alias}">\n <!-- <label class="control-label">{{\'APPLICATION_ALIAS\' | translate}}<span class="required" aria-required="true">*</span></label> -->\n <input type="text" dynamic-name="randomName()" placeholder="{{\'APPLICATION_ALIAS\' | translate}}" class="form-control" data-ng-model="field.alias" data-ng-pattern="\'[A-Za-z0-9 <>=,.%_\\\\+*!\\\\-\\\\[\\\\]]+\'" required/>\n <span data-ng-show="forms.report.$submitted && !field.alias" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="forms.report.$submitted && !field.alias" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n </span>\n </div>\n <!-- END ALIAS -->\n </td>\n <td>\n <!-- START FUNCTION -->\n <div class="form-group">\n <!-- <label class="control-label">{{\'APPLICATION_FIELD\' | translate}}<span class="required" aria-required="true">*</span></label> -->\n <ui-select data-ng-model="field.function" name="function" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_FUNCTION\' | translate}}" allow-clear>{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="function.value as function in functions | filter: $select.search">\n <div ng-bind-html="function.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END FUNCTION-->\n </td>\n <td>\n <!-- START FORMAT -->\n <div class="form-group">\n <!-- <label class="control-label">{{\'APPLICATION_FIELD\' | translate}}<span class="required" aria-required="true">*</span></label> -->\n <ui-select data-ng-model="field.format" name="format" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_FORMAT\' | translate}}" allow-clear>{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="format.value as format in formatFunctions | filter: $select.search">\n <div ng-bind-html="format.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END FORMAT-->\n </td>\n <td>\n <!-- START GROUP_BY -->\n <div class="form-group">\n <!-- <label class="control-label">{{\'APPLICATION_FIELD\' | translate}}<span class="required" aria-required="true">*</span></label> -->\n <ui-select data-ng-model="field.groupBy" name="groupBy" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_GROUP_BY\' | translate}}">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="groupBy.value as groupBy in groupByField | filter: $select.search">\n {{$translate.instant(groupBy.name)}}\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END GROUP_BY-->\n </td>\n <td>\n <!-- START ORDER_BY -->\n <div class="form-group">\n <!-- <label class="control-label">{{\'APPLICATION_FIELD\' | translate}}<span class="required" aria-required="true">*</span></label> -->\n <ui-select data-ng-model="field.orderBy" name="orderBy" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_ORDER_BY\' | translate}}" allow-clear>{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="orderBy in [\'ASC\',\'DESC\'] | filter: $select.search">\n <div ng-bind-html="orderBy | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END TABLE INPUT-->\n </td>\n <td class="report-field-remove">\n <button class="btn red" type="button" data-ng-click="removeField($index)"><i class="fa fa-times"></i></button>\n </td>\n <td class="report-field-handle">\n <!-- <img data-ng-src="assets/images/move.png" class="img-responsive"> -->\n </td>\n </tr>\n <tr data-ng-hide="report.Fields.length" class="unsortable">\n <td colspan="8" style="text-align:center;">\n <i>{{ \'MESSAGE_ADD_A_FIELD\' | translate }}</i>\n </td>\n </tr>\n </tbody>\n </table>\n <button type="button" class="btn btn-sm green padding-bottom" ng-click="addField()">\n <i class="fa fa-plus"></i> {{\'APPLICATION_ADD_FIELD\' | translate}}\n </button>\n <!-- END TABLE -->\n </div>\n <div data-ng-if="report.Fields.length" class="mbottom20 pbottom20">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_CONDITIONS\' | translate}} </span>\n </div>\n </div>\n <div class="alert alert-info">\n <strong>Output</strong>\n <br>\n <span ng-bind-html="output"></span>\n </div>\n\n <report-builder group="report.conditions.group" fields="tableFields" forms="forms" firstCall=\'true\'></report-builder>\n </div>\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}" />\n </form>\n </div>\n <!-- END BUILD TAB -->\n\n <!-- PREVIEW TAB -->\n <div class="tab-pane" id="tab_1_3">\n <div ng-slide-down="showResult" lazy-render duration="0.5">\n <div ui-grid="gridOptions" data-ng-if="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-move-columns class="grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n </div>\n </div>\n <!-- END PREVIEW TAB -->\n\n </div>\n </div>\n </div>\n </div>\n</div>\n'), -a.put("app/channels/chat/offline/list/list.html",'<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-bubble"></i>\n <a href="#">{{ \'APPLICATION_CHAT\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-login"></i>\n <a href="/channels/chat/offline/list">{{ \'APPLICATION_OFFLINE\' | translate }}</a>\n </li>\n </ul>\n </div>\n </div>\n</div>\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-question font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_OFFLINE_MESSAGES\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/chat/offline/message/message.directive.html",'<div class="message">\n <div class="row">\n <div class="col-md-12">\n <span class="bold">From: </span>\n [<a href="" data-ng-click="openContact(message.email)">{{message.email}}</a>]\n </div>\n </div>\n <br>\n <span class="todo-tasklist-date">\n <i class="icon-calendar"></i> {{message.createdAt | date:\'medium\'}} (<span am-time-ago="message.createdAt"></span>)\n </span>\n <hr>\n <div class="body text-left message-body" data-ng-bind="message.text"></div>\n <h5 data-ng-hide="message.text" class="media-heading"><i>{{\'MESSAGE_NO_AVAILABLE_TEXT\' | translate | lowercase}}</i></h5>\n</div>\n'),a.put("app/channels/chat/offline/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initView();">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-bubble"></i>\n <a href="#">{{ \'APPLICATION_CHAT\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-login"></i>\n <a href="/channels/chat/offline/list">Offline</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-user"></i>\n <a href="#">{{enquiry.username}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE CONTENT -->\n <div class="portlet light">\n <div class="portlet-title">\n <div class="caption">\n <span data-ng-if="enquiry.ChatWebsite" class="caption-subject font-green-sharp bold uppercase">{{enquiry.ChatWebsite.name}}</span>\n </div>\n </div>\n <div class="portlet-body">\n <div class="row">\n <div class="col-md-4">\n <!-- Visitor Information -->\n <div class="portlet">\n <div class="portlet-body">\n <v-accordion class="vAccordion--default">\n <v-pane expanded="true">\n <v-pane-header>\n <ng-letter-avatar data-ng-if="enquiry.ChatVisitor" height="40" width="40" data="{{enquiry.ChatVisitor.fullname}}" fontsize="25" avatarcustombgcolor="#B0B0B0" charCount="2" avatarcustomborder="border:2px solid #EA4C61" shape="round"></ng-letter-avatar>\n </v-pane-header>\n <v-pane-content>\n {{\'APPLICATION_NAME\' | translate}}:<p>{{enquiry.ChatVisitor.fullname}}</p>\n {{\'APPLICATION_EMAIL\' | translate}}:<p><a data-ng-click="openContact(enquiry.ChatVisitor.email)" href="">{{enquiry.ChatVisitor.email}}</a></p>\n <span data-ng-if="enquiry.ChatVisitor.labelOfflineData1">{{enquiry.ChatVisitor.labelOfflineData1}}: <p>{{enquiry.ChatVisitor.offlineData1}}</p></span>\n <span data-ng-if="enquiry.ChatVisitor.labelOfflineData2">{{enquiry.ChatVisitor.labelOfflineData2}}: <p>{{enquiry.ChatVisitor.offlineData2}}</p></span>\n <span data-ng-if="enquiry.ChatVisitor.labelOfflineData3">{{enquiry.ChatVisitor.labelOfflineData3}}: <p>{{enquiry.ChatVisitor.offlineData3}}</p></span>\n {{\'APPLICATION_REMOTE_ADDRESS\' | translate}}:<p>{{enquiry.ChatVisitor.remote_address}}</p>\n {{\'APPLICATION_BROWSER\' | translate}}:<p>{{enquiry.ChatVisitor.browser}}</p>\n {{\'APPLICATION_REFERER\' | translate}}:<p>{{enquiry.ChatVisitor.referer}} - {{enquiry.ChatWebsite.name}}</p>\n {{\'APPLICATION_OS\' | translate}}:<p>{{enquiry.ChatVisitor.os}}</p>\n </v-pane-content>\n </v-pane>\n </v-accordion>\n </div>\n </div>\n </div>\n <div class="col-md-8">\n <!-- Offline message -->\n <div id="mail-box">\n <ul class="chats">\n <li class="in">\n <enquiry-message message="enquiry" list-id="enquiry.ChatWebsite.ListId"></enquiry-message>\n </li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/chat/online/list/list.html",'<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-bubble"></i>\n <a href="#">{{ \'APPLICATION_CHAT\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-login"></i>\n <a href="/channels/chat/online/list">{{ \'APPLICATION_ONLINE\' | translate }}</a>\n </li>\n </ul>\n </div>\n </div>\n</div>\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-question font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_VISITORS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/chat/online/view/view.detail.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_DETAIL\' | translate}}</span>\n </div>\n </div>\n <div class="portlet-body row" data-ng-init="initView()">\n <div class="col-md-6">\n <div class="news-blocks">\n <h3>\n <a href="#" class="inactive-link">{{\'APPLICATION_MESSAGES\' | translate}}</a>\n <!-- <a href="#" data-ng-click="export()" data-ng-show="chatRoom.ChatMessages.length" class="btn btn-sm blue pull-right"><i class="icon-cloud-download"></i> {{\'APPLICATION_EXPORT\' | translate}} CSV </a> -->\n <a href="api/chat/rooms/{{chatRoom.id}}/export" target="_blank" data-ng-show="chatRoom.ChatMessages.length" class="btn btn-sm blue pull-right"><i class="icon-cloud-download"></i> {{\'APPLICATION_EXPORT\' | translate}} CSV </a>\n <hr>\n </h3>\n <div class="news-block-tags">\n <em am-time-ago="chatRoom.ChatVisitor.ChatEnquiry.createdAt"></em>\n </div>\n <p>\n <div ng-scrollbars ng-scrollbars-config="config">\n <ul class="chats">\n <li data-ng-class="{\'out\': message.User, \'in\':message.ChatVisitor}" data-ng-repeat="message in chatRoom.ChatMessages | orderBy:\'createdAt\'">\n <img class="avatar" data-ng-src="api/users/avatar/{{message.User.userpic || \'unknown_avatar\'}}">\n <div class="message">\n <span class="arrow">\n </span>\n <a href="#" class="name">\n {{message.User ? message.User.fullname : message.ChatVisitor.fullname}}\n </a>\n <span class="datetime">\n at {{message.createdAt | date: \'medium\'}}\n </span>\n <span class="body">\n {{message.body}}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </div>\n </div>\n <div class="col-md-6">\n <div class="news-blocks">\n <h3>\n <a href="#" class="inactive-link">{{\'APPLICATION_VISITOR\' | translate}}</a>\n <hr>\n </h3>\n <div class="margin-top-20 profile-desc-link">\n <i class="icon-user"></i>\n <a href="#" class="inactive-link">{{chatRoom.ChatVisitor.fullname}}</a>\n </div>\n <div class="margin-top-20 profile-desc-link">\n <i class="icon-envelope"></i>\n <a href="#" class="inactive-link">{{chatRoom.ChatVisitor.email}}</a>\n </div>\n <div class="margin-top-20 profile-desc-link">\n <i class="icon-globe"></i>\n <a href="#" class="inactive-link">{{chatRoom.ChatVisitor.remote_address}}</a>\n </div>\n <div class="margin-top-20 profile-desc-link">\n <i class="icon-home"></i>\n <a href="#" class="inactive-link">{{chatRoom.ChatVisitor.referer}} - {{chatRoom.ChatVisitor.ChatWebsite.name}}</a>\n </div>\n <div class="margin-top-20 profile-desc-link">\n <i class="icon-cursor"></i>\n <a href="#" class="inactive-link">{{chatRoom.ChatVisitor.browser}}</a>\n </div>\n <div class="margin-top-20 profile-desc-link">\n <i class="icon-screen-desktop"></i>\n <a href="#" class="inactive-link">{{chatRoom.ChatVisitor.os}}</a>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n'),a.put("app/channels/chat/online/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-bubble"></i>\n <a href="#">{{ \'APPLICATION_CHAT\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-login"></i>\n <a href="/channels/chat/online/list">Online</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/enquiry.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- START USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{chatRoom.ChatVisitor.email}}\n </div>\n <div class="profile-usertitle-job">\n {{chatRoom.ChatVisitor.fullname}}\n </div>\n </div>\n <!-- END USER TITLE -->\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.channels.chat.online.view.detail\')}">\n <a data-ng-href="/channels/chat/online/view/{{chatRoom.id}}/detail">\n <i class="icon-tag"></i>\n {{ \'APPLICATION_DETAIL\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/chat/preview/preview.html",'<style>\n.xc_header_logo\n{\n display:block;\n background-image:url({{chatWebsite.remote}}/api/xchatty/assets?resource=images/motion_logo.png);\n width:40px;\n height:40px;\n float:left;;\n margin-left: 10px !important;\n margin-top: 6px !important;\n}\n.xc_rating {\n text-align: center;\n}\n.xc_rating_label > input{ /* HIDE RADIO */\n display:none;\n}\n.xc_rating_label > input + img{ /* IMAGE STYLES */\n cursor:pointer;\n border:2px solid transparent;\n}\n.xc_rating_label > input:checked + img{ /* (CHECKED) IMAGE STYLES */\n /*border:2px solid #f00;*/\n background-color: #efefef;\n}\n\n.xc_label {\n display: inline-block;\n max-width: 100%;\n margin-bottom: 5px;\n font-weight: bold;\n}\n\n.xc_online_message,\n.xc_offline_message,\n.xc_rating_message\n{\n text-align: center;\n}\n\n.xc_div_group {\n margin: 10px 0 10px 0;\n}\n.xc_footer\n{\n text-align: center;\n padding-bottom: 5px;\n}\n\n.xc_powered\n{\n color: grey;\n font: 10px/16px "Lucida Grande","Lucida Sans Unicode",Arial,Verdana,sans-serif;\n padding-bottom: 5px;\n}\n\n.xc_chat_container\n{\n //width:379px;\n //position:fixed;\n //bottom:0;\n //right:50px;\n z-index:9999;\n background-color:transparent;\n}\n\n.xc_chat_container *\n{\n font-family:Arial,Helvetica,sans-serif;\n font-size:13px;\n margin:0;\n padding:0;\n}\n\n.xc_chat_container p\n{\n margin:5px 0;\n}\n\n.xc_signup_wrapper\n{\n max-height:375px;\n}\n\n.xc_conversation_container\n{\n max-height:375px;\n list-style:none;\n overflow:auto;\n margin:0;\n padding:20px 10px;\n}\n\n.xc_conversation_container a\n{\n color:#036;\n}\n\n.xc_conversation_container a.xc_btn_style\n{\n color:#fff;\n}\n\ndiv.xc_chat_head\n{\n color:#fff;\n background:{{chatWebsite.color}};\n //border-radius: 20px 20px 0px 0px !important;\n height:52px;\n line-height:55px;\n cursor:pointer;\n}\n\ndiv.xc_chat_head.rounded\n{\n border-radius: 20px 20px 0px 0px !important;\n}\n\ndiv.xc_chat_head.squared\n{\n //border-radius: 20px 20px 0px 0px !important;\n}\n\n.xc_chat_head-title\n{\n margin:5px 0 0 15px;\n color: #fff;\n}\n\n.xc_header_icon\n{\n display:block;\n background-image:url({{chatWebsite.remote}}/api/xchatty/assets?resource=images/iconVisitorchat.png);\n width:21px;\n height:16px;\n float:right;\n margin:20px 20px 0 0;\n}\n\n.xc_header_icon span.xc_notification_badge span\n{\n display:block;\n height:16px;\n width:15px;\n text-align:center;\n font-size:9px;\n color:#555;\n position:relative;\n top:-20px;\n left:4px;\n margin:0;\n padding:0;\n}\n\n.xc_sub-head-spacer\n{\n padding:1px;\n}\n\n.xc_conversation\n{\n display:none;\n margin:0 12px 0 11px;\n}\n\n.xc_chat_toggle_container\n{\n /*background:mediumslateblue center 52px;*/\n background: white;\n border-style: solid;\n border-width: 1px;\n border-color: {{chatWebsite.color}};\n //display:none;\n}\n\n.xc_signup_wrapper,.xc_notifications_wrapper,.xc_enquiry_wrapper,.xc_rating_wrapper\n{\n //display:none;\n display:block;\n overflow:auto;\n line-height:1;\n padding:25px;\n}\n\n.xc_exit_chat_container\n{\n text-align:right;\n width:95%;\n margin:0 auto;\n padding:5px 1px 0 0;\n}\n\n.xc_exit_chat_container span,.xc_exit_chat_container a\n{\n font-size:80%;\n color:#666;\n text-decoration:none;\n}\n\n.xc_exit_chat_container a:hover\n{\n color:#333;\n}\n\na.xc_btn_exit_chat_confirm:hover\n{\n color:red;\n}\n\na.xc_btn_exit_chat_cancel:hover\n{\n color:#0c0;\n}\n\nform.xc_form_reply\n{\n position:relative;\n}\n\n.xc_form_reply\n{\n /*background-color:#e3e3e3;*/\n text-align:center;\n /*border-top:1px solid #d3d3d3;*/\n}\n\n.xc_input_message\n{\n height:100px;\n margin:10px auto 5px;\n}\n\n.xc_input_enquiry_message,\n.xc_input_rating_message\n{\n height:100px;\n}\n\n.xc_form_signup,.xc_form_enquiry,.xc_form_rating\n{\n /*text-align:center;*/\n}\n\n.xc_chat_container textarea,.xc_chat_container input[type=text]\n{\n width:95%;\n min-width:95%;\n max-width:95%;\n -webkit-box-sizing:border-box;\n -moz-box-sizing:border-box;\n box-sizing:border-box;\n background-color:#fff;\n border:1px solid #ccc;\n -webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);\n -moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);\n box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);\n -webkit-transition:border linear .2s, box-shadow linear .2s;\n -moz-transition:border linear .2s, box-shadow linear .2s;\n -o-transition:border linear .2s, box-shadow linear .2s;\n transition:border linear .2s, box-shadow linear .2s;\n display:inline-block;\n font-size:14px;\n line-height:20px;\n color:#555;\n -webkit-border-radius:4px;\n -moz-border-radius:4px;\n border-radius:4px;\n vertical-align:middle;\n margin:3px 0;\n padding:4px 6px;\n resize: none;\n}\n\n.xc_chat_container textarea:focus,.xc_chat_container input[type=text]:focus\n{\n outline: {{chatWebsite.color_focus}} auto 5px;\n}\n\n.xc_chat_container input[type=text]\n{\n height: 30px;\n}\n\n.xc_message_sending textarea, .xc_enquiry_sending textarea\n{\n background: #fff url({{chatWebsite.remote}}/api/xchatty/assets?resource=images/loading.gif) 98% 5px no-repeat;\n}\n\n.xc_chatrow\n{\n display:block;\n border-top:1px dashed #e3e3e3;\n margin:5px 0;\n clear: both;\n}\n\n.xc_chatrow p\n{\n color:#444;\n word-wrap:break-word;\n}\n\n.xc_time\n{\n float:right;\n font-size:80%;\n color:#ccc;\n padding-left:12px;\n margin:3px;\n}\n\n.xc_submission_pending\n{\n background:transparent url({{chatWebsite.remote}}/api/xchatty/assets?resource=images/bullet_clock.png) left center norepeat;\n}\n\n.xc_submission_confirmed\n{\n background:transparent url({{chatWebsite.remote}}/api/xchatty/assets?resource=images/bullet_tick.png) left center norepeat;\n}\n\n.xc_fullname\n{\n font-weight:700;\n}\n\n.xc_fullname:after\n{\n content:":";\n}\n\n.xc_avatar\n{\n float: left;\n margin: 0 5px 5px 0;\n display: inline-block;\n width: 40px;\n height: 40px;\n border-radius: 5px;\n -moz-border-radius: 5px;\n -webkit-border-radius: 5px;\n}\n\n.xc_smilie\n{\n background-repeat:no-repeat;\n display:inline-block;\n width:18px;\n height:18px;\n text-indent:-9999px;\n white-space:nowrap;\n}\n\n.xc_btn_load_more\n{\n width:100%!important;\n}\n\n.xc_notifications_wrapper\n{\n text-shadow:0 1px 0 rgba(255,255,255,0.5);\n}\n\n.xc_notification_success\n{\n color:#468847;\n}\n\n.xc_notification_error\n{\n color:#b94a48;\n}\n\n.xc_errorlist\n{\n margin:0 0 0 25px;\n padding:0;\n}\n\ni.xc_btn_notifications_close\n{\n float:right;\n font-weight:700;\n font-size:20px;\n color:#ccc;\n cursor:pointer;\n margin:-15px 0 0;\n padding:0;\n}\n\n.xc_btn_style\n{\n width:95%;\n text-align:center;\n line-height:1.2;\n font-size:90%;\n -moz-box-shadow:inset 0 1px 0 0 {{chatWebsite.color_button}};\n -webkit-box-shadow:inset 0 1px 0 0 {{chatWebsite.color_button}};\n box-shadow:inset 0 1px 0 0 {{chatWebsite.color_button}};\n background:0;\n background-color:{{chatWebsite.color_button}};\n -moz-border-radius:4px;\n -webkit-border-radius:4px;\n border-radius:4px;\n border:1px solid {{chatWebsite.color_button}};\n display:inline-block;\n color:#fff;\n font-weight:700;\n text-decoration:none;\n text-shadow:1px 1px 0 #000c17;\n margin:0 auto 5px;\n padding:2px 0;\n}\n\n.xc_btn_style:hover\n{\n background:0;\n background-color:{{chatWebsite.color_button}};\n color: #fff;\n text-decoration: none;\n}\n\n.xc_btn_style:active\n{\n position:relative;\n top:1px;\n}\n\n.xc_composing_container\n{\n display: none;\n width: 95%;\n margin: 0 auto;\n background: transparent url({{chatWebsite.remote}}/api/xchatty/assets?resource=images/bullet_pencil.png) 6px center no-repeat;\n padding-left: 19px;\n font-style: italic;\n}\n\n@media only screen and (max-height: 620px) {\n .xc_conversation_container\n {\n max-height:300px!important;\n }\n}\n\n@media only screen and (max-height: 545px) {\n .xc_conversation_container\n {\n max-height:200px!important;\n }\n}\n\n@media only screen and (max-height: 445px) {\n .xc_conversation_container\n {\n max-height:150px!important;\n }\n}\n\n@media only screen and (max-width: 480px) {\n .xc_chat_container\n {\n width:95%!important;\n right:auto!important;\n -webkit-border-top-left-radius:15px;\n -webkit-border-top-right-radius:15px;\n -moz-border-radius-topleft:15px;\n -moz-border-radius-topright:15px;\n border-top-left-radius:15px;\n border-top-right-radius:15px;\n box-shadow:0 0 5px rgba(0,0,0,.5);\n -webkit-box-shadow:0 0 5px rgba(0,0,0,.5);\n -moz-box-shadow:0 0 5px rgba(0,0,0,.5);\n }\n\n div.xc_chat_head\n {\n background-color:#036;\n background-image:none;\n line-height:25px;\n height:auto;\n -webkit-border-top-left-radius:15px;\n -webkit-border-top-right-radius:15px;\n -moz-border-radius-topleft:15px;\n -moz-border-radius-topright:15px;\n border-top-left-radius:15px;\n border-top-right-radius:15px;\n padding:10px;\n }\n\n .xc_chat_toggle_container\n {\n background-color:#fff;\n background-image:none;\n border-color:#036;\n border-style:solid;\n border-width:0 1px;\n }\n\n .xc_header_icon\n {\n background-image:url({{chatWebsite.remote}}/api/xchatty/assets?resource=images/icon_visitorchat.png);\n margin:0;\n }\n\n .xc_header_icon span.xc_notification_badge span\n {\n top:-5px;\n left:5px;\n }\n\n .xc_notification_success\n {\n background-color:#dff0d8;\n border:1px solid #d6e9c6;\n }\n\n .xc_conversation_container\n {\n max-height:375px;\n border-color:#036;\n }\n\n .xc_notification_error\n {\n background-color:#f2dede;\n border:1px solid #eed3d7;\n }\n\n .xc_sub-head-spacer\n {\n display:none;\n padding:0;\n }\n\n .xc_chat_head-title,.xc_conversation\n {\n margin:0;\n }\n}\n</style>\n<div class="xc_chat_container">\n <div class="xc_chat_head {{chatWebsite.header_shape}}">\n <i class="xc_header_icon">\n <span class="xc_notification_badge">\n <span class="xc_notification_badge_number"></span>\n </span>\n </i>\n <i class="xc_header_logo" style="background-image:url(/api/xchatty/assets?resource=images/{{(chatWebsite.defaultLogo || !license.custom) ? \'motionLogo.png\' : (!chatWebsite.defaultLogo && chatWebsite.logo && license.custom) ? chatWebsite.logo+\'&uploaded\' : \'motionLogo.png\'}});background-size:contain;"></i>\n </a>\n <span class="xc_chat_head-title">{{statePreview.state == \'online\' ? chatWebsite.header_online : chatWebsite.header_offline}}</span>\n </div>\n <div class="xc_chat_toggle_container">\n <div class="xc_sub-head-spacer"></div>\n <!-- <div class="xc_notifications_wrapper">\n <ul class="xc_errorlist"></ul>\n </div> -->\n <div class="xc_enquiry_wrapper" data-ng-show=\'statePreview.state == "offline"\'>\n <form class="xc_form_enquiry" accept-charset="UTF-8">\n <p class="xc_offline_message" ng-bind-html=\'chatWebsite.offline_message\'></p>\n <br>\n <div ng-if="chatWebsite.enquiry_enable">\n <div class="xc_div_group">\n <label for="enquiryFullname" class="xc_label">{{chatWebsite.name_title}} *</label>\n <input id="enquiryFullname" maxlength="45" data-label="Name" type="text" name="data[Enquiry][fullname]" placeholder="{{chatWebsite.username_placeholder}}" class="xc_input_enquiry_fullname" required/>\n </div>\n <br>\n <div class="xc_div_group">\n <label for="enquiryEmail" class="xc_label">{{chatWebsite.email_title}} *</label>\n <input id="enquiryEmail" maxlength="85" type="text" data-label="Email Address" name="data[Enquiry][email]" placeholder="{{chatWebsite.email_placeholder}}" class="xc_input_enquiry_email" required/>\n </div>\n <br>\n <div class="xc_div_group">\n <label for="enquiryMessage" class="xc_label">{{chatWebsite.message_title}} *</label>\n <textarea id="enquiryMessage" data-label="Message" maxlength="1500" placeholder="{{chatWebsite.enquiry_message_placeholder}}" name="data[Enquiry][message]" class="xc_input_enquiry_message" required></textarea>\n </div>\n <br>\n <button type="submit" class="xc_btn_enquiry xc_btn_style">{{chatWebsite.enquiry_button}}</button>\n </div>\n </form>\n </div>\n <div class="xc_signup_wrapper" data-ng-show=\'statePreview.state == "online"\'>\n <form class="xc_form_signup" accept-charset="UTF-8">\n <p class="xc_online_message" ng-bind-html=\'chatWebsite.online_message\'></p>\n <br>\n <div class="xc_div_group">\n <label for="dataFullname" class="xc_label">{{chatWebsite.name_title}} *</label>\n <input maxlength="45" id="dataFullname" data-label="Fullname" type="text" name="data[Discussion][fullname]" placeholder="{{chatWebsite.username_placeholder}}" class="xc_input_fullname" required/>\n </div>\n <br>\n <div class="xc_div_group">\n <label for="dataEmail" class="xc_label">{{chatWebsite.email_title}} *</label>\n <input maxlength="85" id="dataEmail" data-label="Email Address" type="text" name="data[Discussion][email]" placeholder="{{chatWebsite.email_placeholder}}" class="xc_input_email" required/>\n </div>\n <br>\n <input type="hidden" class="xc_input_visitor_time" name="data[Discussion][visitor_time]" />\n <button type="submit" class="xc_btn_signup xc_btn_style">{{chatWebsite.start_chat_button}}</button>\n </form>\n </div>\n <div class="xc_rating_wrapper" data-ng-show=\'statePreview.state == "rating"\'>\n <form class="xc_form_rating" accept-charset="UTF-8">\n <p class="xc_rating_message">{{chatWebsite.rating_message}}</p>\n <br>\n <div class="xc_rating">\n <label class="xc_rating_label" style="padding:30px;">\n <input type="radio" name="data[Rating][rating]" value="good" />\n <img src="{{chatWebsite.remote}}/api/xchatty/assets?resource=images/like.png" alt="Good" height="50"/>\n </label>\n <label class="xc_rating_label" style="padding:30px;">\n <input type="radio" name="data[Rating][rating]" value="bad"/>\n <img src="{{chatWebsite.remote}}/api/xchatty/assets?resource=images/dislike.png" alt="Good" height="50"/>\n </label>\n </div>\n <div class="xc_div_group">\n <label for="ratingMessage" class="xc_label">Message</label>\n <textarea id="ratingMessage" data-label="Message" maxlength="1500" name="data[Rating][message]" class="xc_input_rating_message"></textarea>\n </div>\n <button type="submit" class="xc_button_rating xc_btn_style">{{chatWebsite.rating_send}}</button>\n <button type="button" class="xc_button_skip_rating xc_btn_style">{{chatWebsite.rating_skip}}</button>\n </form>\n </div>\n <div class="xc_footer">\n <div data-ng-if="chatWebsite.defaultWhiteLabel || !license.custom" class="xc_powered"><a>Powered by xCALLY</a></div>\n <div data-ng-if="!chatWebsite.defaultWhiteLabel && license.custom" data-ng-bind-html="chatWebsite.whiteLabel"></div>\n </div>\n</div>\n</div>\n'),a.put("app/channels/chat/queue/list/list.create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_QUEUE\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.name.$touched || form.$submitted) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" data-ng-pattern="settings.patternName" required />\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$invalid && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$invalid && form.name.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_PATTERN_NAME\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START STRATEGY -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.strategy.$touched || form.$submitted) && form.strategy.$invalid}">\n <label class="control-label">{{\'APPLICATION_STRATEGY\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="item.strategy" name="strategy" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected | uppercase}}</ui-select-match>\n <ui-select-choices repeat="strategy in [\'beepall\',\'roundrobin\',\'rrmemory\'] | filter: $select.search">\n <div ng-bind-html="strategy.toUpperCase() | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form.strategy.$touched || form.$submitted) && form.strategy.$invalid && form.strategy.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END STRATEGY -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.timeout.$touched || form.$submitted) && form.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_AGENT_TIMEOUT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" name="timeout" placeholder="Timeout" class="form-control" data-ng-model="item.timeout" required min="1"/>\n <span data-ng-show="(form.timeout.$touched || form.$submitted) && form.timeout.$invalid && form.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n\n <!-- START AGENTS-->\n <div class="form-body" data-ng-init="getTeams()">\n <label for="penalty">{{\'APPLICATION_PENALTY\' | translate}}</label>\n <div class="input-group input-small mbottom20">\n <input type="number" class="spinner-input form-control" maxlength="3" data-ng-model="item.penalty" readonly>\n <div class="spinner-buttons input-group-btn btn-group-vertical">\n <button type="button" class="btn spinner-up btn-xs blue" data-ng-click="item.penalty=item.penalty+1">\n <i class="fa fa-angle-up"></i>\n </button>\n <button type="button" class="btn spinner-down btn-xs blue" data-ng-disabled="!item.penalty" data-ng-click="item.penalty=item.penalty-1">\n <i class="fa fa-angle-down"></i>\n </button>\n </div>\n </div>\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-team">\n </div>\n </div>\n </div>\n <!-- END AGENTS-->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'), -a.put("app/channels/chat/queue/list/list.html",'<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-bubble"></i>\n <a href="#">{{ \'APPLICATION_CHAT\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-docs"></i>\n <a href="#">{{ \'APPLICATION_QUEUES\' | translate }}</a>\n </li>\n </ul>\n </div>\n </div>\n</div>\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-docs font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_QUEUES\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <a class="btn green-jungle" href="#" data-ng-click="createItem()" data-ng-if="Auth.isAdmin()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_QUEUE\' | translate }}\n </a>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/chat/queue/view/view.agents.html",'<div class="row" data-ng-init="getTeams()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_AGENTS\' | translate}}</span>\n </div>\n </div>\n <div class="portlet-body">\n <!-- BEGIN FORM-->\n <form action="index.html" class="form-horizontal form-row-seperated">\n <div class="form-body">\n <label for="penalty">{{\'APPLICATION_PENALTY\' | translate}}</label>\n <div class="input-group input-small mbottom20">\n <input type="number" class="spinner-input form-control" maxlength="3" data-ng-model="queue.penalty" readonly>\n <div class="spinner-buttons input-group-btn btn-group-vertical">\n <button type="button" class="btn spinner-up btn-xs blue" data-ng-click="queue.penalty=queue.penalty+1">\n <i class="fa fa-angle-up"></i>\n </button>\n <button type="button" class="btn spinner-down btn-xs blue" data-ng-disabled="!queue.penalty" data-ng-click="queue.penalty=queue.penalty-1">\n <i class="fa fa-angle-down"></i>\n </button>\n </div>\n </div>\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-team">\n </div>\n </div>\n </div>\n </form>\n <!-- END FORM-->\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/chat/queue/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getQueue()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-bubble"></i>\n <a href="#">{{ \'APPLICATION_CHAT\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-docs"></i>\n <a href="/channels/chat/queues/list">{{ \'APPLICATION_QUEUES\' | translate }}</a>\n <i data-ng-show="queue" class="fa fa-angle-right"></i>\n </li>\n <li data-ng-show="queue">\n <a href="#">{{queue.name}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/queue.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{queue.name}}\n </div>\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.channels.chat.queues.view.settings\')}">\n <a data-ng-href="/channels/chat/queues/view/{{queue.id}}/settings">\n <i class="icon-settings"></i>\n {{ \'APPLICATION_SETTINGS\' | translate}} </a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.channels.chat.queues.view.agents\')}" data-ng-show="Auth.getCurrentUser().role === \'admin\'">\n <a data-ng-href="/channels/chat/queues/view/{{queue.id}}/agents">\n <i class="icon-people"></i>\n {{ \'APPLICATION_AGENTS\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/chat/queue/view/view.settings.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_SETTINGS\' | translate}}</span>\n </div>\n </div>\n <div class="portlet-body">\n <form name="forms.general" data-ng-submit="forms.general.$valid && updateChatQueue()" novalidate>\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="queue.name" data-ng-pattern="settings.patternName" required />\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid && forms.general.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid && forms.general.name.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_PATTERN_NAME\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START STRATEGY -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.strategy.$touched || forms.general.$submitted) && forms.general.strategy.$invalid}">\n <label class="control-label">{{\'APPLICATION_STRATEGY\' | translate}}</label>\n <ui-select data-ng-model="queue.strategy" name="strategy" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected | uppercase}}</ui-select-match>\n <ui-select-choices repeat="strategy in [\'beepall\',\'roundrobin\',\'rrmemory\'] | filter: $select.search">\n <div ng-bind-html="strategy.toUpperCase() | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END STRATEGY -->\n\n <!-- START TIMEOUT -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_AGENT\' | translate}} {{\'APPLICATION_TIMEOUT\' | translate}}</label>\n <input type="number" name="timeout" placeholder="{{\'APPLICATION_TIMEOUT\' | translate}}" class="form-control" min="1" data-ng-model="queue.timeout"/>\n </div>\n <!-- END TIMEOUT -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="queue.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n <input data-ng-if="Auth.isAdmin()" class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/chat/realtime/view/agent/agent.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initAgents()">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns class="ui-grid" ui-grid-tree-view ui-grid-expandable-row ui-grid-pagination ui-grid-auto-resize>\n <span us-spinner spinner-key="grid-spinner" spinner-start-active="true"></span>\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/chat/realtime/view/agent/agent.modal.info.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_INTERFACE_INFO\' | translate }}</h3>\n</div>\n<div class="modal-body">\n<div data-ng-if="agent.ipaddr" class="well">\n <div>{{agent.ipaddr}}:{{agent.port}}</div>\n <div>{{agent.fullcontact}}</div>\n <div>{{agent.useragent}}</div>\n <div>{{agent.lastms}}</div>\n</div>\n<div data-ng-if="!agent.ipaddr" class="alert alert-danger" role="alert">\n {{\'MESSAGE_NO_AVAILABLE_INFO\' | translate}}\n</div>\n</div>\n<div class="modal-footer">\n <button class="btn default" type="button" ng-click="close()">{{ \'APPLICATION_CLOSE\' | translate }}</button>\n</div>\n'),a.put("app/channels/chat/realtime/view/agent/queue.modal.add.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_JOIN_QUEUE\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <div class="form-group row">\n <label class="col-md-2 control-label" style="margin-top: 7px;">{{\'APPLICATION_QUEUE\' | translate}}:</label>\n <div class="col-md-10">\n <ui-select multiple ng-model="item.queues" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_QUEUE\' | translate}}">{{$item.name}}</ui-select-match>\n <ui-select-choices repeat="queue.id as queue in queues | filter: $select.search">\n <div ng-bind-html="queue.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n</div>\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/chat/realtime/view/application/application.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initApplications()">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns class="ui-grid" ui-grid-auto-resize>\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/chat/realtime/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-bubble"></i>\n <a href="#">{{ \'APPLICATION_CHAT\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-energy"></i>\n <a href="#">{{ \'APPLICATION_REALTIME\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <div>\n <nav class="navbar navbar-default" role="navigation">\n <div class="collapse navbar-collapse">\n <ul class="nav navbar-nav">\n <li data-ng-class="{\'active\': $state.is(\'main.channels.chat.realtime.view.agents\')}">\n <a href="/channels/chat/realtime/view/agents">\n {{\'APPLICATION_AGENTS\' | translate}}\n </a>\n </li>\n <li data-ng-class="{\'active\': $state.is(\'main.channels.chat.realtime.view.applications\')}">\n <a href="/channels/chat/realtime/view/applications">\n {{\'APPLICATION_APPLICATIONS\' | translate}}\n </a>\n </li>\n </ul>\n </div>\n </nav>\n </div>\n\n <div ui-view></div>\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/chat/room/external/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n <div class="portlet light" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption">\n <div class="btn-group btn-group-solid">\n <button type="button" class="btn btn-sm default" data-ng-model="query.status" uib-btn-radio="\'OPEN\'" uib-uncheckable>OPEN</button>\n </div>\n <div class="btn-group btn-group-solid">\n <button type="button" class="btn btn-sm default" data-ng-model="query.status" uib-btn-radio="\'CLOSED\'" uib-uncheckable>CLOSED</button>\n </div>\n </div>\n <div class="actions">\n <a href="#" class="btn btn-icon-only blue" data-ng-click="tagItems();" data-ng-show="id.length">\n <i class="fa fa-tags"></i>\n </a>\n <a href="#" class="btn btn-icon-only default" data-ng-click="getPage();">\n <i class="fa fa-refresh"></i>\n </a>\n </div>\n</div>\n<div class="portlet-title" data-ng-show="tags.length">\n <!-- START TAGS -->\n <div class="form-group">\n <div class="row">\n <div class="col-md-1">\n <a href="#" class="btn btn-icon-only">\n <i class="fa fa-tags" style="color: gray;"></i>\n </a>\n </div>\n <div class="col-md-11">\n <ui-select multiple data-ng-model="query.tags" theme="bootstrap" on-select="onChanged($item, $model)" on-remove="onChanged($item, $model)">\n <ui-select-match placeholder="Search by tag...">{{$item}}</ui-select-match>\n <ui-select-choices repeat="tag in tags | filter:$select.search">\n {{tag}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n </div>\n <!-- END TAGS -->\n</div>\n<div class="portlet-body">\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="spinner-grid" spinner-start-active="true"></span>\n <!-- END UI-GRID SPINNER -->\n\n <!-- START TABLE -->\n\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-selection ui-grid-pagination class="ui-grid">\n <div class="watermark" data-ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/chat/room/group/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n <div class="portlet light" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption">\n <div class="btn-group btn-group-solid">\n <button type="button" class="btn btn-sm default" data-ng-model="query.status" uib-btn-radio="\'OPEN\'" uib-uncheckable>OPEN</button>\n </div>\n <div class="btn-group btn-group-solid">\n <button type="button" class="btn btn-sm default" data-ng-model="query.status" uib-btn-radio="\'CLOSED\'" uib-uncheckable>CLOSED</button>\n </div>\n </div>\n <div class="actions">\n <a href="#" class="btn btn-icon-only default" data-ng-click="getPage();">\n <i class="fa fa-refresh"></i>\n </a>\n </div>\n</div>\n<div class="portlet-title" data-ng-show="tags.length">\n <!-- START TAGS -->\n <div class="form-group">\n <div class="row">\n <div class="col-md-1">\n <a href="#" class="btn btn-icon-only">\n <i class="fa fa-tags" style="color: gray;"></i>\n </a>\n </div>\n <div class="col-md-11">\n <ui-select multiple data-ng-model="query.tags" theme="bootstrap" on-select="onChanged($item, $model)" on-remove="onChanged($item, $model)">\n <ui-select-match placeholder="Search by tag...">{{$item}}</ui-select-match>\n <ui-select-choices repeat="tag in tags | filter:$select.search">\n {{tag}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n </div>\n <!-- END TAGS -->\n</div>\n<div class="portlet-body">\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="spinner-grid" spinner-start-active="true"></span>\n <!-- END UI-GRID SPINNER -->\n\n <!-- START TABLE -->\n\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination class="ui-grid">\n <div class="watermark" data-ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/chat/room/internal/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12" data-ng-init="initView()">\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="spinner-grid" spinner-start-active="true"></span>\n <!-- END UI-GRID SPINNER -->\n\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination class="ui-grid">\n <div class="watermark" data-ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/chat/room/room.add.html",'<div class="modal-header">\n <button ng-if="modal.dismissable" type="button" data-ng-click="$dismiss()" class="close">×</button>\n <h4 class="modal-title">{{\'APPLICATION_NEW_GROUP\' | translate}}</h4>\n</div>\n\n<div class="modal-body">\n <div class="portlet box blue">\n <div class="portlet-title">\n <div class="caption">\n <i class="icon-people"></i>{{\'APPLICATION_AGENTS\' | translate}}\n </div>\n </div>\n <div class="portlet-body">\n <ul>\n <li data-ng-repeat="item in items">\n {{item.fullname}}\n </li>\n <li data-ng-repeat="item in selected.items">\n {{item.fullname}}\n </li>\n </ul>\n </div>\n </div>\n\n <ui-select multiple name="items" ng-model="selected.items" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_SELECTED_AGENTS\' | translate}}">{{$item.fullname}}</ui-select-match>\n <ui-select-choices repeat="{id: agent.id, fullname: agent.fullname} as agent in agents.rows | filter: $select.search">\n {{agent.fullname}}\n </ui-select-choices>\n </ui-select>\n</div>\n\n<div class="modal-footer">\n <button class="btn btn-success" type="button" data-ng-click="ok()" data-ng-show="selected.items.length">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" data-ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/chat/room/room.close.html",'<div class="modal-header">\n <button ng-if="modal.dismissable" type="button" ng-click="$dismiss()" class="close">×</button>\n <h4 ng-if="modal.title" ng-bind="modal.title | translate" class="modal-title"></h4>\n</div>\n<div class="modal-body">\n <p ng-if="modal.text && !closed" ng-bind="modal.text | translate"></p>\n <form name="form" novalidate data-ng-init="initDisposition()">\n <div class="form-group">\n <ui-select data-ng-model="item.disposition" name="list" theme="bootstrap" data-ng-disabled="!dispositions.length" required>\n <ui-select-match placeholder="{{\'APPLICATION_DISPOSITION\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="disposition.name as disposition in dispositions | filter: $select.search">\n <div ng-bind-html="disposition.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <div class="note note-warning" data-ng-hide="dispositions.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_DISPOSITIONS_AVAILABLE\' | translate }}\n </p>\n </div>\n</form>\n <!-- <div ng-if="modal.html" ng-bind-html="modal.html"></div> -->\n</div>\n<div class="modal-footer">\n <button class="btn btn-danger" type="button" ng-click="ok()">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n <!-- <button ng-repeat="button in modal.buttons" ng-class="button.classes" ng-click="button.click($event)" ng-bind="button.text" class="btn"></button> -->\n</div>\n'),a.put("app/channels/chat/room/room.directive.html",'<div class="portlet light">\n <div class="portlet-title">\n <div class="caption">\n <span data-ng-if="chatRoom" class="label label-sm label-default">{{chatRoom.status}}</span>\n <span data-ng-if="chatRoom.ChatWebsite"> | </span>\n <span data-ng-if="chatRoom.ChatWebsite" class="caption-subject font-green-sharp bold uppercase">{{chatRoom.ChatWebsite.name | truncate: 25: \'...\': true}}</span>\n </div>\n <div class="actions">\n <button class="btn btn-icon-only btn-primary" data-ng-click="addAgent(chatRoom.id)" data-ng-disabled="chatRoom.status === \'CLOSED\'">\n <i class="fa fa-user-plus"></i>\n </button>\n <button class="btn btn-icon-only" data-ng-class="{\'btn-success\':chatRoom.status !== \'CLOSED\',\'grey-cascade\':chatRoom.status === \'CLOSED\'}" data-ng-click="closeRoom(chatRoom.id)" data-ng-if="chatRoom.ChatVisitors.length" data-ng-disabled="chatRoom.status === \'CLOSED\' && chatRoom.disposition">\n <i data-ng-class="{\'fa fa-upload\':chatRoom.status !== \'CLOSED\',\'icon-target\':chatRoom.status === \'CLOSED\'}"></i>\n </button>\n <a href="api/chat/rooms/{{chatRoom.id}}/export" target="_blank" class="btn btn-primary btn-icon-only" data-ng-if="chatRoom" title="{{\'APPLICATION_EXPORT\' | translate}} CSV">\n <i class="fa fa-download"></i>\n </a>\n <button class="btn default btn-icon-only" data-ng-if="chatRoom && chatRoom.status !== \'CLOSED\'" data-ng-click="togglePanelLeft()" title="{{\'APPLICATION_RESIZE\' | translate}}">\n <i ng-class="panelRight == \'col-md-12\' ? \'icon-size-actual\' : \'icon-size-fullscreen\'"></i>\n </button>\n </div>\n </div>\n <div class="portlet-body">\n<div class="row">\n <div data-ng-class="panelLeft" data-ng-show="panelLeft">\n <div class="portlet">\n <div class="portlet-body">\n <div class="portlet-title line">\n <div class="form">\n <!-- START TAGS -->\n <div class="form-group">\n <div class="row">\n <div class="col-md-1">\n <a href="#" class="btn btn-icon-only">\n <i class="fa fa-tags" style="color: gray;"></i>\n </a>\n </div>\n <div class="col-md-11">\n <ui-select multiple data-ng-model="form.tags" theme="bootstrap" on-select="onChanged(chatRoom.id)" on-remove="onChanged(chatRoom.id)">\n <ui-select-match placeholder="Tags...">{{$item}}</ui-select-match>\n <ui-select-choices repeat="tag in tags | filter:$select.search" class="">\n {{tag}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n </div>\n <!-- END TAGS -->\n </div>\n </div>\n <v-accordion class="vAccordion--default">\n <v-pane data-ng-if="chatRoom.ChatVisitors.length" data-ng-repeat="chatVisitor in chatRoom.ChatVisitors" expanded="true">\n <v-pane-header>\n <ng-letter-avatar\n height="40"\n width="40"\n data="{{chatRoom.ChatVisitor.fullname}}"\n fontsize="25"\n avatarcustombgcolor="#B0B0B0"\n charCount="2"\n avatarcustomborder="border:2px solid #EA4C61"\n shape="round"></ng-letter-avatar>\n </v-pane-header>\n <v-pane-content>\n {{\'APPLICATION_ROOM_ID\' | translate}}: <p>{{chatRoom.id}}</p>\n {{\'APPLICATION_NAME\' | translate}}: <p>{{chatRoom.ChatVisitor.fullname}}</p>\n {{\'APPLICATION_EMAIL\' | translate}}: <p><a data-ng-click="openContact(chatRoom.ChatVisitor.email)" href="">{{chatRoom.ChatVisitor.email}}</a></p>\n <span data-ng-if="chatRoom.ChatVisitor.labelData1">{{chatRoom.ChatVisitor.labelData1}}: <p>{{chatRoom.ChatVisitor.data1}}</p></span>\n <span data-ng-if="chatRoom.ChatVisitor.labelData2">{{chatRoom.ChatVisitor.labelData2}}: <p>{{chatRoom.ChatVisitor.data2}}</p></span>\n <span data-ng-if="chatRoom.ChatVisitor.labelData3">{{chatRoom.ChatVisitor.labelData3}}: <p>{{chatRoom.ChatVisitor.data3}}</p></span>\n {{\'APPLICATION_REMOTE_ADDRESS\' | translate}}: <p>{{chatRoom.ChatVisitor.remote_address}}</p>\n {{\'APPLICATION_BROWSER\' | translate}}: <p>{{chatRoom.ChatVisitor.browser}}</p>\n {{\'APPLICATION_REFERER\' | translate}}:<p>{{chatRoom.ChatVisitor.referer}} - {{enquiry.ChatWebsite.name}}</p>\n {{\'APPLICATION_OS\' | translate}}: <p>{{chatRoom.ChatVisitor.os}}</p>\n </v-pane-content>\n </v-pane>\n\n <v-pane data-ng-repeat="user in chatRoom.Users | filter:{ id: \'!\' + user.id}">\n <v-pane-header>\n <ng-letter-avatar\n height="40"\n width="40"\n data="{{user.fullname}}"\n fontsize="25"\n avatarcustombgcolor="#B0B0B0"\n avatarcustomborder="border:2px solid #3399CC"\n charCount="2"\n shape="round"></ng-letter-avatar>\n </v-pane-header>\n <v-pane-content>\n {{\'APPLICATION_NAME\' | translate}}: <p>{{user.fullname}}</p>\n {{\'APPLICATION_ROLE\' | translate}}: <p>{{user.role}}</p>\n {{\'APPLICATION_INTERNAL\' | translate}}: <p>{{user.internal}}</p>\n {{\'APPLICATION_EMAIL\' | translate}}: <p><a data-ng-href="mailto:{{user.email}}">{{user.email}}</a></p>\n </v-pane-content>\n </v-pane>\n </v-accordion>\n </div>\n </div>\n </div>\n <div data-ng-class="panelRight">\n <div class="note note-info" data-ng-if="chatRoom && chatRoom.status == \'CLOSED\'">\n <h4 class="block"><i class="icon-info"></i> {{\'MESSAGE_CHAT_ROOM_CLOSED\' | translate}}!</h4>\n <p>\n <strong>{{\'MESSAGE_CHAT_ROOM_CLOSED_DETAILS\' | translate}}.</strong>\n </p>\n <hr>\n <p>\n <i class="icon-target"></i> {{\'APPLICATION_DISPOSITION\' | translate}}: <strong>{{chatRoom.disposition}}</strong>\n </p>\n <p>\n <i class="icon-star"></i> {{\'APPLICATION_RATING\' | translate}}: <strong>{{chatRoom.rating | ucfirst}}</strong>\n </p>\n <p>\n <i class="icon-note"></i> {{\'APPLICATION_RATING_MESSAGE\' | translate}}: <strong>{{chatRoom.ratingMessage}}</strong>\n </p>\n <p>\n <i class="icon-calendar"></i> {{\'APPLICATION_UPDATED_AT\' | translate}}: <strong>{{chatRoom.updatedAt | date:\'medium\'}}</strong> (<span am-time-ago="chatRoom.updatedAt"></span>)\n </p>\n </div>\n <div class="portlet light bordered">\n <div class="portlet-body">\n <div id="chat-box" schroll-bottom="chatRoom.ChatMessages">\n <ul class="chats">\n <li data-ng-repeat="message in chatRoom.ChatMessages" data-ng-class="message.UserId == user.id ? \'out\' : \'in\'">\n <div class="avatar" data-ng-class="message.ChatVisitor ? \'pretty-avatar-v\' : \'pretty-avatar\'">\n <ng-letter-avatar\n data-ng-if="!message.ChatVisitor"\n height="40"\n width="40"\n fontsize="25"\n data="{{message.User.fullname}}"\n avatarcustombgcolor="#B0B0B0"\n avatarcustomborder="border:2px solid #3399CC"\n charCount="2"\n shape="round"></ng-letter-avatar>\n <ng-letter-avatar\n data-ng-if="message.ChatVisitor"\n height="40"\n width="40"\n fontsize="25"\n data="{{message.ChatVisitor.fullname}}"\n avatarcustombgcolor="#B0B0B0"\n avatarcustomborder="border:2px solid #EA4C61"\n charCount="2"\n shape="round"></ng-letter-avatar>\n </div>\n <div class="message">\n <span class="arrow"></span>\n <a data-ng-click="message.ChatVisitor && openContact(chatRoom.ChatVisitor.email)" class="name">{{message.User.fullname || message.ChatVisitor.fullname}} </a>\n <span am-time-ago="message.createdAt"></span>\n <ng-emoticons emoticons-data="message.body"></ng-emoticons>\n </div>\n </li>\n <li data-ng-if="chatRoom.status === \'CLOSED\'">\n <div class="media-body" style="text-align: center;">\n <h5 class="media-heading"><i>{{\'MESSAGE_CHAT_CLOSED\' | translate | lowercase}}</i></h5>\n </div>\n </li>\n </ul>\n </div>\n <div class="chat-form" data-ng-if="chatRoom && isMyRoom(chatRoom.Users)">\n <div class="input-cont">\n <input class="form-control" type="text" placeholder="Type a message here..." ng-enter="sendMessage()" data-ng-model="message.body" data-ng-disabled="chatRoom.status === \'CLOSED\'"/>\n </div>\n <div class="btn-cont">\n <span class="arrow"></span>\n <a href="#" class="btn blue icn-only" data-ng-disabled="chatRoom.status === \'CLOSED\'" data-ng-click="sendMessage()">\n <i class="fa fa-check icon-white"></i>\n </a>\n </div>\n </div>\n <div class="form-group chat-canned-answer-div" data-ng-if="chatRoom.status !== \'CLOSED\'" data-ng-class="{\'has-error\': forms.compose.subject.$invalid && forms.compose.$submitted}">\n <div class="row">\n <div class="col-md-1">\n <a href="#" class="btn btn-icon-only">\n <i class="fa fa-magic" style="color: gray;"></i>\n </a>\n </div>\n <div class="col-md-11">\n <input type="text"\n data-ng-model="modelOptions.selectedAnswer"\n uib-typeahead="key for key in getAnswers($viewValue)"\n placeholder="Canned answers.."\n typeahead-loading="loadingLocations"\n typeahead-no-results="noResults"\n typeahead-on-select="onSelect($item)"\n class="form-control">\n <i ng-show="loadingLocations" class="glyphicon glyphicon-refresh"></i>\n <div ng-show="noResults">\n <i class="glyphicon glyphicon-remove"></i> No Results Found\n </div>\n <span data-ng-show="forms.compose.subject.$invalid && forms.compose.$submitted" class="help-block help-block-error">\n'+" <strong>{{'APPLICATION_WARNING' | translate}}!</strong> {{'MESSAGE_REQUIRED_FIELD' | translate}}.\n </span>\n </div>\n </div>\n\n </div>\n </div>\n </div>\n</div>\n</div>\n</div>\n"), -a.put("app/channels/chat/room/room.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-bubble"></i>\n <a href="#">{{ \'APPLICATION_CHAT\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-users"></i>\n <a href="#">{{ \'APPLICATION_INTERACTIONS\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <div class="row inbox">\n <div class="col-md-2">\n <ul class="inbox-nav margin-bottom-10">\n <li data-ng-class="{active: $state.includes(\'main.channels.chat.room.internal\')}">\n <a href="/channels/chat/room/internal/list" class="btn">\n {{\'APPLICATION_INTERNAL\' | translate}}\n </a>\n <b></b>\n </li>\n <li data-ng-class="{active: $state.includes(\'main.channels.chat.room.external\')}">\n <a href="/channels/chat/room/external/list" class="btn">\n {{\'APPLICATION_EXTERNAL\' | translate}}\n </a>\n <b></b>\n </li>\n <li data-ng-class="{active: $state.includes(\'main.channels.chat.room.group\')}">\n <a href="/channels/chat/room/group/list" class="btn">\n {{\'APPLICATION_GROUPS\' | translate}}\n </a>\n <b></b>\n </li>\n </ul>\n </div>\n\n <div class="col-md-10">\n <div class="room-content">\n <div ui-view></div>\n </div>\n </div>\n </div>\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/chat/room/template.html",'<div ng-bind-html="neText" ne-hljs></div>\n<div class="ne-video" ng-if="video.host" class="fade">\n <div class="ne-video-preview" ng-hide="nePlayVideo || !options.video.details">\n <div class="ne-video-thumb" ng-click="nePlayVideo=!nePlayVideo">\n <img ng-src="{{video.thumbnail}}" alt=""/>\n <i class="fa fa-play-circle-o"></i>\n </div>\n <div class="ne-video-detail">\n <div class="ne-video-title">\n <a ng-href="{{video.url}}">{{video.title}}</a>\n </div>\n <div class="ne-video-desc">\n {{video.description}}\n </div>\n <div class="ne-video-stats">\n <span><i class="fa fa-eye"></i> {{video.views}}</span>\n <span><i class="fa fa-heart"></i> {{video.likes}}</span>\n </div>\n </div>\n </div>\n <div class="ne-video-player" ng-if="nePlayVideo || !(options.video.details)">\n <iframe ng-src="{{video.embedSrc}}" frameBorder="0" width="{{video.width}}" height="{{video.height}}" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>\n </div>\n</div>\n<div class="ne-video" ng-if="video.basic">\n <div class="ne-video-player">\n <div class="player">\n <video ng-src="{{video.basic}}" controls></video>\n </div>\n </div>\n</div>\n<div ng-init="neImageLong=false" ng-class="{false:\'ne-image\', true:\'ne-image ne-image-long\'}[neImageLong]"\nng-if="image.url">\n<div class="ne-image-wrapper">\n <img ng-src="{{image.url}}" ng-click="neImageLong=!neImageLong" alt=""/>\n</div>\n</div>\n<!-- <div class="ne-pdf" ng-if="pdf.url">\n <div class="ne-pdf-preview" ng-hide="neShowPdf">\n <div class="ne-pdf-icon">\n <i class="fa fa-file-pdf-o"></i>\n </div>\n <div class="ne-pdf-detail" >\n <div class="ne-pdf-title">\n <a href="">{{pdf.url}}</a>\n </div>\n <div class="ne-pdf-view">\n\n <button><i class="fa fa-download"></i> <a ng-href="{{pdf.url}}" target="_blank">Download</a></button>\n <button ng-click="neShowPdf=!neShowPdf"><i class="fa fa-eye"></i> View PDF</button>\n\n </div>\n </div>\n </div>\n <div class="ne-pdf-viewer" ng-if="neShowPdf" ng-show="neShowPdf">\n <iframe ng-src="{{pdf.url}}" frameBorder="0"></iframe>\n </div>\n\n</div>\n<div class="ne-audio" ng-if="audio.url">\n <audio ng-src="{{audio.url}}" controls></audio>\n</div> -->\n'),a.put("app/channels/chat/room/view.tags.modal.html",'<div class="modal-header" data-ng-init="initModal()">\n <h3 class="modal-title">{{ \'APPLICATION_TAGS\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <!-- START TRANSPORT -->\n <div class="form-group">\n <form name="form" novalidate>\n <!-- START TAGS -->\n <div class="form-group">\n <ui-select multiple data-ng-model="item.tags" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_TAGS\' | translate}}">{{$item}}</ui-select-match>\n <ui-select-choices repeat="tag in tags | filter: $select.search">\n {{tag}}\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END TAGS -->\n </form>\n </div>\n <!-- END TRANSPORT -->\n</div>\n<div class="modal-footer">\n <button type="button" class="btn" data-ng-class="button.class" data-ng-click="button.click()"data-ng-repeat="button in modal.buttons">{{button.text | translate}}</button>\n <!-- <button class="btn btn-success" type="button" data-ng-click="ok()">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" data-ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button> -->\n</div>\n'),a.put("app/channels/chat/visitor/list/list.html",'<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-bubble"></i>\n <a href="#">{{ \'APPLICATION_CHAT\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-question"></i>\n <a href="/channels/chat/visitors/list">{{ \'APPLICATION_VISITORS\' | translate }}</a>\n </li>\n </ul>\n </div>\n </div>\n</div>\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-question font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_VISITORS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/chat/visitor/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-bubble"></i>\n <a href="#">{{ \'APPLICATION_CHAT\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-question"></i>\n <a href="/channels/chat/visitors/list">{{ \'APPLICATION_VISITORS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li data-ng-show="chatVisitor">\n <a href="#">{{chatVisitor.fullname}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/visitor.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{chatVisitor.fullname}}\n </div>\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.channels.chat.visitors.view.profile\')}">\n <a data-ng-href="/channels/chat/visitors/view/{{chatVisitor.id}}/profile">\n <i class="icon-tag"></i>\n {{ \'APPLICATION_PROFILE\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/chat/visitor/view/view.profile.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_PROFILE\' | translate}}</span>\n </div>\n </div>\n <div class="portlet-body" data-ng-init="initView()">\n <div>\n <h4 class="profile-desc-title">{{chatVisitor.email}}</h4>\n <div class="margin-top-20 profile-desc-link">\n <i class="icon-magnifier"></i>\n <a href="#" class="inactive-link">{{chatVisitor.origin}}</a>\n </div>\n <div class="margin-top-20 profile-desc-link">\n <i class="icon-globe"></i>\n <a href="#" class="inactive-link">{{chatVisitor.remote_address}}</a>\n </div>\n <div class="margin-top-20 profile-desc-link">\n <i class="icon-user"></i>\n <a href="#" class="inactive-link">{{chatVisitor.user_agent | truncate: 50: \'...\'}}</a>\n </div>\n <div class="margin-top-20 profile-desc-link">\n <i class="icon-flag"></i>\n <a href="#" class="inactive-link">{{chatVisitor.visitor_language}}</a>\n </div>\n <div class="margin-top-20 profile-desc-link">\n <i class="icon-home"></i>\n <a href="#" class="inactive-link">{{chatVisitor.referer}}</a>\n </div>\n <div class="margin-top-20 profile-desc-link">\n <i class="icon-cursor"></i>\n <a href="#" class="inactive-link">{{chatVisitor.browser}}</a>\n </div>\n <div class="margin-top-20 profile-desc-link">\n <i class="icon-screen-desktop"></i>\n <a href="#" class="inactive-link">{{chatVisitor.os}}</a>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/chat/website/list/list.html",'<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-bubble"></i>\n <a href="#">{{ \'APPLICATION_CHAT\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-globe"></i>\n <a href="#">{{ \'APPLICATION_WEB_SITES\' | translate }}</a>\n </li>\n </ul>\n </div>\n </div>\n</div>\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-notebook font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_WEB_SITES\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <a class="btn green-jungle" href="/channels/chat/websites/wizard">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_WEB_SITE\' | translate }}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/chat/website/view/action/list/list.html",'<div class="row" data-ng-init="initActons()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_ACTIONS\' | translate}}</span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <a class="btn green-jungle" href="/channels/chat/websites/view/{{chatWebsite.id}}/actions/wizard" data-toggle="dropdown">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_ACTION\' | translate }}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/chat/website/view/action/view/view.html",'\n<div class="row" data-ng-init="initAction()">\n <div class="col-md-12">\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-directions font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_ACTION\' | translate }}</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <form name="forms.settings" ng-submit="updateItem()" novalidate>\n <!-- START APP -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.app.$touched || forms.settings.$submitted) && forms.settings.app.$invalid}">\n <label class="control-label">{{ \'APPLICATION_APPLICATION\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.app" name="app" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_APPLICATION\' | translate }}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="app.value as app in apps | filter: $select.search">\n <div ng-bind-html="app.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.app.$touched || forms.settings.$submitted) && forms.settings.app.$invalid && forms.settings.app.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END APP -->\n\n <div class="app-settings" ng-slide-down="application.app === \'queue\'" lazy-render duration="1" data-ng-init="getQueues()">\n <!-- START QUEUE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.queue.$touched || forms.settings.$submitted) && forms.settings.queue.$invalid}">\n <label class="control-label">{{\'APPLICATION_QUEUE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.ChatQueueId" name="queue" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="queue.id as queue in queues | filter: $select.search">\n <div ng-bind-html="queue.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="queues.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_QUEUES_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/channels/chat/queues/list">{{\'APPLICATION_QUEUES\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.settings.queue.$touched || forms.settings.$submitted) && forms.settings.queue.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END QUEUE -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="number" name="timeout" placeholder="{{\'APPLICATION_TIMEOUT\' | translate}}" class="form-control" data-ng-model="application.timeout" min="1" required/>\n <span data-ng-show="(forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid && forms.settings.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.app === \'agent\'" lazy-render duration="1" data-ng-init="getAgents()">\n <!-- START AGENT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.agent.$touched || forms.settings.$submitted) && forms.settings.agent.$invalid}">\n <label class="control-label">{{\'APPLICATION_AGENT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.UserId" name="agent" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.fullname}}</ui-select-match>\n <ui-select-choices repeat="agent.id as agent in agents | filter: $select.search">\n <div ng-bind-html="agent.fullname | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="agents.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_AGENTS_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/staff/agents/list">{{\'APPLICATION_QUEUES\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.settings.agent.$touched || forms.settings.$submitted) && forms.settings.agent.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END AGENT -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="number" name="timeout" placeholder="{{\'APPLICATION_TIMEOUT\' | translate}}" class="form-control" data-ng-model="application.timeout" min="1" required/>\n <span data-ng-show="(forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid && forms.settings.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.app === \'sendMail\'" lazy-render duration="1" data-ng-init="getMailAccounts();getTemplates()">\n <!-- START SENDMAIL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TO\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="email" name="to" placeholder="{{\'APPLICATION_TO\' | translate}}" class="form-control" data-ng-model="application.data2" min="1" required/>\n <span data-ng-show="(forms.settings.from.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid && forms.settings.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.mail.$touched || forms.settings.$submitted) && forms.settings.account.$invalid}">\n <label class="control-label">{{\'APPLICATION_ACCOUNT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data8" name="account" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="account.id as account in mailAccounts | filter: $select.search">\n <div ng-bind-html="account.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.account.$touched || forms.settings.$submitted) && forms.settings.account.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.template.$touched || forms.settings.$submitted) && forms.settings.template.$invalid}">\n <label class="control-label">{{\'APPLICATION_TEMPLATE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data9" name="template" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="template.id as template in templates | filter: $select.search">\n <div ng-bind-html="template.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.template.$touched || forms.settings.$submitted) && forms.settings.template.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END SENDMAIL -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.app === \'sendSms\'" lazy-render duration="1" data-ng-init="getSmsAccounts()">\n <!-- START SENDSms -->\n <div class="app-settings" ng-slide-down="application.app === \'sendSms\'" lazy-render duration="1">\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.to.$touched || forms.settings.$submitted) && forms.settings.to.$invalid}">\n <label class="control-label">{{\'APPLICATION_TO\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" ng-pattern="/^[\\+]?[0-9]+$/" name="to" placeholder="{{\'APPLICATION_TO\' | translate}}" class="form-control" data-ng-model="application.data2" required/>\n <span data-ng-show="(forms.settings.to.$touched || forms.settings.$submitted) && forms.settings.to.$invalid && forms.settings.to.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.account.$touched || forms.settings.$submitted) && forms.settings.account.$invalid}">\n <label class="control-label">{{\'APPLICATION_ACCOUNT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data8" name="account" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="account.id as account in smsAccounts | filter: $select.search">\n <div ng-bind-html="account.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.account.$touched || forms.settings.$submitted) && forms.settings.account.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.text.$touched || forms.text.$submitted) && forms.settings.text.$invalid}">\n <label class="control-label">{{\'APPLICATION_TEXT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <textarea id="text" class="form-control maxlength-handler" maxlength="160" name="text" data-ng-model="application.data6" required></textarea>\n <span data-ng-show="(forms.settings.text.$touched || forms.settings.$submitted) && forms.settings.text.$invalid && forms.settings.text.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n\n <!-- END SENDSms -->\n </div>\n\n <!-- START INTERVAL_TYPE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.intType.$touched || forms.settings.$submitted) && forms.settings.intType.$invalid}">\n <label class="control-label">{{ \'APPLICATION_INTERVAL_TYPE\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.intType" theme="bootstrap" name="intType" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="intType.value as intType in $application.intTypes | filter: $select.search">\n {{ intType.name | translate }}\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.intType.$touched || forms.settings.$submitted) && forms.settings.intType.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERVAL_TYPE -->\n\n <div class="app-settings" ng-slide-down="application.intType === \'custom\'" lazy-render duration="1">\n <!-- START TIME -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_TIME\' | translate }}</label>\n <div class="input-group input-large">\n <fieldset class="pull-left" ng-disabled="application.alwaysTime">\n <uib-timepicker name="t_from" data-ng-model="application.t_from" show-meridian="false" show-spinners="false" mousewheel="false"></uib-timepicker>\n </fieldset>\n <div class="input-group-addon col-md-1 interval-to pull-left">to</div>\n <fieldset ng-disabled="application.alwaysTime"><uib-timepicker name="t_to" data-ng-model="application.t_to" show-meridian="false" show-spinners="false" mousewheel="false"></uib-timepicker></fieldset>\n <!-- <label class="control-label pointer-cursor"><input type="checkbox" data-ng-model="application.alwaysTime">{{\'APPLICATION_ALWAYS\' | translate}}</label> -->\n </div>\n </div>\n <!-- END TIME -->\n\n <!-- START ALWAYS -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_ALWAYS\' | translate }}</label>\n <div class="input-group input-large">\n <label class="control-label pointer-cursor">\n <input\n bs-switch\n data-ng-model="application.alwaysTime"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n <!-- <input type="checkbox" data-ng-model="application.alwaysTime"> -->\n </label>\n </div>\n </div>\n <!-- END ALWAYS -->\n\n <!-- START WEEKDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_WEEKDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="application.wd_from" theme="bootstrap" name="wd_from">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{ weekDay.name | translate}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="application.wd_to" theme="bootstrap" name="wd_to">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{ weekDay.name | translate }}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END WEEKDAY -->\n\n <!-- START MONTHDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTHDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="application.md_from" theme="bootstrap" name="md_from">\n <ui-select-match allow-clear>{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search" ui-disable-choice="application.md_to && application.md_to!==\'always\' && monthDay>application.md_to && monthDay!==\'always\'">\n {{monthDay}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="application.md_to" theme="bootstrap" name="md_to">\n <ui-select-match allow-clear>{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search" ui-disable-choice="application.md_from && application.md_from!==\'always\' && monthDay<application.md_from && monthDay!==\'always\'">\n {{monthDay}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTHDAY -->\n\n <!-- START MONTH -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTH\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="application.m_from" theme="bootstrap" name="m_from">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{ month.name | translate }}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="application.m_to" theme="bootstrap" name="m_to">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{ month.name | translate }}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTH -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.intType === \'list\'" lazy-render duration="1" data-ng-init="getIntervals()">\n\n <!-- START INTERVALS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.IntervalId.$touched || forms.settings.$submitted) && forms.settings.IntervalId.$invalid}">\n <label class="control-label">{{\'APPLICATION_INTERVALS\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.IntervalId" theme="bootstrap" name="IntervalId" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{ $select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="interval.id as interval in intervals | filter: $select.search">\n {{ interval.name}}\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="intervals.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_INTERVAL_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/tools/intervals/list">{{\'APPLICATION_INTERVALS\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.settings.IntervalId.$touched || forms.settings.$submitted) && forms.settings.IntervalId.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERVALS -->\n\n </div>\n <button class="btn green-haze" type="submit">{{\'APPLICATION_UPDATE\' | translate}}</button>\n </form>\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'), -a.put("app/channels/chat/website/view/action/wizard/wizard.html",'\n<div class="row" data-ng-init="initWizard()">\n <div class="col-md-12">\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-directions font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_ACTION\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="createItem()">\n <wz-step title="{{\'APPLICATION_APPLICATION\' | translate}}" canexit="formValidation(forms.action.$valid)">\n <form name="forms.action" novalidate>\n <!-- START APP -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.action.$submitted && forms.action.app.$invalid}">\n <label class="control-label">{{ \'APPLICATION_APPLICATION\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.app" name="app" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_APPLICATION\' | translate }}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="app.value as app in apps | filter: $select.search">\n <div ng-bind-html="app.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.action.$submitted && forms.action.app.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END APP -->\n\n <div class="app-settings" ng-slide-down="application.app === \'agent\'" lazy-render duration="1" data-ng-init="getAgents()">\n <!-- START AGENT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.agent.$touched || forms.action.$submitted) && forms.action.agent.$invalid}">\n <label class="control-label">{{\'APPLICATION_AGENT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.UserId" name="agent" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.fullname}}</ui-select-match>\n <ui-select-choices repeat="agent.id as agent in agents | filter: $select.search">\n <div ng-bind-html="agent.fullname | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="agents.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_AGENTS_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/staff/agents/list">{{\'APPLICATION_QUEUES\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.action.agent.$touched || forms.action.$submitted) && forms.action.agent.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END AGENT -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.timeout.$touched || forms.action.$submitted) && forms.action.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="number" name="timeout" placeholder="{{\'APPLICATION_TIMEOUT\' | translate}}" class="form-control" data-ng-model="application.timeout" min="1" required/>\n <span data-ng-show="(forms.action.timeout.$touched || forms.action.$submitted) && forms.action.timeout.$invalid && forms.action.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n\n </div>\n\n <div class="app-settings" ng-slide-down="application.app === \'queue\'" lazy-render duration="1" data-ng-init="getQueues()">\n <!-- START QUEUE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.queue.$touched || forms.action.$submitted) && forms.action.queue.$invalid}">\n <label class="control-label">{{\'APPLICATION_QUEUE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.ChatQueueId" name="queue" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="queue.id as queue in queues | filter: $select.search">\n <div ng-bind-html="queue.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="queues.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_QUEUES_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/channels/chat/queues/list">{{\'APPLICATION_QUEUES\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.action.queue.$touched || forms.action.$submitted) && forms.action.queue.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END QUEUE -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.timeout.$touched || forms.action.$submitted) && forms.action.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="number" name="timeout" placeholder="{{\'APPLICATION_TIMEOUT\' | translate}}" class="form-control" data-ng-model="application.timeout" min="1" required/>\n <span data-ng-show="(forms.action.timeout.$touched || forms.action.$submitted) && forms.action.timeout.$invalid && forms.action.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.app === \'sendMail\'" lazy-render duration="1" data-ng-init="getMailAccounts();getTemplates()">\n <!-- START SENDMAIL -->\n <div class="app-settings" ng-slide-down="application.app === \'sendMail\'" lazy-render duration="1">\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.timeout.$touched || forms.action.$submitted) && forms.action.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TO\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="email" name="to" placeholder="{{\'APPLICATION_TO\' | translate}}" class="form-control" data-ng-model="application.data2" min="1" required/>\n <span data-ng-show="(forms.action.from.$touched || forms.action.$submitted) && forms.action.timeout.$invalid && forms.action.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.mail.$touched || forms.action.$submitted) && forms.action.account.$invalid}">\n <label class="control-label">{{\'APPLICATION_ACCOUNT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data8" name="account" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="account.id as account in mailAccounts | filter: $select.search">\n <div ng-bind-html="account.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.action.account.$touched || forms.action.$submitted) && forms.action.account.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.template.$touched || forms.action.$submitted) && forms.action.template.$invalid}">\n <label class="control-label">{{\'APPLICATION_TEMPLATE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data9" name="template" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="template.id as template in templates | filter: $select.search">\n <div ng-bind-html="template.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.action.template.$touched || forms.action.$submitted) && forms.action.template.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END SENDMAIL -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.app === \'sendSms\'" lazy-render duration="1" data-ng-init="getSmsAccounts()">\n <!-- START SENDSms -->\n <div class="app-settings" ng-slide-down="application.app === \'sendSms\'" lazy-render duration="1">\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.to.$touched || forms.action.$submitted) && forms.action.to.$invalid}">\n <label class="control-label">{{\'APPLICATION_TO\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" ng-pattern="/^[\\+]?[0-9]+$/" name="to" placeholder="{{\'APPLICATION_TO\' | translate}}" class="form-control" data-ng-model="application.data2" required/>\n <span data-ng-show="(forms.action.to.$touched || forms.action.$submitted) && forms.action.to.$invalid && forms.action.to.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.account.$touched || forms.action.$submitted) && forms.action.account.$invalid}">\n <label class="control-label">{{\'APPLICATION_ACCOUNT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data8" name="account" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="account.id as account in smsAccounts | filter: $select.search">\n <div ng-bind-html="account.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.action.account.$touched || forms.action.$submitted) && forms.action.account.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.text.$touched || forms.action.$submitted) && forms.action.text.$invalid}">\n <label class="control-label">{{\'APPLICATION_TEXT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <textarea id="text" class="form-control maxlength-handler" maxlength="160" name="text" data-ng-model="application.data6" required></textarea>\n <span data-ng-show="(forms.action.text.$touched || forms.action.$submitted) && forms.action.text.$invalid && forms.action.text.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n\n <!-- END SENDSms -->\n </div>\n\n <!-- START INTERVAL_TYPE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.intType.$touched || forms.action.$submitted) && forms.action.intType.$invalid}">\n <label class="control-label">{{ \'APPLICATION_INTERVAL_TYPE\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.intType" theme="bootstrap" name="intType" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="intType.value as intType in $application.intTypes | filter: $select.search">\n {{ intType.name | translate }}\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.action.intType.$touched || forms.action.$submitted) && forms.action.intType.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERVAL_TYPE -->\n\n <div class="app-settings" ng-slide-down="application.intType === \'custom\'" lazy-render duration="1">\n <!-- START TIME -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_TIME\' | translate }}</label>\n <div class="input-group input-large">\n <fieldset class="pull-left" ng-disabled="application.alwaysTime">\n <uib-timepicker name="t_from" data-ng-model="application.t_from" show-meridian="false" show-spinners="false" mousewheel="false"></uib-timepicker>\n </fieldset>\n <div class="input-group-addon col-md-1 interval-to pull-left">to</div>\n <fieldset ng-disabled="application.alwaysTime"><uib-timepicker name="t_to" data-ng-model="application.t_to" show-meridian="false" show-spinners="false" mousewheel="false"></uib-timepicker></fieldset>\n <!-- <label class="control-label pointer-cursor"><input type="checkbox" data-ng-model="application.alwaysTime">{{\'APPLICATION_ALWAYS\' | translate}}</label> -->\n </div>\n </div>\n <!-- END TIME -->\n\n <!-- START ALWAYS -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_ALWAYS\' | translate }}</label>\n <div class="input-group input-large">\n <label class="control-label pointer-cursor">\n <input\n bs-switch\n data-ng-model="application.alwaysTime"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n <!-- <input type="checkbox" data-ng-model="application.alwaysTime"> -->\n </label>\n </div>\n </div>\n <!-- END ALWAYS -->\n\n <!-- START WEEKDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_WEEKDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="application.wd_from" theme="bootstrap" name="wd_from">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{ weekDay.name | translate}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="application.wd_to" theme="bootstrap" name="wd_to">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{ weekDay.name | translate }}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END WEEKDAY -->\n\n <!-- START MONTHDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTHDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="application.md_from" theme="bootstrap" name="md_from">\n <ui-select-match allow-clear>{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search" ui-disable-choice="application.md_to && application.md_to!==\'always\' && monthDay>application.md_to && monthDay!==\'always\'">\n {{monthDay}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="application.md_to" theme="bootstrap" name="md_to">\n <ui-select-match allow-clear>{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search" ui-disable-choice="application.md_from && application.md_from!==\'always\' && monthDay<application.md_from && monthDay!==\'always\'">\n {{monthDay}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTHDAY -->\n\n <!-- START MONTH -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTH\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="application.m_from" theme="bootstrap" name="m_from">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{ month.name | translate }}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="application.m_to" theme="bootstrap" name="m_to">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{ month.name | translate }}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTH -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.intType === \'list\'" lazy-render duration="1" data-ng-init="getIntervals()">\n\n <!-- START INTERVALS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.IntervalId.$touched || forms.action.$submitted) && forms.action.IntervalId.$invalid}">\n <label class="control-label">{{\'APPLICATION_INTERVALS\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.IntervalId" theme="bootstrap" name="IntervalId" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{ $select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="interval.id as interval in intervals | filter: $select.search">\n {{ interval.name}}\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="intervals.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_INTERVAL_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/tools/intervals/list">{{\'APPLICATION_INTERVALS\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.action.IntervalId.$touched || forms.action.$submitted) && forms.action.IntervalId.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERVALS -->\n\n </div>\n\n <input class="btn green-haze" type="submit" data-ng-click="next()" value="{{\'APPLICATION_CONTINUE\' | translate}}"/>\n </form>\n </wz-step>\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n <input class="btn green-haze" type="submit" data-ng-click="next()" value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n </wz-step>\n </wizard>\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/chat/website/view/disposition/modal/add.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_DISPOSITIONS\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.form.$touched || form.$submitted) && form.form.$invalid}">\n <div class="">\n <input type="text" name="form" placeholder="{{\'APPLICATION_DISPOSITION\' | translate}}" class="form-control" data-ng-model="name" required/>\n <span data-ng-show="form.form.$touched && form.form.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n <!-- END NAME -->\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" data-ng-click="ok()" data-ng-show="form.$valid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" data-ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/chat/website/view/disposition/view/view.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_DISPOSITIONS\' | translate}}</span>\n </div>\n <div class="actions actions-md">\n <a href="#" class="btn btn-icon-only green" data-ng-click="addDisposition();">\n <i class="fa fa-plus"></i>\n </a>\n </div>\n </div>\n <div class="portlet-body" data-ng-init="initView()">\n <div class="tab-content">\n <div class="row" data-ng-hide="dispositions.length">\n <div class="col-md-12">\n <div class="note note-info">\n <h4 class="block">Info! {{\'MESSAGE_NO_DISPOSITIONS_AVAILABLE\' | translate}}</h4>\n </div>\n </div>\n </div>\n\n <!-- GENERAL TAB -->\n <div class="row" data-ng-repeat="disposition in dispositions">\n <div class="col-md-12 form-group">\n <div class="input-group">\n <div>\n <input class="form-control" type="text" placeholder="{{\'APPLICATION_DISPOSITION\' | translate}}" data-ng-model="disposition.name">\n </div>\n <span class="input-group-btn">\n <button class="btn btn-success" type="button" data-ng-click="updateDisposition(disposition.id, disposition.name);"><i class="fa fa-cloud-upload fa-fw"></i> {{\'APPLICATION_UPDATE\' | translate}}</button>\n <button class="btn btn-danger" type="button" data-ng-click="deleteDisposition(disposition.id);"><i class="fa fa-times fa-fw"></i> {{\'APPLICATION_DELETE\' | translate}}</button>\n </span>\n </div>\n </div>\n </div>\n <!-- END GENERAL TAB -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/chat/website/view/embedding/view/view.html",'<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_EMBEDDING\' | translate}}</span>\n </div>\n <div class="actions">\n <div class="btn-group">\n <a class="btn green-jungle" href="#" data-ng-click="copyToClipboard();">\n <i class="fa fa-clipboard"></i> {{\'APPLICATION_COPY_TO_CLIPBOARD\' | translate}}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <div class="row">\n <div class="col-md-12">\n <h3>{{\'APPLICATION_EMBED_SNIPPET\' | translate}}</h3>\n <p>\n {{\'MESSAGE_EMBED_SNIPPET\' | translate}}\n </p>\n <div class="form-body">\n <div class="form-group">\n <div class="col-md-12">\n <code-mirror lang="html" model="snippetCode"></code-mirror>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/chat/website/view/form/view/view.html",'<div class="row" data-ng-init="getChatWebsiteFields(\'online\');getChatWebsiteFields(\'offline\');">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_ONLINE\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_2" data-toggle="tab">{{\'APPLICATION_OFFLINE\' | translate}}</a>\n </li>\n </ul>\n </div>\n <div class="portlet-body">\n <div class="row">\n <div class="col-md-12">\n <div class="tab-content">\n <div class="tab-pane active" id="tab_1_1">\n <div class="row">\n <div class="col-md-6">\n <div class="portlet">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-book-open font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_FIELDS_SELECTED\' | translate }}</span>\n </div>\n <div class="actions">\n <div class="btn-group">\n <a class="btn green-jungle" href="#" data-ng-click="saveForm(\'online\');">\n <i class="fa fa-check"></i> {{ \'APPLICATION_SAVE\' | translate }}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <div fb-builder="online"></div>\n </div>\n </div>\n </div>\n <div class="col-md-6">\n <div class="portlet">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-book-open font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_FIELDS_AVAILABLE\' | translate }}</span>\n </div>\n </div>\n <div class="portlet-body">\n <div fb-components></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class="tab-pane" id="tab_1_2">\n <div class="row">\n <div class="col-md-6">\n <div class="portlet">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-book-open font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_FIELDS_SELECTED\' | translate }}</span>\n </div>\n <div class="actions">\n <div class="btn-group">\n <a class="btn green-jungle" href="#" data-ng-click="saveForm(\'offline\');">\n <i class="fa fa-check"></i> {{ \'APPLICATION_SAVE\' | translate }}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <div fb-builder="offline"></div>\n </div>\n </div>\n </div>\n <div class="col-md-6">\n <div class="portlet">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-book-open font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_FIELDS_AVAILABLE\' | translate }}</span>\n </div>\n </div>\n <div class="portlet-body">\n <div fb-components></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n</div>\n'),a.put("app/channels/chat/website/view/hooks/view/view.html",'<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_HOOKS\' | translate}}</span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_ACCEPT\' | translate}}</a>\n </li>\n <li >\n <a href="#" data-target="#tab_1_2" data-toggle="tab">{{\'APPLICATION_REJECT\' | translate}}</a>\n </li>\n <li >\n <a href="#" data-target="#tab_1_3" data-toggle="tab">{{\'APPLICATION_CLOSE\' | translate}}</a>\n </li>\n </ul>\n </div>\n <div class="portlet-body">\n <div class="tab-content">\n <!-- ACCEPT TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.accept" data-ng-submit="forms.accept.$valid && updateItem()" novalidate>\n <!-- START ACCEPT URL -->\n <div class="row">\n <div class="form-group col-md-4" data-ng-class="{\'has-error\': (forms.accept.method.$touched || forms.accept.$submitted) && forms.accept.method.$invalid}">\n <label class="control-label">{{\'APPLICATION_METHOD\' | translate}}</label>\n <ui-select data-ng-model="account.acceptMethod" name="method" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_METHOD\' | translate}}">{{$select.selected.name | uppercase}}</ui-select-match>\n <ui-select-choices repeat="type.value as type in types | filter: $select.search">\n <div ng-bind-html="type.name | highlight: $select.search | uppercase" ></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.accept.method.$touched || forms.accept.$submitted) && forms.accept.method.$invalid && forms.accept.method.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div class="form-group col-md-8" data-ng-class="{\'has-error\': (forms.accept.url.$touched || forms.accept.$submitted) && forms.accept.url.$invalid}">\n <label class="control-label">{{\'APPLICATION_URL\' | translate}}</label>\n <input type="url" name="url" placeholder="{{\'APPLICATION_URL\' | translate}}" class="form-control" data-ng-model="account.acceptUrl" ng-required="account.acceptMethod"/>\n <span data-ng-show="(forms.accept.url.$touched || forms.accept.$submitted) && forms.accept.url.$invalid && forms.accept.url.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n <!-- END ACCEPT URL-->\n <!-- START ACTIONS-->\n <!-- START PAUSE -->\n <div class="row" ng-repeat = "action in account.actions">\n <div ng-switch="action.action">\n <div ng-switch-when="pause">\n <div class="form-group col-md-4">\n <label class="control-label">{{\'APPLICATION_PAUSE\' | translate}}</label></br>\n <input\n bs-switch\n data-ng-change="resetActionData(action)"\n data-ng-model="action.enabled"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_ENABLED\' | translate }}"\n switch-off-text="{{ \'APPLICATION_DISABLED\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n </div>\n <div ng-if="action.enabled" class="form-group col-md-8">\n <label class="control-label">{{\'APPLICATION_TYPE\' | translate}}</label>\n <ui-select name="action" data-ng-model="action.type" theme="bootstrap" >\n <ui-select-match placeholder="{{\'APPLICATION_TYPE\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat=" pause.name as pause in pauses | filter: $select.search">\n <div ng-bind-html="pause.name | highlight: $select.search | uppercase" ></div>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n </div>\n </div>\n <!-- END ACTION -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END ACCEPT TAB -->\n <!-- START REJECT TAB -->\n <div class="tab-pane" id="tab_1_2">\n <form name="forms.reject" data-ng-submit="forms.reject.$valid && updateItem()" novalidate>\n <!-- START REJECT URL -->\n <div class="row">\n <div class="form-group col-md-4" data-ng-class="{\'has-error\': (forms.reject.method.$touched || forms.reject.$submitted) && forms.reject.method.$invalid}">\n <label class="control-label">{{\'APPLICATION_METHOD\' | translate}}</label>\n <ui-select data-ng-model="account.rejectMethod" name="method" theme="bootstrap" >\n <ui-select-match placeholder="{{\'APPLICATION_METHOD\' | translate}}">{{$select.selected.name | uppercase}}</ui-select-match>\n <ui-select-choices repeat="type.value as type in types | filter: $select.search">\n <div ng-bind-html="type.name | highlight: $select.search | uppercase" ></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.reject.method.$touched || forms.reject.$submitted) && forms.reject.method.$invalid && forms.reject.method.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div class="form-group col-md-8" data-ng-class="{\'has-error\': (forms.reject.url.$touched || forms.reject.$submitted) && forms.reject.url.$invalid}">\n <label class="control-label">{{\'APPLICATION_URL\' | translate}}</label>\n <input type="url" name="url" placeholder="{{\'APPLICATION_URL\' | translate}}" class="form-control" data-ng-model="account.rejectUrl" ng-required="account.rejectMethod"/>\n <span data-ng-show="(forms.reject.url.$touched || forms.reject.$submitted) && forms.reject.url.$invalid && forms.reject.url.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n\n <!-- END REJECT URL -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END REJECT TAB -->\n <!-- START CLOSE TAB -->\n <div class="tab-pane" id="tab_1_3">\n <form name="forms.close" data-ng-submit="forms.close.$valid && updateItem()" novalidate>\n <div class="row">\n <div class="form-group col-md-4" data-ng-class="{\'has-error\': (forms.close.method.$touched || forms.close.$submitted) && forms.close.method.$invalid}">\n <label class="control-label">{{\'APPLICATION_METHOD\' | translate}}</label>\n <ui-select data-ng-model="account.closeMethod" name="method" theme="bootstrap" >\n <ui-select-match placeholder="{{\'APPLICATION_METHOD\' | translate}}">{{$select.selected.name | uppercase}}</ui-select-match>\n <ui-select-choices repeat="type.value as type in types | filter: $select.search">\n <div ng-bind-html="type.name | highlight: $select.search | uppercase" ></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.close.method.$touched || forms.close.$submitted) && forms.close.method.$invalid && forms.close.method.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div class="form-group col-md-8" data-ng-class="{\'has-error\': (forms.close.url.$touched || forms.close.$submitted) && forms.close.url.$invalid}">\n <label class="control-label">{{\'APPLICATION_URL\' | translate}}</label>\n <input type="url" name="url" placeholder="{{\'APPLICATION_URL\' | translate}}" class="form-control" data-ng-model="account.closeUrl" ng-required="account.closeMethod"/>\n <span data-ng-show="(forms.close.url.$touched || forms.close.$submitted) && forms.close.url.$invalid && forms.close.url.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END CLOSE TAB -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'), -a.put("app/channels/chat/website/view/proactive/list/list.create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{title}}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.name.$touched || form.$submitted) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START TYPE -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.type.$touched || form.$submitted) && form.type.$invalid}">\n <label class="control-label">{{\'APPLICATION_TYPE\' | translate}}</label>\n <ui-select name="type" ng-model="item.type" theme="bootstrap" ng-disabled="disabled">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.title}}</ui-select-match>\n <ui-select-choices repeat="item.type as item in possibleType | filter: $select.search">\n <div ng-bind-html="item.title | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END TYPE -->\n\n <!-- START SELECTOR -->\n <div class="form-group" data-ng-if="item.type === \'mouseOver\'" data-ng-class="{\'has-error\': (form.selector.$touched || form.$submitted) && form.selector.$invalid}">\n <label class="control-label">{{\'APPLICATION_SELECTOR\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="selector" placeholder="{{\'APPLICATION_SELECTOR\' | translate}}" class="form-control" data-ng-model="item.selector" required/>\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END SELECTOR -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-if="item.type === \'timeout\'" data-ng-class="{\'has-error\': (form.timeout.$touched || form.$submitted) && form.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" name="timeout" placeholder="{{\'APPLICATION_TIMEOUT\' | translate}}" class="form-control" data-ng-model="item.timeout" min="0" required/>\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/chat/website/view/proactive/list/list.html",'<div class="row" data-ng-init="initProactiveActions()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_PROACTIVE_ACTIONS\' | translate}}</span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <a class="btn green-jungle" href="#" data-toggle="dropdown" data-ng-click="createItem()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_PROACTIVE_ACTION\' | translate }}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/chat/website/view/setting/view/view.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_SETTINGS\' | translate}}</span>\n </div>\n </div>\n <div class="portlet-body" data-ng-init="initView()">\n <form name="forms.info" data-ng-submit="forms.info.$valid && updateItemChatWebsite()" novalidate>\n <!-- START LIST -->\n <div class="form-group" data-ng-if="license.cm">\n <label class="control-label">{{\'APPLICATION_LIST\' | translate}}</label>\n <div class="input-group">\n\n <ui-select data-ng-model="chatWebsite.ListId" name="list" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_LIST\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="list.id as list in lists | filter: $select.search">\n <div ng-bind-html="list.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n\n <span class="input-group-btn">\n <button type="button" data-ng-click="chatWebsite.ListId = null" class="btn btn-default">\n <span class="glyphicon glyphicon-trash"></span>\n </button>\n </span>\n\n </div>\n </div>\n <!-- END LIST -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/chat/website/view/snippet/view/view.html",'<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_SNIPPET\' | translate}}</span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_APPEARANCE\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_2" data-toggle="tab">{{\'APPLICATION_FORMS\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_3" data-toggle="tab">{{\'APPLICATION_LABELS\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_4" data-toggle="tab">{{\'APPLICATION_SETTINGS\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_5" data-toggle="tab">{{\'APPLICATION_OFFLINE\' | translate}}</a>\n </li>\n </ul>\n </div>\n <div class="portlet-body">\n <div class="row">\n <div class="col-md-8">\n <div class="tab-content">\n\n <!-- APPEARANCE TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.formAppearance" data-ng-submit="forms.formAppearance.$valid && updateItem()" novalidate>\n\n <!-- START MAIN COLOR -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formAppearance.mainColor.$touched || forms.formAppearance.$submitted) && forms.formAppearance.host.$invalid}">\n <label class="control-label">{{\'APPLICATION_MAIN_COLOR\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input colorpicker type="text" name="mainColor" placeholder="{{\'APPLICATION_MAIN_COLOR\' | translate}}" style="color:{{chatWebsite.color}}" class="form-control" data-ng-model="chatWebsite.color" required/>\n <span data-ng-show="(forms.formAppearance.mainColor.$touched || forms.formAppearance.$submitted) && forms.formAppearance.mainColor.$invalid && forms.formAppearance.mainColor.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END MAIN COLOR -->\n\n <!-- START FOCUS COLOR -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formAppearance.focusColor.$touched || forms.formAppearance.$submitted) && forms.formAppearance.focusColor.$invalid}">\n <label class="control-label">{{\'APPLICATION_FOCUS_COLOR\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input colorpicker type="text" name="focusColor" placeholder="{{\'APPLICATION_FOCUS_COLOR\' | translate}}" style="color:{{chatWebsite.color_focus}}" class="form-control" data-ng-model="chatWebsite.color_focus" required/>\n <span data-ng-show="(forms.formAppearance.focusColor.$touched || forms.formAppearance.$submitted) && forms.formAppearance.focusColor.$invalid && forms.formAppearance.focusColor.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END FOCUS COLOR -->\n\n <!-- START BUTTON COLOR -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formAppearance.buttonColor.$touched || forms.formAppearance.$submitted) && forms.formAppearance.buttonColor.$invalid}">\n <label class="control-label">{{\'APPLICATION_BUTTON_COLOR\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input colorpicker type="text" name="buttonColor" placeholder="{{\'APPLICATION_BUTTON_COLOR\' | translate}}" style="color:{{chatWebsite.color_button}}" class="form-control" data-ng-model="chatWebsite.color_button" required/>\n <span data-ng-show="(forms.formAppearance.buttonColor.$touched || forms.formAppearance.$submitted) && forms.formAppearance.buttonColor.$invalid && forms.formAppearance.buttonColor.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END BUTTON COLOR -->\n\n <!-- START HEADER SHAPE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formAppearance.headerShape.$touched || forms.formAppearance.$submitted) && forms.formAppearance.headerShape.$invalid}">\n <label class="control-label">{{\'APPLICATION_HEADER_SHAPE\' | translate}}</label>\n <!-- <input colorpicker type="text" name="animationToggle" placeholder="{{\'APPLICATION_BUTTON_COLOR\' | translate}}" class="form-control" data-ng-model="chatWebsite.animation" required/> -->\n <ui-select data-ng-model="chatWebsite.header_shape" name="headerShape" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$translate.instant(\'APPLICATION_\' + $select.selected.toUpperCase())}}</ui-select-match>\n <ui-select-choices repeat="headerShape in [\'rounded\',\'squared\'] | filter: $select.search">\n <div ng-bind-html="$translate.instant(\'APPLICATION_\' + headerShape.toUpperCase()) | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END HEADER SHAPE -->\n\n <!-- START ANIMATION TOGGLE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formAppearance.animationToggle.$touched || forms.formAppearance.$submitted) && forms.formAppearance.animationToggle.$invalid}">\n <label class="control-label">{{\'APPLICATION_ANIMATION\' | translate}}</label></br>\n <!-- <input colorpicker type="text" name="animationToggle" placeholder="{{\'APPLICATION_BUTTON_COLOR\' | translate}}" class="form-control" data-ng-model="chatWebsite.animation" required/> -->\n <input\n bs-switch\n class="form-control"\n ng-model="chatWebsite.animation"\n type="checkbox"\n switch-active="{{ true }}"\n switch-on-text="{{\'APPLICATION_YES\' | translate}}"\n switch-off-text="{{\'APPLICATION_NO\' | translate}}"\n switch-on-color="{{ radioSwitch.onColor }}"\n switch-off-color="{{ radioSwitch.offColor }}"\n switch-animate="{{ radioSwitch.animate }}"\n switch-size="{{ radioSwitch.size }}"\n switch-label="{{ radioSwitch.label }}"\n switch-icon="{{ radioSwitch.icon }}"\n switch-radio-off="{{ radioSwitch.radioOff }}"\n switch-label-width="{{ radioSwitch.labelWidth }}"\n switch-handle-width="{{ radioSwitch.handleWidth }}">\n </div>\n <!-- END ANIMATION TOGGLE -->\n\n <div class="portlet-title tabbable-line margin-top20">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_WHITE_LABEL\' | translate}}</span>\n </div>\n </div>\n\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DEFAULT\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="chatWebsite.defaultWhiteLabel"\n data-ng-init="chatWebsite.defaultWhiteLabel = license.custom ? chatWebsite.defaultWhiteLabel : true"\n type="checkbox"\n name="defaultWhitelabel"\n switch-active="{{ radioSwitch.isActive }}"\n switch-on-text="{{\'APPLICATION_YES\' | translate}}"\n switch-off-text="{{\'APPLICATION_NO\' | translate}}"\n switch-on-color="{{ radioSwitch.onColor }}"\n switch-off-color="{{ radioSwitch.offColor }}"\n switch-animate="{{ radioSwitch.animate }}"\n switch-size="{{ radioSwitch.size }}"\n switch-label="{{ radioSwitch.label }}"\n switch-icon="{{ radioSwitch.icon }}"\n switch-radio-off="{{ radioSwitch.radioOff }}"\n switch-label-width="{{ radioSwitch.labelWidth }}"\n switch-handle-width="{{ radioSwitch.handleWidth }}">\n </div>\n <!-- END DEFAULT -->\n <!-- START LABEL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formAppearance.whiteLabel.$touched || forms.formAppearance.$submitted) && forms.formAppearance.whiteLabel.$invalid}">\n <label class="control-label">{{\'APPLICATION_WHITE_LABEL\' | translate}}<span data-ng-if="!chatWebsite.defaultWhiteLabel" class="required" aria-required="true">*</span></label>\n <textarea type="password" name="whiteLabel" placeholder="{{\'APPLICATION_WHITE_LABEL\' | translate}}" class="form-control" data-ng-model="chatWebsite.whiteLabel" data-ng-disabled="chatWebsite.defaultWhiteLabel || !license.custom" data-ng-required="!chatWebsite.defaultWhiteLabel && license.custom"/></textarea>\n <span data-ng-show="(forms.formAppearance.whiteLabel.$touched || forms.formAppearance.$submitted) && forms.formAppearance.whiteLabel.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END LABEL -->\n\n <div class="portlet-title tabbable-line margin-top20">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_LOGO\' | translate}}</span>\n </div>\n </div>\n <div class="row">\n\n <div class="form-group col-md-6 col-sm-6">\n <label class="control-label">{{\'APPLICATION_DEFAULT\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="chatWebsite.defaultLogo"\n data-ng-init="chatWebsite.defaultLogo = license.custom ? chatWebsite.defaultLogo : true"\n type="checkbox"\n name="defaultLogo"\n switch-active="{{ radioSwitch.isActive }}"\n switch-on-text="{{\'APPLICATION_YES\' | translate}}"\n switch-off-text="{{\'APPLICATION_NO\' | translate}}"\n switch-on-color="{{ radioSwitch.onColor }}"\n switch-off-color="{{ radioSwitch.offColor }}"\n switch-animate="{{ radioSwitch.animate }}"\n switch-size="{{ radioSwitch.size }}"\n switch-label="{{ radioSwitch.label }}"\n switch-icon="{{ radioSwitch.icon }}"\n switch-radio-off="{{ radioSwitch.radioOff }}"\n switch-label-width="{{ radioSwitch.labelWidth }}"\n switch-handle-width="{{ radioSwitch.handleWidth }}">\n </div>\n <!-- END STATUS -->\n <div class="form-group col-md-6 col-sm-6" data-ng-if="!chatWebsite.defaultLogo && license.custom">\n <div class="fileinput fileinput-new" data-provides="fileinput">\n <div class="fileinput-new thumbnail" style="width: 200px; height: 150px;">\n <img ng-src="assets/images/media/noProfileImage.png" alt=""/>\n </div>\n <div class="fileinput-preview fileinput-exists thumbnail" style="max-width: 200px; max-height: 150px;">\n </div>\n <div>\n <span class="btn default btn-file" data-ng-show="!uploader.queue[0]">\n <span> {{ \'APPLICATION_SELECT_IMAGE\' | translate }} </span>\n <input type="file" nv-file-select="" uploader="uploader"/><br/>\n </span>\n <button type="button" class="btn default" data-ng-show="uploader.queue[0]" data-dismiss="fileinput" ng-click="uploader.queue[0].remove()">\n {{ \'APPLICATION_REMOVE\' | translate }}\n <!-- </button>\n <button type="button" class="btn green-haze" data-ng-show="uploader.queue[0]" data-ng-click="uploader.queue[0].upload()" ng-disabled="uploader.queue[0].isReady || uploader.queue[0].isUploading || uploader.queue[0].isSuccess">\n {{ \'APPLICATION_CONFIRM\' | translate }}\n </button> -->\n </div>\n <p>\n </br> {{ \'MESSAGE_SUPPORTED_FORMATS\' | translate }} <b>jpg, png, jpeg</b>.\n </p>\n </div>\n </div>\n </div>\n <div class="row">\n <div class="col-md-2">\n <table class="table" border="0">\n <tbody>\n <tr data-ng-repeat="item in uploader.queue">\n <td style="border-top-style:none">\n <strong>\n {{ item.file.name }}\n </strong>\n </td>\n <td data-ng-show="uploader.isHTML5" nowrap style="border-top-style:none">\n {{ item.file.size/1024/1024|number:2 }} MB\n </td>\n <td nowrap style="border-top-style:none">\n <button type="button" class="btn btn-danger btn-xs" data-ng-click="item.remove()">\n <span class="glyphicon glyphicon-trash"></span> Remove\n </button>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n\n <input class="btn green-haze" type="submit" data-ng-click="uploader.queue[0] && uploader.queue[0].upload()" data-ng-disabled="uploader.queue[0].isReady || uploader.queue[0].isUploading || uploader.queue[0].isSuccess" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END APPEARANCE TAB -->\n\n <!-- FORMS TAB -->\n <div class="tab-pane" id="tab_1_2">\n <form name="forms.formFunctionality" data-ng-submit="forms.formFunctionality.$valid && updateItem()" novalidate>\n\n <!-- START DOWNLOAD TRANSCRIPT -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DOWNLOAD_TRANSCRIPT\' | translate}}</label>\n </br>\n <input\n bs-switch\n class="form-control"\n ng-model="chatWebsite.download_transcript"\n type="checkbox"\n switch-active="true"\n switch-on-text="{{\'APPLICATION_YES\' | translate}}"\n switch-off-text="{{\'APPLICATION_NO\' | translate}}"\n switch-on-color="{{ radioSwitch.onColor }}"\n switch-off-color="{{ radioSwitch.offColor }}"\n switch-animate="{{ radioSwitch.animate }}"\n switch-size="{{ radioSwitch.size }}"\n switch-label="{{ radioSwitch.label }}"\n switch-icon="{{ radioSwitch.icon }}"\n switch-radio-off="{{ radioSwitch.radioOff }}"\n switch-label-width="{{ radioSwitch.labelWidth }}"\n switch-handle-width="{{ radioSwitch.handleWidth }}">\n </div>\n <!-- END DOWNLOAD TRANSCRIPT -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END FORMS TAB -->\n\n <!-- STRINGS TAB -->\n <div class="tab-pane" id="tab_1_3">\n <form name="forms.formLabel" data-ng-submit="forms.formLabel.$valid && updateItem()" novalidate>\n\n <h4 class="block" data-ng-show="statePreview.state == \'online\'">{{\'APPLICATION_ONLINE_STATE\' | translate}}</h4>\n\n <!-- START HEADER ONLINE -->\n <div class="form-group" data-ng-show="statePreview.state == \'online\'" data-ng-class="{\'has-error\': (forms.formLabel.headerOnline.$touched || forms.formLabel.$submitted) && forms.formLabel.headerOnline.$invalid}">\n <label class="control-label">{{\'APPLICATION_HEADER_ONLINE\' | translate}}</label>\n <input type="text" name="headerOnline" placeholder="{{\'APPLICATION_HEADER_ONLINE\' | translate}}" class="form-control" data-ng-model="chatWebsite.header_online"/>\n </div>\n <!-- END HEADER ONLINE -->\n\n <!-- START ONLINE MESSAGE-->\n <div class="form-group" data-ng-show="statePreview.state == \'online\'" data-ng-class="{\'has-error\': (forms.formLabel.onlineMessage.$touched || forms.formLabel.$submitted) && forms.formLabel.onlineMessage.$invalid}">\n <label class="control-label">{{\'APPLICATION_ONLINE_MESSAGE\' | translate}}</label>\n <input type="text" name="onlineMessage" placeholder="{{\'APPLICATION_ONLINE_MESSAGE\' | translate}}" class="form-control" data-ng-model="chatWebsite.online_message"/>\n </div>\n <!-- END HEADER ONLINE -->\n\n <!-- START USERNAME TITLE -->\n <div class="form-group" data-ng-show="statePreview.state == \'online\' || statePreview.state == \'offline\'" data-ng-class="{\'has-error\': (forms.formLabel.nameTitle.$touched || forms.formLabel.$submitted) && forms.formLabel.nameTitle.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME_TITLE\' | translate}}</label>\n <input type="text" name="nameTitle" placeholder="{{\'APPLICATION_NAME_TITLE\' | translate}}" class="form-control" data-ng-model="chatWebsite.name_title"/>\n </div>\n <!-- END USERNAME TITLE -->\n\n <!-- START USERNAME PLACEHOLDER -->\n <div class="form-group" data-ng-show="statePreview.state == \'online\' || statePreview.state == \'offline\'" data-ng-class="{\'has-error\': (forms.formLabel.usernamePlaceholder.$touched || forms.formLabel.$submitted) && forms.formLabel.usernamePlaceholder.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME_PLACEHOLDER\' | translate}}</label>\n <input type="text" name="usernamePlaceholder" placeholder="{{\'APPLICATION_NAME_PLACEHOLDER\' | translate}}" class="form-control" data-ng-model="chatWebsite.username_placeholder"/>\n </div>\n <!-- END USERNAME PLACEHOLDER -->\n\n <!-- START EMAIL TITLE -->\n <div class="form-group" data-ng-show="statePreview.state == \'online\' || statePreview.state == \'offline\'" data-ng-class="{\'has-error\': (forms.formLabel.emailTitle.$touched || forms.formLabel.$submitted) && forms.formLabel.emailTitle.$invalid}">\n <label class="control-label">{{\'APPLICATION_EMAIL_TITLE\' | translate}}</label>\n <input type="text" name="emailTitle" placeholder="{{\'APPLICATION_EMAIL_TITLE\' | translate}}" class="form-control" data-ng-model="chatWebsite.email_title"/>\n </div>\n <!-- END EMAIL TITLE -->\n\n <!-- START EMAIL PLACEHOLDER -->\n <div class="form-group" data-ng-show="statePreview.state == \'online\' || statePreview.state == \'offline\'" data-ng-class="{\'has-error\': (forms.formLabel.emailPlaceholder.$touched || forms.formLabel.$submitted) && forms.formLabel.emailPlaceholder.$invalid}">\n <label class="control-label">{{\'APPLICATION_EMAIL_PLACEHOLDER\' | translate}}</label>\n <input type="text" name="emailPlaceholder" placeholder="{{\'APPLICATION_EMAIL_PLACEHOLDER\' | translate}}" class="form-control" data-ng-model="chatWebsite.email_placeholder"/>\n </div>\n <!-- END EMAIL PLACEHOLDER -->\n\n <!-- START START CHAT BUTTON -->\n <div class="form-group" data-ng-show="statePreview.state == \'online\'" data-ng-class="{\'has-error\': (forms.formLabel.startChatButton.$touched || forms.formLabel.$submitted) && forms.formLabel.startChatButton.$invalid}">\n <label class="control-label">{{\'APPLICATION_START_CHAT_BUTTON\' | translate}}</label>\n <input type="text" name="startChatButton" placeholder="{{\'APPLICATION_START_CHAT_BUTTON\' | translate}}" class="form-control" data-ng-model="chatWebsite.start_chat_button"/>\n </div>\n <!-- END START CHAT BUTTON -->\n\n <h4 class="block" data-ng-show="statePreview.state == \'rating\'">{{\'APPLICATION_RATING_STATE\' | translate}}</h4>\n\n <!-- START RATING MESSAGE -->\n <div class="form-group" data-ng-show="statePreview.state == \'rating\'" data-ng-class="{\'has-error\': (forms.formLabel.ratingMessage.$touched || forms.formLabel.$submitted) && forms.formLabel.ratingMessage.$invalid}">\n <label class="control-label">{{\'APPLICATION_RATING_MESSAGE\' | translate}}</label>\n <input type="text" name="ratingMessage" placeholder="{{\'APPLICATION_RATING_MESSAGE\' | translate}}" class="form-control" data-ng-model="chatWebsite.rating_message"/>\n </div>\n <!-- END RATING MESSAGE -->\n\n <!-- START RATING SEND BUTTON -->\n <div class="form-group" data-ng-show="statePreview.state == \'rating\'" data-ng-class="{\'has-error\': (forms.formLabel.ratingSend.$touched || forms.formLabel.$submitted) && forms.formLabel.ratingSend.$invalid}">\n <label class="control-label">{{\'APPLICATION_RATING_SEND_BUTTON\' | translate}}</label>\n <input type="text" name="ratingSend" placeholder="{{\'APPLICATION_RATING_SEND_BUTTON\' | translate}}" class="form-control" data-ng-model="chatWebsite.rating_send"/>\n </div>\n <!-- END RATING SEND BUTTON -->\n\n <!-- START RATING SKIP BUTTON -->\n <div class="form-group" data-ng-show="statePreview.state == \'rating\'" data-ng-class="{\'has-error\': (forms.formLabel.ratingSkip.$touched || forms.formLabel.$submitted) && forms.formLabel.ratingSkip.$invalid}">\n <label class="control-label">{{\'APPLICATION_RATING_SKIP_BUTTON\' | translate}}</label>\n <input type="text" name="ratingSkip" placeholder="{{\'APPLICATION_RATING_SKIP_BUTTON\' | translate}}" class="form-control" data-ng-model="chatWebsite.rating_skip"/>\n </div>\n <!-- END RATING SKIP BUTTON -->\n\n <h4 class="block" data-ng-show="statePreview.state == \'offline\'">{{\'APPLICATION_OFFLINE_STATE\' | translate}}</h4>\n\n <!-- START HEADER OFFLINE -->\n <div class="form-group" data-ng-show="statePreview.state == \'offline\'" data-ng-class="{\'has-error\': (forms.formLabel.headerOffline.$touched || forms.formLabel.$submitted) && forms.formLabel.headerOnline.$invalid}">\n <label class="control-label">{{\'APPLICATION_HEADER_OFFLINE\' | translate}}</label>\n <input type="text" name="headerOffline" placeholder="{{\'APPLICATION_HEADER_OFFLINE\' | translate}}" class="form-control" data-ng-model="chatWebsite.header_offline"/>\n </div>\n <!-- END HEADER OFFLINE -->\n\n <!-- START OFFLINE MESSAGE-->\n <div class="form-group" data-ng-show="statePreview.state == \'offline\'" data-ng-class="{\'has-error\': (forms.formLabel.offlineMessage.$touched || forms.formLabel.$submitted) && forms.formLabel.offlineMessage.$invalid}">\n <label class="control-label">{{\'APPLICATION_OFFLINE_MESSAGE\' | translate}}</label>\n <input type="text" name="offlineMessage" placeholder="{{\'APPLICATION_OFFLINE_MESSAGE\' | translate}}" class="form-control" data-ng-model="chatWebsite.offline_message"/>\n </div>\n <!-- END OFFLINE MESSAGE -->\n\n <!-- START ENQUIRY MESSAGE TITLE-->\n <div class="form-group" data-ng-show="statePreview.state == \'offline\'" data-ng-class="{\'has-error\': (forms.formLabel.enquiryMessageTitle.$touched || forms.formLabel.$submitted) && forms.formLabel.enquiryMessageTitle.$invalid}">\n <label class="control-label">{{\'APPLICATION_ENQUIRY_MESSAGE_TITLE\' | translate}}</label>\n <input type="text" name="enquiryMessageTitle" placeholder="{{\'APPLICATION_ENQUIRY_MESSAGE_TITLE\' | translate}}" class="form-control" data-ng-model="chatWebsite.message_title"/>\n </div>\n <!-- END ENQUIRY MESSAGE TITLE -->\n\n <!-- START ENQUIRY MESSAGE PLACEHOLDER-->\n <div class="form-group" data-ng-show="statePreview.state == \'offline\'" data-ng-class="{\'has-error\': (forms.formLabel.enquiryMessagePlaceholder.$touched || forms.formLabel.$submitted) && forms.formLabel.enquiryMessagePlaceholder.$invalid}">\n <label class="control-label">{{\'APPLICATION_ENQUIRY_MESSAGE_PLACEHOLDER\' | translate}}</label>\n <input type="text" name="enquiryMessagePlaceholder" placeholder="{{\'APPLICATION_ENQUIRY_MESSAGE_PLACEHOLDER\' | translate}}" class="form-control" data-ng-model="chatWebsite.enquiry_message_placeholder"/>\n </div>\n <!-- END ENQUIRY MESSAGE PLACEHOLDER -->\n\n <!-- START ENQUIRY BUTTON -->\n <div class="form-group" data-ng-show="statePreview.state == \'offline\'" data-ng-class="{\'has-error\': (forms.formLabel.enquiryButton.$touched || forms.formLabel.$submitted) && forms.formLabel.enquiryButton.$invalid}">\n <label class="control-label">{{\'APPLICATION_ENQUIRY_BUTTON\' | translate}}</label>\n <input type="text" name="enquiryButton" placeholder="{{\'APPLICATION_ENQUIRY_BUTTON\' | translate}}" class="form-control" data-ng-model="chatWebsite.enquiry_button"/>\n </div>\n <!-- END ENQUIRY BUTTON -->\n\n <!-- START AGENTS BUSY BUTTON -->\n <div class="form-group" data-ng-show="statePreview.state == \'online\'" data-ng-class="{\'has-error\': (forms.formLabel.agentsBusy.$touched || forms.formLabel.$submitted) && forms.formLabel.agentsBusy.$invalid}">\n <label class="control-label">{{\'APPLICATION_AGENTS_BUSY\' | translate}}</label>\n <input type="text" name="agentsBusy" placeholder="{{\'APPLICATION_AGENTS_BUSY\' | translate}}" class="form-control" data-ng-model="chatWebsite.agents_busy"/>\n </div>\n <!-- END AGENTS BUSY BUTTON -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END STRINGS TAB -->\n\n <!-- SETTINGS TAB -->\n <div class="tab-pane" id="tab_1_4">\n <form name="forms.formSetting" data-ng-submit="forms.formSetting.$valid && updateItem()" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formSetting.name.$touched || forms.formSetting.$submitted) && forms.formSetting.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="chatWebsite.name" required/>\n <span data-ng-show="(forms.formSetting.name.$touched || forms.formSetting.$submitted) && forms.formSettings.name.$invalid && forms.formSetting.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START ADDRESS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formSetting.address.$touched || forms.formSetting.$submitted) && forms.formSetting.address.$invalid}">\n <label class="control-label">{{\'APPLICATION_WEB_ADDRESS\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="url" name="address" placeholder="{{\'APPLICATION_WEB_ADDRESS\' | translate}}" class="form-control" data-ng-model="chatWebsite.address" required/>\n <span data-ng-show="(forms.formSetting.address.$touched || forms.formSetting.$submitted) && forms.formSetting.address.$invalid && forms.formSetting.address.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END ADDRESS -->\n\n <!-- START REMOTE IP -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formSetting.remote.$touched || forms.formSetting.$submitted) && forms.formSetting.remote.$invalid}">\n <label class="control-label">{{\'APPLICATION_MOTION_ADDRESS\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="url" name="remote" placeholder="{{\'APPLICATION_MOTION_ADDRESS\' | translate}}" class="form-control" data-ng-model="chatWebsite.remote" required/>\n <span data-ng-show="(forms.formSetting.remote.$touched || forms.formSetting.$submitted) && forms.formSetting.remote.$invalid && forms.formSetting.remote.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span class="help-block help-block-info">\n {{\'MESSAGE_MOTION_ADDRESS_FORMAT\' | translate}}\n </span>\n </div>\n <!-- END REMOTE IP -->\n\n <!-- START FIDELITY -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_FIDELITY\' | translate}}</label></br>\n <input\n bs-switch\n data-ng-model="chatWebsite.fidelity"\n type="checkbox"\n switch-active="{{ fidelitySwitch.isActive }}"\n switch-on-text="{{ \'APPLICATION_ENABLED\' | translate }}"\n switch-off-text="{{ \'APPLICATION_DISABLED\' | translate }}"\n switch-on-color="{{ fidelitySwitch.onColor }}"\n switch-off-color="{{ fidelitySwitch.offColor }}"\n switch-animate="{{ fidelitySwitch.animate }}"\n switch-size="{{ fidelitySwitch.size }}"\n switch-label="{{ fidelitySwitch.label }}"\n switch-icon="{{ fidelitySwitch.icon }}"\n switch-radio-off="{{ fidelitySwitch.radioOff }}"\n switch-label-width="{{ fidelitySwitch.labelWidth }}"\n switch-handle-width="{{ fidelitySwitch.handleWidth }}">\n </div>\n <!-- END FIDELITY -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-if="chatWebsite.fidelity" data-ng-class="{\'has-error\': (forms.formSetting.timeout.$touched || forms.formSetting.$submitted) && forms.formSetting.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" min="0" name="timeout" placeholder="{{\'APPLICATION_TIMEOUT\' | translate}}" class="form-control" data-ng-model="chatWebsite.timeout" required/>\n <span data-ng-show="(forms.formSetting.timeout.$touched || forms.formSetting.$submitted) && forms.formSetting.timeout.$invalid && forms.formSetting.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.formSetting.timeout.$touched || forms.formSetting.$submitted) && forms.formSetting.timeout.$invalid && forms.formSetting.timeout.$error.number" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_NUMERIC_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formSetting.description.$touched || forms.formSetting.$submitted) && forms.formSetting.description.$invalid}">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="chatWebsite.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END SETTINGS TAB -->\n\n <!-- OFFLINE TAB -->\n <div class="tab-pane" id="tab_1_5">\n <form name="forms.formOffline" data-ng-submit="forms.formOffline.$valid && updateItem()" novalidate>\n\n <!-- START ENQUIRY ENABLE -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_ENQUIRY_ENABLED\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="chatWebsite.enquiry_enable"\n type="checkbox"\n switch-active="{{ enquirySwitch.isActive }}"\n switch-on-text="{{ enquirySwitch.onText }}"\n switch-off-text="{{ enquirySwitch.offText }}"\n switch-on-color="{{ enquirySwitch.onColor }}"\n switch-off-color="{{ enquirySwitch.offColor }}"\n switch-animate="{{ enquirySwitch.animate }}"\n switch-size="{{ enquirySwitch.size }}"\n switch-label="{{ enquirySwitch.label }}"\n switch-icon="{{ enquirySwitch.icon }}"\n switch-radio-off="{{ enquirySwitch.radioOff }}"\n switch-label-width="{{ enquirySwitch.labelWidth }}"\n switch-handle-width="{{ enquirySwitch.handleWidth }}">\n </div>\n <!-- END ENQUIRY ENABLE -->\n\n <!-- START ENQUIRY FORWARDING -->\n <div class="form-group" data-ng-if="chatWebsite.enquiry_enable">\n <label class="control-label">{{\'APPLICATION_ENQUIRY_FORWARDING\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="chatWebsite.enquiry_forwarding"\n type="checkbox"\n switch-active="{{ enquirySwitch.isActive }}"\n switch-on-text="{{ enquirySwitch.onText }}"\n switch-off-text="{{ enquirySwitch.offText }}"\n switch-on-color="{{ enquirySwitch.onColor }}"\n switch-off-color="{{ enquirySwitch.offColor }}"\n switch-animate="{{ enquirySwitch.animate }}"\n switch-size="{{ enquirySwitch.size }}"\n switch-label="{{ enquirySwitch.label }}"\n switch-icon="{{ enquirySwitch.icon }}"\n switch-radio-off="{{ enquirySwitch.radioOff }}"\n switch-label-width="{{ enquirySwitch.labelWidth }}"\n switch-handle-width="{{ enquirySwitch.handleWidth }}">\n <span class="help-block col-md-12">{{\'MESSAGE_REMEMBER_SMTP_SERVICE_ACCOUNT\' | translate}}.</span>\n </div>\n <!-- END ENQUIRY FORWARDING -->\n\n <!-- START REMOTE IP -->\n <div class="form-group" data-ng-if="chatWebsite.enquiry_enable && chatWebsite.enquiry_forwarding" data-ng-class="{\'has-error\': (forms.formOffline.forwardingAddress.$touched || forms.formOffline.$submitted) && forms.formSetting.forwardingAddress.$invalid}">\n <label class="control-label">{{\'APPLICATION_ENQUIRY_FORWARDING_ADDRESS\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="forwardingAddress" placeholder="{{\'APPLICATION_ADDRESS\' | translate}}" class="form-control" data-ng-model="chatWebsite.enquiry_forwarding_address" required/>\n <span data-ng-show="(forms.formOffline.forwardingAddress.$touched || forms.formOffline.$submitted) && forms.formOffline.forwardingAddress.$invalid && forms.formOffline.forwardingAddress.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END REMOTE IP -->\n\n <!-- START HEADER SHAPE -->\n <div class="form-group" data-ng-if="chatWebsite.enquiry_enable && chatWebsite.enquiry_forwarding" data-ng-class="{\'has-error\': (forms.formOffline.OfflineTemplateId.$touched || forms.formOffline.$submitted) && forms.formOffline.OfflineTemplateId.$invalid}">\n <label class="control-label">{{\'APPLICATION_TEMPLATE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="chatWebsite.OfflineTemplateId" name="OfflineTemplateId" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="template.id as template in templates | filter: $select.search">\n <div ng-bind-html="template.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.formOffline.OfflineTemplateId.$touched || forms.formOffline.$submitted) && forms.formOffline.OfflineTemplateId.$invalid && forms.formOffline.OfflineTemplateId.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END HEADER SHAPE -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END OFFLINE TAB -->\n </div>\n </div>\n <div class="col-md-4">\n <!-- START STATE -->\n <div class="form-group">\n <!-- <label class="control-label">{{\'APPLICATION_ANIMATION\' | translate}}</label> -->\n <!-- <input colorpicker type="text" name="animationToggle" placeholder="{{\'APPLICATION_BUTTON_COLOR\' | translate}}" class="form-control" data-ng-model="chatWebsite.animation" required/> -->\n <ui-select data-ng-model="statePreview.state" name="statePreview" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="statePreview in [\'online\',\'rating\',\'offline\'] | filter: $select.search">\n <div ng-bind-html="statePreview | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END STATE -->\n <preview></preview>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n'), -a.put("app/channels/chat/website/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-bubble"></i>\n <a href="#">{{ \'APPLICATION_CHAT\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-globe"></i>\n <a href="/channels/chat/websites/list">{{ \'APPLICATION_WEB_SITES\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <a href="#">{{chatWebsite.name}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img src="assets/images/media/website.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{chatWebsite.name}}\n </div>\n <div class="profile-usertitle-job">\n {{chatWebsite.address}}\n </div>\n </div>\n <!-- END SIDEBAR USER TITLE -->\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.includes(\'main.channels.chat.websites.view.embedding\')}">\n <a ng-href="/channels/chat/websites/view/{{chatWebsite.id}}/embedding/view">\n <i class="fa fa-code"></i>\n {{ \'APPLICATION_EMBEDDING\' | translate }} </a>\n </li>\n <li data-ng-class="{active: $state.includes(\'main.channels.chat.websites.view.snippet\')}">\n <a ng-href="/channels/chat/websites/view/{{chatWebsite.id}}/snippet/view">\n <i class="icon-note"></i>\n {{ \'APPLICATION_SNIPPET\' | translate }} </a>\n </li>\n <li data-ng-class="{active: $state.includes(\'main.channels.chat.websites.view.form\')}">\n <a ng-href="/channels/chat/websites/view/{{chatWebsite.id}}/forms/view">\n <i class="icon-list"></i>\n {{ \'APPLICATION_FORMS\' | translate }} </a>\n </li>\n <li data-ng-class="{active: $state.includes(\'main.channels.chat.websites.view.proactive\')}">\n <a ng-href="/channels/chat/websites/view/{{chatWebsite.id}}/proactive/list">\n <i class="icon-target"></i>\n {{ \'APPLICATION_PROACTIVE_ACTIONS\' | translate }} </a>\n </li>\n <li data-ng-class="{active: $state.includes(\'main.channels.chat.websites.view.actions\')}">\n <a ng-href="/channels/chat/websites/view/{{chatWebsite.id}}/actions/list">\n <i class="icon-directions"></i>\n {{ \'APPLICATION_ACTIONS\' | translate }} </a>\n </li>\n <li ng-class="{active: $state.is(\'main.channels.chat.websites.view.hooks\')}">\n <a href="/channels/chat/websites/view/{{chatWebsite.id}}/hooks">\n <i class="fa fa-code"></i>\n {{\'APPLICATION_HOOKS\' | translate}} </a>\n </li>\n <li data-ng-class="{active: $state.includes(\'main.channels.chat.websites.view.dispositions\')}">\n <a ng-href="/channels/chat/websites/view/{{chatWebsite.id}}/dispositions">\n <i class="icon-target"></i>\n {{ \'APPLICATION_DISPOSITIONS\' | translate }} </a>\n </li>\n <li ng-class="{active: $state.is(\'main.channels.chat.websites.view.settings\')}">\n <a href="/channels/chat/websites/view/{{chatWebsite.id}}/settings">\n <i class="icon-settings"></i>\n {{\'APPLICATION_SETTINGS\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/chat/website/wizard/wizard.html",'<!-- BEGIN PAGE HEADER-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-bubble"></i>\n <a href="#">{{ \'APPLICATION_CHAT\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-globe"></i>\n <a href="/channels/chat/websites/list">{{ \'APPLICATION_WEB_SITES\' | translate }}</a>\n </li>\n </ul>\n </div>\n </div>\n</div>\n<!-- END PAGE HEADER-->\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initWizard();">\n <div class="col-md-12">\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-notebook font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_WEB_SITE\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="createItem()">\n <wz-step title="{{\'APPLICATION_WEB_SITE_INFO\' | translate}}" canexit="exitValidation(forms.formSetting.$valid)">\n <form name="forms.formSetting" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formSetting.name.$touched || forms.formSetting.$submitted) && forms.formSetting.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="forms.formSetting.name.$touched && !forms.formSettings.name.$valid && forms.formSetting.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START ADDRESS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formSetting.address.$touched || forms.formSetting.$submitted) && forms.formSetting.address.$invalid}">\n <label class="control-label">{{\'APPLICATION_WEB_ADDRESS\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="url" name="address" placeholder="{{\'APPLICATION_WEB_ADDRESS\' | translate}}" class="form-control" data-ng-model="item.address" required/>\n <span data-ng-show="(forms.formSetting.address.$touched || forms.formSetting.$submitted) && forms.formSetting.address.$invalid && forms.formSetting.address.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END ADDRESS -->\n\n <!-- START REMOTE IP -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formSetting.remote.$touched || forms.formSetting.$submitted) && forms.formSetting.remote.$invalid}">\n <label class="control-label">{{\'APPLICATION_MOTION_ADDRESS\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="url" name="remote" placeholder="{{\'APPLICATION_MOTION_ADDRESS\' | translate}}" class="form-control" data-ng-model="item.remote" required/>\n <span class="help-block help-block-info">\n {{\'MESSAGE_MOTION_ADDRESS_FORMAT\' | translate}}\n </span>\n <span data-ng-show="(forms.formSetting.remote.$touched || forms.formSetting.$submitted) && forms.formSetting.remote.$invalid && forms.formSetting.remote.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END REMOTE IP -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.form.description"/>\n </div>\n <!-- END DESCRIPTION -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" ng-click="next()"/>\n </form>\n </wz-step>\n\n <wz-step title="{{\'APPLICATION_WEB_SITE_APPEARANCE\' | translate}}" canexit="exitValidation(forms.formAppearance.$valid)">\n <form name="forms.formAppearance" novalidate>\n\n <!-- START MAIN COLOR -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formAppearance.mainColor.$touched || forms.formAppearance.$submitted) && forms.formAppearance.host.$invalid}">\n <label class="control-label">{{\'APPLICATION_MAIN_COLOR\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input colorpicker type="text" name="mainColor" placeholder="{{\'APPLICATION_MAIN_COLOR\' | translate}}" style="color:{{item.color}}" class="form-control" data-ng-model="item.color" required/>\n <span data-ng-show="(forms.formAppearance.mainColor.$touched || forms.formAppearance.$submitted) && forms.formAppearance.mainColor.$invalid && forms.formAppearance.mainColor.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END MAIN COLOR -->\n\n <!-- START FOCUS COLOR -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formAppearance.focusColor.$touched || forms.formAppearance.$submitted) && forms.formAppearance.focusColor.$invalid}">\n <label class="control-label">{{\'APPLICATION_FOCUS_COLOR\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input colorpicker type="text" name="focusColor" placeholder="{{\'APPLICATION_FOCUS_COLOR\' | translate}}" style="color:{{item.color_focus}}" class="form-control" data-ng-model="item.color_focus" required/>\n <span data-ng-show="(forms.formAppearance.focusColor.$touched || forms.formAppearance.$submitted) && forms.formAppearance.focusColor.$invalid && forms.formAppearance.focusColor.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END FOCUS COLOR -->\n\n <!-- START BUTTON COLOR -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formAppearance.buttonColor.$touched || forms.formAppearance.$submitted) && forms.formAppearance.buttonColor.$invalid}">\n <label class="control-label">{{\'APPLICATION_BUTTON_COLOR\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input colorpicker type="text" name="buttonColor" placeholder="{{\'APPLICATION_BUTTON_COLOR\' | translate}}" style="color:{{item.color_button}}" class="form-control" data-ng-model="item.color_button" required/>\n <span data-ng-show="(forms.formAppearance.buttonColor.$touched || forms.formAppearance.$submitted) && forms.formAppearance.buttonColor.$invalid && forms.formAppearance.buttonColor.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END BUTTON COLOR -->\n\n <!-- START HEADER SHAPE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formAppearance.headerShape.$touched || forms.formAppearance.$submitted) && forms.formAppearance.headerShape.$invalid}">\n <label class="control-label">{{\'APPLICATION_HEADER_SHAPE\' | translate}}</label>\n <!-- <input colorpicker type="text" name="animationToggle" placeholder="{{\'APPLICATION_BUTTON_COLOR\' | translate}}" class="form-control" data-ng-model="item.animation" required/> -->\n <ui-select data-ng-model="item.header_shape" name="headerShape" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$translate.instant(\'APPLICATION_\' + $select.selected.toUpperCase())}}</ui-select-match>\n <ui-select-choices repeat="headerShape in [\'rounded\',\'squared\'] | filter: $select.search">\n <div ng-bind-html="$translate.instant(\'APPLICATION_\' + headerShape.toUpperCase()) | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END HEADER SHAPE -->\n\n <!-- START ANIMATION TOGGLE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formAppearance.animationToggle.$touched || forms.formAppearance.$submitted) && forms.formAppearance.animationToggle.$invalid}">\n <label class="control-label">{{\'APPLICATION_ANIMATION\' | translate}}</label>\n <ui-select data-ng-model="item.animation" name="animationToggle" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected ? \'On\' : \'Off\'}}</ui-select-match>\n <ui-select-choices repeat="filter in [true,false] | filter: $select.search">\n <div ng-bind-html="filter ? \'On\' : \'Off\' | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END ANIMATION TOGGLE -->\n\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" ng-click="next()"/>\n </form>\n </wz-step>\n\n <wz-step title="{{\'APPLICATION_LABELS\' | translate}}" canexit="exitValidation(forms.formLabel.$valid)">\n <form name="forms.formLabel" novalidate>\n\n <!-- START HEADER ONLINE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formLabel.headerOnline.$touched || forms.formLabel.$submitted) && forms.formLabel.headerOnline.$invalid}">\n <label class="control-label">{{\'APPLICATION_HEADER_ONLINE\' | translate}}</label>\n <input type="text" name="headerOnline" placeholder="{{\'APPLICATION_HEADER_ONLINE\' | translate}}" class="form-control" data-ng-model="item.header_online"/>\n </div>\n <!-- END HEADER ONLINE -->\n\n <!-- START ONLINE MESSAGE-->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formLabel.onlineMessage.$touched || forms.formLabel.$submitted) && forms.formLabel.onlineMessage.$invalid}">\n <label class="control-label">{{\'APPLICATION_ONLINE_MESSAGE\' | translate}}</label>\n <input type="text" name="onlineMessage" placeholder="{{\'APPLICATION_ONLINE_MESSAGE\' | translate}}" class="form-control" data-ng-model="item.online_message"/>\n </div>\n <!-- END HEADER ONLINE -->\n\n <!-- START USERNAME TITLE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formLabel.nameTitle.$touched || forms.formLabel.$submitted) && forms.formLabel.nameTitle.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME_TITLE\' | translate}}</label>\n <input type="text" name="nameTitle" placeholder="{{\'APPLICATION_NAME_TITLE\' | translate}}" class="form-control" data-ng-model="item.name_title"/>\n </div>\n <!-- END USERNAME TITLE -->\n\n <!-- START USERNAME PLACEHOLDER -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formLabel.usernamePlaceholder.$touched || forms.formLabel.$submitted) && forms.formLabel.usernamePlaceholder.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME_PLACEHOLDER\' | translate}}</label>\n <input type="text" name="usernamePlaceholder" placeholder="{{\'APPLICATION_NAME_PLACEHOLDER\' | translate}}" class="form-control" data-ng-model="item.username_placeholder"/>\n </div>\n <!-- END USERNAME PLACEHOLDER -->\n\n <!-- START EMAIL TITLE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formLabel.emailTitle.$touched || forms.formLabel.$submitted) && forms.formLabel.emailTitle.$invalid}">\n <label class="control-label">{{\'APPLICATION_EMAIL_TITLE\' | translate}}</label>\n <input type="text" name="emailTitle" placeholder="{{\'APPLICATION_EMAIL_TITLE\' | translate}}" class="form-control" data-ng-model="item.email_title"/>\n </div>\n <!-- END EMAIL TITLE -->\n\n <!-- START EMAIL PLACEHOLDER -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formLabel.emailPlaceholder.$touched || forms.formLabel.$submitted) && forms.formLabel.emailPlaceholder.$invalid}">\n <label class="control-label">{{\'APPLICATION_EMAIL_PLACEHOLDER\' | translate}}</label>\n <input type="text" name="emailPlaceholder" placeholder="{{\'APPLICATION_EMAIL_PLACEHOLDER\' | translate}}" class="form-control" data-ng-model="item.email_placeholder"/>\n </div>\n <!-- END EMAIL PLACEHOLDER -->\n\n <!-- START START CHAT BUTTON -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formLabel.startChatButton.$touched || forms.formLabel.$submitted) && forms.formLabel.startChatButton.$invalid}">\n <label class="control-label">{{\'APPLICATION_START_CHAT_BUTTON\' | translate}}</label>\n <input type="text" name="startChatButton" placeholder="{{\'APPLICATION_START_CHAT_BUTTON\' | translate}}" class="form-control" data-ng-model="item.start_chat_button"/>\n </div>\n <!-- END START CHAT BUTTON -->\n\n <!-- START RATING MESSAGE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formLabel.ratingMessage.$touched || forms.formLabel.$submitted) && forms.formLabel.ratingMessage.$invalid}">\n <label class="control-label">{{\'APPLICATION_RATING_MESSAGE\' | translate}}</label>\n <input type="text" name="ratingMessage" placeholder="{{\'APPLICATION_RATING_MESSAGE\' | translate}}" class="form-control" data-ng-model="item.rating_message"/>\n </div>\n <!-- END RATING MESSAGE -->\n\n <!-- START RATING START TEXT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formLabel.ratingSend.$touched || forms.formLabel.$submitted) && forms.formLabel.ratingSend.$invalid}">\n <label class="control-label">{{\'APPLICATION_RATING_SEND_BUTTON\' | translate}}</label>\n <input type="text" name="ratingSend" placeholder="{{\'APPLICATION_RATING_SEND_BUTTON\' | translate}}" class="form-control" data-ng-model="item.rating_send"/>\n </div>\n <!-- END RATING START TEXT -->\n\n <!-- START RATING MESSAGE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formLabel.ratingSkip.$touched || forms.formLabel.$submitted) && forms.formLabel.ratingSkip.$invalid}">\n <label class="control-label">{{\'APPLICATION_RATING_SKIP_BUTTON\' | translate}}</label>\n <input type="text" name="ratingSkip" placeholder="{{\'APPLICATION_RATING_SKIP_BUTTON\' | translate}}" class="form-control" data-ng-model="item.rating_skip"/>\n </div>\n <!-- END RATING MESSAGE -->\n\n <!-- START HEADER OFFLINE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formLabel.headerOffline.$touched || forms.formLabel.$submitted) && forms.formLabel.headerOnline.$invalid}">\n <label class="control-label">{{\'APPLICATION_HEADER_OFFLINE\' | translate}}</label>\n <input type="text" name="headerOffline" placeholder="{{\'APPLICATION_HEADER_OFFLINE\' | translate}}" class="form-control" data-ng-model="item.header_offline"/>\n </div>\n <!-- END HEADER OFFLINE -->\n\n <!-- START OFFLINE MESSAGE-->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formLabel.offlineMessage.$touched || forms.formLabel.$submitted) && forms.formLabel.onlineMessage.$invalid}">\n <label class="control-label">{{\'APPLICATION_OFFLINE_MESSAGE\' | translate}}</label>\n <input type="text" name="offlineMessage" placeholder="{{\'APPLICATION_OFFLINE_MESSAGE\' | translate}}" class="form-control" data-ng-model="item.offline_message"/>\n </div>\n <!-- END OFFLINE MESSAGE -->\n\n <!-- START ENQUIRY MESSAGE TITLE-->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formLabel.enquiryMessageTitle.$touched || forms.formLabel.$submitted) && forms.formLabel.enquiryMessageTitle.$invalid}">\n <label class="control-label">{{\'APPLICATION_ENQUIRY_MESSAGE_TITLE\' | translate}}</label>\n <input type="text" name="enquiryMessageTitle" placeholder="{{\'APPLICATION_ENQUIRY_MESSAGE_TITLE\' | translate}}" class="form-control" data-ng-model="item.message_title"/>\n </div>\n <!-- END ENQUIRY MESSAGE TITLE -->\n\n <!-- START ENQUIRY MESSAGE PLACEHOLDER-->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formLabel.enquiryMessagePlaceholder.$touched || forms.formLabel.$submitted) && forms.formLabel.onlineMessage.$invalid}">\n <label class="control-label">{{\'APPLICATION_ENQUIRY_MESSAGE_PLACEHOLDER\' | translate}}</label>\n <input type="text" name="enquiryMessagePlaceholder" placeholder="{{\'APPLICATION_ENQUIRY_MESSAGE_PLACEHOLDER\' | translate}}" class="form-control" data-ng-model="item.enquiry_message_placeholder"/>\n </div>\n <!-- END ENQUIRY MESSAGE PLACEHOLDER -->\n\n <!-- START ENQUIRY BUTTON -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formLabel.enquiryButton.$touched || forms.formLabel.$submitted) && forms.formLabel.enquiryButton.$invalid}">\n <label class="control-label">{{\'APPLICATION_ENQUIRY_BUTTON\' | translate}}</label>\n <input type="text" name="enquiryButton" placeholder="{{\'APPLICATION_ENQUIRY_BUTTON\' | translate}}" class="form-control" data-ng-model="item.enquiry_button"/>\n </div>\n <!-- END ENQUIRY BUTTON -->\n\n <!-- START AGENTS BUSY BUTTON -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formLabel.agentsBusy.$touched || forms.formLabel.$submitted) && forms.formLabel.agentsBusy.$invalid}">\n <label class="control-label">{{\'APPLICATION_AGENTS_BUSY\' | translate}}</label>\n <input type="text" name="agentsBusy" placeholder="{{\'APPLICATION_AGENTS_BUSY\' | translate}}" class="form-control" data-ng-model="item.agents_busy"/>\n </div>\n <!-- END AGENTS BUSY BUTTON -->\n\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" ng-click="next()"/>\n </form>\n </wz-step>\n\n <wz-step title="{{\'APPLICATION_FORMS\' | translate}}" canexit="exitValidation(forms.formAppearance.$valid)">\n <form name="forms.formFunctionality" novalidate>\n\n <!-- START DOWNLOAD TRANSCRIPT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formFunctionality.animationToggle.$touched || forms.formFunctionality.$submitted) && forms.formFunctionality.animationToggle.$invalid}">\n <label class="control-label">{{\'APPLICATION_DOWNLOAD_TRANSCRIPT\' | translate}}</label>\n <ui-select data-ng-model="item.download_transcript" name="downloadTranscript" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected ? \'On\' : \'Off\'}}</ui-select-match>\n <ui-select-choices repeat="downloadTranscript in [true, false] | filter: $select.search">\n <div ng-bind-html="downloadTranscript ? \'On\' : \'Off\' | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END DOWNLOAD TRANSCRIPT -->\n\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" ng-click="next()"/>\n </form>\n </wz-step>\n\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n <input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n </wz-step>\n </wizard>\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/fax/account/list/list.create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_FAX_ACCOUNT\' | translate }}</h3>\n</div>\n<div class="modal-body" data-ng-init="initWizard();">\n <form name="form" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.$submitted || form.name.$touched) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="form.name.$error.required && (form.$submitted || form.name.$touched)" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START TRUNKS -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.$submitted || form.trunk.$touched) && form.trunk.$invalid}">\n <label class="control-label">{{\'APPLICATION_TRUNK\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="item.TrunkName" name="trunk" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_TRUNK\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="trunk.name as trunk in trunks | filter: $select.search">\n <div data-ng-bind="trunk.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="trunks.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_TRUNKS_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/tools/trunks/list">{{\'APPLICATION_INTERVALS\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="form.trunk.$error.required && (form.$submitted || form.trunk.$touched)" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- START TRUNKS -->\n\n <!-- START LOCALSTATIONID -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.$submitted || form.localstationid.$touched) && form.localstationid.$invalid}">\n <label class="control-label">{{\'APPLICATION_LOCALSTATIONID\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="localstationid" placeholder="{{\'APPLICATION_LOCALSTATIONID\' | translate}}" class="form-control" data-ng-model="item.localstationid" required/>\n <span data-ng-show="form.localstationid.$error.required && (form.$submitted || form.localstationid.$touched)" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span class="help-block">\n {{\'DESCRIPTION_LOCALSTATIONID\' | translate}}.\n </span>\n </div>\n <!-- END LOCALSTATIONID -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/fax/account/list/list.html",'<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-fax"></i>\n <a href="#">{{ \'APPLICATION_FAX\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-notebook"></i>\n <a href="/channels/fax/accounts/list">{{ \'APPLICATION_ACCOUNTS\' | translate }}</a>\n </li>\n </ul>\n </div>\n </div>\n</div>\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-notebook font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_ACCOUNTS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <button type="button" class="btn green-jungle" data-toggle="dropdown" data-hover="dropdown" data-delay="1000" data-close-others="true" aria-expanded="true">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_ACCOUNT\' | translate }} <i class="fa fa-angle-down"></i>\n </button>\n <ul class="dropdown-menu" role="menu">\n <li>\n <a href="/channels/fax/accounts/wizard">\n {{ \'APPLICATION_STANDARD\' | translate }}\n </a>\n </li>\n <li>\n <a href="#" data-ng-click="createItem()">\n {{ \'APPLICATION_QUICK\' | translate }}\n </a>\n </li>\n </ul>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/fax/account/view/action/list/list.html",'<div class="row" data-ng-init="initActons()">\r\n <div class="col-md-12">\r\n <div class="portlet light">\r\n <div class="portlet-title tabbable-line">\r\n <div class="caption caption-md">\r\n <i class="icon-globe theme-font hide"></i>\r\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_ACTIONS\' | translate}}</span>\r\n </div>\r\n <div class="actions">\r\n <div class="btn-group" data-ng-show="id.length">\r\n <a class="btn red" href="#" data-ng-click="deleteItems()">\r\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\r\n </a>\r\n </div>\r\n <div class="btn-group">\r\n <a class="btn green-jungle" href="/channels/fax/accounts/view/{{account.id}}/actions/wizard" data-toggle="dropdown">\r\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_ACTION\' | translate }}\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n <div class="portlet-body">\r\n <!-- START TABLE -->\r\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\r\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\r\n </div>\r\n <!-- END TABLE -->\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n'), -a.put("app/channels/fax/account/view/action/view/view.html",'\n<div class="row" data-ng-init="initAction()">\n <div class="col-md-12">\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-directions font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_ACTION\' | translate }}</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <form name="forms.settings" ng-submit="updateItem()" novalidate>\n <!-- START APP -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.app.$touched || forms.settings.$submitted) && forms.settings.app.$invalid}">\n <label class="control-label">{{ \'APPLICATION_APPLICATION\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.app" name="app" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_APPLICATION\' | translate }}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="app.value as app in apps | filter: $select.search">\n <div ng-bind-html="app.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.app.$touched || forms.settings.$submitted) && forms.settings.app.$invalid && forms.settings.app.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END APP -->\n\n <div class="app-settings" ng-slide-down="application.app === \'queue\'" lazy-render duration="1" data-ng-init="getQueues()">\n <!-- START QUEUE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.queue.$touched || forms.settings.$submitted) && forms.settings.queue.$invalid}">\n <label class="control-label">{{\'APPLICATION_QUEUE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.FaxQueueId" name="queue" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="queue.id as queue in queues | filter: $select.search">\n <div ng-bind-html="queue.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="queues.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_QUEUES_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/channels/fax/queues/list">{{\'APPLICATION_QUEUES\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.settings.queue.$touched || forms.settings.$submitted) && forms.settings.queue.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END QUEUE -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="number" name="timeout" placeholder="{{\'APPLICATION_TIMEOUT\' | translate}}" class="form-control" data-ng-model="application.timeout" min="1" required/>\n <span data-ng-show="(forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid && forms.settings.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.app === \'agent\'" lazy-render duration="1" data-ng-init="getAgents()">\n <!-- START AGENT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.agent.$touched || forms.settings.$submitted) && forms.settings.agent.$invalid}">\n <label class="control-label">{{\'APPLICATION_AGENT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.UserId" name="agent" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.fullname}}</ui-select-match>\n <ui-select-choices repeat="agent.id as agent in agents | filter: $select.search">\n <div ng-bind-html="agent.fullname | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="agents.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_AGENTS_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/staff/agents/list">{{\'APPLICATION_QUEUES\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.settings.agent.$touched || forms.settings.$submitted) && forms.settings.agent.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END AGENT -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="number" name="timeout" placeholder="{{\'APPLICATION_TIMEOUT\' | translate}}" class="form-control" data-ng-model="application.timeout" min="1" required/>\n <span data-ng-show="(forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid && forms.settings.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.app === \'sendMail\'" lazy-render duration="1" data-ng-init="getMailAccounts();getTemplates()">\n <!-- START SENDMAIL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TO\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="email" name="to" placeholder="{{\'APPLICATION_TO\' | translate}}" class="form-control" data-ng-model="application.data2" min="1" required/>\n <span data-ng-show="(forms.settings.from.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid && forms.settings.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.mail.$touched || forms.settings.$submitted) && forms.settings.account.$invalid}">\n <label class="control-label">{{\'APPLICATION_ACCOUNT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data8" name="account" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="account.id as account in mailAccounts | filter: $select.search">\n <div ng-bind-html="account.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.account.$touched || forms.settings.$submitted) && forms.settings.account.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.template.$touched || forms.settings.$submitted) && forms.settings.template.$invalid}">\n <label class="control-label">{{\'APPLICATION_TEMPLATE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data9" name="template" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="template.id as template in templates | filter: $select.search">\n <div ng-bind-html="template.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.template.$touched || forms.settings.$submitted) && forms.settings.template.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END SENDMAIL -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.app === \'sendSms\'" lazy-render duration="1" data-ng-init="getSmsAccounts()">\n <!-- START SENDSms -->\n <div class="app-settings" ng-slide-down="application.app === \'sendSms\'" lazy-render duration="1">\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.to.$touched || forms.settings.$submitted) && forms.settings.to.$invalid}">\n <label class="control-label">{{\'APPLICATION_TO\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" ng-pattern="/^[\\+]?[0-9]+$/" name="to" placeholder="{{\'APPLICATION_TO\' | translate}}" class="form-control" data-ng-model="application.data2" required/>\n <span data-ng-show="(forms.settings.to.$touched || forms.settings.$submitted) && forms.settings.to.$invalid && forms.settings.to.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.account.$touched || forms.settings.$submitted) && forms.settings.account.$invalid}">\n <label class="control-label">{{\'APPLICATION_ACCOUNT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data8" name="account" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="account.id as account in smsAccounts | filter: $select.search">\n <div ng-bind-html="account.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.account.$touched || forms.settings.$submitted) && forms.settings.account.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.text.$touched || forms.text.$submitted) && forms.settings.text.$invalid}">\n <label class="control-label">{{\'APPLICATION_TEXT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <textarea id="text" class="form-control maxlength-handler" maxlength="160" name="text" data-ng-model="application.data6" required></textarea>\n <span data-ng-show="(forms.settings.text.$touched || forms.settings.$submitted) && forms.settings.text.$invalid && forms.settings.text.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n\n <!-- END SENDSms -->\n </div>\n\n <!-- START INTERVAL_TYPE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.intType.$touched || forms.settings.$submitted) && forms.settings.intType.$invalid}">\n <label class="control-label">{{ \'APPLICATION_INTERVAL_TYPE\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.intType" theme="bootstrap" name="intType" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="intType.value as intType in $application.intTypes | filter: $select.search">\n {{ intType.name | translate }}\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.intType.$touched || forms.settings.$submitted) && forms.settings.intType.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERVAL_TYPE -->\n\n <div class="app-settings" ng-slide-down="application.intType === \'custom\'" lazy-render duration="1">\n <!-- START TIME -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_TIME\' | translate }}</label>\n <div class="input-group input-large">\n <fieldset class="pull-left" ng-disabled="application.alwaysTime">\n <uib-timepicker name="t_from" data-ng-model="application.t_from" show-meridian="false" show-spinners="false" mousewheel="false"></uib-timepicker>\n </fieldset>\n <div class="input-group-addon col-md-1 interval-to pull-left">to</div>\n <fieldset ng-disabled="application.alwaysTime"><uib-timepicker name="t_to" data-ng-model="application.t_to" show-meridian="false" show-spinners="false" mousewheel="false"></uib-timepicker></fieldset>\n <!-- <label class="control-label pointer-cursor"><input type="checkbox" data-ng-model="application.alwaysTime">{{\'APPLICATION_ALWAYS\' | translate}}</label> -->\n </div>\n </div>\n <!-- END TIME -->\n\n <!-- START ALWAYS -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_ALWAYS\' | translate }}</label>\n <div class="input-group input-large">\n <label class="control-label pointer-cursor">\n <input\n bs-switch\n data-ng-model="application.alwaysTime"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n <!-- <input type="checkbox" data-ng-model="application.alwaysTime"> -->\n </label>\n </div>\n </div>\n <!-- END ALWAYS -->\n\n <!-- START WEEKDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_WEEKDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="application.wd_from" theme="bootstrap" name="wd_from">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{ weekDay.name | translate}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="application.wd_to" theme="bootstrap" name="wd_to">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{ weekDay.name | translate }}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END WEEKDAY -->\n\n <!-- START MONTHDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTHDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="application.md_from" theme="bootstrap" name="md_from">\n <ui-select-match allow-clear>{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search" ui-disable-choice="application.md_to && application.md_to!==\'always\' && monthDay>application.md_to && monthDay!==\'always\'">\n {{monthDay}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="application.md_to" theme="bootstrap" name="md_to">\n <ui-select-match allow-clear>{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search" ui-disable-choice="application.md_from && application.md_from!==\'always\' && monthDay<application.md_from && monthDay!==\'always\'">\n {{monthDay}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTHDAY -->\n\n <!-- START MONTH -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTH\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="application.m_from" theme="bootstrap" name="m_from">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{ month.name | translate }}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="application.m_to" theme="bootstrap" name="m_to">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{ month.name | translate }}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTH -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.intType === \'list\'" lazy-render duration="1" data-ng-init="getIntervals()">\n\n <!-- START INTERVALS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.IntervalId.$touched || forms.settings.$submitted) && forms.settings.IntervalId.$invalid}">\n <label class="control-label">{{\'APPLICATION_INTERVALS\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.IntervalId" theme="bootstrap" name="IntervalId" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{ $select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="interval.id as interval in intervals | filter: $select.search">\n {{ interval.name}}\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="intervals.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_INTERVALS_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/tools/intervals/list">{{\'APPLICATION_INTERVALS\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.settings.IntervalId.$touched || forms.settings.$submitted) && forms.settings.IntervalId.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERVALS -->\n\n </div>\n <button class="btn green-haze" type="submit">{{\'APPLICATION_UPDATE\' | translate}}</button>\n </form>\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/fax/account/view/action/wizard/wizard.html",'\n<div class="row" data-ng-init="initWizard()">\n <div class="col-md-12">\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-directions font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_ACTION\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="createItem()">\n <wz-step title="{{\'APPLICATION_APPLICATION\' | translate}}" canexit="formValidation(forms.action.$valid)">\n <form name="forms.action" novalidate>\n <!-- START APP -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.action.$submitted && forms.action.app.$invalid}">\n <label class="control-label">{{ \'APPLICATION_APPLICATION\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.app" name="app" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_APPLICATION\' | translate }}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="app.value as app in apps | filter: $select.search">\n <div ng-bind-html="app.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.action.$submitted && forms.action.app.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END APP -->\n\n <div class="app-settings" ng-slide-down="application.app === \'agent\'" lazy-render duration="1" data-ng-init="getAgents()">\n <!-- START AGENT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.agent.$touched || forms.action.$submitted) && forms.action.agent.$invalid}">\n <label class="control-label">{{\'APPLICATION_AGENT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.UserId" name="agent" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.fullname}}</ui-select-match>\n <ui-select-choices repeat="agent.id as agent in agents | filter: $select.search">\n <div ng-bind-html="agent.fullname | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="agents.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_AGENTS_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/staff/agents/list">{{\'APPLICATION_QUEUES\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.action.agent.$touched || forms.action.$submitted) && forms.action.agent.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END AGENT -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.timeout.$touched || forms.action.$submitted) && forms.action.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="number" name="timeout" placeholder="{{\'APPLICATION_TIMEOUT\' | translate}}" class="form-control" data-ng-model="application.timeout" min="1" required/>\n <span data-ng-show="(forms.action.timeout.$touched || forms.action.$submitted) && forms.action.timeout.$invalid && forms.action.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n\n </div>\n\n <div class="app-settings" ng-slide-down="application.app === \'queue\'" lazy-render duration="1" data-ng-init="getQueues()">\n <!-- START QUEUE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.queue.$touched || forms.action.$submitted) && forms.action.queue.$invalid}">\n <label class="control-label">{{\'APPLICATION_QUEUE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.FaxQueueId" name="queue" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="queue.id as queue in queues | filter: $select.search">\n <div ng-bind-html="queue.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="queues.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_QUEUES_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/channels/fax/queues/list">{{\'APPLICATION_QUEUES\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.action.queue.$touched || forms.action.$submitted) && forms.action.queue.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END QUEUE -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.timeout.$touched || forms.action.$submitted) && forms.action.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="number" name="timeout" placeholder="{{\'APPLICATION_TIMEOUT\' | translate}}" class="form-control" data-ng-model="application.timeout" min="1" required/>\n <span data-ng-show="(forms.action.timeout.$touched || forms.action.$submitted) && forms.action.timeout.$invalid && forms.action.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.app === \'sendMail\'" lazy-render duration="1" data-ng-init="getMailAccounts();getTemplates()">\n <!-- START SENDMAIL -->\n <div class="app-settings" ng-slide-down="application.app === \'sendMail\'" lazy-render duration="1">\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.timeout.$touched || forms.action.$submitted) && forms.action.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TO\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="email" name="to" placeholder="{{\'APPLICATION_TO\' | translate}}" class="form-control" data-ng-model="application.data2" min="1" required/>\n <span data-ng-show="(forms.action.from.$touched || forms.action.$submitted) && forms.action.timeout.$invalid && forms.action.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.mail.$touched || forms.action.$submitted) && forms.action.account.$invalid}">\n <label class="control-label">{{\'APPLICATION_ACCOUNT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data8" name="account" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="account.id as account in mailAccounts | filter: $select.search">\n <div ng-bind-html="account.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.action.account.$touched || forms.action.$submitted) && forms.action.account.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.template.$touched || forms.action.$submitted) && forms.action.template.$invalid}">\n <label class="control-label">{{\'APPLICATION_TEMPLATE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data9" name="template" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="template.id as template in templates | filter: $select.search">\n <div ng-bind-html="template.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.action.template.$touched || forms.action.$submitted) && forms.action.template.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END SENDMAIL -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.app === \'sendSms\'" lazy-render duration="1" data-ng-init="getSmsAccounts()">\n <!-- START SENDSms -->\n <div class="app-settings" ng-slide-down="application.app === \'sendSms\'" lazy-render duration="1">\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.to.$touched || forms.action.$submitted) && forms.action.to.$invalid}">\n <label class="control-label">{{\'APPLICATION_TO\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" ng-pattern="/^[\\+]?[0-9]+$/" name="to" placeholder="{{\'APPLICATION_TO\' | translate}}" class="form-control" data-ng-model="application.data2" required/>\n <span data-ng-show="(forms.action.to.$touched || forms.action.$submitted) && forms.action.to.$invalid && forms.action.to.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.account.$touched || forms.action.$submitted) && forms.action.account.$invalid}">\n <label class="control-label">{{\'APPLICATION_ACCOUNT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data8" name="account" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="account.id as account in smsAccounts | filter: $select.search">\n <div ng-bind-html="account.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.action.account.$touched || forms.action.$submitted) && forms.action.account.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.text.$touched || forms.action.$submitted) && forms.action.text.$invalid}">\n <label class="control-label">{{\'APPLICATION_TEXT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <textarea id="text" class="form-control maxlength-handler" maxlength="160" name="text" data-ng-model="application.data6" required></textarea>\n <span data-ng-show="(forms.action.text.$touched || forms.action.$submitted) && forms.action.text.$invalid && forms.action.text.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n\n <!-- END SENDSms -->\n </div>\n\n <!-- START INTERVAL_TYPE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.intType.$touched || forms.action.$submitted) && forms.action.intType.$invalid}">\n <label class="control-label">{{ \'APPLICATION_INTERVAL_TYPE\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.intType" theme="bootstrap" name="intType" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="intType.value as intType in $application.intTypes | filter: $select.search">\n {{ intType.name | translate }}\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.action.intType.$touched || forms.action.$submitted) && forms.action.intType.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERVAL_TYPE -->\n\n <div class="app-settings" ng-slide-down="application.intType === \'custom\'" lazy-render duration="1">\n <!-- START TIME -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_TIME\' | translate }}</label>\n <div class="input-group input-large">\n <fieldset class="pull-left" ng-disabled="application.alwaysTime">\n <uib-timepicker name="t_from" data-ng-model="application.t_from" show-meridian="false" show-spinners="false" mousewheel="false"></uib-timepicker>\n </fieldset>\n <div class="input-group-addon col-md-1 interval-to pull-left">to</div>\n <fieldset ng-disabled="application.alwaysTime"><uib-timepicker name="t_to" data-ng-model="application.t_to" show-meridian="false" show-spinners="false" mousewheel="false"></uib-timepicker></fieldset>\n <!-- <label class="control-label pointer-cursor"><input type="checkbox" data-ng-model="application.alwaysTime">{{\'APPLICATION_ALWAYS\' | translate}}</label> -->\n </div>\n </div>\n <!-- END TIME -->\n\n <!-- START ALWAYS -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_ALWAYS\' | translate }}</label>\n <div class="input-group input-large">\n <label class="control-label pointer-cursor">\n <input\n bs-switch\n data-ng-model="application.alwaysTime"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n <!-- <input type="checkbox" data-ng-model="application.alwaysTime"> -->\n </label>\n </div>\n </div>\n <!-- END ALWAYS -->\n\n <!-- START WEEKDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_WEEKDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="application.wd_from" theme="bootstrap" name="wd_from">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{ weekDay.name | translate}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="application.wd_to" theme="bootstrap" name="wd_to">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{ weekDay.name | translate }}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END WEEKDAY -->\n\n <!-- START MONTHDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTHDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="application.md_from" theme="bootstrap" name="md_from">\n <ui-select-match allow-clear>{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search" ui-disable-choice="application.md_to && application.md_to!==\'always\' && monthDay>application.md_to && monthDay!==\'always\'">\n {{monthDay}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="application.md_to" theme="bootstrap" name="md_to">\n <ui-select-match allow-clear>{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search" ui-disable-choice="application.md_from && application.md_from!==\'always\' && monthDay<application.md_from && monthDay!==\'always\'">\n {{monthDay}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTHDAY -->\n\n <!-- START MONTH -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTH\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="application.m_from" theme="bootstrap" name="m_from">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{ month.name | translate }}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="application.m_to" theme="bootstrap" name="m_to">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{ month.name | translate }}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTH -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.intType === \'list\'" lazy-render duration="1" data-ng-init="getIntervals()">\n\n <!-- START INTERVALS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.IntervalId.$touched || forms.action.$submitted) && forms.action.IntervalId.$invalid}">\n <label class="control-label">{{\'APPLICATION_INTERVALS\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.IntervalId" theme="bootstrap" name="IntervalId" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{ $select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="interval.id as interval in intervals | filter: $select.search">\n {{ interval.name}}\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="intervals.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_INTERVALS_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/tools/intervals/list">{{\'APPLICATION_INTERVALS\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.action.IntervalId.$touched || forms.action.$submitted) && forms.action.IntervalId.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERVALS -->\n\n </div>\n\n <input class="btn green-haze" type="submit" data-ng-click="next()" value="{{\'APPLICATION_CONTINUE\' | translate}}"/>\n </form>\n </wz-step>\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n <input class="btn green-haze" type="submit" data-ng-click="next()" value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n </wz-step>\n </wizard>\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'), -a.put("app/channels/fax/account/view/disposition/modal/add.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_DISPOSITIONS\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.form.$touched || form.$submitted) && form.form.$invalid}">\n <div class="">\n <!-- <input type="text" name="form" placeholder="{{\'APPLICATION_DISPOSITION\' | translate}}" class="form-control" data-ng-model="name" data-ng-pattern="/^[a-zA-Z0-9]*$/" required/> -->\n <input type="text" name="form" placeholder="{{\'APPLICATION_DISPOSITION\' | translate}}" class="form-control" data-ng-model="name" required/>\n <span data-ng-show="form.form.$touched && form.form.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <!-- <span data-ng-show="form.form.$touched && form.form.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_PATTERN\' | translate}}.\n </span> -->\n </div>\n <!-- <div class="help-block">\n {{\'MESSAGE_ALLOWED_NUMBERS_AND_LETTERS\' | translate}}\n </div> -->\n </div>\n <!-- END NAME -->\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" data-ng-click="ok()" data-ng-show="form.$valid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" data-ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/fax/account/view/disposition/view/view.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_DISPOSITIONS\' | translate}}</span>\n </div>\n <div class="actions actions-md">\n <a href="#" class="btn btn-icon-only green" data-ng-click="addDisposition();">\n <i class="fa fa-plus"></i>\n </a>\n </div>\n </div>\n <div class="portlet-body" data-ng-init="initView()">\n <div class="tab-content">\n <div class="row" data-ng-hide="dispositions.length">\n <div class="col-md-12">\n <div class="note note-info">\n <h4 class="block">Info! {{\'MESSAGE_NO_DISPOSITIONS_AVAILABLE\' | translate}}</h4>\n </div>\n </div>\n </div>\n\n <!-- GENERAL TAB -->\n <div class="row" data-ng-repeat="disposition in dispositions">\n <div class="col-md-12 form-group">\n <div class="input-group">\n <div>\n <input class="form-control" type="text" placeholder="{{\'APPLICATION_DISPOSITION\' | translate}}" data-ng-model="disposition.name">\n </div>\n <span class="input-group-btn">\n <button class="btn btn-success" type="button" data-ng-click="updateDisposition(disposition.id, disposition.name);"><i class="fa fa-cloud-upload fa-fw"></i> {{\'APPLICATION_UPDATE\' | translate}}</button>\n <button class="btn btn-danger" type="button" data-ng-click="deleteDisposition(disposition.id);"><i class="fa fa-times fa-fw"></i> {{\'APPLICATION_DELETE\' | translate}}</button>\n </span>\n </div>\n </div>\n </div>\n <!-- END GENERAL TAB -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/fax/account/view/hooks/view/view.html",'<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_HOOKS\' | translate}}</span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_ACCEPT\' | translate}}</a>\n </li>\n <li >\n <a href="#" data-target="#tab_1_2" data-toggle="tab">{{\'APPLICATION_REJECT\' | translate}}</a>\n </li>\n <li >\n <a href="#" data-target="#tab_1_3" data-toggle="tab">{{\'APPLICATION_CLOSE\' | translate}}</a>\n </li>\n </ul>\n </div>\n <div class="portlet-body">\n <div class="tab-content">\n <!-- ACCEPT TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.accept" data-ng-submit="forms.accept.$valid && updateItemFaxAccount()" novalidate>\n <div class="row">\n <div class="form-group col-md-4" data-ng-class="{\'has-error\': (forms.accept.method.$touched || forms.accept.$submitted) && forms.accept.method.$invalid}">\n <label class="control-label">{{\'APPLICATION_METHOD\' | translate}}</label>\n <ui-select data-ng-model="account.acceptMethod" name="method" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_METHOD\' | translate}}">{{$select.selected.name | uppercase}}</ui-select-match>\n <ui-select-choices repeat="type.value as type in types | filter: $select.search">\n <div ng-bind-html="type.name | highlight: $select.search | uppercase" ></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.accept.method.$touched || forms.accept.$submitted) && forms.accept.method.$invalid && forms.accept.method.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div class="form-group col-md-8" data-ng-class="{\'has-error\': (forms.accept.url.$touched || forms.accept.$submitted) && forms.accept.url.$invalid}">\n <label class="control-label">{{\'APPLICATION_URL\' | translate}}</label>\n <input type="url" name="url" placeholder="{{\'APPLICATION_URL\' | translate}}" class="form-control" data-ng-model="account.acceptUrl" ng-required="account.acceptMethod"/>\n <span data-ng-show="(forms.accept.url.$touched || forms.accept.$submitted) && forms.accept.url.$invalid && forms.accept.url.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n <!-- START ACTIONS-->\n <div class="row" ng-repeat = "action in account.actions">\n <div ng-switch="action.action">\n <div ng-switch-when="pause">\n <div class="form-group col-md-4">\n <label class="control-label">{{\'APPLICATION_PAUSE\' | translate}}</label></br>\n <input\n bs-switch\n data-ng-change="resetActionData(action)"\n data-ng-model="action.enabled"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_ENABLED\' | translate }}"\n switch-off-text="{{ \'APPLICATION_DISABLED\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n </div>\n <div ng-if="action.enabled" class="form-group col-md-8">\n <label class="control-label">{{\'APPLICATION_TYPE\' | translate}}</label>\n <ui-select name="action" data-ng-model="action.type" theme="bootstrap" >\n <ui-select-match placeholder="{{\'APPLICATION_TYPE\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat=" pause.name as pause in pauses | filter: $select.search">\n <div ng-bind-html="pause.name | highlight: $select.search | uppercase" ></div>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n </div>\n </div>\n <!-- END ACTION -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END ACCEPT TAB -->\n <!-- START REJECT TAB -->\n <div class="tab-pane" id="tab_1_2">\n <form name="forms.reject" data-ng-submit="forms.reject.$valid && updateItemFaxAccount()" novalidate>\n <div class="row">\n <div class="form-group col-md-4" data-ng-class="{\'has-error\': (forms.reject.method.$touched || forms.reject.$submitted) && forms.reject.method.$invalid}">\n <label class="control-label">{{\'APPLICATION_METHOD\' | translate}}</label>\n <ui-select data-ng-model="account.rejectMethod" name="method" theme="bootstrap" >\n <ui-select-match placeholder="{{\'APPLICATION_METHOD\' | translate}}">{{$select.selected.name | uppercase}}</ui-select-match>\n <ui-select-choices repeat="type.value as type in types | filter: $select.search">\n <div ng-bind-html="type.name | highlight: $select.search | uppercase" ></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.reject.method.$touched || forms.reject.$submitted) && forms.reject.method.$invalid && forms.reject.method.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div class="form-group col-md-8" data-ng-class="{\'has-error\': (forms.reject.url.$touched || forms.reject.$submitted) && forms.reject.url.$invalid}">\n <label class="control-label">{{\'APPLICATION_URL\' | translate}}</label>\n <input type="url" name="url" placeholder="{{\'APPLICATION_URL\' | translate}}" class="form-control" data-ng-model="account.rejectUrl" ng-required="account.rejectMethod"/>\n <span data-ng-show="(forms.reject.url.$touched || forms.reject.$submitted) && forms.reject.url.$invalid && forms.reject.url.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END ACCEPT TAB -->\n <!-- START CLOSE TAB -->\n <div class="tab-pane" id="tab_1_3">\n <form name="forms.close" data-ng-submit="forms.close.$valid && updateItemFaxAccount()" novalidate>\n <div class="row">\n <div class="form-group col-md-4" data-ng-class="{\'has-error\': (forms.close.method.$touched || forms.close.$submitted) && forms.close.method.$invalid}">\n <label class="control-label">{{\'APPLICATION_METHOD\' | translate}}</label>\n <ui-select data-ng-model="account.closeMethod" name="method" theme="bootstrap" >\n <ui-select-match placeholder="{{\'APPLICATION_METHOD\' | translate}}">{{$select.selected.name | uppercase}}</ui-select-match>\n <ui-select-choices repeat="type.value as type in types | filter: $select.search">\n <div ng-bind-html="type.name | highlight: $select.search | uppercase" ></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.close.method.$touched || forms.close.$submitted) && forms.close.method.$invalid && forms.close.method.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div class="form-group col-md-8" data-ng-class="{\'has-error\': (forms.close.url.$touched || forms.close.$submitted) && forms.close.url.$invalid}">\n <label class="control-label">{{\'APPLICATION_URL\' | translate}}</label>\n <input type="url" name="url" placeholder="{{\'APPLICATION_URL\' | translate}}" class="form-control" data-ng-model="account.closeUrl" ng-required="account.closeMethod"/>\n <span data-ng-show="(forms.close.url.$touched || forms.close.$submitted) && forms.close.url.$invalid && forms.close.url.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END CLOSE TAB -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/fax/account/view/setting/view/view.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_SETTINGS\' | translate}}</span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_GENERAL\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_2" data-toggle="tab">{{\'APPLICATION_ADVANCED\' | translate}}</a>\n </li>\n </ul>\n </div>\n <div class="portlet-body" data-ng-init="initView()">\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.general" data-ng-submit="forms.general.$valid && updateItemFaxAccount()" novalidate>\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.$submitted || forms.general.name.$touched) && forms.general.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="account.name" required/>\n <span data-ng-show="forms.general.name.$error.required && (forms.general.$submitted || forms.general.name.$touched)" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START HEADERINFO -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.$submitted || forms.general.headerinfo.$touched) && forms.general.headerinfo.$invalid}">\n <label class="control-label">{{\'APPLICATION_HEADERINFO\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="headerinfo" placeholder="{{\'APPLICATION_HEADERINFO\' | translate}}" class="form-control" data-ng-model="account.headerinfo" required/>\n <span data-ng-show="forms.general.headerinfo.$error.required && (forms.general.$submitted || forms.general.headerinfo.$touched)" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span class="help-block">\n {{\'DESCRIPTION_HEADERINFO\' | translate}}.\n </span>\n </div>\n <!-- END HEADERINFO -->\n\n <!-- START TRUNKS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.$submitted || forms.general.trunk.$touched) && forms.general.trunk.$invalid}">\n <label class="control-label">{{\'APPLICATION_TRUNK\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="account.TrunkName" name="trunk" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_TRUNK\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="trunk.name as trunk in trunks | filter: $select.search">\n <div data-ng-bind="trunk.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="trunks.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_TRUNKS_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/tools/trunks/list">{{\'APPLICATION_INTERVALS\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="forms.general.trunk.$error.required && (forms.general.$submitted || forms.general.trunk.$touched)" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- START TRUNKS -->\n\n <!-- START LOCALSTATIONID -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.$submitted || forms.general.localstationid.$touched) && forms.general.localstationid.$invalid}">\n <label class="control-label">{{\'APPLICATION_LOCALSTATIONID\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="localstationid" placeholder="{{\'APPLICATION_LOCALSTATIONID\' | translate}}" class="form-control" data-ng-model="account.localstationid" required/>\n <span data-ng-show="forms.general.localstationid.$error.required && (forms.general.$submitted || forms.general.localstationid.$touched)" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span class="help-block">\n {{\'DESCRIPTION_LOCALSTATIONID\' | translate}}.\n </span>\n </div>\n <!-- END LOCALSTATIONID -->\n\n <!-- START LIST -->\n <div class="form-group" data-ng-if="license.cm">\n <label class="control-label">{{\'APPLICATION_LIST\' | translate}}</label>\n <div class="input-group">\n\n <ui-select data-ng-model="account.ListId" name="list" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_LIST\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="list.id as list in lists | filter: $select.search">\n <div ng-bind-html="list.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n\n <span class="input-group-btn">\n <button type="button" data-ng-click="account.ListId = null" class="btn btn-default">\n <span class="glyphicon glyphicon-trash"></span>\n </button>\n </span>\n\n </div>\n </div>\n <!-- END LIST -->\n\n <!-- START FIDELITY -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_FIDELITY\' | translate}}</label></br>\n <input\n bs-switch\n data-ng-model="account.fidelity"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_ENABLED\' | translate }}"\n switch-off-text="{{ \'APPLICATION_DISABLED\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n </div>\n <!-- END FIDELITY -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-if="account.fidelity" data-ng-class="{\'has-error\': (forms.general.$submitted || forms.general.timeout.$touched) && forms.general.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" min="0" name="timeout" placeholder="{{\'APPLICATION_PORT\' | translate}}" class="form-control" data-ng-model="account.timeout" required/>\n <span data-ng-show="(forms.general.timeout.$touched || forms.general.$submitted) && forms.general.timeout.$invalid && forms.general.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.general.timeout.$touched || forms.general.$submitted) && forms.general.timeout.$invalid && forms.general.timeout.$error.number" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_NUMERIC_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="account.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END GENERAL TAB -->\n\n <!-- ADVANCED TAB -->\n <div class="tab-pane" id="tab_1_2">\n <form name="forms.advanced" data-ng-submit="forms.advanced.$valid && updateItemFaxAccount()" novalidate>\n <div class="row">\n <div class="col-md-6">\n <!-- START ECM -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_ECM\' | translate}}<span class="required" aria-required="true">*</span></label><br>\n <input\n bs-switch\n ng-model="account.ecm"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_ENABLED\' | translate }}"\n switch-off-text="{{ \'APPLICATION_DISABLED\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}"\n ng-true-value="\'yes\'"\n ng-false-value="\'no\'">\n <span class="help-block">\n {{\'DESCRIPTION_ECM\' | translate}}.\n </span>\n </div>\n <!-- END ECM -->\n\n <!-- START MINRATE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.$submitted || forms.advanced.minrate.$touched) && forms.advanced.minrate.$invalid}">\n <label class="control-label">{{\'APPLICATION_MINRATE\' | translate}} <span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="account.minrate" name="minrate" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_MINRATE\' | translate}}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="minrate in rate | filter: $select.search">\n <div data-ng-bind="minrate | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{\'DESCRIPTION_MINRATE\' | translate}}.\n </span>\n <span data-ng-show="forms.advanced.minrate.$error.required && (forms.advanced.$submitted || forms.advanced.minrate.$touched)" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- START MINRATE -->\n\n <!-- START MAXRATE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.$submitted || forms.advanced.maxrate.$touched) && forms.advanced.maxrate.$invalid}">\n <label class="control-label">{{\'APPLICATION_MAXRATE\' | translate}} <span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="account.maxrate" name="maxrate" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_MAXRATE\' | translate}}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="maxrate in rate | filter: $select.search">\n <div data-ng-bind="maxrate | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{\'DESCRIPTION_MAXRATE\' | translate}}.\n </span>\n <span data-ng-show="forms.advanced.maxrate.$error.required && (forms.advanced.$submitted || forms.advanced.maxrate.$touched)" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- START MAXRATE -->\n\n <!-- START MODEM -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.$submitted || forms.advanced.modem.$touched) && forms.advanced.modem.$invalid}">\n <label class="control-label">{{\'APPLICATION_MODEM\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="modem" placeholder="{{\'APPLICATION_MODEM\' | translate}}" class="form-control" data-ng-model="account.modem" required/>\n <span class="help-block">\n {{\'DESCRIPTION_MODEM\' | translate}}.\n </span>\n <span data-ng-show="forms.advanced.modem.$error.required && (forms.advanced.$submitted || forms.advanced.modem.$touched)" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END MODEM -->\n </div>\n <div class="col-md-6">\n <!-- START GATEWAY -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.$submitted || forms.advanced.gateway.$touched) && forms.advanced.gateway.$invalid}">\n <label class="control-label">{{\'APPLICATION_GATEWAY\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="gateway" placeholder="{{\'APPLICATION_GATEWAY\' | translate}}" class="form-control" data-ng-model="account.gateway" required data-ng-pattern="settings.patternGateway"/>\n <span class="help-block">\n {{\'DESCRIPTION_GATEWAY\' | translate}}.\n </span>\n <span data-ng-show="(forms.advanced.gateway.$touched || forms.advanced.$submitted) && forms.advanced.gateway.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.advanced.gateway.$touched || forms.advanced.$submitted) && forms.advanced.gateway.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_PATTERN_GATEWAY\' | translate}}.\n </span>\n </div>\n <!-- END GATEWAY -->\n\n <!-- START FAXDETECT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.$submitted || forms.advanced.faxdetect.$touched) && forms.advanced.faxdetect.$invalid}">\n <label class="control-label">{{\'APPLICATION_FAXDETECT\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="faxdetect" placeholder="{{\'APPLICATION_FAXDETECT\' | translate}}" class="form-control" data-ng-model="account.faxdetect" required data-ng-pattern="settings.patternFaxdetect"/>\n <span class="help-block">\n {{\'DESCRIPTION_FAXDETECT\' | translate}}.\n </span>\n <span data-ng-show="(forms.advanced.faxdetect.$touched || forms.advanced.$submitted) && forms.advanced.faxdetect.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.advanced.faxdetect.$touched || forms.advanced.$submitted) && forms.advanced.faxdetect.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_PATTERN_FAXDETECT\' | translate}}.\n </span>\n </div>\n <!-- END FAXDETECT -->\n\n <!-- START T38TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.$submitted || forms.advanced.t38timeout.$touched) && forms.advanced.t38timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_T38TIMEOUT\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="number" name="t38timeout" placeholder="{{\'APPLICATION_T38TIMEOUT\' | translate}}" class="form-control" data-ng-model="account.t38timeout" required min="1000"/>\n <span class="help-block">\n {{\'DESCRIPTION_T38TIMEOUT\' | translate}}.\n </span>\n <span data-ng-show="(forms.advanced.t38timeout.$touched || forms.advanced.$submitted) && forms.advanced.t38timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.advanced.t38timeout.$touched || forms.advanced.$submitted) && forms.advanced.t38timeout.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_T38TIMEOUT\' | translate}}.\n </span>\n </div>\n <!-- END T38TIMEOUT -->\n\n <!-- START TECH -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.$submitted || forms.advanced.tech.$touched) && forms.advanced.tech.$invalid}">\n <label class="control-label">{{\'APPLICATION_TECHNOLOGY\' | translate}} <span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="account.tech" name="tech" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_TECHNOLOGY\' | translate}}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="tech in techs | filter: $select.search">\n <div data-ng-bind="tech | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.advanced.tech.$touched || forms.advanced.$submitted) && forms.advanced.tech.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- START TECH -->\n </div>\n </div>\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END ADVANCED TAB -->\n\n </div>\n </div>\n </div>\n </div>\n</div>\n'), -a.put("app/channels/fax/account/view/view.html",'<!-- BEGIN PAGE HEADER-->\n<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-fax"></i>\n <a href="#">{{ \'APPLICATION_FAX\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-notebook"></i>\n <a href="/channels/fax/accounts/list">{{ \'APPLICATION_ACCOUNTS\' | translate }}</a>\n <i class="fa fa-angle-right" data-ng-show="account"></i>\n </li>\n <li data-ng-show="account">\n <a href="#">{{ account.name || account.description }}</a>\n </li>\n </ul>\n </div>\n\n<!-- END PAGE HEADER-->\n\n<!-- BEGIN PAGE CONTENT-->\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/account.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{ account.name || account.description }}\n </div>\n <div class="profile-usertitle-job">\n {{ account.phone }}\n </div>\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.channels.fax.accounts.view.settings\')}">\n <a href="/channels/fax/accounts/view/{{account.id}}/settings">\n <i class="icon-settings"></i>\n {{\'APPLICATION_SETTINGS\' | translate}} </a>\n </li>\n <li ng-class="{active: $state.is(\'main.channels.fax.accounts.view.hooks\')}">\n <a href="/channels/fax/accounts/view/{{account.id}}/hooks">\n <i class="fa fa-code"></i>\n {{\'APPLICATION_HOOKS\' | translate}} </a>\n </li>\n <li ng-class="{active: $state.is(\'main.channels.fax.accounts.view.dispositions\')}">\n <a href="/channels/fax/accounts/view/{{account.id}}/dispositions">\n <i class="icon-target"></i>\n {{\'APPLICATION_DISPOSITIONS\' | translate}} </a>\n </li>\n <li ng-class="{active: $state.includes(\'main.channels.fax.accounts.view.actions\')}">\n <a href="/channels/fax/accounts/view/{{account.id}}/actions/list">\n <i class="icon-directions"></i>\n {{\'APPLICATION_ACTIONS\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/fax/account/wizard/wizard.html",'<!-- BEGIN PAGE HEADER-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-fax"></i>\n <a href="#">{{ \'APPLICATION_FAX\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-notebook"></i>\n <a href="/channels/fax/accounts/list">{{ \'APPLICATION_ACCOUNTS\' | translate }}</a>\n </li>\n </ul>\n </div>\n </div>\n</div>\n<!-- END PAGE HEADER-->\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initWizard()">\n <div class="col-md-12">\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-notebook font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_ACCOUNT\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="createItem()">\n <wz-step title="{{\'APPLICATION_GENERAL\' | translate}}" canexit="exitValidation(forms.formGeneral.$valid)">\n <form name="forms.formGeneral" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formGeneral.$submitted || forms.formGeneral.name.$touched) && forms.formGeneral.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="forms.formGeneral.name.$error.required && (forms.formGeneral.$submitted || forms.formGeneral.name.$touched)" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START HEADERINFO -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formGeneral.$submitted || forms.formGeneral.headerinfo.$touched) && forms.formGeneral.headerinfo.$invalid}">\n <label class="control-label">{{\'APPLICATION_HEADERINFO\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="headerinfo" placeholder="{{\'APPLICATION_HEADERINFO\' | translate}}" class="form-control" data-ng-model="item.headerinfo" required/>\n <span data-ng-show="forms.formGeneral.headerinfo.$error.required && (forms.formGeneral.$submitted || forms.formGeneral.headerinfo.$touched)" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span class="help-block">\n {{\'DESCRIPTION_HEADERINFO\' | translate}}.\n </span>\n </div>\n <!-- END HEADERINFO -->\n\n <!-- START TRUNKS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formGeneral.$submitted || forms.formGeneral.trunk.$touched) && forms.formGeneral.trunk.$invalid}">\n <label class="control-label">{{\'APPLICATION_TRUNK\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="item.TrunkName" name="trunk" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_TRUNK\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="trunk.name as trunk in trunks | filter: $select.search">\n <div data-ng-bind="trunk.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="trunks.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_TRUNKS_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/tools/trunks/list">{{\'APPLICATION_INTERVALS\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="forms.formGeneral.trunk.$error.required && (forms.formGeneral.$submitted || forms.formGeneral.trunk.$touched)" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- START TRUNKS -->\n\n <!-- START LOCALSTATIONID -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formGeneral.$submitted || forms.formGeneral.localstationid.$touched) && forms.formGeneral.localstationid.$invalid}">\n <label class="control-label">{{\'APPLICATION_LOCALSTATIONID\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="localstationid" placeholder="{{\'APPLICATION_LOCALSTATIONID\' | translate}}" class="form-control" data-ng-model="item.localstationid" required/>\n <span data-ng-show="forms.formGeneral.localstationid.$error.required && (forms.formGeneral.$submitted || forms.formGeneral.localstationid.$touched)" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span class="help-block">\n {{\'DESCRIPTION_LOCALSTATIONID\' | translate}}.\n </span>\n </div>\n <!-- END LOCALSTATIONID -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" data-ng-click="next()"/>\n\n </form>\n </wz-step>\n\n <wz-step title="{{\'APPLICATION_ADVANCED\' | translate}}" canexit="exitValidation(forms.formAdvanced.$valid)">\n <form name="forms.formAdvanced" novalidate>\n\n <!-- START ECM -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_ECM\' | translate}}<span class="required" aria-required="true">*</span></label><br>\n <input\n bs-switch\n ng-model="item.ecm"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_ENABLED\' | translate }}"\n switch-off-text="{{ \'APPLICATION_DISABLED\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}"\n ng-true-value="\'yes\'"\n ng-false-value="\'no\'">\n <span class="help-block">\n {{\'DESCRIPTION_ECM\' | translate}}.\n </span>\n </div>\n <!-- END ECM -->\n\n <!-- START MINRATE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formAdvanced.$submitted || forms.formAdvanced.minrate.$touched) && forms.formAdvanced.minrate.$invalid}">\n <label class="control-label">{{\'APPLICATION_MINRATE\' | translate}} <span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="item.minrate" name="minrate" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_MINRATE\' | translate}}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="minrate in rate | filter: $select.search">\n <div data-ng-bind="minrate | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{\'DESCRIPTION_MINRATE\' | translate}}.\n </span>\n <span data-ng-show="forms.formAdvanced.minrate.$error.required && (forms.formAdvanced.$submitted || forms.formAdvanced.minrate.$touched)" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- START MINRATE -->\n\n <!-- START MAXRATE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formAdvanced.$submitted || forms.formAdvanced.maxrate.$touched) && forms.formAdvanced.maxrate.$invalid}">\n <label class="control-label">{{\'APPLICATION_MAXRATE\' | translate}} <span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="item.maxrate" name="maxrate" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_MAXRATE\' | translate}}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="maxrate in rate | filter: $select.search">\n <div data-ng-bind="maxrate | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{\'DESCRIPTION_MAXRATE\' | translate}}.\n </span>\n <span data-ng-show="forms.formAdvanced.maxrate.$error.required && (forms.formAdvanced.$submitted || forms.formAdvanced.maxrate.$touched)" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- START MAXRATE -->\n\n <!-- START MODEM -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formAdvanced.$submitted || forms.formAdvanced.modem.$touched) && forms.formAdvanced.modem.$invalid}">\n <label class="control-label">{{\'APPLICATION_MODEM\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="modem" placeholder="{{\'APPLICATION_MODEM\' | translate}}" class="form-control" data-ng-model="item.modem" required/>\n <span class="help-block">\n {{\'DESCRIPTION_MODEM\' | translate}}.\n </span>\n <span data-ng-show="forms.formAdvanced.modem.$error.required && (forms.formAdvanced.$submitted || forms.formAdvanced.modem.$touched)" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END MODEM -->\n\n <!-- START GATEWAY -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formAdvanced.$submitted || forms.formAdvanced.gateway.$touched) && forms.formAdvanced.gateway.$invalid}">\n <label class="control-label">{{\'APPLICATION_GATEWAY\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="gateway" placeholder="{{\'APPLICATION_GATEWAY\' | translate}}" class="form-control" data-ng-model="item.gateway" required data-ng-pattern="settings.patternGateway"/>\n <span class="help-block">\n {{\'DESCRIPTION_GATEWAY\' | translate}}.\n </span>\n <span data-ng-show="(forms.formAdvanced.gateway.$touched || forms.formAdvanced.$submitted) && forms.formAdvanced.gateway.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.formAdvanced.gateway.$touched || forms.formAdvanced.$submitted) && forms.formAdvanced.gateway.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_PATTERN_GATEWAY\' | translate}}.\n </span>\n </div>\n <!-- END GATEWAY -->\n\n <!-- START FAXDETECT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formAdvanced.$submitted || forms.formAdvanced.faxdetect.$touched) && forms.formAdvanced.faxdetect.$invalid}">\n <label class="control-label">{{\'APPLICATION_FAXDETECT\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="faxdetect" placeholder="{{\'APPLICATION_FAXDETECT\' | translate}}" class="form-control" data-ng-model="item.faxdetect" required data-ng-pattern="settings.patternFaxdetect"/>\n <span class="help-block">\n {{\'DESCRIPTION_FAXDETECT\' | translate}}.\n </span>\n <span data-ng-show="(forms.formAdvanced.faxdetect.$touched || forms.formAdvanced.$submitted) && forms.formAdvanced.faxdetect.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.formAdvanced.faxdetect.$touched || forms.formAdvanced.$submitted) && forms.formAdvanced.faxdetect.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_PATTERN_FAXDETECT\' | translate}}.\n </span>\n </div>\n <!-- END FAXDETECT -->\n\n <!-- START T38TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formAdvanced.$submitted || forms.formAdvanced.t38timeout.$touched) && forms.formAdvanced.t38timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_T38TIMEOUT\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="number" name="t38timeout" placeholder="{{\'APPLICATION_T38TIMEOUT\' | translate}}" class="form-control" data-ng-model="item.t38timeout" required min="1000"/>\n <span class="help-block">\n {{\'DESCRIPTION_T38TIMEOUT\' | translate}}.\n </span>\n <span data-ng-show="(forms.formAdvanced.t38timeout.$touched || forms.formAdvanced.$submitted) && forms.formAdvanced.t38timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.formAdvanced.t38timeout.$touched || forms.formAdvanced.$submitted) && forms.formAdvanced.t38timeout.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_T38TIMEOUT\' | translate}}.\n </span>\n </div>\n <!-- END T38TIMEOUT -->\n\n <!-- START TECH -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formAdvanced.$submitted || forms.formAdvanced.tech.$touched) && forms.formAdvanced.tech.$invalid}">\n <label class="control-label">{{\'APPLICATION_TECHNOLOGY\' | translate}} <span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="item.tech" name="tech" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_TECHNOLOGY\' | translate}}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="tech in techs | filter: $select.search">\n <div data-ng-bind="tech | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.formAdvanced.tech.$touched || forms.formAdvanced.$submitted) && forms.formAdvanced.tech.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- START TECH -->\n\n <button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" data-ng-click="next()"/>\n\n </form>\n </wz-step>\n\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n <input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n </wz-step>\n\n </wizard>\n\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/fax/inbox/message/info.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_INFO\' | translate }}</h3>\n</div>\n<div class="modal-body" data-ng-init="initInfo()">\n <div class="form-group" ng-if="data">\n <json-formatter json="data" open="1"></json-formatter>\n </div>\n <div class="note note-warning" data-ng-hide="data">\n <h4 class="block"></h4>\n <p>\n {{ \'MESSAGE_NO_INFO_AVAILABLE\' | translate }}\n </p>\n </div>\n\n</div>\n<div class="modal-footer">\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CLOSE\' | translate }}</button>\n</div>\n'),a.put("app/channels/fax/inbox/message/message.directive.html",'<div class="message">\n <div class="row">\n <div class="col-md-6">\n <span class="bold">From: </span>\n [<a href="" data-ng-click="openContact(message.from)">{{message.from}}</a>]\n <br>\n <span class="bold">To: </span>\n [<a href="" data-ng-click="openContact(message.to)">{{message.to}}</a>]\n </div>\n <div class="col-md-6">\n <span class="pull-right">\n <a ng-click="info(message)"><i class="icon-info font-blue"></i></a>\n </span>\n <span class="pull-right" data-ng-show="message.User">{{\'APPLICATION_SENT_BY\' | translate}}: <strong>{{message.User.fullname}}</strong></span>\n </div>\n </div>\n <br>\n <span class="todo-tasklist-date">\n <span class="pull-right" data-ng-if="message.status!==\'RECEIVED\'" data-ng-switch="message.status" uib-tooltip="{{\'APPLICATION_PAGE_TRANSFERRED\' | translate}}: {{message.pagestransferred}} - {{\'APPLICATION_RETRY\' | translate}}: {{message.retry}}">\n <a ng-switch-when="SENDING" href="#" class="btn default btn-xs inactive-link blue-stripe"> {{message.status | uppercase}}\n <i class="fa fa-warning"></i>\n </a>\n <a ng-switch-when="FAILED" href="#" class="btn default btn-xs red-stripe" data-ng-click="retry(message.id)"> {{message.status | uppercase}}\n <i class="fa fa-times"></i>\n </a>\n <a ng-switch-when="SENT" href="#" class="btn default btn-xs inactive-link green-stripe"> {{message.status | uppercase}}\n <i class="fa fa-check"></i>\n </a>\n </span>\n <span class="pull-right" data-ng-if="message.status===\'RECEIVED\'" uib-tooltip="{{\'APPLICATION_PAGE_TRANSFERRED\' | translate}}: {{message.pagestransferred}}">\n <a href="#" class="btn default btn-xs inactive-link green-stripe"> {{message.status | uppercase}}\n <i class="fa fa-check"></i>\n </a>\n </span>\n <i class="icon-calendar"></i> <span am-time-ago="message.updatedAt"></span>\n </span>\n <hr data-ng-if="message.FaxAttachments.length">\n <div data-ng-repeat="faxAttachment in message.FaxAttachments">\n <strong>{{faxAttachment.name}}</strong>\n <a target="_self" download="{{faxAttachment.name}}" href="api/fax/attachments/{{faxAttachment.id}}">\n <i class="icon-cloud-download"></i>\n </a>\n </div>\n</div>\n'),a.put("app/channels/fax/inbox/note/note.directive.html",'<div class="note">\n <div class="row">\n <div class="col-md-6">\n <a type="button" name="button" data-ng-if="::(Auth.getCurrentUser().id == message.UserId)" data-ng-click="deleteNote()">\n <i class="fa fa-trash-o" style="color: red;"></i>\n </a>\n\n <i class="icon-calendar"></i> <span am-time-ago="message.updatedAt"></span>\n </div>\n <div class="col-md-6">\n <span class="pull-right" data-ng-show="message.User">{{\'APPLICATION_ADD_BY\' | translate}}: <strong>{{message.User.fullname}}</strong></span>\n </div>\n </div>\n <hr>\n <span class="body text-left" data-ng-bind-html="message.text" style="white-space: pre-wrap;"></span>\n</div>\n'),a.put("app/channels/fax/inbox/note/note.modal.html",'<div class="modal-header" data-ng-init="initModal()">\n <h3 class="modal-title">{{ \'APPLICATION_NOTES\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n <div class="form-group">\n <textarea data-ng-model="item.text" name="text" rows="10" style="resize: none; width: 100%;"></textarea>\n </div>\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" data-ng-click="ok()">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" data-ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/fax/inbox/room/room.directive.html",'<!-- BEGIN TODO CONTENT -->\n<div class="todo-content" data-ng-init="initForm();">\n <div class="portlet light">\n <div class="portlet-title">\n <div class="caption">\n <button data-ng-if="(!forms.compose.from.$invalid && !forms.compose.to.$invalid && uploader.queue.length) && faxRoom.status !== \'CLOSED\'" class="btn btn-sm btn-default green-meadow" data-ng-click="sendFax()">\n <i class="icon-paper-plane" style="color: white;"></i> {{\'APPLICATION_SEND\' | translate}}\n </button>\n <span data-ng-if="(!forms.compose.from.$invalid && !forms.compose.to.$invalid && uploader.queue.length) && faxRoom && faxRoom.status !== \'CLOSED\'"> | </span>\n <span data-ng-if="faxRoom" class="label label-default"> #{{faxRoom.id}} {{faxRoom.status}}</span>\n <span data-ng-if="faxRoom"> | </span>\n <span data-ng-if="faxRoom" class="caption-subject font-green-sharp bold">{{faxRoom.contact}}</span>\n </div>\n <div class="actions" data-ng-switch="faxRoom.status">\n <button class="btn btn-icon-only yellow" data-ng-if="faxRoom" data-ng-click="loadNote()" data-ng-hide="faxRoom.status == \'CLOSED\'" title="{{\'APPLICATION_NOTES\' | translate}}">\n <i class="fa fa-sticky-note"></i>\n </button>\n <button class="file-upload" data-ng-hide="faxRoom.status == \'CLOSED\'">\n <i class="fa fa-paperclip"></i> <input type="file" data-ng-if="uploader" data-ng-hide="faxRoom.status == \'CLOSED\'" nv-file-select uploader="uploader" multiple class="file-input" title="{{\'APPLICATION_ATTACHMENTS\' | translate}}">\n </button>\n <!-- UPDATE SECTION START -->\n <button data-ng-class="faxRoom.status == \'CLOSED\' ? \'grey-cascade\' : \'btn-success\'" class="btn btn-icon-only" data-ng-hide="faxRoom.status == \'CLOSED\' && faxRoom.disposition" data-ng-if="faxRoom" data-ng-click="closeRoom()" title="{{\'APPLICATION_STATUS\' | translate}}">\n <i data-ng-class="faxRoom.status == \'CLOSED\' ? \'icon-target\' : \'fa fa-upload\'"></i>\n </button>\n <!-- UPDATE SECTION END -->\n <button class="btn default btn-icon-only" data-ng-if="faxRoom && faxRoom.status !== \'CLOSED\'" data-ng-click="togglePanelLeft()" title="{{\'APPLICATION_RESIZE\' | translate}}">\n <i ng-class="panelRight == \'col-md-12\' ? \'icon-size-actual\' : \'icon-size-fullscreen\'"></i>\n </button>\n </div>\n </div>\n <div class="portlet-body">\n <div class="row">\n <div data-ng-show="panelLeft" data-ng-class="panelLeft">\n <div class="form">\n <!-- START TAGS -->\n <div class="form-group" data-ng-if="faxRoom.status !== \'CLOSED\'">\n <div class="row">\n <div class="col-md-1">\n <a href="#" class="btn btn-icon-only">\n <i class="fa fa-tags" style="color: gray;"></i>\n </a>\n </div>\n <div class="col-md-11">\n <ui-select multiple data-ng-model="form.tags" theme="bootstrap" on-select="onChanged($item, $model)" on-remove="onChanged($item, $model)" data-ng-disabled="faxRoom.status == \'CLOSED\'">\n <ui-select-match placeholder="Tags...">{{$item}}</ui-select-match>\n <ui-select-choices repeat="tag in tags | filter:$select.search" class="">\n {{tag}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n </div>\n <!-- END TAGS -->\n </div>\n\n <hr data-ng-if="faxRoom && faxRoom.status !== \'CLOSED\'">\n\n <!-- END TAGS -->\n\n <div id="mail-box">\n <ul class="chats">\n <li\n data-ng-switch="faxMessage.status"\n data-ng-class="{\'in\': faxMessage.status == \'RECEIVED\', \'out\': faxMessage.status == \'SENT\' || faxMessage.status == \'SENDING\' || faxMessage.status == \'FAILED\' || faxMessage.status == \'NOTE\'}"\n data-ng-repeat="faxMessage in faxRoom.FaxMessages | orderBy:\'-createdAt\'">\n <div class="avatar" data-ng-class="faxMessage.UserId ? \'pretty-avatar\' : \'pretty-avatar-v\'">\n <ng-letter-avatar\n data-ng-if="faxMessage.UserId"\n height="40"\n width="40"\n fontsize="25"\n data="{{faxMessage.User.fullname}}"\n avatarcustombgcolor="#B0B0B0"\n avatarcustomborder="border:2px solid #3399CC"\n charCount="2"\n shape="round"></ng-letter-avatar>\n <ng-letter-avatar\n data-ng-if="!faxMessage.UserId"\n height="40"\n width="40"\n fontsize="25"\n data="{{faxMessage.from}}"\n avatarcustombgcolor="#B0B0B0"\n avatarcustomborder="border:2px solid #EA4C61"\n charCount="1"\n shape="round"></ng-letter-avatar>\n </div>\n <fax-note message="faxMessage" ng-switch-when="NOTE"></fax-note>\n <fax-message message="faxMessage" list-id="faxRoom.FaxAccount.ListId" ng-switch-default></fax-message>\n </li>\n </ul>\n </div>\n </div>\n <div data-ng-class="panelRight">\n <div class="note note-info" data-ng-if="faxRoom && faxRoom.status == \'CLOSED\'">\n <h4 class="block"><i class="icon-info"></i> {{\'MESSAGE_FAX_ROOM_CLOSED\' | translate}}!</h4>\n <p>\n <strong>{{\'MESSAGE_FAX_ROOM_CLOSED_DETAILS\' | translate}}.</strong>\n </p>\n <hr>\n <p>\n <i class="icon-target"></i> {{\'APPLICATION_DISPOSITION\' | translate}}: <strong>{{faxRoom.disposition}}</strong>\n </p>\n <p>\n <i class="icon-calendar"></i> {{\'APPLICATION_UPDATED_AT\' | translate}}: <strong>{{faxRoom.updatedAt | date:\'medium\'}}</strong> (<span am-time-ago="faxRoom.updatedAt"></span>)\n </p>\n </div>\n <form name="forms.compose" data-ng-submit="sendFax()" class="form-horizontal" novalidate>\n\n <!-- START HEAD -->\n <div class="form">\n\n <v-accordion class="vAccordion--default" ng-if="faxRoom.status !== \'CLOSED\'">\n <v-pane expanded="expanded">\n <v-pane-header>\n <i class="icon-people"></i> From: {{form.from}}, To: {{form.to[0].fax}}\n </v-pane-header>\n <v-pane-content>\n <!-- START FROM -->\n <div class="form-group" data-ng-if="faxRoom.status !== \'CLOSED\'" data-ng-class="{\'has-error\': forms.compose.from.$invalid}">\n <div class="col-md-12">\n <div class="row">\n <div class="col-md-1">\n <label class="control-label">From:</label>\n </div>\n <div class="col-md-11">\n <ui-select data-ng-model="form.from" data-ng-change="setList($select.selected.ListId)" theme="bootstrap" name="from" required>\n <ui-select-match placeholder="From...">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="faxAccount.localstationid as faxAccount in faxAccounts | filter: $select.search">\n <div data-ng-bind-html="faxAccount.name | highlight: $select.search"></div>\n <small data-ng-bind-html="faxAccount.localstationid | highlight: $select.search"></small>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.compose.from.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n </div>\n </div>\n <!-- END FROM -->\n\n <!-- START TO -->\n <div class="form-group" data-ng-if="faxRoom.status !== \'CLOSED\'" data-ng-class="{\'has-error\': forms.compose.to.$invalid}">\n <div class="col-md-12">\n <div class="row">\n <div class="col-md-1">\n <label class="control-label">To:</label>\n </div>\n <div class="col-md-11">\n <tags-input name="to" ng-model="form.to" type="text" display-property="fax" max-tags="1" min-tags="1">\n <auto-complete source="getContacts($query)"></auto-complete>\n </tags-input>\n <span data-ng-show="forms.compose.to.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_TO_LIMIT\' | translate}}.\n </span>\n </div>\n </div>\n </div>\n </div>\n <!-- END TO -->\n\n </v-pane-content>\n </v-pane>\n </v-accordion>\n\n <!-- START ATTACH -->\n <div class="form-group" data-ng-if="uploader && (faxRoom.status !== \'CLOSED\')">\n <div class="col-md-12">\n <hr ng-if="uploader.queue.length">\n <table class="table">\n <tbody>\n <tr ng-repeat="item in uploader.queue">\n <td style="border-top:none"><strong>{{ item.file.name | truncate: 5: \'...\': true}}</strong></td>\n <td style="border-top:none" ng-show="uploader.isHTML5" nowrap>{{ item.file.size/1024/1024|number:2 }} MB</td>\n <td style="border-top:none" ng-show="uploader.isHTML5">\n <div class="progress" style="margin-bottom: 0;">\n <div class="progress-bar" role="progressbar" ng-style="{ \'width\': item.progress + \'%\' }"></div>\n </div>\n </td>\n <td style="border-top-style:none" class="text-center">\n <span ng-show="item.isSuccess"><i class="glyphicon glyphicon-ok"></i></span>\n <span ng-show="item.isCancel"><i class="glyphicon glyphicon-ban-circle"></i></span>\n <span ng-show="item.isError"><i class="glyphicon glyphicon-remove"></i></span>\n </td>\n <td style="border-top-style:none" nowrap>\n <button type="button" class="btn btn-danger btn-xs" data-ng-click="item.remove()">\n <span class="glyphicon glyphicon-trash"></span> {{\'APPLICATION_REMOVE\' | translate}}\n </button>\n </td>\n </tr>\n </tbody>\n </table>\n <div>\n </div>\n </div>\n </div>\n <!-- END ATTACH -->\n\n </div>\n </form>\n </div>\n </div>\n </div>\n </div>\n</div>\n<!-- END TODO CONTENT -->\n'), -a.put("app/channels/fax/inbox/status/status.modal.html",'<div class="modal-header">\n <button data-ng-if="modal.dismissable" type="button" data-ng-click="$dismiss()" class="close">×</button>\n <h4 data-ng-if="modal.title" data-ng-bind="modal.title | translate" class="modal-title"></h4>\n</div>\n<div class="modal-body">\n <p data-ng-if="modal.text && !closed" ng-bind="modal.text | translate"></p>\n <form name="form" novalidate data-ng-init="initDisposition()">\n <div class="form-group">\n <ui-select data-ng-model="item.disposition" name="disposition" theme="bootstrap" data-ng-disabled="!dispositions.length" required>\n <ui-select-match placeholder="{{\'APPLICATION_DISPOSITION\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="disposition.name as disposition in dispositions | filter: $select.search">\n <div ng-bind-html="disposition.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <div class="note note-warning" data-ng-if="dispositions.length < 1">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_DISPOSITIONS_AVAILABLE\' | translate }}\n </p>\n </div>\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" data-ng-click="ok()">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" data-ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/fax/inbox/view/account/list/list.html",'<!-- BEGIN Portlet PORTLET-->\n<div class="portlet light" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption">\n <div class="btn-group btn-group-solid">\n <button type="button" class="btn btn-sm default" data-ng-model="query.status" uib-btn-radio="\'NEW\'" uib-uncheckable>NEW</button>\n </div>\n <div class="btn-group btn-group-solid">\n <button type="button" class="btn btn-sm default" data-ng-model="query.status" uib-btn-radio="\'OPEN\'" uib-uncheckable>OPEN</button>\n </div>\n <div class="btn-group btn-group-solid">\n <button type="button" class="btn btn-sm default" data-ng-model="query.status" uib-btn-radio="\'PENDING\'" uib-uncheckable>PENDING</button>\n </div>\n <div class="btn-group btn-group-solid">\n <button type="button" class="btn btn-sm default" data-ng-model="query.status" uib-btn-radio="\'CLOSED\'" uib-uncheckable>CLOSED</button>\n </div>\n </div>\n <div class="actions">\n <a href="#" class="btn btn-icon-only default" data-ng-click="getPage();">\n <i class="fa fa-refresh"></i>\n </a>\n <a href="#" class="btn btn-icon-only red" data-ng-click="deleteItems();" data-ng-show="id.length && isAdmin">\n <i class="fa fa-trash"></i>\n </a>\n <a href="#" class="btn btn-icon-only btn-success" data-ng-click="disposeItems();" data-ng-show="id.length">\n <i class="fa fa-upload"></i>\n </a>\n <a href="#" class="btn btn-icon-only blue" data-ng-click="tagItems();" data-ng-show="id.length">\n <i class="fa fa-tags"></i>\n </a>\n <a href="#" class="btn btn-icon-only green" data-ng-click="openRoom(null, \'New Message\')">\n <i class="fa fa-plus"></i>\n </a>\n </div>\n </div>\n <div class="portlet-title" data-ng-show="tags.length">\n <!-- START TAGS -->\n <div class="form-group">\n <div class="row">\n <div class="col-md-1">\n <a href="#" class="btn btn-icon-only">\n <i class="fa fa-tags" style="color: gray;"></i>\n </a>\n </div>\n <div class="col-md-11">\n <ui-select multiple data-ng-model="query.tags" theme="bootstrap" on-select="onChanged($item, $model)" on-remove="onChanged($item, $model)">\n <ui-select-match placeholder="Search by tag...">{{$item}}</ui-select-match>\n <ui-select-choices repeat="tag in tags | filter:$select.search">\n {{tag}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n </div>\n <!-- END TAGS -->\n </div>\n <div class="portlet-body">\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="spinner-grid" spinner-start-active="false"></span>\n <!-- END UI-GRID SPINNER -->\n\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-pagination ui-grid-selection ui-grid-exporter class="ui-grid-inbox">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n</div>\n<!-- END Portlet PORTLET-->\n'),a.put("app/channels/fax/inbox/view/view.agents.modal.html",'<div class="modal-header" data-ng-init="initModal()">\n <h3 class="modal-title">{{ \'APPLICATION_AGENTS\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <!-- START TRANSPORT -->\n <div class="form-group">\n <form name="form" novalidate>\n <!-- START TRANSPORT -->\n <div class="form-group">\n <ui-select multiple name="agents" data-ng-model="item.agents" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_AGENTS\' | translate}}">{{$item.fullname}}</ui-select-match>\n <ui-select-choices repeat="agent.id as agent in agents | filter: $select.search">\n {{agent.fullname}}\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="agents">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_AGENTS_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/staff/agents/list">{{\'APPLICATION_AGENTS\' | translate}}</a>\n </p>\n </div>\n </div>\n <!-- END TRANSPORT -->\n </form>\n </div>\n <!-- END TRANSPORT -->\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" data-ng-click="ok()">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" data-ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/fax/inbox/view/view.html",'<div class="row">\r\n <div class="col-md-12">\r\n <div class="page-bar">\r\n <ul class="page-breadcrumb">\r\n <li>\r\n <i class="icon-rocket"></i>\r\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\r\n <i class="fa fa-angle-right"></i>\r\n </li>\r\n <li>\r\n <i class="fa fa-spinner"></i>\r\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\r\n <i class="fa fa-angle-right"></i>\r\n </li>\r\n <li>\r\n <i class="fa fa-fax"></i>\r\n <a href="#">{{ \'APPLICATION_FAX\' | translate }}</a>\r\n <i class="fa fa-angle-right"></i>\r\n </li>\r\n <li>\r\n <i class="icon-note"></i>\r\n <a href="#">{{ \'APPLICATION_INBOX\' | translate }}</a>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- BEGIN PAGE CONTENT-->\r\n<div class="row inbox">\r\n <div class="col-md-3">\r\n <ul class="inbox-nav margin-bottom-10">\r\n <li data-ng-class="{active: $stateParams.id == faxAccount.id}" data-ng-repeat="faxAccount in faxAccounts">\r\n <a href="/channels/fax/inbox/view/account/{{faxAccount.id}}/list" class="btn">\r\n <i class="icon-notebook"></i> {{faxAccount.name}}\r\n </a>\r\n <b></b>\r\n </li>\r\n </ul>\r\n <div class="note note-warning" data-ng-hide="faxAccounts.length">\r\n <h4 class="block">Warning!</h4>\r\n <p>\r\n {{ \'MESSAGE_NO_AVAILABLE_ACCOUNTS\' | translate }}\r\n </p>\r\n <p>\r\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/channels/fax/accounts/list">{{\'APPLICATION_ACCOUNTS\' | translate}}</a>\r\n </p>\r\n </div>\r\n </div>\r\n\r\n <div class="col-md-9" data-ng-init="initView()">\r\n <!-- BEGIN PROFILE CONTENT -->\r\n <div class="room-content">\r\n <div ui-view>\r\n <div class="note note-info">\r\n <h4 class="block">Info! {{\'APPLICATION_NO_ACCOUNT_SELECTED\' | translate}}</h4>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- END PROFILE CONTENT -->\r\n </div>\r\n</div>\r\n'),a.put("app/channels/fax/inbox/view/view.status.modal.html",'<div class="modal-header" data-ng-init="initModal()">\n <h3 class="modal-title">{{ modal.title | translate }}</h3>\n</div>\n<div class="modal-body">\n <p data-ng-if="modal.text" data-ng-bind="modal.text"></p>\n <div data-ng-if="modal.html" data-ng-bind-html="modal.html"></div>\n</div>\n<div class="modal-footer">\n <button data-ng-repeat="button in modal.buttons"\n data-ng-class="button.classes"\n data-ng-click="button.click($event)"\n data-ng-bind="button.text | translate" class="btn"></button>\n</div>\n'),a.put("app/channels/fax/inbox/view/view.tags.modal.html",'<div class="modal-header" data-ng-init="initModal()">\n <h3 class="modal-title">{{ \'APPLICATION_TAGS\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <!-- START TRANSPORT -->\n <div class="form-group">\n <form name="form" novalidate>\n <!-- START TAGS -->\n <div class="form-group">\n <ui-select multiple data-ng-model="item.tags" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_TAGS\' | translate}}">{{$item}}</ui-select-match>\n <ui-select-choices repeat="tag in tags | filter: $select.search">\n {{tag}}\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END TAGS -->\n </form>\n </div>\n <!-- END TRANSPORT -->\n</div>\n<div class="modal-footer">\n <button type="button" class="btn" data-ng-class="button.class" data-ng-click="button.click()"data-ng-repeat="button in modal.buttons">{{button.text | translate}}</button>\n <!-- <button class="btn btn-success" type="button" data-ng-click="ok()">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" data-ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button> -->\n</div>\n'),a.put("app/channels/fax/queue/list/list.create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_QUEUE\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.name.$touched || form.$submitted) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" data-ng-pattern="settings.patternName" required />\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$invalid && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$invalid && form.name.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_PATTERN_NAME\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START STRATEGY -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.strategy.$touched || form.$submitted) && form.strategy.$invalid}">\n <label class="control-label">{{\'APPLICATION_STRATEGY\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="item.strategy" name="strategy" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected | uppercase}}</ui-select-match>\n <ui-select-choices repeat="strategy in strategies | filter: $select.search">\n <div ng-bind-html="strategy | uppercase | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form.strategy.$touched || form.$submitted) && form.strategy.$invalid && form.strategy.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END STRATEGY -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.timeout.$touched || form.$submitted) && form.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_AGENT_TIMEOUT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" name="timeout" placeholder="Timeout" class="form-control" data-ng-model="item.timeout" required min="1"/>\n <span data-ng-show="(form.timeout.$touched || form.$submitted) && form.timeout.$invalid && form.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n\n <!-- START AGENTS-->\n <div class="form-body" data-ng-init="getTeams()">\n <label for="penalty">{{\'APPLICATION_PENALTY\' | translate}}</label>\n <div class="input-group input-small mbottom20">\n <input type="number" class="spinner-input form-control" maxlength="3" data-ng-model="item.penalty" readonly>\n <div class="spinner-buttons input-group-btn btn-group-vertical">\n <button type="button" class="btn spinner-up btn-xs blue" data-ng-click="item.penalty=item.penalty+1">\n <i class="fa fa-angle-up"></i>\n </button>\n <button type="button" class="btn spinner-down btn-xs blue" data-ng-disabled="!item.penalty" data-ng-click="item.penalty=item.penalty-1">\n <i class="fa fa-angle-down"></i>\n </button>\n </div>\n </div>\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-team">\n </div>\n </div>\n </div>\n <!-- END AGENTS-->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/fax/queue/list/list.html",'<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-fax"></i>\n <a href="#">{{ \'APPLICATION_FAX\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-docs"></i>\n <a href="/channels/fax/queues/lis">{{ \'APPLICATION_QUEUES\' | translate }}</a>\n </li>\n </ul>\n </div>\n </div>\n</div>\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-docs font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_QUEUES\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <a class="btn green-jungle" href="#" data-ng-click="createItem()" data-ng-if="Auth.isAdmin()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_QUEUE\' | translate }}\n </a>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/fax/queue/view/view.agents.html",'<div class="row" data-ng-init="getTeams()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_AGENTS\' | translate}}</span>\n </div>\n </div>\n <div class="portlet-body">\n <!-- BEGIN FORM-->\n <form action="index.html" class="form-horizontal form-row-seperated">\n <div class="form-body">\n <label for="penalty">{{\'APPLICATION_PENALTY\' | translate}}</label>\n <div class="input-group input-small mbottom20">\n <input type="number" class="spinner-input form-control" maxlength="3" data-ng-model="queue.penalty" readonly>\n <div class="spinner-buttons input-group-btn btn-group-vertical">\n <button type="button" class="btn spinner-up btn-xs blue" data-ng-click="queue.penalty=queue.penalty+1">\n <i class="fa fa-angle-up"></i>\n </button>\n <button type="button" class="btn spinner-down btn-xs blue" data-ng-disabled="!queue.penalty" data-ng-click="queue.penalty=queue.penalty-1">\n <i class="fa fa-angle-down"></i>\n </button>\n </div>\n </div>\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-team">\n </div>\n </div>\n </div>\n </form>\n <!-- END FORM-->\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/fax/queue/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getQueue()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-fax"></i>\n <a href="#">{{ \'APPLICATION_FAX\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-docs"></i>\n <a href="/channels/fax/queues/list">{{ \'APPLICATION_QUEUES\' | translate }}</a>\n <i data-ng-show="queue" class="fa fa-angle-right"></i>\n </li>\n <li data-ng-show="queue">\n <a href="#">{{queue.name}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/queue.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{queue.name}}\n </div>\n <!-- <div class="profile-usertitle-job">\n {{user.role}}\n </div> -->\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.channels.fax.queues.view.settings\')}">\n <a data-ng-href="/channels/fax/queues/view/{{queue.id}}/settings">\n <i class="icon-settings"></i>\n {{ \'APPLICATION_SETTINGS\' | translate}} </a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.channels.fax.queues.view.agents\')}" data-ng-show="Auth.getCurrentUser().role === \'admin\'">\n <a data-ng-href="/channels/fax/queues/view/{{queue.id}}/agents">\n <i class="icon-people"></i>\n {{ \'APPLICATION_AGENTS\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/fax/queue/view/view.settings.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_SETTINGS\' | translate}}</span>\n </div>\n </div>\n <div class="portlet-body">\n <form name="forms.general" data-ng-submit="forms.general.$valid && updateFaxQueue()" novalidate>\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="queue.name" data-ng-pattern="settings.patternName" required />\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid && forms.general.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid && forms.general.name.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_PATTERN_NAME\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START STRATEGY -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.strategy.$touched || forms.general.$submitted) && forms.general.strategy.$invalid}">\n <label class="control-label">{{\'APPLICATION_STRATEGY\' | translate}}</label>\n <ui-select data-ng-model="queue.strategy" name="strategy" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected | uppercase}}</ui-select-match>\n <ui-select-choices repeat="strategy in strategies | filter: $select.search">\n <div ng-bind-html="strategy | uppercase | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END STRATEGY -->\n\n <!-- START TIMEOUT -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}}</label>\n <input type="number" name="timeout" placeholder="{{\'APPLICATION_TIMEOUT\' | translate}}" class="form-control" min="1" data-ng-model="queue.timeout"/>\n </div>\n <!-- END TIMEOUT -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="queue.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n <input data-ng-if="Auth.isAdmin()" class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/fax/realtime/view/agent/agent.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initAgents()">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns class="ui-grid" ui-grid-tree-view ui-grid-expandable-row ui-grid-pagination ui-grid-auto-resize>\n <span us-spinner spinner-key="grid-spinner" spinner-start-active="true"></span>\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/fax/realtime/view/agent/agent.modal.info.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_INTERFACE_INFO\' | translate }}</h3>\n</div>\n<div class="modal-body">\n<div data-ng-if="agent.ipaddr" class="well">\n <div>{{agent.ipaddr}}:{{agent.port}}</div>\n <div>{{agent.fullcontact}}</div>\n <div>{{agent.useragent}}</div>\n <div>{{agent.lastms}}</div>\n</div>\n<div data-ng-if="!agent.ipaddr" class="alert alert-danger" role="alert">\n {{\'MESSAGE_NO_AVAILABLE_INFO\' | translate}}\n</div>\n</div>\n<div class="modal-footer">\n <button class="btn default" type="button" ng-click="close()">{{ \'APPLICATION_CLOSE\' | translate }}</button>\n</div>\n'),a.put("app/channels/fax/realtime/view/agent/queue.modal.add.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_JOIN_QUEUE\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <div class="form-group row">\n <label class="col-md-2 control-label" style="margin-top: 7px;">{{\'APPLICATION_QUEUE\' | translate}}:</label>\n <div class="col-md-10">\n <ui-select multiple ng-model="item.queues" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_QUEUE\' | translate}}">{{$item.name}}</ui-select-match>\n <ui-select-choices repeat="queue.id as queue in queues | filter: $select.search">\n <div ng-bind-html="queue.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n</div>\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/fax/realtime/view/application/application.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initApplications()">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns class="ui-grid" ui-grid-auto-resize>\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/fax/realtime/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-fax"></i>\n <a href="#">{{ \'APPLICATION_FAX\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-energy"></i>\n <a href="#">{{ \'APPLICATION_REALTIME\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <div>\n <nav class="navbar navbar-default" role="navigation">\n <div class="collapse navbar-collapse">\n <ul class="nav navbar-nav">\n <li data-ng-class="{\'active\': $state.is(\'main.channels.fax.realtime.view.agents\')}">\n <a href="/channels/fax/realtime/view/agents">\n {{\'APPLICATION_AGENTS\' | translate}}\n </a>\n </li>\n <li data-ng-class="{\'active\': $state.is(\'main.channels.fax.realtime.view.applications\')}">\n <a href="/channels/fax/realtime/view/applications">\n {{\'APPLICATION_APPLICATIONS\' | translate}}\n </a>\n </li>\n </ul>\n </div>\n </nav>\n </div>\n\n <div ui-view></div>\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/mail/account/list/list.html",'<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-envelope"></i>\n <a href="#">{{ \'APPLICATION_MAIL\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-notebook"></i>\n <a href="#">{{ \'APPLICATION_ACCOUNTS\' | translate }}</a>\n </li>\n </ul>\n </div>\n </div>\n</div>\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-notebook font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_ACCOUNTS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group">\n <a class="btn btn-default" href="#" data-ng-click="gridOptions.getPage();">\n <i class="icon-reload"></i>\n </a>\n </div>\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <a class="btn green-jungle" href="/channels/mail/accounts/wizard">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_ACCOUNT\' | translate }}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/mail/account/view/action/list/list.html",'<div class="row" data-ng-init="initActons()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_ACTIONS\' | translate}}</span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <a class="btn green-jungle" href="/channels/mail/accounts/view/{{account.id}}/actions/wizard" data-toggle="dropdown">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_ACTION\' | translate }}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n </div>\n</div>\n'), -a.put("app/channels/mail/account/view/action/view/view.html",'\n<div class="row" data-ng-init="initAction()">\n <div class="col-md-12">\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-directions font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_ACTION\' | translate }}</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <form name="forms.settings" ng-submit="updateItem()" novalidate>\n <!-- START APP -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.app.$touched || forms.settings.$submitted) && forms.settings.app.$invalid}">\n <label class="control-label">{{ \'APPLICATION_APPLICATION\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.app" name="app" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_APPLICATION\' | translate }}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="app.value as app in apps | filter: $select.search">\n <div ng-bind-html="app.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.app.$touched || forms.settings.$submitted) && forms.settings.app.$invalid && forms.settings.app.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END APP -->\n\n <div class="app-settings" ng-slide-down="application.app === \'queue\'" lazy-render duration="1" data-ng-init="getQueues()">\n <!-- START QUEUE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.queue.$touched || forms.settings.$submitted) && forms.settings.queue.$invalid}">\n <label class="control-label">{{\'APPLICATION_QUEUE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.MailQueueId" name="queue" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="queue.id as queue in queues | filter: $select.search">\n <div ng-bind-html="queue.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="queues.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_QUEUES_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/channels/mail/queues/list">{{\'APPLICATION_QUEUES\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.settings.queue.$touched || forms.settings.$submitted) && forms.settings.queue.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END QUEUE -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="number" name="timeout" placeholder="{{\'APPLICATION_TIMEOUT\' | translate}}" class="form-control" data-ng-model="application.timeout" min="1" required/>\n <span data-ng-show="(forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid && forms.settings.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.app === \'agent\'" lazy-render duration="1" data-ng-init="getAgents()">\n <!-- START AGENT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.agent.$touched || forms.settings.$submitted) && forms.settings.agent.$invalid}">\n <label class="control-label">{{\'APPLICATION_AGENT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.UserId" name="agent" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.fullname}}</ui-select-match>\n <ui-select-choices repeat="agent.id as agent in agents | filter: $select.search">\n <div ng-bind-html="agent.fullname | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="agents.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_AGENTS_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/staff/agents/list">{{\'APPLICATION_AGENTS\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.settings.agent.$touched || forms.settings.$submitted) && forms.settings.agent.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END AGENT -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="number" name="timeout" placeholder="{{\'APPLICATION_TIMEOUT\' | translate}}" class="form-control" data-ng-model="application.timeout" min="1" required/>\n <span data-ng-show="(forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid && forms.settings.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.app === \'sendMail\'" lazy-render duration="1" data-ng-init="getMailAccounts();getTemplates()">\n <!-- START SENDMAIL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.timeout.$touched || forms.action.$submitted) && forms.action.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TO\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="email" name="to" placeholder="{{\'APPLICATION_TO\' | translate}}" class="form-control" data-ng-model="application.data2" min="1" required/>\n <span data-ng-show="(forms.action.from.$touched || forms.action.$submitted) && forms.action.timeout.$invalid && forms.action.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.mail.$touched || forms.action.$submitted) && forms.action.account.$invalid}">\n <label class="control-label">{{\'APPLICATION_ACCOUNT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data8" name="account" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="account.id as account in mailAccounts | filter: $select.search">\n <div ng-bind-html="account.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.action.account.$touched || forms.action.$submitted) && forms.action.account.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.template.$touched || forms.action.$submitted) && forms.action.template.$invalid}">\n <label class="control-label">{{\'APPLICATION_TEMPLATE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data9" name="template" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="template.id as template in templates | filter: $select.search">\n <div ng-bind-html="template.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.action.template.$touched || forms.action.$submitted) && forms.action.template.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END SENDMAIL -->\n </div>\n\n\n <div class="app-settings" ng-slide-down="application.app === \'replyMail\'" lazy-render duration="1" data-ng-init="getMailAccounts();getTemplates()">\n <!-- START REPLYMAIL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.type.$touched || forms.action.$submitted) && forms.action.type.$invalid}">\n <label class="control-label">{{\'APPLICATION_TYPE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data1" name="type" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.key | translate }}</ui-select-match>\n <ui-select-choices repeat="type.value as type in types | filter: $select.search">\n <div ng-bind-html="type.key | translate | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.action.type.$touched || forms.action.$submitted) && forms.action.type.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.mail.$touched || forms.action.$submitted) && forms.action.account.$invalid}">\n <label class="control-label">{{\'APPLICATION_ACCOUNT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data8" name="account" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="account.id as account in mailAccounts | filter: $select.search">\n <div ng-bind-html="account.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.action.account.$touched || forms.action.$submitted) && forms.action.account.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.template.$touched || forms.action.$submitted) && forms.action.template.$invalid}">\n <label class="control-label">{{\'APPLICATION_TEMPLATE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data9" name="template" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="template.id as template in templates | filter: $select.search">\n <div ng-bind-html="template.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.action.template.$touched || forms.action.$submitted) && forms.action.template.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END REPLYMAIL -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.app === \'sendSms\'" lazy-render duration="1" data-ng-init="getSmsAccounts()">\n <!-- START SENDSms -->\n <div class="app-settings" ng-slide-down="application.app === \'sendSms\'" lazy-render duration="1">\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.to.$touched || forms.settings.$submitted) && forms.settings.to.$invalid}">\n <label class="control-label">{{\'APPLICATION_TO\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" ng-pattern="/^[\\+]?[0-9]+$/" name="to" placeholder="{{\'APPLICATION_TO\' | translate}}" class="form-control" data-ng-model="application.data2" required/>\n <span data-ng-show="(forms.settings.to.$touched || forms.settings.$submitted) && forms.settings.to.$invalid && forms.settings.to.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.account.$touched || forms.settings.$submitted) && forms.settings.account.$invalid}">\n <label class="control-label">{{\'APPLICATION_ACCOUNT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data8" name="account" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="account.id as account in smsAccounts | filter: $select.search">\n <div ng-bind-html="account.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.account.$touched || forms.settings.$submitted) && forms.settings.account.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.text.$touched || forms.text.$submitted) && forms.settings.text.$invalid}">\n <label class="control-label">{{\'APPLICATION_TEXT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <textarea id="text" class="form-control maxlength-handler" maxlength="160" name="text" data-ng-model="application.data6" required></textarea>\n <span data-ng-show="(forms.settings.text.$touched || forms.settings.$submitted) && forms.settings.text.$invalid && forms.settings.text.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n\n <!-- END SENDSms -->\n </div>\n\n <!-- START INTERVAL_TYPE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.intType.$touched || forms.settings.$submitted) && forms.settings.intType.$invalid}">\n <label class="control-label">{{ \'APPLICATION_INTERVAL_TYPE\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.intType" theme="bootstrap" name="intType" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="intType.value as intType in $application.intTypes | filter: $select.search">\n {{ intType.name | translate }}\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.intType.$touched || forms.settings.$submitted) && forms.settings.intType.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERVAL_TYPE -->\n\n <div class="app-settings" ng-slide-down="application.intType === \'custom\'" lazy-render duration="1">\n <!-- START TIME -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_TIME\' | translate }}</label>\n <div class="input-group input-large">\n <fieldset class="pull-left" ng-disabled="application.alwaysTime">\n <uib-timepicker name="t_from" data-ng-model="application.t_from" show-meridian="false" show-spinners="false" mousewheel="false"></uib-timepicker>\n </fieldset>\n <div class="input-group-addon col-md-1 interval-to pull-left">to</div>\n <fieldset ng-disabled="application.alwaysTime"><uib-timepicker name="t_to" data-ng-model="application.t_to" show-meridian="false" show-spinners="false" mousewheel="false"></uib-timepicker></fieldset>\n <!-- <label class="control-label pointer-cursor"><input type="checkbox" data-ng-model="application.alwaysTime">{{\'APPLICATION_ALWAYS\' | translate}}</label> -->\n </div>\n </div>\n <!-- END TIME -->\n\n <!-- START ALWAYS -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_ALWAYS\' | translate }}</label>\n <div class="input-group input-large">\n <label class="control-label pointer-cursor">\n <input\n bs-switch\n data-ng-model="application.alwaysTime"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n </label>\n </div>\n </div>\n <!-- END ALWAYS -->\n\n <!-- START WEEKDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_WEEKDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="application.wd_from" theme="bootstrap" name="wd_from">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{ weekDay.name | translate}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="application.wd_to" theme="bootstrap" name="wd_to">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{ weekDay.name | translate }}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END WEEKDAY -->\n\n <!-- START MONTHDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTHDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="application.md_from" theme="bootstrap" name="md_from">\n <ui-select-match allow-clear>{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search" ui-disable-choice="application.md_to && application.md_to!==\'always\' && monthDay>application.md_to && monthDay!==\'always\'">\n {{monthDay}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="application.md_to" theme="bootstrap" name="md_to">\n <ui-select-match allow-clear>{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search" ui-disable-choice="application.md_from && application.md_from!==\'always\' && monthDay<application.md_from && monthDay!==\'always\'">\n {{monthDay}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTHDAY -->\n\n <!-- START MONTH -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTH\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="application.m_from" theme="bootstrap" name="m_from">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{ month.name | translate }}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="application.m_to" theme="bootstrap" name="m_to">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{ month.name | translate }}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTH -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.intType === \'list\'" lazy-render duration="1" data-ng-init="getIntervals()">\n\n <!-- START INTERVALS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.IntervalId.$touched || forms.settings.$submitted) && forms.settings.IntervalId.$invalid}">\n <label class="control-label">{{\'APPLICATION_INTERVALS\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.IntervalId" theme="bootstrap" name="IntervalId" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{ $select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="interval.id as interval in intervals | filter: $select.search">\n {{ interval.name}}\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="intervals.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_INTERVAL_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/tools/intervals/list">{{\'APPLICATION_INTERVALS\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.settings.IntervalId.$touched || forms.settings.$submitted) && forms.settings.IntervalId.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERVALS -->\n\n </div>\n <button class="btn green-haze" type="submit">{{\'APPLICATION_UPDATE\' | translate}}</button>\n </form>\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/mail/account/view/action/wizard/wizard.html",'\n<div class="row" data-ng-init="initWizard()">\n <div class="col-md-12">\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-directions font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_ACTION\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="createItem()">\n <wz-step title="{{\'APPLICATION_APPLICATION\' | translate}}" canexit="formValidation(forms.action.$valid)">\n\n <form name="forms.action" novalidate>\n <!-- START APP -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.action.$submitted && forms.action.app.$invalid}">\n <label class="control-label">{{ \'APPLICATION_APPLICATION\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.app" name="app" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_APPLICATION\' | translate }}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="app.value as app in apps | filter: $select.search">\n <div ng-bind-html="app.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.action.$submitted && forms.action.app.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END APP -->\n\n <div class="app-settings" ng-slide-down="application.app === \'agent\'" lazy-render duration="1" data-ng-init="getAgents()">\n <!-- START AGENT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.agent.$touched || forms.action.$submitted) && forms.action.agent.$invalid}">\n <label class="control-label">{{\'APPLICATION_AGENT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.UserId" name="agent" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.fullname}}</ui-select-match>\n <ui-select-choices repeat="agent.id as agent in agents | filter: $select.search">\n <div ng-bind-html="agent.fullname | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="agents.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_AGENTS_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/staff/agents/list">{{\'APPLICATION_AGENTS\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.action.agent.$touched || forms.action.$submitted) && forms.action.agent.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END AGENT -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.timeout.$touched || forms.action.$submitted) && forms.action.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="number" name="timeout" placeholder="{{\'APPLICATION_TIMEOUT\' | translate}}" class="form-control" data-ng-model="application.timeout" min="1" required/>\n <span data-ng-show="(forms.action.timeout.$touched || forms.action.$submitted) && forms.action.timeout.$invalid && forms.action.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n\n </div>\n\n <div class="app-settings" ng-slide-down="application.app === \'queue\'" lazy-render duration="1" data-ng-init="getQueues()">\n <!-- START QUEUE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.queue.$touched || forms.action.$submitted) && forms.action.queue.$invalid}">\n <label class="control-label">{{\'APPLICATION_QUEUE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.MailQueueId" name="queue" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="queue.id as queue in queues | filter: $select.search">\n <div ng-bind-html="queue.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="queues.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_QUEUES_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/channels/mail/queues/list">{{\'APPLICATION_QUEUES\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.action.queue.$touched || forms.action.$submitted) && forms.action.queue.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END QUEUE -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.timeout.$touched || forms.action.$submitted) && forms.action.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="number" name="timeout" placeholder="{{\'APPLICATION_TIMEOUT\' | translate}}" class="form-control" data-ng-model="application.timeout" min="1" required/>\n <span data-ng-show="(forms.action.timeout.$touched || forms.action.$submitted) && forms.action.timeout.$invalid && forms.action.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.app === \'sendMail\'" lazy-render duration="1" data-ng-init="getMailAccounts();getTemplates()">\n <!-- START SENDMAIL -->\n <div class="app-settings" ng-slide-down="application.app === \'sendMail\'" lazy-render duration="1">\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.timeout.$touched || forms.action.$submitted) && forms.action.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TO\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="email" name="to" placeholder="{{\'APPLICATION_TO\' | translate}}" class="form-control" data-ng-model="application.data2" min="1" required/>\n <span data-ng-show="(forms.action.from.$touched || forms.action.$submitted) && forms.action.timeout.$invalid && forms.action.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.mail.$touched || forms.action.$submitted) && forms.action.account.$invalid}">\n <label class="control-label">{{\'APPLICATION_ACCOUNT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data8" name="account" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="account.id as account in mailAccounts | filter: $select.search">\n <div ng-bind-html="account.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.action.account.$touched || forms.action.$submitted) && forms.action.account.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.template.$touched || forms.action.$submitted) && forms.action.template.$invalid}">\n <label class="control-label">{{\'APPLICATION_TEMPLATE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data9" name="template" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="template.id as template in templates | filter: $select.search">\n <div ng-bind-html="template.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.action.template.$touched || forms.action.$submitted) && forms.action.template.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END SENDMAIL -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.app === \'replyMail\'" lazy-render duration="1" data-ng-init="getMailAccounts();getTemplates()">\n <!-- START REPLYMAIL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.type.$touched || forms.action.$submitted) && forms.action.type.$invalid}">\n <label class="control-label">{{\'APPLICATION_TYPE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data1" name="type" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.key | translate }}</ui-select-match>\n <ui-select-choices repeat="type.value as type in types | filter: $select.search">\n <div ng-bind-html="type.key | translate | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.action.type.$touched || forms.action.$submitted) && forms.action.type.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.mail.$touched || forms.action.$submitted) && forms.action.account.$invalid}">\n <label class="control-label">{{\'APPLICATION_ACCOUNT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data8" name="account" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="account.id as account in mailAccounts | filter: $select.search">\n <div ng-bind-html="account.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.action.account.$touched || forms.action.$submitted) && forms.action.account.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.template.$touched || forms.action.$submitted) && forms.action.template.$invalid}">\n <label class="control-label">{{\'APPLICATION_TEMPLATE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data9" name="template" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="template.id as template in templates | filter: $select.search">\n <div ng-bind-html="template.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.action.template.$touched || forms.action.$submitted) && forms.action.template.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END REPLYMAIL -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.app === \'sendSms\'" lazy-render duration="1" data-ng-init="getSmsAccounts()">\n <!-- START SENDSms -->\n <div class="app-settings" ng-slide-down="application.app === \'sendSms\'" lazy-render duration="1">\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.to.$touched || forms.action.$submitted) && forms.action.to.$invalid}">\n <label class="control-label">{{\'APPLICATION_TO\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" ng-pattern="/^[\\+]?[0-9]+$/" name="to" placeholder="{{\'APPLICATION_TO\' | translate}}" class="form-control" data-ng-model="application.data2" required/>\n <span data-ng-show="(forms.action.to.$touched || forms.action.$submitted) && forms.action.to.$invalid && forms.action.to.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.account.$touched || forms.action.$submitted) && forms.action.account.$invalid}">\n <label class="control-label">{{\'APPLICATION_ACCOUNT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data8" name="account" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="account.id as account in smsAccounts | filter: $select.search">\n <div ng-bind-html="account.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.action.account.$touched || forms.action.$submitted) && forms.action.account.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.text.$touched || forms.action.$submitted) && forms.action.text.$invalid}">\n <label class="control-label">{{\'APPLICATION_TEXT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <textarea id="text" class="form-control maxlength-handler" maxlength="160" name="text" data-ng-model="application.data6" required></textarea>\n <span data-ng-show="(forms.action.text.$touched || forms.action.$submitted) && forms.action.text.$invalid && forms.action.text.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n\n <!-- END SENDSms -->\n </div>\n\n <!-- START INTERVAL_TYPE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.intType.$touched || forms.action.$submitted) && forms.action.intType.$invalid}">\n <label class="control-label">{{ \'APPLICATION_INTERVAL_TYPE\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.intType" theme="bootstrap" name="intType" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="intType.value as intType in $application.intTypes | filter: $select.search">\n {{ intType.name | translate }}\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.action.intType.$touched || forms.action.$submitted) && forms.action.intType.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERVAL_TYPE -->\n\n <div class="app-settings" ng-slide-down="application.intType === \'custom\'" lazy-render duration="1">\n <!-- START TIME -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_TIME\' | translate }}</label>\n <div class="input-group input-large">\n <fieldset class="pull-left" ng-disabled="application.alwaysTime">\n <uib-timepicker name="t_from" data-ng-model="application.t_from" show-meridian="false" show-spinners="false" mousewheel="false"></uib-timepicker>\n </fieldset>\n <div class="input-group-addon col-md-1 interval-to pull-left">to</div>\n <fieldset ng-disabled="application.alwaysTime"><uib-timepicker name="t_to" data-ng-model="application.t_to" show-meridian="false" show-spinners="false" mousewheel="false"></uib-timepicker></fieldset>\n <!-- <label class="control-label pointer-cursor"><input type="checkbox" data-ng-model="application.alwaysTime">{{\'APPLICATION_ALWAYS\' | translate}}</label> -->\n </div>\n </div>\n <!-- END TIME -->\n\n <!-- START ALWAYS -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_ALWAYS\' | translate }}</label>\n <div class="input-group input-large">\n <label class="control-label pointer-cursor">\n <input\n bs-switch\n data-ng-model="application.alwaysTime"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n <!-- <input type="checkbox" data-ng-model="application.alwaysTime"> -->\n </label>\n </div>\n </div>\n <!-- END ALWAYS -->\n\n <!-- START WEEKDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_WEEKDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="application.wd_from" theme="bootstrap" name="wd_from">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{ weekDay.name | translate}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="application.wd_to" theme="bootstrap" name="wd_to">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{ weekDay.name | translate }}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END WEEKDAY -->\n\n <!-- START MONTHDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTHDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="application.md_from" theme="bootstrap" name="md_from">\n <ui-select-match allow-clear>{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search" ui-disable-choice="application.md_to && application.md_to!==\'always\' && monthDay>application.md_to && monthDay!==\'always\'">\n {{monthDay}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="application.md_to" theme="bootstrap" name="md_to">\n <ui-select-match allow-clear>{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search" ui-disable-choice="application.md_from && application.md_from!==\'always\' && monthDay<application.md_from && monthDay!==\'always\'">\n {{monthDay}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTHDAY -->\n\n <!-- START MONTH -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTH\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="application.m_from" theme="bootstrap" name="m_from">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{ month.name | translate }}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="application.m_to" theme="bootstrap" name="m_to">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{ month.name | translate }}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTH -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.intType === \'list\'" lazy-render duration="1" data-ng-init="getIntervals()">\n\n <!-- START INTERVALS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.IntervalId.$touched || forms.action.$submitted) && forms.action.IntervalId.$invalid}">\n <label class="control-label">{{\'APPLICATION_INTERVALS\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.IntervalId" theme="bootstrap" name="IntervalId" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{ $select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="interval.id as interval in intervals | filter: $select.search">\n {{ interval.name}}\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="intervals.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_INTERVAL_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/tools/intervals/list">{{\'APPLICATION_INTERVALS\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.action.IntervalId.$touched || forms.action.$submitted) && forms.action.IntervalId.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERVALS -->\n\n </div>\n\n <input class="btn green-haze" type="submit" data-ng-click="next()" value="{{\'APPLICATION_CONTINUE\' | translate}}"/>\n\n </form>\n </wz-step>\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n <input class="btn green-haze" type="submit" data-ng-click="next()" value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n </wz-step>\n </wizard>\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'), -a.put("app/channels/mail/account/view/disposition/modal/add.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_DISPOSITIONS\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.form.$touched || form.$submitted) && form.form.$invalid}">\n <div class="">\n <!-- <input type="text" name="form" placeholder="{{\'APPLICATION_DISPOSITION\' | translate}}" class="form-control" data-ng-model="name" data-ng-pattern="/^[a-zA-Z0-9]*$/" required/> -->\n <input type="text" name="form" placeholder="{{\'APPLICATION_DISPOSITION\' | translate}}" class="form-control" data-ng-model="name" required/>\n <span data-ng-show="form.form.$touched && form.form.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <!-- <span data-ng-show="form.form.$touched && form.form.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_PATTERN\' | translate}}.\n </span> -->\n </div>\n <!-- <div class="help-block">\n {{\'MESSAGE_ALLOWED_NUMBERS_AND_LETTERS\' | translate}}\n </div> -->\n </div>\n <!-- END NAME -->\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" data-ng-click="ok()" data-ng-show="form.$valid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" data-ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/mail/account/view/disposition/view/view.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_DISPOSITIONS\' | translate}}</span>\n </div>\n <div class="actions actions-md">\n <a href="#" class="btn btn-icon-only green" data-ng-click="addDisposition();">\n <i class="fa fa-plus"></i>\n </a>\n </div>\n </div>\n <div class="portlet-body" data-ng-init="initView()">\n <div class="tab-content">\n <div class="row" data-ng-hide="dispositions.length">\n <div class="col-md-12">\n <div class="note note-info">\n <h4 class="block">Info! {{\'MESSAGE_NO_DISPOSITIONS_AVAILABLE\' | translate}}</h4>\n </div>\n </div>\n </div>\n\n <!-- GENERAL TAB -->\n <div class="row" data-ng-repeat="disposition in dispositions">\n <div class="col-md-12 form-group">\n <div class="input-group">\n <div>\n <input class="form-control" type="text" placeholder="{{\'APPLICATION_DISPOSITION\' | translate}}" data-ng-model="disposition.name">\n </div>\n <span class="input-group-btn">\n <button class="btn btn-success" type="button" data-ng-click="updateDisposition(disposition.id, disposition.name);"><i class="fa fa-cloud-upload fa-fw"></i> {{\'APPLICATION_UPDATE\' | translate}}</button>\n <button class="btn btn-danger" type="button" data-ng-click="deleteDisposition(disposition.id);"><i class="fa fa-times fa-fw"></i> {{\'APPLICATION_DELETE\' | translate}}</button>\n </span>\n </div>\n </div>\n </div>\n <!-- END GENERAL TAB -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/mail/account/view/hooks/view/view.html",'<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_HOOKS\' | translate}}</span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_ACCEPT\' | translate}}</a>\n </li>\n <li >\n <a href="#" data-target="#tab_1_2" data-toggle="tab">{{\'APPLICATION_REJECT\' | translate}}</a>\n </li>\n <li >\n <a href="#" data-target="#tab_1_3" data-toggle="tab">{{\'APPLICATION_CLOSE\' | translate}}</a>\n </li>\n </ul>\n </div>\n <div class="portlet-body">\n <div class="tab-content">\n <!-- ACCEPT TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.accept" data-ng-submit="forms.accept.$valid && updateItemMailAccount()" novalidate>\n <div class="row">\n <div class="form-group col-md-4" data-ng-class="{\'has-error\': (forms.accept.method.$touched || forms.accept.$submitted) && forms.accept.method.$invalid}">\n <label class="control-label">{{\'APPLICATION_METHOD\' | translate}}</label>\n <ui-select data-ng-model="account.acceptMethod" name="method" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_METHOD\' | translate}}">{{$select.selected.name | uppercase}}</ui-select-match>\n <ui-select-choices repeat="type.value as type in types | filter: $select.search">\n <div ng-bind-html="type.name | highlight: $select.search | uppercase" ></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.accept.method.$touched || forms.accept.$submitted) && forms.accept.method.$invalid && forms.accept.method.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div class="form-group col-md-8" data-ng-class="{\'has-error\': (forms.accept.url.$touched || forms.accept.$submitted) && forms.accept.url.$invalid}">\n <label class="control-label">{{\'APPLICATION_URL\' | translate}}</label>\n <input type="url" name="url" placeholder="{{\'APPLICATION_URL\' | translate}}" class="form-control" data-ng-model="account.acceptUrl" ng-required="account.acceptMethod"/>\n <span data-ng-show="(forms.accept.url.$touched || forms.accept.$submitted) && forms.accept.url.$invalid && forms.accept.url.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n <div class="row" ng-repeat = "action in account.actions">\n <div ng-switch="action.action">\n <div ng-switch-when="pause">\n <div class="form-group col-md-4">\n <label class="control-label">{{\'APPLICATION_PAUSE\' | translate}}</label></br>\n <input\n bs-switch\n data-ng-change="resetActionData(action)"\n data-ng-model="action.enabled"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_ENABLED\' | translate }}"\n switch-off-text="{{ \'APPLICATION_DISABLED\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n </div>\n <div ng-if="action.enabled" class="form-group col-md-8">\n <label class="control-label">{{\'APPLICATION_TYPE\' | translate}}</label>\n <ui-select name="action" data-ng-model="action.type" theme="bootstrap" >\n <ui-select-match placeholder="{{\'APPLICATION_TYPE\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat=" pause.name as pause in pauses | filter: $select.search">\n <div ng-bind-html="pause.name | highlight: $select.search | uppercase" ></div>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n </div>\n </div>\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END ACCEPT TAB -->\n <!-- START REJECT TAB -->\n <div class="tab-pane" id="tab_1_2">\n <form name="forms.reject" data-ng-submit="forms.reject.$valid && updateItemMailAccount()" novalidate>\n <div class="row">\n <div class="form-group col-md-4" data-ng-class="{\'has-error\': (forms.reject.method.$touched || forms.reject.$submitted) && forms.reject.method.$invalid}">\n <label class="control-label">{{\'APPLICATION_METHOD\' | translate}}</label>\n <ui-select data-ng-model="account.rejectMethod" name="method" theme="bootstrap" >\n <ui-select-match placeholder="{{\'APPLICATION_METHOD\' | translate}}">{{$select.selected.name | uppercase}}</ui-select-match>\n <ui-select-choices repeat="type.value as type in types | filter: $select.search">\n <div ng-bind-html="type.name | highlight: $select.search | uppercase" ></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.reject.method.$touched || forms.reject.$submitted) && forms.reject.method.$invalid && forms.reject.method.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div class="form-group col-md-8" data-ng-class="{\'has-error\': (forms.reject.url.$touched || forms.reject.$submitted) && forms.reject.url.$invalid}">\n <label class="control-label">{{\'APPLICATION_URL\' | translate}}</label>\n <input type="url" name="url" placeholder="{{\'APPLICATION_URL\' | translate}}" class="form-control" data-ng-model="account.rejectUrl" ng-required="account.rejectMethod"/>\n <span data-ng-show="(forms.reject.url.$touched || forms.reject.$submitted) && forms.reject.url.$invalid && forms.reject.url.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END REJECT TAB -->\n <!-- START CLOSE TAB -->\n <div class="tab-pane" id="tab_1_3">\n <form name="forms.close" data-ng-submit="forms.close.$valid && updateItemMailAccount()" novalidate>\n <div class="row">\n <div class="form-group col-md-4" data-ng-class="{\'has-error\': (forms.close.method.$touched || forms.close.$submitted) && forms.close.method.$invalid}">\n <label class="control-label">{{\'APPLICATION_METHOD\' | translate}}</label>\n <ui-select data-ng-model="account.closeMethod" name="method" theme="bootstrap" >\n <ui-select-match placeholder="{{\'APPLICATION_METHOD\' | translate}}">{{$select.selected.name | uppercase}}</ui-select-match>\n <ui-select-choices repeat="type.value as type in types | filter: $select.search">\n <div ng-bind-html="type.name | highlight: $select.search | uppercase" ></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.close.method.$touched || forms.close.$submitted) && forms.close.method.$invalid && forms.close.method.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div class="form-group col-md-8" data-ng-class="{\'has-error\': (forms.close.url.$touched || forms.close.$submitted) && forms.close.url.$invalid}">\n <label class="control-label">{{\'APPLICATION_URL\' | translate}}</label>\n <input type="url" name="url" placeholder="{{\'APPLICATION_URL\' | translate}}" class="form-control" data-ng-model="account.closeUrl" ng-required="account.closeMethod"/>\n <span data-ng-show="(forms.close.url.$touched || forms.close.$submitted) && forms.close.url.$invalid && forms.close.url.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END CLOSE TAB -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/mail/account/view/other/view/view.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_OTHER\' | translate}}</span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_GENERALS\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_2" data-toggle="tab">{{\'APPLICATION_SIGNATURE\' | translate}}</a>\n </li>\n </ul>\n </div>\n <div class="portlet-body" data-ng-init="initView()">\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="mail-spinner-grid" spinner-start-active="false"></span>\n <!-- END UI-GRID SPINNER -->\n\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.info" data-ng-submit="forms.info.$valid && updateItemMailAccount()" novalidate>\n <!-- START WHITE LABEL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.whiteLabel.$touched || forms.info.$submitted) && forms.info.whiteLabel.$invalid}">\n <label class="control-label">{{\'APPLICATION_WHITE_LABEL\' | translate}}</label>\n <textarea type="text" name="whiteLabel" placeholder="{{\'APPLICATION_WHITE_LABEL\' | translate}}" class="form-control" data-ng-model="account.whiteLabel" data-ng-disabled="!license.custom"/></textarea>\n <span data-ng-show="(forms.info.whiteLabel.$touched || forms.info.$submitted) && forms.info.whiteLabel.$invalid && forms.info.whiteLabel.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END WHITE LABEL -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}" data-ng-disabled="!license.custom"/>\n </form>\n </div>\n <!-- END GENERAL TAB -->\n\n <!-- GENERAL TAB -->\n <div class="tab-pane" id="tab_1_2">\n <form name="forms.signature" data-ng-submit="updateItemMailAccount()" novalidate>\n <!-- START SIGNATURE -->\n <div class="form-group">\n <div ckeditor="options" ng-model="account.signature"></div>\n </div>\n <!-- END WHITE LABEL -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END GENERAL TAB -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/mail/account/view/setting/view/view.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_SETTINGS\' | translate}}</span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_GENERALS\' | translate}}</a>\n </li>\n <li data-ng-if="account.MailServerIn">\n <a href="#" data-target="#tab_1_2" data-toggle="tab">IMAP</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_3" data-toggle="tab">SMTP</a>\n </li>\n </ul>\n </div>\n <div class="portlet-body" data-ng-init="initView()">\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="mail-spinner-grid" spinner-start-active="false"></span>\n <!-- END UI-GRID SPINNER -->\n\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.info" data-ng-submit="forms.info.$valid && updateItemMailAccount()" novalidate>\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="account.name" required/>\n <span data-ng-show="(forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid && forms.info.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START ADDRESS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.address.$touched || forms.info.$submitted) && forms.info.address.$invalid}">\n <label class="control-label">{{\'APPLICATION_EMAIL_ADDRESS\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="address" placeholder="{{\'APPLICATION_ADDRESS\' | translate}}" class="form-control" data-ng-model="account.address" required/>\n <span data-ng-show="(forms.info.address.$touched || forms.info.$submitted) && forms.info.address.$invalid && forms.info.address.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END ADDRESS -->\n\n <!-- START LIST -->\n <div class="form-group" data-ng-if="license.cm">\n <label class="control-label">{{\'APPLICATION_LIST\' | translate}}</label>\n <div class="input-group">\n\n <ui-select data-ng-model="account.ListId" name="list" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_LIST\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="list.id as list in lists | filter: $select.search">\n <div ng-bind-html="list.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n\n <span class="input-group-btn">\n <button type="button" data-ng-click="account.ListId = null" class="btn btn-default">\n <span class="glyphicon glyphicon-trash"></span>\n </button>\n </span>\n\n </div>\n </div>\n <!-- END LIST -->\n\n <!-- START TEMPLATE -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_TEMPLATE\' | translate}}</label>\n <div class="input-group">\n\n <ui-select data-ng-model="account.TemplateId" name="template" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_TEMPLATE\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="template.id as template in templates | filter: $select.search">\n <div ng-bind-html="template.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n\n <span class="input-group-btn">\n <button type="button" data-ng-click="account.TemplateId = null" class="btn btn-default">\n <span class="glyphicon glyphicon-trash"></span>\n </button>\n </span>\n\n </div>\n </div>\n <!-- END TEMPLATE -->\n\n <!-- START FIDELITY -->\n <div class="form-group" data-ng-if="account.MailServerIn">\n <label class="control-label">{{\'APPLICATION_FIDELITY\' | translate}}</label></br>\n <input\n bs-switch\n data-ng-model="account.fidelity"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_ENABLED\' | translate }}"\n switch-off-text="{{ \'APPLICATION_DISABLED\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n </div>\n <!-- END FIDELITY -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-if="account.fidelity" data-ng-class="{\'has-error\': (forms.info.timeout.$touched || forms.info.$submitted) && forms.info.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" min="0" name="timeout" placeholder="{{\'APPLICATION_PORT\' | translate}}" class="form-control" data-ng-model="account.timeout" required/>\n <span data-ng-show="(forms.info.timeout.$touched || forms.info.$submitted) && forms.info.timeout.$invalid && forms.info.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.info.timeout.$touched || forms.info.$submitted) && forms.info.timeout.$invalid && forms.info.timeout.$error.number" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_NUMERIC_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="account.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n <!-- START SERVICE -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_SERVICE\' | translate}}</label><br>\n <input\n bs-switch\n data-ng-model="account.service"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_ENABLED\' | translate }}"\n switch-off-text="{{ \'APPLICATION_DISABLED\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n </div>\n <!-- END SERVICE -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END GENERAL TAB -->\n\n <!-- IMAP TAB -->\n <div class="tab-pane" id="tab_1_2" data-ng-if="account.MailServerIn">\n <div class="note note-danger" data-ng-show="account.MailServerIn.state === \'DISCONNECTED\' || account.MailServerIn.state === \'ERROR\'">\n <p> ERROR </p>\n <json-formatter open="1" json="account.MailServerIn.source"></json-formatter>\n </div>\n\n <div class="note note-success" data-ng-show="account.MailServerIn.state === \'CONNECTED\'">\n <p> CONNECTED </p>\n </div>\n\n <div class="note note-info" data-ng-show="account.MailServerIn.state === \'CONNECTING\'">\n <p> TRYING... </p>\n </div>\n\n <form name="forms.formIn" data-ng-submit="forms.formIn.$valid && updateItemMailServerIn()" novalidate>\n <!-- START HOST -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formIn.host.$touched || forms.formIn.$submitted) && forms.formIn.host.$invalid}">\n <label class="control-label">{{\'APPLICATION_HOST\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="host" placeholder="{{\'APPLICATION_HOST\' | translate}}" class="form-control" data-ng-model="account.MailServerIn.host" required/>\n <span data-ng-show="(forms.formIn.host.$touched || forms.formIn.$submitted) && forms.formIn.host.$invalid && forms.formIn.host.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END HOST -->\n\n <!-- START USERNAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formIn.username.$touched || forms.formIn.$submitted) && forms.formIn.username.$invalid}">\n <label class="control-label">{{\'APPLICATION_USERNAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="username" placeholder="{{\'APPLICATION_USERNAME\' | translate}}" class="form-control" data-ng-model="account.MailServerIn.username" required/>\n <span data-ng-show="(forms.formIn.username.$touched || forms.formIn.$submitted) && forms.formIn.username.$invalid && forms.formIn.username.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n\n <!-- START PASSWORD -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formIn.password.$touched || forms.formIn.$submitted) && forms.formIn.password.$invalid}">\n <label class="control-label">{{\'APPLICATION_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="password" name="password" placeholder="{{\'APPLICATION_PASSWORD\' | translate}}" class="form-control" data-ng-model="account.MailServerIn.password" required/>\n <span data-ng-show="(forms.formIn.password.$touched || forms.formIn.$submitted) && forms.formIn.password.$invalid && forms.formIn.password.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PASSWORD -->\n\n <!-- START PORT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formIn.port.$touched || forms.formIn.$submitted) && forms.formIn.port.$invalid}">\n <label class="control-label">{{\'APPLICATION_PORT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" name="port" placeholder="{{\'APPLICATION_PORT\' | translate}}" class="form-control" data-ng-model="account.MailServerIn.port" required/>\n <span data-ng-show="(forms.formIn.port.$touched || forms.formIn.$submitted) && forms.formIn.port.$invalid && forms.formIn.port.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.formIn.port.$touched || forms.formIn.$submitted) && forms.formIn.port.$invalid && forms.formIn.port.$error.number" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_NUMERIC_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PORT -->\n\n <!-- START MAILBOX -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_MAILBOX\' | translate}}</label>\n <input type="text" name="mailbox" placeholder="{{\'APPLICATION_MAILBOX\' | translate}}" class="form-control" data-ng-model="account.MailServerIn.mailbox"/>\n </div>\n <!-- END MAILBOX -->\n\n <!-- START SEARCH FILTER -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_SEARCH_FILTER\' | translate}}</label>\n <ui-select data-ng-model="account.MailServerIn.filter" name="filter" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="filter in [\'UNSEEN\'] | filter: $select.search">\n <div ng-bind-html="filter | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- START SEARCH FILTER -->\n\n <!-- START connTimeout -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.in.connTimeout.$touched || forms.in.$submitted) && forms.in.connTimeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_CONNECTION_TIMEOUT\' | translate}} [sec]<span class="required" aria-required="true">*</span></label>\n <input type="number" name="connTimeout" placeholder="{{\'APPLICATION_CONNECTION_TIMEOUT\' | translate}}" class="form-control" data-ng-model="account.MailServerIn.connTimeout" required/>\n <span data-ng-show="(forms.in.connTimeout.$touched || forms.in.$submitted) && forms.in.connTimeout.$invalid && forms.in.connTimeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.in.connTimeout.$touched || forms.in.$submitted) && forms.in.connTimeout.$invalid && forms.in.connTimeout.$error.number" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_NUMERIC_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END connTimeout -->\n\n <!-- START authTimeout -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.in.authTimeout.$touched || forms.in.$submitted) && forms.in.authTimeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_AUTH_TIMEOUT\' | translate}} [sec]<span class="required" aria-required="true">*</span></label>\n <input type="number" name="authTimeout" placeholder="{{\'APPLICATION_AUTH_TIMEOUT\' | translate}}" class="form-control" data-ng-model="account.MailServerIn.authTimeout" required/>\n <span data-ng-show="(forms.in.authTimeout.$touched || forms.in.$submitted) && forms.in.authTimeout.$invalid && forms.in.authTimeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.in.authTimeout.$touched || forms.in.$submitted) && forms.in.authTimeout.$invalid && forms.in.authTimeout.$error.number" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_NUMERIC_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END authTimeout -->\n\n <!-- START DELETE -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DELETE_MAIL_FROM_SERVER\' | translate}}</label><br>\n <input\n bs-switch\n data-ng-model="account.MailServerIn.delete"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_ENABLED\' | translate }}"\n switch-off-text="{{ \'APPLICATION_DISABLED\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n </div>\n <!-- END DELETE -->\n\n <!-- START SSL -->\n <div class="form-group">\n <label class="control-label">SSL</label><br>\n <input\n bs-switch\n data-ng-model="account.MailServerIn.ssl"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_ENABLED\' | translate }}"\n switch-off-text="{{ \'APPLICATION_DISABLED\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n </div>\n <!-- END SSL -->\n\n <!-- START Keepalive -->\n <div class="form-group">\n <label class="control-label">Keepalive</label><br>\n <input\n bs-switch\n data-ng-model="account.MailServerIn.keepalive"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_ENABLED\' | translate }}"\n switch-off-text="{{ \'APPLICATION_DISABLED\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n </div>\n <!-- END Keepalive -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END IMAP TAB -->\n\n <!-- SMTP TAB -->\n <div class="tab-pane" id="tab_1_3">\n\n <div class="note note-danger" data-ng-show="account.MailServerOut.state === \'DISCONNECTED\' || account.MailServerOut.state === \'ERROR\'">\n <p> ERROR </p>\n <json-formatter open="1" json="account.MailServerOut.source"></json-formatter>\n </div>\n\n <div class="note note-success" data-ng-show="account.MailServerOut.state === \'CONNECTED\'">\n <p> CONNECTED </p>\n </div>\n\n <div class="note note-info" data-ng-show="account.MailServerOut.state === \'CONNECTING\'">\n <p> TRYING... </p>\n </div>\n\n <form name="forms.formOut" data-ng-submit="forms.formOut.$valid && updateItemMailServerOut()" novalidate>\n\n <!-- START HOST -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formOut.host.$touched || forms.formOut.$submitted) && forms.formOut.host.$invalid}">\n <label class="control-label">{{\'APPLICATION_HOST\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="host" placeholder="{{\'APPLICATION_HOST\' | translate}}" class="form-control" data-ng-model="account.MailServerOut.host" required/>\n <span data-ng-show="(forms.formOut.host.$touched || forms.formOut.$submitted) && forms.formOut.host.$invalid && forms.formOut.host.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END HOST -->\n\n <!-- START USERNAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formOut.username.$touched || forms.formOut.$submitted) && forms.formOut.username.$invalid}">\n <label class="control-label">{{\'APPLICATION_USERNAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="username" placeholder="{{\'APPLICATION_USERNAME\' | translate}}" class="form-control" data-ng-model="account.MailServerOut.username" required/>\n <span data-ng-show="(forms.formOut.username.$touched || forms.formOut.$submitted) && forms.formOut.username.$invalid && forms.formOut.username.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n\n <!-- START PASSWORD -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formOut.password.$touched || forms.formOut.$submitted) && forms.formOut.password.$invalid}">\n <label class="control-label">{{\'APPLICATION_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="password" name="password" placeholder="{{\'APPLICATION_PASSWORD\' | translate}}" class="form-control" data-ng-model="account.MailServerOut.password" required/>\n <span data-ng-show="(forms.formOut.password.$touched || forms.formOut.$submitted) && forms.formOut.password.$invalid && forms.formOut.password.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PASSWORD -->\n\n <!-- START PORT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formOut.port.$touched || forms.formOut.$submitted) && forms.formOut.port.$invalid}">\n <label class="control-label">{{\'APPLICATION_PORT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" name="port" placeholder="{{\'APPLICATION_PORT\' | translate}}" class="form-control" data-ng-model="account.MailServerOut.port" required/>\n <span data-ng-show="(forms.formOut.form.$touched || forms.formOut.$submitted) && forms.formOut.port.$invalid && forms.formOut.port.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.formOut.form.$touched || forms.formOut.$submitted) && forms.formOut.port.$invalid && forms.formOut.port.$error.number" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_NUMERIC_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PORT -->\n\n <!-- START SSL -->\n <div class="form-group">\n <label class="control-label">SSL</label><br>\n <input\n bs-switch\n data-ng-model="account.MailServerOut.ssl"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_ENABLED\' | translate }}"\n switch-off-text="{{ \'APPLICATION_DISABLED\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n </div>\n <!-- END SSL -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n <input class="btn blue-madison" type="button" value="Test" data-ng-click="test()"/>\n </form>\n </div>\n <!-- END SMTP TAB -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'), -a.put("app/channels/mail/account/view/view.html",'<!-- BEGIN PAGE HEADER-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-envelope"></i>\n <a href="#">{{ \'APPLICATION_MAIL\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-notebook"></i>\n <a href="/channels/mail/accounts/list">{{ \'APPLICATION_ACCOUNTS\' | translate }}</a>\n <i class="fa fa-angle-right" data-ng-show="account"></i>\n </li>\n <li data-ng-show="account">\n <a href="#">{{ account.description || account.name }}</a>\n </li>\n </ul>\n </div>\n\n<!-- END PAGE HEADER-->\n\n<!-- BEGIN PAGE CONTENT-->\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar" data-ng-init="initView()">\n <!-- PORTLET main.channels -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img ng-src="assets/images/media/account.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{ account.description || account.name }}\n </div>\n <div class="profile-usertitle-job">\n {{account.email}}\n </div>\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li ng-class="{active: $state.is(\'main.channels.mail.accounts.view.settings\')}">\n <a href="/channels/mail/accounts/view/{{account.id}}/settings">\n <i class="icon-settings"></i>\n {{\'APPLICATION_SETTINGS\' | translate}} </a>\n </li>\n <li ng-class="{active: $state.is(\'main.channels.mail.accounts.view.hooks\')}" data-ng-if="account.MailServerIn">\n <a href="/channels/mail/accounts/view/{{account.id}}/hooks">\n <i class="fa fa-code"></i>\n {{\'APPLICATION_HOOKS\' | translate}} </a>\n </li>\n <li ng-class="{active: $state.is(\'main.channels.mail.accounts.view.dispositions\')}" data-ng-if="account.MailServerIn">\n <a href="/channels/mail/accounts/view/{{account.id}}/dispositions">\n <i class="icon-target"></i>\n {{\'APPLICATION_DISPOSITIONS\' | translate}} </a>\n </li>\n <li ng-class="{active: $state.includes(\'main.channels.mail.accounts.view.actions\')}" data-ng-if="account.MailServerIn">\n <a href="/channels/mail/accounts/view/{{account.id}}/actions/list">\n <i class="icon-directions"></i>\n {{\'APPLICATION_ACTIONS\' | translate}} </a>\n </li>\n <li ng-class="{active: $state.includes(\'main.channels.mail.accounts.view.other\')}" data-ng-if="account.MailServerIn">\n <a href="/channels/mail/accounts/view/{{account.id}}/other">\n <i class="icon-equalizer"></i>\n {{\'APPLICATION_OTHER\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <div ui-view class="profile-content"></div>\n <!-- END PROFILE CONTENT -->\n </div>\n<!-- END PAGE CONTENT-->\n</div>\n'),a.put("app/channels/mail/account/wizard/wizard.html",'\n<div class="row" data-ng-init="initWizard()">\n <div class="col-md-12">\n <!-- BEGIN PAGE HEADER-->\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-envelope"></i>\n <a href="#">{{ \'APPLICATION_MAIL\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-notebook"></i>\n <a href="/channels/mail/accounts/list">{{ \'APPLICATION_ACCOUNTS\' | translate }}</a>\n </li>\n </ul>\n </div>\n <!-- END PAGE HEADER-->\n\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-notebook font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_ACCOUNT\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="createItem()">\n <wz-step title="{{\'APPLICATION_ACCOUNT_INFO\' | translate}}" canexit="formValidation(forms.info.$valid)">\n <form name="forms.info" novalidate>\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="(forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid && forms.info.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START ADDRESS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.address.$touched || forms.info.$submitted) && forms.info.address.$invalid}">\n <label class="control-label">{{\'APPLICATION_EMAIL_ADDRESS\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="address" placeholder="{{\'APPLICATION_ADDRESS\' | translate}}" class="form-control" data-ng-model="item.address" required/>\n <span data-ng-show="(forms.info.address.$touched || forms.info.$submitted) && forms.info.address.$invalid && forms.info.address.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END ADDRESS -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"/>\n </div>\n <!-- END DESCRIPTION -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" data-ng-click="goNext()"/>\n </form>\n </wz-step>\n\n <wz-step title="IMAP" canexit="formValidation(forms.in.$valid)">\n <form name="forms.in" novalidate>\n <!-- START HOST -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.in.host.$touched || forms.in.$submitted) && forms.in.host.$invalid}">\n <label class="control-label">{{\'APPLICATION_INCOMING_MAIL_SERVER\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="host" placeholder="{{\'APPLICATION_HOST\' | translate}}" class="form-control" data-ng-model="item.MailServerIn.host" required/>\n <span data-ng-show="(forms.in.host.$touched || forms.in.$submitted) && forms.in.host.$invalid && forms.in.host.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END HOST -->\n\n <!-- START USERNAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.in.username.$touched || forms.in.$submitted) && forms.in.username.$invalid}">\n <label class="control-label">{{\'APPLICATION_USERNAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="username" placeholder="{{\'APPLICATION_USERNAME\' | translate}}" class="form-control" data-ng-model="item.MailServerIn.username" name="username" required/>\n <span data-ng-show="(forms.in.username.$touched || forms.in.$submitted) && forms.in.username.$invalid && forms.in.username.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n\n <!-- START PASSWORD -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.in.password.$touched || forms.in.$submitted) && forms.in.password.$invalid}">\n <label class="control-label">{{\'APPLICATION_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="password" name="password" placeholder="{{\'APPLICATION_PASSWORD\' | translate}}" class="form-control" data-ng-model="item.MailServerIn.password" required/>\n <span data-ng-show="(forms.in.password.$touched || forms.in.$submitted) && forms.in.password.$invalid && forms.in.password.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PASSWORD -->\n\n <!-- START PORT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.in.port.$touched || forms.in.$submitted) && forms.in.port.$invalid}">\n <label class="control-label">{{\'APPLICATION_PORT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" name="port" placeholder="{{\'APPLICATION_PORT\' | translate}}" class="form-control" data-ng-model="item.MailServerIn.port" required/>\n <span data-ng-show="(forms.in.port.$touched || forms.in.$submitted) && forms.in.port.$invalid && forms.in.port.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.in.port.$touched || forms.in.$submitted) && forms.in.port.$invalid && forms.in.port.$error.number" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_NUMERIC_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PORT -->\n\n <!-- START MAILBOX -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_MAILBOX\' | translate}}</label>\n <input type="text" name="mailbox" placeholder="{{\'APPLICATION_MAILBOX\' | translate}}" class="form-control" data-ng-model="item.MailServerIn.mailbox"/>\n </div>\n <!-- END MAILBOX -->\n\n <!-- START SEARCH FILTER -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_SEARCH_FILTER\' | translate}}</label>\n <ui-select data-ng-model="item.MailServerIn.filter" name="filter" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="filter in [\'UNSEEN\'] | filter: $select.search">\n <div data-ng-bind="filter | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- START SEARCH FILTER -->\n\n <!-- START connTimeout -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.in.connTimeout.$touched || forms.in.$submitted) && forms.in.connTimeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_CONNECTION_TIMEOUT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" name="connTimeout" placeholder="{{\'APPLICATION_CONNECTION_TIMEOUT\' | translate}}" class="form-control" data-ng-model="item.MailServerIn.connTimeout" required/>\n <span data-ng-show="(forms.in.connTimeout.$touched || forms.in.$submitted) && forms.in.connTimeout.$invalid && forms.in.connTimeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.in.connTimeout.$touched || forms.in.$submitted) && forms.in.connTimeout.$invalid && forms.in.connTimeout.$error.number" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_NUMERIC_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END connTimeout -->\n\n <!-- START authTimeout -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.in.authTimeout.$touched || forms.in.$submitted) && forms.in.authTimeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_AUTH_TIMEOUT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" name="authTimeout" placeholder="{{\'APPLICATION_AUTH_TIMEOUT\' | translate}}" class="form-control" data-ng-model="item.MailServerIn.authTimeout" required/>\n <span data-ng-show="(forms.in.authTimeout.$touched || forms.in.$submitted) && forms.in.authTimeout.$invalid && forms.in.authTimeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.in.authTimeout.$touched || forms.in.$submitted) && forms.in.authTimeout.$invalid && forms.in.authTimeout.$error.number" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_NUMERIC_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END authTimeout -->\n\n <!-- START DELETE -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DELETE_MAIL_FROM_SERVER\' | translate}}</label><br>\n <input\n bs-switch\n data-ng-model="item.MailServerIn.delete"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_ENABLED\' | translate }}"\n switch-off-text="{{ \'APPLICATION_DISABLED\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n </div>\n <!-- END DELETE -->\n\n <!-- START SSL -->\n <div class="form-group">\n <label class="control-label">SSL</label><br>\n <input\n bs-switch\n data-ng-model="item.MailServerIn.ssl"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_ENABLED\' | translate }}"\n switch-off-text="{{ \'APPLICATION_DISABLED\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n </div>\n <!-- END SSL -->\n\n <!-- START Keepalive -->\n <div class="form-group">\n <label class="control-label">Keepalive</label><br>\n <input\n bs-switch\n data-ng-model="item.MailServerIn.keepalive"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_ENABLED\' | translate }}"\n switch-off-text="{{ \'APPLICATION_DISABLED\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n </div>\n <!-- END Keepalive -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" ng-click="goNext()"/>\n </form>\n </wz-step>\n\n <wz-step title="SMTP" canexit="formValidation(forms.out.$valid)">\n <form name="forms.out" novalidate>\n <!-- START HOST -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.out.host.$touched || forms.out.$submitted) && forms.out.host.$invalid}">\n <label class="control-label">{{\'APPLICATION_OUTGOING_MAIL_SERVER\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="host" placeholder="{{\'APPLICATION_HOST\' | translate}}" class="form-control" data-ng-model="item.MailServerOut.host" required/>\n <span data-ng-show="(forms.out.host.$touched || forms.out.$submitted) && forms.out.host.$invalid && forms.out.host.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END HOST -->\n\n <!-- START USERNAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.out.username.$touched || forms.out.$submitted) && forms.out.username.$invalid}">\n <label class="control-label">{{\'APPLICATION_USERNAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="username" placeholder="{{\'APPLICATION_USERNAME\' | translate}}" class="form-control" data-ng-model="item.MailServerOut.username" required/>\n <span data-ng-show="(forms.out.username.$touched || forms.out.$submitted) && forms.out.username.$invalid && forms.out.username.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n\n <!-- START PASSWORD -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.out.password.$touched || forms.out.$submitted) && forms.out.password.$invalid}">\n <label class="control-label">{{\'APPLICATION_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="password" name="password" placeholder="{{\'APPLICATION_PASSWORD\' | translate}}" class="form-control" data-ng-model="item.MailServerOut.password" required/>\n <span data-ng-show="(forms.out.password.$touched || forms.out.$submitted) && forms.out.password.$invalid && forms.out.password.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PASSWORD -->\n\n <!-- START PORT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.out.port.$touched || forms.out.$submitted) && forms.out.port.$invalid}">\n <label class="control-label">{{\'APPLICATION_PORT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" name="port" placeholder="{{\'APPLICATION_PORT\' | translate}}" class="form-control" data-ng-model="item.MailServerOut.port" required/>\n <span data-ng-show="(out.$touched || forms.out.$submitted) && forms.out.port.$invalid && forms.out.port.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(out.$touched || forms.out.$submitted) && forms.out.port.$invalid && forms.out.port.$error.number" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_NUMERIC_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PORT -->\n\n <!-- START SSL -->\n <div class="form-group">\n <label class="control-label">SSL</label><br>\n <input\n bs-switch\n data-ng-model="item.MailServerOut.ssl"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_ENABLED\' | translate }}"\n switch-off-text="{{ \'APPLICATION_DISABLED\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n </div>\n <!-- END SSL -->\n\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" ng-click="goNext()"/>\n </form>\n </wz-step>\n\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n <input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n </wz-step>\n </wizard>\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/mail/inbox/message/info.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_INFO\' | translate }}</h3>\n</div>\n<div class="modal-body" data-ng-init="initInfo()">\n <div class="form-group" ng-if="data">\n <json-formatter json="data" open="1"></json-formatter>\n </div>\n <div class="note note-warning" data-ng-hide="data">\n <h4 class="block"></h4>\n <p>\n {{ \'MESSAGE_NO_INFO_AVAILABLE\' | translate }}\n </p>\n </div>\n\n</div>\n<div class="modal-footer">\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CLOSE\' | translate }}</button>\n</div>\n'),a.put("app/channels/mail/inbox/message/message.directive.html",'<div class="message">\n <div class="row">\n <div class="col-md-12">\n <span class="bold">From: </span>\n <a href="" data-ng-click="openContact(message.from[0])">{{message.from[0]}} </a>\n <br>\n <span class="bold">To: </span>\n <a href="" data-ng-click="openContact(to)" data-ng-repeat="to in message.to">{{to}}<span data-ng-if="!$last">, </span></a>\n <br>\n <span data-ng-if="message.cc.length" class="bold">Cc: </span>\n <a href="" data-ng-click="openContact(cc)" data-ng-repeat="cc in message.cc">{{cc}}<span data-ng-if="!$last">, </span></a>\n <br>\n <span data-ng-if="message.bcc.length" class="bold">Bcc: </span>\n <a href="" data-ng-click="openContact(bcc)" data-ng-repeat="cc in message.bcc">{{bcc}}<span data-ng-if="!$last">, </span></a>\n </div>\n <div class="row">\n <div class="col-md-12">\n <span class="pull-right" data-ng-if="message.User">{{\'APPLICATION_SENT_BY\' | translate}}: <strong>{{message.User.fullname}}</strong></span>\n <span class="pull-right" data-ng-if="message.voiceSource">{{\'APPLICATION_SENT_BY\' | translate}}: <strong>Cally ²</strong>\n <a ng-click="info(message.voiceSource)"><i class="icon-info font-blue"></i>\n </a>\n </span>\n </div>\n </div>\n <br>\n <span class="todo-tasklist-date">\n <span class="pull-right" data-ng-switch="message.status" data-ng-if="message.status!==\'RECEIVED\'" uib-tooltip="{{\'APPLICATION_RETRY\' | translate}}: {{message.retry}}">\n <a ng-switch-when="SENDING" href="#" class="btn default btn-xs inactive-link blue-stripe"> {{message.status | uppercase}}\n <i class="fa fa-warning"></i>\n </a>\n <a ng-switch-when="SENT" href="#" class="btn default btn-xs inactive-link green-stripe"> {{message.status | uppercase}}\n <i class="fa fa-check"></i>\n </a>\n <a ng-switch-when="FAILED" href="#" class="btn default btn-xs red-stripe" data-ng-click="retry(message.id)"> {{message.status | uppercase}}\n <i class="fa fa-times"></i>\n </a>\n </span>\n <span class="pull-right" data-ng-if="message.status===\'RECEIVED\'">\n <a href="#" class="btn default btn-xs inactive-link green-stripe"> {{message.status | uppercase}}\n <i class="fa fa-check"></i>\n </a>\n </span>\n <i class="icon-calendar"></i> <span am-time-ago="message.updatedAt"></span>\n </span>\n <hr>\n <div class="body text-left message-body" data-ng-bind="message.text"></div>\n <h5 data-ng-hide="message.text" class="media-heading"><i>{{\'MESSAGE_NO_AVAILABLE_TEXT\' | translate | lowercase}}</i></h5>\n <hr data-ng-if="message.MailAttachments.length">\n <div data-ng-repeat="mailAttachment in message.MailAttachments">\n <strong>{{mailAttachment.name}}</strong>\n <span>\n ({{mailAttachment.size | prettyBytes}})\n </span>\n <a target="_self" download="{{mailAttachment.name}}" href="api/mail/attachments/{{mailAttachment.id}}">\n <i class="icon-cloud-download"></i>\n </a>\n <a ng-if="::(mailAttachment.type.indexOf(\'image\') > -1)" ng-click="openPreview(mailAttachment.id)">\n <i class="icon-picture"></i>\n </a>\n </div>\n</div>\n'),a.put("app/channels/mail/inbox/note/note.directive.html",'<div class="note">\n <div class="row">\n <div class="col-md-6">\n <a type="button" name="button" data-ng-if="::(Auth.getCurrentUser().id == message.UserId)" data-ng-click="deleteNote()">\n <i class="fa fa-trash-o" style="color: red;"></i>\n </a>\n\n <i class="icon-calendar"></i> <span am-time-ago="message.updatedAt"></span>\n </div>\n <div class="col-md-6">\n <span class="pull-right" data-ng-show="message.User">{{\'APPLICATION_ADD_BY\' | translate}}: <strong>{{message.User.fullname}}</strong></span>\n </div>\n </div>\n <hr>\n <span class="body text-left" data-ng-bind-html="message.text" style="white-space: pre-wrap;"></span>\n</div>\n'),a.put("app/channels/mail/inbox/note/note.modal.html",'<div class="modal-header" data-ng-init="initModal()">\n <h3 class="modal-title">{{ \'APPLICATION_NOTES\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n <div class="form-group">\n <textarea data-ng-model="item.text" name="text" rows="10" style="resize: none; width: 100%;"></textarea>\n </div>\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" data-ng-click="ok()">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" data-ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/mail/inbox/room/room.directive.html",'<!-- BEGIN TODO CONTENT -->\n<div class="todo-content">\n <div class="portlet light">\n <div class="portlet-title">\n <div class="caption">\n <button data-ng-if="form.from.length && form.to.length && mailRoom.status !== \'CLOSED\' && form.html" class="btn btn-sm btn-default green-meadow" data-ng-click="sendMail()">\n <i class="icon-paper-plane" style="color: white;"></i> {{\'APPLICATION_SEND\' | translate}}\n </button>\n <span data-ng-if="mailRoom && form.from.length && form.to.length && mailRoom.status !== \'CLOSED\' && form.html"> | </span>\n <span data-ng-if="mailRoom" class="label label-default"> #{{mailRoom.id}} {{mailRoom.status}}</span>\n <span data-ng-if="mailRoom"> | </span>\n <span data-ng-if="mailRoom && mailRoom.ParentId" class="label label-warning"> Ref: <a data-ng-click="openRoom(mailRoom.ParentId)">#{{mailRoom.ParentId}}</a></span>\n <span data-ng-if="mailRoom && mailRoom.ParentId"> | </span>\n <span data-ng-if="mailRoom" class="caption-subject font-green-sharp bold uppercase dot">{{mailRoom.subject || \'No subject\'}}</span>\n </div>\n <div class="actions">\n <button class="btn btn-icon-only yellow" data-ng-if="mailRoom" data-ng-click="loadNote()" data-ng-hide="mailRoom.status == \'CLOSED\'" title="{{\'APPLICATION_NOTES\' | translate}}">\n <i class="fa fa-sticky-note"></i>\n </button>\n <button class="file-upload" data-ng-hide="mailRoom.status == \'CLOSED\'">\n <i class="fa fa-paperclip"></i> <input type="file" data-ng-if="uploader" data-ng-disabled="mailRoom.status == \'CLOSED\'" nv-file-select uploader="uploader" multiple class="file-input" title="{{\'APPLICATION_ATTACHMENTS\' | translate}}">\n </button>\n <!-- UPDATE SECTION START -->\n <button data-ng-class="mailRoom.status == \'CLOSED\' ? \'grey-cascade\' : \'btn-success\'" class="btn btn-icon-only" data-ng-disabled="mailRoom.status == \'CLOSED\' && mailRoom.disposition" data-ng-if="mailRoom" data-ng-click="closeRoom()" title="{{\'APPLICATION_STATUS\' | translate}}">\n <i data-ng-class="mailRoom.status == \'CLOSED\' ? \'icon-target\' : \'fa fa-upload\'"></i>\n </button>\n <!-- UPDATE SECTION END -->\n <button class="btn default btn-icon-only" data-ng-if="mailRoom && mailRoom.status !== \'CLOSED\'" data-ng-click="togglePanelLeft()" title="{{\'APPLICATION_RESIZE\' | translate}}">\n <i ng-class="panelRight == \'col-md-12\' ? \'icon-size-actual\' : \'icon-size-fullscreen\'"></i>\n </button>\n </div>\n </div>\n <div class="portlet-body">\n <div class="row">\n <div data-ng-if="panelLeft" data-ng-class="panelLeft">\n <div class="form">\n <!-- START TAGS -->\n <div class="form-group" data-ng-if="mailRoom.status !== \'CLOSED\'">\n <div class="row">\n <div class="col-md-1">\n <a href="#" class="btn btn-icon-only">\n <i class="fa fa-tags" style="color: gray;"></i>\n </a>\n </div>\n <div class="col-md-11">\n <ui-select multiple data-ng-model="form.tags" theme="bootstrap" on-select="onChanged($item, $model)" on-remove="onChanged($item, $model)" data-ng-disabled="mailRoom.status == \'CLOSED\'">\n <ui-select-match placeholder="Tags...">{{$item}}</ui-select-match>\n <ui-select-choices repeat="tag in tags | filter:$select.search" class="">\n {{tag}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n </div>\n <!-- END TAGS -->\n </div>\n\n <hr data-ng-if="mailRoom && mailRoom.status !== \'CLOSED\'">\n\n <!-- END TAGS -->\n <div id="mail-box">\n <ul class="chats">\n <li\n data-ng-switch="mailMessage.status"\n data-ng-class="{\'in\': mailMessage.status == \'RECEIVED\', \'out\': mailMessage.status == \'SENT\' || mailMessage.status == \'SENDING\' || mailMessage.status == \'FAILED\' || mailMessage.status == \'NOTE\'}"\n data-ng-repeat="mailMessage in mailRoom.MailMessages | orderBy:\'-createdAt\'">\n <div class="avatar" data-ng-class="message.UserId ? \'pretty-avatar\' : \'pretty-avatar-v\'">\n <ng-letter-avatar\n data-ng-if="mailMessage.UserId"\n height="40"\n width="40"\n fontsize="25"\n data="{{mailMessage.User.fullname}}"\n avatarcustombgcolor="#B0B0B0"\n avatarcustomborder="border:2px solid #3399CC"\n charCount="2"\n shape="round"></ng-letter-avatar>\n <ng-letter-avatar\n data-ng-if="!mailMessage.UserId"\n height="40"\n width="40"\n fontsize="25"\n data="{{mailMessage.from[0]}}"\n avatarcustombgcolor="#B0B0B0"\n avatarcustomborder="border:2px solid #EA4C61"\n charCount="1"\n shape="round"></ng-letter-avatar>\n </div>\n <mail-note message="mailMessage" ng-switch-when="NOTE"></mail-note>\n <mail-message message="mailMessage" list-id="mailRoom.MailAccount.ListId" ng-switch-default></mail-message>\n </li>\n </ul>\n </div>\n </div>\n <div data-ng-class="panelRight">\n <div class="note note-info" data-ng-if="mailRoom && mailRoom.status == \'CLOSED\'">\n <h4 class="block"><i class="icon-info"></i> {{\'MESSAGE_MAIL_ROOM_CLOSED\' | translate}}!</h4>\n <p>\n <strong>{{\'MESSAGE_MAIL_ROOM_CLOSED_DETAILS\' | translate}}.</strong>\n </p>\n <hr>\n <p>\n <i class="icon-target"></i> {{\'APPLICATION_DISPOSITION\' | translate}}: <strong>{{mailRoom.disposition}}</strong>\n </p>\n <p>\n <i class="icon-calendar"></i> {{\'APPLICATION_UPDATED_AT\' | translate}}: <strong>{{mailRoom.updatedAt | date:\'medium\'}}</strong> (<span am-time-ago="mailRoom.updatedAt"></span>)\n </p>\n </div>\n <form name="forms.compose" data-ng-submit="sendMail()" class="form-horizontal" novalidate>\n <!-- START HEAD -->\n <div class="form">\n <v-accordion class="vAccordion--default" ng-if="mailRoom.status !== \'CLOSED\'">\n <v-pane expanded="expanded">\n <v-pane-header>\n <i class="icon-people"></i> From: {{form.from[0]}}, To: {{form.to[0].email}} <span ng-if="form.to.length > 1">(+{{form.to.length - 1}})</span>\n </v-pane-header>\n <v-pane-content>\n <!-- START FROM -->\n <div class="form-group" data-ng-if="mailRoom.status !== \'CLOSED\'">\n <div class="col-md-12">\n <div class="row">\n <div class="col-md-1">\n <label class="control-label">From:</label>\n </div>\n <div class="col-md-11">\n <ui-select data-ng-model="form.from[0]" data-ng-change="setList($select.selected.ListId)" theme="bootstrap" name="from" required>\n <ui-select-match placeholder="From...">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="mailAccount.address as mailAccount in mailAccounts | filter: $select.search">\n <div data-ng-bind-html="mailAccount.name | highlight: $select.search"></div>\n <small data-ng-bind-html="mailAccount.address | highlight: $select.search"></small>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n </div>\n </div>\n <!-- END FROM -->\n\n <!-- MAIL TO -->\n <div class="form-group" data-ng-if="mailRoom.status !== \'CLOSED\'">\n <div class="col-md-12">\n <div class="row">\n <div class="col-md-1">\n <label class="control-label">To:</label>\n </div>\n <div class="col-md-11">\n <tags-input ng-model="form.to" type="email" display-property="email">\n <auto-complete source="getContacts($query)"></auto-complete>\n </tags-input>\n </div>\n </div>\n </div>\n </div>\n <!-- END TO -->\n\n <!-- START CC -->\n <div class="form-group" data-ng-if="mailRoom.status !== \'CLOSED\'">\n <div class="col-md-12">\n <div class="row">\n <div class="col-md-1">\n <label class="control-label">Cc:</label>\n </div>\n <div class="col-md-11">\n <tags-input ng-model="form.cc" type="email" display-property="email">\n <auto-complete source="getContacts($query)"></auto-complete>\n </tags-input>\n </div>\n </div>\n </div>\n </div>\n <!-- END CC -->\n\n <!-- START BCC -->\n <div class="form-group" data-ng-if="mailRoom.status !== \'CLOSED\'">\n <div class="col-md-12">\n <div class="row">\n <div class="col-md-1">\n <label class="control-label">Bcc:</label>\n </div>\n <div class="col-md-11">\n <tags-input ng-model="form.bcc" type="email" display-property="email">\n <auto-complete source="getContacts($query)"></auto-complete>\n </tags-input>\n </div>\n </div>\n </div>\n </div>\n <!-- END BCC -->\n\n <!-- START SUBJECT -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.compose.subject.$invalid && forms.compose.$submitted}" data-ng-if="mailRoom.status !== \'CLOSED\'">\n <div class="col-md-12">\n <div class="row">\n <div class="col-md-1">\n <label class="control-label">Subj:</label>\n </div>\n <div class="col-md-11">\n <input type="text" name="subject" class="form-control todo-taskbody-taskdesc" placeholder="Subject..." rows="8" data-ng-model="form.subject">\n <span data-ng-if="forms.compose.subject.$invalid && forms.compose.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n </div>\n </div>\n <!-- END SUJBECT -->\n </v-pane-content>\n </v-pane>\n </v-accordion>\n\n <!-- START ATTACH -->\n <div class="form-group" data-ng-if="uploader && (mailRoom.status !== \'CLOSED\')">\n <div class="col-md-12">\n <hr ng-if="uploader.queue.length">\n <table class="table">\n <tbody>\n <tr ng-repeat="item in uploader.queue">\n <td style="border-top:none" rowspan="{{uploader.queue.length}}" ng-if="(!$index)">\n {{\'APPLICATION_ATTACHMENTS\' | translate}}:\n </td>\n <td style="border-top:none"><strong>{{ item.file.name }}</strong></td>\n <td style="border-top:none" ng-show="uploader.isHTML5" nowrap>{{ item.file.size/1024/1024|number:2 }} MB</td>\n <td style="border-top:none" ng-show="uploader.isHTML5">\n <div class="progress" style="margin-bottom: 0;">\n <div class="progress-bar" role="progressbar" ng-style="{ \'width\': item.progress + \'%\' }"></div>\n </div>\n </td>\n <td style="border-top-style:none" class="text-center">\n <span ng-show="item.isSuccess"><i class="glyphicon glyphicon-ok"></i></span>\n <span ng-show="item.isCancel"><i class="glyphicon glyphicon-ban-circle"></i></span>\n <span ng-show="item.isError"><i class="glyphicon glyphicon-remove"></i></span>\n </td>\n <td style="border-top-style:none" nowrap>\n <button type="button" class="btn btn-danger btn-xs" data-ng-click="item.remove()">\n <span class="glyphicon glyphicon-trash"></span> {{\'APPLICATION_REMOVE\' | translate}}\n </button>\n </td>\n </tr>\n </tbody>\n </table>\n <div>\n </div>\n </div>\n </div>\n <!-- END ATTACH -->\n\n <!-- START CANNED -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.compose.subject.$invalid && forms.compose.$submitted}" data-ng-if="mailRoom.status !== \'CLOSED\'">\n <div class="col-md-12">\n <div class="row">\n <div class="col-md-1">\n <a href="#" class="btn btn-icon-only">\n <i class="fa fa-magic" style="color: gray;"></i>\n </a>\n </div>\n <div class="col-md-11">\n <input type="text"\n data-ng-model="modelOptions.selectedAnswer"\n uib-typeahead="key for key in getAnswers($viewValue)"\n placeholder="Canned answers.."\n typeahead-loading="loadingLocations"\n typeahead-no-results="noResults"\n typeahead-on-select="onSelectAnswer($item)"\n class="form-control">\n <i ng-show="loadingLocations" class="glyphicon glyphicon-refresh"></i>\n <div ng-show="noResults">\n <i class="glyphicon glyphicon-remove"></i> No Results Found\n </div>\n <span data-ng-if="forms.compose.subject.$invalid && forms.compose.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n </div>\n </div>\n <!-- END CANNED -->\n\n <!-- START HTML -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.compose.text.$invalid && forms.compose.$submitted}" data-ng-if="mailRoom.status !== \'CLOSED\'">\n <div class="col-md-12">\n <div ckeditor="options" ng-model="form.html" ready="onCKReady($instance)"></div>\n <span data-ng-if="forms.compose.text.$invalid && forms.compose.$submitted" class="help-block help-block-error">\n'+" <strong>{{'APPLICATION_WARNING' | translate}}!</strong> {{'MESSAGE_REQUIRED_FIELD' | translate}}.\n </span>\n </div>\n </div>\n <!-- END HTML -->\n\n </div>\n </form>\n </div>\n </div>\n </div>\n</div>\n</div>\n<!-- END TODO CONTENT -->\n"), -a.put("app/channels/mail/inbox/status/status.modal.html",'<div class="modal-header">\n <button data-ng-if="modal.dismissable" type="button" data-ng-click="$dismiss()" class="close">×</button>\n <h4 data-ng-if="modal.title" data-ng-bind="modal.title | translate" class="modal-title"></h4>\n</div>\n<div class="modal-body">\n <p data-ng-if="modal.text && !closed" ng-bind="modal.text | translate"></p>\n <form name="form" novalidate data-ng-init="initDisposition()">\n <div class="form-group">\n <ui-select data-ng-model="item.disposition" name="disposition" theme="bootstrap" data-ng-disabled="!dispositions.length" required>\n <ui-select-match placeholder="{{\'APPLICATION_DISPOSITION\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="disposition.name as disposition in dispositions | filter: $select.search">\n <div ng-bind-html="disposition.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <div class="note note-warning" data-ng-if="dispositions.length < 1">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_DISPOSITIONS_AVAILABLE\' | translate }}\n </p>\n </div>\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" data-ng-click="ok()">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" data-ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/mail/inbox/view/account/list/list.html",'<!-- BEGIN Portlet PORTLET-->\n<div class="portlet light" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption">\n <div class="btn-group btn-group-solid">\n <button type="button" class="btn btn-sm default" data-ng-model="query.status" uib-btn-radio="\'NEW\'" uib-uncheckable>NEW</button>\n </div>\n <div class="btn-group btn-group-solid">\n <button type="button" class="btn btn-sm default" data-ng-model="query.status" uib-btn-radio="\'OPEN\'" uib-uncheckable>OPEN</button>\n </div>\n <div class="btn-group btn-group-solid">\n <button type="button" class="btn btn-sm default" data-ng-model="query.status" uib-btn-radio="\'PENDING\'" uib-uncheckable>PENDING</button>\n </div>\n <div class="btn-group btn-group-solid">\n <button type="button" class="btn btn-sm default" data-ng-model="query.status" uib-btn-radio="\'CLOSED\'" uib-uncheckable>CLOSED</button>\n </div>\n </div>\n <div class="actions">\n <a href="#" class="btn btn-icon-only default" data-ng-click="getPage();">\n <i class="fa fa-refresh"></i>\n </a>\n <a href="#" class="btn btn-icon-only red" data-ng-click="deleteItems();" data-ng-show="id.length && isAdmin">\n <i class="fa fa-trash"></i>\n </a>\n <a href="#" class="btn btn-icon-only btn-success" data-ng-click="disposeItems();" data-ng-show="id.length">\n <i class="fa fa-upload"></i>\n </a>\n <a href="#" class="btn btn-icon-only blue" data-ng-click="tagItems();" data-ng-show="id.length">\n <i class="fa fa-tags"></i>\n </a>\n <a href="#" class="btn btn-icon-only green" data-ng-click="openRoom(null, \'New Message\')">\n <i class="fa fa-plus"></i>\n </a>\n </div>\n </div>\n <div class="portlet-title" data-ng-show="tags.length">\n <!-- START TAGS -->\n <div class="form-group">\n <div class="row">\n <div class="col-md-1">\n <a href="#" class="btn btn-icon-only">\n <i class="fa fa-tags" style="color: gray;"></i>\n </a>\n </div>\n <div class="col-md-11">\n <ui-select multiple data-ng-model="query.tags" theme="bootstrap" on-select="onChanged($item, $model)" on-remove="onChanged($item, $model)">\n <ui-select-match placeholder="Search by tag...">{{$item}}</ui-select-match>\n <ui-select-choices repeat="tag in tags | filter:$select.search">\n {{tag}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n </div>\n <!-- END TAGS -->\n </div>\n <div class="portlet-body">\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="spinner-grid" spinner-start-active="false"></span>\n <!-- END UI-GRID SPINNER -->\n\n <!-- START TABLE -->\n <div ui-grid="gridOptions" class="ui-grid" ui-grid-auto-resize ui-grid-pagination ui-grid-selection>\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n</div>\n<!-- END Portlet PORTLET-->\n'),a.put("app/channels/mail/inbox/view/view.agents.modal.html",'<div class="modal-header" data-ng-init="initModal()">\n <h3 class="modal-title">{{ \'APPLICATION_AGENTS\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <!-- START TRANSPORT -->\n <div class="form-group">\n <form name="form" novalidate>\n <!-- START TRANSPORT -->\n <div class="form-group">\n <ui-select multiple name="agents" data-ng-model="item.agents" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_AGENTS\' | translate}}">{{$item.fullname}}</ui-select-match>\n <ui-select-choices repeat="agent.id as agent in agents | filter: $select.search">\n {{agent.fullname}}\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END TRANSPORT -->\n </form>\n </div>\n <!-- END TRANSPORT -->\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" data-ng-click="ok()">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" data-ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/mail/inbox/view/view.html",'<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-envelope"></i>\n <a href="#">{{ \'APPLICATION_MAIL\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-note"></i>\n <a href="#">{{ \'APPLICATION_INBOX\' | translate }}</a>\n </li>\n </ul>\n </div>\n </div>\n</div>\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row inbox">\n <div class="col-md-3">\n <ul class="inbox-nav margin-bottom-10">\n <li data-ng-class="{active: $stateParams.id == mailAccount.id}" data-ng-repeat="mailAccount in mailAccounts">\n <a href="/channels/mail/inbox/view/account/{{mailAccount.id}}/list" class="btn">\n <i class="icon-notebook"></i> {{mailAccount.name}}\n </a>\n <b></b>\n </li>\n </ul>\n </div>\n\n <div class="col-md-9" data-ng-init="initView()">\n <!-- BEGIN PROFILE CONTENT -->\n <div class="room-content">\n <div ui-view>\n <div class="note note-info">\n <h4 class="block">Info! {{\'APPLICATION_NO_ACCOUNT_SELECTED\' | translate}}</h4>\n </div>\n </div>\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n\n</div>\n'),a.put("app/channels/mail/inbox/view/view.tags.modal.html",'<div class="modal-header" data-ng-init="initModal()">\n <h3 class="modal-title">{{ \'APPLICATION_TAGS\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <!-- START TRANSPORT -->\n <div class="form-group">\n <form name="form" novalidate>\n <!-- START TAGS -->\n <div class="form-group">\n <ui-select multiple data-ng-model="item.tags" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_TAGS\' | translate}}">{{$item}}</ui-select-match>\n <ui-select-choices repeat="tag in tags | filter: $select.search">\n {{tag}}\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END TAGS -->\n </form>\n </div>\n <!-- END TRANSPORT -->\n</div>\n<div class="modal-footer">\n <button type="button" class="btn" data-ng-class="button.class" data-ng-click="button.click()"data-ng-repeat="button in modal.buttons">{{button.text | translate}}</button>\n <!-- <button class="btn btn-success" type="button" data-ng-click="ok()">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" data-ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button> -->\n</div>\n'),a.put("app/channels/mail/inbox/view/view.templates.modal.html",'<div class="modal-header" data-ng-init="initModal()">\n <h3 class="modal-title">{{ \'APPLICATION_TEMPLATES\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <div class="note note-info" data-ng-show="!templates.length">\n <h4 class="block">Info!</h4>\n <p>\n {{\'MESSAGE_NO_TEMPLATES_AVAILABLE\' | translate}}\n </p>\n </div>\n <form name="form" data-ng-show="templates.length" novalidate>\n <div class="form-group">\n <ui-select data-ng-model="item.template" theme="bootstrap">\n <ui-select-match placeholder="Select a template in the list or search his name...">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="template in templates | propsFilter: {name: $select.search}">\n <div ng-bind-html="template.name | highlight: $select.search"></div>\n <small data-ng-show="template.description">\n {{\'APPLICATION_DESCRIPTION\' | translate}}: {{template.description}}\n </small>\n </ui-select-choices>\n </ui-select>\n </div>\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" data-ng-click="ok()" data-ng-show="templates.length">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" data-ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/mail/queue/list/list.create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_QUEUE\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.name.$touched || form.$submitted) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" data-ng-pattern="settings.patternName" required />\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$invalid && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$invalid && form.name.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_PATTERN_NAME\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START STRATEGY -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.strategy.$touched || form.$submitted) && form.strategy.$invalid}">\n <label class="control-label">{{\'APPLICATION_STRATEGY\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="item.strategy" name="strategy" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected | uppercase}}</ui-select-match>\n <ui-select-choices repeat="strategy in strategies | filter: $select.search">\n <div ng-bind-html="strategy.toUpperCase() | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form.strategy.$touched || form.$submitted) && form.strategy.$invalid && form.strategy.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END STRATEGY -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.timeout.$touched || form.$submitted) && form.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_AGENT_TIMEOUT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" min="0" name="timeout" placeholder="Timeout" class="form-control" data-ng-model="item.timeout" required min="1"/>\n <span data-ng-show="(form.timeout.$touched || form.$submitted) && form.timeout.$invalid && form.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n\n <!-- START AGENTS-->\n <div class="form-body" data-ng-init="getTeams()">\n <label for="penalty">{{\'APPLICATION_PENALTY\' | translate}}</label>\n <div class="input-group input-small mbottom20">\n <input type="number" class="spinner-input form-control" maxlength="3" data-ng-model="item.penalty" readonly>\n <div class="spinner-buttons input-group-btn btn-group-vertical">\n <button type="button" class="btn spinner-up btn-xs blue" data-ng-click="item.penalty=item.penalty+1">\n <i class="fa fa-angle-up"></i>\n </button>\n <button type="button" class="btn spinner-down btn-xs blue" data-ng-disabled="!item.penalty" data-ng-click="item.penalty=item.penalty-1">\n <i class="fa fa-angle-down"></i>\n </button>\n </div>\n </div>\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-team">\n </div>\n </div>\n </div>\n <!-- END AGENTS-->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/mail/queue/list/list.html",'<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-envelope"></i>\n <a href="#">{{ \'APPLICATION_MAIL\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-docs"></i>\n <a href="#">{{ \'APPLICATION_QUEUES\' | translate }}</a>\n </li>\n </ul>\n </div>\n </div>\n</div>\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-docs font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_QUEUES\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group" data-ng-if="Auth.isAdmin()">\n <a class="btn green-jungle" href="#" data-ng-click="createItem()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_QUEUE\' | translate }}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/mail/queue/view/view.agents.html",'<div class="row" data-ng-init="getTeams()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_AGENTS\' | translate}}</span>\n </div>\n </div>\n <div class="note note-warning" data-ng-hide="teams.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_AVAILABLE_TEAMS\' | translate }}\n </p>\n </div>\n <div class="portlet-body">\n <!-- BEGIN FORM-->\n <form action="index.html" class="form-horizontal form-row-seperated">\n <div class="form-body">\n <label for="penalty">{{\'APPLICATION_PENALTY\' | translate}}</label>\n <div class="input-group input-small mbottom20">\n <input type="number" class="spinner-input form-control" maxlength="3" data-ng-model="queue.penalty" readonly>\n <div class="spinner-buttons input-group-btn btn-group-vertical">\n <button type="button" class="btn spinner-up btn-xs blue" data-ng-click="queue.penalty=queue.penalty+1">\n <i class="fa fa-angle-up"></i>\n </button>\n <button type="button" class="btn spinner-down btn-xs blue" data-ng-disabled="!queue.penalty" data-ng-click="queue.penalty=queue.penalty-1">\n <i class="fa fa-angle-down"></i>\n </button>\n </div>\n </div>\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-team">\n </div>\n </div>\n </div>\n </form>\n <!-- END FORM-->\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/mail/queue/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getQueue()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-envelope"></i>\n <a href="#">{{ \'APPLICATION_MAIL\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-docs"></i>\n <a href="/channels/mail/queues/list">{{ \'APPLICATION_QUEUES\' | translate }}</a>\n <i data-ng-show="queue" class="fa fa-angle-right"></i>\n </li>\n <li data-ng-show="queue">\n <a href="#">{{queue.name}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET main.channels -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/queue.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{queue.name}}\n </div>\n <!-- <div class="profile-usertitle-job">\n {{user.role}}\n </div> -->\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.channels.mail.queues.view.settings\')}">\n <a data-ng-href="/channels/mail/queues/view/{{queue.id}}/settings">\n <i class="icon-settings"></i>\n {{ \'APPLICATION_SETTINGS\' | translate}} </a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.channels.mail.queues.view.agents\')}" data-ng-show="Auth.getCurrentUser().role === \'admin\'">\n <a data-ng-href="/channels/mail/queues/view/{{queue.id}}/agents">\n <i class="icon-people"></i>\n {{ \'APPLICATION_AGENTS\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET main.channels -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n </div>\n <!-- END PAGE CONTENT-->\n'),a.put("app/channels/mail/queue/view/view.settings.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_SETTINGS\' | translate}}</span>\n </div>\n </div>\n <div class="portlet-body">\n <form name="forms.general" data-ng-submit="forms.general.$valid && updateMailQueue()" novalidate>\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="queue.name" data-ng-pattern="settings.patternName" required />\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid && forms.general.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid && forms.general.name.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_PATTERN_NAME\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="queue.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n <!-- START TIMEOUT -->\n <div class="form-group">\n <label class="control-label">Agent Timeout</label>\n <input type="number" name="timeout" placeholder="Timeout" class="form-control" min="1" data-ng-model="queue.timeout"/>\n </div>\n <!-- END TIMEOUT -->\n\n <!-- START STRATEGY -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.strategy.$touched || forms.general.$submitted) && forms.general.strategy.$invalid}">\n <label class="control-label">{{\'APPLICATION_STRATEGY\' | translate}}</label>\n <ui-select data-ng-model="queue.strategy" name="strategy" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected | uppercase}}</ui-select-match>\n <ui-select-choices repeat="strategy in strategies | filter: $select.search">\n <div ng-bind-html="strategy.toUpperCase() | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END STRATEGY -->\n\n <input data-ng-if="Auth.isAdmin()" class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/mail/realtime/view/agent/agent.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initAgents()">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns class="ui-grid" ui-grid-tree-view ui-grid-expandable-row ui-grid-pagination ui-grid-auto-resize>\n <span us-spinner spinner-key="grid-spinner" spinner-start-active="true"></span>\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/mail/realtime/view/agent/agent.modal.info.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_INTERFACE_INFO\' | translate }}</h3>\n</div>\n<div class="modal-body">\n<div data-ng-if="agent.ipaddr" class="well">\n <div>{{agent.ipaddr}}:{{agent.port}}</div>\n <div>{{agent.fullcontact}}</div>\n <div>{{agent.useragent}}</div>\n <div>{{agent.lastms}}</div>\n</div>\n<div data-ng-if="!agent.ipaddr" class="alert alert-danger" role="alert">\n {{\'MESSAGE_NO_AVAILABLE_INFO\' | translate}}\n</div>\n</div>\n<div class="modal-footer">\n <button class="btn default" type="button" ng-click="close()">{{ \'APPLICATION_CLOSE\' | translate }}</button>\n</div>\n'),a.put("app/channels/mail/realtime/view/agent/queue.modal.add.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_JOIN_QUEUE\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <div class="form-group row">\n <label class="col-md-2 control-label" style="margin-top: 7px;">{{\'APPLICATION_QUEUE\' | translate}}:</label>\n <div class="col-md-10">\n <ui-select multiple ng-model="item.queues" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_QUEUE\' | translate}}">{{$item.name}}</ui-select-match>\n <ui-select-choices repeat="queue.id as queue in queues | filter: $select.search">\n <div ng-bind-html="queue.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n</div>\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/mail/realtime/view/application/application.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initApplications()">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns class="ui-grid" ui-grid-auto-resize>\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/mail/realtime/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-envelope"></i>\n <a href="#">{{ \'APPLICATION_MAIL\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-energy"></i>\n <a href="#">{{ \'APPLICATION_REALTIME\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <div>\n <nav class="navbar navbar-default" role="navigation">\n <div class="collapse navbar-collapse">\n <ul class="nav navbar-nav">\n <li data-ng-class="{\'active\': $state.is(\'main.channels.mail.realtime.view.agents\')}">\n <a href="/channels/mail/realtime/view/agents">\n {{\'APPLICATION_AGENTS\' | translate}}\n </a>\n </li>\n <li data-ng-class="{\'active\': $state.is(\'main.channels.mail.realtime.view.applications\')}">\n <a href="/channels/mail/realtime/view/applications">\n {{\'APPLICATION_APPLICATIONS\' | translate}}\n </a>\n </li>\n </ul>\n </div>\n </nav>\n </div>\n\n <div ui-view></div>\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/mail/realtime/view/view.queue.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initAgents()">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div id="grid1" ui-grid="gridOptions" ui-grid-resize-columns ui-grid-tree-view class="grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/openchannel/account/list/list.html",'<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-globe"></i>\n <a href="#">{{ \'APPLICATION_OPEN_CHANNEL\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-notebook"></i>\n <a href="/channels/openchannel/accounts/list">{{ \'APPLICATION_ACCOUNTS\' | translate }}</a>\n </li>\n </ul>\n </div>\n </div>\n</div>\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-notebook font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_ACCOUNTS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group">\n <a class="btn btn-default" href="#" data-ng-click="gridOptions.getPage();">\n <i class="icon-reload"></i>\n </a>\n </div>\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <a class="btn green-jungle" href="/channels/openchannel/accounts/wizard">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_ACCOUNT\' | translate }}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/openchannel/account/view/action/list/list.html",'<div class="row" data-ng-init="initActions()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_ACTIONS\' | translate}}</span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <a class="btn green-jungle" href="/channels/openchannel/accounts/view/{{account.id}}/actions/wizard" data-toggle="dropdown">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_ACTION\' | translate }}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n </div>\n</div>\n'), -a.put("app/channels/openchannel/account/view/action/view/view.html",'\n<div class="row" data-ng-init="initAction()">\n <div class="col-md-12">\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-directions font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_ACTION\' | translate }}</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <form name="forms.settings" ng-submit="updateItem()" novalidate>\n <!-- START APP -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.app.$touched || forms.settings.$submitted) && forms.settings.app.$invalid}">\n <label class="control-label">{{ \'APPLICATION_APPLICATION\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.app" name="app" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_APPLICATION\' | translate }}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="app.value as app in apps | filter: $select.search">\n <div ng-bind-html="app.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.app.$touched || forms.settings.$submitted) && forms.settings.app.$invalid && forms.settings.app.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END APP -->\n\n <div class="app-settings" ng-slide-down="application.app === \'queue\'" lazy-render duration="1" data-ng-init="getQueues()">\n <!-- START QUEUE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.queue.$touched || forms.settings.$submitted) && forms.settings.queue.$invalid}">\n <label class="control-label">{{\'APPLICATION_QUEUE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.OpenchannelQueueId" name="queue" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="queue.id as queue in queues | filter: $select.search">\n <div ng-bind-html="queue.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="queues.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_QUEUES_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/channels/openchannel/queues/list">{{\'APPLICATION_QUEUES\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.settings.queue.$touched || forms.settings.$submitted) && forms.settings.queue.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END QUEUE -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="number" name="timeout" placeholder="{{\'APPLICATION_TIMEOUT\' | translate}}" class="form-control" data-ng-model="application.timeout" min="1" required/>\n <span data-ng-show="(forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid && forms.settings.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.app === \'agent\'" lazy-render duration="1" data-ng-init="getAgents()">\n <!-- START AGENT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.agent.$touched || forms.settings.$submitted) && forms.settings.agent.$invalid}">\n <label class="control-label">{{\'APPLICATION_AGENT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.UserId" name="agent" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.fullname}}</ui-select-match>\n <ui-select-choices repeat="agent.id as agent in agents | filter: $select.search">\n <div ng-bind-html="agent.fullname | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="agents.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_AGENTS_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/staff/agents/list">{{\'APPLICATION_QUEUES\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.settings.agent.$touched || forms.settings.$submitted) && forms.settings.agent.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END AGENT -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="number" name="timeout" placeholder="{{\'APPLICATION_TIMEOUT\' | translate}}" class="form-control" data-ng-model="application.timeout" min="1" required/>\n <span data-ng-show="(forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid && forms.settings.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.app === \'sendMail\'" lazy-render duration="1" data-ng-init="getMailAccounts();getTemplates()">\n <!-- START SENDMAIL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TO\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="email" name="to" placeholder="{{\'APPLICATION_TO\' | translate}}" class="form-control" data-ng-model="application.data2" min="1" required/>\n <span data-ng-show="(forms.settings.from.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid && forms.settings.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.mail.$touched || forms.settings.$submitted) && forms.settings.account.$invalid}">\n <label class="control-label">{{\'APPLICATION_ACCOUNT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data8" name="account" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="account.id as account in mailAccounts | filter: $select.search">\n <div ng-bind-html="account.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.account.$touched || forms.settings.$submitted) && forms.settings.account.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.template.$touched || forms.settings.$submitted) && forms.settings.template.$invalid}">\n <label class="control-label">{{\'APPLICATION_TEMPLATE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data9" name="template" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="template.id as template in templates | filter: $select.search">\n <div ng-bind-html="template.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.template.$touched || forms.settings.$submitted) && forms.settings.template.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END SENDMAIL -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.app === \'sendSms\'" lazy-render duration="1" data-ng-init="getSmsAccounts()">\n <!-- START SENDSms -->\n <div class="app-settings" ng-slide-down="application.app === \'sendSms\'" lazy-render duration="1">\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.to.$touched || forms.settings.$submitted) && forms.settings.to.$invalid}">\n <label class="control-label">{{\'APPLICATION_TO\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" ng-pattern="/^[\\+]?[0-9]+$/" name="to" placeholder="{{\'APPLICATION_TO\' | translate}}" class="form-control" data-ng-model="application.data2" required/>\n <span data-ng-show="(forms.settings.to.$touched || forms.settings.$submitted) && forms.settings.to.$invalid && forms.settings.to.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.account.$touched || forms.settings.$submitted) && forms.settings.account.$invalid}">\n <label class="control-label">{{\'APPLICATION_ACCOUNT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data8" name="account" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="account.id as account in smsAccounts | filter: $select.search">\n <div ng-bind-html="account.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.account.$touched || forms.settings.$submitted) && forms.settings.account.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.text.$touched || forms.text.$submitted) && forms.settings.text.$invalid}">\n <label class="control-label">{{\'APPLICATION_TEXT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <textarea id="text" class="form-control maxlength-handler" maxlength="160" name="text" data-ng-model="application.data6" required></textarea>\n <span data-ng-show="(forms.settings.text.$touched || forms.settings.$submitted) && forms.settings.text.$invalid && forms.settings.text.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n\n <!-- END SENDSms -->\n </div>\n\n <!-- START INTERVAL_TYPE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.intType.$touched || forms.settings.$submitted) && forms.settings.intType.$invalid}">\n <label class="control-label">{{ \'APPLICATION_INTERVAL_TYPE\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.intType" theme="bootstrap" name="intType" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="intType.value as intType in $application.intTypes | filter: $select.search">\n {{ intType.name | translate }}\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.intType.$touched || forms.settings.$submitted) && forms.settings.intType.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERVAL_TYPE -->\n\n <div class="app-settings" ng-slide-down="application.intType === \'custom\'" lazy-render duration="1">\n <!-- START TIME -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_TIME\' | translate }}</label>\n <div class="input-group input-large">\n <fieldset class="pull-left" ng-disabled="application.alwaysTime">\n <uib-timepicker name="t_from" data-ng-model="application.t_from" show-meridian="false" show-spinners="false" mousewheel="false"></uib-timepicker>\n </fieldset>\n <div class="input-group-addon col-md-1 interval-to pull-left">to</div>\n <fieldset ng-disabled="application.alwaysTime"><uib-timepicker name="t_to" data-ng-model="application.t_to" show-meridian="false" show-spinners="false" mousewheel="false"></uib-timepicker></fieldset>\n <!-- <label class="control-label pointer-cursor"><input type="checkbox" data-ng-model="application.alwaysTime">{{\'APPLICATION_ALWAYS\' | translate}}</label> -->\n </div>\n </div>\n <!-- END TIME -->\n\n <!-- START ALWAYS -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_ALWAYS\' | translate }}</label>\n <div class="input-group input-large">\n <label class="control-label pointer-cursor">\n <input\n bs-switch\n data-ng-model="application.alwaysTime"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n <!-- <input type="checkbox" data-ng-model="application.alwaysTime"> -->\n </label>\n </div>\n </div>\n <!-- END ALWAYS -->\n\n <!-- START WEEKDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_WEEKDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="application.wd_from" theme="bootstrap" name="wd_from">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{ weekDay.name | translate}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="application.wd_to" theme="bootstrap" name="wd_to">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{ weekDay.name | translate }}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END WEEKDAY -->\n\n <!-- START MONTHDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTHDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="application.md_from" theme="bootstrap" name="md_from">\n <ui-select-match allow-clear>{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search" ui-disable-choice="application.md_to && application.md_to!==\'always\' && monthDay>application.md_to && monthDay!==\'always\'">\n {{monthDay}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="application.md_to" theme="bootstrap" name="md_to">\n <ui-select-match allow-clear>{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search" ui-disable-choice="application.md_from && application.md_from!==\'always\' && monthDay<application.md_from && monthDay!==\'always\'">\n {{monthDay}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTHDAY -->\n\n <!-- START MONTH -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTH\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="application.m_from" theme="bootstrap" name="m_from">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{ month.name | translate }}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="application.m_to" theme="bootstrap" name="m_to">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{ month.name | translate }}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTH -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.intType === \'list\'" lazy-render duration="1" data-ng-init="getIntervals()">\n\n <!-- START INTERVALS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.IntervalId.$touched || forms.settings.$submitted) && forms.settings.IntervalId.$invalid}">\n <label class="control-label">{{\'APPLICATION_INTERVALS\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.IntervalId" theme="bootstrap" name="IntervalId" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{ $select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="interval.id as interval in intervals | filter: $select.search">\n {{ interval.name}}\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="intervals.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_INTERVAL_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/tools/intervals/list">{{\'APPLICATION_INTERVALS\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.settings.IntervalId.$touched || forms.settings.$submitted) && forms.settings.IntervalId.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERVALS -->\n\n </div>\n <button class="btn green-haze" type="submit">{{\'APPLICATION_UPDATE\' | translate}}</button>\n </form>\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/openchannel/account/view/action/wizard/wizard.html",'<div class="row" data-ng-init="initWizard()">\n <div class="col-md-12">\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-directions font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_ACTION\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="createItem()">\n <wz-step title="{{\'APPLICATION_APPLICATION\' | translate}}" canexit="formValidation(forms.action.$valid)">\n <form name="forms.action" novalidate>\n <!-- START APP -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.action.$submitted && forms.action.app.$invalid}">\n <label class="control-label">{{ \'APPLICATION_APPLICATION\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.app" name="app" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_APPLICATION\' | translate }}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="app.value as app in apps | filter: $select.search">\n <div ng-bind-html="app.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.action.$submitted && forms.action.app.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END APP -->\n\n <div class="app-settings" ng-slide-down="application.app === \'agent\'" lazy-render duration="1" data-ng-init="getAgents()">\n <!-- START AGENT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.agent.$touched || forms.action.$submitted) && forms.action.agent.$invalid}">\n <label class="control-label">{{\'APPLICATION_AGENT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.UserId" name="agent" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.fullname}}</ui-select-match>\n <ui-select-choices repeat="agent.id as agent in agents | filter: $select.search">\n <div ng-bind-html="agent.fullname | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="agents.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_AGENTS_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/staff/agents/list">{{\'APPLICATION_QUEUES\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.action.agent.$touched || forms.action.$submitted) && forms.action.agent.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END AGENT -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.timeout.$touched || forms.action.$submitted) && forms.action.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="number" name="timeout" placeholder="{{\'APPLICATION_TIMEOUT\' | translate}}" class="form-control" data-ng-model="application.timeout" min="1" required/>\n <span data-ng-show="(forms.action.timeout.$touched || forms.action.$submitted) && forms.action.timeout.$invalid && forms.action.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n\n </div>\n\n <div class="app-settings" ng-slide-down="application.app === \'queue\'" lazy-render duration="1" data-ng-init="getQueues()">\n <!-- START QUEUE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.queue.$touched || forms.action.$submitted) && forms.action.queue.$invalid}">\n <label class="control-label">{{\'APPLICATION_QUEUE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.ChatQueueId" name="queue" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="queue.id as queue in queues | filter: $select.search">\n <div ng-bind-html="queue.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="queues.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_QUEUES_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/channels/openchannel/queues/list">{{\'APPLICATION_QUEUES\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.action.queue.$touched || forms.action.$submitted) && forms.action.queue.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END QUEUE -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.timeout.$touched || forms.action.$submitted) && forms.action.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="number" name="timeout" placeholder="{{\'APPLICATION_TIMEOUT\' | translate}}" class="form-control" data-ng-model="application.timeout" min="1" required/>\n <span data-ng-show="(forms.action.timeout.$touched || forms.action.$submitted) && forms.action.timeout.$invalid && forms.action.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.app === \'sendMail\'" lazy-render duration="1" data-ng-init="getMailAccounts();getTemplates()">\n <!-- START SENDMAIL -->\n <div class="app-settings" ng-slide-down="application.app === \'sendMail\'" lazy-render duration="1">\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.timeout.$touched || forms.action.$submitted) && forms.action.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TO\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="email" name="to" placeholder="{{\'APPLICATION_TO\' | translate}}" class="form-control" data-ng-model="application.data2" min="1" required/>\n <span data-ng-show="(forms.action.from.$touched || forms.action.$submitted) && forms.action.timeout.$invalid && forms.action.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.mail.$touched || forms.action.$submitted) && forms.action.account.$invalid}">\n <label class="control-label">{{\'APPLICATION_ACCOUNT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data8" name="account" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="account.id as account in mailAccounts | filter: $select.search">\n <div ng-bind-html="account.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.action.account.$touched || forms.action.$submitted) && forms.action.account.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.template.$touched || forms.action.$submitted) && forms.action.template.$invalid}">\n <label class="control-label">{{\'APPLICATION_TEMPLATE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data9" name="template" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="template.id as template in templates | filter: $select.search">\n <div ng-bind-html="template.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.action.template.$touched || forms.action.$submitted) && forms.action.template.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END SENDMAIL -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.app === \'sendSms\'" lazy-render duration="1" data-ng-init="getSmsAccounts()">\n <!-- START SENDSms -->\n <div class="app-settings" ng-slide-down="application.app === \'sendSms\'" lazy-render duration="1">\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.to.$touched || forms.action.$submitted) && forms.action.to.$invalid}">\n <label class="control-label">{{\'APPLICATION_TO\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" ng-pattern="/^[\\+]?[0-9]+$/" name="to" placeholder="{{\'APPLICATION_TO\' | translate}}" class="form-control" data-ng-model="application.data2" required/>\n <span data-ng-show="(forms.action.to.$touched || forms.action.$submitted) && forms.action.to.$invalid && forms.action.to.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.account.$touched || forms.action.$submitted) && forms.action.account.$invalid}">\n <label class="control-label">{{\'APPLICATION_ACCOUNT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data8" name="account" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="account.id as account in smsAccounts | filter: $select.search">\n <div ng-bind-html="account.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.action.account.$touched || forms.action.$submitted) && forms.action.account.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.text.$touched || forms.action.$submitted) && forms.action.text.$invalid}">\n <label class="control-label">{{\'APPLICATION_TEXT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <textarea id="text" class="form-control maxlength-handler" maxlength="160" name="text" data-ng-model="application.data6" required></textarea>\n <span data-ng-show="(forms.action.text.$touched || forms.action.$submitted) && forms.action.text.$invalid && forms.action.text.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n\n <!-- END SENDSms -->\n </div>\n\n <!-- START INTERVAL_TYPE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.intType.$touched || forms.action.$submitted) && forms.action.intType.$invalid}">\n <label class="control-label">{{ \'APPLICATION_INTERVAL_TYPE\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.intType" theme="bootstrap" name="intType" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="intType.value as intType in $application.intTypes | filter: $select.search">\n {{ intType.name | translate }}\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.action.intType.$touched || forms.action.$submitted) && forms.action.intType.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERVAL_TYPE -->\n\n <div class="app-settings" ng-slide-down="application.intType === \'custom\'" lazy-render duration="1">\n <!-- START TIME -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_TIME\' | translate }}</label>\n <div class="input-group input-large">\n <fieldset class="pull-left" ng-disabled="application.alwaysTime">\n <uib-timepicker name="t_from" data-ng-model="application.t_from" show-meridian="false" show-spinners="false" mousewheel="false"></uib-timepicker>\n </fieldset>\n <div class="input-group-addon col-md-1 interval-to pull-left">to</div>\n <fieldset ng-disabled="application.alwaysTime">\n <uib-timepicker name="t_to" data-ng-model="application.t_to" show-meridian="false" show-spinners="false" mousewheel="false"></uib-timepicker>\n </fieldset>\n <!-- <label class="control-label pointer-cursor"><input type="checkbox" data-ng-model="application.alwaysTime">{{\'APPLICATION_ALWAYS\' | translate}}</label> -->\n </div>\n </div>\n <!-- END TIME -->\n\n <!-- START ALWAYS -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_ALWAYS\' | translate }}</label>\n <div class="input-group input-large">\n <label class="control-label pointer-cursor">\n <input\n bs-switch\n data-ng-model="application.alwaysTime"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n <!-- <input type="checkbox" data-ng-model="application.alwaysTime"> -->\n </label>\n </div>\n </div>\n <!-- END ALWAYS -->\n\n <!-- START WEEKDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_WEEKDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="application.wd_from" theme="bootstrap" name="wd_from">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{ weekDay.name | translate}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="application.wd_to" theme="bootstrap" name="wd_to">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{ weekDay.name | translate }}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END WEEKDAY -->\n\n <!-- START MONTHDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTHDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="application.md_from" theme="bootstrap" name="md_from">\n <ui-select-match allow-clear>{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search" ui-disable-choice="application.md_to && application.md_to!==\'always\' && monthDay>application.md_to && monthDay!==\'always\'">\n {{monthDay}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="application.md_to" theme="bootstrap" name="md_to">\n <ui-select-match allow-clear>{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search" ui-disable-choice="application.md_from && application.md_from!==\'always\' && monthDay<application.md_from && monthDay!==\'always\'">\n {{monthDay}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTHDAY -->\n\n <!-- START MONTH -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTH\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="application.m_from" theme="bootstrap" name="m_from">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{ month.name | translate }}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="application.m_to" theme="bootstrap" name="m_to">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{ month.name | translate }}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTH -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.intType === \'list\'" lazy-render duration="1" data-ng-init="getIntervals()">\n\n <!-- START INTERVALS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.IntervalId.$touched || forms.action.$submitted) && forms.action.IntervalId.$invalid}">\n <label class="control-label">{{\'APPLICATION_INTERVALS\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.IntervalId" theme="bootstrap" name="IntervalId" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{ $select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="interval.id as interval in intervals | filter: $select.search">\n {{ interval.name}}\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="intervals.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_INTERVAL_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/tools/intervals/list">{{\'APPLICATION_INTERVALS\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.action.IntervalId.$touched || forms.action.$submitted) && forms.action.IntervalId.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERVALS -->\n\n </div>\n\n <input class="btn green-haze" type="submit" data-ng-click="next()" value="{{\'APPLICATION_CONTINUE\' | translate}}" />\n </form>\n </wz-step>\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n <input class="btn green-haze" type="submit" data-ng-click="next()" value="{{\'APPLICATION_CONFIRM\' | translate}}" />\n </wz-step>\n </wizard>\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'), -a.put("app/channels/openchannel/account/view/api/view/view.html",'<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_API\' | translate}}</span>\n </div>\n </div>\n <div class="portlet-body">\n <div class="tab-content">\n <div class="tab-pane active" id="tab_1_1">\n <!-- START API -->\n <div class="row" >\n <div class="col-md-12">\n <label class="control-label">Receive URL</label>\n </div>\n </div>\n <div class="row" >\n <div class="col-md-11">\n <code-mirror model="receiveurl"></code-mirror>\n </div>\n <div class="col-md-1">\n <a class="btn btn-sm green-jungle" data-ng-click="copyToClipboard(receiveurl);"><i class="fa fa-clipboard"></i>\n </a>\n </div>\n </div>\n <!-- END API -->\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/openchannel/account/view/disposition/modal/add.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_DISPOSITIONS\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.form.$touched || form.$submitted) && form.form.$invalid}">\n <div class="">\n <input type="text" name="form" placeholder="{{\'APPLICATION_DISPOSITION\' | translate}}" class="form-control" data-ng-model="name" required/>\n <span data-ng-show="form.form.$touched && form.form.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n <!-- END NAME -->\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" data-ng-click="ok()" data-ng-show="form.$valid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" data-ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/openchannel/account/view/disposition/view/view.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_DISPOSITIONS\' | translate}}</span>\n </div>\n <div class="actions actions-md">\n <a href="#" class="btn btn-icon-only green" data-ng-click="addDisposition();">\n <i class="fa fa-plus"></i>\n </a>\n </div>\n </div>\n <div class="portlet-body" data-ng-init="initView()">\n <div class="tab-content">\n <div class="row" data-ng-hide="dispositions.length">\n <div class="col-md-12">\n <div class="note note-info">\n <h4 class="block">Info! {{\'MESSAGE_NO_DISPOSITIONS_AVAILABLE\' | translate}}</h4>\n </div>\n </div>\n </div>\n\n <!-- GENERAL TAB -->\n <div class="row" data-ng-repeat="disposition in dispositions">\n <div class="col-md-12 form-group">\n <div class="input-group">\n <div>\n <input class="form-control" type="text" placeholder="{{\'APPLICATION_DISPOSITION\' | translate}}" data-ng-model="disposition.name">\n </div>\n <span class="input-group-btn">\n <button class="btn btn-success" type="button" data-ng-click="updateDisposition(disposition.id, disposition.name);"><i class="fa fa-cloud-upload fa-fw"></i> {{\'APPLICATION_UPDATE\' | translate}}</button>\n <button class="btn btn-danger" type="button" data-ng-click="deleteDisposition(disposition.id);"><i class="fa fa-times fa-fw"></i> {{\'APPLICATION_DELETE\' | translate}}</button>\n </span>\n </div>\n </div>\n </div>\n <!-- END GENERAL TAB -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/openchannel/account/view/hooks/view/view.html",'<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_HOOKS\' | translate}}</span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_SEND\' | translate}}</a>\n </li>\n <li >\n <a href="#" data-target="#tab_1_2" data-toggle="tab">{{\'APPLICATION_ACCEPT\' | translate}}</a>\n </li>\n <li >\n <a href="#" data-target="#tab_1_3" data-toggle="tab">{{\'APPLICATION_REJECT\' | translate}}</a>\n </li>\n <li >\n <a href="#" data-target="#tab_1_4" data-toggle="tab">{{\'APPLICATION_CLOSE\' | translate}}</a>\n </li>\n </ul>\n </div>\n <div class="portlet-body">\n <div class="tab-content">\n <!-- START REPLY TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.info" data-ng-submit="forms.info.$valid && updateItem()" novalidate>\n <div class="row">\n <div class="form-group col-md-4" data-ng-class="{\'has-error\': (forms.info.method.$touched || forms.info.$submitted) && forms.info.method.$invalid}">\n <label class="control-label">{{\'APPLICATION_METHOD\' | translate}}</label>\n <ui-select data-ng-model="account.replyMethod" name="method" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_METHOD\' | translate}}">{{$select.selected.name | uppercase}}</ui-select-match>\n <ui-select-choices repeat="type.value as type in types | filter: $select.search" >\n <div ng-bind-html="type.name | highlight: $select.search | uppercase" ></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.info.method.$touched || forms.info.$submitted) && forms.info.method.$invalid && forms.info.method.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div class="form-group col-md-8" data-ng-class="{\'has-error\': (forms.info.url.$touched || forms.info.$submitted) && forms.info.url.$invalid}">\n <label class="control-label">{{\'APPLICATION_URL\' | translate}}</label>\n <input type="url" name="url" placeholder="{{\'APPLICATION_URL\' | translate}}" class="form-control" data-ng-model="account.replyUrl" ng-required="account.replyMethod"/>\n <span data-ng-show="(forms.info.url.$touched || forms.info.$submitted) && forms.info.url.$invalid && forms.info.url.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END REPLY TAB -->\n\n <!-- START ACCEPT TAB -->\n <div class="tab-pane" id="tab_1_2">\n <form name="forms.accept" data-ng-submit="forms.accept.$valid && updateItem()" novalidate>\n <div class="row">\n <div class="form-group col-md-4" data-ng-class="{\'has-error\': (forms.accept.method.$touched || forms.accept.$submitted) && forms.accept.method.$invalid}">\n <label class="control-label">{{\'APPLICATION_METHOD\' | translate}}</label>\n <ui-select data-ng-model="account.acceptMethod" name="method" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_METHOD\' | translate}}">{{$select.selected.name | uppercase}}</ui-select-match>\n <ui-select-choices repeat="type.value as type in types | filter: $select.search">\n <div ng-bind-html="type.name | highlight: $select.search | uppercase" ></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.accept.method.$touched || forms.accept.$submitted) && forms.accept.method.$invalid && forms.accept.method.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div class="form-group col-md-8" data-ng-class="{\'has-error\': (forms.accept.url.$touched || forms.accept.$submitted) && forms.accept.url.$invalid}">\n <label class="control-label">{{\'APPLICATION_URL\' | translate}}</label>\n <input type="url" name="url" placeholder="{{\'APPLICATION_URL\' | translate}}" class="form-control" data-ng-model="account.acceptUrl" ng-required="account.acceptMethod"/>\n <span data-ng-show="(forms.accept.url.$touched || forms.accept.$submitted) && forms.accept.url.$invalid && forms.accept.url.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n <!-- START ACTIONS-->\n <div class="row" ng-repeat = "action in account.actions">\n <div ng-switch="action.action">\n <div ng-switch-when="pause">\n <div class="form-group col-md-4">\n <label class="control-label">{{\'APPLICATION_PAUSE\' | translate}}</label></br>\n <input\n bs-switch\n data-ng-change="resetActionData(action)"\n data-ng-model="action.enabled"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_ENABLED\' | translate }}"\n switch-off-text="{{ \'APPLICATION_DISABLED\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n </div>\n <div ng-if="action.enabled" class="form-group col-md-8">\n <label class="control-label">{{\'APPLICATION_TYPE\' | translate}}</label>\n <ui-select name="action" data-ng-model="action.type" theme="bootstrap" >\n <ui-select-match placeholder="{{\'APPLICATION_TYPE\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat=" pause.name as pause in pauses | filter: $select.search">\n <div ng-bind-html="pause.name | highlight: $select.search | uppercase" ></div>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n </div>\n </div>\n <!-- END ACTION -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END ACCEPT TAB -->\n <!-- START REJECT TAB -->\n <div class="tab-pane" id="tab_1_3">\n <form name="forms.reject" data-ng-submit="forms.reject.$valid && updateItem()" novalidate>\n <div class="row">\n <div class="form-group col-md-4" data-ng-class="{\'has-error\': (forms.reject.method.$touched || forms.reject.$submitted) && forms.reject.method.$invalid}">\n <label class="control-label">{{\'APPLICATION_METHOD\' | translate}}</label>\n <ui-select data-ng-model="account.rejectMethod" name="method" theme="bootstrap" >\n <ui-select-match placeholder="{{\'APPLICATION_METHOD\' | translate}}">{{$select.selected.name | uppercase}}</ui-select-match>\n <ui-select-choices repeat="type.value as type in types | filter: $select.search">\n <div ng-bind-html="type.name | highlight: $select.search | uppercase" ></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.reject.method.$touched || forms.reject.$submitted) && forms.reject.method.$invalid && forms.reject.method.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div class="form-group col-md-8" data-ng-class="{\'has-error\': (forms.reject.url.$touched || forms.reject.$submitted) && forms.reject.url.$invalid}">\n <label class="control-label">{{\'APPLICATION_URL\' | translate}}</label>\n <input type="url" name="url" placeholder="{{\'APPLICATION_URL\' | translate}}" class="form-control" data-ng-model="account.rejectUrl" ng-required="account.rejectMethod"/>\n <span data-ng-show="(forms.reject.url.$touched || forms.reject.$submitted) && forms.reject.url.$invalid && forms.reject.url.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END REJECT TAB -->\n <!-- START CLOSE TAB -->\n <div class="tab-pane" id="tab_1_4">\n <form name="forms.close" data-ng-submit="forms.close.$valid && updateItem()" novalidate>\n <div class="row">\n <div class="form-group col-md-4" data-ng-class="{\'has-error\': (forms.close.method.$touched || forms.close.$submitted) && forms.close.method.$invalid}">\n <label class="control-label">{{\'APPLICATION_METHOD\' | translate}}</label>\n <ui-select data-ng-model="account.closeMethod" name="method" theme="bootstrap" >\n <ui-select-match placeholder="{{\'APPLICATION_METHOD\' | translate}}">{{$select.selected.name | uppercase}}</ui-select-match>\n <ui-select-choices repeat="type.value as type in types | filter: $select.search">\n <div ng-bind-html="type.name | highlight: $select.search | uppercase" ></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.close.method.$touched || forms.close.$submitted) && forms.close.method.$invalid && forms.close.method.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div class="form-group col-md-8" data-ng-class="{\'has-error\': (forms.close.url.$touched || forms.close.$submitted) && forms.close.url.$invalid}">\n <label class="control-label">{{\'APPLICATION_URL\' | translate}}</label>\n <input type="url" name="url" placeholder="{{\'APPLICATION_URL\' | translate}}" class="form-control" data-ng-model="account.closeUrl" ng-required="account.closeMethod"/>\n <span data-ng-show="(forms.close.url.$touched || forms.close.$submitted) && forms.close.url.$invalid && forms.close.url.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END CLOSE TAB -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/openchannel/account/view/setting/view/view.html",'<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_SETTINGS\' | translate}}</span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_GENERALS\' | translate}}</a>\n </li>\n </ul>\n </div>\n <div class="portlet-body">\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.info" data-ng-submit="forms.info.$valid && updateItem()" novalidate>\n <!-- START ID -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_ID\' | translate}}<span class="required" aria-required="true">*</span>\n </label>\n <input type="text" name="id" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="account.id" ng-disabled="true" required/>\n </div>\n <!-- END ID-->\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="account.name" required/>\n <span data-ng-show="(forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid && forms.info.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n <!-- START LIST -->\n <div class="form-group" data-ng-if="license.cm">\n <label class="control-label">{{\'APPLICATION_LIST\' | translate}}</label>\n <div class="input-group">\n\n <ui-select data-ng-model="account.ListId" name="list" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_LIST\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="list.id as list in lists | filter: $select.search">\n <div ng-bind-html="list.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n\n <span class="input-group-btn">\n <button type="button" data-ng-click="account.ListId = null" class="btn btn-default">\n <span class="glyphicon glyphicon-trash"></span>\n </button>\n </span>\n\n </div>\n </div>\n <!-- END LIST -->\n <!-- START FIDELITY -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_FIDELITY\' | translate}}</label></br>\n <input\n bs-switch\n data-ng-model="account.fidelity"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_ENABLED\' | translate }}"\n switch-off-text="{{ \'APPLICATION_DISABLED\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n </div>\n <!-- END FIDELITY -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-if="account.fidelity" data-ng-class="{\'has-error\': (forms.info.timeout.$touched || forms.info.$submitted) && forms.info.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" min="0" name="timeout" placeholder="{{\'APPLICATION_PORT\' | translate}}" class="form-control" data-ng-model="account.timeout" required/>\n <span data-ng-show="(forms.info.timeout.$touched || forms.info.$submitted) && forms.info.timeout.$invalid && forms.info.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.info.timeout.$touched || forms.info.$submitted) && forms.info.timeout.$invalid && forms.info.timeout.$error.number" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_NUMERIC_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="account.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n <!-- START CUSTOM -->\n <!-- <div class="form-group">\n <label class="control-label">{{\'APPLICATION_REPLY\' | translate}}</label></br>\n <input\n bs-switch\n data-ng-model="account.reply"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_ENABLED\' | translate }}"\n switch-off-text="{{ \'APPLICATION_DISABLED\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n </div> -->\n <!-- START REPLY HOOK -->\n <!-- <div ng-if= "account.reply" class="row">\n <div class="form-group col-md-4" data-ng-class="{\'has-error\': (forms.info.method.$touched || forms.info.$submitted) && forms.info.method.$invalid}">\n <label class="control-label">{{\'APPLICATION_METHOD\' | translate}}</label>\n <ui-select data-ng-model="account.replyMethod" name="method" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_METHOD\' | translate}}">{{$select.selected.name | uppercase}}</ui-select-match>\n <ui-select-choices repeat="type.value as type in types | filter: $select.search" >\n <div ng-bind-html="type.name | highlight: $select.search | uppercase" ></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.info.method.$touched || forms.info.$submitted) && forms.info.method.$invalid && forms.info.method.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div class="form-group col-md-8" data-ng-class="{\'has-error\': (forms.info.url.$touched || forms.info.$submitted) && forms.info.url.$invalid}">\n <label class="control-label">{{\'APPLICATION_URL\' | translate}}</label>\n <input type="url" name="url" placeholder="{{\'APPLICATION_URL\' | translate}}" class="form-control" data-ng-model="account.replyUrl" required/>\n <span data-ng-show="(forms.info.url.$touched || forms.info.$submitted) && forms.info.url.$invalid && forms.info.url.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div> -->\n <!-- START REPLY HOOK -->\n <!-- END CUSTOM -->\n\n <!-- START REMOTE IP -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.remote.$touched || forms.info.$submitted) && forms.info.remote.$invalid}">\n <label class="control-label">{{\'APPLICATION_MOTION_ADDRESS\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="url" name="remote" placeholder="{{\'APPLICATION_MOTION_ADDRESS\' | translate}}" class="form-control" data-ng-model="account.remote" required/>\n <span class="help-block help-block-info">\n {{\'MESSAGE_MOTION_ADDRESS_FORMAT\' | translate}}\n </span>\n <span data-ng-show="(forms.info.remote.$touched || forms.info.$submitted) && forms.info.remote.$invalid && forms.info.remote.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END REMOTE IP -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END GENERAL TAB -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/openchannel/account/view/view.html",'<!-- BEGIN PAGE HEADER-->\n<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-globe"></i>\n <a href="#">{{ \'APPLICATION_OPEN_CHANNEL\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-notebook"></i>\n <a href="/channels/openchannel/accounts/list">{{ \'APPLICATION_ACCOUNTS\' | translate }}</a>\n <i class="fa fa-angle-right" data-ng-show="account"></i>\n </li>\n <li data-ng-show="account">\n <a href="#">{{ account.description || account.name }}</a>\n </li>\n </ul>\n </div>\n\n<!-- END PAGE HEADER-->\n\n<!-- BEGIN PAGE CONTENT-->\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET main.channels -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img ng-src="assets/images/media/account.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{ account.description || account.name }}\n </div>\n <div class="profile-usertitle-job">\n {{account.email}}\n </div>\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li ng-class="{active: $state.is(\'main.channels.openchannel.accounts.view.settings\')}">\n <a href="/channels/openchannel/accounts/view/{{account.id}}/settings">\n <i class="icon-settings"></i>\n {{\'APPLICATION_SETTINGS\' | translate}} </a>\n </li>\n <li ng-class="{active: $state.is(\'main.channels.openchannel.accounts.view.api\')}">\n <a href="/channels/openchannel/accounts/view/{{account.id}}/api">\n <i class="fa fa-external-link"></i>\n {{\'APPLICATION_API\' | translate}} </a>\n </li>\n <li ng-class="{active: $state.is(\'main.channels.openchannel.accounts.view.hooks\')}">\n <a href="/channels/openchannel/accounts/view/{{account.id}}/hooks">\n <i class="fa fa-code"></i>\n {{\'APPLICATION_HOOKS\' | translate}} </a>\n </li>\n <li ng-class="{active: $state.is(\'main.channels.openchannel.accounts.view.dispositions\')}">\n <a href="/channels/openchannel/accounts/view/{{account.id}}/dispositions">\n <i class="icon-target"></i>\n {{\'APPLICATION_DISPOSITIONS\' | translate}} </a>\n </li>\n <li ng-class="{active: $state.includes(\'main.channels.openchannel.accounts.view.actions\')}">\n <a href="/channels/openchannel/accounts/view/{{account.id}}/actions/list">\n <i class="icon-directions"></i>\n {{\'APPLICATION_ACTIONS\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <div ui-view class="profile-content"></div>\n <!-- END PROFILE CONTENT -->\n </div>\n<!-- END PAGE CONTENT-->\n</div>\n'),a.put("app/channels/openchannel/account/wizard/wizard.html",'\n<div class="row" data-ng-init="initWizard()">\n <div class="col-md-12">\n <!-- BEGIN PAGE HEADER-->\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-globe"></i>\n <a href="#">{{ \'APPLICATION_OPEN_CHANNEL\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-notebook"></i>\n <a href="/channels/openchannel/accounts/list">{{ \'APPLICATION_ACCOUNTS\' | translate }}</a>\n </li>\n </ul>\n </div>\n <!-- END PAGE HEADER-->\n\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-notebook font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_ACCOUNT\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="createItem()">\n <wz-step title="{{\'APPLICATION_ACCOUNT_INFO\' | translate}}" canexit="formValidation(forms.info.$valid)">\n <form name="forms.info" novalidate>\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="(forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid && forms.info.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"/>\n </div>\n <!-- END DESCRIPTION -->\n <!-- START REMOTE IP -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.remote.$touched || forms.info.$submitted) && forms.info.remote.$invalid}">\n <label class="control-label">{{\'APPLICATION_MOTION_ADDRESS\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="url" name="remote" placeholder="{{\'APPLICATION_MOTION_ADDRESS\' | translate}}" class="form-control" data-ng-model="item.remote" required/>\n <span class="help-block help-block-info">\n {{\'MESSAGE_MOTION_ADDRESS_FORMAT\' | translate}}\n </span>\n <span data-ng-show="(forms.info.remote.$touched || forms.info.$submitted) && forms.info.remote.$invalid && forms.info.remote.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END REMOTE IP -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" data-ng-click="goNext()"/>\n </form>\n </wz-step>\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n <input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n </wz-step>\n </wizard>\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'), -a.put("app/channels/openchannel/inbox/message/info.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_INFO\' | translate }}</h3>\n</div>\n<div class="modal-body" data-ng-init="initInfo()" style=" overflow-x: auto;" >\n <div data-ng-if="data" >\n <json-formatter json="data" open="1"></json-formatter>\n </div>\n <div class="note note-warning" data-ng-hide="data">\n <p>\n {{ \'MESSAGE_NO_INFO_AVAILABLE\' | translate }}\n </p>\n </div>\n\n</div>\n<div class="modal-footer">\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CLOSE\' | translate }}</button>\n</div>\n'),a.put("app/channels/openchannel/inbox/message/message.html",'<div class="message">\n <div class="row">\n <div class="col-md-6">\n <!-- <span data-ng-if="Message.from" class="bold">From: {{Message.from}} </span>\n <br>\n <span data-ng-if="Message.to" class="bold">To: {{Message.to}} </span>\n <br> -->\n <div class="row" ng-if="Message.from">\n <div class="col-md-12">\n <span data-ng-if="Message.from" class="bold">From: {{Message.from}} </span>\n </div>\n </div>\n <div class="row" ng-if="Message.to">\n <div class="col-md-12">\n <span data-ng-if="Message.to" class="bold">To: {{Message.to}} </span>\n </div>\n </div>\n <div class="row" ng-if="Message.name">\n <div class="col-md-12">\n <span class="bold">Name: {{Message.name}}</span>\n </div>\n </div>\n <div class="row" ng-if="Message.phone">\n <div class="col-md-12">\n <span class="bold">Phone: <a href="" data-ng-click="openContact(\'phone\',Message.phone)">{{Message.phone}}</a></span>\n </div>\n </div>\n <div class="row" ng-if="Message.email">\n <div class="col-md-12">\n <span class="bold">Email: <a href="" data-ng-click="openContact(\'email\',Message.email)">{{Message.email}}</a></span>\n </div>\n </div>\n </div>\n <div class="col-md-6">\n <span class="pull-right" data-ng-if="Message.User">{{\'APPLICATION_SENT_BY\' | translate}}: <strong>{{Message.User.fullname}}</strong></span>\n </div>\n </div>\n <br>\n <span class="todo-tasklist-date">\n <span class="pull-right" data-ng-switch="Message.status">\n <a ng-switch-when="RECEIVED" href="#" class="btn default btn-xs inactive-link green-stripe"> {{Message.status | uppercase}}\n <i class="fa fa-check"></i>\n </a>\n <a ng-switch-when="SENT" href="#" class="btn default btn-xs inactive-link green-stripe"> {{Message.status | uppercase}}\n <i class="fa fa-check"></i>\n </a>\n <a ng-switch-when="DELIVERED" href="#" class="btn default btn-xs inactive-link green-stripe"> {{Message.status | uppercase}}\n <i class="fa fa-check"></i>\n </a>\n <a ng-switch-when="SENDING" href="#" class="btn default btn-xs inactive-link blue-stripe" > {{Message.status | uppercase}}\n <i class="fa fa-warning"></i>\n </a>\n <a ng-switch-when="FAILED" href="#" class="btn default btn-xs red-stripe" data-ng-click="info(Message.res_data)"> {{Message.status | uppercase}}\n <i class="fa fa-times"></i>\n </a>\n <a ng-switch-default href="#" class="btn default btn-xs"> {{Message.status | uppercase}}\n </a>\n <br>\n </span>\n\n <i class="icon-calendar"></i> <span am-time-ago="Message.updatedAt"></span>\n </span>\n <hr>\n <ng-emoticons emoticons-data="Message.body"></ng-emoticons>\n <!-- <span class="body text-left" data-ng-bind-html="Message.body" style="white-space: pre-wrap;"></span> -->\n </div>\n'),a.put("app/channels/openchannel/inbox/room/room.directive.html",'<!-- BEGIN TODO CONTENT -->\n\n<div class="todo-content">\n <div class="portlet light">\n <div class="portlet-title">\n <div class="caption">\n <button class="btn btn-sm btn-default green-meadow" data-ng-if="Room.status !== \'CLOSED\'" data-ng-disabled="!form.body || forms.compose.from.$invalid || forms.compose.to.$invalid" data-ng-click="sendMessage()">\n <i class="icon-paper-plane" style="color: white;"></i> {{\'APPLICATION_SEND\' | translate}}\n </button>\n <span data-ng-show="Room && Room.status !== \'CLOSED\'"> | </span>\n <span data-ng-show="Room" class="label label-default">#{{Room.id}} {{Room.status}}</span>\n <span data-ng-if="Room && Room.ParentId"> | </span>\n <span data-ng-if="Room && Room.ParentId" class="label label-warning"> Ref: <a data-ng-click="openRoom(Room.ParentId,Room.contact)">#{{Room.ParentId}}</a></span>\n </div>\n <div class="actions" data-ng-switch="Room.status">\n <button class="btn btn-icon-only" data-ng-show="Room" data-ng-class="{\'btn-success\':Room.status !== \'CLOSED\',\'grey-cascade\':Room.status === \'CLOSED\'}" data-ng-click="closeRoom(Room.id)" data-ng-disabled="Room.status === \'CLOSED\' && Room.disposition">\n <i data-ng-class="{\'fa fa-upload\':Room.status !== \'CLOSED\',\'icon-target\':Room.status === \'CLOSED\'}"></i>\n </button>\n <button class="btn default btn-icon-only" data-ng-if="Room && Room.status !== \'CLOSED\'" type="button" data-ng-click="togglePanelLeft()" title="{{\'APPLICATION_RESIZE\' | translate}}">\n <i ng-class="panelRight == \'col-md-12\' ? \'icon-size-actual\' : \'icon-size-fullscreen\'"></i>\n </button>\n </div>\n </div>\n <div class="portlet-body">\n <div class="row">\n <div data-ng-show="panelLeft" data-ng-class="panelLeft">\n <div class="form">\n <!-- START TAGS -->\n <div class="form-group" data-ng-if="Room.status !== \'CLOSED\' || (Room.status == \'CLOSED\' && form.tags.length)">\n <div class="row">\n <div class="col-md-1">\n <a href="#" class="btn btn-icon-only">\n <i class="fa fa-tags" style="color: gray;"></i>\n </a>\n </div>\n <div class="col-md-11">\n <ui-select data-ng-disabled="Room.status == \'CLOSED\'" multiple data-ng-model="form.tags" theme="bootstrap" on-select="onChanged($item, $model)" on-remove="onChanged($item, $model)">\n <ui-select-match placeholder="Tags...">{{$item}}</ui-select-match>\n <ui-select-choices repeat="tag in tags | filter:$select.search" class="">\n {{tag}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n </div>\n <!-- END TAGS -->\n </div>\n <hr data-ng-if="Room && Room.status !== \'CLOSED\'">\n\n <div ng-scrollbars ng-scrollbars-config="{\n autoHideScrollbar: false,\n theme: \'light\',\n advanced: {\n updateOnContentResize: true\n },\n setHeight: 781,\n scrollInertia: 0\n }">\n <ul class="chats">\n <li data-ng-switch="Room.status" data-ng-class="{\'in\': Message.status == \'RECEIVED\', \'out\': Message.status == \'SENT\' || Message.status == \'SENDING\' || Message.status == \'FAILED\' || Message.status == \'NOTE\' || Message.status == \'DELIVERED\' || Message.status == \'QUEUED\' || Message.status != \'RECEIVED\' }" data-ng-repeat="Message in Room.OpenchannelMessages | orderBy:\'-createdAt\'">\n <!-- <img class="avatar" alt="" data-ng-src="api/users/avatar/{{getCurrentUser().userpic && smsMessage.status === \'SENT\' ? getCurrentUser().userpic : \'unknown_avatar\'}}"> -->\n <!-- <note message="smsMessage" ng-switch-when="NOTE"></note> -->\n <div class="avatar" data-ng-class="Message.UserId ? \'pretty-avatar\' : \'pretty-avatar-v\'">\n <ng-letter-avatar\n data-ng-if="Message.UserId"\n height="40"\n width="40"\n fontsize="25"\n data="{{Message.User.fullname}}"\n avatarcustombgcolor="#B0B0B0"\n avatarcustomborder="border:2px solid #3399CC"\n charCount="2"\n shape="round"></ng-letter-avatar>\n <ng-letter-avatar\n data-ng-if="!Message.UserId"\n height="40"\n width="40"\n fontsize="25"\n data="{{Message.from}}"\n avatarcustombgcolor="#B0B0B0"\n avatarcustomborder="border:2px solid #EA4C61"\n charCount="1"\n shape="round"></ng-letter-avatar>\n </div>\n <message message="Message" list-id="Room.OpenchannelAccount.ListId" ng-switch-default></message>\n </li>\n </ul>\n </div>\n </div>\n <div data-ng-class="panelRight">\n\n <div class="note note-info" data-ng-if="Room && Room.status == \'CLOSED\'">\n <h4 class="block">Info! {{\'MESSAGE_ROOM_CLOSED\' | translate}}</h4>\n <p>\n {{\'MESSAGE_ROOM_CLOSED_DETAILS\' | translate}}.\n </p>\n <hr>\n <p>\n <i class="icon-target"></i> {{\'APPLICATION_DISPOSITION\' | translate}}: <strong>{{Room.disposition}}</strong>\n </p>\n <p>\n <i class="icon-calendar"></i> {{\'APPLICATION_UPDATED_AT\' | translate}}: <strong>{{Room.updatedAt | date:\'medium\'}}</strong> (<span am-time-ago="Room.updatedAt"></span>)\n </p>\n </div>\n <form name="forms.compose" data-ng-submit="forms.compose.$valid" class="form-horizontal" novalidate>\n <!-- START HEAD -->\n <div class="form">\n\n <!-- START FROM -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.compose.from.$invalid && forms.compose.$submitted}" data-ng-if="Room.status !== \'CLOSED\'">\n <div class="col-md-12">\n <div class="row">\n <div class="col-md-1">\n <label class="control-label">From:</label>\n </div>\n <div class="col-md-11">\n <ui-select data-ng-disabled="Room" theme="bootstrap" name="from" data-ng-model="form.from" required>\n <ui-select-match placeholder="From...">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="Account.name as Account in Accounts | filter: $select.search">\n <div data-ng-bind-html="Account.name | highlight: $select.search"></div>\n <small data-ng-bind-html="Account.name | highlight: $select.search"></small>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.compose.from.$invalid && forms.compose.$submitted " class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n </div>\n </div>\n <!-- END FROM -->\n <!-- START TO -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.compose.to.$invalid && forms.compose.$submitted}" data-ng-if="Room.status !== \'CLOSED\'">\n\n <div class="col-md-12">\n <div class="row">\n <div class="col-md-1">\n <label class="control-label">To:</label>\n </div>\n <div class="col-md-11">\n <input type="text" name="to" class="form-control todo-taskbody-taskdesc" placeholder="To..." rows="8" data-ng-disabled="Room" data-ng-model="form.to" required>\n <span data-ng-show="forms.compose.to.$invalid && forms.compose.$submitted " class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n </div>\n </div>\n <!-- END TO -->\n <!-- START CANNED -->\n <div class="form-group" data-ng-if="Room.status !== \'CLOSED\'">\n <div class="row">\n <div class="col-md-1">\n <a href="#" class="btn btn-icon-only">\n <i class="fa fa-magic" style="color: gray;"></i>\n </a>\n </div>\n <div class="col-md-11">\n <input type="text"\n data-ng-model="modelOptions.selectedAnswer"\n uib-typeahead="key for key in getAnswers($viewValue)"\n placeholder="Canned answers.."\n typeahead-loading="loadingLocations"\n typeahead-no-results="noResults"\n typeahead-on-select="onSelect($item)"\n class="form-control">\n <i ng-show="loadingLocations" class="glyphicon glyphicon-refresh"></i>\n <div ng-show="noResults">\n <i class="glyphicon glyphicon-remove"></i> No Results Found\n </div>\n </div>\n </div>\n\n </div>\n <!-- END CANNED -->\n <!-- START message -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.compose.body.$invalid && forms.compose.$submitted}" data-ng-if=" Room.status !== \'CLOSED\'">\n <div class="col-md-12">\n <textarea id="text" class="form-control maxlength-handler" rows="8" name="body" data-ng-model="form.body"></textarea>\n <span data-ng-show="forms.compose.body.$invalid && forms.compose.$submitted " class="help-block help-block-error">\n'+" <strong>{{'APPLICATION_WARNING' | translate}}!</strong> {{'MESSAGE_REQUIRED_FIELD' | translate}}.\n </span>\n </div>\n </div>\n\n <!-- END message -->\n </div>\n </form>\n </div>\n </div>\n </div>\n </div>\n</div>\n<!-- END TODO CONTENT -->\n"),a.put("app/channels/openchannel/inbox/view/account/list/list.html",'<!-- BEGIN Portlet PORTLET-->\n<div class="portlet light" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption">\n <div class="btn-group btn-group-solid">\n <button type="button" class="btn btn-sm default" data-ng-model="query.status" uib-btn-radio="\'NEW\'" uib-uncheckable>NEW</button>\n </div>\n <div class="btn-group btn-group-solid">\n <button type="button" class="btn btn-sm default" data-ng-model="query.status" uib-btn-radio="\'OPEN\'" uib-uncheckable>OPEN</button>\n </div>\n <div class="btn-group btn-group-solid">\n <button type="button" class="btn btn-sm default" data-ng-model="query.status" uib-btn-radio="\'PENDING\'" uib-uncheckable>PENDING</button>\n </div>\n <div class="btn-group btn-group-solid">\n <button type="button" class="btn btn-sm default" data-ng-model="query.status" uib-btn-radio="\'CLOSED\'" uib-uncheckable>CLOSED</button>\n </div>\n </div>\n <div class="actions">\n <a href="#" class="btn btn-icon-only default" data-ng-click="getPage();">\n <i class="fa fa-refresh"></i>\n </a>\n <a href="#" class="btn btn-icon-only red" data-ng-click="deleteItems();" data-ng-show="id.length && isAdmin">\n <i class="fa fa-trash"></i>\n </a>\n <a href="#" class="btn btn-icon-only blue" data-ng-click="tagItems();" data-ng-show="id.length">\n <i class="fa fa-tags"></i>\n </a>\n <a href="#" class="btn btn-icon-only green" data-ng-click="openRoom(null, \'New Message\')">\n <i class="fa fa-plus"></i>\n </a>\n </div>\n </div>\n <div class="portlet-title" data-ng-show="tags.length">\n <!-- START TAGS -->\n <div class="form-group">\n <div class="row">\n <div class="col-md-1">\n <a href="#" class="btn btn-icon-only">\n <i class="fa fa-tags" style="color: gray;"></i>\n </a>\n </div>\n <div class="col-md-11">\n <ui-select multiple data-ng-model="query.tags" theme="bootstrap" on-select="onChanged($item, $model)" on-remove="onChanged($item, $model)">\n <ui-select-match placeholder="Search by tag...">{{$item}}</ui-select-match>\n <ui-select-choices repeat="tag in tags | filter:$select.search">\n {{tag}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n </div>\n <!-- END TAGS -->\n </div>\n <div class="portlet-body">\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="spinner-grid" spinner-start-active="false"></span>\n <!-- END UI-GRID SPINNER -->\n\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid-inbox">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n</div>\n<!-- END Portlet PORTLET-->\n'),a.put("app/channels/openchannel/inbox/view/view.agents.modal.html",'<div class="modal-header" data-ng-init="initModal()">\n <h3 class="modal-title">{{ \'APPLICATION_AGENTS\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <!-- START TRANSPORT -->\n <div class="form-group">\n <form name="form" novalidate>\n <!-- START TRANSPORT -->\n <div class="form-group">\n <ui-select multiple name="agents" data-ng-model="item.agents" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_AGENTS\' | translate}}">{{$item.fullname}}</ui-select-match>\n <ui-select-choices repeat="agent.id as agent in agents | filter: $select.search">\n {{agent.fullname}}\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END TRANSPORT -->\n </form>\n </div>\n <!-- END TRANSPORT -->\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" data-ng-click="ok()">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" data-ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/openchannel/inbox/view/view.html",'<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-globe"></i>\n <a href="#">{{ \'APPLICATION_OPEN_CHANNEL\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-note"></i>\n <a href="/channels/openchannel/inbox/list">{{ \'APPLICATION_INBOX\' | translate }}</a>\n </li>\n </ul>\n </div>\n </div>\n</div>\n\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row inbox" data-ng-init="initView()">\n <div class="col-md-3">\n <ul class="inbox-nav margin-bottom-10">\n <li data-ng-class="{active: $stateParams.id == Account.id}" data-ng-repeat="Account in Accounts">\n <a href="/channels/openchannel/inbox/view/account/{{Account.id}}/list" class="btn">\n <i class="icon-notebook"></i> {{Account.name}}\n </a>\n <b></b>\n </li>\n </ul>\n </div>\n\n <div class="col-md-9" >\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view>\n <div class="note note-info">\n <h4 class="block">Info! {{\'APPLICATION_NO_ACCOUNT_SELECTED\' | translate}}</h4>\n </div>\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/openchannel/inbox/view/view.status.modal.html",'<div class="modal-header">\n <button ng-if="modal.dismissable" type="button" ng-click="$dismiss()" class="close">×</button>\n <h4 ng-if="modal.title" ng-bind="modal.title | translate" class="modal-title"></h4>\n</div>\n<div class="modal-body">\n <p ng-if="modal.text && !closed" ng-bind="modal.text | translate"></p>\n <form name="form" novalidate data-ng-init="initDisposition()">\n <div class="form-group">\n <ui-select data-ng-model="item.disposition" name="list" theme="bootstrap" data-ng-disabled="!dispositions.length" required>\n <ui-select-match placeholder="{{\'APPLICATION_DISPOSITION\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="disposition.name as disposition in dispositions | filter: $select.search">\n <div ng-bind-html="disposition.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <div class="note note-warning" data-ng-hide="dispositions.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_DISPOSITIONS_AVAILABLE\' | translate }}\n </p>\n </div>\n</form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-danger" type="button" ng-click="ok()">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/openchannel/inbox/view/view.tags.modal.html",'<div class="modal-header" data-ng-init="initModal()">\n <h3 class="modal-title">{{ \'APPLICATION_TAGS\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <!-- START TRANSPORT -->\n <div class="form-group">\n <form name="form" novalidate>\n <!-- START TAGS -->\n <div class="form-group">\n <ui-select multiple data-ng-model="item.tags" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_TAGS\' | translate}}">{{$item}}</ui-select-match>\n <ui-select-choices repeat="tag in tags | filter: $select.search">\n {{tag}}\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END TAGS -->\n </form>\n </div>\n <!-- END TRANSPORT -->\n</div>\n<div class="modal-footer">\n <button type="button" class="btn" data-ng-class="button.class" data-ng-click="button.click()"data-ng-repeat="button in modal.buttons">{{button.text | translate}}</button>\n <!-- <button class="btn btn-success" type="button" data-ng-click="ok()">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" data-ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button> -->\n</div>\n'),a.put("app/channels/openchannel/queue/list/list.create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_QUEUE\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.name.$touched || form.$submitted) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" data-ng-pattern="settings.patternName" required />\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$invalid && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$invalid && form.name.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_PATTERN_NAME\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.timeout.$touched || form.$submitted) && form.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_AGENT_TIMEOUT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" min="0" name="timeout" placeholder="Timeout" class="form-control" data-ng-model="item.timeout" required min="1"/>\n <span data-ng-show="(form.timeout.$touched || form.$submitted) && form.timeout.$invalid && form.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n\n <!-- START STRATEGY -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.strategy.$touched || form.$submitted) && form.strategy.$invalid}">\n <label class="control-label">{{\'APPLICATION_STRATEGY\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="item.strategy" name="strategy" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.toUpperCase()}}</ui-select-match>\n <ui-select-choices repeat="strategy in strategies | filter: $select.search">\n <div ng-bind-html="strategy.toUpperCase() | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form.strategy.$touched || form.$submitted) && form.strategy.$invalid && form.strategy.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END STRATEGY -->\n\n <!-- START AGENTS-->\n <div class="form-body" data-ng-init="getTeams()">\n <label for="penalty">{{\'APPLICATION_PENALTY\' | translate}}</label>\n <div class="input-group input-small mbottom20">\n <input type="number" class="spinner-input form-control" maxlength="3" data-ng-model="item.penalty" readonly>\n <div class="spinner-buttons input-group-btn btn-group-vertical">\n <button type="button" class="btn spinner-up btn-xs blue" data-ng-click="item.penalty=item.penalty+1">\n <i class="fa fa-angle-up"></i>\n </button>\n <button type="button" class="btn spinner-down btn-xs blue" data-ng-disabled="!item.penalty" data-ng-click="item.penalty=item.penalty-1">\n <i class="fa fa-angle-down"></i>\n </button>\n </div>\n </div>\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-team">\n </div>\n </div>\n </div>\n <!-- END AGENTS-->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/openchannel/queue/list/list.html",'<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-globe"></i>\n <a href="#">{{ \'APPLICATION_OPEN_CHANNEL\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-docs"></i>\n <a href="#">{{ \'APPLICATION_QUEUES\' | translate }}</a>\n </li>\n </ul>\n </div>\n </div>\n</div>\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-docs font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_QUEUES\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <a class="btn green-jungle" href="#" data-ng-click="createItem()" data-ng-if="Auth.isAdmin()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_QUEUE\' | translate }}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/openchannel/queue/view/view.agents.html",'<div class="row" data-ng-init="getTeams()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_AGENTS\' | translate}}</span>\n </div>\n </div>\n <div class="note note-warning" data-ng-hide="teams.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_AVAILABLE_TEAMS\' | translate }}\n </p>\n </div>\n <div class="portlet-body">\n <!-- BEGIN FORM-->\n <form action="index.html" class="form-horizontal form-row-seperated">\n <div class="form-body">\n <label for="penalty">{{\'APPLICATION_PENALTY\' | translate}}</label>\n <div class="input-group input-small mbottom20">\n <input type="number" class="spinner-input form-control" maxlength="3" data-ng-model="queue.penalty" readonly>\n <div class="spinner-buttons input-group-btn btn-group-vertical">\n <button type="button" class="btn spinner-up btn-xs blue" data-ng-click="queue.penalty=queue.penalty+1">\n <i class="fa fa-angle-up"></i>\n </button>\n <button type="button" class="btn spinner-down btn-xs blue" data-ng-disabled="!queue.penalty" data-ng-click="queue.penalty=queue.penalty-1">\n <i class="fa fa-angle-down"></i>\n </button>\n </div>\n </div>\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-team">\n </div>\n </div>\n </div>\n </form>\n <!-- END FORM-->\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/openchannel/queue/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getQueue()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-globe"></i>\n <a href="#">{{ \'APPLICATION_OPEN_CHANNEL\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-docs"></i>\n <a href="/channels/openchannel/queues/list">{{ \'APPLICATION_QUEUES\' | translate }}</a>\n <i data-ng-show="queue" class="fa fa-angle-right"></i>\n </li>\n <li data-ng-show="queue">\n <a href="#">{{queue.name}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET main.channels -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/queue.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{queue.name}}\n </div>\n <!-- <div class="profile-usertitle-job">\n {{user.role}}\n </div> -->\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.channels.openchannel.queues.view.settings\')}">\n <a data-ng-href="/channels/openchannel/queues/view/{{queue.id}}/settings">\n <i class="icon-settings"></i>\n {{ \'APPLICATION_SETTINGS\' | translate}} </a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.channels.openchannel.queues.view.agents\')}" data-ng-show="Auth.getCurrentUser().role === \'admin\'">\n <a data-ng-href="/channels/openchannel/queues/view/{{queue.id}}/agents">\n <i class="icon-people"></i>\n {{ \'APPLICATION_AGENTS\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET main.channels -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n </div>\n <!-- END PAGE CONTENT-->\n'), -a.put("app/channels/openchannel/queue/view/view.settings.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_SETTINGS\' | translate}}</span>\n </div>\n </div>\n <div class="portlet-body">\n <form name="forms.general" data-ng-submit="forms.general.$valid && updateQueue()" novalidate>\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="queue.name" data-ng-pattern="settings.patternName" required />\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid && forms.general.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid && forms.general.name.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_PATTERN_NAME\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="queue.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n <!-- START TIMEOUT -->\n <div class="form-group">\n <label class="control-label">Timeout</label>\n <input type="number" name="timeout" placeholder="Timeout" class="form-control" min="1" data-ng-model="queue.timeout"/>\n </div>\n <!-- END TIMEOUT -->\n\n <!-- START HEADER SHAPE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.strategy.$touched || forms.general.$submitted) && forms.general.strategy.$invalid}">\n <label class="control-label">{{\'APPLICATION_STRATEGY\' | translate}}</label>\n <ui-select data-ng-model="queue.strategy" name="strategy" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.toUpperCase()}}</ui-select-match>\n <ui-select-choices repeat="strategy in strategies | filter: $select.search">\n <div ng-bind-html="strategy | uppercase | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END HEADER SHAPE -->\n <input data-ng-if="Auth.isAdmin()" class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/openchannel/realtime/view/agent/agent.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initAgents()">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns class="ui-grid" ui-grid-tree-view ui-grid-expandable-row ui-grid-pagination ui-grid-auto-resize>\n <span us-spinner spinner-key="grid-spinner" spinner-start-active="true"></span>\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/openchannel/realtime/view/agent/agent.modal.info.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_INTERFACE_INFO\' | translate }}</h3>\n</div>\n<div class="modal-body">\n<div data-ng-if="agent.ipaddr" class="well">\n <div>{{agent.ipaddr}}:{{agent.port}}</div>\n <div>{{agent.fullcontact}}</div>\n <div>{{agent.useragent}}</div>\n <div>{{agent.lastms}}</div>\n</div>\n<div data-ng-if="!agent.ipaddr" class="alert alert-danger" role="alert">\n {{\'MESSAGE_NO_AVAILABLE_INFO\' | translate}}\n</div>\n</div>\n<div class="modal-footer">\n <button class="btn default" type="button" ng-click="close()">{{ \'APPLICATION_CLOSE\' | translate }}</button>\n</div>\n'),a.put("app/channels/openchannel/realtime/view/agent/queue.modal.add.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_JOIN_QUEUE\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <div class="form-group row">\n <label class="col-md-2 control-label" style="margin-top: 7px;">{{\'APPLICATION_QUEUE\' | translate}}:</label>\n <div class="col-md-10">\n <ui-select multiple ng-model="item.queues" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_QUEUE\' | translate}}">{{$item.name}}</ui-select-match>\n <ui-select-choices repeat="queue.id as queue in queues | filter: $select.search">\n <div ng-bind-html="queue.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n</div>\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/openchannel/realtime/view/application/application.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initApplications()">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns class="ui-grid" ui-grid-auto-resize>\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/openchannel/realtime/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-globe"></i>\n <a href="#">{{ \'APPLICATION_OPEN_CHANNEL\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-energy"></i>\n <a href="#">{{ \'APPLICATION_REALTIME\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <div>\n <nav class="navbar navbar-default" role="navigation">\n <div class="collapse navbar-collapse">\n <ul class="nav navbar-nav">\n <li data-ng-class="{\'active\': $state.is(\'main.channels.openchannel.realtime.view.agents\')}">\n <a href="/channels/openchannel/realtime/view/agents">\n {{\'APPLICATION_AGENTS\' | translate}}\n </a>\n </li>\n <li data-ng-class="{\'active\': $state.is(\'main.channels.openchannel.realtime.view.applications\')}">\n <a href="/channels/openchannel/realtime/view/applications">\n {{\'APPLICATION_APPLICATIONS\' | translate}}\n </a>\n </li>\n </ul>\n </div>\n </nav>\n </div>\n\n <div ui-view></div>\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/openchannel/realtime/view/view.queue.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initAgents()">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div id="grid1" ui-grid="gridOptions" ui-grid-resize-columns ui-grid-tree-view class="grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/realtime/view/agent/agent.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initAgents()">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns class="ui-grid" ui-grid-pagination ui-grid-auto-resize>\n <span us-spinner spinner-key="grid-spinner" spinner-start-active="true"></span>\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/realtime/view/agent/agent.modal.info.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_INTERFACE_INFO\' | translate }}</h3>\n</div>\n<div class="modal-body">\n<div data-ng-if="agent.ipaddr" class="well">\n <div>{{agent.ipaddr}}:{{agent.port}}</div>\n <div>{{agent.fullcontact}}</div>\n <div>{{agent.useragent}}</div>\n <div>{{agent.lastms}}</div>\n</div>\n<div data-ng-if="!agent.ipaddr" class="alert alert-danger" role="alert">\n {{\'MESSAGE_NO_AVAILABLE_INFO\' | translate}}\n</div>\n</div>\n<div class="modal-footer">\n <button class="btn default" type="button" ng-click="close()">{{ \'APPLICATION_CLOSE\' | translate }}</button>\n</div>\n'),a.put("app/channels/realtime/view/agent/queue.modal.add.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_JOIN_QUEUE\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <div class="form-group row">\n <label class="col-md-2 control-label" style="margin-top: 7px;">{{\'APPLICATION_QUEUE\' | translate}}:</label>\n <div class="col-md-10">\n <ui-select multiple ng-model="item.queues" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_QUEUE\' | translate}}">{{$item.name}}</ui-select-match>\n <ui-select-choices repeat="queue.name as queue in queues | filter: $select.search">\n <div ng-bind-html="queue.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n</div>\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/realtime/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-energy"></i>\n <a href="/channels/realtime/view/agents">{{ \'APPLICATION_REALTIME\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <div>\n <nav class="navbar navbar-default" role="navigation">\n <div class="collapse navbar-collapse">\n <ul class="nav navbar-nav">\n <li data-ng-class="{\'active\': $state.is(\'main.channels.realtime.view.agents\')}">\n <a href="/channels/realtime/view/agents">\n {{\'APPLICATION_AGENTS\' | translate}}\n </a>\n </li>\n </ul>\n </div>\n </nav>\n </div>\n <div ui-view></div>\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/sms/account/list/list.html",'<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="glyphicon glyphicon-comment"></i>\n <a href="#">{{ \'APPLICATION_SMS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-notebook"></i>\n <a href="/channels/sms/accounts/list">{{ \'APPLICATION_ACCOUNTS\' | translate }}</a>\n </li>\n </ul>\n </div>\n </div>\n</div>\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-notebook font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_ACCOUNTS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group">\n <a class="btn btn-default" href="#" data-ng-click="gridOptions.getPage();">\n <i class="icon-reload"></i>\n </a>\n </div>\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <a class="btn green-jungle" href="/channels/sms/accounts/wizard">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_ACCOUNT\' | translate }}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/sms/account/view/action/list/list.html",'<div class="row" data-ng-init="initActions()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_ACTIONS\' | translate}}</span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <a class="btn green-jungle" href="/channels/sms/accounts/view/{{account.id}}/actions/wizard" data-toggle="dropdown">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_ACTION\' | translate }}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/sms/account/view/action/view/view.html",'\n<div class="row" data-ng-init="initAction()">\n <div class="col-md-12">\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-directions font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_ACTION\' | translate }}</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <form name="forms.settings" ng-submit="updateItem()" novalidate>\n <!-- START APP -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.app.$touched || forms.settings.$submitted) && forms.settings.app.$invalid}">\n <label class="control-label">{{ \'APPLICATION_APPLICATION\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.app" name="app" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_APPLICATION\' | translate }}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="app.value as app in apps | filter: $select.search">\n <div ng-bind-html="app.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.app.$touched || forms.settings.$submitted) && forms.settings.app.$invalid && forms.settings.app.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END APP -->\n\n <div class="app-settings" ng-slide-down="application.app === \'queue\'" lazy-render duration="1" data-ng-init="getQueues()">\n <!-- START QUEUE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.queue.$touched || forms.settings.$submitted) && forms.settings.queue.$invalid}">\n <label class="control-label">{{\'APPLICATION_QUEUE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.SmsQueueId" name="queue" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="queue.id as queue in queues | filter: $select.search">\n <div ng-bind-html="queue.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="queues.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_QUEUES_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/channels/sms/queues/list">{{\'APPLICATION_QUEUES\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.settings.queue.$touched || forms.settings.$submitted) && forms.settings.queue.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END QUEUE -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="number" name="timeout" placeholder="{{\'APPLICATION_TIMEOUT\' | translate}}" class="form-control" data-ng-model="application.timeout" min="1" required/>\n <span data-ng-show="(forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid && forms.settings.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.app === \'agent\'" lazy-render duration="1" data-ng-init="getAgents()">\n <!-- START AGENT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.agent.$touched || forms.settings.$submitted) && forms.settings.agent.$invalid}">\n <label class="control-label">{{\'APPLICATION_AGENT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.UserId" name="agent" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.fullname}}</ui-select-match>\n <ui-select-choices repeat="agent.id as agent in agents | filter: $select.search">\n <div ng-bind-html="agent.fullname | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="agents.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_AGENTS_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/staff/agents/list">{{\'APPLICATION_QUEUES\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.settings.agent.$touched || forms.settings.$submitted) && forms.settings.agent.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END AGENT -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="number" name="timeout" placeholder="{{\'APPLICATION_TIMEOUT\' | translate}}" class="form-control" data-ng-model="application.timeout" min="1" required/>\n <span data-ng-show="(forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid && forms.settings.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.app === \'sendMail\'" lazy-render duration="1" data-ng-init="getMailAccounts();getTemplates()">\n <!-- START SENDMAIL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.to.$touched || forms.settings.$submitted) && forms.settings.to.$invalid}">\n <label class="control-label">{{\'APPLICATION_TO\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="email" name="to" placeholder="{{\'APPLICATION_TO\' | translate}}" class="form-control" data-ng-model="application.data2" min="1" required/>\n <span data-ng-show="(forms.settings.to.$touched || forms.settings.$submitted) && forms.settings.to.$invalid && forms.settings.to.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.account.$touched || forms.settings.$submitted) && forms.settings.account.$invalid}">\n <label class="control-label">{{\'APPLICATION_ACCOUNT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data8" name="account" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="account.id as account in mailAccounts | filter: $select.search">\n <div ng-bind-html="account.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.account.$touched || forms.settings.$submitted) && forms.settings.account.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.template.$touched || forms.settings.$submitted) && forms.settings.template.$invalid}">\n <label class="control-label">{{\'APPLICATION_TEMPLATE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data9" name="template" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="template.id as template in templates | filter: $select.search">\n <div ng-bind-html="template.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.template.$touched || forms.settings.$submitted) && forms.settings.template.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END SENDMAIL -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.app === \'sendSms\'" lazy-render duration="1" data-ng-init="getSmsAccounts()">\n <!-- START SENDSms -->\n <div class="app-settings" ng-slide-down="application.app === \'sendSms\'" lazy-render duration="1">\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.to.$touched || forms.settings.$submitted) && forms.settings.to.$invalid}">\n <label class="control-label">{{\'APPLICATION_TO\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" ng-pattern="/^[\\+]?[0-9]+$/" name="to" placeholder="{{\'APPLICATION_TO\' | translate}}" class="form-control" data-ng-model="application.data2" required/>\n <span data-ng-show="(forms.settings.to.$touched || forms.settings.$submitted) && forms.settings.to.$invalid && forms.settings.to.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.account.$touched || forms.settings.$submitted) && forms.settings.account.$invalid}">\n <label class="control-label">{{\'APPLICATION_ACCOUNT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data8" name="account" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="account.id as account in smsAccounts | filter: $select.search">\n <div ng-bind-html="account.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.account.$touched || forms.settings.$submitted) && forms.settings.account.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.text.$touched || forms.text.$submitted) && forms.settings.text.$invalid}">\n <label class="control-label">{{\'APPLICATION_TEXT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <textarea id="text" class="form-control maxlength-handler" maxlength="160" name="text" data-ng-model="application.data6" required></textarea>\n <span data-ng-show="(forms.settings.text.$touched || forms.settings.$submitted) && forms.settings.text.$invalid && forms.settings.text.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n\n <!-- END SENDSms -->\n </div>\n <!-- START INTERVAL_TYPE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.intType.$touched || forms.settings.$submitted) && forms.settings.intType.$invalid}">\n <label class="control-label">{{ \'APPLICATION_INTERVAL_TYPE\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.intType" theme="bootstrap" name="intType" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="intType.value as intType in $application.intTypes | filter: $select.search">\n {{ intType.name | translate }}\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.intType.$touched || forms.settings.$submitted) && forms.settings.intType.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERVAL_TYPE -->\n\n <div class="app-settings" ng-slide-down="application.intType === \'custom\'" lazy-render duration="1">\n <!-- START TIME -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_TIME\' | translate }}</label>\n <div class="input-group input-large">\n <fieldset class="pull-left" ng-disabled="application.alwaysTime">\n <uib-timepicker name="t_from" data-ng-model="application.t_from" show-meridian="false" show-spinners="false" mousewheel="false"></uib-timepicker>\n </fieldset>\n <div class="input-group-addon col-md-1 interval-to pull-left">to</div>\n <fieldset ng-disabled="application.alwaysTime"><uib-timepicker name="t_to" data-ng-model="application.t_to" show-meridian="false" show-spinners="false" mousewheel="false"></uib-timepicker></fieldset>\n <!-- <label class="control-label pointer-cursor"><input type="checkbox" data-ng-model="application.alwaysTime">{{\'APPLICATION_ALWAYS\' | translate}}</label> -->\n </div>\n </div>\n <!-- END TIME -->\n\n <!-- START ALWAYS -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_ALWAYS\' | translate }}</label>\n <div class="input-group input-large">\n <label class="control-label pointer-cursor">\n <input\n bs-switch\n data-ng-model="application.alwaysTime"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n <!-- <input type="checkbox" data-ng-model="application.alwaysTime"> -->\n </label>\n </div>\n </div>\n <!-- END ALWAYS -->\n\n <!-- START WEEKDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_WEEKDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="application.wd_from" theme="bootstrap" name="wd_from">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{ weekDay.name | translate}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="application.wd_to" theme="bootstrap" name="wd_to">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{ weekDay.name | translate }}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END WEEKDAY -->\n\n <!-- START MONTHDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTHDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="application.md_from" theme="bootstrap" name="md_from">\n <ui-select-match allow-clear>{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search" ui-disable-choice="application.md_to && application.md_to!==\'always\' && monthDay>application.md_to && monthDay!==\'always\'">\n {{monthDay}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="application.md_to" theme="bootstrap" name="md_to">\n <ui-select-match allow-clear>{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search" ui-disable-choice="application.md_from && application.md_from!==\'always\' && monthDay<application.md_from && monthDay!==\'always\'">\n {{monthDay}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTHDAY -->\n\n <!-- START MONTH -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTH\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="application.m_from" theme="bootstrap" name="m_from">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{ month.name | translate }}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="application.m_to" theme="bootstrap" name="m_to">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{ month.name | translate }}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTH -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.intType === \'list\'" lazy-render duration="1" data-ng-init="getIntervals()">\n\n <!-- START INTERVALS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.IntervalId.$touched || forms.settings.$submitted) && forms.settings.IntervalId.$invalid}">\n <label class="control-label">{{\'APPLICATION_INTERVALS\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.IntervalId" theme="bootstrap" name="IntervalId" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{ $select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="interval.id as interval in intervals | filter: $select.search">\n {{ interval.name}}\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="intervals.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_INTERVAL_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/tools/intervals/list">{{\'APPLICATION_INTERVALS\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.settings.IntervalId.$touched || forms.settings.$submitted) && forms.settings.IntervalId.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERVALS -->\n\n </div>\n <button class="btn green-haze" type="submit">{{\'APPLICATION_UPDATE\' | translate}}</button>\n </form>\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'), -a.put("app/channels/sms/account/view/action/wizard/wizard.html",'\n<div class="row" data-ng-init="initWizard()">\n <div class="col-md-12">\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-directions font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_ACTION\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="createItem()">\n <wz-step title="{{\'APPLICATION_APPLICATION\' | translate}}" canexit="formValidation(forms.action.$valid)">\n <form name="forms.action" novalidate>\n <!-- START APP -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.action.$submitted && forms.action.app.$invalid}">\n <label class="control-label">{{ \'APPLICATION_APPLICATION\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.app" name="app" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_APPLICATION\' | translate }}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="app.value as app in apps | filter: $select.search">\n <div ng-bind-html="app.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.action.$submitted && forms.action.app.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END APP -->\n\n <div class="app-settings" ng-slide-down="application.app === \'agent\'" lazy-render duration="1" data-ng-init="getAgents()">\n <!-- START AGENT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.agent.$touched || forms.action.$submitted) && forms.action.agent.$invalid}">\n <label class="control-label">{{\'APPLICATION_AGENT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.UserId" name="agent" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.fullname}}</ui-select-match>\n <ui-select-choices repeat="agent.id as agent in agents | filter: $select.search">\n <div ng-bind-html="agent.fullname | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="agents.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_AGENTS_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/staff/agents/list">{{\'APPLICATION_AGENTS\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.action.agent.$touched || forms.action.$submitted) && forms.action.agent.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END AGENT -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.timeout.$touched || forms.action.$submitted) && forms.action.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="number" name="timeout" placeholder="{{\'APPLICATION_TIMEOUT\' | translate}}" class="form-control" data-ng-model="application.timeout" min="1" required/>\n <span data-ng-show="(forms.action.timeout.$touched || forms.action.$submitted) && forms.action.timeout.$invalid && forms.action.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n\n </div>\n\n <div class="app-settings" ng-slide-down="application.app === \'queue\'" lazy-render duration="1" data-ng-init="getQueues()">\n <!-- START QUEUE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.queue.$touched || forms.action.$submitted) && forms.action.queue.$invalid}">\n <label class="control-label">{{\'APPLICATION_QUEUE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.SmsQueueId" name="queue" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="queue.id as queue in queues | filter: $select.search">\n <div ng-bind-html="queue.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="queues.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_QUEUES_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/channels/sms/queues/list">{{\'APPLICATION_QUEUES\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.action.queue.$touched || forms.action.$submitted) && forms.action.queue.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END QUEUE -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.timeout.$touched || forms.action.$submitted) && forms.action.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="number" name="timeout" placeholder="{{\'APPLICATION_TIMEOUT\' | translate}}" class="form-control" data-ng-model="application.timeout" min="1" required/>\n <span data-ng-show="(forms.action.timeout.$touched || forms.action.$submitted) && forms.action.timeout.$invalid && forms.action.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.app === \'sendMail\'" lazy-render duration="1" data-ng-init="getMailAccounts();getTemplates()">\n <!-- START SENDMAIL -->\n <div class="app-settings" ng-slide-down="application.app === \'sendMail\'" lazy-render duration="1">\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.to.$touched || forms.action.$submitted) && forms.action.to.$invalid}">\n <label class="control-label">{{\'APPLICATION_TO\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="email" name="to" placeholder="{{\'APPLICATION_TO\' | translate}}" class="form-control" data-ng-model="application.data2" required/>\n <span data-ng-show="(forms.action.to.$touched || forms.action.$submitted) && forms.action.to.$invalid && forms.action.to.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.mail.$touched || forms.action.$submitted) && forms.action.account.$invalid}">\n <label class="control-label">{{\'APPLICATION_ACCOUNT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data8" name="account" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="account.id as account in mailAccounts | filter: $select.search">\n <div ng-bind-html="account.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.action.account.$touched || forms.action.$submitted) && forms.action.account.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.template.$touched || forms.action.$submitted) && forms.action.template.$invalid}">\n <label class="control-label">{{\'APPLICATION_TEMPLATE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data9" name="template" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="template.id as template in templates | filter: $select.search">\n <div ng-bind-html="template.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.action.template.$touched || forms.action.$submitted) && forms.action.template.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END SENDMAIL -->\n </div>\n <div class="app-settings" ng-slide-down="application.app === \'sendSms\'" lazy-render duration="1" data-ng-init="getSmsAccounts()">\n <!-- START SENDSms -->\n <div class="app-settings" ng-slide-down="application.app === \'sendSms\'" lazy-render duration="1">\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.to.$touched || forms.action.$submitted) && forms.action.to.$invalid}">\n <label class="control-label">{{\'APPLICATION_TO\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" ng-pattern="/^[\\+]?[0-9]+$/" name="to" placeholder="{{\'APPLICATION_TO\' | translate}}" class="form-control" data-ng-model="application.data2" required/>\n <span data-ng-show="(forms.action.to.$touched || forms.action.$submitted) && forms.action.to.$invalid && forms.action.to.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.account.$touched || forms.action.$submitted) && forms.action.account.$invalid}">\n <label class="control-label">{{\'APPLICATION_ACCOUNT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data8" name="account" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="account.id as account in smsAccounts | filter: $select.search">\n <div ng-bind-html="account.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.action.account.$touched || forms.action.$submitted) && forms.action.account.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.text.$touched || forms.action.$submitted) && forms.action.text.$invalid}">\n <label class="control-label">{{\'APPLICATION_TEXT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <textarea id="text" class="form-control maxlength-handler" maxlength="160" name="text" data-ng-model="application.data6" required></textarea>\n <span data-ng-show="(forms.action.text.$touched || forms.action.$submitted) && forms.action.text.$invalid && forms.action.text.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n\n <!-- END SENDSms -->\n </div>\n <!-- START INTERVAL_TYPE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.intType.$touched || forms.action.$submitted) && forms.action.intType.$invalid}">\n <label class="control-label">{{ \'APPLICATION_INTERVAL_TYPE\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.intType" theme="bootstrap" name="intType" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="intType.value as intType in $application.intTypes | filter: $select.search">\n {{ intType.name | translate }}\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.action.intType.$touched || forms.action.$submitted) && forms.action.intType.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERVAL_TYPE -->\n\n <div class="app-settings" ng-slide-down="application.intType === \'custom\'" lazy-render duration="1">\n <!-- START TIME -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_TIME\' | translate }}</label>\n <div class="input-group input-large">\n <fieldset class="pull-left" ng-disabled="application.alwaysTime">\n <uib-timepicker name="t_from" data-ng-model="application.t_from" show-meridian="false" show-spinners="false" mousewheel="false"></uib-timepicker>\n </fieldset>\n <div class="input-group-addon col-md-1 interval-to pull-left">to</div>\n <fieldset ng-disabled="application.alwaysTime"><uib-timepicker name="t_to" data-ng-model="application.t_to" show-meridian="false" show-spinners="false" mousewheel="false"></uib-timepicker></fieldset>\n <!-- <label class="control-label pointer-cursor"><input type="checkbox" data-ng-model="application.alwaysTime">{{\'APPLICATION_ALWAYS\' | translate}}</label> -->\n </div>\n </div>\n <!-- END TIME -->\n\n <!-- START ALWAYS -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_ALWAYS\' | translate }}</label>\n <div class="input-group input-large">\n <label class="control-label pointer-cursor">\n <input\n bs-switch\n data-ng-model="application.alwaysTime"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n <!-- <input type="checkbox" data-ng-model="application.alwaysTime"> -->\n </label>\n </div>\n </div>\n <!-- END ALWAYS -->\n\n <!-- START WEEKDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_WEEKDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="application.wd_from" theme="bootstrap" name="wd_from">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{ weekDay.name | translate}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="application.wd_to" theme="bootstrap" name="wd_to">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{ weekDay.name | translate }}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END WEEKDAY -->\n\n <!-- START MONTHDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTHDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="application.md_from" theme="bootstrap" name="md_from">\n <ui-select-match allow-clear>{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search" ui-disable-choice="application.md_to && application.md_to!==\'always\' && monthDay>application.md_to && monthDay!==\'always\'">\n {{monthDay}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="application.md_to" theme="bootstrap" name="md_to">\n <ui-select-match allow-clear>{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search" ui-disable-choice="application.md_from && application.md_from!==\'always\' && monthDay<application.md_from && monthDay!==\'always\'">\n {{monthDay}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTHDAY -->\n\n <!-- START MONTH -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTH\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="application.m_from" theme="bootstrap" name="m_from">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{ month.name | translate }}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="application.m_to" theme="bootstrap" name="m_to">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{ month.name | translate }}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTH -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.intType === \'list\'" lazy-render duration="1" data-ng-init="getIntervals()">\n\n <!-- START INTERVALS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.IntervalId.$touched || forms.action.$submitted) && forms.action.IntervalId.$invalid}">\n <label class="control-label">{{\'APPLICATION_INTERVALS\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.IntervalId" theme="bootstrap" name="IntervalId" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{ $select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="interval.id as interval in intervals | filter: $select.search">\n {{ interval.name}}\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="intervals.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_INTERVAL_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/tools/intervals/list">{{\'APPLICATION_INTERVALS\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.action.IntervalId.$touched || forms.action.$submitted) && forms.action.IntervalId.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERVALS -->\n\n </div>\n\n <input class="btn green-haze" type="submit" data-ng-click="next()" value="{{\'APPLICATION_CONTINUE\' | translate}}"/>\n </form>\n </wz-step>\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n <input class="btn green-haze" type="submit" data-ng-click="next()" value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n </wz-step>\n </wizard>\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/sms/account/view/api/view/view.html",'<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_API\' | translate}}</span>\n </div>\n </div>\n <div class="portlet-body">\n <div class="tab-content">\n <!-- CALLBACK TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <!-- START CALLBACK URL -->\n <div class="row" >\n <div class="col-md-12">\n <label class="control-label">Receive URL</label>\n <p>\n Copy the following url and insert it into your {{account.type}} account settings to receive SMS.\n <a href="https://wiki.xcallymotion.com/display/XMD/SMS" target="_blank">Detail</a>\n </p>\n </div>\n </div>\n <div class="row" >\n <div class="col-md-11">\n <code-mirror model="receiveurl"></code-mirror>\n </div>\n <div class="col-md-1">\n <a class="btn btn-sm green-jungle" data-ng-click="copyToClipboard(receiveurl);"><i class="fa fa-clipboard"></i>\n </a>\n </div>\n </div><br>\n <!-- END CALLACK URL -->\n <!-- START DELIVERY CALLBACK URL -->\n <div ng-if= "account.smstype == \'classic+\'" class="row" ng-show="!forms.info.remote.$invalid">\n <div class="col-md-12">\n <label class="control-label">Delivery URL </label>\n <p>\n Copy the following url and insert it into your {{account.type}} account settings to receive delivery report.\n <a href="https://wiki.xcallymotion.com/display/XMD/SMS" target="_blank">Detail</a>\n </p>\n </div>\n </div>\n <div ng-if= "account.smstype == \'classic+\'" class="row" ng-show="!forms.info.remote.$invalid">\n <div class="col-md-11">\n <code-mirror class="control-label" model="deliveryurl"></code-mirror>\n </div>\n <div class="col-md-1">\n <a class="btn btn-sm green-jungle" data-ng-click="copyToClipboard(deliveryurl);"><i class="fa fa-clipboard"></i>\n </a>\n </div>\n </div>\n <!-- END DELIVERY CALLACK URL -->\n </div>\n <!-- END CALLBACK TAB -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/sms/account/view/disposition/modal/add.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_DISPOSITIONS\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.form.$touched || form.$submitted) && form.form.$invalid}">\n <div class="">\n <input type="text" name="form" placeholder="{{\'APPLICATION_DISPOSITION\' | translate}}" class="form-control" data-ng-model="name" required/>\n <span data-ng-show="form.form.$touched && form.form.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n <!-- END NAME -->\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" data-ng-click="ok()" data-ng-show="form.$valid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" data-ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/sms/account/view/disposition/view/view.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_DISPOSITIONS\' | translate}}</span>\n </div>\n <div class="actions actions-md">\n <a href="#" class="btn btn-icon-only green" data-ng-click="addDisposition();">\n <i class="fa fa-plus"></i>\n </a>\n </div>\n </div>\n <div class="portlet-body" data-ng-init="initView()">\n <div class="tab-content">\n <div class="row" data-ng-hide="dispositions.length">\n <div class="col-md-12">\n <div class="note note-info">\n <h4 class="block">Info! {{\'MESSAGE_NO_DISPOSITIONS_AVAILABLE\' | translate}}</h4>\n </div>\n </div>\n </div>\n\n <!-- GENERAL TAB -->\n <div class="row" data-ng-repeat="disposition in dispositions">\n <div class="col-md-12 form-group">\n <div class="input-group">\n <div>\n <input class="form-control" type="text" placeholder="{{\'APPLICATION_DISPOSITION\' | translate}}" data-ng-model="disposition.name">\n </div>\n <span class="input-group-btn">\n <button class="btn btn-success" type="button" data-ng-click="updateDisposition(disposition.id, disposition.name);"><i class="fa fa-cloud-upload fa-fw"></i> {{\'APPLICATION_UPDATE\' | translate}}</button>\n <button class="btn btn-danger" type="button" data-ng-click="deleteDisposition(disposition.id);"><i class="fa fa-times fa-fw"></i> {{\'APPLICATION_DELETE\' | translate}}</button>\n </span>\n </div>\n </div>\n </div>\n <!-- END GENERAL TAB -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/sms/account/view/hooks/view/view.html",'<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_HOOKS\' | translate}}</span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_ACCEPT\' | translate}}</a>\n </li>\n <li >\n <a href="#" data-target="#tab_1_2" data-toggle="tab">{{\'APPLICATION_REJECT\' | translate}}</a>\n </li>\n <li >\n <a href="#" data-target="#tab_1_3" data-toggle="tab">{{\'APPLICATION_CLOSE\' | translate}}</a>\n </li>\n </ul>\n </div>\n <div class="portlet-body">\n <div class="tab-content">\n <!-- ACCEPT TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.accept" data-ng-submit="forms.accept.$valid && updateItemSmsAccount()" novalidate>\n <!-- START ACCEPT URL -->\n <div class="row">\n <div class="form-group col-md-4" data-ng-class="{\'has-error\': (forms.accept.method.$touched || forms.accept.$submitted) && forms.accept.method.$invalid}">\n <label class="control-label">{{\'APPLICATION_METHOD\' | translate}}</label>\n <ui-select data-ng-model="account.acceptMethod" name="method" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_METHOD\' | translate}}">{{$select.selected.name | uppercase}}</ui-select-match>\n <ui-select-choices repeat="type.value as type in types | filter: $select.search">\n <div ng-bind-html="type.name | highlight: $select.search | uppercase" ></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.accept.method.$touched || forms.accept.$submitted) && forms.accept.method.$invalid && forms.accept.method.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div class="form-group col-md-8" data-ng-class="{\'has-error\': (forms.accept.url.$touched || forms.accept.$submitted) && forms.accept.url.$invalid}">\n <label class="control-label">{{\'APPLICATION_URL\' | translate}}</label>\n <input type="url" name="url" placeholder="{{\'APPLICATION_URL\' | translate}}" class="form-control" data-ng-model="account.acceptUrl" ng-required="account.acceptMethod"/>\n <span data-ng-show="(forms.accept.url.$touched || forms.accept.$submitted) && forms.accept.url.$invalid && forms.accept.url.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n <!-- END ACCEPT URL-->\n <!-- START ACTIONS-->\n <!-- START PAUSE -->\n <div class="row" ng-repeat = "action in account.actions">\n <div ng-switch="action.action">\n <div ng-switch-when="pause">\n <div class="form-group col-md-4">\n <label class="control-label">{{\'APPLICATION_PAUSE\' | translate}}</label></br>\n <input\n bs-switch\n data-ng-change="resetActionData(action)"\n data-ng-model="action.enabled"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_ENABLED\' | translate }}"\n switch-off-text="{{ \'APPLICATION_DISABLED\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n </div>\n <div ng-if="action.enabled" class="form-group col-md-8">\n <label class="control-label">{{\'APPLICATION_TYPE\' | translate}}</label>\n <ui-select name="action" data-ng-model="action.type" theme="bootstrap" >\n <ui-select-match placeholder="{{\'APPLICATION_TYPE\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat=" pause.name as pause in pauses | filter: $select.search">\n <div ng-bind-html="pause.name | highlight: $select.search | uppercase" ></div>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n </div>\n </div>\n <!-- END ACTION -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END ACCEPT TAB -->\n <!-- START REJECT TAB -->\n <div class="tab-pane" id="tab_1_2">\n <form name="forms.reject" data-ng-submit="forms.reject.$valid && updateItemSmsAccount()" novalidate>\n <!-- START REJECT URL -->\n <div class="row">\n <div class="form-group col-md-4" data-ng-class="{\'has-error\': (forms.reject.method.$touched || forms.reject.$submitted) && forms.reject.method.$invalid}">\n <label class="control-label">{{\'APPLICATION_METHOD\' | translate}}</label>\n <ui-select data-ng-model="account.rejectMethod" name="method" theme="bootstrap" >\n <ui-select-match placeholder="{{\'APPLICATION_METHOD\' | translate}}">{{$select.selected.name | uppercase}}</ui-select-match>\n <ui-select-choices repeat="type.value as type in types | filter: $select.search">\n <div ng-bind-html="type.name | highlight: $select.search | uppercase" ></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.reject.method.$touched || forms.reject.$submitted) && forms.reject.method.$invalid && forms.reject.method.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div class="form-group col-md-8" data-ng-class="{\'has-error\': (forms.reject.url.$touched || forms.reject.$submitted) && forms.reject.url.$invalid}">\n <label class="control-label">{{\'APPLICATION_URL\' | translate}}</label>\n <input type="url" name="url" placeholder="{{\'APPLICATION_URL\' | translate}}" class="form-control" data-ng-model="account.rejectUrl" ng-required="account.rejectMethod"/>\n <span data-ng-show="(forms.reject.url.$touched || forms.reject.$submitted) && forms.reject.url.$invalid && forms.reject.url.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n\n <!-- END REJECT URL -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END REJECT TAB -->\n <!-- START CLOSE TAB -->\n <div class="tab-pane" id="tab_1_3">\n <form name="forms.close" data-ng-submit="forms.close.$valid && updateItemSmsAccount()" novalidate>\n <div class="row">\n <div class="form-group col-md-4" data-ng-class="{\'has-error\': (forms.close.method.$touched || forms.close.$submitted) && forms.close.method.$invalid}">\n <label class="control-label">{{\'APPLICATION_METHOD\' | translate}}</label>\n <ui-select data-ng-model="account.closeMethod" name="method" theme="bootstrap" >\n <ui-select-match placeholder="{{\'APPLICATION_METHOD\' | translate}}">{{$select.selected.name | uppercase}}</ui-select-match>\n <ui-select-choices repeat="type.value as type in types | filter: $select.search">\n <div ng-bind-html="type.name | highlight: $select.search | uppercase" ></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.close.method.$touched || forms.close.$submitted) && forms.close.method.$invalid && forms.close.method.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div class="form-group col-md-8" data-ng-class="{\'has-error\': (forms.close.url.$touched || forms.close.$submitted) && forms.close.url.$invalid}">\n <label class="control-label">{{\'APPLICATION_URL\' | translate}}</label>\n <input type="url" name="url" placeholder="{{\'APPLICATION_URL\' | translate}}" class="form-control" data-ng-model="account.closeUrl" ng-required="account.closeMethod"/>\n <span data-ng-show="(forms.close.url.$touched || forms.close.$submitted) && forms.close.url.$invalid && forms.close.url.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END CLOSE TAB -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'), -a.put("app/channels/sms/account/view/setting/view/view.html",'<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_SETTINGS\' | translate}}</span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_GENERALS\' | translate}}</a>\n </li>\n </ul>\n </div>\n <div class="portlet-body">\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.info" data-ng-submit="forms.info.$valid && updateItemSmsAccount()" novalidate>\n <!-- START ID -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_ID\' | translate}}<span class="required" aria-required="true">*</span>\n </label>\n <input type="text" name="id" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="account.id" ng-disabled="true" required/>\n </div>\n <!-- END ID-->\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="account.name" required/>\n <span data-ng-show="(forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid && forms.info.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n <!-- START LIST -->\n <div class="form-group" data-ng-if="license.cm">\n <label class="control-label">{{\'APPLICATION_LIST\' | translate}}</label>\n <div class="input-group">\n\n <ui-select data-ng-model="account.ListId" name="list" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_LIST\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="list.id as list in lists | filter: $select.search">\n <div ng-bind-html="list.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n\n <span class="input-group-btn">\n <button type="button" data-ng-click="account.ListId = null" class="btn btn-default">\n <span class="glyphicon glyphicon-trash"></span>\n </button>\n </span>\n\n </div>\n </div>\n <!-- END LIST -->\n <!-- START FIDELITY -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_FIDELITY\' | translate}}</label></br>\n <input\n bs-switch\n data-ng-model="account.fidelity"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_ENABLED\' | translate }}"\n switch-off-text="{{ \'APPLICATION_DISABLED\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n </div>\n <!-- END FIDELITY -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-if="account.fidelity" data-ng-class="{\'has-error\': (forms.info.timeout.$touched || forms.info.$submitted) && forms.info.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" min="0" name="timeout" placeholder="{{\'APPLICATION_PORT\' | translate}}" class="form-control" data-ng-model="account.timeout" required/>\n <span data-ng-show="(forms.info.timeout.$touched || forms.info.$submitted) && forms.info.timeout.$invalid && forms.info.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.info.timeout.$touched || forms.info.$submitted) && forms.info.timeout.$invalid && forms.info.timeout.$error.number" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_NUMERIC_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="account.description"/>\n </div>\n <!-- END DESCRIPTION -->\n <!-- START TWILIO -->\n <!-- START PHONE -->\n <div ng-if= "account.type == \'twilio\'" class="form-group" data-ng-class="{\'has-error\': ( forms.info.phone.$touched ||forms.info.$submitted) && forms.info.phone.$invalid}">\n <label class="control-label">{{\'APPLICATION_PHONE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" ng-pattern="/^[\\+]?[0-9]+$/" placeholder="{{\'APPLICATION_PHONE\' | translate}}" class="form-control" data-ng-model="account.phone" name="phone" required/>\n <span data-ng-show="(forms.info.phone.$touched || forms.in.$submitted) && forms.info.phone.$invalid && forms.info.phone.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PHONE -->\n\n <!-- START SID -->\n <div ng-if= "account.type == \'twilio\'" class="form-group" data-ng-class="{\'has-error\': (forms.info.sid.$touched || forms.info.$submitted) && forms.info.sid.$invalid}">\n <label class="control-label">{{\'APPLICATION_SID\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="sid" placeholder="{{\'APPLICATION_SID\' | translate}}" class="form-control" data-ng-model="account.sid" name="sid" required/>\n <span data-ng-show="(forms.info.sid.$touched || forms.info.$submitted) && forms.info.sid.$invalid && forms.info.sid.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END SID -->\n <!-- START TOKEN -->\n <div ng-if= "account.type == \'twilio\'" class="form-group" data-ng-class="{\'has-error\': (forms.info.token.$touched || forms.info.$submitted) && forms.info.token.$invalid}">\n <label class="control-label">{{\'APPLICATION_TOKEN\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="token" placeholder="{{\'APPLICATION_TOKEN\' | translate}}" class="form-control" data-ng-model="account.token" name="token" required/>\n <span data-ng-show="(forms.info.token.$touched || forms.info.$submitted) && forms.info.token.$invalid && forms.info.token.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END SID -->\n <!-- END TWILIO -->\n <!-- START SKEBBY -->\n <!-- START SKEBBY SMS TYPE -->\n <div ng-if= " account.type == \'skebby\'" class="form-group" data-ng-class="{\'has-error\': (forms.info.smstype.$touched || forms.info.$submitted) && forms.info.smstype.$invalid}">\n <label class="control-label">{{\'APPLICATION_SMS_TYPE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="account.smstype" name="smstype" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'SMS_TYPE\' | translate}}">{{$select.selected | uppercase}}</ui-select-match>\n <ui-select-choices repeat="smstype in [\'basic\',\'classic\',\'classic+\'] | filter: $select.search">\n <div data-ng-bind="smstype | highlight: $select.search | uppercase" ></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.info.smstype.$touched || forms.info.$submitted) && forms.info.smstype.$invalid && forms.info.smstype.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END SKEBBY SMS TYPE -->\n <!-- START PHONE -->\n <div ng-if= "account.type == \'skebby\' " class="form-group" data-ng-class="{\'has-error\': ( forms.info.phone.$touched ||forms.info.$submitted) && forms.info.phone.$invalid}">\n <label class="control-label">{{\'APPLICATION_PHONE\' | translate}}<span class="required" aria-required="true"></span></label>\n <input type="text" ng-pattern="/^[0-9]+$/" placeholder="{{\'APPLICATION_PHONE\' | translate}}" class="form-control" data-ng-model="account.phone" name="phone" required/>\n <span class="help-block">\n {{ \'DESCRIPTION_PHONE_NUMBER\' | translate }}\n </span>\n <span data-ng-show="(forms.info.phone.$touched || forms.in.$submitted) && forms.info.phone.$invalid && forms.info.phone.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PHONE -->\n <!-- START USERNAME -->\n <div ng-if= "account.type == \'skebby\'" class="form-group" data-ng-class="{\'has-error\': (forms.info.username.$touched || forms.info.$submitted) && forms.info.username.$invalid}">\n <label class="control-label">{{\'APPLICATION_USERNAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="username" placeholder="{{\'APPLICATION_USERNAME\' | translate}}" class="form-control" data-ng-model="account.username" name="username" required/>\n <span data-ng-show="(forms.info.username.$touched || forms.info.$submitted) && forms.info.username.$invalid && forms.info.username.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n\n <!-- START PASSWORD -->\n <div ng-if= "account.type == \'skebby\'" class="form-group" data-ng-class="{\'has-error\': (forms.info.password.$touched || forms.info.$submitted) && forms.info.password.$invalid}">\n <label class="control-label">{{\'APPLICATION_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="password" name="password" placeholder="{{\'APPLICATION_PASSWORD\' | translate}}" class="form-control" data-ng-model="account.password" required/>\n <span data-ng-show="(forms.info.password.$touched || forms.info.$submitted) && forms.info.password.$invalid && forms.info.password.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PASSWORD -->\n <!-- END SKEBBY -->\n <!-- START REMOTE IP -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.remote.$touched || forms.info.$submitted) && forms.info.remote.$invalid}">\n <label class="control-label">{{\'APPLICATION_MOTION_ADDRESS\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="url" name="remote" placeholder="{{\'APPLICATION_MOTION_ADDRESS\' | translate}}" class="form-control" data-ng-model="account.remote" required/>\n <span class="help-block help-block-info">\n {{\'MESSAGE_MOTION_ADDRESS_FORMAT\' | translate}}\n </span>\n <span data-ng-show="(forms.info.remote.$touched || forms.info.$submitted) && forms.info.remote.$invalid && forms.info.remote.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END REMOTE IP -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END GENERAL TAB -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/sms/account/view/view.html",'<!-- BEGIN PAGE HEADER-->\n<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="glyphicon glyphicon-comment"></i>\n <a href="#">{{ \'APPLICATION_SMS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-notebook"></i>\n <a href="/channels/sms/accounts/list">{{ \'APPLICATION_ACCOUNTS\' | translate }}</a>\n <i class="fa fa-angle-right" data-ng-show="account"></i>\n </li>\n <li data-ng-show="account">\n <a href="#">{{ account.description || account.name }}</a>\n </li>\n </ul>\n </div>\n\n<!-- END PAGE HEADER-->\n\n<!-- BEGIN PAGE CONTENT-->\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET main.channels -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img ng-src="assets/images/media/account.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{ account.description || account.name }}\n </div>\n <div class="profile-usertitle-job">\n {{account.email}}\n </div>\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li ng-class="{active: $state.is(\'main.channels.sms.accounts.view.settings\')}">\n <a href="/channels/sms/accounts/view/{{account.id}}/settings">\n <i class="icon-settings"></i>\n {{\'APPLICATION_SETTINGS\' | translate}} </a>\n </li>\n <li ng-class="{active: $state.is(\'main.channels.sms.accounts.view.api\')}">\n <a href="/channels/sms/accounts/view/{{account.id}}/api">\n <i class="fa fa-external-link"></i>\n {{\'APPLICATION_API\' | translate}} </a>\n </li>\n <li ng-class="{active: $state.is(\'main.channels.sms.accounts.view.hooks\')}">\n <a href="/channels/sms/accounts/view/{{account.id}}/hooks">\n <i class="fa fa-code"></i>\n {{\'APPLICATION_HOOKS\' | translate}} </a>\n </li>\n <li ng-class="{active: $state.is(\'main.channels.sms.accounts.view.dispositions\')}">\n <a href="/channels/sms/accounts/view/{{account.id}}/dispositions">\n <i class="icon-target"></i>\n {{\'APPLICATION_DISPOSITIONS\' | translate}} </a>\n </li>\n <li ng-class="{active: $state.includes(\'main.channels.sms.accounts.view.actions\')}">\n <a href="/channels/sms/accounts/view/{{account.id}}/actions/list">\n <i class="icon-directions"></i>\n {{\'APPLICATION_ACTIONS\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <div ui-view class="profile-content"></div>\n <!-- END PROFILE CONTENT -->\n </div>\n<!-- END PAGE CONTENT-->\n</div>\n'),a.put("app/channels/sms/account/view/view.settings.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_SETTINGS\' | translate}}</span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_GENERALS\' | translate}}</a>\n </li>\n </ul>\n </div>\n <div class="portlet-body">\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.info" data-ng-submit="forms.info.$valid && updateItemSmsAccount()" novalidate>\n <!-- START ID -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_ID\' | translate}}<span class="required" aria-required="true">*</span>\n </label>\n <input type="text" name="id" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="account.id" ng-disabled="true" required/>\n </div>\n <!-- END ID-->\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="account.name" required/>\n <span data-ng-show="(forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid && forms.info.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n <!-- START LIST -->\n <div class="form-group" data-ng-if="license.cm">\n <label class="control-label">{{\'APPLICATION_LIST\' | translate}}</label>\n <div class="input-group">\n\n <ui-select data-ng-model="account.ListId" name="list" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_LIST\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="list.id as list in lists | filter: $select.search">\n <div ng-bind-html="list.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n\n <span class="input-group-btn">\n <button type="button" data-ng-click="account.ListId = null" class="btn btn-default">\n <span class="glyphicon glyphicon-trash"></span>\n </button>\n </span>\n\n </div>\n </div>\n <!-- END LIST -->\n\n\n <!-- START FIDELITY -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_FIDELITY\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n data-ng-model="account.fidelity"\n type="checkbox"\n name="auth"\n switch-active="{{ recordSwitch.isActive }}"\n switch-on-text="{{ recordSwitch.onText }}"\n switch-off-text="{{ recordSwitch.offText }}"\n switch-on-color="{{ recordSwitch.onColor }}"\n switch-off-color="{{ recordSwitch.offColor }}"\n switch-animate="{{ recordSwitch.animate }}"\n switch-size="{{ recordSwitch.size }}"\n switch-label="{{ recordSwitch.label }}"\n switch-icon="{{ recordSwitch.icon }}"\n switch-radio-off="{{ recordSwitch.radioOff }}"\n switch-label-width="{{ recordSwitch.labelWidth }}"\n switch-handle-width="{{ recordSwitch.handleWidth }}">\n </div>\n <!-- END FIDELITY -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-if="account.fidelity" data-ng-class="{\'has-error\': (forms.info.timeout.$touched || forms.info.$submitted) && forms.info.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" min="0" name="timeout" placeholder="{{\'APPLICATION_PORT\' | translate}}" class="form-control" data-ng-model="account.timeout" required/>\n <span data-ng-show="(forms.info.timeout.$touched || forms.info.$submitted) && forms.info.timeout.$invalid && forms.info.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.info.timeout.$touched || forms.info.$submitted) && forms.info.timeout.$invalid && forms.info.timeout.$error.number" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_NUMERIC_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="account.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n <!-- START PHONE FOR TWILLIO ACCOUNT -->\n\n <div ng-if= "account.type == \'twilio\'" class="form-group" data-ng-class="{\'has-error\': ( forms.info.phone.$touched ||forms.info.$submitted) && forms.info.phone.$invalid}">\n <label class="control-label">{{\'APPLICATION_PHONE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" ng-pattern="/^[\\+]?[0-9]+$/" placeholder="{{\'APPLICATION_PHONE\' | translate}}" class="form-control" data-ng-model="account.phone" name="phone" required/>\n<!-- Format with a \'+\' and country code -->\n <!-- <span class="help-block">\n {{ \'DESCRIPTION_PHONE_NUMBER\' | translate }}\n </span> -->\n <span data-ng-show="(forms.info.phone.$touched || forms.in.$submitted) && forms.info.phone.$invalid && forms.info.phone.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PHONE FOR TWILLIO ACCOUNT -->\n\n <!-- START SID -->\n <div ng-if= "account.type == \'twilio\'" class="form-group" data-ng-class="{\'has-error\': (forms.info.sid.$touched || forms.info.$submitted) && forms.info.sid.$invalid}">\n <label class="control-label">{{\'APPLICATION_SID\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="sid" placeholder="{{\'APPLICATION_SID\' | translate}}" class="form-control" data-ng-model="account.sid" name="sid" required/>\n <span data-ng-show="(forms.info.sid.$touched || forms.info.$submitted) && forms.info.sid.$invalid && forms.info.sid.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END SID -->\n <!-- START TOKEN -->\n <div ng-if= "account.type == \'twilio\'" class="form-group" data-ng-class="{\'has-error\': (forms.info.token.$touched || forms.info.$submitted) && forms.info.token.$invalid}">\n <label class="control-label">{{\'APPLICATION_TOKEN\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="token" placeholder="{{\'APPLICATION_TOKEN\' | translate}}" class="form-control" data-ng-model="account.token" name="token" required/>\n <span data-ng-show="(forms.info.token.$touched || forms.info.$submitted) && forms.info.token.$invalid && forms.info.token.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END SID -->\n\n <!-- START SMS TYPE -->\n\n <div ng-if= " account.type == \'skebby\'" class="form-group" data-ng-class="{\'has-error\': (forms.info.smstype.$touched || forms.info.$submitted) && forms.info.smstype.$invalid}">\n <label class="control-label">{{\'APPLICATION_SMS_TYPE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="account.smstype" name="smstype" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'SMS_TYPE\' | translate}}">{{$select.selected | uppercase}}</ui-select-match>\n <ui-select-choices repeat="smstype in [\'basic\',\'classic\',\'classic+\'] | filter: $select.search">\n <div data-ng-bind="smstype | highlight: $select.search | uppercase" ></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.info.smstype.$touched || forms.info.$submitted) && forms.info.smstype.$invalid && forms.info.smstype.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TYPE -->\n <!-- START PHONE FOR SKEBBY ACCOUNT -->\n <div ng-if= "account.type == \'skebby\' " class="form-group" data-ng-class="{\'has-error\': ( forms.info.phone.$touched ||forms.info.$submitted) && forms.info.phone.$invalid}">\n <label class="control-label">{{\'APPLICATION_PHONE\' | translate}}<span class="required" aria-required="true"></span></label>\n <input type="text" ng-pattern="/^[0-9]+$/" placeholder="{{\'APPLICATION_PHONE\' | translate}}" class="form-control" data-ng-model="account.phone" name="phone" required/>\n <span class="help-block">\n {{ \'DESCRIPTION_PHONE_NUMBER\' | translate }}\n </span>\n <span data-ng-show="(forms.info.phone.$touched || forms.in.$submitted) && forms.info.phone.$invalid && forms.info.phone.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PHONE -->\n <!-- START USERNAME -->\n <div ng-if= "account.type == \'skebby\'" class="form-group" data-ng-class="{\'has-error\': (forms.info.username.$touched || forms.info.$submitted) && forms.info.username.$invalid}">\n <label class="control-label">{{\'APPLICATION_USERNAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="username" placeholder="{{\'APPLICATION_USERNAME\' | translate}}" class="form-control" data-ng-model="account.username" name="username" required/>\n <span data-ng-show="(forms.info.username.$touched || forms.info.$submitted) && forms.info.username.$invalid && forms.info.username.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n\n <!-- START PASSWORD -->\n <div ng-if= "account.type == \'skebby\'" class="form-group" data-ng-class="{\'has-error\': (forms.info.password.$touched || forms.info.$submitted) && forms.info.password.$invalid}">\n <label class="control-label">{{\'APPLICATION_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="password" name="password" placeholder="{{\'APPLICATION_PASSWORD\' | translate}}" class="form-control" data-ng-model="account.password" required/>\n <span data-ng-show="(forms.info.password.$touched || forms.info.$submitted) && forms.info.password.$invalid && forms.info.password.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PASSWORD -->\n <!-- START REMOTE IP -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.remote.$touched || forms.info.$submitted) && forms.info.remote.$invalid}">\n <label class="control-label">{{\'APPLICATION_MOTION_ADDRESS\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="url" name="remote" placeholder="{{\'APPLICATION_MOTION_ADDRESS\' | translate}}" class="form-control" data-ng-model="account.remote" required/>\n <span data-ng-show="(forms.info.remote.$touched || forms.info.$submitted) && forms.info.remote.$invalid && forms.info.remote.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END REMOTE IP -->\n <!-- START CALLBACK URL -->\n <div ng-show="!forms.info.remote.$invalid" class="row" >\n <!-- <div class="row"> -->\n <div class="col-md-12">\n <label class="control-label">URL </label><br>\n <span ng-if= "account.type == \'twilio\' || account.type == \'skebby\'">\n Copy the following url and insert it into your {{account.type}} account settings to receive sms.\n <a href="https://wiki.xcallymotion.com/display/XMD/SMS" target="_blank">Detail</a>\n </span>\n </div>\n </div>\n <br>\n <div ng-show="!forms.info.remote.$invalid" class="row" >\n <div class="col-md-11">\n <code-mirror model="receiveurl"></code-mirror>\n </div>\n <div class="col-md-1">\n <a class="btn btn-sm green-jungle" data-ng-click="copyToClipboard(receiveurl);"><i class="fa fa-clipboard"></i>\n </a>\n </div>\n </div>\n <!-- END CALLACK URL -->\n <!-- START DELIVERY CALLBACK URL -->\n <div ng-if= "account.smstype == \'classic+\'" class="row" ng-show="!forms.info.remote.$invalid">\n <div class="col-md-12">\n <label class="control-label">Delivery URL </label><br>\n Copy the following url and insert it into your {{account.type}} account settings to receive delivery status.\n <a href="https://wiki.xcallymotion.com/display/XMD/SMS" target="_blank">Detail</a>\n </div>\n </div>\n <br>\n <div ng-if= "account.smstype == \'classic+\'" class="row" ng-show="!forms.info.remote.$invalid">\n <div class="col-md-11">\n <code-mirror class="control-label" model="deliveryurl"></code-mirror>\n </div>\n <div class="col-md-1">\n <a class="btn btn-sm green-jungle" data-ng-click="copyToClipboard(deliveryurl);"><i class="fa fa-clipboard"></i>\n </a>\n </div>\n </div>\n <!-- END DELIVERY CALLACK URL -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END GENERAL TAB -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'), -a.put("app/channels/sms/account/wizard/wizard.html",'\n<div class="row" data-ng-init="initWizard()">\n <div class="col-md-12">\n <!-- BEGIN PAGE HEADER-->\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="glyphicon glyphicon-comment"></i>\n <a href="#">{{ \'APPLICATION_SMS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-notebook"></i>\n <a href="/channels/sms/accounts/list">{{ \'APPLICATION_ACCOUNTS\' | translate }}</a>\n </li>\n </ul>\n </div>\n <!-- END PAGE HEADER-->\n\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-notebook font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_ACCOUNT\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="createItem()">\n <wz-step title="{{\'APPLICATION_ACCOUNT_INFO\' | translate}}" canexit="formValidation(forms.info.$valid)">\n <form name="forms.info" novalidate>\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="(forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid && forms.info.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"/>\n </div>\n <!-- END DESCRIPTION -->\n <!-- START APPLICATION TYPE -->\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.type.$touched || forms.info.$submitted) && forms.info.type.$invalid}">\n <label class="control-label">{{\'APPLICATION_TYPE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="item.type" name="type" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_TYPE\' | translate}}">{{$select.selected | uppercase}}</ui-select-match>\n <ui-select-choices repeat="type in [\'twilio\',\'skebby\'] | filter: $select.search">\n <div data-ng-bind="type | highlight: $select.search | uppercase" ></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.info.type.$touched || forms.info.$submitted) && forms.info.type.$invalid && forms.info.type.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TYPE -->\n <!-- START PHONE FOR TWILLIO ACCOUNT -->\n <div ng-if= "item.type == \'twilio\'" class="form-group" data-ng-class="{\'has-error\': ( forms.info.phone.$touched ||forms.info.$submitted) && forms.info.phone.$invalid}">\n <label class="control-label">{{\'APPLICATION_PHONE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" ng-pattern="/^[\\+]?[0-9]+$/" placeholder="{{\'APPLICATION_PHONE\' | translate}}" class="form-control" data-ng-model="item.phone" name="phone" required/>\n <span data-ng-show="(forms.info.phone.$touched || forms.info.$submitted) && forms.info.phone.$invalid && forms.info.phone.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PHONE FOR TWILLIO ACCOUNT -->\n <!-- START SID -->\n <div ng-if= "item.type == \'twilio\'" class="form-group" data-ng-class="{\'has-error\': ( forms.info.sid.$touched ||forms.info.$submitted) && forms.info.sid.$invalid}">\n <label class="control-label">{{\'APPLICATION_SID\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" placeholder="{{\'APPLICATION_SID\' | translate}}" class="form-control" data-ng-model="item.sid" name="sid" required/>\n <span data-ng-show="(forms.info.sid.$touched || forms.info.$submitted) && forms.info.sid.$invalid && forms.info.sid.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END SID -->\n <!-- START TOKEN -->\n <div ng-if= "item.type == \'twilio\'" class="form-group" data-ng-class="{\'has-error\': (forms.info.token.$touched || forms.info.$submitted) && forms.info.token.$invalid}">\n <label class="control-label">{{\'APPLICATION_TOKEN\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" placeholder="{{\'APPLICATION_TOKEN\' | translate}}" class="form-control" data-ng-model="item.token" name="token" required/>\n <span data-ng-show="(forms.info.token.$touched || forms.info.$submitted) && forms.info.token.$invalid && forms.info.token.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END SID -->\n\n <!-- START SMS TYPE -->\n <div ng-if= " item.type == \'skebby\'" class="form-group" data-ng-class="{\'has-error\': (forms.info.smstype.$touched || forms.info.$submitted) && forms.info.smstype.$invalid}">\n <label class="control-label">{{\'APPLICATION_SMS_TYPE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="item.smstype" name="smstype" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'SMS_TYPE\' | translate}}">{{$select.selected | uppercase}}</ui-select-match>\n <ui-select-choices repeat="smstype in [\'basic\',\'classic\',\'classic+\'] | filter: $select.search">\n <div data-ng-bind="smstype | highlight: $select.search | uppercase" ></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.info.smstype.$touched || forms.info.$submitted) && forms.info.smstype.$invalid && forms.info.smstype.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TYPE -->\n <!-- START PHONE FOR SKEBBY ACCOUNT -->\n <div ng-if= "item.type == \'skebby\' " class="form-group" data-ng-class="{\'has-error\': ( forms.info.phone.$touched ||forms.info.$submitted) && forms.info.phone.$invalid}">\n <label class="control-label">{{\'APPLICATION_PHONE\' | translate}}<span class="required" aria-required="true"></span></label>\n <input type="text" ng-pattern="/^[0-9]+$/" placeholder="{{\'APPLICATION_PHONE\' | translate}}" class="form-control" data-ng-model="item.phone" name="phone" required/>\n <span class="help-block">\n {{ \'DESCRIPTION_PHONE_NUMBER\' | translate }}\n </span>\n <span data-ng-show="(forms.info.phone.$touched || forms.info.$submitted) && forms.info.phone.$invalid && forms.info.phone.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PHONE -->\n <!-- START USERNAME -->\n <div ng-if= "item.type == \'skebby\'" class="form-group" data-ng-class="{\'has-error\': (forms.info.username.$touched || forms.info.$submitted) && forms.info.username.$invalid}">\n <label class="control-label">{{\'APPLICATION_USERNAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="username" placeholder="{{\'APPLICATION_USERNAME\' | translate}}" class="form-control" data-ng-model="item.username" name="username" required/>\n <span data-ng-show="(forms.info.username.$touched || forms.info.$submitted) && forms.info.username.$invalid && forms.info.username.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n <!-- START PASSWORD -->\n <div ng-if= "item.type == \'skebby\'" class="form-group" data-ng-class="{\'has-error\': (forms.info.password.$touched || forms.info.$submitted) && forms.info.password.$invalid}">\n <label class="control-label">{{\'APPLICATION_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="password" name="password" placeholder="{{\'APPLICATION_PASSWORD\' | translate}}" class="form-control" data-ng-model="item.password" required/>\n <span data-ng-show="(forms.info.password.$touched || forms.info.$submitted) && forms.info.password.$invalid && forms.info.password.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PASSWORD -->\n <!-- START REMOTE IP -->\n <div ng-if= "item.type" class="form-group" data-ng-class="{\'has-error\': (forms.info.remote.$touched || forms.info.$submitted) && forms.info.remote.$invalid}">\n <label class="control-label">{{\'APPLICATION_MOTION_ADDRESS\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="url" name="remote" placeholder="{{\'APPLICATION_MOTION_ADDRESS\' | translate}}" class="form-control" data-ng-model="item.remote" required/>\n <span class="help-block help-block-info">\n {{\'MESSAGE_MOTION_ADDRESS_FORMAT\' | translate}}\n </span>\n <span data-ng-show="(forms.info.remote.$touched || forms.info.$submitted) && forms.info.remote.$invalid && forms.info.remote.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END REMOTE IP -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" data-ng-click="goNext()"/>\n </form>\n </wz-step>\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n <input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n </wz-step>\n </wizard>\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/sms/inbox/room/room.directive.html",'<!-- BEGIN TODO CONTENT -->\n\n<div class="todo-content">\n <div class="portlet light">\n <div class="portlet-title">\n <div class="caption">\n <button class="btn btn-sm btn-default green-meadow" data-ng-if="SmsRoom.status !== \'CLOSED\'" data-ng-disabled="!form.body || forms.compose.from.$invalid || forms.compose.to.$invalid" data-ng-click="sendSMS()">\n <i class="icon-paper-plane" style="color: white;"></i> {{\'APPLICATION_SEND\' | translate}}\n </button>\n <span data-ng-show="SmsRoom && SmsRoom.status !== \'CLOSED\'"> | </span>\n <span data-ng-show="SmsRoom" class="label label-default">#{{SmsRoom.id}} {{SmsRoom.status}}</span>\n <span data-ng-if="SmsRoom && SmsRoom.ParentId"> | </span>\n <span data-ng-if="SmsRoom && SmsRoom.ParentId" class="label label-warning"> Ref: <a data-ng-click="openRoom(SmsRoom.ParentId,SmsRoom.contact)">#{{SmsRoom.ParentId}}</a></span>\n </div>\n <div class="actions" data-ng-switch="SmsRoom.status">\n <button class="btn btn-icon-only" data-ng-show="SmsRoom" data-ng-class="{\'btn-success\':SmsRoom.status !== \'CLOSED\',\'grey-cascade\':SmsRoom.status === \'CLOSED\'}" data-ng-click="closeRoom(SmsRoom.id)" data-ng-disabled="SmsRoom.status === \'CLOSED\' && SmsRoom.disposition">\n <i data-ng-class="{\'fa fa-upload\':SmsRoom.status !== \'CLOSED\',\'icon-target\':SmsRoom.status === \'CLOSED\'}"></i>\n </button>\n <button class="btn default btn-icon-only" data-ng-if="SmsRoom && SmsRoom.status !== \'CLOSED\'" type="button" data-ng-click="togglePanelLeft()" title="{{\'APPLICATION_RESIZE\' | translate}}">\n <i ng-class="panelRight == \'col-md-12\' ? \'icon-size-actual\' : \'icon-size-fullscreen\'"></i>\n </button>\n </div>\n </div>\n <div class="portlet-body">\n <div class="row">\n <div data-ng-show="panelLeft" data-ng-class="panelLeft">\n <div class="form">\n <!-- START TAGS -->\n <div class="form-group" data-ng-if="SmsRoom.status !== \'CLOSED\' || (SmsRoom.status == \'CLOSED\' && form.tags.length)">\n <div class="row">\n <div class="col-md-1">\n <a href="#" class="btn btn-icon-only">\n <i class="fa fa-tags" style="color: gray;"></i>\n </a>\n </div>\n <div class="col-md-11">\n <ui-select data-ng-disabled="SmsRoom.status == \'CLOSED\'" multiple data-ng-model="form.tags" theme="bootstrap" on-select="onChanged($item, $model)" on-remove="onChanged($item, $model)">\n <ui-select-match placeholder="Tags...">{{$item}}</ui-select-match>\n <ui-select-choices repeat="tag in tags | filter:$select.search" class="">\n {{tag}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n </div>\n <!-- END TAGS -->\n </div>\n <hr data-ng-if="SmsRoom && SmsRoom.status !== \'CLOSED\'">\n\n <div ng-scrollbars ng-scrollbars-config="{\n autoHideScrollbar: false,\n theme: \'light\',\n advanced: {\n updateOnContentResize: true\n },\n setHeight: 781,\n scrollInertia: 0\n }">\n <ul class="chats">\n <li data-ng-switch="SmsRoom.status" data-ng-class="{\'in\': smsMessage.status == \'RECEIVED\', \'out\': smsMessage.status == \'SENT\' || smsMessage.status == \'SENDING\' || smsMessage.status == \'FAILED\' || smsMessage.status == \'NOTE\' || smsMessage.status == \'DELIVERED\' || smsMessage.status == \'QUEUED\' || smsMessage.status != \'RECEIVED\' }" data-ng-repeat="smsMessage in SmsRoom.SmsMessages | orderBy:\'-createdAt\'">\n <div class="avatar" data-ng-class="smsMessage.UserId ? \'pretty-avatar\' : \'pretty-avatar-v\'">\n <ng-letter-avatar\n data-ng-if="smsMessage.UserId"\n height="40"\n width="40"\n fontsize="25"\n data="{{smsMessage.User.fullname}}"\n avatarcustombgcolor="#B0B0B0"\n avatarcustomborder="border:2px solid #3399CC"\n charCount="2"\n shape="round"></ng-letter-avatar>\n <ng-letter-avatar\n data-ng-if="!smsMessage.UserId"\n height="40"\n width="40"\n fontsize="25"\n data="{{smsMessage.from}}"\n avatarcustombgcolor="#B0B0B0"\n avatarcustomborder="border:2px solid #EA4C61"\n charCount="1"\n shape="round"></ng-letter-avatar>\n </div>\n <sms message="smsMessage" list-id="SmsRoom.SmsAccount.ListId" accounttype=\'SmsRoom.SmsAccount.type\' ng-switch-default></sms>\n </li>\n </ul>\n </div>\n </div>\n <div data-ng-class="panelRight">\n <div class="note note-info" data-ng-if="SmsRoom && SmsRoom.status == \'CLOSED\'">\n <h4 class="block">Info! {{\'MESSAGE_SMS_ROOM_CLOSED\' | translate}}</h4>\n <p>\n {{\'MESSAGE_SMS_ROOM_CLOSED_DETAILS\' | translate}}.\n </p>\n <hr>\n <p>\n <i class="icon-target"></i> {{\'APPLICATION_DISPOSITION\' | translate}}: <strong>{{SmsRoom.disposition}}</strong>\n </p>\n <p>\n <i class="icon-calendar"></i> {{\'APPLICATION_UPDATED_AT\' | translate}}: <strong>{{SmsRoom.updatedAt | date:\'medium\'}}</strong> (<span am-time-ago="SmsRoom.updatedAt"></span>)\n </p>\n </div>\n <form name="forms.compose" data-ng-submit="forms.compose.$valid && sendSMS()" class="form-horizontal" novalidate>\n <!-- START HEAD -->\n <div class="form">\n\n <!-- START FROM -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.compose.from.$invalid && forms.compose.$submitted}" data-ng-if="SmsRoom.status !== \'CLOSED\'">\n <div class="col-md-12">\n <div class="row">\n <div class="col-md-1">\n <label class="control-label">From:</label>\n </div>\n <div class="col-md-11">\n <ui-select data-ng-disabled="SmsRoom" theme="bootstrap" name="from" data-ng-model="form.from" required>\n <ui-select-match placeholder="From...">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="smsAccount.phone as smsAccount in smsAccounts | filter: $select.search">\n <div data-ng-bind-html="smsAccount.name | highlight: $select.search"></div>\n <small data-ng-bind-html="smsAccount.phone | highlight: $select.search"></small>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.compose.from.$invalid && forms.compose.$submitted " class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n </div>\n </div>\n <!-- END FROM -->\n <!-- START TO -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.compose.to.$invalid && forms.compose.$submitted}" data-ng-if="SmsRoom.status !== \'CLOSED\'">\n\n <div class="col-md-12">\n <div class="row">\n <div class="col-md-1">\n <label class="control-label">To:</label>\n </div>\n <div class="col-md-11">\n <input type="text" ng-pattern="/^[\\+]?[0-9]+$/" name="to" class="form-control todo-taskbody-taskdesc" placeholder="To..." rows="8" data-ng-disabled="SmsRoom" data-ng-model="form.to" required>\n <span data-ng-show="forms.compose.to.$invalid && forms.compose.$submitted " class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n </div>\n </div>\n <!-- END TO -->\n <!-- START CANNED -->\n <div class="form-group" data-ng-if="SmsRoom.status !== \'CLOSED\'">\n <div class="row">\n <div class="col-md-1">\n <a href="#" class="btn btn-icon-only">\n <i class="fa fa-magic" style="color: gray;"></i>\n </a>\n </div>\n <div class="col-md-11">\n <input type="text"\n data-ng-model="modelOptions.selectedAnswer"\n uib-typeahead="key for key in getAnswers($viewValue)"\n placeholder="Canned answers.."\n typeahead-loading="loadingLocations"\n typeahead-no-results="noResults"\n typeahead-on-select="onSelect($item)"\n class="form-control">\n <i ng-show="loadingLocations" class="glyphicon glyphicon-refresh"></i>\n <div ng-show="noResults">\n <i class="glyphicon glyphicon-remove"></i> No Results Found\n </div>\n </div>\n </div>\n\n </div>\n <!-- END CANNED -->\n <!-- START message -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.compose.body.$invalid && forms.compose.$submitted}" data-ng-if="SmsRoom.status !== \'CLOSED\'">\n <div class="col-md-12">\n <textarea id="text" class="form-control maxlength-handler" rows="8" maxlength="160" name="body" data-ng-model="form.body" ></textarea>\n <button id="btnPost" type="button" class="btn btn-success pull-right" ng-class="{\'btn-warning\': form.body.length >= 120, \'btn-danger\': form.body.length >= 141 }">{{ 160 - form.body.length }}</button>\n <span class="help-block"> Max 160 chars</span>\n <span data-ng-show="forms.compose.body.$invalid && forms.compose.$submitted " class="help-block help-block-error">\n'+" <strong>{{'APPLICATION_WARNING' | translate}}!</strong> {{'MESSAGE_REQUIRED_FIELD' | translate}}.\n </span>\n </div>\n </div>\n\n <!-- END message -->\n </div>\n </form>\n </div>\n </div>\n </div>\n </div>\n</div>\n<!-- END TODO CONTENT -->\n"),a.put("app/channels/sms/inbox/sms/info.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_INFO\' | translate }}</h3>\n</div>\n<div class="modal-body" data-ng-init="initInfo()" style=" overflow-x: auto;">\n <div class="form-group" ng-if="data">\n <json-formatter json="data" open="1"></json-formatter>\n </div>\n <div class="note note-warning" data-ng-hide="data">\n <p>\n {{ \'MESSAGE_NO_INFO_AVAILABLE\' | translate }}\n </p>\n </div>\n\n</div>\n<div class="modal-footer">\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CLOSE\' | translate }}</button>\n</div>\n'),a.put("app/channels/sms/inbox/sms/sms.html",'<div class="message">\n <div class="row">\n <div class="col-md-6">\n <span class="bold">From: </span>\n [<a href="" data-ng-click="openContact(smsMessage.from)">{{smsMessage.from}}</a>]\n <br>\n <span class="bold">To: </span>\n [<a href="" data-ng-click="openContact(smsMessage.to)">{{smsMessage.to}}</a>]\n <br>\n </div>\n <div class="col-md-6">\n <span class="pull-right" data-ng-if="smsMessage.User">{{\'APPLICATION_SENT_BY\' | translate}}: <strong>{{smsMessage.User.fullname}}</strong></span>\n <span class="pull-right" data-ng-if="smsMessage.source">{{\'APPLICATION_SENT_BY\' | translate}}: <strong>Cally ²</strong>\n <a ng-click="info(smsMessage.source)"><i class="icon-info font-blue"></i>\n </a>\n </div>\n </div>\n\n <br>\n <span class="todo-tasklist-date">\n <span class="pull-right" data-ng-switch="smsMessage.status">\n <a ng-switch-when="RECEIVED" href="#" class="btn default btn-xs inactive-link green-stripe"> {{smsMessage.status | uppercase}}\n <i class="fa fa-check"></i>\n </a>\n <a ng-switch-when="SENT" href="#" class="btn default btn-xs inactive-link green-stripe"> {{smsMessage.status | uppercase}}\n <i class="fa fa-check"></i>\n </a>\n <a ng-switch-when="DELIVERED" href="#" class="btn default btn-xs inactive-link green-stripe"> {{smsMessage.status | uppercase}}\n <i class="fa fa-check"></i>\n </a>\n <a ng-switch-when="SENDING" href="#" class="btn default btn-xs inactive-link blue-stripe" > {{smsMessage.status | uppercase}}\n <i class="fa fa-warning"></i>\n </a>\n <a ng-switch-when="FAILED" href="#" class="btn default btn-xs red-stripe" data-ng-click="info(null,smsMessage.res_data)"> {{smsMessage.status | uppercase}}\n <i class="fa fa-times"></i>\n </a>\n <a ng-switch-default href="#" class="btn default btn-xs"> {{smsMessage.status | uppercase}}\n </a>\n <br>\n <!-- <a ng-href="https://www.twilio.com/docs/errors/{{smsMessage.errorcode}}" target="_blank" ng-if="(smsMessage.errorcode) && (accounttype==\'twilio\')">Error Code:{{smsMessage.errorcode}}</a>\n <a ng-href="{{smsMessage.errorcode.length > 2 ? \'http://www.skebby.com/sms-api/sms-gateway/developers-docs/#receiveNotifySection\' : \'http://www.skebby.com/sms-api/sms-gateway/developers-docs/#errorCodesSection\'}}" target="_blank" ng-if="(smsMessage.errorcode != 1) && (smsMessage.errorcode) && (accounttype==\'skebby\')">Error Code:{{smsMessage.errorcode}}</a> -->\n </span>\n\n <i class="icon-calendar"></i> <span am-time-ago="smsMessage.updatedAt"></span>\n </span>\n <hr>\n <span class="body text-left" data-ng-bind-html="smsMessage.body" style="white-space: pre-wrap;"></span>\n\n </div>\n'),a.put("app/channels/sms/inbox/view/account/list/list.html",'<!-- BEGIN Portlet PORTLET-->\n<div class="portlet light" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption">\n <div class="btn-group btn-group-solid">\n <button type="button" class="btn btn-sm default" data-ng-model="query.status" uib-btn-radio="\'NEW\'" uib-uncheckable>NEW</button>\n </div>\n <div class="btn-group btn-group-solid">\n <button type="button" class="btn btn-sm default" data-ng-model="query.status" uib-btn-radio="\'OPEN\'" uib-uncheckable>OPEN</button>\n </div>\n <div class="btn-group btn-group-solid">\n <button type="button" class="btn btn-sm default" data-ng-model="query.status" uib-btn-radio="\'PENDING\'" uib-uncheckable>PENDING</button>\n </div>\n <div class="btn-group btn-group-solid">\n <button type="button" class="btn btn-sm default" data-ng-model="query.status" uib-btn-radio="\'CLOSED\'" uib-uncheckable>CLOSED</button>\n </div>\n </div>\n <div class="actions">\n <a href="#" class="btn btn-icon-only default" data-ng-click="getPage();">\n <i class="fa fa-refresh"></i>\n </a>\n <a href="#" class="btn btn-icon-only red" data-ng-click="deleteItems();" data-ng-show="id.length && isAdmin">\n <i class="fa fa-trash"></i>\n </a>\n <a href="#" class="btn btn-icon-only btn-success" data-ng-click="disposeItems();" data-ng-show="id.length">\n <i class="fa fa-upload"></i>\n </a>\n <a href="#" class="btn btn-icon-only blue" data-ng-click="tagItems();" data-ng-show="id.length">\n <i class="fa fa-tags"></i>\n </a>\n <a href="#" class="btn btn-icon-only green" data-ng-click="openRoom(null, \'New Message\')">\n <i class="fa fa-plus"></i>\n </a>\n </div>\n </div>\n <div class="portlet-title" data-ng-show="tags.length">\n <!-- START TAGS -->\n <div class="form-group">\n <div class="row">\n <div class="col-md-1">\n <a href="#" class="btn btn-icon-only">\n <i class="fa fa-tags" style="color: gray;"></i>\n </a>\n </div>\n <div class="col-md-11">\n <ui-select multiple data-ng-model="query.tags" theme="bootstrap" on-select="onChanged($item, $model)" on-remove="onChanged($item, $model)">\n <ui-select-match placeholder="Search by tag...">{{$item}}</ui-select-match>\n <ui-select-choices repeat="tag in tags | filter:$select.search">\n {{tag}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n </div>\n <!-- END TAGS -->\n </div>\n <div class="portlet-body">\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="spinner-grid" spinner-start-active="false"></span>\n <!-- END UI-GRID SPINNER -->\n\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-pagination ui-grid-selection ui-grid-exporter class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n</div>\n<!-- END Portlet PORTLET-->\n'),a.put("app/channels/sms/inbox/view/view.agents.modal.html",'<div class="modal-header" data-ng-init="initModal()">\n <h3 class="modal-title">{{ \'APPLICATION_AGENTS\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <!-- START TRANSPORT -->\n <div class="form-group">\n <form name="form" novalidate>\n <!-- START TRANSPORT -->\n <div class="form-group">\n <ui-select multiple name="agents" data-ng-model="item.agents" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_AGENTS\' | translate}}">{{$item.fullname}}</ui-select-match>\n <ui-select-choices repeat="agent.id as agent in agents | filter: $select.search">\n {{agent.fullname}}\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END TRANSPORT -->\n </form>\n </div>\n <!-- END TRANSPORT -->\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" data-ng-click="ok()">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" data-ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/sms/inbox/view/view.html",'<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="glyphicon glyphicon-comment"></i>\n <a href="#">{{ \'APPLICATION_SMS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-note"></i>\n <a href="/channels/sms/inbox/list">{{ \'APPLICATION_INBOX\' | translate }}</a>\n </li>\n </ul>\n </div>\n </div>\n</div>\n\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row inbox" data-ng-init="initView()">\n <div class="col-md-3">\n <ul class="inbox-nav margin-bottom-10">\n <li data-ng-class="{active: $stateParams.id == smsAccount.id}" data-ng-repeat="smsAccount in smsAccounts">\n <a href="/channels/sms/inbox/view/account/{{smsAccount.id}}/list" class="btn">\n <i class="icon-notebook"></i> {{smsAccount.name}}\n </a>\n <b></b>\n </li>\n </ul>\n </div>\n\n <div class="col-md-9" >\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view>\n <div class="note note-info">\n <h4 class="block">Info! {{\'APPLICATION_NO_ACCOUNT_SELECTED\' | translate}}</h4>\n </div>\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/sms/inbox/view/view.status.modal.html",'<div class="modal-header">\n <button ng-if="modal.dismissable" type="button" ng-click="$dismiss()" class="close">×</button>\n <h4 ng-if="modal.title" ng-bind="modal.title | translate" class="modal-title"></h4>\n</div>\n<div class="modal-body">\n <p ng-if="modal.text && !closed" ng-bind="modal.text | translate"></p>\n <form name="form" novalidate data-ng-init="initDisposition()">\n <div class="form-group">\n <ui-select data-ng-model="item.disposition" name="list" theme="bootstrap" data-ng-disabled="!dispositions.length" required>\n <ui-select-match placeholder="{{\'APPLICATION_DISPOSITION\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="disposition.name as disposition in dispositions | filter: $select.search">\n <div ng-bind-html="disposition.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <div class="note note-warning" data-ng-hide="dispositions.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_DISPOSITIONS_AVAILABLE\' | translate }}\n </p>\n </div>\n</form>\n <!-- <div ng-if="modal.html" ng-bind-html="modal.html"></div> -->\n</div>\n<div class="modal-footer">\n <button class="btn btn-danger" type="button" ng-click="ok()">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n <!-- <button ng-repeat="button in modal.buttons" ng-class="button.classes" ng-click="button.click($event)" ng-bind="button.text" class="btn"></button> -->\n</div>\n'), -a.put("app/channels/sms/inbox/view/view.tags.modal.html",'<div class="modal-header" data-ng-init="initModal()">\n <h3 class="modal-title">{{ \'APPLICATION_TAGS\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <!-- START TRANSPORT -->\n <div class="form-group">\n <form name="form" novalidate>\n <!-- START TAGS -->\n <div class="form-group">\n <ui-select multiple data-ng-model="item.tags" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_TAGS\' | translate}}">{{$item}}</ui-select-match>\n <ui-select-choices repeat="tag in tags | filter: $select.search">\n {{tag}}\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END TAGS -->\n </form>\n </div>\n <!-- END TRANSPORT -->\n</div>\n<div class="modal-footer">\n <button type="button" class="btn" data-ng-class="button.class" data-ng-click="button.click()"data-ng-repeat="button in modal.buttons">{{button.text | translate}}</button>\n <!-- <button class="btn btn-success" type="button" data-ng-click="ok()">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" data-ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button> -->\n</div>\n'),a.put("app/channels/sms/inbox/view/view.templates.modal.html",'<div class="modal-header" data-ng-init="initModal()">\n <h3 class="modal-title">{{ \'APPLICATION_TEMPLATES\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <div class="note note-info" data-ng-show="!templates.length">\n <h4 class="block">Info!</h4>\n <p>\n {{\'MESSAGE_NO_TEMPLATES_AVAILABLE\' | translate}}\n </p>\n </div>\n <form name="form" data-ng-show="templates.length" novalidate>\n <div class="form-group">\n <ui-select data-ng-model="item.template" theme="bootstrap">\n <ui-select-match placeholder="Select a template in the list or search his name...">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="template in templates | propsFilter: {name: $select.search}">\n <div ng-bind-html="template.name | highlight: $select.search"></div>\n <small data-ng-show="template.description">\n {{\'APPLICATION_DESCRIPTION\' | translate}}: {{template.description}}\n </small>\n </ui-select-choices>\n </ui-select>\n </div>\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" data-ng-click="ok()" data-ng-show="templates.length">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" data-ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/sms/queue/list/list.create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_QUEUE\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.name.$touched || form.$submitted) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" data-ng-pattern="settings.patternName" required />\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$invalid && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$invalid && form.name.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_PATTERN_NAME\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START STRATEGY -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.strategy.$touched || form.$submitted) && form.strategy.$invalid}">\n <label class="control-label">{{\'APPLICATION_STRATEGY\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="item.strategy" name="strategy" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.toUpperCase()}}</ui-select-match>\n <ui-select-choices repeat="strategy in strategies | filter: $select.search">\n <div ng-bind-html="strategy.toUpperCase() | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form.strategy.$touched || form.$submitted) && form.strategy.$invalid && form.strategy.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END STRATEGY -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.timeout.$touched || form.$submitted) && form.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_AGENT_TIMEOUT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" min="0" name="timeout" placeholder="Timeout" class="form-control" data-ng-model="item.timeout" required min="1"/>\n <span data-ng-show="(form.timeout.$touched || form.$submitted) && form.timeout.$invalid && form.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n\n <!-- START AGENTS-->\n <div class="form-body" data-ng-init="getTeams()">\n <label for="penalty">{{\'APPLICATION_PENALTY\' | translate}}</label>\n <div class="input-group input-small mbottom20">\n <input type="number" class="spinner-input form-control" maxlength="3" data-ng-model="item.penalty" readonly>\n <div class="spinner-buttons input-group-btn btn-group-vertical">\n <button type="button" class="btn spinner-up btn-xs blue" data-ng-click="item.penalty=item.penalty+1">\n <i class="fa fa-angle-up"></i>\n </button>\n <button type="button" class="btn spinner-down btn-xs blue" data-ng-disabled="!item.penalty" data-ng-click="item.penalty=item.penalty-1">\n <i class="fa fa-angle-down"></i>\n </button>\n </div>\n </div>\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-team">\n </div>\n </div>\n </div>\n <!-- END AGENTS-->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/sms/queue/list/list.html",'<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="glyphicon glyphicon-comment"></i>\n <a href="#">{{ \'APPLICATION_SMS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-docs"></i>\n <a href="#">{{ \'APPLICATION_QUEUES\' | translate }}</a>\n </li>\n </ul>\n </div>\n </div>\n</div>\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-docs font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_QUEUES\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <a class="btn green-jungle" href="#" data-ng-click="createItem()" data-ng-if="Auth.isAdmin()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_QUEUE\' | translate }}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/sms/queue/view/view.agents.html",'<div class="row" data-ng-init="getTeams()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_AGENTS\' | translate}}</span>\n </div>\n </div>\n <div class="note note-warning" data-ng-hide="teams.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_AVAILABLE_TEAMS\' | translate }}\n </p>\n </div>\n <div class="portlet-body">\n <!-- BEGIN FORM-->\n <form action="index.html" class="form-horizontal form-row-seperated">\n <div class="form-body">\n <label for="penalty">{{\'APPLICATION_PENALTY\' | translate}}</label>\n <div class="input-group input-small mbottom20">\n <input type="number" class="spinner-input form-control" maxlength="3" data-ng-model="queue.penalty" readonly>\n <div class="spinner-buttons input-group-btn btn-group-vertical">\n <button type="button" class="btn spinner-up btn-xs blue" data-ng-click="queue.penalty=queue.penalty+1">\n <i class="fa fa-angle-up"></i>\n </button>\n <button type="button" class="btn spinner-down btn-xs blue" data-ng-disabled="!queue.penalty" data-ng-click="queue.penalty=queue.penalty-1">\n <i class="fa fa-angle-down"></i>\n </button>\n </div>\n </div>\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-team">\n </div>\n </div>\n </div>\n </form>\n <!-- END FORM-->\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/sms/queue/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getQueue()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="glyphicon glyphicon-comment"></i>\n <a href="#">{{ \'APPLICATION_SMS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-docs"></i>\n <a href="/channels/sms/queues/list">{{ \'APPLICATION_QUEUES\' | translate }}</a>\n <i data-ng-show="queue" class="fa fa-angle-right"></i>\n </li>\n <li data-ng-show="queue">\n <a href="#">{{queue.name}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET main.channels -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/queue.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{queue.name}}\n </div>\n <!-- <div class="profile-usertitle-job">\n {{user.role}}\n </div> -->\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.channels.sms.queues.view.settings\')}">\n <a data-ng-href="/channels/sms/queues/view/{{queue.id}}/settings">\n <i class="icon-settings"></i>\n {{ \'APPLICATION_SETTINGS\' | translate}} </a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.channels.sms.queues.view.agents\')}" data-ng-show="Auth.getCurrentUser().role === \'admin\'">\n <a data-ng-href="/channels/sms/queues/view/{{queue.id}}/agents">\n <i class="icon-people"></i>\n {{ \'APPLICATION_AGENTS\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET main.channels -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n </div>\n <!-- END PAGE CONTENT-->\n'),a.put("app/channels/sms/queue/view/view.settings.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_SETTINGS\' | translate}}</span>\n </div>\n </div>\n <div class="portlet-body">\n <form name="forms.general" data-ng-submit="forms.general.$valid && updateSmsQueue()" novalidate>\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="queue.name" data-ng-pattern="settings.patternName" required />\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid && forms.general.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid && forms.general.name.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_PATTERN_NAME\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START STRATEGY -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.strategy.$touched || forms.general.$submitted) && forms.general.strategy.$invalid}">\n <label class="control-label">{{\'APPLICATION_STRATEGY\' | translate}}</label>\n <ui-select data-ng-model="queue.strategy" name="strategy" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected | uppercase}}</ui-select-match>\n <ui-select-choices repeat="strategy in strategies | filter: $select.search">\n <div ng-bind-html="strategy | uppercase | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END STRATEGY -->\n\n <!-- START TIMEOUT -->\n <div class="form-group">\n <label class="control-label">Timeout</label>\n <input type="number" name="timeout" placeholder="Timeout" class="form-control" min="1" data-ng-model="queue.timeout"/>\n </div>\n <!-- END TIMEOUT -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="queue.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n <input data-ng-if="Auth.isAdmin()" class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/sms/realtime/view/agent/agent.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initAgents()">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns class="ui-grid" ui-grid-tree-view ui-grid-expandable-row ui-grid-pagination ui-grid-auto-resize>\n <span us-spinner spinner-key="grid-spinner" spinner-start-active="true"></span>\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/sms/realtime/view/agent/agent.modal.info.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_INTERFACE_INFO\' | translate }}</h3>\n</div>\n<div class="modal-body">\n<div data-ng-if="agent.ipaddr" class="well">\n <div>{{agent.ipaddr}}:{{agent.port}}</div>\n <div>{{agent.fullcontact}}</div>\n <div>{{agent.useragent}}</div>\n <div>{{agent.lastms}}</div>\n</div>\n<div data-ng-if="!agent.ipaddr" class="alert alert-danger" role="alert">\n {{\'MESSAGE_NO_AVAILABLE_INFO\' | translate}}\n</div>\n</div>\n<div class="modal-footer">\n <button class="btn default" type="button" ng-click="close()">{{ \'APPLICATION_CLOSE\' | translate }}</button>\n</div>\n'),a.put("app/channels/sms/realtime/view/agent/queue.modal.add.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_JOIN_QUEUE\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <div class="form-group row">\n <label class="col-md-2 control-label" style="margin-top: 7px;">{{\'APPLICATION_QUEUE\' | translate}}:</label>\n <div class="col-md-10">\n <ui-select multiple ng-model="item.queues" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_QUEUE\' | translate}}">{{$item.name}}</ui-select-match>\n <ui-select-choices repeat="queue.id as queue in queues | filter: $select.search">\n <div ng-bind-html="queue.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n</div>\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/sms/realtime/view/application/application.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initApplications()">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns class="ui-grid" ui-grid-auto-resize>\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/sms/realtime/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-directions"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="glyphicon glyphicon-comment"></i>\n <a href="#">{{ \'APPLICATION_SMS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-energy"></i>\n <a href="#">{{ \'APPLICATION_REALTIME\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <div>\n <nav class="navbar navbar-default" role="navigation">\n <div class="collapse navbar-collapse">\n <ul class="nav navbar-nav">\n <li data-ng-class="{\'active\': $state.is(\'main.channels.sms.realtime.view.agents\')}">\n <a href="/channels/sms/realtime/view/agents">\n {{\'APPLICATION_AGENTS\' | translate}}\n </a>\n </li>\n <li data-ng-class="{\'active\': $state.is(\'main.channels.sms.realtime.view.applications\')}">\n <a href="/channels/sms/realtime/view/applications">\n {{\'APPLICATION_APPLICATIONS\' | translate}}\n </a>\n </li>\n </ul>\n </div>\n </nav>\n </div>\n\n <div ui-view></div>\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/sms/realtime/view/view.queue.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initAgents()">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div id="grid1" ui-grid="gridOptions" ui-grid-resize-columns ui-grid-tree-view class="grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/voice/chanspy/list/list.create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_CHANSPY\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.name.$touched || form.$submitted) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START PREFIX -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.prefix.$touched || form.$submitted) && form.prefix.$invalid}">\n <label class="control-label">{{\'APPLICATION_PREFIX\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="prefix" placeholder="{{\'APPLICATION_PREFIX\' | translate}}" class="form-control" data-ng-model="item.prefix" required/>\n <span data-ng-show="(form.prefix.$touched || form.$submitted) && form.prefix.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PREFIX -->\n\n <!-- START OPTIONS -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.options.$touched || form.$submitted) && form.options.$invalid}">\n <label class="control-label">{{\'APPLICATION_OPTIONS\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select multiple data-ng-model="item.options" name="options" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$item.value}}: {{$item.name | translate}}</ui-select-match>\n <ui-select-choices repeat="option.value as option in options | filter: $select.search">\n <div ng-bind-html="option.value + \': \' + (option.name | translate) | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form.options.$touched || form.$submitted) && form.options.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END OPTIONS -->\n\n <!-- START AUTH -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_AUTH\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="item.auth"\n type="checkbox"\n name="auth"\n data-ng-init="item.auth = 0"\n switch-active="{{ recordSwitch.isActive }}"\n switch-on-text="{{ recordSwitch.onText }}"\n switch-off-text="{{ recordSwitch.offText }}"\n switch-on-color="{{ recordSwitch.onColor }}"\n switch-off-color="{{ recordSwitch.offColor }}"\n switch-animate="{{ recordSwitch.animate }}"\n switch-size="{{ recordSwitch.size }}"\n switch-label="{{ recordSwitch.label }}"\n switch-icon="{{ recordSwitch.icon }}"\n switch-radio-off="{{ recordSwitch.radioOff }}"\n switch-label-width="{{ recordSwitch.labelWidth }}"\n switch-handle-width="{{ recordSwitch.handleWidth }}">\n </div>\n <!-- END AUTH -->\n\n <!-- START PASSWORD -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.password.$touched || form.$submitted) && form.password.$invalid}">\n <label class="control-label">{{\'APPLICATION_PASSWORD\' | translate}}<span data-ng-show="item.auth" class="required" aria-required="true">*</span></label>\n <input type="password" name="password" placeholder="{{\'APPLICATION_PASSWORD\' | translate}}" class="form-control" data-ng-model="item.password" data-ng-disabled="!item.auth" data-ng-required="item.auth"/>\n <span data-ng-show="(form.password.$touched || form.$submitted) && form.password.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PASSWORD -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/voice/chanspy/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-earphones-alt"></i>\n <a href="#">{{ \'APPLICATION_VOICE\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-user-secret"></i>\n <a href="/channels/voice/chanspys/list">{{ \'APPLICATION_CHANSPY\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="fa fa-user-secret font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_CHANSPY\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <button class="btn green-jungle " ng-click="createItem()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_CHANSPY\' | translate }}\n </button>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/voice/chanspy/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getChanSpy()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-earphones-alt"></i>\n <a href="#">{{ \'APPLICATION_VOICE\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-user-secret"></i>\n <a href="/channels/voice/chanspy/list">{{ \'APPLICATION_CHANSPY\' | translate }}</a>\n <i data-ng-show="chanspy" class="fa fa-angle-right"></i>\n </li>\n <li data-ng-show="chanspy">\n <a href="#">{{chanspy.name}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/chanspy.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{chanspy.name}}\n </div>\n <!-- <div class="profile-usertitle-job">\n {{user.role}}\n </div> -->\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.channels.voice.chanspy.view.settings\')}">\n <a data-ng-href="/channels/voice/chanspy/view/{{chanspy.id}}/settings">\n <i class="icon-settings"></i>\n {{ \'APPLICATION_SETTINGS\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'), -a.put("app/channels/voice/chanspy/view/view.settings.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_CHANSPY\' | translate}} {{ \'APPLICATION_SETTINGS\' | translate}} </span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n </li>\n </ul>\n </div>\n\n <div class="portlet-body">\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.general" data-ng-submit="forms.general.$valid && updateChanSpy()" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="chanspy.name" required/>\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START PREFIX -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.general.prefix.$touched || form.general.$submitted) && form.general.prefix.$invalid}">\n <label class="control-label">{{\'APPLICATION_PREFIX\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="prefix" placeholder="{{\'APPLICATION_PREFIX\' | translate}}" class="form-control" data-ng-model="chanspy.prefix" required/>\n <span data-ng-show="(form.general.prefix.$touched || form.general.$submitted) && form.general.prefix.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PREFIX -->\n\n <!-- START OPTIONS -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.general.options.$touched || form.general.$submitted) && form.general.options.$invalid}">\n <label class="control-label">{{\'APPLICATION_OPTIONS\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select multiple data-ng-model="chanspy.options" name="options" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$item.value}}: {{$item.name | translate}}</ui-select-match>\n <ui-select-choices repeat="option.value as option in options | filter: $select.search">\n <div ng-bind-html="option.value + \': \' + (option.name | translate) | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form.general.options.$touched || form.general.$submitted) && form.general.options.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END OPTIONS -->\n\n <!-- START AUTH -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_AUTH\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="chanspy.auth"\n type="checkbox"\n name="auth"\n switch-active="{{ recordSwitch.isActive }}"\n switch-on-text="{{ recordSwitch.onText }}"\n switch-off-text="{{ recordSwitch.offText }}"\n switch-on-color="{{ recordSwitch.onColor }}"\n switch-off-color="{{ recordSwitch.offColor }}"\n switch-animate="{{ recordSwitch.animate }}"\n switch-size="{{ recordSwitch.size }}"\n switch-label="{{ recordSwitch.label }}"\n switch-icon="{{ recordSwitch.icon }}"\n switch-radio-off="{{ recordSwitch.radioOff }}"\n switch-label-width="{{ recordSwitch.labelWidth }}"\n switch-handle-width="{{ recordSwitch.handleWidth }}">\n </div>\n <!-- END AUTH -->\n\n <!-- START PASSWORD -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.general.password.$touched || form.general.$submitted) && form.general.password.$invalid}">\n <label class="control-label">{{\'APPLICATION_PASSWORD\' | translate}}<span class="required" data-ng-show="chanspy.auth" aria-required="true">*</span></label>\n <input type="password" name="password" placeholder="{{\'APPLICATION_PASSWORD\' | translate}}" class="form-control" data-ng-model="chanspy.password" data-ng-disabled="!chanspy.auth" data-ng-required="chanspy.auth"/>\n <span data-ng-show="(form.general.password.$touched || form.general.$submitted) && form.general.password.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PASSWORD -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="chanspy.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END ADVANCED TAB -->\n\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/voice/context/list/create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_CONTEXT\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.name.$touched || form.$submitted) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"/></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" data-ng-click="ok()" data-ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" data-ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/voice/context/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-earphones-alt"></i>\n <a href="#">{{ \'APPLICATION_VOICE\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-docs"></i>\n <a href="#">{{ \'APPLICATION_CONTEXTS\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-docs font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_CONTEXTS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <a class="btn green-jungle" href="#" data-ng-click="createItem()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_CONTEXT\' | translate }}\n </a>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/voice/context/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getContext()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-earphones-alt"></i>\n <a href="#">{{ \'APPLICATION_VOICE\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-docs"></i>\n <a href="/channels/voice/contexts/list">{{ \'APPLICATION_CONTEXTS\' | translate }}</a>\n <i data-ng-show="context" class="fa fa-angle-right"></i>\n </li>\n <li data-ng-show="context">\n <a href="#">{{context.name}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET main.channels -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/context.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{context.name}}\n </div>\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.channels.voice.contexts.view.settings\')}">\n <a data-ng-href="/channels/voice/contexts/view/{{context.id}}/settings">\n <i class="icon-settings"></i>\n {{ \'APPLICATION_SETTINGS\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET main.channels -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n </div>\n <!-- END PAGE CONTENT-->\n'),a.put("app/channels/voice/context/view/view.settings.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_CONTEXT\' | translate}} {{ \'APPLICATION_SETTINGS\' | translate}} </span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n </li>\n </ul>\n </div>\n\n <div class="portlet-body">\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.general" data-ng-submit="forms.general.$valid && updateVoiceContext()" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.name.$touched || form.$submitted) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="context.name" required readonly/>\n <span class="help-block">\n {{ \'DESCRIPTION_CANT_EDIT_NAME\' | translate }}\n </span>\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="context.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END ADVANCED TAB -->\n\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/voice/disposition/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-earphones-alt"></i>\n <a href="#">{{ \'APPLICATION_VOICE\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-target"></i>\n <a href="/channels/voice/dispositions/list">{{ \'APPLICATION_DISPOSITIONS\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-docs font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_DISPOSITIONS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <a href="#" class="btn btn-icon-only green" data-ng-click="addDisposition();">\n <i class="fa fa-plus"></i>\n </a>\n </div>\n </div>\n <div class="portlet-body">\n <div class="tab-content">\n <div class="row" data-ng-hide="dispositions.length">\n <div class="col-md-12">\n <div class="note note-info">\n <h4 class="block">Info! {{\'MESSAGE_NO_DISPOSITIONS_AVAILABLE\' | translate}}</h4>\n </div>\n </div>\n </div>\n\n <!-- GENERAL TAB -->\n <div class="row" data-ng-repeat="disposition in dispositions">\n <div class="col-md-12 form-group">\n <div class="input-group">\n <div>\n <input class="form-control" type="text" placeholder="{{\'APPLICATION_DISPOSITION\' | translate}}" data-ng-model="disposition.name">\n </div>\n <span class="input-group-btn">\n <button class="btn btn-success" type="button" data-ng-click="updateDisposition(disposition.id, disposition.name);"><i class="fa fa-cloud-upload fa-fw"></i> {{\'APPLICATION_UPDATE\' | translate}}</button>\n <button class="btn btn-danger" type="button" data-ng-click="deleteDisposition(disposition.id);"><i class="fa fa-times fa-fw"></i> {{\'APPLICATION_DELETE\' | translate}}</button>\n </span>\n </div>\n </div>\n </div>\n <!-- END GENERAL TAB -->\n </div>\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/voice/disposition/list/modal/add.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_DISPOSITIONS\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.form.$touched || form.$submitted) && form.form.$invalid}">\n <div class="">\n <input type="text" name="form" placeholder="{{\'APPLICATION_DISPOSITION\' | translate}}" class="form-control" data-ng-model="name" required/>\n <span data-ng-show="form.form.$touched && form.form.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n <!-- END NAME -->\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" data-ng-click="ok()" data-ng-show="form.$valid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" data-ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/voice/moh/list/create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_MOH_CLASS\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.name.$touched || form.$submitted) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="ok()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/voice/moh/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-earphones-alt"></i>\n <a href="#">{{ \'APPLICATION_VOICE\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-music-tone"></i>\n <a href="#">{{ \'APPLICATION_MOHS\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-music-tone font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_MOHS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <a class="btn green-jungle" href="#" data-ng-click="createItem()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_MOH_CLASS\' | translate }}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/voice/moh/view/view.addFiles.html",'\n<div class="row" data-ng-init="getSounds()">\n <div class="col-md-12">\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-notebook font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_MOH\' | translate }} {{ \'APPLICATION_ADD_FILES\' | translate }}</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <div class="note note-warning" data-ng-hide="soundList.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_SOUNDS_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/tools/sounds/list">{{\'APPLICATION_SOUNDS\' | translate}}</a>\n </p>\n </div>\n <form name="forms.general" data-ng-submit="(item.sounds.length > 0) && addMohs()" data-ng-show="soundList.length" novalidate>\n\n <!-- START SOUNDS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.sounds.$touched || forms.general.$submitted) && item.sounds.length == 0}">\n <label class="control-label">{{\'APPLICATION_SOUNDS\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select multiple data-ng-model="item.sounds" theme="bootstrap" name="sounds" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$item.display_name}}</ui-select-match>\n <ui-select-choices repeat="sound.id as sound in soundList | filter: $select.search">\n {{sound.display_name}}\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.general.sounds.$touched || forms.general.$submitted) && item.sounds.length == 0" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END OPTIONS -->\n\n <input type="submit" class="btn green-haze" value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n </form>\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/voice/moh/view/view.audios.html",'<div ui-view class="profile-content">\n<div class="row" data-ng-init="getAudioFiles()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_AUDIOS\' | translate}}</span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="audioFiles">\n <a class="btn green-jungle " href="/channels/voice/mohs/view/{{moh.id}}/add" data-toggle="dropdown">\n <i class="icon-plus"></i> {{ \'APPLICATION_ADD_FILES\' | translate }}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <div class="note note-warning" data-ng-hide="audioFiles">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_FOLDER_DOES_NOT_EXIST\' | translate }}\n </p>\n </div>\n <!-- START TABLE -->\n <table class="table table-striped table-bordered table-hover" data-ng-show="audioFiles">\n <thead>\n <tr>\n <th>{{ \'APPLICATION_NAME\' | translate }}</th>\n <th width="30%">{{ \'APPLICATION_PREVIEW\' | translate }}</th>\n <th width="10%">{{ \'APPLICATION_ACTIONS\' | translate }}</th>\n </tr>\n </thead>\n <tbody data-ng-model="audioFiles">\n <tr data-ng-repeat="audiofile in audioFiles">\n <td>{{audiofile}}</td>\n <td>\n <audio controls ng-src="{{getSecureSrc(audioSources[audiofile])}}" preload="none">\n Your browser does not support the audio tag.\n </audio></td>\n <td>\n <a class="btn default btn-xs red-stripe" data-ng-click="deleteItem(audiofile,audiofile)">\n {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </td>\n </tr>\n <tr data-ng-hide="audioFiles.length">\n <td colspan="3" style="text-align:center;">\n <i>{{ \'MESSAGE_NO_AUDIOFILES_AVAILABLE\' | translate }}</i>\n </td>\n </tr>\n </tbody>\n </table>\n <!-- END TABLE -->\n </div>\n </div>\n </div>\n</div>\n</div>\n'),a.put("app/channels/voice/moh/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getMoh()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-earphones-alt"></i>\n <a href="#">{{ \'APPLICATION_VOICE\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-music-tone"></i>\n <a href="/channels/voice/mohs/list">{{ \'APPLICATION_MOH_CLASS\' | translate }}</a>\n <i data-ng-show="moh" class="fa fa-angle-right"></i>\n </li>\n <li data-ng-show="moh">\n <a href="#">{{moh.name}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET main.channels -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/moh.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{moh.name}}\n </div>\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.channels.voice.mohs.view.settings\')}">\n <a data-ng-href="/channels/voice/mohs/view/{{moh.id}}/settings">\n <i class="icon-settings"></i>\n {{ \'APPLICATION_SETTINGS\' | translate}} </a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.channels.voice.mohs.view.audios\') || $state.is(\'main.channels.voice.mohs.view.add\')}">\n <a data-ng-href="/channels/voice/mohs/view/{{moh.id}}/audios">\n <i class="icon-list"></i>\n {{ \'APPLICATION_AUDIOS\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET main.channels -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/voice/moh/view/view.settings.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_MOH_CLASS\' | translate}} {{ \'APPLICATION_SETTINGS\' | translate}} </span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n </li>\n </ul>\n </div>\n\n <div class="portlet-body" data-ng-init="getContexts();">\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.general" data-ng-submit="forms.general.$valid && updateVoiceMoh()" novalidate>\n\n <!-- START PATH -->\n <div class="form-group" >\n <label class="control-label">{{\'APPLICATION_PATH\' | translate}}</label>\n <input type="text" name="path" class="form-control" data-ng-model="moh.directory" disabled/>\n </div>\n <!-- END PATH -->\n\n <!-- START SORT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.sort.$touched || forms.general.$submitted) && forms.general.sort.$invalid}">\n <label class="control-label">{{\'APPLICATION_SORT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="moh.sort" theme="bootstrap" name="sort" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$translate.instant($select.selected.name)}}</ui-select-match>\n <ui-select-choices repeat="sort.value as sort in sortOptions | filter: $select.search">\n {{$translate.instant(sort.name)}}\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.general.sort.$touched || forms.general.$submitted) && forms.general.sort.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END SORT -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.general.$submitted && forms.general.description.$invalid}">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" class="form-control" data-ng-model="moh.description"/></textarea>\n <span data-ng-show="forms.general.$submitted && forms.general.description.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END DESCRIPTION -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END GENERAL TAB -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'), -a.put("app/channels/voice/queue/list/list.create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_QUEUE\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.queue.name.$touched || form.queue.$submitted) && form.queue.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" data-ng-pattern="settings.patternName" required />\n <span data-ng-show="(form.queue.name.$touched || form.queue.$submitted) && form.queue.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(form.queue.name.$touched || form.queue.$submitted) && form.queue.name.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_PATTERN_NAME\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START STRATEGY -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.queue.strategy.$touched || form.queue.$submitted) && form.queue.strategy.$invalid}">\n <label class="control-label">{{\'APPLICATION_STRATEGY\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="item.strategy" name="strategy" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.toUpperCase()}}</ui-select-match>\n <ui-select-choices repeat="strategy in [\'ringall\', \'leastrecent\', \'fewestcalls\', \'random\', \'rrmemory\', \'linear\', \'wrandom\', \'rrordered\'] | filter: $select.search">\n <div ng-bind-html="strategy.toUpperCase() | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_STRATEGY\' | translate }}\n </span>\n <span data-ng-show="(form.queue.strategy.$touched || form.queue.$submitted) && form.queue.strategy.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END STRATEGY -->\n\n <!-- START AGENTS-->\n <div class="form-body" data-ng-init="getTeams()">\n <label for="penalty">{{\'APPLICATION_PENALTY\' | translate}}</label>\n <div class="input-group input-small mbottom20">\n <input type="number" class="spinner-input form-control" maxlength="3" data-ng-model="item.penalty" readonly>\n <div class="spinner-buttons input-group-btn btn-group-vertical">\n <button type="button" class="btn spinner-up btn-xs blue" data-ng-click="item.penalty=item.penalty+1">\n <i class="fa fa-angle-up"></i>\n </button>\n <button type="button" class="btn spinner-down btn-xs blue" data-ng-disabled="!item.penalty" data-ng-click="item.penalty=item.penalty-1">\n <i class="fa fa-angle-down"></i>\n </button>\n </div>\n </div>\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-team">\n </div>\n </div>\n </div>\n <!-- END AGENTS-->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/voice/queue/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-earphones-alt"></i>\n <a href="#">{{ \'APPLICATION_VOICE\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-docs"></i>\n <a href="#">{{ \'APPLICATION_QUEUES\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-docs font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_QUEUES\' | translate }}</span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <a class="btn green-jungle" href="#" data-ng-click="createItem()" data-ng-if="Auth.isAdmin()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_QUEUE\' | translate }}\n </a>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/voice/queue/view/view.agents.html",'<div class="row" data-ng-init="getTeams()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_AGENTS\' | translate}}</span>\n </div>\n </div>\n <div class="note note-warning" data-ng-hide="teams.length">\n <h4 class="block">Warning!</h4><p>{{ \'MESSAGE_NO_AVAILABLE_TEAMS\' | translate }}</p>\n </div>\n <div class="portlet-body">\n <!-- BEGIN FORM-->\n <form action="index.html" class="form-horizontal form-row-seperated">\n <div class="form-body">\n <label for="penalty">{{\'APPLICATION_PENALTY\' | translate}}</label>\n <div class="input-group input-small mbottom20">\n <input type="number" class="spinner-input form-control" maxlength="3" data-ng-model="queue.penalty" readonly>\n <div class="spinner-buttons input-group-btn btn-group-vertical">\n <button type="button" class="btn spinner-up btn-xs blue" data-ng-click="queue.penalty=queue.penalty+1">\n <i class="fa fa-angle-up"></i>\n </button>\n <button type="button" class="btn spinner-down btn-xs blue" data-ng-disabled="!queue.penalty" data-ng-click="queue.penalty=queue.penalty-1">\n <i class="fa fa-angle-down"></i>\n </button>\n </div>\n </div>\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-team">\n </div>\n </div>\n </div>\n </form>\n <!-- END FORM-->\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/voice/queue/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getQueue()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-earphones-alt"></i>\n <a href="#">{{ \'APPLICATION_VOICE\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-docs"></i>\n <a href="/channels/voice/queues/list">{{ \'APPLICATION_QUEUES\' | translate }}</a>\n <i data-ng-show="queue" class="fa fa-angle-right"></i>\n </li>\n <li data-ng-show="queue">\n <a href="#">{{queue.name}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET main.channels -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/queue.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{queue.name}}\n </div>\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.channels.voice.queues.view.settings\')}">\n <a data-ng-href="/channels/voice/queues/view/{{queue.name}}/settings"> <i class="icon-settings"></i> {{ \'APPLICATION_SETTINGS\' | translate}} </a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.channels.voice.queues.view.agents\')}" data-ng-show="Auth.getCurrentUser().role === \'admin\'">\n <a data-ng-href="/channels/voice/queues/view/{{queue.name}}/agents"><i class="icon-people"></i>{{ \'APPLICATION_AGENTS\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET main.channels -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/voice/queue/view/view.settings.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_QUEUE_SETTINGS\' | translate}}</span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_2" data-toggle="tab">{{ \'APPLICATION_PERIODIC_ANNOUNCE\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_3" data-toggle="tab">{{ \'APPLICATION_ADVANCED\' | translate}}</a>\n </li>\n </ul>\n </div>\n\n <div class="portlet-body" data-ng-init="getContexts();getMohs();getSounds();">\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.general" data-ng-submit="forms.general.$valid && forms.announce.$valid && updateVoiceQueue()" novalidate>\n <div class="row">\n <div class="col-md-6">\n <!-- START STRATEGY -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.strategy.$touched || forms.general.$submitted) && forms.general.strategy.$invalid}">\n <label class="control-label">{{\'APPLICATION_STRATEGY\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="queue.strategy" name="strategy" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.toUpperCase()}}</ui-select-match>\n <ui-select-choices repeat="strategy in [\'ringall\', \'leastrecent\', \'fewestcalls\', \'random\', \'rrmemory\', \'linear\', \'wrandom\', \'rrordered\'] | filter: $select.search">\n <div ng-bind-html="strategy.toUpperCase() | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_STRATEGY\' | translate }}\n </span>\n <span data-ng-show="(forms.general.strategy.$touched || forms.general.$submitted) && forms.general.strategy.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END STRATEGY -->\n\n <!-- START MOH -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.musiconhold.$touched || forms.general.$submitted) && forms.general.musiconhold.$invalid}">\n <label class="control-label">{{\'APPLICATION_MOH\' | translate}}</label>\n <ui-select data-ng-model="queue.musiconhold" name="musiconhold" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="musiconhold.name as musiconhold in voiceMohs | filter: $select.search">\n <div ng-bind-html="musiconhold.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_VOICE_MOH\' | translate }}\n </span>\n <span data-ng-show="(forms.general.musiconhold.$touched || forms.general.$submitted) && forms.general.musiconhold.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END MOH -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.timeout.$touched || forms.general.$submitted) && forms.general.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" min="0" name="timeout" placeholder="{{\'APPLICATION_TIMEOUT\' | translate}}" class="form-control" data-ng-model="queue.timeout" required/>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_TIMEOUT\' | translate }}\n </span>\n <span data-ng-show="(forms.general.timeout.$touched || forms.general.$submitted) && forms.general.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n\n <!-- START MAXLEN -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.maxlen.$touched || forms.general.$submitted) && forms.general.maxlen.$invalid}">\n <label class="control-label">{{\'APPLICATION_MAXLEN\' | translate}}</label>\n <input type="number" min="0" name="maxlen" placeholder="{{\'APPLICATION_MAXLEN\' | translate}}" class="form-control" data-ng-model="queue.maxlen" required/>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_MAXLEN\' | translate }}\n </span>\n <span data-ng-show="(forms.general.maxlen.$touched || forms.general.$submitted) && forms.general.maxlen.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END MAXLEN -->\n\n <!-- START RETRY -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.retry.$touched || forms.general.$submitted) && forms.general.retry.$invalid}">\n <label class="control-label">{{\'APPLICATION_RETRY\' | translate}}</label>\n <input type="number" min="0" name="retry" placeholder="{{\'APPLICATION_RETRY\' | translate}}" class="form-control" data-ng-model="queue.retry" required/>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_RETRY\' | translate }}\n </span>\n <span data-ng-show="(forms.general.retry.$touched || forms.general.$submitted) && forms.general.retry.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END RETRY -->\n\n </div>\n <div class="col-md-6">\n <!-- START WRAPUPTIME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.wrapuptime.$touched || forms.general.$submitted) && forms.general.wrapuptime.$invalid}">\n <label class="control-label">{{\'APPLICATION_WRAPUPTIME\' | translate}}</label>\n <input type="number" min="0" name="wrapuptime" placeholder="{{\'APPLICATION_WRAPUPTIME\' | translate}}" class="form-control" data-ng-model="queue.wrapuptime" required/>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_WRAPUPTIME\' | translate }}\n </span>\n <span data-ng-show="(forms.general.wrapuptime.$touched || forms.general.$submitted) && forms.general.wrapuptime.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END WRAPUPTIME -->\n\n <!-- START WEIGHT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.weight.$touched || forms.general.$submitted) && forms.general.weight.$invalid}">\n <label class="control-label">{{\'APPLICATION_WEIGHT\' | translate}}</label>\n <input type="number" min="0" name="weight" placeholder="{{\'APPLICATION_WEIGHT\' | translate}}" class="form-control" data-ng-model="queue.weight" required/>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_WEIGHT\' | translate }}\n </span>\n <span data-ng-show="(forms.general.weight.$touched || forms.general.$submitted) && forms.general.weight.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END WEIGHT -->\n\n <!-- START JOINEMPTY -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.joinempty.$touched || forms.general.$submitted) && forms.general.joinempty.$invalid}">\n <label class="control-label">{{\'APPLICATION_JOINEMPTY\' | translate}}</label>\n <ui-select multiple data-ng-model="queue.joinempty" name="joinempty" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$item}}</ui-select-match>\n <ui-select-choices repeat="item in [\'yes\',\'no\',\'strict\',\'loose\',\'paused\',\'penalty\',\'inuse\',\'ringing\',\'unavailable\',\'invalid\',\'unknown\',\'wrapup\'] | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_JOINEMPTY\' | translate }}\n </span>\n <span data-ng-show="(forms.general.joinempty.$touched || forms.general.$submitted) && forms.general.joinempty.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END JOINEMPTY -->\n\n <!-- START LEAVEWHENEMPTY -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.leavewhenempty.$touched || forms.general.$submitted) && forms.general.leavewhenempty.$invalid}">\n <label class="control-label">{{\'APPLICATION_LEAVEWHENEMPTY\' | translate}}</label>\n <ui-select multiple data-ng-model="queue.leavewhenempty" name="leavewhenempty" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$item}}</ui-select-match>\n <ui-select-choices repeat="item in [\'yes\',\'no\',\'strict\',\'loose\',\'paused\',\'penalty\',\'inuse\',\'ringing\',\'unavailable\',\'invalid\',\'unknown\',\'wrapup\'] | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_LEAVEWHENEMPTY\' | translate }}\n </span>\n <span data-ng-show="(forms.general.leavewhenempty.$touched || forms.general.$submitted) && forms.general.leavewhenempty.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END LEAVEWHENEMPTY -->\n\n <!-- START ANNOUNCE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.announce.$touched || forms.general.$submitted) && forms.general.announce.$invalid}">\n <label class="control-label">{{\'APPLICATION_ANNOUNCE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="queue.announce" name="announce" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.display_name}}</ui-select-match>\n <ui-select-choices repeat="announce.path as announce in sounds | filter: $select.search">\n <div ng-bind-html="announce.display_name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_ANNOUNCE\' | translate }}\n </span>\n <span data-ng-show="(forms.general.announce.$touched || forms.general.$submitted) && forms.general.announce.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END ANNOUNCE -->\n </div>\n </div>\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="queue.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n\n <div class="tab-pane" id="tab_1_2">\n <form name="forms.announce" data-ng-submit="forms.announce.$valid && forms.general.$valid && updateVoiceQueue()" novalidate>\n <div class="row">\n <div class="col-md-12">\n <!-- START PERIODIC_ANNOUNCE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.announce.periodic_announce.$touched || forms.announce.$submitted) && forms.announce.periodic_announce.$invalid}">\n <label class="control-label">{{\'APPLICATION_PERIODIC_ANNOUNCE\' | translate}}</label>\n <ui-select multiple data-ng-model="queue.periodic_announce" name="periodic_announce" theme="bootstrap" data-ng-disabled="!periodicAnnounces.length">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$item.display_name}}</ui-select-match>\n <ui-select-choices repeat="announce.path as announce in periodicAnnounces | filter: $select.search track by $index">\n <div ng-bind-html="announce.display_name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="periodicAnnounces.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_SOUNDS_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/tools/sounds/list">{{\'APPLICATION_SOUNDS\' | translate}}</a>\n </p>\n </div>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_PERIODIC_ANNOUNCE\' | translate }}\n </span>\n <span data-ng-show="(forms.announce.periodic_announce.$touched || forms.announce.$submitted) && forms.announce.periodic_announce.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PERIODIC_ANNOUNCE -->\n </div>\n </div>\n <div class="row">\n <div class="col-md-6">\n <p><h3>{{\'APPLICATION_SETTINGS\' | translate}}</h3></p>\n <!-- START ANNOUNCE_FREQUENCY -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.announce.announce_frequency.$touched || forms.announce.$submitted) && forms.announce.announce_frequency.$invalid}">\n <label class="control-label">{{\'APPLICATION_ANNOUNCE_FREQUENCY\' | translate}}</label>\n <input type="number" min="0" name="announce_frequency" placeholder="{{\'APPLICATION_ANNOUNCE_FREQUENCY\' | translate}}" class="form-control" data-ng-model="queue.announce_frequency" required/>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_ANNOUNCE_FREQUENCY\' | translate }}\n </span>\n <span data-ng-show="(forms.announce.announce_frequency.$touched || forms.announce.$submitted) && forms.announce.announce_frequency.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END ANNOUNCE_FREQUENCY -->\n\n <!-- START MIN_ANNOUNCE_FREQUENCY -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.announce.min_announce_frequency.$touched || forms.announce.$submitted) && forms.announce.min_announce_frequency.$invalid}">\n <label class="control-label">{{\'APPLICATION_MIN_ANNOUNCE_FREQUENCY\' | translate}}</label>\n <input type="number" min="0" name="min_announce_frequency" placeholder="{{\'APPLICATION_MIN_ANNOUNCE_FREQUENCY\' | translate}}" class="form-control" data-ng-model="queue.min_announce_frequency" required/>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_MIN_ANNOUNCE_FREQUENCY\' | translate }}\n </span>\n <span data-ng-show="(forms.announce.min_announce_frequency.$touched || forms.announce.$submitted) && forms.announce.min_announce_frequency.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END MIN_ANNOUNCE_FREQUENCY -->\n\n <!-- START PERIODIC_ANNOUNCE_FREQUENCY -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.announce.periodic_announce_frequency.$touched || forms.announce.$submitted) && forms.announce.periodic_announce_frequency.$invalid}">\n <label class="control-label">{{\'APPLICATION_PERIODIC_ANNOUNCE_FREQUENCY\' | translate}}</label>\n <input type="number" min="0" name="periodic_announce_frequency" placeholder="{{\'APPLICATION_PERIODIC_ANNOUNCE_FREQUENCY\' | translate}}" class="form-control" data-ng-model="queue.periodic_announce_frequency"/>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_PERIODIC_ANNOUNCE_FREQUENCY\' | translate }}\n </span>\n <span data-ng-show="(forms.announce.periodic_announce_frequency.$touched || forms.announce.$submitted) && forms.announce.periodic_announce_frequency.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PERIODIC_ANNOUNCE_FREQUENCY -->\n\n <!-- START RANDOM_PERIODIC_ANNOUNCE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.announce.random_periodic_announce.$touched || forms.announce.$submitted) && forms.announce.random_periodic_announce.$invalid}">\n <label class="control-label">{{\'APPLICATION_RANDOM_PERIODIC_ANNOUNCE\' | translate}}</label>\n <ui-select data-ng-model="queue.random_periodic_announce" name="random_periodic_announce" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n <ui-select-choices repeat="item in [\'yes\',\'no\'] | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_RANDOM_PERIODIC_ANNOUNCE\' | translate }}\n </span>\n <span data-ng-show="(forms.announce.random_periodic_announce.$touched || forms.announce.$submitted) && forms.announce.random_periodic_announce.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END RANDOM_PERIODIC_ANNOUNCE -->\n\n <!-- START ANNOUNCE_HOLDTIME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.announce.announce_holdtime.$touched || forms.announce.$submitted) && forms.announce.announce_holdtime.$invalid}">\n <label class="control-label">{{\'APPLICATION_ANNOUNCE_HOLDTIME\' | translate}}</label>\n <ui-select data-ng-model="queue.announce_holdtime" name="announce_holdtime" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n <ui-select-choices repeat="item in [\'yes\',\'no\',\'once\'] | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_ANNOUNCE_HOLDTIME\' | translate }}\n </span>\n <span data-ng-show="(forms.announce.announce_holdtime.$touched || forms.announce.$submitted) && forms.announce.announce_holdtime.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END ANNOUNCE_HOLDTIME -->\n\n <!-- START ANNOUNCE_POSITION -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.announce.announce_position.$touched || forms.announce.$submitted) && forms.announce.announce_position.$invalid}">\n <label class="control-label">{{\'APPLICATION_ANNOUNCE_POSITION\' | translate}}</label>\n <ui-select data-ng-model="queue.announce_position" name="announce_position" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n <ui-select-choices repeat="item in [\'yes\',\'no\',\'limit\',\'more\'] | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_ANNOUNCE_POSITION\' | translate }}\n </span>\n <span data-ng-show="(forms.announce.announce_position.$touched || forms.announce.$submitted) && forms.announce.announce_position.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END ANNOUNCE_POSITION -->\n\n <!-- START ANNOUNCE_POSITION_LIMIT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.announce.announce_position_limit.$touched || forms.announce.$submitted) && forms.announce.announce_position_limit.$invalid}">\n <label class="control-label">{{\'APPLICATION_ANNOUNCE_POSITION_LIMIT\' | translate}}</label>\n <input type="number" min="0" name="announce_position_limit" placeholder="{{\'APPLICATION_ANNOUNCE_POSITION_LIMIT\' | translate}}" class="form-control" data-ng-model="queue.announce_position_limit"/>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_ANNOUNCE_POSITION_LIMIT\' | translate }}\n </span>\n <span data-ng-show="(forms.announce.announce_position_limit.$touched || forms.announce.$submitted) && forms.announce.announce_position_limit.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END ANNOUNCE_POSITION_LIMIT -->\n\n <!-- START REPORTHOLDTIME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.announce.reportholdtime.$touched || forms.announce.$submitted) && forms.announce.reportholdtime.$invalid}">\n <label class="control-label">{{\'APPLICATION_REPORTHOLDTIME\' | translate}}</label>\n <ui-select data-ng-model="queue.reportholdtime" name="reportholdtime" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n <ui-select-choices repeat="item in [\'yes\',\'no\'] | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_REPORTHOLDTIME\' | translate }}\n </span>\n <span data-ng-show="(forms.announce.reportholdtime.$touched || forms.announce.$submitted) && forms.announce.reportholdtime.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END REPORTHOLDTIME -->\n\n </div>\n <div class="col-md-6">\n <p><h3>{{\'APPLICATION_SOUNDS\' | translate}}</h3></p>\n <!-- START QUEUE_REPORTHOLD -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.announce.queue_reporthold.$touched || forms.announce.$submitted) && forms.announce.queue_reporthold.$invalid}">\n <label class="control-label">{{\'APPLICATION_QUEUE_REPORTHOLD\' | translate}}</label>\n <ui-select data-ng-model="queue.queue_reporthold" name="queue_reporthold" theme="bootstrap" >\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.display_name}}</ui-select-match>\n <ui-select-choices repeat="announce.path as announce in queueAnnounces | filter: $select.search">\n <div ng-bind-html="announce.display_name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_REPORTHOLD\' | translate }}\n </span>\n <span data-ng-show="(forms.announce.queue_reporthold.$touched || forms.announce.$submitted) && forms.announce.queue_reporthold.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END QUEUE_REPORTHOLD -->\n\n <!-- START QUEUE_YOUARENEXT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.announce.queue_youarenext.$touched || forms.announce.$submitted) && forms.announce.queue_youarenext.$invalid}">\n <label class="control-label">{{\'APPLICATION_QUEUE_YOUARENEXT\' | translate}}</label>\n <ui-select data-ng-model="queue.queue_youarenext" name="queue_youarenext" theme="bootstrap" >\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.display_name}}</ui-select-match>\n <ui-select-choices repeat="announce.path as announce in queueAnnounces | filter: $select.search">\n <div ng-bind-html="announce.display_name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_YOUARENEXT\' | translate }}\n </span>\n <span data-ng-show="(forms.announce.queue_youarenext.$touched || forms.announce.$submitted) && forms.announce.queue_youarenext.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END QUEUE_YOUARENEXT -->\n\n <!-- START QUEUE_THEREARE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.announce.queue_thereare.$touched || forms.announce.$submitted) && forms.announce.queue_thereare.$invalid}">\n <label class="control-label">{{\'APPLICATION_QUEUE_THEREARE\' | translate}}</label>\n <ui-select data-ng-model="queue.queue_thereare" name="queue_thereare" theme="bootstrap" >\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.display_name}}</ui-select-match>\n <ui-select-choices repeat="announce.path as announce in queueAnnounces | filter: $select.search">\n <div ng-bind-html="announce.display_name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_THEREARE\' | translate }}\n </span>\n <span data-ng-show="(forms.announce.queue_thereare.$touched || forms.announce.$submitted) && forms.announce.queue_thereare.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END QUEUE_THEREARE -->\n\n <!-- START QUEUE_CALLSWAITING -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.announce.queue_callswaiting.$touched || forms.announce.$submitted) && forms.announce.queue_callswaiting.$invalid}">\n <label class="control-label">{{\'APPLICATION_QUEUE_CALLSWAITING\' | translate}}</label>\n <ui-select data-ng-model="queue.queue_callswaiting" name="queue_callswaiting" theme="bootstrap" >\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.display_name}}</ui-select-match>\n <ui-select-choices repeat="announce.path as announce in queueAnnounces | filter: $select.search">\n <div ng-bind-html="announce.display_name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_CALLSWAITING\' | translate }}\n </span>\n <span data-ng-show="(forms.announce.queue_callswaiting.$touched || forms.announce.$submitted) && forms.announce.queue_callswaiting.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END QUEUE_CALLSWAITING -->\n\n <!-- START QUEUE_HOLDTIME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.announce.queue_holdtime.$touched || forms.announce.$submitted) && forms.announce.queue_holdtime.$invalid}">\n <label class="control-label">{{\'APPLICATION_QUEUE_HOLDTIME\' | translate}}</label>\n <ui-select data-ng-model="queue.queue_holdtime" name="queue_holdtime" theme="bootstrap" >\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.display_name}}</ui-select-match>\n <ui-select-choices repeat="announce.path as announce in queueAnnounces | filter: $select.search">\n <div ng-bind-html="announce.display_name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_HOLDTIME\' | translate }}\n </span>\n <span data-ng-show="(forms.announce.queue_holdtime.$touched || forms.announce.$submitted) && forms.announce.queue_holdtime.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END QUEUE_HOLDTIME -->\n\n <!-- START QUEUE_MINUTES -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.announce.queue_minutes.$touched || forms.announce.$submitted) && forms.announce.queue_minutes.$invalid}">\n <label class="control-label">{{\'APPLICATION_QUEUE_MINUTES\' | translate}}</label>\n <ui-select data-ng-model="queue.queue_minutes" name="queue_minutes" theme="bootstrap" >\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.display_name}}</ui-select-match>\n <ui-select-choices repeat="announce.path as announce in queueAnnounces | filter: $select.search">\n <div ng-bind-html="announce.display_name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_MINUTES\' | translate }}\n </span>\n <span data-ng-show="(forms.announce.queue_minutes.$touched || forms.announce.$submitted) && forms.announce.queue_minutes.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END QUEUE_MINUTES -->\n\n <!-- START QUEUE_MINUTE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.announce.queue_minute.$touched || forms.announce.$submitted) && forms.announce.queue_minute.$invalid}">\n <label class="control-label">{{\'APPLICATION_QUEUE_MINUTE\' | translate}}</label>\n <ui-select data-ng-model="queue.queue_minute" name="queue_minute" theme="bootstrap" >\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.display_name}}</ui-select-match>\n <ui-select-choices repeat="announce.path as announce in queueAnnounces | filter: $select.search">\n <div ng-bind-html="announce.display_name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_MINUTE\' | translate }}\n </span>\n <span data-ng-show="(forms.announce.queue_minute.$touched || forms.announce.$submitted) && forms.announce.queue_minute.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END QUEUE_MINUTE -->\n\n <!-- START QUEUE_SECONDS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.announce.queue_seconds.$touched || forms.announce.$submitted) && forms.announce.queue_seconds.$invalid}">\n <label class="control-label">{{\'APPLICATION_QUEUE_SECONDS\' | translate}}</label>\n <ui-select data-ng-model="queue.queue_seconds" name="queue_seconds" theme="bootstrap" >\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.display_name}}</ui-select-match>\n <ui-select-choices repeat="announce.path as announce in queueAnnounces | filter: $select.search">\n <div ng-bind-html="announce.display_name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_SECONDS\' | translate }}\n </span>\n <span data-ng-show="(forms.announce.queue_seconds.$touched || forms.announce.$submitted) && forms.announce.queue_seconds.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END QUEUE_SECONDS -->\n\n <!-- START QUEUE_THANKYOU -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.announce.queue_thankyou.$touched || forms.announce.$submitted) && forms.announce.queue_thankyou.$invalid}">\n <label class="control-label">{{\'APPLICATION_QUEUE_THANKYOU\' | translate}}</label>\n <ui-select data-ng-model="queue.queue_thankyou" name="QUEUE_THANKYOU" theme="bootstrap" >\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.display_name}}</ui-select-match>\n <ui-select-choices repeat="announce.path as announce in queueAnnounces | filter: $select.search">\n <div ng-bind-html="announce.display_name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_THANKYOU\' | translate }}\n </span>\n <span data-ng-show="(forms.announce.queue_thankyou.$touched || forms.announce.$submitted) && forms.announce.queue_thankyou.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END QUEUE_THANKYOU -->\n\n </div>\n </div>\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END GENERAL TAB -->\n <!-- ADVANCED TAB -->\n <div class="tab-pane" id="tab_1_3">\n <form name="forms.advanced" data-ng-submit="forms.announce.$valid && forms.general.$valid && forms.advanced.$valid && updateVoiceQueue()" novalidate>\n\n <div class="row">\n <div class="col-md-6">\n\n <!-- START AUTOPAUSE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.autopause.$touched || forms.advanced.$submitted) && forms.advanced.autopause.$invalid}">\n <label class="control-label">{{\'APPLICATION_AUTOPAUSE\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="queue.autopause"\n type="checkbox"\n switch-active="{{ recordSwitch.isActive }}"\n switch-on-text="{{ recordSwitch.onText }}"\n switch-off-text="{{ recordSwitch.offText }}"\n switch-on-color="{{ recordSwitch.onColor }}"\n switch-off-color="{{ recordSwitch.offColor }}"\n switch-animate="{{ recordSwitch.animate }}"\n switch-size="{{ recordSwitch.size }}"\n switch-label="{{ recordSwitch.label }}"\n switch-icon="{{ recordSwitch.icon }}"\n switch-radio-off="{{ recordSwitch.radioOff }}"\n switch-label-width="{{ recordSwitch.labelWidth }}"\n switch-handle-width="{{ recordSwitch.handleWidth }}"\n ng-true-value="\'all\'"\n ng-false-value="\'no\'">\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_AUTOPAUSE\' | translate }}\n </span>\n <span data-ng-show="(forms.advanced.autopause.$touched || forms.advanced.$submitted) && forms.advanced.autopause.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END AUTOPAUSE -->\n\n <!-- START RINGINUSE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.ringinuse.$touched || forms.advanced.$submitted) && forms.advanced.ringinuse.$invalid}">\n <label class="control-label">{{\'APPLICATION_RINGINUSE\' | translate}}</label>\n <ui-select data-ng-model="queue.ringinuse" name="ringinuse" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n <ui-select-choices repeat="item in [\'yes\',\'no\'] | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_RINGINUSE\' | translate }}\n </span>\n <span data-ng-show="(forms.advanced.ringinuse.$touched || forms.advanced.$submitted) && forms.advanced.ringinuse.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END RINGINUSE -->\n\n <!-- START MEMBER_DELAY -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.memberdelay.$touched || forms.advanced.$submitted) && forms.advanced.memberdelay.$invalid}">\n <label class="control-label">{{\'APPLICATION_MEMBER_DELAY\' | translate}}</label>\n <input type="number" min="0" name="memberdelay" placeholder="{{\'APPLICATION_MEMBER_DELAY\' | translate}}" class="form-control" data-ng-model="queue.memberdelay" required/>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_MEMBER_DELAY\' | translate }}\n </span>\n <span data-ng-show="(forms.advanced.memberdelay.$touched || forms.advanced.$submitted) && forms.advanced.memberdelay.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END MEMBER_DELAY -->\n\n <!-- START ACW -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.acw.$touched || forms.advanced.$submitted) && forms.advanced.acw.$invalid}">\n <label class="control-label">{{\'APPLICATION_ACW\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="queue.acw"\n type="checkbox"\n switch-active="{{ recordSwitch.isActive }}"\n switch-on-text="{{ recordSwitch.onText }}"\n switch-off-text="{{ recordSwitch.offText }}"\n switch-on-color="{{ recordSwitch.onColor }}"\n switch-off-color="{{ recordSwitch.offColor }}"\n switch-animate="{{ recordSwitch.animate }}"\n switch-size="{{ recordSwitch.size }}"\n switch-label="{{ recordSwitch.label }}"\n switch-icon="{{ recordSwitch.icon }}"\n switch-radio-off="{{ recordSwitch.radioOff }}"\n switch-label-width="{{ recordSwitch.labelWidth }}"\n switch-handle-width="{{ recordSwitch.handleWidth }}">\n <span class="help-block">\n {{ \'DESCRIPTION_ACW\' | translate }}\n </span>\n <span data-ng-show="(forms.advanced.acw.$touched || forms.advanced.$submitted) && forms.advanced.acw.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_ACW\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END ACW -->\n\n <!-- START SETINTERFACEVAR -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.setinterfacevar.$touched || forms.advanced.$submitted) && forms.advanced.setinterfacevar.$invalid}">\n <label class="control-label">{{\'APPLICATION_SETINTERFACEVAR\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="queue.setinterfacevar"\n type="checkbox"\n switch-active="{{ recordSwitch.isActive }}"\n switch-on-text="{{ recordSwitch.onText }}"\n switch-off-text="{{ recordSwitch.offText }}"\n switch-on-color="{{ recordSwitch.onColor }}"\n switch-off-color="{{ recordSwitch.offColor }}"\n switch-animate="{{ recordSwitch.animate }}"\n switch-size="{{ recordSwitch.size }}"\n switch-label="{{ recordSwitch.label }}"\n switch-icon="{{ recordSwitch.icon }}"\n switch-radio-off="{{ recordSwitch.radioOff }}"\n switch-label-width="{{ recordSwitch.labelWidth }}"\n switch-handle-width="{{ recordSwitch.handleWidth }}">\n <span class="help-block">\n {{ \'DESCRIPTION_SETINTERFACEVAR\' | translate }} <a href="https://wiki.xcallymotion.com/display/XMD/Queues+-+Voice+Channel" target="_blank">wiki</a>)\n </span>\n <span data-ng-show="(forms.advanced.setinterfacevar.$touched || forms.advanced.$submitted) && forms.advanced.setinterfacevar.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_SETINTERFACEVAR\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END SETINTERFACEVAR -->\n\n <!-- START SETQUEUEVAR -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.setqueuevar.$touched || forms.advanced.$submitted) && forms.advanced.setqueuevar.$invalid}">\n <label class="control-label">{{\'APPLICATION_SETQUEUEVAR\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="queue.setqueuevar"\n type="checkbox"\n switch-active="{{ recordSwitch.isActive }}"\n switch-on-text="{{ recordSwitch.onText }}"\n switch-off-text="{{ recordSwitch.offText }}"\n switch-on-color="{{ recordSwitch.onColor }}"\n switch-off-color="{{ recordSwitch.offColor }}"\n switch-animate="{{ recordSwitch.animate }}"\n switch-size="{{ recordSwitch.size }}"\n switch-label="{{ recordSwitch.label }}"\n switch-icon="{{ recordSwitch.icon }}"\n switch-radio-off="{{ recordSwitch.radioOff }}"\n switch-label-width="{{ recordSwitch.labelWidth }}"\n switch-handle-width="{{ recordSwitch.handleWidth }}">\n <span class="help-block">\n {{ \'DESCRIPTION_SETQUEUEVAR\' | translate }} <a href="https://wiki.xcallymotion.com/display/XMD/Queues+-+Voice+Channel" target="_blank">wiki</a>)\n </span>\n <span data-ng-show="(forms.advanced.setqueuevar.$touched || forms.advanced.$submitted) && forms.advanced.setqueuevar.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_SETQUEUEVAR\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END SETQUEUEVAR -->\n\n </div>\n <div class="col-md-6">\n\n <!-- START TIMEOUTRESTART -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.timeoutrestart.$touched || forms.advanced.$submitted) && forms.advanced.timeoutrestart.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEOUTRESTART\' | translate}}</label>\n <ui-select data-ng-model="queue.timeoutrestart" name="timeoutrestart" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n <ui-select-choices repeat="item in [\'yes\',\'no\'] | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_TIMEOUTRESTART\' | translate }}\n </span>\n <span data-ng-show="(forms.advanced.timeoutrestart.$touched || forms.advanced.$submitted) && forms.advanced.timeoutrestart.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUTRESTART -->\n\n <!-- START MONITOR_FORMAT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.monitor_format.$touched || forms.advanced.$submitted) && forms.advanced.monitor_format.$invalid}">\n <label class="control-label">{{\'APPLICATION_MONITOR_FORMAT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="queue.monitor_format" name="monitor_format" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="monFormat.value as monFormat in monitorFormats | filter: $select.search">\n <div ng-bind-html="monFormat.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_MONITOR_FORMAT\' | translate }}\n </span>\n <span data-ng-show="(forms.advanced.monitor_format.$touched || forms.advanced.$submitted) && forms.advanced.monitor_format.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END MONITOR_FORMAT -->\n\n <!-- START CONTEXT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.context.$touched || forms.advanced.$submitted) && forms.advanced.context.$invalid}">\n <label class="control-label">{{\'APPLICATION_CONTEXT\' | translate}}</label>\n <ui-select data-ng-model="queue.context" name="context" theme="bootstrap">\n <ui-select-match allow-clear placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="context.name as context in voiceContexts | filter: $select.search">\n <div ng-bind-html="context.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_VOICE_CONTEXT\' | translate }}\n </span>\n <span data-ng-show="(forms.advanced.context.$touched || forms.advanced.$submitted) && forms.advanced.context.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CONTEXT -->\n\n <!-- START ACW_TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.acwTimeout.$touched || forms.advanced.$submitted) && forms.advanced.acwTimeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_ACW_TIMEOUT\' | translate}}</label>\n <input type="number" min="0" name="acwTimeout" placeholder="{{\'APPLICATION_ACW_TIMEOUT\' | translate}}" class="form-control" data-ng-model="queue.acwTimeout" required/>\n <span class="help-block">\n {{ \'DESCRIPTION_ACW_TIMEOUT\' | translate }}\n </span>\n <span data-ng-show="(forms.advanced.acwTimeout.$touched || forms.advanced.$submitted) && forms.advanced.acwTimeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END ACW_TIMEOUT -->\n\n <!-- START SETQUEUEENTRYVAR -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.setqueueentryvar.$touched || forms.advanced.$submitted) && forms.advanced.setqueueentryvar.$invalid}">\n <label class="control-label">{{\'APPLICATION_SETQUEUEENTRYVAR\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="queue.setqueueentryvar"\n type="checkbox"\n switch-active="{{ recordSwitch.isActive }}"\n switch-on-text="{{ recordSwitch.onText }}"\n switch-off-text="{{ recordSwitch.offText }}"\n switch-on-color="{{ recordSwitch.onColor }}"\n switch-off-color="{{ recordSwitch.offColor }}"\n switch-animate="{{ recordSwitch.animate }}"\n switch-size="{{ recordSwitch.size }}"\n switch-label="{{ recordSwitch.label }}"\n switch-icon="{{ recordSwitch.icon }}"\n switch-radio-off="{{ recordSwitch.radioOff }}"\n switch-label-width="{{ recordSwitch.labelWidth }}"\n switch-handle-width="{{ recordSwitch.handleWidth }}">\n <span class="help-block">\n {{ \'DESCRIPTION_SETQUEUEENTRYVAR\' | translate }} <a href="https://wiki.xcallymotion.com/display/XMD/Queues+-+Voice+Channel" target="_blank">wiki</a>)\n </span>\n <span data-ng-show="(forms.advanced.setqueueentryvar.$touched || forms.advanced.$submitted) && forms.advanced.setqueueentryvar.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_SETQUEUEENTRYVAR\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END SETQUEUEENTRYVAR -->\n\n </div>\n </div>\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END ADVANCED TAB -->\n\n </div>\n </div>\n </div>\n </div>\n</div>\n'), -a.put("app/channels/voice/realtime/view/abandoned/abandoned.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initAbandoned()">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns class="ui-grid" ui-grid-pagination ui-grid-auto-resize>\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/voice/realtime/view/agent/agent.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initAgents()">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns class="ui-grid" ui-grid-tree-view ui-grid-expandable-row ui-grid-pagination ui-grid-auto-resize>\n <span us-spinner spinner-key="grid-spinner" spinner-start-active="true"></span>\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/voice/realtime/view/agent/agent.modal.info.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_SIP_CLIENT_INFO\' | translate }}</h3>\n</div>\n<div class="modal-body">\n<div data-ng-if="agent.ipaddr" class="well">\n <div>{{agent.ipaddr}}:{{agent.port}}</div>\n <div>{{agent.fullcontact}}</div>\n <div>{{agent.useragent}}</div>\n <div>{{agent.lastms}}</div>\n</div>\n<div data-ng-if="!agent.ipaddr" class="alert alert-danger" role="alert">\n {{\'MESSAGE_NO_AVAILABLE_INFO\' | translate}}\n</div>\n<!-- hidden random uiselect, needed to recompile the modal every time and show the content -->\n<ui-select multiple class="hide" ng-model="item.queues" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_QUEUE\' | translate}}">{{$item.name}}</ui-select-match>\n <ui-select-choices repeat="queue.name as queue in queues | filter: $select.search">\n <div ng-bind-html="queue.name | highlight: $select.search"></div>\n </ui-select-choices>\n</ui-select>\n<!-- -->\n</div>\n<div class="modal-footer">\n <button class="btn default" type="button" ng-click="close()">{{ \'APPLICATION_CLOSE\' | translate }}</button>\n</div>\n'),a.put("app/channels/voice/realtime/view/agent/queue.modal.add.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_JOIN_QUEUE\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <div class="form-group row">\n <label class="col-md-2 control-label" style="margin-top: 7px;">{{\'APPLICATION_QUEUE\' | translate}}:</label>\n <div class="col-md-10">\n <ui-select multiple ng-model="item.queues" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_QUEUE\' | translate}}">{{$item.name}}</ui-select-match>\n <ui-select-choices repeat="queue.name as queue in queues | filter: $select.search">\n <div ng-bind-html="queue.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n</div>\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/voice/realtime/view/outbound/outbound.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initDials()">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns class="ui-grid" ui-grid-auto-resize ui-grid-pagination>\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/voice/realtime/view/parameter/parameter.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initParameters()">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns class="ui-grid" ui-grid-tree-view ui-grid-expandable-row ui-grid-pagination ui-grid-auto-resize>\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/voice/realtime/view/queue/queue.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initQueues()">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns class="ui-grid" ui-grid-tree-view ui-grid-expandable-row ui-grid-pagination ui-grid-auto-resize>\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/voice/realtime/view/queuecalls/queuecalls.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initQueues()">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns class="ui-grid" ui-grid-auto-resize ui-grid-pagination>\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/voice/realtime/view/telephone/telephone.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initTelephones()">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns class="ui-grid" ui-grid-pagination ui-grid-auto-resize>\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/voice/realtime/view/telephone/telephone.modal.info.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_INTERFACE_INFO\' | translate }}</h3>\n</div>\n<div class="modal-body">\n<div data-ng-if="telephone.ipaddr" class="well">\n <div>{{telephone.ipaddr}}:{{telephone.port}}</div>\n <div>{{telephone.fullcontact}}</div>\n <div>{{telephone.useragent}}</div>\n <div>{{telephone.lastms}}</div>\n</div>\n<div data-ng-if="!telephone.ipaddr" class="alert alert-danger" role="alert">\n {{\'MESSAGE_NO_AVAILABLE_INFO\' | translate}}\n</div>\n</div>\n<div class="modal-footer">\n <button class="btn default" type="button" ng-click="close()">{{ \'APPLICATION_CLOSE\' | translate }}</button>\n</div>\n'),a.put("app/channels/voice/realtime/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-directions"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-earphones-alt"></i>\n <a href="#">{{ \'APPLICATION_VOICE\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-energy"></i>\n <a href="/channels/voice/realtime/view/agents">{{ \'APPLICATION_REALTIME\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <div>\n <nav class="navbar navbar-default" role="navigation">\n <div class="collapse navbar-collapse">\n <ul class="nav navbar-nav">\n <li data-ng-class="{\'active\': $state.is(\'main.channels.voice.realtime.view.agents\')}">\n <a href="/channels/voice/realtime/view/agents">\n {{\'APPLICATION_AGENTS\' | translate}}\n </a>\n </li>\n <li data-ng-class="{\'active\': $state.is(\'main.channels.voice.realtime.view.telephones\')}" data-ng-show="Auth.isAdmin()">\n <a href="/channels/voice/realtime/view/telephones">\n {{\'APPLICATION_TELEPHONES\' | translate}}\n </a>\n </li>\n <li data-ng-class="{\'active\': $state.is(\'main.channels.voice.realtime.view.queues\')}">\n <a href="/channels/voice/realtime/view/queues">\n {{\'APPLICATION_QUEUES\' | translate}}\n </a>\n </li>\n <li data-ng-class="{\'active\': $state.is(\'main.channels.voice.realtime.view.queuecalls\')}">\n <a href="/channels/voice/realtime/view/queuecalls">\n {{\'APPLICATION_QUEUE_CALLS\' | translate}}\n </a>\n </li>\n <li data-ng-class="{\'active\': $state.is(\'main.channels.voice.realtime.view.parameters\')}">\n <a href="/channels/voice/realtime/view/parameters">\n {{\'APPLICATION_QUEUE_PARAMETERS\' | translate}}\n </a>\n </li>\n <li data-ng-class="{\'active\': $state.is(\'main.channels.voice.realtime.view.abandoned\')}">\n <a href="/channels/voice/realtime/view/abandoned">\n {{\'APPLICATION_QUEUE_ABANDONED\' | translate}}\n </a>\n </li>\n <li data-ng-class="{\'active\': $state.is(\'main.channels.voice.realtime.view.outbound\')}">\n <a href="/channels/voice/realtime/view/outbound">\n {{\'APPLICATION_OUTBOUND_CALLS\' | translate}}\n </a>\n </li>\n </ul>\n </div>\n </nav>\n </div>\n <div ui-view></div>\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/voice/recording/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-earphones-alt"></i>\n <a href="#">{{ \'APPLICATION_VOICE\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-play"></i>\n <a href="#">{{ \'APPLICATION_RECORDINGS\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="fa fa-play font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_RECORDINGS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/voice/route/inbound/list/create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_ROUTE\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="forms.extension" novalidate>\n\n <!-- START EXTEN -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.extension.exten.$touched || forms.extension.$submitted) && forms.extension.exten.$invalid || existRoute}">\n <label class="control-label">{{\'APPLICATION_PHONE_NUMBER\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="exten" placeholder="{{\'APPLICATION_PHONE_NUMBER\' | translate}}" class="form-control" data-ng-model="item.exten" data-ng-pattern="settings.patternName" required/>\n <span data-ng-show="(forms.extension.exten.$touched || forms.extension.$submitted) && forms.extension.exten.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END EXTEN -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="ok()" ng-disabled="forms.extension.$invalid || existRoute">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n<!-- <pre>\n {{item | json}}\n</pre> -->\n'),a.put("app/channels/voice/route/inbound/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-earphones-alt"></i>\n <a href="#">{{ \'APPLICATION_VOICE\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-call-in"></i>\n <a href="/channels/voice/routes/inbound/list">{{ \'APPLICATION_INBOUND\' | translate }} {{ \'APPLICATION_ROUTES\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-users font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_INBOUND\' | translate }} {{ \'APPLICATION_ROUTES\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <a class="btn green-jungle " href="#" data-ng-click="create()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_ROUTE\' | translate }}\n </a>\n </div>\n <!-- <a class="btn btn-icon-only btn-default fullscreen" href="#"></a> -->\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter class="ui-grid" ui-grid-draggable-rows>\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/voice/route/inbound/view/view.applications.html",'<div ui-view class="profile-content">\n<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_ACTIONS\' | translate}}</span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="selectedRows.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <a class="btn green-jungle " href="/channels/voice/routes/inbound/view/{{route.id}}/application" data-toggle="dropdown">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_APPLICATION\' | translate }}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div data-ng-if="showGrid" ui-grid="gridOptions" ui-grid-resize-columns class="grid" ui-grid-selection ui-grid-draggable-rows ui-grid-auto-resize>\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n </div>\n</div>\n</div>\n'),a.put("app/channels/voice/route/inbound/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getRoute()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-earphones-alt"></i>\n <a href="#">{{ \'APPLICATION_VOICE\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-reload"></i>\n <a href="/channels/voice/routes/inbound/list">{{ \'APPLICATION_INBOUND\' | translate }} {{ \'APPLICATION_ROUTES\' | translate }}</a>\n <i data-ng-show="route" class="fa fa-angle-right"></i>\n </li>\n <li data-ng-show="route">\n <a href="#">{{route.exten}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/inboundroute.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{route.exten}}\n </div>\n <!-- <div class="profile-usertitle-job">\n {{user.role}}\n </div> -->\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.channels.voice.routes.inbound.view.settings\')}">\n <a data-ng-click="deselectAndRedirect(\'/channels/voice/routes/inbound/view/\'+route.id+\'/settings\')">\n <i class="icon-settings"></i>\n {{ \'APPLICATION_SETTINGS\' | translate}} </a>\n </li>\n'+" <li data-ng-class=\"{active: $state.is('main.channels.voice.routes.inbound.view.applications') || $state.is('main.channels.voice.routes.inbound.view.application') || $state.is('main.channels.voice.routes.inbound.view.applications.settings')}\">\n <a data-ng-click=\"deselectAndRedirect('/channels/voice/routes/inbound/view/'+route.id+'/applications')\">\n <i class=\"icon-list\"></i>\n {{ 'APPLICATION_ACTIONS' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class=\"profile-content\">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n"),a.put("app/channels/voice/route/inbound/view/view.settings.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_INBOUND\' | translate}} {{ \'APPLICATION_ROUTE\' | translate}} {{ \'APPLICATION_SETTINGS\' | translate}} </span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n </li>\n </ul>\n </div>\n\n <div class="portlet-body" data-ng-init="getContexts()">\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.general" data-ng-submit="forms.general.$valid && updateRoute()" novalidate>\n\n <!-- START EXTEN -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.exten.$touched || forms.general.$submitted) && forms.general.exten.$invalid}">\n <label class="control-label">{{\'APPLICATION_PHONE_NUMBER\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="exten" placeholder="{{\'APPLICATION_PHONE_NUMBER\' | translate}}" class="form-control" data-ng-model="route.exten" required/>\n <span data-ng-show="(forms.general.exten.$touched || forms.general.$submitted) && forms.general.exten.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END EXTEN -->\n\n <!-- START CONTEXT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.context.$touched || forms.general.$submitted) && forms.general.context.$invalid}">\n <label class="control-label">{{\'APPLICATION_CONTEXT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="route.context" name="context" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="context.name as context in voiceContexts | filter: $select.search">\n <div ng-bind-html="context.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_VOICE_CONTEXT\' | translate }}\n </span>\n <span data-ng-show="(forms.general.context.$touched || forms.general.$submitted) && forms.general.context.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CONTEXT -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="route.description"/></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END GENERAL TAB -->\n\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/voice/route/internal/list/create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_ROUTE\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="forms.extension" novalidate>\n\n <!-- START EXTEN -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.extension.exten.$touched || forms.extension.$submitted) && forms.extension.exten.$invalid || existRoute}">\n <label class="control-label">{{\'APPLICATION_PHONE_NUMBER\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="exten" placeholder="{{\'APPLICATION_PHONE_NUMBER\' | translate}}" class="form-control" data-ng-model="item.exten" data-ng-pattern="settings.patternName" required/>\n <span data-ng-show="(forms.extension.exten.$touched || forms.extension.$submitted) && forms.extension.exten.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END EXTEN -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="ok()" ng-disabled="forms.extension.$invalid || existRoute">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n<!-- <pre>\n {{item | json}}\n</pre> -->\n'),a.put("app/channels/voice/route/internal/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-earphones-alt"></i>\n <a href="#">{{ \'APPLICATION_VOICE\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-reload"></i>\n <a href="/voice/routes/internal/list">{{ \'APPLICATION_INTERNAL\' | translate }} {{ \'APPLICATION_ROUTES\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-users font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_INTERNAL\' | translate }} {{ \'APPLICATION_ROUTES\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <a class="btn green-jungle " href="#" data-ng-click="create()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_ROUTE\' | translate }}\n </a>\n </div>\n <!-- <a class="btn btn-icon-only btn-default fullscreen" href="#"></a> -->\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter class="ui-grid" ui-grid-draggable-rows>\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/voice/route/internal/view/view.applications.html",'<div ui-view class="profile-content">\n<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_ACTIONS\' | translate}}</span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="selectedRows.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <a class="btn green-jungle " href="/channels/voice/routes/internal/view/{{route.id}}/application" data-toggle="dropdown">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_APPLICATION\' | translate }}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div data-ng-if="showGrid" ui-grid="gridOptions" ui-grid-resize-columns class="grid" ui-grid-selection ui-grid-draggable-rows ui-grid-auto-resize>\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n </div>\n</div>\n</div>\n'),a.put("app/channels/voice/route/internal/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getRoute()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-earphones-alt"></i>\n <a href="#">{{ \'APPLICATION_VOICE\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-reload"></i>\n <a href="/channels/voice/routes/internal/list">{{ \'APPLICATION_INTERNAL\' | translate }} {{ \'APPLICATION_ROUTES\' | translate }}</a>\n <i data-ng-show="route" class="fa fa-angle-right"></i>\n </li>\n <li data-ng-show="route">\n <a href="#">{{route.exten}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/internalroute.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{route.exten}}\n </div>\n <!-- <div class="profile-usertitle-job">\n {{user.role}}\n </div> -->\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.channels.voice.routes.internal.view.settings\')}">\n <a data-ng-click="deselectAndRedirect(\'/channels/voice/routes/internal/view/\'+route.id+\'/settings\')">\n <i class="icon-settings"></i>\n {{ \'APPLICATION_SETTINGS\' | translate}} </a>\n </li>\n'+" <li data-ng-class=\"{active: $state.is('main.channels.voice.routes.internal.view.applications') || $state.is('main.channels.voice.routes.internal.view.application') || $state.is('main.channels.voice.routes.internal.view.applications.settings')}\">\n <a data-ng-click=\"deselectAndRedirect('/channels/voice/routes/internal/view/'+route.id+'/applications')\">\n <i class=\"icon-list\"></i>\n {{ 'APPLICATION_ACTIONS' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class=\"profile-content\">\n </div>\n <!-- <pre>\n {{route | json}}\n </pre> -->\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n"), -a.put("app/channels/voice/route/internal/view/view.settings.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_INTERNAL\' | translate}} {{ \'APPLICATION_ROUTE\' | translate}} {{ \'APPLICATION_SETTINGS\' | translate}} </span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n </li>\n </ul>\n </div>\n\n <div class="portlet-body" data-ng-init="getContexts()">\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.general" data-ng-submit="forms.general.$valid && updateRoute()" novalidate>\n\n <!-- START EXTEN -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.exten.$touched || forms.general.$submitted) && forms.general.exten.$invalid}">\n <label class="control-label">{{\'APPLICATION_PHONE_NUMBER\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="exten" placeholder="{{\'APPLICATION_PHONE_NUMBER\' | translate}}" class="form-control" data-ng-model="route.exten" required/>\n <span data-ng-show="(forms.general.exten.$touched || forms.general.$submitted) && forms.general.exten.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END EXTEN -->\n\n <!-- START CONTEXT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.context.$touched || forms.general.$submitted) && forms.general.context.$invalid}">\n <label class="control-label">{{\'APPLICATION_CONTEXT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="route.context" name="context" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="context.name as context in voiceContexts | filter: $select.search">\n <div ng-bind-html="context.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_VOICE_CONTEXT\' | translate }}\n </span>\n <span data-ng-show="(forms.general.context.$touched || forms.general.$submitted) && forms.general.context.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CONTEXT -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="route.description"/></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END GENERAL TAB -->\n\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/voice/route/outbound/list/create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_ROUTE\' | translate }}</h3>\n</div>\n<div class="modal-body" data-ng-init="getTags()">\n <form name="forms.extension" novalidate>\n\n <!-- START EXTEN -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.extension.exten.$touched || forms.extension.$submitted) && forms.extension.exten.$invalid || existRoute}">\n <label class="control-label">{{\'APPLICATION_DESTINATION_PATTERN\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="exten" placeholder="{{\'APPLICATION_DESTINATION_PATTERN\' | translate}}" class="form-control" data-ng-model="item.exten" data-ng-pattern="settings.patternName" required/>\n <span data-ng-show="(forms.extension.exten.$touched || forms.extension.$submitted) && forms.extension.exten.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END EXTEN -->\n\n <!-- START TAG -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.extension.tag.$touched || forms.extension.$submitted) && forms.extension.tag.$invalid}">\n <label class="control-label">{{ \'APPLICATION_TAG\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="item.tag" name="tag" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_TAG\' | translate }}" data-ng-init="item.tag = \'--\'">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="tag.name as tag in tags | filter: $select.search">\n <div ng-bind-html="tag.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.extension.tag.$touched || forms.extension.$submitted) && forms.extension.tag.$invalid && forms.extension.tag.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TAG -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="ok()" ng-disabled="forms.extension.$invalid || existRoute">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n<!-- <pre>\n {{item | json}}\n</pre> -->\n'),a.put("app/channels/voice/route/outbound/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-earphones-alt"></i>\n <a href="#">{{ \'APPLICATION_VOICE\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-call-out"></i>\n <a href="/channels/voice/routes/outbound/list">{{ \'APPLICATION_OUTBOUND\' | translate }} {{ \'APPLICATION_ROUTES\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-users font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_OUTBOUND\' | translate }} {{ \'APPLICATION_ROUTES\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <a class="btn green-jungle " href="#" data-ng-click="create()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_ROUTE\' | translate }}\n </a>\n </div>\n <!-- <a class="btn btn-icon-only btn-default fullscreen" href="#"></a> -->\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter class="ui-grid" ui-grid-draggable-rows>\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/voice/route/outbound/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getRoute()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-earphones-alt"></i>\n <a href="#">{{ \'APPLICATION_VOICE\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-call-out"></i>\n <a href="/channels/voice/routes/outbound/list">{{ \'APPLICATION_OUTBOUND\' | translate }} {{ \'APPLICATION_ROUTES\' | translate }}</a>\n <i data-ng-show="route" class="fa fa-angle-right"></i>\n </li>\n <li data-ng-show="route">\n <a href="#">{{route.exten}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/outboundroute.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{route.exten}}\n </div>\n <!-- <div class="profile-usertitle-job">\n {{user.role}}\n </div> -->\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.channels.voice.routes.outbound.view.settings\')}">\n <a data-ng-click="deselectAndRedirect(\'/channels/voice/routes/outbound/view/\'+route.id+\'/settings\')">\n <i class="icon-settings"></i>\n {{ \'APPLICATION_SETTINGS\' | translate}} </a>\n </li>\n'+" <li data-ng-class=\"{active: $state.is('main.channels.voice.routes.outbound.view.routes') || $state.is('main.channels.voice.routes.outbound.view.route') || $state.is('main.channels.voice.routes.outbound.view.routes.settings')}\">\n <a data-ng-click=\"deselectAndRedirect('/channels/voice/routes/outbound/view/'+route.id+'/routes')\">\n <i class=\"icon-list\"></i>\n {{ 'APPLICATION_ACTIONS' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class=\"profile-content\">\n </div>\n <!-- <pre>\n {{route | json}}\n </pre> -->\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n"),a.put("app/channels/voice/route/outbound/view/view.route.html",'<div class="row" data-ng-init="initApplication(true);getIntervals();">\n <div class="col-md-12">\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-notebook font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_NEW_ROUTE\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <div class="profile-usertitle-name">\n {{(main.app.name | translate) || \'Application\'}}\n </div>\n <wizard on-finish="addApplication()">\n <wz-step title="{{\'APPLICATION_SETTINGS\' | translate}}" canexit="formValidation(forms.info.$valid)">\n <form name="forms.info" novalidate>\n <button class="btn green-haze" type="submit" ng-click="goNext()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n <!-- START APP -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.app.$touched || forms.info.$submitted) && forms.info.app.$invalid}">\n <label class="control-label">{{ \'APPLICATION_APPLICATION\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="main.app" name="app" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_APPLICATION\' | translate }}">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="app in applications | filter: $select.search">\n <div ng-bind-html="app.name | translate | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.info.app.$touched || forms.info.$submitted) && forms.info.app.$invalid && forms.info.app.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END APP -->\n <div id="Dial" class="app-settings" ng-slide-down="main.app.value == \'Dial\' && main.app.type == \'outboundDial\'" lazy-render duration="1">\n <!-- START TRUNK -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.trunk.$touched || forms.info.$submitted) && forms.info.trunk.$invalid}">\n <label class="control-label">{{\'APPLICATION_TRUNK\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.appdata[0]" data-ng-init="application.appdata[0] = null" name="trunk" theme="bootstrap" required data-ng-disabled="!items.length">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="trunk.name as trunk in items | filter: $select.search">\n <div ng-bind-html="trunk.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="items.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_TRUNKS_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/tools/trunks/list">{{\'APPLICATION_TRUNKS\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.info.trunk.$touched || forms.info.$submitted) && forms.info.trunk.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TRUNK -->\n\n <!-- START CALLERID -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.callerID.$touched || forms.info.$submitted) && forms.info.callerID.$invalid}">\n <label class="control-label">{{ \'APPLICATION_CALLERID\' | translate }}</label>\n <input type="text" name="callerID" pattern=\'^"[a-zA-Z0-9_.-]*" <[a-zA-Z0-9_.-]*>\' placeholder=\'"name" <number>\' class="form-control" data-ng-model="application.appdata[1]" data-ng-init="application.appdata[1] = null">\n <span class="help-block">\n {{ \'DESCRIPTION_OUTBOUND_CALLERID\' | translate }}\n </span>\n <span data-ng-show="(forms.info.callerID.$touched || forms.info.$submitted) && forms.info.callerID.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CALLERID -->\n\n <!-- START PREFIX -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.prefix.$touched || forms.info.$submitted) && forms.info.prefix.$invalid}">\n <label class="control-label">{{ \'APPLICATION_PREFIX\' | translate }}</label>\n <input type="text" name="prefix" placeholder="{{ \'APPLICATION_PREFIX\' | translate }}" class="form-control" data-ng-model="application.appdata[2]" data-ng-init="application.appdata[2] = null">\n <span class="help-block">\n {{ \'DESCRIPTION_OUTBOUND_PREFIX\' | translate }}\n </span>\n <span data-ng-show="(forms.info.prefix.$touched || forms.info.$submitted) && forms.info.prefix.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PREFIX -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid}">\n <label class="control-label">{{ \'APPLICATION_TIMEOUT\' | translate }}</label>\n <input type="text" pattern="[0-9]+" name="timeout" placeholder="" class="form-control" data-ng-model="application.appdata[3]" data-ng-init="application.appdata[3] = null">\n <span data-ng-show="(forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid && forms.settings.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n\n <!-- START OPTIONS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid}">\n <label class="control-label">{{ \'APPLICATION_OPTIONS\' | translate }}</label>\n <input type="text" name="app_options" placeholder="" class="form-control" data-ng-model="application.appdata[4]" data-ng-init="application.appdata[4] = null">\n <span data-ng-show="(forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid && forms.settings.app_options.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END OPTIONS -->\n\n <!-- START URL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid}">\n <label class="control-label">{{ \'APPLICATION_URL\' | translate }}</label>\n <input type="text" name="url" placeholder="{{ \'APPLICATION_URL\' | translate }}" class="form-control" data-ng-model="application.appdata[5]" data-ng-init="application.appdata[5] = null">\n <span data-ng-show="(forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid && forms.settings.url.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END URL -->\n\n </div>\n <div id="Custom" class="app-settings" ng-slide-down="main.app.type == \'custom\'" lazy-render duration="1">\n\n <!-- START CUSTOMAPP -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.customApp.$touched || forms.info.$submitted) && forms.info.customApp.$invalid}">\n <label class="control-label">{{ \'APPLICATION_CUSTOM_APP\' | translate }}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="customApp" placeholder="{{ \'APPLICATION_CUSTOM_APP\' | translate }}" class="form-control" data-ng-model="application.app" data-ng-init="application.appdata[0] = null" required>\n <span data-ng-show="(forms.info.customApp.$touched || forms.info.$submitted) && forms.info.customApp.$invalid && forms.info.customApp.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CUSTOMAPP -->\n\n <!-- START APPDATA -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.appdata.$touched || forms.info.$submitted) && forms.info.appdata.$invalid}">\n <label class="control-label">{{ \'APPLICATION_ARGUMENTS\' | translate }}</label>\n <input type="text" name="appdata" placeholder="{{ \'APPLICATION_ARGUMENTS\' | translate }}" class="form-control" data-ng-model="application.appdata[0]" data-ng-init="application.appdata[1] = null">\n <span data-ng-show="(forms.info.appdata.$touched || forms.info.$submitted) && forms.info.appdata.$invalid && forms.info.appdata.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END APPDATA -->\n </div>\n <button class="btn green-haze" type="submit" ng-click="goNext()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n </form>\n </wz-step>\n <wz-step title="{{\'APPLICATION_INTERVAL\' | translate}}" canexit="formValidation(forms.interval.IntervalId.$valid || forms.interval.hasOwnProperty(\'t_from\') || forms.interval.intType.$modelValue === \'always\')">\n <form name="forms.interval" novalidate>\n <button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n <button class="btn green-haze" type="submit" ng-click="goNext()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n <!-- START INTERVAL_TYPE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.interval.intType.$touched || forms.interval.$submitted) && forms.interval.intType.$invalid}">\n <label class="control-label">{{\'APPLICATION_INTERVAL_TYPE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="interval.intType" theme="bootstrap" name="intType" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="intType.value as intType in $application.intTypes | filter: $select.search">\n {{$translate.instant(intType.name)}}\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.interval.intType.$touched || forms.interval.$submitted) && forms.interval.intType.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERVAL_TYPE -->\n <div id="customInterval" class="app-settings" ng-slide-down="interval.intType == \'custom\'" lazy-render duration="1">\n <!-- START TIME -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_TIME\' | translate }}</label>\n <div class="input-group input-large">\n <fieldset class="pull-left" ng-disabled="interval.alwaysTime"><uib-timepicker name="t_from" data-ng-model="interval.t_from" show-meridian="false" show-spinners="false"></uib-timepicker></fieldset>\n <div class="input-group-addon col-md-1 interval-to pull-left">to</div>\n <fieldset ng-disabled="interval.alwaysTime"><uib-timepicker name="t_to" data-ng-model="interval.t_to" show-meridian="false" show-spinners="false"></uib-timepicker></fieldset>\n <label class="control-label pointer-cursor"><input type="checkbox" data-ng-model="interval.alwaysTime">{{\'APPLICATION_ALWAYS\' | translate}}</label>\n </div>\n </div>\n <!-- END TIME -->\n\n <!-- START WEEKDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_WEEKDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="interval.wd_from" theme="bootstrap" name="wd_from">\n <ui-select-match placeholder="">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{weekDay.name | translate}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="interval.wd_to" theme="bootstrap" name="wd_to">\n <ui-select-match placeholder="">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{weekDay.name | translate}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END WEEKDAY -->\n\n <!-- START MONTHDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTHDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="interval.md_from" theme="bootstrap" name="md_from">\n <ui-select-match>{{$select.selected === \'always\' ? \'APPLICATION_ALWAYS\' : $select.selected | translate}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search">\n {{monthDay === \'always\' ? \'APPLICATION_ALWAYS\' : monthDay | translate}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="interval.md_to" theme="bootstrap" name="md_to">\n <ui-select-match>{{$select.selected === \'always\' ? \'APPLICATION_ALWAYS\' : $select.selected | translate}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search">\n {{monthDay === \'always\' ? \'APPLICATION_ALWAYS\' : monthDay | translate}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTHDAY -->\n\n <!-- START MONTH -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTH\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="interval.m_from" theme="bootstrap" name="m_from">\n <ui-select-match placeholder="">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{month.name | translate}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="interval.m_to" theme="bootstrap" name="m_to">\n <ui-select-match placeholder="">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{month.name | translate}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTH -->\n </div>\n\n <div id="customInterval" class="app-settings" ng-slide-down="interval.intType == \'list\'" lazy-render duration="1">\n\n <!-- START INTERVALS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.interval.IntervalId.$touched || forms.interval.$submitted) && forms.interval.IntervalId.$invalid}">\n <label class="control-label">{{\'APPLICATION_INTERVALS\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="interval.IntervalId" theme="bootstrap" name="IntervalId" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="interval.id as interval in Intervals | filter: $select.search">\n {{interval.name | translate}}\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.interval.IntervalId.$touched || forms.interval.$submitted) && forms.interval.IntervalId.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERVALS -->\n\n </div>\n\n <button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n <button class="btn green-haze" type="submit" ng-click="goNext()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n </form>\n </wz-step>\n\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n <input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n </wz-step>\n </wizard>\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/voice/route/outbound/view/view.routeSettings.html",'<div class="row" data-ng-init="initApplication();getApplication();getIntervals();">\n <div class="col-md-12">\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-notebook font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_APPLICATION_SETTINGS\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="updateRoute(\'routes\')">\n <div class="profile-usertitle-name">\n {{(main.app.name | translate) || \'Application\'}}\n </div>\n <wz-step title="{{\'APPLICATION_APPLICATION\' | translate}}" canexit="formValidation(forms.info.$valid)">\n <form name="forms.info" novalidate>\n <button class="btn green-haze" type="submit" ng-click="goNext()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n <div id="Dial" class="app-settings" ng-slide-down="main.app.value == \'Dial\' && main.app.type == \'outboundDial\'" lazy-render duration="1">\n\n <!-- START TRUNK -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.trunk.$touched || forms.info.$submitted) && forms.info.trunk.$invalid}">\n <label class="control-label">{{\'APPLICATION_TRUNK\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="route.Applications[selectedApp].appdata[0]" name="trunk" theme="bootstrap" required data-ng-disabled="!items.length">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="trunk.name as trunk in items | filter: $select.search">\n <div ng-bind-html="trunk.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="items.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_TRUNKS_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/tools/trunks/list">{{\'APPLICATION_TRUNKS\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.info.trunk.$touched || forms.info.$submitted) && forms.info.trunk.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TRUNK -->\n\n <!-- START CALLERID -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.callerID.$touched || forms.info.$submitted) && forms.info.callerID.$invalid}">\n <label class="control-label">{{ \'APPLICATION_CALLERID\' | translate }}</label>\n <input type="text" name="callerID" pattern=\'^"[a-zA-Z0-9_.-]*" <[a-zA-Z0-9_.-]*>\' placeholder=\'"name" <number>\' class="form-control" data-ng-model="route.Applications[selectedApp].appdata[1]">\n <span class="help-block">\n {{ \'DESCRIPTION_OUTBOUND_CALLERID\' | translate }} "name" <number>\n </span>\n <span data-ng-show="(forms.info.callerID.$touched || forms.info.$submitted) && forms.info.callerID.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CALLERID -->\n\n <!-- START PREFIX -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.prefix.$touched || forms.info.$submitted) && forms.info.prefix.$invalid}">\n <label class="control-label">{{ \'APPLICATION_PREFIX\' | translate }}</label>\n <input type="text" name="prefix" placeholder="{{ \'APPLICATION_PREFIX\' | translate }}" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[2]">\n <span class="help-block">\n {{ \'DESCRIPTION_OUTBOUND_PREFIX\' | translate }}\n </span>\n <span data-ng-show="(forms.info.prefix.$touched || forms.info.$submitted) && forms.info.prefix.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PREFIX -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid}">\n <label class="control-label">{{ \'APPLICATION_TIMEOUT\' | translate }}</label>\n <input type="text" pattern="[0-9]+" name="timeout" placeholder="" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[3]">\n <span data-ng-show="(forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid && forms.settings.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n\n <!-- START OPTIONS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid}">\n <label class="control-label">{{ \'APPLICATION_OPTIONS\' | translate }}</label>\n <input type="text" name="app_options" placeholder="" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[4]">\n <span data-ng-show="(forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid && forms.settings.app_options.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END OPTIONS -->\n\n <!-- START URL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid}">\n <label class="control-label">{{ \'APPLICATION_URL\' | translate }}</label>\n <input type="text" name="url" placeholder="{{ \'APPLICATION_URL\' | translate }}" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[5]">\n <span data-ng-show="(forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid && forms.settings.url.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END URL -->\n </div>\n <div id="Custom" class="app-settings" ng-slide-down="main.app.type == \'custom\'" lazy-render duration="1">\n\n <!-- START CUSTOMAPP -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.customApp.$touched || forms.info.$submitted) && forms.info.customApp.$invalid}">\n <label class="control-label">{{ \'APPLICATION_CUSTOM_APP\' | translate }}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="customApp" placeholder="{{ \'APPLICATION_CUSTOM_APP\' | translate }}" class="form-control" data-ng-model="route.Applications[selectedApp].app" required>\n <span data-ng-show="(forms.info.customApp.$touched || forms.info.$submitted) && forms.info.customApp.$invalid && forms.info.customApp.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CUSTOMAPP -->\n\n <!-- START APPDATA -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.appdata.$touched || forms.info.$submitted) && forms.info.appdata.$invalid}">\n <label class="control-label">{{ \'APPLICATION_ARGUMENTS\' | translate }}</label>\n <input type="text" name="appdata" placeholder="{{ \'APPLICATION_ARGUMENTS\' | translate }}" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[0]">\n <span data-ng-show="(forms.info.appdata.$touched || forms.info.$submitted) && forms.info.appdata.$invalid && forms.info.appdata.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END APPDATA -->\n </div>\n <button class="btn green-haze" type="submit" ng-click="goNext()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n </form>\n </wz-step>\n <wz-step title="{{\'APPLICATION_INTERVAL\' | translate}}" canexit="formValidation(forms.interval.IntervalId.$valid || forms.interval.hasOwnProperty(\'t_from\') || forms.interval.intType.$modelValue === \'always\')">\n <form name="forms.interval" novalidate>\n <button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n <button class="btn green-haze" type="submit" ng-click="goNext()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n <!-- START INTERVAL_TYPE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.interval.intType.$touched || forms.interval.$submitted) && forms.interval.intType.$invalid}">\n <label class="control-label">{{\'APPLICATION_INTERVAL_TYPE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="interval.intType" theme="bootstrap" name="intType" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="intType.value as intType in $application.intTypes | filter: $select.search">\n {{intType.name | translate}}\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.interval.intType.$touched || forms.interval.$submitted) && forms.interval.intType.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERVAL_TYPE -->\n <div id="customInterval" class="app-settings" ng-slide-down="interval.intType == \'custom\'" lazy-render duration="1">\n <!-- START TIME -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_TIME\' | translate }}</label>\n <div class="input-group input-large">\n <fieldset class="pull-left" ng-disabled="interval.alwaysTime"><uib-timepicker name="t_from" data-ng-model="interval.t_from" show-meridian="false" show-spinners="false"></uib-timepicker></fieldset>\n <div class="input-group-addon col-md-1 interval-to pull-left">to</div>\n <fieldset ng-disabled="interval.alwaysTime"><uib-timepicker name="t_to" data-ng-model="interval.t_to" show-meridian="false" show-spinners="false"></uib-timepicker></fieldset>\n </div>\n </div>\n <!-- END TIME -->\n\n <!-- <label class="control-label pointer-cursor"><input type="checkbox" data-ng-model="interval.alwaysTime">{{\'APPLICATION_ALWAYS\' | translate}}</label> -->\n <!-- START ALWAYS -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_ALWAYS\' | translate }}</label>\n <div class="input-group input-large">\n <label class="control-label pointer-cursor">\n <input\n bs-switch\n data-ng-model="interval.alwaysTime"\n type="checkbox"\n switch-active="{{ alwaysSwitch.isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ alwaysSwitch.onColor }}"\n switch-off-color="{{ alwaysSwitch.offColor }}"\n switch-animate="{{ alwaysSwitch.animate }}"\n switch-size="{{ alwaysSwitch.size }}"\n switch-label="{{ alwaysSwitch.label }}"\n switch-icon="{{ alwaysSwitch.icon }}"\n switch-radio-off="{{ alwaysSwitch.radioOff }}"\n switch-label-width="{{ alwaysSwitch.labelWidth }}"\n switch-handle-width="{{ alwaysSwitch.handleWidth }}">\n </label>\n </div>\n </div>\n <!-- END ALWAYS -->\n\n <!-- START WEEKDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_WEEKDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="interval.wd_from" theme="bootstrap" name="wd_from">\n <ui-select-match placeholder="">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{weekDay.name | translate}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="interval.wd_to" theme="bootstrap" name="wd_to">\n <ui-select-match placeholder="">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{weekDay.name | translate}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END WEEKDAY -->\n\n <!-- START MONTHDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTHDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="interval.md_from" theme="bootstrap" name="md_from">\n <ui-select-match>{{$select.selected === \'always\' ? \'APPLICATION_ALWAYS\' : $select.selected | translate}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search">\n {{monthDay === \'always\' ? \'APPLICATION_ALWAYS\' : monthDay | translate}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="interval.md_to" theme="bootstrap" name="md_to">\n <ui-select-match>{{$select.selected === \'always\' ? \'APPLICATION_ALWAYS\' : $select.selected | translate}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search">\n {{monthDay === \'always\' ? \'APPLICATION_ALWAYS\' : monthDay | translate}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTHDAY -->\n\n <!-- START MONTH -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTH\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="interval.m_from" theme="bootstrap" name="m_from">\n <ui-select-match placeholder="">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{month.name | translate}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="interval.m_to" theme="bootstrap" name="m_to">\n <ui-select-match placeholder="">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{month.name | translate}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTH -->\n </div>\n\n <div id="customInterval" class="app-settings" ng-slide-down="interval.intType == \'list\'" lazy-render duration="1">\n\n <!-- START INTERVALS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.interval.IntervalId.$touched || forms.interval.$submitted) && forms.interval.IntervalId.$invalid}">\n <label class="control-label">{{\'APPLICATION_INTERVALS\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="interval.IntervalId" theme="bootstrap" name="IntervalId" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="interval.id as interval in Intervals | filter: $select.search">\n {{interval.name | translate}}\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="intervals.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_INTERVAL_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/tools/intervals/list">{{\'APPLICATION_INTERVALS\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.interval.IntervalId.$touched || forms.interval.$submitted) && forms.interval.IntervalId.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERVALS -->\n\n </div>\n <button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n <button class="btn green-haze" type="submit" ng-click="goNext()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n </form>\n </wz-step>\n\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n <input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n </wz-step>\n </wizard>\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'), -a.put("app/channels/voice/route/outbound/view/view.routes.html",'<div ui-view class="profile-content">\n<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_ACTIONS\' | translate}}</span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="selectedRows.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <a class="btn green-jungle " href="/channels/voice/routes/outbound/view/{{route.id}}/route" data-toggle="dropdown">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_ROUTE\' | translate }}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div data-ng-if="showGrid" ui-grid="gridOptions" ui-grid-resize-columns class="grid" ui-grid-selection ui-grid-draggable-rows ui-grid-auto-resize>\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n </div>\n</div>\n</div>\n'),a.put("app/channels/voice/route/outbound/view/view.settings.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_OUTBOUND\' | translate}} {{ \'APPLICATION_ROUTE\' | translate}} {{ \'APPLICATION_SETTINGS\' | translate}} </span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n </li>\n </ul>\n </div>\n\n <div class="portlet-body" data-ng-init="getContexts();getTags();">\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.general" data-ng-submit="forms.general.$valid && updateRoute()" novalidate>\n\n <!-- START EXTEN -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.exten.$touched || forms.general.$submitted) && forms.general.exten.$invalid}">\n <label class="control-label">{{\'APPLICATION_DESTINATION_PATTERN\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="exten" placeholder="{{\'APPLICATION_DESTINATION_PATTERN\' | translate}}" class="form-control" data-ng-model="route.exten" required/>\n <span data-ng-show="(forms.general.exten.$touched || forms.general.$submitted) && forms.general.exten.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END EXTEN -->\n\n <!-- START CUTDIGITS -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_CUTDIGITS\' | translate}}</label>\n <input type="text" pattern="[0-9]+" class="form-control" name="cutdigits" data-ng-model="route.cutdigits">\n <span class="help-block">\n </span>\n </div>\n <!-- END CUTDIGITS -->\n\n <!-- START TAG -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.tag.$touched || forms.general.$submitted) && forms.general.tag.$invalid}">\n <label class="control-label">{{\'APPLICATION_TAG\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="route.tag" name="tag" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="tag.name as tag in tags | filter: $select.search">\n <div ng-bind-html="tag.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.general.tag.$touched || forms.general.$submitted) && forms.general.tag.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TAG -->\n\n <!-- START CONTEXT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.context.$touched || forms.general.$submitted) && forms.general.context.$invalid}">\n <label class="control-label">{{\'APPLICATION_CONTEXT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="route.context" name="context" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="context.name as context in voiceContexts | filter: $select.search">\n <div ng-bind-html="context.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_VOICE_CONTEXT\' | translate }}\n </span>\n <span data-ng-show="(forms.general.context.$touched || forms.general.$submitted) && forms.general.context.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CONTEXT -->\n\n <!-- START RECORD -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.record.$touched || forms.general.$submitted) && forms.general.record.$invalid}">\n <label class="control-label">{{\'APPLICATION_RECORDING\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="route.record"\n type="checkbox"\n switch-active="{{ recordSwitch.isActive }}"\n switch-on-text="{{ recordSwitch.onText }}"\n switch-off-text="{{ recordSwitch.offText }}"\n switch-on-color="{{ recordSwitch.onColor }}"\n switch-off-color="{{ recordSwitch.offColor }}"\n switch-animate="{{ recordSwitch.animate }}"\n switch-size="{{ recordSwitch.size }}"\n switch-label="{{ recordSwitch.label }}"\n switch-icon="{{ recordSwitch.icon }}"\n switch-radio-off="{{ recordSwitch.radioOff }}"\n switch-label-width="{{ recordSwitch.labelWidth }}"\n switch-handle-width="{{ recordSwitch.handleWidth }}">\n <span data-ng-show="(forms.general.record.$touched || forms.general.$submitted) && forms.general.record.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END RECORD -->\n\n <!-- START RECORDINGFORMAT -->\n <div data-ng-if="route.record" class="form-group" data-ng-class="{\'has-error\': (forms.general.recordingFormat.$touched || forms.general.$submitted) && forms.general.recordingFormat.$invalid}">\n <label class="control-label">{{\'APPLICATION_FORMAT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="route.recordingFormat" name="recordingFormat" theme="bootstrap" data-ng-required="route.record">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="format in [\'wav\',\'gsm\'] | filter: $select.search">\n <div ng-bind-html="format | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.general.recordingFormat.$touched || forms.general.$submitted) && forms.general.recordingFormat.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END RECORDINGFORMAT -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="route.description"/></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END GENERAL TAB -->\n\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/voice/route/view.application.html",'\n<div class="row" data-ng-init="initApplication(true); getIntervals();">\n <div class="col-md-12">\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-notebook font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_NEW_APPLICATION\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="addApplication()">\n <div class="profile-usertitle-name">\n {{(main.app.name | translate) || \'Application\'}}\n </div>\n <wz-step title="{{\'APPLICATION_APPLICATION\' | translate}}" canexit="formValidation(forms.settings.$valid)">\n <form name="forms.settings" novalidate>\n\n <button class="btn green-haze" type="submit" ng-click="goNext()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n <!-- START APP -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.app.$touched || forms.settings.$submitted) && forms.settings.app.$invalid}">\n <label class="control-label">{{ \'APPLICATION_APPLICATION\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="main.app" name="app" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_APPLICATION\' | translate }}">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="app in $application.applications| filter: $select.search">\n <div ng-bind-html="app.name | translate | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.app.$touched || forms.settings.$submitted) && forms.settings.app.$invalid && forms.settings.app.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END APP -->\n\n <div id="Queue" class="app-settings" ng-slide-down="main.app.value == \'Queue\'" lazy-render duration="1">\n <!-- START QUEUE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.queue.$touched || forms.settings.$submitted) && forms.settings.queue.$invalid}">\n <label class="control-label">{{\'APPLICATION_QUEUE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.appdata[0]" data-ng-init="application.appdata[0] = null" name="queue" theme="bootstrap" required data-ng-disabled="!items.length">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="queue.name as queue in items | filter: $select.search">\n <div ng-bind-html="queue.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="items.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_QUEUES_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/channels/voice/queues/list">{{\'APPLICATION_QUEUES\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.settings.queue.$touched || forms.settings.$submitted) && forms.settings.queue.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END QUEUE -->\n\n <!-- START OPTIONS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid}">\n <label class="control-label">{{\'APPLICATION_OPTIONS\' | translate}}</label>\n <input type="text" pattern="[^,]*" name="app_options" placeholder="{{ \'APPLICATION_OPTIONS\' | translate }}" class="form-control" data-ng-model="application.appdata[1]" data-ng-init="application.appdata[1] = null">\n <span data-ng-show="(forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid && forms.settings.app_options.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n </span>\n </div>\n <!-- END OPTIONS -->\n <!-- START URL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid}">\n <label class="control-label">{{ \'APPLICATION_URL\' | translate }}</label>\n <input type="text" pattern="[^,]*" name="url" placeholder="{{ \'APPLICATION_URL\' | translate }}" class="form-control" data-ng-model="application.appdata[2]" data-ng-init="application.appdata[2] = null">\n <span data-ng-show="(forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid && forms.settings.url.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid && forms.settings.url.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n </span>\n </div>\n <!-- END URL -->\n\n <!-- START APPLICATION_ANNOUNCE_OVERRIDE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.audiofile.$touched || forms.settings.$submitted) && forms.settings.audiofile.$invalid}">\n <label class="control-label">{{\'APPLICATION_ANNOUNCE_OVERRIDE\' | translate}}</label>\n <ui-select data-ng-model="application.appdata[3]" data-ng-init="application.appdata[3] = null" name="audiofile" theme="bootstrap" data-ng-disabled="!items2.length">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.display_name}}</ui-select-match>\n <ui-select-choices repeat="settings.soundPath+\'/\'+audio.save_name as audio in items2 | filter: $select.search">\n <div ng-bind-html="audio.display_name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="items2.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_SOUNDS_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/tools/sounds/list">{{\'APPLICATION_SOUNDS\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.settings.audiofile.$touched || forms.settings.$submitted) && forms.settings.audiofile.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END APPLICATION_ANNOUNCE_OVERRIDE -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid}">\n <label class="control-label">{{ \'APPLICATION_TIMEOUT\' | translate }}</label>\n <input type="text" pattern="[0-9]+" name="timeout" placeholder="" class="form-control" data-ng-model="application.appdata[4]" data-ng-init="application.appdata[4] = null">\n <span data-ng-show="(forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid && forms.settings.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n\n <!-- START AGI -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.agi.$touched || forms.settings.$submitted) && forms.settings.agi.$invalid}">\n <label class="control-label">{{ \'APPLICATION_AGI\' | translate }}</label>\n <input type="text" pattern="[^,]*" name="agi" placeholder="{{ \'APPLICATION_AGI\' | translate }}" class="form-control" data-ng-model="application.appdata[5]" data-ng-init="application.appdata[6] = null">\n <span data-ng-show="(forms.settings.agi.$touched || forms.settings.$submitted) && forms.settings.agi.$invalid && forms.settings.agi.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.settings.agi.$touched || forms.settings.$submitted) && forms.settings.agi.$invalid && forms.settings.agi.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n </span>\n </div>\n <!-- END AGI -->\n\n <!-- START MACRO -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.macro.$touched || forms.settings.$submitted) && forms.settings.macro.$invalid}">\n <label class="control-label">{{ \'APPLICATION_MACRO\' | translate }}</label>\n <input type="text" pattern="[^,]*" name="macro" placeholder="{{ \'APPLICATION_MACRO\' | translate }}" class="form-control" data-ng-model="application.appdata[6]" data-ng-init="application.appdata[6] = null">\n <span data-ng-show="(forms.settings.macro.$touched || forms.settings.$submitted) && forms.settings.macro.$invalid && forms.settings.macro.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.settings.macro.$touched || forms.settings.$submitted) && forms.settings.macro.$invalid && forms.settings.macro.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n </span>\n </div>\n <!-- END MACRO -->\n\n <!-- START GOSUB -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.gosub.$touched || forms.settings.$submitted) && forms.settings.gosub.$invalid}">\n <label class="control-label">{{ \'APPLICATION_GOSUB\' | translate }}</label>\n <input type="text" pattern="[^,]*" name="gosub" placeholder="{{ \'APPLICATION_GOSUB\' | translate }}" class="form-control" data-ng-model="application.appdata[7]" data-ng-init="application.appdata[7] = null">\n <span data-ng-show="(forms.settings.gosub.$touched || forms.settings.$submitted) && forms.settings.gosub.$invalid && forms.settings.gosub.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.settings.gosub.$touched || forms.settings.$submitted) && forms.settings.gosub.$invalid && forms.settings.gosub.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n </span>\n </div>\n <!-- END GOSUB -->\n\n <!-- START RULE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.rule.$touched || forms.settings.$submitted) && forms.settings.rule.$invalid}">\n <label class="control-label">{{ \'APPLICATION_RULE\' | translate }}</label>\n <input type="text" pattern="[^,]*" name="rule" placeholder="{{ \'APPLICATION_RULE\' | translate }}" class="form-control" data-ng-model="application.appdata[8]" data-ng-init="application.appdata[8] = null">\n <span data-ng-show="(forms.settings.rule.$touched || forms.settings.$submitted) && forms.settings.rule.$invalid && forms.settings.rule.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.settings.rule.$touched || forms.settings.$submitted) && forms.settings.rule.$invalid && forms.settings.rule.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n </span>\n </div>\n <!-- END RULE -->\n\n <!-- START POSITION -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.position.$touched || forms.settings.$submitted) && forms.settings.position.$invalid}">\n <label class="control-label">{{ \'APPLICATION_POSITION\' | translate }}</label>\n <input type="number" min="0" name="position" placeholder="{{ \'APPLICATION_POSITION\' | translate }}" class="form-control" data-ng-model="application.appdata[9]" data-ng-init="application.appdata[9] = null">\n <span data-ng-show="(forms.settings.position.$touched || forms.settings.$submitted) && forms.settings.position.$invalid && forms.settings.position.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END POSITION -->\n\n <!-- START ANSWER -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_ANSWER\' | translate }}</label>\n <div class="input-group input-large">\n <label class="control-label pointer-cursor">\n <input\n bs-switch\n data-ng-init="application.answer=true"\n data-ng-model="application.answer"\n type="checkbox"\n switch-active="{{ alwaysSwitch.isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ alwaysSwitch.onColor }}"\n switch-off-color="{{ alwaysSwitch.offColor }}"\n switch-animate="{{ alwaysSwitch.animate }}"\n switch-size="{{ alwaysSwitch.size }}"\n switch-label="{{ alwaysSwitch.label }}"\n switch-icon="{{ alwaysSwitch.icon }}"\n switch-radio-off="{{ alwaysSwitch.radioOff }}"\n switch-label-width="{{ alwaysSwitch.labelWidth }}"\n switch-handle-width="{{ alwaysSwitch.handleWidth }}">\n </label>\n </div>\n </div>\n <!-- END ANSWER -->\n\n </div>\n <div id="Playback" class="app-settings" ng-slide-down="main.app.value == \'Playback\'" lazy-render duration="1">\n <!-- START AUDIOFILE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.audiofile.$touched || forms.settings.$submitted) && forms.settings.audiofile.$invalid}">\n <label class="control-label">{{\'APPLICATION_AUDIO_FILE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.appdata[0]" data-ng-init="application.appdata[0] = null" name="audiofile" theme="bootstrap" required data-ng-disabled="!items.length">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.display_name}}</ui-select-match>\n <ui-select-choices repeat="settings.soundPath+\'/\'+audio.save_name as audio in items | filter: $select.search">\n <div ng-bind-html="audio.display_name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="items.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_SOUNDS_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/tools/sounds/list">{{\'APPLICATION_SOUNDS\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.settings.audiofile.$touched || forms.settings.$submitted) && forms.settings.audiofile.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END AUDIOFILE -->\n\n <!-- START OPTIONS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid}">\n <label class="control-label">{{\'APPLICATION_OPTIONS\' | translate}}</label>\n <input type="text" name="app_options" placeholder="{{ \'APPLICATION_OPTIONS\' | translate }}" class="form-control" data-ng-model="application.appdata[1]" data-ng-init="application.appdata[1] = null">\n <span data-ng-show="(forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END OPTIONS -->\n\n <!-- START ANSWER -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_ANSWER\' | translate }}</label>\n <div class="input-group input-large">\n <label class="control-label pointer-cursor">\n <input\n bs-switch\n data-ng-init="application.answer=true"\n data-ng-model="application.answer"\n type="checkbox"\n switch-active="{{ alwaysSwitch.isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ alwaysSwitch.onColor }}"\n switch-off-color="{{ alwaysSwitch.offColor }}"\n switch-animate="{{ alwaysSwitch.animate }}"\n switch-size="{{ alwaysSwitch.size }}"\n switch-label="{{ alwaysSwitch.label }}"\n switch-icon="{{ alwaysSwitch.icon }}"\n switch-radio-off="{{ alwaysSwitch.radioOff }}"\n switch-label-width="{{ alwaysSwitch.labelWidth }}"\n switch-handle-width="{{ alwaysSwitch.handleWidth }}">\n </label>\n </div>\n </div>\n <!-- END ANSWER -->\n </div>\n <div id="Dial" class="app-settings" ng-slide-down="main.app.value == \'Dial\' && !main.app.type" lazy-render duration="1">\n <!-- START INTERFACE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.interface.$touched || forms.settings.$submitted) && forms.settings.interface.$invalid}">\n <label class="control-label">{{ \'APPLICATION_TYPE\' | translate }}/{{ \'APPLICATION_IDENTIFIER\' | translate }}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="interface" placeholder="SIP/0000" class="form-control" data-ng-model="application.appdata[0]" data-ng-init="application.appdata[0] = null" required>\n <span data-ng-show="(forms.settings.interface.$touched || forms.settings.$submitted) && forms.settings.interface.$invalid && forms.settings.interface.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERFACE -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid}">\n <label class="control-label">{{ \'APPLICATION_TIMEOUT\' | translate }}</label>\n <input type="text" pattern="[0-9]+" name="timeout" placeholder="" class="form-control" data-ng-model="application.appdata[1]" data-ng-init="application.appdata[1] = null">\n <span data-ng-show="(forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid && forms.settings.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n\n <!-- START OPTIONS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid}">\n <label class="control-label">{{ \'APPLICATION_OPTIONS\' | translate }}</label>\n <input type="text" name="app_options" placeholder="" class="form-control" data-ng-model="application.appdata[2]" data-ng-init="application.appdata[2] = null">\n <span data-ng-show="(forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid && forms.settings.app_options.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END OPTIONS -->\n\n <!-- START URL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid}">\n <label class="control-label">{{ \'APPLICATION_URL\' | translate }}</label>\n <input type="text" name="url" placeholder="{{ \'APPLICATION_URL\' | translate }}" class="form-control" data-ng-model="application.appdata[3]" data-ng-init="application.appdata[3] = null">\n <span data-ng-show="(forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid && forms.settings.url.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END URL -->\n </div>\n <div id="internalDial" class="app-settings" ng-slide-down="main.app.value == \'Dial\' && main.app.type == \'internalDial\'" lazy-render duration="1">\n <!-- START INTERNAL DIAL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.user.$touched || forms.settings.$submitted) && forms.settings.user.$invalid}">\n <label class="control-label">{{\'APPLICATION_USER\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.appdata[0]" data-ng-init="application.appdata[0] = null" name="user" theme="bootstrap" required data-ng-disabled="!items.length">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="user.name as user in items | filter: $select.search">\n <div ng-bind-html="user.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.user.$touched || forms.settings.$submitted) && forms.settings.user.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERNAL DIAL -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid}">\n <label class="control-label">{{ \'APPLICATION_TIMEOUT\' | translate }}</label>\n <input type="text" pattern="[0-9]+" name="timeout" placeholder="" class="form-control" data-ng-model="application.appdata[1]" data-ng-init="application.appdata[1] = null">\n <span data-ng-show="(forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid && forms.settings.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n\n <!-- START OPTIONS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid}">\n <label class="control-label">{{ \'APPLICATION_OPTIONS\' | translate }}</label>\n <input type="text" name="app_options" placeholder="" class="form-control" data-ng-model="application.appdata[2]" data-ng-init="application.appdata[2] = null">\n <span data-ng-show="(forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid && forms.settings.app_options.$error.required" class="help-block help-block-error">\n <strong>{{ \'APPLICATION_WARNING\' | translate }}!</strong> {{ \'MESSAGE_REQUIRED_FIELD\' | translate }}.\n </span>\n </div>\n <!-- END OPTIONS -->\n\n <!-- START URL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid}">\n <label class="control-label">{{ \'APPLICATION_URL\' | translate }}</label>\n <input type="text" name="url" placeholder="{{ \'APPLICATION_URL\' | translate }}" class="form-control" data-ng-model="application.appdata[3]" data-ng-init="application.appdata[3] = null">\n <span data-ng-show="(forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid && forms.settings.url.$error.required" class="help-block help-block-error">\n <strong>{{ \'APPLICATION_WARNING\' | translate }}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END URL -->\n\n </div>\n <div id="Dial" class="app-settings" ng-slide-down="main.app.value == \'Dial\' && main.app.type == \'externalDial\'" lazy-render duration="1">\n <!-- START TRUNK -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.trunk.$touched || forms.info.$submitted) && forms.info.trunk.$invalid}">\n <label class="control-label">{{ \'APPLICATION_TRUNK\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.appdata[0]" data-ng-init="application.appdata[0] = null" name="trunk" theme="bootstrap" required data-ng-disabled="!items.length">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="trunk.name as trunk in items | filter: $select.search">\n <div ng-bind-html="trunk.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="items.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_TRUNKS_AVAILABLE\' | translate }}\n </p>\n <p>\n {{ \'APPLICATION_GO_TO\' | translate }} <a href="/tools/trunks/list">{{ \'APPLICATION_TRUNKS\' | translate }}</a>\n </p>\n </div>\n <span data-ng-show="(forms.info.trunk.$touched || forms.info.$submitted) && forms.info.trunk.$error.required" class="help-block help-block-error">\n <strong>{{ \'APPLICATION_WARNING\' | translate }}!</strong> {{ \'MESSAGE_REQUIRED_FIELD\' | translate }}.\n </span>\n </div>\n <!-- END TRUNK -->\n\n <!-- START PHONE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.phone.$touched || forms.settings.$submitted) && forms.settings.phone.$invalid}">\n <label class="control-label">{{ \'APPLICATION_PHONE\' | translate }}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="phone" placeholder="{{\'APPLICATION_PHONE\' | translate}}" class="form-control" data-ng-model="application.appdata[1]" data-ng-init="application.appdata[1] = null" required>\n <span data-ng-show="(forms.settings.phone.$touched || forms.settings.$submitted) && forms.settings.phone.$invalid && forms.settings.phone.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PHONE -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid}">\n <label class="control-label">{{ \'APPLICATION_TIMEOUT\' | translate }}</label>\n <input type="text" pattern="[0-9]+" name="timeout" placeholder="" class="form-control" data-ng-model="application.appdata[2]" data-ng-init="application.appdata[2] = null">\n <span data-ng-show="(forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid && forms.settings.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n\n <!-- START OPTIONS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid}">\n <label class="control-label">{{ \'APPLICATION_OPTIONS\' | translate }}</label>\n <input type="text" name="app_options" placeholder="" class="form-control" data-ng-model="application.appdata[3]" data-ng-init="application.appdata[3] = null">\n <span data-ng-show="(forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid && forms.settings.app_options.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END OPTIONS -->\n\n <!-- START URL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid}">\n <label class="control-label">{{ \'APPLICATION_URL\' | translate }}</label>\n <input type="text" name="url" placeholder="{{ \'APPLICATION_URL\' | translate }}" class="form-control" data-ng-model="application.appdata[4]" data-ng-init="application.appdata[4] = null">\n <span data-ng-show="(forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid && forms.settings.url.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END URL -->\n </div>\n <div id="RingGroup" class="app-settings" ng-slide-down="main.app.value == \'Dial\' && main.app.type == \'RingGroup\'" lazy-render duration="1">\n <!-- START ITEMS -->\n <input type="hidden" name="items" placeholder="{{ \'APPLICATION_URL\' | translate }}" class="form-control" data-ng-model="application.appdata[0]" data-ng-init="initRingGroup()">\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.project.$touched || forms.settings.$submitted) && forms.settings.items.$invalid}">\n <label class="control-label">{{\'APPLICATION_ITEMS\' | translate}}<span class="required" aria-required="true">*</span></label>\n <div class="col-md-12" id="multi-select-user-by-role"></div>\n <span data-ng-show="(forms.settings.items.$touched || forms.settings.$submitted) && forms.settings.items.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END ITEMS -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid}">\n <label class="control-label">{{ \'APPLICATION_TIMEOUT\' | translate }}</label>\n <input type="text" pattern="[0-9]+" name="timeout" placeholder="" class="form-control" data-ng-model="application.appdata[1]" data-ng-init="application.appdata[1] = null">\n <span data-ng-show="(forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid && forms.settings.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n\n <!-- START OPTIONS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid}">\n <label class="control-label">{{ \'APPLICATION_OPTIONS\' | translate }}</label>\n <input type="text" name="app_options" placeholder="" class="form-control" data-ng-model="application.appdata[2]" data-ng-init="application.appdata[2] = null">\n <span data-ng-show="(forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid && forms.settings.app_options.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END OPTIONS -->\n\n <!-- START URL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid}">\n <label class="control-label">{{ \'APPLICATION_URL\' | translate }}</label>\n <input type="text" name="url" placeholder="{{ \'APPLICATION_URL\' | translate }}" class="form-control" data-ng-model="application.appdata[3]" data-ng-init="application.appdata[3] = null">\n <span data-ng-show="(forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid && forms.settings.url.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END URL -->\n </div>\n <div id="AGI" class="app-settings" ng-slide-down="main.app.value == \'AGI\'" lazy-render duration="1">\n <!-- START PROJECT -->\n <input type="hidden" name="url" placeholder="{{ \'APPLICATION_URL\' | translate }}" class="form-control" data-ng-model="application.appdata[0]" data-ng-init="application.appdata[0] = \'agi://127.0.0.1/square\'">\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.project.$touched || forms.settings.$submitted) && forms.settings.project.$invalid}">\n <label class="control-label">{{\'APPLICATION_PROJECT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.appdata[1]" data-ng-init="application.appdata[1] = null" name="project" theme="bootstrap" required data-ng-disabled="!items.length">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="project.name as project in items | filter: $select.search">\n <div ng-bind-html="project.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="items.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_PROJECTS_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/square/projects/list">{{\'APPLICATION_PROJECTS\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.settings.project.$touched || forms.settings.$submitted) && forms.settings.project.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PROJECT -->\n </div>\n <div id="Goto" class="app-settings" ng-slide-down="main.app.value == \'Goto\'" lazy-render duration="1">\n <!-- START CONTEXT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.context.$touched || forms.settings.$submitted) && forms.settings.context.$invalid}">\n <label class="control-label">{{\'APPLICATION_CONTEXT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.appdata[0]" data-ng-init="application.appdata[0] = null" name="context" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="context.name as context in items | filter: $select.search">\n <div ng-bind-html="context.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.context.$touched || forms.settings.$submitted) && forms.settings.context.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CONTEXT -->\n\n <!-- START EXTENSION -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.extension.$touched || forms.settings.$submitted) && forms.settings.extension.$invalid}">\n <label class="control-label">{{ \'APPLICATION_EXTENSION\' | translate }}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="extension" placeholder="" class="form-control" data-ng-model="application.appdata[1]" data-ng-init="application.appdata[1] = null" required>\n <span data-ng-show="(forms.settings.extension.$touched || forms.settings.$submitted) && forms.settings.extension.$invalid && forms.settings.extension.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END EXTENSION -->\n\n <!-- START PRIORITY -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.priority.$touched || forms.settings.$submitted) && forms.settings.priority.$invalid}">\n <label class="control-label">{{ \'APPLICATION_PRIORITY\' | translate }}<span class="required" aria-required="true">*</span></label>\n <input type="text" pattern="[0-9]+" name="priority" placeholder="" class="form-control" data-ng-model="application.appdata[2]" data-ng-init="application.appdata[2] = null" required>\n <span data-ng-show="(forms.settings.priority.$touched || forms.settings.$submitted) && forms.settings.priority.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PRIORITY -->\n </div>\n <div id="Hangup" class="app-settings" ng-slide-down="main.app.value == \'Hangup\'" lazy-render duration="1">\n <!-- START HANGUPCAUSE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.hangupCause.$touched || forms.settings.$submitted) && forms.settings.hangupCause.$invalid}">\n <label class="control-label">{{\'APPLICATION_HANGUP_CAUSE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.appdata[0]" data-ng-init="application.appdata[0] = null" theme="bootstrap" name="hangupCause" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="hangupCause.value as hangupCause in $application.hangupCauses | filter: $select.search">\n <div ng-bind-html="hangupCause.name | translate | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.hangupCause.$touched || forms.settings.$submitted) && forms.settings.hangupCause.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END HANGUPCAUSE -->\n </div>\n <div id="Set" class="app-settings" ng-slide-down="main.app.value == \'Set\'" lazy-render duration="1">\n <!-- START VARIABLE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.variable.$touched || forms.settings.$submitted) && forms.settings.variable.$invalid}">\n <label class="control-label">{{ \'APPLICATION_VARIABLE\' | translate }}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="variable" placeholder="" class="form-control" data-ng-model="application.variable" data-ng-init="application.appdata[0] = null" data-ng-change="updateSetAppdata()" required>\n <span data-ng-show="(forms.settings.variable.$touched || forms.settings.$submitted) && forms.settings.variable.$invalid && forms.settings.variable.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END VARIABLE -->\n\n <!-- START VARVALUE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.varvalue.$touched || forms.settings.$submitted) && forms.settings.varvalue.$invalid}">\n <label class="control-label">{{ \'APPLICATION_VALUE\' | translate }}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="varvalue" placeholder="" class="form-control" data-ng-model="application.value" data-ng-change="updateSetAppdata()" required>\n <span data-ng-show="(forms.settings.varvalue.$touched || forms.settings.$submitted) && forms.settings.varvalue.$invalid && forms.settings.varvalue.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END VARVALUE -->\n </div>\n <div id="Custom" class="app-settings" ng-slide-down="main.app.type == \'custom\'" lazy-render duration="1">\n\n <!-- START CUSTOMAPP -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.customApp.$touched || forms.settings.$submitted) && forms.settings.customApp.$invalid}">\n <label class="control-label">{{ \'APPLICATION_CUSTOM_APP\' | translate }}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="customApp" placeholder="{{ \'APPLICATION_CUSTOM_APP\' | translate }}" class="form-control" data-ng-model="application.app" required>\n <span data-ng-show="(forms.settings.customApp.$touched || forms.settings.$submitted) && forms.settings.customApp.$invalid && forms.settings.customApp.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CUSTOMAPP -->\n\n <!-- START APPDATA -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.appdata.$touched || forms.settings.$submitted) && forms.settings.appdata.$invalid}">\n <label class="control-label">{{ \'APPLICATION_ARGUMENTS\' | translate }}</label>\n <input type="text" name="appdata" placeholder="{{ \'APPLICATION_ARGUMENTS\' | translate }}" class="form-control" data-ng-model="application.appdata[0]" data-ng-init="application.appdata[0] = null">\n <span data-ng-show="(forms.settings.appdata.$touched || forms.settings.$submitted) && forms.settings.appdata.$invalid && forms.settings.appdata.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END APPDATA -->\n </div>\n <div id="Voicemail" class="app-settings" ng-slide-down="main.app.value == \'Voicemail\'" lazy-render duration="1">\n <!-- START VOICEMAIL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.voicemail.$touched || forms.settings.$submitted) && forms.settings.voicemail.$invalid}">\n <label class="control-label">{{ \'APPLICATION_MAILBOX\' | translate }}@{{ \'APPLICATION_CONTEXT\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.appdata[0]" data-ng-init="application.appdata[0] = null" theme="bootstrap" name="voicemail" required data-ng-disabled="!items.length">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.mailbox}}</ui-select-match>\n <ui-select-choices repeat="mailbox.mailbox+\'@\'+mailbox.context as mailbox in items | filter: $select.search">\n <div ng-bind-html="mailbox.mailbox | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="items.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_VOICEMAILS_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/channels/voice/voicemails/list">{{\'APPLICATION_VOICEMAILS\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.settings.voicemail.$touched || forms.settings.$submitted) && forms.settings.voicemail.$invalid && forms.settings.voicemail.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END VOICEMAIL -->\n\n <!-- START OPTIONS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid}">\n <label class="control-label">{{\'APPLICATION_OPTIONS\' | translate}}</label>\n <input type="text" name="app_options" placeholder="{{ \'APPLICATION_OPTIONS\' | translate }}" class="form-control" data-ng-model="application.appdata[1]" data-ng-init="application.appdata[1] = null">\n </div>\n <!-- END OPTIONS -->\n </div>\n <button class="btn green-haze" type="submit" ng-click="goNext()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n </form>\n </wz-step>\n <wz-step title="{{\'APPLICATION_INTERVAL\' | translate}}" canexit="formValidation(forms.interval.IntervalId.$valid || forms.interval.hasOwnProperty(\'t_from\') || forms.interval.intType.$modelValue === \'always\')">\n <form name="forms.interval" novalidate>\n <button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n <button class="btn green-haze" type="submit" ng-click="goNext()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n <!-- START INTERVAL_TYPE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.interval.intType.$touched || forms.interval.$submitted) && forms.interval.intType.$invalid}">\n <label class="control-label">{{\'APPLICATION_INTERVAL_TYPE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="interval.intType" theme="bootstrap" name="intType" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="intType.value as intType in $application.intTypes | filter: $select.search">\n <div ng-bind-html="intType.name | translate | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.interval.intType.$touched || forms.interval.$submitted) && forms.interval.intType.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERVAL_TYPE -->\n <div id="customInterval" class="app-settings" ng-slide-down="interval.intType == \'custom\'" lazy-render duration="1">\n <!-- START TIME -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_TIME\' | translate }}</label>\n <div class="input-group input-large">\n <fieldset class="pull-left" ng-disabled="interval.alwaysTime"><uib-timepicker name="t_from" data-ng-model="interval.t_from" show-meridian="false" show-spinners="false"></uib-timepicker></fieldset>\n <div class="input-group-addon col-md-1 interval-to pull-left">to</div>\n <fieldset ng-disabled="interval.alwaysTime"><uib-timepicker name="t_to" data-ng-model="interval.t_to" show-meridian="false" show-spinners="false"></uib-timepicker></fieldset>\n </div>\n </div>\n <!-- END TIME -->\n\n <!-- <label class="control-label pointer-cursor"><input type="checkbox" data-ng-model="interval.alwaysTime">{{\'APPLICATION_ALWAYS\' | translate}}</label> -->\n <!-- START ALWAYS -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_ALWAYS\' | translate }}</label>\n <div class="input-group input-large">\n <label class="control-label pointer-cursor">\n <input\n bs-switch\n data-ng-model="interval.alwaysTime"\n type="checkbox"\n switch-active="{{ alwaysSwitch.isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ alwaysSwitch.onColor }}"\n switch-off-color="{{ alwaysSwitch.offColor }}"\n switch-animate="{{ alwaysSwitch.animate }}"\n switch-size="{{ alwaysSwitch.size }}"\n switch-label="{{ alwaysSwitch.label }}"\n switch-icon="{{ alwaysSwitch.icon }}"\n switch-radio-off="{{ alwaysSwitch.radioOff }}"\n switch-label-width="{{ alwaysSwitch.labelWidth }}"\n switch-handle-width="{{ alwaysSwitch.handleWidth }}">\n </label>\n </div>\n </div>\n <!-- END ALWAYS -->\n\n <!-- START WEEKDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_WEEKDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="interval.wd_from" theme="bootstrap" name="wd_from">\n <ui-select-match placeholder="">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{weekDay.name | translate}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="interval.wd_to" theme="bootstrap" name="wd_to">\n <ui-select-match placeholder="">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{weekDay.name | translate}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END WEEKDAY -->\n\n <!-- START MONTHDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTHDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="interval.md_from" theme="bootstrap" name="md_from">\n <ui-select-match>{{$select.selected === \'always\' ? \'APPLICATION_ALWAYS\' : $select.selected | translate}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search">\n {{monthDay === \'always\' ? \'APPLICATION_ALWAYS\' : monthDay | translate}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="interval.md_to" theme="bootstrap" name="md_to">\n <ui-select-match>{{$select.selected === \'always\' ? \'APPLICATION_ALWAYS\' : $select.selected | translate}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search">\n {{monthDay === \'always\' ? \'APPLICATION_ALWAYS\' : monthDay | translate}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTHDAY -->\n\n <!-- START MONTH -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTH\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="interval.m_from" theme="bootstrap" name="m_from">\n <ui-select-match placeholder="">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{month.name | translate}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="interval.m_to" theme="bootstrap" name="m_to">\n <ui-select-match placeholder="">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{month.name | translate}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTH -->\n </div>\n\n <div id="customInterval" class="app-settings" ng-slide-down="interval.intType == \'list\'" lazy-render duration="1">\n\n <!-- START INTERVALS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.interval.IntervalId.$touched || forms.interval.$submitted) && forms.interval.IntervalId.$invalid}">\n <label class="control-label">{{\'APPLICATION_INTERVALS\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="interval.IntervalId" theme="bootstrap" name="IntervalId" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="interval.id as interval in Intervals | filter: $select.search">\n {{interval.name | translate}}\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="intervals.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_INTERVAL_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/tools/intervals/list">{{\'APPLICATION_INTERVALS\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.interval.IntervalId.$touched || forms.interval.$submitted) && forms.interval.IntervalId.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERVALS -->\n\n </div>\n <button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n <button class="btn green-haze" type="submit" ng-click="goNext()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n </form>\n </wz-step>\n\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n <input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n </wz-step>\n </wizard>\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'), -a.put("app/channels/voice/route/view.applicationSettings.html",'\n<div class="row" data-ng-init="initApplication();getIntervals();getApplication();">\n <div class="col-md-12">\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-notebook font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_APPLICATION_SETTINGS\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="updateRoute(\'applications\')">\n <div class="profile-usertitle-name">\n {{(main.app.name | translate) || \'Application\'}}\n </div>\n <wz-step title="{{\'APPLICATION_APPLICATION\' | translate}}" canexit="formValidation(forms.settings.$valid)">\n <form name="forms.settings" novalidate>\n <!-- <pre>\n {{application | json}}\n </pre> -->\n\n <button class="btn green-haze" type="submit" ng-click="goNext()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n\n <div id="Queue" class="app-settings" ng-slide-down="main.app.value == \'Queue\'" lazy-render duration="1">\n <!-- START QUEUE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.queue.$touched || forms.settings.$submitted) && forms.settings.queue.$invalid}">\n <label class="control-label">{{\'APPLICATION_QUEUE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="route.Applications[selectedApp].appdata[0]" name="queue" theme="bootstrap" required data-ng-disabled="!items.length">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="queue.name as queue in items | filter: $select.search">\n <div ng-bind-html="queue.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="items.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_QUEUES_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/channels/voice/queues/list">{{\'APPLICATION_QUEUES\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.settings.queue.$touched || forms.settings.$submitted) && forms.settings.queue.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END QUEUE -->\n\n <!-- START OPTIONS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid}">\n <label class="control-label">{{\'APPLICATION_OPTIONS\' | translate}}</label>\n <input type="text" pattern="[^,]*" name="app_options" placeholder="{{ \'APPLICATION_OPTIONS\' | translate }}" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[1]">\n <span data-ng-show="(forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid && forms.settings.app_options.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n </span>\n </div>\n <!-- END OPTIONS -->\n\n <!-- START URL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid}">\n <label class="control-label">{{ \'APPLICATION_URL\' | translate }}</label>\n <input type="text" pattern="[^,]*" name="url" placeholder="{{ \'APPLICATION_URL\' | translate }}" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[2]">\n <span data-ng-show="(forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid && forms.settings.url.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid && forms.settings.url.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n </span>\n </div>\n <!-- END URL -->\n\n <!-- START APPLICATION_ANNOUNCE_OVERRIDE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.audiofile.$touched || forms.settings.$submitted) && forms.settings.audiofile.$invalid}">\n <label class="control-label">{{\'APPLICATION_ANNOUNCE_OVERRIDE\' | translate}}</label>\n <ui-select data-ng-model="route.Applications[selectedApp].appdata[3]" name="audiofile" theme="bootstrap" data-ng-disabled="!items2.length">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.display_name}}</ui-select-match>\n <ui-select-choices repeat="settings.soundPath+\'/\'+audio.save_name as audio in items2 | filter: $select.search">\n <div ng-bind-html="audio.display_name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="items2.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_SOUNDS_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/tools/sounds/list">{{\'APPLICATION_SOUNDS\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.settings.audiofile.$touched || forms.settings.$submitted) && forms.settings.audiofile.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END APPLICATION_ANNOUNCE_OVERRIDE -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid}">\n <label class="control-label">{{ \'APPLICATION_TIMEOUT\' | translate }}</label>\n <input type="text" pattern="[0-9]+" name="timeout" placeholder="{{ \'APPLICATION_TIMEOUT\' | translate }}" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[4]">\n <span data-ng-show="(forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid && forms.settings.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n\n <!-- START AGI -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.agi.$touched || forms.settings.$submitted) && forms.settings.agi.$invalid}">\n <label class="control-label">{{ \'APPLICATION_AGI\' | translate }}</label>\n <input type="text" pattern="[^,]*" name="agi" placeholder="{{ \'APPLICATION_AGI\' | translate }}" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[5]">\n <span data-ng-show="(forms.settings.agi.$touched || forms.settings.$submitted) && forms.settings.agi.$invalid && forms.settings.agi.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.settings.agi.$touched || forms.settings.$submitted) && forms.settings.agi.$invalid && forms.settings.agi.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n </span>\n </div>\n <!-- END AGI -->\n\n <!-- START MACRO -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.macro.$touched || forms.settings.$submitted) && forms.settings.macro.$invalid}">\n <label class="control-label">{{ \'APPLICATION_MACRO\' | translate }}</label>\n <input type="text" pattern="[^,]*" name="macro" placeholder="{{ \'APPLICATION_MACRO\' | translate }}" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[6]">\n <span data-ng-show="(forms.settings.macro.$touched || forms.settings.$submitted) && forms.settings.macro.$invalid && forms.settings.macro.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.settings.macro.$touched || forms.settings.$submitted) && forms.settings.macro.$invalid && forms.settings.macro.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n </span>\n </div>\n <!-- END MACRO -->\n\n <!-- START GOSUB -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.gosub.$touched || forms.settings.$submitted) && forms.settings.gosub.$invalid}">\n <label class="control-label">{{ \'APPLICATION_GOSUB\' | translate }}</label>\n <input type="text" pattern="[^,]*" name="gosub" placeholder="{{ \'APPLICATION_GOSUB\' | translate }}" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[7]">\n <span data-ng-show="(forms.settings.gosub.$touched || forms.settings.$submitted) && forms.settings.gosub.$invalid && forms.settings.gosub.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.settings.gosub.$touched || forms.settings.$submitted) && forms.settings.gosub.$invalid && forms.settings.gosub.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n </span>\n </div>\n <!-- END GOSUB -->\n\n <!-- START RULE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.rule.$touched || forms.settings.$submitted) && forms.settings.rule.$invalid}">\n <label class="control-label">{{ \'APPLICATION_RULE\' | translate }}</label>\n <input type="text" pattern="[^,]*" name="rule" placeholder="{{ \'APPLICATION_RULE\' | translate }}" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[8]">\n <span data-ng-show="(forms.settings.rule.$touched || forms.settings.$submitted) && forms.settings.rule.$invalid && forms.settings.rule.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.settings.rule.$touched || forms.settings.$submitted) && forms.settings.rule.$invalid && forms.settings.rule.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n </span>\n </div>\n <!-- END RULE -->\n\n <!-- START POSITION -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.position.$touched || forms.settings.$submitted) && forms.settings.position.$invalid}">\n <label class="control-label">{{ \'APPLICATION_POSITION\' | translate }}</label>\n <input type="number" min="0" name="position" placeholder="{{ \'APPLICATION_POSITION\' | translate }}" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[9]">\n <span data-ng-show="(forms.settings.position.$touched || forms.settings.$submitted) && forms.settings.position.$invalid && forms.settings.position.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END POSITION -->\n\n <!-- START ANSWER -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_ANSWER\' | translate }}</label>\n <div class="input-group input-large">\n <label class="control-label pointer-cursor">\n <input\n bs-switch\n data-ng-model="route.Applications[selectedApp].answer"\n type="checkbox"\n switch-active="{{ alwaysSwitch.isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ alwaysSwitch.onColor }}"\n switch-off-color="{{ alwaysSwitch.offColor }}"\n switch-animate="{{ alwaysSwitch.animate }}"\n switch-size="{{ alwaysSwitch.size }}"\n switch-label="{{ alwaysSwitch.label }}"\n switch-icon="{{ alwaysSwitch.icon }}"\n switch-radio-off="{{ alwaysSwitch.radioOff }}"\n switch-label-width="{{ alwaysSwitch.labelWidth }}"\n switch-handle-width="{{ alwaysSwitch.handleWidth }}">\n </label>\n </div>\n </div>\n <!-- END ANSWER -->\n\n </div>\n <div id="Playback" class="app-settings" ng-slide-down="main.app.value == \'Playback\'" lazy-render duration="1">\n <!-- START AUDIOFILE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.audiofile.$touched || forms.settings.$submitted) && forms.settings.audiofile.$invalid}">\n <label class="control-label">{{\'APPLICATION_AUDIO_FILE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="route.Applications[selectedApp].appdata[0]" name="audiofile" theme="bootstrap" required data-ng-disabled="!items.length">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.display_name}}</ui-select-match>\n <ui-select-choices repeat="settings.soundPath+\'/\'+audio.save_name as audio in items | filter: $select.search">\n <div ng-bind-html="audio.display_name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="items.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_SOUNDS_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/tools/sounds/list">{{\'APPLICATION_SOUNDS\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.settings.audiofile.$touched || forms.settings.$submitted) && forms.settings.audiofile.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END AUDIOFILE -->\n\n <!-- START OPTIONS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid}">\n <label class="control-label">{{\'APPLICATION_OPTIONS\' | translate}}</label>\n <input type="text" name="app_options" placeholder="{{ \'APPLICATION_OPTIONS\' | translate }}" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[1]">\n <span data-ng-show="(forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END OPTIONS -->\n\n <!-- START ANSWER -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_ANSWER\' | translate }}</label>\n <div class="input-group input-large">\n <label class="control-label pointer-cursor">\n <input\n bs-switch\n data-ng-model="route.Applications[selectedApp].answer"\n type="checkbox"\n switch-active="{{ alwaysSwitch.isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ alwaysSwitch.onColor }}"\n switch-off-color="{{ alwaysSwitch.offColor }}"\n switch-animate="{{ alwaysSwitch.animate }}"\n switch-size="{{ alwaysSwitch.size }}"\n switch-label="{{ alwaysSwitch.label }}"\n switch-icon="{{ alwaysSwitch.icon }}"\n switch-radio-off="{{ alwaysSwitch.radioOff }}"\n switch-label-width="{{ alwaysSwitch.labelWidth }}"\n switch-handle-width="{{ alwaysSwitch.handleWidth }}">\n </label>\n </div>\n </div>\n <!-- END ANSWER -->\n\n </div>\n <div id="Dial" class="app-settings" ng-slide-down="main.app.value == \'Dial\' && !main.app.type" lazy-render duration="1">\n <!-- START INTERFACE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.interface.$touched || forms.settings.$submitted) && forms.settings.interface.$invalid}">\n <label class="control-label">{{ \'APPLICATION_TYPE\' | translate }}/{{ \'APPLICATION_IDENTIFIER\' | translate }}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="interface" placeholder="SIP/0000" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[0]" required>\n <span data-ng-show="(forms.settings.interface.$touched || forms.settings.$submitted) && forms.settings.interface.$invalid && forms.settings.interface.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERFACE -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid}">\n <label class="control-label">{{ \'APPLICATION_TIMEOUT\' | translate }}</label>\n <input type="text" pattern="[0-9]+" name="timeout" placeholder="" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[1]">\n <span data-ng-show="(forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid && forms.settings.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n\n <!-- START OPTIONS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid}">\n <label class="control-label">{{ \'APPLICATION_OPTIONS\' | translate }}</label>\n <input type="text" name="app_options" placeholder="" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[2]">\n <span data-ng-show="(forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid && forms.settings.app_options.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END OPTIONS -->\n\n <!-- START URL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid}">\n <label class="control-label">{{ \'APPLICATION_URL\' | translate }}</label>\n <input type="text" name="url" placeholder="{{ \'APPLICATION_URL\' | translate }}" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[3]">\n <span data-ng-show="(forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid && forms.settings.url.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END URL -->\n </div>\n <div id="internalDial" class="app-settings" ng-slide-down="main.app.value == \'Dial\' && main.app.type == \'internalDial\'" lazy-render duration="1">\n <!-- START INTERNAL DIAL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.user.$touched || forms.settings.$submitted) && forms.settings.user.$invalid}">\n <label class="control-label">{{\'APPLICATION_USER\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="route.Applications[selectedApp].appdata[0]" name="user" theme="bootstrap" required data-ng-disabled="!items.length">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="user.name as user in items | filter: $select.search">\n <div ng-bind-html="user.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.user.$touched || forms.settings.$submitted) && forms.settings.user.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERNAL DIAL -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid}">\n <label class="control-label">{{ \'APPLICATION_TIMEOUT\' | translate }}</label>\n <input type="text" pattern="[0-9]+" name="timeout" placeholder="" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[1]">\n <span data-ng-show="(forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid && forms.settings.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n\n <!-- START OPTIONS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid}">\n <label class="control-label">{{ \'APPLICATION_OPTIONS\' | translate }}</label>\n <input type="text" name="app_options" placeholder="" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[2]">\n <span data-ng-show="(forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid && forms.settings.app_options.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END OPTIONS -->\n\n <!-- START URL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid}">\n <label class="control-label">{{ \'APPLICATION_URL\' | translate }}</label>\n <input type="text" name="url" placeholder="{{ \'APPLICATION_URL\' | translate }}" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[3]">\n <span data-ng-show="(forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid && forms.settings.url.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END URL -->\n\n </div>\n <div id="Dial" class="app-settings" ng-slide-down="main.app.value == \'Dial\' && main.app.type == \'externalDial\'" lazy-render duration="1">\n\n <!-- START TRUNK -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.trunk.$touched || forms.info.$submitted) && forms.info.trunk.$invalid}">\n <label class="control-label">{{\'APPLICATION_TRUNK\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="route.Applications[selectedApp].appdata[0]" name="trunk" theme="bootstrap" required data-ng-disabled="!items.length">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="trunk.name as trunk in items | filter: $select.search">\n <div ng-bind-html="trunk.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="items.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_TRUNKS_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/tools/trunks/list">{{\'APPLICATION_TRUNKS\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.info.trunk.$touched || forms.info.$submitted) && forms.info.trunk.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TRUNK -->\n\n <!-- START PHONE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.phone.$touched || forms.settings.$submitted) && forms.settings.phone.$invalid}">\n <label class="control-label">{{ \'APPLICATION_PHONE\' | translate }}<span class="required" aria-required="true">*</span></label>\n <input type="text" pattern="[0-9]+" name="phone" placeholder="{{\'APPLICATION_PHONE\' | translate}}" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[1]">\n <span data-ng-show="(forms.settings.phone.$touched || forms.settings.$submitted) && forms.settings.phone.$invalid && forms.settings.phone.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PHONE -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid}">\n <label class="control-label">{{ \'APPLICATION_TIMEOUT\' | translate }}</label>\n <input type="text" pattern="[0-9]+" name="timeout" placeholder="" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[2]">\n <span data-ng-show="(forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid && forms.settings.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n\n <!-- START OPTIONS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid}">\n <label class="control-label">{{ \'APPLICATION_OPTIONS\' | translate }}</label>\n <input type="text" name="app_options" placeholder="" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[3]">\n <span data-ng-show="(forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid && forms.settings.app_options.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END OPTIONS -->\n\n <!-- START URL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid}">\n <label class="control-label">{{ \'APPLICATION_URL\' | translate }}</label>\n <input type="text" name="url" placeholder="{{ \'APPLICATION_URL\' | translate }}" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[4]">\n <span data-ng-show="(forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid && forms.settings.url.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END URL -->\n </div>\n <div id="RingGroup" class="app-settings" ng-slide-down="main.app.value == \'Dial\' && main.app.type == \'RingGroup\'" lazy-render duration="1">\n <!-- START ITEMS -->\n <input type="hidden" name="items" placeholder="{{ \'APPLICATION_URL\' | translate }}" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[0]" data-ng-init="initRingGroup()">\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.items.$touched || forms.settings.$submitted) && forms.settings.items.$invalid}">\n <label class="control-label">{{\'APPLICATION_ITEMS\' | translate}}<span class="required" aria-required="true">*</span></label>\n <div class="col-md-12" id="multi-select-user-by-role"></div>\n <span data-ng-show="(forms.settings.items.$touched || forms.settings.$submitted) && forms.settings.items.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END ITEMS -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid}">\n <label class="control-label">{{ \'APPLICATION_TIMEOUT\' | translate }}</label>\n <input type="text" pattern="[0-9]+" name="timeout" placeholder="" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[1]" data-ng-init="application.appdata[1] = null">\n <span data-ng-show="(forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid && forms.settings.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n\n <!-- START OPTIONS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid}">\n <label class="control-label">{{ \'APPLICATION_OPTIONS\' | translate }}</label>\n <input type="text" name="app_options" placeholder="" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[2]" data-ng-init="application.appdata[2] = null">\n <span data-ng-show="(forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid && forms.settings.app_options.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END OPTIONS -->\n\n <!-- START URL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid}">\n <label class="control-label">{{ \'APPLICATION_URL\' | translate }}</label>\n <input type="text" name="url" placeholder="{{ \'APPLICATION_URL\' | translate }}" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[3]" data-ng-init="application.appdata[3] = null">\n <span data-ng-show="(forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid && forms.settings.url.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END URL -->\n </div>\n <div id="AGI" class="app-settings" ng-slide-down="main.app.value == \'AGI\'" lazy-render duration="1">\n <!-- START PROJECT -->\n <input type="hidden" name="url" placeholder="{{ \'APPLICATION_URL\' | translate }}" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[0]" data-ng-init="route.Applications[selectedApp].appdata[0] = \'agi://127.0.0.1/square\'">\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.project.$touched || forms.settings.$submitted) && forms.settings.project.$invalid}">\n <label class="control-label">{{\'APPLICATION_PROJECT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="route.Applications[selectedApp].appdata[1]" name="project" theme="bootstrap" required data-ng-disabled="!items.length">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="project.name as project in items | filter: $select.search">\n <div ng-bind-html="project.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="items.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_PROJECTS_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/square/projects/list">{{\'APPLICATION_PROJECTS\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.settings.project.$touched || forms.settings.$submitted) && forms.settings.project.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PROJECT -->\n\n <!-- START URL -->\n <!-- <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid}">\n <label class="control-label">{{ \'APPLICATION_URL\' | translate }}</label>\n <div class="input-group">\n <input type="text" name="url" placeholder="agi://127.0.0.1/square" class="form-control" data-ng-model="application.url" data-ng-disabled="!application.urlEnabled" data-ng-required="application.urlEnabled" rpattern="/^agi:\\/\\/(?:[0-9]{1,3}\\.){3}[0-9]{1,3}\\/square$/">\n <span class="input-group-addon">\n <input type="checkbox" data-ng-model="application.urlEnabled">\n </span>\n </div>\n <span data-ng-show="(forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid && forms.settings.url.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid && forms.settings.url.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n </span>\n </div> -->\n <!-- END URL -->\n\n </div>\n <div id="Goto" class="app-settings" ng-slide-down="main.app.value == \'Goto\'" lazy-render duration="1">\n <!-- START CONTEXT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.context.$touched || forms.settings.$submitted) && forms.settings.context.$invalid}">\n <label class="control-label">{{\'APPLICATION_CONTEXT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="route.Applications[selectedApp].appdata[0]" name="context" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="context.name as context in items | filter: $select.search">\n <div ng-bind-html="context.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.context.$touched || forms.settings.$submitted) && forms.settings.context.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CONTEXT -->\n\n <!-- START EXTENSION -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.extension.$touched || forms.settings.$submitted) && forms.settings.extension.$invalid}">\n <label class="control-label">{{ \'APPLICATION_EXTENSION\' | translate }}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="extension" placeholder="" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[1]" required>\n <span data-ng-show="(forms.settings.extension.$touched || forms.settings.$submitted) && forms.settings.extension.$invalid && forms.settings.extension.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END EXTENSION -->\n\n <!-- START PRIORITY -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.priority.$touched || forms.settings.$submitted) && forms.settings.priority.$invalid}">\n <label class="control-label">{{ \'APPLICATION_PRIORITY\' | translate }}<span class="required" aria-required="true">*</span></label>\n <input type="text" pattern="[0-9]+" name="priority" placeholder="" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[2]" required>\n <span data-ng-show="(forms.settings.priority.$touched || forms.settings.$submitted) && forms.settings.priority.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PRIORITY -->\n </div>\n <div id="Hangup" class="app-settings" ng-slide-down="main.app.value == \'Hangup\'" lazy-render duration="1">\n <!-- START HANGUPCAUSE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.hangupCause.$touched || forms.settings.$submitted) && forms.settings.hangupCause.$invalid}">\n <label class="control-label">{{\'APPLICATION_HANGUP_CAUSE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="route.Applications[selectedApp].appdata[0]" theme="bootstrap" name="hangupCause" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="hangupCause.value as hangupCause in $application.hangupCauses | filter: $select.search">\n {{hangupCause.name | translate}}\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.hangupCause.$touched || forms.settings.$submitted) && forms.settings.hangupCause.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END HANGUPCAUSE -->\n </div>\n <div id="Set" class="app-settings" ng-slide-down="main.app.value == \'Set\'" lazy-render duration="1">\n <!-- START VARIABLE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.variable.$touched || forms.settings.$submitted) && forms.settings.variable.$invalid}">\n <label class="control-label">{{ \'APPLICATION_VARIABLE\' | translate }}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="variable" placeholder="" class="form-control" data-ng-model="application.variable" data-ng-change="updateSetAppdataSettings()" required>\n <span data-ng-show="(forms.settings.variable.$touched || forms.settings.$submitted) && forms.settings.variable.$invalid && forms.settings.variable.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END VARIABLE -->\n\n <!-- START VARVALUE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.varvalue.$touched || forms.settings.$submitted) && forms.settings.varvalue.$invalid}">\n <label class="control-label">{{ \'APPLICATION_VALUE\' | translate }}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="varvalue" placeholder="" class="form-control" data-ng-model="application.value" data-ng-change="updateSetAppdataSettings()" required>\n <span data-ng-show="(forms.settings.varvalue.$touched || forms.settings.$submitted) && forms.settings.varvalue.$invalid && forms.settings.varvalue.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END VARVALUE -->\n </div>\n <div id="Custom" class="app-settings" ng-slide-down="main.app.type == \'custom\'" lazy-render duration="1">\n\n <!-- START CUSTOMAPP -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.customApp.$touched || forms.settings.$submitted) && forms.settings.customApp.$invalid}">\n <label class="control-label">{{ \'APPLICATION_CUSTOM_APP\' | translate }}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="customApp" placeholder="{{ \'APPLICATION_CUSTOM_APP\' | translate }}" class="form-control" data-ng-model="route.Applications[selectedApp].app" required>\n <span data-ng-show="(forms.settings.customApp.$touched || forms.settings.$submitted) && forms.settings.customApp.$invalid && forms.settings.customApp.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CUSTOMAPP -->\n\n <!-- START APPDATA -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.appdata.$touched || forms.settings.$submitted) && forms.settings.appdata.$invalid}">\n <label class="control-label">{{ \'APPLICATION_ARGUMENTS\' | translate }}</label>\n <input type="text" name="appdata" placeholder="{{ \'APPLICATION_ARGUMENTS\' | translate }}" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[0]">\n <span data-ng-show="(forms.settings.appdata.$touched || forms.settings.$submitted) && forms.settings.appdata.$invalid && forms.settings.appdata.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END APPDATA -->\n </div>\n <div id="Voicemail" class="app-settings" ng-slide-down="main.app.value == \'Voicemail\'" lazy-render duration="1">\n <!-- START VOICEMAIL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.voicemail.$touched || forms.settings.$submitted) && forms.settings.voicemail.$invalid}">\n <label class="control-label">{{ \'APPLICATION_MAILBOX\' | translate }}@{{ \'APPLICATION_CONTEXT\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="route.Applications[selectedApp].appdata[0]" theme="bootstrap" name="voicemail" required data-ng-disabled="!items.length">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.mailbox}}</ui-select-match>\n <ui-select-choices repeat="mailbox.mailbox+\'@\'+mailbox.context as mailbox in items | filter: $select.search">\n <div ng-bind-html="mailbox.mailbox | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="items.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_VOICEMAILS_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/channels/voice/voicemails/list">{{\'APPLICATION_VOICEMAILS\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.settings.voicemail.$touched || forms.settings.$submitted) && forms.settings.voicemail.$invalid && forms.settings.voicemail.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END VOICEMAIL -->\n\n <!-- START OPTIONS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid}">\n <label class="control-label">{{\'APPLICATION_OPTIONS\' | translate}}</label>\n <input type="text" name="app_options" placeholder="{{ \'APPLICATION_OPTIONS\' | translate }}" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[1]">\n </div>\n <!-- END OPTIONS -->\n\n </div>\n <button class="btn green-haze" type="submit" ng-click="goNext()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n </form>\n</wz-step>\n<wz-step title="{{\'APPLICATION_INTERVAL\' | translate}}" canexit="formValidation(forms.interval.IntervalId.$valid || forms.interval.hasOwnProperty(\'t_from\') || forms.interval.intType.$modelValue === \'always\')">\n <form name="forms.interval" novalidate>\n <button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n <button class="btn green-haze" type="submit" ng-click="goNext()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n <!-- START INTERVAL_TYPE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.interval.intType.$touched || forms.interval.$submitted) && forms.interval.intType.$invalid}">\n <label class="control-label">{{\'APPLICATION_INTERVAL_TYPE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="interval.intType" theme="bootstrap" name="intType" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="intType.value as intType in $application.intTypes | filter: $select.search">\n {{intType.name | translate}}\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.interval.intType.$touched || forms.interval.$submitted) && forms.interval.intType.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERVAL_TYPE -->\n <div id="customInterval" class="app-settings" ng-slide-down="interval.intType == \'custom\'" lazy-render duration="1">\n <!-- START TIME -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_TIME\' | translate }}</label>\n <div class="input-group input-large">\n <fieldset class="pull-left" ng-disabled="interval.alwaysTime"><uib-timepicker name="t_from" data-ng-model="interval.t_from" show-meridian="false" show-spinners="false"></uib-timepicker></fieldset>\n <div class="input-group-addon col-md-1 interval-to pull-left">to</div>\n <fieldset ng-disabled="interval.alwaysTime"><uib-timepicker name="t_to" data-ng-model="interval.t_to" show-meridian="false" show-spinners="false"></uib-timepicker></fieldset>\n </div>\n </div>\n <!-- END TIME -->\n\n <!-- <label class="control-label pointer-cursor"><input type="checkbox" data-ng-model="interval.alwaysTime">{{\'APPLICATION_ALWAYS\' | translate}}</label> -->\n <!-- START ALWAYS -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_ALWAYS\' | translate }}</label>\n <div class="input-group input-large">\n <label class="control-label pointer-cursor">\n <input\n bs-switch\n data-ng-model="interval.alwaysTime"\n type="checkbox"\n switch-active="{{ alwaysSwitch.isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ alwaysSwitch.onColor }}"\n switch-off-color="{{ alwaysSwitch.offColor }}"\n switch-animate="{{ alwaysSwitch.animate }}"\n switch-size="{{ alwaysSwitch.size }}"\n switch-label="{{ alwaysSwitch.label }}"\n switch-icon="{{ alwaysSwitch.icon }}"\n switch-radio-off="{{ alwaysSwitch.radioOff }}"\n switch-label-width="{{ alwaysSwitch.labelWidth }}"\n switch-handle-width="{{ alwaysSwitch.handleWidth }}">\n </label>\n </div>\n </div>\n <!-- END ALWAYS -->\n\n <!-- START WEEKDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_WEEKDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="interval.wd_from" theme="bootstrap" name="wd_from">\n <ui-select-match placeholder="">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{weekDay.name | translate}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="interval.wd_to" theme="bootstrap" name="wd_to">\n <ui-select-match placeholder="">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{weekDay.name | translate}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END WEEKDAY -->\n\n <!-- START MONTHDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTHDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="interval.md_from" theme="bootstrap" name="md_from">\n <ui-select-match>{{$select.selected === \'always\' ? \'APPLICATION_ALWAYS\' : $select.selected | translate}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search">\n {{monthDay === \'always\' ? \'APPLICATION_ALWAYS\' : monthDay | translate}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="interval.md_to" theme="bootstrap" name="md_to">\n <ui-select-match>{{$select.selected === \'always\' ? \'APPLICATION_ALWAYS\' : $select.selected | translate}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search">\n {{monthDay === \'always\' ? \'APPLICATION_ALWAYS\' : monthDay | translate}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTHDAY -->\n\n <!-- START MONTH -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTH\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="interval.m_from" theme="bootstrap" name="m_from">\n <ui-select-match placeholder="">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{month.name | translate}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="interval.m_to" theme="bootstrap" name="m_to">\n <ui-select-match placeholder="">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{month.name | translate}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTH -->\n </div>\n\n <div id="customInterval" class="app-settings" ng-slide-down="interval.intType == \'list\'" lazy-render duration="1">\n\n <!-- START INTERVALS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.interval.IntervalId.$touched || forms.interval.$submitted) && forms.interval.IntervalId.$invalid}">\n <label class="control-label">{{\'APPLICATION_INTERVALS\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="interval.IntervalId" theme="bootstrap" name="IntervalId" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="interval.id as interval in Intervals | filter: $select.search">\n {{interval.name | translate}}\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.interval.IntervalId.$touched || forms.interval.$submitted) && forms.interval.IntervalId.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERVALS -->\n\n </div>\n <button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n <button class="btn green-haze" type="submit" ng-click="goNext()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n </form>\n</wz-step>\n\n<wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n <input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n</wz-step>\n</wizard>\n</div>\n</div>\n<!-- END Portlet PORTLET-->\n</div>\n</div>\n<!-- END PAGE CONTENT-->\n'), -a.put("app/channels/voice/voicemail/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-earphones-alt"></i>\n <a href="#">{{ \'APPLICATION_VOICE\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-envelope-letter"></i>\n <a href="#">{{ \'APPLICATION_VOICEMAILS\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-envelope-letter font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_VOICEMAILS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <a class="btn green-jungle" href="/channels/voice/voicemails/wizard">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_VOICEMAIL\' | translate }}\n </a>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/voice/voicemail/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getVoicemail()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-earphones-alt"></i>\n <a href="#">{{ \'APPLICATION_VOICE\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-envelope-letter"></i>\n <a href="/channels/voice/voicemails/list">{{ \'APPLICATION_VOICEMAILS\' | translate }}</a>\n <i data-ng-show="voicemail" class="fa fa-angle-right"></i>\n </li>\n <li data-ng-show="voicemail">\n <a href="#">{{voicemail.mailbox}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET main.channels -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/voicemail.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{voicemail.mailbox}}\n </div>\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.channels.voice.voicemails.view.settings\')}">\n <a data-ng-href="/channels/voice/voicemails/view/{{voicemail.uniqueid}}/settings"><i class="icon-settings"></i>{{ \'APPLICATION_SETTINGS\' | translate}} </a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.channels.voice.voicemails.view.messages\')}">\n <a data-ng-href="/channels/voice/voicemails/view/{{voicemail.uniqueid}}/messages"><i class="icon-speech"></i>{{ \'APPLICATION_MESSAGES\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET main.channels -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/voice/voicemail/view/view.messages.html",'<div class="row" data-ng-init="getMessages()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_MESSAGES\' | translate}}</span>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns data-ng-if="gridOptions" ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/voice/voicemail/view/view.settings.html",'<div class="row" data-ng-init="getContexts()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_VOICEMAIL\' | translate}} {{ \'APPLICATION_SETTINGS\' | translate}} </span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_2" data-toggle="tab">{{ \'APPLICATION_ADVANCED\' | translate}}</a>\n </li>\n </ul>\n </div>\n\n <div class="portlet-body">\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.general" data-ng-submit="forms.general.$valid && updateVoiceVoicemail()" novalidate>\n\n <!-- START FULLNAME -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.general.$submitted && forms.general.fullname.$invalid}">\n <label class="control-label">{{\'APPLICATION_FULLNAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="fullname" placeholder="{{\'APPLICATION_FULLNAME\' | translate}}" class="form-control" data-ng-model="voicemail.fullname" required/>\n <span data-ng-show="forms.general.$submitted && forms.general.fullname.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END FULLNAME -->\n\n <!-- START EMAIL -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.general.$submitted && forms.general.email.$invalid}">\n <label class="control-label">{{\'APPLICATION_EMAIL\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="email" name="email" placeholder="{{\'APPLICATION_EMAIL\' | translate}}" class="form-control" data-ng-model="voicemail.email" required/>\n <span data-ng-show="forms.general.$submitted && forms.general.host.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END EMAIL -->\n\n <!-- START PASSWORD -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.general.$submitted && forms.general.password.$invalid}">\n <label class="control-label">{{\'APPLICATION_NEW_PASSWORD\' | translate}}</label>\n <input type="password" name="password" placeholder="{{\'APPLICATION_NEW_PASSWORD\' | translate}}" class="form-control" data-ng-model="voicemail.password" />\n <span data-ng-show="forms.general.$submitted && forms.general.password.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PASSWORD -->\n\n <!-- START CONFIRM PASSWORD -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.general.$submitted && forms.general.rpassword.$invalid}">\n <label class="control-label">{{\'APPLICATION_CONFIRM_PASSWORD\' | translate}}</label>\n <input type="password" name="rpassword" placeholder="{{\'APPLICATION_CONFIRM_PASSWORD\' | translate}}" class="form-control" data-ng-model="voicemail.rpassword" nx-equal="voicemail.password"/>\n <span data-ng-show="forms.general.$submitted && (forms.general.rpassword.$invalid || forms.general.rpassword.$invalid)" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_PASSWORD\' | translate}}.\n </span>\n </div>\n <!-- END CONFIRM PASSWORD -->\n\n <!-- START MAILBOX -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.general.$submitted && forms.general.mailbox.$invalid}">\n <label class="control-label">{{\'APPLICATION_MAILBOX\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="mailbox" placeholder="{{\'APPLICATION_MAILBOX\' | translate}}" class="form-control" data-ng-model="voicemail.mailbox" required readonly/>\n <span data-ng-show="forms.general.$submitted && forms.general.mailbox.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END MAILBOX -->\n\n <!-- START CONTEXT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.context.$touched || forms.general.$submitted) && forms.general.context.$invalid}">\n <label class="control-label">{{\'APPLICATION_CONTEXT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="voicemail.context" name="context" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="context.name as context in voiceContexts | filter: $select.search">\n <div ng-bind-html="context.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_VOICE_CONTEXT\' | translate }}\n </span>\n <span data-ng-show="(forms.general.context.$touched || forms.general.$submitted) && forms.general.context.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CONTEXT -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END GENERAL TAB -->\n <!-- ADVANCED TAB -->\n <div class="tab-pane" id="tab_1_2">\n <form name="forms.advanced" data-ng-submit="forms.general.$valid && forms.advanced.$valid && updateVoiceVoicemail()" novalidate>\n\n <!-- START TIMEZONE -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.advanced.$submitted && forms.advanced.tz.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEZONE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="mailbox" placeholder="{{\'APPLICATION_TIMEZONE\' | translate}}" class="form-control" data-ng-model="voicemail.tz" required/>\n <span data-ng-show="forms.advanced.$submitted && forms.advanced.tz.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEZONE -->\n\n <!-- START ATTACH -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.attach.$touched || forms.advanced.$submitted) && forms.advanced.attach.$invalid}">\n <label class="control-label">{{\'APPLICATION_ATTACH\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="voicemail.attach"\n type="checkbox"\n switch-active="{{ switch.isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ switch.onColor }}"\n switch-off-color="{{ switch.offColor }}"\n switch-animate="{{ switch.animate }}"\n switch-size="{{ switch.size }}"\n switch-label="{{ switch.label }}"\n switch-icon="{{ switch.icon }}"\n switch-radio-off="{{ switch.radioOff }}"\n switch-label-width="{{ switch.labelWidth }}"\n switch-handle-width="{{ switch.handleWidth }}">\n </div>\n <!-- END ATTACH -->\n\n <!-- START ENVELOPE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.envelope.$touched || forms.advanced.$submitted) && forms.advanced.envelope.$invalid}">\n <label class="control-label">{{\'APPLICATION_ENVELOPE\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="voicemail.envelope"\n type="checkbox"\n switch-active="{{ switch.isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ switch.onColor }}"\n switch-off-color="{{ switch.offColor }}"\n switch-animate="{{ switch.animate }}"\n switch-size="{{ switch.size }}"\n switch-label="{{ switch.label }}"\n switch-icon="{{ switch.icon }}"\n switch-radio-off="{{ switch.radioOff }}"\n switch-label-width="{{ switch.labelWidth }}"\n switch-handle-width="{{ switch.handleWidth }}">\n </div>\n <!-- END ENVELOPE -->\n\n <!-- START DELETE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.delete.$touched || forms.advanced.$submitted) && forms.advanced.delete.$invalid}">\n <label class="control-label">{{\'APPLICATION_DELETE\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="voicemail.delete"\n type="checkbox"\n switch-active="{{ switch.isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ switch.onColor }}"\n switch-off-color="{{ switch.offColor }}"\n switch-animate="{{ switch.animate }}"\n switch-size="{{ switch.size }}"\n switch-label="{{ switch.label }}"\n switch-icon="{{ switch.icon }}"\n switch-radio-off="{{ switch.radioOff }}"\n switch-label-width="{{ switch.labelWidth }}"\n switch-handle-width="{{ switch.handleWidth }}">\n </div>\n <!-- END DELETE -->\n\n <!-- START EMAIL_BODY -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_EMAIL_BODY\' | translate}}</label>\n <textarea type="text" name="emailbody" placeholder="{{\'APPLICATION_EMAIL_BODY\' | translate}}" class="form-control" data-ng-model="voicemail.emailbody"></textarea>\n </div>\n <!-- END EMAIL_BODY -->\n\n <!-- START EMAIL_SUBJECT -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_EMAIL_SUBJECT\' | translate}}</label>\n <textarea type="text" name="emailsubject" placeholder="{{\'APPLICATION_EMAIL_SUBJECT\' | translate}}" class="form-control" data-ng-model="voicemail.emailsubject"></textarea>\n </div>\n <!-- END EMAIL_SUBJECT -->\n\n <!-- START MAX_SECONDS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.maxsecs.$touched || forms.advanced.$submitted) && forms.advanced.maxsecs.$invalid}">\n <label class="control-label">{{\'APPLICATION_MAX_SECONDS\' | translate}}</label>\n <input type="number" min="0" name="maxsecs" placeholder="{{\'APPLICATION_MAX_SECONDS\' | translate}}" class="form-control" data-ng-model="voicemail.maxsecs" required/>\n <span data-ng-show="(forms.advanced.maxsecs.$touched || forms.advanced.$submitted) && forms.advanced.maxsecs.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END MAX_SECONDS -->\n\n <!-- START MAX_MESSAGES -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.maxmsg.$touched || forms.advanced.$submitted) && forms.advanced.maxmsg.$invalid}">\n <label class="control-label">{{\'APPLICATION_MAX_MESSAGES\' | translate}}</label>\n <input type="number" min="0" name="maxmsg" placeholder="{{\'APPLICATION_MAX_MESSAGES\' | translate}}" class="form-control" data-ng-model="voicemail.maxmsg" required/>\n <span data-ng-show="(forms.advanced.maxmsg.$touched || forms.advanced.$submitted) && forms.advanced.maxmsg.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END MAX_MESSAGES -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END ADVANCED TAB -->\n\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/voice/voicemail/wizard/wizard.html",'<div class="col-md-12" data-ng-init="initWizard()">\n <!-- BEGIN PAGE HEADER-->\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-earphones-alt"></i>\n <a href="#">{{ \'APPLICATION_VOICE\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-envelope-letter"></i>\n <a href="/channels/voice/voicemails/list">{{ \'APPLICATION_VOICEMAILS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-options"></i>\n <a href="#">{{ \'APPLICATION_WIZARD\' | translate }}</a>\n </li>\n </ul>\n </div>\n <!-- END PAGE HEADER-->\n\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered" data-ng-init="getFirstFreeMailbox()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-envelope-letter font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_VOICEMAIL\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="createItem()">\n <wz-step title="{{\'APPLICATION_GENERAL\' | translate}}" canexit="exitValidation(form.general.$valid)">\n <form name="form.general" novalidate>\n\n <!-- START FULLNAME -->\n <div class="form-group" data-ng-class="{\'has-error\': form.general.$submitted && form.general.fullname.$invalid}">\n <label class="control-label">{{\'APPLICATION_FULLNAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="fullname" placeholder="{{\'APPLICATION_FULLNAME\' | translate}}" class="form-control" data-ng-model="item.fullname" required/>\n <span data-ng-show="form.general.$submitted && form.general.fullname.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END FULLNAME -->\n\n <!-- START EMAIL -->\n <div class="form-group" data-ng-class="{\'has-error\': form.general.$submitted && form.general.email.$invalid}">\n <label class="control-label">{{\'APPLICATION_EMAIL\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="email" name="email" placeholder="{{\'APPLICATION_EMAIL\' | translate}}" class="form-control" data-ng-model="item.email" required/>\n <span data-ng-show="form.general.$submitted && form.general.host.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END EMAIL -->\n\n <!-- START PASSWORD -->\n <div class="form-group" data-ng-class="{\'has-error\': form.general.$submitted && form.general.password.$invalid}">\n <label class="control-label">{{\'APPLICATION_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="password" name="password" placeholder="{{\'APPLICATION_PASSWORD\' | translate}}" class="form-control" data-ng-model="item.password" required/>\n <span data-ng-show="form.general.$submitted && form.general.password.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PASSWORD -->\n\n <!-- START CONFIRM PASSWORD -->\n <div class="form-group" data-ng-class="{\'has-error\': form.general.$submitted && form.general.rpassword.$invalid}">\n <label class="control-label">{{\'APPLICATION_CONFIRM_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="password" name="rpassword" placeholder="{{\'APPLICATION_CONFIRM_PASSWORD\' | translate}}" class="form-control" data-ng-model="item.rpassword" nx-equal="item.password" required/>\n <span data-ng-show="form.general.$submitted && (form.general.rpassword.$invalid || form.general.rpassword.$invalid)" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_PASSWORD\' | translate}}.\n </span>\n </div>\n <!-- END CONFIRM PASSWORD -->\n\n <!-- START MAILBOX -->\n <div class="form-group" data-ng-class="{\'has-error\': form.general.$submitted && form.general.mailbox.$invalid}">\n <label class="control-label">{{\'APPLICATION_MAILBOX\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="mailbox" placeholder="{{\'APPLICATION_MAILBOX\' | translate}}" class="form-control" data-ng-model="item.mailbox" required readonly/>\n <span data-ng-show="form.general.$submitted && form.general.mailbox.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END MAILBOX -->\n\n <button class="btn green-haze" type="submit" ng-click="next()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n </form>\n </wz-step>\n\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n <input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n </wz-step>\n </wizard>\n </div>\n </div>\n <!-- END PORTLET-->\n</div>\n'),a.put("app/contactmanager/company/list/create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_COMPANY\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="forms.company" novalidate>\n <div class="row">\n <div class="col-md-6">\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.company.name.$touched || forms.company.$submitted) && forms.company.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="(forms.cmopany.name.$touched || forms.company.$submitted) && forms.company.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START VAT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.company.vat.$touched || forms.company.$submitted) && forms.company.vat.$invalid}">\n <label class="control-label">{{\'APPLICATION_VAT\' | translate}}</label>\n <input type="text" name="vat" placeholder="{{\'APPLICATION_VAT\' | translate}}" class="form-control" data-ng-model="item.vat"/>\n <span data-ng-show="(forms.cmopany.vat.$touched || forms.company.$submitted) && forms.company.vat.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END VAT -->\n\n <!-- START COMPANYID -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.company.companyId.$touched || forms.company.$submitted) && forms.company.companyId.$invalid}">\n <label class="control-label">{{\'APPLICATION_COMPANY_ID\' | translate}}</label>\n <input type="text" name="companyId" placeholder="{{\'APPLICATION_COMPANY_ID\' | translate}}" class="form-control" data-ng-model="item.companyId"/>\n <span data-ng-show="(forms.cmopany.companyId.$touched || forms.company.$submitted) && forms.company.companyId.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END COMPANYID -->\n\n <!-- START WEBSITE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.company.website.$touched || forms.company.$submitted) && forms.company.website.$invalid}">\n <label class="control-label">{{\'APPLICATION_WEBSITE\' | translate}}</label>\n <input type="text" name="website" placeholder="{{\'APPLICATION_WEBSITE\' | translate}}" class="form-control" data-ng-model="item.website"/>\n <span data-ng-show="(forms.cmopany.website.$touched || forms.company.$submitted) && forms.company.website.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END WEBSITE -->\n\n <!-- START EMAIL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.company.email.$touched || forms.company.$submitted) && forms.company.email.$invalid}">\n <label class="control-label">{{\'APPLICATION_EMAIL\' | translate}}</label>\n <input type="email" name="email" placeholder="{{\'APPLICATION_EMAIL\' | translate}}" class="form-control" data-ng-model="item.email"/>\n <span data-ng-show="(forms.cmopany.email.$touched || forms.company.$submitted) && forms.company.email.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END EMAIL -->\n\n </div>\n <div class="col-md-6">\n <!-- START PHONE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.company.phone.$touched || forms.company.$submitted) && forms.company.phone.$invalid}">\n <label class="control-label">{{\'APPLICATION_PHONE\' | translate}}</label>\n <input type="text" name="phone" placeholder="{{\'APPLICATION_PHONE\' | translate}}" class="form-control" data-ng-model="item.phone"/>\n <span data-ng-show="(forms.cmopany.phone.$touched || forms.company.$submitted) && forms.company.phone.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PHONE -->\n\n <!-- START FAX -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.company.fax.$touched || forms.company.$submitted) && forms.company.fax.$invalid}">\n <label class="control-label">{{\'APPLICATION_FAX\' | translate}}</label>\n <input type="text" name="fax" placeholder="{{\'APPLICATION_FAX\' | translate}}" class="form-control" data-ng-model="item.fax"/>\n <span data-ng-show="(forms.cmopany.fax.$touched || forms.company.$submitted) && forms.company.fax.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END FAX -->\n\n <!-- START TYPE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.company.type.$touched || forms.company.$submitted) && forms.company.type.$invalid}">\n <label class="control-label">{{\'APPLICATION_TYPE\' | translate}}</label>\n <input type="text" name="type" placeholder="{{\'APPLICATION_TYPE\' | translate}}" class="form-control" data-ng-model="item.type"/>\n <span data-ng-show="(forms.cmopany.type.$touched || forms.company.$submitted) && forms.company.type.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TYPE -->\n\n <!-- START DOMAIN -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.company.emailDomain.$touched || forms.company.$submitted) && forms.company.emailDomain.$invalid}">\n <label class="control-label">{{\'APPLICATION_EMAIL_DOMAIN\' | translate}}</label>\n <input type="text" name="domain" placeholder="{{\'APPLICATION_EMAIL_DOMAIN\' | translate}}" class="form-control" data-ng-model="item.emailDomain"/>\n <span data-ng-show="(forms.cmopany.emailDomain.$touched || forms.company.$submitted) && forms.company.emailDomain.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END DOMAIN -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n </div>\n</div>\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="ok()" ng-disabled="forms.company.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'), -a.put("app/contactmanager/company/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-users"></i>\n <a href="#">{{ \'APPLICATION_CONTACT_MANAGER\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-briefcase"></i>\n <a href="/contactmanager/companies/list">{{ \'APPLICATION_COMPANIES\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-briefcase font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_COMPANIES\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <button class="btn green-jungle " ng-click="create()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_COMPANY\' | translate }}\n </button>\n </div>\n <!-- <a class="btn btn-icon-only btn-default fullscreen" href="#"></a> -->\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/contactmanager/company/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getCompany()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-users"></i>\n <a href="#">{{ \'APPLICATION_CONTACT_MANAGER\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-briefcase"></i>\n <a href="/contactmanager/companies/list">{{ \'APPLICATION_COMPANIES\' | translate }}</a>\n <i data-ng-show="company" class="fa fa-angle-right"></i>\n </li>\n <li data-ng-show="company">\n <a href="#">{{company.name}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/company.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{company.name}}\n </div>\n <!-- <div class="profile-usertitle-job">\n {{user.role}}\n </div> -->\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.contactmanager.companies.view.settings\')}">\n <a data-ng-href="/contactmanager/companies/view/{{company.id}}/settings">\n <i class="icon-settings"></i>\n {{ \'APPLICATION_SETTINGS\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/contactmanager/company/view/view.settings.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_COMPANY\' | translate}} {{ \'APPLICATION_SETTINGS\' | translate}} </span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_2" data-toggle="tab">{{ \'APPLICATION_ADDRESS\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_3" data-toggle="tab">{{ \'APPLICATION_SHIPMENT_ADDRESS\' | translate}}</a>\n </li>\n </ul>\n </div>\n\n <div class="portlet-body">\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.general" data-ng-submit="forms.general.$valid && updateCompany()" novalidate>\n <div class="row">\n <div class="col-md-6">\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="company.name" required/>\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START VAT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.vat.$touched || forms.general.$submitted) && forms.general.vat.$invalid}">\n <label class="control-label">{{\'APPLICATION_VAT\' | translate}}</label>\n <input type="text" name="vat" placeholder="{{\'APPLICATION_VAT\' | translate}}" class="form-control" data-ng-model="company.vat"/>\n <span data-ng-show="(forms.cmopany.vat.$touched || forms.general.$submitted) && forms.general.vat.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END VAT -->\n\n <!-- START COMPANYID -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.companyId.$touched || forms.general.$submitted) && forms.general.companyId.$invalid}">\n <label class="control-label">{{\'APPLICATION_COMPANY_ID\' | translate}}</label>\n <input type="text" name="companyId" placeholder="{{\'APPLICATION_COMPANY_ID\' | translate}}" class="form-control" data-ng-model="company.companyId"/>\n <span data-ng-show="(forms.cmopany.companyId.$touched || forms.general.$submitted) && forms.general.companyId.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END COMPANYID -->\n\n <!-- START WEBSITE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.website.$touched || forms.general.$submitted) && forms.general.website.$invalid}">\n <label class="control-label">{{\'APPLICATION_WEBSITE\' | translate}}</label>\n <input type="text" name="website" placeholder="{{\'APPLICATION_WEBSITE\' | translate}}" class="form-control" data-ng-model="company.website"/>\n <span data-ng-show="(forms.cmopany.website.$touched || forms.general.$submitted) && forms.general.website.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END WEBSITE -->\n\n <!-- START EMAIL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.email.$touched || forms.general.$submitted) && forms.general.email.$invalid}">\n <label class="control-label">{{\'APPLICATION_EMAIL\' | translate}}</label>\n <input type="email" name="email" placeholder="{{\'APPLICATION_EMAIL\' | translate}}" class="form-control" data-ng-model="company.email"/>\n <span data-ng-show="(forms.cmopany.email.$touched || forms.general.$submitted) && forms.general.email.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END EMAIL -->\n </div>\n <div class="col-md-6">\n <!-- START PHONE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.phone.$touched || forms.general.$submitted) && forms.general.phone.$invalid}">\n <label class="control-label">{{\'APPLICATION_PHONE\' | translate}}</label>\n <input type="text" name="phone" placeholder="{{\'APPLICATION_PHONE\' | translate}}" class="form-control" data-ng-model="company.phone"/>\n <span data-ng-show="(forms.cmopany.phone.$touched || forms.general.$submitted) && forms.general.phone.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PHONE -->\n\n <!-- START FAX -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.fax.$touched || forms.general.$submitted) && forms.general.fax.$invalid}">\n <label class="control-label">{{\'APPLICATION_FAX\' | translate}}</label>\n <input type="text" name="fax" placeholder="{{\'APPLICATION_FAX\' | translate}}" class="form-control" data-ng-model="company.fax"/>\n <span data-ng-show="(forms.cmopany.fax.$touched || forms.general.$submitted) && forms.general.fax.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END FAX -->\n\n <!-- START TYPE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.type.$touched || forms.general.$submitted) && forms.general.type.$invalid}">\n <label class="control-label">{{\'APPLICATION_TYPE\' | translate}}</label>\n <input type="text" name="type" placeholder="{{\'APPLICATION_TYPE\' | translate}}" class="form-control" data-ng-model="company.type"/>\n <span data-ng-show="(forms.cmopany.type.$touched || forms.general.$submitted) && forms.general.type.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TYPE -->\n\n <!-- START DOMAIN -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.emailDomain.$touched || forms.general.$submitted) && forms.general.emailDomain.$invalid}">\n <label class="control-label">{{\'APPLICATION_EMAIL_DOMAIN\' | translate}}</label>\n <input type="text" name="domain" placeholder="{{\'APPLICATION_EMAIL_DOMAIN\' | translate}}" class="form-control" data-ng-model="company.emailDomain"/>\n <span data-ng-show="(forms.cmopany.emailDomain.$touched || forms.general.$submitted) && forms.general.emailDomain.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END DOMAIN -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="company.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n </div>\n </div>\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END ADVANCED TAB -->\n <div class="tab-pane" id="tab_1_2">\n <form name="forms.address" data-ng-submit="forms.address.$valid && updateCompany()" novalidate>\n <!-- START STREET -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.address.street.$touched || forms.address.$submitted) && forms.address.street.$invalid}">\n <label class="control-label">{{\'APPLICATION_STREET\' | translate}}</label>\n <input type="text" name="street" placeholder="{{\'APPLICATION_STREET\' | translate}}" class="form-control" data-ng-model="company.street"/>\n <span data-ng-show="(forms.address.street.$touched || forms.address.$submitted) && forms.address.street.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END STREET -->\n\n <!-- START POSTALCODE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.address.postalCode.$touched || forms.address.$submitted) && forms.address.postalCode.$invalid}">\n <label class="control-label">{{\'APPLICATION_POSTALCODE\' | translate}}</label>\n <input type="text" name="postalCode" placeholder="{{\'APPLICATION_POSTALCODE\' | translate}}" class="form-control" data-ng-model="company.postalCode"/>\n <span data-ng-show="(forms.address.postalCode.$touched || forms.address.$submitted) && forms.address.postalCode.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END POSTALCODE -->\n\n <!-- START CITY -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.address.city.$touched || forms.address.$submitted) && forms.address.city.$invalid}">\n <label class="control-label">{{\'APPLICATION_CITY\' | translate}}</label>\n <input type="text" name="city" placeholder="{{\'APPLICATION_CITY\' | translate}}" class="form-control" data-ng-model="company.city"/>\n <span data-ng-show="(forms.address.city.$touched || forms.address.$submitted) && forms.address.city.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CITY -->\n <!-- START COUNTRY -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.address.country.$touched || forms.address.$submitted) && forms.address.country.$invalid}">\n <label class="control-label">{{\'APPLICATION_COUNTRY\' | translate}}</label>\n <input type="text" name="country" placeholder="{{\'APPLICATION_COUNTRY\' | translate}}" class="form-control" data-ng-model="company.country"/>\n <span data-ng-show="(forms.address.country.$touched || forms.address.$submitted) && forms.address.country.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END COUNTRY -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <div class="tab-pane" id="tab_1_3">\n <form name="forms.shipmentAddress" data-ng-submit="forms.shipmentAddress.$valid && updateCompany()" novalidate>\n <!-- START STREET -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.shipmentAddress.sStreet.$touched || forms.shipmentAddress.$submitted) && forms.shipmentAddress.sStreet.$invalid}">\n <label class="control-label">{{\'APPLICATION_STREET\' | translate}}</label>\n <input type="text" name="sStreet" placeholder="{{\'APPLICATION_STREET\' | translate}}" class="form-control" data-ng-model="company.sStreet"/>\n <span data-ng-show="(forms.shipmentAddress.sStreet.$touched || forms.shipmentAddress.$submitted) && forms.shipmentAddress.sStreet.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END STREET -->\n\n <!-- START POSTALCODE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.shipmentAddress.sPostalCode.$touched || forms.shipmentAddress.$submitted) && forms.shipmentAddress.sPostalCode.$invalid}">\n <label class="control-label">{{\'APPLICATION_POSTALCODE\' | translate}}</label>\n <input type="text" name="sPostalCode" placeholder="{{\'APPLICATION_POSTALCODE\' | translate}}" class="form-control" data-ng-model="company.sPostalCode"/>\n <span data-ng-show="(forms.shipmentAddress.sPostalCode.$touched || forms.shipmentAddress.$submitted) && forms.shipmentAddress.sPostalCode.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END POSTALCODE -->\n\n <!-- START CITY -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.shipmentAddress.sCity.$touched || forms.shipmentAddress.$submitted) && forms.shipmentAddress.sCity.$invalid}">\n <label class="control-label">{{\'APPLICATION_CITY\' | translate}}</label>\n <input type="text" name="sCity" placeholder="{{\'APPLICATION_CITY\' | translate}}" class="form-control" data-ng-model="company.sCity"/>\n <span data-ng-show="(forms.shipmentAddress.sCity.$touched || forms.shipmentAddress.$submitted) && forms.shipmentAddress.sCity.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CITY -->\n <!-- START COUNTRY -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.shipmentAddress.sCountry.$touched || forms.shipmentAddress.$submitted) && forms.shipmentAddress.sCountry.$invalid}">\n <label class="control-label">{{\'APPLICATION_COUNTRY\' | translate}}</label>\n <input type="text" name="sCountry" placeholder="{{\'APPLICATION_COUNTRY\' | translate}}" class="form-control" data-ng-model="company.sCountry"/>\n <span data-ng-show="(forms.shipmentAddress.sCountry.$touched || forms.shipmentAddress.$submitted) && forms.shipmentAddress.sCountry.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END COUNTRY -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/contactmanager/contact/list/copy.modal.html",'<div class="modal-header" data-ng-init="getLists()">\n <h3 class="modal-title">{{ \'APPLICATION_COPY_CONTACT\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="forms.copy" novalidate>\n <!-- START LIST -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.csv.ListId.$invalid && forms.csv.$submitted}">\n <label class="control-label">{{\'APPLICATION_LIST\' | translate}}</label>\n <ui-select data-ng-model="item.ListId" theme="bootstrap" name="ListId" data-ng-disabled="disabled" data-ng-change="getCustomFields()" required>\n <ui-select-match placeholder="{{ \'APPLICATION_LIST\' | translate }}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="list.id as list in lists | filter: $select.search">\n <div ng-bind-html="list.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.csv.ListId.$invalid && forms.csv.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END LIST -->\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="ok()" ng-disabled="forms.copy.$invalid || !forms.copy.ListId">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CLOSE\' | translate }}</button>\n</div>\n'),a.put("app/contactmanager/contact/list/import.modal.html",'<div class="modal-header" data-ng-init="getLists();getCompanies();">\n <h3 class="modal-title">{{ \'APPLICATION_IMPORT_FROM_CSV\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="forms.csv" novalidate>\n <div class="row">\n <div class="col-md-6">\n <!-- START LIST -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.csv.ListId.$invalid && forms.csv.$submitted}">\n <label class="control-label">{{\'APPLICATION_LIST\' | translate}}</label>\n <ui-select data-ng-model="item.ListId" theme="bootstrap" name="ListId" data-ng-disabled="disabled" data-ng-change="getCustomFields()">\n <ui-select-match placeholder="{{ \'APPLICATION_LIST\' | translate }}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="list.id as list in lists | filter: $select.search">\n <div ng-bind-html="list.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.csv.ListId.$invalid && forms.csv.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END LIST -->\n\n <!-- START FIRSTNAME -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.csv.firstName.$invalid && forms.csv.$submitted}">\n <label class="control-label">{{\'APPLICATION_FIRSTNAME\' | translate}}</label>\n <ui-select data-ng-model="item.firstName" theme="bootstrap" name="firstName" data-ng-disabled="disabled" required>\n <ui-select-match allow-clear placeholder="{{ \'APPLICATION_FIRSTNAME\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="index in indexes | filter: $select.search">\n <div ng-bind-html="index | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.csv.firstName.$invalid && forms.csv.$touched" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END FIRSTNAME -->\n\n <!-- START LASTNAME -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.csv.lastName.$invalid && forms.csv.$submitted}">\n <label class="control-label">{{\'APPLICATION_LASTNAME\' | translate}}</label>\n <ui-select data-ng-model="item.lastName" theme="bootstrap" name="lastName" data-ng-disabled="disabled">\n <ui-select-match allow-clear placeholder="{{ \'APPLICATION_LASTNAME\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="index in indexes | filter: $select.search">\n <div ng-bind-html="index | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.csv.lastName.$invalid && forms.csv.$touched" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END LASTNAME -->\n\n <!-- START STREET -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.csv.street.$invalid && forms.csv.$submitted}">\n <label class="control-label">{{\'APPLICATION_STREET\' | translate}}</label>\n <ui-select data-ng-model="item.street" theme="bootstrap" name="street" data-ng-disabled="disabled">\n <ui-select-match allow-clear placeholder="{{ \'APPLICATION_STREET\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="index in indexes | filter: $select.search">\n <div ng-bind-html="index | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.csv.street.$invalid && forms.csv.$touched" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END STREET -->\n\n <!-- START POSTALCODE -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.csv.postalCode.$invalid && forms.csv.$submitted}">\n <label class="control-label">{{\'APPLICATION_POSTALCODE\' | translate}}</label>\n <ui-select data-ng-model="item.postalCode" theme="bootstrap" name="postalCode" data-ng-disabled="disabled">\n <ui-select-match allow-clear placeholder="{{ \'APPLICATION_POSTALCODE\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="index in indexes | filter: $select.search">\n <div ng-bind-html="index | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.csv.postalCode.$invalid && forms.csv.$touched" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END POSTALCODE -->\n\n <!-- START CITY -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.csv.city.$invalid && forms.csv.$submitted}">\n <label class="control-label">{{\'APPLICATION_CITY\' | translate}}</label>\n <ui-select data-ng-model="item.city" theme="bootstrap" name="city" data-ng-disabled="disabled">\n <ui-select-match allow-clear placeholder="{{ \'APPLICATION_CITY\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="index in indexes | filter: $select.search">\n <div ng-bind-html="index | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.csv.city.$invalid && forms.csv.$touched" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CITY -->\n\n <!-- START PHONE -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.csv.phone.$invalid && forms.csv.$submitted}">\n <label class="control-label">{{\'APPLICATION_PHONE\' | translate}}</label>\n <ui-select data-ng-model="item.phone" theme="bootstrap" name="phone" data-ng-disabled="disabled">\n <ui-select-match allow-clear placeholder="{{ \'APPLICATION_PHONE\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="index in indexes | filter: $select.search">\n <div ng-bind-html="index | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.csv.phone.$invalid && forms.phone.$touched" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PHONE -->\n\n <!-- START MOBILE -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.csv.mobile.$invalid && forms.csv.$submitted}">\n <label class="control-label">{{\'APPLICATION_MOBILE\' | translate}}</label>\n <ui-select data-ng-model="item.mobile" theme="bootstrap" name="mobile" data-ng-disabled="disabled">\n <ui-select-match allow-clear placeholder="{{ \'APPLICATION_MOBILE\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="index in indexes | filter: $select.search">\n <div ng-bind-html="index | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.csv.mobile.$invalid && forms.mobile.$touched" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END MOBILE -->\n\n </div>\n <div class="col-md-6">\n\n <!-- START COUNTRY -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.csv.country.$invalid && forms.csv.$submitted}">\n <label class="control-label">{{\'APPLICATION_COUNTRY\' | translate}}</label>\n <ui-select data-ng-model="item.country" theme="bootstrap" name="country" data-ng-disabled="disabled">\n <ui-select-match allow-clear placeholder="{{ \'APPLICATION_COUNTRY\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="index in indexes | filter: $select.search">\n <div ng-bind-html="index | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.csv.country.$invalid && forms.csv.$touched" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END COUNTRY -->\n\n <!-- START DATEOFBIRTH -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.csv.dateOfBirth.$invalid && forms.csv.$submitted}">\n <label class="control-label">{{\'APPLICATION_DATEOFBIRTH\' | translate}}</label>\n <ui-select data-ng-model="item.dateOfBirth" theme="bootstrap" name="dateOfBirth" data-ng-disabled="disabled">\n <ui-select-match allow-clear placeholder="{{ \'APPLICATION_DATEOFBIRTH\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="index in indexes | filter: $select.search">\n <div ng-bind-html="index | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.csv.dateOfBirth.$invalid && forms.csv.$touched" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END DATEOFBIRTH -->\n\n <!-- START TAGS -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.csv.tags.$invalid && forms.csv.$submitted}">\n <label class="control-label">{{\'APPLICATION_TAGS\' | translate}}</label>\n <ui-select multiple data-ng-model="item.tags" theme="bootstrap" name="tags" data-ng-disabled="disabled">\n <ui-select-match allow-clear placeholder="{{ \'APPLICATION_TAGS\' | translate }}">{{$item}}</ui-select-match>\n <ui-select-choices repeat="index in indexes | filter: $select.search">\n <div ng-bind-html="index | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.csv.tags.$invalid && forms.csv.$touched" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TAGS -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.csv.description.$invalid && forms.csv.$submitted}">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <ui-select data-ng-model="item.description" theme="bootstrap" name="description" data-ng-disabled="disabled">\n <ui-select-match allow-clear placeholder="{{ \'APPLICATION_DESCRIPTION\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="index in indexes | filter: $select.search">\n <div ng-bind-html="index | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.csv.description.$invalid && forms.csv.$touched" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END DESCRIPTION -->\n\n <!-- START FAX -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.csv.fax.$invalid && forms.csv.$submitted}">\n <label class="control-label">{{\'APPLICATION_FAX\' | translate}}</label>\n <ui-select data-ng-model="item.fax" theme="bootstrap" name="fax" data-ng-disabled="disabled">\n <ui-select-match allow-clear placeholder="{{ \'APPLICATION_FAX\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="index in indexes | filter: $select.search">\n <div ng-bind-html="index | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.csv.fax.$invalid && forms.fax.$touched" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END FAX -->\n\n <!-- START EMAIL -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.csv.email.$invalid && forms.general.$submitted}">\n <label class="control-label">{{\'APPLICATION_EMAIL\' | translate}}</label>\n <ui-select data-ng-model="item.email" theme="bootstrap" name="email" data-ng-disabled="disabled">\n <ui-select-match allow-clear placeholder="{{ \'APPLICATION_EMAIL\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="index in indexes | filter: $select.search">\n <div ng-bind-html="index | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.csv.email.$invalid && forms.csv.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END EMAIL -->\n\n <!-- START COMPANY -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.csv.CompanyId.$invalid && forms.csv.$submitted}">\n <label class="control-label">{{\'APPLICATION_COMPANY\' | translate}}</label>\n <ui-select data-ng-model="item.CompanyId" theme="bootstrap" name="CompanyId" data-ng-disabled="!companies.length">\n <ui-select-match allow-clear placeholder="{{ \'APPLICATION_COMPANY\' | translate }}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="company.id as company in companies | filter: $select.search">\n <div ng-bind-html="company.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="companies.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_COMPANIES_AVAILABLE\' | translate }}\n </p>\n </div>\n <span data-ng-show="forms.csv.CompanyId.$invalid && forms.csv.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END COMPANY -->\n\n </div>\n </div>\n\n <!-- START CUSTOMFIELDS -->\n <div data-ng-repeat="customField in customFields">\n <div class="form-group" data-ng-class="{\'has-error\': forms.csv[customField.name].$invalid && forms.csv.$submitted}">\n <label class="control-label">{{customField.alias}}</label>\n <ui-select data-ng-model="item[customField.name]" theme="bootstrap" name="{{customField.name}}" data-ng-disabled="disabled">\n <ui-select-match allow-clear placeholder="{{customField.alias}}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="index in indexes | filter: $select.search">\n <div ng-bind-html="index | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.csv[customField.name].$invalid && forms.csv.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n <!-- END CUSTOMFIELDS -->\n\n <div>\n <p>{{\'APPLICATION_IMPORT_SUCCEEDED\' | translate}}: {{import.succeeded}}/{{csvLength}}</p>\n <div class="progress progress-sm" style="">\n <div class="progress-bar progress-bar-info" role="progressbar" ng-style="{ \'width\': import.success + \'%\' }"></div>\n </div>\n </div>\n <div>\n <p>{{\'APPLICATION_IMPORT_FAILED\' | translate}}: {{import.failed}}/{{csvLength}}</p>\n <div class="progress progress-sm" style="">\n <div class="progress-bar progress-bar-danger" role="progressbar" ng-style="{ \'width\': import.fail + \'%\' }"></div>\n </div>\n </div>\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="start()" ng-disabled="forms.csv.$invalid || !forms.csv.firstName || submitted">{{ \'APPLICATION_SUBMIT\' | translate }}</button>\n <button class="btn default" type="button" ng-click="close()" data-ng-if="!importing">{{ \'APPLICATION_CLOSE\' | translate }}</button>\n <button class="btn default" type="button" ng-click="stop()" data-ng-if="importing">{{ \'APPLICATION_STOP\' | translate }}</button>\n</div>\n'), -a.put("app/contactmanager/contact/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-users"></i>\n <a href="#">{{ \'APPLICATION_CONTACT_MANAGER\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-users"></i>\n <a href="/contactmanager/contacts/list">{{ \'APPLICATION_CONTACTS\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="fa fa-users font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_CONTACTS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length && !Auth.isAgent()">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <button class="btn green-jungle" data-ng-click="newContact();">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_CONTACT\' | translate }}\n </button>\n <span class="btn default btn-file" data-ng-if="!Auth.isAgent()">\n <span class="fileinput-new">\n <i class="icon-cloud-upload"></i> {{\'APPLICATION_IMPORT_FROM_CSV\' | translate}}</span>\n <input type="file" accept=".csv" nv-file-select="" uploader="uploader"/>\n </span>\n </div>\n <!-- <a class="btn btn-icon-only btn-default fullscreen" href="#"></a> -->\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div data-ng-if="gridOptions" ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/contactmanager/list/list/create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_LIST\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="forms.list" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.list.name.$touched || forms.list.$submitted) && forms.list.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="(forms.list.name.$touched || forms.list.$submitted) && forms.list.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="ok()" ng-disabled="forms.list.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/contactmanager/list/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-users"></i>\n <a href="#">{{ \'APPLICATION_CONTACT_MANAGER\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-list-ul"></i>\n <a href="/contactmanager/lists/list">{{ \'APPLICATION_LISTS\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="fa fa-list-ul font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_LISTS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <button class="btn green-jungle " ng-click="create()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_LIST\' | translate }}\n </button>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/contactmanager/list/view/create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_CUSTOM_FIELD\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="forms.customField" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.customField.name.$touched || forms.customField.$submitted) && forms.customField.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.alias" required/>\n <span data-ng-show="(forms.customField.name.$touched || forms.customField.$submitted) && forms.customField.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START TYPE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.customField.type.$touched || forms.customField.$submitted) && forms.customField.type.$invalid}">\n <label class="control-label">{{ \'APPLICATION_TYPE\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="item.type" name="type" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_TYPE\' | translate }}">{{$translate.instant($select.selected.name)}}</ui-select-match>\n <ui-select-choices repeat="type.value as type in types| filter: $select.search">\n {{$translate.instant(type.name)}}\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.customField.type.$touched || forms.customField.$submitted) && forms.customField.type.$invalid && forms.customField.type.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TYPE -->\n\n <div ng-slide-down="item.type == \'select\'" lazy-render duration="1">\n <div>\n <label class="control-label">{{\'APPLICATION_CHOICES\' | translate}}</label>\n </div>\n <div class="padding-bottom" ng-repeat="choice in choices">\n <div class="form-group">\n <div class="input-group">\n <input type="text" class="form-control" ng-model="choice.value" required>\n <span class="input-group-btn">\n <button class="btn red" type="button"data-ng-click="removeField($index)" data-ng-disabled="choices.length<=1"><i class="fa fa-times"></i></button>\n </span>\n </div>\n </div>\n </div>\n <button type="button" class="btn btn-sm green padding-bottom" ng-click="addField()">\n <i class="fa fa-plus"></i> {{\'APPLICATION_ADD_CHOICE\' | translate}}\n </button>\n\n </div>\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="ok()" ng-disabled="forms.customField.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/contactmanager/list/view/view.agents.html",'<div class="row" data-ng-init="getTeams()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_AGENTS\' | translate}}</span>\n </div>\n </div>\n <div class="note note-warning" data-ng-hide="teams.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_AVAILABLE_TEAMS\' | translate }}\n </p>\n </div>\n <div class="portlet-body">\n <!-- BEGIN FORM-->\n <form action="index.html" class="form-horizontal form-row-seperated">\n <div class="form-body">\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-team">\n </div>\n </div>\n </div>\n </form>\n <!-- END FORM-->\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/contactmanager/list/view/view.customFieldSettings.html",'<div class="row" data-ng-init="getCustomField()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_CUSTOM_FIELD\' | translate}} {{ \'APPLICATION_SETTINGS\' | translate}} </span>\n </div>\n </div>\n\n <div class="portlet-body">\n <!-- GENERAL TAB -->\n <form name="forms.general" data-ng-submit="forms.general.$valid && updateCustomField()" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="customField.alias" required/>\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <div ng-slide-down="customField.type == \'select\'" lazy-render duration="1" class="mbottom20">\n <div>\n <label class="control-label">{{\'APPLICATION_CHOICES\' | translate}}</label>\n </div>\n <div class="padding-bottom" ng-repeat="choice in choices">\n <div class="form-group">\n <div class="input-group">\n <input type="text" class="form-control" ng-model="choice.value" required>\n <span class="input-group-btn">\n <button class="btn red" type="button"data-ng-click="removeField($index)" data-ng-disabled="choices.length<=1"><i class="fa fa-times"></i></button>\n </span>\n </div>\n </div>\n </div>\n <button type="button" class="btn btn-sm green padding-bottom" ng-click="addField()">\n <i class="fa fa-plus"></i> {{\'APPLICATION_ADD_CHOICE\' | translate}}\n </button>\n\n </div>\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="customField.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/contactmanager/list/view/view.customFields.html",'<div ui-view class="profile-content">\n<div class="row" data-ng-init="initCustomFields()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_CUSTOM_FIELDS\' | translate}}</span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <button class="btn green-jungle " ng-click="create()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_CUSTOM_FIELD\' | translate }}\n </button>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n </div>\n</div>\n</div>\n'),a.put("app/contactmanager/list/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getList()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-users"></i>\n <a href="#">{{ \'APPLICATION_CONTACT_MANAGER\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-list-ul"></i>\n <a href="/contactmanager/lists/list">{{ \'APPLICATION_LISTS\' | translate }}</a>\n <i data-ng-show="list" class="fa fa-angle-right"></i>\n </li>\n <li data-ng-show="list">\n <a href="#">{{list.name}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/list.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{list.name}}\n </div>\n <!-- <div class="profile-usertitle-job">\n {{user.role}}\n </div> -->\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.contactmanager.lists.view.settings\')}">\n <a data-ng-href="/contactmanager/lists/view/{{list.id}}/settings">\n <i class="icon-settings"></i>\n {{ \'APPLICATION_SETTINGS\' | translate}} </a>\n </li>\n <li data-ng-if="!list.defaultEntry" data-ng-class="{active: $state.is(\'main.contactmanager.lists.view.agents\')}">\n <a data-ng-href="/contactmanager/lists/view/{{list.id}}/agents">\n <i class="icon-people"></i>\n {{ \'APPLICATION_AGENTS\' | translate}} </a>\n </li>\n <li data-ng-class="{active: $state.includes(\'main.contactmanager.lists.view.customfields\')}">\n <a data-ng-href="/contactmanager/lists/view/{{list.id}}/customfields">\n <i class="icon-pencil"></i>\n {{ \'APPLICATION_CUSTOM_FIELDS\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/contactmanager/list/view/view.settings.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_LIST\' | translate}} {{ \'APPLICATION_SETTINGS\' | translate}} </span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n </li>\n </ul>\n </div>\n\n <div class="portlet-body">\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.general" data-ng-submit="forms.general.$valid && updateList()" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="list.name" data-ng-disabled="list.defaultEntry" required/>\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="list.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END ADVANCED TAB -->\n\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/dashboard/chat/chat.html",'<div data-ng-switch="Auth.getRole()">\n <div ng-switch-when="agent" data-ng-init="initAgent()">\n <div class="row" style="padding-bottom:10px;">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div ui-grid="table1" ui-grid-resize-columns ui-grid-auto-resize class="ui-grid">\n <div class="watermark" data-ng-show="!table1.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n\n <div class="row" style="padding-bottom:10px;">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div ui-grid="table2" ui-grid-resize-columns ui-grid-auto-resize class="ui-grid">\n <div class="watermark" data-ng-show="!table2.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n </div>\n <div ng-switch-default>\n <fieldset>\n <legend>\n <span class="caption-subject"> </span><small class="pull-right font-grey-cascade">{{ \'APPLICATION_TODAY_STATS\' | translate }}</small>\n </legend>\n <div class="row">\n <div class="col-md-8">\n <div class="row">\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" data-ng-init="initWidget(\'waiting\')">\n <div class="dashboard-stat green-haze">\n <div class="visual">\n <i class="fa fa-play"></i>\n </div>\n <div class="details">\n <div class="number">\n {{waiting || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_DASHBOARD_WAITING_NEW\' | translate}}\n </div>\n </div>\n </div>\n </div>\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" data-ng-init="initWidget(\'open\')">\n <div class="dashboard-stat blue-madison">\n <div class="visual">\n <i class="icon-bell"></i>\n </div>\n <div class="details">\n <div class="number">\n {{open || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_DASHBOARD_OPEN\' | translate}}\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class ="row">\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" data-ng-init="initWidget(\'unmanaged\')">\n <div class="dashboard-stat green">\n <div class="visual">\n <i class="icon-options"></i>\n </div>\n <div class="details">\n <div class="number">\n {{unmanaged || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_UNMANAGED\' | translate}}\n </div>\n </div>\n </div>\n </div>\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" data-ng-init="initWidget(\'closed\')">\n <div class="dashboard-stat purple-plum">\n <div class="visual">\n <i class="icon-like"></i>\n </div>\n <div class="details">\n <div class="number">\n {{closed || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_DASHBOARD_CLOSED\' | translate}}\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class ="row">\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" data-ng-init="initWidget(\'abandoned\')">\n <div class="dashboard-stat yellow-crusta">\n <div class="visual">\n <i class="icon-dislike"></i>\n </div>\n <div class="details">\n <div class="number">\n {{abandoned || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_DASHBOARD_ABANDONED\' | translate}}\n </div>\n </div>\n </div>\n </div>\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" >\n <div class="dashboard-stat yellow-casablanca">\n <div class="visual">\n <i class="icon-calculator"></i>\n </div>\n <div class="details">\n <div class="number">\n {{new+open+unmanaged+closed+abandoned || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_TOTAL\' | translate}}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class="col-md-4">\n <!-- <div class="portlet light bordered">\n <div class="portlet-body"> -->\n <canvas class="chart chart-pie" chart-data="charts.interactions.values" chart-labels="charts.interactions.labels" chart-colours="charts.interactions.colours" chart-legend="true">\n </canvas>\n <!-- </div>\n </div> -->\n </div>\n </div>\n <legend>\n <span class="caption-subject"> </span><small class="pull-right font-grey-cascade">{{ \'APPLICATION_INTERACTION_STATS\' | translate }}</small>\n </legend>\n <div class="row">\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" data-ng-init="initWidget(\'timeout\')">\n <div class="dashboard-stat red-intense">\n <div class="visual">\n <i class="icon-dislike"></i>\n </div>\n <div class="details">\n <div class="number">\n {{timeout || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_TIMEOUT\' | translate}}\n </div>\n </div>\n </div>\n </div>\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" data-ng-init="initWidget(\'waiting\')">\n <div class="dashboard-stat purple">\n <div class="visual">\n <i class="icon-hourglass"></i>\n </div>\n <div class="details">\n <div class="number">\n {{waiting || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_WAITING\' | translate}}\n </div>\n </div>\n </div>\n </div>\n </div>\n </fieldset>\n\n </div>\n</div>\n'),a.put("app/dashboard/dashboard.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" id="dashboardView">\n <div class="col-md-12" >\n <div>\n <nav class="navbar navbar-default" role="navigation">\n <div class="navbar-header">\n <button type="button" class="navbar-toggle" data-ng-init="navCollapsed = true" data-ng-click="navCollapsed = !navCollapsed">\n <span class="sr-only">Toggle navigation</span>\n <span class="icon-bar"></span>\n <span class="icon-bar"></span>\n <span class="icon-bar"></span>\n </button>\n </div>\n\n <!-- Collect the nav links, forms, and other content for toggling -->\n <div class="collapse navbar-collapse" ng-class="!navCollapsed && \'in\'" >\n <ul class="nav navbar-nav">\n <li data-ng-class="{active: $state.is(\'main.dashboard.voice\')}">\n <a href="/dashboard/voice">\n <b class=\'icon-earphones-alt\'></b>\n {{ \'APPLICATION_VOICE\' | translate }}\n </a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.dashboard.chat\'),\'disabled-link\':!license.chat}" data-ng-if="::((Auth.isAdmin() || Auth.isAgent() || userModules[8]))">\n <a href="{{license.chat ? \'/dashboard/chat\' : \'#\'}}" class="disable-target">\n <b class=\'icon-bubble\'></b>\n {{ \'APPLICATION_CHAT\' | translate }}\n </a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.dashboard.mail\'),\'disabled-link\':!license.mail}" data-ng-if="::((Auth.isAdmin() || Auth.isAgent() || userModules[9]))">\n <a href="{{license.mail ? \'/dashboard/mail\' : \'#\'}}" class="disable-target">\n <b class=\'icon-envelope\'></b>\n {{ \'APPLICATION_MAIL\' | translate }}\n </a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.dashboard.fax\'),\'disabled-link\':!license.fax}" data-ng-if="::((Auth.isAdmin() || Auth.isAgent() || userModules[10]))">\n <a href="{{license.fax ? \'/dashboard/fax\' : \'#\'}}" class="disable-target">\n <b class=\'fa fa-fax\'></b>\n {{ \'APPLICATION_FAX\' | translate }}\n </a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.dashboard.sms\'),\'disabled-link\':!license.messaging}" data-ng-if="::((Auth.isAdmin() || Auth.isAgent() || userModules[11]))">\n <a href="{{license.messaging ? \'/dashboard/sms\' : \'#\'}}" class="disable-target">\n <b class=\'glyphicon glyphicon-comment\'></b>\n {{ \'APPLICATION_SMS\' | translate }}\n </a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.dashboard.openchannel\'),\'disabled-link\':!license.openchannel}" data-ng-if="::((Auth.isAdmin() || Auth.isAgent() || userModules[20]))">\n <a href="{{license.messaging ? \'/dashboard/openchannel\' : \'#\'}}" class="disable-target">\n <b class=\'icon-globe\'></b>\n {{ \'APPLICATION_OPEN_CHANNEL\' | translate }}\n </a>\n </li>\n </ul>\n </div>\n <!-- /.navbar-collapse -->\n </nav>\n </div>\n <div ui-view></div>\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/dashboard/fax/fax.html",'<div data-ng-switch="Auth.getRole()">\n <div ng-switch-when="agent" data-ng-init="initAgent()">\n <div class="row" style="padding-bottom:10px;">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div ui-grid="table1" ui-grid-resize-columns ui-grid-auto-resize class="ui-grid">\n <div class="watermark" data-ng-show="!table1.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n\n <div class="row" style="padding-bottom:10px;">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div ui-grid="table2" ui-grid-resize-columns ui-grid-auto-resize class="ui-grid">\n <div class="watermark" data-ng-show="!table2.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n </div>\n <div ng-switch-default>\n <fieldset>\n <legend>\n <span class="caption-subject"> </span><small class="pull-right font-grey-cascade">{{ \'APPLICATION_TODAY_STATS\' | translate }}</small>\n </legend>\n <div class="row">\n <div class="col-md-8">\n <div class="row">\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" data-ng-init="initWidget(\'new\')">\n <div class="dashboard-stat green-haze">\n <div class="visual">\n <i class="fa fa-play"></i>\n </div>\n <div class="details">\n <div class="number">\n {{new || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_DASHBOARD_NEW\' | translate}}\n </div>\n </div>\n </div>\n </div>\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" data-ng-init="initWidget(\'open\')">\n <div class="dashboard-stat blue-madison">\n <div class="visual">\n <i class="icon-bell"></i>\n </div>\n <div class="details">\n <div class="number">\n {{open || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_DASHBOARD_OPEN\' | translate}}\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class ="row">\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" data-ng-init="initWidget(\'pending\')">\n <div class="dashboard-stat green">\n <div class="visual">\n <i class="icon-options"></i>\n </div>\n <div class="details">\n <div class="number">\n {{pending || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_DASHBOARD_PENDING\' | translate}}\n </div>\n </div>\n </div>\n </div>\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" data-ng-init="initWidget(\'closed\')">\n <div class="dashboard-stat purple-plum">\n <div class="visual">\n <i class="icon-like"></i>\n </div>\n <div class="details">\n <div class="number">\n {{closed || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_DASHBOARD_CLOSED\' | translate}}\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class ="row">\n <div class="col-lg-12 col-md-12 col-sm-12 col-xs-12" >\n <div class="dashboard-stat yellow-casablanca">\n <div class="visual">\n <i class="icon-calculator"></i>\n </div>\n <div class="details">\n <div class="number">\n {{new+open+pending+closed || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_TOTAL\' | translate}}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class="col-md-4">\n <!-- <div class="portlet light bordered">\n <div class="portlet-body"> -->\n <canvas class="chart chart-pie" chart-data="charts.interactions.values" chart-labels="charts.interactions.labels" chart-colours="charts.interactions.colours" chart-legend="true">\n </canvas>\n <!-- </div>\n </div> -->\n </div>\n </div>\n <legend>\n <span class="caption-subject"> </span><small class="pull-right font-grey-cascade">{{ \'APPLICATION_INTERACTION_STATS\' | translate }}</small>\n </legend>\n <div class="row">\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" data-ng-init="initWidget(\'timeout\')">\n <div class="dashboard-stat red-intense">\n <div class="visual">\n <i class="icon-dislike"></i>\n </div>\n <div class="details">\n <div class="number">\n {{timeout || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_TIMEOUT\' | translate}}\n </div>\n </div>\n </div>\n </div>\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" data-ng-init="initWidget(\'waiting\')">\n <div class="dashboard-stat purple">\n <div class="visual">\n <i class="icon-hourglass"></i>\n </div>\n <div class="details">\n <div class="number">\n {{waiting || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_WAITING\' | translate}}\n </div>\n </div>\n </div>\n </div>\n </div>\n </fieldset>\n\n </div>\n</div>\n'), -a.put("app/dashboard/mail/mail.html",'<div data-ng-switch="Auth.getRole()">\n <div ng-switch-when="agent" data-ng-init="initAgent()">\n <div class="row" style="padding-bottom:10px;">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div ui-grid="table1" ui-grid-resize-columns ui-grid-auto-resize class="ui-grid">\n <div class="watermark" data-ng-show="!table1.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n\n <div class="row" style="padding-bottom:10px;">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div ui-grid="table2" ui-grid-resize-columns ui-grid-auto-resize class="ui-grid">\n <div class="watermark" data-ng-show="!table2.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n </div>\n <div ng-switch-default>\n <fieldset>\n <legend>\n <span class="caption-subject"> </span><small class="pull-right font-grey-cascade">{{ \'APPLICATION_TODAY_STATS\' | translate }}</small>\n </legend>\n <div class="row">\n <div class="col-md-8">\n <div class="row">\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" data-ng-init="initWidget(\'new\')">\n <div class="dashboard-stat green-haze">\n <div class="visual">\n <i class="fa fa-play"></i>\n </div>\n <div class="details">\n <div class="number">\n {{new || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_DASHBOARD_NEW\' | translate}}\n </div>\n </div>\n </div>\n </div>\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" data-ng-init="initWidget(\'open\')">\n <div class="dashboard-stat blue-madison">\n <div class="visual">\n <i class="icon-bell"></i>\n </div>\n <div class="details">\n <div class="number">\n {{open || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_DASHBOARD_OPEN\' | translate}}\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class ="row">\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" data-ng-init="initWidget(\'pending\')">\n <div class="dashboard-stat green">\n <div class="visual">\n <i class="icon-options"></i>\n </div>\n <div class="details">\n <div class="number">\n {{pending || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_DASHBOARD_PENDING\' | translate}}\n </div>\n </div>\n </div>\n </div>\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" data-ng-init="initWidget(\'closed\')">\n <div class="dashboard-stat purple-plum">\n <div class="visual">\n <i class="icon-like"></i>\n </div>\n <div class="details">\n <div class="number">\n {{closed || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_DASHBOARD_CLOSED\' | translate}}\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class ="row">\n <div class="col-lg-12 col-md-12 col-sm-12 col-xs-12" >\n <div class="dashboard-stat yellow-casablanca">\n <div class="visual">\n <i class="icon-calculator"></i>\n </div>\n <div class="details">\n <div class="number">\n {{new+open+pending+closed || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_TOTAL\' | translate}}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class="col-md-4">\n <!-- <div class="portlet light bordered">\n <div class="portlet-body"> -->\n <canvas class="chart chart-pie" chart-data="charts.interactions.values" chart-labels="charts.interactions.labels" chart-colours="charts.interactions.colours" chart-legend="true">\n </canvas>\n <!-- </div>\n </div> -->\n </div>\n </div>\n <legend>\n <span class="caption-subject"> </span><small class="pull-right font-grey-cascade">{{ \'APPLICATION_INTERACTION_STATS\' | translate }}</small>\n </legend>\n <div class="row">\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" data-ng-init="initWidget(\'timeout\')">\n <div class="dashboard-stat red-intense">\n <div class="visual">\n <i class="icon-dislike"></i>\n </div>\n <div class="details">\n <div class="number">\n {{timeout || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_TIMEOUT\' | translate}}\n </div>\n </div>\n </div>\n </div>\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" data-ng-init="initWidget(\'waiting\')">\n <div class="dashboard-stat purple">\n <div class="visual">\n <i class="icon-hourglass"></i>\n </div>\n <div class="details">\n <div class="number">\n {{waiting || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_WAITING\' | translate}}\n </div>\n </div>\n </div>\n </div>\n </div>\n </fieldset>\n\n </div>\n</div>\n'),a.put("app/dashboard/openchannel/openchannel.html",'<div data-ng-switch="Auth.getRole()">\n <div ng-switch-when="agent" data-ng-init="initAgent()">\n <div class="row" style="padding-bottom:10px;">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div ui-grid="table1" ui-grid-resize-columns ui-grid-auto-resize class="ui-grid">\n <div class="watermark" data-ng-show="!table1.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n\n <div class="row" style="padding-bottom:10px;">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div ui-grid="table2" ui-grid-resize-columns ui-grid-auto-resize class="ui-grid">\n <div class="watermark" data-ng-show="!table2.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n </div>\n <div ng-switch-default>\n <fieldset>\n <legend>\n <span class="caption-subject"> </span><small class="pull-right font-grey-cascade">{{ \'APPLICATION_TODAY_STATS\' | translate }}</small>\n </legend>\n <div class="row">\n <div class="col-md-8">\n <div class="row">\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" data-ng-init="initWidget(\'new\')">\n <div class="dashboard-stat green-haze">\n <div class="visual">\n <i class="fa fa-play"></i>\n </div>\n <div class="details">\n <div class="number">\n {{new || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_DASHBOARD_NEW\' | translate}}\n </div>\n </div>\n </div>\n </div>\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" data-ng-init="initWidget(\'open\')">\n <div class="dashboard-stat blue-madison">\n <div class="visual">\n <i class="icon-bell"></i>\n </div>\n <div class="details">\n <div class="number">\n {{open || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_DASHBOARD_OPEN\' | translate}}\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class ="row">\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" data-ng-init="initWidget(\'pending\')">\n <div class="dashboard-stat green">\n <div class="visual">\n <i class="icon-options"></i>\n </div>\n <div class="details">\n <div class="number">\n {{pending || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_DASHBOARD_PENDING\' | translate}}\n </div>\n </div>\n </div>\n </div>\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" data-ng-init="initWidget(\'closed\')">\n <div class="dashboard-stat purple-plum">\n <div class="visual">\n <i class="icon-like"></i>\n </div>\n <div class="details">\n <div class="number">\n {{closed || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_DASHBOARD_CLOSED\' | translate}}\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class ="row">\n <div class="col-lg-12 col-md-12 col-sm-12 col-xs-12" >\n <div class="dashboard-stat yellow-casablanca">\n <div class="visual">\n <i class="icon-calculator"></i>\n </div>\n <div class="details">\n <div class="number">\n {{new+open+pending+closed || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_TOTAL\' | translate}}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class="col-md-4">\n <!-- <div class="portlet light bordered">\n <div class="portlet-body"> -->\n <canvas class="chart chart-pie" chart-data="charts.interactions.values" chart-labels="charts.interactions.labels" chart-colours="charts.interactions.colours" chart-legend="true">\n </canvas>\n <!-- </div>\n </div> -->\n </div>\n </div>\n <legend>\n <span class="caption-subject"> </span><small class="pull-right font-grey-cascade">{{ \'APPLICATION_INTERACTION_STATS\' | translate }}</small>\n </legend>\n <div class="row">\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" data-ng-init="initWidget(\'timeout\')">\n <div class="dashboard-stat red-intense">\n <div class="visual">\n <i class="icon-dislike"></i>\n </div>\n <div class="details">\n <div class="number">\n {{timeout || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_TIMEOUT\' | translate}}\n </div>\n </div>\n </div>\n </div>\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" data-ng-init="initWidget(\'waiting\')">\n <div class="dashboard-stat purple">\n <div class="visual">\n <i class="icon-hourglass"></i>\n </div>\n <div class="details">\n <div class="number">\n {{waiting || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_WAITING\' | translate}}\n </div>\n </div>\n </div>\n </div>\n </div>\n </fieldset>\n\n </div>\n</div>\n'),a.put("app/dashboard/sms/sms.html",'<div data-ng-switch="Auth.getRole()">\n <div ng-switch-when="agent" data-ng-init="initAgent()">\n <div class="row" style="padding-bottom:10px;">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div ui-grid="table1" ui-grid-resize-columns ui-grid-auto-resize class="ui-grid">\n <div class="watermark" data-ng-show="!table1.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n\n <div class="row" style="padding-bottom:10px;">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div ui-grid="table2" ui-grid-resize-columns ui-grid-auto-resize class="ui-grid">\n <div class="watermark" data-ng-show="!table2.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n </div>\n <div ng-switch-default>\n <fieldset>\n <legend>\n <span class="caption-subject"> </span><small class="pull-right font-grey-cascade">{{ \'APPLICATION_TODAY_STATS\' | translate }}</small>\n </legend>\n <div class="row">\n <div class="col-md-8">\n <div class="row">\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" data-ng-init="initWidget(\'new\')">\n <div class="dashboard-stat green-haze">\n <div class="visual">\n <i class="fa fa-play"></i>\n </div>\n <div class="details">\n <div class="number">\n {{new || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_DASHBOARD_NEW\' | translate}}\n </div>\n </div>\n </div>\n </div>\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" data-ng-init="initWidget(\'open\')">\n <div class="dashboard-stat blue-madison">\n <div class="visual">\n <i class="icon-bell"></i>\n </div>\n <div class="details">\n <div class="number">\n {{open || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_DASHBOARD_OPEN\' | translate}}\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class ="row">\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" data-ng-init="initWidget(\'pending\')">\n <div class="dashboard-stat green">\n <div class="visual">\n <i class="icon-options"></i>\n </div>\n <div class="details">\n <div class="number">\n {{pending || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_DASHBOARD_PENDING\' | translate}}\n </div>\n </div>\n </div>\n </div>\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" data-ng-init="initWidget(\'closed\')">\n <div class="dashboard-stat purple-plum">\n <div class="visual">\n <i class="icon-like"></i>\n </div>\n <div class="details">\n <div class="number">\n {{closed || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_DASHBOARD_CLOSED\' | translate}}\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class ="row">\n <div class="col-lg-12 col-md-12 col-sm-12 col-xs-12" >\n <div class="dashboard-stat yellow-casablanca">\n <div class="visual">\n <i class="icon-calculator"></i>\n </div>\n <div class="details">\n <div class="number">\n {{new+open+pending+closed || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_TOTAL\' | translate}}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class="col-md-4">\n <!-- <div class="portlet light bordered">\n <div class="portlet-body"> -->\n <canvas class="chart chart-pie" chart-data="charts.interactions.values" chart-labels="charts.interactions.labels" chart-colours="charts.interactions.colours" chart-legend="true">\n </canvas>\n <!-- </div>\n </div> -->\n </div>\n </div>\n <legend>\n <span class="caption-subject"> </span><small class="pull-right font-grey-cascade">{{ \'APPLICATION_INTERACTION_STATS\' | translate }}</small>\n </legend>\n <div class="row">\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" data-ng-init="initWidget(\'timeout\')">\n <div class="dashboard-stat red-intense">\n <div class="visual">\n <i class="icon-dislike"></i>\n </div>\n <div class="details">\n <div class="number">\n {{timeout || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_TIMEOUT\' | translate}}\n </div>\n </div>\n </div>\n </div>\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" data-ng-init="initWidget(\'waiting\')">\n <div class="dashboard-stat purple">\n <div class="visual">\n <i class="icon-hourglass"></i>\n </div>\n <div class="details">\n <div class="number">\n {{waiting || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_WAITING\' | translate}}\n </div>\n </div>\n </div>\n </div>\n </div>\n </fieldset>\n\n </div>\n</div>\n'),a.put("app/dashboard/voice/voice.html",'<div data-ng-switch="Auth.getRole()">\n <div ng-switch-when="agent" data-ng-init="initAgent()">\n <div class="portlet light">\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="table1" name="table1" ui-grid-resize-columns ui-grid-pagination ui-grid-auto-resize class="ui-grid">\n <div class="watermark" data-ng-show="!table1.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_a" data-toggle="tab">{{\'APPLICATION_WAITING\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_b" data-toggle="tab">{{\'APPLICATION_ABANDONED\' | translate}}</a>\n </li>\n </ul>\n </div>\n <div class="portlet-body" data-ng-init="initView()">\n <div class="tab-content">\n <div class="tab-pane active" id="tab_1_a">\n <!-- START TABLE -->\n <div ui-grid="table2" name="table2" ui-grid-resize-columns ui-grid-auto-resize class="ui-grid">\n <div class="watermark" data-ng-show="!table2.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n <div class="tab-pane" id="tab_1_b">\n <!-- START TABLE -->\n <div ui-grid="table3" name="table3" ui-grid-resize-columns ui-grid-pagination ui-grid-auto-resize class="ui-grid">\n <div class="watermark" data-ng-show="!table3.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n </div>\n </div>\n</div>\n <div ng-switch-default data-ng-init="initUser()">\n <fieldset>\n <legend>\n <span class="caption-subject">{{ \'APPLICATION_INBOUND\' | translate }}</span><small class="font-grey-cascade pull-right">{{ \'APPLICATION_TODAY_STATS\' | translate }}</small>\n </legend>\n\n <div class="row">\n <div class="col-lg-3 col-md-3 col-sm-6 col-xs-12">\n <div class="dashboard-stat blue-madison">\n <div class="visual">\n <i class="icon-bell"></i>\n </div>\n <div class="details">\n <div class="number">\n {{ voice.waiting || 0 }}\n </div>\n <div class="desc">\n {{\'APPLICATION_WAITING\' | translate}}\n </div>\n </div>\n </div>\n </div>\n <div class="col-lg-3 col-md-3 col-sm-6 col-xs-12">\n <div class="dashboard-stat purple-plum">\n <div class="visual">\n <i class="fa fa-play"></i>\n </div>\n <div class="details">\n <div class="number">\n {{ voice.active || 0 }}\n </div>\n <div class="desc">\n {{\'APPLICATION_ACTIVE\' | translate}}\n </div>\n </div>\n </div>\n </div>\n <div class="col-lg-3 col-md-3 col-sm-6 col-xs-12">\n <div class="dashboard-stat green-haze">\n <div class="visual">\n <i class="icon-like"></i>\n </div>\n <div class="details">\n <div class="number">\n {{ voice.complete || 0 }}\n </div>\n <div class="desc">\n {{\'APPLICATION_ANSWERED\' | translate}}\n </div>\n </div>\n </div>\n </div>\n <div class="col-lg-3 col-md-3 col-sm-6 col-xs-12">\n <div class="dashboard-stat red-intense">\n <div class="visual">\n <i class="icon-dislike"></i>\n </div>\n <div class="details">\n <div class="number">\n {{ voice.abandon || 0 }}\n </div>\n <div class="desc">\n {{\'APPLICATION_ABANDONED\' | translate}}\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class="row">\n <div class="col-lg-3 col-md-3 col-sm-6 col-xs-12">\n <div class="dashboard-stat blue-madison">\n <div class="visual">\n <i class="icon-clock"></i>\n </div>\n <div class="details">\n <div class="number">\n {{ (voice.avgAnswerTime || 0) | secToTime | date:\'HH:mm:ss\' }}\n </div>\n <div class="desc">\n {{\'APPLICATION_AVG_ANSWER_TIME\' | translate}}\n </div>\n </div>\n </div>\n </div>\n <div class="col-lg-3 col-md-3 col-sm-6 col-xs-12">\n <div class="dashboard-stat purple-plum">\n <div class="visual">\n <i class="icon-clock"></i>\n </div>\n <div class="details">\n <div class="number">\n {{ (voice.avgTalkTime || 0) | secToTime | date:\'HH:mm:ss\' }}\n </div>\n <div class="desc">\n {{\'APPLICATION_AVG_TALK_TIME\' | translate}}\n </div>\n </div>\n </div>\n </div>\n <div class="col-lg-3 col-md-3 col-sm-6 col-xs-12">\n <div class="dashboard-stat green-haze">\n <div class="visual">\n <i class="icon-pie-chart"></i>\n </div>\n <div class="details">\n <div class="number">\n {{ (voice.answerRate || 0) | number:2}}\n </div>\n <div class="desc">\n {{\'APPLICATION_ANSWER_RATE\' | translate}} (%)\n </div>\n </div>\n </div>\n </div>\n <div class="col-lg-3 col-md-3 col-sm-6 col-xs-12">\n <div class="dashboard-stat red-intense">\n <div class="visual">\n <i class="icon-pie-chart"></i>\n </div>\n <div class="details">\n <div class="number">\n {{ (voice.abandonRate || 0) | number:2}}\n </div>\n <div class="desc">\n {{\'APPLICATION_ABANDON_RATE\' | translate}} (%)\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class="row">\n <div class="col-lg-6 col-md-6 col-sm-6 col-xs-12">\n <div class="dashboard-stat blue-madison">\n <div class="visual">\n <i class="icon-info"></i>\n </div>\n <div class="details">\n <div class="number">\n {{ voice.totalOffered || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_TOTAL_OFFERED\' | translate}}\n </div>\n </div>\n </div>\n </div>\n <div class="col-lg-6 col-md-6 col-sm-6 col-xs-12">\n <div class="dashboard-stat purple-plum">\n <div class="visual">\n <i class="icon-info"></i>\n </div>\n <div class="details">\n <div class="number">\n {{ voice.unmanaged || 0 }}\n </div>\n <div class="desc">\n {{\'APPLICATION_UNMANAGED\' | translate}}\n </div>\n </div>\n </div>\n </div>\n </div>\n </fieldset>\n\n <fieldset>\n <legend>\n <span class="caption-subject">{{ \'APPLICATION_OUTBOUND\' | translate }}</span><small class="pull-right font-grey-cascade">{{ \'APPLICATION_TODAY_STATS\' | translate }}</small>\n </legend>\n\n <div class="row">\n <div class="col-lg-3 col-md-3 col-sm-6 col-xs-12">\n <div class="dashboard-stat blue-madison">\n <div class="visual">\n <i class="icon-call-out"></i>\n </div>\n <div class="details">\n <div class="number">\n {{ voice.outbound.manualOutbound || 0 }}\n </div>\n <div class="desc">\n {{\'APPLICATION_MANUAL_OUTBOUND\' | translate}}\n </div>\n </div>\n </div>\n </div>\n <div class="col-lg-3 col-md-3 col-sm-6 col-xs-12">\n <div class="dashboard-stat purple-plum">\n <div class="visual">\n <i class="icon-clock"></i>\n </div>\n <div class="details">\n <div class="number">\n {{ (voice.outbound.globalDuration || 0) | secToTime | date:\'HH:mm:ss\' }}\n </div>\n <div class="desc">\n {{\'APPLICATION_GLOBAL_DURATION\' | translate}}\n </div>\n </div>\n </div>\n </div>\n <div class="col-lg-3 col-md-3 col-sm-6 col-xs-12">\n <div class="dashboard-stat green-haze">\n <div class="visual">\n <i class="icon-like"></i>\n </div>\n <div class="details">\n <div class="number">\n {{ voice.outbound.answered || 0 }}\n </div>\n <div class="desc">\n {{\'APPLICATION_ANSWERED\' | translate}}\n </div>\n </div>\n </div>\n </div>\n <div class="col-lg-3 col-md-3 col-sm-6 col-xs-12">\n <div class="dashboard-stat red-intense">\n <div class="visual">\n <i class="icon-pie-chart"></i>\n </div>\n <div class="details">\n <div class="number">\n {{ (voice.outbound.avgDuration || 0) | secToTime | date:\'HH:mm:ss\' }}\n </div>\n <div class="desc">\n {{\'APPLICATION_AVG_DURATION\' | translate}} (%)\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class="row">\n <div class="col-lg-12 col-md-12 col-sm-12 col-xs-12">\n <div class="dashboard-stat blue-madison">\n <div class="visual">\n <i class="icon-pie-chart"></i>\n </div>\n <div class="details">\n <div class="number">\n {{ (voice.outbound.answerRate || 0) | number:2 }}\n </div>\n <div class="desc">\n {{\'APPLICATION_ANSWER_RATE\' | translate}} (%)\n </div>\n </div>\n </div>\n </div>\n </div>\n\n </fieldset>\n </div>\n</div>\n'),a.put("app/desk/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-handbag"></i>\n <a href="/desk/list">{{ \'APPLICATION_DESK_COM\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-handbag font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_DESK_COM\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="accounts.checked.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <a class="btn green-jungle" href="/desk/wizard">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_ACCOUNT\' | translate }}\n </a>\n </div>\n <a class="btn btn-icon-only btn-default" href="#" ng-csv="getAccounts([\'name\',\'username\',\'remoteUri\',\'authType\',\'consumerKey\',\'consumerSecret\',\'token\',\'tokenSecret\',\'password\'])" csv-header="[\'Name\', \'Username\', \'Remote Address\', \'Authentication Type\', \'Consumer Key\', \'Consumer Secret\', \'Token\', \'Token Secret\', \'Password\']" field-separator=";" filename="desk_accounts.csv">\n <i class="icon-cloud-download"></i></a>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <table st-table="displayedDeskAccounts" st-pipe="initList" class="table table-striped table-bordered table-hover">\n <div class="table-responsive">\n <thead>\n <tr>\n <th colspan="7">\n <div class="row">\n <div class="col-md-6">\n <ui-select class="input-xsmall" ng-model="conf.accountsByPage" theme="bootstrap" ng-disabled="disabled">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="accountByPage in accountsByPage | filter: $select.search">\n <div ng-bind-html="accountByPage.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <div class="col-md-6">\n <div class="input-group input-medium pull-right">\n <input st-search placeholder="{{ \'APPLICATION_SEARCH\' | translate }}" class="form-control" type="search" />\n <span class="input-group-addon">\n <i class="fa fa-search"></i>\n </span>\n </div>\n </div>\n </div>\n </th>\n </tr>\n <tr>\n <th class="small-cells" style="text-align: center; vertical-align: middle"><input type="checkbox" ng-change="check(account, checked)" checklist-model checklist-value="id"></th>\n <th st-sort="name">{{ \'APPLICATION_NAME\' | translate }}</th>\n <th st-sort="username">{{ \'APPLICATION_EMAIL\' | translate }}</th>\n <th st-sort="remoteUri">{{ \'APPLICATION_REMOTE_ADDRESS\' | translate }}</th>\n <th>{{ \'APPLICATION_DESCRIPTION\' | translate }}</th>\n <th>{{ \'APPLICATION_ACTIONS\' | translate }}</th>\n </tr>\n </thead>\n <tbody>\n <tr data-ng-repeat="account in displayedDeskAccounts" class="animate-repeat">\n <td style="text-align: center; vertical-align: middle"><input type="checkbox" checklist-model="accounts.checked" checklist-value="account.id"></td>\n <td>{{account.name}}</td>\n <td>{{account.username}}</td>\n <td>{{account.remoteUri}}</td>\n <td>{{account.description}}</td>\n <td>\n <a class="btn default btn-xs blue-stripe" data-ng-href="/desk/view/{{account.id}}/account">\n {{ \'APPLICATION_EDIT\' | translate }}\n </a>\n <a class="btn default btn-xs green-stripe" data-ng-click="checkAccount(account.id)">\n {{ \'APPLICATION_CHECK\' | translate }}\n </a>\n <a class="btn default btn-xs red-stripe" data-ng-click="deleteItem(account.name,account.id)">\n {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </td>\n </tr>\n <tr data-ng-hide="displayedDeskAccounts.length">\n <td colspan="7" style="text-align:center;">\n <i>No account available</i>\n </td>\n </tr>\n </tbody>\n <tfoot>\n <tr>\n <td/>\n <td>\n <div class="input-icon right">\n <i class="fa fa-search"></i>\n <input st-search="name" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_NAME\' | translate | lowercase}}" class="form-control" type="search"/>\n </div>\n </td>\n <td>\n <div class="input-icon right">\n <i class="fa fa-search"></i>\n <input st-search="email" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_EMAIL\' | translate | lowercase}}" class="form-control" type="search"/>\n </div>\n </td>\n <td>\n <div class="input-icon right">\n <i class="fa fa-search"></i>\n <input st-search="remoteUri" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_REMOTE_ADDRESS\' | translate | lowercase}}" class="form-control" type="search"/>\n </div>\n </td>\n <td/>\n <td/>\n </tr>\n <tr>\n <td colspan="7" class="text-center">\n <div class="pagination" st-pagination st-items-by-page="conf.accountsByPage.value" st-displayed-pages="7"></div>\n </td>\n </tr>\n </tfoot>\n </div>\n </table>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'), -a.put("app/desk/view/view.account.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_ACCOUNT\' | translate}}</span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_GENERALS\' | translate}}</a>\n </li>\n </ul>\n </div>\n <div class="portlet-body">\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.formSetting" data-ng-submit="forms.formSetting.$valid && updateItem()" novalidate>\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="account.name" required/>\n <span data-ng-show="forms.formSetting.name.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="account.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n <!-- START USERNAME -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.username.$invalid}">\n <label class="control-label">{{\'APPLICATION_USERNAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="username" placeholder="{{\'APPLICATION_USERNAME\' | translate}}" class="form-control" data-ng-model="account.username" required/>\n <span data-ng-show="forms.formSetting.username.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n\n <!-- START REMOTE ADDRESS -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.remoteUri.$invalid}">\n <label class="control-label">{{\'APPLICATION_REMOTE_ADDRESS\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="url" name="remoteUri" placeholder="{{\'APPLICATION_REMOTE_ADDRESS\' | translate}}" class="form-control" data-ng-model="account.remoteUri" required />\n <span data-ng-show="forms.formSetting.remoteUri.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n\n <!-- START AUTH TYPE -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.authType.$invalid}">\n <label class="control-label">{{\'APPLICATION_AUTHENTICATION_TYPE\' | translate}}</label>\n <ui-select data-ng-model="account.authType" name="authType" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_AUTHENTICATION_TYPE\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n <ui-select-choices repeat="type in [\'basic\', \'oauth\'] | filter: $select.search">\n <div data-ng-bind="type | capitalize | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.formSetting.authType.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- START AUTH TYPE -->\n\n <!-- START PASSWORD -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.password.$invalid}" ng-slide-down="account.authType == \'basic\'" lazy-render duration="1">\n <label class="control-label">{{\'APPLICATION_PASSWORD\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="password" name="password" placeholder="{{\'APPLICATION_PASSWORD\' | translate}}" class="form-control" data-ng-model="account.password" required/>\n <span data-ng-show="forms.formSetting.password.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PASSWORD -->\n\n <!-- START CONSUMER KEY -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.consumerKey.$invalid}" ng-slide-down="account.authType == \'oauth\'" lazy-render duration="1">\n <label class="control-label">{{\'APPLICATION_CONSUMER_KEY\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="consumerKey" placeholder="{{\'APPLICATION_CONSUMER_KEY\' | translate}}" class="form-control" data-ng-model="account.consumerKey" required/>\n <span data-ng-show="forms.formSetting.consumerKey.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CONSUMER KEY -->\n\n <!-- START CONSUMER SECRET -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.consumerSecret.$invalid}" ng-slide-down="account.authType == \'oauth\'" lazy-render duration="1">\n <label class="control-label">{{\'APPLICATION_CONSUMER_SECRET\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="consumerSecret" placeholder="{{\'APPLICATION_CONSUMER_SECRET\' | translate}}" class="form-control" data-ng-model="account.consumerSecret" required/>\n <span data-ng-show="forms.formSetting.consumerSecret.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CONSUMER SECRET -->\n\n <!-- START TOKEN -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.token.$invalid}" ng-slide-down="account.authType == \'oauth\'" lazy-render duration="1">\n <label class="control-label">{{\'APPLICATION_TOKEN\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="token" placeholder="{{\'APPLICATION_TOKEN\' | translate}}" class="form-control" data-ng-model="account.token" required/>\n <span data-ng-show="forms.formSetting.token.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TOKEN -->\n\n <!-- START TOKEN SECRET-->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.tokenSecret.$invalid}" ng-slide-down="account.authType == \'oauth\'" lazy-render duration="1">\n <label class="control-label">{{\'APPLICATION_TOKEN_SECRET\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="tokenSecret" placeholder="{{\'APPLICATION_TOKEN_SECRET\' | translate}}" class="form-control" data-ng-model="account.tokenSecret" required/>\n <span data-ng-show="forms.formSetting.tokenSecret.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TOKEN SECRET-->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END GENERAL TAB -->\n\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/desk/view/view.configuration.html",'<div class="row" data-ng-init="initConfiguration()">\n <div class="col-md-12">\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-notebook font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_CONFIGURATION\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="createConfiguration()">\n <wz-step title="{{\'APPLICATION_SETTINGS\' | translate}}" canexit="formValidation(formsConfiguration.info.$valid)">\n <form name="formsConfiguration.info" novalidate>\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': formsConfiguration.info.$submitted && formsConfiguration.info.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="configuration.name" required/>\n <span data-ng-show="formsConfiguration.info.name.$invalid && formsConfiguration.info.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="configuration.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" data-ng-click="goNext()"/>\n </form>\n </wz-step>\n\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n <input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n </wz-step>\n </wizard>\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/desk/view/view.configurationSettings.html",'<div class="row" data-ng-init="getConfiguration();getVariables();getFields();">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_CONFIGURATION\' | translate}}: {{configurationName}}</span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_SUBJECT\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_2" data-toggle="tab">{{\'APPLICATION_DESCRIPTION\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_3" data-toggle="tab">{{\'APPLICATION_FIELDS\' | translate}}</a>\n </li>\n </ul>\n </div>\n <div class="portlet-body">\n <div class="tab-content">\n <!-- SUBJECT TAB -->\n <div class="tab-pane ui-padding active" id="tab_1_1">\n <div class="row">\n <div class="col-md-11">\n <span class="caption-subject">All following fields will be join by blank space:</span>\n </div>\n <div class="col-md-1 pull-rigth">\n <button class="btn btn-icon-only green" data-ng-click="addItemSubject()"><i class="fa fa-plus"></i></button>\n </div>\n </div>\n <hr>\n <!-- <div ng-scrollbars ng-scrollbars-config="config"> -->\n <div class="row" data-ng-repeat="subjectItem in subjectConfig">\n <div class="col-md-3">\n <ui-select ng-model="subjectItem.type" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeType(subjectItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n <ui-select-choices repeat="item in fieldType | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search | capitalize"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <div class="col-md-8" data-ng-if="subjectItem.type==\'string\'">\n <div class="form-group">\n <input type="text" class="form-control" data-ng-model="subjectItem.content" data-ng-change="updateField(subjectItem)">\n </div>\n </div>\n <div class="col-md-8" data-ng-if="subjectItem.type==\'variable\'">\n <div class="form-group">\n <ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="subjectItem.VariableId" data-ng-change="updateField(subjectItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="variable.id as variable in variables | filter: $select.search">\n <div ng-bind-html="variable.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <div class="col-md-1">\n <div class="form-group">\n <button class="btn btn-icon-only red" data-ng-click="removeItem(subjectItem)"><i class="fa fa-times"></i></button>\n </div>\n </div>\n </div>\n <!-- </div> -->\n </div>\n <!-- END SUBJECT TAB -->\n <!-- DESCRIPTION TAB -->\n <div class="tab-pane ui-padding" id="tab_1_2">\n <div class="row">\n <div class="col-md-11">\n <span class="caption-subject">All following fields will be join by new line:</span>\n </div>\n <div class="col-md-1 pull-rigth">\n <button class="btn btn-icon-only green" data-ng-click="addItemDescription()"><i class="fa fa-plus"></i></button>\n </div>\n </div>\n <hr>\n <!-- <div ng-scrollbars ng-scrollbars-config="config"> -->\n <div class="row" data-ng-repeat="descriptionItem in descriptionConfig">\n <!-- <pre>\n {{descriptionItem|json}}\n </pre> -->\n <div class="col-md-2">\n <ui-select ng-model="descriptionItem.type" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeDescType(descriptionItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected | ucfirst}}</ui-select-match>\n <ui-select-choices repeat="item in descFieldType | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search | ucfirst"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <div class="col-md-9" data-ng-if="descriptionItem.type==\'string\'">\n <div class="form-group">\n <input type="text" class="form-control" data-ng-model="descriptionItem.content" data-ng-change="updateField(descriptionItem)">\n </div>\n </div>\n <div class="col-md-3" data-ng-if="descriptionItem.type==\'key_value\'">\n <input type="text" class="form-control" placeholder="Key" data-ng-model="descriptionItem.key" data-ng-change="updateField(descriptionItem)">\n </div>\n <div class="col-md-3" data-ng-if="descriptionItem.type==\'key_value\'">\n <ui-select ng-model="descriptionItem.keyType" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeDescType(descriptionItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n <ui-select-choices repeat="item in fieldType | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search | capitalize"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <div class="col-md-3" data-ng-if="descriptionItem.type==\'key_value\' && descriptionItem.keyType==\'string\'">\n <input type="text" class="form-control" placeholder="Value" data-ng-model="descriptionItem.keyContent" data-ng-change="updateField(descriptionItem)">\n </div>\n <div class="col-md-3" data-ng-if="descriptionItem.type==\'key_value\' && descriptionItem.keyType==\'variable\'">\n <div class="form-group">\n <ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="descriptionItem.VariableId" data-ng-change="updateField(descriptionItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="variable.id as variable in variables | filter: $select.search">\n <div ng-bind-html="variable.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <div class="col-md-1">\n <div class="form-group">\n <button class="btn btn-icon-only red" data-ng-click="removeItem(descriptionItem)"><i class="fa fa-times"></i></button>\n </div>\n </div>\n </div>\n <!-- </div> -->\n </div>\n <!-- END DESCRIPTION TAB -->\n <!-- FIELDS TAB -->\n <div class="tab-pane ui-padding" id="tab_1_3">\n <div class="row">\n <div class="col-md-11">\n <span class="caption-subject">Add how to fill the fields present in your account:</span>\n </div>\n <div class="col-md-1 pull-rigth">\n <button class="btn btn-icon-only green" data-ng-click="addItemField()"><i class="fa fa-plus"></i></button>\n </div>\n </div>\n <hr>\n <!-- <div ng-scrollbars ng-scrollbars-config="config"> -->\n <div class="row" data-ng-repeat="fieldItem in fieldConfig">\n <div class="col-md-3">\n <ui-select ng-model="fieldItem.idField" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeFieldType(fieldItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.label}}</ui-select-match>\n <ui-select-choices repeat="item.id as item in accountFields | filter: $select.search">\n <div ng-bind-html="item.label | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <div class="col-md-8" data-ng-if="getSystemFieldOptions(fieldItem.idField)">\n <div class="form-group">\n <ui-select ng-model="fieldItem.content" theme="bootstrap" ng-disabled="disabled" data-ng-change="updateField(fieldItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="item in getSystemFieldOptions(fieldItem.idField) | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField)">\n <div class="form-group">\n <ui-select ng-model="fieldItem.type" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeType(fieldItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected | ucfirst}}</ui-select-match>\n <ui-select-choices repeat="item in fieldType | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search | ucfirst"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField) && fieldItem.type === \'string\'">\n <div class="form-group">\n <input type="text" class="form-control" data-ng-model="fieldItem.content" data-ng-change="updateField(fieldItem)">\n </div>\n </div>\n <div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField) && fieldItem.type === \'variable\'">\n <div class="form-group">\n <ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="fieldItem.VariableId" data-ng-change="updateField(fieldItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="variable.id as variable in variables | filter: $select.search">\n <div ng-bind-html="variable.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <div class="col-md-1">\n <div class="form-group">\n <button class="btn btn-icon-only red" data-ng-click="removeItem(fieldItem)"><i class="fa fa-times"></i></button>\n </div>\n </div>\n </div>\n <!-- </div> -->\n </div>\n <!-- END FIELDS TAB -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/desk/view/view.configurations.html",'<div ui-view class="profile-content">\n <div class="row" data-ng-init="getConfigurations()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_CONFIGURATIONS\' | translate}}</span>\n </div>\n <div class="actions">\n <div class="btn-group">\n <a class="btn green-jungle " href="/desk/view/{{account.id}}/configuration" data-toggle="dropdown">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_CONFIGURATION\' | translate }}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <table class="table table-striped table-bordered table-hover">\n <thead>\n <tr>\n <th>{{\'APPLICATION_NAME\' | translate}}</th>\n <th>{{\'APPLICATION_DESCRIPTION\' | translate}}</th>\n <th>{{ \'APPLICATION_ACTIONS\' | translate }}</th>\n </tr>\n </thead>\n <tbody>\n <tr data-ng-repeat="configuration in configurations">\n <td>{{configuration.name}}</td>\n <td>{{configuration.description}}</td>\n <td>\n <a class="btn default btn-xs blue-stripe" data-ng-href="/desk/view/{{account.id}}/configurations/settings/{{configuration.id}}">\n {{ \'APPLICATION_SETTINGS\' | translate}}\n </a>\n <a class="btn default btn-xs red-stripe" data-ng-click="deleteConfiguration(configuration.name,configuration.id)">\n {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </td>\n </tr>\n <tr data-ng-hide="configurations.length">\n <td colspan="5" style="text-align:center;">\n <i>No configuration available</i>\n </td>\n </tr>\n </tbody>\n </table>\n <!-- END TABLE -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/desk/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-handbag"></i>\n <a href="/desk/list">{{ \'APPLICATION_DESK_COM\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <a href="#">{{account.name}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img src="assets/images/media/desk.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{account.name}}\n </div>\n <div class="profile-usertitle-job">\n {{account.remoteUri}}\n </div>\n </div>\n <!-- END SIDEBAR USER TITLE -->\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.desk.view.account\')}">\n <a ng-href="/desk/view/{{account.id}}/account">\n <i class="icon-user"></i>\n {{ \'APPLICATION_ACCOUNT\' | translate }} </a>\n </li>\n <li data-ng-class="{active: $state.includes(\'main.desk.view.configurations\') || $state.is(\'main.desk.view.configuration\')}">\n <a ng-href="/desk/view/{{account.id}}/configurations">\n <i class="icon-settings"></i>\n {{ \'APPLICATION_CONFIGURATIONS\' | translate }} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/desk/wizard/wizard.html",'<!-- BEGIN PAGE HEADER-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-handbag"></i>\n <a href="/desk/list">{{ \'APPLICATION_DESK_COM\' | translate }}</a>\n </li>\n </ul>\n </div>\n </div>\n</div>\n<!-- END PAGE HEADER-->\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initWizard()">\n <div class="col-md-12">\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-notebook font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_ACCOUNT\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="createItem()">\n <wz-step title="{{\'APPLICATION_ACCOUNT_INFO\' | translate}}" canexit="exitValidation(forms.formSetting.$valid)">\n <form name="forms.formSetting" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="forms.formSetting.name.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n <!-- START USERNAME -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.username.$invalid}">\n <label class="control-label">{{\'APPLICATION_USERNAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="username" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.username" required ng-remote-validate="/api/desk/accounts/validate/username"/>\n <span data-ng-show="forms.formSetting.username.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.formSetting.username.$touched || forms.formSetting.$submitted) && forms.formSetting.username.$error.ngRemoteValidate" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_EXIST_USERNAME\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n\n\n <!-- START REMOTE ADDRESS -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.remoteUri.$invalid}">\n <label class="control-label">{{\'APPLICATION_REMOTE_ADDRESS\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="url" name="remoteUri" placeholder="{{\'APPLICATION_REMOTE_ADDRESS\' | translate}}" class="form-control" data-ng-model="item.remoteUri" required ng-remote-validate="/api/desk/accounts/validate/remoteUri"/>\n <span data-ng-show="forms.formSetting.remoteUri.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.formSetting.remoteUri.$touched || forms.formSetting.$submitted) && forms.formSetting.remoteUri.$error.ngRemoteValidate" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_EXIST_DOMAIN\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n\n <!-- START AUTH TYPE -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.authType.$invalid}">\n <label class="control-label">{{\'APPLICATION_AUTHENTICATION_TYPE\' | translate}}</label>\n <ui-select data-ng-model="item.authType" name="authType" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_AUTHENTICATION_TYPE\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n <ui-select-choices repeat="type in [\'basic\', \'oauth\'] | filter: $select.search">\n <div data-ng-bind="type | capitalize | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.formSetting.authType.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- START AUTH TYPE -->\n\n <!-- START PASSWORD -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.password.$invalid}" ng-slide-down="item.authType == \'basic\'" lazy-render duration="1">\n <label class="control-label">{{\'APPLICATION_PASSWORD\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="password" name="password" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.password" required/>\n <span data-ng-show="forms.formSetting.password.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PASSWORD -->\n\n <!-- START CONSUMER KEY -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.consumerKey.$invalid}" ng-slide-down="item.authType == \'oauth\'" lazy-render duration="1">\n <label class="control-label">{{\'APPLICATION_CONSUMER_KEY\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="consumerKey" placeholder="{{\'APPLICATION_CONSUMER_KEY\' | translate}}" class="form-control" data-ng-model="item.consumerKey" required/>\n <span data-ng-show="forms.formSetting.consumerKey.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CONSUMER KEY -->\n\n <!-- START CONSUMER SECRET -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.consumerSecret.$invalid}" ng-slide-down="item.authType == \'oauth\'" lazy-render duration="1">\n <label class="control-label">{{\'APPLICATION_CONSUMER_SECRET\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="consumerSecret" placeholder="{{\'APPLICATION_CONSUMER_SECRET\' | translate}}" class="form-control" data-ng-model="item.consumerSecret" required/>\n <span data-ng-show="forms.formSetting.consumerSecret.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CONSUMER SECRET -->\n\n <!-- START TOKEN -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.token.$invalid}" ng-slide-down="item.authType == \'oauth\'" lazy-render duration="1">\n <label class="control-label">{{\'APPLICATION_TOKEN\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="token" placeholder="{{\'APPLICATION_TOKEN\' | translate}}" class="form-control" data-ng-model="item.token" required/>\n <span data-ng-show="forms.formSetting.token.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TOKEN -->\n\n <!-- START TOKEN SECRET-->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.tokenSecret.$invalid}" ng-slide-down="item.authType == \'oauth\'" lazy-render duration="1">\n <label class="control-label">{{\'APPLICATION_TOKEN_SECRET\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="tokenSecret" placeholder="{{\'APPLICATION_TOKEN_SECRET\' | translate}}" class="form-control" data-ng-model="item.tokenSecret" required/>\n <span data-ng-show="forms.formSetting.tokenSecret.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TOKEN SECRET-->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" data-ng-click="next()"/>\n\n </form>\n </wz-step>\n\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n <input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n </wz-step>\n\n </wizard>\n\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'), -a.put("app/freshdesk/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-handbag"></i>\n <a href="/freshdesk/list">{{ \'APPLICATION_FRESHDESK\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-handbag font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_FRESHDESK\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="accounts.checked.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <a class="btn green-jungle" href="/freshdesk/wizard">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_ACCOUNT\' | translate }}\n </a>\n </div>\n <a class="btn btn-icon-only btn-default" href="#" ng-csv="getAccounts([\'name\',\'username\',\'remoteUri\',\'apiKey\'])" csv-header="[\'Name\', \'Username\', \'Remote Address\', \'Api Key\']" field-separator=";" filename="freshdesk_accounts.csv">\n <i class="icon-cloud-download"></i></a>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <table st-table="displayedFreshdeskAccounts" st-pipe="initList" class="table table-striped table-bordered table-hover">\n <div class="table-responsive">\n <thead>\n <tr>\n <th colspan="7">\n <div class="row">\n <div class="col-md-6">\n <ui-select class="input-xsmall" ng-model="conf.accountsByPage" theme="bootstrap" ng-disabled="disabled">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="accountByPage in accountsByPage | filter: $select.search">\n <div ng-bind-html="accountByPage.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <div class="col-md-6">\n <div class="input-group input-medium pull-right">\n <input st-search placeholder="{{ \'APPLICATION_SEARCH\' | translate }}" class="form-control" type="search" />\n <span class="input-group-addon">\n <i class="fa fa-search"></i>\n </span>\n </div>\n </div>\n </div>\n </th>\n </tr>\n <tr>\n <th class="small-cells" style="text-align: center; vertical-align: middle"><input type="checkbox" ng-change="check(account, checked)" checklist-model checklist-value="id"></th>\n <th st-sort="name">{{ \'APPLICATION_NAME\' | translate }}</th>\n <th st-sort="username">{{ \'APPLICATION_EMAIL\' | translate }}</th>\n <th st-sort="remoteUri">{{ \'APPLICATION_REMOTE_ADDRESS\' | translate }}</th>\n <th>{{ \'APPLICATION_DESCRIPTION\' | translate }}</th>\n <th>{{ \'APPLICATION_ACTIONS\' | translate }}</th>\n </tr>\n </thead>\n <tbody>\n <tr data-ng-repeat="account in displayedFreshdeskAccounts" class="animate-repeat">\n <td style="text-align: center; vertical-align: middle"><input type="checkbox" checklist-model="accounts.checked" checklist-value="account.id"></td>\n <td>{{account.name}}</td>\n <td>{{account.username}}</td>\n <td>{{account.remoteUri}}</td>\n <td>{{account.description}}</td>\n <td>\n <a class="btn default btn-xs blue-stripe" data-ng-href="/freshdesk/view/{{account.id}}/account">\n {{ \'APPLICATION_EDIT\' | translate }}\n </a>\n <a class="btn default btn-xs green-stripe" data-ng-click="checkAccount(account.id)">\n {{ \'APPLICATION_CHECK\' | translate }}\n </a>\n <a class="btn default btn-xs red-stripe" data-ng-click="deleteItem(account.name,account.id)">\n {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </td>\n </tr>\n <tr data-ng-hide="displayedFreshdeskAccounts.length">\n <td colspan="7" style="text-align:center;">\n <i>No account available</i>\n </td>\n </tr>\n </tbody>\n <tfoot>\n <tr>\n <td/>\n <td>\n <div class="input-icon right">\n <i class="fa fa-search"></i>\n <input st-search="name" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_NAME\' | translate | lowercase}}" class="form-control" type="search"/>\n </div>\n </td>\n <td>\n <div class="input-icon right">\n <i class="fa fa-search"></i>\n <input st-search="email" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_EMAIL\' | translate | lowercase}}" class="form-control" type="search"/>\n </div>\n </td>\n <td>\n <div class="input-icon right">\n <i class="fa fa-search"></i>\n <input st-search="remoteUri" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_REMOTE_ADDRESS\' | translate | lowercase}}" class="form-control" type="search"/>\n </div>\n </td>\n <td/>\n <td/>\n </tr>\n <tr>\n <td colspan="7" class="text-center">\n <div class="pagination" st-pagination st-items-by-page="conf.accountsByPage.value" st-displayed-pages="7"></div>\n </td>\n </tr>\n </tfoot>\n </div>\n </table>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/freshdesk/view/view.account.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_ACCOUNT\' | translate}}</span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_GENERALS\' | translate}}</a>\n </li>\n </ul>\n </div>\n <div class="portlet-body">\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.formSetting" data-ng-submit="forms.formSetting.$valid && updateItem()" novalidate>\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="account.name" required/>\n <span data-ng-show="forms.formSetting.name.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="account.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n <!-- START USERNAME -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.username.$invalid}">\n <label class="control-label">{{\'APPLICATION_USERNAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="username" placeholder="{{\'APPLICATION_USERNAME\' | translate}}" class="form-control" data-ng-model="account.username" required/>\n <span data-ng-show="forms.formSetting.username.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n\n <!-- START REMOTE ADDRESS -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.remoteUri.$invalid}">\n <label class="control-label">{{\'APPLICATION_REMOTE_ADDRESS\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="url" name="remoteUri" placeholder="{{\'APPLICATION_REMOTE_ADDRESS\' | translate}}" class="form-control" data-ng-model="account.remoteUri" required />\n <span data-ng-show="forms.formSetting.remoteUri.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n\n <!-- START API KEY -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.apiKey.$invalid}">\n <label class="control-label">{{\'APPLICATION_API_KEY\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="apiKey" placeholder="{{\'APPLICATION_API_KEY\' | translate}}" class="form-control" data-ng-model="account.apiKey" required/>\n <span data-ng-show="forms.formSetting.apiKey.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END API KEY -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END GENERAL TAB -->\n\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/freshdesk/view/view.configuration.html",'<div class="row" data-ng-init="initConfiguration()">\n <div class="col-md-12">\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-notebook font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_CONFIGURATION\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="createConfiguration()">\n <wz-step title="{{\'APPLICATION_SETTINGS\' | translate}}" canexit="formValidation(formsConfiguration.info.$valid)">\n <form name="formsConfiguration.info" novalidate>\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': formsConfiguration.info.$submitted && formsConfiguration.info.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="configuration.name" required/>\n <span data-ng-show="formsConfiguration.info.name.$invalid && formsConfiguration.info.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="configuration.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" data-ng-click="goNext()"/>\n </form>\n </wz-step>\n\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n <input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n </wz-step>\n </wizard>\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/freshdesk/view/view.configurationSettings.html",'<div class="row" data-ng-init="getConfiguration();getVariables();getFields();">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_CONFIGURATION\' | translate}}: {{configurationName}}</span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_SUBJECT\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_2" data-toggle="tab">{{\'APPLICATION_DESCRIPTION\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_3" data-toggle="tab">{{\'APPLICATION_FIELDS\' | translate}}</a>\n </li>\n </ul>\n </div>\n <div class="portlet-body">\n <div class="tab-content">\n <!-- SUBJECT TAB -->\n <div class="tab-pane ui-padding active" id="tab_1_1">\n <div class="row">\n <div class="col-md-11">\n <span class="caption-subject">All following fields will be join by blank space:</span>\n </div>\n <div class="col-md-1 pull-rigth">\n <button class="btn btn-icon-only green" data-ng-click="addItemSubject()"><i class="fa fa-plus"></i></button>\n </div>\n </div>\n <hr>\n <!-- <div ng-scrollbars ng-scrollbars-config="config"> -->\n <div class="row" data-ng-repeat="subjectItem in subjectConfig">\n <div class="col-md-3">\n <ui-select ng-model="subjectItem.type" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeType(subjectItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n <ui-select-choices repeat="item in fieldType | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search | capitalize"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <div class="col-md-8" data-ng-if="subjectItem.type==\'string\'">\n <div class="form-group">\n <input type="text" class="form-control" data-ng-model="subjectItem.content" data-ng-change="updateField(subjectItem)">\n </div>\n </div>\n <div class="col-md-8" data-ng-if="subjectItem.type==\'variable\'">\n <div class="form-group">\n <ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="subjectItem.VariableId" data-ng-change="updateField(subjectItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="variable.id as variable in variables | filter: $select.search">\n <div ng-bind-html="variable.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <div class="col-md-1">\n <div class="form-group">\n <button class="btn btn-icon-only red" data-ng-click="removeItem(subjectItem)"><i class="fa fa-times"></i></button>\n </div>\n </div>\n </div>\n <!-- </div> -->\n </div>\n <!-- END SUBJECT TAB -->\n <!-- DESCRIPTION TAB -->\n <div class="tab-pane ui-padding" id="tab_1_2">\n <div class="row">\n <div class="col-md-11">\n <span class="caption-subject">All following fields will be join by new line:</span>\n </div>\n <div class="col-md-1 pull-rigth">\n <button class="btn btn-icon-only green" data-ng-click="addItemDescription()"><i class="fa fa-plus"></i></button>\n </div>\n </div>\n <hr>\n <!-- <div ng-scrollbars ng-scrollbars-config="config"> -->\n <div class="row" data-ng-repeat="descriptionItem in descriptionConfig">\n <!-- <pre>\n {{descriptionItem|json}}\n </pre> -->\n <div class="col-md-2">\n <ui-select ng-model="descriptionItem.type" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeDescType(descriptionItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected | ucfirst}}</ui-select-match>\n <ui-select-choices repeat="item in descFieldType | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search | ucfirst"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <div class="col-md-9" data-ng-if="descriptionItem.type==\'string\'">\n <div class="form-group">\n <input type="text" class="form-control" data-ng-model="descriptionItem.content" data-ng-change="updateField(descriptionItem)">\n </div>\n </div>\n <div class="col-md-3" data-ng-if="descriptionItem.type==\'key_value\'">\n <input type="text" class="form-control" placeholder="Key" data-ng-model="descriptionItem.key" data-ng-change="updateField(descriptionItem)">\n </div>\n <div class="col-md-3" data-ng-if="descriptionItem.type==\'key_value\'">\n <ui-select ng-model="descriptionItem.keyType" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeDescType(descriptionItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n <ui-select-choices repeat="item in fieldType | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search | capitalize"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <div class="col-md-3" data-ng-if="descriptionItem.type==\'key_value\' && descriptionItem.keyType==\'string\'">\n <input type="text" class="form-control" placeholder="Value" data-ng-model="descriptionItem.keyContent" data-ng-change="updateField(descriptionItem)">\n </div>\n <div class="col-md-3" data-ng-if="descriptionItem.type==\'key_value\' && descriptionItem.keyType==\'variable\'">\n <div class="form-group">\n <ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="descriptionItem.VariableId" data-ng-change="updateField(descriptionItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="variable.id as variable in variables | filter: $select.search">\n <div ng-bind-html="variable.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <div class="col-md-1">\n <div class="form-group">\n <button class="btn btn-icon-only red" data-ng-click="removeItem(descriptionItem)"><i class="fa fa-times"></i></button>\n </div>\n </div>\n </div>\n <!-- </div> -->\n </div>\n <!-- END DESCRIPTION TAB -->\n <!-- FIELDS TAB -->\n <div class="tab-pane ui-padding" id="tab_1_3">\n <div class="row">\n <div class="col-md-11">\n <span class="caption-subject">Add how to fill the fields present in your account:</span>\n </div>\n <div class="col-md-1 pull-rigth">\n <button class="btn btn-icon-only green" data-ng-click="addItemField()"><i class="fa fa-plus"></i></button>\n </div>\n </div>\n <hr>\n <!-- <div ng-scrollbars ng-scrollbars-config="config"> -->\n <div class="row" data-ng-repeat="fieldItem in fieldConfig">\n <div class="col-md-3">\n <ui-select ng-model="fieldItem.idField" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeFieldType(fieldItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.label}}</ui-select-match>\n <ui-select-choices repeat="item.name as item in accountFields | filter: $select.search">\n <div ng-bind-html="item.label | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <div class="col-md-8" data-ng-if="getSystemFieldOptions(fieldItem.idField)">\n <div class="form-group">\n <ui-select ng-model="fieldItem.content" theme="bootstrap" ng-disabled="disabled" data-ng-change="updateField(fieldItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected[0]}}</ui-select-match>\n <ui-select-choices repeat="item[0] as item in getSystemFieldOptions(fieldItem.idField) | filter: $select.search">\n <div ng-bind-html="item[0] | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField)">\n <div class="form-group">\n <ui-select ng-model="fieldItem.type" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeType(fieldItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected | ucfirst}}</ui-select-match>\n <ui-select-choices repeat="item in fieldType | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search | ucfirst"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField) && fieldItem.type === \'string\'">\n <div class="form-group">\n <input type="text" class="form-control" data-ng-model="fieldItem.content" data-ng-change="updateField(fieldItem)">\n </div>\n </div>\n <div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField) && fieldItem.type === \'variable\'">\n <div class="form-group">\n <ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="fieldItem.VariableId" data-ng-change="updateField(fieldItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="variable.id as variable in variables | filter: $select.search">\n <div ng-bind-html="variable.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <div class="col-md-1">\n <div class="form-group">\n <button class="btn btn-icon-only red" data-ng-click="removeItem(fieldItem)"><i class="fa fa-times"></i></button>\n </div>\n </div>\n </div>\n <!-- </div> -->\n </div>\n <!-- END FIELDS TAB -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/freshdesk/view/view.configurations.html",'<div ui-view class="profile-content">\n <div class="row" data-ng-init="getConfigurations()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_CONFIGURATIONS\' | translate}}</span>\n </div>\n <div class="actions">\n <div class="btn-group">\n <a class="btn green-jungle " href="/freshdesk/view/{{account.id}}/configuration" data-toggle="dropdown">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_CONFIGURATION\' | translate }}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <table class="table table-striped table-bordered table-hover">\n <thead>\n <tr>\n <th>{{\'APPLICATION_NAME\' | translate}}</th>\n <th>{{\'APPLICATION_DESCRIPTION\' | translate}}</th>\n <th>{{ \'APPLICATION_ACTIONS\' | translate }}</th>\n </tr>\n </thead>\n <tbody>\n <tr data-ng-repeat="configuration in configurations">\n <td>{{configuration.name}}</td>\n <td>{{configuration.description}}</td>\n <td>\n <a class="btn default btn-xs blue-stripe" data-ng-href="/freshdesk/view/{{account.id}}/configurations/settings/{{configuration.id}}">\n {{ \'APPLICATION_SETTINGS\' | translate}}\n </a>\n <a class="btn default btn-xs red-stripe" data-ng-click="deleteConfiguration(configuration.name,configuration.id)">\n {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </td>\n </tr>\n <tr data-ng-hide="configurations.length">\n <td colspan="5" style="text-align:center;">\n <i>No configuration available</i>\n </td>\n </tr>\n </tbody>\n </table>\n <!-- END TABLE -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/freshdesk/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-handbag"></i>\n <a href="/freshdesk/list">{{ \'APPLICATION_FRESHDESK\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <a href="#">{{account.name}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img src="assets/images/media/freshdesk.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{account.name}}\n </div>\n <div class="profile-usertitle-job">\n {{account.remoteUri}}\n </div>\n </div>\n <!-- END SIDEBAR USER TITLE -->\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.freshdesk.view.account\')}">\n <a ng-href="/freshdesk/view/{{account.id}}/account">\n <i class="icon-user"></i>\n {{ \'APPLICATION_ACCOUNT\' | translate }} </a>\n </li>\n <li data-ng-class="{active: $state.includes(\'main.freshdesk.view.configurations\') || $state.is(\'main.freshdesk.view.configuration\')}">\n <a ng-href="/freshdesk/view/{{account.id}}/configurations">\n <i class="icon-settings"></i>\n {{ \'APPLICATION_CONFIGURATIONS\' | translate }} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/freshdesk/wizard/wizard.html",'<!-- BEGIN PAGE HEADER-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-handbag"></i>\n <a href="/freshdesk/list">{{ \'APPLICATION_FRESHDESK\' | translate }}</a>\n </li>\n </ul>\n </div>\n </div>\n</div>\n<!-- END PAGE HEADER-->\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initWizard()">\n <div class="col-md-12">\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-notebook font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_ACCOUNT\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="createItem()">\n <wz-step title="{{\'APPLICATION_ACCOUNT_INFO\' | translate}}" canexit="exitValidation(forms.formSetting.$valid)">\n <form name="forms.formSetting" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="forms.formSetting.name.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n <!-- START USERNAME -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.username.$invalid}">\n <label class="control-label">{{\'APPLICATION_USERNAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="username" placeholder="{{\'APPLICATION_USERNAME\' | translate}}" class="form-control" data-ng-model="item.username" required ng-remote-validate="/api/freshdesk/accounts/validate/username"/>\n <span data-ng-show="forms.formSetting.username.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.formSetting.username.$touched || forms.formSetting.$submitted) && forms.formSetting.username.$error.ngRemoteValidate" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_EXIST_USERNAME\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n\n\n <!-- START REMOTE ADDRESS -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.remoteUri.$invalid}">\n <label class="control-label">{{\'APPLICATION_REMOTE_ADDRESS\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="url" name="remoteUri" placeholder="{{\'APPLICATION_REMOTE_ADDRESS\' | translate}}" class="form-control" data-ng-model="item.remoteUri" required ng-remote-validate="/api/freshdesk/accounts/validate/remoteUri"/>\n <span data-ng-show="forms.formSetting.remoteUri.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.formSetting.remoteUri.$touched || forms.formSetting.$submitted) && forms.formSetting.remoteUri.$error.ngRemoteValidate" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_EXIST_DOMAIN\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n\n <!-- START API KEY -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.apiKey.$invalid}">\n <label class="control-label">{{\'APPLICATION_API_KEY\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="apiKey" placeholder="{{\'APPLICATION_API_KEY\' | translate}}" class="form-control" data-ng-model="item.apiKey" required/>\n <span data-ng-show="forms.formSetting.apiKey.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END API KEY -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" data-ng-click="next()"/>\n\n </form>\n </wz-step>\n\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n <input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n </wz-step>\n\n </wizard>\n\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'), -a.put("app/iframe/view/view.html",'<!-- BEGIN PAGE CONTENT-->\r\n<div class="row" data-ng-init="initView()">\r\n <div class="col-md-12">\r\n <div class="page-bar">\r\n <ul class="page-breadcrumb">\r\n <li>\r\n <i class="icon-rocket"></i>\r\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\r\n <i class="fa fa-angle-right"></i>\r\n </li>\r\n <li>\r\n <i class="fa fa-chrome"></i>\r\n <a href="#" data-ng-if="!Auth.isAgent()">{{ \'APPLICATION_IFRAME\' | translate }}</a>\r\n <a href="#" data-ng-if="Auth.isAgent()">{{ iframe.title || iframe.name}}</a>\r\n </li>\r\n </ul>\r\n </div>\r\n\r\n <!-- BEGIN PROFILE SIDEBAR -->\r\n <div class="profile-sidebar" data-ng-if="!Auth.isAgent()">\r\n <!-- PORTLET MAIN -->\r\n <div class="portlet light profile-sidebar-portlet">\r\n <!-- SIDEBAR USERPIC -->\r\n <div class="profile-image">\r\n <img src="assets/images/media/iframe.png" class="img-responsive">\r\n </div>\r\n <!-- END SIDEBAR USERPIC -->\r\n <!-- SIDEBAR USER TITLE -->\r\n <div class="profile-usertitle">\r\n <div class="profile-usertitle-name">\r\n {{iframe.title}}\r\n </div>\r\n <div class="profile-usertitle-job">\r\n {{ \'APPLICATION_IFRAME\' | translate }}\r\n </div>\r\n </div>\r\n <!-- END SIDEBAR USER TITLE -->\r\n </div>\r\n <!-- END PORTLET MAIN -->\r\n </div>\r\n <!-- END BEGIN PROFILE SIDEBAR -->\r\n <!-- BEGIN PROFILE CONTENT -->\r\n <div class="profile-content" data-ng-if="!Auth.isAgent()">\r\n <div class="row">\r\n <div class="col-md-12">\r\n <div class="portlet light">\r\n <div class="portlet-title tabbable-line">\r\n <div class="caption caption-md">\r\n <i class="icon-globe theme-font hide"></i>\r\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_IFRAME\' | translate}}</span>\r\n </div>\r\n <ul class="nav nav-tabs">\r\n <li class="active">\r\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_GENERALS\' | translate}}</a>\r\n </li>\r\n </ul>\r\n </div>\r\n <div class="portlet-body">\r\n <div class="tab-content">\r\n <!-- GENERAL TAB -->\r\n <div class="tab-pane active" id="tab_1_1">\r\n <form name="forms.formSetting" data-ng-submit="forms.formSetting.$valid && updateItem()" novalidate>\r\n <!-- START NAME -->\r\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.name.$invalid}">\r\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}} <span class="required" aria-required="true">*</span></label>\r\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="iframe.title" required/>\r\n <span data-ng-show="forms.formSetting.name.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\r\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\r\n </span>\r\n </div>\r\n <!-- END NAME -->\r\n\r\n <!-- START REMOTE ADDRESS -->\r\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.remoteUri.$invalid}">\r\n <label class="control-label">{{\'APPLICATION_URL\' | translate}} <span class="required" aria-required="true">*</span></label>\r\n <input type="url" name="remoteUri" placeholder="{{\'APPLICATION_URL\' | translate}}" class="form-control" data-ng-model="iframe.remoteUri" required />\r\n <span data-ng-show="forms.formSetting.remoteUri.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\r\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\r\n </span>\r\n </div>\r\n <!-- END USERNAME -->\r\n\r\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}" />\r\n </form>\r\n </div>\r\n <!-- END GENERAL TAB -->\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- END PROFILE CONTENT -->\r\n\r\n <div class="row" data-ng-if="Auth.isAgent()">\r\n <div class="col-md-12">\r\n <iframe ng-if="url" style="height: 600px" src="{{url}}" />\r\n </div>\r\n </div>\r\n\r\n </div>\r\n</div>\r\n<!-- END PAGE CONTENT-->\r\n'),a.put("app/integration/list/list.html",'\n<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-game-controller"></i>\n <a href="/integrations/list">{{ \'APPLICATION_INTEGRATIONS\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initList()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-eye font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_INTEGRATIONS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <span class="btn green-jungle btn-file">\n <span> <i class="icon-plus"></i> New App </span>\n <input type="file" accept=".zip" nv-file-select="" uploader="uploader"/>\n </span>\n <a class="btn btn-icon-only btn-default" href="#" ng-csv="displayedIntegrations" filename="integrations.csv">\n <i class="icon-cloud-download"></i></a>\n <a class="btn btn-icon-only btn-default fullscreen" href="#"></a>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <table st-table="displayedIntegrations" st-safe-src="integrations" class="table table-striped table-bordered table-hover">\n <div class="table-responsive">\n <thead>\n <tr>\n <th colspan="6">\n <div class="row">\n <div class="col-md-6">\n <select class="form-control input-small select2me" data-ng-model="integrationsByPage">\n <option value="10">10</option>\n <option value="25">25</option>\n <option value="50">50</option>\n <option value="{{integrations.length}}">{{ \'APPLICATION_ALL\' | translate }}</option>\n </select>\n </div>\n <div class="col-md-6">\n <div class="input-group input-medium pull-right">\n <input st-search placeholder="{{ \'APPLICATION_SEARCH\' | translate }}" class="form-control" type="search" />\n <span class="input-group-addon">\n <i class="fa fa-search"></i>\n </span>\n </div>\n </div>\n </div>\n </th>\n </tr>\n <tr>\n <th st-sort="id" width="5%" st-sort-default="reverse">{{ \'APPLICATION_ID\' | translate }}</th>\n <th st-sort="fullname">{{ \'APPLICATION_NAME\' | translate }}</th>\n <th st-sort="name">{{ \'APPLICATION_FILENAME\' | translate }}</th>\n <th st-sort="name">{{ \'APPLICATION_VERSION\' | translate }}</th>\n <th st-sort="name">{{ \'APPLICATION_DESCRIPTION\' | translate }}</th>\n <th>{{ \'APPLICATION_ACTIONS\' | translate }}</th>\n </tr>\n </thead>\n <tbody>\n <tr data-ng-repeat="integration in displayedIntegrations">\n <td>{{integration.id}}</td>\n <td>{{integration.name}}</td>\n <td>{{integration.filename}}</td>\n <td>{{integration.version}}</td>\n <td>{{integration.description}}</td>\n <td>\n <span class="btn default btn-xs blue-stripe btn-file">\n <span> {{ \'APPLICATION_UPDATE\' | translate }} </span>\n <input type="file" accept=".zip" nv-file-select="" uploader="uploader"/>\n </span>\n <a class="btn default btn-xs red-stripe" data-ng-click="deleteItem(integration.name, integration.id)">\n {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </td>\n </tr>\n <tr data-ng-hide="integrations.length">\n <td colspan="6" style="text-align:center;">\n <i>No integrations available</i>\n </td>\n </tr>\n </tbody>\n <tfoot>\n <tr>\n <td>\n <div class="input-icon right">\n <i class="fa fa-search"></i>\n <input st-search="id" class="form-control" type="search"/>\n </div>\n </td>\n <td>\n <div class="input-icon right">\n <i class="fa fa-search"></i>\n <input st-search="name" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_NAME\' | translate | lowercase}}" class="form-control" type="search"/>\n </div>\n </td>\n <td>\n <div class="input-icon right">\n <i class="fa fa-search"></i>\n <input st-search="filename" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_FILENAME\' | translate | lowercase}}" class="form-control" type="search"/>\n </div>\n </td>\n <td>\n </td>\n <td>\n </td>\n <td>\n </td>\n </tr>\n <tr>\n <td colspan="6" class="text-center">\n <div st-pagination class="pagination" st-items-by-page="integrationsByPage" st-displayed-pages="7"></div>\n </td>\n </tr>\n </tfoot>\n </div>\n </table>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/jscripty/project/list/list.create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_PROJECT\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.name.$touched || form.$submitted) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/jscripty/project/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-slack"></i>\n <a href="/jscripty/projects/list">{{ \'APPLICATION_PROJECTS\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-docs font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_PROJECTS\' | translate }}</a> </span>\n </div>\n <div class="actions" ng-show="!Auth.isAgent()">\n <div class="btn-group">\n <a class="btn btn-default" href="#" data-ng-click="gridOptions.getPage();">\n <i class="icon-reload"></i>\n </a>\n </div>\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <a class="btn green-jungle" ng-click="createItem()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_PROJECT\' | translate }}\n </a>\n </div>\n <!-- <a class="btn btn-icon-only btn-default fullscreen" href="#"></a> -->\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n\n <!-- <div class="table-responsive"> -->\n\n\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/jscripty/project/report/report.detail.html",'<div class="portlet light bordered" data-ng-init="getProjectDetail();initView()">\n<div class="portlet-title">\n<div class="caption font-green-sharp">\n<i class="fa fa-list font-green-sharp"></i>\n<span class="caption-subject">{{ \'APPLICATION_SUMMARY\' | translate }}</a> </span>\n</div>\n<div class="actions">\n <div class="btn-group">\n <button class="btn btn-icon-only btn-primary" data-ng-click="pdf(\'header\',projectDetail)">\n <i class="fa fa-download"></i>\n </button>\n <!-- <button class="btn btn-icon-only btn-default" data-ng-click="accordion.expandAll()">\n <i class="fa fa-folder-open-o"></i>\n </button>\n <button class="btn btn-icon-only btn-default" data-ng-click="accordion.collapseAll()">\n <i class="fa fa-folder"></i>\n </button> -->\n </div>\n</div>\n</div>\n<div id=\'detail\' class="portlet-body">\n <div class="alert alert-success text-center" ng-show="!projectDetail.length">\n <h4>{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</h4>\n </div>\n <div class="row" ng-show="projectDetail.length">\n <div class="col-md-10 col-md-offset-1">\n <div id="header" class="panel panel-info">\n <div class="panel-heading">\n <strong>Project Name: </strong>{{project.name}}<br>\n <strong>Project Id: </strong>{{project.id}}<br>\n <strong>Completed: </strong>{{projectStats.completed}}<br>\n <strong>Incomplete: </strong>{{projectStats.incomplete}}<br>\n <strong>% Completed: </strong>{{projectStats.completed * 100 /(projectStats.completed + projectStats.incomplete) | number:2}}<br>\n </div>\n </div><br>\n <v-accordion class="vAccordion--default" multiple control="accordion">\n <v-pane id="{{question.question_id }}" ng-repeat="question in projectDetail" expanded="true">\n <v-pane-header>\n Question Id: {{question.question_id}}\n </v-pane-header>\n <v-pane-content>\n <div ng-class=" {{question.graphData.length > 0}} ? \'col-md-8\' : \'col-md-12\'">\n <div class="row">\n <div class="col-md-10 col-md-offset-1 ">\n <h4><strong>{{question.question_label}}</strong> : {{question.question_text}}</h4>\n <br><br>\n <table ng-if="question.choices.length" class="table table-hover" style="table-layout: fixed; width: 100%">\n <thead>\n <tr>\n <th>Response</th>\n <th> #Response </th>\n <th> % </th>\n </tr>\n </thead>\n <tbody>\n <tr ng-if="!choice.other_option" ng-repeat="choice in question.choices ">\n <td style="word-wrap: break-word">{{choice.value}}</td>\n <td>{{choice.count}}</td>\n <td>{{choice.percentage | number:2}}</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n <div class="row" ng-if="question.question_other_label">\n <!-- <div class="row" ng-if="choice.other_option" ng-repeat="choice in question.choices "> -->\n <!-- <div class="col-md-10 col-md-offset-1 ">\n <strong>{{choice.value}}</strong> <span class="badge">{{choice.count}}</span><br>\n </div> -->\n <!-- accordions can be nested :) -->\n <v-accordion >\n <v-pane >\n <!-- ng-repeat="subpane in pane.subpanes" ng-disabled="subpane.isDisabled" -->\n <v-pane-header>\n <strong>{{question.question_other_label}}</strong><br>\n </v-pane-header>\n <v-pane-content>\n <table ng-if="question.choices.length" class="table table-hover" style="table-layout: fixed; width: 100%">\n <thead>\n <tr>\n <th>Response</th>\n <th> #Response </th>\n <!-- <th> % </th> -->\n </tr>\n </thead>\n <tbody>\n\n <tr ng-if="choice.other_option" ng-repeat="choice in question.choices ">\n <td style="word-wrap: break-word">{{choice.value}}</td>\n <td>{{choice.count}}</td>\n <!-- <td>{{choice.percentage | number:2}}</td> -->\n </tr>\n </tbody>\n </table>\n </v-pane-content>\n </v-pane>\n </v-accordion>\n </div>\n <div class="row">\n <div class="col-md-10 col-md-offset-1 ">\n <h4> <strong>Total Respondents: {{question.total}}</strong></h4><br>\n </div>\n </div>\n </div>\n <div class=" col-md-4 pull-right " ng-if="question.graphType == \'bar\' && question.graphData">\n <canvas class="chart chart-bar" chart-data="question.graphData" chart-labels="question.graphLabels" chart-legend="true">\n </canvas>\n </div>\n <div class="col-md-4 pull-right " ng-if="question.graphType == \'pie\' && question.graphData">\n <canvas class="chart chart-pie" chart-data="question.graphData" chart-labels="question.graphLabels" chart-legend="true">\n </canvas>\n </div>\n </v-pane-content>\n </v-pane>\n </v-accordion>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/jscripty/project/report/report.html",'<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-edit"></i>\n <a href="/jscripty/projects/list">{{ \'APPLICATION_JSCRIPTY\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-slack"></i>\n <a href="/jscripty/projects/list">{{ \'APPLICATION_PROJECTS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-book-open"></i>\n <a href="">{{ \'APPLICATION_REPORTS\' | translate }}</a>\n </li>\n </ul>\n </div>\n </div>\n</div>\n<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img src="assets/images/media/report.png" class="img-responsive" >\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{project.name}}[{{project.id}}]\n </div>\n <div class="profile-usertitle-job">\n\n </div>\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.jscripty.projects.report.sessions\')|| $state.is(\'main.jscripty.projects.report.sessionDetail\')}">\n <a data-ng-href=\'/jscripty/projects/report/{{projectId}}/sessions\'>\n <i class="icon-settings"></i>\n Sessions</a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.jscripty.projects.report.summary\') || $state.is( \'main.jscripty.projects.report.questionDetail\')}">\n <a data-ng-href=\'/jscripty/projects/report/{{projectId}}/summary\'>\n <i class="fa fa-bar-chart"></i>\n Questions</a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.jscripty.projects.report.detail\')}">\n <a data-ng-href=\'/jscripty/projects/report/{{projectId}}/detail\'>\n <i class="fa fa-list"></i>\n Summary</a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.jscripty.projects.report.inputs\')}">\n <a data-ng-href=\'/jscripty/projects/report/{{projectId}}/inputs\'>\n <i class="fa fa-edit"></i>\n Inputs</a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n\n </div>\n\n </div>\n\n <div class="profile-content margin-top-20">\n <div class="row">\n <div class="col-md-12">\n <div class="col-lg-4 col-md-4 col-sm-6 col-xs-12">\n <div class="dashboard-stat2">\n <div class="display">\n <div class="number">\n <h3 class="font-green-sharp">{{projectStats.started}}</h3>\n <small>Started</small>\n </div>\n <div class="icon">\n <i class="icon-pie-chart"></i>\n </div>\n </div>\n <div class="progress-info">\n <div class="progress">\n <span style="width: 100%;" class="progress-bar progress-bar-success green-sharp">\n </span>\n </div>\n <div class="status">\n </div>\n </div>\n </div>\n </div>\n <div class="col-lg-4 col-md-4 col-sm-6 col-xs-12">\n <div class="dashboard-stat2">\n <div class="display">\n <div class="number">\n <h3 class="font-red-haze">{{projectStats.incomplete}}</h3>\n <small>Incomplete</small>\n </div>\n <div class="icon">\n <i class="icon-chart"></i>\n </div>\n </div>\n <div class="progress-info">\n <div class="progress">\n <span style="width: 100%;" class="progress-bar progress-bar-success red-haze">\n </span>\n </div>\n <div class="status">\n </div>\n </div>\n </div>\n </div>\n <div class="col-lg-4 col-md-4 col-sm-6 col-xs-12">\n <div class="dashboard-stat2">\n <div class="display">\n <div class="number">\n <h3 class="font-blue-sharp">{{projectStats.completed}}</h3>\n <small>Completed</small>\n </div>\n <div class="icon">\n <i class="icon-like"></i>\n </div>\n </div>\n <div class="progress-info">\n <div class="progress">\n <span style="width: 100%;" class="progress-bar progress-bar-success blue-sharp">\n </span>\n </div>\n <div class="status">\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class="row">\n <div ui-view class="col-md-12">\n </div>\n </div>\n </div>\n </div>\n </div>\n'),a.put("app/jscripty/project/report/report.inputs.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light bordered" data-ng-init="getQuestionInputs()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="fa fa-edit font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_INPUTS\' | translate }}</a> </span>\n </div>\n <div class="tools">\n <!-- <a href="" class="fullscreen" data-original-title="" title="">\n </a> -->\n </div>\n </div>\n <div class="portlet-body" >\n <div ui-grid="gridOptions" ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/jscripty/project/report/report.question.detail.html",'<div class="row" data-ng-init="getDetail()">\n <div class="col-md-12">\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="fa fa-list font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_DETAIL\' | translate }}</a> </span>\n </div>\n </div>\n <div class="portlet-body" >\n <div class="alert alert-success text-center" ng-show="!questionDetail">\n <h4>{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</h4>\n </div>\n <div class="row margin-top-20" ng-show="questionDetail">\n <div class="col-md-10 col-md-offset-1">\n <div class="panel panel-info" >\n <div class="panel-heading">\n <h3 class="panel-title">\n\n <i class="fa-chart "></i>Question Id: {{questionDetail.question_id}}\n </div>\n <div class="panel-body">\n <div class="row">\n <div class="col-md-12">\n <h4><strong>{{questionDetail.question_label}}</strong></h4>\n </div>\n </div>\n <div class="row">\n <div class="col-md-10 col-md-offset-1 ">\n <strong><h4>{{questionDetail.question_text}}</h4></strong><br>\n </div>\n </div>\n <div class="row">\n <div class="col-md-6">\n <div class="row">\n <div class="col-md-10 col-md-offset-1 ">\n <!-- <div class="alert alert-success text-center" ng-show="!questionDetail.choices.length">\n <h4>{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</h4>\n </div> -->\n <table ng-if="questionDetail.choices.length" class="table table-hover" style="table-layout: fixed; width: 100%">\n <thead>\n <tr>\n <th style="width=5%"> Value </th>\n <th style="width=5%"> Count </th>\n <th ng-if="question.graphType != \'PolarArea\'" style="width=5%"> % </th>\n </tr>\n </thead>\n <tbody>\n <tr ng-if="!choice.other_option" ng-repeat="choice in questionDetail.choices ">\n <td style="word-wrap: break-word">{{choice.value}}</td>\n <td>{{choice.count}}</td>\n <td ng-if="question.graphType != \'PolarArea\'">{{choice.percentage | number:2}}</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n <div class="row" ng-if="choice.other_option" ng-repeat="choice in questionDetail.choices ">\n <div class="col-md-6 col-md-offset-3 ">\n <strong><a href="">{{choice.value}}</a> </strong> <span class="badge">{{choice.count}}</span><br>\n\n </div>\n </div>\n <div class="row">\n <div class="col-md-10 col-md-offset-1 ">\n <h4> <strong>Total: {{questionDetail.total}}</strong></h4><br>\n </div>\n </div>\n </div>\n <div class="col-md-6 pull-right ">\n <canvas id="base" class="chart-base" chart-type="questionDetail.graphType"\n chart-data="questionDetail.graphData" chart-labels="questionDetail.graphLabels" chart-legend="true">\n </canvas>\n <!-- <button class="btn btn-success btn-sm pull-right" ng-click="toggle(questionDetail)">{{questionDetail.graphType}}</button> -->\n </div>\n </div>\n\n </div>\n\n </div>\n\n </div>\n </div>\n\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/jscripty/project/report/report.session.detail.html",'\n\n<div class="row" data-ng-init="getSessionDetails()">\n <div class="col-md-12">\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="fa fa-list font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_DETAIL\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group">\n <button class="btn btn-icon-only btn-primary" data-ng-click="pdf(\'header\',sessionQuestions)">\n <i class="fa fa-download"></i>\n </button>\n <!-- <button class="btn btn-icon-only btn-default" data-ng-click="accordion.expandAll()">\n <i class="fa fa-plus-square-o"></i>\n </button>\n <button class="btn btn-icon-only btn-default" data-ng-click="accordion.collapseAll()">\n <i class="icon-collapse-alt"></i>\n </button> -->\n </div>\n </div>\n </div>\n <div class="portlet-body" style="height: auto;">\n <div class="row margin-top-20">\n <div class="col-md-10 col-md-offset-1">\n <div id = "header" class="panel panel-info">\n <div class="panel-heading">\n <strong>Project Name: </strong>{{project.name}}<br>\n <strong>Project Id: </strong>{{project.id}}<br>\n <strong>Session Id: </strong>{{session.session_id}}<br>\n <strong>Status: </strong>{{session.status}}<br>\n <strong>Started At: </strong>{{session.createdAt}}<br>\n <strong>Closed At: </strong>{{session.completedAt}}<br>\n </div>\n </div>\n <v-accordion class="vAccordion--default" multiple control="accordion">\n <v-pane id="{{question.question_id }}" ng-repeat=" question in sessionQuestions | orderBy:\'index\'"" expanded="true">\n <v-pane-header>\n Question Id: {{question.question_id}}\n </v-pane-header>\n <v-pane-content>\n <h4><strong>{{question.question_label}}</strong> : {{question.question_text}}</h4>\n <div ng-if="question.question_type == \'question\'">\n <h4><strong>Answer: </strong>{{question.question_answer}}</h4>\n </div>\n <div ng-if="question.question_other_label">\n <h4>\n <strong>{{question.question_other_label}}: </strong>\n {{question.question_other_answer || \'No Value\'}}\n </h4>\n </div>\n <table class="table table-hover" ng-if="question.ReportJscriptyInputs.length">\n <thead>\n <tr>\n <th > Label </th>\n <th >Answer </th>\n </tr>\n </thead>\n <tbody>\n <tr ng-repeat="input in question.ReportJscriptyInputs |orderBy:\'id\'">\n <td>{{input.input_label}}</td>\n <td>{{input.input_value || \'No Value\'}}</td>\n </tr>\n </tbody>\n </table>\n </v-pane-content>\n </v-pane>\n </v-accordion>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n'), -a.put("app/jscripty/project/report/report.sessions.html",'\n <div class="row" >\n <div class="col-md-12">\n <div class="portlet light bordered" data-ng-init="getProjectSessions()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-settings font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_SESSIONS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group">\n <a class="btn btn-default" href="#" data-ng-click="gridOptions.getPage();initView()">\n <i class="icon-reload"></i>\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body" >\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n'),a.put("app/jscripty/project/report/report.summary.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light bordered" data-ng-init="getQuestionSummary()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="fa fa-bar-chart font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_QUESTIONS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group">\n <!-- <a class="btn btn-default" href="#" data-ng-click="gridOptions.getPage();initView()">\n <i class="icon-reload"></i>\n </a> -->\n </div>\n </div>\n </div>\n <div class="portlet-body" >\n <div ui-grid="gridOptions" ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/jscripty/project/view/view.html",'<div class="row" data-ng-init="getProject()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-edit"></i>\n <a href="/jscripty/projects/list">{{ \'APPLICATION_JSCRIPTY\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-slack"></i>\n <a href="/jscripty/projects/list">{{ \'APPLICATION_PROJECTS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <a ng-href="/jscripty/projects/view/{{jscriptyProject.id}}">{{jscriptyProject.name}}</a>\n </li>\n </ul>\n </div>\n </div>\n</div>\n<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div id="geEditor" class="geEditor"></div>\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n<script>\n\n\n</script>\n'),a.put("app/landing/landing.html",'<!-- BEGIN LOGO -->\n<div class="logo">\n <a href="index.html">\n <img data-ng-if="settings.defaultLoginLogo || !license.custom" ng-src="assets/images/logo-big.png" alt="logo" />\n <img data-ng-if="license.custom && !settings.defaultLoginLogo" ng-src="api/settings/logo/login/{{settings.loginLogo ? settings.loginLogo : \'logo-big\'}}" alt="logo" class="custom-login-logo" onError="this.onerror=null;this.src=\'assets/images/logo-big.png\';"/>\n </a>\n</div>\n<!-- END LOGO -->\n\n<!-- BEGIN LANDING -->\n<div data-ng-init="initLanding()">\n <div data-ng-show="message" class="col-md-12 page-500" style="padding-bottom: 50px;">\n <div class="number">\n Oops!\n </div>\n <div class=" details" style="color: white;">\n <h3>{{message | translate}}.</h3>\n <p>\n Please contact your administrator.<br><br>\n </p>\n </div>\n </div>\n</div>\n<!-- END LANDING -->\n\n<div class="copyright">\n xCALLY Motion v. {{info.version}} | 2016 - {{year + 1}} © Powered by Xenialab <ng-bind-html data-ng-if="license.custom && !settings.defaultFooterWhiteLabel && settings.footerWhiteLabel" ng-bind-html="\'| \'+settings.footerWhiteLabel"></ng-bind-html>\n</div>\n'),a.put("app/login/login.html",'<!-- BEGIN LOGO -->\n<div class="logo" data-ng-init="getInfo()">\n <a>\n <img data-ng-if="settings.defaultLoginLogo || !license.custom" ng-src="assets/images/logo-big.png" alt="logo" />\n <img data-ng-if="license.custom && !settings.defaultLoginLogo" ng-src="api/settings/logo/login/{{settings.loginLogo ? settings.loginLogo : \'logo-big.png\'}}" alt="logo" class="custom-login-logo" onError="this.onerror=null;this.src=\'assets/images/logo-big.png\';"/>\n </a>\n</div>\n<!-- END LOGO -->\n<!-- BEGIN LOGIN -->\n<div class="content">\n <!-- BEGIN LOGIN FORM -->\n <form class="login-form" name="loginForm" data-ng-if="!forgotPassword" data-ng-submit="login(loginForm)" novalidate>\n <h3 class="form-title">Sign In</h3>\n <div class="alert alert-success" data-ng-show="recovered">\n <button class="close" data-close="alert"></button>\n <span>{{\'MESSAGE_ACCOUNT_RECOVERED\' | translate}}</span>\n </div>\n <div class="alert alert-danger" data-ng-class="{\'display-hide\': !loginForm.$submitted || !errorLogin}">\n <button class="close" data-close="alert"></button>\n <span>{{ errorLog ? errorLog : (\'MESSAGE_INSERT_USER_OR_PASS\' | translate)}}</span>\n </div>\n <div class="form-group" data-ng-class="{\'has-error\': loginForm.$submitted && loginForm.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_USERNAME\' | translate}}</label>\n <div class="input-icon">\n <i class="fa fa-user"></i>\n <input ng-enter="login(loginForm)" class="form-control form-control-solid placeholder-no-fix" type="text" autocomplete="off" placeholder="{{\'APPLICATION_USERNAME\' | translate}}" name="name" ng-model="userLogin.name" required/>\n </div>\n <span data-ng-show="loginForm.$submitted && loginForm.name.$invalid" class="help-block">{{\'MESSAGE_REQUIRED_FIELD\' | translate}}</span>\n </div>\n <div class="form-group" data-ng-class="{\'has-error\': loginForm.$submitted && loginForm.password.$invalid}">\n <label class="control-label">{{\'APPLICATION_PASSWORD\' | translate}}</label>\n <div class="input-icon">\n <i class="fa fa-lock"></i>\n <input ng-enter="login(loginForm)" class="form-control form-control-solid placeholder-no-fix" type="password" autocomplete="off" placeholder="{{\'APPLICATION_PASSWORD\' | translate}}" name="password" ng-model="userLogin.password" required/>\n </div>\n <span data-ng-show="loginForm.$submitted && loginForm.password.$invalid" class="help-block">{{\'MESSAGE_REQUIRED_FIELD\' | translate}}</span>\n <span class="help-block"><a href="#" data-ng-click="toggleForgotPassword(true)" class="forget-password">{{\'APPLICATION_FORGOT_PASSWORD\' | translate}}?</a></span>\n </div>\n <div class="form-actions">\n <button type="submit" class="btn btn-success uppercase">{{\'APPLICATION_LOGIN\' | translate}}</button>\n <label class="rememberme check">\n <input type="checkbox" data-ng-model="userLogin.remember"> {{\'APPLICATION_REMEMBER_ME\' | translate}}\n </label>\n <!-- <label class="rememberme check">\n <input type="checkbox" name="remember" value="1"/>Remember </label> -->\n <!-- <a href="javascript:;" id="forget-password" class="forget-password">Forgot Password?</a> -->\n </div>\n </form>\n <form name="forgetForm" data-ng-if="forgotPassword" data-ng-submit="forgetForm.$valid && recover()" novalidate>\n <h3>{{\'APPLICATION_FORGOT_PASSWORD\' | translate}}?</h3>\n <p>\n {{\'APPLICATION_INSERT_EMAIL_TO_RESET\' | translate}}\n </p>\n <div class="alert alert-success" data-ng-show="showRecoverMessage">\n <button class="close" data-close="alert"></button>\n <span>{{\'MESSAGE_CHECK_YOUR_EMAIL_RECOVER\' | translate}}</span>\n </div>\n <div class="form-group" data-ng-class="{\'has-error\': forgetForm.$submitted && forgetForm.email.$invalid}">\n <label class="control-label">{{\'APPLICATION_EMAIL\' | translate}}</label>\n <div class="input-icon">\n <i class="fa fa-envelope"></i>\n <input class="form-control form-control-solid placeholder-no-fix" type="email" placeholder="{{\'APPLICATION_EMAIL\' | translate}}" name="email" ng-model="userLogin.email" required/>\n </div>\n <span data-ng-show="forgetForm.$submitted && forgetForm.email.$invalid" class="help-block">{{\'MESSAGE_REQUIRED_FIELD\' | translate}}</span>\n </div>\n <div class="form-actions">\n <button type="button" id="back-btn" data-ng-click="toggleForgotPassword(false)" class="btn btn-default">{{\'APPLICATION_BACK\' | translate}}</button>\n <button type="submit" class="btn btn-success uppercase pull-right">{{\'APPLICATION_SUBMIT\' | translate}}</button>\n </div>\n </form>\n <div class="login-options">\n <h4>{{\'APPLICATION_FOLLOW_US\' | translate}}</h4>\n <ul class="social-icons">\n <li>\n <a class="social-icon-color facebook" data-original-title="facebook" href="https://www.facebook.com/xcallymotion" target="_blank"></a>\n </li>\n <li>\n <a class="social-icon-color twitter" data-original-title="Twitter" href="https://twitter.com/xcallymotion" target="_blank"></a>\n </li>\n <li>\n <a class="social-icon-color googleplus" data-original-title="Google Plus" href="https://plus.google.com/+Xcally" target="_blank"></a>\n </li>\n <li>\n <a class="social-icon-color linkedin" data-original-title="Linkedin" href="https://www.linkedin.com/company/xcally" target="_blank"></a>\n </li>\n </ul>\n </div>\n</div>\n<div class="copyright">\n xCALLY Motion v. {{info.version}} | 2016 - {{year + 1}} © Powered by Xenialab <ng-bind-html data-ng-if="license.custom && !settings.defaultFooterWhiteLabel && settings.footerWhiteLabel" ng-bind-html="\'| \'+settings.footerWhiteLabel"></ng-bind-html>\n</div>\n<!-- END LOGIN -->\n'),a.put("app/main/about.modal.html",'<div class="center-text">\n<div class="modal-header no-border">\n<button type="button" ng-click="$dismiss()" class="close">×</button>\n <!-- <h3 class="modal-title center-text">{{ \'APPLICATION_ABOUT\' | translate }}</h3> -->\n</div>\n<div class="modal-body" style="padding-top:0px;">\n <div class="mbottom20" data-ng-init="getInfo()">\n <a>\n <img data-ng-if="settings.defaultLoginLogo || !license.custom" ng-src="assets/images/logo-big-pdf.png" alt="logo" class="about-logo" />\n <img data-ng-if="license.custom && !settings.defaultLoginLogo" ng-src="api/settings/logo/login/{{settings.loginLogo ? settings.loginLogo : \'logo-big-pdf.png\'}}" alt="logo" class="custom-login-logo about-logo" onError="this.onerror=null;this.src=\'assets/images/logo-big-pdf.png\';"/>\n </a>\n</div>\n<div class="mbottom20">\n <b class="sounds-title-icon">xCALLY Motion</b><br>\n <small>v. {{info.version}}</small><br><br>\n <small>2016 - {{year + 1}} © Powered by Xenialab</small><br>\n <small><a href="https://www.xcallymotion.com">www.xcallymotion.com</a></small><br>\n <ng-bind-html data-ng-if="license.custom && !settings.defaultFooterWhiteLabel && settings.footerWhiteLabel" ng-bind-html="settings.footerWhiteLabel"></ng-bind-html>\n</div>\n<div class="mbottom20">\n <span><b>{{\'APPLICATION_USEFUL_LINKS\' | translate}}</b></span><br>\n <small><a href="https://wiki.xcallymotion.com/" target="_blank">Wiki</a></small><br>\n <small><a href="http://www.xcally.com/bar/multichannel/Setup.msi" target="_blank">Phonebar Download</a></small><br>\n <small><a href="http://www.xcally.com/support/eula-xcally-license-en.pdf" target="_blank">EULA</a></small><br>\n</div>\n <div class="login-options" style=\'margin-bottom:0px;\'>\n <h4>{{\'APPLICATION_FOLLOW_US\' | translate}}</h4>\n <ul class="social-icons">\n <li>\n <a class="social-icon-color facebook" data-original-title="facebook" href="https://www.facebook.com/xcallymotion" target="_blank"></a>\n </li>\n <li>\n <a class="social-icon-color twitter" data-original-title="Twitter" href="https://twitter.com/xcallymotion" target="_blank"></a>\n </li>\n <li>\n <a class="social-icon-color googleplus" data-original-title="Google Plus" href="https://plus.google.com/+Xcally" target="_blank"></a>\n </li>\n <li>\n <a class="social-icon-color linkedin" data-original-title="Linkedin" href="https://www.linkedin.com/company/xcally" target="_blank"></a>\n </li>\n </ul>\n</div>\n<div class="login-options" style=\'margin-bottom:0px;\'>\n<h4>{{\'APPLICATION_CONTACT_US\' | translate}}:</h4>\n<div class="float-right" style="margin-top:10px;margin-bottom:10px;">\n <a href="mailto:support@xcally.com">support@xcally.com</a></small>\n</div>\n</div>\n</div>\n</div>\n<!-- <div class="modal-footer">\n <button class="btn default" type="button" ng-click="close()">{{ \'APPLICATION_CLOSE\' | translate }}</button>\n</div> -->\n'),a.put("app/main/audioFileDownload.play.modal.html",'<!-- <div class="modal-header">\n <button ng-if="modal.dismissable" type="button" ng-click="$dismiss()" class="close">×</button>\n <h4 ng-if="modal.title" ng-bind="modal.title | translate" class="modal-title"></h4>\n</div> -->\n<div class="modal-body" style="text-align:center;">\n <audio controls autoplay ng-src="{{audio}}" preload="none">\n Your browser does not support the audio tag.</audio>\n</div>\n<!-- <div class="modal-footer">\n <button class="btn default" type="button" ng-click="close()">{{ \'APPLICATION_CLOSE\' | translate }}</button>\n</div> -->\n'),a.put("app/main/chooseContact.modal.html",'<div class="modal-header" data-ng-init="getContacts()">\n <h3 class="modal-title">{{ \'APPLICATION_CHOOSE_CONTACT\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <table st-table="rowCollection" class="table table-striped">\n <tbody>\n <tr>\n <th>{{\'APPLICATION_NAME\' | translate}}</th>\n <th>{{\'APPLICATION_LIST\' | translate}}</th>\n <th></th>\n </tr>\n <tr ng-repeat="contact in contacts">\n <td>{{contact.firstName}} {{contact.lastName || \'\'}}</td>\n <td>{{contact.List.name}}</td>\n <td>\n <button class="btn default btn-xs green-stripe" data-ng-click="open(contact)">\n {{ \'APPLICATION_OPEN\' | translate}}\n </button>\n </td>\n </tr>\n <tr data-ng-hide="contacts.length">\n <td colspan="3" style="text-align:center;">\n <i>{{ \'MESSAGE_NO_CONTACTS_AVAILABLE\' | translate }}</i>\n </td>\n </tr>\n </tbody>\n </table>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="open()"><i class="icon-plus"></i> {{ \'APPLICATION_NEW_CONTACT\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/main/closeEditedTab.modal.html",'<div class="modal-header" data-ng-init="getContacts()">\n <h3 class="modal-title">{{ \'APPLICATION_WARNING\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <p>{{\'MESSAGE_CLOSE_EDITED_TAB\' | translate}}</p>\n</div>\n<div class="modal-footer">\n <button class="btn btn-danger" type="button" ng-click="close()">{{ \'APPLICATION_CLOSE\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/main/closeEditedTab.modal.jscripty.html",' <div class="modal-header" data-ng-init="init()">\n <h3 class="modal-title">{{ \'APPLICATION_WARNING\' | translate }}</h3>\n <!-- <h3 ng-if="projectStatus == \'incomplete\'" class="modal-title">{{ \'APPLICATION_WARNING\' | translate }}</h3> -->\n\n</div>\n<div class="modal-body">\n<!-- <div ng-if="projectStatus == \'incomplete\'" class="modal-body"> -->\n <p>{{\'MESSAGE_CLOSE_INCOMPLETE\' | translate}}</p>\n</div>\n\n\n<div class="modal-footer">\n <button class="btn btn-danger" type="button" ng-click="close()">{{ \'APPLICATION_CLOSE\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/main/cm.disposition.modal.html",'<div class="modal-header">\n <button ng-if="modal.dismissable" type="button" ng-click="$dismiss()" class="close">×</button>\n <h4 ng-if="modal.title" ng-bind="modal.title | translate" class="modal-title"></h4>\n</div>\n<div class="modal-body">\n <form name="form" novalidate data-ng-init="initDisposition()">\n <div class="form-group">\n <ui-select data-ng-model="item.disposition" name="list" theme="bootstrap" data-ng-disabled="!dispositions.length" required>\n <ui-select-match placeholder="{{\'APPLICATION_DISPOSITION\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="disposition.name as disposition in dispositions | filter: $select.search">\n <div ng-bind-html="disposition.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <div class="note note-warning" data-ng-hide="dispositions.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_DISPOSITIONS_AVAILABLE\' | translate }}\n </p>\n </div>\n</form>\n <!-- <div ng-if="modal.html" ng-bind-html="modal.html"></div> -->\n</div>\n<div class="modal-footer">\n <button class="btn btn-danger" type="button" ng-click="ok()" data-ng-disabled="!item.disposition">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n <!-- <button ng-repeat="button in modal.buttons" ng-class="button.classes" ng-click="button.click($event)" ng-bind="button.text" class="btn"></button> -->\n</div>\n'),a.put("app/main/company.info.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_COMPANY_INFO\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_2" data-toggle="tab">{{ \'APPLICATION_ADDRESS\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_3" data-toggle="tab">{{ \'APPLICATION_SHIPMENT_ADDRESS\' | translate}}</a>\n </li>\n </ul>\n </div>\n\n <div class="portlet-body">\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.general" data-ng-submit="forms.general.$valid && updateCompany()" novalidate>\n <div class="row">\n <div class="col-md-6">\n <!-- START NAME -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}</label>\n <input readonly type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="company.name" required/>\n </div>\n <!-- END NAME -->\n\n <!-- START VAT -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_VAT\' | translate}}</label>\n <input readonly type="text" name="vat" placeholder="{{\'APPLICATION_VAT\' | translate}}" class="form-control" data-ng-model="company.vat"/>\n </div>\n <!-- END VAT -->\n\n <!-- START COMPANYID -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_COMPANY_ID\' | translate}}</label>\n <input readonly type="text" name="companyId" placeholder="{{\'APPLICATION_COMPANY_ID\' | translate}}" class="form-control" data-ng-model="company.companyId"/>\n </div>\n <!-- END COMPANYID -->\n\n <!-- START WEBSITE -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_WEBSITE\' | translate}}</label>\n <input readonly type="text" name="website" placeholder="{{\'APPLICATION_WEBSITE\' | translate}}" class="form-control" data-ng-model="company.website"/>\n </div>\n <!-- END WEBSITE -->\n\n <!-- START EMAIL -->\n <div class="form-group" >\n <label class="control-label">{{\'APPLICATION_EMAIL\' | translate}}</label>\n <input readonly type="email" name="email" placeholder="{{\'APPLICATION_EMAIL\' | translate}}" class="form-control" data-ng-model="company.email"/>\n </div>\n <!-- END EMAIL -->\n </div>\n <div class="col-md-6">\n <!-- START PHONE -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_PHONE\' | translate}}</label>\n <input readonly type="text" name="phone" placeholder="{{\'APPLICATION_PHONE\' | translate}}" class="form-control" data-ng-model="company.phone"/>\n </div>\n <!-- END PHONE -->\n\n <!-- START FAX -->\n <div class="form-group" >\n <label class="control-label">{{\'APPLICATION_FAX\' | translate}}</label>\n <input readonly type="text" name="fax" placeholder="{{\'APPLICATION_FAX\' | translate}}" class="form-control" data-ng-model="company.fax"/>\n </div>\n <!-- END FAX -->\n\n <!-- START TYPE -->\n <div class="form-group" >\n <label class="control-label">{{\'APPLICATION_TYPE\' | translate}}</label>\n <input readonly type="text" name="type" placeholder="{{\'APPLICATION_TYPE\' | translate}}" class="form-control" data-ng-model="company.type"/>\n </div>\n <!-- END TYPE -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea readonly type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="company.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n </div>\n </div>\n </form>\n </div>\n <!-- END ADVANCED TAB -->\n <div class="tab-pane" id="tab_1_2">\n <form name="forms.address" novalidate>\n <!-- START STREET -->\n <div class="form-group" >\n <label class="control-label">{{\'APPLICATION_STREET\' | translate}}</label>\n <input readonly type="text" name="street" placeholder="{{\'APPLICATION_STREET\' | translate}}" class="form-control" data-ng-model="company.street"/>\n </div>\n <!-- END STREET -->\n\n <!-- START POSTALCODE -->\n <div class="form-group" >\n <label class="control-label">{{\'APPLICATION_POSTALCODE\' | translate}}</label>\n <input readonly type="text" name="postalCode" placeholder="{{\'APPLICATION_POSTALCODE\' | translate}}" class="form-control" data-ng-model="company.postalCode"/>\n </div>\n <!-- END POSTALCODE -->\n\n <!-- START CITY -->\n <div class="form-group" >\n <label class="control-label">{{\'APPLICATION_CITY\' | translate}}</label>\n <input readonly type="text" name="city" placeholder="{{\'APPLICATION_CITY\' | translate}}" class="form-control" data-ng-model="company.city"/>\n </div>\n <!-- END CITY -->\n <!-- START COUNTRY -->\n <div class="form-group" >\n <label class="control-label">{{\'APPLICATION_COUNTRY\' | translate}}</label>\n <input readonly type="text" name="country" placeholder="{{\'APPLICATION_COUNTRY\' | translate}}" class="form-control" data-ng-model="company.country"/>\n </div>\n <!-- END COUNTRY -->\n </form>\n </div>\n <div class="tab-pane" id="tab_1_3">\n <form name="forms.shipmentAddress" novalidate>\n <!-- START STREET -->\n <div class="form-group" >\n <label class="control-label">{{\'APPLICATION_STREET\' | translate}}</label>\n <input readonly type="text" name="sStreet" placeholder="{{\'APPLICATION_STREET\' | translate}}" class="form-control" data-ng-model="company.sStreet"/>\n </div>\n <!-- END STREET -->\n\n <!-- START POSTALCODE -->\n <div class="form-group" >\n <label class="control-label">{{\'APPLICATION_POSTALCODE\' | translate}}</label>\n <input readonly type="text" name="sPostalCode" placeholder="{{\'APPLICATION_POSTALCODE\' | translate}}" class="form-control" data-ng-model="company.sPostalCode"/>\n </div>\n <!-- END POSTALCODE -->\n\n <!-- START CITY -->\n <div class="form-group" >\n <label class="control-label">{{\'APPLICATION_CITY\' | translate}}</label>\n <input readonly type="text" name="sCity" placeholder="{{\'APPLICATION_CITY\' | translate}}" class="form-control" data-ng-model="company.sCity"/>\n </div>\n <!-- END CITY -->\n <!-- START COUNTRY -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_COUNTRY\' | translate}}</label>\n <input readonly type="text" name="sCountry" placeholder="{{\'APPLICATION_COUNTRY\' | translate}}" class="form-control" data-ng-model="company.sCountry"/>\n </div>\n <!-- END COUNTRY -->\n </form>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n<div class="modal-footer">\n <button class="btn default" type="button" ng-click="close()">{{ \'APPLICATION_CLOSE\' | translate }}</button>\n</div>\n'),a.put("app/main/customDateFilter.modal.html",'<div class="modal-body">\n <uib-datepicker ng-model="dateTime.filterDate"\n class="well well-sm">\n </uib-datepicker>\n <uib-timepicker data-ng-if="hasTime" ng-model="dateTime.time" show-meridian="false"></uib-timepicker>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="setFilterDate(dateTime.filterDate)">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancelDateFilter()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/main/customDateFilterHeader.html",'<input class="ui-grid-filter-input date-time-filter-buttons pointer-cursor" style="width:90%;padding:inherit;" data-ng-click="openDatePicker(colFilter)" placeholder="{{ colFilter.name }}" readonly value="{{colFilter.term | date:\'dd-MM-yyyy\'}}">\n<span role="button" class="ui-grid-filter-button-select cancel-custom-date-range-filter-button ng-scope" data-ng-click="removeFilter(colFilter, $index)" data-ng-if="!colFilter.disableCancelFilterButton" data-ng-disabled="colFilter.term === undefined || colFilter.term === null || colFilter.term === \'\'" data-ng-show="colFilter.term !== undefined && colFilter.term != null" tabindex="0" aria-hidden="false" aria-disabled="false" style="right:22px;">\n <i class="ui-grid-icon-cancel cancel-custom-date-range-filter" ui-grid-one-bind-aria-label="aria.removeFilter" aria-label="Remove Filter"> </i>\n</span>\n'),a.put("app/main/customTagsFilter.modal.html",'<div class="modal-body" data-ng-init="initModal()">\n <!-- START TAGS -->\n<div class="form-group">\n <label class="control-label">{{\'APPLICATION_TAGS\' | translate}}</label>\n <ui-select multiple=\'true\' data-ng-model="item.myTags" theme="bootstrap">\n <ui-select-match placeholder="{{ \'APPLICATION_TAGS\' | translate }}">{{$item}}</ui-select-match>\n <ui-select-choices repeat="tag in tags | filter: $select.search">\n {{tag}}\n </ui-select-choices>\n </ui-select>\n</div>\n<!-- END TAGS -->\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="setFilterTags()">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancelTagsFilter()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/main/customTagsFilterHeader.html",'<input class="ui-grid-filter-input pointer-cursor" style="width:90%;padding:inherit;" data-ng-click="openTags(colFilter)" placeholder="{{ colFilter.name }}" readonly value="{{colFilter.term}}">\n<span role="button" class="ui-grid-filter-button-select cancel-custom-date-range-filter-button ng-scope" data-ng-click="removeFilter(colFilter, $index)" data-ng-if="!colFilter.disableCancelFilterButton" data-ng-disabled="colFilter.term === undefined || colFilter.term === null || colFilter.term === \'\'" data-ng-show="colFilter.term !== undefined && colFilter.term != null" tabindex="0" aria-hidden="false" aria-disabled="false" style="right:5px;">\n <i class="ui-grid-icon-cancel cancel-custom-date-range-filter" ui-grid-one-bind-aria-label="aria.removeFilter" aria-label="Remove Filter"> </i>\n</span>\n'),a.put("app/main/keepMeLogged.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_WARNING\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <p>{{\'MESSAGE_SOMEONE_LOGGED_YOU_OUT\' | translate}}</p>\n</div>\n<div class="modal-footer">\n <button class="btn btn-danger" type="button" ng-click="close()">{{ \'APPLICATION_YES\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_NO\' | translate }}</button>\n</div>\n'),a.put("app/main/main.html",'<!-- BEGIN HEADER -->\n<div data-ng-include="\'components/header/header.html\'" data-ng-controller="HeaderController" class="page-header navbar navbar-fixed-top">\n</div>\n<!-- END HEADER -->\n\n<div class="clearfix">\n</div>\n<!-- BEGIN CONTAINER -->\n<div class="page-container">\n\n <!-- BEGIN SIDEBAR -->\n <div data-ng-include="\'components/sidebar/sidebar.html\'" data-ng-controller="SidebarController" class="page-sidebar-wrapper">\n </div>\n <!-- END SIDEBAR -->\n\n <!-- BEGIN CONTENT -->\n <div class="page-content-wrapper">\n <div class="page-content" data-ng-class="{\'demo\': !license.expiration}">\n\n <!-- BEGIN PAGE CONTENT -->\n <uib-tabset>\n <uib-tab select="addWorkspace()" active="mainTab.active">\n <uib-tab-heading>\n Motion <i class="icon-rocket"></i>\n </uib-tab-heading>\n <div class="hide" data-ng-if="!Auth.isAgent() && activeTour.main" ng-joy-ride="activeTour.main" config="tourConfig.main" on-finish="onTourFinish()" on-skip="onTourSkip()"></div>\n <div ui-view class=""></div>\n </uib-tab>\n <uib-tab class="motion-{{workspace.type}}-uib-tab" data-ng-repeat="workspace in workspaces" active="workspace.active" data-ng-switch="workspace.type" select="select(workspace)" deselect="deselect(workspace)">\n <uib-tab-heading data-ng-mouseup="$event.which === 2 && closeTab($index)">\n <i data-ng-if="workspace.class" class="prova" data-ng-class="workspace.class"></i> {{workspace.name | truncate: 25: \'...\': true}} <span class="badge badge-danger" data-ng-if="workspace.unread">{{workspace.unread}}</span> <i class="icon-close pointer-cursor" data-ng-click="closeTab($index)"></i>\n </uib-tab-heading>\n <div class="" data-ng-switch="workspace.type">\n <new-contact data-ng-switch-when="newContact" workspace="workspace" index="$index" on-submit="createContact(index,item)"></new-contact>\n <contact data-ng-switch-when="contact" workspace="workspace" index="$index" on-submit="updateContact(index,item)"></contact>\n <jscripty data-ng-switch-when="jscripty" workspace="workspace" index="$index" on-submit="closeJscriptyTab(index)"></jscripty>\n <!-- <jscripty data-ng-switch-when="jscripty" workspace="workspace" index="$index" on-submit="closeTab(index,item)"></jscripty> -->\n <chat-room data-ng-switch-when="chatRoom" workspace="workspace" index="$index" on-submit="closeTab(index)"></chat-room>\n <fax-room data-ng-switch-when="faxRoom" workspace="workspace" index="$index" on-submit="closeTab(index)"></fax-room>\n <mail-room data-ng-switch-when="mailRoom" workspace="workspace" index="$index" on-submit="closeTab(index)"></mail-room>\n <sms-room data-ng-switch-when="smsRoom" workspace="workspace" index="$index" on-submit="closeTab(index)"></sms-room>\n <openchannel-room data-ng-switch-when="openchannelRoom" workspace="workspace" index="$index" on-submit="closeTab(index)"></openchannel-room>\n <tiger-dial-disposal data-ng-switch-when="tdDisposal" workspace="workspace" index="$index"></tiger-dial-disposal>\n </div>\n </uib-tab>\n </uib-tabset>\n <!-- END PAGE CONTENT -->\n\n </div>\n </div>\n <!-- END CONTENT -->\n\n</div>\n<!-- END CONTAINER -->\n\n<!-- BEGIN FOOTER -->\n<div data-ng-include="\'components/footer/footer.html\'" data-ng-controller="FooterController" class="page-footer">\n</div>\n<!-- END FOOTER -->\n\n<!-- BEGIN JAVASCRIPTS(Load javascripts at bottom, this will reduce page load time) -->\n<!-- BEGIN CORE PLUGINS -->\n<!--[if lt IE 9]>\n<script src="../../assets/global/plugins/respond.min.js"></script>\n<script src="../../assets/global/plugins/excanvas.min.js"></script>\n<![endif]-->\n\n<!-- END JAVASCRIPTS -->\n'), -a.put("app/main/mergeContact.choose.modal.html",'<div class="modal-header" data-ng-init="initView()">\n <h3 class="modal-title">{{ \'APPLICATION_CHOOSE_CONTACT_TO_MERGE\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <!-- START TABLE -->\n<div data-ng-if="gridOptions" ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n</div>\n<!-- END TABLE -->\n</div>\n<div class="modal-footer">\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/main/mergeContact.merge.modal.html",'<div class="modal-header" data-ng-init="initView()">\n <h3 class="modal-title">{{ \'APPLICATION_MERGE\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="forms.general" data-ng-submit="submit({index:index,item:contact})" novalidate>\n <!-- BEGIN PORTLET -->\n <div class="portlet light ">\n <div class="portlet-body row">\n <div class="col-md-4">\n <!-- START FIRSTNAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.firstName.$touched || forms.general.$submitted) && forms.general.firstName.$invalid}">\n <label class="control-label">{{\'APPLICATION_FIRSTNAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input data-ng-if="fields.firstName.length <= 1" type="text" name="firstName" placeholder="{{\'APPLICATION_FIRSTNAME\' | translate}}" class="form-control" data-ng-model="contact.firstName" required/>\n <ui-select data-ng-if="fields.firstName.length > 1" data-ng-model="contact.firstName" theme="bootstrap" name="firstName" required>\n <ui-select-match placeholder="{{ \'APPLICATION_FIRSTNAME\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="field in fields.firstName | filter: $select.search track by $index">\n <div ng-bind-html="field | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.general.firstName.$touched || forms.general.$submitted) && forms.general.firstName.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END FIRSTNAME -->\n\n <!-- START LASTNAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.lastName.$touched || forms.general.$submitted) && forms.general.lastName.$invalid}">\n <label class="control-label">{{\'APPLICATION_LASTNAME\' | translate}}</label>\n <input data-ng-if="fields.lastName.length <= 1" type="text" name="lastName" placeholder="{{\'APPLICATION_LASTNAME\' | translate}}" class="form-control" data-ng-model="contact.lastName"/>\n <ui-select data-ng-if="fields.lastName.length > 1" data-ng-model="contact.lastName" theme="bootstrap" name="lastName">\n <ui-select-match placeholder="{{ \'APPLICATION_LASTNAME\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="field in fields.lastName | filter: $select.search track by $index">\n <div ng-bind-html="field | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.general.lastName.$touched || forms.general.$submitted) && forms.general.lastName.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END LASTNAME -->\n\n <!-- START COMPANY -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.general.CompanyId.$invalid && forms.general.$submitted}">\n <label class="control-label">{{\'APPLICATION_COMPANY\' | translate}}</label>\n <ui-select data-ng-model="contact.CompanyId" theme="bootstrap" name="CompanyId" ng-disabled="!companies.length" required>\n <ui-select-match placeholder="{{ \'APPLICATION_COMPANY\' | translate }}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="company.id as company in companies | filter: $select.search" null-option="scope.noCompany">\n <div ng-bind-html="company.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="companies.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_COMPANIES_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/contactmanager/companies/list">{{\'APPLICATION_COMPANIES\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="forms.general.CompanyId.$invalid && forms.general.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END COMPANY -->\n </div>\n <div class="col-md-4">\n <!-- START PHONE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.phone.$touched || forms.general.$submitted) && forms.general.phone.$invalid}">\n <label class="control-label">{{\'APPLICATION_PHONE\' | translate}}</label>\n <input data-ng-if="fields.phone.length <= 1" type="text" name="phone" placeholder="{{\'APPLICATION_PHONE\' | translate}}" class="form-control" data-ng-model="contact.phone"/>\n <ui-select data-ng-if="fields.phone.length > 1" data-ng-model="contact.phone" theme="bootstrap" name="phone">\n <ui-select-match placeholder="{{ \'APPLICATION_PHONE\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="field in fields.phone | filter: $select.search track by $index">\n <div ng-bind-html="field | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.general.phone.$touched || forms.general.$submitted) && forms.general.phone.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PHONE -->\n <!-- START MOBILE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.mobile.$touched || forms.general.$submitted) && forms.general.mobile.$invalid}">\n <label class="control-label">{{\'APPLICATION_MOBILE\' | translate}}</label>\n <input data-ng-if="fields.mobile.length <= 1" type="text" name="mobile" placeholder="{{\'APPLICATION_MOBILE\' | translate}}" class="form-control" data-ng-model="contact.mobile"/>\n <ui-select data-ng-if="fields.mobile.length > 1" data-ng-model="contact.mobile" theme="bootstrap" name="mobile">\n <ui-select-match placeholder="{{ \'APPLICATION_MOBILE\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="field in fields.mobile | filter: $select.search track by $index">\n <div ng-bind-html="field | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.general.mobile.$touched || forms.general.$submitted) && forms.general.mobile.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END MOBILE -->\n <!-- START EMAIL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.email.$touched || forms.general.$submitted) && forms.general.email.$invalid}">\n <label class="control-label">{{\'APPLICATION_EMAIL\' | translate}}</label>\n <input data-ng-if="fields.email.length <= 1" type="email" name="email" placeholder="{{\'APPLICATION_EMAIL\' | translate}}" class="form-control" data-ng-model="contact.email"/>\n <ui-select data-ng-if="fields.email.length > 1" data-ng-model="contact.email" theme="bootstrap" name="email">\n <ui-select-match placeholder="{{ \'APPLICATION_EMAIL\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="field in fields.email | filter: $select.search track by $index">\n <div ng-bind-html="field | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.general.email.$touched || forms.general.$submitted) && forms.general.email.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END EMAIL -->\n </div>\n <div class="col-md-4">\n <!-- START FAX -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.fax.$touched || forms.general.$submitted) && forms.general.fax.$invalid}">\n <label class="control-label">{{\'APPLICATION_FAX\' | translate}}</label>\n <input data-ng-if="fields.fax.length <= 1" type="text" name="fax" placeholder="{{\'APPLICATION_FAX\' | translate}}" class="form-control" data-ng-model="contact.fax"/>\n <ui-select data-ng-if="fields.fax.length > 1" data-ng-model="contact.fax" theme="bootstrap" name="fax">\n <ui-select-match placeholder="{{ \'APPLICATION_FAX\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="field in fields.fax | filter: $select.search track by $index">\n <div ng-bind-html="field | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.general.fax.$touched || forms.general.$submitted) && forms.general.fax.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END FAX -->\n <!-- START TAGS -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.general.tags.$invalid && forms.general.$submitted}">\n <label class="control-label">{{\'APPLICATION_TAGS\' | translate}}</label>\n <ui-select multiple=\'true\' data-ng-model="contact.tags" theme="bootstrap" name="tags" ng-disabled="disabled">\n <ui-select-match placeholder="{{ \'APPLICATION_TAGS\' | translate }}">{{$item}}</ui-select-match>\n <ui-select-choices repeat="tag in tags | filter: $select.search">\n <div ng-bind-html="tag | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.general.tags.$invalid && forms.general.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TAGS -->\n <!-- START LIST -->\n <div class="form-group" data-ng-if="contact.id">\n <label class="control-label">{{\'APPLICATION_LIST\' | translate}}</label>\n <input type="text" name="list" placeholder="{{\'APPLICATION_LIST\' | translate}}" class="form-control" data-ng data-ng-model="contact.List.name" disabled/>\n </div>\n <!-- END LIST -->\n </div>\n </div>\n </div>\n <div class="portlet light upborder">\n <div class="portlet-body row">\n <div class="col-md-4">\n <!-- START STREET -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.street.$touched || forms.general.$submitted) && forms.general.street.$invalid}">\n <label class="control-label">{{\'APPLICATION_STREET\' | translate}}</label>\n <input data-ng-if="fields.street.length <= 1" type="text" name="street" placeholder="{{\'APPLICATION_STREET\' | translate}}" class="form-control" data-ng-model="contact.street"/>\n <ui-select data-ng-if="fields.street.length > 1" data-ng-model="contact.street" theme="bootstrap" name="street">\n <ui-select-match placeholder="{{ \'APPLICATION_STREET\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="field in fields.street | filter: $select.search track by $index">\n <div ng-bind-html="field | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.general.street.$touched || forms.general.$submitted) && forms.general.street.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END STREET -->\n\n <!-- START POSTALCODE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.postalCode.$touched || forms.general.$submitted) && forms.general.postalCode.$invalid}">\n <label class="control-label">{{\'APPLICATION_POSTALCODE\' | translate}}</label>\n <input data-ng-if="fields.postalCode.length <= 1" type="text" name="postalCode" placeholder="{{\'APPLICATION_POSTALCODE\' | translate}}" class="form-control" data-ng-model="contact.postalCode"/>\n <ui-select data-ng-if="fields.postalCode.length > 1" data-ng-model="contact.postalCode" theme="bootstrap" name="postalCode">\n <ui-select-match placeholder="{{ \'APPLICATION_POSTALCODE\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="field in fields.postalCode | filter: $select.search track by $index">\n <div ng-bind-html="field | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.general.postalCode.$touched || forms.general.$submitted) && forms.general.postalCode.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END POSTALCODE -->\n\n <!-- START CITY -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.city.$touched || forms.general.$submitted) && forms.general.city.$invalid}">\n <label class="control-label">{{\'APPLICATION_CITY\' | translate}}</label>\n <input data-ng-if="fields.city.length <= 1" type="text" name="city" placeholder="{{\'APPLICATION_CITY\' | translate}}" class="form-control" data-ng-model="contact.city"/>\n <ui-select data-ng-if="fields.city.length > 1" data-ng-model="contact.city" theme="bootstrap" name="city">\n <ui-select-match placeholder="{{ \'APPLICATION_CITY\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="field in fields.city | filter: $select.search track by $index">\n <div ng-bind-html="field | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.general.city.$touched || forms.general.$submitted) && forms.general.city.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CITY -->\n </div>\n <div class="col-md-4">\n <!-- START COUNTRY -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.country.$touched || forms.general.$submitted) && forms.general.country.$invalid}">\n <label class="control-label">{{\'APPLICATION_COUNTRY\' | translate}}</label>\n <input data-ng-if="fields.country.length <= 1" type="text" name="country" placeholder="{{\'APPLICATION_COUNTRY\' | translate}}" class="form-control" data-ng-model="contact.country"/>\n <ui-select data-ng-if="fields.country.length > 1" data-ng-model="contact.country" theme="bootstrap" name="country">\n <ui-select-match placeholder="{{ \'APPLICATION_COUNTRY\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="field in fields.country | filter: $select.search track by $index">\n <div ng-bind-html="field | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.general.country.$touched || forms.general.$submitted) && forms.general.country.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END COUNTRY -->\n\n <!-- START DATEOFBIRTH -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.dateOfBirth.$touched || forms.general.$submitted) && forms.general.dateOfBirth.$invalid}">\n <label class="control-label">{{\'APPLICATION_DATEOFBIRTH\' | translate}}</label>\n <input data-ng-if="fields.dateOfBirth.length <= 1" type="date" name="dateOfBirth" placeholder="{{\'APPLICATION_DATEOFBIRTH\' | translate}}" class="form-control" data-ng-model="contact.dateOfBirth"/>\n <ui-select data-ng-if="fields.dateOfBirth.length > 1" data-ng-model="contact.dateOfBirth" theme="bootstrap" name="dateOfBirth">\n <ui-select-match placeholder="{{ \'APPLICATION_DATEOFBIRTH\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="field in fields.dateOfBirth | filter: $select.search track by $index">\n <div ng-bind-html="field | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.general.dateOfBirth.$touched || forms.general.$submitted) && forms.general.dateOfBirth.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END DATEOFBIRTH -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea style="resize: vertical;" data-ng-if="fields.description.length <= 1" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="contact.description"/></textarea>\n <ui-select data-ng-if="fields.description.length > 1" data-ng-model="contact.description" theme="bootstrap" name="description">\n <ui-select-match placeholder="{{ \'APPLICATION_DESCRIPTION\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="field in fields.description | filter: $select.search track by $index">\n <div ng-bind-html="field | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END DESCRIPTION -->\n </div>\n <div class="col-md-4">\n <!-- START URL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.url.$touched || forms.general.$submitted) && forms.general.url.$invalid}">\n <label class="control-label">{{\'APPLICATION_URL\' | translate}}</label>\n <input data-ng-if="fields.url.length <= 1" type="text" name="url" placeholder="{{\'APPLICATION_URL\' | translate}}" class="form-control" data-ng-model="contact.url"/>\n <ui-select data-ng-if="fields.url.length > 1" data-ng-model="contact.url" theme="bootstrap" name="url">\n <ui-select-match placeholder="{{ \'APPLICATION_URL\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="field in fields.url | filter: $select.search track by $index">\n <div ng-bind-html="field | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.general.url.$touched || forms.general.$submitted) && forms.general.url.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END URL -->\n </div>\n </div>\n </div>\n <div class="portlet light upborder" data-ng-if="customFields.length">\n <div class="portlet-body">\n <div class="row">\n <div class="col-md-4" data-ng-repeat="customField in customFields">\n <div data-ng-if="customField.type==\'text\'" class="form-group" data-ng-class="{\'has-error\': (forms.general[customField.name].$touched || forms.general.$submitted) && forms.general[customField.name].$invalid}">\n <label class="control-label">{{customField.alias}}</label>\n <input data-ng-if="fields[customField.name].length <= 1" type="text" name="{{customField.name}}" placeholder="{{customField.alias}}" class="form-control" data-ng-model="contact[customField.name]"/>\n <ui-select data-ng-if="fields[customField.name].length > 1" data-ng-model="contact[customField.name]" theme="bootstrap" name="{{customField.name}}">\n <ui-select-match placeholder="{{customField.name}}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="field in fields[customField.name] | filter: $select.search track by $index">\n <div ng-bind-html="field | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.general[customField.name].$touched || forms.general.$submitted) && forms.general[customField.name].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div data-ng-if="customField.type==\'select\'" class="form-group" data-ng-class="{\'has-error\': forms.general[customField.name].$invalid && forms.general.$submitted}">\n <label class="control-label">{{customField.alias}}</label>\n <ui-select data-ng-model="contact[customField.name]" theme="bootstrap" name="{{customField.name}}" data-ng-disabled="disabled">\n <ui-select-match allow-clear placeholder="{{customField.alias}}">{{$select.selected.value}}</ui-select-match>\n <ui-select-choices repeat="choice.value as choice in customField.values | filter: $select.search">\n <div ng-bind-html="choice.value | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.general[customField.name].$invalid && forms.general.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n <!-- END PORTLET -->\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="merge()" ng-disabled="forms.general.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/main/template/actionBuilder/template.actionBuilderIntegration.html",'<div data-ng-if="randomName" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$invalid}">\n <ui-select data-ng-model="element.data1" name="data1{{randomName}}" theme="bootstrap" data-ng-change="changeIntegration()" required>\n <ui-select-match placeholder="{{ \'APPLICATION_INTEGRATION\' | translate }}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="integration.state as integration in integrations | filter: $select.search">\n <div ng-bind-html="integration.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{\'APPLICATION_INTEGRATION\' | translate}}\n </span>\n <span data-ng-show="(form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n<div class="form-group col-md-6" data-ng-if="element.data1 && accounts && randomName" data-ng-class="{\'has-error\': (form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$invalid}">\n <ui-select data-ng-model="element.data2" name="data2{{randomName}}" theme="bootstrap" data-ng-change="changeAccount();" required>\n <ui-select-match placeholder="{{\'APPLICATION_ACCOUNT\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="account.id as account in accounts | filter: $select.search">\n <div ng-bind-html="account.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{\'APPLICATION_ACCOUNT\' | translate}}\n </span>\n <span data-ng-show="(form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n<div class="form-group col-md-6" data-ng-if="element.data2 && configurations && randomName" data-ng-class="{\'has-error\': (form[\'data3\'+randomName].$touched || form.$submitted) && form[\'data3\'+randomName].$invalid}">\n <ui-select data-ng-model="element.data3" name="data3{{randomName}}" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_CONFIGURATION\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="config.id as config in configurations | filter: $select.search">\n <div ng-bind-html="config.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{\'APPLICATION_CONFIGURATION\' | translate}}\n </span>\n <span data-ng-show="(form[\'data3\'+randomName].$touched || form.$submitted) && form[\'data3\'+randomName].$error.required" class="help-block help-block-error">\n'+" <strong>{{'APPLICATION_WARNING' | translate}}!</strong> {{'MESSAGE_REQUIRED_FIELD' | translate}}.\n </span>\n</div>\n"),a.put("app/main/template/actionBuilder/template.actionBuilderJscripty.html",'<div data-ng-if="randomName" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$invalid}">\n <ui-select data-ng-model="element.data1" name="data1{{randomName}}" theme="bootstrap" required>\n <ui-select-match>{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="project.id as project in projects | filter: $select.search">\n <div ng-bind-html="project.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$error.required" class="help-block help-block-error">\n'+" <strong>{{'APPLICATION_WARNING' | translate}}!</strong> {{'MESSAGE_REQUIRED_FIELD' | translate}}.\n </span>\n</div>\n"),a.put("app/main/template/actionBuilder/template.actionBuilderMotionBar.html",'<!-- data1: 0 POPUP, 1 URL, 2 WINAPP -->\n<div data-ng-if="randomName" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$invalid}">\n <ui-select data-ng-model="element.data1" name="data1{{randomName}}" theme="bootstrap" required data-ng-change="changeMode();">\n <ui-select-match placeholder="{{ \'APPLICATION_TYPE\' | translate }}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="motionAction.value as motionAction in motionActions | filter: $select.search">\n <div ng-bind-html="motionAction.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'APPLICATION_TYPE\' | translate }}\n </span>\n <span data-ng-show="(form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n\n<!-- data1:0 data2:Template -->\n<div data-ng-if="randomName && element.data1==0" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$invalid}">\n <ui-select data-ng-model="element.data2" name="data2{{randomName}}" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_TEMPLATE\' | translate }}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="template.id as template in templates | filter: $select.search">\n <div ng-bind-html="template.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'APPLICATION_TEMPLATE\' | translate }}\n </span>\n <span data-ng-show="(form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n\n<!-- data1:1 data2:URL -->\n<div data-ng-if="randomName && element.data1==1" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$invalid}">\n <input type="text" ng-model="element.data2" name="data2{{randomName}}" class="form-control" required placeholder="{{ \'APPLICATION_URL\' | translate }}"/>\n <span class="help-block">\n {{ \'APPLICATION_URL\' | translate }}\n </span>\n <span data-ng-show="(form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n\n<!-- data1:2 data2:Application data3:Arguments -->\n<div data-ng-if="randomName && element.data1==2" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$invalid}">\n <input type="text" ng-model="element.data2" name="data2{{randomName}}" class="form-control" required placeholder="{{ \'APPLICATION_APPLICATION\' | translate }}"/>\n <span class="help-block">\n {{ \'APPLICATION_APPLICATION\' | translate }}\n </span>\n <span data-ng-show="(form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n<div data-ng-if="randomName && element.data1==2" class="form-group col-md-6">\n <input type="text" ng-model="element.data3" name="data3{{randomName}}" class="form-control" placeholder="{{ \'APPLICATION_ARGUMENTS\' | translate }}"/>\n <span class="help-block">\n {{ \'APPLICATION_ARGUMENTS\' | translate }}\n </span>\n</div>\n'), -a.put("app/main/template/actionBuilder/template.actionBuilderStatus.html",'<div data-ng-if="randomName" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$invalid}">\n <ui-select data-ng-model="element.data1" name="data1{{randomName}}" theme="bootstrap" required>\n <ui-select-match>{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="status.value as status in states | filter: $select.search">\n <div ng-bind-html="status.name | translate | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$error.required" class="help-block help-block-error">\n'+" <strong>{{'APPLICATION_WARNING' | translate}}!</strong> {{'MESSAGE_REQUIRED_FIELD' | translate}}.\n </span>\n</div>\n"),a.put("app/main/template/actionBuilder/template.actionBuilderTemplate.html",'<div data-ng-if="randomName" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$invalid}">\n <ui-select data-ng-model="element.data1" name="data1{{randomName}}" theme="bootstrap" required>\n <ui-select-match>{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="template.id as template in templates | filter: $select.search">\n <div ng-bind-html="template.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n<div data-ng-if="randomName" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$invalid}">\n <input type="text" ng-model="element.data2" name="data2{{randomName}}" class="form-control" required/>\n <span data-ng-show="(form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n<div class="col-md-6">\n <input type="text" ng-model="element.data3" class="form-control"/>\n</div>\n'),a.put("app/main/template/actionBuilder/template.actionBuilderUrlForward.html",'<div data-ng-if="randomName" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$invalid}">\n <ui-select data-ng-model="element.data1" name="data1{{randomName}}" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_TYPE\' | translate }}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="type.value as type in types | filter: $select.search">\n <div ng-bind-html="type.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{\'APPLICATION_TYPE\' | translate}}\n </span>\n <span data-ng-show="(form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n<div class="form-group col-md-6" data-ng-if="element.data1 && randomName" data-ng-class="{\'has-error\': (form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$invalid}">\n <input type="url" ng-model="element.data2" placeholder="{{ \'APPLICATION_URL\' | translate }}" name="data2{{randomName}}" class="form-control" required/>\n <span class="help-block">\n {{\'APPLICATION_URL\' | translate}}\n </span>\n <span data-ng-show="(form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$error.required" class="help-block help-block-error">\n'+" <strong>{{'APPLICATION_WARNING' | translate}}!</strong> {{'MESSAGE_REQUIRED_FIELD' | translate}}.\n </span>\n</div>\n"),a.put("app/main/template/template.conditionBuilder.html",'<div data-ng-if="randomName" class="form-group col-md-4" data-ng-class="{\'has-error\': (form[\'field\'+randomName].$touched || form.$submitted) && form[\'field\'+randomName].$invalid}">\n <ui-select data-ng-model="element.field" name="field{{randomName}}" theme="bootstrap" data-ng-change="checkCondition(element.field)" required>\n <ui-select-match>{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="condition.value as condition in service.services[serviceindex].conditions | filter: $select.search">\n <div ng-bind-html="condition.name | translate | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form[\'field\'+randomName].$touched || form.$submitted) && form[\'field\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n<div data-ng-if="randomName && element.field" class="form-group col-md-4" data-ng-class="{\'has-error\': (form[\'operator\'+randomName].$touched || form.$submitted) && form[\'operator\'+randomName].$invalid}">\n <ui-select data-ng-model="element.operator" name="operator{{randomName}}" theme="bootstrap" required>\n <ui-select-match>{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="operator.value as operator in _.find(service.services[serviceindex].conditions,{value:element.field}).operators | filter: $select.search">\n <div ng-bind-html="operator.name | translate | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form[\'operator\'+randomName].$touched || form.$submitted) && form[\'operator\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n<div class="col-md-4" data-ng-if="elementType === \'input\' && randomName && element.field" data-ng-class="{\'has-error\': (form[\'value\'+randomName].$touched || form.$submitted) && form[\'value\'+randomName].$invalid}">\n <input type="text" ng-model="element.value" class="form-control" name="value{{randomName}}" required/>\n <span data-ng-show="(form[\'value\'+randomName].$touched || form.$submitted) && form[\'value\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n<div class="form-group col-md-4" data-ng-if="elementType === \'select\' && randomName && element.field" data-ng-class="{\'has-error\': (form[\'value\'+randomName].$touched || form.$submitted) && form[\'value\'+randomName].$invalid}">\n <ui-select data-ng-model="element.value" name="value{{randomName}}" theme="bootstrap" required>\n <ui-select-match>{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="value.value as value in values| filter: $select.search">\n <div ng-bind-html="value.name | translate | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form[\'value\'+randomName].$touched || form.$submitted) && form[\'value\'+randomName].$error.required" class="help-block help-block-error">\n'+" <strong>{{'APPLICATION_WARNING' | translate}}!</strong> {{'MESSAGE_REQUIRED_FIELD' | translate}}.\n </span>\n</div>\n"),a.put("app/main/template/template.contactTab.html",'<div class="row margin-top-20 contact-tab-container">\n <div class="col-md-12 contact-tab">\n <form name="forms.general" data-ng-submit="submit({index:index,item:contact})" novalidate>\n <!-- BEGIN PROFILE CONTENT -->\n <div class="profile-content">\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#tab_1_1{{contact.id || \'\'}}" data-toggle="tab">{{\'APPLICATION_DETAIL\' | translate}}</a>\n </li>\n <li data-ng-if="contact.id">\n <a href="#tab_1_2{{contact.id || \'\'}}" data-toggle="tab">{{\'APPLICATION_CUSTOMER_JOURNEY\' | translate}}</a>\n </li>\n</ul>\n<div class="tab-content">\n <div class="tab-pane fade active in" id="tab_1_1{{contact.id || \'\'}}">\n <!--end add-portfolio-->\n <div class="row portfolio-block" data-ng-if="workspace.data && workspace.data.uniqueid && workspace.data.agentcalledAt">\n <div class="col-md-3">\n <div class="portfolio-text">\n <img src="assets/images/media/CmCall.png" alt=""/>\n <div class="portfolio-text-info">\n <h4>{{\'MESSAGE_INBOUND_CALL_FROM\' | translate}} - {{workspace.data.calleridnum}}</h4>\n <p>\n {{\'MESSAGE_CALL_UNIQUEID\' | translate}} : {{workspace.data.uniqueid}}\n </p>\n </div>\n </div>\n </div>\n <div class="col-md-2 portfolio-stat">\n <div>{{\'APPLICATION_QUEUE\' | translate}} </div>\n <p> {{workspace.data.queue}} </p>\n </div>\n <div class="col-md-3 portfolio-stat">\n <div>{{\'APPLICATION_AGENT\' | translate}} </div>\n <p> {{workspace.data.membername}} </p>\n </div>\n <div class="col-md-2 portfolio-stat">\n <div>{{\'APPLICATION_DATE\' | translate}} </div>\n <p> {{workspace.data.agentcalledAt | date:\'dd/MM/yyyy HH:mm:ss\'}} </p>\n </div>\n <div class="col-md-2 portfolio-stat">\n <button class="btn grey-cascade" type="button" data-ng-click="dispose()" data-ng-disabled="contact.disposed">\n <i class="icon-target"></i> {{\'APPLICATION_DISPOSITION\' | translate}}\n </button>\n </div>\n </div>\n <!--end row-->\n <!-- BEGIN PORTLET -->\n <div class="portlet light ">\n <div class="portlet-title">\n <div class="caption caption-md">\n <i class="icon-bar-chart theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_DETAIL\' | translate}}</span>\n </div>\n <div class="actions">\n <div class="btn-group btn-group-devided" data-toggle="buttons">\n <button type="submit" data-ng-if="contact.id" title="{{\'APPLICATION_COPY\' | translate}}" class="btn btn-circle green btn-sm" data-ng-click="copy(contact.id)"><i class="fa fa-files-o"></i></button>\n <button type="submit" data-ng-if="contact.ListId" class="btn btn-circle purple btn-sm" title="{{\'APPLICATION_MERGE\' | translate}}" data-ng-click="merge(contact)"><i class="icon-link"></i></button>\n <label class="btn btn-transparent grey-salsa btn-circle btn-sm active" data-ng-click="detail.tab=\'main\'">\n <input type="radio" class="toggle">{{\'APPLICATION_MAIN\' | translate}}</label>\n <label class="btn btn-transparent grey-salsa btn-circle btn-sm" data-ng-click="detail.tab=\'other\'">\n <input type="radio" class="toggle">{{\'APPLICATION_OTHER\' | translate}}</label>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <div data-ng-class="{\'hidden\':detail.tab != \'main\'}" class="portlet-body contact-portlet row">\n <div class="col-md-4">\n <!-- START FIRSTNAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.firstName.$touched || forms.general.$submitted) && forms.general.firstName.$invalid}">\n <label class="control-label">{{\'APPLICATION_FIRSTNAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="firstName" placeholder="{{\'APPLICATION_FIRSTNAME\' | translate}}" class="form-control" data-ng-model="contact.firstName" required/>\n <span data-ng-show="(forms.general.firstName.$touched || forms.general.$submitted) && forms.general.firstName.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END FIRSTNAME -->\n\n <!-- START LASTNAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.lastName.$touched || forms.general.$submitted) && forms.general.lastName.$invalid}">\n <label class="control-label">{{\'APPLICATION_LASTNAME\' | translate}}</label>\n <input type="text" name="lastName" placeholder="{{\'APPLICATION_LASTNAME\' | translate}}" class="form-control" data-ng-model="contact.lastName"/>\n <span data-ng-show="(forms.general.lastName.$touched || forms.general.$submitted) && forms.general.lastName.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END LASTNAME -->\n\n <!-- START COMPANY -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.general.CompanyId.$invalid && forms.general.$submitted}">\n <label class="control-label">{{\'APPLICATION_COMPANY\' | translate}}</label>\n <div class="input-group">\n <ui-select data-ng-model="contact.CompanyId" theme="bootstrap" name="CompanyId" ng-disabled="!companies.length" required>\n <ui-select-match placeholder="{{ \'APPLICATION_COMPANY\' | translate }}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="company.id as company in companies | filter: $select.search" null-option="scope.noCompany">\n <div ng-bind-html="company.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="input-group-btn">\n <button type="button" data-ng-click="companyInfo(contact.CompanyId)" class="btn btn-default" data-ng-disabled="!contact.CompanyId">\n <span class="icon-info" data-ng-class="{\'font-blue\':contact.CompanyId}"></span>\n </button>\n </span>\n </div>\n <div class="note note-warning" data-ng-hide="companies.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_COMPANIES_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/contactmanager/companies/list">{{\'APPLICATION_COMPANIES\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="forms.general.CompanyId.$invalid && forms.general.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END COMPANY -->\n </div>\n <div class="col-md-4">\n <!-- START PHONE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.phone.$touched || forms.general.$submitted) && forms.general.phone.$invalid}">\n <label class="control-label">{{\'APPLICATION_PHONE\' | translate}}</label>\n <div class="input-group">\n <input type="text" name="phone" placeholder="{{\'APPLICATION_PHONE\' | translate}}" class="form-control" data-ng-model="contact.phone"/>\n <span class="input-group-btn" uib-dropdown>\n <button data-ng-if="Auth.isAgent()" type="button" uib-dropdown-toggle class="btn btn-default" data-ng-disabled="!contact.phone || !agent.phoneBarRemoteControl" >\n <span class="icon-earphones-alt" data-ng-class="{\'font-blue\':contact.phone && agent.phoneBarRemoteControl}" uib-tooltip="{{!agent.phoneBarRemoteControl ? (\'APPLICATION_ENABLE_REMOTE_PHONEBAR\' | translate) : (\'APPLICATION_MOTION_BAR_CONTROLS\' | translate)}}" ></span>\n </button>\n <ul class="dropdown-menu" uib-dropdown-menu role="menu" aria-labelledby="single-button">\n <li role="menuitem"><a href="#" data-ng-click="callPhoneBar(contact.phone,\'call\')"><i class="icon-phone"></i> {{\'APPLICATION_CALL\' | translate}}</a></li>\n <li role="menuitem"><a href="#" data-ng-click="callPhoneBar(contact.phone,\'transfer\')"><i class="glyphicon glyphicon-random"></i> {{\'APPLICATION_TRANSFER\' | translate}}</a></li>\n </ul>\n <button type="button" data-ng-click="openRoom(null,\'smsRoom\',{to:contact.phone})" class="btn btn-default" data-ng-disabled="!contact.phone || !license.messaging">\n <span class="glyphicon glyphicon-comment" data-ng-class="{\'font-blue\':contact.phone && license.messaging}"></span>\n </button>\n </span>\n </div>\n <span data-ng-show="(forms.general.phone.$touched || forms.general.$submitted) && forms.general.phone.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PHONE -->\n <!-- START MOBILE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.mobile.$touched || forms.general.$submitted) && forms.general.mobile.$invalid}">\n <label class="control-label">{{\'APPLICATION_MOBILE\' | translate}}</label>\n <div class="input-group">\n <input type="text" name="mobile" placeholder="{{\'APPLICATION_MOBILE\' | translate}}" class="form-control" data-ng-model="contact.mobile"/>\n <span class="input-group-btn" uib-dropdown>\n <button data-ng-if="Auth.isAgent()" type="button" uib-dropdown-toggle class="btn btn-default" data-ng-disabled="!contact.mobile || !agent.phoneBarRemoteControl" >\n <span class="icon-earphones-alt" data-ng-class="{\'font-blue\':contact.mobile && agent.phoneBarRemoteControl}" uib-tooltip="{{!agent.phoneBarRemoteControl ? (\'APPLICATION_ENABLE_REMOTE_PHONEBAR\' | translate) : (\'APPLICATION_MOTION_BAR_CONTROLS\' | translate)}}" ></span>\n </button>\n <ul class="dropdown-menu" uib-dropdown-menu role="menu" aria-labelledby="single-button">\n <li role="menuitem"><a href="#" data-ng-click="callPhoneBar(contact.mobile,\'call\')"><i class="icon-phone"></i> {{\'APPLICATION_CALL\' | translate}}</a></li>\n <li role="menuitem"><a href="#" data-ng-click="callPhoneBar(contact.mobile,\'transfer\')"><i class="glyphicon glyphicon-random"></i> {{\'APPLICATION_TRANSFER\' | translate}}</a></li>\n </ul>\n <button type="button" data-ng-click="openRoom(null,\'smsRoom\',{to:contact.mobile})" class="btn btn-default" data-ng-disabled="!contact.mobile || !license.messaging">\n <span class="glyphicon glyphicon-comment" data-ng-class="{\'font-blue\':contact.mobile && license.messaging}"></span>\n </button>\n </span>\n </div>\n <span data-ng-show="(forms.general.mobile.$touched || forms.general.$submitted) && forms.general.mobile.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END MOBILE -->\n <!-- START EMAIL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.email.$touched || forms.general.$submitted) && forms.general.email.$invalid}">\n <label class="control-label">{{\'APPLICATION_EMAIL\' | translate}}</label>\n <div class="input-group">\n <input type="text" name="email" placeholder="{{\'APPLICATION_EMAIL\' | translate}}" class="form-control" data-ng-model="contact.email"/>\n <span class="input-group-btn">\n <button type="button" data-ng-click="openRoom(null,\'mailRoom\',{to:contact.email})" class="btn btn-default" data-ng-disabled="!contact.email || !license.mail">\n <span class="icon-envelope" data-ng-class="{\'font-blue\':contact.email && license.mail}"></span>\n </button>\n </span>\n </div>\n <span data-ng-show="(forms.general.email.$touched || forms.general.$submitted) && forms.general.email.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END EMAIL -->\n </div>\n <div class="col-md-4">\n <!-- START FAX -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.fax.$touched || forms.general.$submitted) && forms.general.fax.$invalid}">\n <label class="control-label">{{\'APPLICATION_FAX\' | translate}}</label>\n <div class="input-group">\n <input type="text" name="fax" placeholder="{{\'APPLICATION_FAX\' | translate}}" class="form-control" data-ng-model="contact.fax"/>\n <span class="input-group-btn">\n <button type="button" data-ng-click="openRoom(null,\'faxRoom\',{to:contact.fax})" class="btn btn-default" data-ng-disabled="!contact.fax || !license.fax">\n <span class="fa fa-fax" data-ng-class="{\'font-blue\':contact.fax && license.fax}"></span>\n </button>\n </span>\n </div>\n <span data-ng-show="(forms.general.fax.$touched || forms.general.$submitted) && forms.general.fax.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END FAX -->\n <!-- START TAGS -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.general.tags.$invalid && forms.general.$submitted}">\n <label class="control-label">{{\'APPLICATION_TAGS\' | translate}}</label>\n <ui-select multiple=\'true\' data-ng-model="contact.tags" theme="bootstrap" name="tags" ng-disabled="disabled">\n <ui-select-match placeholder="{{ \'APPLICATION_TAGS\' | translate }}">{{$item}}</ui-select-match>\n <ui-select-choices repeat="tag in tags | filter: $select.search">\n {{tag}}\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.general.tags.$invalid && forms.general.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TAGS -->\n <!-- START LIST -->\n <div class="form-group" data-ng-if="contact.id">\n <label class="control-label">{{\'APPLICATION_LIST\' | translate}}</label>\n <input type="text" name="list" placeholder="{{\'APPLICATION_LIST\' | translate}}" class="form-control" data-ng data-ng-model="contact.List.name" disabled/>\n </div>\n <!-- END LIST -->\n <!-- START LIST -->\n <div data-ng-if="!contact.id" class="form-group" data-ng-class="{\'has-error\': forms.general.ListId.$invalid && forms.general.$submitted}">\n <label class="control-label">{{\'APPLICATION_LIST\' | translate}}</label>\n <ui-select data-ng-model="contact.ListId" theme="bootstrap" name="ListId" data-ng-change="getCustomFields()" required>\n <ui-select-match placeholder="{{ \'APPLICATION_LIST\' | translate }}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="list.id as list in lists | filter: $select.search">\n <div ng-bind-html="list.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="lists.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_LISTS_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/contactmanager/lists/list">{{\'APPLICATION_LISTS\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="forms.general.ListId.$invalid && forms.general.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END LIST -->\n </div>\n </div>\n <div data-ng-class="{\'hidden\':detail.tab != \'other\'}" class="portlet-body contact-portlet row">\n <div class="col-md-4">\n <!-- START STREET -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.street.$touched || forms.general.$submitted) && forms.general.street.$invalid}">\n <label class="control-label">{{\'APPLICATION_STREET\' | translate}}</label>\n <input type="text" name="street" placeholder="{{\'APPLICATION_STREET\' | translate}}" class="form-control" data-ng-model="contact.street"/>\n <span data-ng-show="(forms.general.street.$touched || forms.general.$submitted) && forms.general.street.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END STREET -->\n\n <!-- START POSTALCODE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.postalCode.$touched || forms.general.$submitted) && forms.general.postalCode.$invalid}">\n <label class="control-label">{{\'APPLICATION_POSTALCODE\' | translate}}</label>\n <input type="text" name="postalCode" placeholder="{{\'APPLICATION_POSTALCODE\' | translate}}" class="form-control" data-ng-model="contact.postalCode"/>\n <span data-ng-show="(forms.general.postalCode.$touched || forms.general.$submitted) && forms.general.postalCode.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END POSTALCODE -->\n\n <!-- START CITY -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.city.$touched || forms.general.$submitted) && forms.general.city.$invalid}">\n <label class="control-label">{{\'APPLICATION_CITY\' | translate}}</label>\n <input type="text" name="city" placeholder="{{\'APPLICATION_CITY\' | translate}}" class="form-control" data-ng-model="contact.city"/>\n <span data-ng-show="(forms.general.city.$touched || forms.general.$submitted) && forms.general.city.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CITY -->\n </div>\n <div class="col-md-4">\n <!-- START COUNTRY -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.country.$touched || forms.general.$submitted) && forms.general.country.$invalid}">\n <label class="control-label">{{\'APPLICATION_COUNTRY\' | translate}}</label>\n <input type="text" name="country" placeholder="{{\'APPLICATION_COUNTRY\' | translate}}" class="form-control" data-ng-model="contact.country"/>\n <span data-ng-show="(forms.general.country.$touched || forms.general.$submitted) && forms.general.country.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END COUNTRY -->\n\n <!-- START DATEOFBIRTH -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.dateOfBirth.$touched || forms.general.$submitted) && forms.general.dateOfBirth.$invalid}">\n <label class="control-label">{{\'APPLICATION_DATEOFBIRTH\' | translate}}</label>\n <input name="dateOfBirth" type="date" placeholder="{{\'APPLICATION_DATEOFBIRTH\' | translate}}" class="form-control date-picker" data-ng-model="contact.dateOfBirth"/>\n <span data-ng-show="(forms.general.dateOfBirth.$touched || forms.general.$submitted) && forms.general.dateOfBirth.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END DATEOFBIRTH -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea style="resize: vertical;" type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="contact.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n </div>\n <div class="col-md-4">\n <!-- START URL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.url.$touched || forms.general.$submitted) && forms.general.url.$invalid}">\n <label class="control-label">{{\'APPLICATION_URL\' | translate}}</label>\n <input type="text" name="url" placeholder="{{\'APPLICATION_URL\' | translate}}" class="form-control" data-ng-model="contact.url"/>\n <span data-ng-show="(forms.general.url.$touched || forms.general.$submitted) && forms.general.url.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END URL -->\n\n <!-- START CREATED_BY -->\n <div class="form-group" data-ng-if="contact.id">\n <label class="control-label">{{\'APPLICATION_CREATED_BY\' | translate}}</label>\n <input type="text" name="createdBy" placeholder="{{\'APPLICATION_CREATED_BY\' | translate}}" class="form-control" data-ng-model="contact.User.name" disabled/>\n </div>\n <!-- END CREATED_BY -->\n </div>\n </div>\n </div>\n <button type="submit" class="btn btn-circle green-haze btn-sm" data-ng-disabled="!contact.firstName || !contact.ListId">{{\'APPLICATION_UPDATE\' | translate}}</button>\n </div>\n <!-- END PORTLET -->\n <!-- BEGIN PORTLET -->\n <div class="portlet light" data-ng-if="customFields.length">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_CUSTOM_FIELDS\' | translate}}</span>\n </div>\n </div>\n <div class="portlet-body">\n <div class="row">\n <div class="col-md-4" data-ng-repeat="customField in customFields">\n <div data-ng-if="customField.type==\'text\'" class="form-group" data-ng-class="{\'has-error\': (forms.general[customField.name].$touched || forms.general.$submitted) && forms.general[customField.name].$invalid}">\n <label class="control-label">{{customField.alias}}</label>\n <input type="text" name="{{customField.name}}" placeholder="{{customField.alias}}" class="form-control" data-ng-model="contact[customField.name]"/>\n <span data-ng-show="(forms.general[customField.name].$touched || forms.general.$submitted) && forms.general[customField.name].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div data-ng-if="customField.type==\'select\'" class="form-group" data-ng-class="{\'has-error\': forms.general[customField.name].$invalid && forms.general.$submitted}">\n <label class="control-label">{{customField.alias}}</label>\n <ui-select data-ng-model="contact[customField.name]" theme="bootstrap" name="{{customField.name}}" data-ng-disabled="disabled">\n <ui-select-match allow-clear placeholder="{{customField.alias}}">{{$select.selected.value}}</ui-select-match>\n <ui-select-choices repeat="choice.value as choice in customField.values | filter: $select.search">\n <div ng-bind-html="choice.value | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.general[customField.name].$invalid && forms.general.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n </div>\n <button type="submit" class="btn btn-circle green-haze btn-sm" data-ng-disabled="!contact.firstName || !contact.ListId">{{\'APPLICATION_UPDATE\' | translate}}</button>\n </div>\n </div>\n <!-- END PORTLET -->\n </div>\n <div class="tab-pane fade" id="tab_1_2{{contact.id || \'\'}}">\n <!-- BEGIN PORTLET -->\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_CUSTOMER_JOURNEY\' | translate}}</span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_2_1" data-toggle="tab">{{ \'APPLICATION_DAILY\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_2_2" data-toggle="tab">{{ \'APPLICATION_HISTORY\' | translate}}</a>\n </li>\n </ul>\n </div>\n <div class="portlet-body">\n <!--BEGIN TABS-->\n <div class="tab-content">\n <div class="tab-pane active" id="tab_2_1">\n <div class="contact-portlet">\n <div class="actions">\n <div class="btn-group btn-group-devided" data-toggle="buttons">\n <label class="btn btn-transparent grey-salsa btn-circle btn-sm" data-ng-class="{\'active\':log.daily.show === \'phone\'}" data-ng-click="updateLog(\'daily\',\'phone\',\'general\',\'inbound\')">\n <input type="radio" class="toggle">{{\'APPLICATION_PHONES\' | translate}}</label>\n <label class="btn btn-transparent grey-salsa btn-circle btn-sm" data-ng-class="{\'active\':log.daily.show === \'email\'}" data-ng-click="updateLog(\'daily\',\'email\',\'general\',\'room\')">\n <input type="radio" class="toggle">{{\'APPLICATION_EMAILS\' | translate}}</label>\n <label class="btn btn-transparent grey-salsa btn-circle btn-sm" data-ng-class="{\'active\':log.daily.show === \'chat\'}" data-ng-click="updateLog(\'daily\',\'chat\',\'general\',\'room\')">\n <input type="radio" class="toggle">{{\'APPLICATION_CHAT\' | translate}}</label>\n <label class="btn btn-transparent grey-salsa btn-circle btn-sm" data-ng-class="{\'active\':log.daily.show === \'fax\'}" data-ng-click="updateLog(\'daily\',\'fax\',\'general\',\'room\')">\n <input type="radio" class="toggle">{{\'APPLICATION_FAX\' | translate}}</label>\n <label class="btn btn-transparent grey-salsa btn-circle btn-sm" data-ng-class="{\'active\':log.daily.show === \'sms\'}" data-ng-click="updateLog(\'daily\',\'sms\',\'general\',\'room\')">\n <input type="radio" class="toggle">{{\'APPLICATION_SMS\' | translate}}</label>\n </div><span data-ng-if="log.daily.show==\'phone\'"> |</span>\n <div class="btn-group btn-group-devided" data-toggle="buttons" data-ng-if="log.daily.show==\'phone\'">\n <label class="btn btn-transparent grey-salsa btn-circle btn-sm" data-ng-class="{\'active\':log.daily.type === \'inbound\'}" data-ng-click="updateLog(\'daily\',false,false,\'inbound\')">\n <input type="radio" class="toggle">{{\'APPLICATION_INBOUND\' | translate}}</label>\n <label class="btn btn-transparent grey-salsa btn-circle btn-sm" data-ng-class="{\'active\':log.daily.type === \'outbound\'}" data-ng-click="updateLog(\'daily\',false,\'general\',\'outbound\')">\n <input type="radio" class="toggle">{{\'APPLICATION_OUTBOUND\' | translate}}</label>\n </div><span data-ng-if="log.daily.show==\'phone\'"> |</span>\n <div class="btn-group btn-group-devided" data-toggle="buttons" data-ng-if="log.daily.show==\'phone\'">\n <label class="btn btn-transparent grey-salsa btn-circle btn-sm" data-ng-class="{\'active\':log.daily.detail === \'general\'}" data-ng-click="updateLog(\'daily\',false,\'general\',false)">\n <input type="radio" class="toggle">{{\'APPLICATION_GENERAL\' | translate}}</label>\n <label data-ng-if="log.daily.type===\'inbound\'" class="btn btn-transparent grey-salsa btn-circle btn-sm" data-ng-class="{\'active\':log.daily.detail === \'queue\'}" data-ng-click="updateLog(\'daily\',false,\'queue\',\'inbound\')">\n <input type="radio" class="toggle">{{\'APPLICATION_QUEUES\' | translate}}</label>\n </div>\n </div>\n <div data-ng-if="gridOptionsdaily" name="gridOptionsdaily" ui-grid="gridOptionsdaily" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptionsdaily.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n </div>\n </div>\n <div class="tab-pane" id="tab_2_2">\n <div class="contact-portlet">\n <div class="actions">\n <div class="btn-group btn-group-devided" data-toggle="buttons">\n'+" <label class=\"btn btn-transparent grey-salsa btn-circle btn-sm\" data-ng-class=\"{'active':log.history.show === 'phone'}\" data-ng-click=\"updateLog('history','phone','general','inbound')\">\n <input type=\"radio\" class=\"toggle\">{{'APPLICATION_PHONES' | translate}}</label>\n <label class=\"btn btn-transparent grey-salsa btn-circle btn-sm\" data-ng-class=\"{'active':log.history.show === 'email'}\" data-ng-click=\"updateLog('history','email','general','room')\">\n <input type=\"radio\" class=\"toggle\">{{'APPLICATION_EMAILS' | translate}}</label>\n <label class=\"btn btn-transparent grey-salsa btn-circle btn-sm\" data-ng-class=\"{'active':log.history.show === 'chat'}\" data-ng-click=\"updateLog('history','chat','general','room')\">\n <input type=\"radio\" class=\"toggle\">{{'APPLICATION_CHAT' | translate}}</label>\n <label class=\"btn btn-transparent grey-salsa btn-circle btn-sm\" data-ng-class=\"{'active':log.history.show === 'fax'}\" data-ng-click=\"updateLog('history','fax','general','room')\">\n <input type=\"radio\" class=\"toggle\">{{'APPLICATION_FAX' | translate}}</label>\n <label class=\"btn btn-transparent grey-salsa btn-circle btn-sm\" data-ng-class=\"{'active':log.history.show === 'sms'}\" data-ng-click=\"updateLog('history','sms','general','room')\">\n <input type=\"radio\" class=\"toggle\">{{'APPLICATION_SMS' | translate}}</label>\n </div><span data-ng-if=\"log.history.show=='phone'\"> |</span>\n <div class=\"btn-group btn-group-devided\" data-toggle=\"buttons\" data-ng-if=\"log.history.show=='phone'\">\n <label class=\"btn btn-transparent grey-salsa btn-circle btn-sm\" data-ng-class=\"{'active':log.history.type === 'inbound'}\" data-ng-click=\"updateLog('history',false,false,'inbound')\">\n <input type=\"radio\" class=\"toggle\">{{'APPLICATION_INBOUND' | translate}}</label>\n <label class=\"btn btn-transparent grey-salsa btn-circle btn-sm\" data-ng-class=\"{'active':log.history.type === 'outbound'}\" data-ng-click=\"updateLog('history',false,'general','outbound')\">\n <input type=\"radio\" class=\"toggle\">{{'APPLICATION_OUTBOUND' | translate}}</label>\n </div><span data-ng-if=\"log.history.show=='phone'\"> |</span>\n <div class=\"btn-group btn-group-devided\" data-toggle=\"buttons\" data-ng-if=\"log.history.show=='phone'\">\n <label class=\"btn btn-transparent grey-salsa btn-circle btn-sm\" data-ng-class=\"{'active':log.history.detail === 'general'}\" data-ng-click=\"updateLog('history',false,'general',false)\">\n <input type=\"radio\" class=\"toggle\">{{'APPLICATION_GENERAL' | translate}}</label>\n <label data-ng-if=\"log.history.type==='inbound'\" class=\"btn btn-transparent grey-salsa btn-circle btn-sm\" data-ng-class=\"{'active':log.history.detail === 'queue'}\" data-ng-click=\"updateLog('history',false,'queue','inbound')\">\n <input type=\"radio\" class=\"toggle\">{{'APPLICATION_QUEUES' | translate}}</label>\n </div>\n </div>\n <div data-ng-if=\"gridOptionshistory\" name=\"gridOptionshistory\" ui-grid=\"gridOptionshistory\" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-exporter ui-grid-draggable-rows class=\"ui-grid\">\n <div class=\"watermark\" ng-show=\"!gridOptionshistory.data.length\">{{'MESSAGE_NO_RESULTS_AVAILABLE' | translate}}</div>\n </div>\n </div>\n </div>\n </div>\n <!--END TABS-->\n </div>\n </div>\n <!-- END PORTLET -->\n </div>\n <!-- END PROFILE CONTENT -->\n </form>\n</div>\n </div>\n</div>\n"), -a.put("app/main/template/template.jscriptyTab.html",'<div class="portlet light bordered">\n <!-- BEGIN PORTLET BODY -->\n <div class="portlet-body">\n <div class="row">\n <!-- BEGIN SIDEBAR -->\n <div class="profile-sidebar" style="width: 250px;">\n <!-- PORTLET MAIN -->\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li ng-repeat= \'question in questions track by $index\' ng-class="{active: $index == count}">\n <a ng-click="setCurrentQuestion($index)" >\n <i class="fa fa-check"></i> <label ng-if="attribute.nodeName == \'label\'" ng-repeat=\'attribute in question.value.attributes track by $index\'>{{attribute.value}}</label>\n </a>\n </li>\n </ul>\n </div>\n <!-- END SIDEBAR MENU -->\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END SIDEBAR -->\n <div class="profile-content">\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="fa fa-edit font-green-sharp"></i>\n <span ng-if="attribute.nodeName ==\'label\'" ng-repeat=\'attribute in currentQuestion.value.attributes\' class="caption-subject">{{attribute.value}} </span>\n </div>\n\n </div>\n <div class="portlet-body form ">\n <div class="row">\n <div class="col-md-10 col-md-offset-1 ">\n <form >\n <div class="form-body" style="height: 400px; overflow-y: auto;overflow-x:hidden">\n\n <!-- Question -->\n <div class="form-group" style="word-wrap: break-word;" >\n <h3 ng-if="attribute.nodeName ==\'question\' || attribute.nodeName ==\'text\'" ng-repeat=\'attribute in currentQuestion.value.attributes\'>{{attribute.value}}</h3>\n </div>\n <!-- Buttons -->\n\n <div ng-if ="(edge.source.id == currentQuestion.id) && edge.value" ng-repeat=\'edge in currentQuestion.edges track by $index\' class="row">\n <div class="col-md-8 col-md-offset-2">\n <input checked="checked" type="radio" ng-model="currentQuestion.button" ng-value="edge" >\n <label ng-show="(edge.source.id == currentQuestion.id) && edge.value">{{edge.value}}</label><br><br>\n </div>\n </div>\n <!-- Question Other Option -->\n\n <div class="form-group" ng-if= "attribute.nodeName ==\'other\' && attribute.value " ng-repeat=\'attribute in currentQuestion.value.attributes track by $index\'>\n <br>\n <div class="col-md-2">\n <label class="control-label">{{attribute.value}}</label>\n </div>\n <div class="col-md-8">\n <textarea style="overflow:auto" ng-model="currentQuestion.otheranswer" placeholder="Enter text" rows="8" cols="40" ></textarea>\n </div>\n </div>\n <!-- Inputs -->\n <div class="row margin-top-10" ng-repeat=\'question in currentQuestion.children track by $index\'>\n <div class="col-md-10 col-md-offset-1">\n <div ng-repeat=\'attribute in question.value.attributes track by $index\'>\n <div ng-switch="attribute.nodeName">\n <div ng-class="col-md-2" ng-switch-when="label">\n <label class="control-label" style=" display:block;word-break:break-all;" >{{attribute.value}}</label>\n </div>\n <div ng-class="attribute.value != \'checkbox\' ? \'col-md-10 pull-right\': \'col-md-2\'" ng-switch-when="type" ng-switch="attribute.value">\n <input class="form-control" ng-switch-when="text" type="text" ng-model="question.answer" />\n <input class="form-control" ng-switch-when="number" type="number" ng-model="question.answer" />\n <input class=" pull-right" ng-switch-when="checkbox" type="checkbox" ng-model="question.answer" />\n <!-- ng-true-value="\'Selected\'" ng-false-value="\'Not Selected\'" -->\n <textarea class="form-control" ng-switch-when="textarea" ng-model="question.answer" rows="8" cols="40"></textarea>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <!-- actions -->\n <div class="form-actions">\n <div ng-switch="attribute.nodeName" class="btn-set pull-left">\n <button class="btn red-haze " ng-click="end()">\n <span class="fa fa-times" > Close</span>\n </button>\n <!-- <button class="btn red-haze " ng-click="end()">\n <span ng-if="attribute.nodeName ==\'end\'" ng-repeat=\'attribute in currentQuestion.value.attributes\' class="fa fa-times" > Finish</span>\n </button> -->\n <button class="btn blue-haze" ng-show="count" ng-click="back()"><span class="glyphicon glyphicon-chevron-left"></span>Back</button>\n </div>\n <div class="btn-set pull-right">\n <button ng-show=" currentQuestion.button" class="btn blue-hoki" ng-click="next(currentQuestion.button.target, currentQuestion.button.value)">Next<span class="glyphicon glyphicon-chevron-right" ></span></button>\n <button ng-repeat=\'edge in currentQuestion.edges track by $index\' ng-show="(edge.source.id == currentQuestion.id) && !edge.value" class="btn blue-hoki" ng-click="next(edge.target)">Next<span class="glyphicon glyphicon-chevron-right" ></span></button>\n </div>\n </div>\n </form>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <!-- END PORTLET BODY -->\n</div>\n'),a.put("app/main/template/template.notification.html",'<div class="ui-notification alert alert-block" ng-class="class" style="width: 350px; margin-top: 50px;">\n <h4 ng-show="title" class="alert-heading"><i class="{{icon}}"></i> {{title}}</h4>\n <hr>\n <p ng-bind-html="message"></p>\n <br>\n <p>\n <a class="btn btn-success close-notification" href="#" ng-click="nAccept()"><i class="glyphicon glyphicon-ok"></i> {{acceptBtn}} </a>\n <a class="btn btn-danger close-notification" href="#" ng-click="nReject()"><i class="glyphicon glyphicon-remove"></i> {{rejectBtn}} </a>\n </p>\n</div>\n'),a.put("app/main/template/template.reportBuilderView.html",'<div class="alert alert-warning alert-group">\n <div class="form-inline" data-ng-class="{\'has-error\': forms.report.$submitted && !group.rules.length}">\n <select ng-options="o.name as o.name for o in operators" ng-model="group.operator" class="form-control input-sm"></select>\n <button style="margin-left: 5px" type="button" ng-click="addCondition()" class="btn btn-sm btn-success"><span class="glyphicon glyphicon-plus-sign"></span> {{\'APPLICATION_ADD_CONDITION\' | translate}}</button>\n <button style="margin-left: 5px" type="button" ng-click="addGroup()" class="btn btn-sm btn-success"><span class="glyphicon glyphicon-plus-sign"></span> {{\'APPLICATION_ADD_GROUP\' | translate}}</button>\n <button style="margin-left: 5px" type="button" ng-click="removeGroup()" class="btn btn-sm btn-danger"><span class="glyphicon glyphicon-minus-sign"></span> {{\'APPLICATION_REMOVE_GROUP\' | translate}}</button>\n </div>\n <div class="group-conditions">\n <div ng-repeat="rule in group.rules | orderBy:\'index\'" class="condition">\n <div ng-switch="rule.hasOwnProperty(\'group\')">\n <div ng-switch-when="true">\n <report-builder group="rule.group" fields="fields" forms="forms"></report-builder>\n </div>\n <div ng-switch-default="ng-switch-default">\n <div class="row">\n <div class="col-md-2" data-ng-class="{\'has-error\': forms.report.$submitted && !rule.field}">\n <ui-select data-ng-model="rule.field" theme="bootstrap" dynamic-name="randomName()" required>\n <ui-select-match placeholder="" ><span ng-bind-html="$select.selected.name"></span></ui-select-match>\n <ui-select-choices repeat="field.value as field in fields | filter: $select.search">\n <div ng-bind-html="field.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.report.$submitted && !rule.field" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div class="col-md-1">\n <ui-select data-ng-model="rule.condition" theme="bootstrap" dynamic-name="randomName()" data-ng-change="inputIsRequired(rule)" data-ng-init="inputIsRequired(rule)">\n <ui-select-match placeholder="">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="condition.name as condition in conditions | filter: $select.search">\n <div ng-bind-html="condition.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <div class="col-md-2" data-ng-class="{\'has-error\': forms.report.$submitted && !rule.value}" data-ng-if="rule.required">\n <input type="text" ng-model="rule.value" class="form-control" dynamic-name="randomName()" data-ng-required="requiredInput"/>\n <span data-ng-show="forms.report.$submitted && !rule.value" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <button style="margin-left: 5px" ng-click="removeCondition($index)" class="btn btn-sm btn-danger" type="button"><span class="glyphicon glyphicon-minus-sign"></span></button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n'),a.put("app/main/template/template.tigerDialDisposal.html",'<div class="row margin-top-20 contact-tab-container">\n <div class="portlet light bordered">\n <div class="row portfolio-block" data-ng-if="workspace.spooler.destcalleridnum && workspace.spooler.queue && workspace.spooler.agentconnectAt">\n <div class="col-md-2">\n <div class="portfolio-text">\n <img src="assets/images/media/outboundroute.png" class="td-disposal-logo" alt=""/>\n </div>\n </div>\n <div class="col-md-3 portfolio-stat">\n <div>{{\'APPLICATION_CALLED_NUMBER\' | translate}} </div>\n <p> {{workspace.spooler.destcalleridnum}} </p>\n </div>\n <div class="col-md-3 portfolio-stat">\n <div>{{\'APPLICATION_QUEUE\' | translate}} </div>\n <p> {{workspace.spooler.queue}} </p>\n </div>\n <div class="col-md-3 portfolio-stat">\n <div>{{\'APPLICATION_DATE\' | translate}} </div>\n <p> {{workspace.spooler.agentconnectAt | date:\'dd/MM/yyyy HH:mm:ss\'}} </p>\n </div>\n</div>\n <div class="portlet-title">\n <div class="caption font-blue-hoki">\n <span class="caption-subject">{{ workspace.spooler.calleridname }} {{ \'APPLICATION_MOTION_DIALER\' | translate }} {{ \'APPLICATION_DISPOSITION\' | translate }} </span>\n </div>\n </div>\n <div class="portlet-body">\n <div class="padding-bottom row">\n <div class="col-md-12" data-ng-form="tdForm">\n <!-- START RETRIEVE -->\n <div class="form-group" data-ng-class="{\'has-error\': (tdForm.retrieve.$touched || tdForm.$submitted) && tdForm.retrieve.$invalid}">\n <label class="control-label">{{ \'APPLICATION_STATUS\' | translate }}<span class="required" aria-required="true">*</span></label>\n <select name="retrieve" class="form-control" data-ng-model="entitySpooler.retrieve" required>\n <option value="CLOSED">CLOSE</option>\n <option value="OPEN">OPEN</option>\n <option value="BLACK_LIST">BLACKLIST</option>\n <option value="PLANNED">PLANNING</option>\n <option value="PLANNED_PEER">PLANNING AGENT</option>\n </select>\n <span data-ng-show="(tdForm.retrieve.$touched || tdForm.$submitted) && tdForm.retrieve.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END RETRIEVE -->\n <!-- START PLANNING DATE -->\n <div class="form-group" data-ng-if="entitySpooler.retrieve == \'PLANNED\' || entitySpooler.retrieve == \'PLANNED_PEER\'" data-ng-class="{\'has-error\': (tdForm.date.$touched || tdForm.$submitted) && tdForm.date.$invalid}">\n <label class="control-label">PLANNING DATE<span class="required" aria-required="true">*</span></label>\n <uib-datepicker name="date" ng-model="entitySpooler.planningtime" required="entitySpooler.retrieve == \'PLANNED\' || entitySpooler.retrieve == \'PLANNED_PEER\'" data-ng-init="entitySpooler.planningtime = moment();"></uib-datepicker>\n <span data-ng-show="(tdForm.date.$touched || tdForm.$submitted) && tdForm.date.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PLANNING DATE -->\n <!-- START PLANNING TIME -->\n <div class="form-group" data-ng-if="entitySpooler.retrieve == \'PLANNED\' || entitySpooler.retrieve == \'PLANNED_PEER\'" data-ng-class="{\'has-error\': (tdForm.time.$touched || tdForm.$submitted) && tdForm.time.$invalid}">\n <label class="control-label">PLANNING TIME<span class="required" aria-required="true">*</span></label>\n <uib-timepicker name="time" ng-model="entitySpooler.planningtime" required="entitySpooler.retrieve == \'PLANNED\' || entitySpooler.retrieve == \'PLANNED_PEER\'" show-meridian="false" show-seconds="false"></uib-timepicker>\n <span data-ng-show="(tdForm.time.$touched || tdForm.$submitted) && tdForm.time.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PLANNING TIME -->\n <!-- START PLANNING PEER -->\n <div class="form-group" data-ng-if="entitySpooler.retrieve == \'PLANNED_PEER\'" data-ng-class="{\'has-error\': (tdForm.agent.$touched || tdForm.$submitted) && tdForm.agent.$invalid}">\n <label class="control-label">{{\'APPLICATION_AGENT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <select name="agent" class="form-control" data-ng-model="entitySpooler.planningpeer" ng-options="agent for agent in agents" required="entitySpooler.retrieve == \'PLANNED_PEER\'">\n </select>\n <span data-ng-show="(tdForm.agent.$touched || tdForm.$submitted) && tdForm.agent.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PLANNING PEER -->\n <button type="button" class="btn btn-circle green-haze btn-sm" data-ng-disabled="!tdForm.$valid" data-ng-click="save()">{{\'APPLICATION_SAVE\' | translate}}</button>\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/market/market.html",'<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-handbag"></i>\n <a href="/market">Market Place</a>\n </li>\n </ul>\n </div>\n </div>\n</div>\n<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <!-- Our Integration -->\n <div class="headline">\n <h3>Our Integrations</h3>\n </div>\n <div class="row thumbnails" data-ng-repeat="group in groupedIntegration">\n <div class="col-md-3" data-ng-repeat="integration in group">\n <div class="our-integrations">\n <h3> {{integration.name}} <small> {{integration.author}}</small></h3>\n <img data-ng-src="{{integration.logo}}" alt="{{integration.name}}" class="img-responsive"/>\n <div class="integration-info" data-ng-if="!integration.downloading">\n <p>\n {{integration.description}}\n </p>\n <div class="pull-right">\n <a data-ng-disabled="isProgressing" data-ng-if="!integration.active" data-ng-click="installIntegration(integration)" href="#" class="btn btn-xs green-meadow">Install <i class="fa fa-download"></i></a>\n <a data-ng-disabled="isProgressing" data-ng-if="integration.active" data-ng-click="uninstallIntegration(integration)" href="#" class="btn btn-xs red-sunglo">Uninstall <i class="fa fa-trash"></i></a>\n <a href="{{integration.link}}" class="btn btn-xs grey-cascade" target="_blank">More <i class="fa fa-link"></i></a>\n </div>\n </div>\n <div class="integration-info" data-ng-if="integration.downloading">\n <div>\n <uib-progressbar class="progress-striped active" value="percentage" type="success"><i style="color:black;">{{status}}</i></uib-progressbar>\n </div>\n </div>\n </div>\n </div>\n </div>\n <!--/thumbnails-->\n <!-- //End Meer Our Team -->\n </div>\n</div>\n'),a.put("app/motiondialer/blacklist/list/list.create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_CONTACT\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <!-- START PHONE -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.phone.$touched || form.$submitted) && form.phone.$invalid}">\n <label class="control-label">{{\'APPLICATION_PHONE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="phone" placeholder="{{\'APPLICATION_PHONE\' | translate}}" class="form-control" data-ng-model="item.phone" required/>\n <span data-ng-show="(form.phone.$touched || form.$submitted) && form.phone.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PHONE -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/motiondialer/blacklist/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-control-forward"></i>\n <a href="#">Motion Dialer</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-doc"></i>\n <a href="#">{{ \'APPLICATION_BLACKLIST\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-doc font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_BLACKLIST\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group">\n <button class="btn green-jungle " ng-click="createItem()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_CONTACT\' | translate }}\n </button>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-exporter class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/motiondialer/info/view/view.about.html",'<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_ABOUT\' | translate}}</span>\n </div>\n </div>\n <div class="portlet-body">\n <form class="form-horizontal form-row-seperated">\n <div class="form-body">\n <!-- START -->\n <div class="form-group">\n <label class="control-label col-md-3">Specification</label>\n <div class="col-md-9">\n <input type="text" class="form-control" value="{{properties.SpecificationTitle}} ({{properties.SpecificationVersion}}) - {{properties.SpecificationVendor}}" disabled/>\n <span class="help-block">\n </span>\n </div>\n </div>\n <!-- END -->\n <!-- START -->\n <div class="form-group">\n <label class="control-label col-md-3">Implementation</label>\n <div class="col-md-9">\n <input type="text" class="form-control" value="{{properties.ImplementationTitle}} ({{properties.ImplementationVersion}}) - {{properties.ImplementationVendor}}" disabled/>\n <span class="help-block">\n </span>\n </div>\n </div>\n <!-- END -->\n <!-- START -->\n <div class="form-group">\n <label class="control-label col-md-3">Start Time</label>\n <div class="col-md-9">\n <input type="text" class="form-control" data-ng-model="properties.StartTime" disabled/>\n <span class="help-block">\n </span>\n </div>\n </div>\n <!-- END -->\n <!-- START -->\n <div class="form-group">\n <label class="control-label col-md-3">Uptime</label>\n <div class="col-md-9">\n <input type="text" class="form-control" data-ng-model="properties.Uptime" disabled/>\n <span class="help-block">\n </span>\n </div>\n </div>\n <!-- END -->\n <!-- START -->\n <div class="form-group">\n <label class="control-label col-md-3">Operating System</label>\n <div class="col-md-9">\n <input type="text" class="form-control" value="{{properties.OsName}} {{properties.OsVersion}} {{properties.OsArch}}" disabled/>\n <span class="help-block">\n </span>\n </div>\n </div>\n <!-- END -->\n <!-- START -->\n <div class="form-group">\n <label class="control-label col-md-3">Processors</label>\n <div class="col-md-9">\n <input type="text" class="form-control" data-ng-model="properties.Processors" disabled/>\n <span class="help-block">\n </span>\n </div>\n </div>\n <!-- END -->\n <!-- START -->\n <div class="form-group">\n <label class="control-label col-md-3">System Start Time</label>\n <div class="col-md-9">\n <input type="text" class="form-control" data-ng-model="properties.SystemStartTime" disabled/>\n <span class="help-block">\n </span>\n </div>\n </div>\n <!-- END -->\n <!-- START -->\n <div class="form-group">\n <label class="control-label col-md-3">System Uptime</label>\n <div class="col-md-9">\n <input type="text" class="form-control" data-ng-model="properties.SystemUptime" disabled/>\n <span class="help-block">\n </span>\n </div>\n </div>\n <!-- END -->\n <!-- START -->\n <div class="form-group">\n <label class="control-label col-md-3">File System</label>\n <div class="col-md-9">\n <input type="text" class="form-control" value="Usable: {{properties.FileSystem.Usable | number:2}} Free: {{properties.FileSystem.Free | number:2}} Total: {{properties.FileSystem.Total | number:2}}" disabled/>\n <span class="help-block">\n </span>\n </div>\n </div>\n <!-- END -->\n </div>\n </form>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/motiondialer/info/view/view.details.html",'<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_DETAILS\' | translate}}</span>\n </div>\n </div>\n <div class="portlet-body">\n <form class="form-horizontal form-row-seperated">\n <div class="form-body">\n <!-- START -->\n <div class="form-group">\n <label class="control-label col-md-3">Java Specification Name</label>\n <div class="col-md-9">\n <input type="text" class="form-control" data-ng-model="properties.JavaSpecificationName" disabled/>\n <span class="help-block">\n </span>\n </div>\n </div>\n <!-- END -->\n <!-- START -->\n <div class="form-group">\n <label class="control-label col-md-3">Java Home</label>\n <div class="col-md-9">\n <input type="text" class="form-control" data-ng-model="properties.JavaHome" disabled/>\n <span class="help-block">\n </span>\n </div>\n </div>\n <!-- END -->\n <!-- START -->\n <div class="form-group">\n <label class="control-label col-md-3">JavaVm</label>\n <div class="col-md-9">\n <input type="text" class="form-control" value="{{properties.JavaVmName}} ({{properties.JavaVmVersion}} {{properties.JavaVmInfo}}) - {{properties.JavaVmVendor}}" disabled/>\n <span class="help-block">\n </span>\n </div>\n </div>\n <!-- END -->\n\n <!-- START -->\n <div class="form-group">\n <label class="control-label col-md-3">Java</label>\n <div class="col-md-9">\n <input type="text" class="form-control" value="Java ({{properties.JavaVersion}} {{properties.JavaClassVersion}}) - {{properties.JavaVendor}}" disabled/>\n <span class="help-block">\n </span>\n </div>\n </div>\n <!-- END -->\n <!-- START -->\n <div class="form-group">\n <label class="control-label col-md-3">Java Runtime</label>\n <div class="col-md-9">\n <input type="text" class="form-control" value="{{properties.JavaRuntimeName}} ({{JavaRuntimeVersion}})" disabled/>\n <span class="help-block">\n </span>\n </div>\n </div>\n <!-- END -->\n <!-- START -->\n <div class="form-group">\n <label class="control-label col-md-3">Java Rmi Server Hostname</label>\n <div class="col-md-9">\n <input type="text" class="form-control" value="{{properties.JavaRmiServerHostname}}" disabled/>\n <span class="help-block">\n </span>\n </div>\n </div>\n <!-- END -->\n <!-- START -->\n <div class="form-group">\n <label class="control-label col-md-3">User</label>\n <div class="col-md-9">\n <input type="text" class="form-control" value="{{properties.UserName}} {{properties.UserLanguage}}-{{properties.UserCountry}} {{properties.UserTimezone}}" disabled/>\n <span class="help-block">\n </span>\n </div>\n </div>\n <!-- END -->\n <!-- START -->\n <div class="form-group">\n <label class="control-label col-md-3">User Home</label>\n <div class="col-md-9">\n <input type="text" class="form-control" value="{{properties.UserHome}}" disabled/>\n <span class="help-block">\n </span>\n </div>\n </div>\n <!-- END -->\n <!-- START -->\n <div class="form-group">\n <label class="control-label col-md-3">Hostname</label>\n <div class="col-md-9">\n <input type="text" class="form-control" value="{{properties.Hostname}}" disabled/>\n <span class="help-block">\n </span>\n </div>\n </div>\n <!-- END -->\n </div>\n </form>\n </div>\n </div>\n </div>\n</div>\n'), -a.put("app/motiondialer/info/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getProperties()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-control-forward"></i>\n <a href="#">Motion Dialer</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-info"></i>\n <a href="/motiondialer/info/view/properties">{{ \'APPLICATION_INFO\' | translate }}</a>\n <i data-ng-show="variable" class="fa fa-angle-right"></i>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/template.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{ \'APPLICATION_INFO\' | translate }}\n </div>\n <!-- <div class="profile-usertitle-job">\n {{user.role}}\n </div> -->\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.motiondialer.info.view.about\')}">\n <a data-ng-href="/motiondialer/info/view/about">\n <i class="icon-globe"></i>\n {{ \'APPLICATION_ABOUT\' | translate}} </a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.motiondialer.info.view.details\')}">\n <a data-ng-href="/motiondialer/info/view/details">\n <i class="icon-support"></i>\n {{ \'APPLICATION_DETAILS\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/motiondialer/list/list/list.create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_LIST\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.name.$touched || form.$submitted) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/motiondialer/list/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-control-forward"></i>\n <a href="#">Motion Dialer</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-docs"></i>\n <a href="#">{{ \'APPLICATION_LISTS\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-docs font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_LISTS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group">\n <button class="btn green-jungle " ng-click="createItem()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_LIST\' | translate }}\n </button>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="spinner-grid" spinner-start-active="true"></span>\n <!-- END UI-GRID SPINNER -->\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-exporter class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/motiondialer/list/view/view.contact.create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_CONTACT\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.name.$touched || form.$submitted) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START PHONES -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.phones.$touched || form.$submitted) && form.phones.$invalid}">\n <label class="control-label">{{\'APPLICATION_PHONES\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="phones" placeholder="{{\'APPLICATION_PHONES\' | translate}}" class="form-control" data-ng-model="item.phones" required/>\n <span data-ng-show="(form.phones.$touched || form.$submitted) && form.phones.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span class="help-block">\n <p>Insert one or multiple phones separated by commas, for example:</p>\n <p>0123455678, 3456785673, 2345667899</p>\n </span>\n </div>\n <!-- END PHONES -->\n\n <!-- START TIMEZONE -->\n <div class="form-group">\n <label class="control-label">Timezone</label><br>\n <select ng-model="item.timezone">\n <option value="">--</option>\n <optgroup ng-repeat="timezone in timezones" label="{{timezone.group}}">\n <option ng-repeat="zone in timezone.zones" value="{{zone.value}}">{{zone.name}}</option>\n </optgroup>\n </select>\n </div>\n <!-- END TIMEZONE -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/motiondialer/list/view/view.contact.import.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_CONTACT\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <!-- START PHONES -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.phones.$touched || form.$submitted) && form.phones.$invalid}">\n <label class="control-label">{{\'APPLICATION_PHONE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select multiple data-ng-model="item.phones" theme="bootstrap" name="phones" data-ng-disabled="disabled" required>\n <ui-select-match placeholder="{{ \'APPLICATION_PHONE\' | translate }}">{{$select.selected[$index]}}</ui-select-match>\n <ui-select-choices repeat="index in indexes | filter: $select.search">\n <div ng-bind-html="index | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form.phones.$touched || form.$submitted) && form.phones.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PHONES -->\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.name.$touched || form.$submitted) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}</label>\n <ui-select data-ng-model="item.name" theme="bootstrap" name="name" data-ng-disabled="disabled">\n <ui-select-match allow-clear placeholder="{{ \'APPLICATION_NAME\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="index in indexes | filter: $select.search">\n <div ng-bind-html="index | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END NAME -->\n\n <!-- START ACCOUNT_CODE -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.account.$touched || form.$submitted) && form.account.$invalid}">\n <label class="control-label">{{\'APPLICATION_ACCOUNT_CODE\' | translate}}</label>\n <ui-select data-ng-model="item.account" theme="bootstrap" account="account" data-ng-disabled="disabled">\n <ui-select-match allow-clear placeholder="{{ \'APPLICATION_ACCOUNT_CODE\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="index in indexes | filter: $select.search">\n <div ng-bind-html="index | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END ACCOUNT_CODE -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <ui-select data-ng-model="item.description" theme="bootstrap" name="description" data-ng-disabled="disabled">\n <ui-select-match allow-clear placeholder="{{ \'APPLICATION_DESCRIPTION\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="index in indexes | filter: $select.search">\n <div ng-bind-html="index | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END DESCRIPTION -->\n\n <!-- START TIMEZONE -->\n <!-- <div class="form-group">\n <label class="control-label">{{\'APPLICATION_TIMEZONE\' | translate}}</label><br>\n <select ng-model="item.timezone">\n <option value="">--</option>\n <optgroup ng-repeat="timezone in timezones" label="{{timezone.group}}">\n <option ng-repeat="zone in timezone.zones" value="{{zone.value}}">{{zone.name}}</option>\n </optgroup>\n </select>\n </div> -->\n <!-- END TIMEZONE -->\n\n <!-- START TIMEZONE -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_TIMEZONE\' | translate}}</label>\n <ui-select data-ng-model="item.timezone" theme="bootstrap" name="description" data-ng-disabled="disabled">\n <ui-select-match allow-clear placeholder="{{ \'APPLICATION_TIMEZONE\' | translate }}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="timezone.value as timezone in uiTimeZones | filter: $select.search" group-by="\'group\'">\n <div ng-bind-html="timezone.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END TIMEZONE -->\n\n <!-- START VARIABLES -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.variables.$touched || form.$submitted) && form.variables.$invalid}">\n <label class="control-label">{{\'APPLICATION_VARIABLES\' | translate}}</label>\n <ui-select multiple data-ng-model="item.variables" theme="bootstrap" name="variables" data-ng-disabled="disabled">\n <ui-select-match placeholder="{{ \'APPLICATION_VARIABLES\' | translate }}">{{$select.selected[$index]}}</ui-select-match>\n <ui-select-choices repeat="index in indexes | filter: $select.search">\n <div ng-bind-html="index | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form.variables.$touched || form.$submitted) && form.variables.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END VARIABLES -->\n\n </form>\n <!-- START PROGRESS -->\n <div>\n <p>{{\'APPLICATION_IMPORT_SUCCEEDED\' | translate}}: {{import.succeeded}}/{{csvLength}}</p>\n <div class="progress progress-sm" style="">\n <div class="progress-bar progress-bar-info" role="progressbar" ng-style="{ \'width\': import.success + \'%\' }"></div>\n </div>\n </div>\n <div>\n <p>{{\'APPLICATION_IMPORT_FAILED\' | translate}}: {{import.failed}}/{{csvLength}}</p>\n <div class="progress progress-sm" style="">\n <div class="progress-bar progress-bar-danger" role="progressbar" ng-style="{ \'width\': import.fail + \'%\' }"></div>\n </div>\n <div class="has-error" data-ng-if="noPhone.length">\n <span class="help-block help-block-error">\n {{\'APPLICATION_CONTACTS_WITHOUT_PHONE\' | translate}}: {{noPhone}}\n </span>\n </div>\n </div>\n <!-- END PROGRESS -->\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="start()" ng-disabled="form.$invalid || !form.phones || submitted">{{ \'APPLICATION_SUBMIT\' | translate }}</button>\n <button class="btn default" type="button" ng-click="close()" data-ng-if="!importing">{{ \'APPLICATION_CLOSE\' | translate }}</button>\n <button class="btn default" type="button" ng-click="stop()" data-ng-if="importing">{{ \'APPLICATION_STOP\' | translate }}</button>\n</div>\n'),a.put("app/motiondialer/list/view/view.contacts.html",'<div class="row" data-ng-init="getContacts()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_LIST\' | translate}} {{ \'APPLICATION_CONTACTS\' | translate}} </span>\n </div>\n </div>\n\n <div class="portlet-body">\n <div class="btn-group">\n <button class="btn green-jungle margin-bottom-10" ng-click="createContact()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_CONTACT\' | translate }}\n </button>\n <span class="btn default btn-file">\n <span class="fileinput-new"><i class="icon-cloud-upload"></i> {{\'APPLICATION_IMPORT_FROM_CSV\' | translate}}</span>\n <input type="file" nv-file-select="" uploader="uploader"/>\n </span>\n </div>\n\n <!-- <div class="btn-group">\n <button class="btn green-jungle" data-ng-click="newContact();">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_CONTACT\' | translate }}\n </button>\n\n </div> -->\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="spinner-grid" spinner-start-active="true"></span>\n <!-- END UI-GRID SPINNER -->\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-exporter class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/motiondialer/list/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getList()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-control-forward"></i>\n <a href="#">Motion Dialer</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-doc"></i>\n <a href="/motiondialer/lists/list">{{ \'APPLICATION_LISTS\' | translate }}</a>\n <i data-ng-show="list.name" class="fa fa-angle-right"></i>\n </li>\n <li data-ng-show="list.name">\n <a href="#">{{list.name}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/template.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{list.name}}\n </div>\n <!-- <div class="profile-usertitle-job">\n {{user.role}}\n </div> -->\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.motiondialer.lists.view.settings\')}">\n <a data-ng-href="/motiondialer/lists/view/{{list.id}}/settings">\n <i class="icon-settings"></i>\n {{ \'APPLICATION_SETTINGS\' | translate}} </a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.motiondialer.lists.view.contacts\')}">\n <a data-ng-href="/motiondialer/lists/view/{{list.id}}/contacts">\n <i class="icon-people"></i>\n {{ \'APPLICATION_CONTACTS\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/motiondialer/list/view/view.settings.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_LIST\' | translate}} {{ \'APPLICATION_SETTINGS\' | translate}} </span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_general" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n </li>\n </ul>\n </div>\n\n <div class="portlet-body">\n <div class="tab-content">\n <!-- START GENERAL TAB -->\n <div class="tab-pane active" id="tab_general">\n <form name="forms.general" data-ng-submit="forms.general.$valid && updateList()" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="list.name" required/>\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="list.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END GENERAL TAB -->\n\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/motiondialer/process/list/list.create.queue.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_PROCESS\' | translate }} {{\'APPLICATION_QUEUE\' | translate}}</h3>\n</div>\n<div class="modal-body">\n <form name="form" ng-init="initModal()" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.name.$touched || form.$submitted) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n <!-- START LIST -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.list.$touched || form.$submitted) && form.list.$invalid}">\n <label class="control-label">{{\'APPLICATION_LIST\' | translate}}<span class="required" aria-required="true">*</span></label>\n <select name="list" class="form-control" data-ng-model="item.list" ng-options="list.name for list in lists" required>\n </select>\n <span data-ng-show="(form.list.$touched || form.$submitted) && form.list.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END LIST -->\n <!-- START QUEUE -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.queue.$touched || form.$submitted) && form.queue.$invalid}">\n <label class="control-label">{{\'APPLICATION_QUEUE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <select name="queue" class="form-control" data-ng-model="item.queue" ng-options="queue.name for queue in queues" required>\n </select>\n <span data-ng-show="(form.queue.$touched || form.$submitted) && form.queue.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END QUEUE -->\n <!-- START TIMEOUT QUEUE -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.timeout.$touched || form.$submitted) && form.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" min="1" name="timeout" placeholder="{{\'APPLICATION_TIMEOUT\' | translate}}" class="form-control" data-ng-model="item.timeout" required/>\n <span data-ng-show="(form.timeout.$touched || form.$submitted) && form.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="form.timeout.$error.max || form.timeout.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_NUMBER\' | translate}}.\n </span>\n </div>\n <!-- END MAX RETRIES -->\n <!-- START TRUNK -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.device.$touched || form.$submitted) && form.device.$invalid}">\n <label class="control-label">{{\'APPLICATION_TRUNK\' | translate}}<span class="required" aria-required="true">*</span></label>\n <select name="device" class="form-control" data-ng-model="item.device" ng-options="trunk.name for trunk in trunks" required>\n <option value="fake">{{\'APPLICATION_SELECT\' | translate}} {{\'APPLICATION_TRUNK\' | translate}}</option>\n </select>\n <span data-ng-show="(form.queue.$touched || form.$submitted) && form.queue.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TRUNK -->\n <!-- START FETCH SORT -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_FETCH_SORT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <select name="fetch_sort" class="form-control" data-ng-model="item.fetch_sort" ng-options="fetch_sort for fetch_sort in [\'ASC\', \'DESC\']" required>\n </select>\n <span class="help-block">{{\'DESCRIPTION_TD_FETCH_SORT\' | translate}}</span>\n </div>\n <!-- END FETCH SORT-->\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/motiondialer/process/list/list.create.square.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_PROCESS\' | translate }} {{\'APPLICATION_CALLYSQUARE\' | translate}}</h3>\n</div>\n<div class="modal-body">\n <form name="form" ng-init="initModal()" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.name.$touched || form.$submitted) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n <!-- START LIST -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.list.$touched || form.$submitted) && form.list.$invalid}">\n <label class="control-label">{{\'APPLICATION_LIST\' | translate}}<span class="required" aria-required="true">*</span></label>\n <select name="list" class="form-control" data-ng-model="item.list" ng-options="list.name for list in lists" required>\n </select>\n <span data-ng-show="(form.list.$touched || form.$submitted) && form.list.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END LIST -->\n <!-- START PROJECT -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.project.$touched || form.$submitted) && form.project.$invalid}">\n <label class="control-label">{{\'APPLICATION_PROJECT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <select name="project" class="form-control" data-ng-model="item.project" ng-options="project.name for project in projects" required>\n </select>\n <span data-ng-show="(form.project.$touched || form.$submitted) && form.project.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PROJECT -->\n <!-- START TRUNK -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.device.$touched || form.$submitted) && form.device.$invalid}">\n <label class="control-label">{{\'APPLICATION_TRUNK\' | translate}}<span class="required" aria-required="true">*</span></label>\n <select name="device" class="form-control" data-ng-model="item.device" ng-options="trunk.name for trunk in trunks" required>\n <option value="fake">{{\'APPLICATION_SELECT\' | translate}} {{\'APPLICATION_TRUNK\' | translate}}</option>\n </select>\n <span data-ng-show="(form.device.$touched || form.$submitted) && form.device.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TRUNK -->\n <!-- START FETCH SORT -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_FETCH_SORT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <select name="fetch_sort" class="form-control" data-ng-model="item.fetch_sort" ng-options="fetch_sort for fetch_sort in [\'ASC\', \'DESC\']" required>\n </select>\n <span class="help-block">{{\'DESCRIPTION_TD_FETCH_SORT\' | translate}}</span>\n </div>\n <!-- END FETCH SORT-->\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'), -a.put("app/motiondialer/process/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-control-forward"></i>\n <a href="#">Motion Dialer</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-settings"></i>\n <a href="#">{{ \'APPLICATION_PROCESSES\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-docs font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_PROCESSES\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group">\n <button class="btn green-jungle dropdown-toggle" data-toggle="dropdown" data-close-others="true">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_PROCESS\' | translate }}\n </button>\n <ul class="dropdown-menu pull-right">\n <li>\n <a href="#" ng-click="createProcessQueue()">{{ \'APPLICATION_QUEUE\' | translate }}</a>\n </li>\n <li>\n <a href="#" ng-click="createProcessSquare()">{{ \'APPLICATION_CALLYSQUARE\' | translate | trusted}}</a>\n </li>\n </ul>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="spinner-grid" spinner-start-active="true"></span>\n <!-- END UI-GRID SPINNER -->\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-exporter class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/motiondialer/process/view/view.create.interval.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_INTERVAL\' | translate }} </h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n <!-- START TIME -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_TIME\' | translate }}</label>\n <div class="input-group input-large">\n <fieldset class="pull-left" ng-disabled="splittedInterval.alwaysTime"><uib-timepicker name="t_from" data-ng-model="splittedInterval.t_from" show-meridian="false" show-spinners="false"></uib-timepicker></fieldset>\n <div class="input-group-addon col-md-1 interval-to pull-left">to</div>\n <fieldset ng-disabled="splittedInterval.alwaysTime"><uib-timepicker name="t_to" data-ng-model="splittedInterval.t_to" show-meridian="false" show-spinners="false"></uib-timepicker></fieldset>\n <label class="control-label pointer-cursor"><input type="checkbox" data-ng-model="splittedInterval.alwaysTime">{{\'APPLICATION_ALWAYS\' | translate}}</label>\n </div>\n </div>\n <!-- END TIME -->\n\n <!-- START WEEKDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_WEEKDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="splittedInterval.wd_from" theme="bootstrap" name="wd_from">\n <ui-select-match placeholder="">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{weekDay.name | translate}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="splittedInterval.wd_to" theme="bootstrap" name="wd_to">\n <ui-select-match placeholder="">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{weekDay.name | translate}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END WEEKDAY -->\n\n <!-- START MONTHDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTHDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="splittedInterval.md_from" theme="bootstrap" name="md_from">\n <ui-select-match>{{$select.selected === \'always\' ? \'APPLICATION_ALWAYS\' : $select.selected | translate}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search">\n {{monthDay === \'always\' ? \'APPLICATION_ALWAYS\' : monthDay | translate}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="splittedInterval.md_to" theme="bootstrap" name="md_to">\n <ui-select-match>{{$select.selected === \'always\' ? \'APPLICATION_ALWAYS\' : $select.selected | translate}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search">\n {{monthDay === \'always\' ? \'APPLICATION_ALWAYS\' : monthDay | translate}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTHDAY -->\n\n <!-- START MONTH -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTH\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="splittedInterval.m_from" theme="bootstrap" name="m_from">\n <ui-select-match placeholder="">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.monthsNumber | filter: $select.search">\n {{month.name | translate}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="splittedInterval.m_to" theme="bootstrap" name="m_to">\n <ui-select-match placeholder="">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.monthsNumber | filter: $select.search">\n {{month.name | translate}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTH -->\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/motiondialer/process/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getProcess()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-control-forward"></i>\n <a href="#">Motion Dialer</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-settings"></i>\n <a href="/motiondialer/processes/list">{{ \'APPLICATION_PROCESSES\' | translate }}</a>\n <i data-ng-show="process.name" class="fa fa-angle-right"></i>\n </li>\n <li data-ng-show="process.name">\n <a href="#">{{process.name}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/account.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{process.name}} ({{ (process.status === \'RUN\') ? \'RUNNING...\' : \'STOPPED\' }})\n </div>\n <div class="profile-usertitle-job">\n <a href="/motiondialer/lists/view/{{process.id_list}}/settings">{{ \'APPLICATION_LIST\' | translate}} #{{process.id_list}} ({{process.fetch_sort}})</a>\n </div>\n </div>\n <!-- END SIDEBAR USER TITLE -->\n <div class="profile-userbuttons">\n <button data-ng-show="process.status" type="button" class="btn btn-circle btn-sm" data-ng-class="{\'green-meadow\': process.status == \'STOP\', \'red-sunglo\': process.status == \'RUN\'}" data-ng-click="runOrStop()">{{ (process.status === \'RUN\') ? \'STOP\' : \'RUN\' }}</button>\n </div>\n <div class="profile-userbuttons">\n <button style="cursor:default" data-ng-show="process.runtime" type="button" class="btn btn-circle btn-sm" data-ng-class="{\'green-meadow\': process.runtime.completed, \'yellow-crusta\': !process.runtime.completed}">{{process.runtime.completed ? \'Complete\' : \'Incomplete\'}}</button>\n <button style="cursor:default" class="btn btn-circle btn-sm" data-ng-class="{\'green-meadow\': !process.runtime.outOfTime, \'red-sunglo\': process.runtime.outOfTime}"><i data-ng-class="{\'icon-clock\': !process.runtime.outOfTime, \'icon-close\': process.runtime.outOfTime}"></i> {{process.runtime.outOfTime ? \'Out of time\' : \'On time\'}}</button>\n </div>\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.motiondialer.processes.view.overview\')}">\n <a data-ng-href="/motiondialer/processes/view/{{process.id}}/overview">\n <i class="icon-home"></i>\n {{ \'APPLICATION_OVERVIEW\' | translate}} </a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.motiondialer.processes.view.settings\')}">\n <a data-ng-href="/motiondialer/processes/view/{{process.id}}/settings">\n <i class="icon-settings"></i>\n {{ \'APPLICATION_SETTINGS\' | translate}} </a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.motiondialer.processes.view.intervals\')}">\n <a data-ng-href="/motiondialer/processes/view/{{process.id}}/intervals">\n <i class="icon-clock"></i>\n {{ \'APPLICATION_INTERVALS\' | translate}} </a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.motiondialer.processes.view.spooler\')}">\n <a data-ng-href="/motiondialer/processes/view/{{process.id}}/spooler">\n <i class="icon-options-vertical"></i>\n {{ \'APPLICATION_SPOOLER\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/motiondialer/process/view/view.intervals.html",'<div class="row" data-ng-init="initIntervals()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-clock theme-font"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_PROCESS\' | translate}} {{ \'APPLICATION_INTERVALS\' | translate}} </span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_allow" data-toggle="tab">{{ \'APPLICATION_ALLOW\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_disallow" data-toggle="tab">{{ \'APPLICATION_DISALLOW\' | translate}}</a>\n </li>\n </ul>\n </div>\n <div class="portlet-body">\n <div class="tab-content">\n <!-- ALLOW TAB -->\n <div class="tab-pane active" id="tab_allow">\n <button class="btn green-jungle margin-bottom-10" ng-click="createInterval(true)">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_INTERVAL\' | translate }} ({{ \'APPLICATION_ALLOW\' | translate }})\n </button>\n <table class="table table-bordered table-hover">\n <thead>\n <tr role="row" class="heading">\n <th>\n {{ \'APPLICATION_VALUE\' | translate}}\n </th>\n <th>\n {{ \'APPLICATION_ACTIONS\' | translate}}\n </th>\n </tr>\n </thead>\n <tbody>\n <tr ng-repeat="interval in process.intervals track by $index">\n <td>\n {{interval}}\n </td>\n <td>\n <button href="javascript:;" data-ng-click="editInterval(true, interval)" class="btn blue-hoki btn-sm"> {{ \'APPLICATION_EDIT\' | translate}} </button>\n <button data-ng-click="deleteInterval(interval, $index, true)" class="btn red-sunglo btn-sm"> {{ \'APPLICATION_DELETE\' | translate}} </button>\n </td>\n </tr>\n <tr ng-show="!process.intervals.length"><td colspan=2>{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</td></tr>\n </tbody>\n </table>\n </div>\n <!-- END ALLOW TAB -->\n <!-- DISALLOW TAB -->\n <div class="tab-pane" id="tab_disallow">\n <button class="btn green-jungle margin-bottom-10" ng-click="createInterval(false)">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_INTERVAL\' | translate }} ({{ \'APPLICATION_DISALLOW\' | translate }})\n </button>\n <table class="table table-bordered table-hover">\n <thead>\n <tr role="row" class="heading">\n <th>\n {{ \'APPLICATION_VALUE\' | translate}}\n </th>\n <th>\n {{ \'APPLICATION_ACTIONS\' | translate}}\n </th>\n </tr>\n </thead>\n <tbody>\n <tr ng-repeat="interval in process.not_intervals track by $index">\n <td>\n {{interval}}\n </td>\n <td>\n <button href="javascript:;" data-ng-click="editInterval(false, interval)" class="btn blue-hoki btn-sm"> {{ \'APPLICATION_EDIT\' | translate}} </button>\n <button href="javascript:;" data-ng-click="deleteInterval($index, interval, false)" class="btn red-sunglo btn-sm"> {{ \'APPLICATION_DELETE\' | translate}} </button>\n </td>\n </tr>\n <tr ng-show="!process.not_intervals.length"><td colspan=2>{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</td></tr>\n </tbody>\n </table>\n\n </div>\n <!-- END DISALLOW TAB -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/motiondialer/process/view/view.overview.html",'<div class="row" data-ng-init="getSummary()">\n <div class="col-md-12">\n <!-- BEGIN PORTLET -->\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-bar-chart theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_OVERVIEW\' | translate}}</span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_summary" data-toggle="tab">{{ \'APPLICATION_SUMMARY\' | translate}}</a>\n </li>\n <li ng-show="process.runtime">\n <a href="#" data-target="#tab_advanced" data-toggle="tab">{{ \'APPLICATION_ADVANCED\' | translate}}</a>\n </li>\n </ul>\n </div>\n <div class="portlet-body">\n <div class="tab-content">\n <!-- START SUMMARY TAB -->\n <div class="tab-pane active" id="tab_summary">\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="spinner-grid" spinner-start-active="true"></span>\n <!-- END UI-GRID SPINNER -->\n <div class="row number-stats margin-bottom-30">\n <div class="col-md-6 col-sm-6 col-xs-6">\n <div class="stat-left">\n <div class="stat-number">\n <div class="title">\n {{\'APPLICATION_TOTAL\' | translate}}\n </div>\n <div class="number">\n {{total}}\n </div>\n </div>\n </div>\n </div>\n <div class="col-md-6 col-sm-6 col-xs-6">\n <div class="stat-right">\n <div class="stat-number">\n <div class="title">\n {{\'APPLICATION_FRESH\' | translate}}\n </div>\n <div class="number">\n {{process.runtime.fresh || 0}}\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class="table-scrollable table-scrollable-borderless">\n <table class="table table-hover table-light">\n <thead>\n <tr class="uppercase">\n <th>\n {{\'APPLICATION_STATUS\' | translate}}\n </th>\n <th>\n {{\'APPLICATION_VALUE\' | translate}}\n </th>\n <th>\n {{\'APPLICATION_RATE\' | translate}}\n </th>\n <th>\n {{\'APPLICATION_DESCRIPTION\' | translate}}\n </th>\n </tr>\n </thead>\n <tr ng-repeat="sum in summary">\n <td>\n <a href="#" class="primary-link">{{\'APPLICATION_TD_\' + sum[0] | translate}}</a>\n </td>\n <td>\n {{sum[1]}}\n </td>\n <td>\n <span class="bold theme-font">{{ total ? ((sum[1]/total)*100).toFixed(2) : 0 }}%</span>\n </td>\n <td>\n {{\'DESCRIPTION_TD_\' + sum[0] | translate}}\n </td>\n </tr>\n </table>\n </div>\n </div>\n <!-- END SUMMARY TAB -->\n <!-- START SUMMARY TAB -->\n <div class="tab-pane" id="tab_advanced" ng-show="process.runtime">\n <div class="row number-stats margin-bottom-30">\n <div class="col-md-6 col-sm-6 col-xs-6">\n <div class="stat-left">\n <div class="stat-number">\n <div class="title">\n {{\'APPLICATION_SUCCESS\' | translate}}\n </div>\n <div class="number">\n {{process.runtime.success || 0}}\n </div>\n </div>\n </div>\n </div>\n <div class="col-md-6 col-sm-6 col-xs-6">\n <div class="stat-right">\n <div class="stat-number">\n <div class="title">\n {{\'APPLICATION_FAILED\' | translate}}\n </div>\n <div class="number">\n {{process.runtime.failed || 0}}\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class="table-scrollable table-scrollable-borderless">\n <table class="table table-hover table-light">\n <thead>\n <tr class="uppercase">\n <th>\n {{\'APPLICATION_STATUS\' | translate}}\n </th>\n <th>\n {{\'APPLICATION_VALUE\' | translate}}\n </th>\n <th>\n {{\'APPLICATION_DESCRIPTION\' | translate}}\n </th>\n </tr>\n </thead>\n <tr ng-repeat="(key, value) in process.runtime">\n <td>\n <a href="#" class="primary-link">{{\'APPLICATION_\' + key.toUpperCase() | translate}}</a>\n </td>\n <td ng-switch on="key">\n <span ng-switch-when="avgDial">{{value | number:2}}</span>\n <span ng-switch-when="avgDuration">{{value | number:2}}</span>\n <span ng-switch-when="avgProgress">{{value | number:2}}</span>\n <span ng-switch-when="completed">{{((value)? \'APPLICATION_YES\' : \'APPLICATION_NO\') | translate}}</span>\n <span ng-switch-when="outOfTime">{{((value)? \'APPLICATION_YES\' : \'APPLICATION_NO\') | translate}}</span>\n <span ng-switch-default>{{value}}</span>\n </td>\n <td>\n {{\'DESCRIPTION_TD_\' + key.toUpperCase() | translate}}\n </td>\n </tr>\n </table>\n </div>\n </div>\n <!-- END SUMMARY TAB -->\n </div>\n </div>\n </div>\n <!-- END PORTLET -->\n </div>\n</div>\n'),a.put("app/motiondialer/process/view/view.run.process.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_STATUS\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <p>\n Do you want to {{ status }} the process?\n </p>\n</div>\n<div class="modal-footer">\n <button class="btn default green-meadow" type="button" ng-click="yes()">{{ \'APPLICATION_YES\' | translate }}</button>\n <button class="btn default" type="button" ng-click="no()">{{ \'APPLICATION_NO\' | translate }}</button>\n</div>\n'),a.put("app/motiondialer/process/view/view.settings.html",'<div class="row" data-ng-init="initSettings()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_PROCESS\' | translate}} {{ \'APPLICATION_SETTINGS\' | translate}} </span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_general" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_channel" data-toggle="tab">{{ \'APPLICATION_CHANNEL\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_advanced" data-toggle="tab">{{ \'APPLICATION_ADVANCED\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_status" data-toggle="tab">{{ \'APPLICATION_STATUS\' | translate}}</a>\n </li>\n </ul>\n </div>\n <div class="portlet-body">\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_general">\n <form name="form" data-ng-submit="form.$valid && updateProcess()" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.name.$touched || form.$submitted) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="process.name" required/>\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n <!-- START QUEUE -->\n <div data-ng-show="process.queue != \'none\'" class="form-group" data-ng-class="{\'has-error\': (form.queue.$touched || form.$submitted) && form.queue.$invalid}">\n <label class="control-label">{{\'APPLICATION_QUEUE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="process.queue" name="queue" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="queue.name as queue in queues | filter: $select.search">\n <div ng-bind-html="queue.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form.queue.$touched || form.$submitted) && form.queue.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END QUEUE -->\n <!-- START MAX RETRIES -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.max_retries.$touched || form.$submitted) && form.max_retries.$invalid}">\n <label class="control-label">{{\'APPLICATION_MAX_RETRIES\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" min="1" max="100" name="max_retries" placeholder="{{\'APPLICATION_MAX_RETRIES\' | translate}}" class="form-control" data-ng-model="process.max_retries" required/>\n <span class="help-block">{{\'DESCRIPTION_TD_MAX_RETRIES\' | translate}}</span>\n <span data-ng-show="(form.max_retries.$touched || form.$submitted) && form.max_retries.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="form.max_retries.$error.max || form.max_retries.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_NUMBER\' | translate}}.\n </span>\n </div>\n <!-- END MAX RETRIES -->\n <!-- START RETRY TIME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.retry_time.$touched || form.$submitted) && form.retry_time.$invalid}">\n <label class="control-label">{{\'APPLICATION_RETRY_TIME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" min="1" name="retry_time" placeholder="{{\'APPLICATION_RETRY_TIME\' | translate}}" class="form-control" data-ng-model="process.retry_time" required/>\n <span class="help-block">{{\'DESCRIPTION_TD_RETRY_TIME\' | translate}}</span>\n <span data-ng-show="(form.retry_time.$touched || form.$submitted) && form.retry_time.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="form.retry_time.$error.max || form.retry_time.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_NUMBER\' | translate}}.\n </span>\n </div>\n <!-- END RETRY TIME -->\n <!-- START RETRY TIME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.wait_time.$touched || form.$submitted) && form.wait_time.$invalid}">\n <label class="control-label">{{\'APPLICATION_WAIT_TIME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" min="1000" name="wait_time" placeholder="{{\'APPLICATION_WAIT_TIME\' | translate}}" class="form-control" data-ng-model="process.wait_time" required/>\n <span class="help-block">{{\'DESCRIPTION_TD_WAIT_TIME\' | translate}}</span>\n <span data-ng-show="(form.wait_time.$touched || form.$submitted) && form.wait_time.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="form.wait_time.$error.max || form.wait_time.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_NUMBER\' | translate}}.\n </span>\n </div>\n <!-- END WAIT TIME -->\n <!-- START AUTO CLOSED -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_AUTO_CLOSED\' | translate}}</label></br>\n <input\n bs-switch\n data-ng-model="process.auto_closed"\n type="checkbox"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-animate="false">\n <span class="help-block">{{\'DESCRIPTION_TD_AUTO_CLOSED\' | translate}}</span>\n </div>\n <!-- END AUTO CLOSED -->\n <!-- START WEIGHT -->\n <!-- END WEIGHT -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_AUTODIAL_LEVEL\' | translate}}</label></br>\n <slider ng-model="process.weight" min="0" step="1" max="50"></slider>\n <label>{{\'APPLICATION_VALUE\' | translate}}: {{process.weight}}</label>\n <span class="help-block">{{\'DESCRIPTION_TD_WEIGHT\' | translate}}</span>\n </div>\n <!-- START DISPOSAL -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_TD_DISPOSAL\' | translate}}</label></br>\n <input\n bs-switch\n data-ng-model="process.disposal"\n type="checkbox"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-animate="false">\n <span class="help-block">{{\'DESCRIPTION_TD_DISPOSAL\' | translate}}</span>\n </div>\n <!-- END DISPOSAL -->\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="process.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END GENERAL TAB -->\n <!-- CHANNEL TAB -->\n <div class="tab-pane" id="tab_channel">\n <form name="form" data-ng-submit="form.$valid && updateProcess()" novalidate>\n <!-- START CONTEXT -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.context.$touched || form.$submitted) && form.context.$invalid}">\n <label class="control-label">{{\'APPLICATION_CONTEXT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="context" placeholder="{{\'APPLICATION_CONTEXT\' | translate}}" class="form-control" data-ng-model="process.context" required/>\n <span class="help-block">{{\'DESCRIPTION_TD_CONTEXT\' | translate}}</span>\n <span data-ng-show="(form.context.$touched || form.$submitted) && form.context.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CONTEXT -->\n <!-- START EXTENSION -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.extension.$touched || form.$submitted) && form.extension.$invalid}">\n <label class="control-label">{{\'APPLICATION_EXTENSION\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="extension" placeholder="{{\'APPLICATION_EXTENSION\' | translate}}" class="form-control" data-ng-model="process.extension" required/>\n <span class="help-block">{{\'DESCRIPTION_TD_EXTENSION\' | translate}}</span><a href="/channels/voice/routes/internal/list">Link {{\'APPLICATION_INTERNAL\' | translate}}</a>\n <span data-ng-show="(form.extension.$touched || form.$submitted) && form.extension.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END EXTENSION -->\n <!-- START PRIORITY -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.priority.$touched || form.$submitted) && form.priority.$invalid}">\n <label class="control-label">{{\'APPLICATION_PRIORITY\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" min="1" name="priority" placeholder="{{\'APPLICATION_PRIORITY\' | translate}}" class="form-control" data-ng-model="process.priority" required/>\n <span class="help-block">{{\'DESCRIPTION_TD_PRIORITY\' | translate}}</span>\n <span data-ng-show="(form.priority.$touched || form.$submitted) && form.priority.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="form.priority.$error.max || form.priority.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_NUMBER\' | translate}}.\n </span>\n </div>\n <!-- END PRIORITY -->\n <!-- START PREFIX -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_PREFIX\' | translate}}</label>\n <input type="text" name="prefix_code" placeholder="{{\'APPLICATION_PREFIX\' | translate}}" class="form-control" data-ng-model="process.prefix_code"/>\n <span class="help-block">{{\'DESCRIPTION_TD_PREFIX\' | translate}}</span>\n </div>\n <!-- END PREFIX -->\n <!-- START TECHNOLOGY -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_TECHNOLOGY\' | translate}}<span class="required" aria-required="true">*</span></label>\n <select name="tech" class="form-control" data-ng-model="process.tech" ng-options="tech for tech in techs" required>\n </select>\n <span class="help-block">{{\'DESCRIPTION_TD_TECHNOLOGY\' | translate}}</span>\n </div>\n <!-- END TECHNOLOGY -->\n <!-- START DEVICE -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.device.$touched || form.$submitted) && form.device.$invalid}">\n <label class="control-label">{{\'APPLICATION_TRUNK\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="device" placeholder="{{\'APPLICATION_TRUNK\' | translate}}" class="form-control" data-ng-model="process.device" required/>\n <span class="help-block">{{\'DESCRIPTION_TD_TRUNK\' | translate}}</span>\n <span data-ng-show="(form.device.$touched || form.$submitted) && form.device.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END DEVICE -->\n <!-- START CALLERID -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.callerid.$touched || form.$submitted) && form.callerid.$invalid}">\n <label class="control-label">{{\'APPLICATION_CALLERID\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="callerid" placeholder="{{\'APPLICATION_CALLERID\' | translate}}" class="form-control" data-ng-model="process.callerid" required/>\n <span class="help-block">{{\'DESCRIPTION_TD_CALLERID\' | translate}}</span>\n <span data-ng-show="(form.callerid.$touched || form.$submitted) && form.callerid.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CALLERID -->\n <!-- START CODEC -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_ALLOWED_CODECS\' | translate}}</label>\n <ui-select multiple data-ng-model="process.codecs" name="codecs" theme="bootstrap" data-ng-disabled="disabled">\n <ui-select-match placeholder="Select codec...">{{$item}}</ui-select-match>\n <ui-select-choices repeat="codec in codecs">\n {{codec}}\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END CODEC -->\n <!-- START DIAL FORMAT -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DIAL_FORMAT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <select name="dial_format" class="form-control" data-ng-model="process.dial_format" ng-options="dial_format for dial_format in dialFormats" required>\n </select>\n <span class="help-block">{{\'DESCRIPTION_TD_DIAL_FORMAT\' | translate}}</span>\n </div>\n <!-- END DIAL FORMAT -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END CHANNEL TAB -->\n <!-- ADVANCED TAB -->\n <div class="tab-pane" id="tab_advanced">\n <form name="form" data-ng-submit="form.$valid && updateProcess()" novalidate>\n <!-- START CHECK DUPLICATE -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_CHECK_DUPLICATE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <select name="check_duplicate" class="form-control" data-ng-model="process.check_duplicate" ng-options="check_duplicate for check_duplicate in checkDuplicates" required>\n </select>\n <span class="help-block">{{\'DESCRIPTION_TD_CHECK_DUPLICATE\' | translate}}</span>\n </div>\n <!-- END CHECK DUPLICATE -->\n <!-- START CHECK BLACKLIST -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_CHECK_BLACKLIST\' | translate}}</label></br>\n <input\n bs-switch\n data-ng-model="process.check_blacklist"\n type="checkbox"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-animate="false">\n <span class="help-block">{{\'DESCRIPTION_TD_CHECK_BLACKLIST\' | translate}}</span>\n </div>\n <!-- END CHECK BLACKLIST -->\n <!-- START CHECK PHONE LENGHT -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.check_phone_length.$touched || form.$submitted) && form.check_phone_length.$invalid}">\n <label class="control-label">{{\'APPLICATION_CHECK_PHONE_LENGHT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" min="1" name="check_phone_length" placeholder="{{\'APPLICATION_CHECK_PHONE_LENGHT\' | translate}}" class="form-control" data-ng-model="process.check_phone_length" required/>\n <span class="help-block">{{\'DESCRIPTION_TD_CHECK_PHONE_LENGHT\' | translate}}</span>\n <span data-ng-show="(form.check_phone_length.$touched || form.$submitted) && form.check_phone_length.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="form.check_phone_length.$error.max || form.check_phone_length.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_NUMBER\' | translate}}.\n </span>\n </div>\n <!-- END CHECK PHONE LENGHT -->\n <!-- START TIME SLICE -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.time_slice.$touched || form.$submitted) && form.time_slice.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIME_SLICE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" min="1" name="time_slice" placeholder="{{\'APPLICATION_TIME_SLICE\' | translate}}" class="form-control" data-ng-model="process.time_slice" required/>\n <span class="help-block">{{\'DESCRIPTION_TD_TIME_SLICE\' | translate}}</span>\n <span data-ng-show="(form.time_slice.$touched || form.$submitted) && form.time_slice.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="form.time_slice.$error.max || form.time_slice.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_NUMBER\' | translate}}.\n </span>\n </div>\n <!-- END TIME SLICE -->\n <!-- START MISSED -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_CHECK_MISSED\' | translate}}</label></br>\n <input\n bs-switch\n data-ng-model="process.missed"\n type="checkbox"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-animate="false">\n <span class="help-block">{{\'DESCRIPTION_TD_CHECK_MISSED\' | translate}}</span>\n </div>\n <!-- END MISSED -->\n <!-- START CHANNEL LIMIT -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.channel_limit.$touched || form.$submitted) && form.channel_limit.$invalid}">\n <label class="control-label">{{\'APPLICATION_CHANNEL_LIMIT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" min="0" name="channel_limit" placeholder="{{\'APPLICATION_CHANNEL_LIMIT\' | translate}}" class="form-control" data-ng-model="process.channel_limit" required/>\n <span class="help-block">{{\'DESCRIPTION_TD_CHANNEL_LIMIT\' | translate}}</span>\n <span data-ng-show="(form.channel_limit.$touched || form.$submitted) && form.channel_limit.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="form.channel_limit.$error.max || form.channel_limit.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_NUMBER\' | translate}}.\n </span>\n </div>\n <!-- END CHANNEL LIMIT -->\n <!-- START CONTEXT FOR OTHER CALLS -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_CONTEXT_FOR_OTHER_CALLS\' | translate}}</label>\n <input type="text" name="context_for_other_calls" placeholder="{{\'APPLICATION_CONTEXT_FOR_OTHER_CALLS\' | translate}}" class="form-control" data-ng-model="process.context_for_other_calls"/>\n <span class="help-block">{{\'DESCRIPTION_TD_CONTEXT_FOR_OTHER_CALLS\' | translate}}</span>\n </div>\n <!-- END CONTEXT FOR OTHER CALLS -->\n <!-- START EXTENSION FOR OTHER CALLS-->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_EXTENSION_FOR_OTHER_CALLS\' | translate}}</label>\n <input type="text" name="extension_for_other_calls" placeholder="{{\'APPLICATION_EXTENSION_FOR_OTHER_CALLS\' | translate}}" class="form-control" data-ng-model="process.extension_for_other_calls"/>\n <span class="help-block">{{\'DESCRIPTION_TD_EXTENSION_FOR_OTHER_CALLS\' | translate}}</span>\n </div>\n <!-- END EXTENSION FOR OTHER CALLS-->\n <!-- START PRIORITY FOR OTHER CALLS-->\n <div class="form-group" data-ng-class="{\'has-error\': (form.priority_for_other_calls.$touched || form.$submitted) && form.priority_for_other_calls.$invalid}">\n <label class="control-label">{{\'APPLICATION_PRIORITY_FOR_OTHER_CALLS\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" min="1" name="priority_for_other_calls" placeholder="{{\'APPLICATION_PRIORITY_FOR_OTHER_CALLS\' | translate}}" class="form-control" data-ng-model="process.priority_for_other_calls"/>\n <span class="help-block">{{\'DESCRIPTION_TD_PRIORITY_FOR_OTHER_CALLS\' | translate}}</span>\n <span data-ng-show="form.priority_for_other_calls.$error.max || form.priority_for_other_calls.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_NUMBER\' | translate}}.\n </span>\n </div>\n <!-- END PRIORITY FOR OTHER CALLS -->\n <!-- START TIMEZONE -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_EXTENDED_TIME_INTERVAL\' | translate}}</label>\n <input type="text" name="timezone" placeholder="08:30-20:30" class="form-control" data-ng-model="process.timezone"/>\n <span class="help-block">{{\'DESCRIPTION_TD_EXTENDED_TIME_INTERVAL\' | translate}}</span>\n </div>\n <!-- END TIMEZONE -->\n\n <!-- START AUTO TIMEZONE MANAGEMENT -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_AUTO_TIMEZONE_MANAGEMENT\' | translate}}</label></br>\n <input\n bs-switch\n data-ng-model="process.auto_timezone_management"\n type="checkbox"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-animate="false">\n <span class="help-block">{{\'DESCRIPTION_TD_AUTO_TIMEZONE_MANAGEMENT\' | translate}}</span>\n </div>\n <!-- END AUTO TIMEZONE MANAGEMENT -->\n <!-- START IGNORE STRINGS-->\n <!-- COMMENTED: BECAUSE IGNORE_STRINGS IS AN ARRAY NOT A STRING-->\n <!-- <div class="form-group">\n <label class="control-label">{{\'APPLICATION_IGNORE_STRINGS\' | translate}}</label>\n <input type="text" name="ignore_strings" placeholder="{{\'APPLICATION_IGNORE_STRINGS\' | translate}}" class="form-control" data-ng-model="process.ignore_strings"/>\n <span class="help-block">{{\'DESCRIPTION_TD_IGNORE_STRINGS\' | translate}}</span>\n </div> -->\n <!-- END IGNORE STRINGS-->\n <!-- START MIN OPERATOR -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.min_operator.$touched || form.$submitted) && form.min_operator.$invalid}">\n <label class="control-label">{{\'APPLICATION_MIN_OPERATOR\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" min="1" name="min_operator" placeholder="{{\'APPLICATION_MIN_OPERATOR\' | translate}}" class="form-control" data-ng-model="process.min_operator" required/>\n <span class="help-block">{{\'DESCRIPTION_TD_MIN_OPERATOR\' | translate}}</span>\n <span data-ng-show="(form.min_operator.$touched || form.$submitted) && form.min_operator.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="form.min_operator.$error.max || form.min_operator.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_NUMBER\' | translate}}.\n </span>\n </div>\n <!-- END MIN OPERATOR -->\n <!-- START ALERT MAX CALLS -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.alert_max_calls.$touched || form.$submitted) && form.alert_max_calls.$invalid}">\n <label class="control-label">{{\'APPLICATION_ALERT_MAX_CALLS\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" min="0" name="alert_max_calls" placeholder="{{\'APPLICATION_ALERT_MAX_CALLS\' | translate}}" class="form-control" data-ng-model="process.alert_max_calls" required/>\n <span class="help-block">{{\'DESCRIPTION_TD_ALERT_MAX_CALLS\' | translate}}</span>\n <span data-ng-show="(form.alert_max_calls.$touched || form.$submitted) && form.alert_max_calls.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="form.alert_max_calls.$error.max || form.alert_max_calls.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_NUMBER\' | translate}}.\n </span>\n </div>\n <!-- END ALERT MAX CALLS -->\n <!-- START ALERT TIME SLICE -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.alert_time_slice.$touched || form.$submitted) && form.alert_time_slice.$invalid}">\n <label class="control-label">{{\'APPLICATION_ALERT_TIME_SLICE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" min="1" name="alert_time_slice" placeholder="{{\'APPLICATION_ALERT_TIME_SLICE\' | translate}}" class="form-control" data-ng-model="process.alert_time_slice" required/>\n <span class="help-block">{{\'DESCRIPTION_TD_ALERT_TIME_SLICE\' | translate}}</span>\n <span data-ng-show="(form.alert_time_slice.$touched || form.$submitted) && form.alert_time_slice.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="form.alert_time_slice.$error.max || form.alert_time_slice.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_NUMBER\' | translate}}.\n </span>\n </div>\n <!-- END ALERT TIME SLICE -->\n <!-- START DROP MAX COUNT -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.drop_max_count.$touched || form.$submitted) && form.drop_max_count.$invalid}">\n <label class="control-label">{{\'APPLICATION_DROP_MAX_COUNT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" min="0" name="drop_max_count" placeholder="{{\'APPLICATION_DROP_MAX_COUNT\' | translate}}" class="form-control" data-ng-model="process.drop_max_count" required/>\n <span class="help-block">{{\'DESCRIPTION_TD_DROP_MAX_COUNT\' | translate}}</span>\n <span data-ng-show="(form.drop_max_count.$touched || form.$submitted) && form.drop_max_count.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="form.drop_max_count.$error.max || form.drop_max_count.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_NUMBER\' | translate}}.\n </span>\n </div>\n <!-- END DROP MAX COUNT -->\n <!-- START SUCCESS CALL SIZE -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.success_call_size.$touched || form.$submitted) && form.success_call_size.$invalid}">\n <label class="control-label">{{\'APPLICATION_SUCCESS_CALL_SIZE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" min="1" name="success_call_size" placeholder="{{\'APPLICATION_SUCCESS_CALL_SIZE\' | translate}}" class="form-control" data-ng-model="process.success_call_size" required/>\n <span class="help-block">{{\'DESCRIPTION_TD_SUCCESS_CALL_SIZE\' | translate}}</span>\n <span data-ng-show="(form.success_call_size.$touched || form.$submitted) && form.success_call_size.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="form.success_call_size.$error.max || form.success_call_size.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_NUMBER\' | translate}}.\n </span>\n </div>\n <!-- END SUCCESS CALL SIZE -->\n <!-- START IGNORE STRINGS-->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_TIME_EXPIRED\' | translate}}</label>\n <input type="text" name="expiredtime" placeholder="yyyy-MM-dd HH:mm:ss" class="form-control" data-ng-model="process.expiredtime"/>\n <span class="help-block">{{\'DESCRIPTION_TD_TIME_EXPIRED\' | translate}}</span>\n </div>\n <!-- END IGNORE STRINGS-->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END ANDVANCED TAB -->\n <!-- START STATUS TAB -->\n <div class="tab-pane" id="tab_status">\n <form name="form" data-ng-submit="form.$valid && updateProcess()" novalidate>\n <table class="table table-bordered table-hover">\n <thead>\n <tr role="row" class="heading">\n <th>\n {{ \'APPLICATION_VALUE\' | translate}}\n </th>\n <th>\n {{ \'APPLICATION_MAX_RETRIES\' | translate}}\n </th>\n <th>\n {{ \'APPLICATION_RETRY_TIME\' | translate}} [min]\n </th>\n <th>\n {{ \'APPLICATION_DESCRIPTION\' | translate}}\n </th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td>\n {{ \'APPLICATION_AMD\' | translate}}\n </td>\n <td>\n <input type="number" min="0" name="amd_max_retries"class="form-control" data-ng-model="process.amd_max_retries" required/>\n <span data-ng-show="(form.amd_max_retries.$touched || form.$submitted) && form.amd_max_retries.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="form.amd_max_retries.$error.max || form.amd_max_retries.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_NUMBER\' | translate}}.\n </span>\n </td>\n <td>\n <input type="number" min="0" name="amd_retry_time" class="form-control" data-ng-model="process.amd_retry_time" required/>\n <span data-ng-show="(form.amd_retry_time.$touched || form.$submitted) && form.amd_retry_time.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="form.amd_retry_time.$error.max || form.amd_retry_time.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_NUMBER\' | translate}}.\n </span>\n </td>\n <td>\n {{ \'DESCRIPTION_TD_STATUS_AMD\' | translate}}\n </td>\n </tr>\n <tr>\n <td>\n {{ \'APPLICATION_BUSY\' | translate}}\n </td>\n <td>\n <input type="number" min="0" name="busy_max_retries"class="form-control" data-ng-model="process.busy_max_retries" required/>\n <span data-ng-show="(form.busy_max_retries.$touched || form.$submitted) && form.busy_max_retries.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="form.busy_max_retries.$error.max || form.busy_max_retries.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_NUMBER\' | translate}}.\n </span>\n </td>\n <td>\n <input type="number" min="0" name="busy_retry_time"class="form-control" data-ng-model="process.busy_retry_time" required/>\n <span data-ng-show="(form.busy_retry_time.$touched || form.$submitted) && form.busy_retry_time.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="form.busy_retry_time.$error.max || form.busy_retry_time.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_NUMBER\' | translate}}.\n </span>\n </td>\n <td>\n {{ \'DESCRIPTION_TD_STATUS_BUSY\' | translate}}\n </td>\n </tr>\n <tr>\n <td>\n {{ \'APPLICATION_CONGESTION\' | translate}}\n </td>\n <td>\n <input type="number" min="0" name="congestion_max_retries"class="form-control" data-ng-model="process.congestion_max_retries" required/>\n <span data-ng-show="(form.congestion_max_retries.$touched || form.$submitted) && form.congestion_max_retries.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="form.congestion_max_retries.$error.max || form.congestion_max_retries.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_NUMBER\' | translate}}.\n </span>\n </td>\n <td>\n <input type="number" min="0" name="congestion_retry_time"class="form-control" data-ng-model="process.congestion_retry_time" required/>\n <span data-ng-show="(form.congestion_retry_time.$touched || form.$submitted) && form.congestion_retry_time.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="form.congestion_retry_time.$error.max || form.congestion_retry_time.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_NUMBER\' | translate}}.\n </span>\n </td>\n <td>\n {{ \'DESCRIPTION_TD_STATUS_CONGESTION\' | translate}}\n </td>\n </tr>\n <tr>\n <td>\n {{ \'APPLICATION_DROP\' | translate}}\n </td>\n <td>\n <input type="number" min="0" name="drop_max_retries"class="form-control" data-ng-model="process.drop_max_retries" required/>\n <span data-ng-show="(form.drop_max_retries.$touched || form.$submitted) && form.drop_max_retries.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="form.drop_max_retries.$error.max || form.drop_max_retries.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_NUMBER\' | translate}}.\n </span>\n </td>\n <td>\n <input type="number" min="0" name="drop_retry_time"class="form-control" data-ng-model="process.drop_retry_time" required/>\n <span data-ng-show="(form.drop_retry_time.$touched || form.$submitted) && form.drop_retry_time.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="form.drop_retry_time.$error.max || form.drop_retry_time.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_NUMBER\' | translate}}.\n </span>\n </td>\n <td>\n {{ \'DESCRIPTION_TD_STATUS_DROP\' | translate}}\n </td>\n </tr>\n <tr>\n <td>\n {{ \'APPLICATION_FAILED\' | translate}}\n </td>\n <td>\n <input type="number" min="0" name="failed_max_retries"class="form-control" data-ng-model="process.failed_max_retries" required/>\n <span data-ng-show="(form.failed_max_retries.$touched || form.$submitted) && form.failed_max_retries.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="form.failed_max_retries.$error.max || form.failed_max_retries.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_NUMBER\' | translate}}.\n </span>\n </td>\n <td>\n <input type="number" min="0" name="failed_retry_time"class="form-control" data-ng-model="process.failed_retry_time" required/>\n <span data-ng-show="(form.failed_retry_time.$touched || form.$submitted) && form.failed_retry_time.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="form.failed_retry_time.$error.max || form.failed_retry_time.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_NUMBER\' | translate}}.\n </span>\n </td>\n <td>\n {{ \'DESCRIPTION_TD_STATUS_FAILED\' | translate}}\n </td>\n </tr>\n <tr>\n <td>\n {{ \'APPLICATION_NOANSWER\' | translate}}\n </td>\n <td>\n <input type="number" min="0" name="noanswer_max_retries"class="form-control" data-ng-model="process.noanswer_max_retries" required/>\n <span data-ng-show="(form.noanswer_max_retries.$touched || form.$submitted) && form.noanswer_max_retries.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="form.noanswer_max_retries.$error.max || form.noanswer_max_retries.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_NUMBER\' | translate}}.\n </span>\n </td>\n <td>\n <input type="number" min="0" name="noanswer_retry_time"class="form-control" data-ng-model="process.noanswer_retry_time" required/>\n <span data-ng-show="(form.noanswer_retry_time.$touched || form.$submitted) && form.noanswer_retry_time.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="form.noanswer_retry_time.$error.max || form.noanswer_retry_time.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_NUMBER\' | translate}}.\n </span>\n </td>\n <td>\n {{ \'DESCRIPTION_TD_STATUS_NOANSWER\' | translate}}\n </td>\n </tr>\n <tr>\n <td>\n {{ \'APPLICATION_NOSUCHEXTENSION\' | translate}}\n </td>\n <td>\n <input type="number" min="0" name="nosuchextension_max_retries"class="form-control" data-ng-model="process.nosuchextension_max_retries" required/>\n <span data-ng-show="(form.nosuchextension_max_retries.$touched || form.$submitted) && form.nosuchextension_max_retries.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="form.nosuchextension_max_retries.$error.max || form.nosuchextension_max_retries.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_NUMBER\' | translate}}.\n </span>\n </td>\n <td>\n <input type="number" min="0" name="nosuchextension_retry_time"class="form-control" data-ng-model="process.nosuchextension_retry_time" required/>\n <span data-ng-show="(form.nosuchextension_retry_time.$touched || form.$submitted) && form.nosuchextension_retry_time.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="form.nosuchextension_retry_time.$error.max || form.nosuchextension_retry_time.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_NUMBER\' | translate}}.\n </span>\n </td>\n <td>\n {{ \'DESCRIPTION_TD_STATUS_NOSUCHEXTENSION\' | translate}}\n </td>\n </tr>\n </tbody>\n </table>\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END STATUS TAB -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'), -a.put("app/motiondialer/process/view/view.spooler.edit.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_EDIT\' | translate }} {{ \'APPLICATION_CONTACT\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <!-- START RETRIEVE -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.retrieve.$touched || form.$submitted) && form.retrieve.$invalid}" ng-init="initModal()">\n <label class="control-label">{{ \'APPLICATION_STATUS\' | translate }}<span class="required" aria-required="true">*</span></label>\n <select name="retrieve" class="form-control" data-ng-model="entitySpooler.retrieve" required>\n <option value="CLOSED">CLOSE</option>\n <option value="OPEN">OPEN</option>\n <option value="BLACK_LIST">BLACKLIST</option>\n <option value="PLANNED">PLANNING</option>\n <option value="PLANNED_PEER">PLANNING AGENT</option>\n </select>\n <span data-ng-show="(form.retrieve.$touched || form.$submitted) && form.retrieve.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END RETRIEVE -->\n <!-- START PLANNING DATE -->\n <div class="form-group" data-ng-if="entitySpooler.retrieve == \'PLANNED\' || entitySpooler.retrieve == \'PLANNED_PEER\'" data-ng-class="{\'has-error\': (form.date.$touched || form.$submitted) && form.date.$invalid}">\n <label class="control-label">PLANNING DATE<span class="required" aria-required="true">*</span></label>\n <uib-datepicker name="date" ng-model="entitySpooler.planningtime" required="entitySpooler.retrieve == \'PLANNED\' || entitySpooler.retrieve == \'PLANNED_PEER\'" data-ng-init="entitySpooler.planningtime = moment()"></uib-datepicker>\n <span data-ng-show="(form.date.$touched || form.$submitted) && form.date.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PLANNING DATE -->\n <!-- START PLANNING TIME -->\n <div class="form-group" data-ng-if="entitySpooler.retrieve == \'PLANNED\' || entitySpooler.retrieve == \'PLANNED_PEER\'" data-ng-class="{\'has-error\': (form.time.$touched || form.$submitted) && form.time.$invalid}">\n <label class="control-label">PLANNING TIME<span class="required" aria-required="true">*</span></label>\n <uib-timepicker name="time" ng-model="entitySpooler.planningtime" required="entitySpooler.retrieve == \'PLANNED\' || entitySpooler.retrieve == \'PLANNED_PEER\'" show-meridian="false" show-seconds="false"></uib-timepicker>\n <span data-ng-show="(form.time.$touched || form.$submitted) && form.time.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PLANNING TIME -->\n <!-- START PLANNING PEER -->\n <div class="form-group" data-ng-if="entitySpooler.retrieve == \'PLANNED_PEER\'" data-ng-class="{\'has-error\': (form.agent.$touched || form.$submitted) && form.agent.$invalid}">\n <label class="control-label">{{\'APPLICATION_AGENT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <select name="agent" class="form-control" data-ng-model="entitySpooler.planningpeer" ng-options="agent for agent in agents" required="entitySpooler.retrieve == \'PLANNED_PEER\'">\n </select>\n <span data-ng-show="(form.agent.$touched || form.$submitted) && form.agent.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PLANNING PEER -->\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CLOSE\' | translate }}</button>\n</div>\n'),a.put("app/motiondialer/process/view/view.spooler.history.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_HISTORY\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <json-formatter json="historySpooler" open="2"></json-formatter>\n</div>\n<div class="modal-footer">\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CLOSE\' | translate }}</button>\n</div>\n'),a.put("app/motiondialer/process/view/view.spooler.html",'<div class="row" data-ng-init="getSpooler()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_SPOOLER\' | translate}} </span>\n </div>\n <div class="actions">\n <a class="btn btn-default" href="#" data-ng-click="getSpooler()">\n <i class="icon-refresh"></i>\n </a>\n </div>\n </div>\n\n <div class="portlet-body">\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="spinner-grid" spinner-start-active="true"></span>\n <!-- END UI-GRID SPINNER -->\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-exporter class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/reset/reset.html",'<!-- BEGIN LOGO -->\n<div class="logo" data-ng-init="getInfo()">\n <a href="index.html">\n <img data-ng-if="settings.defaultLoginLogo || !license.custom" ng-src="assets/images/logo-big.png" alt="logo" />\n <img data-ng-if="license.custom && !settings.defaultLoginLogo" ng-src="api/settings/logo/login/{{settings.loginLogo ? settings.loginLogo : \'logo-big.png\'}}" alt="logo" class="custom-login-logo" onError="this.onerror=null;this.src=\'assets/images/logo-big.png\';"/>\n </a>\n</div>\n<!-- END LOGO -->\n<!-- BEGIN RESET -->\n<div class="content">\n <!-- BEGIN RESET FORM -->\n <form name="resetForm" data-ng-submit="resetForm.$valid && reset()" novalidate>\n <h3>{{\'APPLICATION_RESET_PASSWORD\' | translate}}</h3>\n <p>\n {{\'APPLICATION_INSERT_NEW_PASSWORD_RESET\' | translate}}\n </p>\n <div class="form-group" data-ng-class="{\'has-error\': resetForm.$submitted && resetForm.password.$invalid}">\n <label class="control-label">{{\'APPLICATION_NEW_PASSWORD\' | translate}}</label>\n <div class="input-icon">\n <i class="icon-key"></i>\n <input class="form-control form-control-solid placeholder-no-fix" type="password" placeholder="{{\'APPLICATION_NEW_PASSWORD\' | translate}}" name="password" ng-model="userReset.password" data-ng-pattern="settings.patternPassword" required/>\n </div>\n <span data-ng-show="resetForm.$submitted && resetForm.password.$invalid" class="help-block">{{\'MESSAGE_REQUIRED_FIELD\' | translate}}</span>\n <span data-ng-show="(resetForm.password.$touched || resetForm.$submitted) && resetForm.password.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n </span>\n </div>\n <div class="form-group" data-ng-class="{\'has-error\': resetForm.$submitted && resetForm.rePassword.$invalid}">\n <label class="control-label">{{\'APPLICATION_RE_TYPE_NEW_PASSWORD\' | translate}}</label>\n <div class="input-icon">\n <i class="icon-key"></i>\n <input class="form-control form-control-solid placeholder-no-fix" type="password" placeholder="{{\'APPLICATION_RE_TYPE_NEW_PASSWORD\' | translate}}" name="rePassword" ng-model="userReset.rePassword" nx-equal="userReset.password" required/>\n </div>\n <span data-ng-show="resetForm.$submitted && resetForm.rePassword.$invalid" class="help-block">{{\'MESSAGE_REQUIRED_FIELD\' | translate}}</span>\n <span data-ng-show="(resetForm.password.$touched || resetForm.$submitted) && resetForm.$error.nxEqual" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_PASSWORD\' | translate}}.\n </span>\n </div>\n <div class="form-actions">\n <button type="submit" class="btn btn-success uppercase">{{\'APPLICATION_SUBMIT\' | translate}}</button>\n </div>\n </form>\n <!-- END RESET FORM-->\n <div class="login-options">\n <h4>{{\'APPLICATION_FOLLOW_US\' | translate}}</h4>\n <ul class="social-icons">\n <li>\n <a class="social-icon-color facebook" data-original-title="facebook" href="https://www.facebook.com/xenialab"></a>\n </li>\n <li>\n <a class="social-icon-color twitter" data-original-title="Twitter" href="https://twitter.com/xenialab"></a>\n </li>\n <li>\n <a class="social-icon-color googleplus" data-original-title="Goole Plus" href="#"></a>\n </li>\n <li>\n <a class="social-icon-color linkedin" data-original-title="Linkedin" href="#"></a>\n </li>\n </ul>\n </div>\n</div>\n<div class="copyright">\n xCALLY Motion v. {{info.version}} | 2016 - {{year + 1}} © Powered by Xenialab <ng-bind-html data-ng-if="license.custom && !settings.defaultFooterWhiteLabel && settings.footerWhiteLabel" ng-bind-html="\'| \'+settings.footerWhiteLabel"></ng-bind-html>\n</div>\n<!-- END RESET -->\n'),a.put("app/salesforce/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-cloud"></i>\n <a href="/salesforce/list">{{ \'APPLICATION_SALESFORCE\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="fa fa-cloud font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_SALESFORCE\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <a class="btn green-jungle" href="/salesforce/wizard" data-toggle="dropdown">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_ACCOUNT\' | translate }}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/salesforce/view/configuration/list/create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_CONFIGURATION\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.name.$touched || form.name.$submitted) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="(form.name.$touched || form.name.$submitted) && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START CHANNEL -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.channel.$touched || form.channel.$submitted) && form.channel.$invalid}">\n <label class="control-label">{{\'APPLICATION_CHANNEL\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="item.channel" name="channel" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_CHANNEL\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="channel.value as channel in channels | filter: $select.search">\n <div data-ng-bind="channel.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form.channel.$touched || form.channel.$submitted) && form.channel.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- START CHANNEL -->\n\n <!-- START VOICE SUBTYPE -->\n <div data-ng-if="item.channel===\'voice\'" class="form-group" data-ng-class="{\'has-error\': (form.channel.$touched || form.channel.$submitted) && form.channel.$invalid}">\n <label class="control-label">{{\'APPLICATION_TYPE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="item.type" name="type" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_TYPE\' | translate}}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="type in [\'Queue\',\'Outbound\'] | filter: $select.search">\n <div data-ng-bind="type | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form.type.$touched || form.type.$submitted) && form.type.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- START CHANNEL -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"/></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/salesforce/view/configuration/list/list.html",'<div ui-view class="profile-content">\r\n <div class="row">\r\n <div class="col-md-12">\r\n <div class="portlet light" data-ng-init="initView()">\r\n <div class="portlet-title tabbable-line">\r\n <div class="caption caption-md">\r\n <i class="icon-globe theme-font hide"></i>\r\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_CONFIGURATIONS\' | translate}}</span>\r\n </div>\r\n <div class="actions">\r\n <div class="btn-group" data-ng-show="id.length">\r\n <a class="btn red" href="#" data-ng-click="deleteItems()">\r\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\r\n </a>\r\n </div>\r\n <div class="btn-group">\r\n <a class="btn green-jungle" href="#" data-ng-click="createItem()">\r\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_CONFIGURATION\' | translate }}\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n <div class="portlet-body">\r\n <!-- START TABLE -->\r\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\r\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n'),a.put("app/salesforce/view/configuration/view/view.html",'<div class="row" data-ng-init="initView();getConfiguration();getCustomVariables();getFields();">\r\n <div class="col-md-12">\r\n <div class="portlet light">\r\n <div class="portlet-title tabbable-line">\r\n <div class="caption caption-md">\r\n <i class="icon-globe theme-font hide"></i>\r\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_CONFIGURATION\' | translate}}: {{configurationName}}</span>\r\n </div>\r\n <ul class="nav nav-tabs">\r\n <li class="active">\r\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_SUBJECT\' | translate}}</a>\r\n </li>\r\n <li>\r\n <a href="#" data-target="#tab_1_2" data-toggle="tab">{{\'APPLICATION_DESCRIPTION\' | translate}}</a>\r\n </li>\r\n <li>\r\n <a href="#" data-target="#tab_1_3" data-toggle="tab">{{\'APPLICATION_FIELDS\' | translate}}</a>\r\n </li>\r\n </ul>\r\n </div>\r\n <div class="portlet-body">\r\n <div class="tab-content">\r\n <!-- SUBJECT TAB -->\r\n <div class="tab-pane ui-padding active" id="tab_1_1">\r\n <div class="row">\r\n <div class="col-md-11">\r\n <span class="caption-subject">All following fields will be join by blank space:</span>\r\n </div>\r\n <div class="col-md-1 pull-rigth">\r\n <button class="btn btn-icon-only green" data-ng-click="addItem(\'subject\')"><i class="fa fa-plus"></i></button>\r\n </div>\r\n </div>\r\n <hr>\r\n <!-- <div id="subject-item-list" ng-scrollbars ng-scrollbars-config="config"> -->\r\n <div class="row" data-ng-repeat="subjectItem in subjectConfig">\r\n <div class="col-md-3">\r\n <ui-select ng-model="subjectItem.type" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeType(subjectItem)">\r\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.title}}</ui-select-match>\r\n <ui-select-choices repeat="item.type as item in fieldType | filter: $select.search">\r\n <div ng-bind-html="item.title | highlight: $select.search"></div>\r\n </ui-select-choices>\r\n </ui-select>\r\n </div>\r\n <div class="col-md-8" data-ng-if="subjectItem.type==\'string\'">\r\n <div class="form-group">\r\n <input type="text" class="form-control" data-ng-model="subjectItem.content" data-ng-change="updateField(subjectItem)">\r\n </div>\r\n </div>\r\n <div class="col-md-8" data-ng-if="subjectItem.type==\'variable\'">\r\n <div class="form-group">\r\n <ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="subjectItem.variableName" data-ng-change="updateField(subjectItem)">\r\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.title}}</ui-select-match>\r\n <ui-select-choices group-by="groupVariableByGroup" repeat="variable.name as variable in variables | filter: $select.search">\r\n <div ng-bind-html="variable.title | highlight: $select.search"></div>\r\n </ui-select-choices>\r\n </ui-select>\r\n </div>\r\n </div>\r\n <div class="col-md-8" data-ng-if="subjectItem.type==\'customVariable\'">\r\n <div class="form-group">\r\n <ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="subjectItem.VariableId" data-ng-change="updateField(subjectItem)">\r\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\r\n <ui-select-choices repeat="variable.id as variable in customVariables | filter: $select.search">\r\n <div ng-bind-html="variable.name | highlight: $select.search"></div>\r\n </ui-select-choices>\r\n </ui-select>\r\n </div>\r\n </div>\r\n <div class="col-md-1">\r\n <div class="form-group">\r\n <button class="btn btn-icon-only red" data-ng-click="removeItem(subjectItem)"><i class="fa fa-times"></i></button>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- </div> -->\r\n </div>\r\n <!-- END SUBJECT TAB -->\r\n <!-- DESCRIPTION TAB -->\r\n <div class="tab-pane ui-padding" id="tab_1_2">\r\n <div class="row">\r\n <div class="col-md-11">\r\n <span class="caption-subject">All following fields will be join by new line:</span>\r\n </div>\r\n <div class="col-md-1 pull-rigth">\r\n <button class="btn btn-icon-only green" data-ng-click="addItem(\'description\')"><i class="fa fa-plus"></i></button>\r\n </div>\r\n </div>\r\n <hr>\r\n <!-- <div id="description-item-list" ng-scrollbars ng-scrollbars-config="config"> -->\r\n <div class="row" data-ng-repeat="descriptionItem in descriptionConfig">\r\n <div class="col-md-2">\r\n <ui-select ng-model="descriptionItem.type" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeDescType(descriptionItem)">\r\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.title}}</ui-select-match>\r\n <ui-select-choices repeat="item.type as item in descFieldType | filter: $select.search">\r\n <div ng-bind-html="item.title | highlight: $select.search"></div>\r\n </ui-select-choices>\r\n </ui-select>\r\n </div>\r\n <div class="col-md-9" data-ng-if="descriptionItem.type==\'string\'">\r\n <div class="form-group">\r\n <input type="text" class="form-control" data-ng-model="descriptionItem.content" data-ng-change="updateField(descriptionItem)">\r\n </div>\r\n </div>\r\n <div class="col-md-3" data-ng-if="descriptionItem.type==\'keyValue\'">\r\n <input type="text" class="form-control" placeholder="Key" data-ng-model="descriptionItem.key" data-ng-change="updateField(descriptionItem)">\r\n </div>\r\n <div class="col-md-3" data-ng-if="descriptionItem.type==\'keyValue\'">\r\n <ui-select ng-model="descriptionItem.keyType" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeDescType(descriptionItem)">\r\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.title}}</ui-select-match>\r\n <ui-select-choices repeat="item.type as item in fieldType | filter: $select.search">\r\n <div ng-bind-html="item.title | highlight: $select.search"></div>\r\n </ui-select-choices>\r\n </ui-select>\r\n </div>\r\n <div class="col-md-3" data-ng-if="descriptionItem.type==\'keyValue\' && descriptionItem.keyType==\'string\'">\r\n <input type="text" class="form-control" placeholder="Value" data-ng-model="descriptionItem.keyContent" data-ng-change="updateField(descriptionItem)">\r\n </div>\r\n <div class="col-md-3" data-ng-if="descriptionItem.type==\'keyValue\' && descriptionItem.keyType==\'variable\'">\r\n <div class="form-group">\r\n <ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="descriptionItem.variableName" data-ng-change="updateField(descriptionItem)">\r\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.title}}</ui-select-match>\r\n <ui-select-choices group-by="groupVariableByGroup" repeat="variable.name as variable in variables | filter: $select.search">\r\n <div ng-bind-html="variable.title | highlight: $select.search"></div>\r\n </ui-select-choices>\r\n </ui-select>\r\n </div>\r\n </div>\r\n <div class="col-md-3" data-ng-if="descriptionItem.type==\'keyValue\' && descriptionItem.keyType==\'customVariable\'">\r\n <div class="form-group">\r\n <ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="descriptionItem.VariableId" data-ng-change="updateField(descriptionItem)">\r\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\r\n <ui-select-choices repeat="variable.id as variable in customVariables | filter: $select.search">\r\n <div ng-bind-html="variable.name | highlight: $select.search"></div>\r\n </ui-select-choices>\r\n </ui-select>\r\n </div>\r\n </div>\r\n <div class="col-md-1">\r\n <div class="form-group">\r\n <button class="btn btn-icon-only red" data-ng-click="removeItem(descriptionItem)"><i class="fa fa-times"></i></button>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- </div> -->\r\n </div>\r\n <!-- END DESCRIPTION TAB -->\r\n <!-- FIELDS TAB -->\r\n <div class="tab-pane ui-padding" id="tab_1_3">\r\n <div class="row">\r\n <div class="col-md-11">\r\n <span class="caption-subject">Add how to fill the fields present in your account:</span>\r\n </div>\r\n <div class="col-md-1 pull-rigth">\r\n <button class="btn btn-icon-only green" data-ng-click="addItem(\'field\')"><i class="fa fa-plus"></i></button>\r\n </div>\r\n </div>\r\n <hr>\r\n <!-- <div id="field-item-list" ng-scrollbars ng-scrollbars-config="config"> -->\r\n <div class="row" data-ng-repeat="fieldItem in fieldConfig">\r\n <div class="col-md-3">\r\n <ui-select ng-model="fieldItem.idField" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeFieldType(fieldItem)">\r\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.label}}</ui-select-match>\r\n <ui-select-choices repeat="item.name as item in accountFields | filter: $select.search">\r\n <div ng-bind-html="item.label | highlight: $select.search"></div>\r\n </ui-select-choices>\r\n </ui-select>\r\n </div>\r\n <div class="col-md-8" data-ng-if="getSystemFieldOptions(fieldItem.idField)">\r\n <div class="form-group">\r\n <ui-select ng-model="fieldItem.content" theme="bootstrap" ng-disabled="disabled" data-ng-change="updateField(fieldItem)">\r\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.label}}</ui-select-match>\r\n <ui-select-choices repeat="item.value as item in getSystemFieldOptions(fieldItem.idField) | filter: $select.search">\r\n <div ng-bind-html="item.label | highlight: $select.search"></div>\r\n </ui-select-choices>\r\n </ui-select>\r\n </div>\r\n </div>\r\n <div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField)">\r\n <div class="form-group">\r\n <ui-select ng-model="fieldItem.type" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeType(fieldItem)">\r\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.title}}</ui-select-match>\r\n <ui-select-choices repeat="item.type as item in fieldType | filter: $select.search">\r\n <div ng-bind-html="item.title | highlight: $select.search | ucfirst"></div>\r\n </ui-select-choices>\r\n </ui-select>\r\n </div>\r\n </div>\r\n <div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField) && fieldItem.type === \'string\'">\r\n <div class="form-group">\r\n <input type="text" class="form-control" data-ng-model="fieldItem.content" data-ng-change="updateField(fieldItem)">\r\n </div>\r\n </div>\r\n <div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField) && fieldItem.type === \'variable\'">\r\n <div class="form-group">\r\n <ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="fieldItem.variableName" data-ng-change="updateField(fieldItem)">\r\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.title}}</ui-select-match>\r\n <ui-select-choices group-by="groupVariableByGroup" repeat="variable.name as variable in variables | filter: $select.search">\r\n <div ng-bind-html="variable.title | highlight: $select.search"></div>\r\n </ui-select-choices>\r\n </ui-select>\r\n </div>\r\n </div>\r\n <div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField) && fieldItem.type === \'customVariable\'">\r\n <div class="form-group">\r\n <ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="fieldItem.VariableId" data-ng-change="updateField(fieldItem)">\r\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\r\n <ui-select-choices repeat="variable.id as variable in customVariables | filter: $select.search">\r\n <div ng-bind-html="variable.name | highlight: $select.search"></div>\r\n </ui-select-choices>\r\n </ui-select>\r\n </div>\r\n </div>\r\n <div class="col-md-1">\r\n <div class="form-group">\r\n <button class="btn btn-icon-only red" data-ng-click="removeItem(fieldItem)"><i class="fa fa-times"></i></button>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- </div> -->\r\n </div>\r\n <!-- END FIELDS TAB -->\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n'),a.put("app/salesforce/view/view.account.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_ACCOUNT\' | translate}}</span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_GENERALS\' | translate}}</a>\n </li>\n </ul>\n </div>\n <div class="portlet-body">\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.formSetting" data-ng-submit="forms.formSetting.$valid && updateItem()" novalidate>\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="account.name" required/>\n <span data-ng-show="forms.formSetting.name.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="account.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n <!-- START USERNAME -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.username.$invalid}">\n <label class="control-label">{{\'APPLICATION_USERNAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="username" placeholder="{{\'APPLICATION_USERNAME\' | translate}}" class="form-control" data-ng-model="account.username" required/>\n <span data-ng-show="forms.formSetting.username.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n\n <!-- START REMOTE ADDRESS -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.remoteUri.$invalid}">\n <label class="control-label">{{\'APPLICATION_URI\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="url" name="remoteUri" placeholder="{{\'APPLICATION_URI\' | translate}}" class="form-control" data-ng-model="account.remoteUri" required />\n <span data-ng-show="forms.formSetting.remoteUri.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n\n <!-- START PASSWORD -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.password.$invalid}">\n <label class="control-label">{{\'APPLICATION_PASSWORD\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="password" name="password" placeholder="{{\'APPLICATION_PASSWORD\' | translate}}" class="form-control" data-ng-model="account.password" required/>\n <span data-ng-show="forms.formSetting.password.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PASSWORD -->\n\n <!-- START CLIENT ID -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.clientId.$invalid}">\n <label class="control-label">{{\'APPLICATION_CLIENT_ID\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="clientId" placeholder="{{\'APPLICATION_CLIENT_ID\' | translate}}" class="form-control" data-ng-model="account.clientId" required/>\n <span data-ng-show="forms.formSetting.clientId.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CLIENT ID -->\n\n <!-- START CLIENT SECRET -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.clientSecret.$invalid}">\n <label class="control-label">{{\'APPLICATION_CLIENT_SECRET\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="clientSecret" placeholder="{{\'APPLICATION_CLIENT_SECRET\' | translate}}" class="form-control" data-ng-model="account.clientSecret" required/>\n <span data-ng-show="forms.formSetting.clientSecret.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CLIENT SECRET -->\n\n <!-- START SECURITY TOKEN -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.securityToken.$invalid}">\n <label class="control-label">{{\'APPLICATION_SECURITY_TOKEN\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="securityToken" placeholder="{{\'APPLICATION_SECURITY_TOKEN\' | translate}}" class="form-control" data-ng-model="account.securityToken" required/>\n <span data-ng-show="forms.formSetting.securityToken.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END SECURITY TOKEN -->\n\n <!-- START SERVER URL -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.serverUrl.$invalid}">\n <label class="control-label">{{\'APPLICATION_MOTION_ADDRESS\' | translate}}</label>\n <input type="url" name="serverUrl" placeholder="{{\'APPLICATION_MOTION_ADDRESS\' | translate}}" class="form-control" data-ng-model="account.serverUrl"/>\n <span class="help-block">\n {{\'DESCRIPTION_SERVER_URL\' | translate}}.\n </span>\n <span class="help-block help-block-info">\n {{\'MESSAGE_MOTION_ADDRESS_FORMAT\' | translate}}\n </span>\n </div>\n <!-- END SERVER URL -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END GENERAL TAB -->\n\n </div>\n </div>\n </div>\n </div>\n</div>\n'), -a.put("app/salesforce/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-cloud"></i>\n <a href="/salesforce/list">{{ \'APPLICATION_SALESFORCE\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <a href="#">{{account.name}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img src="assets/images/media/salesforce.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{account.name}}\n </div>\n <div class="profile-usertitle-job">\n {{account.remoteUri}}\n </div>\n </div>\n <!-- END SIDEBAR USER TITLE -->\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.salesforce.view.account\')}">\n <a ng-href="/salesforce/view/{{account.id}}/account">\n <i class="icon-user"></i>\n {{ \'APPLICATION_ACCOUNT\' | translate }} </a>\n </li>\n <li data-ng-class="{active: $state.includes(\'main.salesforce.view.configurations\') || $state.is(\'main.salesforce.view.configuration\')}">\n <a ng-href="/salesforce/view/{{account.id}}/configurations/list">\n <i class="icon-settings"></i>\n {{ \'APPLICATION_CONFIGURATIONS\' | translate }} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/salesforce/wizard/wizard.html",'<!-- BEGIN PAGE HEADER-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-cloud"></i>\n <a href="/salesforce/list">{{ \'APPLICATION_SALESFORCE\' | translate }}</a>\n </li>\n </ul>\n </div>\n </div>\n</div>\n<!-- END PAGE HEADER-->\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initWizard()">\n <div class="col-md-12">\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-notebook font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_ACCOUNT\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="createItem()">\n <wz-step title="{{\'APPLICATION_ACCOUNT_INFO\' | translate}}" canexit="exitValidation(forms.formSetting.$valid)">\n <form name="forms.formSetting" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="forms.formSetting.name.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n <!-- START USERNAME -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.username.$invalid}">\n <label class="control-label">{{\'APPLICATION_USERNAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="username" placeholder="{{\'APPLICATION_USERNAME\' | translate}}" class="form-control" data-ng-model="item.username" required ng-remote-validate="/api/salesforce/accounts/validate/username"/>\n <span data-ng-show="forms.formSetting.username.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.formSetting.username.$touched || forms.formSetting.$submitted) && forms.formSetting.username.$error.ngRemoteValidate" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_EXIST_USERNAME\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n\n\n <!-- START REMOTE ADDRESS -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.remoteUri.$invalid}">\n <label class="control-label">{{\'APPLICATION_URI\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="url" name="remoteUri" placeholder="{{\'APPLICATION_URI\' | translate}}" class="form-control" data-ng-model="item.remoteUri" required/>\n <span data-ng-show="forms.formSetting.remoteUri.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n\n <!-- START PASSWORD -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.password.$invalid}">\n <label class="control-label">{{\'APPLICATION_PASSWORD\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="password" name="password" placeholder="{{\'APPLICATION_PASSWORD\' | translate}}" class="form-control" data-ng-model="item.password" required/>\n <span data-ng-show="forms.formSetting.password.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PASSWORD -->\n\n <!-- START CLIENT ID -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.clientId.$invalid}">\n <label class="control-label">{{\'APPLICATION_CLIENT_ID\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="clientId" placeholder="{{\'APPLICATION_CLIENT_ID\' | translate}}" class="form-control" data-ng-model="item.clientId" required/>\n <span data-ng-show="forms.formSetting.clientId.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CLIENT ID -->\n\n <!-- START CLIENT SECRET -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.clientSecret.$invalid}">\n <label class="control-label">{{\'APPLICATION_CLIENT_SECRET\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="clientSecret" placeholder="{{\'APPLICATION_CLIENT_SECRET\' | translate}}" class="form-control" data-ng-model="item.clientSecret" required/>\n <span data-ng-show="forms.formSetting.clientSecret.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CLIENT SECRET -->\n\n <!-- START SECURITY TOKEN -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.securityToken.$invalid}">\n <label class="control-label">{{\'APPLICATION_SECURITY_TOKEN\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="securityToken" placeholder="{{\'APPLICATION_SECURITY_TOKEN\' | translate}}" class="form-control" data-ng-model="item.securityToken" required/>\n <span data-ng-show="forms.formSetting.securityToken.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END SECURITY TOKEN -->\n\n <!-- START SERVER URL -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.serverUrl.$invalid}">\n <label class="control-label">{{\'APPLICATION_MOTION_ADDRESS\' | translate}}</label>\n <input type="url" name="serverUrl" placeholder="{{\'APPLICATION_MOTION_ADDRESS\' | translate}}" class="form-control" data-ng-model="item.serverUrl"/>\n <span class="help-block">\n {{\'DESCRIPTION_SERVER_URL\' | translate}}.\n </span>\n <span class="help-block help-block-info">\n {{\'MESSAGE_MOTION_ADDRESS_FORMAT\' | translate}}\n </span>\n </div>\n <!-- END SERVER URL -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" data-ng-click="next()"/>\n\n </form>\n </wz-step>\n\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n <input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n </wz-step>\n\n </wizard>\n\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/setting/customization/view/general/general.html",'<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_GENERAL_CUSTOMIZATION\' | translate}}</span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_LOGO\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_2" data-toggle="tab">{{ \'APPLICATION_FOOTER_WHITE_LABEL\' | translate}}</a>\n </li>\n </ul>\n </div>\n\n <div class="portlet-body">\n <div class="tab-content">\n <!-- CHANGE LOGO TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <div class="col-md-6 col-sm-6" >\n <div class="portlet light bordered" style="min-height:411px;">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-pie-chart font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_MAIN\' | translate }}</span>\n </div>\n <div class="actions">\n </div>\n </div>\n <div class="portlet-body">\n <form action="#" role="form" class="row">\n <!-- START STATUS -->\n <div class="form-group col-md-6 col-sm-6">\n <label class="control-label">{{\'APPLICATION_DEFAULT\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="settings.defaultLogo"\n data-ng-init="settings.defaultLogo = license.custom ? settings.defaultLogo : true"\n type="checkbox"\n name="defaultLogo"\n data-ng-change="update()"\n switch-active="{{ radioSwitch.isActive }}"\n switch-on-text="{{\'APPLICATION_YES\' | translate}}"\n switch-off-text="{{\'APPLICATION_NO\' | translate}}"\n switch-on-color="{{ radioSwitch.onColor }}"\n switch-off-color="{{ radioSwitch.offColor }}"\n switch-animate="{{ radioSwitch.animate }}"\n switch-size="{{ radioSwitch.size }}"\n switch-label="{{ radioSwitch.label }}"\n switch-icon="{{ radioSwitch.icon }}"\n switch-radio-off="{{ radioSwitch.radioOff }}"\n switch-label-width="{{ radioSwitch.labelWidth }}"\n switch-handle-width="{{ radioSwitch.handleWidth }}">\n </div>\n <!-- END STATUS -->\n <div class="form-group col-md-6 col-sm-6" data-ng-if="!settings.defaultLogo && license.custom">\n <div class="fileinput fileinput-new" data-provides="fileinput">\n <div class="fileinput-new thumbnail">\n <img ng-src="assets/images/media/noProfileImage.png" alt=""/>\n </div>\n <div class="fileinput-preview fileinput-exists thumbnail">\n </div>\n <div>\n <span class="btn default btn-file" data-ng-show="!uploader.queue[0]">\n <span> {{ \'APPLICATION_SELECT_IMAGE\' | translate }} </span>\n <input type="file" nv-file-select="" uploader="uploader"/><br/>\n </span>\n <button type="button" class="btn default" data-ng-show="uploader.queue[0]" data-dismiss="fileinput" ng-click="uploader.queue[0].remove()">\n {{ \'APPLICATION_REMOVE\' | translate }}\n </button>\n <button type="button" class="btn green-haze" data-ng-show="uploader.queue[0]" data-ng-click="uploader.queue[0].upload()" ng-disabled="uploader.queue[0].isReady || uploader.queue[0].isUploading || uploader.queue[0].isSuccess">\n {{ \'APPLICATION_CONFIRM\' | translate }}\n </button>\n </div>\n <p>\n </br> {{ \'MESSAGE_SUPPORTED_FORMATS\' | translate }} <b>jpg, png, jpeg</b>.\n </p>\n </div>\n </div>\n </form>\n <div data-ng-show="uploader2.isHTML5" >\n <div data-ng-repeat="item in uploader.queue" nowrap style="border-top-style:none">\n <strong>{{ item.file.name }}</strong> {{ item.file.size/1024/1024|number:2 }} MB\n <button type="button" class="btn btn-danger btn-xs" data-ng-click="item.remove()">\n <span class="glyphicon glyphicon-trash"></span> Remove\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class="col-md-6 col-sm-6">\n <div class="portlet light bordered" style="min-height:411px;">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-pie-chart font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_LOGIN\' | translate }}</span>\n </div>\n <div class="actions">\n </div>\n </div>\n <div class="portlet-body">\n <form action="#" role="form" class="row">\n <!-- START STATUS -->\n <div class="form-group col-md-6 col-sm-6">\n <label class="control-label">{{\'APPLICATION_DEFAULT\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="settings.defaultLoginLogo"\n data-ng-init="settings.defaultLoginLogo = license.custom ? settings.defaultLoginLogo : true"\n type="checkbox"\n name="defaultLoginLogo"\n data-ng-change="update()"\n switch-active="{{ radioSwitch.isActive }}"\n switch-on-text="{{\'APPLICATION_YES\' | translate}}"\n switch-off-text="{{\'APPLICATION_NO\' | translate}}"\n switch-on-color="{{ radioSwitch.onColor }}"\n switch-off-color="{{ radioSwitch.offColor }}"\n switch-animate="{{ radioSwitch.animate }}"\n switch-size="{{ radioSwitch.size }}"\n switch-label="{{ radioSwitch.label }}"\n switch-icon="{{ radioSwitch.icon }}"\n switch-radio-off="{{ radioSwitch.radioOff }}"\n switch-label-width="{{ radioSwitch.labelWidth }}"\n switch-handle-width="{{ radioSwitch.handleWidth }}">\n </div>\n <!-- END STATUS -->\n <div class="form-group col-md-6 col-sm-6" data-ng-if="!settings.defaultLoginLogo && license.custom">\n <div class="fileinput fileinput-new" data-provides="fileinput">\n <div class="fileinput-new thumbnail">\n <img ng-src="assets/images/media/noProfileImage.png" alt=""/>\n </div>\n <div class="fileinput-preview fileinput-exists thumbnail">\n </div>\n <div>\n <span class="btn default btn-file" data-ng-show="!uploader2.queue[0]">\n <span> {{ \'APPLICATION_SELECT_IMAGE\' | translate }} </span>\n <input type="file" nv-file-select="" uploader="uploader2"/><br/>\n </span>\n <button type="button" class="btn default" data-ng-show="uploader2.queue[0]" data-dismiss="fileinput" ng-click="uploader2.queue[0].remove()">\n {{ \'APPLICATION_REMOVE\' | translate }}\n </button>\n <button type="button" class="btn green-haze" data-ng-show="uploader2.queue[0]" data-ng-click="uploader2.queue[0].upload()" ng-disabled="uploader2.queue[0].isReady || uploader2.queue[0].isUploading || uploader2.queue[0].isSuccess">\n {{ \'APPLICATION_CONFIRM\' | translate }}\n </button>\n </div>\n <p>\n </br> {{ \'MESSAGE_SUPPORTED_FORMATS\' | translate }} <b>jpg, png, jpeg</b>.\n </p>\n </div>\n </div>\n </form>\n <div data-ng-show="uploader2.isHTML5" >\n <div data-ng-repeat="item in uploader.queue" nowrap style="border-top-style:none">\n <strong>{{ item.file.name }}</strong> {{ item.file.size/1024/1024|number:2 }} MB\n <button type="button" class="btn btn-danger btn-xs" data-ng-click="item.remove()">\n <span class="glyphicon glyphicon-trash"></span> Remove\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <!-- END CHANGE LOGO TAB -->\n <!-- CHANGE FOOTER WHITE LABEL TAB -->\n <div class="tab-pane" id="tab_1_2">\n <form name="forms.footerWhiteLabel" data-ng-submit="forms.footerWhiteLabel.$valid && update()" novalidate>\n <!-- START DEFAULT -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DEFAULT\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="settings.defaultFooterWhiteLabel"\n type="checkbox"\n name="defaultFooterWhiteLabel"\n data-ng-change="update()"\n data-ng-init="settings.defaultFooterWhiteLabel = license.custom ? settings.defaultFooterWhiteLabel : true"\n switch-active="{{ radioSwitch.isActive }}"\n switch-on-text="{{\'APPLICATION_YES\' | translate}}"\n switch-off-text="{{\'APPLICATION_NO\' | translate}}"\n switch-on-color="{{ radioSwitch.onColor }}"\n switch-off-color="{{ radioSwitch.offColor }}"\n switch-animate="{{ radioSwitch.animate }}"\n switch-size="{{ radioSwitch.size }}"\n switch-label="{{ radioSwitch.label }}"\n switch-icon="{{ radioSwitch.icon }}"\n switch-radio-off="{{ radioSwitch.radioOff }}"\n switch-label-width="{{ radioSwitch.labelWidth }}"\n switch-handle-width="{{ radioSwitch.handleWidth }}">\n </div>\n <!-- END DEFAULT -->\n <!-- START LABEL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.footerWhiteLabel.footerWhiteLabel.$touched || forms.footerWhiteLabel.$submitted) && forms.footerWhiteLabel.footerWhiteLabel.$invalid}">\n <label class="control-label">{{\'APPLICATION_FOOTER_WHITE_LABEL\' | translate}}<span data-ng-if="!settings.defaultFooterWhiteLabel" class="required" aria-required="true">*</span></label>\n <textarea name="footer" placeholder="{{\'APPLICATION_FOOTER_WHITE_LABEL\' | translate}}" class="form-control" data-ng-model="settings.footerWhiteLabel" data-ng-disabled="settings.defaultFooterWhiteLabel || !license.custom" data-ng-required="!settings.defaultFooterWhiteLabel && license.custom"/></textarea>\n <span data-ng-show="(forms.footerWhiteLabel.footerWhiteLabel.$touched || forms.footerWhiteLabel.$submitted) && forms.footerWhiteLabel.footerWhiteLabel.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END LABEL -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}" data-ng-disabled="!license.custom"/>\n </form>\n </div>\n <!-- END CHANGE FOOTER WHITE LABEL TAB -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/setting/customization/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-settings"></i>\n <a href="#">{{ \'APPLICATION_SETTINGS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-globe"></i>\n <a href="#">{{ \'APPLICATION_CUSTOMIZATION\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img src="assets/images/media/customize.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{ \'APPLICATION_CUSTOMIZATION\' | translate }}\n </div>\n </div>\n <!-- END SIDEBAR USER TITLE -->\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.setting.customization.view.general\')}">\n <a ng-href="/setting/customization/view/general">\n <i class="icon-picture"></i>\n {{ \'APPLICATION_GENERAL\' | translate }} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/setting/general/view/main/main.html",'<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_GENERAL_SETTINGS\' | translate}}</span>\n </div>\n </div>\n <div class="portlet-body">\n <form name="forms.main" data-ng-submit="forms.main.$valid && update()" novalidate>\n <!-- START MIN INTERNAL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.main.min_internal.$touched || forms.main.$submitted) && forms.main.min_internal.$invalid}">\n <label class="control-label">{{\'APPLICATION_MIN_INTERNAL\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" min="1" name="min_internal" placeholder="{{\'APPLICATION_MIN_INTERNAL\' | translate}}" class="form-control" data-ng-model="settings.min_internal" required/>\n <span data-ng-show="(forms.main.min_internal.$touched || forms.main.$submitted) && forms.main.min_internal.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END MIN INTERNAL -->\n\n <!-- START MIN MAILBOX -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.main.min_mailbox.$touched || forms.main.$submitted) && forms.main.min_mailbox.$invalid}">\n <label class="control-label">{{\'APPLICATION_MIN_MAILBOX\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" min="1" name="min_mailbox" placeholder="{{\'APPLICATION_MIN_MAILBOX\' | translate}}" class="form-control" data-ng-model="settings.min_mailbox" required/>\n <span data-ng-show="(forms.main.min_mailbox.$touched || forms.main.$submitted) && forms.main.min_mailbox.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END MIN MAILBOX -->\n\n <!-- START AGI PORT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.main.agi_port.$touched || forms.main.$submitted) && forms.main.agi_port.$invalid}">\n <label class="control-label">{{\'APPLICATION_AGI_PORT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" min="1" name="agi_port" placeholder="{{\'APPLICATION_AGI_PORT\' | translate}}" class="form-control" data-ng-model="settings.agi_port" required/>\n <span data-ng-show="(forms.main.agi_port.$touched || forms.main.$submitted) && forms.main.agi_port.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END AGI PORT -->\n\n <!-- START SSL -->\n <div class="form-group">\n <label class="control-label">\n {{\'APPLICATION_SECURE_PASSWORD\' | translate}}\n </label><br>\n <input\n bs-switch\n data-ng-model="settings.securePassword"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_ENABLED\' | translate }}"\n switch-off-text="{{ \'APPLICATION_DISABLED\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n </div>\n <!-- END SSL -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/setting/general/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-settings"></i>\n <a href="#">{{ \'APPLICATION_SETTINGS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-globe"></i>\n <a href="#">{{ \'APPLICATION_GENERAL\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img src="assets/images/media/customize.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{ \'APPLICATION_GENERAL\' | translate }}\n </div>\n </div>\n <!-- END SIDEBAR USER TITLE -->\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.setting.general.view.main\')}">\n <a ng-href="/setting/general/view/main">\n <i class="icon-picture"></i>\n {{ \'APPLICATION_MAIN\' | translate }} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/setting/license/view/update.modal.html",'<div class="modal-header" data-ng-init="getLicense()">\n <h3 class="modal-title">{{ \'APPLICATION_UPDATE_LICENSE\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <!-- START LICENSE -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_LICENSE\' | translate}}</label>\n <textarea type="text" style="min-height:95px;" name="description" placeholder="{{\'APPLICATION_LICENSE\' | translate}}" class="form-control" data-ng-model="item.license"></textarea>\n </div>\n <!-- END LICENSE -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="update()" ng-disabled="form.$invalid">{{ \'APPLICATION_UPDATE\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/setting/license/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-settings"></i>\n <a href="#">{{ \'APPLICATION_SETTINGS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-info"></i>\n <a href="#">{{ \'APPLICATION_LICENSE\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE CONTENT -->\n <div class="profile-content">\n <div class="row" data-ng-if="(license.token !== license.token2) && license.expirationTime > -1">\n <div class="col-md-12">\n <div class="note note-warning">\n <h4 class="block"><strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_YOUR_LICENSE_WILL_EXPIRE\' | translate}} <strong>{{license.expirationTime}}</strong> {{\'MESSAGE_DAYS\' | translate}}.</h4>\n <p>\n {{\'MESSAGE_SEND_EMAIL_TO\' | translate}} <a href="mailto:license@xcally.com?subject=New%20token%20detected&body=Hi xCALLY, my new token is: {{license.token2}}. Old token: {{license.token}}">license@xcally.com</a>.\n </p>\n <p>\n {{\'APPLICATION_NEW\' | translate | uppercase}} Token: <strong>{{license.token2}}</strong>\n </p>\n </div>\n </div>\n </div>\n <div class="row">\n <div class="col-md-6">\n <div class="pricing hover-effect">\n <div class="pricing-head" data-ng-switch="license.months">\n <h3 ng-switch-when="1">{{\'APPLICATION_MONTH_TO_MONTH\' | translate}}<span>{{license.token || \'unknown\'}} </span></h3>\n <h3 ng-switch-when="12">{{\'APPLICATION_YEARLY\' | translate}}<span>{{license.token || \'unknown\'}} </span></h3>\n <h3 ng-switch-when="36">{{\'APPLICATION_PERPETUAL\' | translate}}<span>{{license.token || \'unknown\'}} </span></h3>\n <h3 ng-switch-default>{{\'APPLICATION_UNKNOWN\' | translate}}<span>{{license.token || \'unknown\'}} </span></h3>\n <h4><i>{{license.expiration ? (license.expiration | date:\'medium\') : \'DEMO\'}}</i>\n <span data-ng-show="license.expiration">Expiration Date </span>\n </h4>\n </div>\n <ul class="pricing-content list-unstyled">\n <li class="row">\n <div class="col-md-9">\n <i class="icon-eye"></i> {{\'APPLICATION_USERS\' | translate}}:\n </div>\n <div class="col-md-3 text-center">\n {{(license.users || license.users >= 0) ? license.users : \'unknown\'}}\n </div>\n </li>\n <li class="row">\n <div class="col-md-9">\n <i class="icon-people"></i> {{\'APPLICATION_AGENTS\' | translate}} ({{\'APPLICATION_CONCURRENTS\' | translate}}):\n </div>\n <div class="col-md-3 text-center">\n {{(license.agents || license.agents >= 0) ? license.agents : \'unknown\'}}\n </div>\n </li>\n <li class="row">\n <div class="col-md-9">\n <i class="icon-phone"></i> {{\'APPLICATION_TELEPHONES\' | translate}}:\n </div>\n <div class="col-md-3 text-center">\n {{(license.telephones || license.telephones >= 0) ? license.telephones : \'unknown\'}}\n </div>\n </li>\n <li class="row">\n <div class="col-md-9">\n <i class="icon-bubble"></i> {{\'APPLICATION_CHAT\' | translate}}:\n </div>\n <div class="col-md-3 text-center">\n <span class="label label-sm" data-ng-class="license.chat ? \'label-success\' : \'label-danger\'">{{license.chat ? \'APPLICATION_ENABLED\' : \'APPLICATION_DISABLED\' | translate}}</span>\n </div>\n </li>\n <li class="row">\n <div class="col-md-9">\n <i class="icon-envelope"></i> {{\'APPLICATION_MAIL\' | translate}}:\n </div>\n <div class="col-md-3 text-center">\n <span class="label label-sm" data-ng-class="license.mail ? \'label-success\' : \'label-danger\'">{{license.mail ? \'APPLICATION_ENABLED\' : \'APPLICATION_DISABLED\' | translate}}</span>\n </div>\n </li>\n <li class="row">\n <div class="col-md-9">\n <i class="fa fa-fax"></i> {{\'APPLICATION_FAX\' | translate}}:\n </div>\n <div class="col-md-3 text-center">\n <span class="label label-sm" data-ng-class="license.fax ? \'label-success\' : \'label-danger\'">{{license.fax ? \'APPLICATION_ENABLED\' : \'APPLICATION_DISABLED\' | translate}}</span>\n </div>\n </li>\n <li class="row">\n <div class="col-md-9">\n <i class="glyphicon glyphicon-comment"></i> {{\'APPLICATION_SMS\' | translate}}:\n </div>\n <div class="col-md-3 text-center">\n <span class="label label-sm" data-ng-class="license.messaging ? \'label-success\' : \'label-danger\'">{{license.messaging ? \'APPLICATION_ENABLED\' : \'APPLICATION_DISABLED\' | translate}}</span>\n </div>\n </li>\n <li class="row">\n <div class="col-md-9">\n <i class="icon-globe"></i> {{\'APPLICATION_OPEN_CHANNEL\' | translate}}:\n </div>\n <div class="col-md-3 text-center">\n <span class="label label-sm" data-ng-class="license.openchannel ? \'label-success\' : \'label-danger\'">{{license.openchannel ? \'APPLICATION_ENABLED\' : \'APPLICATION_DISABLED\' | translate}}</span>\n </div>\n </li>\n <li class="row">\n <div class="col-md-9">\n <i class="icon-notebook"></i> {{\'APPLICATION_CONTACT_MANAGER\' | translate}}:\n </div>\n <div class="col-md-3 text-center">\n <span class="label label-sm" data-ng-class="license.cm ? \'label-success\' : \'label-danger\'">{{license.cm ? \'APPLICATION_ENABLED\' : \'APPLICATION_DISABLED\' | translate}}</span>\n </div>\n </li>\n <li class="row">\n <div class="col-md-9">\n <i class="icon-control-forward"></i> {{\'APPLICATION_MOTION_DIALER\' | translate}}:\n </div>\n <div class="col-md-3 text-center">\n <span class="label label-sm" data-ng-class="license.dialer ? \'label-success\' : \'label-danger\'">{{license.dialer ? \'APPLICATION_ENABLED\' : \'APPLICATION_DISABLED\' | translate}}</span>\n </div>\n </li>\n <li class="row">\n <div class="col-md-9">\n <i class="fa fa-edit"></i> {{\'APPLICATION_JSCRIPTY\' | translate}}:\n </div>\n <div class="col-md-3 text-center">\n <span class="label label-sm" data-ng-class="license.jscripty ? \'label-success\' : \'label-danger\'">{{license.jscripty ? \'APPLICATION_ENABLED\' : \'APPLICATION_DISABLED\' | translate}}</span>\n </div>\n </li>\n <li class="row">\n <div class="col-md-9">\n <i class="icon-equalizer"></i> {{\'APPLICATION_CUSTOMIZATION\' | translate}}:\n </div>\n <div class="col-md-3 text-center">\n <span class="label label-sm" data-ng-class="license.custom ? \'label-success\' : \'label-danger\'">{{license.custom ? \'APPLICATION_ENABLED\' : \'APPLICATION_DISABLED\' | translate}}</span>\n </div>\n </li>\n <li class="row">\n <div class="col-md-9">\n <i class="icon-cloud-download"></i> {{\'APPLICATION_UPDATE\' | translate}}:\n </div>\n <div class="col-md-3 text-center">\n <span class="label label-sm" data-ng-class="license.update ? \'label-success\' : \'label-danger\'">{{license.update ? \'APPLICATION_ENABLED\' : \'APPLICATION_DISABLED\' | translate}}</span>\n </div>\n </li>\n </ul>\n <div class="pricing-footer">\n <p>\n {{license.description}}\n </p>\n <a href="https://www.xcallymotion.com/prices" target="_blank" class="btn yellow-crusta">\n {{\'APPLICATION_PRICES\' | translate}} <i class="m-icon-swapright m-icon-white"></i>\n </a>\n <a href="#" class="btn purple-plum" data-ng-click="updateLicense()">\n {{\'APPLICATION_UPDATE\' | translate}} <i class="icon-refresh m-icon-white"></i>\n </a>\n </div>\n </div>\n </div>\n <div class="col-md-6">\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-info font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_LICENSE_REQUEST\' | translate }}</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <form name="form" novalidate data-ng-submit="submitRequest()">\n\n <!-- START USERS -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.users.$touched || form.$submitted) && form.users.$invalid}">\n <label class="control-label">{{\'APPLICATION_USERS\' | translate}}</label>\n <div class="input-icon">\n <i class="icon-eye"></i>\n <input type="number" name="users" placeholder="{{\'APPLICATION_USERS\' | translate}}" class="form-control" data-ng-model="item.users" min="0" required>\n </div>\n <span data-ng-show="(form.users.$touched || forms.$submitted) && form.users.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END USERS -->\n\n <!-- START AGENTS -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.agents.$touched || form.$submitted) && form.agents.$invalid}">\n <label class="control-label">{{\'APPLICATION_AGENTS\' | translate}} ({{\'APPLICATION_CONCURRENTS\' | translate}})</label>\n <div class="input-icon">\n <i class="icon-people"></i>\n <input type="number" name="agents" placeholder="{{\'APPLICATION_AGENTS\' | translate}} ({{\'APPLICATION_CONCURRENTS\' | translate}})" class="form-control" data-ng-model="item.agents" min="0" required>\n </div>\n <span data-ng-show="(form.users.$touched || forms.$submitted) && form.users.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END AGENTS -->\n\n <!-- START TELEPHONES -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.telephones.$touched || form.$submitted) && form.telephones.$invalid}">\n <label class="control-label">{{\'APPLICATION_TELEPHONES\' | translate}}</label>\n <div class="input-icon">\n <i class="icon-phone"></i>\n <input type="number" name="telephones" placeholder="{{\'APPLICATION_TELEPHONES\' | translate}}" class="form-control" data-ng-model="item.telephones" min="0" required>\n </div>\n <span data-ng-show="(form.telephones.$touched || forms.$submitted) && form.telephones.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TELEPHONES -->\n <div class="row">\n <div class="form-group col-md-4 col-xs-6">\n <label class="control-label">{{\'APPLICATION_CHAT\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="item.chat"\n type="checkbox"\n name="chat"\n switch-active="{{ radioSwitch.isActive }}"\n switch-on-text="{{\'APPLICATION_YES\' | translate}}"\n switch-off-text="{{\'APPLICATION_NO\' | translate}}"\n switch-on-color="{{ radioSwitch.onColor }}"\n switch-off-color="{{ radioSwitch.offColor }}"\n switch-animate="{{ radioSwitch.animate }}"\n switch-size="{{ radioSwitch.size }}"\n switch-label="{{ radioSwitch.label }}"\n switch-icon="{{ radioSwitch.icon }}"\n switch-radio-off="{{ radioSwitch.radioOff }}"\n switch-label-width="{{ radioSwitch.labelWidth }}"\n switch-handle-width="{{ radioSwitch.handleWidth }}">\n </div>\n <div class="form-group col-md-4 col-xs-6">\n <label class="control-label">{{\'APPLICATION_MAIL\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="item.mail"\n type="checkbox"\n name="mail"\n switch-active="{{ radioSwitch.isActive }}"\n switch-on-text="{{\'APPLICATION_YES\' | translate}}"\n switch-off-text="{{\'APPLICATION_NO\' | translate}}"\n switch-on-color="{{ radioSwitch.onColor }}"\n switch-off-color="{{ radioSwitch.offColor }}"\n switch-animate="{{ radioSwitch.animate }}"\n switch-size="{{ radioSwitch.size }}"\n switch-label="{{ radioSwitch.label }}"\n switch-icon="{{ radioSwitch.icon }}"\n switch-radio-off="{{ radioSwitch.radioOff }}"\n switch-label-width="{{ radioSwitch.labelWidth }}"\n switch-handle-width="{{ radioSwitch.handleWidth }}">\n </div>\n <div class="form-group col-md-4 col-xs-6">\n <label class="control-label">{{\'APPLICATION_FAX\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="item.fax"\n type="checkbox"\n name="fax"\n switch-active="{{ radioSwitch.isActive }}"\n switch-on-text="{{\'APPLICATION_YES\' | translate}}"\n switch-off-text="{{\'APPLICATION_NO\' | translate}}"\n switch-on-color="{{ radioSwitch.onColor }}"\n switch-off-color="{{ radioSwitch.offColor }}"\n switch-animate="{{ radioSwitch.animate }}"\n switch-size="{{ radioSwitch.size }}"\n switch-label="{{ radioSwitch.label }}"\n switch-icon="{{ radioSwitch.icon }}"\n switch-radio-off="{{ radioSwitch.radioOff }}"\n switch-label-width="{{ radioSwitch.labelWidth }}"\n switch-handle-width="{{ radioSwitch.handleWidth }}">\n </div>\n <div class="form-group col-md-4 col-xs-6">\n <label class="control-label">{{\'APPLICATION_SMS\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="item.messaging"\n type="checkbox"\n name="messaging"\n switch-active="{{ radioSwitch.isActive }}"\n switch-on-text="{{\'APPLICATION_YES\' | translate}}"\n switch-off-text="{{\'APPLICATION_NO\' | translate}}"\n switch-on-color="{{ radioSwitch.onColor }}"\n switch-off-color="{{ radioSwitch.offColor }}"\n switch-animate="{{ radioSwitch.animate }}"\n switch-size="{{ radioSwitch.size }}"\n switch-label="{{ radioSwitch.label }}"\n switch-icon="{{ radioSwitch.icon }}"\n switch-radio-off="{{ radioSwitch.radioOff }}"\n switch-label-width="{{ radioSwitch.labelWidth }}"\n switch-handle-width="{{ radioSwitch.handleWidth }}">\n </div>\n <div class="form-group col-md-4 col-xs-6">\n <label class="control-label">{{\'APPLICATION_OPEN_CHANNEL\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="item.openchannel"\n type="checkbox"\n name="openchannel"\n switch-active="{{ radioSwitch.isActive }}"\n switch-on-text="{{\'APPLICATION_YES\' | translate}}"\n switch-off-text="{{\'APPLICATION_NO\' | translate}}"\n switch-on-color="{{ radioSwitch.onColor }}"\n switch-off-color="{{ radioSwitch.offColor }}"\n switch-animate="{{ radioSwitch.animate }}"\n switch-size="{{ radioSwitch.size }}"\n switch-label="{{ radioSwitch.label }}"\n switch-icon="{{ radioSwitch.icon }}"\n switch-radio-off="{{ radioSwitch.radioOff }}"\n switch-label-width="{{ radioSwitch.labelWidth }}"\n switch-handle-width="{{ radioSwitch.handleWidth }}">\n </div>\n <div class="form-group col-md-4 col-xs-6">\n <label class="control-label">{{\'APPLICATION_CONTACT_MANAGER\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="item.cm"\n type="checkbox"\n name="cm"\n switch-active="{{ radioSwitch.isActive }}"\n switch-on-text="{{\'APPLICATION_YES\' | translate}}"\n switch-off-text="{{\'APPLICATION_NO\' | translate}}"\n switch-on-color="{{ radioSwitch.onColor }}"\n switch-off-color="{{ radioSwitch.offColor }}"\n switch-animate="{{ radioSwitch.animate }}"\n switch-size="{{ radioSwitch.size }}"\n switch-label="{{ radioSwitch.label }}"\n switch-icon="{{ radioSwitch.icon }}"\n switch-radio-off="{{ radioSwitch.radioOff }}"\n switch-label-width="{{ radioSwitch.labelWidth }}"\n switch-handle-width="{{ radioSwitch.handleWidth }}">\n </div>\n <div class="form-group col-md-4 col-xs-6">\n <label class="control-label">{{\'APPLICATION_MOTION_DIALER\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="item.dialer"\n type="checkbox"\n name="dialer"\n switch-active="{{ radioSwitch.isActive }}"\n switch-on-text="{{\'APPLICATION_YES\' | translate}}"\n switch-off-text="{{\'APPLICATION_NO\' | translate}}"\n switch-on-color="{{ radioSwitch.onColor }}"\n switch-off-color="{{ radioSwitch.offColor }}"\n switch-animate="{{ radioSwitch.animate }}"\n switch-size="{{ radioSwitch.size }}"\n switch-label="{{ radioSwitch.label }}"\n switch-icon="{{ radioSwitch.icon }}"\n switch-radio-off="{{ radioSwitch.radioOff }}"\n switch-label-width="{{ radioSwitch.labelWidth }}"\n switch-handle-width="{{ radioSwitch.handleWidth }}">\n </div>\n <div class="form-group col-md-4 col-xs-6">\n <label class="control-label">{{\'APPLICATION_JSCRIPTY\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="item.jscripty"\n type="checkbox"\n name="jscripty"\n switch-active="{{ radioSwitch.isActive }}"\n switch-on-text="{{\'APPLICATION_YES\' | translate}}"\n switch-off-text="{{\'APPLICATION_NO\' | translate}}"\n switch-on-color="{{ radioSwitch.onColor }}"\n switch-off-color="{{ radioSwitch.offColor }}"\n switch-animate="{{ radioSwitch.animate }}"\n switch-size="{{ radioSwitch.size }}"\n switch-label="{{ radioSwitch.label }}"\n switch-icon="{{ radioSwitch.icon }}"\n switch-radio-off="{{ radioSwitch.radioOff }}"\n switch-label-width="{{ radioSwitch.labelWidth }}"\n switch-handle-width="{{ radioSwitch.handleWidth }}">\n </div>\n <div class="form-group col-md-4 col-xs-6">\n <label class="control-label">{{\'APPLICATION_CUSTOMIZATION\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="item.custom"\n type="checkbox"\n name="custom"\n switch-active="{{ radioSwitch.isActive }}"\n switch-on-text="{{\'APPLICATION_YES\' | translate}}"\n switch-off-text="{{\'APPLICATION_NO\' | translate}}"\n switch-on-color="{{ radioSwitch.onColor }}"\n switch-off-color="{{ radioSwitch.offColor }}"\n switch-animate="{{ radioSwitch.animate }}"\n switch-size="{{ radioSwitch.size }}"\n switch-label="{{ radioSwitch.label }}"\n switch-icon="{{ radioSwitch.icon }}"\n switch-radio-off="{{ radioSwitch.radioOff }}"\n switch-label-width="{{ radioSwitch.labelWidth }}"\n switch-handle-width="{{ radioSwitch.handleWidth }}">\n </div>\n <div class="form-group col-md-4 col-xs-6">\n <label class="control-label">{{\'APPLICATION_UPDATE\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="item.update"\n type="checkbox"\n name="update"\n switch-active="{{ radioSwitch.isActive }}"\n switch-on-text="{{\'APPLICATION_YES\' | translate}}"\n switch-off-text="{{\'APPLICATION_NO\' | translate}}"\n switch-on-color="{{ radioSwitch.onColor }}"\n switch-off-color="{{ radioSwitch.offColor }}"\n switch-animate="{{ radioSwitch.animate }}"\n switch-size="{{ radioSwitch.size }}"\n switch-label="{{ radioSwitch.label }}"\n switch-icon="{{ radioSwitch.icon }}"\n switch-radio-off="{{ radioSwitch.radioOff }}"\n switch-label-width="{{ radioSwitch.labelWidth }}"\n switch-handle-width="{{ radioSwitch.handleWidth }}">\n </div>\n </div>\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_SUBMIT\' | translate}} {{\'APPLICATION_REQUEST\' | translate}}"/>\n </form>\n </div>\n </div>\n </div>\n </div>\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'), -a.put("app/setting/network/view/externip/externip.create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{title}}</h3>\n</div>\n<div class="modal-body" data-ng-init="initModal()">\n <form name="form" novalidate>\n\n <!-- START ADDRESS -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.address.$touched || form.$submitted) && form.address.$invalid}">\n <label class="control-label">{{\'APPLICATION_ADDRESS\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="address" placeholder="{{\'APPLICATION_ADDRESS\' | translate}}" class="form-control" data-ng-model="item.value" required data-ng-pattern="/^(25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})(.(25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})){3}$/"/>\n <span data-ng-show="(form.address.$touched || form.$submitted) && form.address.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(form.address.$touched || form.$submitted) && form.address.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n </span>\n </div>\n <!-- END ADDRESS -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/setting/network/view/externip/externip.html",'<!-- BEGIN PAGE CONTENT-->\r\n<div class="row">\r\n <div class="col-md-12">\r\n <!-- BEGIN Portlet PORTLET-->\r\n <div class="portlet light bordered" data-ng-init="initView()">\r\n <div class="portlet-title">\r\n <div class="caption font-green-sharp">\r\n <i class="icon-globe font-green-sharp"></i>\r\n <span class="caption-subject">{{ \'APPLICATION_EXTERNIP\' | translate }}</a> </span>\r\n </div>\r\n <div class="actions">\r\n <div class="btn-group" data-ng-show="id.length">\r\n <a class="btn red" href="#" data-ng-click="deleteItems()">\r\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\r\n </a>\r\n </div>\r\n <div class="btn-group">\r\n <a class="btn green-jungle" href="#" data-toggle="dropdown" data-ng-click="createItem()">\r\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_EXTERNIP\' | translate }}\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n <div class="portlet-body">\r\n <!-- START TABLE -->\r\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\r\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\r\n </div>\r\n <!-- END TABLE -->\r\n </div>\r\n </div>\r\n <!-- END Portlet PORTLET-->\r\n </div>\r\n</div>\r\n<!-- END PAGE CONTENT-->\r\n'),a.put("app/setting/network/view/localnet/localnet.create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{title}}</h3>\n</div>\n<div class="modal-body" data-ng-init="initModal()">\n <form name="form" novalidate>\n\n <!-- START ADDRESS -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.address.$touched || form.$submitted) && form.address.$invalid}">\n <label class="control-label">{{\'APPLICATION_ADDRESS\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="address" placeholder="{{\'APPLICATION_ADDRESS\' | translate}}" class="form-control" data-ng-model="item.address" required data-ng-pattern="/^(25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})(.(25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})){3}$/"/>\n <span data-ng-show="(form.address.$touched || form.$submitted) && form.address.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(form.address.$touched || form.$submitted) && form.address.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n </span>\n </div>\n <!-- END ADDRESS -->\n\n <!-- START MASK -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.mask.$touched || form.$submitted) && form.mask.$invalid}">\n <label class="control-label">{{\'APPLICATION_MASK\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="mask" placeholder="{{\'APPLICATION_MASK\' | translate}}" class="form-control" data-ng-model="item.mask" required data-ng-pattern="/^(25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})(.(25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})){3}$/"/>\n <span data-ng-show="(form.mask.$touched || form.$submitted) && form.mask.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(form.mask.$touched || form.$submitted) && form.mask.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n </span>\n </div>\n <!-- END MASK -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/setting/network/view/localnet/localnet.html",'<!-- BEGIN PAGE CONTENT-->\r\n<div class="row">\r\n <div class="col-md-12">\r\n <!-- BEGIN Portlet PORTLET-->\r\n <div class="portlet light bordered" data-ng-init="initView()">\r\n <div class="portlet-title">\r\n <div class="caption font-green-sharp">\r\n <i class="icon-desktop font-green-sharp"></i>\r\n <span class="caption-subject">{{ \'APPLICATION_LOCALNET\' | translate }}</a> </span>\r\n </div>\r\n <div class="actions">\r\n <div class="btn-group" data-ng-show="id.length">\r\n <a class="btn red" href="#" data-ng-click="deleteItems()">\r\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\r\n </a>\r\n </div>\r\n <div class="btn-group">\r\n <a class="btn green-jungle" href="#" data-toggle="dropdown" data-ng-click="createItem()">\r\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_LOCALNET\' | translate }}\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n <div class="portlet-body">\r\n <!-- START TABLE -->\r\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\r\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\r\n </div>\r\n <!-- END TABLE -->\r\n </div>\r\n </div>\r\n <!-- END Portlet PORTLET-->\r\n </div>\r\n</div>\r\n<!-- END PAGE CONTENT-->\r\n'),a.put("app/setting/network/view/view.html",'<!-- BEGIN PAGE CONTENT-->\r\n<div class="row">\r\n <div class="col-md-12">\r\n <div class="page-bar">\r\n <ul class="page-breadcrumb">\r\n <li>\r\n <i class="icon-rocket"></i>\r\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\r\n <i class="fa fa-angle-right"></i>\r\n </li>\r\n <li>\r\n <i class="icon-settings"></i>\r\n <a href="#">{{ \'APPLICATION_SETTINGS\' | translate }}</a>\r\n <i class="fa fa-angle-right"></i>\r\n </li>\r\n <li>\r\n <i class="icon-globe"></i>\r\n <a href="#">{{ \'APPLICATION_NETWORK\' | translate }}</a>\r\n </li>\r\n </ul>\r\n </div>\r\n\r\n <!-- BEGIN PROFILE SIDEBAR -->\r\n <div class="profile-sidebar">\r\n <!-- PORTLET MAIN -->\r\n <div class="portlet light profile-sidebar-portlet">\r\n <!-- SIDEBAR USERPIC -->\r\n <div class="profile-image">\r\n <img src="assets/images/media/business.png" class="img-responsive">\r\n </div>\r\n <!-- END SIDEBAR USERPIC -->\r\n <!-- SIDEBAR USER TITLE -->\r\n <div class="profile-usertitle">\r\n <div class="profile-usertitle-name">\r\n {{ \'APPLICATION_NETWORK\' | translate }}\r\n </div>\r\n </div>\r\n <!-- END SIDEBAR USER TITLE -->\r\n <!-- SIDEBAR MENU -->\r\n <div class="profile-usermenu">\r\n <ul class="nav">\r\n <li data-ng-class="{active: $state.is(\'main.setting.network.view.localnet\')}">\r\n <a ng-href="/setting/network/view/localnet">\r\n <i class="icon-screen-desktop"></i>\r\n {{ \'APPLICATION_LOCALNET\' | translate }} </a>\r\n </li>\r\n <li data-ng-class="{active: $state.is(\'main.setting.network.view.externip\')}">\r\n <a ng-href="/setting/network/view/externip">\r\n <i class="icon-globe"></i>\r\n {{ \'APPLICATION_EXTERNIP\' | translate }} </a>\r\n </li>\r\n </ul>\r\n </div>\r\n <!-- END MENU -->\r\n </div>\r\n <!-- END PORTLET MAIN -->\r\n </div>\r\n <!-- END BEGIN PROFILE SIDEBAR -->\r\n <!-- BEGIN PROFILE CONTENT -->\r\n <div ui-view class="profile-content">\r\n </div>\r\n <!-- END PROFILE CONTENT -->\r\n\r\n </div>\r\n</div>\r\n<!-- END PAGE CONTENT-->\r\n'),a.put("app/setting/smtp/view/view.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_GENERALS\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_2" data-toggle="tab">SMTP</a>\n </li>\n </ul>\n </div>\n <div class="portlet-body" data-ng-init="initView();initMailAccounts();">\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="mail-spinner-grid" spinner-start-active="false"></span>\n <!-- END UI-GRID SPINNER -->\n\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.info" data-ng-submit="forms.info.$valid && updateItem()" novalidate>\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.account.name" required/>\n <span data-ng-show="(forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid && forms.info.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.account.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n <!-- START SERVICE -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_SERVICE\' | translate}}</label><br>\n <input\n bs-switch\n data-ng-model="item.account.service"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_ENABLED\' | translate }}"\n switch-off-text="{{ \'APPLICATION_DISABLED\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n </div>\n <!-- END SERVICE -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END GENERAL TAB -->\n\n <!-- SMTP TAB -->\n <div class="tab-pane" id="tab_1_2">\n\n <div class="note note-danger" data-ng-show="item.account.MailServerOut.state === \'DISCONNECTED\' || item.account.MailServerOut.state === \'ERROR\'">\n <p> ERROR </p>\n <json-formatter open="1" json="item.account.MailServerOut.source"></json-formatter>\n </div>\n\n <div class="note note-success" data-ng-show="item.account.MailServerOut.state === \'CONNECTED\'">\n <p> CONNECTED </p>\n </div>\n\n <div class="note note-info" data-ng-show="item.account.MailServerOut.state === \'CONNECTING\'">\n <p> TRYING... </p>\n </div>\n\n <form name="forms.formOut" data-ng-submit="forms.formOut.$valid && updateItem()" novalidate>\n\n <!-- START HOST -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formOut.host.$touched || forms.formOut.$submitted) && forms.formOut.host.$invalid}">\n <label class="control-label">{{\'APPLICATION_HOST\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="host" placeholder="{{\'APPLICATION_HOST\' | translate}}" class="form-control" data-ng-model="item.account.MailServerOut.host" required/>\n <span data-ng-show="(forms.formOut.host.$touched || forms.formOut.$submitted) && forms.formOut.host.$invalid && forms.formOut.host.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END HOST -->\n\n <!-- START USERNAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formOut.username.$touched || forms.formOut.$submitted) && forms.formOut.username.$invalid}">\n <label class="control-label">{{\'APPLICATION_USERNAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="username" placeholder="{{\'APPLICATION_USERNAME\' | translate}}" class="form-control" data-ng-model="item.account.MailServerOut.username" required/>\n <span data-ng-show="(forms.formOut.username.$touched || forms.formOut.$submitted) && forms.formOut.username.$invalid && forms.formOut.username.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n\n <!-- START PASSWORD -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formOut.password.$touched || forms.formOut.$submitted) && forms.formOut.password.$invalid}">\n <label class="control-label">{{\'APPLICATION_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="password" name="password" placeholder="{{\'APPLICATION_PASSWORD\' | translate}}" class="form-control" data-ng-model="item.account.MailServerOut.password" required/>\n <span data-ng-show="(forms.formOut.password.$touched || forms.formOut.$submitted) && forms.formOut.password.$invalid && forms.formOut.password.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PASSWORD -->\n\n <!-- START PORT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formOut.port.$touched || forms.formOut.$submitted) && forms.formOut.port.$invalid}">\n <label class="control-label">{{\'APPLICATION_PORT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" name="port" placeholder="{{\'APPLICATION_PORT\' | translate}}" class="form-control" data-ng-model="item.account.MailServerOut.port" required/>\n <span data-ng-show="(forms.formOut.form.$touched || forms.formOut.$submitted) && forms.formOut.port.$invalid && forms.formOut.port.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.formOut.form.$touched || forms.formOut.$submitted) && forms.formOut.port.$invalid && forms.formOut.port.$error.number" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_NUMERIC_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PORT -->\n\n <!-- START SSL -->\n <div class="form-group">\n <label class="control-label">SSL</label><br>\n <input\n bs-switch\n data-ng-model="item.account.MailServerOut.ssl"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_ENABLED\' | translate }}"\n switch-off-text="{{ \'APPLICATION_DISABLED\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n </div>\n <!-- END SSL -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n <input class="btn blue-madison" type="button" value="Test" data-ng-click="test()"/>\n </form>\n </div>\n <!-- END SMTP TAB -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/setting/system/view/console/console.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initView()" data-ng-click="cmdFocus()">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_ASTERISK_CONSOLE\' | translate}}\n <button class="btn btn-default" href="#" data-ng-click="output = \'\';cmdFocus();">\n <i class="icon-ban"></i>\n </button></span>\n </div>\n </div>\n <div class="portlet-body">\n <span us-spinner spinner-key="console-spinner" spinner-start-active="true"></span>\n <div class="well" style="height:400px;overflow-y:scroll;" schroll-bottom="output" data-ng-bind-html="output"></div>\n <form name="forms.console" data-ng-submit="forms.console.$valid && sendCmd() && !busy" novalidate>\n <!-- START COMMAND -->\n <div class="form-group">\n <input type="text" name="command" id="command" placeholder="{{\'APPLICATION_INSERT_COMMAND\' | translate}}" class="form-control" data-ng-model="item.command" data-ng-disabled="busy" autocomplete="off" data-ng-keyup="keyUp($event)"/>\n </div>\n <span class="help-block">\n {{ \'DESCRIPTION_ENTER_TO_COMMAND\' | translate }}\n </span>\n <button type="submit" class="hide"></button>\n <!-- END COMMAND -->\n </form>\n </div>\n </div>\n</div>\n'),a.put("app/setting/system/view/general/general.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="row ">\n <div class="col-md-6 col-sm-6">\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-pie-chart font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_MEMORY\' | translate }} (<b>{{ \'APPLICATION_TOTAL\' | translate }}</b>: {{system.memory.Total}} MB)</a> </span>\n </div>\n <div class="actions">\n <a class="btn btn-default" href="#" data-ng-click="initView()">\n <i class="icon-refresh"></i>\n </a>\n </div>\n </div>\n <div class="portlet-body">\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="memory-spinner" spinner-start-active="true"></span>\n <!-- END UI-GRID SPINNER -->\n <canvas class="chart chart-pie" chart-data="system.memory.values" chart-labels="system.memory.labels" chart-legend="true">\n </canvas>\n </div>\n </div>\n </div>\n <div class="col-md-6 col-sm-6">\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-pie-chart font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_DISK\' | translate }} (<b>{{ \'APPLICATION_TOTAL\' | translate }}</b>: {{system.mount.size}} GB)</a> </span>\n </div>\n <div class="actions">\n <div class="portlet-input input-inline input-medium">\n <div class="input-group">\n <ui-select data-ng-model="system.mount" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_DISK\' | translate}}">{{$select.selected.mount}}</ui-select-match>\n <ui-select-choices repeat="disk in system.disks | filter: $select.search">\n <div ng-bind-html="disk.mount | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="input-group-btn">\n <button class="btn btn-default" href="#" data-ng-click="initView()">\n <i class="icon-refresh"></i>\n </button>\n </span>\n </div>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="disk-spinner" spinner-start-active="true"></span>\n <!-- END UI-GRID SPINNER -->\n <canvas class="chart chart-pie" chart-data="system.mount.values" chart-labels="system.mount.labels" chart-legend="true">\n </canvas>\n <!-- END Portlet PORTLET-->\n </div>\n </div>\n </div>\n </div>\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-pie-chart font-green-sharp"></i>\n <span class="caption-subject">CPU (<b>{{ \'APPLICATION_NUMBER_OF_CORES\' | translate }}</b>: {{system.cpu.cores.length}}, <b>MOTION</b>: {{system.cpu.motion}} % )</a> </span>\n </div>\n <div class="actions">\n <a class="btn btn-default" href="#" data-ng-click="initView()">\n <i class="icon-refresh"></i>\n </a>\n </div>\n </div>\n <div class="portlet-body">\n <div class="row">\n <div class="col-md-2 col-sm-4" data-ng-repeat="cpu in system.cpu.cores">\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="cpu-spinner" spinner-start-active="false"></span>\n <!-- END UI-GRID SPINNER -->\n <canvas class="chart chart-doughnut" chart-data="cpu.values" chart-labels="cpu.labels" chart-colours="cpu.colours" chart-legend="true">\n </canvas>\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/setting/system/view/logs/logs.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initView()">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_LOGS\' | translate}}\n <button class="btn btn-default" href="#" data-ng-click="initView()">\n <i class="icon-refresh"></i>\n </button></span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_OUTPUT\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_2" data-toggle="tab">{{ \'APPLICATION_ERRORS\' | translate}}</a>\n </li>\n </ul>\n </div>\n <div class="portlet-body">\n <div class="tab-content">\n <!-- CHANGE LOGO TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <pre style="height:700px;overflow-y:scroll;" schroll-bottom="logs.output">\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="logs-spinner" spinner-start-active="true"></span>\n <!-- END UI-GRID SPINNER -->\n {{logs.output}}\n </pre>\n </div>\n <div class="tab-pane" id="tab_1_2">\n <pre style="height:700px;overflow-y:scroll;" schroll-bottom="logs.errors">\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="logs-spinner" spinner-start-active="true"></span>\n <!-- END UI-GRID SPINNER -->\n {{logs.errors}}\n </pre>\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/setting/system/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-settings"></i>\n <a href="#">{{ \'APPLICATION_SETTINGS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-pie-chart"></i>\n <a href="#">{{ \'APPLICATION_SYSTEM\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img src="assets/images/media/customize.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{ \'APPLICATION_SYSTEM\' | translate }}\n </div>\n </div>\n <!-- END SIDEBAR USER TITLE -->\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.setting.system.view.general\')}">\n <a ng-href="/setting/system/view/general">\n <i class="icon-pie-chart"></i>\n {{ \'APPLICATION_GENERAL\' | translate }} </a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.setting.system.view.logs\')}">\n <a ng-href="/setting/system/view/logs">\n <i class="icon-list"></i>\n {{ \'APPLICATION_LOGS\' | translate }} </a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.setting.system.view.console\')}">\n <a ng-href="/setting/system/view/console">\n <i class="icon-chemistry"></i>\n {{ \'APPLICATION_ASTERISK_CONSOLE\' | translate }} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/setting/update/list/landing.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-settings"></i>\n <a href="#">{{ \'APPLICATION_SETTINGS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-cloud-download"></i>\n <a href="#">{{ \'APPLICATION_UPDATES\' | translate }}</a>\n </li>\n </ul>\n </div>\n <!-- BEGIN PAGE CONTENT--> \n <div class="row" data-ng-init="initCounter()">\n <div class="col-md-12 page-500">\n <div class="number">\n <timer interval="1000" countdown="120">{{countdown}}</timer>\n </div>\n <div class="details">\n <h3>Wait! We need to restart xCALLY Motion server.</h3>\n <p>\n We are updating it!<br/>\n xCALLY Motion Team<br/><br/>\n </p>\n </div>\n </div>\n </div>\n <!-- END PAGE CONTENT-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/setting/update/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-settings"></i>\n <a href="#">{{ \'APPLICATION_SETTINGS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-cloud-download"></i>\n <a href="#">{{ \'APPLICATION_UPDATES\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <!-- <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-cloud-download font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_UPDATES\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <a class="btn btn-default" href="#" data-ng-click="pull()">\n <i class="icon-cloud-download"></i> {{ \'APPLICATION_UPDATE\' | translate }}\n </a>\n </div>\n </div>\n <div class="portlet-body" data-ng-init="initView()"> -->\n <!-- START TABLE -->\n <!-- <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div> -->\n <!-- END TABLE -->\n <!-- </div> -->\n <!-- END Portlet PORTLET-->\n <!-- </div> -->\n <div class="row">\n <div class="col-md-12">\n <!-- BEGIN INLINE NOTIFICATIONS PORTLET-->\n <div class="portlet">\n <div class="portlet-title">\n <div class="caption">\n <i class="icon-cloud-download font-green-sharp"></i>{{ \'APPLICATION_UPDATE\' | translate }}\n </div>\n <div class="actions">\n <button class="btn btn-default" href="#" data-ng-click="pull()">\n <i class="icon-cloud-download"></i> {{ \'APPLICATION_UPDATE\' | translate }}\n </button>\n </div>\n </div>\n <div class="portlet-body" data-ng-init="initView()">\n <div class="row margin-bottom-40">\n <!-- Pricing -->\n <div class="col-md-6">\n <div class="pricing hover-effect current-version">\n <div class="pricing-head">\n <h3>{{ \'APPLICATION_CURRENT_VERSION\' | translate }} <span>\n {{ \'APPLICATION_LAST_PERFORMED_UPDATE\' | translate }} </span>\n </h3>\n <h4>v. {{currentVersion.version}}</h4>\n </div>\n <ul class="pricing-content list-unstyled">\n <li>\n <i class="icon-clock"></i><b> {{\'APPLICATION_RELEASED_AT\' | translate}}:</b> {{currentVersion.createdAt}}\n </li>\n <li>\n <i class="icon-list"></i> <a href="https://wiki.xcallymotion.com/display/XMD/Motion+GUI#MotionGUI-Version{{currentVersion.version}}">{{\'APPLICATION_CHANGELOG\' | translate}}</a>\n </li>\n </ul>\n <div class="pricing-footer">\n </div>\n </div>\n </div>\n <div class="col-md-6">\n <div class="pricing hover-effect" data-ng-class="{\'disabled-update\':currentVersion.version==latestVersion.version}">\n <div class="pricing-head">\n <h3>{{ \'APPLICATION_LATEST_VERSION\' | translate }} <span>\n {{ \'APPLICATION_LAST_SOFTWARE_UPDATE_AVAILABLE\' | translate }} </span>\n </h3>\n <h4>v. {{latestVersion.version}}</h4>\n </div>\n <ul class="pricing-content list-unstyled">\n <li>\n <i class="icon-clock"></i><b> {{\'APPLICATION_RELEASED_AT\' | translate}}:</b> {{latestVersion.createdAt}}\n </li>\n <li>\n <i class="icon-list"></i> <a href="https://wiki.xcallymotion.com/display/XMD/Motion+GUI#MotionGUI-Version{{latestVersion.version}}">{{\'APPLICATION_CHANGELOG\' | translate}}</a>\n </li>\n </ul>\n <div class="pricing-footer">\n </div>\n </div>\n </div>\n <!--//End Pricing -->\n </div>\n </div>\n </div>\n <!-- END INLINE NOTIFICATIONS PORTLET-->\n </div>\n </div>\n\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'), -a.put("app/setting/update/list/list.pull.html",'<div class="modal-header">\n <button data-ng-if="modal.dismissable" type="button" data-ng-click="$dismiss()" class="close">×</button>\n <h4 ng-if="modal.title" ng-bind="modal.title" class="modal-title"></h4>\n</div>\n<div class="modal-body">\n <p data-ng-if="modal.text" data-ng-bind="modal.text"></p>\n <div data-ng-if="modal.html" data-ng-bind-html="modal.html"></div>\n</div>\n<div class="modal-footer">\n <button data-ng-repeat="button in modal.buttons" data-ng-class="button.classes" data-ng-click="button.click($event)" data-ng-bind="button.text" class="btn"></button>\n</div>\n'),a.put("app/square/odbc/list/list.create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_PROJECT\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.name.$touched || form.$submitted) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DSN -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.dsn.$touched || form.$submitted) && form.dsn.$invalid}">\n <label class="control-label">{{\'APPLICATION_ODBC\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="dsn" placeholder="DRIVER=MySQL;SERVER=127.0.0.1;UID=xcall;PWD=password;DATABASE=motion" class="form-control" data-ng-model="item.dsn" required/>\n <p class="help-block">Es. DRIVER=MySQL;SERVER=127.0.0.1;UID=xcall;PWD=password;DATABASE=motion</p>\n <span data-ng-show="(form.dsn.$touched || form.$submitted) && form.dsn.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END DSN -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/square/odbc/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-superscript"></i>\n <a>Cally ²</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-docs"></i>\n <a href="#">{{ \'APPLICATION_ODBCS\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-docs font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_ODBCS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <button class="btn green-jungle " ng-click="createItem()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_ODBC\' | translate }}\n </button>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/square/odbc/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getOdbc()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-superscript"></i>\n <a>Cally ²</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-docs"></i>\n <a href="/square/odbc/list">{{ \'APPLICATION_ODBCS\' | translate }}</a>\n <i data-ng-show="odbc" class="fa fa-angle-right"></i>\n </li>\n <li data-ng-show="odbc">\n <a href="#">{{odbc.name}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/odbc.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{odbc.name}}\n </div>\n <!-- <div class="profile-usertitle-job">\n {{user.role}}\n </div> -->\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.square.odbc.view.settings\')}">\n <a data-ng-href="/square/odbc/view/{{odbc.id}}/settings">\n <i class="icon-settings"></i>\n {{ \'APPLICATION_SETTINGS\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/square/odbc/view/view.settings.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_ODBC\' | translate}} {{ \'APPLICATION_SETTINGS\' | translate}} </span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n </li>\n </ul>\n </div>\n\n <div class="portlet-body">\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.general" data-ng-submit="forms.general.$valid && updateOdbc()" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="odbc.name" required/>\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DSN -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.odbc.dsn.$touched || forms.odbc.$submitted) && forms.odbc.dsn.$invalid}">\n <label class="control-label">{{\'APPLICATION_ODBC\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="dsn" placeholder="{{\'APPLICATION_DSN\' | translate}}" class="form-control" data-ng-model="odbc.dsn" required/>\n <p class="help-block">Es. DRIVER=MySQL;SERVER=127.0.0.1;UID=xcall;PWD=password;DATABASE=motion</p>\n <span data-ng-show="(forms.odbc.dsn.$touched || forms.odbc.$submitted) && forms.odbc.dsn.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END DSN -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="odbc.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END ADVANCED TAB -->\n\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/square/project/list/list.create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_PROJECT\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.name.$touched || form.$submitted) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/square/project/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-superscript"></i>\n <a>Cally ²</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-slack"></i>\n <a href="#">{{ \'APPLICATION_PROJECTS\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-docs font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_PROJECTS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <button class="btn green-jungle " ng-click="createItem()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_PROJECT\' | translate }}\n </button>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/square/project/view/projectNotes.modal.html",'<div class="yellow-notes">\n<div class="modal-header">\n <button ng-if="modal.dismissable" type="button" ng-click="$dismiss()" class="close">×</button>\n <h4 class="modal-title">{{\'APPLICATION_NOTES\' | translate}}</h4>\n</div>\n<div class="modal-body" style="text-align:center;">\n<textarea name="name" class="notes-textarea" placeholder="{{\'MESSAGE_INSERT_YOUR_TEXT_HERE\' | translate}}" data-ng-model="notes.value"></textarea>\n</div>\n<div class="modal-footer" >\n <button class="btn green-haze" type="button" ng-click="close()">{{ \'APPLICATION_SAVE\' | translate }}</button>\n</div>\n</div>\n'),a.put("app/square/project/view/view.html",'<div class="row" data-ng-init="getProject()">\n <div class="col-md-12">\n <div class="page-bar" style="margin-bottom: 0px;">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-superscript"></i>\n <a>Cally ²</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-slack"></i>\n <a href="/square/projects/list">{{ \'APPLICATION_PROJECTS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <a ng-href="/square/projects/view/{{squareProject.id}}">{{squareProject.name}}</a>\n </li>\n </ul>\n </div>\n\n <h4 class="text-success bold"> {{squareProject.name}} <button class="btn btn-xs yellow-saffron" type="button" data-ng-click="editNotes()"><i class="icon-note"></i> {{\'APPLICATION_NOTES\' | translate}}</button></h4> <p class="text-muted"> {{squareProject.description}} </p>\n\n <div id="geEditor" class="geEditor"></div>\n </div>\n</div>\n<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n\n </div>\n</div>\n\n<!-- END PAGE CONTENT-->\n<script></script>\n'),a.put("app/square/realtime/view/general/general.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="init()">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns class="ui-grid" ui-grid-pagination ui-grid-auto-resize>\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/square/realtime/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-superscript"></i>\n <a href="#">Cally ²</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-energy"></i>\n <a href="/square/realtime/view/general">{{ \'APPLICATION_REALTIME\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <div>\n <nav class="navbar navbar-default" role="navigation">\n <div class="collapse navbar-collapse">\n <ul class="nav navbar-nav">\n <li data-ng-class="{\'active\': $state.is(\'main.square.realtime.view.general\')}">\n <a href="/square/realtime/view/general">\n {{\'APPLICATION_GENERAL\' | translate}}\n </a>\n </li>\n </ul>\n </div>\n </nav>\n </div>\n <div ui-view></div>\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/square/recording/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-superscript"></i>\n <a href="#">Cally ²</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-microphone"></i>\n <a href="#">{{ \'APPLICATION_RECORDINGS\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="fa fa-play font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_RECORDINGS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/staff/agent/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-puzzle"></i>\n <a href="#">{{ \'APPLICATION_STAFF\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-people"></i>\n <a href="#">{{ \'APPLICATION_AGENTS\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-people font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_AGENTS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group" data-ng-show="Auth.getCurrentUser().role === \'admin\'">\n <button type="button" class="btn green-jungle" data-toggle="dropdown" data-hover="dropdown" data-delay="1000" data-close-others="true" aria-expanded="true">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_AGENT\' | translate }} <i class="fa fa-angle-down"></i>\n </button>\n <ul class="dropdown-menu" role="menu">\n <li>\n <a href="/staff/agents/wizard">\n Standard\n </a>\n </li>\n <li>\n <a href="/staff/agents/bulk">\n {{ \'APPLICATION_BULK\' | translate }}\n </a>\n </li>\n </ul>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/staff/agent/view/view.account.html",'<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_PROFILE\' | translate}} {{ \'APPLICATION_ACCOUNT\' | translate}}</span>\n </div>\n <ul class="nav nav-tabs">\n <li data-ng-class="{\'active\': Auth.isAdmin() || userModules[4]}" data-ng-show="Auth.isAdmin() || userModules[4]">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_PERSONAL_INFO\' | translate}}</a>\n </li>\n <li data-ng-show="Auth.isAdmin() || userModules[4]">\n <a href="#" data-target="#tab_1_2" data-toggle="tab">{{ \'APPLICATION_CHANGE_AVATAR\' | translate}}</a>\n </li>\n <li data-ng-show="Auth.isAdmin() || userModules[4] || agent.id === Auth.getCurrentUser().id" data-ng-class="{\'active\': !Auth.isAdmin() && agent.id === Auth.getCurrentUser().id}">\n <a href="#" data-target="#tab_1_3" data-toggle="tab">{{ \'APPLICATION_CHANGE_PASSWORD\' | translate}}</a>\n </li>\n </ul>\n </div>\n\n <div class="portlet-body">\n <div class="tab-content">\n <!-- PERSONAL INFO TAB -->\n <div class="tab-pane" data-ng-class="{\'active\': Auth.isAdmin() || userModules[4]}" data-ng-show="Auth.isAdmin() || userModules[4]" id="tab_1_1">\n <form name="forms.info" data-ng-submit="forms.info.$valid && updateItem()" novalidate>\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.fullname.$touched || forms.info.$submitted) && forms.info.fullname.$invalid}">\n <label class="control-label">{{\'APPLICATION_FULLNAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="fullname" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="agent.fullname" required/>\n <span data-ng-show="(forms.info.fullname.$touched || forms.info.$submitted) && forms.info.fullname.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START USERNAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_USERNAME\' | translate}}</label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_USERNAME\' | translate}}" class="form-control" data-ng-model="agent.name" disabled/>\n </div>\n <!-- END USERNAME -->\n\n <!-- START EMAIL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.email.$touched || forms.info.$submitted) && forms.info.email.$invalid}">\n <label class="control-label">{{\'APPLICATION_EMAIL\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="email" name="email" placeholder="{{\'APPLICATION_EMAIL\' | translate}}" class="form-control" data-ng-model="agent.email" required/>\n <span data-ng-show="(forms.info.email.$touched || forms.info.$submitted) && forms.info.email.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.info.email.$touched || forms.info.$submitted) && forms.info.email.$error.email" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n </span>\n </div>\n <!-- END EMAIL -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="agent.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n <!-- START LOGIN IN PAUSE -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_LOGIN_IN_PAUSE\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="agent.loginInPause"\n type="checkbox"\n name="auth"\n switch-active="{{ recordSwitch.isActive }}"\n switch-on-text="{{ recordSwitch.onText }}"\n switch-off-text="{{ recordSwitch.offText }}"\n switch-on-color="{{ recordSwitch.onColor }}"\n switch-off-color="{{ recordSwitch.offColor }}"\n switch-animate="{{ recordSwitch.animate }}"\n switch-size="{{ recordSwitch.size }}"\n switch-label="{{ recordSwitch.label }}"\n switch-icon="{{ recordSwitch.icon }}"\n switch-radio-off="{{ recordSwitch.radioOff }}"\n switch-label-width="{{ recordSwitch.labelWidth }}"\n switch-handle-width="{{ recordSwitch.handleWidth }}">\n </div>\n <!-- END LOGIN IN PAUSE -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END PERSONAL INFO TAB -->\n <!-- CHANGE AVATAR TAB -->\n <div class="tab-pane" data-ng-show="Auth.isAdmin() || userModules[4]" id="tab_1_2">\n <form action="#" role="form">\n <div class="form-group">\n <div class="fileinput fileinput-new" data-provides="fileinput">\n <div class="fileinput-new thumbnail" style="width: 200px; height: 150px;">\n <img ng-src="assets/images/media/noProfileImage.png" alt=""/>\n </div>\n <div class="fileinput-preview fileinput-exists thumbnail" style="max-width: 200px; max-height: 150px;">\n </div>\n <div>\n <span class="btn default btn-file" data-ng-show="!uploader.queue[0]">\n <span> {{ \'APPLICATION_SELECT_IMAGE\' | translate }} </span>\n <input type="file" nv-file-select="" uploader="uploader" /><br/>\n </span>\n <button type="button" class="btn default" data-ng-show="uploader.queue[0]" data-dismiss="fileinput" ng-click="uploader.queue[0].remove()">\n {{ \'APPLICATION_REMOVE\' | translate }}\n </button>\n <button type="button" class="btn green-haze" data-ng-show="uploader.queue[0]" data-ng-click="uploader.queue[0].upload()" ng-disabled="uploader.queue[0].isReady || uploader.queue[0].isUploading || uploader.queue[0].isSuccess">\n {{ \'APPLICATION_CONFIRM\' | translate }}\n </button>\n </div>\n <p>\n </br> {{ \'MESSAGE_SUPPORTED_FORMATS\' | translate }} <b>jpg, png, jpeg</b>.\n </p>\n </div>\n </div>\n </form>\n <div class="row">\n <div class="col-md-2">\n <table class="table" border="0">\n <tbody>\n <tr data-ng-repeat="item in uploader.queue">\n <td style="border-top-style:none">\n <strong>\n {{ item.file.name }}\n </strong>\n </td>\n <td data-ng-show="uploader.isHTML5" nowrap style="border-top-style:none">\n {{ item.file.size/1024/1024|number:2 }} MB\n </td>\n <td nowrap style="border-top-style:none">\n <button type="button" class="btn btn-danger btn-xs" data-ng-click="item.remove()">\n <span class="glyphicon glyphicon-trash"></span> Remove\n </button>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n </div>\n <!-- END CHANGE AVATAR TAB -->\n <!-- CHANGE PASSWORD TAB -->\n <div class="tab-pane" data-ng-show="Auth.isAdmin() || userModules[4] || agent.id === Auth.getCurrentUser().id" data-ng-class="{\'active\': !Auth.isAdmin() && agent.id === Auth.getCurrentUser().id}" id="tab_1_3">\n <form name="forms.changePwd" data-ng-submit="forms.changePwd.$valid && updatePassword()" novalidate>\n <!-- START CURRENT PWD -->\n <div class="form-group" data-ng-if="!(Auth.isAdmin() || userModules[4])" data-ng-class="{\'has-error\': (forms.changePwd.current_pwd.$touched || forms.changePwd.$submitted) && forms.changePwd.current_pwd.$invalid}">\n <label class="control-label">{{\'APPLICATION_CURRENT_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="password" name="current_pwd" placeholder="{{\'APPLICATION_CURRENT_PASSWORD\' | translate}}" class="form-control" data-ng-model="agent.currentPwd" required/>\n <span data-ng-show="(forms.changePwd.current_pwd.$touched || forms.changePwd.$submitted) && forms.changePwd.current_pwd.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CURRENT PWD -->\n <!-- START NEW PWD -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.changePwd.new_pwd.$touched || forms.changePwd.$submitted) && forms.changePwd.new_pwd.$invalid}">\n <label class="control-label">{{\'APPLICATION_NEW_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="password" name="new_pwd" placeholder="{{\'APPLICATION_NEW_PASSWORD\' | translate}}" class="form-control" data-ng-model="agent.newPwd" data-ng-pattern="setting.securePassword ? settings.patternPassword : settings.patternPasswordLight" required/>\n <span class="help-block">\n {{setting.securePassword ? \'MESSAGE_PASSWORD_FORMAT\' : \'MESSAGE_PASSWORD_LIGTH_FORMAT\' | translate}}\n </span>\n <span data-ng-show="(forms.changePwd.current_pwd.$touched || forms.info.$submitted) && forms.changePwd.current_pwd.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n </span>\n <span data-ng-show="(forms.changePwd.new_pwd.$touched || forms.changePwd.$submitted) && forms.changePwd.new_pwd.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NEW PWD -->\n <!-- START RE-NEW PWD -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.changePwd.re_new_pwd.$touched || forms.changePwd.$submitted) && forms.changePwd.re_new_pwd.$invalid}">\n <label class="control-label">{{\'APPLICATION_RE_TYPE_NEW_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="password" name="re_new_pwd" placeholder="{{\'APPLICATION_RE_TYPE_NEW_PASSWORD\' | translate}}" class="form-control" data-ng-model="agent.reNewPwd" nx-equal="agent.newPwd" required/>\n <span data-ng-show="(forms.changePwd.new_pwd.$touched || forms.changePwd.$submitted) && forms.changePwd.new_pwd.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END RE-NEW PWD -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END CHANGE PASSWORD TAB -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'), -a.put("app/staff/agent/view/view.chat.html",'<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_PROFILE\' | translate}} {{ \'APPLICATION_CHAT\' | translate}}</span>\n </div>\n </div>\n\n <div class="portlet-body">\n <!-- START CHAT TAB -->\n <form name="form" data-ng-submit="patchItem()" novalidate>\n <!-- START CAPACITY -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.capacity.$touched || form.$submitted) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_CAPACITY\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" name="chatCapacity" placeholder="{{\'APPLICATION_CAPACITY\' | translate}}" class="form-control" data-ng-model="agent.chatCapacity" min="0" required/>\n <span class="help-block">\n {{\'MESSAGE_ZERO_MEANS_UNLIMITED\' | translate}}\n </span>\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CAPACITY -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n <!-- END CHAT TAB -->\n </div>\n </div>\n </div>\n</div>\n</div>\n'),a.put("app/staff/agent/view/view.fax.html",'<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_PROFILE\' | translate}} {{ \'APPLICATION_FAX\' | translate}}</span>\n </div>\n </div>\n\n <div class="portlet-body">\n <!-- START CHAT TAB -->\n <form name="form" data-ng-submit="patchItem()" novalidate>\n <!-- START CAPACITY -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.capacity.$touched || form.$submitted) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_CAPACITY\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" name="faxCapacity" placeholder="{{\'APPLICATION_CAPACITY\' | translate}}" class="form-control" data-ng-model="agent.faxCapacity" min="0" required/>\n <span class="help-block">\n {{\'MESSAGE_ZERO_MEANS_UNLIMITED\' | translate}}\n </span>\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CAPACITY -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n <!-- END CHAT TAB -->\n </div>\n </div>\n </div>\n</div>\n</div>\n'),a.put("app/staff/agent/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-puzzle"></i>\n <a href="#">{{ \'APPLICATION_STAFF\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-people"></i>\n <a href="/staff/agents/list">{{ \'APPLICATION_AGENTS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <a href="#">{{agent.fullname}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-userpic">\n <img ng-src="api/users/avatar/{{agent.userpic ? agent.userpic : \'unknown_avatar\'}}" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n\n <!-- START SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{agent.fullname}}\n </div>\n <div class="profile-usertitle-job">\n {{agent.role}}\n </div>\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.staff.agents.view.account\')}">\n <a data-ng-href="/staff/agents/view/{{agent.id}}/account">\n <i class="icon-user"></i>\n {{ \'APPLICATION_ACCOUNT\' | translate}} </a>\n </li>\n\n <li data-ng-class="{active: $state.includes(\'main.staff.agents.view.queues\')}" data-ng-show="Auth.isAdmin() || userModules[7]">\n <a data-ng-href="/staff/agents/view/{{agent.id}}/queues/voice">\n <i class="icon-docs"></i>\n {{ \'APPLICATION_QUEUES\' | translate}} </a>\n </li>\n\n <li data-ng-class="{active: $state.is(\'main.staff.agents.view.voice\')}" data-ng-show="Auth.isAdmin() || userModules[7]">\n <a data-ng-href="/staff/agents/view/{{agent.id}}/voice">\n <i class="icon-earphones-alt"></i>\n {{ \'APPLICATION_VOICE\' | translate}} </a>\n </li>\n\n <li data-ng-class="{active: $state.is(\'main.staff.agents.view.chat\'),\'disabled-link\':!license.chat}" data-ng-show="Auth.isAdmin() || userModules[8]">\n <a data-ng-href="{{license.chat ? \'/staff/agents/view/\'+agent.id+\'/chat\' : \'javascript:;\'}}" class="disable-target">\n <i class="icon-bubble"></i>\n {{ \'APPLICATION_CHAT\' | translate}} </a>\n </li>\n\n <li data-ng-class="{active: $state.is(\'main.staff.agents.view.mail\'),\'disabled-link\':!license.mail}" data-ng-show="Auth.isAdmin() || userModules[9]">\n <a data-ng-href="{{license.mail ? \'/staff/agents/view/\'+agent.id+\'/mail\' : \'javascript:;\'}}" class="disable-target">\n <i class="icon-envelope"></i>\n {{ \'APPLICATION_MAIL\' | translate}} </a>\n </li>\n\n <li data-ng-class="{active: $state.is(\'main.staff.agents.view.fax\'),\'disabled-link\':!license.fax}" data-ng-show="Auth.isAdmin() || userModules[10]">\n <a data-ng-href="{{license.fax ? \'/staff/agents/view/\'+agent.id+\'/fax\' : \'javascript:;\'}}" class="disable-target">\n <i class="fa fa-fax"></i>\n {{ \'APPLICATION_FAX\' | translate}} </a>\n </li>\n\n <li data-ng-class="{active: $state.is(\'main.staff.agents.view.sms\'),\'disabled-link\':!license.messaging}" data-ng-show="Auth.isAdmin() || userModules[11]">\n <a data-ng-href="{{license.messaging ? \'/staff/agents/view/\'+agent.id+\'/sms\' : \'javascript:;\'}}" class="disable-target">\n <i class=" glyphicon glyphicon-comment "></i>\n {{ \'APPLICATION_SMS\' | translate}} </a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.staff.agents.view.openchannel\'),\'disabled-link\':!license.openchannel}" data-ng-show="Auth.isAdmin() || userModules[20]">\n <a data-ng-href="{{license.openchannel ? \'/staff/agents/view/\'+agent.id+\'/openchannel\' : \'javascript:;\'}}" class="disable-target">\n <i class=" icon-globe "></i>\n {{ \'APPLICATION_OPEN_CHANNEL\' | translate}} </a>\n </li>\n\n <li data-ng-class="{active: $state.is(\'main.staff.agents.view.motionbar\')}" data-ng-show="Auth.isAdmin()">\n <a data-ng-href="/staff/agents/view/{{agent.id}}/motionbar">\n <i class="icon-screen-desktop"></i>\n {{ \'APPLICATION_MOTION_BAR\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/staff/agent/view/view.mail.html",'<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_PROFILE\' | translate}} {{ \'APPLICATION_MAIL\' | translate}}</span>\n </div>\n </div>\n\n <div class="portlet-body">\n <!-- START CHAT TAB -->\n <form name="form" data-ng-submit="patchItem()" novalidate>\n <!-- START CAPACITY -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.capacity.$touched || form.$submitted) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_CAPACITY\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" name="mailCapacity" placeholder="{{\'APPLICATION_CAPACITY\' | translate}}" class="form-control" data-ng-model="agent.mailCapacity" min="0" required/>\n <span class="help-block">\n {{\'MESSAGE_ZERO_MEANS_UNLIMITED\' | translate}}\n </span>\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CAPACITY -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n <!-- END CHAT TAB -->\n </div>\n </div>\n </div>\n</div>\n</div>\n'),a.put("app/staff/agent/view/view.motionbar.html",'<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_PROFILE\' | translate}} {{ \'APPLICATION_MOTION_BAR\' | translate}}</span>\n </div>\n <ul class="nav nav-tabs">\n <li data-ng-class="{\'active\': Auth.isAdmin()}" data-ng-show="Auth.isAdmin()">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n </li>\n <li data-ng-show="Auth.isAdmin()">\n <a href="#" data-target="#tab_1_2" data-toggle="tab">{{ \'APPLICATION_CALL_FORWARDING\' | translate}}</a>\n </li>\n <li data-ng-show="Auth.isAdmin()">\n <a href="#" data-target="#tab_1_3" data-toggle="tab">{{ \'APPLICATION_ADVANCED\' | translate}}</a>\n </li>\n </ul>\n </div>\n\n <div class="portlet-body">\n <div class="tab-content">\n <!-- START GENERAL TAB -->\n <div class="tab-pane" data-ng-class="{\'active\': Auth.isAdmin()}" data-ng-show="Auth.isAdmin()" id="tab_1_1">\n <form name="forms.general" data-ng-submit="updateItem()" novalidate>\n\n <!-- START ENABLE_SETTINGS -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_ENABLE_SETTINGS\' | translate}}</label><br>\n <input\n bs-switch\n ng-model="agent.phoneBarEnableSettings"\n type="checkbox"\n switch-active="{{ radioSwitch.isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ radioSwitch.onColor }}"\n switch-off-color="{{ radioSwitch.offColor }}"\n switch-animate="{{ radioSwitch.animate }}"\n switch-size="{{ radioSwitch.size }}"\n switch-label="{{ radioSwitch.label }}"\n switch-icon="{{ radioSwitch.icon }}"\n switch-radio-off="{{ radioSwitch.radioOff }}"\n switch-label-width="{{ radioSwitch.labelWidth }}"\n switch-handle-width="{{ radioSwitch.handleWidth }}">\n </div>\n <!-- END ENABLE_SETTINGS -->\n\n <!-- START AUTO_ANSWER -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_AUTO_ANSWER\' | translate}}</label><br>\n <input\n bs-switch\n ng-model="agent.phoneBarAutoAnswer"\n type="checkbox"\n switch-active="{{ radioSwitch.isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ radioSwitch.onColor }}"\n switch-off-color="{{ radioSwitch.offColor }}"\n switch-animate="{{ radioSwitch.animate }}"\n switch-size="{{ radioSwitch.size }}"\n switch-label="{{ radioSwitch.label }}"\n switch-icon="{{ radioSwitch.icon }}"\n switch-radio-off="{{ radioSwitch.radioOff }}"\n switch-label-width="{{ radioSwitch.labelWidth }}"\n switch-handle-width="{{ radioSwitch.handleWidth }}">\n </div>\n <!-- END AUTO_ANSWER -->\n\n <!-- START APPLICATION_ENABLE_RECORDING -->\n <!-- <div class="form-group">\n <label class="control-label">{{\'APPLICATION_ENABLE_RECORDING\' | translate}}</label><br>\n <input\n bs-switch\n ng-model="agent.phoneBarEnableRecording"\n type="checkbox"\n switch-active="{{ radioSwitch.isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ radioSwitch.onColor }}"\n switch-off-color="{{ radioSwitch.offColor }}"\n switch-animate="{{ radioSwitch.animate }}"\n switch-size="{{ radioSwitch.size }}"\n switch-label="{{ radioSwitch.label }}"\n switch-icon="{{ radioSwitch.icon }}"\n switch-radio-off="{{ radioSwitch.radioOff }}"\n switch-label-width="{{ radioSwitch.labelWidth }}"\n switch-handle-width="{{ radioSwitch.handleWidth }}">\n </div> -->\n <!-- END APPLICATION_ENABLE_RECORDING -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END GENERAL TAB -->\n <!-- START CALL FORWARDING TAB -->\n <div class="tab-pane" data-ng-show="Auth.isAdmin()" id="tab_1_2">\n <form name="forms.callForwarding" data-ng-submit="updateItem()" novalidate>\n\n <!-- START UNCONDITIONAL -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_UNCONDITIONAL\' | translate}}</label><br>\n <input\n bs-switch\n ng-model="agent.phoneBarUnconditional"\n type="checkbox"\n switch-active="{{ radioSwitch.isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ radioSwitch.onColor }}"\n switch-off-color="{{ radioSwitch.offColor }}"\n switch-animate="{{ radioSwitch.animate }}"\n switch-size="{{ radioSwitch.size }}"\n switch-label="{{ radioSwitch.label }}"\n switch-icon="{{ radioSwitch.icon }}"\n switch-radio-off="{{ radioSwitch.radioOff }}"\n switch-label-width="{{ radioSwitch.labelWidth }}"\n switch-handle-width="{{ radioSwitch.handleWidth }}">\n </div>\n <!-- END UNCONDITIONAL -->\n\n\n <!-- START UNCONDITIONAL NUMBER -->\n <div class="form-group" data-ng-if="agent.phoneBarUnconditional" data-ng-class="{\'has-error\': (forms.callForwarding.phoneBarUnconditionalNumber.$touched || forms.callForwarding.$submitted) && forms.callForwarding.phoneBarUnconditionalNumber.$invalid}">\n <input type="text" name="phoneBarUnconditionalNumber" placeholder="{{\'APPLICATION_NUMBER\' | translate}}" class="form-control" data-ng-model="agent.phoneBarUnconditionalNumber" required/>\n <span class="help-block">\n <!-- {{ \'DESCRIPTION_VOICE_HOST\' | translate }} -->\n </span>\n <span data-ng-show="(forms.callForwarding.phoneBarUnconditionalNumber.$touched || forms.callForwarding.$submitted) && forms.callForwarding.phoneBarUnconditionalNumber.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END UNCONDITIONAL NUMBER -->\n\n <!-- START NO REPLY -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_NO_REPLY\' | translate}}</label><br>\n <input\n bs-switch\n ng-model="agent.phoneBarNoReply"\n type="checkbox"\n switch-active="{{ radioSwitch.isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ radioSwitch.onColor }}"\n switch-off-color="{{ radioSwitch.offColor }}"\n switch-animate="{{ radioSwitch.animate }}"\n switch-size="{{ radioSwitch.size }}"\n switch-label="{{ radioSwitch.label }}"\n switch-icon="{{ radioSwitch.icon }}"\n switch-radio-off="{{ radioSwitch.radioOff }}"\n switch-label-width="{{ radioSwitch.labelWidth }}"\n switch-handle-width="{{ radioSwitch.handleWidth }}">\n </div>\n <!-- END NO REPLY -->\n\n <!-- START NO REPLY -->\n <div class="form-group" data-ng-if="agent.phoneBarNoReply" data-ng-class="{\'has-error\': (forms.callForwarding.phoneBarNoReplyNumber.$touched || forms.callForwarding.$submitted) && forms.callForwarding.phoneBarNoReplyNumber.$invalid}">\n <input type="text" name="phoneBarNoReplyNumber" placeholder="{{\'APPLICATION_NUMBER\' | translate}}" class="form-control" data-ng-model="agent.phoneBarNoReplyNumber" required/>\n <span class="help-block">\n <!-- {{ \'DESCRIPTION_VOICE_HOST\' | translate }} -->\n </span>\n <span data-ng-show="(forms.callForwarding.phoneBarNoReplyNumber.$touched || forms.callForwarding.$submitted) && forms.callForwarding.phoneBarNoReplyNumber.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END REPLY -->\n\n <!-- START BUSY -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_BUSY\' | translate}}</label><br>\n <input\n bs-switch\n ng-model="agent.phoneBarBusy"\n type="checkbox"\n switch-active="{{ radioSwitch.isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ radioSwitch.onColor }}"\n switch-off-color="{{ radioSwitch.offColor }}"\n switch-animate="{{ radioSwitch.animate }}"\n switch-size="{{ radioSwitch.size }}"\n switch-label="{{ radioSwitch.label }}"\n switch-icon="{{ radioSwitch.icon }}"\n switch-radio-off="{{ radioSwitch.radioOff }}"\n switch-label-width="{{ radioSwitch.labelWidth }}"\n switch-handle-width="{{ radioSwitch.handleWidth }}">\n </div>\n <!-- END BUSY -->\n\n <!-- START BUSY NUMBER -->\n <div class="form-group" data-ng-if="agent.phoneBarBusy" data-ng-class="{\'has-error\': (forms.callForwarding.phoneBarBusyNumber.$touched || forms.callForwarding.$submitted) && forms.callForwarding.phoneBarBusyNumber.$invalid}">\n <input type="text" name="phoneBarBusyNumber" placeholder="{{\'APPLICATION_NUMBER\' | translate}}" class="form-control" data-ng-model="agent.phoneBarBusyNumber" required/>\n <span class="help-block">\n <!-- {{ \'DESCRIPTION_VOICE_HOST\' | translate }} -->\n </span>\n <span data-ng-show="(forms.callForwarding.phoneBarBusyNumber.$touched || forms.callForwarding.$submitted) && forms.callForwarding.phoneBarBusyNumber.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END BUSY NUMBER -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END CALL FORWARDING TAB -->\n <!-- START ADVANCED TAB -->\n <div class="tab-pane" data-ng-show="Auth.isAdmin()" id="tab_1_3">\n <form name="forms.advanced" data-ng-submit="updateItem()" novalidate>\n\n <!-- START ENABLE REMOTE CONTROL -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_REMOTE_CONTROL\' | translate}}</label><br>\n <input\n bs-switch\n ng-model="agent.phoneBarRemoteControl"\n type="checkbox"\n switch-active="{{ radioSwitch.isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ radioSwitch.onColor }}"\n switch-off-color="{{ radioSwitch.offColor }}"\n switch-animate="{{ radioSwitch.animate }}"\n switch-size="{{ radioSwitch.size }}"\n switch-label="{{ radioSwitch.label }}"\n switch-icon="{{ radioSwitch.icon }}"\n switch-radio-off="{{ radioSwitch.radioOff }}"\n switch-label-width="{{ radioSwitch.labelWidth }}"\n switch-handle-width="{{ radioSwitch.handleWidth }}">\n </div>\n <!-- END ENABLE REMOTE CONTROL -->\n\n\n <!-- START REMOTE CONTROL PORT -->\n <div class="form-group" data-ng-if="agent.phoneBarRemoteControl" data-ng-class="{\'has-error\': (forms.advanced.phoneBarRemoteControlPort.$touched || forms.advanced.$submitted) && forms.advanced.phoneBarRemoteControlPort.$invalid}">\n <label class="control-label">{{\'APPLICATION_REMOTE_CONTROL\' | translate}} {{\'APPLICATION_PORT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" min="1" name="phoneBarRemoteControlPort" placeholder="{{\'APPLICATION_REMOTE_CONTROL\' | translate}} {{\'APPLICATION_PORT\' | translate}}" class="form-control" data-ng-model="agent.phoneBarRemoteControlPort" required/>\n <span class="help-block">Default: 9888</span>\n <span data-ng-show="(forms.advanced.phoneBarRemoteControlPort.$touched || forms.advanced.$submitted) && forms.advanced.phoneBarRemoteControlPort.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="form.advanced.phoneBarRemoteControlPort.$error.max || form.advanced.phoneBarRemoteControlPort.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_NUMBER\' | translate}}.\n </span>\n </div>\n <!-- END REMOTE CONTROL PORT -->\n\n <!-- START SIP EXPIRES -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.phoneBarExpires.$touched || forms.advanced.$submitted) && forms.advanced.phoneBarExpires.$invalid}">\n <label class="control-label">SIP {{\'APPLICATION_EXPIRES\' | translate}} [sec]<span class="required" aria-required="true">*</span></label>\n <input type="number" min="1" name="phoneBarExpires" placeholder="SIP {{\'APPLICATION_EXPIRES\' | translate}}" class="form-control" data-ng-model="agent.phoneBarExpires" required/>\n <span class="help-block">Default: 160</span>\n <span data-ng-show="(forms.advanced.phoneBarExpires.$touched || forms.advanced.$submitted) && forms.advanced.phoneBarExpires.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="form.advanced.phoneBarExpires.$error.max || form.advanced.phoneBarExpires.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_NUMBER\' | translate}} (min 1).\n </span>\n </div>\n <!-- END SIP EXPIRES -->\n\n <!-- START SIP PORT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.phoneBarListenPort.$touched || forms.advanced.$submitted) && forms.advanced.phoneBarListenPort.$invalid}">\n <label class="control-label">SIP {{\'APPLICATION_PORT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" min="0" max="65535" name="phoneBarListenPort" placeholder="SIP {{\'APPLICATION_PORT\' | translate}}" class="form-control" data-ng-model="agent.phoneBarListenPort" required/>\n <span class="help-block">Default: 5060</span>\n <span data-ng-show="(forms.advanced.phoneBarListenPort.$touched || forms.advanced.$submitted) && forms.advanced.phoneBarListenPort.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="form.advanced.phoneBarListenPort.$error.max || form.advanced.phoneBarListenPort.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_NUMBER\' | translate}} (0-65535).\n </span>\n </div>\n <!-- END SIP PORT -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END ADVANCED TAB -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/staff/agent/view/view.openchannel.html",'<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_PROFILE\' | translate}} {{ \'APPLICATION_OPEN_CHANNEL\' | translate}}</span>\n </div>\n </div>\n\n <div class="portlet-body">\n <!-- START CHAT TAB -->\n <form name="form" data-ng-submit="patchItem()" novalidate>\n <!-- START CAPACITY -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.capacity.$touched || form.$submitted) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_CAPACITY\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" name="openchannelCapacity" placeholder="{{\'APPLICATION_CAPACITY\' | translate}}" class="form-control" data-ng-model="agent.openchannelCapacity" min="0" required/>\n <span class="help-block">\n {{\'MESSAGE_ZERO_MEANS_UNLIMITED\' | translate}}\n </span>\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CAPACITY -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n <!-- END CHAT TAB -->\n </div>\n </div>\n </div>\n</div>\n</div>\n'),a.put("app/staff/agent/view/view.queues.chat.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12" data-ng-init="initChatQueues()">\n <!-- BEGIN FORM-->\n <form action="#" class="form-horizontal form-row-seperated">\n <div class="form-body">\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-queues-chat">\n </div>\n </div>\n </div>\n </form>\n <!-- END FORM-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/staff/agent/view/view.queues.fax.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12" data-ng-init="initFaxQueues()">\n <!-- BEGIN FORM-->\n <form action="#" class="form-horizontal form-row-seperated">\n <div class="form-body">\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-queues-fax">\n </div>\n </div>\n </div>\n </form>\n <!-- END FORM-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/staff/agent/view/view.queues.html","<!-- BEGIN PAGE CONTENT-->\n<div class=\"row\" data-ng-init=\"initView()\">\n <div class=\"col-md-12\">\n <div>\n <nav class=\"navbar navbar-default\" role=\"navigation\">\n <div class=\"collapse navbar-collapse\">\n <ul class=\"nav navbar-nav\">\n <li data-ng-class=\"{'active': $state.is('main.staff.agents.view.queues.voice')}\">\n <a href=\"/staff/agents/view/{{agent.id}}/queues/voice\">\n <i class=\"icon-earphones-alt\"></i> {{'APPLICATION_VOICE' | translate}}\n </a>\n </li>\n <li data-ng-class=\"{'active': $state.is('main.staff.agents.view.queues.chat'),'disabled-link':!license.chat}\" data-ng-show=\"Auth.isAdmin() || userModules[8]\">\n <a href=\"{{license.chat ? '/staff/agents/view/'+agent.id+'/queues/chat' : 'javascript:;'}}\" class=\"disable-target\">\n <i class=\"icon-bubble\"></i> {{'APPLICATION_CHAT' | translate}}\n </a>\n </li>\n <li data-ng-class=\"{'active': $state.is('main.staff.agents.view.queues.mail'),'disabled-link':!license.mail}\" data-ng-show=\"Auth.isAdmin() || userModules[9]\">\n <a href=\"{{license.mail ? '/staff/agents/view/'+agent.id+'/queues/mail' : 'javascript:;'}}\" class=\"disable-target\">\n <i class=\"icon-envelope\"></i>{{'APPLICATION_MAIL' | translate}}\n </a>\n </li>\n <li data-ng-class=\"{'active': $state.is('main.staff.agents.view.queues.fax'),'disabled-link':!license.fax}\" data-ng-show=\"Auth.isAdmin() || userModules[10]\">\n <a href=\"{{license.fax ? '/staff/agents/view/'+agent.id+'/queues/fax' : 'javascript:;'}}\" class=\"disable-target\">\n <i class=\"fa fa-fax\"></i> {{'APPLICATION_FAX' | translate}}\n </a>\n </li>\n <li data-ng-class=\"{'active': $state.is('main.staff.agents.view.queues.sms'),'disabled-link':!license.messaging}\" data-ng-show=\"Auth.isAdmin() || userModules[11]\">\n <a href=\"{{license.messaging ? '/staff/agents/view/'+agent.id+'/queues/sms' : 'javascript:;'}}\" class=\"disable-target\">\n <i class=\"glyphicon glyphicon-comment\"></i> {{'APPLICATION_SMS' | translate}}\n </a>\n </li>\n <li data-ng-class=\"{'active': $state.is('main.staff.agents.view.queues.openchannel'),'disabled-link':!license.openchannel}\" data-ng-show=\"Auth.isAdmin() || userModules[20]\">\n <a href=\"{{license.openchannel ? '/staff/agents/view/'+agent.id+'/queues/openchannel' : 'javascript:;'}}\" class=\"disable-target\">\n <i class=\"icon-globe\"></i> {{'APPLICATION_OPEN_CHANNEL' | translate}}\n </a>\n </li>\n </ul>\n </div>\n </nav>\n </div>\n <div ui-view></div>\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n"),a.put("app/staff/agent/view/view.queues.mail.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12" data-ng-init="initMailQueues()">\n <!-- BEGIN FORM-->\n <form action="#" class="form-horizontal form-row-seperated">\n <div class="form-body">\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-queues-mail">\n </div>\n </div>\n </div>\n </form>\n <!-- END FORM-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/staff/agent/view/view.queues.openchannel.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12" data-ng-init="initOpenchannelQueues()">\n <!-- BEGIN FORM-->\n <form action="#" class="form-horizontal form-row-seperated">\n <div class="form-body">\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-queues-openchannel">\n </div>\n </div>\n </div>\n </form>\n <!-- END FORM-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'), -a.put("app/staff/agent/view/view.queues.sms.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12" data-ng-init="initSmsQueues()">\n <!-- BEGIN FORM-->\n <form action="#" class="form-horizontal form-row-seperated">\n <div class="form-body">\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-queues-sms">\n </div>\n </div>\n </div>\n </form>\n <!-- END FORM-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/staff/agent/view/view.queues.voice.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12" data-ng-init="initVoiceQueues()">\n <!-- BEGIN FORM-->\n <form action="#" class="form-horizontal form-row-seperated">\n <div class="form-body">\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-queues-voice">\n </div>\n </div>\n </div>\n </form>\n <!-- END FORM-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/staff/agent/view/view.sms.html",'<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_PROFILE\' | translate}} {{ \'APPLICATION_SMS\' | translate}}</span>\n </div>\n </div>\n\n <div class="portlet-body">\n <!-- START CHAT TAB -->\n <form name="form" data-ng-submit="patchItem()" novalidate>\n <!-- START CAPACITY -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.capacity.$touched || form.$submitted) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_CAPACITY\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" name="smsCapacity" placeholder="{{\'APPLICATION_CAPACITY\' | translate}}" class="form-control" data-ng-model="agent.smsCapacity" min="0" required/>\n <span class="help-block">\n {{\'MESSAGE_ZERO_MEANS_UNLIMITED\' | translate}}\n </span>\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CAPACITY -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n <!-- END CHAT TAB -->\n </div>\n </div>\n </div>\n</div>\n</div>\n'),a.put("app/staff/agent/view/view.voice.html",'<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_PROFILE\' | translate}} {{ \'APPLICATION_VOICE\' | translate}}</span>\n </div>\n </div>\n <div class="portlet-body">\n <form name="forms.voice" data-ng-submit="updateItem()" novalidate>\n\n <!-- START INTERNAL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.voice.internal.$touched || forms.voice.$submitted) && forms.voice.internal.$invalid}">\n <label class="control-label">{{\'APPLICATION_INTERNAL_NUMBER\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="internal" placeholder="{{\'APPLICATION_INTERNAL_NUMBER\' | translate}}" class="form-control" data-ng-model="agent.internal" required disabled/>\n <span data-ng-show="(forms.voice.internal.$touched || forms.voice.$submitted) && forms.voice.internal.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERNAL -->\n\n <!-- START TRANSPORT -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_TRANSPORT\' | translate}}</label>\n <ui-select multiple name="transport" ng-model="agent.transport" theme="bootstrap">\n <ui-select-match placeholder="Select transport...">{{$item}}</ui-select-match>\n <ui-select-choices repeat="transport in [\'udp\', \'tcp\', \'ws\', \'wss\'] | filter: $select.search">\n {{transport}}\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_VOICE_TRANSPORT\' | translate }}\n </span>\n </div>\n <!-- END TRANSPORT -->\n\n <!-- START HOST -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.voice.host.$touched || forms.voice.$submitted) && forms.voice.host.$invalid}">\n <label class="control-label">{{\'APPLICATION_HOST\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="host" placeholder="{{\'APPLICATION_HOST\' | translate}}" class="form-control" data-ng-model="agent.host" required/>\n <span class="help-block">\n {{ \'DESCRIPTION_VOICE_HOST\' | translate }}\n </span>\n <span data-ng-show="(forms.voice.host.$touched || forms.voice.$submitted) && forms.voice.host.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END HOST -->\n\n <!-- START NAT -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_NAT\' | translate}}</label>\n <ui-select multiple data-ng-model="agent.nat" name="nat" theme="bootstrap">\n <ui-select-match placeholder="{{ \'APPLICATION_SEARCH_FILTER\' | translate }}">{{$item}}</ui-select-match>\n <ui-select-choices repeat="nat in [\'yes\', \'no\', \'never\', \'route\', \'force_rport\', \'comedia\'] | filter: $select.search">\n {{nat}}\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_VOICE_NAT\' | translate }}\n </span>\n </div>\n <!-- END NAT -->\n\n <!-- START TYPE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.voice.type.$touched || forms.voice.$submitted) && forms.voice.type.$invalid}">\n <label class="control-label">{{\'APPLICATION_TYPE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="agent.type" name="type" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_SEARCH_FILTER\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="type in [\'friend\', \'user\', \'peer\'] | filter: $select.search">\n <div ng-bind-html="type | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_VOICE_TYPE\' | translate }}\n </span>\n <span data-ng-show="(forms.voice.type.$touched || forms.voice.$submitted) && forms.voice.type.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TYPE -->\n\n <!-- START CODEC -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_ALLOWED_CODECS\' | translate}}</label>\n <ui-select multiple ng-model="agent.allow" name="allow" theme="bootstrap" ng-disabled="disabled">\n <ui-select-match placeholder="Select codec...">{{$item}}</ui-select-match>\n <ui-select-choices repeat="allow in [\'g729\', \'ilbc\', \'gsm\', \'ulaw\', \'alaw\'] | filter: $select.search">\n {{allow}}\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_VOICE_CODEC\' | translate }}\n </span>\n </div>\n <!-- END CODEC -->\n\n <!-- START STATUS -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_CHANSPY\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="agent.chanspy"\n type="checkbox"\n name="auth"\n switch-active="{{ recordSwitch.isActive }}"\n switch-on-text="{{ recordSwitch.onText }}"\n switch-off-text="{{ recordSwitch.offText }}"\n switch-on-color="{{ recordSwitch.onColor }}"\n switch-off-color="{{ recordSwitch.offColor }}"\n switch-animate="{{ recordSwitch.animate }}"\n switch-size="{{ recordSwitch.size }}"\n switch-label="{{ recordSwitch.label }}"\n switch-icon="{{ recordSwitch.icon }}"\n switch-radio-off="{{ recordSwitch.radioOff }}"\n switch-label-width="{{ recordSwitch.labelWidth }}"\n switch-handle-width="{{ recordSwitch.handleWidth }}">\n </div>\n <!-- END STATUS -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/staff/agent/wizard/wizard-bulk.html",'<div class="col-md-12">\n <!-- BEGIN PAGE HEADER-->\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-people"></i>\n <a href="/agents/list">{{ \'APPLICATION_AGENTS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-options"></i>\n <a href="/agents/wizard">{{ \'APPLICATION_WIZARD\' | translate }}</a>\n </li>\n </ul>\n </div>\n <!-- END PAGE HEADER-->\n\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered" data-ng-init="getFirstFreeInternal(); item.amount = 2; item.startIndex = 0;">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-user font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_AGENT\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="createItems()">\n <wz-step title="{{\'APPLICATION_ACCOUNT\' | translate}}" canexit="exitValidation(forms.info.$valid)">\n <form name="forms.info" novalidate>\n\n <!-- START AMOUNT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.amount.$touched || forms.info.$submitted) && forms.info.amount.$invalid}">\n <label class="control-label">{{\'APPLICATION_AMOUNT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" name="amount" min="2" max="{{maxAmount}}" placeholder="{{\'APPLICATION_AMOUNT\' | translate}}" class="form-control" data-ng-model="item.amount" required>\n <span data-ng-show="(forms.info.amount.$touched || forms.info.$submitted) && forms.info.amount.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span class="help-block help-block-info">\n {{\'MESSAGE_STARTING_FROM_INTERNAL\' | translate}} <b>{{item.minInternal}}</b> {{\'MESSAGE_MAX_NUM_OF_BULK_AGENTS_IS\' | translate}} <b>{{maxAmount}}</b>\n </span>\n </div>\n <!-- END AMOUNT -->\n\n <!-- START START INDEX -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.startIndex.$touched || forms.info.$submitted) && forms.info.startIndex.$invalid}">\n <label class="control-label">{{\'APPLICATION_START_INDEX\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" name="startIndex" min="0" placeholder="{{\'APPLICATION_START_INDEX\' | translate}}" class="form-control" data-ng-model="item.startIndex" required>\n <span data-ng-show="(forms.info.startIndex.$touched || forms.info.$submitted) && forms.info.startIndex.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END START INDEX -->\n\n <!-- START MIN INTERNAL-->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.internal.$touched || forms.info.$submitted) && forms.info.minInternal.$invalid}">\n <label class="control-label">{{\'APPLICATION_MIN_INTERNAL\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" name="minInternal" min="0" placeholder="{{\'APPLICATION_MIN_INTERNAL\' | translate}}" class="form-control" data-ng-change="getAmount()" data-ng-model="item.minInternal" required>\n <span data-ng-show="(forms.info.minInternal.$touched || forms.info.$submitted) && forms.info.minInternal.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END MIN INTERNAL-->\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.fullname.$touched || forms.info.$submitted) && forms.info.fullname.$invalid}">\n <label class="control-label">{{\'APPLICATION_FULLNAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="fullname" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.fullname" required/>\n <span data-ng-show="(forms.info.fullname.$touched || forms.info.$submitted) && forms.info.fullname.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START USERNAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_USERNAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_USERNAME\' | translate}}" class="form-control" data-ng-model="item.name" data-ng-pattern="settings.patternName" required>\n <span data-ng-show="(forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_PATTERN_NAME\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n\n <!-- START EMAIL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.email.$touched || forms.info.$submitted) && forms.info.email.$invalid}">\n <label class="control-label">{{\'APPLICATION_EMAIL\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="email" name="email" placeholder="{{\'APPLICATION_EMAIL\' | translate}}" class="form-control" data-ng-model="item.email" required>\n <span data-ng-show="(forms.info.email.$touched || forms.info.$submitted) && forms.info.email.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.info.email.$touched || forms.info.$submitted) && forms.info.email.$error.email" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n </span>\n </div>\n <!-- END EMAIL -->\n\n <!-- START PASSWORD -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.password.$touched || forms.info.$submitted) && forms.info.password.$invalid}">\n <label class="control-label">{{\'APPLICATION_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="password" name="password" placeholder="{{\'APPLICATION_PASSWORD\' | translate}}" class="form-control" data-ng-model="item.password" data-ng-pattern="setting.securePassword ? settings.patternPassword : settings.patternPasswordLight" required/>\n <span class="help-block">\n {{setting.securePassword ? \'MESSAGE_PASSWORD_FORMAT\' : \'MESSAGE_PASSWORD_LIGTH_FORMAT\' | translate}}\n </span>\n <span data-ng-show="(forms.info.password.$touched || forms.info.$submitted) && forms.info.password.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.info.password.$touched || forms.info.$submitted) && forms.info.password.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n </span>\n </div>\n <!-- END PASSWORD -->\n\n <!-- START RE PASSWORD -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.rpassword.$touched || forms.info.$submitted) && forms.info.rpassword.$invalid}">\n <label class="control-label">{{\'APPLICATION_CONFIRM_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="password" name="rpassword" placeholder="{{\'APPLICATION_CONFIRM_PASSWORD\' | translate}}" class="form-control" data-ng-model="item.rpassword" nx-equal="item.password" required/>\n <span data-ng-show="(forms.info.rpassword.$touched || forms.info.$submitted) && forms.info.rpassword.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.info.rpassword.$touched || forms.info.$submitted) && forms.info.rpassword.$error.nxEqual" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_PASSWORD\' | translate}}.\n </span>\n </div>\n <!-- END RE PASSWORD -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" ng-click="next()"/>\n </form>\n </wz-step>\n\n <wz-step title="{{\'APPLICATION_VOICE\' | translate}}" canexit="exitValidation(forms.voice.$valid)">\n <form name="forms.voice" novalidate>\n\n <!-- START TRANSPORT -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_TRANSPORT\' | translate}}</label>\n <ui-select multiple name="transport" ng-model="item.transport" theme="bootstrap" ng-disabled="disabled">\n <ui-select-match placeholder="Select transport...">{{$item}}</ui-select-match>\n <ui-select-choices repeat="transport in [\'udp\', \'tcp\', \'ws\', \'wss\'] | filter: $select.search">\n {{transport}}\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_VOICE_TRANSPORT\' | translate }}\n </span>\n </div>\n <!-- END TRANSPORT -->\n\n <!-- START CODEC -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_ALLOWED_CODECS\' | translate}}</label>\n <ui-select multiple ng-model="item.allow" name="allow" theme="bootstrap" ng-disabled="disabled">\n <ui-select-match placeholder="Select codec...">{{$item}}</ui-select-match>\n <ui-select-choices repeat="allow in [\'g729\', \'ilbc\', \'gsm\', \'ulaw\', \'alaw\'] | filter: $select.search">\n {{allow}}\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_VOICE_CODEC\' | translate }}\n </span>\n </div>\n <!-- END CODEC -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" ng-click="next()"/>\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n </form>\n </wz-step>\n\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n <input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n </wz-step>\n </wizard>\n </div>\n </div>\n <!-- END PORTLET-->\n</div>\n'),a.put("app/staff/agent/wizard/wizard.html",'<div class="col-md-12">\n <!-- BEGIN PAGE HEADER-->\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-puzzle"></i>\n <a href="#">{{ \'APPLICATION_STAFF\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-people"></i>\n <a href="/staff/agents/list">{{ \'APPLICATION_AGENTS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-options"></i>\n <a href="/agents/wizard">{{ \'APPLICATION_WIZARD\' | translate }}</a>\n </li>\n </ul>\n </div>\n <!-- END PAGE HEADER-->\n\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered" data-ng-init="getFirstFreeInternal();">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-user font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_AGENT\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="createItem()">\n <wz-step title="{{\'APPLICATION_ACCOUNT\' | translate}}" canexit="exitValidation(forms.info.$valid)">\n <form name="forms.info" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.fullname.$touched || forms.info.$submitted) && forms.info.fullname.$invalid}">\n <label class="control-label">{{\'APPLICATION_FULLNAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="fullname" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.fullname" required/>\n <span data-ng-show="(forms.info.fullname.$touched || forms.info.$submitted) && forms.info.fullname.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START USERNAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_USERNAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_USERNAME\' | translate}}" class="form-control" data-ng-model="item.name" data-ng-pattern="settings.patternName" required>\n <span data-ng-show="(forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_PATTERN_NAME\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n\n <!-- START EMAIL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.email.$touched || forms.info.$submitted) && forms.info.email.$invalid}">\n <label class="control-label">{{\'APPLICATION_EMAIL\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="email" name="email" placeholder="{{\'APPLICATION_EMAIL\' | translate}}" class="form-control" data-ng-model="item.email" required>\n <span data-ng-show="(forms.info.email.$touched || forms.info.$submitted) && forms.info.email.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.info.email.$touched || forms.info.$submitted) && forms.info.email.$error.email" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n </span>\n </div>\n <!-- END EMAIL -->\n\n <!-- START PASSWORD -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.password.$touched || forms.info.$submitted) && forms.info.password.$invalid}">\n <label class="control-label">{{\'APPLICATION_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="password" name="password" placeholder="{{\'APPLICATION_PASSWORD\' | translate}}" class="form-control" data-ng-model="item.password" data-ng-pattern="setting.securePassword ? settings.patternPassword : settings.patternPasswordLight" required/>\n <span class="help-block">\n {{setting.securePassword ? \'MESSAGE_PASSWORD_FORMAT\' : \'MESSAGE_PASSWORD_LIGTH_FORMAT\' | translate}}\n </span>\n <span data-ng-show="(forms.info.password.$touched || forms.info.$submitted) && forms.info.password.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n </span>\n <span data-ng-show="(forms.info.password.$touched || forms.info.$submitted) && forms.info.password.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PASSWORD -->\n\n <!-- START RE PASSWORD -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.rpassword.$touched || forms.info.$submitted) && forms.info.rpassword.$invalid}">\n <label class="control-label">{{\'APPLICATION_CONFIRM_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="password" name="rpassword" placeholder="{{\'APPLICATION_CONFIRM_PASSWORD\' | translate}}" class="form-control" data-ng-model="item.rpassword" nx-equal="item.password" required/>\n <span data-ng-show="(forms.info.rpassword.$touched || forms.info.$submitted) && forms.info.rpassword.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.info.rpassword.$touched || forms.info.$submitted) && forms.info.rpassword.$error.nxEqual" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_PASSWORD\' | translate}}.\n </span>\n </div>\n <!-- END RE PASSWORD -->\n\n <!-- START INTERNAL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.internal.$touched || forms.info.$submitted) && forms.info.internal.$invalid}">\n <label class="control-label">{{\'APPLICATION_INTERNAL_NUMBER\' | translate}}<span class="required" aria-required="true">*</span></label>\n <div class="input-group">\n <input type="number" min="1" name="internal" placeholder="{{\'APPLICATION_INTERNAL_NUMBER\' | translate}}" class="form-control" data-ng-model="item.internal" data-ng-disabled="!item.internalEnabled" data-ng-required="item.internalEnabled"/>\n <span class="input-group-addon">\n <input type="checkbox" data-ng-model="item.internalEnabled">\n </span>\n </div>\n <span data-ng-show="(forms.info.internal.$touched || forms.info.$submitted) && forms.info.internal.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERNAL -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" ng-click="next()"/>\n </form>\n </wz-step>\n\n <wz-step title="{{\'APPLICATION_VOICE\' | translate}}" canexit="exitValidation(forms.voice.$valid)">\n <form name="forms.voice" novalidate>\n\n <!-- START TRANSPORT -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_TRANSPORT\' | translate}}</label>\n <ui-select multiple name="transport" ng-model="item.transport" theme="bootstrap" ng-disabled="disabled">\n <ui-select-match placeholder="Select transport...">{{$item}}</ui-select-match>\n <ui-select-choices repeat="transport in [\'udp\', \'tcp\', \'ws\', \'wss\'] | filter: $select.search">\n {{transport}}\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_VOICE_TRANSPORT\' | translate }}\n </span>\n </div>\n <!-- END TRANSPORT -->\n\n <!-- START CODEC -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_ALLOWED_CODECS\' | translate}}</label>\n <ui-select multiple ng-model="item.allow" name="allow" theme="bootstrap" ng-disabled="disabled">\n <ui-select-match placeholder="Select codec...">{{$item}}</ui-select-match>\n <ui-select-choices repeat="allow in [\'g729\', \'ilbc\', \'gsm\', \'ulaw\', \'alaw\'] | filter: $select.search">\n {{allow}}\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_VOICE_CODEC\' | translate }}\n </span>\n </div>\n <!-- END CODEC -->\n\n <!-- <div class="form-body" data-ng-init="initVoiceQueues()">\n <label class="control-label">{{ \'APPLICATION_QUEUES\' | translate}}</label>\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-queues-voice">\n </div>\n </div>\n </div> -->\n\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" ng-click="next()"/>\n </form>\n </wz-step>\n\n <!-- <wz-step title="{{\'APPLICATION_CHAT\' | translate}}">\n <form name="forms.chat">\n <div class="form-body" data-ng-init="initChatQueues()">\n <label class="control-label">{{ \'APPLICATION_QUEUES\' | translate}}</label>\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-queues-chat">\n </div>\n </div>\n </div>\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" ng-click="next()"/>\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n </form>\n </wz-step> -->\n\n <!-- <wz-step title="{{\'APPLICATION_MAIL\' | translate}}">\n <form name="forms.mail">\n <div class="form-body" data-ng-init="initMailQueues()">\n <label class="control-label">{{ \'APPLICATION_QUEUES\' | translate}}</label>\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-queues-mail">\n </div>\n </div>\n </div>\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" ng-click="next()"/>\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n </form>\n </wz-step> -->\n\n\n <!-- <wz-step title="{{\'APPLICATION_SMS\' | translate}}">\n <form name="forms.sms">\n <div class="form-body" data-ng-init="initSmsQueues()">\n <label class="control-label">{{ \'APPLICATION_QUEUES\' | translate}}</label>\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-queues-sms">\n </div>\n </div>\n </div>\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" ng-click="next()"/>\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n </form>\n </wz-step> -->\n\n <!-- <wz-step title="{{\'APPLICATION_FAX\' | translate}}">\n <form name="forms.fax">\n <div class="form-body" data-ng-init="initFaxQueues()">\n <label class="control-label">{{ \'APPLICATION_QUEUES\' | translate}}</label>\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-queues-fax">\n </div>\n </div>\n </div>\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" ng-click="next()"/>\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n </form>\n </wz-step> -->\n\n <!-- <wz-step title="{{\'APPLICATION_OPEN_CHANNEL\' | translate}}">\n <form name="forms.openchannel">\n <div class="form-body" data-ng-init="initOpenchannelQueues()">\n <label class="control-label">{{ \'APPLICATION_QUEUES\' | translate}}</label>\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-queues-openchannel">\n </div>\n </div>\n </div>\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" ng-click="next()"/>\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n </form>\n </wz-step> -->\n\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n <input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n </wz-step>\n </wizard>\n </div>\n </div>\n <!-- END PORTLET-->\n</div>\n'), -a.put("app/staff/team/list/create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_TEAM\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.name.$touched || form.$submitted) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="ok()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/staff/team/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-puzzle"></i>\n <a href="#">{{ \'APPLICATION_STAFF\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-shield"></i>\n <a href="/staff/teams/list">{{ \'APPLICATION_TEAMS\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-shield font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_TEAMS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <a class="btn green-jungle" href="#" data-ng-click="createItem()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_TEAM\' | translate }}\n </a>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/staff/team/view/view.agents.html",'<div class="row" data-ng-init="initAgents()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_AGENTS\' | translate}}</span>\n </div>\n </div>\n <div class="portlet-body">\n <!-- GENERAL TAB -->\n <!-- BEGIN PORTLET-->\n <!-- BEGIN FORM-->\n <form action="index.html" class="form-horizontal form-row-seperated">\n <div class="form-body">\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-team">\n </div>\n </div>\n </div>\n </form>\n <!-- END FORM-->\n <!-- END PORTLET-->\n <!-- END GENERAL TAB -->\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/staff/team/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-puzzle"></i>\n <a href="#">{{ \'APPLICATION_STAFF\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-shield"></i>\n <a href="/staff/teams/list">{{ \'APPLICATION_TEAMS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <a href="#">{{team.name}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img ng-src="assets/images/media/team.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{team.name}}\n </div>\n\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.staff.teams.view.settings\')}">\n <a data-ng-href="/staff/teams/view/{{team.id}}/settings">\n <i class="icon-settings"></i>\n {{ \'APPLICATION_SETTINGS\' | translate}} </a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.staff.teams.view.agents\')}">\n <a data-ng-href="/staff/teams/view/{{team.id}}/agents">\n <i class="icon-people"></i>\n {{ \'APPLICATION_AGENTS\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content"></div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/staff/team/view/view.settings.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_PROFILE\' | translate}} {{ \'APPLICATION_ACCOUNT\' | translate}}</span>\n </div>\n </div>\n\n <div class="portlet-body">\n <!-- PERSONAL INFO TAB -->\n <div>\n\n <form name="forms.info" data-ng-submit="updateItem()" novalidate>\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="team.name" required/>\n <span data-ng-show="(forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="team.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END PERSONAL INFO TAB -->\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/staff/telephone/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-puzzle"></i>\n <a href="#">{{ \'APPLICATION_STAFF\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-phone"></i>\n <a href="/staff/telephones/list">{{ \'APPLICATION_TELEPHONES\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-phone font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_TELEPHONES\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <a class="btn green-jungle" href="/staff/telephones/wizard" data-toggle="dropdown">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_TELEPHONE\' | translate }}\n </a>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/staff/telephone/view/view.account.html",'<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_ACCOUNT\' | translate}}</span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_ACCOUNT\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-ng-show="Auth.isAdmin() || item.id === getCurrentTelephone().id" data-target="#tab_1_2" data-toggle="tab">{{ \'APPLICATION_CHANGE_PASSWORD\' | translate}}</a>\n </li>\n </ul>\n </div>\n\n <div class="portlet-body">\n <div class="tab-content">\n <!-- PERSONAL INFO TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.info" data-ng-submit="forms.info.$valid && updateItem()" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.fullname.$touched || forms.info.$submitted) && forms.info.fullname.$invalid}">\n <label class="control-label">{{\'APPLICATION_FULLNAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="fullname" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.fullname" required/>\n <span data-ng-show="(forms.info.fullname.$touched || forms.info.$submitted) && forms.info.fullname.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START USERNAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_USERNAME\' | translate}}</label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_USERNAME\' | translate}}" class="form-control" data-ng-model="item.name" disabled/>\n </div>\n <!-- END USERNAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END PERSONAL INFO TAB -->\n\n <!-- CHANGE PASSWORD TAB -->\n <div class="tab-pane" id="tab_1_2" data-ng-show="Auth.isAdmin() || item.id === getCurrentTelephone().id">\n <form name="forms.changePwd" data-ng-submit="forms.changePwd.$valid && updatePassword()" novalidate>\n <!-- START CURRENT PWD -->\n <!-- <div class="form-group" data-ng-if="!Auth.isAdmin()" data-ng-class="{\'has-error\': (forms.changePwd.current_pwd.$touched || forms.changePwd.$submitted) && forms.changePwd.current_pwd.$invalid}">\n <label class="control-label">{{\'APPLICATION_CURRENT_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="password" name="current_pwd" placeholder="{{\'APPLICATION_CURRENT_PASSWORD\' | translate}}" class="form-control" data-ng-model="item.currentPwd" required/>\n <span data-ng-show="(forms.changePwd.current_pwd.$touched || forms.changePwd.$submitted) && forms.changePwd.current_pwd.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div> -->\n <!-- END CURRENT PWD -->\n <!-- START NEW PWD -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.changePwd.new_pwd.$touched || forms.changePwd.$submitted) && forms.changePwd.new_pwd.$invalid}">\n <label class="control-label">{{\'APPLICATION_NEW_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="password" name="new_pwd" placeholder="{{\'APPLICATION_NEW_PASSWORD\' | translate}}" class="form-control" data-ng-model="item.password" data-ng-pattern="settings.patternPassword" required/>\n <span class="help-block">\n {{setting.securePassword ? \'MESSAGE_PASSWORD_FORMAT\' : \'MESSAGE_PASSWORD_LIGTH_FORMAT\' | translate}}\n </span>\n <span data-ng-show="(forms.changePwd.new_pwd.$touched || forms.changePwd.$submitted) && forms.changePwd.new_pwd.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NEW PWD -->\n <!-- START RE-NEW PWD -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.changePwd.re_new_pwd.$touched || forms.changePwd.$submitted) && forms.changePwd.re_new_pwd.$invalid}">\n <label class="control-label">{{\'APPLICATION_RE_TYPE_NEW_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="password" name="re_new_pwd" placeholder="{{\'APPLICATION_RE_TYPE_NEW_PASSWORD\' | translate}}" class="form-control" data-ng-model="item.reNewPwd" nx-equal="item.password" required/>\n <span data-ng-show="(forms.changePwd.new_pwd.$touched || forms.changePwd.$submitted) && forms.changePwd.new_pwd.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END RE-NEW PWD -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END CHANGE PASSWORD TAB -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/staff/telephone/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-puzzle"></i>\n <a href="#">{{ \'APPLICATION_STAFF\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-phone"></i>\n <a href="/staff/telephones/list">{{ \'APPLICATION_TELEPHONES\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <a href="#">{{item.fullname}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR TELEPHONEPIC -->\n <div class="profile-userpic">\n <img data-ng-src="assets/images/media/telephone.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR TELEPHONEPIC -->\n <!-- SIDEBAR TELEPHONE TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{item.fullname}}\n </div>\n <div class="profile-usertitle-job">\n {{item.role}}\n </div>\n </div>\n <!-- END SIDEBAR TELEPHONE TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.staff.telephones.view.account\')}">\n <a data-ng-href="/staff/telephones/view/{{item.id}}/account">\n <i class="icon-phone"></i>\n {{ \'APPLICATION_ACCOUNT\' | translate}} </a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.staff.telephones.view.voice\')}" data-ng-show="Auth.isAdmin()">\n <a data-ng-href="/staff/telephones/view/{{item.id}}/voice">\n <i class="icon-earphones-alt"></i>\n {{ \'APPLICATION_VOICE\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/staff/telephone/view/view.voice.html",'<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_ACCOUNT\' | translate}} {{ \'APPLICATION_VOICE\' | translate}}</span>\n </div>\n </div>\n <div class="portlet-body">\n <form name="forms.info" data-ng-submit="updateItem()" novalidate>\n\n <!-- START INTERNAL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.internal.$touched || forms.info.$submitted) && forms.info.internal.$invalid}">\n <label class="control-label">{{\'APPLICATION_INTERNAL_NUMBER\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" min="1" name="internal" placeholder="{{\'APPLICATION_INTERNAL_NUMBER\' | translate}}" class="form-control" data-ng-model="item.internal" required readonly/>\n <span data-ng-show="(forms.info.internal.$touched || forms.info.$submitted) && forms.info.internal.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.info.internal.$touched || forms.info.$submitted) && forms.info.internal.$error.ngRemoteValidate" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_EXIST_INTERNAL\' | translate}}.\n </span>\n </div>\n <!-- END INTERNAL -->\n\n <!-- START TRANSPORT -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_TRANSPORT\' | translate}}</label>\n <ui-select multiple name="transport" ng-model="item.transport" theme="bootstrap" ng-disabled="disabled">\n <ui-select-match placeholder="Select transport...">{{$item}}</ui-select-match>\n <ui-select-choices repeat="transport in [\'udp\', \'tcp\', \'ws\', \'wss\'] | filter: $select.search">\n {{transport}}\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_VOICE_TRANSPORT\' | translate }}\n </span>\n </div>\n <!-- END TRANSPORT -->\n\n <!-- START CODEC -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_ALLOWED_CODECS\' | translate}}</label>\n <ui-select multiple ng-model="item.allow" name="allow" theme="bootstrap" ng-disabled="disabled">\n <ui-select-match placeholder="Select codec...">{{$item}}</ui-select-match>\n'+" <ui-select-choices repeat=\"allow in ['g729', 'ilbc', 'gsm', 'ulaw', 'alaw'] | filter: $select.search\">\n {{allow}}\n </ui-select-choices>\n </ui-select>\n <span class=\"help-block\">\n {{ 'DESCRIPTION_VOICE_CODEC' | translate }}\n </span>\n </div>\n <!-- END CODEC -->\n\n <input class=\"btn green-haze\" type=\"submit\" value=\"{{'APPLICATION_UPDATE' | translate}}\"/>\n </form>\n </div>\n </div>\n </div>\n</div>\n"),a.put("app/staff/telephone/wizard/wizard.html",'<div class="col-md-12">\n <!-- BEGIN PAGE HEADER-->\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-puzzle"></i>\n <a href="#">{{ \'APPLICATION_STAFF\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-phone"></i>\n <a href="/staff/telephones/list">{{ \'APPLICATION_TELEPHONES\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-options"></i>\n <a href="/staff/telephones/wizard">{{ \'APPLICATION_WIZARD\' | translate }}</a>\n </li>\n </ul>\n </div>\n <!-- END PAGE HEADER-->\n\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered" data-ng-init="getFirstFreeInternal();">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-phone font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_TELEPHONE\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="createItem()">\n <wz-step title="{{\'APPLICATION_ACCOUNT\' | translate}}" canexit="exitValidation(forms.info.$valid)">\n <form name="forms.info" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.fullname.$touched || forms.info.$submitted) && forms.info.fullname.$invalid}">\n <label class="control-label">{{\'APPLICATION_FULLNAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="fullname" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.fullname" required/>\n <span data-ng-show="(forms.info.fullname.$touched || forms.info.$submitted) && forms.info.fullname.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START USERNAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_USERNAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_USERNAME\' | translate}}" class="form-control" data-ng-model="item.name" ata-ng-pattern="settings.patternName" required />\n <span data-ng-show="(forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$error.ngRemoteValidate" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_EXIST_USERNAME\' | translate}}.\n </span>\n <span data-ng-show="(forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_PATTERN_NAME\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n\n <!-- START PASSWORD -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.password.$touched || forms.info.$submitted) && forms.info.password.$invalid}">\n <label class="control-label">{{\'APPLICATION_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="password" name="password" placeholder="{{\'APPLICATION_PASSWORD\' | translate}}" class="form-control" data-ng-model="item.password" data-ng-pattern="setting.securePassword ? settings.patternPassword : settings.patternPasswordLight" required/>\n <span class="help-block">\n {{setting.securePassword ? \'MESSAGE_PASSWORD_FORMAT\' : \'MESSAGE_PASSWORD_LIGTH_FORMAT\' | translate}}\n </span>\n <span data-ng-show="(forms.info.password.$touched || forms.info.$submitted) && forms.info.password.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n </span>\n <span data-ng-show="(forms.info.password.$touched || forms.info.$submitted) && forms.info.password.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PASSWORD -->\n\n <!-- START RE PASSWORD -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.rpassword.$touched || forms.info.$submitted) && forms.info.rpassword.$invalid}">\n <label class="control-label">{{\'APPLICATION_CONFIRM_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="password" name="rpassword" placeholder="{{\'APPLICATION_CONFIRM_PASSWORD\' | translate}}" class="form-control" data-ng-model="item.rpassword" nx-equal="item.password" required/>\n <span data-ng-show="(forms.info.rpassword.$touched || forms.info.$submitted) && forms.info.rpassword.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.info.rpassword.$touched || forms.info.$submitted) && forms.info.rpassword.$error.nxEqual" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_PASSWORD\' | translate}}.\n </span>\n </div>\n <!-- END RE PASSWORD -->\n\n <!-- START INTERNAL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.internal.$touched || forms.info.$submitted) && forms.info.internal.$invalid}">\n <label class="control-label">{{\'APPLICATION_INTERNAL_NUMBER\' | translate}}<span class="required" aria-required="true">*</span></label>\n <div class="input-group">\n <input type="number" min="1" name="internal" placeholder="{{\'APPLICATION_INTERNAL_NUMBER\' | translate}}" class="form-control" data-ng-model="item.internal" data-ng-disabled="!item.internalEnabled" data-ng-required="item.internalEnabled"/>\n <span class="input-group-addon">\n <input type="checkbox" data-ng-model="item.internalEnabled">\n </span>\n </div>\n <span data-ng-show="(forms.info.internal.$touched || forms.info.$submitted) && forms.info.internal.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERNAL -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" ng-click="next()"/>\n </form>\n </wz-step>\n\n <wz-step title="{{\'APPLICATION_VOICE\' | translate}}" canexit="exitValidation(forms.voice.$valid)">\n <form name="forms.voice" novalidate>\n\n <!-- START TRANSPORT -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_TRANSPORT\' | translate}}</label>\n <ui-select multiple name="transport" ng-model="item.transport" theme="bootstrap" ng-disabled="disabled">\n <ui-select-match placeholder="Select transport...">{{$item}}</ui-select-match>\n <ui-select-choices repeat="transport in [\'udp\', \'tcp\', \'ws\', \'wss\'] | filter: $select.search">\n {{transport}}\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_VOICE_TRANSPORT\' | translate }}\n </span>\n </div>\n <!-- END TRANSPORT -->\n\n <!-- START CODEC -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_ALLOWED_CODECS\' | translate}}</label>\n <ui-select multiple ng-model="item.allow" name="allow" theme="bootstrap" ng-disabled="disabled">\n <ui-select-match placeholder="Select codec...">{{$item}}</ui-select-match>\n <ui-select-choices repeat="allow in [\'g729\', \'ilbc\', \'gsm\', \'ulaw\', \'alaw\'] | filter: $select.search">\n {{allow}}\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_VOICE_CODEC\' | translate }}\n </span>\n </div>\n <!-- END CODEC -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" ng-click="next()"/>\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n </form>\n </wz-step>\n\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n <input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n </wz-step>\n </wizard>\n </div>\n </div>\n <!-- END PORTLET-->\n</div>\n'), -a.put("app/staff/user/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-puzzle"></i>\n <a href="#">{{ \'APPLICATION_STAFF\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-eye"></i>\n <a href="#">{{ \'APPLICATION_USERS\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-eye font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_USERS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <a class="btn green-jungle" href="/staff/users/wizard" data-toggle="dropdown">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_USER\' | translate }}\n </a>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/staff/user/view/view.account.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_PROFILE\' | translate}} {{ \'APPLICATION_ACCOUNT\' | translate}}</span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_PERSONAL_INFO\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_2" data-toggle="tab">{{ \'APPLICATION_CHANGE_AVATAR\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-ng-show="Auth.isAdmin() || user.id === getCurrentUser().id" data-target="#tab_1_3" data-toggle="tab">{{ \'APPLICATION_CHANGE_PASSWORD\' | translate}}</a>\n </li>\n </ul>\n </div>\n\n <div class="portlet-body">\n <div class="tab-content">\n <!-- PERSONAL INFO TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.info" data-ng-submit="updateItem()" novalidate>\n\n <!-- START ROLE -->\n <div class="form-group" data-ng-if="Auth.getCurrentUser().role === \'admin\' && Auth.getCurrentUser().id !== user.id">\n <label class="control-label">{{ \'APPLICATION_ROLE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select name="role" data-ng-model="user.role" theme="bootstrap" required>\n <ui-select-match placeholder="Select role...">{{$select.selected | uppercase}}</ui-select-match>\n <ui-select-choices repeat="role in [\'user\', \'admin\'] | filter: $select.search">\n {{role | uppercase}}\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END ROLE -->\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.fullname.$touched || forms.info.$submitted) && forms.info.fullname.$invalid}">\n <label class="control-label">{{\'APPLICATION_FULLNAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="fullname" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="user.fullname" required/>\n <span data-ng-show="(forms.info.fullname.$touched || forms.info.$submitted) && forms.info.fullname.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START USERNAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_USERNAME\' | translate}}</label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_USERNAME\' | translate}}" class="form-control" data-ng-model="user.name" disabled/>\n </div>\n <!-- END USERNAME -->\n\n <!-- START EMAIL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.email.$touched || forms.info.$submitted) && forms.info.email.$invalid}">\n <label class="control-label">{{\'APPLICATION_EMAIL\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="email" name="email" placeholder="{{\'APPLICATION_EMAIL\' | translate}}" class="form-control" data-ng-model="user.email" required/>\n <span data-ng-show="(forms.info.email.$touched || forms.info.$submitted) && forms.info.email.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.info.email.$touched || forms.info.$submitted) && forms.info.email.$error.email" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n </span>\n </div>\n <!-- END EMAIL -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="user.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END PERSONAL INFO TAB -->\n\n <!-- CHANGE AVATAR TAB -->\n <div class="tab-pane" id="tab_1_2">\n <form action="#" role="form">\n <div class="form-group">\n <div class="fileinput fileinput-new" data-provides="fileinput">\n <div class="fileinput-new thumbnail" style="width: 200px; height: 150px;">\n <img ng-src="assets/images/media/noProfileImage.png" alt=""/>\n </div>\n <div class="fileinput-preview fileinput-exists thumbnail" style="max-width: 200px; max-height: 150px;">\n </div>\n <div>\n <span class="btn default btn-file" data-ng-show="!uploader.queue[0]">\n <span> {{ \'APPLICATION_SELECT_IMAGE\' | translate }} </span>\n <input type="file" nv-file-select="" uploader="uploader" /><br/>\n </span>\n <button type="button" class="btn default" data-ng-show="uploader.queue[0]" data-dismiss="fileinput" ng-click="uploader.queue[0].remove()">\n <span> {{ \'APPLICATION_REMOVE\' | translate }} </span>\n </button>\n <button type="button" class="btn green-haze" data-ng-show="uploader.queue[0]" data-ng-click="uploader.queue[0].upload()" ng-disabled="uploader.queue[0].isReady || uploader.queue[0].isUploading || uploader.queue[0].isSuccess">\n <span> {{ \'APPLICATION_CONFIRM\' | translate }} </span>\n </button>\n </div>\n <p>\n </br> {{ \'MESSAGE_SUPPORTED_FORMATS\' | translate }} <b>jpg, png, jpeg</b>.\n </p>\n </div>\n </div>\n </form>\n <div class="row">\n <div class="col-md-2">\n <table class="table" border="0">\n <tbody>\n <tr data-ng-repeat="item in uploader.queue">\n <td style="border-top-style:none">\n <strong>\n {{ item.file.name }}\n </strong>\n </td>\n <td data-ng-show="uploader.isHTML5" nowrap style="border-top-style:none">\n {{ item.file.size/1024/1024|number:2 }} MB\n </td>\n <td nowrap style="border-top-style:none">\n <button type="button" class="btn btn-danger btn-xs" data-ng-click="item.remove()">\n <span class="glyphicon glyphicon-trash"></span> Remove\n </button>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n </div>\n <!-- END CHANGE AVATAR TAB -->\n <!-- CHANGE PASSWORD TAB -->\n <div class="tab-pane" id="tab_1_3" data-ng-show="Auth.isAdmin() || user.id === getCurrentUser().id">\n <form name="forms.changePwd" data-ng-submit="forms.changePwd.$valid && updatePassword()" novalidate>\n <!-- START CURRENT PWD -->\n <div class="form-group" data-ng-if="!Auth.isAdmin()" data-ng-class="{\'has-error\': (forms.changePwd.current_pwd.$touched || forms.changePwd.$submitted) && forms.changePwd.current_pwd.$invalid}">\n <label class="control-label">{{\'APPLICATION_CURRENT_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="password" name="current_pwd" placeholder="{{\'APPLICATION_CURRENT_PASSWORD\' | translate}}" class="form-control" data-ng-model="user.currentPwd" required/>\n <span data-ng-show="(forms.changePwd.current_pwd.$touched || forms.changePwd.$submitted) && forms.changePwd.current_pwd.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CURRENT PWD -->\n <!-- START NEW PWD -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.changePwd.new_pwd.$touched || forms.changePwd.$submitted) && forms.changePwd.new_pwd.$invalid}">\n <label class="control-label">{{\'APPLICATION_NEW_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="password" name="new_pwd" placeholder="{{\'APPLICATION_NEW_PASSWORD\' | translate}}" class="form-control" data-ng-model="user.newPwd" data-ng-pattern="setting.securePassword ? settings.patternPassword : settings.patternPasswordLight" required/>\n <span class="help-block">\n {{setting.securePassword ? \'MESSAGE_PASSWORD_FORMAT\' : \'MESSAGE_PASSWORD_LIGTH_FORMAT\' | translate}}\n </span>\n <span data-ng-show="(forms.changePwd.current_pwd.$touched || forms.info.$submitted) && forms.changePwd.current_pwd.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n </span>\n <span data-ng-show="(forms.changePwd.new_pwd.$touched || forms.changePwd.$submitted) && forms.changePwd.new_pwd.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NEW PWD -->\n <!-- START RE-NEW PWD -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.changePwd.re_new_pwd.$touched || forms.changePwd.$submitted) && forms.changePwd.re_new_pwd.$invalid}">\n <label class="control-label">{{\'APPLICATION_RE_TYPE_NEW_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="password" name="re_new_pwd" placeholder="{{\'APPLICATION_RE_TYPE_NEW_PASSWORD\' | translate}}" class="form-control" data-ng-model="user.reNewPwd" nx-equal="user.newPwd" required/>\n <span data-ng-show="(forms.changePwd.new_pwd.$touched || forms.changePwd.$submitted) && forms.changePwd.new_pwd.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END RE-NEW PWD -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END CHANGE PASSWORD TAB -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/staff/user/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-puzzle"></i>\n <a href="#">{{ \'APPLICATION_STAFF\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-eye"></i>\n <a href="/staff/users/list">{{ \'APPLICATION_USERS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <a href="#">{{user.fullname}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-userpic">\n <img ng-src="api/users/avatar/{{user.userpic ? user.userpic : \'unknown_avatar\'}}" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{user.fullname}}\n </div>\n <div class="profile-usertitle-job">\n {{user.role}}\n </div>\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.staff.users.view.account\')}">\n <a data-ng-href="/staff/users/view/{{user.id}}/account">\n <i class="icon-user"></i>\n {{ \'APPLICATION_ACCOUNT\' | translate}}\n </a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.staff.users.view.voice\')}" data-ng-show="Auth.isAdmin()">\n <a data-ng-href="/staff/users/view/{{user.id}}/voice">\n <i class="icon-earphones-alt"></i>\n {{ \'APPLICATION_VOICE\' | translate}}\n </a>\n </li>\n <li data-ng-class="{active: $state.includes(\'main.staff.users.view.permit\')}" data-ng-show="Auth.isAdmin() && user.role === \'user\'">\n <a data-ng-href="/staff/users/view/{{user.id}}/permit/voice">\n <i class="icon-key"></i>\n {{ \'APPLICATION_PERMITS\' | translate}}\n </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/staff/user/view/view.permit.chat.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12" data-ng-init="initChatQueues()">\n <!-- BEGIN FORM-->\n <form action="#" class="form-horizontal form-row-seperated">\n <div class="form-body">\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-permit">\n </div>\n </div>\n </div>\n </form>\n <!-- END FORM-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/staff/user/view/view.permit.fax.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12" data-ng-init="initFaxQueues()">\n <!-- BEGIN FORM-->\n <form action="#" class="form-horizontal form-row-seperated">\n <div class="form-body">\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-permit">\n </div>\n </div>\n </div>\n </form>\n <!-- END FORM-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/staff/user/view/view.permit.html","<!-- BEGIN PAGE CONTENT-->\n<div class=\"row\">\n <div class=\"col-md-12\">\n <div>\n <nav class=\"navbar navbar-default\" role=\"navigation\">\n <div class=\"collapse navbar-collapse\">\n <ul class=\"nav navbar-nav\">\n <li data-ng-class=\"{'active': $state.is('main.staff.users.view.permit.voice')}\">\n <a href=\"/staff/users/view/{{user.id}}/permit/voice\">\n <i class=\"icon-earphones-alt\"></i> {{'APPLICATION_VOICE' | translate}}\n </a>\n </li>\n <li data-ng-class=\"{'active': $state.is('main.staff.users.view.permit.chat'),'disabled-link':!license.chat}\" data-ng-show=\"Auth.isAdmin() || userModules[8]\">\n <a href=\"{{license.chat ? '/staff/users/view/'+user.id+'/permit/chat' : 'javascript:;'}}\" class=\"disable-target\">\n <i class=\"icon-bubble\"></i> {{'APPLICATION_CHAT' | translate}}\n </a>\n </li>\n <li data-ng-class=\"{'active': $state.is('main.staff.users.view.permit.mail'),'disabled-link':!license.mail}\" data-ng-show=\"Auth.isAdmin() || userModules[9]\">\n <a href=\"{{license.mail ? '/staff/users/view/'+user.id+'/permit/mail' : 'javascript:;'}}\" class=\"disable-target\">\n <i class=\"icon-envelope\"></i>{{'APPLICATION_MAIL' | translate}}\n </a>\n </li>\n <li data-ng-class=\"{'active': $state.is('main.staff.users.view.permit.fax'),'disabled-link':!license.fax}\" data-ng-show=\"Auth.isAdmin() || userModules[10]\">\n <a href=\"{{license.fax ? '/staff/users/view/'+user.id+'/permit/fax' : 'javascript:;'}}\" class=\"disable-target\">\n <i class=\"fa fa-fax\"></i> {{'APPLICATION_FAX' | translate}}\n </a>\n </li>\n <li data-ng-class=\"{'active': $state.is('main.staff.users.view.permit.sms'),'disabled-link':!license.messaging}\" data-ng-show=\"Auth.isAdmin() || userModules[11]\">\n <a href=\"{{license.messaging ? '/staff/users/view/'+user.id+'/permit/sms' : 'javascript:;'}}\" class=\"disable-target\">\n <i class=\"glyphicon glyphicon-comment\"></i> {{'APPLICATION_SMS' | translate}}\n </a>\n </li>\n <li data-ng-class=\"{'active': $state.is('main.staff.users.view.permit.openchannel'),'disabled-link':!license.openchannel}\" data-ng-show=\"Auth.isAdmin() || userModules[20]\">\n <a href=\"{{license.openchannel ? '/staff/users/view/'+user.id+'/permit/openchannel' : 'javascript:;'}}\" class=\"disable-target\">\n <i class=\"icon-globe\"></i> {{'APPLICATION_OPEN_CHANNEL' | translate}}\n </a>\n </li>\n <li data-ng-class=\"{'active': $state.is('main.staff.users.view.permit.modules')}\" data-ng-if=\"user.role !== 'admin'\">\n <a href=\"/staff/users/view/{{user.id}}/permit/modules\">\n <i class=\"icon-menu\"></i> {{'APPLICATION_MODULES' | translate}}\n </a>\n </li>\n </ul>\n </div>\n </nav>\n </div>\n <div ui-view></div>\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n"),a.put("app/staff/user/view/view.permit.mail.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12" data-ng-init="initMailQueues()">\n <!-- BEGIN FORM-->\n <form action="#" class="form-horizontal form-row-seperated">\n <div class="form-body">\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-permit">\n </div>\n </div>\n </div>\n </form>\n <!-- END FORM-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/staff/user/view/view.permit.modules.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row left-margin" data-ng-init="getModules()">\n <div data-ng-repeat="module in modules" data-ng-if="!module.ModuleId && ((module.id === 8 && license.chat) || (module.id === 9 && license.mail) || (module.id === 10 && license.fax) || (module.id === 11 && license.messaging) || (module.id === 20 && license.openchannel) || !_.includes([8,9,10,11,20],module.id))">\n <div class="form-group" data-ng-class="{\'left-margin-40\':module.ModuleId}">\n <span data-ng-if="module.ModuleId">└──</span> <input\n bs-switch\n class="form-control"\n ng-model="module.status"\n type="checkbox"\n data-ng-change="updatePermissions(module)"\n switch-active="{{ moduleSwitch.isActive }}"\n switch-on-text="{{ moduleSwitch.onText }}"\n switch-off-text="{{ moduleSwitch.offText }}"\n switch-on-color="{{ moduleSwitch.onColor }}"\n switch-off-color="{{ moduleSwitch.offColor }}"\n switch-animate="{{ moduleSwitch.animate }}"\n switch-size="{{ moduleSwitch.size }}"\n switch-label="{{ moduleSwitch.label }}"\n switch-icon="{{ moduleSwitch.icon }}"\n switch-radio-off="{{ moduleSwitch.radioOff }}"\n switch-label-width="{{ moduleSwitch.labelWidth }}"\n switch-handle-width="{{ moduleSwitch.handleWidth }}">\n <label class="control-label">{{module.title | translate | trusted}}</label>\n </div>\n <div ng-slide-down="module.status" lazy-render duration="0.5">\n <div data-ng-repeat="subModule in module.SubModules" data-ng-if="(subModule.id === 8 && license.chat) || (subModule.id === 9 && license.mail) || (subModule.id === 10 && license.fax) || (subModule.id === 11 && license.messaging) || (subModule.id === 20 && license.openchannel) || !_.includes([8,9,10,11,20],subModule.id)">\n <div class="form-group" data-ng-class="{\'left-margin-40\':module.ModuleId}">\n <span>└──</span> <input\n bs-switch\n class="form-control"\n ng-model="subModule.status"\n type="checkbox"\n data-ng-change="updatePermissions(subModule)"\n switch-active="{{ moduleSwitch.isActive }}"\n switch-on-text="{{ moduleSwitch.onText }}"\n switch-off-text="{{ moduleSwitch.offText }}"\n switch-on-color="{{ moduleSwitch.onColor }}"\n switch-off-color="{{ moduleSwitch.offColor }}"\n switch-animate="{{ moduleSwitch.animate }}"\n switch-size="{{ moduleSwitch.size }}"\n switch-label="{{ moduleSwitch.label }}"\n switch-icon="{{ moduleSwitch.icon }}"\n switch-radio-off="{{ moduleSwitch.radioOff }}"\n switch-label-width="{{ moduleSwitch.labelWidth }}"\n switch-handle-width="{{ moduleSwitch.handleWidth }}">\n <label class="control-label">{{subModule.title | translate}}</label>\n </div>\n <div ng-slide-down="subModule.status" lazy-render duration="0.5">\n <div data-ng-repeat="subModule2 in subModule.SubModules" class="form-group" data-ng-class="{\'left-margin-40\':module.ModuleId}">\n <span style="margin-left:40px">└──</span> <input\n bs-switch\n class="form-control"\n ng-model="subModule2.status"\n type="checkbox"\n data-ng-change="updatePermissions(subModule2)"\n switch-active="{{ moduleSwitch.isActive }}"\n switch-on-text="{{ moduleSwitch.onText }}"\n switch-off-text="{{ moduleSwitch.offText }}"\n switch-on-color="{{ moduleSwitch.onColor }}"\n switch-off-color="{{ moduleSwitch.offColor }}"\n switch-animate="{{ moduleSwitch.animate }}"\n switch-size="{{ moduleSwitch.size }}"\n switch-label="{{ moduleSwitch.label }}"\n switch-icon="{{ moduleSwitch.icon }}"\n switch-radio-off="{{ moduleSwitch.radioOff }}"\n switch-label-width="{{ moduleSwitch.labelWidth }}"\n switch-handle-width="{{ moduleSwitch.handleWidth }}">\n <label class="control-label">{{subModule2.title | translate}}</label>\n </div>\n </div>\n </div>\n </div>\n </div>\n <!-- END PAGE CONTENT-->\n'),a.put("app/staff/user/view/view.permit.openchannel.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12" data-ng-init="initOpenchannelQueues()">\n <!-- BEGIN FORM-->\n <form action="#" class="form-horizontal form-row-seperated">\n <div class="form-body">\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-permit">\n </div>\n </div>\n </div>\n </form>\n <!-- END FORM-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/staff/user/view/view.permit.sms.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12" data-ng-init="initSmsQueues()">\n <!-- BEGIN FORM-->\n <form action="#" class="form-horizontal form-row-seperated">\n <div class="form-body">\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-permit">\n </div>\n </div>\n </div>\n </form>\n <!-- END FORM-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/staff/user/view/view.permit.voice.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12" data-ng-init="initVoiceQueues()">\n <!-- BEGIN FORM-->\n <form action="#" class="form-horizontal form-row-seperated">\n <div class="form-body">\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-permit">\n </div>\n </div>\n </div>\n </form>\n <!-- END FORM-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/staff/user/view/view.voice.html",'<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_ACCOUNT\' | translate}} {{ \'APPLICATION_VOICE\' | translate}}</span>\n </div>\n </div>\n <div class="portlet-body">\n <form name="forms.info" data-ng-submit="updateItem()" novalidate>\n\n <!-- START INTERNAL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.internal.$touched || forms.info.$submitted) && forms.info.internal.$invalid}">\n <label class="control-label">{{\'APPLICATION_INTERNAL_NUMBER\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" min="1" name="internal" placeholder="{{\'APPLICATION_INTERNAL_NUMBER\' | translate}}" class="form-control" data-ng-model="user.internal" required readonly/>\n <span data-ng-show="(forms.info.internal.$touched || forms.info.$submitted) && forms.info.internal.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.info.internal.$touched || forms.info.$submitted) && forms.info.internal.$error.ngRemoteValidate" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_EXIST_INTERNAL\' | translate}}.\n </span>\n </div>\n <!-- END INTERNAL -->\n\n <!-- START TRANSPORT -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_TRANSPORT\' | translate}}</label>\n <ui-select multiple name="transport" ng-model="user.transport" theme="bootstrap" ng-disabled="disabled">\n <ui-select-match placeholder="Select transport...">{{$item}}</ui-select-match>\n <ui-select-choices repeat="transport in [\'udp\', \'tcp\', \'ws\', \'wss\'] | filter: $select.search">\n {{transport}}\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_VOICE_TRANSPORT\' | translate }}\n </span>\n </div>\n <!-- END TRANSPORT -->\n\n <!-- START CODEC -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_ALLOWED_CODECS\' | translate}}</label>\n <ui-select multiple ng-model="user.allow" name="allow" theme="bootstrap" ng-disabled="disabled">\n <ui-select-match placeholder="Select codec...">{{$item}}</ui-select-match>\n'+" <ui-select-choices repeat=\"allow in ['g729', 'ilbc', 'gsm', 'ulaw', 'alaw'] | filter: $select.search\">\n {{allow}}\n </ui-select-choices>\n </ui-select>\n <span class=\"help-block\">\n {{ 'DESCRIPTION_VOICE_CODEC' | translate }}\n </span>\n </div>\n <!-- END CODEC -->\n\n <input class=\"btn green-haze\" type=\"submit\" value=\"{{'APPLICATION_UPDATE' | translate}}\"/>\n </form>\n </div>\n </div>\n </div>\n</div>\n"),a.put("app/staff/user/wizard/wizard.html",'<div class="col-md-12">\n <!-- BEGIN PAGE HEADER-->\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-puzzle"></i>\n <a href="#">{{ \'APPLICATION_STAFF\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-eye"></i>\n <a href="/staff/users/list">{{ \'APPLICATION_USERS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-options"></i>\n <a href="/staff/users/wizard">{{ \'APPLICATION_WIZARD\' | translate }}</a>\n </li>\n </ul>\n </div>\n <!-- END PAGE HEADER-->\n\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered" data-ng-init="initWizard();">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-user font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_USER\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="createItem()">\n <wz-step title="{{\'APPLICATION_ACCOUNT\' | translate}}" canexit="exitValidation(forms.info.$valid)">\n <form name="forms.info" novalidate>\n\n <!-- START ROLE -->\n <div class="form-group" data-ng-if="Auth.getCurrentUser().role === \'admin\'">\n <label class="control-label">{{ \'APPLICATION_ROLE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select name="role" data-ng-model="item.role" theme="bootstrap" required>\n <ui-select-match placeholder="Select role...">{{$select.selected | uppercase}}</ui-select-match>\n <ui-select-choices repeat="role in [\'user\', \'admin\'] | filter: $select.search">\n {{role | uppercase}}\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END ROLE -->\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.fullname.$touched || forms.info.$submitted) && forms.info.fullname.$invalid}">\n <label class="control-label">{{\'APPLICATION_FULLNAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="fullname" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.fullname" required/>\n <span data-ng-show="(forms.info.fullname.$touched || forms.info.$submitted) && forms.info.fullname.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START USERNAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_USERNAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_USERNAME\' | translate}}" class="form-control" data-ng-model="item.name" data-ng-pattern="settings.patternName" required />\n <span data-ng-show="(forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_PATTERN_NAME\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n\n <!-- START EMAIL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.email.$touched || forms.info.$submitted) && forms.info.email.$invalid}">\n <label class="control-label">{{\'APPLICATION_EMAIL\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="email" name="email" placeholder="{{\'APPLICATION_EMAIL\' | translate}}" class="form-control" data-ng-model="item.email" required />\n <span data-ng-show="(forms.info.email.$touched || forms.info.$submitted) && forms.info.email.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.info.email.$touched || forms.info.$submitted) && forms.info.email.$error.email" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n </span>\n </div>\n <!-- END EMAIL -->\n\n <!-- START PASSWORD -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.password.$touched || forms.info.$submitted) && forms.info.password.$invalid}">\n <label class="control-label">{{\'APPLICATION_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="password" name="password" placeholder="{{\'APPLICATION_PASSWORD\' | translate}}" class="form-control" data-ng-model="item.password" data-ng-pattern="setting.securePassword ? settings.patternPassword : settings.patternPasswordLight" required/>\n <span class="help-block">\n {{setting.securePassword ? \'MESSAGE_PASSWORD_FORMAT\' : \'MESSAGE_PASSWORD_LIGTH_FORMAT\' | translate}}\n </span>\n <span data-ng-show="(forms.info.password.$touched || forms.info.$submitted) && forms.info.password.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n </span>\n <span data-ng-show="(forms.info.password.$touched || forms.info.$submitted) && forms.info.password.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PASSWORD -->\n\n <!-- START RE PASSWORD -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.rpassword.$touched || forms.info.$submitted) && forms.info.rpassword.$invalid}">\n <label class="control-label">{{\'APPLICATION_CONFIRM_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="password" name="rpassword" placeholder="{{\'APPLICATION_CONFIRM_PASSWORD\' | translate}}" class="form-control" data-ng-model="item.rpassword" nx-equal="item.password" required/>\n <span data-ng-show="(forms.info.rpassword.$touched || forms.info.$submitted) && forms.info.rpassword.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.info.rpassword.$touched || forms.info.$submitted) && forms.info.rpassword.$error.nxEqual" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_PASSWORD\' | translate}}.\n </span>\n </div>\n <!-- END RE PASSWORD -->\n\n <!-- START INTERNAL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.internal.$touched || forms.info.$submitted) && forms.info.internal.$invalid}">\n <label class="control-label">{{\'APPLICATION_INTERNAL_NUMBER\' | translate}}<span class="required" aria-required="true">*</span></label>\n <div class="input-group">\n <input type="number" min="1" name="internal" placeholder="{{\'APPLICATION_INTERNAL_NUMBER\' | translate}}" class="form-control" data-ng-model="item.internal" data-ng-disabled="!item.internalEnabled" data-ng-required="item.internalEnabled"/>\n <span class="input-group-addon">\n <input type="checkbox" data-ng-model="item.internalEnabled">\n </span>\n </div>\n <span data-ng-show="(forms.info.internal.$touched || forms.info.$submitted) && forms.info.internal.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERNAL -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" ng-click="next()"/>\n </form>\n </wz-step>\n\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n <input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n </wz-step>\n </wizard>\n </div>\n </div>\n <!-- END PORTLET-->\n</div>\n'), -a.put("app/sugarcrm/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-handbag"></i>\n <a href="/sugarcrm/list">{{ \'APPLICATION_SUGARCRM\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-handbag font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_SUGARCRM\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <a class="btn green-jungle" href="/sugarcrm/wizard" data-toggle="dropdown">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_ACCOUNT\' | translate }}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/sugarcrm/view/view.account.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_ACCOUNT\' | translate}}</span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_GENERALS\' | translate}}</a>\n </li>\n </ul>\n </div>\n <div class="portlet-body">\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.formSetting" data-ng-submit="forms.formSetting.$valid && updateItem()" novalidate>\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="account.name" required/>\n <span data-ng-show="forms.formSetting.name.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="account.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n <!-- START USERNAME -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.username.$invalid}">\n <label class="control-label">{{\'APPLICATION_USERNAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="username" placeholder="{{\'APPLICATION_USERNAME\' | translate}}" class="form-control" data-ng-model="account.username" required/>\n <span data-ng-show="forms.formSetting.username.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n\n <!-- START REMOTE ADDRESS -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.remoteUri.$invalid}">\n <label class="control-label">{{\'APPLICATION_REMOTE_ADDRESS\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="url" name="remoteUri" placeholder="{{\'APPLICATION_REMOTE_ADDRESS\' | translate}}" class="form-control" data-ng-model="account.remoteUri" required />\n <span data-ng-show="forms.formSetting.remoteUri.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n\n <!-- START PASSWORD -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.password.$invalid}">\n <label class="control-label">{{\'APPLICATION_PASSWORD\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="password" name="password" placeholder="{{\'APPLICATION_PASSWORD\' | translate}}" class="form-control" data-ng-model="account.password" required/>\n <span data-ng-show="forms.formSetting.apiKey.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END API KEY -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END GENERAL TAB -->\n\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/sugarcrm/view/view.configuration.html",'<div class="row" data-ng-init="initConfiguration()">\n <div class="col-md-12">\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-notebook font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_CONFIGURATION\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="createConfiguration()">\n <wz-step title="{{\'APPLICATION_SETTINGS\' | translate}}" canexit="formValidation(formsConfiguration.info.$valid)">\n <form name="formsConfiguration.info" novalidate>\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': formsConfiguration.info.$submitted && formsConfiguration.info.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="configuration.name" required/>\n <span data-ng-show="formsConfiguration.info.name.$invalid && formsConfiguration.info.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="configuration.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" data-ng-click="goNext()"/>\n </form>\n </wz-step>\n\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n <input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n </wz-step>\n </wizard>\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/sugarcrm/view/view.configurationSettings.html",'<div class="row" data-ng-init="getConfiguration();getVariables();getFields();">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_CONFIGURATION\' | translate}}: {{configurationName}}</span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_SUBJECT\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_2" data-toggle="tab">{{\'APPLICATION_DESCRIPTION\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_3" data-toggle="tab">{{\'APPLICATION_FIELDS\' | translate}}</a>\n </li>\n </ul>\n </div>\n <div class="portlet-body">\n <div class="tab-content">\n <!-- SUBJECT TAB -->\n <div class="tab-pane ui-padding active" id="tab_1_1">\n <div class="row">\n <div class="col-md-11">\n <span class="caption-subject">All following fields will be join by blank space:</span>\n </div>\n <div class="col-md-1 pull-rigth">\n <button class="btn btn-icon-only green" data-ng-click="addItemSubject()"><i class="fa fa-plus"></i></button>\n </div>\n </div>\n <hr>\n <!-- <div ng-scrollbars ng-scrollbars-config="config"> -->\n <div class="row" data-ng-repeat="subjectItem in subjectConfig">\n <div class="col-md-3">\n <ui-select ng-model="subjectItem.type" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeType(subjectItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n <ui-select-choices repeat="item in fieldType | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search | capitalize"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <div class="col-md-8" data-ng-if="subjectItem.type==\'string\'">\n <div class="form-group">\n <input type="text" class="form-control" data-ng-model="subjectItem.content" data-ng-change="updateField(subjectItem)">\n </div>\n </div>\n <div class="col-md-8" data-ng-if="subjectItem.type==\'variable\'">\n <div class="form-group">\n <ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="subjectItem.VariableId" data-ng-change="updateField(subjectItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="variable.id as variable in variables | filter: $select.search">\n <div ng-bind-html="variable.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <div class="col-md-1">\n <div class="form-group">\n <button class="btn btn-icon-only red" data-ng-click="removeItem(subjectItem)"><i class="fa fa-times"></i></button>\n </div>\n </div>\n </div>\n <!-- </div> -->\n </div>\n <!-- END SUBJECT TAB -->\n <!-- DESCRIPTION TAB -->\n <div class="tab-pane ui-padding" id="tab_1_2">\n <div class="row">\n <div class="col-md-11">\n <span class="caption-subject">All following fields will be join by new line:</span>\n </div>\n <div class="col-md-1 pull-rigth">\n <button class="btn btn-icon-only green" data-ng-click="addItemDescription()"><i class="fa fa-plus"></i></button>\n </div>\n </div>\n <hr>\n <!-- <div ng-scrollbars ng-scrollbars-config="config"> -->\n <div class="row" data-ng-repeat="descriptionItem in descriptionConfig">\n <!-- <pre>\n {{descriptionItem|json}}\n </pre> -->\n <div class="col-md-2">\n <ui-select ng-model="descriptionItem.type" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeDescType(descriptionItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected | ucfirst}}</ui-select-match>\n <ui-select-choices repeat="item in descFieldType | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search | ucfirst"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <div class="col-md-9" data-ng-if="descriptionItem.type==\'string\'">\n <div class="form-group">\n <input type="text" class="form-control" data-ng-model="descriptionItem.content" data-ng-change="updateField(descriptionItem)">\n </div>\n </div>\n <div class="col-md-3" data-ng-if="descriptionItem.type==\'key_value\'">\n <input type="text" class="form-control" placeholder="Key" data-ng-model="descriptionItem.key" data-ng-change="updateField(descriptionItem)">\n </div>\n <div class="col-md-3" data-ng-if="descriptionItem.type==\'key_value\'">\n <ui-select ng-model="descriptionItem.keyType" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeDescType(descriptionItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n <ui-select-choices repeat="item in fieldType | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search | capitalize"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <div class="col-md-3" data-ng-if="descriptionItem.type==\'key_value\' && descriptionItem.keyType==\'string\'">\n <input type="text" class="form-control" placeholder="Value" data-ng-model="descriptionItem.keyContent" data-ng-change="updateField(descriptionItem)">\n </div>\n <div class="col-md-3" data-ng-if="descriptionItem.type==\'key_value\' && descriptionItem.keyType==\'variable\'">\n <div class="form-group">\n <ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="descriptionItem.VariableId" data-ng-change="updateField(descriptionItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="variable.id as variable in variables | filter: $select.search">\n <div ng-bind-html="variable.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <div class="col-md-1">\n <div class="form-group">\n <button class="btn btn-icon-only red" data-ng-click="removeItem(descriptionItem)"><i class="fa fa-times"></i></button>\n </div>\n </div>\n </div>\n <!-- </div> -->\n </div>\n <!-- END DESCRIPTION TAB -->\n <!-- FIELDS TAB -->\n <div class="tab-pane ui-padding" id="tab_1_3">\n <div class="row">\n <div class="col-md-11">\n <span class="caption-subject">Add how to fill the fields present in your account:</span>\n </div>\n <div class="col-md-1 pull-rigth">\n <button class="btn btn-icon-only green" data-ng-click="addItemField()"><i class="fa fa-plus"></i></button>\n </div>\n </div>\n <hr>\n <!-- <div ng-scrollbars ng-scrollbars-config="config"> -->\n <div class="row" data-ng-repeat="fieldItem in fieldConfig">\n <div class="col-md-3">\n <ui-select ng-model="fieldItem.idField" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeFieldType(fieldItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.label}}</ui-select-match>\n <ui-select-choices repeat="item.name as item in accountFields | filter: $select.search">\n <div ng-bind-html="item.label | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <div class="col-md-8" data-ng-if="getSystemFieldOptions(fieldItem.idField)">\n <div class="form-group">\n <ui-select ng-model="fieldItem.content" theme="bootstrap" ng-disabled="disabled" data-ng-change="updateField(fieldItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="item.value as item in getSystemFieldOptions(fieldItem.idField) | filter: $select.search">\n <div ng-bind-html="item.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField)">\n <div class="form-group">\n <ui-select ng-model="fieldItem.type" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeType(fieldItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected | ucfirst}}</ui-select-match>\n <ui-select-choices repeat="item in fieldType | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search | ucfirst"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField) && fieldItem.type === \'string\'">\n <div class="form-group">\n <input type="text" class="form-control" data-ng-model="fieldItem.content" data-ng-change="updateField(fieldItem)">\n </div>\n </div>\n <div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField) && fieldItem.type === \'variable\'">\n <div class="form-group">\n <ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="fieldItem.VariableId" data-ng-change="updateField(fieldItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="variable.id as variable in variables | filter: $select.search">\n <div ng-bind-html="variable.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <div class="col-md-1">\n <div class="form-group">\n <button class="btn btn-icon-only red" data-ng-click="removeItem(fieldItem)"><i class="fa fa-times"></i></button>\n </div>\n </div>\n </div>\n <!-- </div> -->\n </div>\n <!-- END FIELDS TAB -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/sugarcrm/view/view.configurations.html",'<div ui-view class="profile-content">\n <div class="row" data-ng-init="getConfigurations()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_CONFIGURATIONS\' | translate}}</span>\n </div>\n <div class="actions">\n <div class="btn-group">\n <a class="btn green-jungle " href="/sugarcrm/view/{{account.id}}/configuration" data-toggle="dropdown">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_CONFIGURATION\' | translate }}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <table class="table table-striped table-bordered table-hover">\n <thead>\n <tr>\n <th>{{\'APPLICATION_NAME\' | translate}}</th>\n <th>{{\'APPLICATION_DESCRIPTION\' | translate}}</th>\n <th>{{ \'APPLICATION_ACTIONS\' | translate }}</th>\n </tr>\n </thead>\n <tbody>\n <tr data-ng-repeat="configuration in configurations">\n <td>{{configuration.name}}</td>\n <td>{{configuration.description}}</td>\n <td>\n <a class="btn default btn-xs blue-stripe" data-ng-href="/sugarcrm/view/{{account.id}}/configurations/settings/{{configuration.id}}">\n {{ \'APPLICATION_SETTINGS\' | translate}}\n </a>\n <a class="btn default btn-xs red-stripe" data-ng-click="deleteConfiguration(configuration.name,configuration.id)">\n {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </td>\n </tr>\n <tr data-ng-hide="configurations.length">\n <td colspan="5" style="text-align:center;">\n <i>No configuration available</i>\n </td>\n </tr>\n </tbody>\n </table>\n <!-- END TABLE -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/sugarcrm/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-handbag"></i>\n <a href="/sugarcrm/list">{{ \'APPLICATION_SUGARCRM\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <a href="#">{{account.name}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img src="assets/images/media/sugarcrm.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{account.name}}\n </div>\n <div class="profile-usertitle-job">\n {{account.remoteUri}}\n </div>\n </div>\n <!-- END SIDEBAR USER TITLE -->\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.sugarcrm.view.account\')}">\n <a ng-href="/sugarcrm/view/{{account.id}}/account">\n <i class="icon-user"></i>\n {{ \'APPLICATION_ACCOUNT\' | translate }} </a>\n </li>\n <li data-ng-class="{active: $state.includes(\'main.sugarcrm.view.configurations\') || $state.is(\'main.sugarcrm.view.configuration\')}">\n <a ng-href="/sugarcrm/view/{{account.id}}/configurations">\n <i class="icon-settings"></i>\n {{ \'APPLICATION_CONFIGURATIONS\' | translate }} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/sugarcrm/wizard/wizard.html",'<!-- BEGIN PAGE HEADER-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-handbag"></i>\n <a href="/sugarcrm/list">{{ \'APPLICATION_SUGARCRM\' | translate }}</a>\n </li>\n </ul>\n </div>\n </div>\n</div>\n<!-- END PAGE HEADER-->\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initWizard()">\n <div class="col-md-12">\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-notebook font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_ACCOUNT\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="createItem()">\n <wz-step title="{{\'APPLICATION_ACCOUNT_INFO\' | translate}}" canexit="exitValidation(forms.formSetting.$valid)">\n <form name="forms.formSetting" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="forms.formSetting.name.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n <!-- START USERNAME -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.username.$invalid}">\n <label class="control-label">{{\'APPLICATION_USERNAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="username" placeholder="{{\'APPLICATION_USERNAME\' | translate}}" class="form-control" data-ng-model="item.username" required/>\n <span data-ng-show="forms.formSetting.username.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n\n\n <!-- START REMOTE ADDRESS -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.remoteUri.$invalid}">\n <label class="control-label">{{\'APPLICATION_REMOTE_ADDRESS\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="url" name="remoteUri" placeholder="{{\'APPLICATION_REMOTE_ADDRESS\' | translate}}" class="form-control" data-ng-model="item.remoteUri" required ng-remote-validate="/api/sugarcrm/accounts/validate/remoteUri"/>\n <span data-ng-show="forms.formSetting.remoteUri.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.formSetting.remoteUri.$touched || forms.formSetting.$submitted) && forms.formSetting.remoteUri.$error.ngRemoteValidate" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_EXIST_DOMAIN\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n\n <!-- START PASSWORD -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.password.$invalid}">\n <label class="control-label">{{\'APPLICATION_PASSWORD\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="password" name="password" placeholder="{{\'APPLICATION_PASSWORD\' | translate}}" class="form-control" data-ng-model="item.password" required/>\n <span data-ng-show="forms.formSetting.apiKey.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PASSWORD -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" data-ng-click="next()"/>\n\n </form>\n </wz-step>\n\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n <input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n </wz-step>\n\n </wizard>\n\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/tools/answer/list/list.create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_CANNED_ANSWER\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.key.$touched || form.$submitted) && form.key.$invalid}">\n <label class="control-label">{{\'APPLICATION_KEY\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="key" placeholder="{{\'APPLICATION_KEY\' | translate}}" class="form-control" data-ng-model="item.key" required/>\n <span data-ng-show="(form.key.$touched || form.$submitted) && form.key.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START VALUE -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.value.$touched || form.$submitted) && form.value.$invalid}">\n <label class="control-label">{{\'APPLICATION_VALUE\' | translate}}<span class="required" aria-required="true">*</span></label></label>\n <textarea type="text" name="value" placeholder="{{\'APPLICATION_VALUE\' | translate}}" class="form-control" data-ng-model="item.value" required></textarea>\n <span data-ng-show="(form.value.$touched || form.$submitted) && form.value.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END VALUE -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'), -a.put("app/tools/answer/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-wrench"></i>\n <a href="#">{{ \'APPLICATION_TOOLS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-magic-wand"></i>\n <a href="#">{{ \'APPLICATION_CANNED_ANSWERS\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-magic-wand font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_CANNED_ANSWERS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <a class="btn green-jungle" href="#" data-toggle="dropdown" data-ng-click="createItem()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_CANNED_ANSWER\' | translate }}\n </a>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/tools/answer/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getAnswer()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-wrench"></i>\n <a href="#">{{ \'APPLICATION_TOOLS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-magic-wand"></i>\n <a href="/tools/answers/list">{{ \'APPLICATION_CANNED_ANSWER\' | translate }}</a>\n <i data-ng-show="answer" class="fa fa-angle-right"></i>\n </li>\n <li data-ng-show="answer">\n <a href="#">{{answer.key}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/answer.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{answer.name}}\n </div>\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.tools.answers.view.settings\')}">\n <a data-ng-href="/tools/answers/view/{{answer.id}}/settings">\n <i class="icon-settings"></i>\n {{ \'APPLICATION_SETTINGS\' | translate}}\n </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/tools/answer/view/view.settings.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_CANNED_ANSWER\' | translate}} {{ \'APPLICATION_SETTINGS\' | translate}} </span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n </li>\n </ul>\n </div>\n\n <div class="portlet-body">\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.general" data-ng-submit="forms.general.$valid && updateAnswer()" novalidate>\n\n <!-- START KEY -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.key.$touched || forms.general.$submitted) && forms.general.key.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="key" placeholder="{{\'APPLICATION_KEY\' | translate}}" class="form-control" data-ng-model="answer.key" required/>\n <span data-ng-show="(forms.general.key.$touched || forms.general.$submitted) && forms.general.key.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END KEY -->\n\n <!-- START VALUE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.value.$touched || forms.general.$submitted) && forms.general.value.$invalid}">\n <label class="control-label">{{\'APPLICATION_VALUE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <textarea type="text" name="value" placeholder="{{\'APPLICATION_VALUE\' | translate}}" class="form-control" data-ng-model="answer.value" required></textarea>\n <span data-ng-show="(forms.general.value.$touched || forms.general.$submitted) && forms.general.value.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END VALUE -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="answer.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END ADVANCED TAB -->\n\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/tools/automation/list/list.html",'<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-wrench"></i>\n <a href="#">{{ \'APPLICATION_TOOLS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-bulb"></i>\n <a href="#">{{ \'APPLICATION_AUTOMATIONS\' | translate }}</a>\n </li>\n </ul>\n </div>\n </div>\n</div>\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-bulb font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_AUTOMATIONS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <a class="btn green-jungle " href="/tools/automations/wizard">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_AUTOMATION\' | translate }}\n </a>\n </div>\n <!-- <a class="btn btn-icon-only btn-default fullscreen" href="#"></a> -->\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/tools/automation/view/view.html",'<!-- BEGIN PAGE HEADER-->\n<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-settings"></i>\n <a href="/tools/automations/list">{{ \'APPLICATION_AUTOMATIONS\' | translate }}</a>\n <i class="fa fa-angle-right" data-ng-show="automation"></i>\n </li>\n <li data-ng-show="automation">\n <a href="#">{{ automation.description || automation.name }}</a>\n </li>\n </ul>\n </div>\n\n<!-- END PAGE HEADER-->\n\n<!-- BEGIN PAGE CONTENT-->\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/automation.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{ automation.name }}\n </div>\n <div class="profile-usertitle-job">\n {{ automation.description }}\n </div>\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.tools.automations.view.settings\')}">\n <a href="/tools/automations/view/{{automation.id}}/settings">\n <i class="icon-bulb"></i>\n {{ \'APPLICATION_SETTINGS\' | translate }} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/tools/automation/view/view.settings.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_SETTINGS\' | translate}}</span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_GENERALS\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_2" data-toggle="tab">{{\'APPLICATION_CONDITIONS\' | translate}} & {{\'APPLICATION_ACTIONS\' | translate}}</a>\n </li>\n </ul>\n </div>\n <div class="portlet-body">\n <form name="forms.general" data-ng-submit="exitValidation(forms.general.$valid) && updateAutomation()" novalidate>\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="automation.name" required/>\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid && forms.general.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START CHANNEL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.channel.$touched || forms.general.$submitted) && forms.general.channel.$invalid}">\n <label class="control-label">{{\'APPLICATION_CHANNEL\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="channel" placeholder="{{\'APPLICATION_CHANNEL\' | translate}}" class="form-control" data-ng-model="automation.channel" required readonly/>\n <span data-ng-show="(forms.general.channel.$touched || forms.general.$submitted) && forms.general.channel.$invalid && forms.general.channel.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CHANNEL -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.general.timeout.$touched && forms.general.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}} ({{\'APPLICATION_MINUTES\' | translate}})</label>\n <input type="number" name="timeout" min="10" placeholder="{{\'APPLICATION_TIMEOUT\' | translate}} (min 10 {{\'APPLICATION_MINUTES\' | translate}})" class="form-control" data-ng-model="automation.timeout" data-ng-init="item.timeout = 10" required/>\n <span data-ng-show="forms.general.timeout.$touched && forms.general.name.$invalid && forms.general.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n\n <!-- START STATUS -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_STATUS\' | translate}}</label>\n </br>\n <input bs-switch class="form-control" ng-model="automation.status" type="checkbox" name="status" switch-active="{{ recordSwitch.isActive }}" switch-on-text="{{ recordSwitch.onText }}" switch-off-text="{{ recordSwitch.offText }}" switch-on-color="{{ recordSwitch.onColor }}"\n switch-off-color="{{ recordSwitch.offColor }}" switch-animate="{{ recordSwitch.animate }}" switch-size="{{ recordSwitch.size }}" switch-label="{{ recordSwitch.label }}" switch-icon="{{ recordSwitch.icon }}" switch-radio-off="{{ recordSwitch.radioOff }}"\n switch-label-width="{{ recordSwitch.labelWidth }}" switch-handle-width="{{ recordSwitch.handleWidth }}">\n </div>\n <!-- END STATUS -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="automation.description" />\n </div>\n <!-- END DESCRIPTION -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}" />\n </div>\n <!-- END GENERAL TAB -->\n <div class="tab-pane" id="tab_1_2">\n <!-- All -->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-blue-hoki">\n <i class="icon-tag font-blue-hoki"></i>\n <span class="caption-subject" ng-bind-html="\'APPLICATION_MEET_ALL_CONDITIONS\' | translate"></span>:\n </div>\n </div>\n <div class="portlet-body">\n <div class="portlet light bordered" ng-repeat="all in automation.All">\n <div class="portlet-title">\n <div class="caption font-blue-hoki">\n <span class="caption-subject">{{ \'APPLICATION_ALL\' | translate }} #{{$index+1}}</span>\n </div>\n <div class="actions">\n <a href="#" class="btn red-sunglo btn-icon-only" ng-click="removeCondition(\'All\',$index)"><i class="fa fa-trash"></i></a>\n </div>\n </div>\n <div class="portlet-body">\n <div class="padding-bottom row">\n <div class="col-md-12">\n <condition-builder element="all" serviceindex="automation.channel" service="$automations" form="forms.general"></condition-builder>\n </div>\n </div>\n </div>\n </div>\n <div class="row">\n <div class="col-md-12">\n <button type="button" class="btn btn-sm green padding-bottom" data-ng-click="addCondition(\'All\')">\n <i class="fa fa-plus"></i> {{\'APPLICATION_ADD_CONDITION\' | translate}}\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Any -->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-blue-hoki">\n <i class="icon-tag font-blue-hoki"></i>\n <span class="caption-subject" ng-bind-html="\'APPLICATION_MEET_ANY_CONDITIONS\' | translate"></span>:\n </div>\n </div>\n <div class="portlet-body">\n <div class="portlet light bordered" ng-repeat="any in automation.Any">\n <div class="portlet-title">\n <div class="caption font-blue-hoki">\n <span class="caption-subject">{{ \'APPLICATION_ANY\' | translate }} #{{$index+1}}</span>\n </div>\n <div class="actions">\n <a href="#" class="btn red-sunglo btn-icon-only" ng-click="removeCondition(\'Any\',$index)"><i class="fa fa-trash"></i></a>\n </div>\n </div>\n <div class="portlet-body">\n <div class="padding-bottom row">\n <div class="col-md-12">\n <condition-builder element="any" serviceindex="automation.channel" service="$automations" form="forms.general"></condition-builder>\n </div>\n </div>\n </div>\n </div>\n <div class="row">\n <div class="col-md-12">\n <button type="button" class="btn btn-sm green padding-bottom" data-ng-click="addCondition(\'Any\')">\n <i class="fa fa-plus"></i> {{\'APPLICATION_ADD_CONDITION\' | translate}}\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Actions -->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-blue-hoki">\n <i class="icon-tag font-blue-hoki"></i>\n <span class="caption-subject">{{ \'APPLICATION_ACTIONS\' | translate }}</span>:\n </div>\n </div>\n <div class="portlet-body">\n <div class="portlet light bordered" ng-repeat="action in automation.Actions">\n <div class="portlet-title">\n <div class="caption font-blue-hoki">\n <span class="caption-subject">{{ \'APPLICATION_ACTIONS\' | translate }} #{{$index+1}}</span>\n </div>\n <div class="actions">\n <a href="#" class="btn red-sunglo btn-icon-only" ng-click="removeAction($index)"><i class="fa fa-trash"></i></a>\n </div>\n </div>\n <div class="portlet-body">\n <div class="padding-bottom row">\n <div class="col-md-12">\n <div class="form-group col-md-6" data-ng-class="{\'has-error\': (forms.general[\'action\'+$index].$touched || forms.general.$submitted) && forms.general[\'action\'+$index].$invalid}">\n <ui-select data-ng-model="action.action" theme="bootstrap" data-ng-change="resetActionData(action)" name="action{{$index}}" required>\n <ui-select-match placeholder="{{ \'APPLICATION_ACTION\' | translate }}">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="tAction.value as tAction in $automations.services[automation.channel].actions | filter: $select.search">\n <div ng-bind-html="tAction.name | translate | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'APPLICATION_ACTION\' | translate }}\n </span>\n <span data-ng-show="(forms.general[\'action\'+$index].$touched || forms.general.$submitted) && forms.general[\'action\'+$index].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div ng-switch="action.action">\n <action-builder-status ng-switch-when="status" element="action" form="forms.settings"></action-builder-status>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class="row">\n <div class="col-md-12">\n <button type="button" class="btn btn-sm green padding-bottom" data-ng-click="addAction()">\n <i class="fa fa-plus"></i> {{\'APPLICATION_ADD_ACTION\' | translate}}\n </button>\n </div>\n </div>\n </div>\n </div>\n <div class="has-error" data-ng-show="forms.general.$submitted && !automation.All.length && !automation.Any.length">\n <span class="help-block help-block-error form-control">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INSERT_AT_LEAST_ONE_CONDITION\' | translate}}.\n </span>\n </div>\n <div class="has-error" data-ng-show="forms.general.$submitted && !automation.Actions.length">\n <span class="help-block help-block-error form-control">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INSERT_AT_LEAST_ONE_ACTION\' | translate}}.\n </span>\n </div>\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}" />\n </div>\n </div>\n </form>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/tools/automation/wizard/wizard.html",'<div class="row">\n <div class="col-md-12">\n <!-- BEGIN PAGE HEADER-->\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-settings"></i>\n <a href="/tools/automations/list">{{ \'APPLICATION_AUTOMATIONS\' | translate }}</a>\n </li>\n </ul>\n </div>\n <!-- END PAGE HEADER-->\n\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-bulb font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_AUTOMATIONS\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="createItem()">\n <wz-step title="{{\'APPLICATION_GENERAL\' | translate}}" canexit="exitValidation(forms.general.$valid)">\n <form name="forms.general" data-ng-submit="submit()" novalidate>\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.general.name.$touched && forms.general.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="forms.general.name.$touched && forms.general.name.$invalid && forms.general.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START STATUS -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_STATUS\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="item.status"\n type="checkbox"\n name="status"\n data-ng-init="item.status = 0"\n switch-active="{{ statusSwitch.isActive }}"\n switch-on-text="{{ statusSwitch.onText }}"\n switch-off-text="{{ statusSwitch.offText }}"\n switch-on-color="{{ statusSwitch.onColor }}"\n switch-off-color="{{ statusSwitch.offColor }}"\n switch-animate="{{ statusSwitch.animate }}"\n switch-size="{{ statusSwitch.size }}"\n switch-label="{{ statusSwitch.label }}"\n switch-icon="{{ statusSwitch.icon }}"\n switch-radio-off="{{ statusSwitch.radioOff }}"\n switch-label-width="{{ statusSwitch.labelWidth }}"\n switch-handle-width="{{ statusSwitch.handleWidth }}">\n </div>\n <!-- END STATUS -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" ng-click="next()"/>\n </form>\n </wz-step>\n <wz-step title="{{\'APPLICATION_SETTINGS\' | translate}}" canexit="exitSettingsValidation(forms.settings.$valid)">\n <form name="forms.settings" novalidate>\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-blue-hoki">\n <i class="icon-tag font-blue-hoki"></i>\n <span class="caption-subject">{{ \'APPLICATION_CHANNEL\' | translate }}</span>\n </div>\n </div>\n <div class="portlet-body">\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.channel.$touched || forms.settings.$submitted) && forms.settings.channel.$invalid}">\n <label class="control-label">{{ \'APPLICATION_CHANNEL\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="item.channel" name="channel" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_CHANNEL\' | translate }}">{{$select.selected | capitalize}}</ui-select-match>\n <ui-select-choices repeat="channel in $automations.channels | filter: $select.search">\n <div ng-bind-html="channel | highlight: $select.search | capitalize"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.channel.$touched || forms.settings.$submitted) && forms.settings.channel.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n </div>\n\n <!-- All -->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-blue-hoki">\n <i class="icon-tag font-blue-hoki"></i>\n <span class="caption-subject" ng-bind-html="\'APPLICATION_MEET_ALL_CONDITIONS\' | translate"></span>:\n </div>\n </div>\n <div class="portlet-body">\n <div class="portlet light bordered" ng-repeat="all in item.All">\n <div class="portlet-title">\n <div class="caption font-blue-hoki">\n <span class="caption-subject">{{ \'APPLICATION_ALL\' | translate }} #{{$index+1}}</span>\n </div>\n <div class="actions">\n <a href="#" class="btn red-sunglo btn-icon-only" ng-click="removeCondition(\'All\',$index)"><i class="fa fa-trash"></i></a>\n </div>\n </div>\n <div class="portlet-body">\n <div class="padding-bottom row">\n <div class="col-md-12">\n <condition-builder element="all" serviceindex="item.channel" service="$automations" form="forms.general"></condition-builder>\n </div>\n </div>\n </div>\n </div>\n <div class="row">\n <div class="col-md-12">\n <button type="button" class="btn btn-sm green padding-bottom" data-ng-click="addCondition(\'All\')">\n <i class="fa fa-plus"></i> {{\'APPLICATION_ADD_CONDITION\' | translate}}\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Any -->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-blue-hoki">\n <i class="icon-tag font-blue-hoki"></i>\n <span class="caption-subject" ng-bind-html="\'APPLICATION_MEET_ANY_CONDITIONS\' | translate"></span>:\n </div>\n </div>\n <div class="portlet-body">\n <div class="portlet light bordered" ng-repeat="any in item.Any">\n <div class="portlet-title">\n <div class="caption font-blue-hoki">\n <span class="caption-subject">{{ \'APPLICATION_ANY\' | translate }} #{{$index+1}}</span>\n </div>\n <div class="actions">\n <a href="#" class="btn red-sunglo btn-icon-only" ng-click="removeCondition(\'Any\',$index)"><i class="fa fa-trash"></i></a>\n </div>\n </div>\n <div class="portlet-body">\n <div class="padding-bottom row">\n <div class="col-md-12">\n <condition-builder element="any" serviceindex="item.channel" service="$automations" form="forms.general"></condition-builder>\n </div>\n </div>\n </div>\n </div>\n <div class="row">\n <div class="col-md-12">\n <button type="button" class="btn btn-sm green padding-bottom" data-ng-click="addCondition(\'Any\')">\n <i class="fa fa-plus"></i> {{\'APPLICATION_ADD_CONDITION\' | translate}}\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Actions -->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-blue-hoki">\n <i class="icon-tag font-blue-hoki"></i>\n <span class="caption-subject">{{ \'APPLICATION_ACTIONS\' | translate }}</span>:\n </div>\n </div>\n <div class="portlet-body">\n <div class="portlet light bordered" ng-repeat="action in item.Actions">\n <div class="portlet-title">\n <div class="caption font-blue-hoki">\n <span class="caption-subject">{{ \'APPLICATION_ACTIONS\' | translate }} #{{$index+1}}</span>\n </div>\n <div class="actions">\n <a href="#" class="btn red-sunglo btn-icon-only" ng-click="removeAction($index)"><i class="fa fa-trash"></i></a>\n </div>\n </div>\n <div class="portlet-body">\n <div class="padding-bottom row">\n <div class="col-md-12">\n <div class="form-group col-md-6" data-ng-class="{\'has-error\': (forms.general[\'action\'+$index].$touched || forms.general.$submitted) && forms.general[\'action\'+$index].$invalid}">\n <ui-select data-ng-model="action.action" theme="bootstrap" data-ng-change="resetActionData(action)" name="action{{$index}}" required>\n <ui-select-match placeholder="{{ \'APPLICATION_ACTION\' | translate }}">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="tAction.value as tAction in $automations.services[item.channel].actions | filter: $select.search">\n <div ng-bind-html="tAction.name | translate | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'APPLICATION_ACTION\' | translate }}\n </span>\n <span data-ng-show="(forms.general[\'action\'+$index].$touched || forms.general.$submitted) && forms.general[\'action\'+$index].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div ng-switch="action.action">\n <action-builder-status ng-switch-when="status" element="action" form="forms.settings"></action-builder-status>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class="row">\n <div class="col-md-12">\n <button type="button" class="btn btn-sm green padding-bottom" data-ng-click="addAction()">\n <i class="fa fa-plus"></i> {{\'APPLICATION_ADD_ACTION\' | translate}}\n </button>\n </div>\n </div>\n </div>\n </div>\n <div class="has-error" data-ng-show="forms.settings.$submitted && !item.All.length && !item.Any.length">\n <span class="help-block help-block-error form-control">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INSERT_AT_LEAST_ONE_CONDITION\' | translate}}.\n </span>\n </div>\n <div class="has-error" data-ng-show="forms.settings.$submitted && !item.Actions.length">\n <span class="help-block help-block-error form-control">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INSERT_AT_LEAST_ONE_ACTION\' | translate}}.\n </span>\n </div>\n <button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" ng-click="next()"/>\n </form>\n </wz-step>\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n <input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n </wz-step>\n </wizard>\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'), -a.put("app/tools/interval/list/list.create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_INTERVAL\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.name.$touched || form.$submitted) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/tools/interval/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-wrench"></i>\n <a href="#">{{ \'APPLICATION_TOOLS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-clock"></i>\n <a href="#">{{ \'APPLICATION_INTERVALS\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-docs font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_INTERVALS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <button class="btn green-jungle " ng-click="createItem()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_INTERVAL\' | translate }}\n </button>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/tools/interval/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getInterval()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-wrench"></i>\n <a href="#">{{ \'APPLICATION_TOOLS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-clock"></i>\n <a href="/tools/intervals/list">{{ \'APPLICATION_INTERVALS\' | translate }}</a>\n <i data-ng-show="interval" class="fa fa-angle-right"></i>\n </li>\n <li data-ng-show="interval">\n <a href="#">{{interval.name}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/interval.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{interval.name}}\n </div>\n <!-- <div class="profile-usertitle-job">\n {{user.role}}\n </div> -->\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.tools.intervals.view.settings\')}">\n <a data-ng-click="deselectAndRedirect(\'/tools/intervals/view/\'+interval.id+\'/settings\')">\n <i class="icon-settings"></i>\n {{ \'APPLICATION_SETTINGS\' | translate}} </a>\n </li>\n'+" <li data-ng-class=\"{active: $state.is('main.tools.intervals.view.subintervals') || $state.is('main.tools.intervals.view.subinterval') || $state.is('main.tools.intervals.view.subintervals.settings')}\">\n <a data-ng-click=\"deselectAndRedirect('/tools/intervals/view/'+interval.id+'/subintervals')\">\n <i class=\"icon-list\"></i>\n {{ 'APPLICATION_SUBINTERVALS' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class=\"profile-content\">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n"),a.put("app/tools/interval/view/view.settings.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_INTERVAL\' | translate}} {{ \'APPLICATION_SETTINGS\' | translate}} </span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n </li>\n </ul>\n </div>\n\n <div class="portlet-body">\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.general" data-ng-submit="forms.general.$valid && updateInterval()" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="interval.name" required/>\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="interval.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END ADVANCED TAB -->\n\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/tools/interval/view/view.subinterval.html",'\n<div class="row" data-ng-init="initSubInterval(true)">\n <div class="col-md-12">\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-notebook font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_NEW_SUBINTERVAL\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="addSubInterval()">\n <wz-step title="{{\'APPLICATION_SETTINGS\' | translate}}" canexit="exitValidation(forms.subinterval.name.$valid)">\n <form name="forms.subinterval" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.subinterval.name.$touched || forms.subinterval.$submitted) && forms.subinterval.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="subinterval.name" required/>\n <span data-ng-show="(forms.subinterval.name.$touched || forms.subinterval.$submitted) && forms.subinterval.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START TIME -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_TIME\' | translate }}</label>\n <div class="input-group input-large">\n <fieldset class="pull-left" ng-disabled="splittedInterval.alwaysTime"><uib-timepicker name="t_from" data-ng-model="splittedInterval.t_from" show-meridian="false" show-spinners="false"></uib-timepicker></fieldset>\n <div class="input-group-addon col-md-1 interval-to pull-left">to</div>\n <fieldset ng-disabled="splittedInterval.alwaysTime"><uib-timepicker name="t_to" data-ng-model="splittedInterval.t_to" show-meridian="false" show-spinners="false"></uib-timepicker></fieldset>\n <label class="control-label pointer-cursor margin-top20"><input\n bs-switch\n class="form-control"\n ng-model="splittedInterval.alwaysTime"\n type="checkbox"\n switch-active="{{ switch.isActive }}"\n switch-on-text="{{\'APPLICATION_YES\' | translate}}"\n switch-off-text="{{\'APPLICATION_NO\' | translate}}"\n switch-on-color="{{ switch.onColor }}"\n switch-off-color="{{ switch.offColor }}"\n switch-animate="{{ switch.animate }}"\n switch-size="{{ switch.size }}"\n switch-label="{{ switch.label }}"\n switch-icon="{{ switch.icon }}"\n switch-radio-off="{{ switch.radioOff }}"\n switch-label-width="{{ switch.labelWidth }}"\n switch-handle-width="{{ switch.handleWidth }}"> {{\'APPLICATION_ALWAYS\' | translate}}</label>\n </div>\n </div>\n <!-- END TIME -->\n\n <!-- START WEEKDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_WEEKDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="splittedInterval.wd_from" theme="bootstrap" name="wd_from">\n <ui-select-match placeholder="">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{weekDay.name | translate}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="splittedInterval.wd_to" theme="bootstrap" name="wd_to">\n <ui-select-match placeholder="">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{weekDay.name | translate}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END WEEKDAY -->\n\n <!-- START MONTHDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTHDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="splittedInterval.md_from" theme="bootstrap" name="md_from">\n <ui-select-match>{{$select.selected===\'always\' ? ($select.selected | capitalize) : $select.selected}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search" ui-disable-choice="splittedInterval.md_to && splittedInterval.md_to!==\'always\' && monthDay>splittedInterval.md_to && monthDay!==\'always\'">\n {{monthDay===\'always\' ? (monthDay | capitalize) : monthDay}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="splittedInterval.md_to" theme="bootstrap" name="md_to">\n <ui-select-match>{{$select.selected===\'always\' ? ($select.selected | capitalize) : $select.selected}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search" ui-disable-choice="splittedInterval.md_from && splittedInterval.md_from!==\'always\' && monthDay<splittedInterval.md_from && monthDay!==\'always\'">\n {{monthDay===\'always\' ? (monthDay | capitalize) : monthDay}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTHDAY -->\n\n\n <!-- START MONTH -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTH\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="splittedInterval.m_from" theme="bootstrap" name="m_from">\n <ui-select-match placeholder="">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{month.name | translate}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="splittedInterval.m_to" theme="bootstrap" name="m_to">\n <ui-select-match placeholder="">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{month.name | translate}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTH -->\n\n\n\n <button class="btn green-haze" type="submit" ng-click="next()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n </form>\n </wz-step>\n\n\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n <input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n </wz-step>\n </wizard>\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/tools/interval/view/view.subintervalSettings.html",'\n<div class="row" data-ng-init="initSubInterval();getSubInterval();">\n <div class="col-md-12">\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-notebook font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_SUBINTERVAL_SETTINGS\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="updateInterval(\'subintervals\')">\n <div class="profile-usertitle-name">\n {{subinterval.name}}\n </div>\n <wz-step title="{{\'APPLICATION_SETTINGS\' | translate}}" canexit="exitValidation(forms.subinterval.name.$valid)">\n <form name="forms.subinterval" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.subinterval.name.$touched || forms.subinterval.$submitted) && forms.subinterval.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="interval.SubIntervals[selectedSubInterval].name" required/>\n <span data-ng-show="(forms.subinterval.name.$touched || forms.subinterval.$submitted) && forms.subinterval.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START TIME -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_TIME\' | translate }}</label>\n <div class="input-group input-large">\n <fieldset class="pull-left" ng-disabled="splittedInterval.alwaysTime"><uib-timepicker name="t_from" data-ng-model="splittedInterval.t_from" show-meridian="false" show-spinners="false"></uib-timepicker></fieldset>\n <div class="input-group-addon col-md-1 interval-to pull-left">to</div>\n <fieldset ng-disabled="splittedInterval.alwaysTime"><uib-timepicker name="t_to" data-ng-model="splittedInterval.t_to" show-meridian="false" show-spinners="false"></uib-timepicker></fieldset>\n <label class="control-label pointer-cursor margin-top20"><input\n bs-switch\n class="form-control"\n ng-model="splittedInterval.alwaysTime"\n type="checkbox"\n switch-active="{{ switch.isActive }}"\n switch-on-text="{{\'APPLICATION_YES\' | translate}}"\n switch-off-text="{{\'APPLICATION_NO\' | translate}}"\n switch-on-color="{{ switch.onColor }}"\n switch-off-color="{{ switch.offColor }}"\n switch-animate="{{ switch.animate }}"\n switch-size="{{ switch.size }}"\n switch-label="{{ switch.label }}"\n switch-icon="{{ switch.icon }}"\n switch-radio-off="{{ switch.radioOff }}"\n switch-label-width="{{ switch.labelWidth }}"\n switch-handle-width="{{ switch.handleWidth }}"> {{\'APPLICATION_ALWAYS\' | translate}}</label>\n </div>\n </div>\n <!-- END TIME -->\n\n <!-- START WEEKDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_WEEKDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="splittedInterval.wd_from" theme="bootstrap" name="wd_from">\n <ui-select-match placeholder="">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{weekDay.name | translate}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="splittedInterval.wd_to" theme="bootstrap" name="wd_to">\n <ui-select-match placeholder="">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{weekDay.name | translate}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END WEEKDAY -->\n\n <!-- START MONTHDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTHDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="splittedInterval.md_from" theme="bootstrap" name="md_from">\n <ui-select-match>{{$select.selected===\'always\' ? ($select.selected | capitalize) : $select.selected}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search" ui-disable-choice="splittedInterval.md_to && splittedInterval.md_to!==\'always\' && monthDay>splittedInterval.md_to && monthDay!==\'always\'">\n {{monthDay===\'always\' ? (monthDay | capitalize) : monthDay}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="splittedInterval.md_to" theme="bootstrap" name="md_to">\n <ui-select-match>{{$select.selected===\'always\' ? ($select.selected | capitalize) : $select.selected}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search" ui-disable-choice="splittedInterval.md_from && splittedInterval.md_from!==\'always\' && monthDay<splittedInterval.md_from && monthDay!==\'always\'">\n {{monthDay===\'always\' ? (monthDay | capitalize) : monthDay}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTHDAY -->\n\n <!-- START MONTH -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTH\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="splittedInterval.m_from" theme="bootstrap" name="m_from">\n <ui-select-match placeholder="">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{month.name | translate}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="splittedInterval.m_to" theme="bootstrap" name="m_to">\n <ui-select-match placeholder="">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{month.name | translate}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTH -->\n\n\n\n <button class="btn green-haze" type="submit" ng-click="next()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n </form>\n </wz-step>\n\n\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n <input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n </wz-step>\n </wizard>\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/tools/interval/view/view.subintervals.html",'<div ui-view class="profile-content">\n<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_SUBINTERVALS\' | translate}}</span>\n </div>\n <div class="actions">\n <div class="btn-group">\n <a class="btn green-jungle " href="/tools/intervals/view/{{interval.id}}/subinterval" data-toggle="dropdown">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_SUBINTERVAL\' | translate }}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div data-ng-if="selectedSubInterval === undefined" ui-grid="gridOptions" ui-grid-resize-columns class="grid" ui-grid-draggable-rows>\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n </div>\n</div>\n</div>\n'),a.put("app/tools/pause/list/list.create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_PAUSE\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.name.$touched || form.$submitted) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/tools/pause/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-wrench"></i>\n <a href="#">{{ \'APPLICATION_TOOLS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-pause"></i>\n <a href="#">{{ \'APPLICATION_PAUSES\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="fa fa-pause font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_PAUSES\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <a class="btn green-jungle" href="#" data-toggle="dropdown" data-ng-click="createItem()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_PAUSE\' | translate }}\n </a>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/tools/pause/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getPause()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-wrench"></i>\n <a href="#">{{ \'APPLICATION_TOOLS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-control-pause"></i>\n <a href="/tools/pauses/list">{{ \'APPLICATION_PAUSES\' | translate }}</a>\n <i data-ng-show="pause" class="fa fa-angle-right"></i>\n </li>\n <li data-ng-show="pause">\n <a href="#">{{pause.name}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/pause.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{pause.name}}\n </div>\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.tools.pauses.view.settings\')}">\n <a data-ng-href="/tools/pauses/view/{{pause.id}}/settings">\n <i class="icon-settings"></i>\n {{ \'APPLICATION_SETTINGS\' | translate}}\n </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/tools/pause/view/view.settings.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_PAUSE\' | translate}} {{ \'APPLICATION_SETTINGS\' | translate}} </span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n </li>\n </ul>\n </div>\n\n <div class="portlet-body">\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.general" data-ng-submit="forms.general.$valid && updatePause()" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="pause.name" required/>\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="pause.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END ADVANCED TAB -->\n\n </div>\n </div>\n </div>\n </div>\n</div>\n'), -a.put("app/tools/scheduler/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-wrench"></i>\n <a href="#">{{ \'APPLICATION_TOOLS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-calendar"></i>\n <a href="#">{{ \'APPLICATION_SCHEDULER\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-link font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_SCHEDULES\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <a class="btn green-jungle" href="/tools/scheduler/wizard" data-toggle="dropdown">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_SCHEDULE\' | translate }}\n </a>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/tools/scheduler/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-wrench"></i>\n <a href="#">{{ \'APPLICATION_TOOLS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-calendar"></i>\n <a href="/tools/scheduler/list">{{ \'APPLICATION_SCHEDULER\' | translate }}</a>\n <i data-ng-show="schedule" class="fa fa-angle-right"></i>\n </li>\n <li data-ng-show="schedule">\n <a href="#">{{schedule.name}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/scheduler.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{schedule.name}}\n </div>\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.tools.scheduler.view.settings\')}">\n <a data-ng-href="/tools/scheduler/view/{{schedule.id}}/settings"><i class="icon-settings"></i> {{ \'APPLICATION_SETTINGS\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/tools/scheduler/view/view.settings.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_SCHEDULE\' | translate}} {{ \'APPLICATION_SETTINGS\' | translate}} </span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_2" data-toggle="tab" data-ng-click="refreshSlider()">{{ \'APPLICATION_CONFIGURATION\' | translate}}</a>\n </li>\n </ul>\n </div>\n\n <div class="portlet-body">\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.general" data-ng-submit="forms.general.$valid && forms.config.$valid && updateSchedule()" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.$submitted && forms.general.name.$invalid) || forms.general.name.$error.pattern}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="schedule.name" data-ng-pattern="settings.patternName" required/>\n <span data-ng-show="forms.general.$submitted && forms.general.name.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_PATTERN_NAME\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START ACTIVE -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_ACTIVE\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="schedule.active"\n type="checkbox"\n name="status"\n switch-active="{{ switches.isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ switches.onColor }}"\n switch-off-color="{{ switches.offColor }}"\n switch-animate="{{ switches.animate }}"\n switch-size="{{ switches.size }}"\n switch-label="{{ switches.label }}"\n switch-icon="{{ switches.icon }}"\n switch-radio-off="{{ switches.radioOff }}"\n switch-label-width="{{ switches.labelWidth }}"\n switch-handle-width="{{ switches.handleWidth }}">\n </div>\n <!-- END ACTIVE -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="schedule.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END GENERAL TAB -->\n <!-- CONFIG TAB -->\n <div class="tab-pane" id="tab_1_2">\n <form name="forms.config" data-ng-switch="schedule.reportType" data-ng-submit="forms.config.$valid && forms.general.$valid && updateSchedule()" data-ng-if="schedule.type===\'report\'" data-ng-init="initReports()" novalidate>\n\n <div class="row">\n\n <!-- START TYPE -->\n <div class="form-group col-md-2" data-ng-class="{\'has-error\': (forms.config.type.$touched || forms.config.$submitted) && forms.config.type.$invalid}">\n <label class="control-label">{{ \'APPLICATION_TYPE\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="schedule.reportType" name="type" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_TYPE\' | translate }}">{{$select.selected | capitalize}}</ui-select-match>\n <ui-select-choices repeat="report in [\'default\', \'custom\'] | filter: $select.search">\n <div ng-bind-html="report | capitalize | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.config.type.$touched || forms.config.$submitted) && forms.config.type.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TYPE -->\n\n\n <!-- START REPORT -->\n <div data-ng-switch-when="default" class="form-group col-md-8" data-ng-class="{\'has-error\': (forms.config.reportId.$touched || forms.config.$submitted) && forms.config.reportId.$invalid}">\n <label class="control-label">{{ \'APPLICATION_REPORT\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="schedule.reportId" name="reportId" theme="bootstrap" on-select="setReportTree($item,$model)" required>\n <ui-select-match placeholder="{{ \'APPLICATION_REPORT\' | translate }}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices group-by="\'parent\'" repeat="report.id as report in defRep | filter: $select.search">\n <div ng-bind-html="report.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.config.reportId.$touched || forms.config.$submitted) && forms.config.reportId.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END REPORT -->\n\n <!-- START REPORT -->\n <div data-ng-switch-when="custom" class="form-group col-md-8" data-ng-class="{\'has-error\': (forms.config.reportId.$touched || forms.config.$submitted) && forms.config.reportId.$invalid}">\n <label class="control-label">{{ \'APPLICATION_REPORT\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="schedule.reportId" name="reportId" theme="bootstrap" on-select="setReportTree($item,$model)" required>\n <ui-select-match placeholder="{{ \'APPLICATION_REPORT\' | translate }}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices group-by="\'parent\'" repeat="report.id as report in cusRep | filter: $select.search">\n <div ng-bind-html="report.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.config.reportId.$touched || forms.config.$submitted) && forms.config.reportId.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END REPORT -->\n\n <!-- START REPORT -->\n <div class="form-group col-md-2" data-ng-class="{\'has-error\': (forms.config.reportOutput.$touched || forms.config.$submitted) && forms.config.reportOutput.$invalid}">\n <label class="control-label">{{ \'APPLICATION_OUTPUT\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="schedule.reportOutput" name="reportOutput" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_OUTPUT\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="output in [\'CSV\',\'PDF\'] | filter: $select.search">\n <div ng-bind-html="output | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.config.reportOutput.$touched || forms.config.$submitted) && forms.config.reportOutput.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END REPORT -->\n\n </div>\n\n <!-- START TODAY -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_RUN_ON\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n data-ng-model="switchValues.today"\n type="checkbox"\n name="status"\n data-ng-change="checkToday()"\n switch-active="{{ switches.isActive }}"\n switch-on-text="{{ \'APPLICATION_TODAY\' | translate }}"\n switch-off-text="{{ \'APPLICATION_RANGE\' | translate }}"\n switch-on-color="{{ switches.onColor }}"\n switch-off-color="{{ switches.offColor }}"\n switch-animate="{{ switches.animate }}"\n switch-size="{{ switches.size }}"\n switch-label="{{ switches.label }}"\n switch-icon="{{ switches.icon }}"\n switch-radio-off="{{ switches.radioOff }}"\n switch-label-width="{{ switches.labelWidth }}"\n switch-handle-width="{{ switches.handleWidth }}">\n </div>\n <!-- END TODAY -->\n\n <!-- START VALIDITY -->\n <div class="form-group" data-ng-if="switchValues.today">\n <label class="control-label">{{\'APPLICATION_VALIDITY\' | translate}}</label>\n <rzslider rz-slider-model="schedule.validityStart" rz-slider-high="schedule.validityEnd" rz-slider-options="validitySlider"></rzslider>\n </div>\n <!-- END VALIDITY -->\n\n <!-- START RANGE -->\n <div class="form-group" data-ng-if="!switchValues.today" data-ng-class="{\'has-error\': (forms.config.range.$touched || forms.config.$submitted) && forms.config.range.$invalid}">\n <label class="control-label">{{ \'APPLICATION_REPORT_RANGE\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="schedule.reportRange" name="range" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_RANGE\' | translate }}">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="range.value as range in reportRanges | filter: $select.search">\n <div ng-bind-html="range.name | highlight: $select.search | translate"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.config.range.$touched || forms.config.$submitted) && forms.config.range.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END RANGE -->\n\n <!-- START TODAY CRON -->\n <div class="form-group" data-ng-if="switchValues.today" data-ng-class="{\'has-error\': (forms.config.cron.$touched || forms.config.$submitted) && forms.config.cron.$invalid}">\n <label class="control-label">{{ \'APPLICATION_EXECUTE_EVERY\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="schedule.cron" name="cron" theme="bootstrap" data-ng-required="switchValues.today">\n <ui-select-match placeholder="{{ \'APPLICATION_EXECUTE_EVERY\' | translate }}">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="cron.value as cron in todayCron | filter: $select.search">\n <div ng-bind-html="cron.name | highlight: $select.search | translate"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.config.cron.$touched || forms.config.$submitted) && forms.config.cron.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TODAY -->\n <div class="row" data-ng-if="!switchValues.today">\n <!-- START CRONTYPE EXEC -->\n <div class="form-group col-md-4" data-ng-class="{\'has-error\': (forms.config.cronType.$touched || forms.config.$submitted) && forms.config.cronType.$invalid}">\n <label class="control-label">{{ \'APPLICATION_EXECUTE_EVERY\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="rangeExec.type" name="cronType" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_EXECUTE_EVERY\' | translate }}">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="type.value as type in cronTypes | filter: $select.search">\n <div ng-bind-html="type.name | highlight: $select.search | translate"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.config.cronType.$touched || forms.config.$submitted) && forms.config.cronType.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CRONTYPE -->\n\n <!-- START WEEKDAY -->\n <div class="form-group col-md-4" data-ng-if="schedule.cronType === \'weekly\'" data-ng-class="{\'has-error\': (forms.config.weekDay.$touched || forms.config.$submitted) && forms.config.weekDay.$invalid}">\n <label class="control-label">{{ \'APPLICATION_WEEKDAYS\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select multiple data-ng-model="rangeExec.weekDays" name="weekDay" theme="bootstrap" data-ng-required="schedule.cronType === \'weekly\'">\n <ui-select-match placeholder="{{ \'APPLICATION_WEEKDAYS\' | translate }}">{{$item.name | translate}}</ui-select-match>\n <ui-select-choices repeat="day.value as day in weekDays | filter: $select.search">\n <div ng-bind-html="day.name | highlight: $select.search | translate"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.config.weekDay.$touched || forms.config.$submitted) && forms.config.weekDay.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END WEEKDAY -->\n\n <!-- START MONTHDAY -->\n <div class="form-group col-md-4" data-ng-if="schedule.cronType === \'monthly\'" data-ng-class="{\'has-error\': (forms.config.monthDay.$touched || forms.config.$submitted) && forms.config.monthDay.$invalid}">\n <label class="control-label">{{ \'APPLICATION_MONTHDAY\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="rangeExec.monthDay" name="monthDay" theme="bootstrap" data-ng-required="schedule.cronType === \'monthly\'">\n <ui-select-match placeholder="{{ \'APPLICATION_MONTHDAY\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="day in monthDays | filter: $select.search">\n <div ng-bind-html="day | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.config.monthDay.$touched || forms.config.$submitted) && forms.config.monthDay.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END MONTHDAY -->\n\n <!-- START HOUR -->\n <div class="form-group col-md-4" data-ng-if="schedule.cronType" data-ng-class="{\'has-error\': (forms.config.hour.$touched || forms.config.$submitted) && forms.config.hour.$invalid}">\n <label class="control-label">{{ \'APPLICATION_HOUR\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="rangeExec.hour" name="hour" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_HOUR\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="hour in hours | filter: $select.search">\n <div ng-bind-html="hour | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.config.hour.$touched || forms.config.$submitted) && forms.config.hour.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END HOUR -->\n </div>\n\n <!-- START SEND MAIL -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_SEND_MAIL\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n data-ng-model="schedule.sendMail"\n type="checkbox"\n name="status"\n switch-active="{{ switches.isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ switches.onColor }}"\n switch-off-color="{{ switches.offColor }}"\n switch-animate="{{ switches.animate }}"\n switch-size="{{ switches.size }}"\n switch-label="{{ switches.label }}"\n switch-icon="{{ switches.icon }}"\n switch-radio-off="{{ switches.radioOff }}"\n switch-label-width="{{ switches.labelWidth }}"\n switch-handle-width="{{ switches.handleWidth }}">\n </div>\n <!-- END SEND MAIL -->\n <div class="row">\n <!-- START ACCOUNT -->\n <div class="form-group col-md-6" data-ng-class="{\'has-error\': (forms.config.MailServerOutId.$touched || forms.config.$submitted) && forms.config.MailServerOutId.$invalid}">\n <label class="control-label">{{ \'APPLICATION_ACCOUNT\' | translate }}<span class="required" data-ng-if="schedule.sendMail" aria-required="true">*</span></label>\n <ui-select data-ng-model="schedule.MailServerOutId" name="MailServerOutId" theme="bootstrap" data-ng-disabled="!schedule.sendMail" data-ng-required="schedule.sendMail">\n <ui-select-match placeholder="{{ \'APPLICATION_ACCOUNT\' | translate }}">{{$select.selected.username}}</ui-select-match>\n <ui-select-choices repeat="account.id as account in mailServers | filter: $select.search">\n <div ng-bind-html="account.username | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.config.MailServerOutId.$touched || forms.config.$submitted) && forms.config.MailServerOutId.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <div class="note note-warning" data-ng-hide="mailServers.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_ACCOUNTS_AVAILABLE\' | translate }}\n </p>\n </div>\n </div>\n <!-- END ACCOUNT -->\n\n <!-- START EMAIL -->\n <div class="form-group col-md-6" data-ng-class="{\'has-error\': (forms.config.$submitted && forms.config.email.$invalid) || forms.config.email.$error.pattern}">\n <label class="control-label">{{\'APPLICATION_EMAIL_ADDRESS\' | translate}}<span data-ng-if="schedule.sendMail" class="required" aria-required="true">*</span></label>\n <input type="email" name="email" placeholder="{{\'APPLICATION_EMAIL_ADDRESS\' | translate}}" class="form-control" data-ng-model="schedule.email" data-ng-disabled="!schedule.sendMail" data-ng-required="schedule.sendMail"/>\n <span data-ng-show="forms.config.$submitted && forms.config.email.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END EMAIL -->\n\n </div>\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END CONFIG TAB -->\n </div>\n </div>\n </div>\n </div>\n</div>\n<!-- <pre>\n {{rangeExec | json}}\n</pre>\n<pre>\n {{schedule | json}}\n</pre> -->\n'),a.put("app/tools/scheduler/wizard/wizard.html",'<div class="col-md-12">\n <!-- BEGIN PAGE HEADER-->\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-wrench"></i>\n <a href="#">{{ \'APPLICATION_TOOLS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-calendar"></i>\n <a href="/tools/scheduler/list">{{ \'APPLICATION_SCHEDULER\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-options"></i>\n <a href="#">{{ \'APPLICATION_WIZARD\' | translate }}</a>\n </li>\n </ul>\n </div>\n <!-- END PAGE HEADER-->\n\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-link font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_SCHEDULE\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="createItem()">\n <wz-step title="{{\'APPLICATION_GENERAL\' | translate}}" canexit="exitValidation(forms.general.$valid)">\n <form name="forms.general" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.$submitted && forms.general.name.$invalid) || forms.general.name.$error.pattern}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" data-ng-pattern="settings.patternName" required/>\n <span data-ng-show="forms.general.$submitted && forms.general.name.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_PATTERN_NAME\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START ACTIVE -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_ACTIVE\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="item.active"\n type="checkbox"\n name="status"\n data-ng-init="item.active = 0"\n switch-active="{{ switches.isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ switches.onColor }}"\n switch-off-color="{{ switches.offColor }}"\n switch-animate="{{ switches.animate }}"\n switch-size="{{ switches.size }}"\n switch-label="{{ switches.label }}"\n switch-icon="{{ switches.icon }}"\n switch-radio-off="{{ switches.radioOff }}"\n switch-label-width="{{ switches.labelWidth }}"\n switch-handle-width="{{ switches.handleWidth }}">\n </div>\n <!-- END ACTIVE -->\n\n <!-- START TYPE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.type.$touched || forms.general.$submitted) && forms.general.type.$invalid}">\n <label class="control-label">{{ \'APPLICATION_TYPE\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="item.type" name="type" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_TYPE\' | translate }}">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="type.value as type in scheduleTypes | filter: $select.search">\n <div ng-bind-html="type.name | highlight: $select.search | translate"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.general.type.$touched || forms.general.$submitted) && forms.general.type.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TYPE -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n <button class="btn green-haze" type="submit" ng-click="next(true)">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n </form>\n </wz-step>\n\n <wz-step title="{{\'APPLICATION_CONFIGURATION\' | translate}}" canexit="exitValidation(forms.config.$valid)">\n <form name="forms.config" data-ng-switch="item.reportType" data-ng-if="item.type===\'report\'" data-ng-init="initReports()" novalidate>\n <div class="row">\n\n <!-- START TYPE -->\n <div class="form-group col-md-2" data-ng-class="{\'has-error\': (forms.config.type.$touched || forms.config.$submitted) && forms.config.type.$invalid}">\n <label class="control-label">{{ \'APPLICATION_TYPE\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="item.reportType" name="type" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_TYPE\' | translate }}">{{$select.selected | capitalize}}</ui-select-match>\n <ui-select-choices repeat="report in [\'default\', \'custom\'] | filter: $select.search">\n <div ng-bind-html="report | capitalize | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.config.type.$touched || forms.config.$submitted) && forms.config.type.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TYPE -->\n\n <!-- START DEFAULT REPORT -->\n <div data-ng-switch-when="default" class="form-group col-md-8" data-ng-class="{\'has-error\': (forms.config.reportId.$touched || forms.config.$submitted) && forms.config.reportId.$invalid}">\n <label class="control-label">{{ \'APPLICATION_REPORT\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="item.reportId" name="reportId" theme="bootstrap" on-select="setReportTree($item,$model)" required>\n <ui-select-match placeholder="{{ \'APPLICATION_REPORT\' | translate }}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices group-by="\'parent\'" repeat="report.id as report in defRep | filter: $select.search">\n <div ng-bind-html="report.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.config.reportId.$touched || forms.config.$submitted) && forms.config.reportId.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END DEFAULT REPORT -->\n\n <!-- START CUSTOM REPORT -->\n <div data-ng-switch-when="custom" class="form-group col-md-8" data-ng-class="{\'has-error\': (forms.config.reportId.$touched || forms.config.$submitted) && forms.config.reportId.$invalid}">\n <label class="control-label">{{ \'APPLICATION_REPORT\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="item.reportId" name="reportId" theme="bootstrap" on-select="setReportTree($item,$model)" required>\n <ui-select-match placeholder="{{ \'APPLICATION_REPORT\' | translate }}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices group-by="\'parent\'" repeat="report.id as report in cusRep | filter: $select.search">\n <div ng-bind-html="report.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.config.reportId.$touched || forms.config.$submitted) && forms.config.reportId.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CUSTOM REPORT -->\n\n <!-- START OUTPUT -->\n <div class="form-group col-md-2" data-ng-class="{\'has-error\': (forms.config.reportOutput.$touched || forms.config.$submitted) && forms.config.reportOutput.$invalid}">\n <label class="control-label">{{ \'APPLICATION_OUTPUT\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="item.reportOutput" name="reportOutput" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_OUTPUT\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="output in [\'CSV\',\'PDF\'] | filter: $select.search">\n <div ng-bind-html="output | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.config.reportOutput.$touched || forms.config.$submitted) && forms.config.reportOutput.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END OUTPUT -->\n\n </div>\n\n <!-- START TODAY -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_RUN_ON\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n data-ng-model="switchValues.today"\n type="checkbox"\n name="status"\n data-ng-change="checkToday()"\n switch-active="{{ switches.isActive }}"\n switch-on-text="{{ \'APPLICATION_TODAY\' | translate }}"\n switch-off-text="{{ \'APPLICATION_RANGE\' | translate }}"\n switch-on-color="{{ switches.onColor }}"\n switch-off-color="{{ switches.offColor }}"\n switch-animate="{{ switches.animate }}"\n switch-size="{{ switches.size }}"\n switch-label="{{ switches.label }}"\n switch-icon="{{ switches.icon }}"\n switch-radio-off="{{ switches.radioOff }}"\n switch-label-width="{{ switches.labelWidth }}"\n switch-handle-width="{{ switches.handleWidth }}">\n </div>\n <!-- END TODAY -->\n\n <!-- START VALIDITY -->\n <div class="form-group" data-ng-if="switchValues.today">\n <label class="control-label">{{\'APPLICATION_VALIDITY\' | translate}}</label>\n <rzslider rz-slider-model="item.validityStart" rz-slider-high="item.validityEnd" rz-slider-options="validitySlider" data-ng-init="item.validityStart = 8;item.validityEnd = 16;"></rzslider>\n </div>\n <!-- END VALIDITY -->\n\n <!-- START RANGE -->\n <div class="form-group" data-ng-if="!switchValues.today" data-ng-class="{\'has-error\': (forms.config.range.$touched || forms.config.$submitted) && forms.config.range.$invalid}">\n <label class="control-label">{{ \'APPLICATION_REPORT_RANGE\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="item.reportRange" name="range" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_RANGE\' | translate }}">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="range.value as range in reportRanges | filter: $select.search">\n <div ng-bind-html="range.name | highlight: $select.search | translate"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.config.range.$touched || forms.config.$submitted) && forms.config.range.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END RANGE -->\n\n <!-- START TODAY CRON EXEC -->\n <div class="form-group" data-ng-if="switchValues.today" data-ng-class="{\'has-error\': (forms.config.cron.$touched || forms.config.$submitted) && forms.config.cron.$invalid}">\n <label class="control-label">{{ \'APPLICATION_EXECUTE_EVERY\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="item.cron" name="cron" theme="bootstrap" data-ng-required="switchValues.today">\n <ui-select-match placeholder="{{ \'APPLICATION_EXECUTE_EVERY\' | translate }}">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="cron.value as cron in todayCron | filter: $select.search">\n <div ng-bind-html="cron.name | highlight: $select.search | translate"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.config.cron.$touched || forms.config.$submitted) && forms.config.cron.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TODAY CRON -->\n <div class="row" data-ng-if="!switchValues.today">\n <!-- START CRONTYPE EXEC -->\n <div class="form-group col-md-4" data-ng-class="{\'has-error\': (forms.config.cronType.$touched || forms.config.$submitted) && forms.config.cronType.$invalid}">\n <label class="control-label">{{ \'APPLICATION_EXECUTE_EVERY\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="rangeExec.type" name="cronType" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_EXECUTE_EVERY\' | translate }}">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="type.value as type in cronTypes | filter: $select.search">\n <div ng-bind-html="type.name | highlight: $select.search | translate"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.config.cronType.$touched || forms.config.$submitted) && forms.config.cronType.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CRONTYPE -->\n\n <!-- START WEEKDAY -->\n <div class="form-group col-md-4" data-ng-if="item.cronType === \'weekly\'" data-ng-class="{\'has-error\': (forms.config.weekDay.$touched || forms.config.$submitted) && forms.config.weekDay.$invalid}">\n <label class="control-label">{{ \'APPLICATION_WEEKDAYS\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select multiple data-ng-model="rangeExec.weekDays" name="weekDay" theme="bootstrap" data-ng-required="item.cronType === \'weekly\'">\n <ui-select-match placeholder="{{ \'APPLICATION_WEEKDAYS\' | translate }}">{{$item.name | translate}}</ui-select-match>\n <ui-select-choices repeat="day.value as day in weekDays | filter: $select.search">\n <div ng-bind-html="day.name | highlight: $select.search | translate"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.config.weekDay.$touched || forms.config.$submitted) && forms.config.weekDay.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END WEEKDAY -->\n\n <!-- START MONTHDAY -->\n <div class="form-group col-md-4" data-ng-if="item.cronType === \'monthly\'" data-ng-class="{\'has-error\': (forms.config.monthDay.$touched || forms.config.$submitted) && forms.config.monthDay.$invalid}">\n <label class="control-label">{{ \'APPLICATION_MONTHDAY\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="rangeExec.monthDay" name="monthDay" theme="bootstrap" data-ng-required="item.cronType === \'monthly\'">\n <ui-select-match placeholder="{{ \'APPLICATION_MONTHDAY\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="day in monthDays | filter: $select.search">\n <div ng-bind-html="day | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.config.monthDay.$touched || forms.config.$submitted) && forms.config.monthDay.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END MONTHDAY -->\n\n <!-- START HOUR -->\n <div class="form-group col-md-4" data-ng-if="item.cronType" data-ng-class="{\'has-error\': (forms.config.hour.$touched || forms.config.$submitted) && forms.config.hour.$invalid}">\n <label class="control-label">{{ \'APPLICATION_HOUR\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="rangeExec.hour" name="hour" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_HOUR\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="hour in hours | filter: $select.search">\n <div ng-bind-html="hour | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.config.hour.$touched || forms.config.$submitted) && forms.config.hour.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END HOUR -->\n </div>\n\n <!-- START SEND MAIL -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_SEND_MAIL\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n data-ng-model="item.sendMail"\n type="checkbox"\n name="status"\n data-ng-init="item.sendMail = 0"\n switch-active="{{ switches.isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ switches.onColor }}"\n switch-off-color="{{ switches.offColor }}"\n switch-animate="{{ switches.animate }}"\n switch-size="{{ switches.size }}"\n switch-label="{{ switches.label }}"\n switch-icon="{{ switches.icon }}"\n switch-radio-off="{{ switches.radioOff }}"\n switch-label-width="{{ switches.labelWidth }}"\n switch-handle-width="{{ switches.handleWidth }}">\n </div>\n <!-- END SEND MAIL -->\n <div class="row">\n <!-- START ACCOUNT -->\n <div class="form-group col-md-6" data-ng-class="{\'has-error\': (forms.config.MailServerOutId.$touched || forms.config.$submitted) && forms.config.MailServerOutId.$invalid}">\n <label class="control-label">{{ \'APPLICATION_ACCOUNT\' | translate }}<span class="required" data-ng-if="item.sendMail" aria-required="true">*</span></label>\n <ui-select data-ng-model="item.MailServerOutId" name="MailServerOutId" theme="bootstrap" data-ng-disabled="!item.sendMail" data-ng-required="item.sendMail">\n <ui-select-match placeholder="{{ \'APPLICATION_ACCOUNT\' | translate }}">{{$select.selected.username}}</ui-select-match>\n <ui-select-choices repeat="account.id as account in mailServers | filter: $select.search">\n <div ng-bind-html="account.username | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.config.MailServerOutId.$touched || forms.config.$submitted) && forms.config.MailServerOutId.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <div class="note note-warning" data-ng-hide="mailServers.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_ACCOUNTS_AVAILABLE\' | translate }}\n </p>\n </div>\n </div>\n <!-- END ACCOUNT -->\n\n <!-- START EMAIL -->\n <div class="form-group col-md-6" data-ng-class="{\'has-error\': (forms.config.$submitted && forms.config.email.$invalid) || forms.config.email.$error.pattern}">\n <label class="control-label">{{\'APPLICATION_EMAIL_ADDRESS\' | translate}}<span data-ng-if="item.sendMail" class="required" aria-required="true">*</span></label>\n <input type="email" name="email" placeholder="{{\'APPLICATION_EMAIL_ADDRESS\' | translate}}" class="form-control" data-ng-model="item.email" required data-ng-disabled="!item.sendMail" data-ng-required="item.sendMail"/>\n <span data-ng-show="forms.config.$submitted && forms.config.email.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END EMAIL -->\n </div>\n\n <button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n <button class="btn green-haze" type="submit" ng-click="next()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n </form>\n </wz-step>\n\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n <input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n </wz-step>\n </wizard>\n </div>\n </div>\n <!-- END PORTLET-->\n</div>\n<!-- <pre>\n {{rangeExec | json}}\n</pre>\n<pre>\n {{item | json}}\n</pre> -->\n'), -a.put("app/tools/sound/list/list.html",'<div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-music-tone-alt"></i>\n <a href="#">{{ \'APPLICATION_SOUNDS\' | translate }}</a>\n </li>\n </ul>\n <div class="page-toolbar">\n </div>\n</div>\n<!-- END PAGE HEADER-->\n<!-- BEGIN PAGE CONTENT-->\n<!-- Audio Portlets -->\n<div class="headline">\n <h3><i class="icon-music-tone-alt sounds-title-icon"></i> {{ \'APPLICATION_SOUNDS\' | translate }}</h3>\n</div>\n<div class="portlet light bg-inverse">\n <div class="portlet-title collapsible" ng-click="isCollapsed = !isCollapsed">\n <div class="caption">\n <i class="icon-puzzle font-red-flamingo"></i>\n <span class="caption-subject bold font-red-flamingo uppercase">\n {{\'APPLICATION_FILE_UPLOAD\' | translate}} </span>\n </div>\n <div class="tools">\n <a href="" ng-class="{\'collapse\': !isCollapsed, \'expand\' : isCollapsed}">\n </a>\n </div>\n </div>\n <div class="portlet-body" ng-slide-down="!isCollapsed">\n <div class="row" nv-file-drop="" uploader="uploader" filters="queueLimit, customFilter">\n <div class="col-md-4">\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-settings font-green-sharp"></i>\n <span class="caption-subject bold uppercase">{{\'APPLICATION_SELECT_FILES\' | translate}}</span>\n <span class="caption-helper hide"></span>\n </div>\n <div class="actions">\n </div>\n </div>\n <div class="portlet-body">\n <div ng-show="uploader.isHTML5">\n <div class="file-drop-zone margin-bottom-20" nv-file-over="" uploader="uploader" over-class="file-drop-zone-over">\n Base drop zone\n </div>\n </div>\n <span class="btn default btn-file">\n <span class="fileinput-new">\n {{\'APPLICATION_FILE_UPLOAD\' | translate}}</span>\n <input type="file" nv-file-select="" uploader="uploader" />\n </span>\n <span class="btn default btn-file">\n <span class="fileinput-new">\n {{\'APPLICATION_MULTI_FILE_UPLOAD\' | translate}}</span>\n <input type="file" nv-file-select="" uploader="uploader" multiple /><br/>\n </span>\n <p>\n </br>\n {{ \'MESSAGE_SUPPORTED_FORMATS\' | translate }} <b>wav, mp3, gsm, ogg</b>.\n </p>\n <p>\n {{ \'MESSAGE_MAXIMUM_SOUND_UPLOAD_SIZE\' | translate }} <b>15 Mb</b>.\n </p>\n </div>\n </div>\n </div>\n <div class="col-md-8">\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-settings font-green-sharp"></i>\n <span class="caption-subject bold uppercase">{{\'APPLICATION_UPLOAD_QUEUE\' | translate}}</span>\n <span class="caption-helper">{{\'APPLICATION_QUEUE_LENGTH\' | translate}}: {{ uploader.queue.length }}</span>\n </div>\n <div class="actions">\n </div>\n </div>\n <div class="portlet-body">\n <div class="table-scrollable table-scrollable-borderless">\n <table class="table table-hover table-light">\n <thead>\n <tr class="uppercase">\n <th width="50%">{{\'APPLICATION_NAME\' | translate}}</th>\n <th ng-show="uploader.isHTML5">{{\'APPLICATION_SIZE\' | translate}}</th>\n <th ng-show="uploader.isHTML5">{{\'APPLICATION_PROGRESS\' | translate}}</th>\n <th>{{\'APPLICATION_STATUS\' | translate}}</th>\n <th>{{\'APPLICATION_MESSAGE\' | translate}}</th>\n <th>{{\'APPLICATION_ACTIONS\' | translate}}</th>\n </tr>\n </thead>\n <tbody>\n <tr ng-repeat="item in uploader.queue">\n <td><strong>{{ item.file.name }}</strong></td>\n <td ng-show="uploader.isHTML5" nowrap>{{ item.file.size/1024/1024|number:2 }} MB</td>\n <td ng-show="uploader.isHTML5">\n <div class="progress progress-sm" style="margin-bottom: 0;">\n <div class="progress-bar progress-bar-info" role="progressbar" ng-style="{ \'width\': item.progress + \'%\' }"></div>\n </div>\n </td>\n <td class="text-center">\n <span ng-show="item.isSuccess" class="text-success"><i class="glyphicon glyphicon-ok"></i></span>\n <span ng-show="item.isCancel" class="text-info"><i class="glyphicon glyphicon-ban-circle"></i></span>\n <span ng-show="item.isError" class="text-danger"><i class="glyphicon glyphicon-remove"></i></span>\n <span ng-show="item.isUploading" class="text-info"><i class="glyphicon glyphicon-upload"></i></span>\n </td>\n <td class="text-center">\n <span ng-show="item.responseMessage" class="text-danger">{{item.responseMessage}}</span>\n </td>\n <td nowrap>\n <button type="button" class="btn btn-success btn-xs" ng-click="item.upload()" ng-disabled="item.isReady || item.isUploading || item.isSuccess">\n <span class="glyphicon glyphicon-upload"></span> {{\'APPLICATION_UPLOAD\' | translate}}\n </button>\n <button type="button" class="btn btn-warning btn-xs" ng-click="item.cancel()" ng-disabled="!item.isUploading">\n <span class="glyphicon glyphicon-ban-circle"></span> {{\'APPLICATION_CANCEL\' | translate}}\n </button>\n <button type="button" class="btn btn-danger btn-xs" ng-click="item.remove()">\n <span class="glyphicon glyphicon-trash"></span> {{\'APPLICATION_REMOVE\' | translate}}\n </button>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n <div>\n <p>{{\'APPLICATION_UPLOAD_QUEUE_PROGRESS\' | translate}}:</p>\n <div class="progress progress-sm" style="">\n <div class="progress-bar progress-bar-info" role="progressbar" ng-style="{ \'width\': uploader.progress + \'%\' }"></div>\n </div>\n </div>\n <button type="button" class="btn btn-success btn-s" ng-click="uploader.uploadAll()" ng-disabled="!uploader.getNotUploadedItems().length">\n <span class="glyphicon glyphicon-upload"></span> {{\'APPLICATION_UPLOAD_ALL\' | translate}}\n </button>\n <button type="button" class="btn btn-warning btn-s" ng-click="uploader.cancelAll()" ng-disabled="!uploader.isUploading">\n <span class="glyphicon glyphicon-ban-circle"></span> {{\'APPLICATION_CANCEL_ALL\' | translate}}\n </button>\n <button type="button" class="btn btn-danger btn-s" ng-click="uploader.clearQueue()" ng-disabled="!uploader.queue.length">\n <span class="glyphicon glyphicon-trash"></span> {{\'APPLICATION_REMOVE_ALL\' | translate}}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n<div class="row thumbnails" data-ng-init="initList()">\n <div class="row" ng-show="sounds.length == 0">\n <div class="col-md-12 page-404">\n <div class="details">\n <h3>{{ \'MESSAGE_NO_SOUNDS\' | translate }}</h3>\n <p>\n <a href="/">\n {{ \'MESSAGE_RETURN_HOME\' | translate }} </a>\n {{ \'MESSAGE_OR_UPLOAD_SOUND_FILE\' | translate }}\n </p>\n </div>\n </div>\n </div>\n <div class="audio-portlet-wrapper animate-repeat" ng-repeat="sound in sounds">\n <div class="audio-portlet">\n <div class="audio-portlet-title"><a href="#" editable-text="sound.display_name" onbeforesave="updateAudio(sound.id,{display_name : $data})">{{ sound.display_name || "Empty" }}</a></div>\n <img src="../assets/images/note_placeholder.png" alt="" class="img-responsive"/>\n <div class="file-info">\n <div class="audio-tag-wrapper">\n <audio-file-download params="{id:sound.id,controller:\'stream\'}" resource="Sound"></audio-file-download>\n </div>\n <p id="description_div">\n <a href="#" editable-text="sound.description" onbeforesave="updateAudio(sound.id,{description : $data})">{{ sound.description || "Empty" }}</a>\n </p>\n <p class="float-right">\n <button class="btn btn-xs green-meadow" uib-tooltip-template="\'audioInfoTemplate.html\'"><i class="icon-list"></i></button>\n <motion-file-download params="{id:sound.id,controller:\'download\'}" resource="Sound" mimetype="\'audio/\'+sound.original_format" tooltiptext="Download" filename="sound.display_name+\'.\'+sound.original_format" btnclass="{{downloadButtonClass}}" btncontent=\'{{downloadButtonContent}}\'></motion-file-download>\n <button uib-tooltip="Delete" class="btn btn-xs red-sunglo" ng-click="delete(sound.display_name, sound.id)" tooltip="Delete"><i class="icon-close" ></i></button>\n </p>\n </div>\n </div>\n </div>\n <script type="text/ng-template" id="audioInfoTemplate.html">\n <div>\n <ul class="list-unstyled">\n <li><b>Format : </b>{{sound.original_format}}</li>\n <li><b>Duration : </b>{{sound.original_duration | date: \'mm:ss\'}}</li>\n <li><b>Channels : </b>{{sound.original_channelCount}}</li>\n <li><b>Bitrate : </b>{{sound.original_bitRate/1024}} kbs</li>\n <li><b>Sample Rate : </b>{{sound.original_sampleRate/1000}} KHz</li>\n </ul>\n </div>\n </script>\n</div>\n<!-- End Audio Portlets -->\n'),a.put("app/tools/tag/list/list.create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_TAG\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.name.$touched || form.$submitted) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required data-ng-pattern="settings.patternName"/>\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_PATTERN_NAME\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/tools/tag/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-wrench"></i>\n <a href="#">{{ \'APPLICATION_TOOLS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-tag"></i>\n <a href="#">{{ \'APPLICATION_TAGS\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-docs font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_TAGS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <button class="btn green-jungle " ng-click="createItem()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_TAG\' | translate }}\n </button>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/tools/tag/view/view.chat.html",'<div class="row" >\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_TAGGED_CHAT\' | translate}}</span>\n </div>\n </div>\n\n <div class="portlet-body" data-ng-if="tag" data-ng-init="initChat()">\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="spinner-grid" spinner-start-active="false"></span>\n <!-- END UI-GRID SPINNER -->\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/tools/tag/view/view.contacts.html",'<div class="row" >\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_TAGGED_CONTACTS\' | translate}}</span>\n </div>\n </div>\n\n <div class="portlet-body" data-ng-if="tag" data-ng-init="initContacts()">\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="spinner-grid" spinner-start-active="false"></span>\n <!-- END UI-GRID SPINNER -->\n <!-- START TABLE -->\n <div ui-grid="gridOptions" data-ng-if="readyGrid && gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/tools/tag/view/view.fax.html",'<div class="row" >\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_TAGGED_FAX\' | translate}}</span>\n </div>\n </div>\n\n <div class="portlet-body" data-ng-if="tag" data-ng-init="initFax()">\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="spinner-grid" spinner-start-active="false"></span>\n <!-- END UI-GRID SPINNER -->\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/tools/tag/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getTag()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-wrench"></i>\n <a href="#">{{ \'APPLICATION_TOOLS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-tag"></i>\n <a href="/tools/tags/list">{{ \'APPLICATION_TAGS\' | translate }}</a>\n <i data-ng-show="tag" class="fa fa-angle-right"></i>\n </li>\n <li data-ng-show="tag">\n <a href="#">{{tag.name}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/tag.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{tag.name}}\n </div>\n <!-- <div class="profile-usertitle-job">\n {{user.role}}\n </div> -->\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.tools.tags.view.settings\')}">\n <a data-ng-href="/tools/tags/view/{{tag.id}}/settings">\n <i class="icon-settings"></i>\n {{ \'APPLICATION_SETTINGS\' | translate}} </a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.tools.tags.view.chat\')}">\n <a data-ng-href="{{license.chat ? \'/tools/tags/view/\'+tag.id+\'/chat\' : \'#\'}}" data-ng-class="{\'disabled-link\':!license.chat}">\n <i class="icon-bubble"></i>\n {{ \'APPLICATION_CHAT\' | translate}} </a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.tools.tags.view.mail\')}">\n <a data-ng-href="{{license.mail ? \'/tools/tags/view/\'+tag.id+\'/mail\' : \'#\'}}" data-ng-class="{\'disabled-link\':!license.mail}">\n <i class="icon-envelope"></i>\n {{ \'APPLICATION_MAIL\' | translate}} </a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.tools.tags.view.fax\')}">\n <a data-ng-href="{{license.fax ? \'/tools/tags/view/\'+tag.id+\'/fax\' : \'#\'}}" data-ng-class="{\'disabled-link\':!license.fax}">\n <i class="fa fa-fax"></i>\n {{ \'APPLICATION_FAX\' | translate}} </a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.tools.tags.view.sms\')}" >\n <a data-ng-href="{{license.messaging ? \'/tools/tags/view/\'+tag.id+\'/sms\' : \'#\'}}" data-ng-class="{\'disabled-link\':!license.messaging}">\n <i class="glyphicon glyphicon-comment"></i>\n {{ \'APPLICATION_SMS\' | translate}} </a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.tools.tags.view.contacts\')}">\n <a data-ng-href="{{license.cm ? \'/tools/tags/view/\'+tag.id+\'/contacts\' : \'#\'}}" data-ng-class="{\'disabled-link\':!license.cm}">\n <i class="fa fa-users"></i>\n {{ \'APPLICATION_CONTACTS\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/tools/tag/view/view.mail.html",'<div class="row" >\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_TAGGED_MAIL\' | translate}}</span>\n </div>\n </div>\n\n <div class="portlet-body" data-ng-if="tag" data-ng-init="initMail()">\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="spinner-grid" spinner-start-active="false"></span>\n <!-- END UI-GRID SPINNER -->\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/tools/tag/view/view.settings.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_TAG\' | translate}} {{ \'APPLICATION_SETTINGS\' | translate}} </span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n </li>\n </ul>\n </div>\n\n <div class="portlet-body">\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="spinner-grid" spinner-start-active="false"></span>\n <!-- END UI-GRID SPINNER -->\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.general" data-ng-submit="forms.general.$valid && updateTag()" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="tag.name" required data-ng-pattern="settings.patternName"/>\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_PATTERN_NAME\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="tag.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END ADVANCED TAB -->\n\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/tools/tag/view/view.sms.html",'<div class="row" >\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_TAGGED_SMS\' | translate}}</span>\n </div>\n </div>\n\n <div class="portlet-body" data-ng-if="tag" data-ng-init="initSms()">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/tools/template/list/list.html",'<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-wrench"></i>\n <a href="#">{{ \'APPLICATION_TOOLS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-docs"></i>\n <a href="#">{{ \'APPLICATION_TEMPLATES\' | translate }}</a>\n </li>\n </ul>\n </div>\n </div>\n</div>\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-wrench font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_TEMPLATES\' | translate }}</span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <a class="btn green-jungle" href="/tools/templates/wizard">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_TEMPLATE\' | translate }}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/tools/template/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initItem()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-wrench"></i>\n <a href="#">{{ \'APPLICATION_TOOLS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-docs"></i>\n <a href="/tools/templates/list">{{ \'APPLICATION_TEMPLATES\' | translate }}</a>\n <i data-ng-show="item" class="fa fa-angle-right"></i>\n </li>\n <li data-ng-show="item">\n <a href="#">{{item.name}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/template.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{item.name}}\n </div>\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.tools.templates.view.settings\')}">\n <a data-ng-href="/tools/templates/view/{{item.id}}/settings">\n <i class="icon-settings"></i>\n {{ \'APPLICATION_SETTINGS\' | translate}}\n </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/tools/template/view/view.settings.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_SETTINGS\' | translate}}</span>\n </div>\n </div>\n <div class="portlet-body">\n\n <form name="form" data-ng-submit="form.$valid && updateItem()" class="form-horizontal" novalidate>\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': form.name.$invalid && form.$submitted}">\n <div class="col-md-12">\n <div class="row">\n <div class="col-md-2">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}:<span class="required" aria-required="true">*</span></label>\n </div>\n <div class="col-md-10">\n <input type="text" name="name" class="form-control todo-taskbody-taskdesc" placeholder="{{\'APPLICATION_NAME\' | translate}}..." data-ng-model="item.name" required>\n <span data-ng-show="form.name.$invalid && form.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n </div>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group" data-ng-class="{\'has-error\': form.description.$invalid && form.$submitted}">\n <div class="col-md-12">\n <div class="row">\n <div class="col-md-2">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}:</label>\n </div>\n <div class="col-md-10">\n <input type="text" name="description" class="form-control todo-taskbody-taskdesc" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}..." rows="8" data-ng-model="item.description">\n <span data-ng-show="form.description.$invalid && form.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n </div>\n </div>\n <!-- END NAME -->\n\n <hr>\n\n <!-- START SUBJECT -->\n <div class="form-group row" data-ng-class="{\'has-error\': form.subject.$invalid && form.$submitted}">\n <div class="col-md-12">\n <div class="row">\n <div class="col-md-2">\n <label class="control-label">{{\'APPLICATION_SUBJECT\' | translate}}:</label>\n </div>\n <div class="col-md-10">\n <input type="text" name="subject" class="form-control todo-taskbody-taskdesc" placeholder="{{\'APPLICATION_SUBJECT\' | translate}}..." rows="8" data-ng-model="item.subject">\n <span data-ng-show="form.subject.$invalid && form.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n </div>\n </div>\n <!-- END SUJBECT -->\n\n <!-- START HTML -->\n <div class="form-group row" data-ng-class="{\'has-error\': form.text.$invalid && form.$submitted}">\n <div class="col-md-12">\n <div ckeditor="options" ng-model="item.html"></div>\n <span data-ng-show="form.text.$invalid && form.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n <!-- END HTML -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n </div>\n </div>\n</div>\n'), -a.put("app/tools/template/wizard/wizard.html",'<div class="row">\n <div class="col-md-12">\n <!-- BEGIN PAGE HEADER-->\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-wrench"></i>\n <a href="#">{{ \'APPLICATION_TOOLS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-docs"></i>\n <a href="/tools/templates/list">{{ \'APPLICATION_TEMPLATES\' | translate }}</a>\n </li>\n </ul>\n </div>\n <!-- END PAGE HEADER-->\n\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered" data-ng-init="initWizard()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-docs font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_TEMPLATES\' | translate }} FORM</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <form name="form" data-ng-submit="form.$valid && createItem()" class="form-horizontal" novalidate>\n <!-- START HEAD -->\n <div class="form">\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': form.name.$invalid && form.$submitted}">\n <div class="col-md-12">\n <div class="row">\n <div class="col-md-1">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}:<span class="required" aria-required="true">*</span></label>\n </div>\n <div class="col-md-11">\n <input type="text" name="name" class="form-control todo-taskbody-taskdesc" placeholder="{{\'APPLICATION_NAME\' | translate}}..." data-ng-model="item.name" required>\n <span data-ng-show="form.name.$invalid && form.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n </div>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group" data-ng-class="{\'has-error\': form.description.$invalid && form.$submitted}">\n <div class="col-md-12">\n <div class="row">\n <div class="col-md-1">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}:</label>\n </div>\n <div class="col-md-11">\n <input type="text" name="description" class="form-control todo-taskbody-taskdesc" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}..." rows="8" data-ng-model="item.description">\n <span data-ng-show="form.description.$invalid && form.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n </div>\n </div>\n <!-- END NAME -->\n\n <!-- START SUBJECT -->\n <div class="form-group" data-ng-class="{\'has-error\': form.subject.$invalid && form.$submitted}">\n <div class="col-md-12">\n <div class="row">\n <div class="col-md-1">\n <label class="control-label">{{\'APPLICATION_SUBJECT\' | translate}}:</label>\n </div>\n <div class="col-md-11">\n <input type="text" name="subject" class="form-control todo-taskbody-taskdesc" placeholder="{{\'APPLICATION_SUBJECT\' | translate}}..." rows="8" data-ng-model="item.subject">\n <span data-ng-show="form.subject.$invalid && form.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n </div>\n </div>\n <!-- END SUJBECT -->\n\n <!-- START HTML -->\n <div class="form-group row" data-ng-class="{\'has-error\': form.text.$invalid && form.$submitted}">\n <div class="col-md-12">\n <div ckeditor="options" ng-model="item.html"></div>\n <span data-ng-show="form.text.$invalid && form.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n <!-- END HTML -->\n\n </div>\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" data-ng-click="goNext()"/>\n </form>\n </div>\n </div>\n <!-- END PORTLET-->\n </div>\n</div>\n'),a.put("app/tools/trigger/list/list.html",'<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-wrench"></i>\n <a href="#">{{ \'APPLICATION_TOOLS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-bulb"></i>\n <a href="#">{{ \'APPLICATION_TRIGGERS\' | translate }}</a>\n </li>\n </ul>\n </div>\n </div>\n</div>\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-bulb font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_TRIGGERS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <a class="btn green-jungle " href="/tools/triggers/wizard">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_TRIGGER\' | translate }}\n </a>\n </div>\n <!-- <a class="btn btn-icon-only btn-default fullscreen" href="#"></a> -->\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/tools/trigger/view/view.html",'<!-- BEGIN PAGE HEADER-->\n<div class="row" data-ng-init="initView();">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-wrench"></i>\n <a href="#">{{ \'APPLICATION_TOOLS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-bulb"></i>\n <a href="/tools/triggers/list">{{ \'APPLICATION_TRIGGERS\' | translate }}</a>\n <i class="fa fa-angle-right" data-ng-show="trigger"></i>\n </li>\n <li data-ng-show="trigger">\n <a href="#">{{ trigger.description || trigger.name }}</a>\n </li>\n </ul>\n </div>\n\n<!-- END PAGE HEADER-->\n\n<!-- BEGIN PAGE CONTENT-->\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/trigger.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{ trigger.name }}\n </div>\n <div class="profile-usertitle-job">\n {{ trigger.description }}\n </div>\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.tools.triggers.view.settings\')}">\n <a href="/tools/triggers/view/{{trigger.id}}/settings">\n <i class="icon-bulb"></i>\n {{ \'APPLICATION_SETTINGS\' | translate }} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/tools/trigger/view/view.settings.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_SETTINGS\' | translate}}</span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_GENERALS\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_2" data-toggle="tab">{{\'APPLICATION_CONDITIONS\' | translate}} & {{\'APPLICATION_ACTIONS\' | translate}}</a>\n </li>\n </ul>\n </div>\n <div class="portlet-body">\n <form name="forms.general" data-ng-submit="exitValidation(forms.general.$valid) && updateTrigger()" novalidate>\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="trigger.name" required/>\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid && forms.general.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START CHANNEL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.channel.$touched || forms.general.$submitted) && forms.general.channel.$invalid}">\n <label class="control-label">{{\'APPLICATION_CHANNEL\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="channel" placeholder="{{\'APPLICATION_CHANNEL\' | translate}}" class="form-control" data-ng-model="trigger.channel" required readonly/>\n <span data-ng-show="(forms.general.channel.$touched || forms.general.$submitted) && forms.general.channel.$invalid && forms.general.channel.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CHANNEL -->\n\n <!-- START STATUS -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_STATUS\' | translate}}</label>\n </br>\n <input bs-switch class="form-control" ng-model="trigger.status" type="checkbox" name="status" switch-active="{{ recordSwitch.isActive }}" switch-on-text="{{ recordSwitch.onText }}" switch-off-text="{{ recordSwitch.offText }}" switch-on-color="{{ recordSwitch.onColor }}"\n switch-off-color="{{ recordSwitch.offColor }}" switch-animate="{{ recordSwitch.animate }}" switch-size="{{ recordSwitch.size }}" switch-label="{{ recordSwitch.label }}" switch-icon="{{ recordSwitch.icon }}" switch-radio-off="{{ recordSwitch.radioOff }}"\n switch-label-width="{{ recordSwitch.labelWidth }}" switch-handle-width="{{ recordSwitch.handleWidth }}">\n </div>\n <!-- END STATUS -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="trigger.description" />\n </div>\n <!-- END DESCRIPTION -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}" />\n </div>\n <!-- END GENERAL TAB -->\n <div class="tab-pane" id="tab_1_2">\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-blue-hoki">\n <i class="icon-tag font-blue-hoki"></i>\n <span class="caption-subject" ng-bind-html="\'APPLICATION_MEET_ALL_CONDITIONS\' | translate"></span>:\n </div>\n </div>\n <div class="portlet-body">\n <div class="portlet light bordered" ng-repeat="all in trigger.All">\n <div class="portlet-title">\n <div class="caption font-blue-hoki">\n <span class="caption-subject">{{ \'APPLICATION_ALL\' | translate }} #{{$index+1}}</span>\n </div>\n <div class="actions">\n <a href="#" class="btn red-sunglo btn-icon-only" ng-click="removeCondition(\'All\',$index)"><i class="fa fa-trash"></i></a>\n </div>\n </div>\n <div class="portlet-body">\n <div class="padding-bottom row">\n <div class="col-md-12">\n <condition-builder element="all" serviceindex="trigger.channel" service="$triggers" form="forms.general"></condition-builder>\n </div>\n </div>\n </div>\n </div>\n <div class="row">\n <div class="col-md-12">\n <button type="button" class="btn btn-sm green padding-bottom" data-ng-click="addCondition(\'All\')">\n <i class="fa fa-plus"></i> {{\'APPLICATION_ADD_CONDITION\' | translate}}\n </button>\n </div>\n </div>\n </div>\n </div>\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-blue-hoki">\n <i class="icon-tag font-blue-hoki"></i>\n <span class="caption-subject" ng-bind-html="\'APPLICATION_MEET_ANY_CONDITIONS\' | translate"></span>:\n </div>\n </div>\n <div class="portlet-body">\n <div class="portlet light bordered" ng-repeat="any in trigger.Any">\n <div class="portlet-title">\n <div class="caption font-blue-hoki">\n <span class="caption-subject">{{ \'APPLICATION_ANY\' | translate }} #{{$index+1}}</span>\n </div>\n <div class="actions">\n <a href="#" class="btn red-sunglo btn-icon-only" ng-click="removeCondition(\'Any\',$index)"><i class="fa fa-trash"></i></a>\n </div>\n </div>\n <div class="portlet-body">\n <div class="padding-bottom row">\n <div class="col-md-12">\n <condition-builder element="any" serviceindex="trigger.channel" service="$triggers" form="forms.general"></condition-builder>\n </div>\n </div>\n </div>\n </div>\n <div class="row">\n <div class="col-md-12">\n <button type="button" class="btn btn-sm green padding-bottom" data-ng-click="addCondition(\'Any\')">\n <i class="fa fa-plus"></i> {{\'APPLICATION_ADD_CONDITION\' | translate}}\n </button>\n </div>\n </div>\n </div>\n </div>\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-blue-hoki">\n <i class="icon-tag font-blue-hoki"></i>\n <span class="caption-subject">{{ \'APPLICATION_ACTIONS\' | translate }}</span>:\n </div>\n </div>\n <div class="portlet-body">\n <div class="portlet light bordered" ng-repeat="action in trigger.Actions">\n <div class="portlet-title">\n <div class="caption font-blue-hoki">\n <span class="caption-subject">{{ \'APPLICATION_ACTIONS\' | translate }} #{{$index+1}}</span>\n </div>\n <div class="actions">\n <a href="#" class="btn red-sunglo btn-icon-only" ng-click="removeAction($index)"><i class="fa fa-trash"></i></a>\n </div>\n </div>\n <div class="portlet-body">\n <div class="padding-bottom row">\n <div class="col-md-12">\n <div class="form-group col-md-6" data-ng-class="{\'has-error\': (forms.general[\'action\'+$index].$touched || forms.general.$submitted) && forms.general[\'action\'+$index].$invalid}">\n <ui-select data-ng-model="action.action" theme="bootstrap" name="action{{$index}}" data-ng-change="resetActionData(action)" required>\n <ui-select-match placeholder="{{ \'APPLICATION_ACTION\' | translate }}">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="tAction.value as tAction in $triggers.services[trigger.channel].actions | filter: $select.search">\n <div ng-bind-html="tAction.name | translate | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.general[\'action\'+$index].$touched || forms.general.$submitted) && forms.general[\'action\'+$index].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div ng-switch="action.action">\n <action-builder-template ng-switch-when="template" element="action" form="forms.general"></action-builder-template>\n <action-builder-account-template ng-switch-when="accountTemplate" element="action" form="forms.general"></action-builder-account-template>\n <action-builder-integration ng-switch-when="integration" element="action" form="forms.general"></action-builder-integration>\n <action-builder-motion-bar ng-switch-when="motionbar" element="action" form="forms.general"></action-builder-motion-bar>\n <action-builder-jscripty ng-switch-when="jscripty" element="action" form="forms.general"></action-builder-jscripty>\n <action-builder-url-forward ng-switch-when="urlForward" element="action" form="forms.general"></action-builder-url-forward>\n <action-builder-close ng-switch-when="close" element="action" form="forms.general"></action-builder-close>\n <action-builder-forward ng-switch-when="forward" element="action" form="forms.general"></action-builder-forward>\n <action-builder-tag ng-switch-when="tag" element="action" form="forms.general"></action-builder-tag>\n <action-builder-http ng-switch-when="http" element="action" form="forms.general"></action-builder-http>\n <action-builder-email ng-switch-when="email" element="action" form="forms.general"></action-builder-email>\n <action-builder-account-email ng-switch-when="accountEmail" element="action" form="forms.general"></action-builder-account-email>\n <action-builder-account-sms ng-switch-when="accountSms" element="action" form="forms.general"></action-builder-account-sms>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class="row">\n <div class="col-md-12">\n <button type="button" class="btn btn-sm green padding-bottom" data-ng-click="addAction()">\n <i class="fa fa-plus"></i> {{\'APPLICATION_ADD_ACTION\' | translate}}\n </button>\n </div>\n </div>\n </div>\n </div>\n <div class="has-error" data-ng-show="forms.general.$submitted && !trigger.All.length && !trigger.Any.length">\n <span class="help-block help-block-error form-control">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INSERT_AT_LEAST_ONE_CONDITION\' | translate}}.\n </span>\n </div>\n <div class="has-error" data-ng-show="forms.general.$submitted && !trigger.Actions.length">\n <span class="help-block help-block-error form-control">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INSERT_AT_LEAST_ONE_ACTION\' | translate}}.\n </span>\n </div>\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}" />\n </div>\n </div>\n </form>\n </div>\n </div>\n</div>\n</div>\n'),a.put("app/tools/trigger/wizard/wizard.html",'<div class="row">\n <div class="col-md-12">\n <!-- BEGIN PAGE HEADER-->\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-wrench"></i>\n <a href="#">{{ \'APPLICATION_TOOLS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-bulb"></i>\n <a href="/tools/triggers/list">{{ \'APPLICATION_TRIGGERS\' | translate }}</a>\n </li>\n </ul>\n </div>\n <!-- END PAGE HEADER-->\n\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-bulb font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_TRIGGERS\' | translate }} WIZARD</span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="createItem()">\n <wz-step title="{{\'APPLICATION_GENERAL\' | translate}}" canexit="exitValidation(forms.general.$valid)">\n <form name="forms.general" novalidate>\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START STATUS -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_STATUS\' | translate}}</label>\n </br>\n <input bs-switch class="form-control" ng-model="item.status" type="checkbox" name="status" data-ng-init="item.status = 0" switch-active="{{ statusSwitch.isActive }}" switch-on-text="{{ statusSwitch.onText }}" switch-off-text="{{ statusSwitch.offText }}"\n switch-on-color="{{ statusSwitch.onColor }}" switch-off-color="{{ statusSwitch.offColor }}" switch-animate="{{ statusSwitch.animate }}" switch-size="{{ statusSwitch.size }}" switch-label="{{ statusSwitch.label }}" switch-icon="{{ statusSwitch.icon }}"\n switch-radio-off="{{ statusSwitch.radioOff }}" switch-label-width="{{ statusSwitch.labelWidth }}" switch-handle-width="{{ statusSwitch.handleWidth }}">\n </div>\n <!-- END STATUS -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description" />\n </div>\n <!-- END DESCRIPTION -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" ng-click="next()" />\n </form>\n </wz-step>\n <wz-step title="{{\'APPLICATION_SETTINGS\' | translate}}" canexit="exitSettingsValidation(forms.settings.$valid)">\n <form name="forms.settings" novalidate>\n\n <!-- Channel -->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-blue-hoki">\n <i class="icon-tag font-blue-hoki"></i>\n <span class="caption-subject">{{ \'APPLICATION_CHANNEL\' | translate }}</span>\n </div>\n </div>\n <div class="portlet-body">\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.channel.$touched || forms.settings.$submitted) && forms.settings.channel.$invalid}">\n <label class="control-label">{{ \'APPLICATION_CHANNEL\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="item.channel" name="channel" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_CHANNEL\' | translate }}">{{$select.selected | capitalize}}</ui-select-match>\n <ui-select-choices repeat="channel in $triggers.channels | filter: $select.search">\n <div ng-bind-html="channel | highlight: $select.search | capitalize"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.channel.$touched || forms.settings.$submitted) && forms.settings.channel.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n </div>\n\n <!-- All -->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-blue-hoki">\n <i class="icon-tag font-blue-hoki"></i>\n <span class="caption-subject" ng-bind-html="\'APPLICATION_MEET_ALL_CONDITIONS\' | translate"></span>:\n </div>\n </div>\n <div class="portlet-body">\n <div class="portlet light bordered" ng-repeat="all in item.All">\n <div class="portlet-title">\n <div class="caption font-blue-hoki">\n <span class="caption-subject">{{ \'APPLICATION_ALL\' | translate }} #{{$index+1}}</span>\n </div>\n <div class="actions">\n <a href="#" class="btn red-sunglo btn-icon-only" ng-click="removeCondition(\'All\',$index)"><i class="fa fa-trash"></i></a>\n </div>\n </div>\n <div class="portlet-body">\n <div class="padding-bottom row">\n <div class="col-md-12">\n <condition-builder element="all" serviceindex="item.channel" service="$triggers" form="forms.general"></condition-builder>\n </div>\n </div>\n </div>\n </div>\n <div class="row">\n <div class="col-md-12">\n <button type="button" class="btn btn-sm green padding-bottom" data-ng-click="addCondition(\'All\')">\n <i class="fa fa-plus"></i> {{\'APPLICATION_ADD_CONDITION\' | translate}}\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Any -->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-blue-hoki">\n <i class="icon-tag font-blue-hoki"></i>\n <span class="caption-subject" ng-bind-html="\'APPLICATION_MEET_ANY_CONDITIONS\' | translate"></span>:\n </div>\n </div>\n <div class="portlet-body">\n <div class="portlet light bordered" ng-repeat="any in item.Any">\n <div class="portlet-title">\n <div class="caption font-blue-hoki">\n <span class="caption-subject">{{ \'APPLICATION_ANY\' | translate }} #{{$index+1}}</span>\n </div>\n <div class="actions">\n <a href="#" class="btn red-sunglo btn-icon-only" ng-click="removeCondition(\'Any\',$index)"><i class="fa fa-trash"></i></a>\n </div>\n </div>\n <div class="portlet-body">\n <div class="padding-bottom row">\n <div class="col-md-12">\n <condition-builder element="any" serviceindex="item.channel" service="$triggers" form="forms.general"></condition-builder>\n </div>\n </div>\n </div>\n </div>\n <div class="row">\n <div class="col-md-12">\n <button type="button" class="btn btn-sm green padding-bottom" data-ng-click="addCondition(\'Any\')">\n <i class="fa fa-plus"></i> {{\'APPLICATION_ADD_CONDITION\' | translate}}\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Actions -->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-blue-hoki">\n <i class="icon-tag font-blue-hoki"></i>\n <span class="caption-subject">{{ \'APPLICATION_ACTIONS\' | translate }}</span>:\n </div>\n </div>\n <div class="portlet-body">\n <div class="portlet light bordered" ng-repeat="action in item.Actions">\n <div class="portlet-title">\n <div class="caption font-blue-hoki">\n <span class="caption-subject">{{ \'APPLICATION_ACTIONS\' | translate }} #{{$index+1}}</span>\n </div>\n <div class="actions">\n <a href="#" class="btn red-sunglo btn-icon-only" ng-click="removeAction($index)"><i class="fa fa-trash"></i></a>\n </div>\n </div>\n <div class="portlet-body">\n <div class="padding-bottom row">\n <!-- <div class="col-md-12"> -->\n <div class="form-group col-md-6" data-ng-class="{\'has-error\': (forms.general[\'action\'+$index].$touched || forms.general.$submitted) && forms.general[\'action\'+$index].$invalid}">\n <ui-select data-ng-model="action.action" theme="bootstrap" data-ng-change="resetActionData(action)" name="action{{$index}}" required>\n <ui-select-match placeholder="{{ \'APPLICATION_ACTION\' | translate }}">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="tAction.value as tAction in $triggers.services[item.channel].actions | filter: $select.search">\n <div ng-bind-html="tAction.name | translate | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <!-- <span class="help-block">\n {{ \'APPLICATION_ACTION\' | translate }}\n </span> -->\n <span data-ng-show="(forms.general[\'action\'+$index].$touched || forms.general.$submitted) && forms.general[\'action\'+$index].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div ng-switch="action.action">\n <action-builder-template ng-switch-when="template" element="action" form="forms.general"></action-builder-template>\n <action-builder-account-template ng-switch-when="accountTemplate" element="action" form="forms.general"></action-builder-account-template>\n <action-builder-integration ng-switch-when="integration" element="action" form="forms.general"></action-builder-integration>\n <action-builder-motion-bar ng-switch-when="motionbar" element="action" form="forms.general"></action-builder-motion-bar>\n <action-builder-jscripty ng-switch-when="jscripty" element="action" form="forms.general"></action-builder-jscripty>\n <action-builder-url-forward ng-switch-when="urlForward" element="action" form="forms.general"></action-builder-url-forward>\n <action-builder-close ng-switch-when="close" element="action" form="forms.general"></action-builder-close>\n <action-builder-forward ng-switch-when="forward" element="action" form="forms.general"></action-builder-forward>\n <action-builder-tag ng-switch-when="tag" element="action" form="forms.general"></action-builder-tag>\n <action-builder-http ng-switch-when="http" element="action" form="forms.general"></action-builder-http>\n <action-builder-email ng-switch-when="email" element="action" form="forms.general"></action-builder-email>\n <action-builder-account-email ng-switch-when="accountEmail" element="action" form="forms.general"></action-builder-account-email>\n <action-builder-account-sms ng-switch-when="accountSms" element="action" form="forms.general"></action-builder-account-sms>\n </div>\n <!-- </div> -->\n </div>\n </div>\n </div>\n <div class="row">\n <div class="col-md-12">\n <button type="button" class="btn btn-sm green padding-bottom" data-ng-click="addAction()">\n <i class="fa fa-plus"></i> {{\'APPLICATION_ADD_ACTION\' | translate}}\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <div class="has-error" data-ng-show="forms.settings.$submitted && !item.All.length && !item.Any.length">\n <span class="help-block help-block-error form-control">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INSERT_AT_LEAST_ONE_CONDITION\' | translate}}.\n </span>\n </div>\n <div class="has-error" data-ng-show="forms.settings.$submitted && !item.Actions.length">\n <span class="help-block help-block-error form-control">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INSERT_AT_LEAST_ONE_ACTION\' | translate}}.\n </span>\n </div>\n <button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" ng-click="next()" />\n </form>\n </wz-step>\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n <input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}" />\n </wz-step>\n </wizard>\n </div>\n </div>\n <!-- END PORTLET-->\n</div>\n</div>\n<!-- END PAGE CONTENT-->\n'), -a.put("app/tools/trunk/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-wrench"></i>\n <a href="#">{{ \'APPLICATION_TOOLS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-link"></i>\n <a href="#">{{ \'APPLICATION_TRUNKS\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-link font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_TRUNKS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <a class="btn green-jungle" href="/tools/trunks/wizard" data-toggle="dropdown">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_TRUNK\' | translate }}\n </a>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/tools/trunk/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-wrench"></i>\n <a href="#">{{ \'APPLICATION_TOOLS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-link"></i>\n <a href="/tools/trunks/list">{{ \'APPLICATION_TRUNKS\' | translate }}</a>\n <i data-ng-show="trunk" class="fa fa-angle-right"></i>\n </li>\n <li data-ng-show="trunk">\n <a href="#">{{trunk.name}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/trunk.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{trunk.name}}\n </div>\n <p data-ng-if="trunk.active && trunk.registry && trunk.status">({{trunk.status}})</p>\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.tools.trunks.view.settings\')}">\n <a data-ng-href="/tools/trunks/view/{{trunk.name}}/settings"><i class="icon-settings"></i> {{ \'APPLICATION_SETTINGS\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/tools/trunk/view/view.settings.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_TRUNK\' | translate}} {{ \'APPLICATION_SETTINGS\' | translate}} </span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_2" data-toggle="tab">{{ \'APPLICATION_ADVANCED\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_3" data-toggle="tab">{{ \'APPLICATION_OTHER_FIELDS\' | translate}}</a>\n </li>\n </ul>\n </div>\n\n <div class="portlet-body" data-ng-init="getContexts();">\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.general" data-ng-submit="forms.general.$valid && updateTrunk()" novalidate>\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="trunk.name" data-ng-pattern="settings.patternName" required readonly/>\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_PATTERN_NAME\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START ACTIVE -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_ACTIVE\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="trunk.active"\n type="checkbox"\n name="auth"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-off-color="{{ activeSwitch.offColor }}"\n switch-on-color="{{ activeSwitch.onColor }}"\n switch-animate="{{ activeSwitch.animate }}"\n switch-size="{{ activeSwitch.size }}"\n switch-label="{{ activeSwitch.label }}"\n switch-icon="{{ activeSwitch.icon }}"\n switch-radio-off="{{ activeSwitch.radioOff }}"\n switch-label-width="{{ activeSwitch.labelWidth }}"\n switch-handle-width="{{ activeSwitch.handleWidth }}">\n </div>\n <!-- END ACTIVE -->\n <div class="row">\n\n <div class="col-md-6">\n\n <!-- START HOST -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.host.$touched || forms.general.$submitted) && forms.general.host.$invalid}">\n <label class="control-label">{{\'APPLICATION_HOST\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="host" placeholder="{{\'APPLICATION_HOST\' | translate}}" class="form-control" data-ng-model="trunk.host" required/>\n <span class="help-block">\n {{ \'DESCRIPTION_TRUNK_HOST\' | translate }}\n </span>\n <span data-ng-show="(forms.general.host.$touched || forms.general.$submitted) && forms.general.host.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END HOST -->\n\n <!-- START SECRET -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.secret.$touched || forms.general.$submitted) && forms.general.secret.$invalid}">\n <label class="control-label">{{\'APPLICATION_SECRET\' | translate}}</label>\n <input type="password" name="secret" placeholder="{{\'APPLICATION_SECRET\' | translate}}" class="form-control" data-ng-model="trunk.secret">\n <span class="help-block">\n {{ \'DESCRIPTION_TRUNK_SECRET\' | translate }}\n </span>\n <span data-ng-show="(forms.general.secret.$touched || forms.general.$submitted) && forms.general.secret.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END SECRET -->\n\n <!-- START CONTEXT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.context.$touched || forms.general.$submitted) && forms.general.context.$invalid}">\n <label class="control-label">{{\'APPLICATION_CONTEXT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="trunk.context" name="context" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="context.name as context in voiceContexts | filter: $select.search">\n <div ng-bind-html="context.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_TRUNK_VOICE_CONTEXT\' | translate }}\n </span>\n <span data-ng-show="(forms.general.context.$touched || forms.general.$submitted) && forms.general.context.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CONTEXT -->\n\n <!-- START CALLERID -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.callerid.$touched || forms.general.$submitted) && forms.general.callerid.$invalid}">\n <label class="control-label">{{\'APPLICATION_CALLERID\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="callerid" pattern=\'^"[a-zA-Z0-9_.-]*" <[a-zA-Z0-9_.-]*>\' placeholder="{{\'APPLICATION_CALLERID\' | translate}}" class="form-control" data-ng-model="trunk.callerid"/>\n <span class="help-block">\n {{ \'DESCRIPTION_OUTBOUND_CALLERID\' | translate }} "name" <number>\n </span>\n <span data-ng-show="(forms.general.callerid.$touched || forms.general.$submitted) && forms.general.callerid.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CALLERID -->\n\n <!-- START TYPE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.type.$touched || forms.general.$submitted) && forms.general.type.$invalid}">\n <label class="control-label">{{\'APPLICATION_TYPE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="trunk.type" name="type" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n <ui-select-choices repeat="item in [\'user\',\'peer\',\'friend\'] | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search | capitalize"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_TRUNK_TYPE\' | translate }}\n </span>\n <span data-ng-show="(forms.general.type.$touched || forms.general.$submitted) && forms.general.type.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TYPE -->\n\n <!-- START DTMFMODE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.dtmfmode.$touched || forms.general.$submitted) && forms.general.dtmfmode.$invalid}">\n <label class="control-label">{{\'APPLICATION_DTMFMODE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="trunk.dtmfmode" name="dtmfmode" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="item in [\'rfc2833\', \'info\', \'shortinfo\', \'inband\',\'auto\'] | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_TRUNK_DTMFMODE\' | translate }}\n </span>\n <span data-ng-show="(forms.general.dtmfmode.$touched || forms.general.$submitted) && forms.general.dtmfmode.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END DTMFMODE -->\n\n </div>\n\n <div class="col-md-6">\n\n <!-- START DEFAULT USER -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.general.$submitted && forms.general.defaultuser.$invalid}">\n <label class="control-label">{{\'APPLICATION_DEFAULT_USER\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="defaultuser" placeholder="{{\'APPLICATION_DEFAULT_USER\' | translate}}" class="form-control" data-ng-model="trunk.defaultuser" required/>\n <span class="help-block">\n {{ \'DESCRIPTION_TRUNK_DEFAULT_USER\' | translate }}\n </span>\n <span data-ng-show="forms.general.$submitted && (forms.general.defaultuser.$invalid)" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END DEFAULT USER -->\n\n <!-- START NAT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.nat.$touched || forms.general.$submitted) && forms.general.nat.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select multiple data-ng-model="trunk.nat" name="nat" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$item}}</ui-select-match>\n <ui-select-choices repeat="item in [\'yes\', \'no\', \'never\', \'route\', \'force_rport\', \'comedia\'] | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_TRUNK_NAT\' | translate }}\n </span>\n <span data-ng-show="(forms.general.nat.$touched || forms.general.$submitted) && forms.general.nat.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAT -->\n\n <!-- START QUALIFY -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.qualify.$touched || forms.general.$submitted) && forms.general.qualify.$invalid}">\n <label class="control-label">{{\'APPLICATION_QUALIFY\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="trunk.qualify" name="qualify" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n <ui-select-choices repeat="item in [\'yes\',\'no\'] | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search | capitalize"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_TRUNK_QUALIFY\' | translate }}\n </span>\n <span data-ng-show="(forms.general.qualify.$touched || forms.general.$submitted) && forms.general.qualify.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END QUALIFY -->\n\n <!-- START ALLOW -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.allow.$touched || forms.general.$submitted) && forms.general.allow.$invalid}">\n <label class="control-label">{{\'APPLICATION_ALLOW_CODEC\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select multiple data-ng-model="trunk.allow" name="allow" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$item}}</ui-select-match>\n <ui-select-choices repeat="item in [\'g723\',\'gsm\',\'ulaw\',\'alaw\',\'g726\',\'g722\',\'g729\',\'ilbc\'] | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_TRUNK_ALLOW_CODEC\' | translate }}\n </span>\n <span data-ng-show="(forms.general.allow.$touched || forms.general.$submitted) && forms.general.allow.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END ALLOW -->\n\n <!-- START INSECURE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.insecure.$touched || forms.general.$submitted) && forms.general.insecure.$invalid}">\n <label class="control-label">{{\'APPLICATION_INSECURE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select multiple data-ng-model="trunk.insecure" name="insecure" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$item}}</ui-select-match>\n <ui-select-choices repeat="item in [\'port\',\'invite\',\'very\'] | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_TRUNK_INSECURE\' | translate }}\n </span>\n <span data-ng-show="(forms.general.insecure.$touched || forms.general.$submitted) && forms.general.insecure.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INSECURE -->\n\n <!-- START CALLLIMIT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.call_limit.$touched || forms.general.$submitted) && forms.general.call_limit.$invalid}">\n <label class="control-label">{{\'APPLICATION_CALLLIMIT\' | translate}}</label>\n <input type="number" min="0" name="call-limit" placeholder="{{\'APPLICATION_CALLLIMIT\' | translate}}" class="form-control" data-ng-model="trunk.call_limit"/>\n <span class="help-block">\n {{ \'DESCRIPTION_TRUNK_CALLLIMIT\' | translate }}\n </span>\n </div>\n <!-- END CALLLIMIT -->\n\n </div>\n </div>\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="trunk.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END GENERAL TAB -->\n <!-- ADVANCED TAB -->\n <div class="tab-pane" id="tab_1_2">\n <form name="forms.advanced" data-ng-submit="forms.advanced.$valid && updateTrunk()" novalidate>\n <div class="row">\n <div class="col-md-6">\n\n <!-- START REGISTRY -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_REGISTRY\' | translate}}</label>\n <input type="text" name="registry" placeholder="{{\'APPLICATION_REGISTRY\' | translate}}" class="form-control" data-ng-model="trunk.registry"/>\n <span class="help-block">\n {{ \'DESCRIPTION_TRUNK_REGISTRY\' | translate }}\n </span>\n </div>\n <!-- END REGISTRY -->\n\n <!-- START DIRECTMEDIA -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.directmedia.$touched || forms.advanced.$submitted) && forms.advanced.directmedia.$invalid}">\n <label class="control-label">{{\'APPLICATION_DIRECTMEDIA\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="trunk.directmedia" name="directmedia" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n <ui-select-choices repeat="item in [\'yes\', \'no\', \'nonat\', \'update\'] | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search | capitalize"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_TRUNK_DIRECTMEDIA\' | translate }}\n </span>\n <span data-ng-show="(forms.advanced.directmedia.$touched || forms.advanced.$submitted) && forms.advanced.directmedia.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END DIRECTMEDIA -->\n\n <!-- START CALLCOUNTER -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.callcounter.$touched || forms.advanced.$submitted) && forms.advanced.callcounter.$invalid}">\n <label class="control-label">{{\'APPLICATION_CALLCOUNTER\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="trunk.callcounter" name="callcounter" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n <ui-select-choices repeat="item in [\'yes\',\'no\'] | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search | capitalize"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_TRUNK_CALLCOUNTER\' | translate }}\n </span>\n <span data-ng-show="(forms.advanced.callcounter.$touched || forms.advanced.$submitted) && forms.advanced.callcounter.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CALLCOUNTER -->\n\n <!-- START FROMDOMAIN -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.advanced.$submitted && forms.advanced.fromdomain.$invalid}">\n <label class="control-label">{{\'APPLICATION_FROMDOMAIN\' | translate}}</label>\n <input type="text" name="fromdomain" placeholder="{{\'APPLICATION_FROMDOMAIN\' | translate}}" class="form-control" data-ng-model="trunk.fromdomain" />\n <span class="help-block">\n {{ \'DESCRIPTION_TRUNK_FROMDOMAIN\' | translate }}\n </span>\n <span data-ng-show="forms.advanced.$submitted && (forms.advanced.fromdomain.$invalid)" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END FROMDOMAIN -->\n\n <!-- START FROMUSER -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.advanced.$submitted && forms.advanced.fromuser.$invalid}">\n <label class="control-label">{{\'APPLICATION_FROMUSER\' | translate}}</label>\n <input type="text" name="fromuser" placeholder="{{\'APPLICATION_FROMUSER\' | translate}}" class="form-control" data-ng-model="trunk.fromuser" />\n <span class="help-block">\n {{ \'DESCRIPTION_TRUNK_FROMUSER\' | translate }}\n </span>\n <span data-ng-show="forms.advanced.$submitted && (forms.advanced.fromuser.$invalid)" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END FROMUSER -->\n\n </div>\n <div class="col-md-6">\n\n <!-- START OUTBOUNDPROXY -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.advanced.$submitted && forms.advanced.outboundproxy.$invalid}">\n <label class="control-label">{{\'APPLICATION_OUTBOUNDPROXY\' | translate}}</label>\n <input type="text" name="outboundproxy" placeholder="{{\'APPLICATION_OUTBOUNDPROXY\' | translate}}" class="form-control" data-ng-model="trunk.outboundproxy" />\n <span class="help-block">\n {{ \'DESCRIPTION_TRUNK_OUTBOUNDPROXY\' | translate }}\n </span>\n <span data-ng-show="forms.advanced.$submitted && (forms.advanced.outboundproxy.$invalid)" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END OUTBOUNDPROXY -->\n\n <!-- START USEREQPHONE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.usereqphone.$touched || forms.advanced.$submitted) && forms.advanced.usereqphone.$invalid}">\n <label class="control-label">{{\'APPLICATION_USEREQPHONE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="trunk.usereqphone" name="usereqphone" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n <ui-select-choices repeat="item in [\'yes\',\'no\'] | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search | capitalize"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_TRUNK_USEREQPHONE\' | translate }}\n </span>\n <span data-ng-show="(forms.advanced.usereqphone.$touched || forms.advanced.$submitted) && forms.advanced.usereqphone.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END USEREQPHONE -->\n\n <!-- START TRUSTRPID -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.trustrpid.$touched || forms.advanced.$submitted) && forms.advanced.trustrpid.$invalid}">\n <label class="control-label">{{\'APPLICATION_TRUSTRPID\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="trunk.trustrpid" name="trustrpid" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n <ui-select-choices repeat="item in [\'yes\',\'no\'] | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search | capitalize"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_TRUNK_TRUSTRPID\' | translate }}\n </span>\n <span data-ng-show="(forms.advanced.trustrpid.$touched || forms.advanced.$submitted) && forms.advanced.trustrpid.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TRUSTRPID -->\n\n <!-- START SENDRPID -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.sendrpid.$touched || forms.advanced.$submitted) && forms.advanced.sendrpid.$invalid}">\n <label class="control-label">{{\'APPLICATION_SENDRPID\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="trunk.sendrpid" name="sendrpid" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n <ui-select-choices repeat="item in [\'yes\',\'no\'] | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search | capitalize"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_TRUNK_SENDRPID\' | translate }}\n </span>\n <span data-ng-show="(forms.advanced.sendrpid.$touched || forms.advanced.$submitted) && forms.advanced.sendrpid.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END SENDRPID -->\n\n <!-- START ENCRYPTION -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.encryption.$touched || forms.advanced.$submitted) && forms.advanced.encryption.$invalid}">\n <label class="control-label">{{\'APPLICATION_ENCRYPTION\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="trunk.encryption" name="encryption" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n <ui-select-choices repeat="item in [\'yes\',\'no\'] | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search | capitalize"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_TRUNK_ENCRYPTION\' | translate }}\n </span>\n <span data-ng-show="(forms.advanced.encryption.$touched || forms.advanced.$submitted) && forms.advanced.encryption.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END ENCRYPTION -->\n\n <!-- START PORT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.port.$touched || forms.advanced.$submitted) && forms.advanced.port.$invalid}">\n <label class="control-label">{{\'APPLICATION_PORT\' | translate}}</label>\n <input type="number" min="0" name="port" placeholder="{{\'APPLICATION_PORT\' | translate}}" class="form-control" data-ng-model="trunk.port"/>\n <span class="help-block">\n {{ \'DESCRIPTION_TRUNK_PORT\' | translate }}\n </span>\n <span data-ng-show="(forms.advanced.port.$touched || forms.advanced.$submitted) && forms.advanced.port.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PORT -->\n\n <!-- START TRANSPORT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.transport.$touched || forms.advanced.$submitted) && forms.advanced.transport.$invalid}">\n <label class="control-label">{{\'APPLICATION_TRANSPORT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select multiple data-ng-model="trunk.transport" name="transport" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$item}}</ui-select-match>\n <ui-select-choices repeat="item in [\'udp\',\'wss\',\'ws\',\'tcp\',\'tls\'] | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_TRUNK_TRANSPORT\' | translate }}\n </span>\n <span data-ng-show="(forms.advanced.transport.$touched || forms.advanced.$submitted) && forms.advanced.transport.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TRANSPORT -->\n\n </div>\n </div>\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END ADVANCED TAB -->\n <!-- START OTHER FIELDS TAB -->\n <div class="tab-pane" id="tab_1_3">\n <form name="forms.otherFields" data-ng-submit="forms.otherFields.$valid && updateTrunk()" novalidate>\n <div class="row">\n <div class="col-md-6">\n <!-- START OTHER FIELDS-->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_OTHER_FIELDS\' | translate}}</label>\n <textarea name="otherFields" placeholder="{{\'APPLICATION_OTHER_FIELDS\' | translate}}" class="form-control otherfields-col" data-ng-model="trunk.otherFields"></textarea>\n <span class="help-block">\n {{ \'DESCRIPTION_TRUNK_OTHER_FIELDS\' | translate }}\n </span>\n </div>\n <!-- END OTHER FIELDS -->\n </div>\n <div class="col-md-6">\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_EXAMPLE\' | translate}}</label>\n <div class="well">\n <div>host=dynamicp</div>\n <div>secret=********</div>\n <div>regcontext=tammari-internal</div>\n <div>regexten=1005</div>\n <div>dtmfmode=rfc2833</div>\n <div>insecure=invite,port</div>\n <div>canreinvite=yes</div>\n <div>nat=yes</div>\n <div>qualify=yes</div>\n <div>context=merus-sipphone</div>\n <div>pickupgroup=1</div>\n <div>callgroup=1</div>\n <div>mailbox=1000@default</div>\n </div>\n </div>\n </div>\n </div>\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n\n </div>\n <!-- END OTHER FIELDS TAB -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'), -a.put("app/tools/trunk/wizard/wizard.html",'<div class="col-md-12" data-ng-init="initWizard()">\n <!-- BEGIN PAGE HEADER-->\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-wrench"></i>\n <a href="#">{{ \'APPLICATION_TOOLS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-link"></i>\n <a href="/tools/trunks/list">{{ \'APPLICATION_TRUNKS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-options"></i>\n <a href="#">{{ \'APPLICATION_WIZARD\' | translate }}</a>\n </li>\n </ul>\n </div>\n <!-- END PAGE HEADER-->\n\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-link font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_TRUNK\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="createItem()">\n <wz-step title="{{\'APPLICATION_GENERAL\' | translate}}" canexit="exitValidation(forms.general.$valid)">\n <form name="forms.general" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.$submitted && forms.general.name.$invalid) || forms.general.name.$error.pattern}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" data-ng-pattern="settings.patternName" required/>\n <span data-ng-show="forms.general.$submitted && forms.general.name.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_PATTERN_NAME\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START HOST -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.general.$submitted && forms.general.host.$invalid}">\n <label class="control-label">{{\'APPLICATION_HOST\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="host" placeholder="{{\'APPLICATION_HOST\' | translate}}" class="form-control" data-ng-model="item.host" required/>\n <span class="help-block">\n {{ \'DESCRIPTION_TRUNK_HOST\' | translate }}\n </span>\n <span data-ng-show="forms.general.$submitted && forms.general.host.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END HOST -->\n\n <!-- START PASSWORD -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.general.$submitted && forms.general.password.$invalid}">\n <label class="control-label">{{\'APPLICATION_SECRET\' | translate}}</label>\n <input type="password" name="password" placeholder="{{\'APPLICATION_PASSWORD\' | translate}}" class="form-control" data-ng-model="item.secret"/>\n <span class="help-block">\n {{ \'DESCRIPTION_TRUNK_SECRET\' | translate }}\n </span>\n <span data-ng-show="forms.general.$submitted && forms.general.password.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PASSWORD -->\n\n <!-- START DEFAULT USER -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.general.$submitted && forms.general.defaultuser.$invalid}">\n <label class="control-label">{{\'APPLICATION_DEFAULT_USER\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="defaultuser" placeholder="{{\'APPLICATION_DEFAULT\' | translate}} {{\'APPLICATION_USER\' | translate}}" class="form-control" data-ng-model="item.defaultuser" required/>\n <span class="help-block">\n {{ \'DESCRIPTION_TRUNK_DEFAULT_USER\' | translate }}\n </span>\n <span data-ng-show="forms.general.$submitted && (forms.general.defaultuser.$invalid)" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_PASSWORD\' | translate}}.\n </span>\n </div>\n <!-- END DEFAULT USER -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n <button class="btn green-haze" type="submit" ng-click="next(true)">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n </form>\n </wz-step>\n\n <wz-step title="{{\'APPLICATION_ADVANCED\' | translate}}" canexit="exitValidation(forms.advanced.$valid)">\n <form name="forms.advanced" novalidate>\n\n <!-- START REGISTRY -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_REGISTRY\' | translate}}</label>\n <input type="text" name="registry" placeholder="{{\'APPLICATION_REGISTRY\' | translate}}" class="form-control" data-ng-model="item.registry"/>\n <span class="help-block">\n {{ \'DESCRIPTION_TRUNK_REGISTRY\' | translate }}\n </span>\n </div>\n <!-- END REGISTRY -->\n <button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n <button class="btn green-haze" type="submit" ng-click="next()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n </form>\n </wz-step>\n\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n <input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n </wz-step>\n </wizard>\n </div>\n </div>\n <!-- END PORTLET-->\n</div>\n'),a.put("app/tools/variable/list/list.create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_VARIABLE\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.name.$touched || form.$submitted) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/tools/variable/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-wrench"></i>\n <a href="#">{{ \'APPLICATION_TOOLS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-eye"></i>\n <a href="#">{{ \'APPLICATION_VARIABLES\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-docs font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_VARIABLES\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <button class="btn green-jungle " ng-click="createItem()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_VARIABLE\' | translate }}\n </button>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/tools/variable/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getVariable()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-wrench"></i>\n <a href="#">{{ \'APPLICATION_TOOLS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-eye"></i>\n <a href="/tools/variables/list">{{ \'APPLICATION_VARIABLES\' | translate }}</a>\n <i data-ng-show="variable" class="fa fa-angle-right"></i>\n </li>\n <li data-ng-show="variable">\n <a href="#">{{variable.name}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/variable.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{variable.name}}\n </div>\n <!-- <div class="profile-usertitle-job">\n {{user.role}}\n </div> -->\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.tools.variables.view.settings\')}">\n <a data-ng-href="/tools/variables/view/{{variable.id}}/settings">\n <i class="icon-settings"></i>\n {{ \'APPLICATION_SETTINGS\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/tools/variable/view/view.settings.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_VARIABLE\' | translate}} {{ \'APPLICATION_SETTINGS\' | translate}} </span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n </li>\n </ul>\n </div>\n\n <div class="portlet-body">\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.general" data-ng-submit="forms.general.$valid && updateVariable()" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="variable.name" required/>\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="variable.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END ADVANCED TAB -->\n\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/tools/yourdashboard/list/clone.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_CLONE_DASHBOARD\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="forms.dashboard" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.dashboard.name.$touched || forms.dashboard.$submitted) && forms.dashboard.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="(forms.dashboard.name.$touched || forms.dashboard.$submitted) && forms.dashboard.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="ok()" ng-disabled="forms.dashboard.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/tools/yourdashboard/list/create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_DASHBOARD\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="forms.dashboard" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.dashboard.name.$touched || forms.dashboard.$submitted) && forms.dashboard.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="(forms.dashboard.name.$touched || forms.dashboard.$submitted) && forms.dashboard.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="ok()" ng-disabled="forms.dashboard.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/tools/yourdashboard/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-tachometer"></i>\n <a href="/tools/yourdashboards/list">{{ \'APPLICATION_YOUR_DASHBOARDS\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-docs font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_YOUR_DASHBOARDS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <button class="btn green-jungle " ng-click="create()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_DASHBOARD\' | translate }}\n </button>\n </div>\n <!-- <a class="btn btn-icon-only btn-default fullscreen" href="#"></a> -->\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/tools/yourdashboard/show/leaveEditedDashboard.modal.html",'<div class="modal-header" data-ng-init="getContacts()">\n <h3 class="modal-title">{{ \'APPLICATION_WARNING\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <p>{{\'MESSAGE_LEAVE_EDITED_PAGE\' | translate}}</p>\n</div>\n<div class="modal-footer">\n <button class="btn btn-danger" type="button" ng-click="close()">{{ \'APPLICATION_CONTINUE\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/tools/yourdashboard/show/show.html",'<div class="row" style="min-height: 466px;" id="yourDashboardView">\n <div class="col-md-12" ng-init="getDashboard()">\n <adf-dashboard\n data-ng-if="dashboard"\n name="{{dashboard.name}}"\n collapsible="{{dashboard.collapsible}}"\n maximizable="{{dashboard.maximizable}}"\n enableconfirmdelete="{{dashboard.enableconfirmdelete}}"\n structure="{{dashboard.structure}}"\n editable="{{dashboard.editable}}"\n adf-model="dashboard.model"/>\n </div>\n</div>\n'),a.put("app/tools/yourdashboard/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getDashboard()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-tachometer"></i>\n <a href="/tools/yourdashboards/list">{{ \'APPLICATION_YOUR_DASHBOARDS\' | translate }}</a>\n <i data-ng-show="dashboard" class="fa fa-angle-right"></i>\n </li>\n <li data-ng-show="dashboard">\n <a href="#">{{dashboard.name}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/dashboard.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{dashboard.name}}\n </div>\n <!-- <div class="profile-usertitle-job">\n {{user.role}}\n </div> -->\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.tools.yourdashboards.view.settings\')}">\n <a data-ng-href="/tools/yourdashboards/view/{{dashboard.id}}/settings">\n <i class="icon-settings"></i>\n {{ \'APPLICATION_SETTINGS\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/tools/yourdashboard/view/view.settings.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_DASHBOARD\' | translate}} {{ \'APPLICATION_SETTINGS\' | translate}} </span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n </li>\n </ul>\n </div>\n\n <div class="portlet-body">\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.general" data-ng-submit="forms.general.$valid && updateDashboard()" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="dashboard.name" required/>\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START VISIBLE TO ADMIN -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_VISIBLE_TO_ADMIN\' | translate}}</label><br>\n <input\n bs-switch\n ng-model="dashboard.admin"\n type="checkbox"\n switch-active="{{ radioSwitch.isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ radioSwitch.onColor }}"\n switch-off-color="{{ radioSwitch.offColor }}"\n switch-animate="{{ radioSwitch.animate }}"\n switch-size="{{ radioSwitch.size }}"\n switch-label="{{ radioSwitch.label }}"\n switch-icon="{{ radioSwitch.icon }}"\n switch-radio-off="{{ radioSwitch.radioOff }}"\n switch-label-width="{{ radioSwitch.labelWidth }}"\n switch-handle-width="{{ radioSwitch.handleWidth }}">\n </div>\n <!-- END VISIBLE TO ADMIN -->\n\n <!-- START VISIBLE TO USER -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_VISIBLE_TO_USER\' | translate}}</label><br>\n <input\n bs-switch\n ng-model="dashboard.user"\n type="checkbox"\n switch-active="{{ radioSwitch.isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ radioSwitch.onColor }}"\n switch-off-color="{{ radioSwitch.offColor }}"\n switch-animate="{{ radioSwitch.animate }}"\n switch-size="{{ radioSwitch.size }}"\n switch-label="{{ radioSwitch.label }}"\n switch-icon="{{ radioSwitch.icon }}"\n switch-radio-off="{{ radioSwitch.radioOff }}"\n switch-label-width="{{ radioSwitch.labelWidth }}"\n switch-handle-width="{{ radioSwitch.handleWidth }}">\n </div>\n <!-- END VISIBLE TO USER -->\n\n <!-- START VISIBLE TO AGENT -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_VISIBLE_TO_AGENT\' | translate}}</label><br>\n <input\n bs-switch\n ng-model="dashboard.agent"\n type="checkbox"\n switch-active="{{ radioSwitch.isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ radioSwitch.onColor }}"\n switch-off-color="{{ radioSwitch.offColor }}"\n switch-animate="{{ radioSwitch.animate }}"\n switch-size="{{ radioSwitch.size }}"\n switch-label="{{ radioSwitch.label }}"\n switch-icon="{{ radioSwitch.icon }}"\n switch-radio-off="{{ radioSwitch.radioOff }}"\n switch-label-width="{{ radioSwitch.labelWidth }}"\n switch-handle-width="{{ radioSwitch.handleWidth }}">\n </div>\n <!-- END VISIBLE TO AGENT -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="dashboard.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END ADVANCED TAB -->\n\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/zendesk/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-heart"></i>\n <a href="/zendesk/list">{{ \'APPLICATION_ZENDESK\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-heart font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_ZENDESK\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <a class="btn green-jungle" href="/zendesk/wizard" data-toggle="dropdown">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_ACCOUNT\' | translate }}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/zendesk/view/configuration/list/create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_CONFIGURATION\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.name.$touched || form.name.$submitted) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="(form.name.$touched || form.name.$submitted) && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START CHANNEL -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.channel.$touched || form.channel.$submitted) && form.channel.$invalid}">\n <label class="control-label">{{\'APPLICATION_CHANNEL\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="item.channel" name="channel" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_CHANNEL\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="channel.value as channel in channels | filter: $select.search">\n <div data-ng-bind="channel.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form.channel.$touched || form.channel.$submitted) && form.channel.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- START CHANNEL -->\n\n <!-- START VOICE SUBTYPE -->\n <div data-ng-if="item.channel===\'voice\'" class="form-group" data-ng-class="{\'has-error\': (form.channel.$touched || form.channel.$submitted) && form.channel.$invalid}">\n <label class="control-label">{{\'APPLICATION_TYPE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="item.type" name="type" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_TYPE\' | translate}}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="type in [\'Queue\',\'Outbound\'] | filter: $select.search">\n <div data-ng-bind="type | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form.type.$touched || form.type.$submitted) && form.type.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- START CHANNEL -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"/></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'), -a.put("app/zendesk/view/configuration/list/list.html",'<div ui-view class="profile-content">\n <div class="row">\n <div class="col-md-12">\n <div class="portlet light" data-ng-init="initView()">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_CONFIGURATIONS\' | translate}}</span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <a class="btn green-jungle" href="#" data-ng-click="createItem()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_CONFIGURATION\' | translate }}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/zendesk/view/configuration/view/view.html",'<div class="row" data-ng-init="initView();getConfiguration();getCustomVariables();getFields();getTags();">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_CONFIGURATION\' | translate}}: {{configurationName}}</span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_SUBJECT\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_2" data-toggle="tab">{{\'APPLICATION_DESCRIPTION\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_3" data-toggle="tab">{{\'APPLICATION_FIELDS\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_4" data-toggle="tab">{{\'APPLICATION_TAGS\' | translate}}</a>\n </li>\n </ul>\n </div>\n <div class="portlet-body">\n <div class="tab-content">\n <!-- SUBJECT TAB -->\n <div class="tab-pane ui-padding active" id="tab_1_1">\n <div class="row">\n <div class="col-md-11">\n <span class="caption-subject">All following fields will be join by blank space:</span>\n </div>\n <div class="col-md-1 pull-rigth">\n <button class="btn btn-icon-only green" data-ng-click="addItem(\'subject\')"><i class="fa fa-plus"></i></button>\n </div>\n </div>\n <hr>\n <!-- <div id="subject-item-list" ng-scrollbars ng-scrollbars-config="config"> -->\n <div class="row" data-ng-repeat="subjectItem in subjectConfig">\n <div class="col-md-3">\n <ui-select ng-model="subjectItem.type" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeType(subjectItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.title}}</ui-select-match>\n <ui-select-choices repeat="item.type as item in fieldType | filter: $select.search">\n <div ng-bind-html="item.title | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <div class="col-md-8" data-ng-if="subjectItem.type==\'string\'">\n <div class="form-group">\n <input type="text" class="form-control" data-ng-model="subjectItem.content" data-ng-change="updateField(subjectItem)">\n </div>\n </div>\n <div class="col-md-8" data-ng-if="subjectItem.type==\'variable\'">\n <div class="form-group">\n <ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="subjectItem.variableName" data-ng-change="updateField(subjectItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.title}}</ui-select-match>\n <ui-select-choices group-by="groupVariableByGroup" repeat="variable.name as variable in variables | filter: $select.search">\n <div ng-bind-html="variable.title | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <div class="col-md-8" data-ng-if="subjectItem.type==\'customVariable\'">\n <div class="form-group">\n <ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="subjectItem.VariableId" data-ng-change="updateField(subjectItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="variable.id as variable in customVariables | filter: $select.search">\n <div ng-bind-html="variable.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <div class="col-md-1">\n <div class="form-group">\n <button class="btn btn-icon-only red" data-ng-click="removeItem(subjectItem)"><i class="fa fa-times"></i></button>\n </div>\n </div>\n </div>\n <!-- </div> -->\n </div>\n <!-- END SUBJECT TAB -->\n <!-- DESCRIPTION TAB -->\n <div class="tab-pane ui-padding" id="tab_1_2">\n <div class="row">\n <div class="col-md-11">\n <span class="caption-subject">All following fields will be join by new line:</span>\n </div>\n <div class="col-md-1 pull-rigth">\n <button class="btn btn-icon-only green" data-ng-click="addItem(\'description\')"><i class="fa fa-plus"></i></button>\n </div>\n </div>\n <hr>\n <!-- <div id="description-item-list" ng-scrollbars ng-scrollbars-config="config"> -->\n <div class="row" data-ng-repeat="descriptionItem in descriptionConfig">\n <div class="col-md-2">\n <ui-select ng-model="descriptionItem.type" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeDescType(descriptionItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.title}}</ui-select-match>\n <ui-select-choices repeat="item.type as item in descFieldType | filter: $select.search">\n <div ng-bind-html="item.title | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <div class="col-md-9" data-ng-if="descriptionItem.type==\'string\'">\n <div class="form-group">\n <input type="text" class="form-control" data-ng-model="descriptionItem.content" data-ng-change="updateField(descriptionItem)">\n </div>\n </div>\n <div class="col-md-3" data-ng-if="descriptionItem.type==\'keyValue\'">\n <input type="text" class="form-control" placeholder="Key" data-ng-model="descriptionItem.key" data-ng-change="updateField(descriptionItem)">\n </div>\n <div class="col-md-3" data-ng-if="descriptionItem.type==\'keyValue\'">\n <ui-select ng-model="descriptionItem.keyType" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeDescType(descriptionItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.title}}</ui-select-match>\n <ui-select-choices repeat="item.type as item in fieldType | filter: $select.search">\n <div ng-bind-html="item.title | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <div class="col-md-3" data-ng-if="descriptionItem.type==\'keyValue\' && descriptionItem.keyType==\'string\'">\n <input type="text" class="form-control" placeholder="Value" data-ng-model="descriptionItem.keyContent" data-ng-change="updateField(descriptionItem)">\n </div>\n <div class="col-md-3" data-ng-if="descriptionItem.type==\'keyValue\' && descriptionItem.keyType==\'variable\'">\n <div class="form-group">\n <ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="descriptionItem.variableName" data-ng-change="updateField(descriptionItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.title}}</ui-select-match>\n <ui-select-choices group-by="groupVariableByGroup" repeat="variable.name as variable in variables | filter: $select.search">\n <div ng-bind-html="variable.title | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <div class="col-md-3" data-ng-if="descriptionItem.type==\'keyValue\' && descriptionItem.keyType==\'customVariable\'">\n <div class="form-group">\n <ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="descriptionItem.VariableId" data-ng-change="updateField(descriptionItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="variable.id as variable in customVariables | filter: $select.search">\n <div ng-bind-html="variable.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <div class="col-md-1">\n <div class="form-group">\n <button class="btn btn-icon-only red" data-ng-click="removeItem(descriptionItem)"><i class="fa fa-times"></i></button>\n </div>\n </div>\n </div>\n <!-- </div> -->\n </div>\n <!-- END DESCRIPTION TAB -->\n <!-- FIELDS TAB -->\n <div class="tab-pane ui-padding" id="tab_1_3">\n <div class="row">\n <div class="col-md-11">\n <span class="caption-subject">Add how to fill the fields present in your account:</span>\n </div>\n <div class="col-md-1 pull-rigth">\n <button class="btn btn-icon-only green" data-ng-click="addItem(\'field\')"><i class="fa fa-plus"></i></button>\n </div>\n </div>\n <hr>\n <!-- <div id="field-item-list" ng-scrollbars ng-scrollbars-config="config"> -->\n <div class="row" data-ng-repeat="fieldItem in fieldConfig">\n <div class="col-md-3">\n <ui-select ng-model="fieldItem.idField" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeFieldType(fieldItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.title}}</ui-select-match>\n <ui-select-choices repeat="item.id as item in accountFields | filter: $select.search">\n <div ng-bind-html="item.title | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <div class="col-md-8" data-ng-if="getSystemFieldOptions(fieldItem.idField)">\n <div class="form-group">\n <ui-select ng-model="fieldItem.content" theme="bootstrap" ng-disabled="disabled" data-ng-change="updateField(fieldItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="item.value as item in getSystemFieldOptions(fieldItem.idField) | filter: $select.search">\n <div ng-bind-html="item.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField)">\n <div class="form-group">\n <ui-select ng-model="fieldItem.type" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeType(fieldItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.title}}</ui-select-match>\n <ui-select-choices repeat="item.type as item in fieldType | filter: $select.search">\n <div ng-bind-html="item.title | highlight: $select.search | ucfirst"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField) && fieldItem.type === \'string\'">\n <div class="form-group">\n <input type="text" class="form-control" data-ng-model="fieldItem.content" data-ng-change="updateField(fieldItem)">\n </div>\n </div>\n <div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField) && fieldItem.type === \'variable\'">\n <div class="form-group">\n <ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="fieldItem.variableName" data-ng-change="updateField(fieldItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.title}}</ui-select-match>\n <ui-select-choices group-by="groupVariableByGroup" repeat="variable.name as variable in variables | filter: $select.search">\n <div ng-bind-html="variable.title | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField) && fieldItem.type === \'customVariable\'">\n <div class="form-group">\n <ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="fieldItem.VariableId" data-ng-change="updateField(fieldItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="variable.id as variable in customVariables | filter: $select.search">\n <div ng-bind-html="variable.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <div class="col-md-1">\n <div class="form-group">\n <button class="btn btn-icon-only red" data-ng-click="removeItem(fieldItem)"><i class="fa fa-times"></i></button>\n </div>\n </div>\n </div>\n <!-- </div> -->\n </div>\n <!-- END FIELDS TAB -->\n <!-- TAG TAB -->\n <div class="tab-pane ui-padding" id="tab_1_4">\n <div class="row">\n <div class="col-md-12">\n <span class="caption-subject">Select tags that you want add in the ticket:</span>\n </div>\n </div>\n <hr>\n <form name="forms.tags" data-ng-submit="updateTags()" novalidate>\n <!-- TAG -->\n <div class="form-group">\n <ui-select multiple data-ng-model="selectedTags.tags" theme="bootstrap" name="tags" ng-disabled="disabled">\n <ui-select-match placeholder="{{ \'APPLICATION_TAGS\' | translate }}">{{$item.name}}</ui-select-match>\n <ui-select-choices repeat="tag.id as tag in tags | filter: $select.search">\n {{tag.name}}\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END TAG -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END TAG TAB -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/zendesk/view/view.account.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_ACCOUNT\' | translate}}</span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_GENERALS\' | translate}}</a>\n </li>\n </ul>\n </div>\n <div class="portlet-body">\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.formSetting" data-ng-submit="forms.formSetting.$valid && updateItem()" novalidate>\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="account.name" required/>\n <span data-ng-show="forms.formSetting.name.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="account.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n <!-- START USERNAME -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.username.$invalid}">\n <label class="control-label">{{\'APPLICATION_USERNAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="username" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="account.username" required/>\n <span data-ng-show="forms.formSetting.username.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n\n <!-- START REMOTE ADDRESS -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.remoteUri.$invalid}">\n <label class="control-label">{{\'APPLICATION_URI\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="url" name="remoteUri" placeholder="{{\'APPLICATION_URI\' | translate}}" class="form-control" data-ng-model="account.remoteUri" required />\n <span data-ng-show="forms.formSetting.remoteUri.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n\n <!-- START AUTH TYPE -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.authType.$invalid}">\n <label class="control-label">{{\'APPLICATION_AUTHENTICATION_TYPE\' | translate}}</label>\n <ui-select data-ng-model="account.authType" name="authType" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_AUTHENTICATION_TYPE\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n <ui-select-choices repeat="type in [\'password\', \'token\'] | filter: $select.search">\n <div data-ng-bind="type | capitalize | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.formSetting.authType.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- START AUTH TYPE -->\n\n <!-- START PASSWORD -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.password.$invalid}" ng-slide-down="account.authType == \'password\'" lazy-render duration="1">\n <label class="control-label">{{\'APPLICATION_PASSWORD\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="password" name="password" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="account.password" required/>\n <span data-ng-show="forms.formSetting.password.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PASSWORD -->\n\n <!-- START TOKEN -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.token.$invalid}" ng-slide-down="account.authType == \'token\'" lazy-render duration="1">\n <label class="control-label">{{\'APPLICATION_TOKEN\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="token" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="account.token" required/>\n <span data-ng-show="forms.formSetting.token.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TOKEN -->\n\n <!-- START SERVER URL -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.serverUrl.$invalid}">\n <label class="control-label">{{\'APPLICATION_MOTION_ADDRESS\' | translate}}</label>\n <input type="url" name="serverUrl" placeholder="{{\'APPLICATION_MOTION_ADDRESS\' | translate}}" class="form-control" data-ng-model="account.serverUrl"/>\n <span class="help-block">\n {{\'DESCRIPTION_SERVER_URL\' | translate}}.\n </span>\n <span class="help-block help-block-info">\n {{\'MESSAGE_MOTION_ADDRESS_FORMAT\' | translate}}\n </span>\n </div>\n <!-- END SERVER URL -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END GENERAL TAB -->\n\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/zendesk/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-heart"></i>\n <a href="/zendesk/list">{{ \'APPLICATION_ZENDESK\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <a href="#">{{account.name}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img src="assets/images/media/zendesk.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{account.name}}\n </div>\n <div class="profile-usertitle-job">\n {{account.remoteUri}}\n </div>\n </div>\n <!-- END SIDEBAR USER TITLE -->\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.zendesk.view.account\')}">\n <a ng-href="/zendesk/view/{{account.id}}/account">\n <i class="icon-user"></i>\n {{ \'APPLICATION_ACCOUNT\' | translate }} </a>\n </li>\n <li data-ng-class="{active: $state.includes(\'main.zendesk.view.configurations\') || $state.is(\'main.zendesk.view.configuration\')}">\n <a ng-href="/zendesk/view/{{account.id}}/configurations/list">\n <i class="icon-settings"></i>\n {{ \'APPLICATION_CONFIGURATIONS\' | translate }} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/zendesk/wizard/wizard.html",'<!-- BEGIN PAGE HEADER-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-heart"></i>\n <a href="/zendesk/list">{{ \'APPLICATION_ZENDESK\' | translate }}</a>\n </li>\n </ul>\n </div>\n </div>\n</div>\n<!-- END PAGE HEADER-->\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initWizard()">\n <div class="col-md-12">\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-notebook font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_ACCOUNT\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="createItem()">\n <wz-step title="{{\'APPLICATION_ACCOUNT_INFO\' | translate}}" canexit="exitValidation(forms.formSetting.$valid)">\n <form name="forms.formSetting" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="forms.formSetting.name.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n <!-- START USERNAME -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.username.$invalid}">\n <label class="control-label">{{\'APPLICATION_USERNAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="username" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.username" required ng-remote-validate="/api/zendesk/accounts/validate/username"/>\n <span data-ng-show="forms.formSetting.username.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.formSetting.username.$touched || forms.formSetting.$submitted) && forms.formSetting.username.$error.ngRemoteValidate" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_EXIST_USERNAME\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n\n <!-- START REMOTE ADDRESS -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.remoteUri.$invalid}">\n <label class="control-label">{{\'APPLICATION_URI\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="url" name="remoteUri" placeholder="{{\'APPLICATION_URI\' | translate}}" class="form-control" data-ng-model="item.remoteUri" required ng-remote-validate="/api/zendesk/accounts/validate/remoteUri"/>\n <span data-ng-show="forms.formSetting.remoteUri.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.formSetting.remoteUri.$touched || forms.formSetting.$submitted) && forms.formSetting.remoteUri.$error.ngRemoteValidate" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_EXIST_DOMAIN\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n\n <!-- START AUTH TYPE -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.authType.$invalid}">\n <label class="control-label">{{\'APPLICATION_AUTHENTICATION_TYPE\' | translate}}</label>\n <ui-select data-ng-model="item.authType" name="authType" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_AUTHENTICATION_TYPE\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n <ui-select-choices repeat="type in [\'password\', \'token\'] | filter: $select.search">\n <div data-ng-bind="type | capitalize | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.formSetting.authType.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- START AUTH TYPE -->\n\n <!-- START PASSWORD -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.password.$invalid}" ng-slide-down="item.authType == \'password\'" lazy-render duration="1">\n <label class="control-label">{{\'APPLICATION_PASSWORD\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="password" name="password" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.password" required/>\n <span data-ng-show="forms.formSetting.password.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PASSWORD -->\n\n <!-- START TOKEN -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.token.$invalid}" ng-slide-down="item.authType == \'token\'" lazy-render duration="1">\n <label class="control-label">{{\'APPLICATION_TOKEN\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="token" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.token" required/>\n <span data-ng-show="forms.formSetting.token.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TOKEN -->\n\n <!-- START SERVER URL -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.serverUrl.$invalid}">\n <label class="control-label">{{\'APPLICATION_MOTION_ADDRESS\' | translate}}</label>\n <input type="url" name="serverUrl" placeholder="{{\'APPLICATION_MOTION_ADDRESS\' | translate}}" class="form-control" data-ng-model="item.serverUrl"/>\n <span class="help-block">\n {{\'DESCRIPTION_SERVER_URL\' | translate}}.\n </span>\n <span class="help-block help-block-info">\n {{\'MESSAGE_MOTION_ADDRESS_FORMAT\' | translate}}\n </span>\n </div>\n <!-- END SERVER URL -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" data-ng-click="next()"/>\n\n </form>\n </wz-step>\n\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n <input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n </wz-step>\n\n </wizard>\n\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'), -a.put("components/directives/action/accountEmail/actionBuilder.html",'<div data-ng-if="randomName" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$invalid}">\n <ui-select data-ng-model="element.data1" name="data1{{randomName}}" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_ACCOUNT\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="account.id as account in accounts.rows | filter: $select.search">\n <div ng-bind-html="account.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n\n<div data-ng-if="randomName" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data6\'+randomName].$touched || form.$submitted) && form[\'data6\'+randomName].$invalid}">\n <ui-select data-ng-model="element.data6" name="data6{{randomName}}" theme="bootstrap">\n <ui-select-match allow-clear placeholder="{{\'APPLICATION_TEMPLATE\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="template.id as template in templates | filter: $select.search">\n <div ng-bind-html="template.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form[\'data6\'+randomName].$touched || form.$submitted) && form[\'data6\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n\n<div data-ng-if="randomName" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$invalid}">\n <input type="text" ng-model="element.data2" name="data2{{randomName}}" class="form-control" placeholder="{{\'APPLICATION_TO\' | translate}}" required/>\n <span data-ng-show="(form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n\n<div data-ng-if="randomName" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data3\'+randomName].$touched || form.$submitted) && form[\'data3\'+randomName].$invalid}">\n <input type="text" ng-model="element.data3" name="data3{{randomName}}" class="form-control" placeholder="{{\'APPLICATION_CC\' | translate}}"/>\n <span data-ng-show="(form[\'data3\'+randomName].$touched || form.$submitted) && form[\'data3\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n\n<div data-ng-if="randomName && !element.data6" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data4\'+randomName].$touched || form.$submitted) && form[\'data4\'+randomName].$invalid}">\n <input type="text" ng-model="element.data4" name="data4{{randomName}}" class="form-control" placeholder="{{\'APPLICATION_SUBJECT\' | translate}}"/>\n <span data-ng-show="(form[\'data4\'+randomName].$touched || form.$submitted) && form[\'data4\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n\n<div data-ng-if="randomName" class="form-group col-md-12" data-ng-class="{\'has-error\': (form[\'data5\'+randomName].$touched || form.$submitted) && form[\'data5\'+randomName].$invalid}">\n <textarea rows="10" ng-model="element.data5" name="data5{{randomName}}" class="form-control" placeholder="{{\'APPLICATION_TEXT\' | translate}}" data-ng-required="!element.data6"></textarea>\n <span data-ng-show="(form[\'data5\'+randomName].$touched || form.$submitted) && form[\'data5\'+randomName].$error.required" class="help-block help-block-error">\n'+" <strong>{{'APPLICATION_WARNING' | translate}}!</strong> {{'MESSAGE_REQUIRED_FIELD' | translate}}.\n </span>\n</div>\n"),a.put("components/directives/action/accountSms/actionBuilder.html",'<div data-ng-if="randomName" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$invalid}">\n <ui-select data-ng-model="element.data1" name="data1{{randomName}}" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_ACCOUNT\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="account.id as account in accounts.rows | filter: $select.search">\n <div ng-bind-html="account.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n\n<div data-ng-if="randomName" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$invalid}">\n <input type="text" ng-model="element.data2" name="data2{{randomName}}" class="form-control" placeholder="{{\'APPLICATION_TO\' | translate}}" required/>\n <span data-ng-show="(form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n\n<div data-ng-if="randomName" class="form-group col-md-12" data-ng-class="{\'has-error\': (form[\'data3\'+randomName].$touched || form.$submitted) && form[\'data3\'+randomName].$invalid}">\n <textarea rows="10" ng-model="element.data3" name="data3{{randomName}}" class="form-control" placeholder="{{\'APPLICATION_TEXT\' | translate}}"></textarea>\n <span data-ng-show="(form[\'data3\'+randomName].$touched || form.$submitted) && form[\'data3\'+randomName].$error.required" class="help-block help-block-error">\n'+" <strong>{{'APPLICATION_WARNING' | translate}}!</strong> {{'MESSAGE_REQUIRED_FIELD' | translate}}.\n </span>\n</div>\n"),a.put("components/directives/action/accountTemplate/actionBuilder.html",'<div data-ng-if="randomName" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$invalid}">\n <ui-select data-ng-model="element.data1" name="data1{{randomName}}" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_ACCOUNT\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="account.id as account in accounts.rows | filter: $select.search">\n <div ng-bind-html="account.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n\n<div data-ng-if="randomName" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$invalid}">\n <ui-select data-ng-model="element.data2" name="data2{{randomName}}" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_TEMPLATE\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="template.id as template in templates.rows | filter: $select.search">\n <div ng-bind-html="template.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n\n<div data-ng-if="randomName" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data3\'+randomName].$touched || form.$submitted) && form[\'data3\'+randomName].$invalid}">\n <input type="text" ng-model="element.data3" name="data3{{randomName}}" class="form-control" placeholder="{{\'APPLICATION_TO\' | translate}}" required/>\n <span data-ng-show="(form[\'data3\'+randomName].$touched || form.$submitted) && form[\'data3\'+randomName].$error.required" class="help-block help-block-error">\n'+" <strong>{{'APPLICATION_WARNING' | translate}}!</strong> {{'MESSAGE_REQUIRED_FIELD' | translate}}.\n </span>\n</div>\n"),a.put("components/directives/action/close/actionBuilder.html",'<div data-ng-if="randomName" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$invalid}">\n <input type="text" ng-model="element.data1" name="data1{{randomName}}" class="form-control" placeholder="{{ \'APPLICATION_DISPOSITION\' | translate }}" required/>\n <span data-ng-show="(form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$error.required" class="help-block help-block-error">\n'+" <strong>{{'APPLICATION_WARNING' | translate}}!</strong> {{'MESSAGE_REQUIRED_FIELD' | translate}}.\n </span>\n</div>\n"),a.put("components/directives/action/email/actionBuilder.html",'<div data-ng-if="randomName" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data5\'+randomName].$touched || form.$submitted) && form[\'data5\'+randomName].$invalid}">\n <ui-select data-ng-model="element.data5" name="data5{{randomName}}" theme="bootstrap">\n <ui-select-match allow-clear placeholder="{{\'APPLICATION_TEMPLATE\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="template.id as template in templates | filter: $select.search">\n <div ng-bind-html="template.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form[\'data5\'+randomName].$touched || form.$submitted) && form[\'data5\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n\n<div data-ng-if="randomName" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$invalid}">\n <input type="text" ng-model="element.data1" name="data1{{randomName}}" class="form-control" placeholder="{{\'APPLICATION_TO\' | translate}}" required/>\n <span data-ng-show="(form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n\n<div data-ng-if="randomName" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$invalid}">\n <input type="text" ng-model="element.data2" name="data2{{randomName}}" class="form-control" placeholder="{{\'APPLICATION_CC\' | translate}}"/>\n <span data-ng-show="(form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n\n<div data-ng-if="randomName && !element.data5" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data3\'+randomName].$touched || form.$submitted) && form[\'data3\'+randomName].$invalid}">\n <input type="text" ng-model="element.data3" name="data3{{randomName}}" class="form-control" placeholder="{{\'APPLICATION_SUBJECT\' | translate}}"/>\n <span data-ng-show="(form[\'data3\'+randomName].$touched || form.$submitted) && form[\'data3\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n\n<div data-ng-if="randomName" class="form-group col-md-12" data-ng-class="{\'has-error\': (form[\'data4\'+randomName].$touched || form.$submitted) && form[\'data4\'+randomName].$invalid}">\n <textarea rows="10" ng-model="element.data4" name="data4{{randomName}}" class="form-control" placeholder="{{\'APPLICATION_TEXT\' | translate}}" data-ng-required="!element.data5"></textarea>\n <span data-ng-show="(form[\'data4\'+randomName].$touched || form.$submitted) && form[\'data4\'+randomName].$error.required" class="help-block help-block-error">\n'+" <strong>{{'APPLICATION_WARNING' | translate}}!</strong> {{'MESSAGE_REQUIRED_FIELD' | translate}}.\n </span>\n</div>\n"),a.put("components/directives/action/forward/actionBuilder.html",'<div data-ng-if="randomName" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$invalid}">\n <input type="text" ng-model="element.data1" name="data1{{randomName}}" class="form-control" placeholder="{{ \'APPLICATION_TO\' | translate }}" required/>\n <span data-ng-show="(form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$error.required" class="help-block help-block-error">\n'+" <strong>{{'APPLICATION_WARNING' | translate}}!</strong> {{'MESSAGE_REQUIRED_FIELD' | translate}}.\n </span>\n</div>\n"),a.put("components/directives/action/http/actionBuilder.html",'<div data-ng-if="randomName" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$invalid}">\n <ui-select data-ng-model="element.data1" name="data1{{randomName}}" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_METHOD\' | translate}}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="method in methods | filter: $select.search">\n <div ng-bind-html="method | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n\n<div data-ng-if="randomName" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$invalid}">\n <input type="text" ng-model="element.data2" name="data2{{randomName}}" class="form-control" placeholder="URL" required/>\n <span data-ng-show="(form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$error.required" class="help-block help-block-error">\n'+" <strong>{{'APPLICATION_WARNING' | translate}}!</strong> {{'MESSAGE_REQUIRED_FIELD' | translate}}.\n </span>\n</div>\n"),a.put("components/directives/action/integration/actionBuilder.html",'<div data-ng-if="randomName" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$invalid}">\n <ui-select data-ng-model="element.data1" name="data1{{randomName}}" theme="bootstrap" data-ng-change="changeIntegration()" required>\n <ui-select-match placeholder="{{ \'APPLICATION_INTEGRATION\' | translate }}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="integration.state as integration in integrations | filter: $select.search">\n <div ng-bind-html="integration.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{\'APPLICATION_INTEGRATION\' | translate}}\n </span>\n <span data-ng-show="(form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n<div class="form-group col-md-6" data-ng-if="element.data1 && accounts && randomName" data-ng-class="{\'has-error\': (form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$invalid}">\n <ui-select data-ng-model="element.data2" name="data2{{randomName}}" theme="bootstrap" data-ng-change="changeAccount();" required>\n <ui-select-match placeholder="{{\'APPLICATION_ACCOUNT\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="account.id as account in accounts | filter: $select.search">\n <div ng-bind-html="account.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{\'APPLICATION_ACCOUNT\' | translate}}\n </span>\n <span data-ng-show="(form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n<div class="form-group col-md-6" data-ng-if="element.data2 && configurations && randomName" data-ng-class="{\'has-error\': (form[\'data3\'+randomName].$touched || form.$submitted) && form[\'data3\'+randomName].$invalid}">\n <ui-select data-ng-model="element.data3" name="data3{{randomName}}" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_CONFIGURATION\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="config.id as config in configurations | filter: $select.search">\n <div ng-bind-html="config.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{\'APPLICATION_CONFIGURATION\' | translate}}\n </span>\n <span data-ng-show="(form[\'data3\'+randomName].$touched || form.$submitted) && form[\'data3\'+randomName].$error.required" class="help-block help-block-error">\n'+" <strong>{{'APPLICATION_WARNING' | translate}}!</strong> {{'MESSAGE_REQUIRED_FIELD' | translate}}.\n </span>\n</div>\n"),a.put("components/directives/action/jscripty/actionBuilder.html",'<div data-ng-if="randomName" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$invalid}">\n <ui-select data-ng-model="element.data1" name="data1{{randomName}}" theme="bootstrap" required>\n <ui-select-match>{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="project.id as project in projects | filter: $select.search">\n <div ng-bind-html="project.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$error.required" class="help-block help-block-error">\n'+" <strong>{{'APPLICATION_WARNING' | translate}}!</strong> {{'MESSAGE_REQUIRED_FIELD' | translate}}.\n </span>\n</div>\n"),a.put("components/directives/action/motionbar/actionBuilder.html",'<!-- data1: 0 POPUP, 1 URL, 2 WINAPP -->\n<div data-ng-if="randomName" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$invalid}">\n <ui-select data-ng-model="element.data1" name="data1{{randomName}}" theme="bootstrap" required data-ng-change="changeMode();">\n <ui-select-match placeholder="{{ \'APPLICATION_TYPE\' | translate }}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="motionAction.value as motionAction in motionActions | filter: $select.search">\n <div ng-bind-html="motionAction.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'APPLICATION_TYPE\' | translate }}\n </span>\n <span data-ng-show="(form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n\n<!-- data1:0 data2:Template -->\n<div data-ng-if="randomName && element.data1==0" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$invalid}">\n <ui-select data-ng-model="element.data2" name="data2{{randomName}}" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_TEMPLATE\' | translate }}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="template.id as template in templates | filter: $select.search">\n <div ng-bind-html="template.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'APPLICATION_TEMPLATE\' | translate }}\n </span>\n <span data-ng-show="(form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n\n<!-- data1:1 data2:URL -->\n<div data-ng-if="randomName && element.data1==1" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$invalid}">\n <input type="text" ng-model="element.data2" name="data2{{randomName}}" class="form-control" required placeholder="{{ \'APPLICATION_URL\' | translate }}"/>\n <span class="help-block">\n {{ \'APPLICATION_URL\' | translate }}\n </span>\n <span data-ng-show="(form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n\n<!-- data1:2 data2:Application data3:Arguments -->\n<div data-ng-if="randomName && element.data1==2" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$invalid}">\n <input type="text" ng-model="element.data2" name="data2{{randomName}}" class="form-control" required placeholder="{{ \'APPLICATION_APPLICATION\' | translate }}"/>\n <span class="help-block">\n {{ \'APPLICATION_APPLICATION\' | translate }}\n </span>\n <span data-ng-show="(form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n<div data-ng-if="randomName && element.data1==2" class="form-group col-md-6">\n <input type="text" ng-model="element.data3" name="data3{{randomName}}" class="form-control" placeholder="{{ \'APPLICATION_ARGUMENTS\' | translate }}"/>\n <span class="help-block">\n {{ \'APPLICATION_ARGUMENTS\' | translate }}\n </span>\n</div>\n'),a.put("components/directives/action/status/actionBuilder.html",'<div data-ng-if="randomName" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$invalid}">\n <ui-select data-ng-model="element.data1" name="data1{{randomName}}" theme="bootstrap" required>\n <ui-select-match>{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="status.value as status in states | filter: $select.search">\n <div ng-bind-html="status.name | translate | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$error.required" class="help-block help-block-error">\n'+" <strong>{{'APPLICATION_WARNING' | translate}}!</strong> {{'MESSAGE_REQUIRED_FIELD' | translate}}.\n </span>\n</div>\n"),a.put("components/directives/action/tag/actionBuilder.html",'<div data-ng-if="randomName" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$invalid}">\n <ui-select multiple data-ng-model="data.tags" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_TAG\' | translate}}">{{$item.name}}</ui-select-match>\n <ui-select-choices repeat="tag.name as tag in tags | filter:$select.search" class="">\n {{tag.name}}\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$error.required" class="help-block help-block-error">\n'+" <strong>{{'APPLICATION_WARNING' | translate}}!</strong> {{'MESSAGE_REQUIRED_FIELD' | translate}}.\n </span>\n</div>\n"),a.put("components/directives/action/template/actionBuilder.html",'<div data-ng-if="randomName" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$invalid}">\n <ui-select data-ng-model="element.data1" name="data1{{randomName}}" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_TEMPLATE\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="template.id as template in templates | filter: $select.search">\n <div ng-bind-html="template.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n\n<div data-ng-if="randomName" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$invalid}">\n <input type="text" ng-model="element.data2" name="data2{{randomName}}" class="form-control" placeholder="{{\'APPLICATION_TO\' | translate}}" required/>\n <span data-ng-show="(form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$error.required" class="help-block help-block-error">\n'+" <strong>{{'APPLICATION_WARNING' | translate}}!</strong> {{'MESSAGE_REQUIRED_FIELD' | translate}}.\n </span>\n</div>\n"),a.put("components/directives/action/urlforward/actionBuilder.html",'<div data-ng-if="randomName" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$invalid}">\n <ui-select data-ng-model="element.data1" name="data1{{randomName}}" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_TYPE\' | translate }}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="type.value as type in types | filter: $select.search">\n <div ng-bind-html="type.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{\'APPLICATION_TYPE\' | translate}}\n </span>\n <span data-ng-show="(form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n<div class="form-group col-md-6" data-ng-if="element.data1 && randomName" data-ng-class="{\'has-error\': (form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$invalid}">\n <input type="url" ng-model="element.data2" placeholder="{{ \'APPLICATION_URL\' | translate }}" name="data2{{randomName}}" class="form-control" required/>\n <span class="help-block">\n {{\'APPLICATION_URL\' | translate}}\n </span>\n <span data-ng-show="(form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$error.required" class="help-block help-block-error">\n'+" <strong>{{'APPLICATION_WARNING' | translate}}!</strong> {{'MESSAGE_REQUIRED_FIELD' | translate}}.\n </span>\n</div>\n"),a.put("components/directives/condition/conditionBuilder.html",'<div data-ng-if="randomName" class="form-group col-md-4" data-ng-class="{\'has-error\': (form[\'field\'+randomName].$touched || form.$submitted) && form[\'field\'+randomName].$invalid}">\n <ui-select data-ng-model="element.field" name="field{{randomName}}" theme="bootstrap" data-ng-change="checkCondition(element.field)" required>\n <ui-select-match>{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="condition.value as condition in service.services[serviceindex].conditions | filter: $select.search">\n <div ng-bind-html="condition.name | translate | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form[\'field\'+randomName].$touched || form.$submitted) && form[\'field\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n<div data-ng-if="randomName && element.field" class="form-group col-md-4" data-ng-class="{\'has-error\': (form[\'operator\'+randomName].$touched || form.$submitted) && form[\'operator\'+randomName].$invalid}">\n <ui-select data-ng-model="element.operator" name="operator{{randomName}}" theme="bootstrap" required>\n <ui-select-match>{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="operator.value as operator in _.find(service.services[serviceindex].conditions,{value:element.field}).operators | filter: $select.search">\n <div ng-bind-html="operator.name | translate | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form[\'operator\'+randomName].$touched || form.$submitted) && form[\'operator\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n<div class="col-md-4" data-ng-if="elementType === \'input\' && randomName && element.field" data-ng-class="{\'has-error\': (form[\'value\'+randomName].$touched || form.$submitted) && form[\'value\'+randomName].$invalid}">\n <input type="text" ng-model="element.value" class="form-control" name="value{{randomName}}" required/>\n <span data-ng-show="(form[\'value\'+randomName].$touched || form.$submitted) && form[\'value\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n<div class="form-group col-md-4" data-ng-if="elementType === \'select\' && randomName && element.field" data-ng-class="{\'has-error\': (form[\'value\'+randomName].$touched || form.$submitted) && form[\'value\'+randomName].$invalid}">\n <ui-select data-ng-model="element.value" name="value{{randomName}}" theme="bootstrap" required>\n <ui-select-match>{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="value.value as value in values| filter: $select.search">\n <div ng-bind-html="value.name | translate | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form[\'value\'+randomName].$touched || form.$submitted) && form[\'value\'+randomName].$error.required" class="help-block help-block-error">\n'+" <strong>{{'APPLICATION_WARNING' | translate}}!</strong> {{'MESSAGE_REQUIRED_FIELD' | translate}}.\n </span>\n</div>\n"), -a.put("components/factories/xNotificationLicense/xNotificationLicense.html",'<div class="ui-notification alert alert-block" ng-class="class" style="width: 410px;">\n <h4 class="alert-heading">\n <i class="{{icon}}"></i> {{\'APPLICATION_WARNING\' | translate}}! {{\'MESSAGE_YOUR_LICENSE_IS_GOING_TO_EXPIRE\' | translate}}! <a ng-click="more()" style="color: blue;">More.</a>\n </h4>\n</div>\n'),a.put("components/footer/footer.html",'<!-- BEGIN FOOTER -->\n<div class="page-footer" data-ng-init="initFooter()">\n <div class="page-footer-inner">\n xCALLY Motion v. {{info.version}} | 2016 - {{year + 1}} © Powered by Xenialab <ng-bind-html data-ng-if="license.custom && !settings.defaultFooterWhiteLabel && settings.footerWhiteLabel" ng-bind-html="\'| \'+settings.footerWhiteLabel"></ng-bind-html>\n </div>\n <div class="scroll-to-top">\n <i class="icon-arrow-up"></i>\n </div>\n</div>\n<!-- END FOOTER -->\n'),a.put("components/header/header.html",'<!-- BEGIN HEADER INNER -->\n<div class="page-header-inner" data-ng-init="initHeader()">\n <!-- BEGIN LOGO -->\n <div class="page-logo">\n <a href="/">\n <img data-ng-if="settings.defaultLogo || !license.custom" ng-src="assets/images/logo.png" alt="logo" class="logo-default"/>\n <img data-ng-if="!settings.defaultLogo && license.custom" ng-src="api/settings/logo/main/{{settings.logo ? settings.logo : \'logo\'}}" alt="logo" class="logo-default custom-logo" onError="this.onerror=null;this.src=\'assets/images/logo.png\';"/>\n </a>\n <div class="menu-toggler sidebar-toggler" data-ng-click="toggleSidebar()"></div>\n </div>\n\n <!-- END LOGO -->\n <!-- BEGIN HEADER SEARCH BOX -->\n <!-- DOC: Apply "search-form-expanded" right after the "search-form" class to have half expanded search box -->\n <form ng-repeat="call in activeCalls | limitTo:2" class="search-form search-form-expanded">\n <div class="input-group">\n <input type="text" class="form-control" value="{{call.calleridnum}}" readonly>\n <span class="input-group-btn">\n <a href="javascript:;" class="btn submit inactive-link"><i class="icon-earphones-alt"></i></a>\n </span>\n </div>\n </form>\n <!-- END HEADER SEARCH BOX -->\n <!-- BEGIN RESPONSIVE MENU TOGGLER -->\n <a href="javascript:;" class="menu-toggler responsive-toggler" data-toggle="collapse" data-target=".navbar-collapse"></a>\n <!-- END RESPONSIVE MENU TOGGLER -->\n <!-- BEGIN TOP NAVIGATION MENU -->\n <div class="top-menu">\n <ul class="nav navbar-nav pull-right">\n <!-- DOC: Apply "dropdown-dark" class after below "dropdown-extended" to change the dropdown styte -->\n\n <!-- BEGIN USER LOGIN DROPDOWN -->\n <!-- DOC: Apply "dropdown-dark" class after below "dropdown-extended" to change the dropdown styte -->\n <li class="dropdown dropdown-user">\n <a href="#" class="dropdown-toggle" dropdown-menu-hover data-toggle="dropdown" data-close-others="true">\n <img class="img-circle" data-ng-src="api/users/avatar/{{getCurrentUser().userpic || \'unknown_avatar\'}}" alt="...">\n <span class="username username-hide-on-mobile">\n {{ getCurrentUser().fullname }}\n </span>\n <i class="fa fa-angle-down"></i>\n </a>\n <ul class="dropdown-menu dropdown-menu-default">\n <li>\n <a ng-href=" {{isAdmin() ? \'/staff/users/view/\'+getCurrentUser().id+\'/account\' : \'/staff/agents/view/\'+getCurrentUser().id+\'/account\'}}">\n <i class="icon-key"></i>{{\'APPLICATION_CHANGE_PASSWORD\' | translate}}\n </a>\n </li>\n <li data-ng-click="logout()">\n <a href="#">\n <i class="icon-logout"></i> Log Out\n </a>\n </li>\n </ul>\n </li>\n <!-- END USER LOGIN DROPDOWN -->\n <!-- BEGIN QUICK SIDEBAR TOGGLER -->\n <!-- DOC: Apply "dropdown-dark" class after below "dropdown-extended" to change the dropdown styte -->\n <!-- <li class="dropdown dropdown-quick-sidebar-toggler" data-ng-click="toggleQuickSidebar()">\n <a href="#" class="dropdown-toggle">\n <i class="icon-logout"></i>\n </a>\n </li> -->\n <!-- END QUICK SIDEBAR TOGGLER -->\n</ul>\n<ul class="nav navbar-nav pull-right">\n <!-- BEGIN LANGUAGE BAR -->\n <li class="dropdown dropdown-language">\n <a href="#" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown" data-close-others="true">\n <img ng-src="assets/images/flags/{{ language }}.png">\n <i class="fa fa-angle-down"></i>\n </a>\n <ul class="dropdown-menu dropdown-menu-default scrollable-menu">\n <li>\n <a href="#" ng-click="changeLanguage(\'ar\')">\n <img alt="" src="assets/images/flags/ar.png"> {{\'APPLICATION_ARABIC\' | translate}}\n </a>\n </li>\n <li>\n <a href="#" ng-click="changeLanguage(\'da\')">\n <img alt="" src="assets/images/flags/da.png"> {{\'APPLICATION_DANISH\' | translate}}\n </a>\n </li>\n <li>\n <a href="#" ng-click="changeLanguage(\'de\')">\n <img alt="" src="assets/images/flags/de.png"> {{\'APPLICATION_GERMAN\' | translate}}\n </a>\n </li>\n <li>\n <a href="#" ng-click="changeLanguage(\'en_EN\')">\n <img alt="" src="assets/images/flags/en_EN.png"> {{\'APPLICATION_ENGLISH\' | translate}}\n </a>\n </li>\n <li>\n <a href="#" ng-click="changeLanguage(\'es\')">\n <img alt="" src="assets/images/flags/es.png"> {{\'APPLICATION_SPANISH\' | translate}}\n </a>\n </li>\n <li>\n <a href="#" ng-click="changeLanguage(\'fi\')">\n <img alt="" src="assets/images/flags/fi.png"> {{\'APPLICATION_FINNISH\' | translate}}\n </a>\n </li>\n <li>\n <a href="#" ng-click="changeLanguage(\'fr\')">\n <img alt="" src="assets/images/flags/fr.png"> {{\'APPLICATION_FRENCH\' | translate}}\n </a>\n </li>\n <li>\n <a href="#" ng-click="changeLanguage(\'hi\')">\n <img alt="" src="assets/images/flags/hi.png"> {{\'APPLICATION_HINDI\' | translate}}\n </a>\n </li>\n <li>\n <a href="#" ng-click="changeLanguage(\'it\')">\n <img alt="" src="assets/images/flags/it.png"> {{\'APPLICATION_ITALIAN\' | translate}}\n </a>\n </li>\n <li>\n <a href="#" ng-click="changeLanguage(\'ja\')">\n <img alt="" src="assets/images/flags/ja.png"> {{\'APPLICATION_JAPANASE\' | translate}}\n </a>\n </li>\n <li>\n <a href="#" ng-click="changeLanguage(\'ko\')">\n <img alt="" src="assets/images/flags/ko.png"> {{\'APPLICATION_KOREAN\' | translate}}\n </a>\n </li>\n <li>\n <a href="#" ng-click="changeLanguage(\'nl\')">\n <img alt="" src="assets/images/flags/nl.png"> {{\'APPLICATION_DUTCH\' | translate}}\n </a>\n </li>\n <li>\n <a href="#" ng-click="changeLanguage(\'no\')">\n <img alt="" src="assets/images/flags/no.png"> {{\'APPLICATION_NORWEGIAN\' | translate}}\n </a>\n </li>\n <li>\n <a href="#" ng-click="changeLanguage(\'pt-BR\')">\n <img alt="" src="assets/images/flags/pt-BR.png"> {{\'APPLICATION_PORTUGUESE_BRAZIL\' | translate}}\n </a>\n </li>\n <li>\n <a href="#" ng-click="changeLanguage(\'pt-PT\')">\n <img alt="" src="assets/images/flags/pt-PT.png"> {{\'APPLICATION_PORTUGUESE_PORTUGAL\' | translate}}\n </a>\n </li>\n <li>\n <a href="#" ng-click="changeLanguage(\'ru\')">\n <img alt="" src="assets/images/flags/ru.png"> {{\'APPLICATION_RUSSIAN\' | translate}}\n </a>\n </li>\n <li>\n <a href="#" ng-click="changeLanguage(\'sv\')">\n <img alt="" src="assets/images/flags/sv.png"> {{\'APPLICATION_SWEDISH\' | translate}}\n </a>\n </li>\n <li>\n <a href="#" ng-click="changeLanguage(\'tr\')">\n <img alt="" src="assets/images/flags/tr.png"> {{\'APPLICATION_TURKISH\' | translate}}\n </a>\n </li>\n <li>\n <a href="#" ng-click="changeLanguage(\'fa\')">\n <img alt="" src="assets/images/flags/fa.png"> {{\'APPLICATION_PERSIAN\' | translate}}\n </a>\n </li>\n <li>\n <a href="#" ng-click="changeLanguage(\'zh-CN\')">\n <img alt="" src="assets/images/flags/zh-CN.png"> {{\'APPLICATION_CHINESE_SIMPLIFIED\' | translate}}\n </a>\n </li>\n <li>\n <a href="#" ng-click="changeLanguage(\'zh-TW\')">\n <img alt="" src="assets/images/flags/zh-TW.png"> {{\'APPLICATION_CHINESE_TRADITIONAL\' | translate}}\n </a>\n </li>\n </ul>\n </li>\n <!-- END LANGUAGE BAR -->\n</ul>\n<ul data-ng-if="getCurrentUser().role === \'agent\'" class="nav navbar-nav pull-right header-ul-with-separator padding-side-7" data-ng-class="{\'paused-header\':headerAgent.voicePause || headerAgent.mailPause || headerAgent.chatPause || headerAgent.faxPause || headerAgent.smsPause || headerAgent.openchannelPause}">\n <li class="dropdown dropdown-user" >\n <a href="#" class="dropdown-toggle custom-header-a" dropdown-menu-hover data-toggle="dropdown" data-close-others="true" style="cursor:default;">\n <div>{{(headerAgent.voicePause || headerAgent.mailPause || headerAgent.chatPause || headerAgent.faxPause || headerAgent.smsPause || headerAgent.openchannelPause) ? ((!headerAgent.voicePause || !headerAgent.mailPause || !headerAgent.chatPause || !headerAgent.faxPause || !headerAgent.smsPause || !headerAgent.openchannelPause) ? \'(\'+(\'APPLICATION_PARTIAL\' | translate) + \') \'+headerAgent.pauseType : headerAgent.pauseType) : \'READY\'}}</div>\n <div data-ng-if="headerAgent.voicePause || headerAgent.mailPause || headerAgent.chatPause || headerAgent.faxPause || headerAgent.smsPause || headerAgent.openchannelPause"><css-timer start-time="headerAgent.lastPauseAt"></css-timer></div>\n </a>\n </li>\n <li class="dropdown dropdown-user" data-ng-if="headerAgent.voicePause || headerAgent.mailPause || headerAgent.chatPause || headerAgent.faxPause || headerAgent.smsPause || headerAgent.openchannelPause">\n <a href="#" class="dropdown-toggle padding-side-7 header-bar-button header-bar-button-controls" dropdown-menu-hover data-toggle="dropdown" data-close-others="true" data-ng-click="headerPause(\'unpause\')">\n <i class="fa fa-play font-green"></i></a>\n </li>\n <li class="dropdown dropdown-user" data-ng-if="headerAgent.voicePause || headerAgent.mailPause || headerAgent.chatPause || headerAgent.faxPause || headerAgent.smsPause || headerAgent.openchannelPause">\n <a href="#" class="dropdown-toggle header-bar-button" data-toggle="dropdown" data-hover="dropdown" data-close-others="true">\n <i class="fa fa-angle-down"></i>\n </a>\n <ul class="dropdown-menu dropdown-menu-default scrollable-menu">\n <li data-ng-if="headerAgent.voicePause">\n <a href="#" data-ng-click="headerPause(\'unpause\',null,\'voice\')">\n <i class="fa fa-play font-green"></i> {{\'APPLICATION_VOICE\' | translate}}\n </a>\n </li>\n <li data-ng-if="headerAgent.mailPause">\n <a href="#" data-ng-click="headerPause(\'unpause\',null,\'mail\')">\n <i class="fa fa-play font-green"></i> {{\'APPLICATION_MAIL\' | translate}}\n </a>\n </li>\n <li data-ng-if="headerAgent.chatPause">\n <a href="#" data-ng-click="headerPause(\'unpause\',null,\'chat\')">\n <i class="fa fa-play font-green"></i> {{\'APPLICATION_CHAT\' | translate}}\n </a>\n </li>\n <li data-ng-if="headerAgent.faxPause">\n <a href="#" data-ng-click="headerPause(\'unpause\',null,\'fax\')">\n <i class="fa fa-play font-green"></i> {{\'APPLICATION_FAX\' | translate}}\n </a>\n </li>\n <li data-ng-if="headerAgent.smsPause">\n <a href="#" data-ng-click="headerPause(\'unpause\',null,\'sms\')">\n <i class="fa fa-play font-green"></i> {{\'APPLICATION_SMS\' | translate}}\n </a>\n </li>\n <li data-ng-if="headerAgent.openchannelPause">\n <a href="#" data-ng-click="headerPause(\'unpause\',null,\'openchannel\')">\n <i class="fa fa-play font-green"></i> {{\'APPLICATION_OPEN_CHANNEL\' | translate}}\n </a>\n </li>\n </ul>\n </li>\n <li class="dropdown dropdown-user">\n <a href="#" class="dropdown-toggle padding-side-7 header-bar-button header-bar-button-controls" dropdown-menu-hover data-toggle="dropdown" data-close-others="true" data-ng-click="headerPause(\'pause\',\'DEFAULT PAUSE\')">\n <i class="fa fa-pause font-yellow"></i></a>\n </li>\n <li class="dropdown dropdown-user" data-ng-if="headerPauses.length">\n <a href="#" class="dropdown-toggle header-bar-button" data-toggle="dropdown" data-hover="dropdown" data-close-others="true">\n <i class="fa fa-angle-down"></i>\n </a>\n <ul class="dropdown-menu dropdown-menu-default scrollable-menu">\n <li data-ng-repeat="pause in headerPauses">\n <a href="#" data-ng-click="headerPause(\'pause\',pause.name)">\n {{pause.name}}\n </a>\n </li>\n </ul>\n </li>\n </ul>\n <ul class="nav navbar-nav pull-right" data-ng-if="getCurrentUser().role === \'agent\'" >\n <li data class="dropdown dropdown-extended dropdown-notification" id="header_agent_notification_bar" data-ng-click="agentNotifications.agent.new = 0;">\n <a href="#" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown" data-close-others="true">\n <i class="icon-earphones-alt"></i>\n <span class="badge badge-default" data-ng-if="agentNotifications.agent.new">\n {{agentNotifications.agent.new}} </span>\n </a>\n <ul class="dropdown-menu tabbed-dropdown">\n <li class="external">\n <h3><span class="bold">{{\'APPLICATION_LAST_VOICE_NOTIFICATIONS\' | translate}}</span></h3>\n </li>\n <li>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_INBOUND\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_2" data-toggle="tab">{{ \'APPLICATION_OUTBOUND\' | translate}}</a>\n </li>\n </ul>\n\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="agent-spinner-grid" data-ng-if="busyLoad.agent.busy" spinner-start-active="true"></span>\n <!-- END UI-GRID SPINNER -->\n <ul class="dropdown-menu-list scrollable-menu" style="height: 250px;" data-handle-color="#637283" infinite-scroll="loadNotifications(\'agent\')" can-load=\'!busyLoad.agent.busy\' treshold="261">\n <li data-ng-repeat="notification in agentNotifications.agent.rows">\n <a href="javascript:;" style="cursor:default;">\n <div class="row">\n <div class="col-md-1">\n <img src="assets/images/media/inboundroute.png" style="width:25px;height:25px;" alt="">\n </div>\n <div class="col-md-10">\n <div>{{\'APPLICATION_VOICE_NEW_CALL\' | translate}}<span data-ng-if="notification.status && notification.status !== \'none\'" class="badge float-right" data-ng-class="{\'badge-success\':notification.status === \'taken\',\'badge-danger\':notification.status === \'lost\',\'badge-warning\':notification.status === \'rejected\' || notification.status === \'busy\',\'badge-info\':notification.status === \'taken_elsewhere\'}">{{\'APPLICATION_VOICE_\'+notification.status.toUpperCase() | translate}}</span></div>\n <div><span class="time float-left" style="max-width:none !important;"><span am-time-ago="notification.updatedAt"></span></span></div>\n </div>\n </div>\n <div>\n <span class="message">{{notification.dialstring ? \'APPLICATION_TO\' : \'APPLICATION_FROM\' | translate}}: <span class="span-link" data-ng-click="chooseContact(notification.calleridnum)">{{notification.calleridnum}}</span></span>\n </div>\n <div data-ng-if="notification.status === \'taken_elsewhere\'">\n <span class="message">{{\'APPLICATION_AGENT_NAME\' | translate}}: <span ><b>{{notification.answeredelsewheremembername}}</b></span></span>\n </div>\n <div data-ng-if="notification.status === \'taken\' && notification.lastevent === \'complete\'">\n <span class="message">{{\'APPLICATION_COMPLETED_BY\' | translate}}: <span ><b>{{\'APPLICATION_VOICE_\'+notification.reason.toUpperCase() | translate}}</b></span></span>\n </div>\n </a>\n </li>\n </ul>\n </div>\n <div class="tab-pane" id="tab_1_2">\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="dial-spinner-grid" data-ng-if="busyLoad.dial.busy" spinner-start-active="true"></span>\n <!-- END UI-GRID SPINNER -->\n <ul class="dropdown-menu-list scrollable-menu" style="height: 250px;" data-handle-color="#637283" infinite-scroll="loadNotifications(\'dial\')" can-load=\'!busyLoad.dial.busy\' treshold="261">\n <li data-ng-repeat="notification in agentNotifications.dial.rows">\n <a href="javascript:;" style="cursor:default;">\n <div class="row">\n <div class="col-md-1">\n <img src="assets/images/media/outboundroute.png" style="width:25px;height:25px;" alt="">\n </div>\n <div class="col-md-10">\n <div>{{\'APPLICATION_VOICE_NEW_CALL\' | translate}}<span data-ng-if="notification.status && notification.status !== \'none\'" class="badge float-right" data-ng-class="{\'badge-success\':notification.status === \'taken\',\'badge-danger\':notification.status === \'lost\',\'badge-warning\':notification.status === \'rejected\',\'badge-info\':notification.status === \'taken_elsewhere\'}">{{\'APPLICATION_VOICE_\'+notification.status.toUpperCase() | translate}}</span></div>\n <div><span class="time float-left" style="max-width:none !important;"><span am-time-ago="notification.updatedAt"></span></span></div>\n </div>\n </div>\n <div>\n <span class="message">{{\'APPLICATION_TO\' | translate}}: <span class="span-link" data-ng-click="chooseContact(notification.destcalleridnum)">{{notification.destcalleridnum}}</span></span>\n </div>\n </a>\n </li>\n </ul>\n </div>\n </div>\n </li>\n </ul>\n </li>\n <li data ng-if="license.mail" class="dropdown dropdown-extended dropdown-notification" id="header_mail_notification_bar" data-ng-click="agentNotifications.mail.new = 0;">\n <a href="#" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown" data-close-others="true">\n <i class="icon-envelope-open"></i>\n <span class="badge badge-default" data-ng-if="agentNotifications.mail.new">\n {{agentNotifications.mail.new}} </span>\n </a>\n <ul class="dropdown-menu">\n <li class="external">\n <h3><span class="bold">{{\'APPLICATION_LAST_MAIL_NOTIFICATIONS\' | translate}}</span></h3>\n </li>\n <li>\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="mail-spinner-grid" data-ng-if="busyLoad.mail.busy" spinner-start-active="true"></span>\n <!-- END UI-GRID SPINNER -->\n <ul class="dropdown-menu-list scrollable-menu" style="height: 250px;" data-handle-color="#637283" infinite-scroll="loadNotifications(\'mail\')" can-load=\'!busyLoad.mail.busy\' treshold="261">\n <li data-ng-repeat="notification in agentNotifications.mail.rows">\n <a href="javascript:;" style="cursor:default;">\n <div class="row">\n <div class="col-md-1">\n <img src="assets/images/media/enquiry.png" style="width:25px;height:25px;" alt="">\n </div>\n <div class="col-md-10">\n <div>{{\'APPLICATION_NEW_MESSAGE\' | translate}}<span data-ng-if="notification.status && notification.status !== \'none\'" class="badge float-right" data-ng-class="{\'badge-success pointer-cursor\':notification.status === \'taken\',\'badge-danger\':notification.status === \'lost\',\'badge-warning\':notification.status === \'rejected\'}" data-ng-click="notification.status === \'taken\' && openRoom(notification.roomid, \'mailRoom\')">{{\'APPLICATION_MESSAGE_\'+notification.status.toUpperCase() | translate}} <i data-ng-if="notification.status === \'taken\'" class="fa fa-envelope"></i></span></div>\n <div><span class="time float-left" style="max-width:none !important;"><span am-time-ago="notification.updatedAt"></span></span></div>\n </div>\n </div>\n <div>\n <span class="message">{{\'APPLICATION_FROM\' | translate}}: <span class="span-link" data-ng-click="openContact(\'mail\',notification.accountid,notification.from)">{{notification.from}}</span></span>\n </div>\n </a>\n </li>\n </ul>\n </li>\n </ul>\n </li>\n <li data ng-if="license.chat" class="dropdown dropdown-extended dropdown-notification" id="header_chat_notification_bar" data-ng-click="agentNotifications.chat.new = 0;">\n <a href="#" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown" data-close-others="true">\n <i class="icon-bubble"></i>\n <span class="badge badge-default" data-ng-if="agentNotifications.chat.new">\n {{agentNotifications.chat.new}} </span>\n </a>\n <ul class="dropdown-menu">\n <li class="external">\n <h3><span class="bold">{{\'APPLICATION_LAST_CHAT_NOTIFICATIONS\' | translate}}</span></h3>\n </li>\n <li>\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="chat-spinner-grid" data-ng-if="busyLoad.chat.busy" spinner-start-active="true"></span>\n <!-- END UI-GRID SPINNER -->\n <ul class="dropdown-menu-list scrollable-menu" style="height: 250px;" data-handle-color="#637283" infinite-scroll="loadNotifications(\'chat\')" can-load=\'!busyLoad.chat.busy\' treshold="261">\n <li data-ng-repeat="notification in agentNotifications.chat.rows">\n <a href="javascript:;" style="cursor:default;">\n <div class="row">\n <div class="col-md-1">\n <img src="assets/images/media/website.png" style="width:25px;height:25px;" alt="">\n </div>\n <div class="col-md-10">\n <div>{{\'APPLICATION_NEW_CHAT_REQUEST\' | translate}}<span data-ng-if="notification.status && notification.status !== \'none\'" class="badge float-right" data-ng-class="{\'badge-success pointer-cursor\':notification.status === \'taken\',\'badge-danger\':notification.status === \'lost\',\'badge-warning\':notification.status === \'rejected\'}" data-ng-click="notification.status === \'taken\' && openRoom(notification.roomid, \'chatRoom\')">{{\'APPLICATION_CHAT_\'+notification.status.toUpperCase() | translate}} <i data-ng-if="notification.status === \'taken\'" class="fa fa-envelope"></i></span></div>\n <div><span class="time float-left" style="max-width:none !important;"><span am-time-ago="notification.updatedAt"></span></span></div>\n </div>\n </div>\n <div>\n <span class="message">{{\'APPLICATION_FROM\' | translate}}: <span class="span-link" data-ng-click="openContact(\'chat\',notification.websiteid,notification.visitoremail)">{{notification.visitoremail}}</span></span>\n </div>\n </a>\n </li>\n </ul>\n </li>\n </ul>\n </li>\n <li data ng-if="license.fax" class="dropdown dropdown-extended dropdown-notification" id="header_fax_notification_bar" data-ng-click="agentNotifications.fax.new = 0;">\n <a href="#" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown" data-close-others="true">\n <i class="fa fa-fax"></i>\n <span class="badge badge-default" data-ng-if="agentNotifications.fax.new">\n {{agentNotifications.fax.new}} </span>\n </a>\n <ul class="dropdown-menu">\n <li class="external">\n <h3><span class="bold">{{\'APPLICATION_LAST_FAX_NOTIFICATIONS\' | translate}}</span></h3>\n </li>\n <li>\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="fax-spinner-grid" data-ng-if="busyLoad.fax.busy" spinner-start-active="true"></span>\n <!-- END UI-GRID SPINNER -->\n <ul class="dropdown-menu-list scrollable-menu" style="height: 250px;" data-handle-color="#637283" infinite-scroll="loadNotifications(\'fax\')" can-load=\'!busyLoad.fax.busy\' treshold="261">\n <li data-ng-repeat="notification in agentNotifications.fax.rows">\n <a href="javascript:;" style="cursor:default;">\n <div class="row">\n <div class="col-md-1">\n <img src="assets/images/media/fax.png" style="width:25px;height:25px;" alt="">\n </div>\n <div class="col-md-10">\n <div>{{\'APPLICATION_NEW_FAX_REQUEST\' | translate}}<span data-ng-if="notification.status && notification.status !== \'none\'" class="badge float-right" data-ng-class="{\'badge-success pointer-cursor\':notification.status === \'taken\',\'badge-danger\':notification.status === \'lost\',\'badge-warning\':notification.status === \'rejected\'}" data-ng-click="notification.status === \'taken\' && openRoom(notification.roomid, \'faxRoom\')">{{\'APPLICATION_FAX_\'+notification.status.toUpperCase() | translate}} <i data-ng-if="notification.status === \'taken\'" class="fa fa-envelope"></i></span></div>\n <div><span class="time float-left" style="max-width:none !important;"><span am-time-ago="notification.updatedAt"></span></span></div>\n </div>\n </div>\n <div>\n <span class="message">{{\'APPLICATION_FROM\' | translate}}: <span class="span-link" data-ng-click="openContact(\'fax\',notification.accountid,notification.from)">{{notification.from}}</span></span>\n </div>\n </a>\n </li>\n </ul>\n </li>\n </ul>\n </li>\n <li data ng-if="license.messaging" class="dropdown dropdown-extended dropdown-notification" id="header_sms_notification_bar" data-ng-click="agentNotifications.sms.new = 0;">\n <a href="#" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown" data-close-others="true">\n <i class="glyphicon glyphicon-comment"></i>\n <span class="badge badge-default" data-ng-if="agentNotifications.sms.new">\n {{agentNotifications.sms.new}} </span>\n </a>\n <ul class="dropdown-menu">\n <li class="external">\n <h3><span class="bold">{{\'APPLICATION_LAST_SMS_NOTIFICATIONS\' | translate}}</span></h3>\n </li>\n <li>\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="sms-spinner-grid" data-ng-if="busyLoad.sms.busy" spinner-start-active="true"></span>\n <!-- END UI-GRID SPINNER -->\n <ul class="dropdown-menu-list scrollable-menu" style="height: 250px;" data-handle-color="#637283" infinite-scroll="loadNotifications(\'sms\')" can-load=\'!busyLoad.sms.busy\' treshold="261">\n <li data-ng-repeat="notification in agentNotifications.sms.rows">\n <a href="javascript:;" style="cursor:default;">\n <div class="row">\n <div class="col-md-1">\n <img src="assets/images/media/sms.png" style="width:25px;height:25px;" alt="">\n </div>\n <div class="col-md-10">\n <div>{{\'APPLICATION_NEW_SMS_REQUEST\' | translate}}<span data-ng-if="notification.status && notification.status !== \'none\'" class="badge float-right" data-ng-class="{\'badge-success pointer-cursor\':notification.status === \'taken\',\'badge-danger\':notification.status === \'lost\',\'badge-warning\':notification.status === \'rejected\'}" data-ng-click="notification.status === \'taken\' && openRoom(notification.roomid, \'smsRoom\')">{{\'APPLICATION_SMS_\'+notification.status.toUpperCase() | translate}} <i data-ng-if="notification.status === \'taken\'" class="fa fa-envelope"></i></span></div>\n <div><span class="time float-left" style="max-width:none !important;"><span am-time-ago="notification.updatedAt"></span></span></div>\n </div>\n </div>\n <div>\n <span class="message">{{\'APPLICATION_FROM\' | translate}}: <span class="span-link" data-ng-click="openContact(\'sms\',notification.accountid,notification.from)">{{notification.from}}</span></span>\n </div>\n </a>\n </li>\n </ul>\n </li>\n </ul>\n </li>\n <li data ng-if="license.openchannel" class="dropdown dropdown-extended dropdown-notification" id="header_openchannel_notification_bar" data-ng-click="agentNotifications.openchannel.new = 0;">\n <a href="#" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown" data-close-others="true">\n <i class="icon-globe"></i>\n <span class="badge badge-default" data-ng-if="agentNotifications.openchannel.new">\n {{agentNotifications.openchannel.new}} </span>\n </a>\n <ul class="dropdown-menu">\n <li class="external">\n <h3><span class="bold">{{\'APPLICATION_LAST_OPENCHANNEL_NOTIFICATIONS\' | translate}}</span></h3>\n </li>\n <li>\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="openchannel-spinner-grid" data-ng-if="busyLoad.openchannel.busy" spinner-start-active="true"></span>\n <!-- END UI-GRID SPINNER -->\n <ul class="dropdown-menu-list scrollable-menu" style="height: 250px;" data-handle-color="#637283" infinite-scroll="loadNotifications(\'openchannel\')" can-load=\'!busyLoad.openchannel.busy\' treshold="261">\n <li data-ng-repeat="notification in agentNotifications.openchannel.rows">\n <a href="javascript:;" style="cursor:default;">\n <div class="row">\n <div class="col-md-1">\n <img src="assets/images/media/openchannel.png" style="width:25px;height:25px;" alt="">\n </div>\n <div class="col-md-10">\n'+" <div>{{'APPLICATION_NEW_OPENCHANNEL_REQUEST' | translate}}<span data-ng-if=\"notification.status && notification.status !== 'none'\" class=\"badge float-right\" data-ng-class=\"{'badge-success pointer-cursor':notification.status === 'taken','badge-danger':notification.status === 'lost','badge-warning':notification.status === 'rejected'}\" data-ng-click=\"notification.status === 'taken' && openRoom(notification.roomid, 'openchannelRoom')\">{{'APPLICATION_OPENCHANNEL_'+notification.status.toUpperCase() | translate}} <i data-ng-if=\"notification.status === 'taken'\" class=\"fa fa-envelope\"></i></span></div>\n <div><span class=\"time float-left\" style=\"max-width:none !important;\"><span am-time-ago=\"notification.updatedAt\"></span></span></div>\n </div>\n </div>\n <!-- <div>\n <span class=\"message\">{{'APPLICATION_FROM' | translate}}: <span class=\"span-link\" data-ng-click=\"openContact('openchannel',notification.accountid,notification.from)\">{{notification.from}}</span></span>\n </div> -->\n </a>\n </li>\n </ul>\n </li>\n </ul>\n </li>\n </ul>\n </div>\n <!-- END TOP NAVIGATION MENU -->\n </div>\n <!-- END HEADER INNER -->\n"), -a.put("components/modal/delete.html",'<div class="modal-header">\n <button ng-if="modal.dismissable" type="button" ng-click="$dismiss()" class="close">×</button>\n <h4 ng-if="modal.title" ng-bind="modal.title" class="modal-title"></h4>\n</div>\n<div class="modal-body">\n <p ng-if="modal.text" ng-bind="modal.text"></p>\n <div ng-if="modal.html" ng-bind-html="modal.html"></div>\n</div>\n<div class="modal-footer">\n <button ng-repeat="button in modal.buttons" ng-class="button.classes" ng-click="button.click($event)" ng-bind="button.text" class="btn"></button>\n</div>\n'),a.put("components/sidebar/sidebar.html",'<div id="page-sidebar" class="page-sidebar navbar-collapse collapse" data-ng-init="initSidebar()">\n <!-- BEGIN SIDEBAR MENU -->\n <!-- DOC: Apply "page-sidebar-menu-light" class right after "page-sidebar-menu" to enable light sidebar menu style(without borders) -->\n <!-- DOC: Apply "page-sidebar-menu-hover-submenu" class right after "page-sidebar-menu" to enable hoverable(hover vs accordion) sub menu mode -->\n <!-- DOC: Apply "page-sidebar-menu-closed" class right after "page-sidebar-menu" to collapse("page-sidebar-closed" class must be applied to the body element) the sidebar sub menu mode -->\n <!-- DOC: Set data-auto-scroll="false" to disable the sidebar from auto scrolling/focusing -->\n <!-- DOC: Set data-keep-expand="true" to keep the submenues expanded -->\n <!-- DOC: Set data-auto-speed="200" to adjust the sub menu slide up/down speed -->\n <ul data-ng-click="mainTab.active=true" class="page-sidebar-menu" data-keep-expanded="false" data-auto-scroll="true" data-slide-speed="200" data-ng-class="{\'page-sidebar-menu-closed\': settings.layout.pageSidebarClosed}" data-ng-init="getSidebarIntegrations()">\n <!-- DOC: To remove the search box from the sidebar you just need to completely remove the below "sidebar-search-wrapper" LI element -->\n <li class="sidebar-search-wrapper">\n <!-- BEGIN RESPONSIVE QUICK SEARCH FORM -->\n <!-- DOC: Apply "sidebar-search-bordered" class the below search form to have bordered search box -->\n <!-- DOC: Apply "sidebar-search-bordered sidebar-search-solid" class the below search form to have bordered & solid search box -->\n <form class="sidebar-search sidebar-search-bordered" action="extra_search.html" method="POST">\n <a href="javascript:;" class="remove">\n <i class="icon-close"></i>\n </a>\n </form>\n <!-- END RESPONSIVE QUICK SEARCH FORM -->\n </li>\n\n <!-- START DASHBOARD CASE -->\n <li class="start" data-ng-if="::(Auth.isAdmin() || Auth.isAgent() || userModules[1])" data-ng-class="{active: $state.includes(\'main.dashboard\')}">\n <a href="/dashboard/voice">\n <i class="icon-rocket"></i>\n <span class="title">{{\'APPLICATION_DASHBOARD\' | translate}}</span>\n <span data-ng-if="$state.includes(\'main.dashboard\')" class="selected"></span>\n </a>\n </li>\n <!-- END DASHBOARD CASE -->\n\n <!-- START YOURDASHBOARD LIST CASE -->\n <li data-ng-if="::(!Auth.isUser() || userModules[2])" data-ng-class="{active: $state.is(\'main.tools.yourdashboards.show\')}">\n <a href="javascript:;">\n <i class="fa fa-tachometer"></i>\n <span class="title" >{{\'APPLICATION_YOUR_DASHBOARDS\' | translate}}</span>\n <span class="arrow" data-ng-class="{ open: $state.includes(\'main.tools.yourdashboards.show\') }"></span>\n </a>\n <ul class="sub-menu" data-ng-init="getSidebarDashboards()">\n <li data-ng-class="{active: $stateParams.id == dashboard.id && $state.includes(\'main.tools.yourdashboards.show\')}" data-ng-repeat="dashboard in dashboards" data-ng-if="dashboard[Auth.getRole()]">\n <a href="/tools/yourdashboards/show/{{dashboard.id}}" >\n <i class="icon-screen-desktop"></i>\n <span class="title" >{{dashboard.name}} </span>\n </a>\n </li>\n </ul>\n </li>\n <!-- END YOURDASHBOARD LIST CASE -->\n\n <!-- START STAFF LIST CASE -->\n <li data-ng-class="{active: $state.includes(\'main.staff\')}">\n <a href="javascript:;" data-ng-if="::(Auth.isAdmin() || userModules[3])">\n <i class="icon-puzzle"></i>\n <span class="title" >{{\'APPLICATION_STAFF\' | translate}}</span>\n <span class="arrow" data-ng-class="{open: $state.includes(\'main.staff\')}"></span>\n </a>\n <ul class="sub-menu">\n <!-- START USERS CASE -->\n <li data-ng-if="::(Auth.isAdmin())" data-ng-class="{active: $state.includes(\'main.staff.users\')}">\n <a href="/staff/users/list">\n <i class="icon-eye"></i>\n <span class="title" >{{\'APPLICATION_USERS\' | translate}}</span>\n <span data-ng-if="$state.includes(\'main.staff.users\')" class="selected"></span>\n </a>\n </li>\n <!-- END USERS CASE -->\n\n <!-- START AGENTS CASE -->\n <li data-ng-if="::(Auth.isAdmin() || userModules[4])" data-ng-class="{active: $state.includes(\'main.staff.agents\')}">\n <a href="/staff/agents/list">\n <i class="icon-people"></i>\n <span class="title" >{{\'APPLICATION_AGENTS\' | translate}}</span>\n <span data-ng-if="$state.includes(\'main.staff.agents\')" class="selected"></span>\n </a>\n </li>\n <!-- END AGENTS CASE -->\n\n <!-- START TELEPHONES CASE -->\n <li data-ng-if="::(Auth.isAdmin())" data-ng-class="{active: $state.includes(\'main.staff.telephones\')}">\n <a href="/staff/telephones/list">\n <i class="icon-phone"></i>\n <span class="title" >{{\'APPLICATION_TELEPHONES\' | translate}}</span>\n <span data-ng-if="$state.includes(\'main.staff.telephones\')" class="selected"></span>\n </a>\n </li>\n <!-- END TELEPHONES CASE -->\n\n <!-- START TEAMS CASE -->\n <li data-ng-if="::(Auth.isAdmin())" data-ng-class="{active: $state.includes(\'main.staff.teams\')}">\n <a href="/staff/teams/list">\n <i class="icon-shield"></i>\n <span class="title" >{{\'APPLICATION_TEAMS\' | translate}}</span>\n <span data-ng-if="$state.includes(\'main.staff.teams\')" class="selected"></span>\n </a>\n </li>\n <!-- END TEAMS CASE -->\n </ul>\n </li>\n <!-- END STAFF LIST CASE -->\n\n <!-- START CONTACT MANAGER LIST CASE -->\n <li data-ng-if="::(Auth.isAdmin() || Auth.isAgent() || userModules[5])" data-ng-class="{active: $state.includes(\'main.contactmanager\')}">\n <a href="javascript:;" data-ng-class="{\'disabled-link\':!license.cm}">\n <i class="icon-notebook"></i>\n <span class="title disable-target" >{{\'APPLICATION_CONTACT_MANAGER\' | translate}}</span>\n <span class="arrow" data-ng-class="{ open: $state.includes(\'main.contactmanager.contacts\')\n || $state.includes(\'main.contactmanager.companies\')\n || $state.includes(\'main.contactmanager.listss\') }"></span>\n </a>\n <ul class="sub-menu" data-ng-if="license.cm">\n <!-- START CONTACTS CASE -->\n <li data-ng-class="{active: $state.includes(\'main.contactmanager.contacts\')}">\n <a href="/contactmanager/contacts/list">\n <i class=" fa fa-users"></i>\n <span class="title" >{{\'APPLICATION_CONTACTS\' | translate}}</span>\n <span data-ng-if="$state.includes(\'main.contactmanager.contacts\')" class="selected"></span>\n </a>\n </li>\n <!-- END CONTACTS CASE -->\n <!-- START COMPANIES CASE -->\n <li data-ng-class="{active: $state.includes(\'main.contactmanager.companies\')}" data-ng-if="::(Auth.isAdmin() || Auth.isUser())">\n <a href="/contactmanager/companies/list">\n <i class="icon-briefcase"></i>\n <span class="title" >{{\'APPLICATION_COMPANIES\' | translate}}</span>\n <span data-ng-if="$state.includes(\'main.contactmanager.companies\')" class="selected"></span>\n </a>\n </li>\n <!-- END COMPANIES CASE -->\n <!-- START LISTS CASE -->\n <li data-ng-class="{active: $state.includes(\'main.contactmanager.lists\')}" data-ng-if="::(Auth.isAdmin() || Auth.isUser())">\n <a href="/contactmanager/lists/list">\n <i class="fa fa-list-ul"></i>\n <span class="title" >{{\'APPLICATION_LISTS\' | translate}}</span>\n <span data-ng-if="$state.includes(\'main.contactmanager.lists\')" class="selected"></span>\n </a>\n </li>\n <!-- END LISTS CASE -->\n </ul>\n </li>\n <!-- END CONTACT MANAGER LIST CASE -->\n\n <!-- START CHANNEL LIST CASE -->\n <li data-ng-if="::(Auth.isAdmin() || Auth.isAgent() || userModules[6])" data-ng-class="{active: $state.includes(\'main.channels\')}">\n <a href="javascript:;">\n <i class="fa fa-spinner"></i>\n <span class="title" >{{\'APPLICATION_CHANNELS\' | translate}}</span>\n <span class="arrow" data-ng-class="{open: $state.includes(\'main.channels\')}"></span>\n </a>\n <ul class="sub-menu">\n <!-- START VOICE CASE -->\n <li data-ng-if="::(Auth.isAdmin() || Auth.isAgent() || userModules[7])" data-ng-class="{ active: $state.includes(\'main.channels.voice\') }">\n <a href="javascript:;">\n <i class="icon-earphones-alt"></i>\n <span class="title">{{ \'APPLICATION_VOICE\' | translate}}</span>\n <span class="arrow" data-ng-class="{ open: $state.includes(\'main.channels.voice\') }"></span>\n </a>\n\n <ul class="sub-menu">\n <li data-ng-if="::(Auth.isAdmin())" data-ng-class="{active: $state.includes(\'main.channels.voice.queues\')}">\n <a href="/channels/voice/queues/list">\n <i class="icon-docs"></i>\n <span class="title">{{\'APPLICATION_QUEUES\' | translate}}</span>\n </a>\n </li>\n <li data-ng-if="::(Auth.isAdmin() || userModules[21])">\n <a href="javascript:;">\n <i class="icon-directions"></i>\n <span class="title"> {{ \'APPLICATION_ROUTES\' | translate}} </span>\n <span class="arrow" data-ng-class="{ open: $state.includes(\'main.channels.voice.routes\') }"></span>\n <ul class="sub-menu">\n <li data-ng-class="{active: $state.includes(\'main.channels.voice.routes.inbound\')}">\n <a href="/channels/voice/routes/inbound/list">\n <i class="icon-call-in"></i>\n <span class="title"> {{\'APPLICATION_INBOUND\' | translate}} </span>\n </a>\n </li>\n <li data-ng-class="{active: $state.includes(\'main.channels.voice.routes.outbound\')}">\n <a href="/channels/voice/routes/outbound/list">\n <i class="icon-call-out"></i>\n <span class="title"> {{\'APPLICATION_OUTBOUND\' | translate}} </span>\n </a>\n </li>\n <li data-ng-class="{active: $state.includes(\'main.channels.voice.routes.internal\')}">\n <a href="/channels/voice/routes/internal/list">\n <i class="icon-reload"></i>\n <span class="title"> {{\'APPLICATION_INTERNALS\' | translate}} </span>\n </a>\n </li>\n </ul>\n </a>\n </li>\n <li data-ng-if="::(Auth.isAdmin() || userModules[22])" data-ng-class="{active: $state.includes(\'main.channels.voice.contexts\')}">\n <a href="/channels/voice/contexts/list">\n <i class="icon-docs"></i>\n <span class="title"> {{\'APPLICATION_CONTEXTS\' | translate}} </span>\n </a>\n </li>\n <li data-ng-if="::(Auth.isAdmin() || userModules[23])" data-ng-class="{active: $state.includes(\'main.channels.voice.voicemails\')}">\n <a href="/channels/voice/voicemails/list">\n <i class="icon-envelope-letter"></i>\n <span class="title"> {{\'APPLICATION_VOICEMAILS\' | translate}} </span>\n </a>\n </li>\n <li data-ng-if="::(Auth.isAdmin() || userModules[24])" data-ng-class="{active: $state.includes(\'main.channels.voice.mohs\')}">\n <a href="/channels/voice/mohs/list">\n <i class="icon-music-tone"></i>\n <span class="title"> {{\'APPLICATION_MOH\' | translate}} </span>\n </a>\n </li>\n <!-- START RECORDING CASE -->\n <li data-ng-if="::(Auth.isAdmin() || Auth.isAgent() || userModules[25])" data-ng-class="{active: $state.includes(\'main.channels.voice.recordings\')}">\n <a href="/channels/voice/recordings/list">\n <i class="icon-control-play"></i>\n <span class="title">{{\'APPLICATION_RECORDINGS\' | translate}}</span>\n </a>\n </li>\n <!-- END RECORDING CASE -->\n <!-- START REALTIME CASE -->\n <li data-ng-if="::(Auth.isAdmin() || userModules[26])" data-ng-class="{active: $state.includes(\'main.channels.voice.realtime\')}">\n <a href="/channels/voice/realtime/view/agents">\n <i class="icon-energy"></i>\n <span class="title">{{\'APPLICATION_REALTIME\' | translate}}</span>\n </a>\n </li>\n <!-- END REALTIME CASE -->\n <!-- START CHANSPY CASE -->\n <li data-ng-if="::(Auth.isAdmin() || userModules[27])" data-ng-class="{active: $state.includes(\'main.channels.voice.chanspy\')}">\n <a href="/channels/voice/chanspy/list">\n <i class="fa fa-user-secret"></i>\n <span class="title" >{{\'APPLICATION_CHANSPY\' | translate}}</span>\n <!-- <span data-ng-if="$state.includes(\'main.chanspy\')" class="selected"></span> -->\n </a>\n </li>\n <!-- END CHANSPY CASE -->\n <!-- START CHANSPY CASE -->\n <li data-ng-if="::(Auth.isAdmin() || userModules[28])" data-ng-class="{active: $state.includes(\'main.channels.voice.dispositions\')}">\n <a href="/channels/voice/dispositions/list">\n <i class="icon-target"></i>\n <span class="title" >{{\'APPLICATION_DISPOSITIONS\' | translate}}</span>\n </a>\n </li>\n <!-- END CHANSPY CASE -->\n </ul>\n </li>\n <!-- END VOICE CASE -->\n\n <!-- START CHAT CASE -->\n <li data-ng-if="::(Auth.isAdmin() || Auth.isAgent() || userModules[8])" data-ng-class="{active: $state.includes(\'main.channels.chat\')}">\n <a href="javascript:;" data-ng-class="{\'disabled-link\':!license.chat}">\n <i class="icon-bubble"></i>\n <span class="title disable-target">{{\'APPLICATION_CHAT\' | translate}}</span>\n <span class="arrow" data-ng-class="{open: $state.includes(\'main.channels.chat\')}"></span>\n </a>\n <ul class="sub-menu" data-ng-if="license.chat">\n <li data-ng-if="::(Auth.isAdmin() || userModules[29])" data-ng-class="{active: $state.includes(\'main.channels.chat.websites\')}">\n <a href="/channels/chat/websites/list">\n <i class="icon-globe"></i>\n <span class="title"> {{\'APPLICATION_WEB_SITES\' | translate}} </span>\n </a>\n </li>\n <li data-ng-if="::(Auth.isAdmin() || userModules[30])" data-ng-class="{active: $state.includes(\'main.channels.chat.queues\')}">\n <a href="/channels/chat/queues/list">\n <i class="icon-docs"></i>\n <span class="title"> {{\'APPLICATION_QUEUES\' | translate}} </span>\n </a>\n </li>\n <li data-ng-if="::(Auth.isAdmin() || Auth.isAgent() || userModules[31])" data-ng-class="{active: $state.includes(\'main.channels.chat.room\')}">\n <a href="/channels/chat/room/internal/list">\n <i class="fa fa-users"></i>\n <span class="title"> {{\'APPLICATION_INTERACTIONS\' | translate}} </span>\n </a>\n </li>\n <!-- <li data-ng-if="::(Auth.isAdmin() || userModules[8])" data-ng-class="{active: $state.includes(\'main.channels.chat.online\')}">\n <a href="/channels/chat/online/list">\n <i class="icon-login"></i>\n <span class="title"> {{\'APPLICATION_ONLINE_MESSAGES\' | translate}} </span>\n </a>\n </li> -->\n <li data-ng-if="::(Auth.isAdmin() || userModules[32])" data-ng-class="{active: $state.includes(\'main.channels.chat.offline\')}">\n <a href="/channels/chat/offline/list">\n <i class="icon-logout"></i>\n <span class="title"> {{\'APPLICATION_OFFLINE_MESSAGES\' | translate}} </span>\n </a>\n </li>\n <li data-ng-if="::(Auth.isAdmin() || userModules[33])" data-ng-class="{active: $state.includes(\'main.channels.chat.realtime\')}">\n <a href="/channels/chat/realtime/view/agents">\n <i class="icon-energy"></i>\n <span class="title">{{\'APPLICATION_REALTIME\' | translate}}</span>\n </a>\n </li>\n </ul>\n </li>\n <!-- END CHAT CASE -->\n\n <!-- START MAIL CASE -->\n <li data-ng-if="::(Auth.isAdmin() || Auth.isAgent() || userModules[9])" data-ng-class="{active: $state.includes(\'main.channels.mail\')}" >\n <a href="javascript:;" data-ng-class="{\'disabled-link\':!license.mail}">\n <i class="icon-envelope"></i>\n <span class="title disable-target">{{\'APPLICATION_MAIL\' | translate}}</span>\n <span class="arrow" data-ng-class="{ open: $state.includes(\'main.channels.mail\') }"></span>\n </a>\n\n <ul class="sub-menu" data-ng-if="license.mail">\n <li data-ng-if="::(Auth.isAdmin() || userModules[34])" data-ng-class="{active: $state.includes(\'main.channels.mail.accounts\') || $state.includes(\'main.channels.mail.account\')}">\n <a href="/channels/mail/accounts/list">\n <i class="icon-notebook"></i>\n <span class="title"> {{\'APPLICATION_ACCOUNTS\' | translate}} </span>\n </a>\n </li>\n <li data-ng-if="::(Auth.isAdmin() || userModules[35])" data-ng-class="{active: $state.includes(\'main.channels.mail.queues\') || $state.includes(\'main.channels.mail.queue\')}">\n <a href="/channels/mail/queues/list">\n <i class="icon-docs"></i>\n <span class="title"> {{\'APPLICATION_QUEUES\' | translate}} </span>\n </a>\n </li>\n <li data-ng-if="::(Auth.isAdmin() || Auth.isAgent() || userModules[36])" data-ng-class="{active: $state.includes(\'main.channels.mail.inbox\')}">\n <a href="/channels/mail/inbox/view">\n <i class="icon-note"></i>\n <span class="title"> {{\'APPLICATION_INBOX\' | translate}} </span>\n </a>\n </li>\n <!-- START REALTIME CASE -->\n <li data-ng-if="::(Auth.isAdmin() || userModules[37])" data-ng-class="{active: $state.includes(\'main.channels.mail.realtime\')}">\n <a href="/channels/mail/realtime/view/agents">\n <i class="icon-energy"></i>\n <span class="title">{{\'APPLICATION_REALTIME\' | translate}}</span>\n </a>\n </li>\n <!-- END REALTIME CASE -->\n </ul>\n </li>\n <!-- END MAIL CASE -->\n\n <!-- START FAX CASE -->\n <li data-ng-if="::(Auth.isAdmin() || Auth.isAgent() || userModules[10])" data-ng-class="{active: $state.includes(\'main.channels.fax\')}">\n <a href="javascript:;" data-ng-class="{\'disabled-link\':!license.fax}">\n <i class="fa fa-fax"></i>\n <span class="title disable-target"> {{ \'APPLICATION_FAX\' | translate}}</span>\n <span class="arrow" data-ng-class="{ open: $state.includes(\'main.channels.fax\') }"></span>\n </a>\n <ul class="sub-menu" data-ng-if="license.fax">\n <li data-ng-if="::(Auth.isAdmin() || userModules[38])" data-ng-class="{active: $state.includes(\'main.channels.fax.accounts\')}">\n <a href="/channels/fax/accounts/list">\n <i class="icon-notebook"></i>\n <span class="title"> {{ \'APPLICATION_ACCOUNTS\' | translate}} </span>\n </a>\n </li>\n <li data-ng-if="::(Auth.isAdmin() || userModules[39])" data-ng-class="{active: $state.includes(\'main.channels.fax.queues\')}">\n <a href="/channels/fax/queues/list">\n <i class="icon-docs"></i>\n <span class="title"> {{ \'APPLICATION_QUEUES\' | translate }} </span>\n </a>\n </li>\n <li data-ng-if="::(Auth.isAdmin() || Auth.isAgent() || userModules[40])" data-ng-class="{active: $state.includes(\'main.channels.fax.inbox\')}">\n <a href="/channels/fax/inbox/view">\n <i class="icon-note"></i>\n <span class="title"> {{ \'APPLICATION_INBOX\' | translate }} </span>\n </a>\n </li>\n <!-- START REALTIME CASE -->\n <li data-ng-if="::(Auth.isAdmin() || userModules[41])" data-ng-class="{active: $state.includes(\'main.channels.fax.realtime\')}">\n <a href="/channels/fax/realtime/view/agents">\n <i class="icon-energy"></i>\n <span class="title">{{\'APPLICATION_REALTIME\' | translate}}</span>\n </a>\n </li>\n <!-- END REALTIME CASE -->\n </ul>\n </li>\n <!-- END FAX CASE -->\n\n <!-- START SMS CASE -->\n <li data-ng-if="::(Auth.isAdmin() || Auth.isAgent() || userModules[11])" data-ng-class="{active: $state.includes(\'main.channels.sms\')}">\n <a href="javascript:;" data-ng-class="{\'disabled-link\':!license.messaging}">\n <i class="glyphicon glyphicon-comment"></i>\n <span class="title disable-target">{{\'APPLICATION_SMS\' | translate}}</span>\n <span class="arrow" data-ng-class="{ open: $state.includes(\'main.channels.sms\') }"></span>\n </a>\n\n <ul class="sub-menu" data-ng-if="license.messaging">\n <li data-ng-if="::(Auth.isAdmin() || userModules[42])" data-ng-class="{active: $state.includes(\'main.channels.sms.accounts\') || $state.includes(\'main.channels.sms.account\')}">\n <a href="/channels/sms/accounts/list">\n <i class="icon-notebook"></i>\n <span class="title"> {{\'APPLICATION_ACCOUNTS\' | translate}} </span>\n </a>\n </li>\n <li data-ng-if="::(Auth.isAdmin() || userModules[43])" data-ng-class="{active: $state.includes(\'main.channels.sms.queues\') || $state.includes(\'main.channels.sms.queue\')}">\n <a href="/channels/sms/queues/list">\n <i class="icon-docs"></i>\n <span class="title"> {{\'APPLICATION_QUEUES\' | translate}} </span>\n </a>\n </li>\n <li data-ng-if="::(Auth.isAdmin() || Auth.isAgent() || userModules[44])" data-ng-class="{active: $state.includes(\'main.channels.sms.inbox\')}">\n <a href="/channels/sms/inbox/view">\n <i class="icon-note"></i>\n <span class="title"> {{\'APPLICATION_INBOX\' | translate}} </span>\n </a>\n </li>\n <!-- START REALTIME CASE -->\n <li data-ng-if="::(Auth.isAdmin() || userModules[45])" data-ng-class="{active: $state.includes(\'main.channels.sms.realtime\')}">\n <a href="/channels/sms/realtime/view/agents">\n <i class="icon-energy"></i>\n <span class="title">{{\'APPLICATION_REALTIME\' | translate}}</span>\n </a>\n </li>\n <!-- END REALTIME CASE -->\n </ul>\n </li>\n\n <!-- END SMS CASE -->\n\n <!-- START OPENCHANNEL CASE -->\n <li data-ng-if="::(Auth.isAdmin() || Auth.isAgent()|| userModules[20])" data-ng-class="{active: $state.includes(\'main.channels.openchannel\')}">\n <a href="javascript:;" data-ng-class="{\'disabled-link\':!license.openchannel}" >\n <i class="icon-globe"></i>\n <span class="title disable-target">{{\'APPLICATION_OPEN_CHANNEL\' | translate}}</span>\n <span class="arrow" data-ng-class="{ open: $state.includes(\'main.channels.openchannel\') }"></span>\n </a>\n <ul class="sub-menu" data-ng-if="license.openchannel" >\n <li data-ng-if="::(Auth.isAdmin()|| userModules[46])" data-ng-class="{active: $state.includes(\'main.channels.openchannel.accounts\') || $state.includes(\'main.channels.openchannel.account\')}">\n <a href="/channels/openchannel/accounts/list">\n <i class="icon-notebook"></i>\n <span class="title"> {{\'APPLICATION_ACCOUNTS\' | translate}} </span>\n </a>\n </li>\n <li data-ng-if="::(Auth.isAdmin()|| userModules[47])" data-ng-class="{active: $state.includes(\'main.channels.openchannel.queues\') || $state.includes(\'main.channels.openchannel.queue\')}">\n <a href="/channels/openchannel/queues/list">\n <i class="icon-docs"></i>\n <span class="title"> {{\'APPLICATION_QUEUES\' | translate}} </span>\n </a>\n </li>\n <li data-ng-if="::(Auth.isAdmin() || Auth.isAgent()|| userModules[48])" data-ng-class="{active: $state.includes(\'main.channels.openchannel.inbox\')}">\n <a href="/channels/openchannel/inbox/view">\n <i class="icon-note"></i>\n <span class="title"> {{\'APPLICATION_INBOX\' | translate}} </span>\n </a>\n </li>\n <!-- START REALTIME CASE -->\n <li data-ng-if="::(Auth.isAdmin() || userModules[49])" data-ng-class="{active: $state.includes(\'main.channels.openchannel.realtime\')}">\n <a href="/channels/openchannel/realtime/view/agents">\n <i class="icon-energy"></i>\n <span class="title">{{\'APPLICATION_REALTIME\' | translate}}</span>\n </a>\n </li>\n <!-- END REALTIME CASE -->\n </ul>\n </li>\n\n <!-- END OPENCHANNEL CASE -->\n <!-- START REALTIME CASE -->\n <li data-ng-if="::(Auth.isAdmin() || userModules[12])" data-ng-class="{active: $state.includes(\'main.channels.realtime\')}">\n <a href="/channels/realtime/view/agents">\n <i class="icon-energy"></i>\n <span class="title">{{\'APPLICATION_REALTIME\' | translate}}</span>\n </a>\n </li>\n <!-- END REALTIME CASE -->\n </ul>\n </li>\n <!-- END CHANNEL LIST CASE -->\n\n <!-- START TOOLS LIST CASE -->\n <li data-ng-if="::(Auth.isAdmin() || userModules[13])" data-ng-class="{active: $state.includes(\'main.tools\') && !$state.is(\'main.tools.yourdashboards.show\')}">\n <a href="javascript:;">\n <i class="icon-wrench"></i>\n <span class="title" >{{\'APPLICATION_TOOLS\' | translate}}</span>\n <span class="arrow" data-ng-class="{ open: $state.includes(\'main.tools\') && !$state.is(\'main.tools.yourdashboards.show\')}"></span>\n </a>\n <ul class="sub-menu">\n <li data-ng-class="{active: $state.includes(\'main.tools.triggers\')}" data-ng-if="::(Auth.isAdmin() || userModules[50])">\n <a href="/tools/triggers/list">\n <i class="icon-bulb"></i>\n <span class="title"> {{\'APPLICATION_TRIGGERS\' | translate}} </span>\n </a>\n </li>\n <li data-ng-class="{active: $state.includes(\'main.tools.automations\')}" data-ng-if="::(Auth.isAdmin() || userModules[51])">\n <a href="/tools/automations/list">\n <i class="icon-settings"></i>\n <span class="title"> {{\'APPLICATION_AUTOMATIONS\' | translate}} </span>\n </a>\n </li>\n <li data-ng-class="{active: $state.includes(\'main.tools.trunks\')}" data-ng-if="::(Auth.isAdmin() || userModules[52])">\n <a href="/tools/trunks/list">\n <i class="icon-link"></i>\n <span class="title"> {{\'APPLICATION_TRUNKS\' | translate}} </span>\n </a>\n </li>\n <li data-ng-class="{active: $state.includes(\'main.tools.intervals\')}" data-ng-if="::(Auth.isAdmin() || userModules[53])">\n <a href="/tools/intervals/list">\n <i class="icon-clock"></i>\n <span class="title"> {{\'APPLICATION_INTERVALS\' | translate}} </span>\n </a>\n </li>\n <li data-ng-class="{active: $state.includes(\'main.tools.variables\')}" data-ng-if="::(Auth.isAdmin() || userModules[54])">\n <a href="/tools/variables/list">\n <i class="fa fa-eye"></i>\n <span class="title" >{{\'APPLICATION_VARIABLES\' | translate}} </span>\n </a>\n </li>\n <li data-ng-class="{active: $state.includes(\'main.tools.tags\')}" data-ng-if="::(Auth.isAdmin() || userModules[55])">\n <a href="/tools/tags/list">\n <i class="icon-tag"></i>\n <span class="title" >{{\'APPLICATION_TAGS\' | translate}} </span>\n </a>\n </li>\n <!-- START TEMPLATE CASE -->\n <li data-ng-class="{active: $state.includes(\'main.tools.templates\')}" data-ng-if="::(Auth.isAdmin() || userModules[56])">\n <a href="/tools/templates/list">\n <i class="icon-docs"></i>\n <span class="title"> {{\'APPLICATION_TEMPLATES\' | translate}} </span>\n </a>\n </li>\n <!-- END TEMPLATE CASE -->\n\n <!-- START PAUSE CASE -->\n <li data-ng-class="{active: $state.includes(\'main.tools.pauses\')}" data-ng-if="::(Auth.isAdmin() || userModules[57])">\n <a href="/tools/pauses/list">\n <i class="icon-control-pause"></i>\n <span class="title"> {{\'APPLICATION_PAUSES\' | translate}} </span>\n </a>\n </li>\n <!-- END PAUSE CASE -->\n\n <!-- START ANSWER CASE -->\n <li data-ng-class="{active: $state.includes(\'main.tools.answers\')}" data-ng-if="::(Auth.isAdmin() || userModules[58])">\n <a href="/tools/answers/list">\n <i class="icon-magic-wand"></i>\n <span class="title"> {{\'APPLICATION_CANNED_ANSWERS\' | translate}} </span>\n </a>\n </li>\n <!-- END ANSWER CASE -->\n\n <!-- START DASHBOARD MANAGER CASE -->\n <li data-ng-class="{active: $state.includes(\'main.tools.yourdashboards\') && !$state.is(\'main.tools.yourdashboards.show\')}" data-ng-if="::(Auth.isAdmin() || userModules[59])">\n <a href="/tools/yourdashboards/list">\n <i class="fa fa-tachometer"></i>\n <span class="title"> {{\'APPLICATION_DASHBOARDS_MANAGER\' | translate}} </span>\n </a>\n </li>\n <!-- END DASHBOARD MANAGER CASE -->\n\n <!-- START SOUND CASE -->\n <li data-ng-class="{active: $state.includes(\'main.tools.sounds\')}" data-ng-if="::(Auth.isAdmin() || userModules[60])">\n <a href="/tools/sounds/list">\n <i class="icon-music-tone-alt"></i>\n <span class="title" >{{\'APPLICATION_SOUNDS\' | translate}}</span>\n <!-- <span data-ng-if="$state.includes(\'main.sounds\')" class="selected"></span> -->\n </a>\n </li>\n <!-- END SOUND CASE -->\n\n <!-- START SCHEDULE CASE -->\n <li data-ng-class="{active: $state.includes(\'main.tools.scheduler\')}" data-ng-if="::(Auth.isAdmin() || userModules[61])">\n <a href="/tools/scheduler/list">\n <i class="icon-calendar"></i>\n <span class="title" >{{\'APPLICATION_SCHEDULER\' | translate}}</span>\n <!-- <span data-ng-if="$state.includes(\'main.sounds\')" class="selected"></span> -->\n </a>\n </li>\n <!-- END SCHEDULE CASE -->\n </ul>\n </li>\n <!-- END TOOLS LIST CASE -->\n\n <!-- START CALLYSQUARE CASE -->\n <li data-ng-if="::(Auth.isAdmin() || userModules[14])" data-ng-class="{active: $state.includes(\'main.square\')}">\n <a href="javascript:;">\n <i class="fa fa-superscript"></i>\n <span class="title" >Cally ²</span>\n <span class="arrow"></span>\n </a>\n <ul class="sub-menu">\n <li data-ng-class="{active: $state.includes(\'main.square.projects\')}">\n <a href="/square/projects/list">\n <i class="fa fa-slack"></i>\n <span class="title" >{{\'APPLICATION_PROJECTS\' | translate}} </span>\n </a>\n </li>\n <li data-ng-class="{active: $state.includes(\'main.square.odbc\')}">\n <a href="/square/odbc/list">\n <i class="fa fa-database"></i>\n <span class="title" >{{\'APPLICATION_ODBC\' | translate}} </span>\n </a>\n </li>\n <li data-ng-class="{active: $state.includes(\'main.square.recordings\')}">\n <a href="/square/recordings/list">\n <i class="icon-microphone"></i>\n <span class="title" >{{\'APPLICATION_RECORDINGS\' | translate}} </span>\n </a>\n </li>\n <li data-ng-class="{active: $state.includes(\'main.square.realtime.view.general\')}">\n <a href="/square/realtime/view/general">\n <i class="icon-energy"></i>\n <span class="title" >{{\'APPLICATION_REALTIME\' | translate}} </span>\n </a>\n </li>\n </ul>\n </li>\n <!-- END CALLYSQUARE CASE -->\n <!-- START JSCRIPTY LIST -->\n <li data-ng-show="::(Auth.isAdmin() || Auth.isAgent() || userModules[15])" data-ng-class="{active: $state.includes(\'main.jscripty\')}">\n <a href="javascript:;" data-ng-class="{\'disabled-link\':!license.jscripty}" >\n <i class="icon-note"></i>\n <span class="title disable-target" >{{\'APPLICATION_JSCRIPTY\' | translate}} </span>\n <span class="arrow"></span>\n </a>\n <ul class="sub-menu" data-ng-if="license.jscripty">\n <!-- -->\n <!-- START PROJECTS CASE -->\n <li data-ng-show="Auth.isAdmin() || Auth.isAgent() || userModules[15]" data-ng-class="{active: $state.includes(\'main.jscripty.projects\')}">\n <a href="/jscripty/projects/list">\n <i class="fa fa-slack"></i>\n <span class="title" >{{\'APPLICATION_PROJECTS\' | translate}} </span>\n </a>\n </li>\n <!-- END PROJECTS CASE -->\n </ul>\n </li>\n <!-- END JSCRIPTY LIST -->\n\n <!-- START MOTION DIALER LIST CASE-->\n <li data-ng-if="::(Auth.isAdmin() || userModules[16])" data-ng-class="{active: $state.includes(\'main.motiondialer\')}">\n <a href="javascript:;" data-ng-class="{\'disabled-link\':!license.dialer}">\n <i class="icon-control-forward"></i>\n <span class="title disable-target" >{{\'APPLICATION_MOTION_DIALER\' | translate}} </span>\n <span class="arrow"></span>\n </a>\n <ul class="sub-menu" data-ng-if="license.dialer">\n <li data-ng-class="{active: $state.includes(\'main.motiondialer.lists\')}">\n <a href="/motiondialer/lists/list">\n <i class="icon-docs"></i>\n <span class="title" >{{\'APPLICATION_LISTS\' | translate}} </span>\n </a>\n </li>\n <li data-ng-class="{active: $state.includes(\'main.motiondialer.blacklist\')}">\n <a href="/motiondialer/blacklist/list">\n <i class="icon-doc"></i>\n <span class="title" >{{\'APPLICATION_BLACKLIST\' | translate}} </span>\n </a>\n </li>\n <li data-ng-class="{active: $state.includes(\'main.motiondialer.processes\')}">\n <a href="/motiondialer/processes/list">\n <i class="icon-settings"></i>\n <span class="title" >{{\'APPLICATION_PROCESSES\' | translate}} </span>\n </a>\n </li>\n <li data-ng-class="{active: $state.includes(\'main.motiondialer.info\')}">\n <a href="/motiondialer/info/view/about">\n <i class="icon-info"></i>\n <span class="title" >{{\'APPLICATION_INFO\' | translate}} </span>\n </a>\n </li>\n </ul>\n </li>\n <!-- END MOTION DIALER LIST CASE-->\n\n <!-- START ANALYTIC LIST CASE -->\n <li data-ng-if="::(Auth.isAdmin() || userModules[17])" data-ng-class="{active: $state.includes(\'main.analytics.reports\')\n || $state.includes(\'main.analytics.extracted\')\n || $state.includes(\'main.analytics.metrics\')}" data-ng-if="::(Auth.isAdmin())">\n <a href="javascript:;">\n <i class="icon-calculator"></i>\n <span class="title" >{{\'APPLICATION_ANALYTICS\' | translate}}</span>\n <span class="arrow" data-ng-class="{ open: $state.includes(\'main.analytics.reports\')\n || $state.includes(\'main.analytics.extracted\')\n || $state.includes(\'main.analytics.metrics\') }"></span>\n </a>\n <ul class="sub-menu">\n <!-- START REPORT CASE -->\n <li data-ng-class="{active: $state.includes(\'main.analytics.reports\')}">\n <a href="/analytics/reports/list">\n <i class="icon-book-open"></i>\n <span class="title" >{{\'APPLICATION_REPORTS\' | translate}}</span>\n <span data-ng-if="$state.includes(\'main.analytics.reports\')" class="selected"></span>\n </a>\n </li>\n <!-- END REPORT CASE -->\n <!-- START EXTRA REPORT CASE -->\n <li data-ng-class="{active: $state.includes(\'main.analytics.extracted\')}">\n <a href="/analytics/extracted/list">\n <i class="fa fa-file-pdf-o"></i>\n <span class="title" >{{\'APPLICATION_EXTRACTED_REPORTS\' | translate}}</span>\n <span data-ng-if="$state.includes(\'main.analytics.extracted\')" class="selected"></span>\n </a>\n </li>\n <!-- END EXTRA REPORT CASE -->\n <!-- START METRICS CASE -->\n <li data-ng-class="{active: $state.includes(\'main.analytics.metrics\')}">\n <a href="/analytics/metrics/list">\n <i class="icon-calculator"></i>\n <span class="title" >{{\'APPLICATION_METRICS\' | translate}}</span>\n <span data-ng-if="$state.includes(\'main.metrics.reports\')" class="selected"></span>\n </a>\n </li>\n <!-- END METRICS CASE -->\n </ul>\n </li>\n <!-- END ANALYTIC LIST CASE -->\n\n <!-- START SETTINGS LIST -->\n <li data-ng-if="::(Auth.isAdmin() || userModules[18])" data-ng-class="{active: $state.includes(\'main.setting\')}">\n <a href="javascript:;">\n <i class="icon-settings"></i>\n <span class="title" >{{\'APPLICATION_SETTINGS\' | translate}}</span>\n <span class="arrow"></span>\n </a>\n <ul class="sub-menu">\n <!-- START GENERAL CASE -->\n <li data-ng-class="{active: $state.includes(\'main.setting.general\')}">\n <a href="/setting/general/view/main">\n <i class="icon-settings"></i>\n <span class="title"> {{\'APPLICATION_GENERAL\' | translate}} </span>\n </a>\n </li>\n <!-- END GENERAL CASE -->\n\n <!-- START UPDATES CASE -->\n <li data-ng-class="{active: $state.includes(\'main.setting.updates\')}">\n <a href="{{license.update ? \'/setting/updates/list\' : \'javascript:;\'}}" data-ng-class="{\'disabled-link\':!license.update}">\n <i class="icon-cloud-download"></i>\n <span class="title disable-target" >{{\'APPLICATION_UPDATES\' | translate}}</span>\n <!-- <span data-ng-if="$state.includes(\'main.updates\')" class="selected"></span> -->\n </a>\n </li>\n <!-- END UPDATES CASE -->\n\n <!-- START SMTP CASE -->\n <li data-ng-class="{active: $state.includes(\'main.setting.smtp\')}">\n <a href="/setting/smtp/view">\n <i class="icon-envelope"></i>\n <span class="title">SMTP</span>\n <!-- <span data-ng-if="$state.includes(\'main.smtp\')" class="selected"></span> -->\n </a>\n </li>\n <!-- END SMTP CASE -->\n\n <!-- START LICENSE CASE -->\n <li data-ng-class="{active: $state.includes(\'main.setting.license\')}">\n <a href="/setting/license/view">\n <i class="icon-info"></i>\n <span class="title"> {{\'APPLICATION_LICENSE\' | translate}} </span>\n </a>\n </li>\n <!-- END LICENSE CASE -->\n\n <!-- START NETWORK CASE -->\n <li data-ng-class="{active: $state.includes(\'main.setting.network\')}">\n <a href="/setting/network/view/localnet">\n <i class="icon-globe"></i>\n <span class="title"> {{\'APPLICATION_NETWORK\' | translate}} </span>\n </a>\n </li>\n <!-- END NETWORK CASE -->\n\n <!-- START SYSTEM CASE -->\n <li data-ng-class="{active: $state.includes(\'main.setting.system\')}">\n <a href="/setting/system/view/general">\n <i class="icon-pie-chart"></i>\n <span class="title"> {{\'APPLICATION_SYSTEM\' | translate}} </span>\n </a>\n </li>\n <!-- END SYSTEM CASE -->\n\n <!-- START CUSTOMIZATION CASE -->\n <li data-ng-class="{active: $state.includes(\'main.setting.customization\')}">\n <a href="/setting/customization/view/general">\n <i class="icon-equalizer"></i>\n <span class="title"> {{\'APPLICATION_CUSTOMIZATION\' | translate}} </span>\n </a>\n </li>\n <!-- END CUSTOMIZATION CASE -->\n </ul>\n </li>\n <!-- END SETTINGS LIST -->\n\n <!-- START INTEGRATION CASE -->\n <li data-ng-if=" (Auth.isAdmin() || Auth.isAgent() || userModules[19]) && integration.active" data-ng-repeat="integration in integrations" data-ng-class="{active: $state.includes(\'main.{{integration.state}}\')}">\n <a href="/{{integration.state}}/list" ng-switch on="integration.state" data-ng-if="integration.state !== \'iframe\' && (Auth.isAdmin() || userModules[19])">\n <i ng-switch-when="zendesk" class="icon-heart"></i>\n <i ng-switch-when="salesforce" class="fa fa-cloud"></i>\n <i ng-switch-default class="icon-handbag"></i>\n <span class="title" >{{integration.name}}</span>\n <span data-ng-if="$state.includes(\'main.{{integration.state}}\')" class="selected"></span>\n </a>\n <a href="/{{integration.state}}/view" data-ng-if="integration.state === \'iframe\'">\n <i class="fa fa-chrome"></i>\n <span class="title" data-ng-if="Auth.isAdmin() || userModules[19]">{{integration.name}}</span>\n <span class="title" data-ng-if="Auth.isAgent()">{{integration.title || integration.name}}</span>\n <span data-ng-if="$state.includes(\'main.{{integration.state}}\')" class="selected"></span>\n </a>\n </li>\n\n <li data-ng-if="::(Auth.isAdmin())" data-ng-class="{active: $state.is(\'main.market\')}">\n <a href="/market">\n <i class="icon-handbag"></i>\n <span class="title" translate>Market Place</span>\n <span data-ng-if="$state.includes(\'main.market\')" class="selected"></span>\n </a>\n </li>\n <!-- END INTEGRATIONS CASE -->\n <li>\n <a href="javascript:;" data-ng-click="activeTour.main = true" data-ng-if="::(!Auth.isAgent())">\n <i class="icon-location-pin"></i>\n <span class="title">{{\'APPLICATION_TAKE_A_TOUR\' | translate}}</span>\n </a>\n </li>\n <li>\n <a href="javascript:;" data-ng-click="about()">\n <i class="icon-info"></i>\n <span class="title">{{\'APPLICATION_ABOUT\' | translate}}</span>\n </a>\n </li>\n\n</ul>\n<!-- END SIDEBAR MENU -->\n</div>\n'); -}]); \ No newline at end of file diff --git a/public/app/fc371ddc.app.js b/public/app/fc371ddc.app.js new file mode 100644 index 0000000..82e363e --- /dev/null +++ b/public/app/fc371ddc.app.js @@ -0,0 +1,91 @@ +"use strict";angular.module("xCallyShuttleApp",["adf","adf.structures.base","adf.widget.clock","adf.widget.iframe","adf.widget.counter","adf.widget.pie-chart","angular-md5","angular.filter","angularFileUpload","ngLetterAvatar","vAccordion","btford.socket-io","chart.js","checklist-model","colorpicker.module","frapontillo.bootstrap-switch","LocalStorageModule","mgo-angular-wizard","ng-slide-down","ngAnimate","ngBootstrap","ngCookies","ngCsv","ngFileSaver","ngJsTree","ngMap","ngPapaParse","ngResource","ngSanitize","notification","oc.lazyLoad","pascalprecht.translate","remoteValidation","smart-table","sprintf","timer","toastr","permission","ui-notification","ui.bootstrap.modal","ui.bootstrap.dropdown","ui.bootstrap.popover","ui.bootstrap.timepicker","ui.bootstrap.tooltip","ui.bootstrap.tpls","ui.bootstrap.accordion","ui.bootstrap.progressbar","ui.bootstrap.buttons","ui.bootstrap.typeahead","ui.grid","ui.grid.autoResize","ui.grid.draggable-rows","ui.grid.exporter","ui.grid.grouping","ui.grid.moveColumns","ui.grid.pagination","ui.grid.treeView","ui.grid.selection","ui.grid.exporter","ui.grid.resizeColumns","ui.router","ui.navbar","ui.select","ui.sortable","xeditable","ngAudio","truncate","ngScrollbars","ngEmoticons","angularSpinner","builder","builder.components","validator","angular-clipboard","ng-code-mirror","angularMoment","jsonFormatter","ui.bootstrap-slider","ui.bootstrap.datepicker","prettyBytes","bootstrapLightbox","rzModule","ckeditor","ngTagsInput","ngJoyRide","adf.widget.linklist"]).constant("CKEDITOR_BASEPATH","assets/plugins/ckeditor/").config(["$stateProvider","$urlRouterProvider","$locationProvider","$httpProvider","$translateProvider","localStorageServiceProvider","dashboardProvider","ScrollBarsProvider","tagsInputConfigProvider",function(a,b,c,d,e,f,g,h,i){i.setActiveInterpolation("tagsInput",{placeholder:!0}),b.otherwise(function(a){var b=a.get("$state");b.go("landing")}),e.useStaticFilesLoader({prefix:"assets/languages/locale-",suffix:".json"}),e.preferredLanguage("en_EN"),e.fallbackLanguage("en_EN"),e.useLocalStorage(),e.useSanitizeValueStrategy(null),c.html5Mode(!0),d.interceptors.push("authInterceptor"),g.structure("4-4-4",{rows:[{columns:[{styleClass:"col-md-4"},{styleClass:"col-md-4"},{styleClass:"col-md-4"}]}]}).structure("3-3-3-3",{rows:[{columns:[{styleClass:"col-md-3"},{styleClass:"col-md-3"},{styleClass:"col-md-3"},{styleClass:"col-md-3"}]}]}),f.setPrefix("motion"),h.defaults={scrollButtons:{scrollAmount:"auto",enable:!0},axis:"y"}}]).factory("authInterceptor",["$rootScope","$q","$cookieStore","$location",function(a,b,c,d){return{request:function(a){return a.headers=a.headers||{},c.get("token")?a.headers.Authorization="Bearer "+c.get("token"):d.path().match(/\/reset\/.[0-9]*/)||d.path("/login"),a}}}]).run(["$rootScope","$location","$state","$stateParams","$window","$q","Auth","RoleStore","editableThemes","editableOptions","License","User","PermissionStore","localStorageService",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n){a.$state=c,a.$stateParams=d,i.bs3.inputClass="input-sm",i.bs3.buttonsClass="btn-xs",j.theme="bs3",a.$on("$stateChangeStart",function(a,c){g.isLoggedInAsync(function(a){!c.authenticate||a||b.path().match(/\/reset\/.[0-9]*/)||b.path("/login")})}),a.updateTableConfig=function(a,b){var c=_.find(a,{name:"All"});c&&(c.value=b)},a.settings={patternName:"[A-Za-z0-9._\\+*!\\-\\[\\]]+",patternPassword:"^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[~!@#$%^&\\-_=+\\[\\{\\]\\}.])[0-9a-zA-Z~!@#$%^&\\-_=+\\[\\{\\]\\}.]{8,}$",patternPasswordLight:"^[a-zA-Z0-9~!@#$%^&\\-_=+\\[\\{\\]\\}.]{6,}$",patternGateway:"^(?:yes|no|[0-9]+)$",patternFaxdetect:"^(?:yes|no|t38|cng|[0-9]+)$",layout:{pageSidebarClosed:n.get("sidebarClosed")||!1,pageQuickSidebarOpened:!1,pageBodySolid:!1,pageAutoScrollOnLoad:1e3}},k.get().$promise.then(function(b){a.license=b.license,a.settings.soundPath=b.soundPath||"/var/opt/motion/server/files/sounds/converted",a.settings.logo=b.logo,a.settings.defaultLogo=b.defaultLogo,a.settings.loginLogo=b.loginLogo,a.settings.defaultLoginLogo=b.defaultLoginLogo,a.settings.footerWhiteLabel=b.footerWhiteLabel,a.settings.defaultFooterWhiteLabel=b.defaultFooterWhiteLabel,m.definePermission("hasCm",function(){return a.license.cm}),m.definePermission("hasChat",function(){return a.license.chat}),m.definePermission("hasMail",function(){return a.license.mail}),m.definePermission("hasFax",function(){return a.license.fax}),m.definePermission("hasSms",function(){return a.license.messaging}),m.definePermission("hasDialer",function(){return a.license.dialer}),m.definePermission("hasJscripty",function(){return a.license.jscripty}),m.definePermission("hasUpdate",function(){return a.license.update}),m.definePermission("hasCustom",function(){return a.license.custom}),m.definePermission("hasOpenChannel",function(){return a.license.openchannel})})["catch"](function(a){console.log(a)}),m.definePermission("agent",function(){return g.isAgent()}),m.definePermission("admin",function(){return g.isAdmin()}),m.definePermission("user",function(a,b){var c=f.defer(),d=g.getCurrentUser().$promise;return d?d.then(function(a){_.includes(_.map(a.Modules,"id"),b.toState.data.permissions.id)&&"user"===a.role?c.resolve():c.reject()})["catch"](function(){c.reject()}):c.resolve(),c.promise})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.analytics",{url:"/analytics",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:17}}})}]),angular.module("xCallyShuttleApp").factory("Extracted",["$resource",function(a){return a("/api/analytics/extracted/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.analytics.extracted",{url:"/extracted",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("AnalyticExtractedListCtrl",["$scope","$translate","gridOptions","Extracted","uiGridConstants",function(a,b,c,d,e){a.moment=moment,a.Extracted=d,a.initView=function(){var b={exporterCsvFilename:"ExtractedReports.csv",columnDefs:[{name:"name"},{name:"startDate",displayName:"APPLICATION_START_DATE",filterHeaderTemplate:'<div class="ui-grid-filter-container row"><div ng-repeat="colFilter in col.filters" class="col-md-6 col-md-offset-0 col-sm-5 col-sm-offset-0 col-xs-5 col-xs-offset-0"><div custom-grid-date-filter-header></div></div></div>',filters:[{name:"From",condition:e.filter.GREATER_THAN_OR_EQUAL,hasTime:!0},{name:"To",condition:e.filter.LESS_THAN_OR_EQUAL,hasTime:!0}],sort:{direction:e.DESC,priority:0}},{name:"endDate",displayName:"APPLICATION_END_DATE",filterHeaderTemplate:'<div class="ui-grid-filter-container row"><div ng-repeat="colFilter in col.filters" class="col-md-6 col-md-offset-0 col-sm-5 col-sm-offset-0 col-xs-5 col-xs-offset-0"><div custom-grid-date-filter-header></div></div></div>',filters:[{name:"From",condition:e.filter.GREATER_THAN_OR_EQUAL,hasTime:!0},{name:"To",condition:e.filter.LESS_THAN_OR_EQUAL,hasTime:!0}]},{name:"createdAt",displayName:"APPLICATION_RUN_DATE",filterHeaderTemplate:'<div class="ui-grid-filter-container row"><div ng-repeat="colFilter in col.filters" class="col-md-6 col-md-offset-0 col-sm-5 col-sm-offset-0 col-xs-5 col-xs-offset-0"><div custom-grid-date-filter-header></div></div></div>',filters:[{name:"From",condition:e.filter.GREATER_THAN_OR_EQUAL,hasTime:!0},{name:"To",condition:e.filter.LESS_THAN_OR_EQUAL,hasTime:!0}]},{name:"output"},{name:"type"},{name:"status"},{name:"action",width:140,buttons:[{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"},{directive:"<motion-file-download data-ng-show=\"row.entity.status == 'completed'\" resource=\"grid.appScope.Extracted\" params=\"{id:row.entity.id,controller:'download'}\" mimetype=\"'application/'+row.entity.output.toLowerCase()\" filename=\"row.entity.name+'_'+row.entity.startDate.toString()+'_'+row.entity.endDate.toString()+'.'+row.entity.output.toLowerCase()\"></motion-file-download>"}]}]};a.gridOptions=c.gridOptions(d,b,a)}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.analytics.extracted.list",{url:"/list",templateUrl:"app/analytic/extracted/list/list.html",controller:"AnalyticExtractedListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"smart-table",insertBefore:"#ng_load_plugins_before",files:["assets/css/smart_table.css"]}])}]}})}]),angular.module("xCallyShuttleApp").factory("DefaultMetric",["$resource",function(a){return a("/api/analytics/metrics/default/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("AnalyticMetricListCreateModalCtrl",["$scope","$uibModalInstance","Metric","xAlert","$translate","report",function(a,b,c,d,e,f){a.forms={dashboard:void 0},a.item={},a.tables=f.tables,a.ok=function(){return c.save(a.item).$promise.then(function(){b.close()})["catch"](function(a){d.error(a)})},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("AnalyticMetricListCtrl",["$scope","xAlert","Modal","$uibModal","$log","gridOptions","Metric","DefaultMetric","$translate",function(a,b,c,d,e,f,g,h,i){a.$translate=i,a.initView=function(){var b={exporterCsvFilename:"Metrics.csv",columnDefs:[{name:"name"},{name:"table",cellTemplate:"<div style=\"padding:5px\">{{'APPLICATION_'+row.entity.table.toUpperCase() | translate}}</div>"},{name:"description"},{name:"action",width:125,buttons:[{"class":"blue-hoki",href:"/analytics/metrics/view/{{row.entity.id}}/settings",name:"settings"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=f.gridOptions(g,b,a)},a.showMetric=function(a){d.open({animation:!0,templateUrl:"app/analytic/metric/list/view.modal.html",controller:"AnalyticMetricListViewModalCtrl",resolve:{metric:a}})},a.cloneMetric=function(c){return h.get({id:c,controller:"clone"}).$promise.then(function(){b.show(i.instant("MESSAGE_WELL_DONE"),"success"),a.gridOptions.getPage()})["catch"](function(a){b.error(a)})},a.create=function(){var c=d.open({animation:!0,templateUrl:"app/analytic/metric/list/create.modal.html",controller:"AnalyticMetricListCreateModalCtrl"});c.result.then(function(){b.show(i.instant("MESSAGE_WELL_DONE")+"!","success"),a.gridOptions.getPage()},function(){e.info("Modal dismissed at: "+new Date)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.analytics.metrics.list",{url:"/list",templateUrl:"app/analytic/metric/list/list.html",controller:"AnalyticMetricListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"smart-table",insertBefore:"#ng_load_plugins_before",files:["assets/css/smart_table.css"]}])}]}})}]),angular.module("xCallyShuttleApp").controller("AnalyticMetricListViewModalCtrl",["$scope","$uibModalInstance","metric","xAlert","$translate","report",function(a,b,c,d,e,f){a.item=c,a.tables=f.tables,a.close=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").factory("Metric",["$resource",function(a){return a("/api/analytics/metrics/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.analytics.metrics",{url:"/metrics",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("AnalyticMetricViewCtrl",["$scope","xAlert","$translate","$stateParams","$location","Metric","report",function(a,b,c,d,e,f,g){a.tables=g.tables,a.getMetric=function(){return f.get({id:d.id}).$promise.then(function(b){a.metric=b})["catch"](function(a){e.path("/analytics/metrics/list")})},a.updateMetric=function(){return f.update({id:d.id},a.metric).$promise.then(function(){b.show(c.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){b.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.analytics.metrics.view",{url:"/view/:id",templateUrl:"app/analytic/metric/view/view.html",controller:"AnalyticMetricViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.analytics.metrics.view.settings",{url:"/settings",templateUrl:"app/analytic/metric/view/view.settings.html"})}]),angular.module("xCallyShuttleApp").factory("CustomReport",["$resource",function(a){return a("/api/analytics/reports/custom/:precontroller/:id/:controller/:action",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("DefaultReport",["$resource",function(a){return a("/api/analytics/reports/default/:id/:controller/:action",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("ReportListCopyModalCtrl",["$scope","$uibModalInstance","$log","customTreeData",function(a,b,c,d){a.customTreeData=d,a.forms={dashboard:void 0},a.customTreeConfig={multiple:!1,animation:!0,core:{error:function(a){c.error("treeCtrl: error from js tree - "+angular.toJson(a))},check_callback:!0}},a.ac=function(){return!0},a.initCustomScopeTree=function(){a.customTree=a.customTreeInstance.jstree(!0),a.customTree.deselect_all(),a.customTree.open_all()},a.ok=function(){a.customTree.get_selected(!0).length?b.close({parent:a.customTree.get_selected(!0).pop().id}):a.showAlert=!0},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("ReportListCreateModalCtrl",["$scope","$uibModalInstance","path",function(a,b,c){a.path=c,a.forms={dashboard:void 0},a.item={},a.ok=function(){a.item.model=JSON.stringify({title:a.item.name}),b.close(a.item)},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("ReportListExtractModalCtrl",["$scope","$uibModalInstance","$translate",function(a,b,c){a.daily=!1,a.dailySwitch={onText:c.instant("APPLICATION_TODAY"),offText:c.instant("APPLICATION_RANGE"),isActive:!0,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"primary"},a.dates={startDate:moment().subtract(1,"days").startOf("day"),endDate:moment().subtract(1,"days").endOf("day")},a.ranges={},a.ranges[c.instant("APPLICATION_YESTERDAY")]=[moment().subtract(1,"days").startOf("day"),moment().subtract(1,"days").endOf("day")],a.ranges[c.instant("APPLICATION_LAST_SEVEN_DAYS")]=[moment().subtract("days",7).startOf("day"),moment().subtract(1,"days").endOf("day")],a.ranges[c.instant("APPLICATION_LAST_THIRTY_DAYS")]=[moment().subtract("days",30),moment()],a.ranges[c.instant("APPLICATION_LAST_MONTH")]=[moment().subtract(1,"months").startOf("month"),moment().subtract(1,"months").endOf("month")],a.timepicker={timePickerIncrement:1,timePicker12Hour:!1},a.dailyTime={start:moment("00:00","HH:mm"),end:moment("23:59","HH:mm")},a.maxdate=moment().subtract(1,"days").endOf("day").format("YYYY-MM-DD HH:mm"),a.extract=function(c){var d={startDate:moment(a.dates.startDate).format("YYYY-MM-DD"),endDate:moment(a.dates.endDate).format("YYYY-MM-DD"),startTime:a.daily?moment(a.dailyTime.start).format("HH:mm"):moment(a.dates.startDate).format("HH:mm"),endTime:a.daily?moment(a.dailyTime.end).format("HH:mm"):moment(a.dates.endDate).format("HH:mm"),daily:a.daily,action:c};b.close(d)},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("AnalyticReportListCtrl",["$scope","xAlert","$translate","$location","$log","Modal","$uibModal","FileSaver","Blob","gridOptions","CustomReport","DefaultReport","ReportTree","localStorageService",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n){function o(){var b=n.get("lastMotionReportNode")||!1,c=n.get("lastMotionReportTree")||!1;return b&&c?(a[c+"Tree"].open_node({id:b}),a[c+"Tree"].select_node({id:b}),!0):!1}function p(b,c){var d={parent:c.id};a.selectedNode=b?a.defaultTree.get_path(c," / "):a.customTree.get_path(c," / "),a.gridOptions?a.gridOptions.getPage({parent:c.id},b?l:k):a.gridOptions=j.gridOptions(b?l:k,q,a,d)}var q={exporterCsvFilename:"reports.csv",columnDefs:[{name:"name"},{name:"description"},{name:"manage",width:120,buttons:[{"class":"{{grid.appScope.defaultTreeActive ? 'display-none' : 'blue-hoki'}}",href:"/analytics/reports/view/{{row.entity.id}}/settings",title:c.instant("APPLICATION_SETTINGS"),name:"settings"},{"class":"{{grid.appScope.defaultTreeActive ? 'display-none' : 'red-sunglo'}}",title:c.instant("APPLICATION_DELETE"),name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"},{"class":"green",title:c.instant("APPLICATION_COPY"),name:"copy",onClick:"grid.appScope.copy(row.entity.id)"},{"class":"purple",title:c.instant("APPLICATION_EXPORT"),name:"export",onClick:"grid.appScope.export(row.entity.id)"}]},{name:"actions",width:60,buttons:[{"class":"yellow",name:"preview",title:c.instant("APPLICATION_PREVIEW"),onClick:"grid.appScope.preview(row.entity.id)"},{"class":"green-turquoise",name:"run",title:c.instant("APPLICATION_RUN"),onClick:"grid.appScope.extract(row.entity.id)"}]}]};a.searchField="",a.ac=function(){return!0},a.initDefaultScopeTree=function(){a.defaultTree=a.defaultTreeInstance.jstree(!0),a.defaultTree.deselect_all(),a.defaultTree.close_all(),a.defaultTreeReady=!0,a.defaultTreeActive=!0,a.previousDefaultNode=""},a.initCustomScopeTree=function(){a.customTree=a.customTreeInstance.jstree(!0),a.customTree.deselect_all(),a.customTree.close_all(),a.customTreeReady=!0,a.previousCustomNode=""},a.$watchGroup(["defaultTreeReady","customTreeReady"],function(b,c,d){b[0]&&b[1]&&(o()||(a.defaultTree.open_node({id:1}),a.customTree.open_node({id:1}),a.defaultTree.select_node({id:"1"})))}),a.updateCustomTree=function(){var c={tree:angular.toJson(a.customTree.get_json("#",{flat:!0}))};return m.update({id:2},c).$promise.then(function(a){console.log("Custom Tree Updated")})["catch"](function(a){b.error(a)})},a.configTrees=function(){a.defaultTreeConfig={multiple:!1,animation:!0,core:{error:function(a){e.error("treeCtrl: error from js tree - "+angular.toJson(a))},check_callback:!0,themes:{name:"default",url:"../../../assets/css/jstree-metronic/style.css"}},plugins:["search"]},a.customTreeConfig={multiple:!1,animation:!0,core:{error:function(a){e.error("treeCtrl: error from js tree - "+angular.toJson(a))},check_callback:function(a,b,c,d,e){return console.log(a),!0},themes:{name:"default",url:"../../../assets/css/jstree-metronic/style.css"}},plugins:["contextmenu","dnd","search"],contextmenu:{items:function(b,d){var e={create:{label:c.instant("APPLICATION_CREATE"),action:function(c){a.customTree.create_node(b),a.customTree.open_node(b)}},rename:{label:c.instant("APPLICATION_RENAME"),action:function(c){a.customTree.edit(b)}},remove:{label:c.instant("APPLICATION_REMOVE"),action:function(c){a.deleteNode(b)}}};return"#"===b.parent&&(delete e.rename,delete e.remove),d(e),e}}}},a.deleteNode=function(d){var f=g.open({animation:!0,templateUrl:"app/analytic/report/list/deleteNode.modal.html",controller:["$scope","$uibModalInstance","node",function(a,b,c){a.node=c,a.ok=function(){b.close()},a.cancel=function(){b.dismiss("cancel")}}],resolve:{node:function(){return d.text}}});f.result.then(function(){return k["delete"]({precontroller:"node",id:d.id}).$promise.then(function(){b.show(c.instant("MESSAGE_WELL_DONE"),"success"),a.customTree.delete_node(d),a.previousCustomNode==d.id&&a.customTree.select_node({id:d.parent})})["catch"](function(a){b.error(a)})},function(){e.info("Modal dismissed at: "+new Date)})},a.searchTrees=function(){a.defaultTree.search(a.searchField),a.customTree.search(a.searchField)},a.selectDefaultNode=function(){if(a.customTreeReady){a.previousCustomNode="";var b=a.defaultTree.get_selected(!0),c=b.pop();if(a.defaultTree.deselect_node(b[0],!0),a.customTree.deselect_all(),a.defaultTree.select_node(c,!0),c.id===a.previousDefaultNode)return void console.log("def");a.previousDefaultNode=c.id,n.set("lastMotionReportNode",c.id),n.set("lastMotionReportTree","default"),a.defaultTreeActive=!0,p(!0,c)}},a.selectCustomNode=function(){if(a.defaultTreeReady){a.previousDefaultNode="";var b=a.customTree.get_selected(!0),c=b.pop();if(a.customTree.deselect_node(b[0],!0),a.defaultTree.deselect_all(),a.customTree.select_node(c,!0),c.id===a.previousCustomNode)return void console.log("cus");a.previousCustomNode=c.id,n.set("lastMotionReportNode",c.id),n.set("lastMotionReportTree","custom"),a.defaultTreeActive=!1,p(!1,c)}},a.getTrees=function(){return m.query().$promise.then(function(b){a.defaultTreeData=JSON.parse(b[0].tree),a.customTreeData=JSON.parse(b[1].tree),a.configTrees()})["catch"](function(a){b.error(a)})},a.create=function(){var c=g.open({animation:!0,templateUrl:"app/analytic/report/list/create.modal.html",controller:"ReportListCreateModalCtrl",resolve:{path:function(){return a.selectedNode}}});c.result.then(function(c){return c.parent=a.previousCustomNode,k.save(c).$promise.then(function(a){d.path("/analytics/reports/view/"+a.id+"/settings")})["catch"](function(a){b.error(a)})},function(){e.info("Modal dismissed at: "+new Date)})},a.copy=function(d){var f=a.defaultTreeActive?l:k,h=g.open({animation:!0,templateUrl:"app/analytic/report/list/copy.modal.html",controller:"ReportListCopyModalCtrl",resolve:{customTreeData:function(){return a.customTree.get_json("#",{flat:!0})}}});h.result.then(function(e){return f.save({id:d,controller:"copy"},e).$promise.then(function(){a.gridOptions.getPage(),b.show(c.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){b.error(a)})},function(){e.info("Modal dismissed at: "+new Date)})},a["export"]=function(c){var d=a.defaultTreeActive?l:k;return d.get({id:c,controller:"export"}).$promise.then(function(a){var b=new i([angular.toJson(a)],{type:"application/json;charset=utf-8"});h.saveAs(b,a.name+".json")})["catch"](function(a){b.error(a)})},a["import"]=function(d){var e=JSON.parse(d);e.parent=a.previousCustomNode;var f=!(!e.name||!e.parent),g=!0;return _.forEach(e.Fields,function(a){a.field&&a.alias||(g=!1)}),f&&g?k.save({controller:"import"},e).$promise.then(function(){a.gridOptions.getPage(),b.show(c.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){b.error(a)}):void b.show(c.instant("MESSAGE_INVALID_JSON"),"danger")},a.preview=function(b){g.open({animation:!0,templateUrl:"app/analytic/report/list/preview.modal.html",controller:"ReportListPreviewModalCtrl",size:"full",resolve:{report:function(){return{id:b,tree:a.defaultTreeActive?"default":"custom"}}}})},a.extract=function(d){var f=g.open({animation:!0,templateUrl:"app/analytic/report/list/extract.modal.html",controller:"ReportListExtractModalCtrl",size:"md",resolve:{report:function(){return{id:d,tree:a.defaultTreeActive?"default":"custom"}}}});f.result.then(function(e){e.daily||delete e.daily;var f=a.defaultTreeActive?l:k;return f.get(_.merge({id:d,controller:"extract"},e)).$promise.then(function(){b.show(c.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){b.error(a)})},function(){e.info("Modal dismissed at: "+new Date)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.analytics.reports.list",{url:"/list",templateUrl:"app/analytic/report/list/list.html",controller:"AnalyticReportListCtrl"})}]),angular.module("xCallyShuttleApp").controller("ReportListPreviewModalCtrl",["$scope","$uibModalInstance","report","xAlert","$translate","$timeout","CustomReport","DefaultReport",function(a,b,c,d,e,f,g,h){a.daily=!1,a.dailySwitch={onText:e.instant("APPLICATION_TODAY"),offText:e.instant("APPLICATION_RANGE"),isActive:!0,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"primary"},a.dates={startDate:moment().subtract(1,"days").startOf("day"),endDate:moment().subtract(1,"days").endOf("day")},a.ranges={},a.ranges[e.instant("APPLICATION_YESTERDAY")]=[moment().subtract(1,"days").startOf("day"),moment().subtract(1,"days").endOf("day")],a.ranges[e.instant("APPLICATION_LAST_SEVEN_DAYS")]=[moment().subtract("days",7).startOf("day"),moment().subtract(1,"days").endOf("day")],a.ranges[e.instant("APPLICATION_LAST_THIRTY_DAYS")]=[moment().subtract("days",30),moment()],a.ranges[e.instant("APPLICATION_LAST_MONTH")]=[moment().subtract(1,"months").startOf("month"),moment().subtract(1,"months").endOf("month")],a.timepicker={timePickerIncrement:1,timePicker12Hour:!1},a.dailyTime={start:moment("00:00","HH:mm"),end:moment("23:59","HH:mm")},a.maxdate=moment().subtract(1,"days").endOf("day").format("YYYY-MM-DD HH:mm");var i={offset:0,limit:25,sort:null,where:{},order:{}};a.gridOptions={paginationPageSizes:[10,25,50],paginationPageSize:25,useExternalPagination:!0,enableSorting:!1,enableFiltering:!0,useExternalFiltering:!0,enableGrouping:!1,enableColumnMenus:!1,treeRowHeaderAlwaysVisible:!1,gridMenuShowHideColumns:!1,enableGridMenu:!1,onRegisterApi:function(b){a.gridApi=b,b.pagination.on.paginationChanged(a,function(b,c){i.offset=(b-1)*c,i.limit=c,a.getPage()}),b.core.on.filterChanged(a,function(){var b=this.grid,c={};b.columns.forEach(function(a){a.filters[0].term&&(c[a.field]=a.filters[0].term)}),i.where=c,a.getPage()})}},a.getPage=function(){var b={offset:i.offset,limit:i.limit,startDate:moment(a.dates.startDate).format("YYYY-MM-DD"),endDate:moment(a.dates.endDate).format("YYYY-MM-DD"),startTime:a.daily?moment(a.dailyTime.start).format("HH:mm"):moment(a.dates.startDate).format("HH:mm"),endTime:a.daily?moment(a.dailyTime.end).format("HH:mm"):moment(a.dates.endDate).format("HH:mm"),daily:a.daily};_.forOwn(i.where,function(a,c){b[c]=a});var e="custom"===c.tree?g:h;return e.get(_.merge({id:c.id,controller:"preview"},b)).$promise.then(function(b){a.gridOptions.totalItems=b.count,a.gridOptions.paginationPageSizes[3]=b.count,a.gridOptions.data=b.rows,a.showResult=!0})["catch"](function(a){d.error(a)})},a.cancel=function(){b.dismiss("cancel")},f(function(){a.getPage()})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.analytics.reports",{url:"/reports",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").factory("ReportAgent",["$resource",function(a){return a("/api/report/agents/:id/:controller",{name:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("ReportIntegration",["$resource",function(a){return a("/api/report/integrations/:id/:controller",{name:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("ReportMember",["$resource",function(a){return a("/api/report/members/:id/:controller",{name:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("ReportTree",["$resource",function(a){return a("/api/analytics/reports/trees/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("AnalyticReportViewCtrl",["$scope","xAlert","$translate","$stateParams","$location","ReportAgent","ReportCall","ReportMailSession","ReportSmsSession","ReportMember","ReportQueue","ReportIntegration","ReportChatSession","DefaultReport","CustomReport","Metric","report",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){function r(c){var d=_.find(a.tables,{value:c}).resource;d.get({controller:"describe"}).$promise.then(function(b){a.tableFields=_.map(b,function(a,b){return"$promise"!==b&&"$resolved"!==b?{name:b,value:b}:void 0})})["catch"](function(a){b.error(a)})["finally"](function(){s(c)})}function s(c){return p.get({controller:"table",table:c}).$promise.then(function(b){_.forEach(b.rows,function(b){a.tableFields.push({name:"<strong>Metric.</strong>"+b.name,alias:b.name,value:b.metric,MetricId:b.id})})})["catch"](function(a){b.error(a)})}function t(a){return String(a).replace(/</g,"<").replace(/>/g,">")}function u(a){if(!a)return"";for(var b="(",c=0;c<a.rules.length;c++)if(c>0&&(b+=" <strong>"+a.operator+"</strong> "),a.rules[c].group)b+=u(a.rules[c].group);else switch(b+=a.rules[c].field,a.rules[c].condition){case"IS NULL":case"IS NOT NULL":b+=" "+t(a.rules[c].condition);break;case"IS EMPTY":b+=" = ''";break;case"IS NOT EMPTY":b+=" != ''";break;default:b+=" "+t(a.rules[c].condition)+" "+a.rules[c].value}return b+")"}a.$translate=c,a.tempReport={},a.tables=q.tables;var v={group:{operator:"AND",rules:[]}};a.getReport=function(){return a.firstLoad=!0,o.get({id:d.id}).$promise.then(function(b){a.report=b,_.forEach(a.report.Fields,function(a){delete a.id}),a.report.conditions=a.report.conditions?JSON.parse(a.report.conditions):_.clone(v,!0),a.report.Fields.length&&a.getPreview()})["catch"](function(a){console.error(a),e.path("/analytics/reports/list")})},a.randomName=function(a,b){var c=[];for(a=a||5,b=b||"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";--a;)c.push(b.charAt(Math.floor(Math.random()*b.length)));return c.join("")},a.$watch("report.table",function(b,c){b&&(r(b),c&&(a.tempReport[c]={conditions:a.report.conditions,fields:a.report.Fields}),a.firstLoad?a.firstLoad=!1:a.tempReport[b]?(a.report.Fields=a.tempReport[b].fields,a.report.conditions=a.tempReport[b].conditions):(a.report.Fields=[],a.report.conditions=_.clone(v,!0)))},!0),a.setMetricId=function(b,c){a.report.Fields[c].MetricId=b.MetricId?b.MetricId:null,a.report.Fields[c].alias=b.MetricId?b.alias:b.name},a.groupByField=[{name:"APPLICATION_YES",value:!0},{name:"APPLICATION_NO",value:!1}],a.functions=[{name:"Sum",value:"SUM"},{name:"Count",value:"COUNT"},{name:"Count Distinct",value:"COUNT DISTINCT"},{name:"Maximum",value:"MAX"},{name:"Minimum",value:"MIN"},{name:"Average",value:"AVG"},{name:"Group Concat",value:"GROUP_CONCAT"},{name:"Group Concat(asc)",value:"GROUP_CONCAT ASC"},{name:"Group Concat(desc)",value:"GROUP_CONCAT DESC"}],a.formatFunctions=[{name:"Sec To Time",value:"SEC_TO_TIME"},{name:"Date",value:"DATE"},{name:"Hour",value:"HOUR"},{name:"Round",value:"ROUND"},{name:"Unix TimeStamp",value:"UNIX_TIMESTAMP"}],a.addField=function(){a.report.Fields.push({groupBy:!1,custom:!1})},a.removeField=function(b){a.report.Fields.splice(b,1)},a.sortableOptions={"ui-floating":!0,cancel:".unsortable",handle:".report-field-handle",axis:"y"},a.toggleCustom=function(b){b.custom=!b.custom,b.custom||_.find(a.tableFields,{value:b.field})||(b.field=null)},a.updateReport=function(){if(a.report.Fields.length){var e=angular.copy(a.report);return console.log(e.conditions),e.conditions=angular.toJson(e.conditions),_.forEach(e.Fields,function(a){a.custom&&delete a.MetricId}),o.update({id:d.id},e).$promise.then(function(){b.show(c.instant("MESSAGE_WELL_DONE")+"!","success"),a.getPreview()})["catch"](function(a){b.error(a)})}b.show(c.instant("MESSAGE_SELECT_A_FIELD"),"danger")},a.$watch("report.conditions",function(b){a.output=b?u(b.group):"()"},!0),a.getPreview=function(){return a.gridOptions=null,o.get({id:d.id,controller:"preview",limit:20}).$promise.then(function(b){a.gridOptions={enableFiltering:!0,treeRowHeaderAlwaysVisible:!1,enableGridMenu:!0,data:b.rows}})["catch"](function(a){console.log(a),b.show(c.instant(a.message||"MESSAGE_QUERY_NOT_VALID"),"warning")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.analytics.reports.view",{url:"/view/:id",templateUrl:"app/analytic/report/view/view.html",controller:"AnalyticReportViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.analytics.reports.view.settings",{url:"/settings",templateUrl:"app/analytic/report/view/view.settings.html"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels",{url:"/channels",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user","agent"],redirectTo:"landing",id:6}}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat",{url:"/chat",template:"<div ui-view></div>", +"abstract":!0,data:{permissions:{only:["admin","user","agent"],redirectTo:"landing",id:8}}})}]),angular.module("xCallyShuttleApp").factory("ChatEnquiry",["$resource",function(a){return a("/api/chat/enquiries/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("ChatReport",["$resource",function(a){return a("/api/report/chats/:id/:controller1/:controller2",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("ChatVisitor",["$resource",function(a){return a("/api/chat/visitors/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("ChatMessage",["$resource",function(a){return a("/api/chat/messages/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("ChatRoom",["$resource",function(a){return a("/api/chat/rooms/:id/:controller",{id:"@id"},{me:{method:"GET",isArray:!0,params:{id:"me"}},users:{method:"GET",params:{id:"users"}},externals:{method:"GET",isArray:!0,params:{id:"type",controller:"external"}},groups:{method:"GET",isArray:!0,params:{id:"groups"}},update:{method:"PUT"},patch:{method:"PATCH"}})}]),angular.module("xCallyShuttleApp").controller("ChatOfflineListCtrl",["$scope","ChatEnquiry","gridOptions","uiGridConstants",function(a,b,c,d){a.initView=function(){var e={exporterCsvFilename:"chat_offline_messages.csv",columnDefs:[{name:"username",cellClass:"text-center"},{name:"email",cellClass:"text-center"},{name:"ChatWebsite.name",displayName:"Website",cellClass:"text-center"},{name:"createdAt",displayName:"createdAt",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div><span am-time-ago="row.entity.createdAt"></span></div>',field:"createdAt",sort:{direction:d.DESC,priority:0}},{name:"action",width:75,buttons:[{"class":"blue-hoki",href:"/channels/chat/offline/view/{{row.entity.id}}",name:"detail"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.fullname, row.entity.id)"}]}]};a.gridOptions=c.gridOptions(b,e,a)}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.offline.list",{url:"/list",templateUrl:"app/channels/chat/offline/list/list.html",controller:"ChatOfflineListCtrl"})}]),angular.module("xCallyShuttleApp").directive("enquiryMessage",["$rootScope","$translate","MailMessage","List","xAlert",function(a,b,c,d,e){return{restrict:"E",scope:{message:"=",listId:"="},templateUrl:"app/channels/chat/offline/message/message.directive.html",link:function(c){c.openContact=function(f){return c.listId?d.save({listId:c.listId,controller:"contacts"},{email:f}).$promise.then(function(b){var c=_.find(a.$root.workspaces,{contactID:b.id});c?c.active=!0:a.$root.workspaces.push({active:!0,"class":"icon-user",contactID:b.id,name:b.email,type:"contact"})})["catch"](function(a){e.error(a)}):void e.show(b.instant("MESSAGE_NO_LIST_CONFIGURED"),"info")}}}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.offline",{url:"/offline",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:32}}})}]),angular.module("xCallyShuttleApp").controller("ChatOfflineViewCtrl",["$scope","$stateParams","$translate","$rootScope","ChatEnquiry","List","xAlert",function(a,b,c,d,e,f,g){a.initView=function(){return e.get({id:b.id}).$promise.then(function(b){a.enquiry=b})["catch"](function(a){g.error(a)})},a.openContact=function(b){return a.enquiry.ChatWebsite.ListId?f.save({listId:a.enquiry.ChatWebsite.ListId,controller:"contacts"},{email:b}).$promise.then(function(a){var b=_.find(d.$root.workspaces,{contactID:a.id});b?b.active=!0:d.$root.workspaces.push({active:!0,"class":"icon-user",contactID:a.id,name:a.email,type:"contact"})})["catch"](function(a){g.error(a)}):void g.show(c.instant("MESSAGE_NO_LIST_CONFIGURED"),"info")}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.offline.view",{url:"/view/:id",templateUrl:"app/channels/chat/offline/view/view.html",controller:"ChatOfflineViewCtrl"})}]),angular.module("xCallyShuttleApp").controller("ChatOnlineListCtrl",["$scope","ChatRoom","gridOptions",function(a,b,c){a.initView=function(){var d={exporterCsvFilename:"chat_online_messages.csv",columnDefs:[{name:"ChatVisitor.fullname",displayName:"APPLICATION_FULLNAME",cellClass:"text-center"},{name:"ChatVisitor.email",displayName:"APPLICATION_EMAIL",cellClass:"text-center"},{name:"action",width:100,buttons:[{"class":"blue-hoki",href:"/channels/chat/online/view/{{row.entity.id}}/detail",name:"detail"}]}]};a.gridOptions=c.gridOptions(b,d,a,{id:"online"})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.online.list",{url:"/list",templateUrl:"app/channels/chat/online/list/list.html",controller:"ChatOnlineListCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.online",{url:"/online",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:8}}})}]),angular.module("xCallyShuttleApp").controller("ChatOnlineViewCtrl",["$scope","$stateParams","ChatRoom",function(a,b,c){a.initView=function(){return a.config={autoHideScrollbar:!1,theme:"light",advanced:{updateOnContentResize:!0},setHeight:400,scrollInertia:0},c.get({id:b.id}).$promise.then(function(b){a.chatRoom=b})["catch"](function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.online.view",{url:"/view/:id",templateUrl:"app/channels/chat/online/view/view.html",controller:"ChatOnlineViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.channels.chat.online.view.detail",{url:"/detail",templateUrl:"app/channels/chat/online/view/view.detail.html",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/news.css"]}])}]}})}]),angular.module("xCallyShuttleApp").controller("PreviewCtrl",["$scope",function(a){a.message="Hello"}]),angular.module("xCallyShuttleApp").directive("preview",["$rootScope",function(a){return{templateUrl:"app/channels/chat/preview/preview.html",restrict:"EA",link:function(a,b,c){}}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("preview",{url:"/preview",templateUrl:"app/channels/chat/preview/preview.html",controller:"PreviewCtrl",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:8}}})}]),angular.module("xCallyShuttleApp").factory("ChatQueue",["$resource",function(a){return a("/api/chat/queues/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("ChatQueueListCtrl",["$scope","ChatQueue","gridOptions","Auth","$uibModal",function(a,b,c,d,e){a.initView=function(){a.Auth=d;var e={exporterCsvFilename:"chat_queues.csv",columnDefs:[{name:"name"},{name:"description"},{name:"strategy"},{name:"timeout"},{name:"action",width:100,buttons:[{"class":"blue-hoki",href:"/channels/chat/queues/view/{{row.entity.id}}/settings",name:"settings"},{"class":"green-meadow",href:"/channels/chat/queues/view/{{row.entity.id}}/agents",name:"agents",hide:"user"===d.getCurrentUser().role},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=c.gridOptions(b,e,a)},a.createItem=function(){var b=e.open({animation:!0,templateUrl:"app/channels/chat/queue/list/list.create.modal.html",controller:"ChatQueueListCreateCtrl",size:"lg"});b.result.then(function(){a.gridOptions.getPage()})}}]),angular.module("xCallyShuttleApp").controller("ChatQueueListCreateCtrl",["$scope","$uibModalInstance","$translate","xAlert","ChatQueue","Team",function(a,b,c,d,e,f){a.form={},a.item={penalty:0,agents:[]},a.getTeams=function(){return f.get({controller:"associations"}).$promise.then(function(b){a.teams=b.rows}).then(function(){ComponentsDropdowns.bindQueue(a.teams,[],function(){return{select:function(b){a.item.agents=_.union(a.item.agents,b)},deselect:function(b){a.item.agents=_.difference(a.item.agents,b)}}})})["catch"](function(a){console.error(a)})},a.save=function(){return e.save(a.item).$promise.then(function(a){d.show(c.instant("MESSAGE_WELL_DONE"),"success"),b.close(a)})["catch"](function(a){d.error(a)})},a.cancel=function(){b.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.queues.list",{url:"/list",templateUrl:"app/channels/chat/queue/list/list.html",controller:"ChatQueueListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/jquery-multi-select/css/multi-select.css","assets/plugins/jquery-multi-select/js/jquery.multi-select.js","assets/plugins/jquery-quicksearch/jquery.quicksearch.js","assets/scripts/components-dropdowns.js"]})}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.queues",{url:"/queues",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:30}}})}]),angular.module("xCallyShuttleApp").controller("ChatQueueViewCtrl",["$scope","$http","xAlert","$translate","$stateParams","ChatQueue","Team","Auth",function(a,b,c,d,e,f,g,h){a.Auth=h;var i=function(){return{select:function(b){return f.save({id:a.queue.id,controller:"agents"},{agents:b,penalty:a.queue.penalty}).$promise.then(function(){a.getTeams()})["catch"](function(a){console.log(a)})},deselect:function(b){return f["delete"]({id:a.queue.id,controller:"agents",agents:b}).$promise.then(function(){a.getTeams()})["catch"](function(a){console.log(a)})}}};a.getQueue=function(){b.get("/api/chat/queues/"+e.id).success(function(b){b.penalty=0,a.queue=b}).error(function(a){console.error(a)})},a.updateChatQueue=function(){var f=angular.copy(a.queue);b.put("/api/chat/queues/"+e.id,f).success(function(){c.show(d.instant("MESSAGE_WELL_DONE")+"!","success")}).error(function(b){a.queue=f,b.errors.forEach(function(a){c.error(err)})})},a.getTeams=function(){return g.get({controller:"associations"}).$promise.then(function(b){return a.teams=b.rows,f.get({id:e.id,controller:"agents"}).$promise}).then(function(b){ComponentsDropdowns.bindChatQueue(a.teams,_.map(b.rows,function(a){return{id:a.id,penalty:a.UserHasChatQueue.penalty}}),i)})["catch"](function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.queues.view",{url:"/view/:id",templateUrl:"app/channels/chat/queue/view/view.html",controller:"ChatQueueViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.channels.chat.queues.view.settings",{url:"/settings",templateUrl:"app/channels/chat/queue/view/view.settings.html"}).state("main.channels.chat.queues.view.agents",{url:"/agents",templateUrl:"app/channels/chat/queue/view/view.agents.html",cache:!1,serie:!0,resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/jquery-multi-select/css/multi-select.css","assets/plugins/jquery-multi-select/js/jquery.multi-select.js","assets/plugins/jquery-quicksearch/jquery.quicksearch.js","assets/scripts/components-dropdowns.js"]})}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.realtime",{url:"/realtime",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:33}}})}]),angular.module("xCallyShuttleApp").controller("ChatRealtimeViewAgentCtrl",["$scope","$log","$uibModal","$translate","socket","xAlert","Agent","Pause","Action","ChatQueue","usSpinnerService","$q","uiGridConstants","Auth",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n){function o(){return k.spin("grid-spinner"),g.get(t).$promise.then(function(b){a.gridOptions.totalItems=b.count,a.gridOptions.data=[],b.rows.forEach(function(a){q(a)})})["catch"](function(a){f.error(a)})["finally"](function(){k.stop("grid-spinner")})}function p(){e.socket.on("agent:save",function(b){b=b.newValues||b;var c=_.find(a.gridOptions.data,{agentId:b.id,isAgent:!0});c&&(c.online=_.has(b,"online")?b.online:c.online,c.lastLoginAt=_.has(b,"lastLoginAt")?b.lastLoginAt:c.lastLoginAt,c.pause=_.has(b,"smsPause")?b.chatPause:c.chatPause,c.pauseType=_.has(b,"pauseType")?b.pauseType:c.pauseType,c.lastPauseAt=_.has(b,"lastPauseAt")?b.lastPauseAt:c.lastPauseAt,c.ipaddr=_.has(b,"ipaddr")?b.ipaddr:c.ipaddr,c.port=_.has(b,"port")?b.port:c.port,c.fullcontact=_.has(b,"fullcontact")?b.fullcontact:c.fullcontact,c.useragent=_.has(b,"useragent")?b.useragent:c.useragent,c.lastms=_.has(b,"lastms")?b.lastms:c.lastms,c.internal=_.has(b,"internal")?b.internal:c.internal,_.map(a.gridOptions.data,function(a){a.isAgent||a.agentId!==b.id||(a.online=_.has(b,"online")?b.online:a.online)}))}),e.socket.on("agent:remove",function(b){_.remove(a.gridOptions.data,{agentId:b.id})}),e.socket.on("user_has_chat_queue:save",function(b){var c=_.includes(_.map(a.CurrentUser.PChatQueues,"id"),b.ChatQueueId)||n.isAdmin();if(c){var d=_.find(a.gridOptions.data,{agentId:b.UserId,isAgent:!0});if(d){var e=a.gridOptions.data.indexOf(d);a.gridOptions.data.splice(e+1,0,{isAgent:!1,agentId:b.UserId,queue:b.queue,queueId:b.ChatQueueId,agent:b.membername,online:d.online})}}}),e.socket.on("user_has_chat_queue:remove",function(b){_.remove(a.gridOptions.data,{agentId:b.UserId,queueId:b.ChatQueueId})})}function q(b){a.gridOptions.data.push({isAgent:!0,agentId:b.id,agent:b.name,online:b.online,lastLoginAt:b.lastLoginAt,lastPauseAt:b.lastPauseAt,pause:b.chatPause,pauseType:b.pauseType,ipaddr:b.ipaddr,port:b.port,fullcontact:b.fullcontact,useragent:b.useragent,lastms:b.lastms,internal:b.internal,$$treeLevel:0}),b.ChatQueues.forEach(function(c){a.gridOptions.data.push({isAgent:!1,agentId:b.id,queue:c.name,queueId:c.id,agent:b.name,online:b.online})})}function r(){return h.get().$promise.then(function(b){a.pauses=b.rows,e.syncUpdates("pause",a.pauses)})["catch"](function(a){f.error(a)})}function s(){return j.get().$promise.then(function(b){a.chatQueues=b.rows,e.syncUpdates("chat_queue",a.chatQueues)})["catch"](function(a){f.error(a)})}a.chatQueues=[];var t={controller:"realtime",controller1:"chat",offset:0,limit:10};a.moment=moment,a.initAgents=function(){a.gridOptions={enableGridMenu:!0,headerCellFilter:"translate",enableHorizontalScrollbar:0,enableVerticalScrollbar:0,enableFiltering:!0,showGridFooter:!0,paginationPageSizes:[10,25,50,75],paginationPageSize:10,useExternalPagination:!0,useExternalSorting:!0,useExternalFiltering:!0,multiSelect:!0,showTreeExpandNoChildren:!0,columnDefs:[{name:"name",displayName:"APPLICATION_AGENT",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div data-ng-if="row.entity.isAgent">{{row.entity.agent}} <{{row.entity.internal}}></div>'},{name:"online",displayName:"APPLICATION_ONLINE",width:150,headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div data-ng-if="row.entity.online != null && row.entity.isAgent"><i class="fa" data-ng-class="{\'font-green\':row.entity.online, \'font-red\':!row.entity.online,\'fa-user\':row.entity.online,\'fa-user-times\':!row.entity.online}"></i> <span data-ng-if="row.entity.online" class="left-margin">(<css-timer start-time="row.entity.lastLoginAt)"></css-timer>)</span></div>',filter:{type:m.filter.SELECT,selectOptions:[{value:"true",label:"ONLINE"},{value:"false",label:"OFFLINE"}]}},{name:"chatPause",displayName:"APPLICATION_PAUSE",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div data-ng-if="row.entity.pause != null && row.entity.online" class="ui-grid-vcenter" data-ng-class="{\'paused-agent\':row.entity.pause}"><i data-ng-if="row.entity.pause" data-ng-click="grid.appScope.pause(row.entity.agentId,\'unpause\')" class="fa fa-play font-green pointer-cursor left-margin" title="{{\'APPLICATION_RESUME\' | translate}}"></i><i class="fa fa-pause font-yellow pointer-cursor" data-ng-click="grid.appScope.pause(row.entity.agentId,\'pause\',\'DEFAULT PAUSE\')" title="{{\'APPLICATION_DEFAULT_PAUSE\' | translate}}"></i><select data-ng-if="grid.appScope.pauses.length" class="pause-select pointer-cursor" data-ng-model="grid.appScope.pauseType" data-ng-change="grid.appScope.pause(row.entity.agentId,\'pause\',grid.appScope.pauseType)"><option class="pointer-cursor" data-ng-repeat="pause in grid.appScope.pauses">{{pause.name}}</option></select> <span data-ng-if="row.entity.pause">({{row.entity.pauseType}})</span><span class="left-margin"><css-timer data-ng-if="row.entity.pause" start-time="row.entity.lastPauseAt"></css-timer></span></div>',filter:{type:m.filter.SELECT,selectOptions:[{value:"true",label:"PAUSED"},{value:"false",label:"NOT PAUSED"}]},enableSorting:!1,enableColumnMenu:!1},{name:"queue",displayName:"APPLICATION_QUEUE",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1},{name:"action",displayName:"",width:170,cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div><button data-ng-if="row.entity.queueId" class="btn btn-xs red-sunglo" data-ng-click="grid.appScope.leaveQueue(row.entity.agentId,row.entity.queueId)"><i class="icon-ban"></i> {{\'APPLICATION_LEAVE\' | translate}}</button><button data-ng-if="row.entity.isAgent && row.treeNode.children.length < grid.appScope.chatQueues.length" class="btn btn-xs blue-hoki" data-ng-click="grid.appScope.joinQueue(row.entity.agentId)"><i class="icon-plus"></i> {{\'APPLICATION_JOIN_QUEUE\' | translate}}</button><div>',enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1}],data:[],gridMenuTitleFilter:function(a){var b=l.defer();return b.resolve(d.instant(a)),b.promise},onRegisterApi:function(b){a.gridApi=b,a.gridApi.grid.registerDataChangeCallback(function(){u(a.gridApi.core.getVisibleRows(a.gridApi.grid).length)}),a.gridApi.treeBase.on.rowExpanded(a,function(b){u(a.gridApi.core.getVisibleRows(a.gridApi.grid).length+b.treeNode.children.length)}),a.gridApi.treeBase.on.rowCollapsed(a,function(b){u(a.gridApi.core.getVisibleRows(a.gridApi.grid).length-b.treeNode.children.length)}),a.gridApi.core.on.sortChanged(a,function(a,b){0===b.length?t.order=null:t.order=b[0].name+" "+b[0].sort.direction.toUpperCase(),o()}),a.gridApi.pagination.on.paginationChanged(a,function(a,b){t.offset=(a-1)*b,t.limit=b,o()}),a.gridApi.core.on.filterChanged(a,function(){var a=this.grid;a.columns.forEach(function(a){a.filters[0].term?t[a.name]=a.filters[0].term:delete t[a.name]}),o()})}},o(),r(),s(),$timeout(function(){p()})};var u=function(a){var b=a?30*a+130:270;angular.element(document.getElementsByClassName("ui-grid")[0]).css("height",b+"px"),angular.element(document.getElementsByClassName("ui-grid-viewport")).css("height",30*a+"px")};a.$on("$destroy",function(){e.unsyncUpdates("agent"),e.unsyncUpdates("user_has_chat_queue")}),a.pause=function(b,c,e){return e&&(a.pauseType=null),i.save({name:c,agent:b,type:e||"DEFAULT PAUSE",data4:e||"DEFAULT PAUSE",channel:"chat"}).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){f.error(a)})},a.joinQueue=function(e){var g=c.open({animation:!0,templateUrl:"app/channels/chat/realtime/view/agent/queue.modal.add.html",controller:"ChatRealtimeViewAgentQueueModalCtrl",resolve:{queues:function(){return _.reject(a.chatQueues,function(b){return!!_.find(a.gridOptions.data,{queue:b.name,isAgent:!1,agentId:e})})}}});g.result.then(function(b){return i.save({name:"QueueAdd",agent:e,queues:_.filter(a.chatQueues,function(a){return _.includes(b.queues,a.id)}),channel:"chat",data1:e,data3:b.queues.join(","),data4:"chat"}).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){f.error(a)})},function(){b.info("Modal dismissed at: "+new Date)})},a.leaveQueue=function(a,b){return i.save({name:"QueueRemove",agent:a,queueId:b,channel:"chat",data1:a,data3:b,data4:"chat"}).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){f.error(a)})},a.showInfo=function(a){c.open({animation:!0,templateUrl:"app/channels/chat/realtime/view/agent/agent.modal.info.html",controller:"ChatRealtimeViewAgentInfoModalCtrl",resolve:{agent:a}})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.realtime.view.agents",{url:"/agents",templateUrl:"app/channels/chat/realtime/view/agent/agent.html",controller:"ChatRealtimeViewAgentCtrl"})}]),angular.module("xCallyShuttleApp").controller("ChatRealtimeViewAgentInfoModalCtrl",["$scope","$uibModalInstance","$http","agent",function(a,b,c,d){a.agent=d,a.close=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("ChatRealtimeViewAgentQueueModalCtrl",["$scope","$uibModalInstance","$http","queues",function(a,b,c,d){a.queues=d,a.item={},a.save=function(){b.close(a.item)},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("ChatRealtimeViewApplicationCtrl",["$scope","$log","$uibModal","$translate","socket","xAlert","ReportChatSession","usSpinnerService","$q","uiGridConstants","$timeout",function(a,b,c,d,e,f,g,h,i,j,k){function l(){return h.spin("spinner-grid"),g.get({controller:"waiting",controller2:"applications"}).$promise.then(function(b){a.gridOptions.data=b.rows})["catch"](function(a){f.error(a)})["finally"](function(){m(),h.stop("spinner-grid")})}function m(){e.socket.on("report_chat_session:save",function(b){var c=_.find(a.gridOptions.data,{id:b.id});c?(_.merge(c,b),b.leaveAt&&k(function(){_.remove(a.gridOptions.data,{id:b.id})},1e4)):b.leaveAt||a.gridOptions.data.push(b)}),e.socket.on("report_chat_session:remove",function(b){_.remove(a.gridOptions.data,{id:b.id})})}a.moment=moment,a.initApplications=function(){a.gridOptions={headerCellFilter:"translate",enableHorizontalScrollbar:0,enableVerticalScrollbar:0,enableFiltering:!0,columnDefs:[{name:"uniqueid",displayName:"APPLICATION_UNIQUEID",headerCellFilter:"translate"},{name:"websitename",displayName:"APPLICATION_WEBSITE",headerCellFilter:"translate"},{name:"application",displayName:"APPLICATION_APPLICATION",headerCellFilter:"translate"},{name:"status",displayName:"APPLICATION_STATUS",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div><span data-ng-if="!row.entity.leaveAt">{{\'APPLICATION_QUEUESTATUS_WAITING\' | translate}}</span><span data-ng-if="row.entity.leaveAt && row.entity.abandon">{{\'APPLICATION_QUEUESTATUS_ABANDON\' | translate}}</span><span data-ng-if="row.entity.leaveAt && row.entity.complete">{{\'APPLICATION_QUEUESTATUS_COMPLETE\' | translate}}</span><span data-ng-if="row.entity.leaveAt && row.entity.timeout">{{\'APPLICATION_TIMEOUT\' | translate}}</span> <span data-ng-if="!row.entity.leaveAt">[<timer start-time="grid.appScope.moment(row.entity.updatedAt).unix()*1000">{{hhours}}:{{mminutes}}:{{sseconds}}</timer>]</span></div>',enableSorting:!1,enableColumnMenu:!1,enableFiltering:!1},{name:"membername",displayName:"APPLICATION_AGENT",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{row.entity.membername || ''}}</span></div>"},{name:"queuename",displayName:"APPLICATION_QUEUE",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{row.entity.queuename || ''}}</span></div>"}],data:[],gridMenuTitleFilter:function(a){var b=i.defer();return b.resolve(d.instant(a)),b.promise},onRegisterApi:function(b){a.gridApi=b,a.gridApi.grid.registerDataChangeCallback(function(){n(a.gridOptions.data.length)})}},l()};var n=function(a){var b=a?30*a+60:270;angular.element(document.getElementsByClassName("ui-grid")[0]).css("height",b+"px"),angular.element(document.getElementsByClassName("ui-grid-viewport")).css("height",30*a+"px")};a.$on("$destroy",function(){e.unsyncUpdates("report_chat_session")})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.realtime.view.applications",{url:"/applications",templateUrl:"app/channels/chat/realtime/view/application/application.html",controller:"ChatRealtimeViewApplicationCtrl"})}]),angular.module("xCallyShuttleApp").controller("ChatRealtimeViewCtrl",["$scope",function(a){a.agents=[{name:"Queues",link:"main.chat.realtime.view.agent.queues"},{name:"Timeline",link:"main.chat.realtime.view.agent.timeline"}],a.sessions=[{name:"Sessions",link:"main.chat.realtime.view.sessions"}]}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.realtime.view",{url:"/view",templateUrl:"app/channels/chat/realtime/view/view.html",controller:"ChatRealtimeViewCtrl"})}]),angular.module("xCallyShuttleApp").factory("ReportChatSession",["$resource",function(a){return a("/api/report/chat/sessions/:id/:controller/:controller2",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.room.external",{url:"/external",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("ChatRoomExternalListCtrl",["$scope","$timeout","socket","Auth","ChatRoom","usSpinnerService","Tag","$uibModal","uibButtonConfig",function(a,b,c,d,e,f,g,h,i){function j(){return g.get().$promise.then(function(b){a.tags=_.map(b.rows,"name")})["catch"](function(a){console.error(a)})}a.openChat=function(b){return e.get({id:b.id}).$promise.then(function(b){var c=_.find(a.workspaces,{id:b.id,type:"chatRoom"});c?c.active=!0:a.workspaces.push({id:b.id,name:b.ChatVisitor.fullname,type:"chatRoom","class":"icon-bubble",active:!0})})["catch"](function(a){console.error(a)})},a.initView=function(){i.activeClass="green-haze",a.id=[],a.query={status:"OPEN",tags:[]},a.gridOptions={enableGridMenu:!1,enableFiltering:!0,enableHorizontalScrollbar:0,enableVerticalScrollbar:0,paginationPageSizes:[10,25,50,75],paginationPageSize:10,flatEntityAccess:!0,showGridFooter:!0,fastWatch:!0,columnDefs:[{name:"id",displayName:"",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div><span>#{{row.entity.id}}</span></div>",width:75,enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1},{name:"userpic",displayName:"",width:35,cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div> <ng-letter-avatar height="20" width="20" fontsize="12" data="{{row.entity.ChatVisitor.fullname}}" avatarcustombgcolor="#B0B0B0" charCount="2" avatarcustomborder="border:2px solid #EA4C61" shape="round"></ng-letter-avatar> </div>',enableColumnMenu:!1,enableSorting:!1,enableFiltering:!1},{name:"fullname",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div><span style="padding-left: 5px;" class="pull-left">{{row.entity.ChatVisitor.fullname}}</span></div>',enableSorting:!0,enableFiltering:!0,enableColumnMenu:!0},{name:"action",cellTemplate:'<div><a class="btn btn-xs green-meadow" href="#" data-ng-click="grid.appScope.openChat(row.entity)">{{\'APPLICATION_CHAT\' | translate}}</a></div>',cellClass:"ui-grid-vcenter",width:100,enableFiltering:!1,enableSorting:!1,enableColumnMenu:!1}],data:[],onRegisterApi:function(b){a.gridApi=b,a.gridApi.selection&&(a.gridApi.selection.on.rowSelectionChanged(a,function(b){b.isSelected?a.id.push(a.gridApi.grid.options.primaryKey?b.entity[a.gridApi.grid.options.primaryKey]:b.entity.id):_.pull(a.id,a.gridApi.grid.options.primaryKey?b.entity[a.gridApi.grid.options.primaryKey]:b.entity.id)}),a.gridApi.selection.on.rowSelectionChangedBatch(a,function(b){b[0].isSelected?a.id=_.union(a.id,_.map(b,a.gridApi.grid.options.primaryKey?"entity."+a.gridApi.grid.options.primaryKey:"entity.id")):_.map(b,a.gridApi.grid.options.primaryKey?"entity."+a.gridApi.grid.options.primaryKey:"entity.id").forEach(function(b){_.pull(a.id,b)})}))}},a.getPage(),j()},a.tagItems=function(){h.open({animation:!0,templateUrl:"app/channels/chat/room/view.tags.modal.html",controller:"ChatRoomViewModalTagCtrl",resolve:{id:function(){return a.id}}}).result.then(function(){a.gridApi.selection.clearSelectedRows(),a.id=[]})},a.onChanged=function(){a.getPage()},a.$watch("query.status",function(){a.getPage()},!0),a.getPage=function(){return f.spin("spinner-grid"),e.get(_.merge({id:"externals"},a.query)).$promise.then(function(b){a.gridOptions.data=b.rows})["catch"](function(a){console.error(a)})["finally"](function(){f.stop("spinner-grid")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.room.external.list",{url:"/list",templateUrl:"app/channels/chat/room/external/list/list.html",controller:"ChatRoomExternalListCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.room.group",{url:"/group",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("ChatRoomGroupListCtrl",["$scope","$timeout","Auth","ChatRoom","usSpinnerService","Tag","uibButtonConfig",function(a,b,c,d,e,f,g){function h(){return f.get().$promise.then(function(b){a.tags=_.map(b.rows,"name")})["catch"](function(a){console.error(a)})}a.getFullnames=function(a){var b=_.map(a.Users,"fullname");return a.ChatVisitor&&b.unshift(a.ChatVisitor.fullname),_.without(b,c.getCurrentUser().fullname).join(", ")},a.openChat=function(b){return d.get({id:b.id}).$promise.then(function(c){var d=_.find(a.workspaces,{id:c.id,type:"chatRoom"});d?d.active=!0:a.workspaces.push({id:c.id,data:b,name:a.getFullnames(c),type:"chatRoom","class":"icon-bubble",active:!0})})["catch"](function(a){console.error(a)})},a.initView=function(){g.activeClass="green-haze",a.query={status:"OPEN",tags:[]},a.currentUser=c.getCurrentUser(),a.gridOptions={enableGridMenu:!1,enableColumnResizing:!0,enableHorizontalScrollbar:0,enableVerticalScrollbar:0,paginationPageSizes:[10,25,50,75],paginationPageSize:10,flatEntityAccess:!0,showGridFooter:!0,fastWatch:!0,columnDefs:[{name:"userpic",displayName:"",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div> <ng-letter-avatar data-ng-if="row.entity.ChatVisitor" height="20" width="20" fontsize="12" data="{{row.entity.ChatVisitor.fullname}}" avatarcustombgcolor="#B0B0B0" charCount="2" avatarcustomborder="border:2px solid #EA4C61" shape="round"></ng-letter-avatar> <ng-letter-avatar data-ng-repeat="user in row.entity.Users | filter:{ id: \'!\' + grid.appScope.currentUser.id} track by user.id" style="margin-right: 3px;" height="20" width="20" fontsize="12" data="{{user.fullname}}" avatarcustombgcolor="#B0B0B0" charCount="2" avatarcustomborder="border:2px solid #3399CC" shape="round"></ng-letter-avatar> </div>',enableColumnMenu:!1,enableSorting:!1,enableFiltering:!1},{name:"Users",displayName:"",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{grid.appScope.getFullnames(row.entity)}}</div>",enableSorting:!0,enableFiltering:!0,enableColumnMenu:!0},{name:"action",cellTemplate:'<div><a class="btn btn-xs green-meadow" href="#" data-ng-click="grid.appScope.openChat(row.entity)">{{\'APPLICATION_CHAT\' | translate}}</a></div>',cellClass:"ui-grid-vcenter",width:100,enableFiltering:!1,enableSorting:!1,enableColumnMenu:!1}],data:[]},a.getPage(),h()},a.onChanged=function(){a.getPage()},a.$watch("query.status",function(){a.getPage()},!0),a.getPage=function(){return e.spin("spinner-grid"), +d.get(_.merge({id:"groups"},a.query)).$promise.then(function(b){a.gridOptions.data=b.rows})["catch"](function(a){console.error(a)})["finally"](function(){e.stop("spinner-grid")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.room.group.list",{url:"/list",templateUrl:"app/channels/chat/room/group/list/list.html",controller:"ChatRoomGroupListCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.room.internal",{url:"/internal",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("ChatRoomInternalListCtrl",["$scope","$timeout","socket","Auth","ChatRoom","usSpinnerService",function(a,b,c,d,e,f){a.openChat=function(b){return e.users({users:[d.getCurrentUser().id,b.id]}).$promise.then(function(c){var d=_.find(a.workspaces,{id:c.id,type:"chatRoom"});d?d.active=!0:a.workspaces.push({id:c.id,name:b.fullname,type:"chatRoom","class":"icon-bubble",active:!0})})["catch"](function(a){console.error(a)})},a.initView=function(){a.gridOptions={enableGridMenu:!1,enableFiltering:!0,enableHorizontalScrollbar:0,enableVerticalScrollbar:0,paginationPageSizes:[10,25,50,75],paginationPageSize:10,flatEntityAccess:!0,showGridFooter:!0,fastWatch:!0,columnDefs:[{name:"userpic",displayName:"",width:35,cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div> <ng-letter-avatar height="20" width="20" fontsize="12" data="{{row.entity.fullname}}" avatarcustombgcolor="#B0B0B0" charCount="2" avatarcustomborder="border:2px solid #3399CC" shape="round"></ng-letter-avatar> </div>',enableColumnMenu:!1,enableSorting:!1,enableFiltering:!1},{name:"fullname",enableSorting:!0,enableFiltering:!0,enableColumnMenu:!0},{name:"action",cellTemplate:'<div><a class="btn btn-xs green-meadow" href="#" data-ng-click="grid.appScope.openChat(row.entity)">{{\'APPLICATION_CHAT\' | translate}}</a></div>',cellClass:"ui-grid-vcenter",width:100,enableFiltering:!1,enableSorting:!1,enableColumnMenu:!1}],data:[]},c.socket.on("user:save",function(b){if(b.online&&d.getCurrentUser().id!==b.id){var c=_.find(a.gridOptions.data,{id:b.id});c?_.merge(c,b):a.gridOptions.data.push(b)}else _.remove(a.gridOptions.data,{id:b.id})}),b(function(){c.socket.on("agent:save",function(b){if(b.online&&d.getCurrentUser().id!==b.id){var c=_.find(a.gridOptions.data,{id:b.id});c?_.merge(c,b):a.gridOptions.data.push(b)}else _.remove(a.gridOptions.data,{id:b.id})})}),e.get({id:"agents"}).$promise.then(function(b){a.gridOptions.data=b.rows})["catch"](function(a){console.error(a)})["finally"](function(){f.stop("spinner-grid")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.room.internal.list",{url:"/list",templateUrl:"app/channels/chat/room/internal/list/list.html",controller:"ChatRoomInternalListCtrl"})}]),angular.module("xCallyShuttleApp").controller("ChatRoomAddCtrl",["$scope","$uibModalInstance","Agent","items",function(a,b,c,d){a.items=d,a.agents=c.get(function(b){a.agents=b,a.items.forEach(function(b){_.remove(a.agents.rows,{id:b.id})})}),a.selected={items:[]},a.ok=function(){b.close(_.union(_.map(a.selected.items,"id"),_.map(a.items,"id")))},a.cancel=function(){b.dismiss()}}]),angular.module("xCallyShuttleApp").controller("ChatRoomCloseCtrl",["$scope","$uibModalInstance","closed","ChatWebsite","websiteId",function(a,b,c,d,e){a.modal={title:"APPLICATION_CONFIRM_CLOSE",text:"MESSAGE_ARE_YOU_SURE_YOU_WANT_TO_CLOSE_THE_CHAT"},a.initDisposition=function(){return d.get({websiteId:e,controller:"dispositions"}).$promise.then(function(b){a.dispositions=b.rows})["catch"](function(a){console.error(a)})},a.item={},a.closed=c,a.ok=function(){b.close(a.item)},a.cancel=function(){b.dismiss()}}]),angular.module("xCallyShuttleApp").directive("chatRoom",["$interval","$rootScope","$uibModal","$notification","$window","socket","Auth","ChatRoom","ngAudio","xAlert","Tag","CannedAnswer","List","$translate",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n){return{restrict:"E",scope:{workspace:"="},templateUrl:"app/channels/chat/room/room.directive.html",link:function(a){a.user=g.getCurrentUser(),a.message={body:""},a.openContact=function(c){return a.chatRoom.ChatWebsite.List?m.save({listId:a.chatRoom.ChatWebsite.List.id,controller:"contacts"},{email:c}).$promise.then(function(a){var c=_.find(b.$root.workspaces,{contactID:a.id});c?c.active=!0:b.$root.workspaces.push({active:!0,"class":"icon-user",contactID:a.id,name:a.email,type:"contact"})})["catch"](function(a){console.error(a)}):void j.show(n.instant("MESSAGE_NO_LIST_CONFIGURED"),"info")},a.modelOptions={debounce:{"default":500,blur:250},getterSetter:!0},a.form={},a.panelLeft="col-md-4",a.panelRight="col-md-8",a.onSelect=function(){a.message.body=a.modelOptions.selectedAnswer,delete a.modelOptions.selectedAnswer},a.togglePanelLeft=function(){a.panelLeft?(a.panelLeft=null,a.panelRight="col-md-12"):(a.panelLeft="col-md-4",a.panelRight="col-md-8")},a.options={link:!0,linkTarget:"_blank",pdf:{embed:!0},image:{embed:!0},audio:{embed:!0},code:{highlight:!0,lineNumbers:!1},basicVideo:!0},a.getAnswers=function(a){return l.get({key:a}).$promise.then(function(a){return console.log(a),_.map(a.rows,"value")})},a.isMyRoom=function(b){return!!_.find(b,{id:a.user.id})},h.get({id:a.workspace.id}).$promise.then(function(c){a.chatRoom=c,a.form.tags=c.tags,a.chatRoom.ChatVisitor&&(a.chatRoom.ChatVisitors=[],a.chatRoom.ChatVisitors.push(a.chatRoom.ChatVisitor)),f.socket.on("chat_room:save",function(b){a.chatRoom.id===b.id&&_.merge(a.chatRoom,b)}),f.socket.on("user_has_chat_room:save",function(b){return b.UserId!=a.user.id&&b.ChatRoomId==a.chatRoom.id?h.get({id:"agents",controller:b.UserId}).$promise.then(function(b){var c=_.map(a.chatRoom.Users,"fullname");a.chatRoom.ChatVisitor&&c.unshift(a.chatRoom.ChatVisitor.fullname),a.chatRoom.Users.push(b),a.workspace.name=_.without(c,g.getCurrentUser().fullname).join(", ")})["catch"](function(a){console.error(a)}):void 0}),f.socket.on("chat_message:save",function(c){a.chatRoom.id==c.ChatRoomId&&(a.user.id!=c.UserId&&a.chatRoom.ChatMessages.push(c),!b.settings.layout.onFocus&&e.Notification&&d("CHAT CHANNEL",{icon:"assets/images/media/channels/chat64.png",body:"NEW Chat Message!",delay:5e3}),a.workspace.active||(i.load("api/xchatty/assets?resource=notification/xc_blubb.mp3").play(),a.workspace.unread++))})})["catch"](function(a){console.error(a)}),k.get().$promise.then(function(b){a.tags=_.map(b.rows,"name")})["catch"](function(a){console.error(a)}),a.closeRoom=function(b){return c.open({animation:!0,templateUrl:"app/channels/chat/room/room.close.html",controller:"ChatRoomCloseCtrl",resolve:{closed:function(){return"CLOSED"===a.chatRoom.status},websiteId:function(){return a.chatRoom.ChatWebsiteId}}}).result.then(function(a){var c={id:b,status:"CLOSED",completeReason:"agent"};return a.disposition&&(c.disposition=a.disposition),h.update(c).$promise["catch"](function(a){j.error(a)})})},a.onChanged=function(b){return h.update({id:b},{tags:a.form.tags}).$promise["catch"](function(a){console.error(a)})},a.addAgent=function(b){c.open({animation:!0,templateUrl:"app/channels/chat/room/room.add.html",controller:"ChatRoomAddCtrl",resolve:{items:function(){return _.map(a.chatRoom.Users||[],function(a){return{id:a.id,fullname:a.fullname}})}}}).result.then(function(a){return h.update({id:b,controller:"users"},{users:a}).$promise["catch"](function(a){j.error(a)})})},a.sendMessage=function(){var b={body:angular.copy(a.message.body),createdAt:moment(),UserId:a.user.id,User:{fullname:a.user.fullname}};return a.message.body.trim().length?(a.chatRoom.ChatMessages.push(b),a.message.body="",h.save({id:a.chatRoom.id,controller:"messages"},{body:b.body}).$promise["catch"](function(a){console.error(a)})):void 0}}}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.room",{url:"/room",templateUrl:"app/channels/chat/room/room.html",data:{permissions:{only:["admin","user","agent"],redirectTo:"landing",id:31}},resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/inbox.css"]}])}]}})}]),angular.module("xCallyShuttleApp").controller("ChatRoomViewModalTagCtrl",["$scope","$uibModalInstance","$translate","$stateParams","Tag","ChatRoom","xAlert","id",function(a,b,c,d,e,f,g,h){a.initModal=function(){return a.tags=[],a.item={tags:[]},a.modal={dismissable:!0,title:"APPLICATION_MESSAGE_SEND_RETRY",text:"MESSAGE_MESSAGE_SEND_RETRY",buttons:[{"class":"btn-success",text:"APPLICATION_TAG",click:function(){var d={status:!0};return f.patch({id:h},{tags:a.item.tags}).$promise["catch"](function(){d.status=!1,g.show(c.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})["finally"](function(){b.close(d)})}},{"class":"default",text:"APPLICATION_CANCEL",click:function(a){b.dismiss(a)}}]},e.get().$promise.then(function(b){a.tags=_.map(b.rows,"name")})["catch"](function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").controller("ChatVisitorListCtrl",["$scope","ChatVisitor","gridOptions","$uibModal",function(a,b,c,d){a.initView=function(){var d={exporterCsvFilename:"chat_visitors.csv",columnDefs:[{name:"fullname",cellClass:"text-center"},{name:"email",cellClass:"text-center"},{name:"origin",cellClass:"text-center"},{name:"createdAt",displayName:"createdAt",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div><span am-time-ago="row.entity.createdAt"></span></div>'},{name:"action",width:100,buttons:[{"class":"blue-hoki",href:"/channels/chat/visitors/view/{{row.entity.id}}/profile",name:"profile"}]}]};a.gridOptions=c.gridOptions(b,d,a)}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.visitors.list",{url:"/list",templateUrl:"app/channels/chat/visitor/list/list.html",controller:"ChatVisitorListCtrl"})}]),angular.module("xCallyShuttleApp").controller("ChatVisitorViewCtrl",["$scope","$stateParams","ChatVisitor",function(a,b,c){a.initView=function(){return c.get({id:b.id}).$promise.then(function(b){a.chatVisitor=b})["catch"](function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.visitors.view",{url:"/view/:id",templateUrl:"app/channels/chat/visitor/view/view.html",controller:"ChatVisitorViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.channels.chat.visitors.view.profile",{url:"/profile",templateUrl:"app/channels/chat/visitor/view/view.profile.html"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.visitors",{url:"/visitors",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:8}}})}]),angular.module("xCallyShuttleApp").factory("ChatApplication",["$resource",function(a){return a("/api/chat/applications/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("ChatWebsite",["$resource",function(a){return a("/api/chat/websites/:websiteId/:controller/:id",{id:"@websiteId"},{update:{method:"PUT"},updateFields:{method:"PUT",isArray:!0}})}]),angular.module("xCallyShuttleApp").controller("ChatWebsiteListCtrl",["$scope","gridOptions","ChatWebsite",function(a,b,c){a.initView=function(){var d={exporterCsvFilename:"chat_websites.csv",columnDefs:[{name:"name"},{name:"description"},{name:"address"},{name:"action",width:75,buttons:[{"class":"blue-hoki",href:"/channels/chat/websites/view/{{row.entity.id}}/embedding/view",name:"embedding"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=b.gridOptions(c,d,a)}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.websites.list",{url:"/list",templateUrl:"app/channels/chat/website/list/list.html",controller:"ChatWebsiteListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"smart-table",insertBefore:"#ng_load_plugins_before",files:["assets/css/smart_table.css"]}])}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.websites.view.actions",{url:"/actions",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("ChatWebsiteViewActionListCtrl",["$scope","gridOptions","ChatWebsite","$http","$translate","$stateParams","socket","xAlert","Modal",function(a,b,c,d,e,f,g,h,i){a.initActons=function(){var d={draggable:!0,exporterCsvFilename:"chat_applications.csv",enableSorting:!1,enableFiltering:!1,columnDefs:[{name:"app",cellClass:"text-center"},{name:"name",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div><span>{{row.entity.ChatQueue ? row.entity.ChatQueue.name : row.entity.User.name}}</span></div>"},{name:"timeout",cellClass:"text-center"},{name:"interval",displayName:"APPLICATION_TIME_INTERVAL",cellClass:"text-center",cellTemplate:"<div><span>{{row.entity.Interval ? row.entity.Interval.name : row.entity.interval}}</span></div>"},{name:"action",width:125,buttons:[{"class":"blue-hoki",href:"/channels/chat/websites/view/{{row.entity.ChatWebsiteId}}/actions/view/{{row.entity.id}}",name:"profile"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.app, row.entity.id)"}]}]};a.gridOptions=b.gridOptions(c,d,a,{websiteId:f.websiteId,controller:"applications"})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.websites.view.actions.list",{url:"/list",templateUrl:"app/channels/chat/website/view/action/list/list.html",controller:"ChatWebsiteViewActionListCtrl"})}]),angular.module("xCallyShuttleApp").controller("ChatWebsiteViewActionViewCtrl",["$scope","$http","$stateParams","$translate","$location","xAlert","WizardHandler","socket","application","interval","ChatWebsite","ChatQueue","Agent","Interval","Template","MailAccount","SmsAccount",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){a.isActive=!0,a.size="small",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.initAction=function(){return a.$application=i.application,a.$stateParams=c,a.$interval=j.interval,a.forms={},a.apps=[{name:"Queue",value:"queue"},{name:"Agent",value:"agent"},{name:"SendMail",value:"sendMail"},{name:"SendSMS",value:"sendSms"}],k.get({websiteId:c.websiteId,controller:"applications",id:c.actionId}).$promise.then(function(b){if(a.application=b,a.application.alwaysTime=!1,a.application.IntervalId)a.application.intType="list";else switch(a.application.interval){case"*,*,*,*":a.application.intType="always";break;default:a.application.intType="custom"}if("always"===a.application.intType||"custom"===a.application.intType){var c=a.application.interval.split(",");"*"===c[0]?a.application.alwaysTime=!0:(a.application.t_from=moment(new Date),a.application.t_to=moment(new Date),a.application.t_from.hour(c[0].split("-")[0].split(":")[0]),a.application.t_from.minute(c[0].split("-")[0].split(":")[1]),a.application.t_to.hour(c[0].split("-")[1].split(":")[0]),a.application.t_to.minute(c[0].split("-")[1].split(":")[1])),"*"===c[1]?(a.application.wd_from="always",a.application.wd_to="always"):(a.application.wd_from=c[1].split("-")[0],a.application.wd_to=c[1].split("-")[1]),"*"===c[2]?(a.application.md_from="always",a.application.md_to="always"):(a.application.md_from=c[2].split("-")[0],a.application.md_to=c[2].split("-")[1]),"*"===c[3]?(a.application.m_from="always",a.application.m_to="always"):(a.application.m_from=c[3].split("-")[0],a.application.m_to=c[3].split("-")[1])}a.$watch("application.t_from",function(b){a.application.t_from_hm=moment(b).format("HH:mm")}),a.$watch("application.t_to",function(b){a.application.t_to_hm=moment(b).format("HH:mm")})})["catch"](function(a){f.error(a)})},a.getQueues=function(){return l.get().$promise.then(function(b){a.queues=b.rows})["catch"](function(a){f.error(a)})},a.getAgents=function(){return m.get().$promise.then(function(b){a.agents=b.rows})["catch"](function(a){f.error(a)})},a.getIntervals=function(){return n.get().$promise.then(function(b){a.intervals=b.rows})["catch"](function(a){f.error(a)})},a.getSmsAccounts=function(){return q.get().$promise.then(function(b){a.smsAccounts=b.rows})["catch"](function(a){console.error(a)})},a.getTemplates=function(){return o.get().$promise.then(function(b){a.templates=b.rows})["catch"](function(a){console.error(a)})},a.getMailAccounts=function(){return p.get().$promise.then(function(b){a.mailAccounts=b.rows})["catch"](function(a){console.error(a)})},a.updateItem=function(){switch(a.application.intType){case"always":a.application.interval="*,*,*,*",a.application.IntervalId=null;break;case"list":var b=_.find(a.intervals,{id:a.application.IntervalId});a.application.interval=b?"":"*,*,*,*",a.application.IntervalId=b?a.application.IntervalId:null;break;case"custom":var g,h,i,j,l;g=a.application.t_from&&a.application.t_to&&!a.application.alwaysTime?moment(a.application.t_from).format("HH:mm")+"-"+moment(a.application.t_to).format("HH:mm"):"*",a.application.wd_from&&"always"!==a.application.wd_from?(h=a.application.wd_from,a.application.wd_to&&"always"!==a.application.wd_to&&(h+="-"+a.application.wd_to)):h="*",a.application.md_from&&"always"!==a.application.md_from?(i=a.application.md_from,a.application.md_to&&"always"!==a.application.md_to&&(i+="-"+a.application.md_to)):i="*",a.application.m_from&&"always"!==a.application.m_from?(j=a.application.m_from,a.application.m_to&&"always"!==a.application.m_to&&(j+="-"+a.application.m_to)):j="*",l=g+","+h+","+i+","+j,a.application.interval=l,a.application.IntervalId=null}return k.update({websiteId:c.websiteId,controller:"applications",id:c.actionId},a.application).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success"),e.path("/channels/chat/websites/view/"+c.websiteId+"/actions/list")})["catch"](function(a){f.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.websites.view.actions.view",{url:"/view/:actionId",templateUrl:"app/channels/chat/website/view/action/view/view.html",controller:"ChatWebsiteViewActionViewCtrl"})}]),angular.module("xCallyShuttleApp").controller("ChatWebsiteViewActionWizardCtrl",["$scope","$http","Agent","Interval","ChatQueue","$stateParams","$translate","$location","xAlert","WizardHandler","socket","application","interval","ChatWebsite","Template","MailAccount","SmsAccount",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){a.isActive=!0,a.size="small",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.initWizard=function(){a.apps=[{name:"Queue",value:"queue"},{name:"Agent",value:"agent"},{name:"SendMail",value:"sendMail"},{name:"SendSMS",value:"sendSms"}],a.$application=l.application,a.$stateParams=f,a.$interval=m.interval,a.forms={},a.application={app:"queue",intType:"always",alwaysTime:!0},a.$watch("application.t_from",function(b){a.application.t_from_hm=moment(b).format("HH:mm")}),a.$watch("application.t_to",function(b){a.application.t_to_hm=moment(b).format("HH:mm")})},a.getQueues=function(){return e.get().$promise.then(function(b){a.queues=b.rows})["catch"](function(a){console.error(a)})},a.getAgents=function(){return c.get().$promise.then(function(b){a.agents=b.rows})["catch"](function(a){i.error(a)})},a.getIntervals=function(){return d.get().$promise.then(function(b){a.intervals=b.rows})["catch"](function(a){i.error(a)})},a.getSmsAccounts=function(){return q.get().$promise.then(function(b){a.smsAccounts=b.rows})["catch"](function(a){console.error(a)})},a.getTemplates=function(){return o.get().$promise.then(function(b){a.templates=b.rows})["catch"](function(a){console.error(a)})},a.getMailAccounts=function(){return p.get().$promise.then(function(b){a.mailAccounts=b.rows})["catch"](function(a){console.error(a)})},a.createItem=function(){switch(a.application.intType){case"always":a.application.interval="*,*,*,*",a.application.IntervalId=null;break;case"list":var b=_.find(a.intervals,{id:a.application.IntervalId});a.application.interval=b?"":"*,*,*,*",a.application.IntervalId=b?a.application.IntervalId:null;break;case"custom":var c,d,e,j,k;c=a.application.t_from&&a.application.t_to&&!a.application.alwaysTime?moment(a.application.t_from).format("HH:mm")+"-"+moment(a.application.t_to).format("HH:mm"):"*",a.application.wd_from&&"always"!==a.application.wd_from?(d=a.application.wd_from,a.application.wd_to&&"always"!==a.application.wd_to&&(d+="-"+a.application.wd_to)):d="*",a.application.md_from&&"always"!==a.application.md_from?(e=a.application.md_from,a.application.md_to&&"always"!==a.application.md_to&&(e+="-"+a.application.md_to)):e="*",a.application.m_from&&"always"!==a.application.m_from?(j=a.application.m_from,a.application.m_to&&"always"!==a.application.m_to&&(j+="-"+a.application.m_to)):j="*",k=c+","+d+","+e+","+j,a.application.interval=k,a.application.IntervalId=null}return n.save({websiteId:f.websiteId,controller:"applications"},a.application).$promise.then(function(){i.show(g.instant("MESSAGE_WELL_DONE"),"success"),h.path("/channels/chat/websites/view/"+f.websiteId+"/actions/list")})["catch"](function(a){i.error(a)})},a.formValidation=function(a){return a},a.next=function(){j.wizard().next()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.websites.view.actions.wizard",{url:"/wizard",templateUrl:"app/channels/chat/website/view/action/wizard/wizard.html",controller:"ChatWebsiteViewActionWizardCtrl"})}]),angular.module("xCallyShuttleApp").factory("ChatDisposition",["$resource",function(a){return a("/api/chat/dispositions/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("ChatWebsiteViewModalDispositionAddCtrl",["$scope","$uibModalInstance","ChatWebsite","id","xAlert","$translate",function(a,b,c,d,e,f){a.ok=function(){return c.save({websiteId:d,controller:"dispositions"},{name:a.name}).$promise.then(function(a){b.close(a)})["catch"](function(a){e.show(f.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("ChatWebsiteDispositionViewCtrl",["$scope","$stateParams","$uibModal","$translate","ChatWebsite","xAlert",function(a,b,c,d,e,f){a.initView=function(){return e.get({websiteId:b.websiteId,controller:"dispositions"}).$promise.then(function(b){a.dispositions=b.rows})["catch"](function(a){console.error(a),f.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},a.updateDisposition=function(a,c){return e.update({websiteId:b.websiteId,controller:"dispositions",id:a},{name:c}).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE")+"!","success")})["catch"](function(a){console.error(a),f.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},a.deleteDisposition=function(c){return console.log("delete"),e.remove({websiteId:b.websiteId,controller:"dispositions",id:c}).$promise.then(function(){_.remove(a.dispositions,{id:c})})["catch"](function(a){console.error(a),f.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},a.addDisposition=function(){return c.open({animation:!0,templateUrl:"app/channels/chat/website/view/disposition/modal/add.modal.html",controller:"ChatWebsiteViewModalDispositionAddCtrl",resolve:{id:function(){return b.websiteId}}}).result.then(function(b){b&&a.dispositions.push(b)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.websites.view.dispositions",{url:"/dispositions",controller:"ChatWebsiteDispositionViewCtrl",templateUrl:"app/channels/chat/website/view/disposition/view/view.html"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.websites.view.embedding",{url:"/embedding",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("ChatWebsiteViewEmbeddingViewCtrl",["$scope","$stateParams","$translate","clipboard","xAlert","ChatWebsite",function(a,b,c,d,e,f){a.initView=function(){return f.get({websiteId:b.websiteId,controller:"snippet"}).$promise.then(function(b){a.snippetCode=b.html})["catch"](function(a){e.error(a)})},a.copyToClipboard=function(){d.copyText(a.snippetCode),e.show(c.instant("MESSAGE_TEXT_COPIED_CLIPBOARD")+"!","success")}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.websites.view.embedding.view",{url:"/view",templateUrl:"app/channels/chat/website/view/embedding/view/view.html",controller:"ChatWebsiteViewEmbeddingViewCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.websites.view.form",{url:"/forms",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("ChatWebsiteViewFormViewCtrl",["$scope","$builder","$validator","$stateParams","$translate","ChatWebsite","xAlert",function(a,b,c,d,e,f,g){a.saveForm=function(a){var c=angular.copy(b.forms[a]);return c.length>3?g.show("You can insert at least 3 input elements","danger"):(_.forEach(c,function(a){delete a.id}),f.updateFields({websiteId:d.websiteId,controller:"fields",id:a},c).$promise.then(function(){g.show(e.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){g.error(a)}))},a.getChatWebsiteFields=function(a){return f.query({websiteId:d.websiteId,controller:"fields",id:a}).$promise.then(function(c){_.forEach(c,function(c){b.addFormObject(a,c)})})["catch"](function(a){g.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.websites.view.form.view",{url:"/view",templateUrl:"app/channels/chat/website/view/form/view/view.html",controller:"ChatWebsiteViewFormViewCtrl"})}]),angular.module("xCallyShuttleApp").controller("ChatWebsiteHooksViewCtrl",["$scope","ChatWebsite","Pause","$http","$stateParams","$translate","$location","xAlert",function(a,b,c,d,e,f,g,h){a.account={},a.isActive=!0,a.size="small",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.CONST_TIMEOUT=3e4,a.initView=function(){a.types=[{value:"",name:"-- None --"},{name:"HTTP GET",value:"GET"},{name:"HTTP POST",value:"POST"}],c.get().$promise.then(function(b){a.pauses=b.rows})["catch"](function(a){h.error(a)}),b.get({id:e.websiteId}).$promise.then(function(b){console.log(b),a.account=b,a.account.actions.length<1&&a.account.actions.push({action:"pause",enabled:!1,type:null})})["catch"](function(a){h.error(a)})},a.resetActionData=function(a){a.type=null},a.updateItem=function(){return console.log(a.account),b.update({id:e.websiteId},a.account).$promise.then(function(){h.show(f.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){h.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.websites.view.hooks",{url:"/hooks",controller:"ChatWebsiteHooksViewCtrl",templateUrl:"app/channels/chat/website/view/hooks/view/view.html"})}]),angular.module("xCallyShuttleApp").controller("ChatWebsiteViewProactiveListCtrl",["$scope","gridOptions","ChatWebsite","$http","$translate","$stateParams","$uibModal",function(a,b,c,d,e,f,g){a.initProactiveActions=function(){var d={exporterCsvFilename:"telephones.csv",columnDefs:[{name:"name"},{name:"type"},{name:"action",width:125,buttons:[{"class":"blue-hoki",onClick:"grid.appScope.createItem(row.entity)",name:"profile"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=b.gridOptions(c,d,a,{websiteId:f.websiteId,controller:"proactive"})},a.createItem=function(b){var c=g.open({animation:!0,templateUrl:"app/channels/chat/website/view/proactive/list/list.create.modal.html",controller:"ChatWebsiteProactiveListCreateCtrl",resolve:{item:b}});c.result.then(function(){a.gridOptions.getPage()})}}]),angular.module("xCallyShuttleApp").controller("ChatWebsiteProactiveListCreateCtrl",["$scope","$translate","$uibModalInstance","$stateParams","ChatWebsite","xAlert","item",function(a,b,c,d,e,f,g){a.form={},a.item=g||{},a.title=g?b.instant("APPLICATION_EDIT_PROACTIVE_ACTION"):b.instant("APPLICATION_NEW_PROACTIVE_ACTION"),a.possibleType=[{type:"mouseOver",title:"Mouse Over"},{type:"timeout",title:"Timeout"}],a.save=function(){return g?e.update({websiteId:d.websiteId,controller:"proactive",id:a.item.id},a.item).$promise.then(function(a){f.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)})["catch"](function(a){f.error(a)}):e.save({websiteId:d.websiteId,controller:"proactive"},a.item).$promise.then(function(a){f.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)})["catch"](function(a){f.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.websites.view.proactive.list",{url:"/list",templateUrl:"app/channels/chat/website/view/proactive/list/list.html",controller:"ChatWebsiteViewProactiveListCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.websites.view.proactive",{url:"/proactive",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("ChatWebsiteSettingViewCtrl",["$scope","$stateParams","$translate","$location","$timeout","socket","xAlert","ChatWebsite","List",function(a,b,c,d,e,f,g,h,i){a.initView=function(){return i.get().$promise.then(function(b){a.lists=b.rows})["catch"](function(a){console.error(a)})},a.updateItemChatWebsite=function(){return h.update({id:b.websiteId},{ListId:a.chatWebsite.ListId}).$promise.then(function(){g.show(c.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){g.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.websites.view.settings",{url:"/settings",controller:"ChatWebsiteSettingViewCtrl",templateUrl:"app/channels/chat/website/view/setting/view/view.html"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.websites.view.snippet",{url:"/snippet",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("ChatWebsiteViewSnippetViewCtrl",["$scope","$http","$stateParams","$translate","Template","$rootScope","FileUploader","$cookieStore","xAlert","ChatWebsite",function(a,b,c,d,e,f,g,h,i,j){a.$translate=d,a.statePreview={state:"online"},a.radioSwitch={isActive:!!f.license.custom,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"};var k=a.uploader=new g({url:"api/chat/websites/"+c.websiteId+"/logo",queueLimit:1,withCredentials:!0,headers:{Authorization:"Bearer "+h.get("token")}});k.filters.push({name:"imageFilter",fn:function(a){var b="|"+a.type.slice(a.type.lastIndexOf("/")+1)+"|";return-1!=="|jpg|png|jpeg|".indexOf(b)}}),k.onSuccessItem=function(b,c){a.chatWebsite.logo=c.logo,i.show(d.instant("MESSAGE_WELL_DONE"),"success")},k.onErrorItem=function(){i.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")},k.onCompleteAll=function(){k.clearQueue()},a.enquirySwitch={onText:"On",offText:"Off",isActive:!0,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.fidelitySwitch={isActive:!0,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.lang={HeaderCurrentlyChatting:"Live Chat",HeaderOffline:"Contact us", +OperatorOfflineMessage:"It appears as if all operators are currently offline.",OfflineMessage:"<strong>We're not online.</strong><br/>It doesn't mean we're not there to help - leave your message below and we'll be in touch as soon as possible.",EnquiryMessagePlaceholder:"Your message...",EnquiryButtonText:"Leave message",EnquirySubmitSuccess:"Your message was sucessfully submitted - we will contact you as soon as possible.",OperatorComposing:"{fullname} is typing...",FirstMessageText:"",ExitChatButtonText:"Exit Chat",ExitChatQuestionText:"Are you sure?",ExitChatButtonConfirmText:"Yes",ExitChatButtonCancelText:"No",MessagePlaceholderText:"Your message...",MessageSendButtonText:"Send",ValidationEmailRequired:"Please enter your email address",ValidationEmailInvalid:"Please enter a valid email address",ValidationEmailMaxLength:"The email address may not exceed 85 characters",ValidationUsernameRequired:"Please enter your name",ValidationUsernameMaxLength:"The name may not exceed 45 characters",ValidationEnquiryRequired:"Please enter your enquiry",ValidationEnquiryMaxLength:"The enquiry may not exceed 1500 characters",ValidationMessageRequired:"Please enter your message",ValidationMessageMaxLength:"The message may not exceed 750 characters"},a.initView=function(){return j.get({id:c.websiteId}).$promise.then(function(b){return a.chatWebsite=b,e.get().$promise}).then(function(b){a.templates=b.rows})["catch"](function(a){i.error(a)})},a.updateItem=function(){return j.update({id:a.chatWebsite.id},a.chatWebsite).$promise.then(function(){i.show(d.instant("MESSAGE_CHAT_WEBSITE_UPDATE_SUCCESS")+"!","success")})["catch"](function(a){i.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.websites.view.snippet.view",{url:"/view",templateUrl:"app/channels/chat/website/view/snippet/view/view.html",controller:"ChatWebsiteViewSnippetViewCtrl"})}]),angular.module("xCallyShuttleApp").controller("ChatWebsiteViewCtrl",["$scope","xAlert","$http","$location","$stateParams","$translate","WizardHandler","ChatApplication","ChatWebsite",function(a,b,c,d,e,f,g,h,i){a.initView=function(){return i.get({id:e.websiteId}).$promise.then(function(b){a.chatWebsite=b})["catch"](function(a){b.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.websites.view",{url:"/view/:websiteId",templateUrl:"app/channels/chat/website/view/view.html",controller:"ChatWebsiteViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]}])}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.websites",{url:"/websites",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:29}}})}]),angular.module("xCallyShuttleApp").controller("ChatWebsiteWizardCtrl",["$scope","$http","$location","$translate","WizardHandler","xAlert","ChatWebsite",function(a,b,c,d,e,f,g){a.$translate=d,a.next=function(){e.wizard().next()},a.exitValidation=function(a){return a},a.initWizard=function(){a.forms={formSetting:void 0,formAppearance:void 0,formLabel:void 0,formFunctionality:void 0},a.item={},a.item.remote=c.protocol()+"://"+location.host,a.item.color="#000080",a.item.color_focus="#000080",a.item.color_button="#000080",a.item.header_shape="rounded",a.item.animation=!0,a.item.header_online="We are here!",a.item.online_message="<strong>Questions?</strong><br />Insert your name and email address to start a live-chat with our support team.",a.item.name_title="Name",a.item.username_placeholder="Your name",a.item.email_title="Email Address",a.item.email_placeholder="Your e-mail address",a.item.start_chat_button="Chat",a.item.rating_message="Would you like rate this chat?",a.item.rating_send="Send",a.item.rating_skip="Skip",a.item.header_offline="Contact us",a.item.offline_message="<strong>We're not online.</strong><br />It doesn't mean we're not there to help - leave your message below and we'll be in touch as soon as possible.",a.item.message_title="Message",a.item.enquiry_message_placeholder="Your message...",a.item.enquiry_button="Leave message",a.item.agents_busy="In this moment all agents are busy. Try again!",a.item.download_transcript=!0},a.createItem=function(){return g.save(a.item).$promise.then(function(){f.show(d.instant("MESSAGE_CHAT_WEBSITE_CREATE_SUCCESS"),"success"),c.path("/channels/chat/websites/list")})["catch"](function(a){f.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.chat.websites.wizard",{url:"/wizard",templateUrl:"app/channels/chat/website/wizard/wizard.html",controller:"ChatWebsiteWizardCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.fax.accounts",{url:"/accounts",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:38}}})}]),angular.module("xCallyShuttleApp").controller("FaxAccountListCtrl",["$scope","$uibModal","gridOptions","FaxAccount",function(a,b,c,d){a.initView=function(){var b={exporterCsvFilename:"chat_websites.csv",columnDefs:[{name:"name"},{name:"description"},{name:"localstationid"},{name:"TrunkName",displayName:"APPLICATION_TRUNK"},{name:"action",width:75,buttons:[{"class":"blue-hoki",href:"/channels/fax/accounts/view/{{row.entity.id}}/settings",name:"settings"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=c.gridOptions(d,b,a)},a.createItem=function(){var c=b.open({animation:!0,templateUrl:"app/channels/fax/account/list/list.create.modal.html",controller:"FaxAccountListCreateCtrl"});c.result.then(function(){a.gridOptions.getPage()})}}]),angular.module("xCallyShuttleApp").controller("FaxAccountListCreateCtrl",["$scope","$uibModalInstance","$translate","xAlert","FaxAccount","Trunk",function(a,b,c,d,e,f){a.initWizard=function(){return a.form={},a.item={},a.trunks=[],f.get().$promise.then(function(b){a.trunks=b.rows})["catch"](function(a){d.error(a)})},a.save=function(){return e.save(a.item).$promise.then(function(a){d.show(c.instant("MESSAGE_WELL_DONE"),"success"),b.close(a)})["catch"](function(a){d.error(a)})},a.cancel=function(){b.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.fax.accounts.list",{url:"/list",templateUrl:"app/channels/fax/account/list/list.html",controller:"FaxAccountListCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.fax.accounts.view.actions",{url:"/actions",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("FaxAccountViewActionListCtrl",["$scope","gridOptions","FaxAccount","$http","$translate","$stateParams",function(a,b,c,d,e,f){a.initActons=function(){var d={draggable:!0,exporterCsvFilename:"fax_applications.csv",enableSorting:!1,enableFiltering:!1,columnDefs:[{name:"app",cellClass:"text-center"},{name:"name",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div><span>{{row.entity.app == "queue" ? row.entity.FaxQueue.name : row.entity.User.name}}</span></div>'},{name:"timeout",cellClass:"text-center"},{name:"interval",displayName:"APPLICATION_TIME_INTERVAL",cellClass:"text-center",cellTemplate:"<div><span>{{row.entity.Interval ? row.entity.Interval.name : row.entity.interval}}</span></div>"},{name:"action",width:125,buttons:[{"class":"blue-hoki",href:"/channels/fax/accounts/view/{{row.entity.FaxAccountId}}/actions/view/{{row.entity.id}}",name:"profile"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.app, row.entity.id)"}]}]};a.gridOptions=b.gridOptions(c,d,a,{accountId:f.accountId,controller:"applications"})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.fax.accounts.view.actions.list",{url:"/list",templateUrl:"app/channels/fax/account/view/action/list/list.html",controller:"FaxAccountViewActionListCtrl"})}]),angular.module("xCallyShuttleApp").controller("FaxAccountViewActionViewCtrl",["$scope","$http","$stateParams","$translate","$location","xAlert","WizardHandler","socket","application","interval","Agent","Interval","FaxQueue","FaxAccount","Template","MailAccount","SmsAccount",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){a.isActive=!0,a.size="small",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.initAction=function(){return a.$application=i.application,a.$stateParams=c,a.$interval=j.interval,a.forms={},a.apps=[{name:"Queue",value:"queue"},{name:"Agent",value:"agent"},{name:"SendMail",value:"sendMail"},{name:"SendSMS",value:"sendSms"}],n.get({accountId:c.accountId,controller:"applications",id:c.actionId}).$promise.then(function(b){if(a.application=b,a.application.alwaysTime=!1,a.application.IntervalId)a.application.intType="list";else switch(a.application.interval){case"*,*,*,*":a.application.intType="always";break;default:a.application.intType="custom"}if("always"===a.application.intType||"custom"===a.application.intType){var c=a.application.interval.split(",");"*"===c[0]?a.application.alwaysTime=!0:(a.application.t_from=moment(new Date),a.application.t_to=moment(new Date),a.application.t_from.hour(c[0].split("-")[0].split(":")[0]),a.application.t_from.minute(c[0].split("-")[0].split(":")[1]),a.application.t_to.hour(c[0].split("-")[1].split(":")[0]),a.application.t_to.minute(c[0].split("-")[1].split(":")[1])),"*"===c[1]?(a.application.wd_from="always",a.application.wd_to="always"):(a.application.wd_from=c[1].split("-")[0],a.application.wd_to=c[1].split("-")[1]),"*"===c[2]?(a.application.md_from="always",a.application.md_to="always"):(a.application.md_from=c[2].split("-")[0],a.application.md_to=c[2].split("-")[1]),"*"===c[3]?(a.application.m_from="always",a.application.m_to="always"):(a.application.m_from=c[3].split("-")[0],a.application.m_to=c[3].split("-")[1])}a.$watch("application.t_from",function(b){a.application.t_from_hm=moment(b).format("HH:mm")}),a.$watch("application.t_to",function(b){a.application.t_to_hm=moment(b).format("HH:mm")})})["catch"](function(a){f.error(a)})},a.getQueues=function(){return m.get().$promise.then(function(b){a.queues=b.rows})["catch"](function(a){console.error(a)})},a.getAgents=function(){return k.get().$promise.then(function(b){a.agents=b.rows})["catch"](function(a){console.error(a)})},a.getIntervals=function(){return l.get().$promise.then(function(b){a.intervals=b.rows})["catch"](function(a){console.error(a)})},a.getSmsAccounts=function(){return q.get().$promise.then(function(b){a.smsAccounts=b.rows})["catch"](function(a){console.error(a)})},a.getTemplates=function(){return o.get().$promise.then(function(b){a.templates=b.rows})["catch"](function(a){console.error(a)})},a.getMailAccounts=function(){return p.get().$promise.then(function(b){a.mailAccounts=b.rows})["catch"](function(a){console.error(a)})},a.updateItem=function(){switch(a.application.intType){case"always":a.application.interval="*,*,*,*",a.application.IntervalId=null;break;case"list":var b=_.find(a.intervals,{id:a.application.IntervalId});a.application.interval=b?"":"*,*,*,*",a.application.IntervalId=b?a.application.IntervalId:null;break;case"custom":var g,h,i,j,k;g=a.application.t_from&&a.application.t_to&&!a.application.alwaysTime?moment(a.application.t_from).format("HH:mm")+"-"+moment(a.application.t_to).format("HH:mm"):"*",a.application.wd_from&&"always"!==a.application.wd_from?(h=a.application.wd_from,a.application.wd_to&&"always"!==a.application.wd_to&&(h+="-"+a.application.wd_to)):h="*",a.application.md_from&&"always"!==a.application.md_from?(i=a.application.md_from,a.application.md_to&&"always"!==a.application.md_to&&(i+="-"+a.application.md_to)):i="*",a.application.m_from&&"always"!==a.application.m_from?(j=a.application.m_from,a.application.m_to&&"always"!==a.application.m_to&&(j+="-"+a.application.m_to)):j="*",k=g+","+h+","+i+","+j,a.application.interval=k,a.application.IntervalId=null}return n.update({accountId:c.accountId,controller:"applications",id:c.actionId},a.application).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success"),e.path("/channels/fax/accounts/view/"+c.accountId+"/actions/list")})["catch"](function(a){f.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.fax.accounts.view.actions.view",{url:"/view/:actionId",templateUrl:"app/channels/fax/account/view/action/view/view.html",controller:"FaxAccountViewActionViewCtrl"})}]),angular.module("xCallyShuttleApp").controller("FaxAccountViewActionWizardCtrl",["$scope","$http","Agent","FaxQueue","Interval","$stateParams","$translate","$location","xAlert","WizardHandler","socket","application","interval","FaxAccount","Template","MailAccount","SmsAccount",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){a.isActive=!0,a.size="small",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.initWizard=function(){a.apps=[{name:"Queue",value:"queue"},{name:"Agent",value:"agent"},{name:"SendMail",value:"sendMail"},{name:"SendSMS",value:"sendSms"}],a.$application=l.application,a.$stateParams=f,a.$interval=m.interval,a.forms={},a.application={alwaysTime:!0},a.$watch("application.t_from",function(b){a.application.t_from_hm=moment(b).format("HH:mm")}),a.$watch("application.t_to",function(b){a.application.t_to_hm=moment(b).format("HH:mm")})},a.getQueues=function(){return d.get().$promise.then(function(b){a.queues=b.rows})["catch"](function(a){console.error(a)})},a.getAgents=function(){return c.get().$promise.then(function(b){a.agents=b.rows})["catch"](function(a){console.error(a)})},a.getIntervals=function(){return e.get().$promise.then(function(b){a.intervals=b.rows})["catch"](function(a){console.error(a)})},a.getSmsAccounts=function(){return q.get().$promise.then(function(b){a.smsAccounts=b.rows})["catch"](function(a){console.error(a)})},a.getTemplates=function(){return o.get().$promise.then(function(b){a.templates=b.rows})["catch"](function(a){console.error(a)})},a.getMailAccounts=function(){return p.get().$promise.then(function(b){a.mailAccounts=b.rows})["catch"](function(a){console.error(a)})},a.createItem=function(){switch(a.application.intType){case"always":a.application.interval="*,*,*,*",a.application.IntervalId=null;break;case"list":var b=_.find(a.intervals,{id:a.application.IntervalId});a.application.interval=b?"":"*,*,*,*",a.application.IntervalId=b?a.application.IntervalId:null;break;case"custom":var c,d,e,j,k;c=a.application.t_from&&a.application.t_to&&!a.application.alwaysTime?moment(a.application.t_from).format("HH:mm")+"-"+moment(a.application.t_to).format("HH:mm"):"*",a.application.wd_from&&"always"!==a.application.wd_from?(d=a.application.wd_from,a.application.wd_to&&"always"!==a.application.wd_to&&(d+="-"+a.application.wd_to)):d="*",a.application.md_from&&"always"!==a.application.md_from?(e=a.application.md_from,a.application.md_to&&"always"!==a.application.md_to&&(e+="-"+a.application.md_to)):e="*",a.application.m_from&&"always"!==a.application.m_from?(j=a.application.m_from,a.application.m_to&&"always"!==a.application.m_to&&(j+="-"+a.application.m_to)):j="*",k=c+","+d+","+e+","+j,a.application.interval=k,a.application.IntervalId=null}return n.save({accountId:f.accountId,controller:"applications"},a.application).$promise.then(function(){i.show(g.instant("MESSAGE_WELL_DONE"),"success"),h.path("/channels/fax/accounts/view/"+f.accountId+"/actions/list")})["catch"](function(a){i.error(a)})},a.formValidation=function(a){return a},a.next=function(){j.wizard().next()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.fax.accounts.view.actions.wizard",{url:"/wizard",templateUrl:"app/channels/fax/account/view/action/wizard/wizard.html",controller:"FaxAccountViewActionWizardCtrl"})}]),angular.module("xCallyShuttleApp").factory("FaxDisposition",["$resource",function(a){return a("/api/fax/dispositions/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("FaxInboxViewModaDispositionAddCtrl",["$scope","$uibModalInstance","FaxAccount","id","xAlert",function(a,b,c,d,e){a.ok=function(){return c.save({accountId:d,controller:"dispositions"},{name:a.name}).$promise.then(function(a){b.close(a)})["catch"](function(a){e.error(a)})},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("FaxAccountDispositionViewCtrl",["$scope","$stateParams","$uibModal","$translate","FaxAccount","xAlert",function(a,b,c,d,e,f){a.initView=function(){return e.get({accountId:b.accountId,controller:"dispositions"}).$promise.then(function(b){a.dispositions=b.rows})["catch"](function(a){f.error(a)})},a.updateDisposition=function(a,c){return e.update({accountId:b.accountId,controller:"dispositions",id:a},{name:c}).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE")+"!","success")})["catch"](function(a){f.error(a)})},a.deleteDisposition=function(c){return e.remove({accountId:b.accountId,controller:"dispositions",id:c}).$promise.then(function(){_.remove(a.dispositions,{id:c})})["catch"](function(a){f.error(a)})},a.addDisposition=function(){return c.open({animation:!0,templateUrl:"app/channels/fax/account/view/disposition/modal/add.modal.html",controller:"FaxInboxViewModaDispositionAddCtrl",resolve:{id:function(){return b.accountId}}}).result.then(function(b){b&&a.dispositions.push(b)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.fax.accounts.view.dispositions",{url:"/dispositions",controller:"FaxAccountDispositionViewCtrl",templateUrl:"app/channels/fax/account/view/disposition/view/view.html"})}]),angular.module("xCallyShuttleApp").controller("FaxAccountHooksViewCtrl",["$scope","FaxAccount","Pause","$http","$stateParams","clipboard","$translate","$location","xAlert","List",function(a,b,c,d,e,f,g,h,i,j){a.account={},a.isActive=!0,a.size="small",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.CONST_TIMEOUT=3e4,a.initView=function(){a.types=[{value:"",name:"-- None --"},{name:"HTTP GET",value:"GET"},{name:"HTTP POST",value:"POST"}],c.get().$promise.then(function(b){a.pauses=b.rows})["catch"](function(a){i.error(a)}),b.get({id:e.accountId}).$promise.then(function(b){a.account=b,a.account.actions.length<1&&a.account.actions.push({action:"pause",enabled:!1,type:null})})["catch"](function(a){i.error(a)})},a.resetActionData=function(a){a.type=null},a.updateItemFaxAccount=function(){return console.log(a.account),b.update({id:e.accountId},a.account).$promise.then(function(){i.show(g.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){i.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.fax.accounts.view.hooks",{url:"/hooks",controller:"FaxAccountHooksViewCtrl",templateUrl:"app/channels/fax/account/view/hooks/view/view.html"})}]),angular.module("xCallyShuttleApp").controller("FaxAccountSettingViewCtrl",["$scope","$stateParams","$translate","FaxAccount","List","Trunk","xAlert",function(a,b,c,d,e,f,g){a.isActive=!0,a.size="small",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.initView=function(){return a.rate=["2400","4800","7200","9600","12000","14400"],a.techs=["SIP","IAX","DADHI","KHOMP"],f.get().$promise.then(function(b){a.trunks=b.rows})["catch"](function(a){g.error(a)}),e.get().$promise.then(function(b){a.lists=b.rows})["catch"](function(a){g.error(a)}),d.get({id:b.accountId}).$promise.then(function(b){a.account=b})["catch"](function(a){g.error(a)})},a.updateItemFaxAccount=function(){return d.update({id:b.accountId},a.account).$promise.then(function(){g.show(c.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){g.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.fax.accounts.view.settings",{url:"/settings",controller:"FaxAccountSettingViewCtrl",templateUrl:"app/channels/fax/account/view/setting/view/view.html"})}]),angular.module("xCallyShuttleApp").controller("FaxAccountViewCtrl",["$scope","$http","$stateParams","$translate","$location","WizardHandler","socket","xAlert","Modal","FaxAccount",function(a,b,c,d,e,f,g,h,i,j){a.initView=function(){return j.get({id:c.accountId}).$promise.then(function(b){a.account=b})["catch"](function(a){h.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.fax.accounts.view",{url:"/view/:accountId",templateUrl:"app/channels/fax/account/view/view.html",controller:"FaxAccountViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]})}]}})}]),angular.module("xCallyShuttleApp").controller("FaxAccountWizardCtrl",["$scope","$http","$location","$translate","xAlert","WizardHandler","Trunk","FaxAccount",function(a,b,c,d,e,f,g,h){a.translate=d,a.isActive=!0,a.size="small",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.initWizard=function(){return a.$translate=d,a.forms={},a.item={},a.rate=["2400","4800","7200","9600","12000","14400"],a.techs=["SIP","IAX","DADHI","KHOMP"],a.item.headerinfo="xCALLY Motion Fax",a.item.ecm="yes",a.item.minrate="4800",a.item.maxrate="14400",a.item.modem="v17,v27,v29",a.item.gateway="no",a.item.faxdetect="no",a.item.t38timeout=5e3,a.item.tech="SIP",g.get().$promise.then(function(b){a.trunks=b.rows})["catch"](function(a){e.error(a)})},a.next=function(){f.wizard().next()},a.previous=function(){f.wizard().previous()},a.exitValidation=function(a){return a},a.createItem=function(){return h.save(a.item).$promise.then(function(a){e.show(d.instant("MESSAGE_WELL_DONE"),"success"),c.path("/channels/fax/accounts/list")})["catch"](function(a){e.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.fax.accounts.wizard",{url:"/wizard",templateUrl:"app/channels/fax/account/wizard/wizard.html",controller:"FaxAccountWizardCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.fax",{url:"/fax",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user","agent"],redirectTo:"landing",id:10}}})}]),angular.module("xCallyShuttleApp").factory("FaxAccount",["$resource",function(a){return a("/api/fax/accounts/:accountId/:controller/:id",{id:"@accountId"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("FaxAttachment",["$resource",function(a){return a("/api/fax/attachments/:id/:controller",{id:"@id"})}]),angular.module("xCallyShuttleApp").factory("FaxMessage",["$resource",function(a){return a("/api/fax/messages/:id/:controller",{id:"@id",controller:"@controller"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("FaxReport",["$resource",function(a){return a("/api/report/faxs/:id/:controller1/:controller2",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("FaxRoom",["$resource",function(a){return a("/api/fax/rooms/:id/:controller",{id:"@id",controller:"@controller"},{update:{method:"PUT"},patch:{method:"PATCH"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.fax.inbox",{url:"/inbox",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user","agent"],redirectTo:"landing",id:40}}})}]),angular.module("xCallyShuttleApp").controller("FaxInboxInfoModalCtrl",["$scope","$translate","$uibModalInstance","$stateParams","xAlert","messageId","FaxMessage",function(a,b,c,d,e,f,g){a.data=null,a.initInfo=function(){g.get({id:f}).$promise.then(function(b){a.data={channel:b.channel,channelstate:b.channelstate,channelstatedesc:b.channelstatedesc,uniqueid:b.uniqueid,localstationid:b.localstationid,remotestationid:b.remotestationid,pagestransferred:b.pagestransferred,resolution:b.resolution,transferrate:b.transferrate,lastStatus:b.lastStatus,error:b.error,retry:b.retry}})["catch"](function(b){switch(b.status){case 404:a.data=null;break;default:e.error(b)}})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").directive("faxMessage",["$rootScope","$translate","$uibModal","FaxMessage","List","xAlert",function(a,b,c,d,e,f){return{restrict:"E",scope:{message:"=",listId:"="},templateUrl:"app/channels/fax/inbox/message/message.directive.html",link:function(g){g.openContact=function(c){return g.listId?e.save({listId:g.listId,controller:"contacts"},{fax:c}).$promise.then(function(b){var c=_.find(a.$root.workspaces,{contactID:b.id});c?c.active=!0:a.$root.workspaces.push({active:!0,"class":"icon-user",contactID:b.id,name:b.fax,type:"contact"})})["catch"](function(a){f.error(a)}):void f.show(b.instant("MESSAGE_NO_LIST_CONFIGURED"),"info")},g.info=function(a){c.open({animation:!0,templateUrl:"app/channels/fax/inbox/message/info.modal.html",controller:"FaxInboxInfoModalCtrl",resolve:{messageId:function(){return a.id}}})},g.retry=function(a){return d.update({id:a,status:"SENDING"}).$promise["catch"](function(a){console.error(a)})}}}}]),angular.module("xCallyShuttleApp").directive("faxNote",["$translate","Modal","Auth","FaxMessage","xAlert",function(a,b,c,d,e){return{restrict:"E",scope:{message:"="},templateUrl:"app/channels/fax/inbox/note/note.directive.html",link:function(f){f.Auth=c,f.deleteNote=b.confirm["delete"](function(){return d.remove({id:f.message.id}).$promise.then(function(){e.show(a.instant("MESSAGE_WELL_DONE")+"!","success")})["catch"](function(a){e.error(a)})})}}}]),angular.module("xCallyShuttleApp").controller("FaxInboxViewModalNoteCtrl",["$scope","$uibModalInstance","$translate","id","FaxRoom","xAlert",function(a,b,c,d,e,f){a.initModal=function(){a.item={}},a.ok=function(){return e.save({id:d,controller:"messages"},{text:a.item.text,status:"NOTE"}).$promise.then(function(){f.show(c.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){f.error(a)})["finally"](function(){b.close()})},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").directive("faxRoom",["$cookieStore","$translate","$uibModal","$timeout","FaxAccount","FaxRoom","FaxMessage","FileUploader","xAlert","usSpinnerService","socket","Tag","Auth","FaxAttachment","List",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){return{restrict:"E",scope:{workspace:"="},templateUrl:"app/channels/fax/inbox/room/room.directive.html",link:function(m){function p(a){if(a){var b=_.words(a),c=_.map(b,function(a){return a?a[0]:""});return c.join("").toUpperCase()}return!1}m.$on("$destroy",function(){}),m.initForm=function(){m.forms={compose:{}}},m.getContacts=function(a){return m.listId?o.get({listId:m.listId,controller:"contacts",fax:a}).$promise.then(function(a){return a.rows})["catch"](function(a){console.error(a)}):[]},m.setList=function(a){m.listId=a};var q=[];m.expanded=!0,m.modelOptions={debounce:{"default":500,blur:250},getterSetter:!0},m.panelLeft=null,m.panelRight="col-md-12",m.form={from:"",to:m.workspace.data&&m.workspace.data.to?m.workspace.data.to:"",disabled:!1},k.socket.on("fax_message:remove",function(a){_.remove(m.faxRoom.FaxMessages,{id:a.id})}),k.socket.on("fax_message:save",function(a){return m.workspace.id&&a.FaxRoomId==m.workspace.id?(m.workspace.active||m.workspace.unread++,g.get({id:a.id}).$promise.then(function(a){m.faxRoom||(m.faxRoom={FaxMessages:[]});var b=_.findIndex(m.faxRoom.FaxMessages,{id:a.id});b>-1?_.merge(m.faxRoom.FaxMessages[b],a):m.faxRoom.FaxMessages.unshift(a),m.panelLeft="col-md-6",m.panelRight="col-md-6"})["catch"](function(a){console.error(a)})):void 0});var r=m.uploader=new h({url:"api/fax/attachments",autoUpload:!0,withCredentials:!0,queueLimit:1,headers:{Authorization:"Bearer "+a.get("token")}});return r.filters.push({name:"uploadFilter",fn:function(a){var b="|"+a.type.slice(a.type.lastIndexOf("/")+1)+"|";return-1!=="|pdf|tiff|tif".indexOf(b)}}),r.onWhenAddingFileFailed=function(a,c){switch(c.name){case"queueLimit":i.show(b.instant("MESSAGE_QUEUE_LIMIT_EXCEEDED"),"danger");break;case"uploadFilter":i.show(b.instant("MESSAGE_WRONG_FILE_FORMAT"),"danger");break;default:i.show(b.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")}},r.removeFromQueue=function(a){var c=this;return n["delete"]({id:a.basename}).$promise.then(function(){var b=c.getIndexOfItem(a),d=c.queue[b];d.isUploading&&d.cancel(),c.queue.splice(b,1),d._destroy(),c.progress=c._getTotalProgress(),q=_.reject(q,{basename:a.basename})})["catch"](function(){i.show(b.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},r.onErrorItem=function(){i.show(b.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")},r.onSuccessItem=function(a,b){var c={path:b.path,name:b.name,basename:b.basename,type:b.type};a=_.merge(a,c),q.push(c)},m.getMessageMailId=function(a){var b=a.UserId?"imgFaxUserId"+a.UserId:"imgFaxVisitorId";return b+=m.faxRoom.id.toString()+a.id.toString()},m.togglePanelLeft=function(){m.panelLeft?(m.panelLeft=null,m.panelRight="col-md-12"):(m.panelLeft="col-md-6",m.panelRight="col-md-6")},m.closeRoom=function(){return c.open({animation:!0,templateUrl:"app/channels/fax/inbox/status/status.modal.html",controller:"FaxInboxStatusModalCtrl",resolve:{status:function(){return m.faxRoom.status},accountId:function(){return m.faxRoom.FaxAccount.id}}}).result.then(function(a){return f.update({id:m.workspace.id},a).$promise["catch"](function(a){i.error(a)})})},m.loadAgents=function(){c.open({animation:!0,templateUrl:"app/channels/fax/inbox/view/view.agents.modal.html",controller:"FaxInboxViewModalAgentCtrl",resolve:{roomId:function(){return m.workspace.id}}})},m.cancel=function(){m.form.disabled=!1,m.form.from="",m.form.to=""},m.loadNote=function(){c.open({animation:!0,templateUrl:"app/channels/fax/inbox/note/note.modal.html",controller:"FaxInboxViewModalNoteCtrl",resolve:{id:function(){return m.workspace.id}}})},m.getMessageFaxId=function(a){var b=a.UserId?"imgFaxUserId"+a.UserId:"imgFaxVisitorId";return b+=m.faxRoom.id.toString()+a.id.toString()},m.getMessageRoomAvatar=function(a,b,c,e){d(function(){var d=b?"#imgFaxUserId"+b:"#imgFaxVisitorId";d+=m.faxRoom.id.toString()+a.toString(),angular.element(d).avatar({useGravatar:!1,initials:e?[]:p(c),fallbackImage:e?"api/users/avatar/"+e:"api/users/avatar/unknown_avatar"})})},m.onChanged=function(){return f.update({id:m.workspace.id},{tags:m.form.tags}).$promise["catch"](function(a){i.error(a)})},m.sendFax=function(){j.spin("spinner-grid");var a={from:m.form.from,to:m.form.to[0].fax||"",status:"SENDING",FaxAttachments:q,FaxRoomId:m.faxRoom?m.faxRoom.id:null},c=_.find(m.faxAccounts,{localstationid:m.form.from});return c?e.save({accountId:c.id,controller:"send"},a).$promise.then(function(a){return r.queue=[],q=[],i.show(b.instant("MESSAGE_WELL_DONE"),"success"),m.SmsRoom?m.SmsRoom:f.get({id:"messages",controller:a.id}).$promise}).then(function(a){a&&(m.workspace.id=a.id,m.workspace.name=a.contact,m.faxRoom=a,m.panelLeft="col-md-6",m.panelRight="col-md-6",m.expanded=!1)})["catch"](function(a){i.error(a)})["finally"](function(){j.stop("spinner-grid")}):(console.log("Can not find account"),void j.stop("spinner-grid"))},l.get().$promise.then(function(a){m.tags=_.map(a.rows,"name")})["catch"](function(a){console.error(a)}),e.get().$promise.then(function(a){m.faxAccounts=a.rows})["catch"](function(a){console.error(a)}),m.workspace.id?(m.panelLeft="col-md-6",m.panelRight="col-md-6",f.get({id:m.workspace.id}).$promise.then(function(a){m.faxRoom=a,m.form.from=a.FaxAccount.localstationid,m.form.tags=a.tags,m.workspace.name=a.contact||"No number",m.expanded=!1; +var b=_.findLast(a.FaxMessages,{status:"RECEIVED"});return b&&(m.form.to=[{fax:b.from}]),k.socket.on("fax_room:save",function(a){a.id===m.workspace.id&&_.merge(m.faxRoom,a)}),a})["catch"](function(a){i.error(a)})["finally"](function(){j.stop("spinner-grid"),m.form.disabled=!1})):(m.panelLeft=null,m.panelRight="col-md-12",j.stop("spinner-grid"),void 0)}}}]),angular.module("xCallyShuttleApp").controller("FaxInboxStatusModalCtrl",["$scope","$uibModalInstance","FaxAccount","status","accountId",function(a,b,c,d,e){a.modal={title:"APPLICATION_CONFIRM_CLOSE",text:"MESSAGE_ARE_YOU_SURE_YOU_WANT_TO_CLOSE_THE_FAX"},a.initDisposition=function(){return a.item={disposition:null,status:"CLOSED"},c.get({accountId:e,controller:"dispositions"}).$promise.then(function(b){a.dispositions=b.rows})["catch"](function(a){console.error(a)})},a.ok=function(){b.close(a.item)},a.cancel=function(){b.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.fax.inbox.view.account",{url:"/account/:id",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user","agent"],redirectTo:"landing",id:10}}})}]),angular.module("xCallyShuttleApp").controller("FaxInboxViewAccountListCtrl",["$scope","$rootScope","$uibModal","$translate","$stateParams","$state","Tag","usSpinnerService","socket","FaxAccount","FaxRoom","gridOptions","uiGridConstants","Auth","Modal","xAlert","localStorageService","uibButtonConfig",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r){a.openRoom=function(b){var c=_.find(a.workspaces,{id:b,type:"faxRoom"});return c?c.active=!0:a.workspaces.push({id:b,type:"faxRoom","class":"fa fa-fax",active:!0}),b&&"agent"===n.getCurrentUser().role&&"PENDING"!==a.query.status&&"CLOSED"!==a.query.status?k.patch({id:b},{status:"OPEN",openReason:"agent"}).$promise["catch"](function(a){console.error(a)}):void 0},a.getPage=function(){h.spin("spinner-grid");var b={accountId:e.id,controller:"rooms"};return a.query&&_.merge(b,a.query),j.query(b).$promise.then(function(b){q.set("faxAccountId",e.id),a.gridOptions.data=b,i.socket.on("fax_room:save",function(b){if(b.FaxAccountId==e.id){var c=_.find(a.gridOptions.data,{id:b.id});c?c.status!==b.status?_.remove(a.gridOptions.data,{id:b.id}):_.merge(c,b):a.query.status===b.status&&a.gridOptions.data.push(b)}}),i.socket.on("fax_room:remove",function(b){_.remove(a.gridOptions.data,{id:b.id})})})["catch"](function(a){p.error(a)})["finally"](function(){h.stop("spinner-grid")})},a.initView=function(){r.activeClass="green-haze",a.id=[],a.isAdmin=n.isAdmin(),a.isAgent=n.isAgent(),a.uncheckable=!1,a.query={status:q.get("faxStatus")?q.get("faxStatus"):"NEW",tags:q.get("faxTags")?q.get("faxTags"):[]},a.$watch("query.status",function(){q.set("faxStatus",a.query.status),a.getPage(a.query)},!0),j.get().$promise.then(function(b){a.faxAccounts=b.rows})["catch"](function(a){console.error(a)}),g.get().$promise.then(function(b){a.tags=_.map(b.rows,"name")})["catch"](function(a){console.error(a)}),a.gridOptions={exporterCsvFilename:"fax_rooms.csv",enableRowHeaderSelection:!0,paginationPageSizes:[10,25,50,75],paginationPageSize:10,enableFiltering:!0,enableSorting:!0,enableGridMenu:!1,flatEntityAccess:!0,showGridFooter:!0,fastWatch:!0,enableSelectAll:!0,enableHorizontalScrollbar:0,enableVerticalScrollbar:0,columnDefs:[{name:"lastEvent",displayName:"",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div> <span data-ng-class=\"{'icon-arrow-up font-green': row.entity.lastEvent === 'SENT', 'icon-arrow-up font-yellow': row.entity.lastEvent === 'SENDING', 'icon-arrow-down font-green': row.entity.lastEvent === 'RECEIVED', 'icon-close font-red': row.entity.lastEvent === 'FAILED', 'icon-question': !row.entity.lastEvent}\"> </span> </div>",width:30,enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1},{name:"tags",displayName:"",headerCellTemplate:'<i class="icon-tag" style="margin-top: 8px; margin-left: 8px;"></i>',cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div><i data-ng-class=\"row.entity.tags.length ? 'icon-tag' : ''\" title=\"{{row.entity.tags}}\"></i></div>",width:30,enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1},{name:"id",displayName:"Id",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div><span>#{{row.entity.id}}</span></div>",width:75,enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1},{name:"contact",cellClass:"text-center"},{name:"disposition",displayName:"APPLICATION_DISPOSITION",headerCellFilter:"translate"},{name:"updatedAt",cellFilter:"date:'MM/dd/yyyy HH:mm'",width:120,enableSorting:!1,enableFiltering:!1,sort:{direction:m.DESC}},{name:"action",cellTemplate:'<div> <a class="btn btn-icon-only font-green" data-ng-hide="row.entity.waiting" data-ng-click="grid.appScope.openRoom(row.entity.id, row.entity.contact)"><i class="fa fa-fax" aria-hidden="true"></i></a> <a class="btn btn-icon-only font-red" data-ng-show="grid.appScope.isAdmin" data-ng-click="grid.appScope.deleteItem(row.entity.id, row.entity.id)"><i class="fa fa-trash" aria-hidden="true"></i> </div>',enableSorting:!1,cellClass:"ui-grid-vcenter",width:70,enableFiltering:!1,enableColumnMenu:!1}],data:[],onRegisterApi:function(b){a.gridApi=b,a.gridApi.selection&&(a.gridApi.selection.on.rowSelectionChanged(a,function(b){b.isSelected?a.id.push(a.gridApi.grid.options.primaryKey?b.entity[a.gridApi.grid.options.primaryKey]:b.entity.id):_.pull(a.id,a.gridApi.grid.options.primaryKey?b.entity[a.gridApi.grid.options.primaryKey]:b.entity.id)}),a.gridApi.selection.on.rowSelectionChangedBatch(a,function(b){b[0].isSelected?a.id=_.union(a.id,_.map(b,a.gridApi.grid.options.primaryKey?"entity."+a.gridApi.grid.options.primaryKey:"entity.id")):_.map(b,a.gridApi.grid.options.primaryKey?"entity."+a.gridApi.grid.options.primaryKey:"entity.id").forEach(function(b){_.pull(a.id,b)})}))}},a.getPage(a.query)},a.onChanged=function(){q.set("faxTags",a.query.tags),a.getPage(a.query)},a.loadAgents=function(a){c.open({animation:!0,templateUrl:"app/channels/fax/inbox/view/view.agents.modal.html",controller:"FaxInboxViewModalAgentCtrl",resolve:{roomId:a}})},a.tagItems=function(){c.open({animation:!0,templateUrl:"app/channels/fax/inbox/view/view.tags.modal.html",controller:"FaxInboxViewModalTagCtrl",resolve:{id:function(){return a.id}}}).result.then(function(){a.gridApi.selection.clearSelectedRows(),a.id=[]})},a.deleteItem=o.confirm["delete"](function(b){var c={id:b};return k.remove(c).$promise.then(function(){a.getPage(),p.show(d.instant("MESSAGE_WELL_DONE")+"!","success"),a.gridApi.selection.clearSelectedRows(),a.id=[]})["catch"](function(a){p.error(a)})}),a.deleteItems=o.confirm["delete"](function(){var b={ids:a.id};return k["delete"](b).$promise.then(function(){a.getPage(),p.show(d.instant("MESSAGE_WELL_DONE")+"!","success"),a.gridApi.selection.clearSelectedRows(),a.id=[]})["catch"](function(a){p.error(a)})}),a.disposeItems=function(){return c.open({animation:!0,templateUrl:"app/channels/fax/inbox/status/status.modal.html",controller:"FaxInboxStatusModalCtrl",resolve:{status:function(){return null},accountId:function(){return e.id}}}).result.then(function(b){return k.patch({id:a.id},b).$promise.then(function(){a.gridApi.selection.clearSelectedRows(),a.id=[]})["catch"](function(a){p.error(a)})})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.fax.inbox.view.account.list",{url:"/list",templateUrl:"app/channels/fax/inbox/view/account/list/list.html",controller:"FaxInboxViewAccountListCtrl",data:{permissions:{only:["admin","user","agent"],redirectTo:"landing",id:10}}})}]),angular.module("xCallyShuttleApp").controller("FaxInboxViewModalAgentCtrl",["$scope","$uibModalInstance","$translate","$stateParams","Agent","FaxRoom","xAlert","roomId",function(a,b,c,d,e,f,g,h){a.initModal=function(){a.agents=[],a.item={agents:[]},e.get().$promise.then(function(b){b.rows.forEach(function(b){a.agents.push(b)})})["catch"](function(a){console.error(a)}),f.query({id:h,controller:"agents"}).$promise.then(function(b){b.forEach(function(b){a.agents.push(b),a.item.agents.push(b.id)})})["catch"](function(a){console.error(a)}),a.modal={dismissable:!0,title:"APPLICATION_MESSAGE_SEND_RETRY",text:"MESSAGE_MESSAGE_SEND_RETRY",buttons:[{classes:"btn btn-success",text:"APPLICATION_RETRY",click:function(a){b.close(a)}},{classes:"btn default",text:"APPLICATION_CANCEL",click:function(a){b.dismiss(a)}}]}},a.ok=function(){return f.update({id:h,controller:"agents",agents:a.item.agents}).$promise.then(function(){g.show(c.instant("MESSAGE_WELL_DONE"),"success"),b.close()})["catch"](function(a){console.error(a)})},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("FaxInboxViewCtrl",["$scope","$timeout","$location","localStorageService","FaxAccount","xAlert",function(a,b,c,d,e,f){a.initView=function(){return e.get().$promise.then(function(b){var e=null;a.faxAccounts=b.rows,a.faxAccounts.length&&(e="/channels/fax/inbox/view/account/"+(d.get("faxAccountId")||a.faxAccounts[0].id)+"/list"),e&&c.path(e)})["catch"](function(a){f.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.fax.inbox.view",{url:"/view",templateUrl:"app/channels/fax/inbox/view/view.html",controller:"FaxInboxViewCtrl",reload:!0,resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/inbox.css"]}])}]}})}]),angular.module("xCallyShuttleApp").controller("FaxInboxViewModalStatusCtrl",["$scope","$uibModalInstance","$translate","$stateParams","$location","FaxRoom","xAlert","id","status",function(a,b,c,d,e,f,g,h,i){a.initModal=function(){a.modal={dismissable:!0,title:"APPLICATION_STATUS",html:"<p>"+c.instant("MESSAGE_CHANGE_STATUS")+"<strong> "+i+"</strong>?</p>",status:i,buttons:[{classes:"btn btn-success",text:"APPLICATION_CONFIRM",click:function(a){return f.update({id:h},{status:i}).$promise.then(function(){g.show(c.instant("MESSAGE_STATUS_UPDATE_SUCCESS"),"success"),b.close(a)})["catch"](function(a){g.error(a)})}},{classes:"btn default",text:"APPLICATION_CANCEL",click:function(a){b.dismiss(a)}}]}}}]),angular.module("xCallyShuttleApp").controller("FaxInboxViewModalTagCtrl",["$scope","$uibModalInstance","$translate","$stateParams","Tag","FaxRoom","xAlert","id",function(a,b,c,d,e,f,g,h){console.log(h),a.initModal=function(){return a.tags=[],a.item={tags:[]},a.modal={dismissable:!0,title:"APPLICATION_MESSAGE_SEND_RETRY",text:"MESSAGE_MESSAGE_SEND_RETRY",buttons:[{"class":"btn-success",text:"APPLICATION_TAG",click:function(){var d={status:!0};return f.patch({id:h},{tags:a.item.tags}).$promise["catch"](function(){d.status=!1,g.show(c.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})["finally"](function(){b.close(d)})}},{"class":"default",text:"APPLICATION_CANCEL",click:function(a){b.dismiss(a)}}]},e.get().$promise.then(function(b){a.tags=_.map(b.rows,"name")})["catch"](function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").factory("FaxQueue",["$resource",function(a){return a("/api/fax/queues/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("FaxQueueListCtrl",["$scope","FaxQueue","gridOptions","Auth","$uibModal",function(a,b,c,d,e){a.initView=function(){a.Auth=d;var e={exporterCsvFilename:"fax_queues.csv",columnDefs:[{name:"name"},{name:"description"},{name:"strategy"},{name:"timeout"},{name:"action",width:100,buttons:[{"class":"blue-hoki",href:"/channels/fax/queues/view/{{row.entity.id}}/settings",name:"settings"},{"class":"green-meadow",href:"/channels/fax/queues/view/{{row.entity.id}}/agents",name:"agents",hide:"user"===d.getCurrentUser().role},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=c.gridOptions(b,e,a)},a.createItem=function(){var b=e.open({animation:!0,templateUrl:"app/channels/fax/queue/list/list.create.modal.html",controller:"FaxQueueListCreateCtrl",size:"lg"});b.result.then(function(b){console.log(b),a.gridOptions.getPage()})}}]),angular.module("xCallyShuttleApp").controller("FaxQueueListCreateCtrl",["$scope","$uibModalInstance","$translate","xAlert","FaxQueue","Team","strategies",function(a,b,c,d,e,f,g){a.form={},a.strategies=g,a.item={penalty:0,agents:[]},a.getTeams=function(){return f.get({controller:"associations"}).$promise.then(function(b){a.teams=b.rows}).then(function(){ComponentsDropdowns.bindQueue(a.teams,[],function(){return{select:function(b){a.item.agents=_.union(a.item.agents,b)},deselect:function(b){a.item.agents=_.difference(a.item.agents,b)}}})})["catch"](function(a){console.error(a)})},a.save=function(){return e.save(a.item).$promise.then(function(a){d.show(c.instant("MESSAGE_WELL_DONE"),"success"),b.close(a)})["catch"](function(a){d.error(a)})},a.cancel=function(){b.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.fax.queues.list",{url:"/list",templateUrl:"app/channels/fax/queue/list/list.html",controller:"FaxQueueListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/jquery-multi-select/css/multi-select.css","assets/plugins/jquery-multi-select/js/jquery.multi-select.js","assets/plugins/jquery-quicksearch/jquery.quicksearch.js","assets/scripts/components-dropdowns.js"]})}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.fax.queues",{url:"/queues",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:39}}})}]),angular.module("xCallyShuttleApp").controller("FaxQueueViewCtrl",["$scope","$http","$translate","$stateParams","xAlert","FaxQueue","Team","Auth","strategies",function(a,b,c,d,e,f,g,h,i){a.Auth=h,a.strategies=i;var j=function(){return{select:function(b){return f.save({id:a.queue.id,controller:"agents"},{agents:b,penalty:a.queue.penalty}).$promise.then(function(){a.getTeams()})["catch"](function(a){console.error(a)})},deselect:function(b){return f["delete"]({id:a.queue.id,controller:"agents",agents:b}).$promise.then(function(){a.getTeams()})["catch"](function(a){console.error(a)})}}};a.getQueue=function(){return f.get({id:d.id}).$promise.then(function(b){b.penalty=0,a.queue=b})["catch"](function(a){e.error(a)})},a.updateFaxQueue=function(){return f.update({id:d.id},{name:a.queue.name,description:a.queue.description,timeout:a.queue.timeout,strategy:a.queue.strategy}).$promise.then(function(){e.show(c.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){e.error(a)})},a.getTeams=function(){return g.get({controller:"associations"}).$promise.then(function(b){return a.teams=b.rows,f.get({id:d.id,controller:"agents"}).$promise}).then(function(b){ComponentsDropdowns.bindMailQueue(a.teams,_.map(b.rows,function(a){return{id:a.id,penalty:a.UserHasFaxQueue.penalty}}),j)})["catch"](function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.fax.queues.view",{url:"/view/:id",templateUrl:"app/channels/fax/queue/view/view.html",controller:"FaxQueueViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.channels.fax.queues.view.settings",{url:"/settings",templateUrl:"app/channels/fax/queue/view/view.settings.html"}).state("main.channels.fax.queues.view.agents",{url:"/agents",templateUrl:"app/channels/fax/queue/view/view.agents.html",cache:!1,serie:!0,resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/jquery-multi-select/css/multi-select.css","assets/plugins/jquery-multi-select/js/jquery.multi-select.js","assets/plugins/jquery-quicksearch/jquery.quicksearch.js","assets/scripts/components-dropdowns.js"]})}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.fax.realtime",{url:"/realtime",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:41}}})}]),angular.module("xCallyShuttleApp").controller("FaxRealtimeViewAgentCtrl",["$scope","$log","$uibModal","$translate","socket","xAlert","Agent","Pause","Action","FaxQueue","usSpinnerService","$q","uiGridConstants","Auth",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n){function o(){return k.spin("grid-spinner"),g.get(t).$promise.then(function(b){a.gridOptions.totalItems=b.count,a.gridOptions.data=[],b.rows.forEach(function(a){q(a)})})["catch"](function(a){f.error(a)})["finally"](function(){k.stop("grid-spinner")})}function p(){e.socket.on("agent:save",function(b){b=b.newValues||b;var c=_.find(a.gridOptions.data,{agentId:b.id,isAgent:!0});c&&(c.online=_.has(b,"online")?b.online:c.online,c.lastLoginAt=_.has(b,"lastLoginAt")?b.lastLoginAt:c.lastLoginAt,c.pause=_.has(b,"smsPause")?b.faxPause:c.faxPause,c.pauseType=_.has(b,"pauseType")?b.pauseType:c.pauseType,c.lastPauseAt=_.has(b,"lastPauseAt")?b.lastPauseAt:c.lastPauseAt,c.ipaddr=_.has(b,"ipaddr")?b.ipaddr:c.ipaddr,c.port=_.has(b,"port")?b.port:c.port,c.fullcontact=_.has(b,"fullcontact")?b.fullcontact:c.fullcontact,c.useragent=_.has(b,"useragent")?b.useragent:c.useragent,c.lastms=_.has(b,"lastms")?b.lastms:c.lastms,c.internal=_.has(b,"internal")?b.internal:c.internal,_.map(a.gridOptions.data,function(a){a.isAgent||a.agentId!==b.id||(a.online=_.has(b,"online")?b.online:a.online)}))}),e.socket.on("agent:remove",function(b){_.remove(a.gridOptions.data,{agentId:b.id})}),e.socket.on("user_has_fax_queue:save",function(b){var c=_.includes(_.map(a.CurrentUser.PFaxQueues,"id"),b.FaxQueueId)||n.isAdmin();if(c){var d=_.find(a.gridOptions.data,{agentId:b.UserId,isAgent:!0});if(d){var e=a.gridOptions.data.indexOf(d);a.gridOptions.data.splice(e+1,0,{isAgent:!1,agentId:b.UserId,queue:b.queue,queueId:b.FaxQueueId,agent:b.membername,online:d.online})}}}),e.socket.on("user_has_fax_queue:remove",function(b){_.remove(a.gridOptions.data,{agentId:b.UserId,queueId:b.FaxQueueId})})}function q(b){a.gridOptions.data.push({isAgent:!0,agentId:b.id,agent:b.name,online:b.online,lastLoginAt:b.lastLoginAt,lastPauseAt:b.lastPauseAt,pause:b.faxPause,pauseType:b.pauseType,ipaddr:b.ipaddr,port:b.port,fullcontact:b.fullcontact,useragent:b.useragent,lastms:b.lastms,internal:b.internal,$$treeLevel:0}),b.FaxQueues.forEach(function(c){a.gridOptions.data.push({isAgent:!1,agentId:b.id,queue:c.name,queueId:c.id,agent:b.name,online:b.online})})}function r(){return h.get().$promise.then(function(b){a.pauses=b.rows,e.syncUpdates("pause",a.pauses)})["catch"](function(a){f.error(a)})}function s(){return j.get().$promise.then(function(b){a.faxQueues=b.rows,e.syncUpdates("fax_queue",a.faxQueues)})["catch"](function(a){f.error(a)})}a.faxQueues=[];var t={controller:"realtime",controller1:"fax",offset:0,limit:10};a.moment=moment,a.initAgents=function(){a.gridOptions={enableGridMenu:!0,headerCellFilter:"translate",enableHorizontalScrollbar:0,enableVerticalScrollbar:0,enableFiltering:!0,showGridFooter:!0,paginationPageSizes:[10,25,50,75],paginationPageSize:10,useExternalPagination:!0,useExternalSorting:!0,useExternalFiltering:!0,multiSelect:!0,showTreeExpandNoChildren:!0,columnDefs:[{name:"name",displayName:"APPLICATION_AGENT",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div data-ng-if="row.entity.isAgent">{{row.entity.agent}} <{{row.entity.internal}}></div>'},{name:"online",displayName:"APPLICATION_ONLINE",width:150,headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div data-ng-if="row.entity.online != null && row.entity.isAgent"><i class="fa" data-ng-class="{\'font-green\':row.entity.online, \'font-red\':!row.entity.online,\'fa-user\':row.entity.online,\'fa-user-times\':!row.entity.online}"></i> <span data-ng-if="row.entity.online" class="left-margin">(<css-timer start-time="row.entity.lastLoginAt"></css-timer>)</span></div>',filter:{type:m.filter.SELECT,selectOptions:[{value:"true",label:"ONLINE"},{value:"false",label:"OFFLINE"}]}},{name:"faxPause",width:300,displayName:"APPLICATION_PAUSE",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div data-ng-if="row.entity.pause != null && row.entity.online" class="ui-grid-vcenter" data-ng-class="{\'paused-agent\':row.entity.pause}"><i data-ng-if="row.entity.pause" data-ng-click="grid.appScope.pause(row.entity.agentId,\'unpause\')" class="fa fa-play font-green pointer-cursor left-margin" title="{{\'APPLICATION_RESUME\' | translate}}"></i><i class="fa fa-pause font-yellow pointer-cursor" data-ng-click="grid.appScope.pause(row.entity.agentId,\'pause\',\'DEFAULT PAUSE\')" title="{{\'APPLICATION_DEFAULT_PAUSE\' | translate}}"></i><select data-ng-if="grid.appScope.pauses.length" class="pause-select pointer-cursor" data-ng-model="grid.appScope.pauseType" data-ng-change="grid.appScope.pause(row.entity.agentId,\'pause\',grid.appScope.pauseType)"><option class="pointer-cursor" data-ng-repeat="pause in grid.appScope.pauses">{{pause.name}}</option></select> <span data-ng-if="row.entity.pause">({{row.entity.pauseType}})</span><span class="left-margin"><css-timer data-ng-if="row.entity.pause" start-time="row.entity.lastPauseAt"></css-timer></span></div>',filter:{type:m.filter.SELECT,selectOptions:[{value:"true",label:"PAUSED"},{value:"false",label:"NOT PAUSED"}]},enableSorting:!1,enableColumnMenu:!1},{name:"queue",displayName:"APPLICATION_QUEUE",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1},{name:"action",displayName:"",width:170,cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div><button data-ng-if="row.entity.queueId" class="btn btn-xs red-sunglo" data-ng-click="grid.appScope.leaveQueue(row.entity.agentId,row.entity.queueId)"><i class="icon-ban"></i> {{\'APPLICATION_LEAVE\' | translate}}</button><button data-ng-if="row.entity.isAgent && row.treeNode.children.length < grid.appScope.faxQueues.length" class="btn btn-xs blue-hoki" data-ng-click="grid.appScope.joinQueue(row.entity.agentId)"><i class="icon-plus"></i> {{\'APPLICATION_JOIN_QUEUE\' | translate}}</button><div>',enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1}],data:[],gridMenuTitleFilter:function(a){var b=l.defer();return b.resolve(d.instant(a)),b.promise},onRegisterApi:function(b){a.gridApi=b,a.gridApi.grid.registerDataChangeCallback(function(){u(a.gridApi.core.getVisibleRows(a.gridApi.grid).length)}),a.gridApi.treeBase.on.rowExpanded(a,function(b){u(a.gridApi.core.getVisibleRows(a.gridApi.grid).length+b.treeNode.children.length)}),a.gridApi.treeBase.on.rowCollapsed(a,function(b){u(a.gridApi.core.getVisibleRows(a.gridApi.grid).length-b.treeNode.children.length)}),a.gridApi.core.on.sortChanged(a,function(a,b){0===b.length?t.order=null:t.order=b[0].name+" "+b[0].sort.direction.toUpperCase(),o()}),a.gridApi.pagination.on.paginationChanged(a,function(a,b){t.offset=(a-1)*b,t.limit=b,o()}),a.gridApi.core.on.filterChanged(a,function(){var a=this.grid;a.columns.forEach(function(a){a.filters[0].term?t[a.name]=a.filters[0].term:delete t[a.name]}),o()})}},o(),r(),s(),$timeout(function(){p()})};var u=function(a){var b=a?30*a+130:270;angular.element(document.getElementsByClassName("ui-grid")[0]).css("height",b+"px"),angular.element(document.getElementsByClassName("ui-grid-viewport")).css("height",30*a+"px")};a.$on("$destroy",function(){e.unsyncUpdates("agent"),e.unsyncUpdates("user_has_fax_queue")}),a.pause=function(b,c,e){return e&&(a.pauseType=null),i.save({name:c,agent:b,type:e||"DEFAULT PAUSE",data4:e||"DEFAULT PAUSE",channel:"fax"}).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){f.error(a)})},a.joinQueue=function(e){var g=c.open({animation:!0,templateUrl:"app/channels/fax/realtime/view/agent/queue.modal.add.html",controller:"FaxRealtimeViewAgentQueueModalCtrl",resolve:{queues:function(){return _.reject(a.faxQueues,function(b){return!!_.find(a.gridOptions.data,{queue:b.name,isAgent:!1,agentId:e})})}}});g.result.then(function(b){return i.save({name:"QueueAdd",agent:e,queues:_.filter(a.faxQueues,function(a){return _.includes(b.queues,a.id)}),channel:"fax",data1:e,data3:b.queues.join(","),data4:"fax"}).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){f.error(a)})},function(){b.info("Modal dismissed at: "+new Date)})},a.leaveQueue=function(a,b){return i.save({name:"QueueRemove",agent:a,queueId:b,channel:"fax",data1:a,data3:b,data4:"fax"}).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){f.error(a)})},a.showInfo=function(a){c.open({animation:!0,templateUrl:"app/channels/fax/realtime/view/agent/agent.modal.info.html",controller:"FaxRealtimeViewAgentInfoModalCtrl",resolve:{agent:a}})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.fax.realtime.view.agents",{url:"/agents",templateUrl:"app/channels/fax/realtime/view/agent/agent.html",controller:"FaxRealtimeViewAgentCtrl"})}]),angular.module("xCallyShuttleApp").controller("FaxRealtimeViewAgentInfoModalCtrl",["$scope","$uibModalInstance","$http","agent",function(a,b,c,d){a.agent=d,a.close=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("FaxRealtimeViewAgentQueueModalCtrl",["$scope","$uibModalInstance","$http","queues",function(a,b,c,d){a.queues=d,a.item={},a.save=function(){b.close(a.item)},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("FaxRealtimeViewApplicationCtrl",["$scope","$log","$uibModal","$translate","socket","xAlert","ReportFaxSession","usSpinnerService","$q","uiGridConstants","$timeout",function(a,b,c,d,e,f,g,h,i,j,k){function l(){return h.spin("spinner-grid"),g.get({controller:"waiting",controller2:"applications"}).$promise.then(function(b){a.gridOptions.data=b.rows})["catch"](function(a){f.error(a)})["finally"](function(){m(),h.stop("spinner-grid")})}function m(){e.socket.on("report_fax_session:save",function(b){var c=_.find(a.gridOptions.data,{id:b.id});c?(_.merge(c,b),b.leaveAt&&k(function(){_.remove(a.gridOptions.data,{id:b.id})},1e4)):b.leaveAt||a.gridOptions.data.push(b)}),e.socket.on("report_fax_session:remove",function(b){_.remove(a.gridOptions.data,{id:b.id})})}a.moment=moment,a.initApplications=function(){a.gridOptions={headerCellFilter:"translate",enableHorizontalScrollbar:0,enableVerticalScrollbar:0,enableFiltering:!0,columnDefs:[{name:"uniqueid",displayName:"APPLICATION_UNIQUEID",headerCellFilter:"translate"},{name:"accountname",displayName:"APPLICATION_ACCOUNT",headerCellFilter:"translate"},{name:"application",displayName:"APPLICATION_APPLICATION",headerCellFilter:"translate"},{name:"status",displayName:"APPLICATION_STATUS",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div><span data-ng-if="!row.entity.leaveAt">{{\'APPLICATION_QUEUESTATUS_WAITING\' | translate}}</span><span data-ng-if="row.entity.leaveAt && row.entity.complete">{{\'APPLICATION_QUEUESTATUS_COMPLETE\' | translate}}</span><span data-ng-if="row.entity.leaveAt && row.entity.timeout">{{\'APPLICATION_TIMEOUT\' | translate}}</span> <span data-ng-if="!row.entity.leaveAt">[<css-timer start-time="row.entity.updatedAt"></css-timer>]</span></div>',enableSorting:!1,enableColumnMenu:!1,enableFiltering:!1},{name:"membername",displayName:"APPLICATION_AGENT",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{row.entity.membername || ''}}</span></div>"},{name:"queuename",displayName:"APPLICATION_QUEUE",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{row.entity.queuename || ''}}</span></div>"}],data:[],gridMenuTitleFilter:function(a){var b=i.defer();return b.resolve(d.instant(a)),b.promise},onRegisterApi:function(b){a.gridApi=b,a.gridApi.grid.registerDataChangeCallback(function(){n(a.gridOptions.data.length)})}},l()};var n=function(a){var b=a?30*a+60:270;angular.element(document.getElementsByClassName("ui-grid")[0]).css("height",b+"px"),angular.element(document.getElementsByClassName("ui-grid-viewport")).css("height",30*a+"px")};a.$on("$destroy",function(){e.unsyncUpdates("report_fax_session")})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.fax.realtime.view.applications",{url:"/applications",templateUrl:"app/channels/fax/realtime/view/application/application.html",controller:"FaxRealtimeViewApplicationCtrl"})}]),angular.module("xCallyShuttleApp").controller("FaxRealtimeViewCtrl",["$scope","$state",function(a,b){a.agents=[{name:"Queues",link:"main.channels.fax.realtime.view.agents.queues"},{name:"Timeline",link:"main.channels.fax.realtime.view.agents.timeline"}],a.sessions=[{name:"Sessions",link:"main.channels.fax.realtime.view.sessions"}],a.tree={queues:[{name:"Queues",link:"main.channels.fax.realtime.view.agents.queues"},{name:"Timeline",link:"main.channels.fax.realtime.view.agents.timeline"}],sessions:[{name:"Sessions",link:"main.channels.fax.realtime.view.sessions"}]}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.fax.realtime.view",{url:"/view",templateUrl:"app/channels/fax/realtime/view/view.html",controller:"FaxRealtimeViewCtrl"})}]),angular.module("xCallyShuttleApp").factory("ReportFaxSession",["$resource",function(a){return a("/api/report/fax/sessions/:id/:controller/:controller2",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("MailAccount",["$resource",function(a){return a("/api/mail/accounts/:accountId/:controller/:id",{id:"@accountId"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.mail.accounts",{url:"/accounts",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:34}}})}]),angular.module("xCallyShuttleApp").controller("MailAccountListCtrl",["$scope","$stateParams","gridOptions","MailAccount","socket",function(a,b,c,d,e){a.$on("$destroy",function(){e.unsyncUpdates("mail_server_in")}),a.initView=function(){e.socket.on("mail_server_in:save",function(b){var c=_.find(a.gridOptions.data,{id:b.MailAccountId});c&&(c.MailServerIn.state=b.state,c.MailServerIn.source=JSON.parse(b.source))});var f={exporterCsvFilename:"mail_accounts.csv",columnDefs:[{name:"name"},{name:"description"},{name:"address"},{name:"MailServerIn.state",width:100,cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div> <span data-ng-if="row.entity.MailServerIn" class="label label-sm" data-ng-class="row.entity.MailServerIn.state === \'CONNECTED\' ? \'label-success\' : \'label-danger\'">{{row.entity.MailServerIn.state}}</span> <span data-ng-if="!row.entity.MailServerIn" class="label label-sm label-info" >{{\'APPLICATION_DISABLED\' | translate | uppercase}}</span> </div>',displayName:"IMAP",enableSorting:!1,enableFiltering:!1},{name:"MailServerOut.state",width:110,cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div><span class=\"label label-sm\" data-ng-class=\"row.entity.MailServerOut.state === 'CONNECTED' ? 'label-success' : 'label-danger'\">{{row.entity.MailServerOut.state}}</span></div>",displayName:"SMTP",enableSorting:!1,enableFiltering:!1},{name:"action",width:75,buttons:[{"class":"blue-hoki",href:"/channels/mail/accounts/view/{{row.entity.id}}/settings",name:"profile"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=c.gridOptions(d,f,a,{accountId:b.accountId})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.mail.accounts.list",{ +url:"/list",templateUrl:"app/channels/mail/account/list/list.html",controller:"MailAccountListCtrl"})}]),angular.module("xCallyShuttleApp").factory("MailServerIn",["$resource",function(a){return a("/api/mail/servers/in/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("MailServerOut",["$resource",function(a){return a("/api/mail/servers/out/:id/:controller",{id:"@id"},{update:{method:"PUT"},test:{method:"GET"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.mail.accounts.view.actions",{url:"/actions",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("MailAccountViewActionListCtrl",["$scope","gridOptions","MailAccount","$http","$translate","$stateParams",function(a,b,c,d,e,f){a.initActons=function(){var d={draggable:!0,exporterCsvFilename:"mail_applications.csv",enableSorting:!1,enableFiltering:!1,columnDefs:[{name:"app",cellClass:"text-center"},{name:"name",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div><span>{{row.entity.app == "queue" ? row.entity.MailQueue.name : row.entity.User.name}}</span></div>'},{name:"timeout",cellClass:"text-center"},{name:"interval",displayName:"APPLICATION_TIME_INTERVAL",cellClass:"text-center",cellTemplate:"<div><span>{{row.entity.Interval ? row.entity.Interval.name : row.entity.interval}}</span></div>"},{name:"action",width:125,buttons:[{"class":"blue-hoki",href:"/channels/mail/accounts/view/{{row.entity.MailAccountId}}/actions/view/{{row.entity.id}}",name:"profile"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.app, row.entity.id)"}]}]};a.gridOptions=b.gridOptions(c,d,a,{accountId:f.accountId,controller:"applications"})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.mail.accounts.view.actions.list",{url:"/list",templateUrl:"app/channels/mail/account/view/action/list/list.html",controller:"MailAccountViewActionListCtrl"})}]),angular.module("xCallyShuttleApp").controller("MailAccountViewActionViewCtrl",["$scope","$http","$stateParams","$translate","$location","xAlert","WizardHandler","socket","application","interval","Agent","Interval","MailQueue","MailAccount","Template","SmsAccount",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){a.isActive=!0,a.size="small",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.initAction=function(){return a.$application=i.application,a.$stateParams=c,a.$interval=j.interval,a.forms={},a.apps=[{name:"Queue",value:"queue"},{name:"Agent",value:"agent"},{name:"SendMail",value:"sendMail"},{name:"ReplyMail",value:"replyMail"},{name:"SendSMS",value:"sendSms"}],a.types=[{key:"APPLICATION_REPLY",value:"reply"},{key:"APPLICATION_REPLY_TO_ALL",value:"replyAll"}],n.get({accountId:c.accountId,controller:"applications",id:c.actionId}).$promise.then(function(b){if(a.application=b,a.application.alwaysTime=!1,a.application.IntervalId)a.application.intType="list";else switch(a.application.interval){case"*,*,*,*":a.application.intType="always";break;default:a.application.intType="custom"}if("always"===a.application.intType||"custom"===a.application.intType){var c=a.application.interval.split(",");"*"===c[0]?a.application.alwaysTime=!0:(a.application.t_from=moment(new Date),a.application.t_to=moment(new Date),a.application.t_from.hour(c[0].split("-")[0].split(":")[0]),a.application.t_from.minute(c[0].split("-")[0].split(":")[1]),a.application.t_to.hour(c[0].split("-")[1].split(":")[0]),a.application.t_to.minute(c[0].split("-")[1].split(":")[1])),"*"===c[1]?(a.application.wd_from="always",a.application.wd_to="always"):(a.application.wd_from=c[1].split("-")[0],a.application.wd_to=c[1].split("-")[1]),"*"===c[2]?(a.application.md_from="always",a.application.md_to="always"):(a.application.md_from=c[2].split("-")[0],a.application.md_to=c[2].split("-")[1]),"*"===c[3]?(a.application.m_from="always",a.application.m_to="always"):(a.application.m_from=c[3].split("-")[0],a.application.m_to=c[3].split("-")[1])}a.$watch("application.t_from",function(b){a.application.t_from_hm=moment(b).format("HH:mm")}),a.$watch("application.t_to",function(b){a.application.t_to_hm=moment(b).format("HH:mm")})})["catch"](function(a){console.error(a),f.error(a)})},a.getQueues=function(){return m.get().$promise.then(function(b){a.queues=b.rows})["catch"](function(a){console.error(a)})},a.getAgents=function(){return k.get().$promise.then(function(b){a.agents=b.rows})["catch"](function(a){console.error(a)})},a.getIntervals=function(){return l.get().$promise.then(function(b){a.intervals=b.rows})["catch"](function(a){console.error(a)})},a.getTemplates=function(){return o.get().$promise.then(function(b){a.templates=b.rows})["catch"](function(a){console.error(a)})},a.getMailAccounts=function(){return n.get().$promise.then(function(b){a.mailAccounts=b.rows})["catch"](function(a){console.error(a)})},a.getSmsAccounts=function(){return p.get().$promise.then(function(b){a.smsAccounts=b.rows})["catch"](function(a){console.error(a)})},a.updateItem=function(){switch(a.application.intType){case"always":a.application.interval="*,*,*,*",a.application.IntervalId=null;break;case"list":var b=_.find(a.intervals,{id:a.application.IntervalId});a.application.interval=b?"":"*,*,*,*",a.application.IntervalId=b?a.application.IntervalId:null;break;case"custom":var g,h,i,j,k;g=a.application.t_from&&a.application.t_to&&!a.application.alwaysTime?moment(a.application.t_from).format("HH:mm")+"-"+moment(a.application.t_to).format("HH:mm"):"*",a.application.wd_from&&"always"!==a.application.wd_from?(h=a.application.wd_from,a.application.wd_to&&"always"!==a.application.wd_to&&(h+="-"+a.application.wd_to)):h="*",a.application.md_from&&"always"!==a.application.md_from?(i=a.application.md_from,a.application.md_to&&"always"!==a.application.md_to&&(i+="-"+a.application.md_to)):i="*",a.application.m_from&&"always"!==a.application.m_from?(j=a.application.m_from,a.application.m_to&&"always"!==a.application.m_to&&(j+="-"+a.application.m_to)):j="*",k=g+","+h+","+i+","+j,a.application.interval=k,a.application.IntervalId=null}return n.update({accountId:c.accountId,controller:"applications",id:c.actionId},a.application).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success"),e.path("/channels/mail/accounts/view/"+c.accountId+"/actions/list")})["catch"](function(a){f.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.mail.accounts.view.actions.view",{url:"/view/:actionId",templateUrl:"app/channels/mail/account/view/action/view/view.html",controller:"MailAccountViewActionViewCtrl"})}]),angular.module("xCallyShuttleApp").controller("MailAccountViewActionWizardCtrl",["$scope","$http","Agent","Template","MailQueue","MailAccount","Interval","$stateParams","$translate","$location","xAlert","WizardHandler","socket","application","interval","SmsAccount",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){a.isActive=!0,a.size="small",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.initWizard=function(){a.apps=[{name:"Queue",value:"queue"},{name:"Agent",value:"agent"},{name:"SendMail",value:"sendMail"},{name:"ReplyMail",value:"replyMail"},{name:"SendSMS",value:"sendSms"}],a.types=[{key:"APPLICATION_REPLY",value:"reply"},{key:"APPLICATION_REPLY_TO_ALL",value:"replyAll"}],a.$application=n.application,a.$stateParams=h,a.$interval=o.interval,a.forms={},a.application={alwaysTime:!0},a.$watch("application.t_from",function(b){a.application.t_from_hm=moment(b).format("HH:mm")}),a.$watch("application.t_to",function(b){a.application.t_to_hm=moment(b).format("HH:mm")})},a.getQueues=function(){return e.get().$promise.then(function(b){a.queues=b.rows})["catch"](function(a){console.error(a)})},a.getAgents=function(){return c.get().$promise.then(function(b){a.agents=b.rows})["catch"](function(a){console.error(a)})},a.getTemplates=function(){return d.get().$promise.then(function(b){a.templates=b.rows})["catch"](function(a){console.error(a)})},a.getSmsAccounts=function(){return p.get().$promise.then(function(b){a.smsAccounts=b.rows})["catch"](function(a){console.error(a)})},a.getMailAccounts=function(){return f.get().$promise.then(function(b){a.mailAccounts=b.rows})["catch"](function(a){console.error(a)})},a.getIntervals=function(){return g.get().$promise.then(function(b){a.intervals=b.rows})["catch"](function(a){console.error(a)})},a.createItem=function(){switch(a.application.intType){case"always":a.application.interval="*,*,*,*",a.application.IntervalId=null;break;case"list":var b=_.find(a.intervals,{id:a.application.IntervalId});a.application.interval=b?"":"*,*,*,*",a.application.IntervalId=b?a.application.IntervalId:null;break;case"custom":var c,d,e,g,i;c=a.application.t_from&&a.application.t_to&&!a.application.alwaysTime?moment(a.application.t_from).format("HH:mm")+"-"+moment(a.application.t_to).format("HH:mm"):"*",a.application.wd_from&&"always"!==a.application.wd_from?(d=a.application.wd_from,a.application.wd_to&&"always"!==a.application.wd_to&&(d+="-"+a.application.wd_to)):d="*",a.application.md_from&&"always"!==a.application.md_from?(e=a.application.md_from,a.application.md_to&&"always"!==a.application.md_to&&(e+="-"+a.application.md_to)):e="*",a.application.m_from&&"always"!==a.application.m_from?(g=a.application.m_from,a.application.m_to&&"always"!==a.application.m_to&&(g+="-"+a.application.m_to)):g="*",i=c+","+d+","+e+","+g,a.application.interval=i,a.application.IntervalId=null}return f.save({accountId:h.accountId,controller:"applications"},a.application).$promise.then(function(){j.path("/channels/mail/accounts/view/"+h.accountId+"/actions/list")})["catch"](function(a){console.error(a)})},a.formValidation=function(a){return a},a.next=function(){l.wizard().next()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.mail.accounts.view.actions.wizard",{url:"/wizard",templateUrl:"app/channels/mail/account/view/action/wizard/wizard.html",controller:"MailAccountViewActionWizardCtrl"})}]),angular.module("xCallyShuttleApp").factory("MailDisposition",["$resource",function(a){return a("/api/mail/dispositions/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("MailInboxViewModaDispositionAddCtrl",["$scope","$uibModalInstance","MailAccount","id","xAlert","$translate",function(a,b,c,d,e,f){a.ok=function(){return c.save({accountId:d,controller:"dispositions"},{name:a.name}).$promise.then(function(a){b.close(a)})["catch"](function(a){e.show(f.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("MailAccountDispositionViewCtrl",["$scope","$stateParams","$uibModal","$translate","MailAccount","xAlert",function(a,b,c,d,e,f){a.initView=function(){return e.get({accountId:b.accountId,controller:"dispositions"}).$promise.then(function(b){a.dispositions=b.rows})["catch"](function(a){console.error(a),f.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},a.updateDisposition=function(a,c){return e.update({accountId:b.accountId,controller:"dispositions",id:a},{name:c}).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE")+"!","success")})["catch"](function(a){console.error(a),f.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},a.deleteDisposition=function(c){return console.log("delete"),e.remove({accountId:b.accountId,controller:"dispositions",id:c}).$promise.then(function(){_.remove(a.dispositions,{id:c})})["catch"](function(a){console.error(a),f.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},a.addDisposition=function(){return c.open({animation:!0,templateUrl:"app/channels/mail/account/view/disposition/modal/add.modal.html",controller:"MailInboxViewModaDispositionAddCtrl",resolve:{id:function(){return b.accountId}}}).result.then(function(b){b&&a.dispositions.push(b)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.mail.accounts.view.dispositions",{url:"/dispositions",controller:"MailAccountDispositionViewCtrl",templateUrl:"app/channels/mail/account/view/disposition/view/view.html"})}]),angular.module("xCallyShuttleApp").controller("MailAccountHooksViewCtrl",["$scope","MailAccount","Pause","$http","$stateParams","clipboard","$translate","$location","xAlert","List",function(a,b,c,d,e,f,g,h,i,j){a.account={},a.isActive=!0,a.size="small",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.CONST_TIMEOUT=3e4,a.initView=function(){a.types=[{value:"",name:"-- None --"},{name:"HTTP GET",value:"GET"},{name:"HTTP POST",value:"POST"}],c.get().$promise.then(function(b){a.pauses=b.rows})["catch"](function(a){i.error(a)}),b.get({id:e.accountId}).$promise.then(function(b){a.account=b,a.account.actions.length<1&&a.account.actions.push({action:"pause",enabled:!1,type:null})})["catch"](function(a){i.error(a)})},a.resetActionData=function(a){a.type=null},a.updateItemMailAccount=function(){return console.log(a.account),b.update({id:e.accountId},a.account).$promise.then(function(){i.show(g.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){i.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.mail.accounts.view.hooks",{url:"/hooks",controller:"MailAccountHooksViewCtrl",templateUrl:"app/channels/mail/account/view/hooks/view/view.html"})}]),angular.module("xCallyShuttleApp").controller("MailAccountOtherViewCtrl",["$scope","$rootScope","$stateParams","$translate","xAlert","MailAccount",function(a,b,c,d,e,f){a.initView=function(){return a.options={language:b.language,allowedContent:!0,entities:!1,skin:"office2013",contentsCss:"/assets/css/global/richparams.css",extraPlugins:"autogrow",autoGrow_minHeight:450,disableNativeSpellChecker:!1,toolbar:[{name:"clipboard",items:["Cut","Copy","Paste","PasteText","PasteFromWord","-","Undo","Redo"]},{name:"links",items:["Link","Unlink","Anchor"]},{name:"insert",items:["Image","Table","HorizontalRule","SpecialChar"]},{name:"tools",items:["Maximize"]},{name:"document",items:["Source"]},"/",{name:"basicstyles",items:["Bold","Italic","Underline","Strike","Subscript","Superscript","-","RemoveFormat"]},{name:"paragraph",items:["NumberedList","BulletedList","-","Outdent","Indent","-","Blockquote"]},{name:"styles",items:["Styles","Format"]},"/",{name:"motion",items:["voice","chat","mail"]}]},f.get({id:c.accountId}).$promise.then(function(b){console.log(b),a.account=b})["catch"](function(a){e.error(a)})},a.updateItemMailAccount=function(){return f.update({id:c.accountId},{whiteLabel:a.account.whiteLabel,signature:a.account.signature}).$promise.then(function(){e.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){e.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.mail.accounts.view.other",{url:"/other",controller:"MailAccountOtherViewCtrl",templateUrl:"app/channels/mail/account/view/other/view/view.html"})}]),angular.module("xCallyShuttleApp").controller("MailAccountSettingViewCtrl",["$scope","$http","$stateParams","$translate","$location","$timeout","socket","xAlert","MailAccount","MailMessage","MailServerIn","MailServerOut","usSpinnerService","List","Template",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){a.imapDisabled=!1,a.smtpDisabled=!1,a.isActive=!0,a.size="small",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.CONST_TIMEOUT=3e4,a.$on("$destroy",function(){g.socket.removeAllListeners("mail_message:sent"),g.socket.removeAllListeners("mail_message:failed")}),a.initView=function(){return g.socket.on("mail_message:sent",function(){h.show(d.instant("MESSAGE_WELL_DONE"),"success"),m.stop("spinner-grid")}),g.socket.on("mail_message:failed",function(){h.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger"),m.stop("spinner-grid")}),n.get().$promise.then(function(b){a.lists=b.rows})["catch"](function(a){console.error(a)}),o.get().$promise.then(function(b){a.templates=b.rows})["catch"](function(a){console.error(a)}),i.get({id:c.accountId}).$promise.then(function(b){a.account=b,a.account.MailServerIn&&(a.account.MailServerIn.source=JSON.parse(a.account.MailServerIn.source),a.account.MailServerOut.source=JSON.parse(a.account.MailServerOut.source),g.socket.on("mail_server_in:state",function(b){if(b.id===a.account.MailServerIn.id)switch(a.account.MailServerIn.state=b.state,a.account.MailServerIn.source=JSON.parse(b.source),b.state){case"CONNECTING":break;default:m.stop("spinner-grid"),a.imapDisabled=!1}})),g.socket.on("mail_server_out:state",function(b){if(b.id===a.account.MailServerOut.id)switch(a.account.MailServerOut.state=b.state,a.account.MailServerOut.source=JSON.parse(b.source),b.state){case"CONNECTING":break;default:m.stop("spinner-grid"),a.smtpDisabled=!1}})})["catch"](function(a){h.error(a)})},a.updateItemMailAccount=function(){return i.update({id:c.accountId},{name:a.account.name,description:a.account.description,address:a.account.address,fidelity:a.account.fidelity,timeout:a.account.timeout,service:a.account.service,ListId:a.account.ListId,TemplateId:a.account.TemplateId}).$promise.then(function(){h.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){h.error(a)})},a.updateItemMailServerIn=function(){var b=angular.copy(a.account.MailServerIn);return delete b.source,m.spin("spinner-grid"),a.imapDisabled=!0,k.update({id:b.id},b).$promise.then(function(){h.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){h.error(a)})},a.updateItemMailServerOut=function(){var b=angular.copy(a.account.MailServerOut);return delete b.source,m.spin("spinner-grid"),a.smtpDisabled=!0,l.update({id:b.id},b).$promise.then(function(){h.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){h.error(a)})},a.test=function(){return m.spin("spinner-grid"),a.smtpDisabled=!0,l.update({id:a.account.MailServerOut.id},{state:"CONNECTING"}).$promise["catch"](function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.mail.accounts.view.settings",{url:"/settings",controller:"MailAccountSettingViewCtrl",templateUrl:"app/channels/mail/account/view/setting/view/view.html"})}]),angular.module("xCallyShuttleApp").controller("MailAccountViewCtrl",["$scope","$stateParams","MailAccount",function(a,b,c){a.initView=function(){return c.get({id:b.accountId}).$promise.then(function(b){a.account=b})["catch"](function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.mail.accounts.view",{url:"/view/:accountId",controller:"MailAccountViewCtrl",templateUrl:"app/channels/mail/account/view/view.html",resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]})}]}})}]),angular.module("xCallyShuttleApp").controller("MailAccountWizardCtrl",["$scope","$http","$location","$translate","WizardHandler","xAlert","MailAccount",function(a,b,c,d,e,f,g){a.isActive=!0,a.size="small",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.initWizard=function(){a.forms={},a.item={MailServerIn:{port:993,ssl:!0,"delete":!1,protocol:"IMAP",filter:"UNSEEN",mailbox:"INBOX",keepalive:!0,authTimeout:5,connTimeout:10},MailServerOut:{port:465,ssl:!0}}},a.goNext=function(){e.wizard().next()},a.formValidation=function(a){return a},a.createItem=function(){return g.save(a.item).$promise.then(function(){c.path("/channels/mail/accounts/list")})["catch"](function(a){f.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.mail.accounts.wizard",{url:"/wizard",templateUrl:"app/channels/mail/account/wizard/wizard.html",controller:"MailAccountWizardCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.mail.inbox",{url:"/inbox",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user","agent"],redirectTo:"landing",id:36}}})}]),angular.module("xCallyShuttleApp").controller("MailInboxInfoModalCtrl",["$scope","$translate","$uibModalInstance","$stateParams","xAlert","uniqueId","ReportSquare",function(a,b,c,d,e,f,g){a.data=null,a.initInfo=function(){g.get({controller:"show",uniqueid:f}).$promise.then(function(b){a.data={id:b.id,channel:b.channel,uniqueid:b.uniqueid,callerid:b.callerid,calleridname:b.calleridname,project_name:b.project_name,extension:b.extension}})["catch"](function(b){switch(b.status){case 404:a.data=null;break;default:e.error(b)}})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").directive("mailMessage",["$rootScope","$translate","MailMessage","List","xAlert","Lightbox","$uibModal",function(a,b,c,d,e,f,g){return{restrict:"E",scope:{message:"=",listId:"="},templateUrl:"app/channels/mail/inbox/message/message.directive.html",link:function(h){h.openPreview=function(a){f.openModal(["api/mail/attachments/"+a],0)},h.openContact=function(c){return h.listId?d.save({listId:h.listId,controller:"contacts"},{email:c}).$promise.then(function(b){var c=_.find(a.$root.workspaces,{contactID:b.id});c?c.active=!0:a.$root.workspaces.push({active:!0,"class":"icon-user",contactID:b.id,name:b.email,type:"contact"})})["catch"](function(a){console.error(a)}):void e.show(b.instant("MESSAGE_NO_LIST_CONFIGURED"),"info")},h.info=function(a){g.open({animation:!0,templateUrl:"app/channels/mail/inbox/message/info.modal.html",controller:"MailInboxInfoModalCtrl",resolve:{uniqueId:function(){return a}}})},h.retry=function(a){return c.update({id:a,status:"SENDING"}).$promise["catch"](function(a){console.error(a)})}}}}]),angular.module("xCallyShuttleApp").directive("mailNote",["$translate","Modal","Auth","MailMessage","xAlert",function(a,b,c,d,e){return{restrict:"E",scope:{message:"="},templateUrl:"app/channels/mail/inbox/note/note.directive.html",link:function(f){f.Auth=c,f.deleteNote=b.confirm["delete"](function(){return d.remove({id:f.message.id}).$promise.then(function(){e.show(a.instant("MESSAGE_WELL_DONE")+"!","success")})["catch"](function(a){e.error(a)})})}}}]),angular.module("xCallyShuttleApp").controller("MailInboxViewModalNoteCtrl",["$scope","$uibModalInstance","$translate","id","MailRoom","xAlert",function(a,b,c,d,e,f){a.initModal=function(){a.item={}},a.ok=function(){return e.save({id:d,controller:"messages",controller2:"send"},{text:a.item.text,status:"NOTE"}).$promise.then(function(){f.show(c.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(){f.show(c.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})["finally"](function(){b.close()})},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").directive("mailRoom",["$rootScope","$cookieStore","$translate","$uibModal","$timeout","Tag","CannedAnswer","MailAttachment","List","MailAccount","MailRoom","MailMessage","FileUploader","xAlert","usSpinnerService","socket","Auth",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){return{restrict:"E",scope:{workspace:"="},templateUrl:"app/channels/mail/inbox/room/room.directive.html",link:function(e){function r(a){var b="";return e.mailRoom.MailAccount.signature&&(b+="<br>"+e.mailRoom.MailAccount.signature),a?b+"<br><blockquote>"+a.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'").replace(/\n/g,"<br>")+"</blockquote>":void 0}e.onCKReady=function(a){e.ckEditorInstance=a},e.$on("$destroy",function(){console.log("mailRoom directive $destroy")});var s=[];e.user=q.getCurrentUser(),e.getContacts=function(a){return e.listId?i.get({listId:e.listId,controller:"contacts",email:a}).$promise.then(function(a){return a.rows})["catch"](function(a){console.error(a)}):[]},e.setList=function(a){e.listId=a},e.options={language:a.language,allowedContent:!0,entities:!1,skin:"office2013",extraPlugins:"autogrow",autoGrow_minHeight:600,autoGrow_maxHeight:600,disableNativeSpellChecker:!1,toolbar:[{name:"clipboard",items:["Cut","Copy","Paste","-","Undo","Redo"]},{name:"links",items:["Link","Unlink","Anchor"]},{name:"insert",items:["Image","Table","HorizontalRule","SpecialChar"]},{name:"tools",items:["Maximize"]},"/",{name:"basicstyles",items:["Bold","Italic","Underline","Strike","Subscript","Superscript","-","RemoveFormat"]},{name:"paragraph",items:["NumberedList","BulletedList","-","Outdent","Indent","-","Blockquote"]},{name:"styles",items:["Styles","Format"]}]},e.expanded=!0,e.modelOptions={debounce:{"default":500,blur:250},getterSetter:!0},e.panelLeft=null,e.panelRight="col-md-12",e.forms={},e.form={from:[],to:e.workspace.data&&e.workspace.data.to?[e.workspace.data.to]:[],cc:[],bcc:[],tags:[],html:"",disabled:!1},p.socket.on("mail_message:remove",function(a){_.remove(e.mailRoom.MailMessages,{id:a.id})}),p.socket.on("mail_message:save",function(a){return e.workspace.id&&a.MailRoomId==e.workspace.id?(e.workspace.active||e.workspace.unread++,l.get({id:a.id}).$promise.then(function(a){e.mailRoom||(e.mailRoom={MailMessages:[]});var b=_.findIndex(e.mailRoom.MailMessages,{id:a.id});b>-1?_.merge(e.mailRoom.MailMessages[b],a):e.mailRoom.MailMessages.unshift(a),e.panelLeft="col-md-6",e.panelRight="col-md-6"})["catch"](function(a){console.error(a)})):void 0});var t=e.uploader=new m({url:"api/mail/attachments",autoUpload:!0,withCredentials:!0,headers:{Authorization:"Bearer "+b.get("token")}});return t.onErrorItem=function(){n.show(c.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")},t.removeFromQueue=function(a){var b=this;return h["delete"]({id:a.basename}).$promise.then(function(){var c=b.getIndexOfItem(a),d=b.queue[c];d.isUploading&&d.cancel(),b.queue.splice(c,1),d._destroy(),b.progress=b._getTotalProgress(),s=_.reject(s,{basename:a.basename})})["catch"](function(){n.show(c.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},t.onSuccessItem=function(a,b){var c={size:b.size,path:b.path,name:b.name,basename:b.basename,type:b.type};a=_.merge(a,c),s.push(c)},e.openRoom=function(b){var c=_.find(a.workspaces,{id:b,type:"mailRoom"});c?c.active=!0:a.workspaces.push({id:b,type:"mailRoom","class":"icon-envelope",active:!0})},e.togglePanelLeft=function(){e.panelLeft?(e.panelLeft=null,e.panelRight="col-md-12"):(e.panelLeft="col-md-6",e.panelRight="col-md-6")},e.onSelectAnswer=function(){e.ckEditorInstance.insertHtml(e.modelOptions.selectedAnswer),delete e.modelOptions.selectedAnswer},e.getAnswers=function(a){return g.get({key:a}).$promise.then(function(a){return _.map(a.rows,"value")})},e.closeRoom=function(){return d.open({animation:!0,templateUrl:"app/channels/mail/inbox/status/status.modal.html",controller:"MailInboxStatusModalCtrl",resolve:{accountId:function(){return e.mailRoom.MailAccount.id}}}).result.then(function(a){return k.patch({id:e.workspace.id},a).$promise["catch"](function(a){n.error(a)})})},e.loadNote=function(){return d.open({animation:!0,templateUrl:"app/channels/mail/inbox/note/note.modal.html",controller:"MailInboxViewModalNoteCtrl",resolve:{id:function(){return e.workspace.id}}})},e.onChanged=function(){return k.update({id:e.workspace.id},{tags:e.form.tags}).$promise["catch"](function(a){console.error(a)})},e.sendMail=function(){o.spin("spinner-grid"),e.form.disabled=!0;var a={},b={subject:e.form.subject||(e.mailRoom?e.mailRoom.subject:null),from:e.form.from,to:_.map(e.form.to,"email"),cc:_.map(e.form.cc,"email"),bcc:_.map(e.form.bcc,"email"),html:e.form.html||null,text:e.form.text||null,inReplyTo:a.messageId||null,status:"SENDING",MailAttachments:s};return e.mailRoom?(a=_.last(e.mailRoom.MailMessages,{status:"RECEIVED"}),b.inReplyTo=a.messageId||null,k.save({id:e.workspace.id,controller:"messages",controller2:"send"},b).$promise.then(function(){e.form.html="",t.queue=[],s=[],n.show(c.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(){n.show(c.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})["finally"](function(){o.stop("spinner-grid"),e.form.disabled=!1})):l.save(b).$promise.then(function(a){n.show(c.instant("MESSAGE_MAIL_MESSAGE_SEND_SUCCESS"),"success"),e.form.html="",t.queue=[],s=[],e.workspace.id=a.id,e.workspace.name=a.subject,e.mailRoom=a,e.expanded=!1})["catch"](function(){n.show(c.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})["finally"](function(){o.stop("spinner-grid"),e.form.disabled=!1})},f.get().$promise.then(function(a){e.tags=_.map(a.rows,"name")})["catch"](function(a){console.error(a)}),j.get().$promise.then(function(a){e.mailAccounts=a.rows})["catch"](function(a){console.error(a)}),e.workspace.id?(e.panelLeft="col-md-6",e.panelRight="col-md-6",k.get({id:e.workspace.id}).$promise.then(function(a){e.mailRoom=a,e.expanded=!1,e.listId=a.MailAccount.ListId,e.workspace.name=a.subject||"No subject",e.form.from.push(a.MailAccount.address),e.form.tags=a.tags;var b=_.findLast(e.mailRoom.MailMessages,{status:"RECEIVED"});return b&&(e.form.to=_.map(_.union(b.from,b.to),function(a){return{email:a}}),e.form.to=_.remove(e.form.to,function(b){return b.email!==a.MailAccount.address}),e.form.cc=_.map(b.cc,function(a){return{email:a}}),e.form.bcc=_.map(b.bcc,function(a){return{email:a}}),e.form.subject="Re: "+(b.subject||"No subject"),e.form.html=r(b.text)),p.socket.on("mail_room:save",function(a){a.id===e.workspace.id&&_.merge(e.mailRoom,a)}),a})["catch"](function(a){console.error(a)})["finally"](function(){o.stop("spinner-grid"),e.form.disabled=!1})):(e.panelLeft=null,e.panelRight="col-md-12",o.stop("spinner-grid"),void 0)}}}]),angular.module("xCallyShuttleApp").controller("MailInboxStatusModalCtrl",["$scope","$uibModalInstance","MailAccount","accountId",function(a,b,c,d){a.modal={title:"APPLICATION_CONFIRM_CLOSE",text:"MESSAGE_ARE_YOU_SURE_YOU_WANT_TO_CLOSE_THE_MAIL"},a.initDisposition=function(){return a.item={disposition:null,status:"CLOSED"},c.get({accountId:d,controller:"dispositions"}).$promise.then(function(b){a.dispositions=b.rows})["catch"](function(a){console.error(a)})},a.ok=function(){b.close(a.item)},a.cancel=function(){b.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.mail.inbox.view.account",{url:"/account/:id",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user","agent"],redirectTo:"landing",id:9}}})}]),angular.module("xCallyShuttleApp").controller("MailInboxViewAccountListCtrl",["$scope","$rootScope","$uibModal","$translate","$stateParams","$state","Tag","uibButtonConfig","usSpinnerService","socket","MailAccount","MailRoom","uiGridConstants","Auth","Modal","xAlert","localStorageService",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){a.openRoom=function(b,c){var d=_.find(a.workspaces,{id:b,type:"mailRoom"});return d&&b?d.active=!0:a.workspaces.push({id:b,subject:c,type:"mailRoom","class":"icon-envelope",active:!0}),b&&"agent"===n.getCurrentUser().role&&"PENDING"!==a.query.status&&"CLOSED"!==a.query.status?l.patch({id:b},{status:"OPEN",openReason:"agent"}).$promise["catch"](function(a){console.error(a)}):void 0},a.getPage=function(){i.spin("spinner-grid");var b={accountId:e.id,controller:"rooms"};return a.query&&_.merge(b,a.query),k.query(b).$promise.then(function(b){q.set("mailAccountId",e.id),a.gridOptions.data=b,j.socket.on("mail_room:save",function(b){if(b.MailAccountId==e.id){var c=_.find(a.gridOptions.data,{id:b.id});c?c.status!==b.status?_.remove(a.gridOptions.data,{id:b.id}):_.merge(c,b):a.query.status===b.status&&a.gridOptions.data.push(b)}}),j.socket.on("mail_room:remove",function(b){_.remove(a.gridOptions.data,{id:b.id})})})["catch"](function(a){console.error(a)})["finally"](function(){i.stop("spinner-grid")})},a.initView=function(){h.activeClass="green-haze",a.id=[],a.isAdmin=n.isAdmin(), +a.isAgent=n.isAgent(),a.uncheckable=!1,a.query={status:q.get("mailStatus")?q.get("mailStatus"):"NEW",tags:q.get("mailTags")?q.get("mailTags"):[]},a.$watch("query.status",function(){q.set("mailStatus",a.query.status),a.getPage()},!0),k.get().$promise.then(function(b){a.mailAccounts=b.rows})["catch"](function(a){console.error(a)}),g.get().$promise.then(function(b){a.tags=_.map(b.rows,"name")})["catch"](function(a){console.error(a)}),a.gridOptions={exporterCsvFilename:"mail_rooms.csv",enableRowHeaderSelection:!0,paginationPageSizes:[10,25,50,75],paginationPageSize:10,enableFiltering:!0,enableSorting:!0,enableGridMenu:!1,flatEntityAccess:!0,showGridFooter:!0,fastWatch:!0,enableSelectAll:!0,enableHorizontalScrollbar:0,enableVerticalScrollbar:0,columnDefs:[{name:"lastEvent",displayName:"",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div> <span data-ng-class=\"{'icon-arrow-up font-green': row.entity.lastEvent === 'SENT', 'icon-arrow-up font-yellow': row.entity.lastEvent === 'SENDING', 'icon-arrow-down font-green': row.entity.lastEvent === 'RECEIVED', 'icon-close font-red': row.entity.lastEvent === 'FAILED', 'icon-question': !row.entity.lastEvent}\"> </span> </div>",width:30,enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1},{name:"attachment",displayName:"",headerCellTemplate:'<i class="icon-paper-clip" style="margin-top: 8px; margin-left: 8px;"></i>',cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div><i data-ng-class=\"row.entity.attachment ? 'icon-paper-clip' : ''\"></i></div>",width:30,enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1},{name:"tags",displayName:"",headerCellTemplate:'<i class="icon-tag" style="margin-top: 8px; margin-left: 8px;"></i>',cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div><i data-ng-class=\"row.entity.tags.length ? 'icon-tag' : ''\" title=\"{{row.entity.tags}}\"></i></div>",width:30,enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1},{name:"id",displayName:"Id",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div><span>#{{row.entity.id}}</span></div>",width:75,enableSorting:!0,enableFiltering:!0,enableColumnMenu:!1},{name:"subject"},{name:"from",cellClass:"text-center"},{name:"disposition",displayName:"APPLICATION_DISPOSITION",headerCellFilter:"translate"},{name:"updatedAt",cellFilter:"date:'dd/MM/yyyy HH:mm'",width:120,enableSorting:!1,enableFiltering:!1,sort:{direction:m.DESC}},{name:"action",cellTemplate:'<div> <a class="btn btn-icon-only" data-ng-disabled="row.entity.waiting" data-ng-class="row.entity.waiting ? \'font-blue\' : \'font-green\'" data-ng-click="grid.appScope.openRoom(row.entity.id, row.entity.subject)"><i class="fa" data-ng-class="row.entity.waiting ? \'fa-repeat\' : \'fa-envelope\' " aria-hidden="true"></i></a> <a class="btn btn-icon-only font-red" data-ng-disabled="row.entity.waiting" data-ng-show="grid.appScope.isAdmin" data-ng-click="grid.appScope.deleteItem(row.entity.id, row.entity.id)"><i class="fa fa-trash" aria-hidden="true"></i></a> </div>',enableSorting:!1,cellClass:"ui-grid-vcenter",width:70,enableFiltering:!1,enableColumnMenu:!1}],data:[],onRegisterApi:function(b){a.gridApi=b,a.gridApi.selection&&(a.gridApi.selection.on.rowSelectionChanged(a,function(b){b.isSelected?a.id.push(a.gridApi.grid.options.primaryKey?b.entity[a.gridApi.grid.options.primaryKey]:b.entity.id):_.pull(a.id,a.gridApi.grid.options.primaryKey?b.entity[a.gridApi.grid.options.primaryKey]:b.entity.id)}),a.gridApi.selection.on.rowSelectionChangedBatch(a,function(b){b[0].isSelected?a.id=_.union(a.id,_.map(b,a.gridApi.grid.options.primaryKey?"entity."+a.gridApi.grid.options.primaryKey:"entity.id")):_.map(b,a.gridApi.grid.options.primaryKey?"entity."+a.gridApi.grid.options.primaryKey:"entity.id").forEach(function(b){_.pull(a.id,b)})}))}},a.getPage(a.query)},a.onChanged=function(){q.set("mailTags",a.query.tags),a.getPage(a.query)},a.tagItems=function(){return c.open({animation:!0,templateUrl:"app/channels/mail/inbox/view/view.tags.modal.html",controller:"MailInboxViewModalTagCtrl",resolve:{id:function(){return a.id}}}).result.then(function(){a.gridApi.selection.clearSelectedRows(),a.id=[]})},a.disposeItems=function(){return c.open({animation:!0,templateUrl:"app/channels/mail/inbox/status/status.modal.html",controller:"MailInboxStatusModalCtrl",resolve:{status:function(){return null},accountId:function(){return e.id}}}).result.then(function(b){return l.patch({id:a.id},b).$promise.then(function(){a.gridApi.selection.clearSelectedRows(),a.id=[]})["catch"](function(a){p.error(a)})})},a.deleteItem=o.confirm["delete"](function(b){var c={id:b};return l.remove(c).$promise.then(function(){a.getPage(),p.show(d.instant("MESSAGE_WELL_DONE")+"!","success"),a.gridApi.selection.clearSelectedRows(),a.id=[]})["catch"](function(a){p.error(a)})}),a.deleteItems=o.confirm["delete"](function(){var b={ids:a.id};return l["delete"](b).$promise.then(function(){a.getPage(),p.show(d.instant("MESSAGE_WELL_DONE")+"!","success"),a.gridApi.selection.clearSelectedRows(),a.id=[]})["catch"](function(a){p.error(a)})})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.mail.inbox.view.account.list",{url:"/list",templateUrl:"app/channels/mail/inbox/view/account/list/list.html",controller:"MailInboxViewAccountListCtrl",data:{permissions:{only:["admin","user","agent"],redirectTo:"landing",id:9}}})}]),angular.module("xCallyShuttleApp").controller("MailInboxViewModalAgentCtrl",["$scope","$uibModalInstance","$translate","$stateParams","Agent","Auth","MailRoom","xAlert","roomId",function(a,b,c,d,e,f,g,h,i){var j=[];a.initModal=function(){return a.agents=[],a.item={agents:[]},e.get().$promise.then(function(b){for(var c=0;c<b.rows.length;c++)a.agents.push(b.rows[c]);return g.query({id:i,controller:"agents"}).$promise}).then(function(b){for(var c=0;c<b.length;c++)f.isAgent()||a.item.agents.push(b[c]),j.push(b[c].id)})["catch"](function(a){console.error(a)})},a.ok=function(){return j=f.isAgent()?_.union(j,a.item.agents):angular.copy(a.item.agents),g.update({id:i,controller:"agents",agents:j}).$promise.then(function(){h.show(c.instant("MESSAGE_WELL_DONE"),"success"),b.close()})["catch"](function(a){console.error(a)})},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("MailInboxViewCtrl",["$scope","$timeout","$location","localStorageService","MailAccount",function(a,b,c,d,e){a.initView=function(){return e.get().$promise.then(function(b){var e=null;a.mailAccounts=b.rows,a.mailAccounts.length&&(e="/channels/mail/inbox/view/account/"+(d.get("mailAccountId")||a.mailAccounts[0].id)+"/list"),e&&c.path(e)})["catch"](function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.mail.inbox.view",{url:"/view",templateUrl:"app/channels/mail/inbox/view/view.html",controller:"MailInboxViewCtrl",reload:!0,resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/inbox.css"]}])}]}})}]),angular.module("xCallyShuttleApp").controller("MailInboxViewModalTagCtrl",["$scope","$uibModalInstance","$translate","$stateParams","Tag","MailRoom","xAlert","id",function(a,b,c,d,e,f,g,h){a.initModal=function(){return a.tags=[],a.item={tags:[]},a.modal={dismissable:!0,title:"APPLICATION_MESSAGE_SEND_RETRY",text:"MESSAGE_MESSAGE_SEND_RETRY",buttons:[{"class":"btn-success",text:"APPLICATION_TAG",click:function(){var d={status:!0};return f.patch({id:h},{tags:a.item.tags}).$promise["catch"](function(){d.status=!1,g.show(c.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})["finally"](function(){b.close(d)})}},{"class":"default",text:"APPLICATION_CANCEL",click:function(a){b.dismiss(a)}}]},e.get().$promise.then(function(b){a.tags=_.map(b.rows,"name")})["catch"](function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").controller("MailInboxViewModalTemplateCtrl",["$scope","$uibModalInstance","Template",function(a,b,c){a.initModal=function(){return a.item={},c.get().$promise.then(function(b){a.templates=b.rows})["catch"](function(a){console.error(a)})},a.ok=function(){b.close(a.item)},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.mail",{url:"/mail",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user","agent"],redirectTo:"landing",id:9}}})}]),angular.module("xCallyShuttleApp").factory("MailReport",["$resource",function(a){return a("/api/report/mails/:id/:controller1/:controller2",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("MailRoom",["$resource",function(a){return a("/api/mail/rooms/:id/:controller/:controller2",{id:"@id",controller:"@controller"},{update:{method:"PUT"},patch:{method:"PATCH"}})}]),angular.module("xCallyShuttleApp").factory("MailAttachment",["$resource",function(a){return a("/api/mail/attachments/:id/:controller",{id:"@id"})}]),angular.module("xCallyShuttleApp").factory("MailMessage",["$resource",function(a){return a("/api/mail/messages/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("MailQueueListCtrl",["$scope","MailQueue","gridOptions","$uibModal","Auth",function(a,b,c,d,e){a.initView=function(){a.Auth=e;var d={exporterCsvFilename:"voice_queues.csv",columnDefs:[{name:"name"},{name:"description"},{name:"timeout"},{name:"strategy"},{name:"action",width:100,buttons:[{"class":"blue-hoki",href:"/channels/mail/queues/view/{{row.entity.id}}/settings",name:"settings"},{"class":"green-meadow",href:"/channels/mail/queues/view/{{row.entity.id}}/agents",name:"agents",hide:"user"===e.getCurrentUser().role},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=c.gridOptions(b,d,a)},a.createItem=function(){var b=d.open({animation:!0,templateUrl:"app/channels/mail/queue/list/list.create.modal.html",controller:"MailQueueListCreateCtrl",size:"lg"});b.result.then(function(){a.gridOptions.getPage()})}}]),angular.module("xCallyShuttleApp").controller("MailQueueListCreateCtrl",["$scope","$uibModalInstance","$translate","xAlert","MailQueue","Team","strategies",function(a,b,c,d,e,f,g){a.form={},a.strategies=g,a.item={penalty:0,agents:[]},a.getTeams=function(){return f.get({controller:"associations"}).$promise.then(function(b){a.teams=b.rows}).then(function(){ComponentsDropdowns.bindQueue(a.teams,[],function(){return{select:function(b){a.item.agents=_.union(a.item.agents,b)},deselect:function(b){a.item.agents=_.difference(a.item.agents,b)}}})})["catch"](function(a){console.error(a)})},a.save=function(){return e.save(a.item).$promise.then(function(a){b.close(a)})["catch"](function(a){d.error(a)})},a.cancel=function(){b.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.mail.queues.list",{url:"/list",templateUrl:"app/channels/mail/queue/list/list.html",controller:"MailQueueListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/jquery-multi-select/css/multi-select.css","assets/plugins/jquery-multi-select/js/jquery.multi-select.js","assets/plugins/jquery-quicksearch/jquery.quicksearch.js","assets/scripts/components-dropdowns.js"]})}]}})}]),angular.module("xCallyShuttleApp").factory("MailQueue",["$resource",function(a){return a("/api/mail/queues/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.mail.queues",{url:"/queues",template:"<div ui-view></div>","abstract":!0,resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/jquery-multi-select/css/multi-select.css","assets/plugins/jquery-multi-select/js/jquery.multi-select.js","assets/scripts/components-dropdowns.js"]})}]},data:{permissions:{only:["admin","user"],redirectTo:"landing",id:35}}})}]),angular.module("xCallyShuttleApp").controller("MailQueueViewCtrl",["$scope","$http","$translate","$stateParams","xAlert","Team","MailQueue","Auth","strategies",function(a,b,c,d,e,f,g,h,i){a.Auth=h,a.strategies=i;var j=function(){return{select:function(b){return g.save({id:a.queue.id,controller:"agents"},{agents:b,penalty:a.queue.penalty}).$promise.then(function(){a.getTeams()})["catch"](function(a){console.error(a)})},deselect:function(b){return g["delete"]({id:a.queue.id,controller:"agents",agents:b}).$promise.then(function(){a.getTeams()})["catch"](function(a){console.error(a)})}}};a.getQueue=function(){return g.get({id:d.id}).$promise.then(function(b){b.penalty=0,a.queue=b})["catch"](function(a){console.error(a)})},a.updateMailQueue=function(){return g.update({id:d.id},{name:a.queue.name,description:a.queue.description,timeout:a.queue.timeout,strategy:a.queue.strategy}).$promise.then(function(){e.show(c.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){e.error(a)})},a.getTeams=function(){return f.get({controller:"associations"}).$promise.then(function(b){return a.teams=b.rows,g.get({id:d.id,controller:"agents"}).$promise}).then(function(b){ComponentsDropdowns.bindMailQueue(a.teams,_.map(b.rows,function(a){return{id:a.id,penalty:a.UserHasMailQueue.penalty}}),j)})["catch"](function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.mail.queues.view",{url:"/view/:id",templateUrl:"app/channels/mail/queue/view/view.html",controller:"MailQueueViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.channels.mail.queues.view.settings",{url:"/settings",templateUrl:"app/channels/mail/queue/view/view.settings.html"}).state("main.channels.mail.queues.view.agents",{url:"/agents",templateUrl:"app/channels/mail/queue/view/view.agents.html",cache:!1,serie:!0,resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/jquery-multi-select/css/multi-select.css","assets/plugins/jquery-multi-select/js/jquery.multi-select.js","assets/plugins/jquery-quicksearch/jquery.quicksearch.js","assets/scripts/components-dropdowns.js"]})}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.mail.realtime",{url:"/realtime",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:37}}})}]),angular.module("xCallyShuttleApp").controller("MailRealtimeViewAgentCtrl",["$scope","$log","$uibModal","$translate","socket","xAlert","Agent","Pause","Action","MailQueue","usSpinnerService","$q","uiGridConstants","Auth",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n){function o(){return k.spin("grid-spinner"),g.get(t).$promise.then(function(b){a.gridOptions.totalItems=b.count,a.gridOptions.data=[],b.rows.forEach(function(a){q(a)})})["catch"](function(a){f.error(a)})["finally"](function(){k.stop("grid-spinner")})}function p(){e.socket.on("agent:save",function(b){b=b.newValues||b;var c=_.find(a.gridOptions.data,{agentId:b.id,isAgent:!0});c&&(c.online=_.has(b,"online")?b.online:c.online,c.lastLoginAt=_.has(b,"lastLoginAt")?b.lastLoginAt:c.lastLoginAt,c.pause=_.has(b,"smsPause")?b.mailPause:c.mailPause,c.pauseType=_.has(b,"pauseType")?b.pauseType:c.pauseType,c.lastPauseAt=_.has(b,"lastPauseAt")?b.lastPauseAt:c.lastPauseAt,c.ipaddr=_.has(b,"ipaddr")?b.ipaddr:c.ipaddr,c.port=_.has(b,"port")?b.port:c.port,c.fullcontact=_.has(b,"fullcontact")?b.fullcontact:c.fullcontact,c.useragent=_.has(b,"useragent")?b.useragent:c.useragent,c.lastms=_.has(b,"lastms")?b.lastms:c.lastms,c.internal=_.has(b,"internal")?b.internal:c.internal,_.map(a.gridOptions.data,function(a){a.isAgent||a.agentId!==b.id||(a.online=_.has(b,"online")?b.online:a.online)}))}),e.socket.on("agent:remove",function(b){_.remove(a.gridOptions.data,{agentId:b.id})}),e.socket.on("user_has_mail_queue:save",function(b){var c=_.includes(_.map(a.CurrentUser.PMailQueues,"id"),b.MailQueueId)||n.isAdmin();if(c){var d=_.find(a.gridOptions.data,{agentId:b.UserId,isAgent:!0});if(d){var e=a.gridOptions.data.indexOf(d);a.gridOptions.data.splice(e+1,0,{isAgent:!1,agentId:b.UserId,queue:b.queue,queueId:b.MailQueueId,agent:b.membername,online:d.online})}}}),e.socket.on("user_has_mail_queue:remove",function(b){_.remove(a.gridOptions.data,{agentId:b.UserId,queueId:b.MailQueueId})})}function q(b){a.gridOptions.data.push({isAgent:!0,agentId:b.id,agent:b.name,online:b.online,lastLoginAt:b.lastLoginAt,lastPauseAt:b.lastPauseAt,pause:b.mailPause,pauseType:b.pauseType,ipaddr:b.ipaddr,port:b.port,fullcontact:b.fullcontact,useragent:b.useragent,lastms:b.lastms,internal:b.internal,$$treeLevel:0}),b.MailQueues.forEach(function(c){a.gridOptions.data.push({isAgent:!1,agentId:b.id,queue:c.name,queueId:c.id,agent:b.name,online:b.online})})}function r(){return h.get().$promise.then(function(b){a.pauses=b.rows,e.syncUpdates("pause",a.pauses)})["catch"](function(a){f.error(a)})}function s(){return j.get().$promise.then(function(b){a.mailQueues=b.rows,e.syncUpdates("mail_queue",a.mailQueues)})["catch"](function(a){f.error(a)})}a.mailQueues=[];var t={controller:"realtime",controller1:"mail",offset:0,limit:10};a.moment=moment,a.initAgents=function(){a.gridOptions={enableGridMenu:!0,headerCellFilter:"translate",enableHorizontalScrollbar:0,enableVerticalScrollbar:0,enableFiltering:!0,showGridFooter:!0,paginationPageSizes:[10,25,50,75],paginationPageSize:10,useExternalPagination:!0,useExternalSorting:!0,useExternalFiltering:!0,multiSelect:!0,showTreeExpandNoChildren:!0,columnDefs:[{name:"name",displayName:"APPLICATION_AGENT",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div data-ng-if="row.entity.isAgent">{{row.entity.agent}} <{{row.entity.internal}}></div>'},{name:"online",displayName:"APPLICATION_ONLINE",width:150,headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div data-ng-if="row.entity.online != null && row.entity.isAgent"><i class="fa" data-ng-class="{\'font-green\':row.entity.online, \'font-red\':!row.entity.online,\'fa-user\':row.entity.online,\'fa-user-times\':!row.entity.online}"></i> <span data-ng-if="row.entity.online" class="left-margin">(<css-timer start-time="row.entity.lastLoginAt"></css-timer>)</span></div>',filter:{type:m.filter.SELECT,selectOptions:[{value:"true",label:"ONLINE"},{value:"false",label:"OFFLINE"}]}},{name:"mailPause",displayName:"APPLICATION_PAUSE",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div data-ng-if="row.entity.pause != null && row.entity.online" class="ui-grid-vcenter" data-ng-class="{\'paused-agent\':row.entity.pause}"><i data-ng-if="row.entity.pause" data-ng-click="grid.appScope.pause(row.entity.agentId,\'unpause\')" class="fa fa-play font-green pointer-cursor left-margin" title="{{\'APPLICATION_RESUME\' | translate}}"></i><i class="fa fa-pause font-yellow pointer-cursor" data-ng-click="grid.appScope.pause(row.entity.agentId,\'pause\',\'DEFAULT PAUSE\')" title="{{\'APPLICATION_DEFAULT_PAUSE\' | translate}}"></i><select data-ng-if="grid.appScope.pauses.length" class="pause-select pointer-cursor" data-ng-model="grid.appScope.pauseType" data-ng-change="grid.appScope.pause(row.entity.agentId,\'pause\',grid.appScope.pauseType)"><option class="pointer-cursor" data-ng-repeat="pause in grid.appScope.pauses">{{pause.name}}</option></select> <span data-ng-if="row.entity.pause">({{row.entity.pauseType}})</span><span class="left-margin"><css-timer data-ng-if="row.entity.pause" start-time="row.entity.lastPauseAt"></css-timer></span></div>',filter:{type:m.filter.SELECT,selectOptions:[{value:"true",label:"PAUSED"},{value:"false",label:"NOT PAUSED"}]},enableSorting:!1,enableColumnMenu:!1},{name:"queue",displayName:"APPLICATION_QUEUE",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1},{name:"action",displayName:"",width:170,cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div><button data-ng-if="row.entity.queueId" class="btn btn-xs red-sunglo" data-ng-click="grid.appScope.leaveQueue(row.entity.agentId,row.entity.queueId)"><i class="icon-ban"></i> {{\'APPLICATION_LEAVE\' | translate}}</button><button data-ng-if="row.entity.isAgent && row.treeNode.children.length < grid.appScope.mailQueues.length" class="btn btn-xs blue-hoki" data-ng-click="grid.appScope.joinQueue(row.entity.agentId)"><i class="icon-plus"></i> {{\'APPLICATION_JOIN_QUEUE\' | translate}}</button><div>',enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1}],data:[],gridMenuTitleFilter:function(a){var b=l.defer();return b.resolve(d.instant(a)),b.promise},onRegisterApi:function(b){a.gridApi=b,a.gridApi.grid.registerDataChangeCallback(function(){u(a.gridApi.core.getVisibleRows(a.gridApi.grid).length)}),a.gridApi.treeBase.on.rowExpanded(a,function(b){u(a.gridApi.core.getVisibleRows(a.gridApi.grid).length+b.treeNode.children.length)}),a.gridApi.treeBase.on.rowCollapsed(a,function(b){u(a.gridApi.core.getVisibleRows(a.gridApi.grid).length-b.treeNode.children.length)}),a.gridApi.core.on.sortChanged(a,function(a,b){0===b.length?t.order=null:t.order=b[0].name+" "+b[0].sort.direction.toUpperCase(),o()}),a.gridApi.pagination.on.paginationChanged(a,function(a,b){t.offset=(a-1)*b,t.limit=b,o()}),a.gridApi.core.on.filterChanged(a,function(){var a=this.grid;a.columns.forEach(function(a){a.filters[0].term?t[a.name]=a.filters[0].term:delete t[a.name]}),o()})}},o(),r(),s(),$timeout(function(){p()})};var u=function(a){var b=a?30*a+130:270;angular.element(document.getElementsByClassName("ui-grid")[0]).css("height",b+"px"),angular.element(document.getElementsByClassName("ui-grid-viewport")).css("height",30*a+"px")};a.$on("$destroy",function(){e.unsyncUpdates("agent"),e.unsyncUpdates("user_has_mail_queue")}),a.pause=function(b,c,e){return e&&(a.pauseType=null),i.save({name:c,agent:b,type:e||"DEFAULT PAUSE",data4:e||"DEFAULT PAUSE",channel:"mail"}).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){f.error(a)})},a.joinQueue=function(e){var g=c.open({animation:!0,templateUrl:"app/channels/mail/realtime/view/agent/queue.modal.add.html",controller:"MailRealtimeViewAgentQueueModalCtrl",resolve:{queues:function(){return _.reject(a.mailQueues,function(b){return!!_.find(a.gridOptions.data,{queue:b.name,isAgent:!1,agentId:e})})}}});g.result.then(function(b){return i.save({name:"QueueAdd",agent:e,queues:_.filter(a.mailQueues,function(a){return _.includes(b.queues,a.id)}),channel:"mail",data1:e,data3:b.queues.join(","),data4:"mail"}).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){f.error(a)})},function(){b.info("Modal dismissed at: "+new Date)})},a.leaveQueue=function(a,b){return i.save({name:"QueueRemove",agent:a,queueId:b,channel:"mail",data1:a,data3:b,data4:"mail"}).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){f.error(a)})},a.showInfo=function(a){c.open({animation:!0,templateUrl:"app/channels/mail/realtime/view/agent/agent.modal.info.html",controller:"MailRealtimeViewAgentInfoModalCtrl",resolve:{agent:a}})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.mail.realtime.view.agents",{url:"/agents",templateUrl:"app/channels/mail/realtime/view/agent/agent.html",controller:"MailRealtimeViewAgentCtrl"})}]),angular.module("xCallyShuttleApp").controller("MailRealtimeViewAgentInfoModalCtrl",["$scope","$uibModalInstance","$http","agent",function(a,b,c,d){a.agent=d,a.close=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("MailRealtimeViewAgentQueueModalCtrl",["$scope","$uibModalInstance","$http","queues",function(a,b,c,d){a.queues=d,a.item={},a.save=function(){b.close(a.item)},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("MailRealtimeViewApplicationCtrl",["$scope","$log","$uibModal","$translate","socket","xAlert","ReportMailSession","usSpinnerService","$q","uiGridConstants","$timeout",function(a,b,c,d,e,f,g,h,i,j,k){function l(){return h.spin("spinner-grid"),g.get({controller:"waiting",controller2:"applications"}).$promise.then(function(b){a.gridOptions.data=b.rows})["catch"](function(a){f.error(a)})["finally"](function(){m(),h.stop("spinner-grid")})}function m(){e.socket.on("report_mail_session:save",function(b){var c=_.find(a.gridOptions.data,{id:b.id});c?(_.merge(c,b),b.leaveAt&&k(function(){_.remove(a.gridOptions.data,{id:b.id})},1e4)):b.leaveAt||a.gridOptions.data.push(b)}),e.socket.on("report_mail_session:remove",function(b){_.remove(a.gridOptions.data,{id:b.id})})}a.moment=moment,a.initApplications=function(){a.gridOptions={headerCellFilter:"translate",enableHorizontalScrollbar:0,enableVerticalScrollbar:0,enableFiltering:!0,columnDefs:[{name:"uniqueid",displayName:"APPLICATION_UNIQUEID",headerCellFilter:"translate"},{name:"application",displayName:"APPLICATION_APPLICATION",headerCellFilter:"translate"},{name:"status",displayName:"APPLICATION_STATUS",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div><span data-ng-if="!row.entity.leaveAt">{{\'APPLICATION_QUEUESTATUS_WAITING\' | translate}}</span><span data-ng-if="row.entity.leaveAt && row.entity.complete">{{\'APPLICATION_QUEUESTATUS_COMPLETE\' | translate}}</span><span data-ng-if="row.entity.leaveAt && row.entity.timeout">{{\'APPLICATION_TIMEOUT\' | translate}}</span> <span data-ng-if="!row.entity.leaveAt">[<css-timer start-time="row.entity.updatedAt"></css-timer>]</span></div>',enableSorting:!1,enableColumnMenu:!1,enableFiltering:!1},{name:"membername",displayName:"APPLICATION_AGENT",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{row.entity.membername || ''}}</span></div>"},{name:"queuename",displayName:"APPLICATION_QUEUE",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{row.entity.queuename || ''}}</span></div>"}],data:[],gridMenuTitleFilter:function(a){var b=i.defer();return b.resolve(d.instant(a)),b.promise},onRegisterApi:function(b){a.gridApi=b,a.gridApi.grid.registerDataChangeCallback(function(){n(a.gridOptions.data.length)})}},l()};var n=function(a){var b=a?30*a+60:270;angular.element(document.getElementsByClassName("ui-grid")[0]).css("height",b+"px"),angular.element(document.getElementsByClassName("ui-grid-viewport")).css("height",30*a+"px")};a.$on("$destroy",function(){e.unsyncUpdates("report_mail_session")})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.mail.realtime.view.applications",{url:"/applications",templateUrl:"app/channels/mail/realtime/view/application/application.html",controller:"MailRealtimeViewApplicationCtrl"})}]),angular.module("xCallyShuttleApp").controller("MailRealtimeViewCtrl",["$scope","$state",function(a,b){a.agents=[{name:"Queues",link:"main.channels.mail.realtime.view.agents.queues"},{name:"Timeline",link:"main.channels.mail.realtime.view.agents.timeline"}],a.sessions=[{name:"Sessions",link:"main.channels.mail.realtime.view.sessions"}],a.tree={queues:[{name:"Queues",link:"main.channels.mail.realtime.view.agents.queues"},{name:"Timeline",link:"main.channels.mail.realtime.view.agents.timeline"}],sessions:[{name:"Sessions",link:"main.channels.mail.realtime.view.sessions"}]}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.mail.realtime.view",{url:"/view",templateUrl:"app/channels/mail/realtime/view/view.html",controller:"MailRealtimeViewCtrl"})}]),angular.module("xCallyShuttleApp").factory("ReportMailSession",["$resource",function(a){return a("/api/report/mail/sessions/:id/:controller/:controller2",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("OpenChannelAccount",["$resource",function(a){return a("/api/openchannel/accounts/:accountId/:controller/:id",{id:"@accountId"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.openchannel.accounts",{url:"/accounts",template:"<div ui-view></div>",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:46}}})}]),angular.module("xCallyShuttleApp").controller("OpenChannelAccountListCtrl",["$scope","OpenChannelAccount","gridOptions","$stateParams","xAlert","$translate",function(a,b,c,d,e,f){a.initView=function(){var e={exporterCsvFilename:"openchannel_accounts.csv",columnDefs:[{name:"id",displayName:"ID",cellClass:"text-center",width:75,enableSorting:!1,enableFiltering:!1},{name:"name"},{name:"description"},{name:"action",width:75,buttons:[{"class":"blue-hoki",href:"/channels/openchannel/accounts/view/{{row.entity.id}}/settings",name:"profile"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=c.gridOptions(b,e,a,{accountId:d.accountId})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.openchannel.accounts.list",{url:"/list",templateUrl:"app/channels/openchannel/account/list/list.html",controller:"OpenChannelAccountListCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.openchannel.accounts.view.actions",{url:"/actions",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").factory("OpenChannelApplication",["$resource",function(a){return a("/api/openchannel/applications/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("OpenChannelAccountViewActionListCtrl",["$scope","gridOptions","OpenChannelAccount","$http","$translate","$stateParams","xAlert",function(a,b,c,d,e,f,g){a.initActions=function(){var d={draggable:!0,exporterCsvFilename:"openchannel_applications.csv",enableSorting:!1,enableFiltering:!1,columnDefs:[{name:"app",cellClass:"text-center"},{name:"name",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div><span>{{row.entity.app == "queue" ? row.entity.OpenchannelQueue.name : row.entity.User.name}}</span></div>'},{name:"timeout",cellClass:"text-center"},{name:"interval",displayName:"APPLICATION_TIME_INTERVAL",cellClass:"text-center",cellTemplate:"<div><span>{{row.entity.Interval ? row.entity.Interval.name : row.entity.interval}}</span></div>"},{name:"action",width:125,buttons:[{"class":"blue-hoki",href:"/channels/openchannel/accounts/view/{{row.entity.OpenchannelAccountId}}/actions/view/{{row.entity.id}}",name:"profile"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.app, row.entity.id)"}]}]};a.gridOptions=b.gridOptions(c,d,a,{accountId:f.accountId,controller:"applications"})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.openchannel.accounts.view.actions.list",{url:"/list",templateUrl:"app/channels/openchannel/account/view/action/list/list.html",controller:"OpenChannelAccountViewActionListCtrl"})}]),angular.module("xCallyShuttleApp").controller("OpenChannelAccountViewActionViewCtrl",["$scope","$http","$stateParams","$translate","$location","xAlert","WizardHandler","socket","application","interval","Agent","Interval","OpenChannelQueue","OpenChannelAccount","OpenChannelApplication","Template","MailAccount","SmsAccount",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r){a.isActive=!0,a.size="small",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.initAction=function(){return a.$application=i.application,a.$stateParams=c, +a.$interval=j.interval,a.forms={},a.apps=[{name:"Queue",value:"queue"},{name:"Agent",value:"agent"},{name:"SendMail",value:"sendMail"},{name:"SendSMS",value:"sendSms"}],o.get({id:c.actionId}).$promise.then(function(b){if(a.application=b,a.application.alwaysTime=!1,a.application.IntervalId)a.application.intType="list";else switch(a.application.interval){case"*,*,*,*":a.application.intType="always";break;default:a.application.intType="custom"}if("always"===a.application.intType||"custom"===a.application.intType){var c=a.application.interval.split(",");"*"===c[0]?a.application.alwaysTime=!0:(a.application.t_from=moment(new Date),a.application.t_to=moment(new Date),a.application.t_from.hour(c[0].split("-")[0].split(":")[0]),a.application.t_from.minute(c[0].split("-")[0].split(":")[1]),a.application.t_to.hour(c[0].split("-")[1].split(":")[0]),a.application.t_to.minute(c[0].split("-")[1].split(":")[1])),"*"===c[1]?(a.application.wd_from="always",a.application.wd_to="always"):(a.application.wd_from=c[1].split("-")[0],a.application.wd_to=c[1].split("-")[1]),"*"===c[2]?(a.application.md_from="always",a.application.md_to="always"):(a.application.md_from=c[2].split("-")[0],a.application.md_to=c[2].split("-")[1]),"*"===c[3]?(a.application.m_from="always",a.application.m_to="always"):(a.application.m_from=c[3].split("-")[0],a.application.m_to=c[3].split("-")[1])}a.$watch("application.t_from",function(b){a.application.t_from_hm=moment(b).format("HH:mm")}),a.$watch("application.t_to",function(b){a.application.t_to_hm=moment(b).format("HH:mm")})})["catch"](function(a){f.error(a)})},a.getQueues=function(){return m.get().$promise.then(function(b){a.queues=b.rows})["catch"](function(a){console.error(a)})},a.getSmsAccounts=function(){return r.get().$promise.then(function(b){a.smsAccounts=b.rows})["catch"](function(a){console.error(a)})},a.getAgents=function(){return k.get().$promise.then(function(b){a.agents=b.rows})["catch"](function(a){console.error(a)})},a.getIntervals=function(){return l.get().$promise.then(function(b){a.intervals=b.rows})["catch"](function(a){console.error(a)})},a.updateItem=function(){switch(a.application.intType){case"always":a.application.interval="*,*,*,*",a.application.IntervalId=null;break;case"list":var b=_.find(a.intervals,{id:a.application.IntervalId});a.application.interval=b?"":"*,*,*,*",a.application.IntervalId=b?a.application.IntervalId:null;break;case"custom":var g,h,i,j,k;g=a.application.t_from&&a.application.t_to&&!a.application.alwaysTime?moment(a.application.t_from).format("HH:mm")+"-"+moment(a.application.t_to).format("HH:mm"):"*",a.application.wd_from&&"always"!==a.application.wd_from?(h=a.application.wd_from,a.application.wd_to&&"always"!==a.application.wd_to&&(h+="-"+a.application.wd_to)):h="*",a.application.md_from&&"always"!==a.application.md_from?(i=a.application.md_from,a.application.md_to&&"always"!==a.application.md_to&&(i+="-"+a.application.md_to)):i="*",a.application.m_from&&"always"!==a.application.m_from?(j=a.application.m_from,a.application.m_to&&"always"!==a.application.m_to&&(j+="-"+a.application.m_to)):j="*",k=g+","+h+","+i+","+j,a.application.interval=k,a.application.IntervalId=null}return n.update({accountId:c.accountId,controller:"applications",id:c.actionId},a.application).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success"),e.path("/channels/openchannel/accounts/view/"+c.accountId+"/actions/list")})["catch"](function(a){f.error(a)})},a.getTemplates=function(){return p.get().$promise.then(function(b){a.templates=b.rows})["catch"](function(a){console.error(a)})},a.getMailAccounts=function(){return q.get().$promise.then(function(b){a.mailAccounts=b.rows})["catch"](function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.openchannel.accounts.view.actions.view",{url:"/view/:actionId",templateUrl:"app/channels/openchannel/account/view/action/view/view.html",controller:"OpenChannelAccountViewActionViewCtrl"})}]),angular.module("xCallyShuttleApp").controller("OpenChannelAccountViewActionWizardCtrl",["$scope","$http","Agent","OpenChannelQueue","Interval","$stateParams","$translate","$location","xAlert","WizardHandler","socket","application","interval","OpenChannelApplication","OpenChannelAccount","Template","MailAccount","SmsAccount",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r){a.isActive=!0,a.size="small",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.initWizard=function(){a.apps=[{name:"Queue",value:"queue"},{name:"Agent",value:"agent"},{name:"SendMail",value:"sendMail"},{name:"SendSMS",value:"sendSms"}],a.$application=l.application,a.$stateParams=f,a.$interval=m.interval,a.forms={},a.application={alwaysTime:!0},a.$watch("application.t_from",function(b){a.application.t_from_hm=moment(b).format("HH:mm")}),a.$watch("application.t_to",function(b){a.application.t_to_hm=moment(b).format("HH:mm")})},a.getQueues=function(){return d.get().$promise.then(function(b){console.log(b),a.queues=b.rows})["catch"](function(a){console.error(a)})},a.getAgents=function(){return c.get().$promise.then(function(b){a.agents=b.rows})["catch"](function(a){console.error(a)})},a.getSmsAccounts=function(){return r.get().$promise.then(function(b){a.smsAccounts=b.rows})["catch"](function(a){console.error(a)})},a.getIntervals=function(){return e.get().$promise.then(function(b){a.intervals=b.rows})["catch"](function(a){console.error(a)})},a.createItem=function(){switch(a.application.intType){case"always":a.application.interval="*,*,*,*",a.application.IntervalId=null;break;case"list":var b=_.find(a.intervals,{id:a.application.IntervalId});a.application.interval=b?"":"*,*,*,*",a.application.IntervalId=b?a.application.IntervalId:null;break;case"custom":var c,d,e,j,k;c=a.application.t_from&&a.application.t_to&&!a.application.alwaysTime?moment(a.application.t_from).format("HH:mm")+"-"+moment(a.application.t_to).format("HH:mm"):"*",a.application.wd_from&&"always"!==a.application.wd_from?(d=a.application.wd_from,a.application.wd_to&&"always"!==a.application.wd_to&&(d+="-"+a.application.wd_to)):d="*",a.application.md_from&&"always"!==a.application.md_from?(e=a.application.md_from,a.application.md_to&&"always"!==a.application.md_to&&(e+="-"+a.application.md_to)):e="*",a.application.m_from&&"always"!==a.application.m_from?(j=a.application.m_from,a.application.m_to&&"always"!==a.application.m_to&&(j+="-"+a.application.m_to)):j="*",k=c+","+d+","+e+","+j,a.application.interval=k,a.application.IntervalId=null}return o.save({accountId:f.accountId,controller:"applications"},a.application).$promise.then(function(){i.show(g.instant("MESSAGE_WELL_DONE"),"success"),h.path("/channels/openchannel/accounts/view/"+f.accountId+"/actions/list")})["catch"](function(a){i.error(a)})},a.formValidation=function(a){return a},a.next=function(){j.wizard().next()},a.getMailAccounts=function(){return q.get().$promise.then(function(b){a.mailAccounts=b.rows})["catch"](function(a){console.error(a)})},a.getTemplates=function(){return p.get().$promise.then(function(b){a.templates=b.rows})["catch"](function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.openchannel.accounts.view.actions.wizard",{url:"/wizard",templateUrl:"app/channels/openchannel/account/view/action/wizard/wizard.html",controller:"OpenChannelAccountViewActionWizardCtrl"})}]),angular.module("xCallyShuttleApp").controller("OpenChannelAccountApiViewCtrl",["$scope","OpenChannelAccount","$http","$stateParams","clipboard","$translate","$location","xAlert",function(a,b,c,d,e,f,g,h){a.copyToClipboard=function(a){e.copyText(a),h.show(f.instant("MESSAGE_TEXT_COPIED_CLIPBOARD")+"!","success")},a.initView=function(){b.get({id:d.accountId}).$promise.then(function(b){a.account=b,a.receiveurl=a.account.remote+"/api/openchannel/accounts/"+a.account.id+"/receive"})["catch"](function(a){h.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.openchannel.accounts.view.api",{url:"/api",controller:"OpenChannelAccountApiViewCtrl",templateUrl:"app/channels/openchannel/account/view/api/view/view.html"})}]),angular.module("xCallyShuttleApp").factory("OpenChannelDisposition",["$resource",function(a){return a("/api/openchannel/dispositions/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("OpenChannelInboxViewModaDispositionAddCtrl",["$scope","$uibModalInstance","OpenChannelAccount","id",function(a,b,c,d){a.ok=function(){return c.save({accountId:d,controller:"dispositions"},{name:a.name}).$promise.then(function(a){b.close(a)})},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("OpenChannelAccountDispositionViewCtrl",["$scope","$stateParams","$uibModal","$translate","OpenChannelAccount","xAlert",function(a,b,c,d,e,f){a.initView=function(){return e.get({accountId:b.accountId,controller:"dispositions"}).$promise.then(function(b){a.dispositions=b.rows})["catch"](function(a){console.error(a),f.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},a.updateDisposition=function(a,c){return e.update({accountId:b.accountId,controller:"dispositions",id:a},{name:c}).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE")+"!","success")})["catch"](function(a){console.error(a),f.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},a.deleteDisposition=function(c){return console.log("delete"),e.remove({accountId:b.accountId,controller:"dispositions",id:c}).$promise.then(function(){_.remove(a.dispositions,{id:c})})["catch"](function(a){console.error(a),f.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},a.addDisposition=function(){return c.open({animation:!0,templateUrl:"app/channels/openchannel/account/view/disposition/modal/add.modal.html",controller:"OpenChannelInboxViewModaDispositionAddCtrl",resolve:{id:function(){return b.accountId}}}).result.then(function(b){b&&a.dispositions.push(b)})["catch"](function(a){console.error(a),f.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.openchannel.accounts.view.dispositions",{url:"/dispositions",controller:"OpenChannelAccountDispositionViewCtrl",templateUrl:"app/channels/openchannel/account/view/disposition/view/view.html"})}]),angular.module("xCallyShuttleApp").controller("OpenChannelAccountHooksViewCtrl",["$scope","OpenChannelAccount","Pause","$http","$stateParams","$translate","$location","xAlert",function(a,b,c,d,e,f,g,h){a.account={},a.isActive=!0,a.size="small",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.CONST_TIMEOUT=3e4,a.initView=function(){a.types=[{value:"",name:"-- None --"},{name:"HTTP GET",value:"GET"},{name:"HTTP POST",value:"POST"}],c.get().$promise.then(function(b){a.pauses=b.rows})["catch"](function(a){h.error(a)}),b.get({id:e.accountId}).$promise.then(function(b){a.account=b,a.account.actions.length<1&&a.account.actions.push({action:"pause",enabled:!1,type:null})})["catch"](function(a){h.error(a)})},a.resetActionData=function(a){a.type=null},a.updateItem=function(){return console.log(a.account),b.update({id:e.accountId},a.account).$promise.then(function(){h.show(f.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){h.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.openchannel.accounts.view.hooks",{url:"/hooks",controller:"OpenChannelAccountHooksViewCtrl",templateUrl:"app/channels/openchannel/account/view/hooks/view/view.html"})}]),angular.module("xCallyShuttleApp").controller("OpenChannelAccountSettingViewCtrl",["$scope","OpenChannelAccount","$http","$stateParams","clipboard","$translate","$location","xAlert","List",function(a,b,c,d,e,f,g,h,i){a.isActive=!0,a.size="small",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.CONST_TIMEOUT=3e4,a.types=[{name:"HTTP GET",value:"GET"},{name:"HTTP POST",value:"POST"}],a.account={},a.initView=function(){i.get().$promise.then(function(b){a.lists=b.rows})["catch"](function(a){console.error(a)}),b.get({id:d.accountId}).$promise.then(function(b){a.account=b})["catch"](function(a){h.error(a)})},a.updateItem=function(){return b.update({id:d.accountId},a.account).$promise.then(function(){h.show(f.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){h.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.openchannel.accounts.view.settings",{url:"/settings",controller:"OpenChannelAccountSettingViewCtrl",templateUrl:"app/channels/openchannel/account/view/setting/view/view.html"})}]),angular.module("xCallyShuttleApp").controller("OpenChannelAccountViewCtrl",["$scope","OpenChannelAccount","$http","$stateParams","clipboard","$translate","$location","xAlert","List",function(a,b,c,d,e,f,g,h,i){a.initView=function(){return a.account={},b.get({id:d.accountId}).$promise.then(function(b){a.account=b,console.log(b)})["catch"](function(a){h.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.openchannel.accounts.view",{url:"/view/:accountId",templateUrl:"app/channels/openchannel/account/view/view.html",controller:"OpenChannelAccountViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]})}]}})}]),angular.module("xCallyShuttleApp").controller("OpenChannelAccountWizardCtrl",["$scope","$http","$location","$translate","WizardHandler","xAlert","OpenChannelAccount",function(a,b,c,d,e,f,g){a.isActive=!0,a.size="small",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.initWizard=function(){a.forms={},a.item={},a.item.remote=c.protocol()+"://"+location.host},a.goNext=function(){e.wizard().next()},a.formValidation=function(a){return a},a.createItem=function(){return g.save(a.item).$promise.then(function(){c.path("/channels/openchannel/accounts/list")})["catch"](function(a){f.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.openchannel.accounts.wizard",{url:"/wizard",templateUrl:"app/channels/openchannel/account/wizard/wizard.html",controller:"OpenChannelAccountWizardCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.openchannel.inbox",{url:"/inbox",template:"<div ui-view></div>",data:{permissions:{only:["admin","user","agent"],redirectTo:"landing",id:48}}})}]),angular.module("xCallyShuttleApp").controller("OpenChannelInboxInfoModalCtrl",["$scope","$translate","$uibModalInstance","$stateParams","xAlert","data",function(a,b,c,d,e,f){a.data=null,a.initInfo=function(){f&&(a.data=_.isEmpty(JSON.parse(f))?null:JSON.parse(f))},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").directive("message",["$rootScope","OpenChannelMessage","List","xAlert","$translate","$uibModal",function(a,b,c,d,e,f){return{restrict:"E",scope:{Message:"=message",accounttype:"=accounttype",listId:"="},templateUrl:"app/channels/openchannel/inbox/message/message.html",link:function(b){b.openContact=function(f,g){if(b.listId){if(!g)return;var h;switch(f){case"phone":h={phone:g};break;case"email":h={email:g};break;default:return}return c.save({listId:b.listId,controller:"contacts"},h).$promise.then(function(b){var c=_.find(a.$root.workspaces,{contactID:b.id});c?c.active=!0:a.$root.workspaces.push({active:!0,"class":"icon-user",contactID:b.id,name:b.phone,type:"contact"})})["catch"](function(a){console.error(a)})}d.show(e.instant("MESSAGE_NO_LIST_CONFIGURED"),"info")},b.info=function(a){f.open({animation:!0,templateUrl:"app/channels/openchannel/inbox/message/info.modal.html",controller:"OpenChannelInboxInfoModalCtrl",resolve:{data:function(){return a}}})}}}}]),angular.module("xCallyShuttleApp").directive("openchannelRoom",["OpenChannelReport","$cookieStore","$translate","$uibModal","$timeout","Tag","CannedAnswer","Auth","OpenChannelAccount","OpenChannelRoom","OpenChannelMessage","xAlert","usSpinnerService","socket","$stateParams","$rootScope",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){return{restrict:"E",scope:{workspace:"=",index:"=",submit:"&onSubmit"},templateUrl:"app/channels/openchannel/inbox/room/room.directive.html",link:function(a){a.modelOptions={debounce:{"default":500,blur:250},getterSetter:!0},a.panelLeft=null,a.panelRight="col-md-12",a.togglePanelLeft=function(){a.panelLeft?(a.panelLeft=null,a.panelRight="col-md-12"):(a.panelLeft="col-md-6",a.panelRight="col-md-6")},a.form={disabled:!1,from:"",to:a.workspace.data&&a.workspace.data.to?a.workspace.data.to:"",body:""},n.socket.on("openchannel_message:save",function(b){return a.workspace.id&&b.OpenchannelRoomId==a.workspace.id?k.get({id:b.id}).$promise.then(function(b){a.Room||(a.Room={OpenchannelMessages:[]});var c=_.findIndex(a.Room.OpenchannelMessages,{id:b.id});c>-1?_.merge(a.Room.OpenchannelMessages[c],b):a.Room.OpenchannelMessages.unshift(b),a.panelLeft="col-md-6",a.panelRight="col-md-6"})["catch"](function(a){console.error(a)}):void 0}),n.socket.on("openchannel_message:update",function(b){if(a.Room&&b.OpenchannelRoomId==a.workspace.id){var c=_.find(a.Room.OpenchannelMessages,{id:b.id});c&&_.merge(c,b)}}),n.socket.on("openchannel_room:save",function(b){a.Room&&b.id==a.workspace.id&&(a.Room.status=b.status,a.Room.disposition=b.disposition)}),a.closeRoom=function(b){return d.open({animation:!0,templateUrl:"app/channels/openchannel/inbox/view/view.status.modal.html",controller:"OpenChannelInboxViewModalStatusCtrl",resolve:{closed:function(){return"CLOSED"===a.Room.status},accountId:function(){return a.Room.OpenchannelAccountId}}}).result.then(function(a){var c={id:b,status:"CLOSED"};return a.disposition&&(c.disposition=a.disposition),j.update(c).$promise["catch"](function(a){l.error(a)})})},a.openRoom=function(a,b){var c=_.find(p.workspaces,{id:a,type:"openchannelRoom"});c?c.active=!0:p.workspaces.push({id:a,name:b,type:"openchannelRoom","class":"icon-globe",active:!0})},f.get().$promise.then(function(b){a.tags=_.map(b.rows,"name")})["catch"](function(a){console.error(a)}),i.get().$promise.then(function(b){a.Accounts=b.rows})["catch"](function(a){console.error(a)}),a.workspace.id?(a.panelLeft="col-md-6",a.panelRight="col-md-6",j.get({id:a.workspace.id}).$promise.then(function(b){a.Room=b,a.form.from=a.Room.OpenchannelAccount.name,a.form.to=a.Room.contact,a.form.tags=a.Room.tags})["catch"](function(a){console.error(a)})["finally"](function(){m.stop("spinner-grid"),a.form.disabled=!1})):m.stop("spinner-grid"),a.onSelect=function(){a.form.body+=a.modelOptions.selectedAnswer,delete a.modelOptions.selectedAnswer},a.onSelectAnswer=function(b){a.form.body+=b,a.selectedAnswer=""},a.getAnswers=function(a){return g.get({key:a}).$promise.then(function(a){return _.map(a.rows,"value")})},a.loadAgents=function(){d.open({animation:!0,templateUrl:"app/channels/openchannel/inbox/view/view.agents.modal.html",controller:"OpenChannelInboxViewModalAgentCtrl",resolve:{roomId:function(){return a.workspace.id}}})},a.onChanged=function(){return j.patch({id:a.workspace.id},{tags:a.form.tags}).$promise["catch"](function(a){console.error(a)})},a.sendMessage=function(){m.spin("spinner-grid");var b=_.find(a.Accounts,{name:a.form.from}).id;if(b){var d={from:a.form.from,to:a.form.to,body:a.form.body,OpenchannelRoomId:a.Room?a.Room.id:null};return i.save({accountId:b,controller:"send"},d).$promise.then(function(b){return l.show(c.instant("MESSAGE_WELL_DONE"),"success"),a.Room?a.Room:j.get({id:"messages",controller:b.id}).$promise}).then(function(b){b&&(a.form.body="",a.workspace.id=b.id,a.workspace.name=b.contact,a.Room=b,a.panelLeft="col-md-6",a.panelRight="col-md-6")})["catch"](function(a){l.error(a)})["finally"](function(){m.stop("spinner-grid")})}}}}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.openchannel.inbox.view.account",{url:"/account/:id",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("OpenChannelInboxViewAccountListCtrl",["$scope","$rootScope","$uibModal","$translate","$stateParams","$state","Tag","usSpinnerService","socket","OpenChannelAccount","OpenChannelRoom","gridOptions","uiGridConstants","Auth","Modal","xAlert","uibButtonConfig","localStorageService",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r){a.loadAgents=function(a){c.open({animation:!0,templateUrl:"app/channels/openchannel/inbox/view/view.agents.modal.html",controller:"OpenChannelInboxViewModalAgentCtrl",resolve:{roomId:a}})},a.initView=function(){q.activeClass="green-haze",a.id=[],a.isAdmin=n.isAdmin(),a.isAgent=n.isAgent(),a.uncheckable=!1,a.query={status:r.get("openchannelStatus")?r.get("openchannelStatus"):"NEW",tags:r.get("openchannelTags")?r.get("openchannelTags"):[]},a.$watch("query.status",function(){r.set("openchannelStatus",a.query.status),a.getPage()},!0),g.get().$promise.then(function(b){a.tags=_.map(b.rows,"name")})["catch"](function(a){console.error(a)}),a.gridOptions={exporterCsvFilename:"openchannel_rooms.csv",enableRowHeaderSelection:!0,paginationPageSizes:[10,25,50,75],paginationPageSize:10,enableFiltering:!0,enableSorting:!0,enableGridMenu:!1,flatEntityAccess:!0,showGridFooter:!0,fastWatch:!0,enableSelectAll:!0,enableHorizontalScrollbar:0,enableVerticalScrollbar:0,columnDefs:[{name:"lastEvent",displayName:"",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div> <span data-ng-class=\"{'icon-arrow-up font-green': row.entity.lastEvent === 'SENT', 'icon-arrow-up font-yellow': row.entity.lastEvent === 'SENDING', 'icon-arrow-down font-green': row.entity.lastEvent === 'RECEIVED', 'icon-close font-red': row.entity.lastEvent === 'FAILED', 'icon-question': !row.entity.lastEvent}\"> </span> </div>",width:30,enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1},{name:"tags",displayName:"",headerCellTemplate:'<i class="icon-tag" style="margin-top: 8px; margin-left: 8px;"></i>',cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div><i data-ng-class=\"row.entity.tags.length ? 'icon-tag' : ''\" title=\"{{row.entity.tags}}\"></i></div>",width:30,enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1},{name:"id",displayName:"Id",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div><span>#{{row.entity.id}}</span></div>",width:75,enableSorting:!1,enableFiltering:!0,enableColumnMenu:!1},{name:"contact",cellClass:"text-center"},{name:"disposition",cellClass:"text-center"},{name:"updatedAt",cellFilter:"date:'MM/dd/yyyy HH:mm'",width:120,enableSorting:!1,enableFiltering:!1,sort:{direction:m.DESC}},{name:"action",cellTemplate:'<div> <a class="btn btn-icon-only font-green" data-ng-click="grid.appScope.openRoom(row.entity.id, row.entity.contact)"><i class="glyphicon glyphicon-comment" aria-hidden="true"></i></a> <a class="btn btn-icon-only font-red" data-ng-show="grid.appScope.isAdmin" data-ng-click="grid.appScope.deleteItem(row.entity.id,row.entity.id)"><i class="fa fa-trash" aria-hidden="true"></i> </div>',enableSorting:!1,cellClass:"ui-grid-vcenter",width:90,enableFiltering:!1,enableColumnMenu:!1}],data:[],onRegisterApi:function(b){a.gridApi=b,a.gridApi.selection&&(a.gridApi.selection.on.rowSelectionChanged(a,function(b){b.isSelected?a.id.push(a.gridApi.grid.options.primaryKey?b.entity[a.gridApi.grid.options.primaryKey]:b.entity.id):_.pull(a.id,a.gridApi.grid.options.primaryKey?b.entity[a.gridApi.grid.options.primaryKey]:b.entity.id)}),a.gridApi.selection.on.rowSelectionChangedBatch(a,function(b){b[0].isSelected?a.id=_.union(a.id,_.map(b,a.gridApi.grid.options.primaryKey?"entity."+a.gridApi.grid.options.primaryKey:"entity.id")):_.map(b,a.gridApi.grid.options.primaryKey?"entity."+a.gridApi.grid.options.primaryKey:"entity.id").forEach(function(b){_.pull(a.id,b)})}))}},i.socket.on("openchannel_room:remove",function(b){_.remove(a.workspaces,{id:b.id,type:"openchannelRoom"}),_.remove(a.gridOptions.data,{id:b.id})}),a.getPage(a.query)},a.onChanged=function(){a.getPage(a.query)},a.tagItems=function(){return c.open({animation:!0,templateUrl:"app/channels/openchannel/inbox/view/view.tags.modal.html",controller:"OpenChannelInboxViewModalTagCtrl",resolve:{id:function(){return a.id}}}).result.then(function(){a.gridApi.selection.clearSelectedRows(),a.id=[],a.getPage()})},a.openRoom=function(b,c){var d=_.find(a.workspaces,{id:b,type:"openchannelRoom"});return d?d.active=!0:a.workspaces.push({id:b,name:c,type:"openchannelRoom","class":"icon-globe",active:!0}),b&&"agent"===n.getCurrentUser().role&&"PENDING"!==a.query.status&&"CLOSED"!==a.query.status?k.patch({id:b},{status:"OPEN",openReason:"agent"}).$promise["catch"](function(a){console.error(a)}):void 0},a.getPage=function(b){h.spin("spinner-grid");var c={accountId:e.id,controller:"rooms"};return b&&_.merge(c,b),a.query&&_.merge(c,a.query),j.query(c).$promise.then(function(b){r.set("openchannelAccountId",e.id),a.gridOptions.data=b,i.socket.on("openchannel_room:save",function(b){if(b.OpenchannelAccountId==e.id){var c=_.find(a.gridOptions.data,{id:b.id});c?c.status!==b.status?_.remove(a.gridOptions.data,{id:b.id}):_.merge(c,b):a.query.status===b.status&&a.gridOptions.data.push(b)}}),i.socket.on("openchannel_room:remove",function(b){_.remove(a.gridOptions.data,{id:b.id})})})["catch"](function(a){console.error(a)})["finally"](function(){h.stop("spinner-grid")})},a.deleteItem=o.confirm["delete"](function(b){var c={id:b};return console.log(c),k["delete"](c).$promise.then(function(){a.getPage(),p.show(d.instant("MESSAGE_WELL_DONE")+"!","success"),a.gridApi.selection.clearSelectedRows(),a.id=[]})["catch"](function(a){p.error(a)})}),a.deleteItems=o.confirm["delete"](function(){var b={ids:a.id};return k["delete"](b).$promise.then(function(){a.getPage(),p.show(d.instant("MESSAGE_WELL_DONE")+"!","success"),a.gridApi.selection.clearSelectedRows(),a.id=[]})["catch"](function(a){p.error(a)})})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.openchannel.inbox.view.account.list",{url:"/list",templateUrl:"app/channels/openchannel/inbox/view/account/list/list.html",controller:"OpenChannelInboxViewAccountListCtrl"})}]),angular.module("xCallyShuttleApp").controller("OpenChannelInboxViewModalAgentCtrl",["$scope","$uibModalInstance","$translate","$stateParams","Agent","OpenChannelRoom","xAlert","roomId",function(a,b,c,d,e,f,g,h){a.initModal=function(){a.agents=[],a.item={agents:[]},e.get().$promise.then(function(b){b.rows.forEach(function(b){a.agents.push(b)})})["catch"](function(a){console.error(a)}),f.query({id:h,controller:"agents"}).$promise.then(function(b){b.forEach(function(b){a.agents.push(b),a.item.agents.push(b.id)})})["catch"](function(a){console.error(a)}),a.modal={dismissable:!0,title:"APPLICATION_MESSAGE_SEND_RETRY",text:"MESSAGE_MESSAGE_SEND_RETRY",buttons:[{classes:"btn btn-success",text:"APPLICATION_RETRY",click:function(a){b.close(a)}},{classes:"btn default",text:"APPLICATION_CANCEL",click:function(a){b.dismiss(a)}}]}},a.ok=function(){return f.update({id:h,controller:"agents",agents:a.item.agents}).$promise.then(function(){g.show(c.instant("MESSAGE_WELL_DONE"),"success"),b.close()})["catch"](function(a){console.error(a)})},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("OpenChannelInboxViewCtrl",["$scope","$location","$stateParams","$translate","$uibModal","socket","Auth","xAlert","OpenChannelRoom","OpenChannelAccount","localStorageService",function(a,b,c,d,e,f,g,h,i,j,k){a.initView=function(){j.get().$promise.then(function(c){var d=null;a.Accounts=c.rows,a.Accounts.length&&(d="/channels/openchannel/inbox/view/account/"+(k.get("openchannelAccountId")||a.Accounts[0].id)+"/list"),d&&b.path(d)})["catch"](function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.openchannel.inbox.view",{url:"/view",templateUrl:"app/channels/openchannel/inbox/view/view.html",controller:"OpenChannelInboxViewCtrl",reload:!0,resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/inbox.css"]}])}]}})}]),angular.module("xCallyShuttleApp").controller("OpenChannelInboxViewModalStatusCtrl",["$scope","$uibModalInstance","closed","OpenChannelAccount","accountId",function(a,b,c,d,e){a.modal={title:"APPLICATION_CONFIRM_CLOSE",text:"MESSAGE_ARE_YOU_SURE_YOU_WANT_TO_CLOSE"},a.initDisposition=function(){return d.get({accountId:e,controller:"dispositions"}).$promise.then(function(b){a.dispositions=b.rows})["catch"](function(a){console.error(a)})},a.item={},a.closed=c,a.ok=function(){b.close(a.item)},a.cancel=function(){b.dismiss()}}]),angular.module("xCallyShuttleApp").controller("OpenChannelInboxViewModalTagCtrl",["$scope","$uibModalInstance","$translate","$stateParams","Tag","OpenChannelRoom","xAlert","id",function(a,b,c,d,e,f,g,h){a.initModal=function(){return a.tags=[],a.item={tags:[]},a.modal={dismissable:!0,title:"APPLICATION_MESSAGE_SEND_RETRY",text:"MESSAGE_MESSAGE_SEND_RETRY",buttons:[{"class":"btn-success",text:"APPLICATION_TAG",click:function(){var d={status:!0};return f.patch({id:h},{tags:a.item.tags}).$promise.then(function(){g.show(c.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(){d.status=!1,g.show(c.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})["finally"](function(){b.close(d)})}},{"class":"default",text:"APPLICATION_CANCEL",click:function(a){b.dismiss(a)}}]},e.get().$promise.then(function(b){a.tags=_.map(b.rows,"name")})["catch"](function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.openchannel",{url:"/openchannel",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user","agent"],redirectTo:"landing",id:20}}})}]),angular.module("xCallyShuttleApp").factory("OpenChannelReport",["$resource",function(a){return a("/api/report/openchannel/:id/:controller1/:controller2",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("OpenChannelRoom",["$resource",function(a){return a("/api/openchannel/rooms/:id/:controller",{id:"@id",controller:"@controller"},{update:{method:"PUT"},patch:{method:"PATCH"}})}]),angular.module("xCallyShuttleApp").factory("OpenChannelMessage",["$resource",function(a){return a("/api/openchannel/messages/:id/:controller",{id:"@id",controller:"@controller"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("OpenChannelQueueListCtrl",["$scope","OpenChannelQueue","gridOptions","$uibModal","xAlert","Auth",function(a,b,c,d,e,f){a.initView=function(){a.Auth=f;var d={exporterCsvFilename:"openchanel_queues.csv",columnDefs:[{name:"name"},{name:"description"},{name:"timeout"},{name:"strategy"},{name:"action",width:100,buttons:[{"class":"blue-hoki",href:"/channels/openchannel/queues/view/{{row.entity.id}}/settings",name:"settings"},{"class":"green-meadow",href:"/channels/openchannel/queues/view/{{row.entity.id}}/agents",name:"agents",hide:"user"===f.getCurrentUser().role},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=c.gridOptions(b,d,a)},a.createItem=function(){var b=d.open({animation:!0,templateUrl:"app/channels/openchannel/queue/list/list.create.modal.html",controller:"OpenChannelQueueListCreateCtrl",size:"lg"});b.result.then(function(b){console.log(b),a.gridOptions.getPage()})}}]),angular.module("xCallyShuttleApp").controller("OpenChannelQueueListCreateCtrl",["$scope","$uibModalInstance","$translate","xAlert","OpenChannelQueue","Team","strategies",function(a,b,c,d,e,f,g){ +a.form={},a.strategies=g,a.item={penalty:0,agents:[]},a.getTeams=function(){return f.get({controller:"associations"}).$promise.then(function(b){a.teams=b.rows}).then(function(){ComponentsDropdowns.bindQueue(a.teams,[],function(){return{select:function(b){a.item.agents=_.union(a.item.agents,b)},deselect:function(b){a.item.agents=_.difference(a.item.agents,b)}}})})["catch"](function(a){console.error(a)})},a.save=function(){return console.log(a.item),e.save(a.item).$promise.then(function(a){b.close(a)})["catch"](function(a){d.error(a)})},a.cancel=function(){b.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.openchannel.queues.list",{url:"/list",templateUrl:"app/channels/openchannel/queue/list/list.html",controller:"OpenChannelQueueListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/jquery-multi-select/css/multi-select.css","assets/plugins/jquery-multi-select/js/jquery.multi-select.js","assets/plugins/jquery-quicksearch/jquery.quicksearch.js","assets/scripts/components-dropdowns.js"]})}]}})}]),angular.module("xCallyShuttleApp").factory("OpenChannelQueue",["$resource",function(a){return a("/api/openchannel/queues/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.openchannel.queues",{url:"/queues",template:"<div ui-view></div>",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:47}}})}]),angular.module("xCallyShuttleApp").controller("OpenChannelQueueViewCtrl",["$scope","$http","Auth","$translate","$stateParams","xAlert","Team","OpenChannelQueue","strategies",function(a,b,c,d,e,f,g,h,i){a.strategies=i,a.Auth=c;var j=function(){return{select:function(b){return h.save({id:a.queue.id,controller:"agents"},{agents:b,penalty:a.queue.penalty}).$promise.then(function(b){console.log("sel",b),a.getTeams()})["catch"](function(a){console.error(a)})},deselect:function(b){return h["delete"]({id:a.queue.id,controller:"agents",agents:b}).$promise.then(function(b){console.log("desel",b),a.getTeams()})["catch"](function(a){console.error(a)})}}};a.getQueue=function(){return h.get({id:e.id}).$promise.then(function(b){b.penalty=0,a.queue=b})["catch"](function(a){console.error(a)})},a.updateQueue=function(){return h.update({id:e.id},{name:a.queue.name,description:a.queue.description,timeout:a.queue.timeout,strategy:a.queue.strategy}).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){f.error(a)})},a.getTeams=function(){return g.get({controller:"associations"}).$promise.then(function(b){return a.teams=b.rows,console.log(b.rows),h.get({id:e.id,controller:"agents"}).$promise}).then(function(b){console.log(b),ComponentsDropdowns.bindQueue(a.teams,_.map(b.rows,function(a){return{id:a.id,penalty:a.UserHasOpenchannelQueue.penalty}}),j)})["catch"](function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.openchannel.queues.view",{url:"/view/:id",templateUrl:"app/channels/openchannel/queue/view/view.html",controller:"OpenChannelQueueViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.channels.openchannel.queues.view.settings",{url:"/settings",templateUrl:"app/channels/openchannel/queue/view/view.settings.html"}).state("main.channels.openchannel.queues.view.agents",{url:"/agents",templateUrl:"app/channels/openchannel/queue/view/view.agents.html",cache:!1,serie:!0,resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/jquery-multi-select/css/multi-select.css","assets/plugins/jquery-multi-select/js/jquery.multi-select.js","assets/plugins/jquery-quicksearch/jquery.quicksearch.js","assets/scripts/components-dropdowns.js"]})}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.openchannel.realtime",{url:"/realtime",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:49}}})}]),angular.module("xCallyShuttleApp").controller("OpenChannelRealtimeViewAgentCtrl",["$scope","$log","$uibModal","$translate","socket","xAlert","Agent","Pause","Action","OpenChannelQueue","usSpinnerService","$q","uiGridConstants",function(a,b,c,d,e,f,g,h,i,j,k,l,m){function n(){return k.spin("grid-spinner"),g.get(s).$promise.then(function(b){a.gridOptions.totalItems=b.count,a.gridOptions.data=[],b.rows.forEach(function(a){p(a)})})["catch"](function(a){f.error(a)})["finally"](function(){k.stop("grid-spinner")})}function o(){e.socket.on("agent:save",function(b){b=b.newValues||b;var c=_.find(a.gridOptions.data,{agentId:b.id,isAgent:!0});c&&(c.online=_.has(b,"online")?b.online:c.online,c.lastLoginAt=_.has(b,"lastLoginAt")?b.lastLoginAt:c.lastLoginAt,c.pause=_.has(b,"smsPause")?b.openchannelPause:c.openchannelPause,c.pauseType=_.has(b,"pauseType")?b.pauseType:c.pauseType,c.lastPauseAt=_.has(b,"lastPauseAt")?b.lastPauseAt:c.lastPauseAt,c.ipaddr=_.has(b,"ipaddr")?b.ipaddr:c.ipaddr,c.port=_.has(b,"port")?b.port:c.port,c.fullcontact=_.has(b,"fullcontact")?b.fullcontact:c.fullcontact,c.useragent=_.has(b,"useragent")?b.useragent:c.useragent,c.lastms=_.has(b,"lastms")?b.lastms:c.lastms,c.internal=_.has(b,"internal")?b.internal:c.internal,_.map(a.gridOptions.data,function(a){a.isAgent||a.agentId!==b.id||(a.online=_.has(b,"online")?b.online:a.online)}))}),e.socket.on("agent:remove",function(b){_.remove(a.gridOptions.data,{agentId:b.id})}),e.socket.on("user_has_openchannel_queue:save",function(b){console.log("new queue",b);var c=_.find(a.gridOptions.data,{agentId:b.UserId,isAgent:!0}),d=a.gridOptions.data.indexOf(c);a.gridOptions.data.splice(d+1,0,{isAgent:!1,agentId:b.UserId,queue:b.queue,queueId:b.OpenchannelQueueId,agent:b.membername,online:c.online})}),e.socket.on("user_has_openchannel_queue:remove",function(b){_.remove(a.gridOptions.data,{agentId:b.UserId,queueId:b.OpenchannelQueueId})})}function p(b){a.gridOptions.data.push({isAgent:!0,agentId:b.id,agent:b.name,online:b.online,lastLoginAt:b.lastLoginAt,lastPauseAt:b.lastPauseAt,pause:b.openchannelPause,pauseType:b.pauseType,ipaddr:b.ipaddr,port:b.port,fullcontact:b.fullcontact,useragent:b.useragent,lastms:b.lastms,internal:b.internal,$$treeLevel:0}),b.OpenchannelQueues.forEach(function(c){a.gridOptions.data.push({isAgent:!1,agentId:b.id,queue:c.name,queueId:c.id,agent:b.name,online:b.online})})}function q(){return h.get().$promise.then(function(b){a.pauses=b.rows,e.syncUpdates("pause",a.pauses)})["catch"](function(a){f.error(a)})}function r(){return j.get().$promise.then(function(b){a.openchannelQueues=b.rows,e.syncUpdates("openchannel_queue",a.openchannelQueues)})["catch"](function(a){f.error(a)})}a.openchannelQueues=[];var s={controller:"realtime",controller1:"openchannel",offset:0,limit:10};a.moment=moment,a.initAgents=function(){a.gridOptions={enableGridMenu:!0,headerCellFilter:"translate",enableHorizontalScrollbar:0,enableVerticalScrollbar:0,enableFiltering:!0,showGridFooter:!0,paginationPageSizes:[10,25,50,75],paginationPageSize:10,useExternalPagination:!0,useExternalSorting:!0,useExternalFiltering:!0,multiSelect:!0,showTreeExpandNoChildren:!0,columnDefs:[{name:"name",displayName:"APPLICATION_AGENT",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div data-ng-if="row.entity.isAgent">{{row.entity.agent}} <{{row.entity.internal}}></div>'},{name:"online",displayName:"APPLICATION_ONLINE",width:150,headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div data-ng-if="row.entity.online != null && row.entity.isAgent"><i class="fa" data-ng-class="{\'font-green\':row.entity.online, \'font-red\':!row.entity.online,\'fa-user\':row.entity.online,\'fa-user-times\':!row.entity.online}"></i> <span data-ng-if="row.entity.online" class="left-margin">(<css-timer start-time="row.entity.lastLoginAt"></css-timer>)</span></div>',filter:{type:m.filter.SELECT,selectOptions:[{value:"true",label:"ONLINE"},{value:"false",label:"OFFLINE"}]}},{name:"openchannelPause",displayName:"APPLICATION_PAUSE",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div data-ng-if="row.entity.pause != null && row.entity.online" class="ui-grid-vcenter" data-ng-class="{\'paused-agent\':row.entity.pause}"><i data-ng-if="row.entity.pause" data-ng-click="grid.appScope.pause(row.entity.agentId,\'unpause\')" class="fa fa-play font-green pointer-cursor left-margin" title="{{\'APPLICATION_RESUME\' | translate}}"></i><i class="fa fa-pause font-yellow pointer-cursor" data-ng-click="grid.appScope.pause(row.entity.agentId,\'pause\',\'DEFAULT PAUSE\')" title="{{\'APPLICATION_DEFAULT_PAUSE\' | translate}}"></i><select data-ng-if="grid.appScope.pauses.length" class="pause-select pointer-cursor" data-ng-model="grid.appScope.pauseType" data-ng-change="grid.appScope.pause(row.entity.agentId,\'pause\',grid.appScope.pauseType)"><option class="pointer-cursor" data-ng-repeat="pause in grid.appScope.pauses">{{pause.name}}</option></select> <span data-ng-if="row.entity.pause" class="left-margin">({{row.entity.pauseType}})</span><span class="left-margin"><css-timer data-ng-if="row.entity.pause" start-time="row.entity.lastPauseAt"></css-timer></span></div>',filter:{type:m.filter.SELECT,selectOptions:[{value:"true",label:"PAUSED"},{value:"false",label:"NOT PAUSED"}]},enableSorting:!1,enableColumnMenu:!1},{name:"queue",displayName:"APPLICATION_QUEUE",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1},{name:"action",displayName:"",width:170,cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div><button data-ng-if="row.entity.queueId" class="btn btn-xs red-sunglo" data-ng-click="grid.appScope.leaveQueue(row.entity.agentId,row.entity.queueId)"><i class="icon-ban"></i> {{\'APPLICATION_LEAVE\' | translate}}</button><button data-ng-if="row.entity.isAgent && row.treeNode.children.length < grid.appScope.openchannelQueues.length" class="btn btn-xs blue-hoki" data-ng-click="grid.appScope.joinQueue(row.entity.agentId)"><i class="icon-plus"></i> {{\'APPLICATION_JOIN_QUEUE\' | translate}}</button><div>',enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1}],data:[],gridMenuTitleFilter:function(a){var b=l.defer();return b.resolve(d.instant(a)),b.promise},onRegisterApi:function(b){a.gridApi=b,a.gridApi.grid.registerDataChangeCallback(function(){t(a.gridApi.core.getVisibleRows(a.gridApi.grid).length)}),a.gridApi.treeBase.on.rowExpanded(a,function(b){t(a.gridApi.core.getVisibleRows(a.gridApi.grid).length+b.treeNode.children.length)}),a.gridApi.treeBase.on.rowCollapsed(a,function(b){t(a.gridApi.core.getVisibleRows(a.gridApi.grid).length-b.treeNode.children.length)}),a.gridApi.core.on.sortChanged(a,function(a,b){0===b.length?s.order=null:s.order=b[0].name+" "+b[0].sort.direction.toUpperCase(),n()}),a.gridApi.pagination.on.paginationChanged(a,function(a,b){s.offset=(a-1)*b,s.limit=b,n()}),a.gridApi.core.on.filterChanged(a,function(){var a=this.grid;a.columns.forEach(function(a){a.filters[0].term?s[a.name]=a.filters[0].term:delete s[a.name]}),n()})}},n(),q(),r(),$timeout(function(){o()})};var t=function(a){var b=a?30*a+130:270;angular.element(document.getElementsByClassName("ui-grid")[0]).css("height",b+"px"),angular.element(document.getElementsByClassName("ui-grid-viewport")).css("height",30*a+"px")};a.$on("$destroy",function(){e.unsyncUpdates("agent"),e.unsyncUpdates("user_has_openchannel_queue")}),a.pause=function(b,c,e){return e&&(a.pauseType=null),i.save({name:c,agent:b,type:e||"DEFAULT PAUSE",data4:e||"DEFAULT PAUSE",channel:"openchannel"}).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){f.error(a)})},a.joinQueue=function(e){var g=c.open({animation:!0,templateUrl:"app/channels/openchannel/realtime/view/agent/queue.modal.add.html",controller:"OpenChannelRealtimeViewAgentQueueModalCtrl",resolve:{queues:function(){return _.reject(a.openchannelQueues,function(b){return!!_.find(a.gridOptions.data,{queue:b.name,isAgent:!1,agentId:e})})}}});g.result.then(function(b){return i.save({name:"QueueAdd",agent:e,queues:_.filter(a.openchannelQueues,function(a){return _.includes(b.queues,a.id)}),channel:"openchannel",data1:e,data3:b.queues.join(","),data4:"openchannel"}).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){f.error(a)})},function(){b.info("Modal dismissed at: "+new Date)})},a.leaveQueue=function(a,b){return i.save({name:"QueueRemove",agent:a,queueId:b,channel:"openchannel",data1:a,data3:b,data4:"openchannel"}).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){f.error(a)})},a.showInfo=function(a){c.open({animation:!0,templateUrl:"app/channels/openchannel/realtime/view/agent/agent.modal.info.html",controller:"OpenChannelRealtimeViewAgentInfoModalCtrl",resolve:{agent:a}})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.openchannel.realtime.view.agents",{url:"/agents",templateUrl:"app/channels/openchannel/realtime/view/agent/agent.html",controller:"OpenChannelRealtimeViewAgentCtrl"})}]),angular.module("xCallyShuttleApp").controller("OpenChannelRealtimeViewAgentInfoModalCtrl",["$scope","$uibModalInstance","$http","agent",function(a,b,c,d){a.agent=d,a.close=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("OpenChannelRealtimeViewAgentQueueModalCtrl",["$scope","$uibModalInstance","$http","queues",function(a,b,c,d){a.queues=d,a.item={},a.save=function(){b.close(a.item)},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("OpenChannelRealtimeViewApplicationCtrl",["$scope","$log","$uibModal","$translate","socket","xAlert","ReportOpenChannelSession","usSpinnerService","$q","uiGridConstants","$timeout",function(a,b,c,d,e,f,g,h,i,j,k){function l(){return h.spin("spinner-grid"),g.get({controller:"waiting",controller2:"applications"}).$promise.then(function(b){a.gridOptions.data=b.rows})["catch"](function(a){f.error(a)})["finally"](function(){m(),h.stop("spinner-grid")})}function m(){e.socket.on("report_openchannel_session:save",function(b){var c=_.find(a.gridOptions.data,{id:b.id});c?(_.merge(c,b),b.leaveAt&&k(function(){_.remove(a.gridOptions.data,{id:b.id})},1e4)):b.leaveAt||a.gridOptions.data.push(b)}),e.socket.on("report_openchannel_session:remove",function(b){_.remove(a.gridOptions.data,{id:b.id})})}a.moment=moment,a.initApplications=function(){a.gridOptions={headerCellFilter:"translate",enableHorizontalScrollbar:0,enableVerticalScrollbar:0,enableFiltering:!0,columnDefs:[{name:"uniqueid",displayName:"APPLICATION_UNIQUEID",headerCellFilter:"translate"},{name:"accountname",displayName:"APPLICATION_ACCOUNT",headerCellFilter:"translate"},{name:"application",displayName:"APPLICATION_APPLICATION",headerCellFilter:"translate"},{name:"status",displayName:"APPLICATION_STATUS",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div><span data-ng-if="!row.entity.leaveAt">{{\'APPLICATION_QUEUESTATUS_WAITING\' | translate}}</span><span data-ng-if="row.entity.leaveAt && row.entity.complete">{{\'APPLICATION_QUEUESTATUS_COMPLETE\' | translate}}</span><span data-ng-if="row.entity.leaveAt && row.entity.timeout">{{\'APPLICATION_TIMEOUT\' | translate}}</span> <span data-ng-if="!row.entity.leaveAt">[<css-timer start-time="row.entity.updatedAt"></css-timer>]</span></div>',enableSorting:!1,enableColumnMenu:!1,enableFiltering:!1},{name:"membername",displayName:"APPLICATION_AGENT",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{row.entity.membername || ''}}</span></div>"},{name:"queuename",displayName:"APPLICATION_QUEUE",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{row.entity.queuename || ''}}</span></div>"}],data:[],gridMenuTitleFilter:function(a){var b=i.defer();return b.resolve(d.instant(a)),b.promise},onRegisterApi:function(b){a.gridApi=b,a.gridApi.grid.registerDataChangeCallback(function(){n(a.gridOptions.data.length)})}},l()};var n=function(a){var b=a?30*a+60:270;angular.element(document.getElementsByClassName("ui-grid")[0]).css("height",b+"px"),angular.element(document.getElementsByClassName("ui-grid-viewport")).css("height",30*a+"px")};a.$on("$destroy",function(){e.unsyncUpdates("report_openchannel_session")})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.openchannel.realtime.view.applications",{url:"/applications",templateUrl:"app/channels/openchannel/realtime/view/application/application.html",controller:"OpenChannelRealtimeViewApplicationCtrl"})}]),angular.module("xCallyShuttleApp").controller("OpenChannelRealtimeViewCtrl",["$scope","$state",function(a,b){a.agents=[{name:"Queues",link:"main.channels.openchannel.realtime.view.agents.queues"},{name:"Timeline",link:"main.channels.openchannel.realtime.view.agents.timeline"}],a.sessions=[{name:"Sessions",link:"main.channels.openchannel.realtime.view.sessions"}],a.tree={queues:[{name:"Queues",link:"main.channels.openchannel.realtime.view.agents.queues"},{name:"Timeline",link:"main.channels.openchannel.realtime.view.agents.timeline"}],sessions:[{name:"Sessions",link:"main.channels.openchannel.realtime.view.sessions"}]}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.openchannel.realtime.view",{url:"/view",templateUrl:"app/channels/openchannel/realtime/view/view.html",controller:"OpenChannelRealtimeViewCtrl"})}]),angular.module("xCallyShuttleApp").factory("ReportOpenChannelSession",["$resource",function(a){return a("/api/report/openchannel/sessions/:id/:controller/:controller2",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.realtime",{url:"/realtime",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:12}}})}]),angular.module("xCallyShuttleApp").controller("RealtimeViewAgentCtrl",["$scope","$log","$uibModal","$translate","socket","xAlert","Agent","Pause","Action","usSpinnerService","$q","uiGridConstants","$timeout",function(a,b,c,d,e,f,g,h,i,j,k,l,m){function n(b){return j.spin("grid-spinner"),g.get(q).$promise.then(function(b){a.gridOptions.totalItems=b.count,a.gridOptions.data=b.rows})["catch"](function(a){f.error(a)})["finally"](function(){b&&m(function(){o()}),j.stop("grid-spinner")})}function o(){e.socket.on("agent:save",function(b){var c=_.find(a.gridOptions.data,{id:b.id});c&&_.merge(c,b)}),e.socket.on("agent:remove",function(b){_.remove(a.gridOptions.data,{id:b.id})})}function p(){return h.get().$promise.then(function(b){a.pauses=b.rows,e.syncUpdates("pause",a.pauses)})["catch"](function(a){f.error(a)})}var q={controller:"realtime",offset:0,limit:10};a.moment=moment,a.initAgents=function(){a.gridOptions={enableGridMenu:!0,headerCellFilter:"translate",enableHorizontalScrollbar:0,enableVerticalScrollbar:0,enableFiltering:!0,showGridFooter:!0,paginationPageSizes:[10,25,50,75],paginationPageSize:10,useExternalPagination:!0,useExternalSorting:!0,useExternalFiltering:!0,showTreeExpandNoChildren:!0,columnDefs:[{name:"name",displayName:"APPLICATION_AGENT",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{row.entity.name}} <{{row.entity.internal}}></div>"},{name:"online",displayName:"APPLICATION_ONLINE",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div data-ng-if="row.entity.online != null"><i class="fa" data-ng-class="{\'font-green\':row.entity.online, \'font-red\':!row.entity.online,\'fa-user\':row.entity.online,\'fa-user-times\':!row.entity.online}"></i> <span data-ng-if="row.entity.online" class="left-margin">(<css-timer start-time="row.entity.lastLoginAt"></css-timer>)</span></div>',filter:{type:l.filter.SELECT,selectOptions:[{value:"true",label:"ONLINE"},{value:"false",label:"OFFLINE"}]}},{name:"pauseStatus",displayName:"APPLICATION_PAUSE",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div><span class="left-margin"><i data-ng-if="row.entity.voicePause || row.entity.mailPause || row.entity.chatPause || row.entity.faxPause || row.entity.smsPause" data-ng-click="grid.appScope.pause(row.entity.id,\'unpause\',null,null)" class="fa fa-play font-green pointer-cursor" title="{{\'APPLICATION_RESUME\' | translate}}"></i> <i class="fa fa-pause font-yellow pointer-cursor" data-ng-click="grid.appScope.pause(row.entity.id,\'pause\',\'DEFAULT PAUSE\')" title="{{\'APPLICATION_DEFAULT_PAUSE\' | translate}}"></i></span><select data-ng-if="grid.appScope.pauses.length" class="pause-select pointer-cursor" data-ng-model="grid.appScope.pauseType" data-ng-change="grid.appScope.pause(row.entity.id,\'pause\',grid.appScope.pauseType)"><option class="pointer-cursor" data-ng-repeat="pause in grid.appScope.pauses">{{pause.name}}</option></select><span data-ng-if="row.entity.voicePause || row.entity.mailPause || row.entity.chatPause || row.entity.faxPause || row.entity.smsPause"> [{{row.entity.pauseType}}][<css-timer start-time="row.entity.lastPauseAt"></css-timer>]</span></div>'},{name:"voicePause",displayName:"APPLICATION_VOICE",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div data-ng-if="row.entity.online" data-ng-class="{\'paused-agent\':row.entity.voicePause}"><span class="left-margin"><i data-ng-if="row.entity.voicePause" data-ng-click="grid.appScope.pause(row.entity.id,\'unpause\',null,\'voice\')" class="fa fa-play font-green pointer-cursor" title="{{\'APPLICATION_RESUME\' | translate}}"></i></span></div>',filter:{type:l.filter.SELECT,selectOptions:[{value:"true",label:d.instant("APPLICATION_PAUSED")},{value:"connect",label:d.instant("APPLICATION_NOT_PAUSED")}]},enableSorting:!1,enableColumnMenu:!1},{name:"mailPause",displayName:"APPLICATION_MAIL",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div data-ng-if="row.entity.online" data-ng-class="{\'paused-agent\':row.entity.mailPause}"><span class="left-margin"><i data-ng-if="row.entity.mailPause" data-ng-click="grid.appScope.pause(row.entity.id,\'unpause\',null,\'mail\')" class="fa fa-play font-green pointer-cursor" title="{{\'APPLICATION_RESUME\' | translate}}"></i></span></div>',filter:{type:l.filter.SELECT,selectOptions:[{value:"true",label:d.instant("APPLICATION_PAUSED")},{value:"connect",label:d.instant("APPLICATION_NOT_PAUSED")}]},enableSorting:!1,enableColumnMenu:!1},{name:"chatPause",displayName:"APPLICATION_CHAT",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div data-ng-if="row.entity.online" data-ng-class="{\'paused-agent\':row.entity.chatPause}"><span class="left-margin"><i data-ng-if="row.entity.chatPause" data-ng-click="grid.appScope.pause(row.entity.id,\'unpause\',null,\'chat\')" class="fa fa-play font-green pointer-cursor" title="{{\'APPLICATION_RESUME\' | translate}}"></i></span></div>',filter:{type:l.filter.SELECT,selectOptions:[{value:"true",label:d.instant("APPLICATION_PAUSED")},{value:"connect",label:d.instant("APPLICATION_NOT_PAUSED")}]},enableSorting:!1,enableColumnMenu:!1},{name:"faxPause",displayName:"APPLICATION_FAX",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div data-ng-if="row.entity.online" data-ng-class="{\'paused-agent\':row.entity.faxPause}"><span class="left-margin"><i data-ng-if="row.entity.faxPause" data-ng-click="grid.appScope.pause(row.entity.id,\'unpause\',null,\'fax\')" class="fa fa-play font-green pointer-cursor" title="{{\'APPLICATION_RESUME\' | translate}}"></i></span></div>',filter:{type:l.filter.SELECT,selectOptions:[{value:"true",label:d.instant("APPLICATION_PAUSED")},{value:"connect",label:d.instant("APPLICATION_NOT_PAUSED")}]},enableSorting:!1,enableColumnMenu:!1},{name:"smsPause",displayName:"APPLICATION_SMS",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div data-ng-if="row.entity.online" data-ng-class="{\'paused-agent\':row.entity.smsPause}"><span class="left-margin"><i data-ng-if="row.entity.smsPause" data-ng-click="grid.appScope.pause(row.entity.id,\'unpause\',null,\'sms\')" class="fa fa-play font-green pointer-cursor" title="{{\'APPLICATION_RESUME\' | translate}}"></i></span></div>',filter:{type:l.filter.SELECT,selectOptions:[{value:"true",label:d.instant("APPLICATION_PAUSED")},{value:"connect",label:d.instant("APPLICATION_NOT_PAUSED")}]},enableSorting:!1,enableColumnMenu:!1}],data:[],gridMenuTitleFilter:function(a){var b=k.defer();return b.resolve(d.instant(a)),b.promise},onRegisterApi:function(b){a.gridApi=b,a.gridApi.grid.registerDataChangeCallback(function(){r(a.gridApi.core.getVisibleRows(a.gridApi.grid).length)}),a.gridApi.core.on.sortChanged(a,function(a,b){0===b.length?q.order=null:q.order=b[0].name+" "+b[0].sort.direction.toUpperCase(),n()}),a.gridApi.pagination.on.paginationChanged(a,function(a,b){q.offset=(a-1)*b,q.limit=b,n()}),a.gridApi.core.on.filterChanged(a,function(){var a=this.grid;a.columns.forEach(function(a){a.filters[0].term?q[a.name]=a.filters[0].term:delete q[a.name]}),n()})}},n(!0),p()};var r=function(a){var b=a?30*a+130:270;angular.element(document.getElementsByClassName("ui-grid")[0]).css("height",b+"px"),angular.element(document.getElementsByClassName("ui-grid-viewport")).css("height",30*a+"px")};a.$on("$destroy",function(){e.unsyncUpdates("agent")}),a.pause=function(b,c,e,g){return e&&(a.pauseType=null),i.save({name:c,agent:b,type:e||"DEFAULT PAUSE",data4:e||"DEFAULT PAUSE",channel:g||"all"}).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){f.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.realtime.view.agents",{url:"/agents",templateUrl:"app/channels/realtime/view/agent/agent.html",controller:"RealtimeViewAgentCtrl"})}]),angular.module("xCallyShuttleApp").controller("RealtimeViewAgentInfoModalCtrl",["$scope","$uibModalInstance","$http","agent",function(a,b,c,d){a.agent=d,a.close=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("RealtimeViewAgentQueueModalCtrl",["$scope","$uibModalInstance","$http","queues",function(a,b,c,d){a.queues=d,a.item={},a.save=function(){b.close(a.item)},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("RealtimeViewCtrl",["$scope",function(a){}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.realtime.view",{url:"/view",templateUrl:"app/channels/realtime/view/view.html",controller:"RealtimeViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]}])}]}})}]),angular.module("xCallyShuttleApp").factory("ReportCall",["$resource",function(a){return a("/api/report/calls/:id/:controller",{name:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("ReportDial",["$resource",function(a){return a("/api/report/dials/:id/:controller/:controller2",{name:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("SmsAccount",["$resource",function(a){return a("/api/sms/accounts/:accountId/:controller/:id",{id:"@accountId"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.sms.accounts",{url:"/accounts",template:"<div ui-view></div>",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:42}}})}]),angular.module("xCallyShuttleApp").controller("SmsAccountListCtrl",["$scope","SmsAccount","gridOptions","$stateParams","xAlert","$translate",function(a,b,c,d,e,f){a.message="Hello",a.initView=function(){var e={exporterCsvFilename:"sms_accounts.csv",columnDefs:[{name:"id",displayName:"ID",cellClass:"text-center",width:75,enableSorting:!1,enableFiltering:!1},{name:"name"},{name:"description"},{name:"type",displayName:"APPLICATION_ACCOUNT_TYPE"},{name:"action",width:100,buttons:[{"class":"blue-hoki",href:"/channels/sms/accounts/view/{{row.entity.id}}/settings",name:"profile"},{"class":"green-jungle",name:"check",onClick:"grid.appScope.checkAccount(row.entity.id)"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=c.gridOptions(b,e,a,{accountId:d.accountId})},a.checkAccount=function(a){return b.get({accountId:a,controller:"check"}).$promise.then(function(){e.show(f.instant("MESSAGE_ACCOUNT_VERIFIED"),"success")})["catch"](function(a){e.show(f.instant("MESSAGE_ACCOUNT_INVALID"),"danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.sms.accounts.list",{url:"/list",templateUrl:"app/channels/sms/account/list/list.html",controller:"SmsAccountListCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.sms.accounts.view.actions",{url:"/actions",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").factory("SmsApplication",["$resource",function(a){return a("/api/sms/applications/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("SmsAccountViewActionListCtrl",["$scope","gridOptions","SmsAccount","$http","$translate","$stateParams","xAlert",function(a,b,c,d,e,f,g){a.initActions=function(){var d={draggable:!0,exporterCsvFilename:"sms_applications.csv",enableSorting:!1,enableFiltering:!1,columnDefs:[{name:"app",cellClass:"text-center"},{name:"name",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div><span>{{row.entity.app == "queue" ? row.entity.SmsQueue.name : row.entity.User.name}}</span></div>'},{name:"timeout",cellClass:"text-center"},{name:"interval",displayName:"APPLICATION_TIME_INTERVAL",cellClass:"text-center",cellTemplate:"<div><span>{{row.entity.Interval ? row.entity.Interval.name : row.entity.interval}}</span></div>"},{name:"action",width:125,buttons:[{"class":"blue-hoki",href:"/channels/sms/accounts/view/{{row.entity.SmsAccountId}}/actions/view/{{row.entity.id}}",name:"profile"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.app, row.entity.id)"}]}]};a.gridOptions=b.gridOptions(c,d,a,{accountId:f.accountId,controller:"applications"})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.sms.accounts.view.actions.list",{url:"/list",templateUrl:"app/channels/sms/account/view/action/list/list.html",controller:"SmsAccountViewActionListCtrl"})}]),angular.module("xCallyShuttleApp").controller("SmsAccountViewActionViewCtrl",["$scope","$http","$stateParams","$translate","$location","xAlert","WizardHandler","socket","application","interval","Agent","Interval","SmsQueue","SmsAccount","Template","MailAccount","SmsApplication",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){a.isActive=!0,a.size="small",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.initAction=function(){return a.$application=i.application,a.$stateParams=c,a.$interval=j.interval,a.forms={},a.apps=[{name:"Queue",value:"queue"},{name:"Agent",value:"agent"},{name:"SendMail",value:"sendMail"},{name:"SendSMS",value:"sendSms"}],q.get({id:c.actionId}).$promise.then(function(b){if(a.application=b,a.application.alwaysTime=!1,a.application.IntervalId)a.application.intType="list";else switch(a.application.interval){case"*,*,*,*":a.application.intType="always"; +break;default:a.application.intType="custom"}if("always"===a.application.intType||"custom"===a.application.intType){var c=a.application.interval.split(",");"*"===c[0]?a.application.alwaysTime=!0:(a.application.t_from=moment(new Date),a.application.t_to=moment(new Date),a.application.t_from.hour(c[0].split("-")[0].split(":")[0]),a.application.t_from.minute(c[0].split("-")[0].split(":")[1]),a.application.t_to.hour(c[0].split("-")[1].split(":")[0]),a.application.t_to.minute(c[0].split("-")[1].split(":")[1])),"*"===c[1]?(a.application.wd_from="always",a.application.wd_to="always"):(a.application.wd_from=c[1].split("-")[0],a.application.wd_to=c[1].split("-")[1]),"*"===c[2]?(a.application.md_from="always",a.application.md_to="always"):(a.application.md_from=c[2].split("-")[0],a.application.md_to=c[2].split("-")[1]),"*"===c[3]?(a.application.m_from="always",a.application.m_to="always"):(a.application.m_from=c[3].split("-")[0],a.application.m_to=c[3].split("-")[1])}a.$watch("application.t_from",function(b){a.application.t_from_hm=moment(b).format("HH:mm")}),a.$watch("application.t_to",function(b){a.application.t_to_hm=moment(b).format("HH:mm")})})["catch"](function(a){f.error(a)})},a.getQueues=function(){return m.get().$promise.then(function(b){a.queues=b.rows})["catch"](function(a){console.error(a)})},a.getAgents=function(){return k.get().$promise.then(function(b){a.agents=b.rows})["catch"](function(a){console.error(a)})},a.getIntervals=function(){return l.get().$promise.then(function(b){a.intervals=b.rows})["catch"](function(a){console.error(a)})},a.getTemplates=function(){return o.get().$promise.then(function(b){a.templates=b.rows})["catch"](function(a){console.error(a)})},a.getMailAccounts=function(){return p.get().$promise.then(function(b){a.mailAccounts=b.rows})["catch"](function(a){console.error(a)})},a.getSmsAccounts=function(){return n.get().$promise.then(function(b){a.smsAccounts=b.rows})["catch"](function(a){console.error(a)})},a.updateItem=function(){switch(a.application.intType){case"always":a.application.interval="*,*,*,*",a.application.IntervalId=null;break;case"list":var b=_.find(a.intervals,{id:a.application.IntervalId});a.application.interval=b?"":"*,*,*,*",a.application.IntervalId=b?a.application.IntervalId:null;break;case"custom":var g,h,i,j,k;g=a.application.t_from&&a.application.t_to&&!a.application.alwaysTime?moment(a.application.t_from).format("HH:mm")+"-"+moment(a.application.t_to).format("HH:mm"):"*",a.application.wd_from&&"always"!==a.application.wd_from?(h=a.application.wd_from,a.application.wd_to&&"always"!==a.application.wd_to&&(h+="-"+a.application.wd_to)):h="*",a.application.md_from&&"always"!==a.application.md_from?(i=a.application.md_from,a.application.md_to&&"always"!==a.application.md_to&&(i+="-"+a.application.md_to)):i="*",a.application.m_from&&"always"!==a.application.m_from?(j=a.application.m_from,a.application.m_to&&"always"!==a.application.m_to&&(j+="-"+a.application.m_to)):j="*",k=g+","+h+","+i+","+j,a.application.interval=k,a.application.IntervalId=null}return n.update({accountId:c.accountId,controller:"applications",id:c.actionId},a.application).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success"),e.path("/channels/sms/accounts/view/"+c.accountId+"/actions/list")})["catch"](function(a){f.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.sms.accounts.view.actions.view",{url:"/view/:actionId",templateUrl:"app/channels/sms/account/view/action/view/view.html",controller:"SmsAccountViewActionViewCtrl"})}]),angular.module("xCallyShuttleApp").controller("SmsAccountViewActionWizardCtrl",["$scope","$http","Agent","SmsQueue","Interval","$stateParams","$translate","$location","xAlert","WizardHandler","socket","application","interval","SmsAccount","Template","MailAccount",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){a.isActive=!0,a.size="small",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.initWizard=function(){a.apps=[{name:"Queue",value:"queue"},{name:"Agent",value:"agent"},{name:"SendMail",value:"sendMail"},{name:"SendSMS",value:"sendSms"}],a.$application=l.application,a.$stateParams=f,a.$interval=m.interval,a.forms={},a.application={alwaysTime:!0},a.$watch("application.t_from",function(b){a.application.t_from_hm=moment(b).format("HH:mm")}),a.$watch("application.t_to",function(b){a.application.t_to_hm=moment(b).format("HH:mm")})},a.getQueues=function(){return d.get().$promise.then(function(b){console.log(b),a.queues=b.rows})["catch"](function(a){console.error(a)})},a.getAgents=function(){return c.get().$promise.then(function(b){a.agents=b.rows})["catch"](function(a){console.error(a)})},a.getIntervals=function(){return e.get().$promise.then(function(b){a.intervals=b.rows})["catch"](function(a){console.error(a)})},a.getTemplates=function(){return o.get().$promise.then(function(b){a.templates=b.rows})["catch"](function(a){console.error(a)})},a.getMailAccounts=function(){return p.get().$promise.then(function(b){a.mailAccounts=b.rows})["catch"](function(a){console.error(a)})},a.getSmsAccounts=function(){return n.get().$promise.then(function(b){a.smsAccounts=b.rows})["catch"](function(a){console.error(a)})},a.createItem=function(){switch(a.application.intType){case"always":a.application.interval="*,*,*,*",a.application.IntervalId=null;break;case"list":var b=_.find(a.intervals,{id:a.application.IntervalId});a.application.interval=b?"":"*,*,*,*",a.application.IntervalId=b?a.application.IntervalId:null;break;case"custom":var c,d,e,j,k;c=a.application.t_from&&a.application.t_to&&!a.application.alwaysTime?moment(a.application.t_from).format("HH:mm")+"-"+moment(a.application.t_to).format("HH:mm"):"*",a.application.wd_from&&"always"!==a.application.wd_from?(d=a.application.wd_from,a.application.wd_to&&"always"!==a.application.wd_to&&(d+="-"+a.application.wd_to)):d="*",a.application.md_from&&"always"!==a.application.md_from?(e=a.application.md_from,a.application.md_to&&"always"!==a.application.md_to&&(e+="-"+a.application.md_to)):e="*",a.application.m_from&&"always"!==a.application.m_from?(j=a.application.m_from,a.application.m_to&&"always"!==a.application.m_to&&(j+="-"+a.application.m_to)):j="*",k=c+","+d+","+e+","+j,a.application.interval=k,a.application.IntervalId=null}return n.save({accountId:f.accountId,controller:"applications"},a.application).$promise.then(function(){i.show(g.instant("MESSAGE_WELL_DONE"),"success"),h.path("/channels/sms/accounts/view/"+f.accountId+"/actions/list")})["catch"](function(a){i.error(a)})},a.formValidation=function(a){return a},a.next=function(){j.wizard().next()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.sms.accounts.view.actions.wizard",{url:"/wizard",templateUrl:"app/channels/sms/account/view/action/wizard/wizard.html",controller:"SmsAccountViewActionWizardCtrl"})}]),angular.module("xCallyShuttleApp").controller("SmsAccountApiViewCtrl",["$scope","SmsAccount","$http","$stateParams","clipboard","$translate","$location","xAlert",function(a,b,c,d,e,f,g,h){a.copyToClipboard=function(a){e.copyText(a),h.show(f.instant("MESSAGE_TEXT_COPIED_CLIPBOARD")+"!","success")},a.initView=function(){b.get({id:d.accountId}).$promise.then(function(b){a.account=b,a.deliveryurl=a.account.remote+"/api/sms/accounts/"+a.account.id+"/messageStatus",a.receiveurl=a.account.remote+"/api/sms/accounts/"+a.account.id+"/receive"})["catch"](function(a){h.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.sms.accounts.view.api",{url:"/api",controller:"SmsAccountApiViewCtrl",templateUrl:"app/channels/sms/account/view/api/view/view.html"})}]),angular.module("xCallyShuttleApp").factory("SmsDisposition",["$resource",function(a){return a("/api/sms/dispositions/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("SmsInboxViewModaDispositionAddCtrl",["$scope","$uibModalInstance","SmsAccount","id",function(a,b,c,d){a.ok=function(){return c.save({accountId:d,controller:"dispositions"},{name:a.name}).$promise.then(function(a){b.close(a)})},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("SmsAccountDispositionViewCtrl",["$scope","$stateParams","$uibModal","$translate","SmsAccount","xAlert",function(a,b,c,d,e,f){a.initView=function(){return e.get({accountId:b.accountId,controller:"dispositions"}).$promise.then(function(b){a.dispositions=b.rows})["catch"](function(a){console.error(a),f.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},a.updateDisposition=function(a,c){return e.update({accountId:b.accountId,controller:"dispositions",id:a},{name:c}).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE")+"!","success")})["catch"](function(a){console.error(a),f.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},a.deleteDisposition=function(c){return console.log("delete"),e.remove({accountId:b.accountId,controller:"dispositions",id:c}).$promise.then(function(){_.remove(a.dispositions,{id:c})})["catch"](function(a){console.error(a),f.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},a.addDisposition=function(){return c.open({animation:!0,templateUrl:"app/channels/sms/account/view/disposition/modal/add.modal.html",controller:"SmsInboxViewModaDispositionAddCtrl",resolve:{id:function(){return b.accountId}}}).result.then(function(b){b&&a.dispositions.push(b)})["catch"](function(a){console.error(a),f.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.sms.accounts.view.dispositions",{url:"/dispositions",controller:"SmsAccountDispositionViewCtrl",templateUrl:"app/channels/sms/account/view/disposition/view/view.html"})}]),angular.module("xCallyShuttleApp").controller("SmsAccountHooksViewCtrl",["$scope","SmsAccount","Pause","$http","$stateParams","clipboard","$translate","$location","xAlert",function(a,b,c,d,e,f,g,h,i){a.account={},a.isActive=!0,a.size="small",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.CONST_TIMEOUT=3e4,a.initView=function(){a.types=[{value:"",name:"-- None --"},{name:"HTTP GET",value:"GET"},{name:"HTTP POST",value:"POST"}],c.get().$promise.then(function(b){a.pauses=b.rows})["catch"](function(a){i.error(a)}),b.get({id:e.accountId}).$promise.then(function(b){a.account=b,a.account.actions.length<1&&a.account.actions.push({action:"pause",enabled:!1,type:null})})["catch"](function(a){i.error(a)})},a.resetActionData=function(a){a.type=null},a.updateItemSmsAccount=function(){return console.log(a.account),b.update({id:e.accountId},a.account).$promise.then(function(){i.show(g.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){i.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.sms.accounts.view.hooks",{url:"/hooks",controller:"SmsAccountHooksViewCtrl",templateUrl:"app/channels/sms/account/view/hooks/view/view.html"})}]),angular.module("xCallyShuttleApp").controller("SmsAccountSettingViewCtrl",["$scope","SmsAccount","Pause","$http","$stateParams","clipboard","$translate","$location","xAlert","List",function(a,b,c,d,e,f,g,h,i,j){a.isActive=!0,a.size="small",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.CONST_TIMEOUT=3e4,a.types=[{name:"HTTP GET",value:"GET"},{name:"HTTP POST",value:"POST"}],a.account={},a.initView=function(){j.get().$promise.then(function(b){a.lists=b.rows})["catch"](function(a){console.error(a)}),b.get({id:e.accountId}).$promise.then(function(b){a.account=b})["catch"](function(a){i.error(a)})},a.updateItemSmsAccount=function(){return b.update({id:e.accountId},a.account).$promise.then(function(){i.show(g.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){i.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.sms.accounts.view.settings",{url:"/settings",controller:"SmsAccountSettingViewCtrl",templateUrl:"app/channels/sms/account/view/setting/view/view.html"})}]),angular.module("xCallyShuttleApp").controller("SmsAccountViewCtrl",["$scope","SmsAccount","$http","$stateParams","clipboard","$translate","$location","xAlert","List",function(a,b,c,d,e,f,g,h,i){a.initView=function(){return a.account={},b.get({id:d.accountId}).$promise.then(function(b){a.account=b,console.log(b)})["catch"](function(a){h.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.sms.accounts.view",{url:"/view/:accountId",templateUrl:"app/channels/sms/account/view/view.html",controller:"SmsAccountViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]})}]}})}]),angular.module("xCallyShuttleApp").controller("SmsAccountWizardCtrl",["$scope","$http","$location","$translate","WizardHandler","xAlert","SmsAccount",function(a,b,c,d,e,f,g){a.isActive=!0,a.size="small",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.initWizard=function(){a.forms={},a.item={},a.item.remote=c.protocol()+"://"+location.host},a.goNext=function(){e.wizard().next()},a.formValidation=function(a){return a},a.createItem=function(){return console.log(a.item),g.save(a.item).$promise.then(function(){c.path("/channels/sms/accounts/list")})["catch"](function(a){f.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.sms.accounts.wizard",{url:"/wizard",templateUrl:"app/channels/sms/account/wizard/wizard.html",controller:"SmsAccountWizardCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.sms.inbox",{url:"/inbox",template:"<div ui-view></div>",data:{permissions:{only:["admin","user","agent"],redirectTo:"landing",id:44}}})}]),angular.module("xCallyShuttleApp").directive("smsRoom",["$cookieStore","$translate","$uibModal","$timeout","Tag","CannedAnswer","Auth","SmsAccount","SmsRoom","SmsMessage","xAlert","usSpinnerService","socket","$stateParams","$rootScope",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){return{restrict:"E",scope:{workspace:"=",index:"=",submit:"&onSubmit"},templateUrl:"app/channels/sms/inbox/room/room.directive.html",link:function(a){a.modelOptions={debounce:{"default":500,blur:250},getterSetter:!0},a.panelLeft=null,a.panelRight="col-md-12",a.togglePanelLeft=function(){a.panelLeft?(a.panelLeft=null,a.panelRight="col-md-12"):(a.panelLeft="col-md-6",a.panelRight="col-md-6")},a.form={disabled:!1,from:"",to:a.workspace.data&&a.workspace.data.to?a.workspace.data.to:"",body:""},m.socket.on("sms_message:save",function(b){return a.workspace.id&&b.SmsRoomId==a.workspace.id?j.get({id:b.id}).$promise.then(function(b){a.SmsRoom||(a.SmsRoom={SmsMessages:[]});var c=_.findIndex(a.SmsRoom.SmsMessages,{id:b.id});c>-1?_.merge(a.SmsRoom.SmsMessages[c],b):a.SmsRoom.SmsMessages.unshift(b),a.panelLeft="col-md-6",a.panelRight="col-md-6"})["catch"](function(a){console.error(a)}):void 0}),m.socket.on("sms_message:update",function(b){if(a.SmsRoom&&b.SmsRoomId==a.workspace.id){var c=_.find(a.SmsRoom.SmsMessages,{id:b.id});c&&_.merge(c,b)}}),m.socket.on("sms_room:save",function(b){a.SmsRoom&&b.id==a.workspace.id&&(a.SmsRoom.status=b.status,a.SmsRoom.disposition=b.disposition)}),a.closeRoom=function(b){return c.open({animation:!0,templateUrl:"app/channels/sms/inbox/view/view.status.modal.html",controller:"SmsInboxViewModalStatusCtrl",resolve:{closed:function(){return"CLOSED"===a.SmsRoom.status},accountId:function(){return a.SmsRoom.SmsAccountId}}}).result.then(function(a){var c={id:b,status:"CLOSED"};return a.disposition&&(c.disposition=a.disposition),i.update(c).$promise["catch"](function(a){k.error(a)})})},a.openRoom=function(a,b){var c=_.find(o.workspaces,{id:a,type:"smsRoom"});c?c.active=!0:o.workspaces.push({id:a,name:b,type:"smsRoom","class":"glyphicon glyphicon-comment",active:!0})},e.get().$promise.then(function(b){a.tags=_.map(b.rows,"name")})["catch"](function(a){console.error(a)}),h.get().$promise.then(function(b){a.smsAccounts=b.rows})["catch"](function(a){console.error(a)}),a.workspace.id?(a.panelLeft="col-md-6",a.panelRight="col-md-6",i.get({id:a.workspace.id}).$promise.then(function(b){a.SmsRoom=b,a.form.from=a.SmsRoom.SmsAccount.phone,a.form.to=a.SmsRoom.contact,a.form.tags=a.SmsRoom.tags})["catch"](function(a){console.error(a)})["finally"](function(){l.stop("spinner-grid"),a.form.disabled=!1})):l.stop("spinner-grid"),a.onSelect=function(){a.form.body+=a.modelOptions.selectedAnswer,delete a.modelOptions.selectedAnswer},a.onSelectAnswer=function(b){a.form.body+=b,a.selectedAnswer=""},a.getAnswers=function(a){return f.get({key:a}).$promise.then(function(a){return _.map(a.rows,"value")})},a.onChanged=function(){return i.patch({id:a.workspace.id},{tags:a.form.tags}).$promise["catch"](function(a){console.error(a)})},a.sendSMS=function(){l.spin("spinner-grid");var c=_.find(a.smsAccounts,{phone:a.form.from}),d={body:a.form.body,SmsRoomId:a.SmsRoom?a.SmsRoom.id:null};return"twilio"===c.type?(d.from=/^[\+][0-9]+$/.test(a.form.from)?a.form.from:"+"+a.form.from,d.to=/^[\+][0-9]+$/.test(a.form.to)?a.form.to:"+"+a.form.to):(d.from=/^[\+][0-9]+$/.test(a.form.from)?a.form.from.replace("+",""):a.form.from,d.to=/^[\+][0-9]+$/.test(a.form.to)?a.form.to.replace("+",""):a.form.to),c?h.save({accountId:c.id,controller:"send"},d).$promise.then(function(c){return k.show(b.instant("MESSAGE_WELL_DONE"),"success"),a.SmsRoom?a.SmsRoom:i.get({id:"messages",controller:c.id}).$promise}).then(function(b){b&&(a.form.body="",a.workspace.id=b.id,a.workspace.name=b.contact,a.SmsRoom=b,a.panelLeft="col-md-6",a.panelRight="col-md-6")})["catch"](function(a){k.error(a)})["finally"](function(){l.stop("spinner-grid")}):void console.log("Can not find account")}}}}]),angular.module("xCallyShuttleApp").controller("SmsInboxInfoModalCtrl",["$scope","$translate","$uibModalInstance","$stateParams","xAlert","data","uniqueId","ReportSquare",function(a,b,c,d,e,f,g,h){a.data=null,a.initInfo=function(){f&&(a.data=_.isEmpty(JSON.parse(f))?null:JSON.parse(f)),g&&h.get({controller:"show",uniqueid:g}).$promise.then(function(b){a.data={id:b.id,channel:b.channel,uniqueid:b.uniqueid,callerid:b.callerid,calleridname:b.calleridname,project_name:b.project_name,extension:b.extension}})["catch"](function(b){switch(b.status){case 404:a.data=null;break;default:e.error(b)}})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").directive("sms",["$rootScope","SmsMessage","List","xAlert","$translate","$uibModal",function(a,b,c,d,e,f){return{restrict:"E",scope:{smsMessage:"=message",accounttype:"=accounttype",listId:"="},templateUrl:"app/channels/sms/inbox/sms/sms.html",link:function(b){b.openContact=function(f){return b.listId?c.save({listId:b.listId,controller:"contacts"},{mobile:f}).$promise.then(function(b){var c=_.find(a.$root.workspaces,{contactID:b.id});c?c.active=!0:a.$root.workspaces.push({active:!0,"class":"icon-user",contactID:b.id,name:b.phone,type:"contact"})})["catch"](function(a){console.error(a)}):void d.show(e.instant("MESSAGE_NO_LIST_CONFIGURED"),"info")},b.info=function(a,b){f.open({animation:!0,templateUrl:"app/channels/sms/inbox/sms/info.modal.html",controller:"SmsInboxInfoModalCtrl",resolve:{data:function(){return b},uniqueId:function(){return a}}})}}}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.sms.inbox.view.account",{url:"/account/:id",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user","agent"],redirectTo:"landing",id:11}}})}]),angular.module("xCallyShuttleApp").controller("SmsInboxViewAccountListCtrl",["$scope","$rootScope","$uibModal","$translate","$stateParams","$state","Tag","usSpinnerService","socket","SmsAccount","SmsRoom","gridOptions","uiGridConstants","Auth","Modal","xAlert","uibButtonConfig","localStorageService",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r){a.initView=function(){q.activeClass="green-haze",a.id=[],a.isAdmin=n.isAdmin(),a.isAgent=n.isAgent(),a.uncheckable=!1,a.query={status:r.get("smsStatus")?r.get("smsStatus"):"NEW",tags:r.get("smsTags")?r.get("smsTags"):[]},a.$watch("query.status",function(){r.set("smsStatus",a.query.status),a.getPage()},!0),g.get().$promise.then(function(b){a.tags=_.map(b.rows,"name")})["catch"](function(a){console.error(a)}),a.gridOptions={exporterCsvFilename:"sms_rooms.csv",enableRowHeaderSelection:!0,paginationPageSizes:[10,25,50,75],paginationPageSize:10,enableFiltering:!0,enableSorting:!0,enableGridMenu:!1,flatEntityAccess:!0,showGridFooter:!0,fastWatch:!0,enableSelectAll:!0,enableHorizontalScrollbar:0,enableVerticalScrollbar:0,columnDefs:[{name:"lastEvent",displayName:"",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div> <span data-ng-class=\"{'icon-arrow-up font-green': row.entity.lastEvent === 'SENT', 'icon-arrow-up font-yellow': row.entity.lastEvent === 'SENDING', 'icon-arrow-down font-green': row.entity.lastEvent === 'RECEIVED', 'icon-close font-red': row.entity.lastEvent === 'FAILED', 'icon-question': !row.entity.lastEvent}\"> </span> </div>",width:30,enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1},{name:"tags",displayName:"",headerCellTemplate:'<i class="icon-tag" style="margin-top: 8px; margin-left: 8px;"></i>',cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div><i data-ng-class=\"row.entity.tags.length ? 'icon-tag' : ''\" title=\"{{row.entity.tags}}\"></i></div>",width:30,enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1},{name:"id",displayName:"Id",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div><span>#{{row.entity.id}}</span></div>",width:75,enableSorting:!1,enableFiltering:!0,enableColumnMenu:!1},{name:"contact",cellClass:"text-center"},{name:"disposition",cellClass:"text-center"},{name:"updatedAt",cellFilter:"date:'MM/dd/yyyy HH:mm'",width:120,enableSorting:!1,enableFiltering:!1,sort:{direction:m.DESC}},{name:"action",cellTemplate:'<div> <a class="btn btn-icon-only font-green" data-ng-click="grid.appScope.openRoom(row.entity.id, row.entity.contact)"><i class="glyphicon glyphicon-comment" aria-hidden="true"></i></a> <a class="btn btn-icon-only font-red" data-ng-show="grid.appScope.isAdmin" data-ng-click="grid.appScope.deleteItem(row.entity.id,row.entity.id)"><i class="fa fa-trash" aria-hidden="true"></i> </div>',enableSorting:!1,cellClass:"ui-grid-vcenter",width:90,enableFiltering:!1,enableColumnMenu:!1}],data:[],onRegisterApi:function(b){a.gridApi=b,a.gridApi.selection&&(a.gridApi.selection.on.rowSelectionChanged(a,function(b){b.isSelected?a.id.push(a.gridApi.grid.options.primaryKey?b.entity[a.gridApi.grid.options.primaryKey]:b.entity.id):_.pull(a.id,a.gridApi.grid.options.primaryKey?b.entity[a.gridApi.grid.options.primaryKey]:b.entity.id)}),a.gridApi.selection.on.rowSelectionChangedBatch(a,function(b){b[0].isSelected?a.id=_.union(a.id,_.map(b,a.gridApi.grid.options.primaryKey?"entity."+a.gridApi.grid.options.primaryKey:"entity.id")):_.map(b,a.gridApi.grid.options.primaryKey?"entity."+a.gridApi.grid.options.primaryKey:"entity.id").forEach(function(b){_.pull(a.id,b)})}))}},i.socket.on("sms_room:remove",function(b){_.remove(a.workspaces,{id:b.id,type:"smsRoom"}),_.remove(a.gridOptions.data,{id:b.id})}),a.getPage(a.query)},a.onChanged=function(){a.getPage(a.query)},a.tagItems=function(){return c.open({animation:!0,templateUrl:"app/channels/sms/inbox/view/view.tags.modal.html",controller:"SmsInboxViewModalTagCtrl",resolve:{id:function(){return a.id}}}).result.then(function(){a.gridApi.selection.clearSelectedRows(),a.id=[],a.getPage()})},a.disposeItems=function(){return c.open({animation:!0,templateUrl:"app/channels/sms/inbox/view/view.status.modal.html",controller:"SmsInboxViewModalStatusCtrl",resolve:{accountId:function(){return e.id}}}).result.then(function(b){return console.log(b,a.id),k.patch({id:a.id},b).$promise.then(function(){a.gridApi.selection.clearSelectedRows(),a.id=[]})["catch"](function(a){p.error(a)})})},a.openRoom=function(b,c){var d=_.find(a.workspaces,{id:b,type:"smsRoom"});return d?d.active=!0:a.workspaces.push({id:b,name:c,type:"smsRoom","class":"glyphicon glyphicon-comment",active:!0}),b&&"agent"===n.getCurrentUser().role&&"PENDING"!==a.query.status&&"CLOSED"!==a.query.status?k.patch({id:b},{status:"OPEN",openReason:"agent"}).$promise["catch"](function(a){console.error(a)}):void 0},a.getPage=function(b){h.spin("spinner-grid");var c={accountId:e.id,controller:"rooms"};return b&&_.merge(c,b),a.query&&_.merge(c,a.query),j.query(c).$promise.then(function(b){r.set("smsAccountId",e.id),a.gridOptions.data=b,i.socket.on("sms_room:save",function(b){if(console.log("data",b),console.log(b.SmsAccountId,e.id),b.SmsAccountId==e.id){var c=_.find(a.gridOptions.data,{id:b.id});c?c.status!==b.status?_.remove(a.gridOptions.data,{id:b.id}):_.merge(c,b):a.query.status===b.status&&a.gridOptions.data.push(b)}}),i.socket.on("sms_room:remove",function(b){_.remove(a.gridOptions.data,{id:b.id})})})["catch"](function(a){console.error(a)})["finally"](function(){h.stop("spinner-grid")})},a.deleteItem=o.confirm["delete"](function(b){var c={id:b};return console.log(c),k["delete"](c).$promise.then(function(){a.getPage(),p.show(d.instant("MESSAGE_WELL_DONE")+"!","success"),a.gridApi.selection.clearSelectedRows(),a.id=[]})["catch"](function(a){p.error(a)})}),a.deleteItems=o.confirm["delete"](function(){var b={ids:a.id};return k["delete"](b).$promise.then(function(){a.getPage(),p.show(d.instant("MESSAGE_WELL_DONE")+"!","success"),a.gridApi.selection.clearSelectedRows(),a.id=[]})["catch"](function(a){p.error(a)})})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.sms.inbox.view.account.list",{url:"/list",templateUrl:"app/channels/sms/inbox/view/account/list/list.html",controller:"SmsInboxViewAccountListCtrl",data:{permissions:{only:["admin","user","agent"],redirectTo:"landing",id:11}}})}]),angular.module("xCallyShuttleApp").controller("SmsInboxViewModalAgentCtrl",["$scope","$uibModalInstance","$translate","$stateParams","Agent","SmsRoom","xAlert","roomId",function(a,b,c,d,e,f,g,h){a.initModal=function(){a.agents=[],a.item={agents:[]},e.get().$promise.then(function(b){b.rows.forEach(function(b){a.agents.push(b)})})["catch"](function(a){console.error(a)}),f.query({id:h,controller:"agents"}).$promise.then(function(b){b.forEach(function(b){a.agents.push(b),a.item.agents.push(b.id)})})["catch"](function(a){console.error(a)}),a.modal={dismissable:!0,title:"APPLICATION_MESSAGE_SEND_RETRY",text:"MESSAGE_MESSAGE_SEND_RETRY",buttons:[{classes:"btn btn-success",text:"APPLICATION_RETRY",click:function(a){b.close(a)}},{classes:"btn default",text:"APPLICATION_CANCEL",click:function(a){b.dismiss(a)}}]}},a.ok=function(){return f.update({id:h,controller:"agents",agents:a.item.agents}).$promise.then(function(){g.show(c.instant("MESSAGE_WELL_DONE"),"success"),b.close()})["catch"](function(a){console.error(a)})},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("SmsInboxViewCtrl",["$scope","$location","$stateParams","$translate","$uibModal","socket","Auth","xAlert","SmsRoom","SmsAccount","localStorageService",function(a,b,c,d,e,f,g,h,i,j,k){a.initView=function(){return j.get().$promise.then(function(c){var d=null;a.smsAccounts=c.rows,a.smsAccounts.length&&(d="/channels/sms/inbox/view/account/"+(k.get("smsAccountId")||a.smsAccounts[0].id)+"/list"),d&&b.path(d)})["catch"](function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.sms.inbox.view",{url:"/view",templateUrl:"app/channels/sms/inbox/view/view.html",controller:"SmsInboxViewCtrl",reload:!0,resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/inbox.css"]}])}]}})}]),angular.module("xCallyShuttleApp").controller("SmsInboxViewModalStatusCtrl",["$scope","$uibModalInstance","SmsAccount","accountId",function(a,b,c,d){a.modal={title:"APPLICATION_CONFIRM_CLOSE",text:"MESSAGE_ARE_YOU_SURE_YOU_WANT_TO_CLOSE_THE_SMS"},a.initDisposition=function(){return a.item={status:"CLOSED"},c.get({accountId:d,controller:"dispositions"}).$promise.then(function(b){a.dispositions=b.rows})["catch"](function(a){console.error(a)})},a.ok=function(){b.close(a.item)},a.cancel=function(){b.dismiss()}}]),angular.module("xCallyShuttleApp").controller("SmsInboxViewModalTagCtrl",["$scope","$uibModalInstance","$translate","$stateParams","Tag","SmsRoom","xAlert","id",function(a,b,c,d,e,f,g,h){console.log(h),a.initModal=function(){return a.tags=[],a.item={tags:[]},a.modal={dismissable:!0,title:"APPLICATION_MESSAGE_SEND_RETRY",text:"MESSAGE_MESSAGE_SEND_RETRY",buttons:[{"class":"btn-success",text:"APPLICATION_TAG",click:function(){var d={status:!0};return f.patch({id:h},{tags:a.item.tags}).$promise.then(function(){g.show(c.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(){d.status=!1,g.show(c.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})["finally"](function(){b.close(d)})}},{"class":"default",text:"APPLICATION_CANCEL",click:function(a){b.dismiss(a)}}]},e.get().$promise.then(function(b){a.tags=_.map(b.rows,"name")})["catch"](function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").controller("SmsInboxViewModalTemplateCtrl",["$scope","$uibModalInstance","Template",function(a,b,c){a.initModal=function(){return a.item={},c.get().$promise.then(function(b){a.templates=b.rows})["catch"](function(a){console.error(a)})},a.ok=function(){b.close(a.item)},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("SmsQueueListCtrl",["$scope","SmsQueue","gridOptions","$uibModal","xAlert","Auth",function(a,b,c,d,e,f){a.initView=function(){a.Auth=f;var d={exporterCsvFilename:"voice_queues.csv",columnDefs:[{name:"name"},{name:"description"},{name:"timeout"},{name:"strategy"},{name:"action",width:100,buttons:[{"class":"blue-hoki",href:"/channels/sms/queues/view/{{row.entity.id}}/settings",name:"settings"},{"class":"green-meadow",href:"/channels/sms/queues/view/{{row.entity.id}}/agents",name:"agents",hide:"user"===f.getCurrentUser().role},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=c.gridOptions(b,d,a)},a.createItem=function(){var b=d.open({animation:!0,templateUrl:"app/channels/sms/queue/list/list.create.modal.html",controller:"SmsQueueListCreateCtrl",size:"lg"});b.result.then(function(b){console.log(b),a.gridOptions.getPage()})}}]),angular.module("xCallyShuttleApp").controller("SmsQueueListCreateCtrl",["$scope","$uibModalInstance","$translate","xAlert","SmsQueue","Team","strategies",function(a,b,c,d,e,f,g){a.form={},a.strategies=g,a.item={penalty:0,agents:[]},a.getTeams=function(){return f.get({controller:"associations"}).$promise.then(function(b){a.teams=b.rows}).then(function(){ComponentsDropdowns.bindQueue(a.teams,[],function(){return{select:function(b){a.item.agents=_.union(a.item.agents,b)},deselect:function(b){a.item.agents=_.difference(a.item.agents,b)}}})})["catch"](function(a){console.error(a)})},a.save=function(){return console.log(a.item),e.save(a.item).$promise.then(function(a){b.close(a)})["catch"](function(a){d.error(a)})},a.cancel=function(){b.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.sms.queues.list",{url:"/list",templateUrl:"app/channels/sms/queue/list/list.html",controller:"SmsQueueListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load({ +insertBefore:"#ng_load_plugins_before",files:["assets/plugins/jquery-multi-select/css/multi-select.css","assets/plugins/jquery-multi-select/js/jquery.multi-select.js","assets/plugins/jquery-quicksearch/jquery.quicksearch.js","assets/scripts/components-dropdowns.js"]})}]}})}]),angular.module("xCallyShuttleApp").factory("SmsQueue",["$resource",function(a){return a("/api/sms/queues/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.sms.queues",{url:"/queues",template:"<div ui-view></div>",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:43}}})}]),angular.module("xCallyShuttleApp").controller("SmsQueueViewCtrl",["$scope","$http","Auth","$translate","$stateParams","xAlert","Team","SmsQueue","strategies",function(a,b,c,d,e,f,g,h,i){a.strategies=i,a.Auth=c;var j=function(){return{select:function(b){return h.save({id:a.queue.id,controller:"agents"},{agents:b,penalty:a.queue.penalty}).$promise.then(function(b){console.log("sel",b),a.getTeams()})["catch"](function(a){console.error(a)})},deselect:function(b){return h["delete"]({id:a.queue.id,controller:"agents",agents:b}).$promise.then(function(b){console.log("desel",b),a.getTeams()})["catch"](function(a){console.error(a)})}}};a.getQueue=function(){return h.get({id:e.id}).$promise.then(function(b){b.penalty=0,a.queue=b})["catch"](function(a){console.error(a)})},a.updateSmsQueue=function(){return h.update({id:e.id},{name:a.queue.name,description:a.queue.description,timeout:a.queue.timeout,strategy:a.queue.strategy}).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){f.error(a)})},a.getTeams=function(){return g.get({controller:"associations"}).$promise.then(function(b){return a.teams=b.rows,console.log(b.rows),h.get({id:e.id,controller:"agents"}).$promise}).then(function(b){console.log(b),ComponentsDropdowns.bindSmsQueue(a.teams,_.map(b.rows,function(a){return{id:a.id,penalty:a.UserHasSmsQueue.penalty}}),j)})["catch"](function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.sms.queues.view",{url:"/view/:id",templateUrl:"app/channels/sms/queue/view/view.html",controller:"SmsQueueViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.channels.sms.queues.view.settings",{url:"/settings",templateUrl:"app/channels/sms/queue/view/view.settings.html"}).state("main.channels.sms.queues.view.agents",{url:"/agents",templateUrl:"app/channels/sms/queue/view/view.agents.html",cache:!1,serie:!0,resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/jquery-multi-select/css/multi-select.css","assets/plugins/jquery-multi-select/js/jquery.multi-select.js","assets/plugins/jquery-quicksearch/jquery.quicksearch.js","assets/scripts/components-dropdowns.js"]})}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.sms.realtime",{url:"/realtime",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:45}}})}]),angular.module("xCallyShuttleApp").controller("SmsRealtimeViewAgentCtrl",["$scope","$log","$uibModal","$translate","socket","xAlert","Agent","Pause","Action","SmsQueue","usSpinnerService","$q","uiGridConstants",function(a,b,c,d,e,f,g,h,i,j,k,l,m){function n(){return k.spin("grid-spinner"),g.get(s).$promise.then(function(b){a.gridOptions.totalItems=b.count,a.gridOptions.data=[],b.rows.forEach(function(a){p(a)})})["catch"](function(a){f.error(a)})["finally"](function(){k.stop("grid-spinner")})}function o(){e.socket.on("agent:save",function(b){b=b.newValues||b;var c=_.find(a.gridOptions.data,{agentId:b.id,isAgent:!0});c&&(c.online=_.has(b,"online")?b.online:c.online,c.lastLoginAt=_.has(b,"lastLoginAt")?b.lastLoginAt:c.lastLoginAt,c.pause=_.has(b,"smsPause")?b.smsPause:c.smsPause,c.pauseType=_.has(b,"pauseType")?b.pauseType:c.pauseType,c.lastPauseAt=_.has(b,"lastPauseAt")?b.lastPauseAt:c.lastPauseAt,c.ipaddr=_.has(b,"ipaddr")?b.ipaddr:c.ipaddr,c.port=_.has(b,"port")?b.port:c.port,c.fullcontact=_.has(b,"fullcontact")?b.fullcontact:c.fullcontact,c.useragent=_.has(b,"useragent")?b.useragent:c.useragent,c.lastms=_.has(b,"lastms")?b.lastms:c.lastms,c.internal=_.has(b,"internal")?b.internal:c.internal,_.map(a.gridOptions.data,function(a){a.isAgent||a.agentId!==b.id||(a.online=_.has(b,"online")?b.online:a.online)}))}),e.socket.on("agent:remove",function(b){_.remove(a.gridOptions.data,{agentId:b.id})}),e.socket.on("user_has_sms_queue:save",function(b){console.log("new queue",b);var c=_.find(a.gridOptions.data,{agentId:b.UserId,isAgent:!0}),d=a.gridOptions.data.indexOf(c);a.gridOptions.data.splice(d+1,0,{isAgent:!1,agentId:b.UserId,queue:b.queue,queueId:b.SmsQueueId,agent:b.membername,online:c.online})}),e.socket.on("user_has_sms_queue:remove",function(b){_.remove(a.gridOptions.data,{agentId:b.UserId,queueId:b.SmsQueueId})})}function p(b){a.gridOptions.data.push({isAgent:!0,agentId:b.id,agent:b.name,online:b.online,lastLoginAt:b.lastLoginAt,lastPauseAt:b.lastPauseAt,pause:b.smsPause,pauseType:b.pauseType,ipaddr:b.ipaddr,port:b.port,fullcontact:b.fullcontact,useragent:b.useragent,lastms:b.lastms,internal:b.internal,$$treeLevel:0}),b.SmsQueues.forEach(function(c){a.gridOptions.data.push({isAgent:!1,agentId:b.id,queue:c.name,queueId:c.id,agent:b.name,online:b.online})})}function q(){return h.get().$promise.then(function(b){a.pauses=b.rows,e.syncUpdates("pause",a.pauses)})["catch"](function(a){f.error(a)})}function r(){return j.get().$promise.then(function(b){a.smsQueues=b.rows,e.syncUpdates("sms_queue",a.smsQueues)})["catch"](function(a){f.error(a)})}a.smsQueues=[];var s={controller:"realtime",controller1:"sms",offset:0,limit:10};a.moment=moment,a.initAgents=function(){a.gridOptions={enableGridMenu:!0,headerCellFilter:"translate",enableHorizontalScrollbar:0,enableVerticalScrollbar:0,enableFiltering:!0,showGridFooter:!0,paginationPageSizes:[10,25,50,75],paginationPageSize:10,useExternalPagination:!0,useExternalSorting:!0,useExternalFiltering:!0,multiSelect:!0,showTreeExpandNoChildren:!0,columnDefs:[{name:"name",displayName:"APPLICATION_AGENT",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div data-ng-if="row.entity.isAgent">{{row.entity.agent}} <{{row.entity.internal}}></div>'},{name:"online",displayName:"APPLICATION_ONLINE",width:150,headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div data-ng-if="row.entity.online != null && row.entity.isAgent"><i class="fa" data-ng-class="{\'font-green\':row.entity.online, \'font-red\':!row.entity.online,\'fa-user\':row.entity.online,\'fa-user-times\':!row.entity.online}"></i> <span data-ng-if="row.entity.online" class="left-margin">(<css-timer start-time="row.entity.lastLoginAt"></css-timer>)</span></div>',filter:{type:m.filter.SELECT,selectOptions:[{value:"true",label:"ONLINE"},{value:"false",label:"OFFLINE"}]}},{name:"smsPause",displayName:"APPLICATION_PAUSE",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div data-ng-if="row.entity.pause != null && row.entity.online" class="ui-grid-vcenter" data-ng-class="{\'paused-agent\':row.entity.pause}"><i data-ng-if="row.entity.pause" data-ng-click="grid.appScope.pause(row.entity.agentId,\'unpause\')" class="fa fa-play font-green pointer-cursor left-margin" title="{{\'APPLICATION_RESUME\' | translate}}"></i><i class="fa fa-pause font-yellow pointer-cursor" data-ng-click="grid.appScope.pause(row.entity.agentId,\'pause\',\'DEFAULT PAUSE\')" title="{{\'APPLICATION_DEFAULT_PAUSE\' | translate}}"></i><select data-ng-if="grid.appScope.pauses.length" class="pause-select pointer-cursor" data-ng-model="grid.appScope.pauseType" data-ng-change="grid.appScope.pause(row.entity.agentId,\'pause\',grid.appScope.pauseType)"><option class="pointer-cursor" data-ng-repeat="pause in grid.appScope.pauses">{{pause.name}}</option></select> <span data-ng-if="row.entity.pause" class="left-margin">({{row.entity.pauseType}})</span><span class="left-margin"><css-timer data-ng-if="row.entity.pause" start-time="row.entity.lastPauseAt"></css-timer></span></div>',filter:{type:m.filter.SELECT,selectOptions:[{value:"true",label:"PAUSED"},{value:"false",label:"NOT PAUSED"}]},enableSorting:!1,enableColumnMenu:!1},{name:"queue",displayName:"APPLICATION_QUEUE",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1},{name:"action",displayName:"",width:170,cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div><button data-ng-if="row.entity.queueId" class="btn btn-xs red-sunglo" data-ng-click="grid.appScope.leaveQueue(row.entity.agentId,row.entity.queueId)"><i class="icon-ban"></i> {{\'APPLICATION_LEAVE\' | translate}}</button><button data-ng-if="row.entity.isAgent && row.treeNode.children.length < grid.appScope.smsQueues.length" class="btn btn-xs blue-hoki" data-ng-click="grid.appScope.joinQueue(row.entity.agentId)"><i class="icon-plus"></i> {{\'APPLICATION_JOIN_QUEUE\' | translate}}</button><div>',enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1}],data:[],gridMenuTitleFilter:function(a){var b=l.defer();return b.resolve(d.instant(a)),b.promise},onRegisterApi:function(b){a.gridApi=b,a.gridApi.grid.registerDataChangeCallback(function(){t(a.gridApi.core.getVisibleRows(a.gridApi.grid).length)}),a.gridApi.treeBase.on.rowExpanded(a,function(b){t(a.gridApi.core.getVisibleRows(a.gridApi.grid).length+b.treeNode.children.length)}),a.gridApi.treeBase.on.rowCollapsed(a,function(b){t(a.gridApi.core.getVisibleRows(a.gridApi.grid).length-b.treeNode.children.length)}),a.gridApi.core.on.sortChanged(a,function(a,b){0===b.length?s.order=null:s.order=b[0].name+" "+b[0].sort.direction.toUpperCase(),n()}),a.gridApi.pagination.on.paginationChanged(a,function(a,b){s.offset=(a-1)*b,s.limit=b,n()}),a.gridApi.core.on.filterChanged(a,function(){var a=this.grid;a.columns.forEach(function(a){a.filters[0].term?s[a.name]=a.filters[0].term:delete s[a.name]}),n()})}},n(),q(),r(),$timeout(function(){o()})};var t=function(a){var b=a?30*a+130:270;angular.element(document.getElementsByClassName("ui-grid")[0]).css("height",b+"px"),angular.element(document.getElementsByClassName("ui-grid-viewport")).css("height",30*a+"px")};a.$on("$destroy",function(){e.unsyncUpdates("agent"),e.unsyncUpdates("user_has_sms_queue")}),a.pause=function(b,c,e){return e&&(a.pauseType=null),i.save({name:c,agent:b,type:e||"DEFAULT PAUSE",data4:e||"DEFAULT PAUSE",channel:"sms"}).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){f.error(a)})},a.joinQueue=function(e){var g=c.open({animation:!0,templateUrl:"app/channels/sms/realtime/view/agent/queue.modal.add.html",controller:"SmsRealtimeViewAgentQueueModalCtrl",resolve:{queues:function(){return _.reject(a.smsQueues,function(b){return!!_.find(a.gridOptions.data,{queue:b.name,isAgent:!1,agentId:e})})}}});g.result.then(function(b){return i.save({name:"QueueAdd",agent:e,queues:_.filter(a.smsQueues,function(a){return _.includes(b.queues,a.id)}),channel:"sms",data1:e,data3:b.queues.join(","),data4:"sms"}).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){f.error(a)})},function(){b.info("Modal dismissed at: "+new Date)})},a.leaveQueue=function(a,b){return i.save({name:"QueueRemove",agent:a,queueId:b,channel:"sms",data1:a,data3:b,data4:"sms"}).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){f.error(a)})},a.showInfo=function(a){c.open({animation:!0,templateUrl:"app/channels/sms/realtime/view/agent/agent.modal.info.html",controller:"SmsRealtimeViewAgentInfoModalCtrl",resolve:{agent:a}})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.sms.realtime.view.agents",{url:"/agents",templateUrl:"app/channels/sms/realtime/view/agent/agent.html",controller:"SmsRealtimeViewAgentCtrl"})}]),angular.module("xCallyShuttleApp").controller("SmsRealtimeViewAgentInfoModalCtrl",["$scope","$uibModalInstance","$http","agent",function(a,b,c,d){a.agent=d,a.close=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("SmsRealtimeViewAgentQueueModalCtrl",["$scope","$uibModalInstance","$http","queues",function(a,b,c,d){a.queues=d,a.item={},a.save=function(){b.close(a.item)},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("SmsRealtimeViewApplicationCtrl",["$scope","$log","$uibModal","$translate","socket","xAlert","ReportSmsSession","usSpinnerService","$q","uiGridConstants","$timeout",function(a,b,c,d,e,f,g,h,i,j,k){function l(){return h.spin("spinner-grid"),g.get({controller:"waiting",controller2:"applications"}).$promise.then(function(b){a.gridOptions.data=b.rows})["catch"](function(a){f.error(a)})["finally"](function(){m(),h.stop("spinner-grid")})}function m(){e.socket.on("report_sms_session:save",function(b){var c=_.find(a.gridOptions.data,{id:b.id});c?(_.merge(c,b),b.leaveAt&&k(function(){_.remove(a.gridOptions.data,{id:b.id})},1e4)):b.leaveAt||a.gridOptions.data.push(b)}),e.socket.on("report_sms_session:remove",function(b){_.remove(a.gridOptions.data,{id:b.id})})}a.moment=moment,a.initApplications=function(){a.gridOptions={headerCellFilter:"translate",enableHorizontalScrollbar:0,enableVerticalScrollbar:0,enableFiltering:!0,columnDefs:[{name:"uniqueid",displayName:"APPLICATION_UNIQUEID",headerCellFilter:"translate"},{name:"accountname",displayName:"APPLICATION_ACCOUNT",headerCellFilter:"translate"},{name:"application",displayName:"APPLICATION_APPLICATION",headerCellFilter:"translate"},{name:"status",displayName:"APPLICATION_STATUS",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div><span data-ng-if="!row.entity.leaveAt">{{\'APPLICATION_QUEUESTATUS_WAITING\' | translate}}</span><span data-ng-if="row.entity.leaveAt && row.entity.complete">{{\'APPLICATION_QUEUESTATUS_COMPLETE\' | translate}}</span><span data-ng-if="row.entity.leaveAt && row.entity.timeout">{{\'APPLICATION_TIMEOUT\' | translate}}</span> <span data-ng-if="!row.entity.leaveAt">[<css-timer start-time="row.entity.updatedAt"></css-timer>]</span></div>',enableSorting:!1,enableColumnMenu:!1,enableFiltering:!1},{name:"membername",displayName:"APPLICATION_AGENT",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{row.entity.membername || ''}}</span></div>"},{name:"queuename",displayName:"APPLICATION_QUEUE",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{row.entity.queuename || ''}}</span></div>"}],data:[],gridMenuTitleFilter:function(a){var b=i.defer();return b.resolve(d.instant(a)),b.promise},onRegisterApi:function(b){a.gridApi=b,a.gridApi.grid.registerDataChangeCallback(function(){n(a.gridOptions.data.length)})}},l()};var n=function(a){var b=a?30*a+60:270;angular.element(document.getElementsByClassName("ui-grid")[0]).css("height",b+"px"),angular.element(document.getElementsByClassName("ui-grid-viewport")).css("height",30*a+"px")};a.$on("$destroy",function(){e.unsyncUpdates("report_sms_session")})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.sms.realtime.view.applications",{url:"/applications",templateUrl:"app/channels/sms/realtime/view/application/application.html",controller:"SmsRealtimeViewApplicationCtrl"})}]),angular.module("xCallyShuttleApp").controller("SmsRealtimeViewCtrl",["$scope","$state",function(a,b){a.agents=[{name:"Queues",link:"main.channels.sms.realtime.view.agents.queues"},{name:"Timeline",link:"main.channels.sms.realtime.view.agents.timeline"}],a.sessions=[{name:"Sessions",link:"main.channels.sms.realtime.view.sessions"}],a.tree={queues:[{name:"Queues",link:"main.channels.sms.realtime.view.agents.queues"},{name:"Timeline",link:"main.channels.sms.realtime.view.agents.timeline"}],sessions:[{name:"Sessions",link:"main.channels.sms.realtime.view.sessions"}]}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.sms.realtime.view",{url:"/view",templateUrl:"app/channels/sms/realtime/view/view.html",controller:"SmsRealtimeViewCtrl"})}]),angular.module("xCallyShuttleApp").factory("ReportSmsSession",["$resource",function(a){return a("/api/report/sms/sessions/:id/:controller/:controller2",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.sms",{url:"/sms",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user","agent"],redirectTo:"landing",id:11}}})}]),angular.module("xCallyShuttleApp").factory("SmsQueue",["$resource",function(a){return a("/api/sms/queues/:id/:controller",{name:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("SmsReport",["$resource",function(a){return a("/api/report/sms/:id/:controller1/:controller2",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("SmsMessage",["$resource",function(a){return a("/api/sms/messages/:id/:controller",{id:"@id",controller:"@controller"},{update:{method:"PUT"},patch:{method:"PATCH"}})}]),angular.module("xCallyShuttleApp").factory("SmsRoom",["$resource",function(a){return a("/api/sms/rooms/:id/:controller",{id:"@id",controller:"@controller"},{update:{method:"PUT"},patch:{method:"PATCH"}})}]),angular.module("xCallyShuttleApp").factory("ChanSpy",["$resource",function(a){return a("/api/chanspy/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.chanspy",{url:"/chanspy",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:27}}})}]),angular.module("xCallyShuttleApp").controller("ChanSpyListCtrl",["$scope","$uibModal","ChanSpy","gridOptions",function(a,b,c,d){a.initView=function(){var b={exporterCsvFilename:"chanspy.csv",columnDefs:[{name:"name"},{name:"prefix"},{name:"description"},{name:"action",width:75,buttons:[{"class":"blue-hoki",href:"/channels/voice/chanspy/view/{{row.entity.id}}/settings",name:"settings"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=d.gridOptions(c,b,a)},a.createItem=function(){var c=b.open({animation:!0,templateUrl:"app/channels/voice/chanspy/list/list.create.modal.html",controller:"ChanSpyListCreateCtrl"});c.result.then(function(b){a.gridOptions.getPage()})}}]),angular.module("xCallyShuttleApp").controller("ChanSpyListCreateCtrl",["$scope","$translate","$uibModalInstance","ChanSpy","xAlert",function(a,b,c,d,e){a.form={},a.item={},a.recordSwitch={onText:"On",offText:"Off",isActive:!0,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.options=[{name:"APPLICATION_CHANSPY_OPTION_b",value:"b"},{name:"APPLICATION_CHANSPY_OPTION_B",value:"B"},{name:"APPLICATION_CHANSPY_OPTION_E",value:"E"},{name:"APPLICATION_CHANSPY_OPTION_o",value:"o"},{name:"APPLICATION_CHANSPY_OPTION_q",value:"q"},{name:"APPLICATION_CHANSPY_OPTION_s",value:"s"},{name:"APPLICATION_CHANSPY_OPTION_S",value:"S"},{name:"APPLICATION_CHANSPY_OPTION_w",value:"w"},{name:"APPLICATION_CHANSPY_OPTION_W",value:"W"}],a.save=function(){return a.item.options=a.item.options.join(""),d.save(a.item).$promise.then(function(a){e.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)})["catch"](function(a){e.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.chanspy.list",{url:"/list",templateUrl:"app/channels/voice/chanspy/list/list.html",controller:"ChanSpyListCtrl"})}]),angular.module("xCallyShuttleApp").controller("ChanSpyViewCtrl",["$scope","$translate","$stateParams","xAlert","ChanSpy",function(a,b,c,d,e){a.recordSwitch={onText:"On",offText:"Off",isActive:!0,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.options=[{name:"APPLICATION_CHANSPY_OPTION_b",value:"b"},{name:"APPLICATION_CHANSPY_OPTION_B",value:"B"},{name:"APPLICATION_CHANSPY_OPTION_E",value:"E"},{name:"APPLICATION_CHANSPY_OPTION_o",value:"o"},{name:"APPLICATION_CHANSPY_OPTION_q",value:"q"},{name:"APPLICATION_CHANSPY_OPTION_s",value:"s"},{name:"APPLICATION_CHANSPY_OPTION_S",value:"S"},{name:"APPLICATION_CHANSPY_OPTION_w",value:"w"},{name:"APPLICATION_CHANSPY_OPTION_W",value:"W"}],a.getChanSpy=function(){return e.get({id:c.id}).$promise.then(function(b){b.options=b.options.split(""),a.chanspy=b})["catch"](function(a){d.error(a)})},a.updateChanSpy=function(){var f=angular.copy(a.chanspy);return f.options=f.options.join(""),e.update({id:c.id},f).$promise.then(function(){d.show(b.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){d.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.chanspy.view",{url:"/view/:id",templateUrl:"app/channels/voice/chanspy/view/view.html",controller:"ChanSpyViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.channels.voice.chanspy.view.settings",{url:"/settings",templateUrl:"app/channels/voice/chanspy/view/view.settings.html"})}]),angular.module("xCallyShuttleApp").factory("VoiceContext",["$resource",function(a){return a("/api/voice/contexts/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.contexts",{url:"/contexts",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:22}}})}]),angular.module("xCallyShuttleApp").controller("VoiceContextListCtrl",["$scope","VoiceContext","gridOptions","$uibModal","xAlert","$translate",function(a,b,c,d,e,f){a.initView=function(){var d={exporterCsvFilename:"voice_contexts.csv",columnDefs:[{name:"name"},{name:"description"},{name:"action",width:75,buttons:[{"class":"{{row.entity.defaultEntry ? 'blue-hoki disabled' : 'blue-hoki'}}",href:"/channels/voice/contexts/view/{{row.entity.id}}/settings",name:"settings"},{"class":"{{row.entity.defaultEntry ? 'red-sunglo disabled' : 'red-sunglo'}}",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=c.gridOptions(b,d,a)},a.createItem=function(){var c=d.open({animation:!0,templateUrl:"app/channels/voice/context/list/create.modal.html",controller:["$scope","$uibModalInstance",function(a,b){a.form={},a.item={},a.ok=function(){b.close(a.item)},a.cancel=function(){b.dismiss("cancel")}}]});c.result.then(function(c){return b.save(c).$promise.then(function(){a.gridOptions.getPage(),e.show(f.instant("MESSAGE_WELL_DONE")+"!","success")})["catch"](function(a){e.error(a)})})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.contexts.list",{url:"/list",templateUrl:"app/channels/voice/context/list/list.html",controller:"VoiceContextListCtrl"})}]),angular.module("xCallyShuttleApp").controller("VoiceContextViewCtrl",["$scope","$http","xAlert","$translate","$stateParams","$location",function(a,b,c,d,e,f){a.getContext=function(){b.get("/api/voice/contexts/"+e.id).success(function(b){a.context=b}).error(function(a){console.error(a),f.path("/voice/contexts/list")})},a.updateVoiceContext=function(){var f=angular.copy(a.context);b.put("/api/voice/contexts/"+e.id,f).success(function(){c.show(d.instant("MESSAGE_WELL_DONE")+"!","success")}).error(function(b){c.error(b),a.context=f})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.contexts.view",{url:"/view/:id",templateUrl:"app/channels/voice/context/view/view.html",controller:"VoiceContextViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.channels.voice.contexts.view.settings",{url:"/settings",templateUrl:"app/channels/voice/context/view/view.settings.html"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.dispositions",{url:"/dispositions",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:28}}})}]),angular.module("xCallyShuttleApp").controller("VoiceDispositionListCtrl",["$scope","$stateParams","$uibModal","$translate","VoiceDisposition","xAlert",function(a,b,c,d,e,f){a.initView=function(){return e.get().$promise.then(function(b){a.dispositions=b.rows})["catch"](function(a){console.error(a),f.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},a.updateDisposition=function(a,b){return e.update({id:a},{name:b}).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE")+"!","success")})["catch"](function(a){console.error(a),f.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},a.deleteDisposition=function(b){return e.remove({id:b}).$promise.then(function(){_.remove(a.dispositions,{id:b}),f.show(d.instant("MESSAGE_WELL_DONE")+"!","success")})["catch"](function(a){console.error(a),f.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},a.addDisposition=function(){return c.open({animation:!0,templateUrl:"app/channels/voice/disposition/list/modal/add.modal.html",controller:"VoiceDispositionListModalDispositionAddCtrl"}).result.then(function(b){b&&(a.dispositions.push(b),f.show(d.instant("MESSAGE_WELL_DONE")+"!","success"))})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.dispositions.list",{url:"/list",templateUrl:"app/channels/voice/disposition/list/list.html",controller:"VoiceDispositionListCtrl"})}]),angular.module("xCallyShuttleApp").controller("VoiceDispositionListModalDispositionAddCtrl",["$scope","$uibModalInstance","VoiceDisposition","xAlert","$translate",function(a,b,c,d,e){a.ok=function(){return c.save({name:a.name}).$promise.then(function(a){b.close(a)})["catch"](function(a){d.show(e.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").factory("VoiceDisposition",["$resource",function(a){return a("/api/voice/dispositions/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("VoiceMohListCtrl",["$scope","gridOptions","VoiceMoh","$uibModal","xAlert","$translate",function(a,b,c,d,e,f){a.initView=function(){var d={exporterCsvFilename:"voice_mohs.csv",columnDefs:[{name:"name"},{name:"directory"},{name:"sort"},{name:"description"},{name:"action",width:75,buttons:[{"class":"blue-hoki",href:"/channels/voice/mohs/view/{{row.entity.id}}/settings",name:"settings"},{"class":"{{row.entity.defaultEntry ? 'red-sunglo disabled' : 'red-sunglo'}}",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=b.gridOptions(c,d,a)},a.createItem=function(){var b=d.open({animation:!0,templateUrl:"app/channels/voice/moh/list/create.modal.html",controller:["$scope","$uibModalInstance",function(a,b){a.form={},a.item={},a.ok=function(){b.close(a.item)},a.cancel=function(){b.dismiss("cancel")}}]});b.result.then(function(b){return c.save(b).$promise.then(function(){a.gridOptions.getPage(),e.show(f.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){e.error(a)})})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.mohs.list",{url:"/list",templateUrl:"app/channels/voice/moh/list/list.html",controller:"VoiceMohListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"smart-table",insertBefore:"#ng_load_plugins_before",files:["assets/css/smart_table.css"]}])}]}})}]),angular.module("xCallyShuttleApp").factory("VoiceMoh",["$resource",function(a){return a("/api/voice/musiconholds/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.mohs",{url:"/mohs",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:24}}})}]),angular.module("xCallyShuttleApp").controller("VoiceMohViewCtrl",["$scope","$http","xAlert","$translate","VoiceMoh","$stateParams","socket","Modal","$sce","$location","Sound",function(a,b,c,d,e,f,g,h,i,j,k){a.$translate=d,a.audioSources={},a.sortOptions=[{value:"random",name:"APPLICATION_RANDOM"},{value:"alpha",name:"APPLICATION_ALPHABETICAL"}],a.getMoh=function(){return e.get({id:f.id}).$promise.then(function(b){delete b.stamp,a.moh=b})["catch"](function(a){c.error(a)})},a.updateVoiceMoh=function(){return console.log("update"),e.update({id:f.id},a.moh).$promise.then(function(){c.show(d.instant("MESSAGE_WELL_DONE")+"!","success")})["catch"](function(a){c.error(a)})},a.addMohs=function(){return e.save({id:f.id,controller:"files"},a.item).$promise.then(function(){j.path("/channels/voice/mohs/view/"+f.id+"/audios")})["catch"](function(a){c.error(a)})},a.getAudioFiles=function(){return e.get({id:f.id,controller:"files"}).$promise.then(function(b){a.audioFiles=b.files,a.mohPath=b.path,a.audioFiles.forEach(function(a){l(a)})})["catch"](function(a){c.error(a)})},a.getSecureSrc=function(a){return i.trustAsResourceUrl(a)},a.getSounds=function(){return a.item={sounds:[]},k.get().$promise.then(function(b){a.soundList=b.rows})["catch"](function(a){c.error(a)})};var l=function(c){b.get("/api/voice/musiconholds/stream",{params:{path:encodeURI(a.mohPath+"/"+c)}}).success(function(b){a.audioSources[c]="data:audio/ogg;base64,"+b}).error(function(a){console.error(a)})};a.deleteItem=h.confirm["delete"](function(e){b["delete"]("/api/voice/musiconholds/"+f.id+"/files",{params:{filename:e}}).success(function(){_.remove(a.audioFiles,function(a){return a===e}),c.show(d.instant("MESSAGE_WELL_DONE")+"!","success")}).error(function(a){c.error(a)})})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.mohs.view",{url:"/view/:id",templateUrl:"app/channels/voice/moh/view/view.html",controller:"VoiceMohViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.channels.voice.mohs.view.settings",{url:"/settings",templateUrl:"app/channels/voice/moh/view/view.settings.html"}).state("main.channels.voice.mohs.view.audios",{url:"/audios",templateUrl:"app/channels/voice/moh/view/view.audios.html",cache:!1}).state("main.channels.voice.mohs.view.add",{url:"/add",templateUrl:"app/channels/voice/moh/view/view.addFiles.html",cache:!1})}]),angular.module("xCallyShuttleApp").controller("VoiceQueueListCtrl",["$scope","$rootScope","$uibModal","VoiceQueue","gridOptions","Auth",function(a,b,c,d,e,f){a.initView=function(){a.Auth=f;var b={exporterCsvFilename:"voice_queues.csv",primaryKey:"name",columnDefs:[{name:"name"},{name:"strategy"},{name:"description"},{name:"action",width:100,buttons:[{"class":"blue-hoki",href:"/channels/voice/queues/view/{{row.entity.name}}/settings",name:"settings"},{"class":"green-meadow",href:"/channels/voice/queues/view/{{row.entity.name}}/agents",name:"agents",hide:"user"===f.getCurrentUser().role},{ +"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.name)"}]}]};a.gridOptions=e.gridOptions(d,b,a)},a.createItem=function(){var b=c.open({animation:!0,templateUrl:"app/channels/voice/queue/list/list.create.modal.html",controller:"VoiceQueueListCreateCtrl",size:"lg"});b.result.then(function(){a.gridOptions.getPage()})}}]),angular.module("xCallyShuttleApp").controller("VoiceQueueListCreateCtrl",["$scope","$uibModalInstance","$translate","xAlert","VoiceQueue","Team",function(a,b,c,d,e,f){a.form={},a.item={penalty:0,agents:[]},a.getTeams=function(){return f.get({controller:"associations"}).$promise.then(function(b){a.teams=b.rows}).then(function(){ComponentsDropdowns.bindQueue(a.teams,[],function(){return{select:function(b){a.item.agents=_.union(a.item.agents,b),console.log(a.item.agents)},deselect:function(b){a.item.agents=_.difference(a.item.agents,b),console.log(a.item.agents)}}})})["catch"](function(a){console.error(a)})},a.save=function(){return e.save(a.item).$promise.then(function(a){d.show(c.instant("MESSAGE_WELL_DONE"),"success"),b.close(a)})["catch"](function(a){d.error(a)})},a.cancel=function(){b.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.queues.list",{url:"/list",templateUrl:"app/channels/voice/queue/list/list.html",controller:"VoiceQueueListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/jquery-multi-select/css/multi-select.css","assets/plugins/jquery-multi-select/js/jquery.multi-select.js","assets/plugins/jquery-quicksearch/jquery.quicksearch.js","assets/scripts/components-dropdowns.js"]})}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.queues",{url:"/queues",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin"],redirectTo:"landing"}}})}]),angular.module("xCallyShuttleApp").factory("ReportQueue",["$resource",function(a){return a("/api/report/queues/:id/:controller/:controller2",{name:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("UserHasVoiceQueue",["$resource",function(a){return a("/api/voice/user_has_queues/:controller",{name:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("VoiceQueueViewCtrl",["$scope","xAlert","$translate","$stateParams","socket","$location","VoiceQueue","VoiceContext","Team","Auth","VoiceMoh","Sound","Setting",function(a,b,c,d,e,f,g,h,i,j,k,l,m){a.penalty=0,a.Auth=j,a.binaryChoices=[{name:"Yes",value:1},{name:"No",value:0}],a.recordSwitch={onText:"On",offText:"Off",isActive:!0,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.autoPauseValues=[{name:"No",value:"no"},{name:"Yes",value:"all"}],a.monitorFormats=[{name:"wav",value:"wav"},{name:"gsm",value:"gsm"},{name:"Inactive",value:""}],a.queueAnnounces=[{display_name:"Default",path:null},{display_name:"Disabled",path:""}];var n=function(){return{select:function(b){return g.save({id:a.queue.name,controller:"agents"},{agents:b,penalty:a.queue.penalty}).$promise.then(function(){a.getTeams()})["catch"](function(a){console.log(a)})},deselect:function(b){return g["delete"]({id:a.queue.name,controller:"agents",agents:b}).$promise.then(function(){a.getTeams()})["catch"](function(a){console.log(a)})}}};a.getQueue=function(){return g.get({id:d.id}).$promise.then(function(b){b.joinempty=""===b.joinempty?[]:b.joinempty.split(","),b.leavewhenempty=""===b.leavewhenempty?[]:b.leavewhenempty.split(","),b.periodic_announce=""===b.periodic_announce?[]:b.periodic_announce.split(","),b.setinterfacevar="yes"===b.setinterfacevar,b.setqueuevar="yes"===b.setqueuevar,b.setqueueentryvar="yes"===b.setqueueentryvar,b.penalty=0,a.queue=b})["catch"](function(a){f.path("/channels/voice/queues/list")})},a.updateVoiceQueue=function(){var e=angular.copy(a.queue);return e.joinempty=e.joinempty.join(","),e.leavewhenempty=e.leavewhenempty.join(","),e.periodic_announce=e.periodic_announce.join(","),e.setinterfacevar=e.setinterfacevar?"yes":"no",e.setqueuevar=e.setqueuevar?"yes":"no",e.setqueueentryvar=e.setqueueentryvar?"yes":"no",e.context||(e.context=null),g.update({id:d.id},e).$promise.then(function(){b.show(c.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){b.error(a)})},a.getTeams=function(){return i.get({controller:"associations"}).$promise.then(function(b){return a.teams=b.rows,g.get({id:d.id,controller:"agents"}).$promise}).then(function(b){ComponentsDropdowns.bindQueue(a.teams,_.map(b.rows,function(a){return{id:a.id,penalty:a.UserHasVoiceQueue.penalty}}),n)})["catch"](function(a){console.error(a)})},a.getContexts=function(){return h.get().$promise.then(function(b){a.voiceContexts=b.rows})["catch"](function(a){b.error(data)})},a.getMohs=function(){return k.get().$promise.then(function(b){a.voiceMohs=b.rows,e.syncUpdates("voice_musiconhold",a.voiceMohs)})["catch"](function(a){b.error(a)})},a.getSounds=function(){var b;return m.get({id:1}).$promise.then(function(a){return b=a,l.get().$promise}).then(function(c){var d=b.soundPath||"/var/opt/motion/server/files/sounds/converted";_.forEach(c.rows,function(a){a.path=(d+"/"+a.save_name).replace(/\/+/g,"/").replace(/\\+/g,"\\")}),a.queueAnnounces=a.queueAnnounces.concat(c.rows),a.periodicAnnounces=angular.copy(c.rows),c.rows.unshift({display_name:"None",path:""}),a.sounds=c.rows,e.syncUpdates("sound",a.sounds)})["catch"](function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.queues.view",{url:"/view/:id",templateUrl:"app/channels/voice/queue/view/view.html",controller:"VoiceQueueViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.channels.voice.queues.view.settings",{url:"/settings",templateUrl:"app/channels/voice/queue/view/view.settings.html"}).state("main.channels.voice.queues.view.agents",{url:"/agents",templateUrl:"app/channels/voice/queue/view/view.agents.html",cache:!1,serie:!0,resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/jquery-multi-select/css/multi-select.css","assets/plugins/jquery-multi-select/js/jquery.multi-select.js","assets/plugins/jquery-quicksearch/jquery.quicksearch.js","assets/scripts/components-dropdowns.js"]})}]}})}]),angular.module("xCallyShuttleApp").factory("VoiceQueue",["$resource",function(a){return a("/api/voice/queues/:id/:controller",{name:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.realtime",{url:"/realtime",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:26}}})}]),angular.module("xCallyShuttleApp").controller("VoiceRealtimeViewAbandonedCtrl",["$scope","$translate","socket","xAlert","ReportQueue","usSpinnerService","$q","Auth","uiGridConstants",function(a,b,c,d,e,f,g,h,i){function j(){return f.spin("spinner-grid"),e.get({controller:"abandoned",controller2:"all"}).$promise.then(function(b){a.gridOptions.data=b.rows})["catch"](function(a){d.error(a)})["finally"](function(){k(),f.stop("spinner-grid")})}function k(){c.socket.on("report_queue:update",function(b){b.queuecallerabandon&&a.gridOptions.data.unshift(b)})}a.radioSwitch={size:"mini",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"success",onColor:"danger"};a.initAbandoned=function(){a.agent=h.getCurrentUser(),a.gridOptions={exporterCsvFilename:"abandoned_calls.csv",enableRowHeaderSelection:!0,paginationPageSizes:[10,25,50,75],paginationPageSize:10,enableFiltering:!0,enableSorting:!0,enableGridMenu:!1,flatEntityAccess:!0,showGridFooter:!0,fastWatch:!0,enableSelectAll:!1,enableHorizontalScrollbar:0,enableVerticalScrollbar:1,columnDefs:[{name:"queue",displayName:"APPLICATION_QUEUE",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter"},{name:"calleridnum",displayName:"APPLICATION_CALLERIDNUM",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter"},{name:"updatedAt",displayName:"APPLICATION_DATE",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{row.entity.updatedAt | date:'yyyy-MM-dd HH:mm:ss'}}</div>"},{name:"lastAssignedTo",cellClass:"text-center ui-grid-vcenter",displayName:"APPLICATION_LAST_ASSIGNED_TO",headerCellFilter:"translate"},{name:"assigned",displayName:"APPLICATION_STATUS",headerCellFilter:"translate",cellTemplate:'<div class="centered-uigrid-td"><input data-ng-change="grid.appScope.updateItem(row.entity)", bs-switch ng-model="row.entity.assigned" type="checkbox" switch-active="{{ !row.entity.assigned || grid.appScope.agent.name === row.entity.lastAssignedTo }}" switch-on-text="{{ \'APPLICATION_ASSIGNED\' | translate }}" switch-off-text="{{ \'APPLICATION_FREE\' | translate }}" switch-on-color="{{ grid.appScope.radioSwitch.onColor }}" switch-off-color="{{ grid.appScope.radioSwitch.offColor }}" switch-animate="{{ grid.appScope.radioSwitch.animate }}" switch-size="{{ grid.appScope.radioSwitch.size }}" switch-label="{{ grid.appScope.radioSwitch.label }}" switch-icon="{{ grid.appScope.radioSwitch.icon }}" switch-radio-off="{{ grid.appScope.radioSwitch.radioOff }}" switch-label-width="{{ grid.appScope.radioSwitch.labelWidth }}" switch-handle-width="{{ grid.appScope.radioSwitch.handleWidth }}"></div>',enableFiltering:!1}],data:[],gridMenuTitleFilter:function(a){var c=g.defer();return c.resolve(b.instant(a)),c.promise},onRegisterApi:function(b){a.gridApi=b}},j()},a.updateItem=function(c){return e.update({id:c.id},{assigned:c.assigned,lastAssignedTo:c.assigned?a.agent.name:void 0}).$promise.then(function(){d.show(b.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){d.error(a)})};a.$on("$destroy",function(){c.unsyncUpdates("report_queue")})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.realtime.view.abandoned",{url:"/abandoned",templateUrl:"app/channels/voice/realtime/view/abandoned/abandoned.html",controller:"VoiceRealtimeViewAbandonedCtrl"})}]),angular.module("xCallyShuttleApp").controller("VoiceRealtimeViewAgentCtrl",["$scope","$log","$uibModal","$translate","socket","xAlert","Agent","Pause","Action","VoiceQueue","usSpinnerService","$q","uiGridConstants","Auth","$timeout",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){function p(){return k.spin("grid-spinner"),g.get(u).$promise.then(function(b){a.gridOptions.totalItems=b.count,a.gridOptions.data=[],b.rows.forEach(function(a){r(a)})})["catch"](function(a){f.error(a)})["finally"](function(){k.stop("grid-spinner")})}function q(){e.socket.on("agent:save",function(b){console.log(b),b=b.newValues||b;var c=_.find(a.gridOptions.data,{agentId:b.id,isAgent:!0});c&&(c.online=_.has(b,"online")?b.online:c.online,c.lastLoginAt=_.has(b,"lastLoginAt")?b.lastLoginAt:c.lastLoginAt,c.pause=_.has(b,"voicePause")?b.voicePause:c.pause,c.pauseType=_.has(b,"pauseType")?b.pauseType:c.pauseType,c.lastPauseAt=_.has(b,"lastPauseAt")?b.lastPauseAt:c.lastPauseAt,c.status=_.has(b,"status")?b.status:c.status,c.statusAt=_.has(b,"statusAt")?b.statusAt:c.statusAt,c.queueStatus=_.has(b,"queueStatus")?b.queueStatus:c.queueStatus,c.queueStatusAt=_.has(b,"queueStatusAt")?b.queueStatusAt:c.queueStatusAt,c.lastQueue=_.has(b,"lastQueue")?b.lastQueue:c.lastQueue,c.ipaddr=_.has(b,"ipaddr")?b.ipaddr:c.ipaddr,c.port=_.has(b,"port")?b.port:c.port,c.fullcontact=_.has(b,"fullcontact")?b.fullcontact:c.fullcontact,c.useragent=_.has(b,"useragent")?b.useragent:c.useragent,c.lastms=_.has(b,"lastms")?b.lastms:c.lastms,c.internal=_.has(b,"internal")?b.internal:c.internal,_.map(a.gridOptions.data,function(a){a.isAgent||a.agentId!==b.id||(a.online=_.has(b,"online")?b.online:a.online)}))}),e.socket.on("agent:remove",function(b){_.remove(a.gridOptions.data,{agentId:b.id})}),e.socket.on("user_has_voice_queue:save",function(b){var c=_.includes(_.map(a.CurrentUser.PVoiceQueues,"name"),b.queue)||n.isAdmin(),d=_.find(a.gridOptions.data,{agentId:b.UserId,queue:b.queue});if(!d&&b.logged&&c){var e=_.find(a.gridOptions.data,{agentId:b.UserId,isAgent:!0}),f=a.gridOptions.data.indexOf(e);a.gridOptions.data.splice(f+1,0,{isAgent:!1,agentId:b.UserId,queue:b.queue,agent:b.membername,callstaken:b.callstaken?b.callstaken:0,online:e.online})}else d&&!b.logged?_.remove(a.gridOptions.data,{agentId:b.UserId,queue:b.queue}):d&&b.logged&&c&&(d.callstaken=b.callstaken?b.callstaken:0)}),e.socket.on("user_has_voice_queue:remove",function(b){_.remove(a.gridOptions.data,{agentId:b.UserId,queue:b.queue})})}function r(b){a.gridOptions.data.push({isAgent:!0,agentId:b.id,agent:b.name,online:b.online,lastLoginAt:b.lastLoginAt,lastPauseAt:b.lastPauseAt,pause:b.voicePause,pauseType:b.pauseType,status:b.status||"UNKNOWN",statusAt:b.statusAt,queueStatus:b.queueStatus||"READY",queueStatusAt:b.queueStatusAt,lastQueue:b.lastQueue,ipaddr:b.ipaddr,port:b.port,fullcontact:b.fullcontact,useragent:b.useragent,lastms:b.lastms,internal:b.internal,$$treeLevel:0}),b.VoiceQueues.forEach(function(c){c.UserHasVoiceQueue.logged&&a.gridOptions.data.push({isAgent:!1,agentId:b.id,queue:c.name,agent:b.name,callstaken:c.UserHasVoiceQueue.callstaken?c.UserHasVoiceQueue.callstaken:0,online:b.online})})}function s(){return h.get().$promise.then(function(b){a.pauses=b.rows,e.syncUpdates("pause",a.pauses)})["catch"](function(a){f.error(a)})}function t(){return j.get().$promise.then(function(b){a.voiceQueues=b.rows,e.syncUpdates("voice_queue",a.voiceQueues)})["catch"](function(a){f.error(a)})}a.voiceQueues=[];var u={controller:"realtime",controller1:"voice",offset:0,limit:10};a.moment=moment,a.initAgents=function(){a.gridOptions={enableGridMenu:!0,headerCellFilter:"translate",enableHorizontalScrollbar:0,enableVerticalScrollbar:0,enableFiltering:!0,showGridFooter:!0,paginationPageSizes:[10,25,50,75],paginationPageSize:10,useExternalPagination:!0,useExternalSorting:!0,useExternalFiltering:!0,multiSelect:!0,showTreeExpandNoChildren:!0,columnDefs:[{name:"name",displayName:"APPLICATION_AGENT",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div data-ng-if="row.entity.isAgent">{{row.entity.agent}} <{{row.entity.internal}}></div>'},{name:"online",displayName:"APPLICATION_ONLINE",width:150,headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div data-ng-if="row.entity.online != null && row.entity.isAgent"><i class="fa" data-ng-class="{\'font-green\':row.entity.online, \'font-red\':!row.entity.online,\'fa-user\':row.entity.online,\'fa-user-times\':!row.entity.online}"></i> <span data-ng-if="row.entity.online" class="left-margin">(<css-timer start-time="row.entity.lastLoginAt"></css-timer>)</span></div>',filter:{type:m.filter.SELECT,selectOptions:[{value:"true",label:"ONLINE"},{value:"false",label:"OFFLINE"}]}},{name:"status",displayName:"APPLICATION_PHONE_STATUS",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div data-ng-if=\"row.entity.isAgent\">{{'APPLICATION_'+row.entity.status | translate}} <span data-ng-if=\"row.entity.statusAt && (row.entity.status === 'BUSY' || row.entity.status === 'ONHOLD' || row.entity.status === 'INUSE')\">(<css-timer start-time=\"row.entity.statusAt\"></css-timer>)</span></span></div>",filter:{type:m.filter.SELECT,selectOptions:[{value:"UNKNOWN",label:d.instant("APPLICATION_UNKNOWN")},{value:"NOT_INUSE",label:d.instant("APPLICATION_NOT_INUSE")},{value:"INUSE",label:d.instant("APPLICATION_INUSE")},{value:"BUSY",label:d.instant("APPLICATION_BUSY")},{value:"INVALID",label:d.instant("APPLICATION_INVALID")},{value:"UNAVAILABLE",label:d.instant("APPLICATION_UNAVAILABLE")},{value:"RINGING",label:d.instant("APPLICATION_RINGING")},{value:"RINGINUSE",label:d.instant("APPLICATION_RINGINUSE")},{value:"ONHOLD",label:d.instant("APPLICATION_ONHOLD")}]}},{name:"queueStatus",displayName:"APPLICATION_QUEUE_STATUS",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div data-ng-if="row.entity.isAgent && row.entity.online" class="ui-grid-vcenter" data-ng-class="{\'paused-agent\':row.entity.pause}"><span class="left-margin"><i data-ng-if="row.entity.pause" data-ng-click="grid.appScope.pause(row.entity.agentId,\'unpause\')" class="fa fa-play font-green pointer-cursor" title="{{\'APPLICATION_RESUME\' | translate}}"></i><i class="fa fa-pause font-yellow pointer-cursor" data-ng-click="grid.appScope.pause(row.entity.agentId,\'pause\',\'DEFAULT PAUSE\')" title="{{\'APPLICATION_DEFAULT_PAUSE\' | translate}}"></i></span><select data-ng-if="grid.appScope.pauses.length" class="pause-select pointer-cursor" data-ng-model="grid.appScope.pauseType" data-ng-change="grid.appScope.pause(row.entity.agentId,\'pause\',grid.appScope.pauseType)"><option class="pointer-cursor" data-ng-repeat="pause in grid.appScope.pauses">{{pause.name}}</option></select><span> {{\'APPLICATION_\'+row.entity.queueStatus.toUpperCase() | translate}}</span><span data-ng-if="(row.entity.queueStatus!==\'complete\' && (row.entity.queueStatus!==\'paused\' || row.entity.pauseType === \'ACW\'))"> [{{row.entity.lastQueue}}]</span><span data-ng-if="row.entity.pause"> [{{row.entity.pauseType}}]</span><span data-ng-if="row.entity.queueStatusAt && row.entity.queueStatus!==\'complete\'">[<css-timer start-time="row.entity.lastPauseAt"></css-timer>]</span></div>',filter:{type:m.filter.SELECT,selectOptions:[{value:"paused",label:d.instant("APPLICATION_PAUSED")},{value:"connect",label:d.instant("APPLICATION_CONNECT")},{value:"complete",label:d.instant("APPLICATION_COMPLETE")},{value:"called",label:d.instant("APPLICATION_CALLED")}]},enableSorting:!1,enableColumnMenu:!1},{name:"queue",displayName:"APPLICATION_QUEUE",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1},{name:"callstaken",displayName:"APPLICATION_CALLS_TAKEN",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div data-ng-if="row.entity.callstaken !== null">{{row.entity.callstaken}}</div>',enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1,width:100},{name:"action",displayName:"",width:170,cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div><button data-ng-if="row.entity.queue" class="btn btn-xs red-sunglo" data-ng-click="grid.appScope.leaveQueue(row.entity.agentId,row.entity.queue)"><i class="icon-ban"></i> {{\'APPLICATION_LEAVE\' | translate}}</button><button data-ng-if="row.entity.isAgent && row.treeNode.children.length < grid.appScope.voiceQueues.length" class="btn btn-xs blue-hoki" data-ng-click="grid.appScope.joinQueue(row.entity.agentId)"><i class="icon-plus"></i> {{\'APPLICATION_JOIN_QUEUE\' | translate}}</button> <button data-ng-if="row.entity.isAgent" class="btn btn-xs blue-madison" data-ng-click="grid.appScope.showInfo(row.entity)"><i class="icon-info"></i></button><div>',enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1}],data:[],gridMenuTitleFilter:function(a){var b=l.defer();return b.resolve(d.instant(a)),b.promise},onRegisterApi:function(b){a.gridApi=b,a.gridApi.grid.registerDataChangeCallback(function(){v(a.gridApi.core.getVisibleRows(a.gridApi.grid).length)}),a.gridApi.treeBase.on.rowExpanded(a,function(b){v(a.gridApi.core.getVisibleRows(a.gridApi.grid).length+b.treeNode.children.length)}),a.gridApi.treeBase.on.rowCollapsed(a,function(b){v(a.gridApi.core.getVisibleRows(a.gridApi.grid).length-b.treeNode.children.length)}),a.gridApi.core.on.sortChanged(a,function(a,b){0===b.length?u.order=null:u.order=b[0].name+" "+b[0].sort.direction.toUpperCase(),p()}),a.gridApi.pagination.on.paginationChanged(a,function(a,b){u.offset=(a-1)*b,u.limit=b,p()}),a.gridApi.core.on.filterChanged(a,function(){var a=this.grid;a.columns.forEach(function(a){a.filters[0].term?u[a.name]=a.filters[0].term:delete u[a.name]}),p()})}},p(),s(),t(),o(function(){q()})};var v=function(a){var b=a?30*a+130:270;angular.element(document.getElementsByClassName("ui-grid")[0]).css("height",b+"px"),angular.element(document.getElementsByClassName("ui-grid-viewport")).css("height",30*a+"px")};a.$on("$destroy",function(){e.unsyncUpdates("agent"),e.unsyncUpdates("user_has_voice_queue")}),a.pause=function(b,c,e){return e&&(a.pauseType=null),i.save({name:c,agent:b,type:e||"DEFAULT PAUSE",data4:e||"DEFAULT PAUSE",channel:"voice"}).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){f.error(a)})},a.joinQueue=function(e){var g=c.open({animation:!0,templateUrl:"app/channels/voice/realtime/view/agent/queue.modal.add.html",controller:"VoiceRealtimeViewAgentQueueModalCtrl",resolve:{queues:function(){return _.reject(a.voiceQueues,function(b){return!!_.find(a.gridOptions.data,{queue:b.name,isAgent:!1,agentId:e})})}}});g.result.then(function(a){return i.save({name:"QueueAdd",agent:e,queues:a.queues,channel:"voice",data1:e,data3:a.queues.join(","),data4:"voice"}).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){f.error(a)})},function(){b.info("Modal dismissed at: "+new Date)})},a.leaveQueue=function(a,b){return i.save({name:"QueueRemove",agent:a,queue:b,channel:"voice",data1:a,data3:b,data4:"voice"}).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){f.error(a)})},a.showInfo=function(a){c.open({animation:!0,templateUrl:"app/channels/voice/realtime/view/agent/agent.modal.info.html",controller:"VoiceRealtimeViewAgentInfoModalCtrl",resolve:{agent:a}})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.realtime.view.agents",{url:"/agents",templateUrl:"app/channels/voice/realtime/view/agent/agent.html",controller:"VoiceRealtimeViewAgentCtrl"})}]),angular.module("xCallyShuttleApp").controller("VoiceRealtimeViewAgentInfoModalCtrl",["$scope","$uibModalInstance","agent",function(a,b,c){a.agent=c,a.close=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("VoiceRealtimeViewAgentQueueModalCtrl",["$scope","$uibModalInstance","$http","queues",function(a,b,c,d){a.queues=d,a.item={},a.save=function(){b.close(a.item)},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("VoiceRealtimeViewOutboundCtrl",["$scope","$log","$uibModal","$translate","socket","xAlert","ReportDial","Pause","Action","usSpinnerService","$q","uiGridConstants","$timeout","Auth",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n){function o(){return j.spin("spinner-grid"),g.get({controller:"active",controller2:"calls"}).$promise.then(function(b){a.gridOptions.data=b.rows})["catch"](function(a){f.error(a)})["finally"](function(){p(),j.stop("spinner-grid")})}function p(){e.socket.on("report_dial:save",function(b){a.gridOptions.data.unshift(b)}),e.socket.on("report_dial:update",function(b){var c=_.find(a.gridOptions.data,{uniqueid:b.uniqueid});c&&(_.merge(c,b),!b.endtime||b.answertime&&b.answertime==b.endtime||m(function(){_.remove(a.gridOptions.data,{id:b.id})},1e4))})}a.moment=moment,a.initDials=function(){a.gridOptions={paginationPageSizes:[10,25,50,75],paginationPageSize:10,headerCellFilter:"translate",enableHorizontalScrollbar:0,enableVerticalScrollbar:0,enableFiltering:!0,columnDefs:[{name:"uniqueid",displayName:"APPLICATION_UNIQUEID",headerCellFilter:"translate",cellClass:"text-center"},{name:"agent",displayName:"APPLICATION_AGENT",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{row.entity.channel.split('/')[1].split('-')[0]}}</div>"},{name:"calleridnum",displayName:"APPLICATION_CALLERID",headerCellFilter:"translate",cellClass:"text-center"},{name:"dialstring",cellClass:"text-center"},{name:"status",displayName:"APPLICATION_STATUS",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div><span data-ng-if="!row.entity.endtime">{{\'APPLICATION_RINGING\' | translate}}</span><span data-ng-if="row.entity.answertime && row.entity.answertime == row.entity.endtime">{{\'APPLICATION_TALKING\' | translate}}</span><span data-ng-if="row.entity.answertime && row.entity.answertime != row.entity.endtime">{{\'APPLICATION_COMPLETE\' | translate}}</span><span data-ng-if="row.entity.endtime && !row.entity.answertime">{{\'APPLICATION_\'+row.entity.dialstatus | translate}}</span><span data-ng-if="(!row.entity.endtime && !row.entity.answertime) || (row.entity.answertime && row.entity.answertime == row.entity.endtime)"> [<css-timer start-time="row.entity.updatedAt"></css-timer>]</div>',enableSorting:!1,enableColumnMenu:!1,enableFiltering:!1}],data:[],gridMenuTitleFilter:function(a){var b=k.defer();return b.resolve(d.instant(a)),b.promise},onRegisterApi:function(b){a.gridApi=b,a.gridApi.grid.registerDataChangeCallback(function(){q(a.gridOptions.data.length)})}},o()};var q=function(a){var b=a?30*a+100:270;angular.element(document.getElementsByClassName("ui-grid")[0]).css("height",b+"px"),angular.element(document.getElementsByClassName("ui-grid-viewport")).css("height",30*a+"px")};a.$on("$destroy",function(){e.unsyncUpdates("report_dial")})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.realtime.view.outbound",{url:"/outbound",templateUrl:"app/channels/voice/realtime/view/outbound/outbound.html",controller:"VoiceRealtimeViewOutboundCtrl"})}]),angular.module("xCallyShuttleApp").controller("VoiceRealtimeViewParameterCtrl",["$scope","$translate","Dashboard","VoiceQueue","Auth","socket","uiGridConstants",function(a,b,c,d,e,f,g){function h(a){var b=a?30*a+150:270;angular.element(document.getElementsByClassName("ui-grid")[0]).css("height",b+"px"),angular.element(document.getElementsByClassName("ui-grid-viewport")).css("height",30*a+"px")}function i(b){var c=_.find(a.gridOptions.data,{name:b.name});c&&(_.merge(c,b),a.$apply())}var j={offset:0,limit:10};a.initParameters=function(){var b;switch(a.user=e.getCurrentUser(),a.$on("$destroy",function(){b&&(b.terminate(),f.socket.removeAllListeners("dashboard:voice:init"),f.socket.removeAllListeners("dashboard:voice:waiting"),f.socket.removeAllListeners("dashboard:voice:active"),f.socket.removeAllListeners("dashboard:voice:complete"),f.socket.removeAllListeners("dashboard:voice:abandon"),f.socket.removeAllListeners("dashboard:voice:unmanaged"),f.socket.removeAllListeners("dashboard:voice:holdtime"),f.socket.removeAllListeners("dashboard:voice:talktime"))}),a.user.role){case"admin":c.get({id:"voice",controller:"init"}).$promise.then(function(b){for(var c in b.queues)b.queues[c].waiting=b.queues[c].waiting||0,b.queues[c].active=b.queues[c].active||0,b.queues[c].complete=b.queues[c].complete||0,b.queues[c].abandon=b.queues[c].abandon||0,b.queues[c].unmanaged=b.queues[c].unmanaged||0,b.queues[c].holdtime=b.queues[c].holdtime||0,b.queues[c].talktime=b.queues[c].talktime||0,a.gridOptions.data.push(b.queues[c])})["catch"](function(a){console.error(a)});break;case"user":c.get({id:"voice",controller:"init"}).$promise.then(function(b){for(var c in b.queues){var d=_.find(a.user.PVoiceQueues,{name:c});d&&(b.queues[c].waiting=b.queues[c].waiting||0,b.queues[c].active=b.queues[c].active||0,b.queues[c].complete=b.queues[c].complete||0,b.queues[c].abandon=b.queues[c].abandon||0,b.queues[c].unmanaged=b.queues[c].unmanaged||0,b.queues[c].holdtime=b.queues[c].holdtime||0,b.queues[c].talktime=b.queues[c].talktime||0,a.gridOptions.data.push(b.queues[c]))}})["catch"](function(a){console.error(a)})}f.socket.on("dashboard:voice:waiting",function(a){i(a)}),f.socket.on("dashboard:voice:active",function(a){i(a)}),f.socket.on("dashboard:voice:complete",function(a){i(a)}),f.socket.on("dashboard:voice:abandon",function(a){i(a)}),f.socket.on("dashboard:voice:unmanaged",function(a){i(a)}),f.socket.on("dashboard:voice:talktime",function(a){i(a)}),f.socket.on("dashboard:voice:holdtime",function(a){i(a)})},a.gridOptions={headerCellFilter:"translate",enableHorizontalScrollbar:0,enableVerticalScrollbar:0,enableFiltering:!0,enableSorting:!0,showGridFooter:!0,paginationPageSizes:[10,25,50,75],paginationPageSize:10,columnDefs:[{name:"name",displayName:"APPLICATION_QUEUE",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter"},{name:"waiting",displayName:"APPLICATION_WAITING",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1},{name:"active",displayName:"APPLICATION_ACTIVE",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1},{name:"complete",displayName:"APPLICATION_ANSWERED",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",enableSorting:!1,enableColumnMenu:!1,filters:[{condition:g.filter.GREATER_THAN_OR_EQUAL,placeholder:"from"},{condition:g.filter.LESS_THAN_OR_EQUAL,placeholder:"to"}]},{name:"abandon",displayName:"APPLICATION_ABANDONED",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",enableSorting:!1,enableColumnMenu:!1,filters:[{condition:g.filter.GREATER_THAN_OR_EQUAL,placeholder:"from"},{condition:g.filter.LESS_THAN_OR_EQUAL,placeholder:"to"}]},{name:"unmanaged",displayName:"APPLICATION_UNMANAGED",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",enableSorting:!1,enableColumnMenu:!1,filters:[{condition:g.filter.GREATER_THAN_OR_EQUAL,placeholder:"from"},{condition:g.filter.LESS_THAN_OR_EQUAL,placeholder:"to"}]},{name:"holdtime",displayName:"APPLICATION_HOLDTIME",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{row.entity.holdtime | secToTime | date:'HH:mm:ss'}}</div>",enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1},{name:"talktime",displayName:"APPLICATION_TALKTIME",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{row.entity.talktime | secToTime | date:'HH:mm:ss'}}</div>",enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1},{name:"totalCalls",displayName:"APPLICATION_TOTAL_CALLS",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{row.entity.complete + row.entity.abandon + row.entity.unmanaged}}</div>",enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1}],data:[],onRegisterApi:function(b){a.gridApi=b,a.gridApi.core.on.sortChanged(a,function(a,b){0===b.length?j.order=null:j.order=b[0].name+" "+b[0].sort.direction.toUpperCase()}),a.gridApi.pagination.on.paginationChanged(a,function(a,b){h(b),j.offset=(a-1)*b,j.limit=b}),a.gridApi.core.on.filterChanged(a,function(){var a=this.grid;a.columns.forEach(function(a){a.filters.length>1?a.filters.forEach(function(b){b.term?64===b.condition?j[a.name+"_uiFrom"]=b.term:256===b.condition&&(j[a.name+"_uiTo"]=b.term):64===b.condition?delete j[a.name+"_uiFrom"]:256===b.condition&&delete j[a.name+"_uiTo"]}):a.filters.length&&a.filters[0].term?j[a.name]=a.filters[0].term:delete j[a.name]})})}}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.realtime.view.parameters",{url:"/parameters",templateUrl:"app/channels/voice/realtime/view/parameter/parameter.html",controller:"VoiceRealtimeViewParameterCtrl"})}]),angular.module("xCallyShuttleApp").controller("VoiceRealtimeViewQueueCtrl",["$scope","$log","$uibModal","$translate","socket","xAlert","VoiceQueue","usSpinnerService","$q","uiGridConstants","Auth",function(a,b,c,d,e,f,g,h,i,j,k){function l(b){return h.spin("spinner-grid"),g.get(o).$promise.then(function(b){a.gridOptions.totalItems=b.count,a.gridOptions.data=[],b.rows.forEach(function(a){n(a)})})["catch"](function(a){f.error(a)})["finally"](function(){b&&m(),h.stop("spinner-grid")})}function m(){e.socket.on("voice_queue:save",function(b){var c=_.find(a.gridOptions.data,{ +queueName:b.name});c||l()}),e.socket.on("voice_queue:remove",function(b){_.remove(a.gridOptions.data,{queueId:b.id})}),e.socket.on("user_has_voice_queue:save",function(b){var c=_.find(a.gridOptions.data,{agentId:b.UserId,queue:b.queue});if(!c&&b.logged){var d=_.find(a.gridOptions.data,{queueName:b.queue}),e=a.gridOptions.data.indexOf(d);a.gridOptions.data.splice(e+1,0,{isAgent:!0,agent:b.membername,callstaken:b.callstaken?b.callstaken:0,lastcall:b.lastcall,status:b.statusdesc,paused:b.paused,reason:b.reason,agentId:b.UserId,queue:b.queue})}else c&&!b.logged?_.remove(a.gridOptions.data,{agentId:b.UserId,queue:b.queue}):c&&b.logged&&userHasQueue&&(c.callstaken=b.callstaken?b.callstaken:0,c.lastcall=b.lastcall,c.status=b.statusdesc,c.paused=b.paused,c.reason=b.reason)}),e.socket.on("user_has_voice_queue:remove",function(b){_.remove(a.gridOptions.data,{agentId:b.UserId,queue:b.queue})})}function n(b){a.gridOptions.data.push({name:b.name,$$treeLevel:0,queueName:b.name}),b.Users.forEach(function(b){b.UserHasVoiceQueue.logged&&a.gridOptions.data.push({isAgent:!0,agent:b.UserHasVoiceQueue.membername,callstaken:b.UserHasVoiceQueue.callstaken?b.UserHasVoiceQueue.callstaken:0,lastcall:b.UserHasVoiceQueue.lastcall,status:b.UserHasVoiceQueue.statusdesc,paused:b.UserHasVoiceQueue.paused,reason:b.UserHasVoiceQueue.reason,agentId:b.UserHasVoiceQueue.UserId,queue:b.UserHasVoiceQueue.queue})})}var o={controller:"realtime",controller2:"voice",offset:0,limit:10};a.moment=moment,a.initQueues=function(){a.gridOptions={enableGridMenu:!0,headerCellFilter:"translate",enableHorizontalScrollbar:0,enableVerticalScrollbar:0,enableFiltering:!0,showGridFooter:!0,paginationPageSizes:[10,25,50,75],paginationPageSize:10,useExternalPagination:!0,useExternalSorting:!0,useExternalFiltering:!0,multiSelect:!0,showTreeExpandNoChildren:!0,columnDefs:[{name:"name",displayName:"APPLICATION_QUEUE",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter"},{name:"agent",displayName:"APPLICATION_AGENT_NAME",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter"},{name:"callstaken",displayName:"APPLICATION_CALLS_TAKEN",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div data-ng-if="row.entity.isAgent">{{row.entity.callstaken}}</div>'},{name:"lastcall",displayName:"APPLICATION_LAST_CALL",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div data-ng-if=\"row.entity.isAgent\">{{row.entity.lastcall | date:'yyyy-MM-dd HH:mm:ss'}}</div>"},{name:"status",displayName:"APPLICATION_STATUS",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div data-ng-if=\"row.entity.isAgent\">{{'APPLICATION_'+row.entity.status | translate}}</div>"},{name:"paused",displayName:"APPLICATION_PAUSED",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div data-ng-if=\"row.entity.isAgent\">{{(row.entity.paused ? 'APPLICATION_YES' : 'APPLICATION_NO') | translate}}</div>"},{name:"reason",displayName:"APPLICATION_REASON",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div data-ng-if="row.entity.isAgent && row.entity.paused">{{row.entity.reason}}</div>'}],data:[],gridMenuTitleFilter:function(a){var b=i.defer();return b.resolve(d.instant(a)),b.promise},onRegisterApi:function(b){a.gridApi=b,a.gridApi.grid.registerDataChangeCallback(function(){p(a.gridApi.core.getVisibleRows(a.gridApi.grid).length)}),a.gridApi.treeBase.on.rowExpanded(a,function(b){p(a.gridApi.core.getVisibleRows(a.gridApi.grid).length+b.treeNode.children.length)}),a.gridApi.treeBase.on.rowCollapsed(a,function(b){p(a.gridApi.core.getVisibleRows(a.gridApi.grid).length-b.treeNode.children.length)}),a.gridApi.core.on.sortChanged(a,function(a,b){0===b.length?o.order=null:o.order=b[0].name+" "+b[0].sort.direction.toUpperCase(),l()}),a.gridApi.pagination.on.paginationChanged(a,function(a,b){o.offset=(a-1)*b,o.limit=b,l()}),a.gridApi.core.on.filterChanged(a,function(){var a=this.grid;a.columns.forEach(function(a){a.filters[0].term?o[a.name]=a.filters[0].term:delete o[a.name]}),l()})}},l(!0)};var p=function(a){var b=a?30*a+130:270;angular.element(document.getElementsByClassName("ui-grid")[0]).css("height",b+"px"),angular.element(document.getElementsByClassName("ui-grid-viewport")).css("height",30*a+"px")};a.$on("$destroy",function(){e.unsyncUpdates("voice_queue"),e.unsyncUpdates("user_has_voice_queue")})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.realtime.view.queues",{url:"/queues",templateUrl:"app/channels/voice/realtime/view/queue/queue.html",controller:"VoiceRealtimeViewQueueCtrl"})}]),angular.module("xCallyShuttleApp").controller("VoiceRealtimeViewQueueCallsCtrl",["$scope","$log","$uibModal","$translate","socket","xAlert","ReportQueue","Pause","Action","usSpinnerService","$q","uiGridConstants","$timeout",function(a,b,c,d,e,f,g,h,i,j,k,l,m){function n(){return j.spin("spinner-grid"),g.get({controller:"waiting",controller2:"calls"}).$promise.then(function(b){a.gridOptions.data=b.rows})["catch"](function(a){f.error(a)})["finally"](function(){o(),j.stop("spinner-grid")})}function o(){e.socket.on("report_queue:save",function(b){a.gridOptions.data.unshift(b)}),e.socket.on("report_queue:update",function(b){var c=_.find(a.gridOptions.data,{id:b.id});if(c){var d={queuecallerabandon:b.queuecallerabandon,queuecallerleave:b.queuecallerleave};delete b.queuecallerabandon,delete b.queuecallerleave,_.merge(c,b),d.queuecallerabandon&&(c.queuecallerabandon=d.queuecallerabandon),d.queuecallerleave&&(c.queuecallerleave=d.queuecallerleave),(c.queuecallerabandon||c.queuecallercomplete)&&m(function(){_.remove(a.gridOptions.data,{id:b.id})},3e3)}})}a.moment=moment,a.initQueues=function(){a.gridOptions={headerCellFilter:"translate",paginationPageSizes:[10,25,50,75],paginationPageSize:10,enableHorizontalScrollbar:0,enableVerticalScrollbar:0,enableFiltering:!0,columnDefs:[{name:"queue",displayName:"APPLICATION_QUEUE",headerCellFilter:"translate"},{name:"status",displayName:"APPLICATION_STATUS",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div><span data-ng-if="!row.entity.queuecallerleaveAt">{{\'APPLICATION_QUEUESTATUS_WAITING\' | translate}}</span><span data-ng-if="row.entity.queuecallerleaveAt && !row.entity.queuecallerabandon && !row.entity.queuecallercomplete">{{\'APPLICATION_ACTIVE\' | translate}}</span><span data-ng-if="row.entity.queuecallerleaveAt && row.entity.queuecallerabandon">{{\'APPLICATION_QUEUESTATUS_ABANDON\' | translate}}</span><span data-ng-if="row.entity.queuecallerleaveAt && row.entity.queuecallercomplete">{{\'APPLICATION_QUEUESTATUS_COMPLETE\' | translate}}</span><span data-ng-if="!row.entity.queuecallercomplete && !row.entity.queuecallerabandon"> [<css-timer start-time="row.entity.updatedAt"></css-timer>]</div>',enableSorting:!1,enableColumnMenu:!1,enableFiltering:!1},{name:"caller",displayName:"APPLICATION_CALLER",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{row.entity.calleridnum || ''}} {{row.entity.calleridname || ''}}</div>",enableSorting:!1,enableColumnMenu:!1,enableFiltering:!1},{name:"position",displayName:"APPLICATION_POSITION",headerCellFilter:"translate"},{name:"lastAssignedTo",displayName:"APPLICATION_AGENT",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",enableSorting:!1,enableColumnMenu:!1,enableFiltering:!1}],data:[],gridMenuTitleFilter:function(a){var b=k.defer();return b.resolve(d.instant(a)),b.promise},onRegisterApi:function(b){a.gridApi=b,a.gridApi.grid.registerDataChangeCallback(function(){p(a.gridOptions.data.length)})}},n()};var p=function(a){var b=a?30*a+100:270;angular.element(document.getElementsByClassName("ui-grid")[0]).css("height",b+"px"),angular.element(document.getElementsByClassName("ui-grid-viewport")).css("height",30*a+"px")};a.$on("$destroy",function(){e.unsyncUpdates("report_queue")})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.realtime.view.queuecalls",{url:"/queuecalls",templateUrl:"app/channels/voice/realtime/view/queuecalls/queuecalls.html",controller:"VoiceRealtimeViewQueueCallsCtrl"})}]),angular.module("xCallyShuttleApp").controller("VoiceRealtimeViewTelephoneCtrl",["$scope","$log","$uibModal","$translate","socket","xAlert","Telephone","Pause","Action","usSpinnerService","$q","uiGridConstants","$timeout",function(a,b,c,d,e,f,g,h,i,j,k,l,m){function n(){return j.spin("spinner-grid"),g.get(p).$promise.then(function(b){a.gridOptions.totalItems=b.count,a.gridOptions.data=b.rows})["catch"](function(a){f.error(a)})["finally"](function(){j.stop("spinner-grid")})}function o(){e.socket.on("agent:save",function(b){var c=_.find(a.gridOptions.data,{id:b.id});c&&(c.status=b.status,c.statusAt=b.statusAt,c.ipaddr=b.ipaddr,c.port=b.port,c.fullcontact=b.fullcontact,c.useragent=b.useragent,c.lastms=b.lastms,c.internal=b.internal)}),e.socket.on("agent:remove",function(b){_.remove(a.gridOptions.data,{id:b.id})})}var p={offset:0,limit:10};a.moment=moment,a.initTelephones=function(){a.gridOptions={enableGridMenu:!0,headerCellFilter:"translate",enableHorizontalScrollbar:0,enableVerticalScrollbar:0,enableFiltering:!0,showGridFooter:!0,paginationPageSizes:[10,25,50,75],paginationPageSize:10,useExternalPagination:!0,useExternalSorting:!0,useExternalFiltering:!0,multiSelect:!0,showTreeExpandNoChildren:!0,columnDefs:[{name:"name",displayName:"APPLICATION_TELEPHONE",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{row.entity.name}} <{{row.entity.internal}}></div>"},{name:"status",displayName:"APPLICATION_PHONE_STATUS",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{'APPLICATION_'+row.entity.status | translate}} <span data-ng-if=\"row.entity.statusAt && (row.entity.status === 'BUSY' || row.entity.status === 'ONHOLD' || row.entity.status === 'INUSE')\">(<css-timer start-time=\"row.entity.statusAt\"></css-timer>)</span></span></div>",filter:{type:l.filter.SELECT,selectOptions:[{value:"UNKNOWN",label:d.instant("APPLICATION_UNKNOWN")},{value:"NOT_INUSE",label:d.instant("APPLICATION_NOT_INUSE")},{value:"INUSE",label:d.instant("APPLICATION_INUSE")},{value:"BUSY",label:d.instant("APPLICATION_BUSY")},{value:"INVALID",label:d.instant("APPLICATION_INVALID")},{value:"UNAVAILABLE",label:d.instant("APPLICATION_UNAVAILABLE")},{value:"RINGING",label:d.instant("APPLICATION_RINGING")},{value:"RINGINUSE",label:d.instant("APPLICATION_RINGINUSE")},{value:"ONHOLD",label:d.instant("APPLICATION_ONHOLD")}]}},{name:"action",displayName:"",width:170,cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div><button class="btn btn-xs blue-madison" data-ng-click="grid.appScope.showInfo(row.entity)"><i class="icon-info"></i></button><div>',enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1}],data:[],gridMenuTitleFilter:function(a){var b=k.defer();return b.resolve(d.instant(a)),b.promise},onRegisterApi:function(b){a.gridApi=b,a.gridApi.grid.registerDataChangeCallback(function(){q(a.gridOptions.data.length)}),a.gridApi.core.on.sortChanged(a,function(a,b){0===b.length?p.order=null:p.order=b[0].name+" "+b[0].sort.direction.toUpperCase(),n()}),a.gridApi.pagination.on.paginationChanged(a,function(a,b){p.offset=(a-1)*b,p.limit=b,n()}),a.gridApi.core.on.filterChanged(a,function(){var a=this.grid;a.columns.forEach(function(a){a.filters[0].term?p[a.name]=a.filters[0].term:delete p[a.name]}),n()})}},n(),m(function(){o()})};var q=function(a){var b=a?30*a+130:270;angular.element(document.getElementsByClassName("ui-grid")[0]).css("height",b+"px"),angular.element(document.getElementsByClassName("ui-grid-viewport")).css("height",30*a+"px")};a.$on("$destroy",function(){e.unsyncUpdates("agent")}),a.showInfo=function(a){c.open({animation:!0,templateUrl:"app/channels/voice/realtime/view/telephone/telephone.modal.info.html",controller:"VoiceRealtimeViewTelephoneInfoModalCtrl",resolve:{telephone:a}})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.realtime.view.telephones",{url:"/telephones",templateUrl:"app/channels/voice/realtime/view/telephone/telephone.html",controller:"VoiceRealtimeViewTelephoneCtrl",data:{permissions:{only:["admin","user"],redirectTo:"main.dashboard.voice"}}})}]),angular.module("xCallyShuttleApp").controller("VoiceRealtimeViewTelephoneInfoModalCtrl",["$scope","$uibModalInstance","$http","telephone",function(a,b,c,d){a.telephone=d,a.close=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("VoiceRealtimeViewCtrl",["$scope","Auth",function(a,b){a.Auth=b}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.realtime.view",{url:"/view",templateUrl:"app/channels/voice/realtime/view/view.html",controller:"VoiceRealtimeViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]}])}]}})}]),angular.module("xCallyShuttleApp").controller("VoiceRecordingListCtrl",["$scope","$translate","$sce","Recording","gridOptions","xAlert","uiGridConstants","Auth",function(a,b,c,d,e,f,g,h){a.Recording=d,a.updateRating=function(a,c){return d.update({id:a,rating:c}).$promise.then(function(){f.show(b.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){f.error(a)})},a.initView=function(){var b={exporterCsvFilename:"recordings.csv",rowHeight:30,primaryKey:"id",columnDefs:[{name:"uniqueid"},{name:"customerPhone",displayName:"APPLICATION_CUSTOMER_PHONE",cellClass:"text-center ui-grid-vcenter"},{name:"membername"},{name:"type",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div><i data-ng-class=\"{'icon-call-in font-green':row.entity.type === 'inbound','icon-call-out font-red':row.entity.type === 'outbound','icon-question':row.entity.type === 'unknown','icon-earphones font-purple':row.entity.type === 'internal'}\"></i></div>",filter:{type:g.filter.SELECT,selectOptions:[{value:"inbound",label:"Inbound"},{value:"internal",label:"Internal"},{value:"outbound",label:"Outbound"},{value:"unknown",label:"Unknown"}]}},{name:"queue"},{name:"createdAt",displayName:"APPLICATION_DATE",headerCellFilter:"translate",filterHeaderTemplate:'<div class="ui-grid-filter-container row"><div ng-repeat="colFilter in col.filters" class="col-md-6 col-md-offset-0 col-sm-5 col-sm-offset-0 col-xs-5 col-xs-offset-0"><div custom-grid-date-filter-header></div></div></div>',filters:[{name:"From",condition:g.filter.GREATER_THAN_OR_EQUAL},{name:"To",condition:g.filter.LESS_THAN_OR_EQUAL}],sort:{direction:g.DESC,priority:0}},{name:"rating",filter:{type:g.filter.SELECT,selectOptions:[{value:1,label:"1"},{value:2,label:"2"},{value:3,label:"3"},{value:4,label:"4"},{value:5,label:"5"}]},cellClass:"ui-grid-vcenter",width:"100",cellTemplate:'<div><uib-rating data-ng-model="row.entity.rating" data-ng-click="grid.appScope.updateRating(row.entity.id, row.entity.rating)" aria-labelledby="default-rating"></uib-rating></div>'},{name:"audio",displayName:"",width:100,enableSorting:!1,enableFiltering:!1,cellClass:"ui-grid-vcenter",cellTemplate:"<div><audio-file-download data-ng-if=\"row.entity.value.split('.').pop() == 'wav'\" params=\"{id:row.entity.id,controller:'stream'}\" resource=\"grid.appScope.Recording\"></audio-file-download><span data-ng-if=\"row.entity.value.split('.').pop() == 'gsm'\" title=\"{{'MESSAGE_GSM_PREVIEW_NOT_SUPPORTED' | translate}}\">{{'MESSAGE_GSM_PREVIEW_NOT_SUPPORTED' | translate}}</span></div>"},{name:"action",width:80,buttons:[{directive:"<motion-file-download params=\"{id:row.entity.id,controller:'stream'}\" resource=\"grid.appScope.Recording\" mimetype=\"'audio/'+row.entity.value.split('.').pop()\" btnclass=\"btn btn-xs blue-hoki\" filename=\"row.entity.uniqueid+'.'+row.entity.value.split('.').pop()\"></motion-file-download>"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.uniqueid, row.entity.id)",hide:!h.isAdmin()}]}]};a.gridOptions=e.gridOptions(d,b,a)}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.recordings.list",{url:"/list",templateUrl:"app/channels/voice/recording/list/list.html",controller:"VoiceRecordingListCtrl"})}]),angular.module("xCallyShuttleApp").factory("Recording",["$resource",function(a){return a("/api/voice/recordings/:id/:controller",{id:"@id"},{update:{method:"PUT"},patch:{method:"PATCH"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.recordings",{url:"/recordings",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user","agent"],redirectTo:"landing",id:25}}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.routes.inbound",{url:"/inbound",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("VoiceRouteInboundListCreateCtrl",["$scope","$uibModalInstance","Route","application","xAlert","$location","$translate",function(a,b,c,d,e,f,g){a.$application=d.application,a.forms={route:void 0},a.item={type:"inbound",appdata:"Inbound Call",context:"from-voip-provider"},a.ok=function(){return a.item.exten=a.$application.checkUnderscore(a.item.exten),c.save(a.item).$promise.then(function(a){b.close(a),f.path("/channels/voice/routes/inbound/view/"+a.id+"/applications")})["catch"](function(a){console.log(a),e.error(a)})},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("VoiceRouteInboundListCtrl",["$scope","$http","socket","$translate","$rootScope","xAlert","Modal","stResource","gridOptions","Route","$uibModal","$location","$log",function(a,b,c,d,e,f,g,h,i,j,k,l,m){a.initView=function(){var b={exporterCsvFilename:"InboundRoutes.csv",columnDefs:[{name:"exten",displayName:"APPLICATION_PHONE_NUMBER"},{name:"description"},{name:"applications",cellClass:"ui-grid-vcenter",cellTemplate:'<div data-ng-if="row.entity.Applications.length"><span data-ng-repeat="app in row.entity.Applications | limitTo:2">{{app.app}}({{app.appdata[0]}}), </span>...</div><div data-ng-if="!row.entity.Applications.length">{{\'MESSAGE_NO_AVAILABLE_APPLICATIONS\' | translate}}</div>',enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1},{name:"action",width:75,buttons:[{"class":"blue-hoki",href:"/channels/voice/routes/inbound/view/{{row.entity.id}}/settings",name:"settings"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.exten, row.entity.id)"}]}]};a.gridOptions=i.gridOptions(j,b,a,{type:"inbound"})},a.create=function(){k.open({animation:!0,templateUrl:"app/channels/voice/route/inbound/list/create.modal.html",controller:"VoiceRouteInboundListCreateCtrl"})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.routes.inbound.list",{url:"/list",templateUrl:"app/channels/voice/route/inbound/list/list.html",controller:"VoiceRouteInboundListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"smart-table",insertBefore:"#ng_load_plugins_before",files:["assets/css/smart_table.css"]}])}]}})}]),angular.module("xCallyShuttleApp").controller("VoiceRouteInboundViewCtrl",["$scope","$translate","$stateParams","socket","$location","WizardHandler","Modal","xAlert","application","interval","Route","VoiceQueue","Sound","SquareProject","VoiceContext","Interval","VoiceMail","User","Agent","Telephone","Trunk","Team",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v){function w(b){var c,d;if("always"===b.intType)c=null,d="*,*,*,*";else if("list"===b.intType)d=b.IntervalId?_.find(a.Intervals,{id:b.IntervalId}).name:"*,*,*,*",c=b.IntervalId||null;else if("custom"===b.intType){c=null;var e,f,g,h;e=b.t_from&&b.t_to&&!b.alwaysTime?moment(b.t_from).format("HH:mm")+"-"+moment(b.t_to).format("HH:mm"):"*",b.wd_from&&"always"!==b.wd_from?(f=b.wd_from,b.wd_to&&"always"!==b.wd_to&&(f+="-"+b.wd_to)):f="*",b.md_from&&"always"!==b.md_from?(g=b.md_from,b.md_to&&"always"!==b.md_to&&(g+="-"+b.md_to)):g="*",b.m_from&&"always"!==b.m_from?(h=b.m_from,b.m_to&&"always"!==b.m_to&&(h+="-"+b.m_to)):h="*",d=e+","+f+","+g+","+h}void 0===a.selectedApp?(a.application.interval=d,a.application.IntervalId=c):(a.route.Applications[a.selectedApp].interval=d,a.route.Applications[a.selectedApp].IntervalId=c)}function x(){if(a.interval.intType=a.route.Applications[a.selectedApp].IntervalId?"list":"*,*,*,*"===a.route.Applications[a.selectedApp].interval?"always":"custom",a.interval.IntervalId=a.route.Applications[a.selectedApp].IntervalId,!a.route.Applications[a.selectedApp].IntervalId){var b,c=a.route.Applications[a.selectedApp].interval?a.route.Applications[a.selectedApp].interval.split(","):["*","*","*","*"];c.forEach(function(c,d){switch(d){case 0:"*"!==c?(b=c.split("-"),a.interval.t_from=moment(b[0],"HH:mm"),a.interval.t_to=moment(b[1],"HH:mm"),a.interval.alwaysTime=!1):(a.interval.t_from=moment(new Date),a.interval.t_to=moment(new Date),a.interval.alwaysTime=!0);break;case 1:"*"!==c?(b=c.split("-"),a.interval.wd_from=b[0],a.interval.wd_to=b[1]?b[1]:"always"):(a.interval.wd_from="always",a.interval.wd_to="always");break;case 2:"*"!==c?(b=c.split("-"),a.interval.md_from=b[0],a.interval.md_to=b[1]?b[1]:"always"):(a.interval.md_from="always",a.interval.md_to="always");break;case 3:"*"!==c?(b=c.split("-"),a.interval.m_from=b[0],a.interval.m_to=b[1]?b[1]:"always"):(a.interval.m_from="always",a.interval.m_to="always")}})}}a.alwaysSwitch={isActive:!0,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.$translate=b,a.selectedApp=void 0,a.showGrid=!0,a.$application=i.application,a.$interval=j.interval,a.selectedRows=[],a._=_,a.gridOptions={enableHorizontalScrollbar:0,enableVerticalScrollbar:0,enableSorting:!1,rowTemplate:'<div grid="grid" class="ui-grid-draggable-row" draggable="true"><div ng-repeat="(colRenderIndex, col) in colContainer.renderedColumns track by col.colDef.name" class="ui-grid-cell" ng-class="{ \'ui-grid-row-header-cell\': col.isRowHeader, \'custom\': true }" ui-grid-cell></div></div>',columnDefs:[{name:"app",headerCellFilter:"translate",displayName:"APPLICATION_APPLICATION",enableColumnMenu:!1},{name:"appType",headerCellFilter:"translate",displayName:"APPLICATION_INFO",cellClass:"ui-grid-vcenter",cellTemplate:"<div>{{'APPLICATION_APPS_'+(row.entity.appType || (grid.appScope._.find(grid.appScope.$application.applications,{value:row.entity.app}) ? row.entity.app : 'custom')).toUpperCase() | translate}}</div>",enableColumnMenu:!1},{name:"appdata",headerCellFilter:"translate",displayName:"APPLICATION_ARGUMENTS",cellClass:"ui-grid-vcenter",cellTemplate:"<div>{{row.entity.appdata.join(',')}}</div>",enableColumnMenu:!1},{name:"interval",headerCellFilter:"translate",displayName:"APPLICATION_TIME_INTERVAL",enableColumnMenu:!1},{name:"action",enableColumnMenu:!1,headerCellFilter:"translate",displayName:"APPLICATION_ACTION",width:125,cellClass:"ui-grid-vcenter",cellTemplate:'<div><a class="btn btn-xs blue-hoki" data-ng-click="grid.appScope.openApplication(grid.appScope.gridOptions.data.indexOf(row.entity))"><i class="icon-settings"></i></a><a class="btn btn-xs red-sunglo" data-ng-click="grid.appScope.deleteApp(row.entity.app+\' application\', grid.appScope.gridOptions.data.indexOf(row.entity))"><i class="fa fa-trash"></i></a></div>'}],onRegisterApi:function(b){b.selection.on.rowSelectionChanged(a,function(b){b.isSelected?a.selectedRows.push(b.entity):_.pull(a.selectedRows,b.entity)}),b.selection.on.rowSelectionChangedBatch(a,function(b){b[0].isSelected?a.selectedRows=_.map(b,"entity"):a.selectedRows=[]}),b.draggableRows.on.rowDropped(a,function(b,c){a.updateRoute()}),b.grid.registerDataChangeCallback(function(){y(a.gridOptions.data.length)})}};var y=function(a){var b=a?30*a+120:177;angular.element(document.getElementsByClassName("ui-grid")[0]).css("height",b+"px")};a.initApplication=function(b){b&&(a.selectedApp=void 0),a.forms={settings:void 0,interval:void 0},a.application={},a.interval={intType:"always",t_from:moment(new Date),t_to:moment(new Date),wd_from:"always",wd_to:"always",md_from:"always",md_to:"always",m_from:"always",m_to:"always",alwaysTime:!0},a.main={app:""}},a.$watch("interval",function(a){a&&w(a)},!0),a.updateSetAppdata=function(){a.application.variable&&a.application.value&&"Set"===a.main.app.value?a.application.appdata[0]=a.application.variable+"="+a.application.value:a.application.appdata[0]=null},a.updateSetAppdataSettings=function(){a.application.variable&&a.application.value&&"Set"===a.main.app.value?a.route.Applications[a.selectedApp].appdata[0]=a.application.variable+"="+a.application.value:a.route.Applications[a.selectedApp].appdata[0]=null},a.$watch("main.app",function(b){if(b){var c,d,e={},f={};switch(void 0===a.selectedApp&&(a.application={appType:b.type,app:b.value,interval:a.application.interval||"*,*,*,*",appdata:[]}),b.value){case"Queue":c=l,d=m;break;case"Playback":c=m;break;case"AGI":c=n;break;case"Goto":c=o;break;case"Voicemail":c=q;break;case"Dial":switch(b.type){case"internalDial":c=r,e={controller:"all"};break;case"externalDial":c=u}}if(c)return c.get(e).$promise.then(function(b){a.items=b.rows}).then(function(){return d?d.get(f).$promise:void 0}).then(function(b){b&&(a.items2=b.rows)})["catch"](function(a){h.error(a)})}},!0),a.deselectAndRedirect=function(b){a.selectedApp=void 0,e.path(b)},a.initRingGroup=function(){var b,c,d;return void 0===a.selectedApp?a.usersArray=[]:a.usersArray=_.map(a.route.Applications[a.selectedApp].appdata[0].split("&"),function(a){return a.split("/")[1]}),r.get().$promise.then(function(a){return b=a,s.get().$promise}).then(function(a){return c=a,t.get().$promise}).then(function(e){d=e,ComponentsDropdowns.bindUserByRole(b,c,d,function(b){a.usersArray=_.union(b,a.usersArray),void 0===a.selectedApp?(a.application.appdata[0]=null,a.application.appdata[0]=_.map(a.usersArray,function(a){return"SIP/"+a}).join("&")):(a.route.Applications[a.selectedApp].appdata[0]=null,a.route.Applications[a.selectedApp].appdata[0]=_.map(a.usersArray,function(a){return"SIP/"+a}).join("&"))},function(b){a.usersArray=_.difference(a.usersArray,b),void 0===a.selectedApp?(a.application.appdata[0]=null,a.application.appdata[0]=_.map(a.usersArray,function(a){return"SIP/"+a}).join("&")):(a.route.Applications[a.selectedApp].appdata[0]=null,a.route.Applications[a.selectedApp].appdata[0]=_.map(a.usersArray,function(a){return"SIP/"+a}).join("&"))},a.route.Applications[a.selectedApp]?a.route.Applications[a.selectedApp].appdata:null)})["catch"](function(a){console.error(a)})},a.getIntervals=function(){return p.get().$promise.then(function(b){a.Intervals=b.rows,d.syncUpdates("interval",a.Intervals)})["catch"](function(a){h.error(a)})},a.getRoute=function(){return k.get({id:c.id}).$promise.then(function(b){a.route=b,a.gridOptions.data=b.Applications,y(a.gridOptions.data.length)})["catch"](function(a){e.path("/channels/voice/routes/inbound/list")})},a.getApplication=function(){if(void 0===a.selectedApp)e.path("/channels/voice/routes/inbound/list");else{if(a.showGrid=!0,a.route.Applications[a.selectedApp].appType)a.main.app=_.find(a.$application.applications,{type:a.route.Applications[a.selectedApp].appType});else{var b=_.find(a.$application.applications,{value:a.route.Applications[a.selectedApp].app});if(b)a.main.app=b;else{a.main.app=_.find(a.$application.applications,{type:"custom"});var c=a.route.Applications[a.selectedApp].appdata.join(",");a.route.Applications[a.selectedApp].appdata=[c],a.route.Applications[a.selectedApp].appType="custom"}}if("Set"===a.main.app.value){var d=a.route.Applications[a.selectedApp].appdata[0].split("=");a.application.variable=d[0],a.application.value=d[1]}x()}},a.openApplication=function(b){a.selectedApp=b,a.showGrid=!1,e.path("/channels/voice/routes/inbound/view/"+c.id+"/applications/settings")},a.updateRoute=function(d){return a.route.exten=a.$application.checkUnderscore(a.route.exten),_.forEach(a.route.Applications,function(a){if("custom"!==a.appType)switch(a.app){case"Dial":var b;switch(a.appType){case"externalDial":b=3;break;case"internalDial":b=2;break;default:b=2}a.appdata[b]=a.appdata[b]||"",a.appdata[b]+=(_.includes(a.appdata[b],"x")?"":"x")+(_.includes(a.appdata[b],"X")?"":"X");break;case"Queue":a.appdata[1]=a.appdata[1]||"",a.appdata[1]+=(_.includes(a.appdata[1],"x")?"":"x")+(_.includes(a.appdata[1],"X")?"":"X")}}),k.update({id:a.route.id},a.route).$promise.then(function(f){a.selectedApp=void 0,h.show(b.instant("MESSAGE_WELL_DONE")+"!","success"),d&&e.path("/channels/voice/routes/inbound/view/"+c.id+"/"+d)})["catch"](function(a){console.log(a),h.error(a)})},a.getContexts=function(){return o.get().$promise.then(function(b){a.voiceContexts=b.rows,d.syncUpdates("voice_context",a.voiceContexts)})["catch"](function(a){h.error(a)})},a.deleteApp=g.confirm["delete"](function(b){a.route.Applications.splice(b,1),a.updateRoute()}),a.deleteItems=g.confirm["delete"](function(){_.remove(a.route.Applications,function(b){return _.includes(a.selectedRows,b)}),a.selectedRows=[],a.updateRoute()}),a.addApplication=function(){a.route.Applications.push(a.application),a.updateRoute("applications")},a.goNext=function(){f.wizard().next()},a.previous=function(){f.wizard().previous()},a.formValidation=function(a){return a},a.$on("destroy",function(){d.unsyncUpdates("voice_extension")})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.routes.inbound.view",{url:"/view/:id",templateUrl:"app/channels/voice/route/inbound/view/view.html",controller:"VoiceRouteInboundViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.channels.voice.routes.inbound.view.settings",{url:"/settings",templateUrl:"app/channels/voice/route/inbound/view/view.settings.html"}).state("main.channels.voice.routes.inbound.view.applications",{url:"/applications",templateUrl:"app/channels/voice/route/inbound/view/view.applications.html"}).state("main.channels.voice.routes.inbound.view.application",{url:"/application",templateUrl:"app/channels/voice/route/view.application.html",resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/jquery-multi-select/css/multi-select.css","assets/plugins/jquery-multi-select/js/jquery.multi-select.js","assets/plugins/jquery-quicksearch/jquery.quicksearch.js","assets/scripts/components-dropdowns.js"]})}]}}).state("main.channels.voice.routes.inbound.view.applications.settings",{url:"/settings",templateUrl:"app/channels/voice/route/view.applicationSettings.html",resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/jquery-multi-select/css/multi-select.css","assets/plugins/jquery-multi-select/js/jquery.multi-select.js","assets/plugins/jquery-quicksearch/jquery.quicksearch.js","assets/scripts/components-dropdowns.js"]})}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.routes.internal",{url:"/internal",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("VoiceRouteInternalListCreateCtrl",["$scope","$uibModalInstance","Route","application","$location","$translate","xAlert",function(a,b,c,d,e,f,g){a.$application=d.application,a.forms={route:void 0},a.item={type:"internal",appdata:"Internal Call",context:"from-sip"},a.ok=function(){return a.item.exten=a.$application.checkUnderscore(a.item.exten),c.save(a.item).$promise.then(function(a){b.close(a),e.path("/channels/voice/routes/internal/view/"+a.id+"/applications")})["catch"](function(a){ +g.error(a)})},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("VoiceRouteInternalListCtrl",["$scope","$http","socket","$translate","$rootScope","xAlert","Modal","stResource","gridOptions","Route","$uibModal","$location","$log",function(a,b,c,d,e,f,g,h,i,j,k,l,m){a.initView=function(){var b={exporterCsvFilename:"InternalRoutes.csv",columnDefs:[{name:"exten",displayName:"APPLICATION_PHONE_NUMBER"},{name:"description"},{name:"applications",cellClass:"ui-grid-vcenter",cellTemplate:'<div data-ng-if="row.entity.Applications.length"><span data-ng-repeat="app in row.entity.Applications | limitTo:2">{{app.app}}({{app.appdata[0]}}),</span>...</div><div data-ng-if="!row.entity.Applications.length">{{\'MESSAGE_NO_AVAILABLE_APPLICATIONS\' | translate}}</div>',enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1},{name:"action",width:75,buttons:[{"class":"blue-hoki",href:"/channels/voice/routes/internal/view/{{row.entity.id}}/settings",name:"settings"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.exten, row.entity.id)"}]}]};a.gridOptions=i.gridOptions(j,b,a,{type:"internal"})},a.create=function(){k.open({animation:!0,templateUrl:"app/channels/voice/route/internal/list/create.modal.html",controller:"VoiceRouteInternalListCreateCtrl"})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.routes.internal.list",{url:"/list",templateUrl:"app/channels/voice/route/internal/list/list.html",controller:"VoiceRouteInternalListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"smart-table",insertBefore:"#ng_load_plugins_before",files:["assets/css/smart_table.css"]}])}]}})}]),angular.module("xCallyShuttleApp").controller("VoiceRouteInternalViewCtrl",["$scope","$translate","$stateParams","socket","$location","WizardHandler","Modal","xAlert","application","interval","Route","VoiceQueue","Sound","SquareProject","VoiceContext","Interval","VoiceMail","User","Agent","Telephone","Trunk",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u){function v(b){var c,d;if("always"===b.intType)c=null,d="*,*,*,*";else if("list"===b.intType)d=b.IntervalId?_.find(a.Intervals,{id:b.IntervalId}).name:"*,*,*,*",c=b.IntervalId||null;else if("custom"===b.intType){c=null;var e,f,g,h;e=b.t_from&&b.t_to&&!b.alwaysTime?moment(b.t_from).format("HH:mm")+"-"+moment(b.t_to).format("HH:mm"):"*",b.wd_from&&"always"!==b.wd_from?(f=b.wd_from,b.wd_to&&"always"!==b.wd_to&&(f+="-"+b.wd_to)):f="*",b.md_from&&"always"!==b.md_from?(g=b.md_from,b.md_to&&"always"!==b.md_to&&(g+="-"+b.md_to)):g="*",b.m_from&&"always"!==b.m_from?(h=b.m_from,b.m_to&&"always"!==b.m_to&&(h+="-"+b.m_to)):h="*",d=e+","+f+","+g+","+h}void 0===a.selectedApp?(a.application.interval=d,a.application.IntervalId=c):(a.route.Applications[a.selectedApp].interval=d,a.route.Applications[a.selectedApp].IntervalId=c)}function w(){if(a.interval.intType=a.route.Applications[a.selectedApp].IntervalId?"list":"*,*,*,*"===a.route.Applications[a.selectedApp].interval?"always":"custom",a.interval.IntervalId=a.route.Applications[a.selectedApp].IntervalId,!a.route.Applications[a.selectedApp].IntervalId){var b,c=a.route.Applications[a.selectedApp].interval?a.route.Applications[a.selectedApp].interval.split(","):["*","*","*","*"];c.forEach(function(c,d){switch(d){case 0:"*"!==c?(b=c.split("-"),a.interval.t_from=moment(b[0],"HH:mm"),a.interval.t_to=moment(b[1],"HH:mm"),a.interval.alwaysTime=!1):(a.interval.t_from=moment(new Date),a.interval.t_to=moment(new Date),a.interval.alwaysTime=!0);break;case 1:"*"!==c?(b=c.split("-"),a.interval.wd_from=b[0],a.interval.wd_to=b[1]?b[1]:"always"):(a.interval.wd_from="always",a.interval.wd_to="always");break;case 2:"*"!==c?(b=c.split("-"),a.interval.md_from=b[0],a.interval.md_to=b[1]?b[1]:"always"):(a.interval.md_from="always",a.interval.md_to="always");break;case 3:"*"!==c?(b=c.split("-"),a.interval.m_from=b[0],a.interval.m_to=b[1]?b[1]:"always"):(a.interval.m_from="always",a.interval.m_to="always")}})}}a.alwaysSwitch={isActive:!0,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.$translate=b,a.selectedApp=void 0,a.showGrid=!0,a.$application=i.application,a.$interval=j.interval,a._=_,a.selectedRows=[],a.gridOptions={enableHorizontalScrollbar:0,enableVerticalScrollbar:0,enableSorting:!1,rowTemplate:'<div grid="grid" class="ui-grid-draggable-row" draggable="true"><div ng-repeat="(colRenderIndex, col) in colContainer.renderedColumns track by col.colDef.name" class="ui-grid-cell" ng-class="{ \'ui-grid-row-header-cell\': col.isRowHeader, \'custom\': true }" ui-grid-cell></div></div>',columnDefs:[{name:"app",headerCellFilter:"translate",displayName:"APPLICATION_APPLICATION",enableColumnMenu:!1},{name:"appType",headerCellFilter:"translate",displayName:"APPLICATION_INFO",cellClass:"ui-grid-vcenter",cellTemplate:"<div>{{'APPLICATION_APPS_'+(row.entity.appType || (grid.appScope._.find(grid.appScope.$application.applications,{value:row.entity.app}) ? row.entity.app : 'custom')).toUpperCase() | translate}}</div>",enableColumnMenu:!1},{name:"appdata",headerCellFilter:"translate",displayName:"APPLICATION_ARGUMENTS",cellClass:"ui-grid-vcenter",cellTemplate:"<div>{{row.entity.appdata.join(',')}}</div>",enableColumnMenu:!1},{name:"interval",headerCellFilter:"translate",displayName:"APPLICATION_TIME_INTERVAL",enableColumnMenu:!1},{name:"action",enableColumnMenu:!1,headerCellFilter:"translate",displayName:"APPLICATION_ACTION",width:125,cellClass:"ui-grid-vcenter",cellTemplate:'<div><a class="btn btn-xs blue-hoki" data-ng-click="grid.appScope.openApplication(grid.appScope.gridOptions.data.indexOf(row.entity))"><i class="icon-settings"></i></a><a class="btn btn-xs red-sunglo" data-ng-click="grid.appScope.deleteApp(row.entity.app+\' application\', grid.appScope.gridOptions.data.indexOf(row.entity))"><i class="fa fa-trash"></i></a></div>'}],onRegisterApi:function(b){b.selection.on.rowSelectionChanged(a,function(b){b.isSelected?a.selectedRows.push(b.entity):_.pull(a.selectedRows,b.entity)}),b.selection.on.rowSelectionChangedBatch(a,function(b){b[0].isSelected?a.selectedRows=_.map(b,"entity"):a.selectedRows=[]}),b.draggableRows.on.rowDropped(a,function(b,c){a.updateRoute()}),b.grid.registerDataChangeCallback(function(){x(a.gridOptions.data.length)})}},a.deleteItems=g.confirm["delete"](function(){_.remove(a.route.Applications,function(b){return _.includes(a.selectedRows,b)}),a.selectedRows=[],a.updateRoute()}),a.initRingGroup=function(){var b,c,d;return void 0===a.selectedApp?a.usersArray=[]:a.usersArray=_.map(a.route.Applications[a.selectedApp].appdata[0].split("&"),function(a){return a.split("/")[1]}),r.get().$promise.then(function(a){return b=a,s.get().$promise}).then(function(a){return c=a,t.get().$promise}).then(function(e){d=e,ComponentsDropdowns.bindUserByRole(b,c,d,function(b){a.usersArray=_.union(b,a.usersArray),void 0===a.selectedApp?(a.application.appdata[0]=null,a.application.appdata[0]=_.map(a.usersArray,function(a){return"SIP/"+a}).join("&")):(a.route.Applications[a.selectedApp].appdata[0]=null,a.route.Applications[a.selectedApp].appdata[0]=_.map(a.usersArray,function(a){return"SIP/"+a}).join("&"))},function(b){a.usersArray=_.difference(a.usersArray,b),void 0===a.selectedApp?(a.application.appdata[0]=null,a.application.appdata[0]=_.map(a.usersArray,function(a){return"SIP/"+a}).join("&")):(a.route.Applications[a.selectedApp].appdata[0]=null,a.route.Applications[a.selectedApp].appdata[0]=_.map(a.usersArray,function(a){return"SIP/"+a}).join("&"))},a.route.Applications[a.selectedApp]?a.route.Applications[a.selectedApp].appdata:null)})["catch"](function(a){console.error(a)})};var x=function(a){var b=a?30*a+120:177;angular.element(document.getElementsByClassName("ui-grid")[0]).css("height",b+"px")};a.initApplication=function(b){b&&(a.selectedApp=void 0),a.forms={settings:void 0,interval:void 0},a.application={},a.interval={intType:"always",t_from:moment(new Date),t_to:moment(new Date),wd_from:"always",wd_to:"always",md_from:"always",md_to:"always",m_from:"always",m_to:"always",alwaysTime:!0},a.main={app:""}},a.$watch("interval",function(a){a&&v(a)},!0),a.updateSetAppdata=function(){a.application.variable&&a.application.value&&"Set"===a.main.app.value?a.application.appdata[0]=a.application.variable+"="+a.application.value:a.application.appdata[0]=null},a.updateSetAppdataSettings=function(){a.application.variable&&a.application.value&&"Set"===a.main.app.value?a.route.Applications[a.selectedApp].appdata[0]=a.application.variable+"="+a.application.value:a.application.appdata[0]=null},a.$watch("main.app",function(b){if(b){var c,d,e={},f={};switch(void 0===a.selectedApp&&(a.application={appType:b.type,app:b.value,interval:a.application.interval||"*,*,*,*",appdata:[]}),b.value){case"Queue":c=l,d=m;break;case"Playback":c=m;break;case"AGI":c=n;break;case"Goto":c=o;break;case"Voicemail":c=q;break;case"Dial":switch(b.type){case"internalDial":c=r,e={controller:"all"};break;case"externalDial":c=u}}if(c)return c.get(e).$promise.then(function(b){a.items=b.rows}).then(function(){return d?d.get(f).$promise:void 0}).then(function(b){b&&(a.items2=b.rows)})["catch"](function(a){h.error(a)})}},!0),a.deselectAndRedirect=function(b){a.selectedApp=void 0,e.path(b)},a.getIntervals=function(){return p.get().$promise.then(function(b){a.Intervals=b.rows,d.syncUpdates("interval",a.Intervals)})["catch"](function(a){h.error(a)})},a.getRoute=function(){return k.get({id:c.id}).$promise.then(function(b){a.route=b,a.gridOptions.data=b.Applications,x(a.gridOptions.data.length)})["catch"](function(a){e.path("/channels/voice/routes/internal/list")})},a.getApplication=function(){if(void 0===a.selectedApp)e.path("/channels/voice/routes/internal/list");else{if(a.showGrid=!0,a.route.Applications[a.selectedApp].appType)a.main.app=_.find(a.$application.applications,{type:a.route.Applications[a.selectedApp].appType});else{var b=_.find(a.$application.applications,{value:a.route.Applications[a.selectedApp].app});if(b)a.main.app=b;else{a.main.app=_.find(a.$application.applications,{type:"custom"});var c=a.route.Applications[a.selectedApp].appdata.join(",");a.route.Applications[a.selectedApp].appdata=[c],a.route.Applications[a.selectedApp].appType="custom"}}if("Set"===a.main.app.value){var d=a.route.Applications[a.selectedApp].appdata[0].split("=");a.application.variable=d[0],a.application.value=d[1]}w()}},a.openApplication=function(b){a.selectedApp=b,a.showGrid=!1,e.path("/channels/voice/routes/internal/view/"+c.id+"/applications/settings")},a.updateRoute=function(d){return a.route.exten=a.$application.checkUnderscore(a.route.exten),_.forEach(a.route.Applications,function(a){if("custom"!==a.appType)switch(a.app){case"Dial":var b;switch(a.appType){case"externalDial":b=3;break;case"internalDial":b=2;break;default:b=2}a.appdata[b]=a.appdata[b]||"",a.appdata[b]+=(_.includes(a.appdata[b],"x")?"":"x")+(_.includes(a.appdata[b],"X")?"":"X");break;case"Queue":a.appdata[1]=a.appdata[1]||"",a.appdata[1]+=(_.includes(a.appdata[1],"x")?"":"x")+(_.includes(a.appdata[1],"X")?"":"X")}}),k.update({id:a.route.id},a.route).$promise.then(function(f){a.selectedApp=void 0,h.show(b.instant("MESSAGE_WELL_DONE")+"!","success"),d&&e.path("/channels/voice/routes/internal/view/"+c.id+"/"+d)})["catch"](function(a){h.error(a)})},a.getContexts=function(){return o.get().$promise.then(function(b){a.voiceContexts=b.rows,d.syncUpdates("voice_context",a.voiceContexts)})["catch"](function(a){h.error(a)})},a.deleteApp=g.confirm["delete"](function(b){a.route.Applications.splice(b,1),a.updateRoute()}),a.addApplication=function(){a.route.Applications.push(a.application),a.updateRoute("applications")},a.goNext=function(){f.wizard().next()},a.previous=function(){f.wizard().previous()},a.formValidation=function(a){return a},a.$on("destroy",function(){d.unsyncUpdates("voice_extension")})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.routes.internal.view",{url:"/view/:id",templateUrl:"app/channels/voice/route/internal/view/view.html",controller:"VoiceRouteInternalViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.channels.voice.routes.internal.view.settings",{url:"/settings",templateUrl:"app/channels/voice/route/internal/view/view.settings.html"}).state("main.channels.voice.routes.internal.view.applications",{url:"/applications",templateUrl:"app/channels/voice/route/internal/view/view.applications.html"}).state("main.channels.voice.routes.internal.view.application",{url:"/application",templateUrl:"app/channels/voice/route/view.application.html",resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/jquery-multi-select/css/multi-select.css","assets/plugins/jquery-multi-select/js/jquery.multi-select.js","assets/plugins/jquery-quicksearch/jquery.quicksearch.js","assets/scripts/components-dropdowns.js"]})}]}}).state("main.channels.voice.routes.internal.view.applications.settings",{url:"/settings",templateUrl:"app/channels/voice/route/view.applicationSettings.html",resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/jquery-multi-select/css/multi-select.css","assets/plugins/jquery-multi-select/js/jquery.multi-select.js","assets/plugins/jquery-quicksearch/jquery.quicksearch.js","assets/scripts/components-dropdowns.js"]})}]}})}]),angular.module("xCallyShuttleApp").controller("VoiceRouteOutboundListCreateCtrl",["$scope","$uibModalInstance","Route","application","xAlert","$translate","$location","Tag",function(a,b,c,d,e,f,g,h){a.$application=d.application,a.forms={route:void 0},a.item={type:"outbound",appdata:"Outbound Call",context:"from-sip"},a.getTags=function(){return h.get().$promise.then(function(b){b.rows.unshift({name:"--"}),a.tags=b.rows})["catch"](function(a){e.error(a)})},a.ok=function(){return a.item.exten=a.$application.checkUnderscore(a.item.exten),c.save(a.item).$promise.then(function(a){b.close(a),g.path("/channels/voice/routes/outbound/view/"+a.id+"/routes")})["catch"](function(a){e.error(a)})},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("VoiceRouteOutboundListCtrl",["$scope","$http","socket","$translate","$rootScope","xAlert","Modal","stResource","gridOptions","Route","$uibModal","$location","$log",function(a,b,c,d,e,f,g,h,i,j,k,l,m){a.initView=function(){var b={exporterCsvFilename:"OutboundRoutes.csv",columnDefs:[{name:"exten",displayName:"APPLICATION_DESTINATION_PATTERN"},{name:"description"},{name:"applications",cellClass:"ui-grid-vcenter",cellTemplate:'<div data-ng-if="row.entity.Applications.length"><span data-ng-repeat="app in row.entity.Applications | limitTo:2">{{app.app}}({{app.appdata[0]}}),</span>...</div><div data-ng-if="!row.entity.Applications.length">{{\'MESSAGE_NO_AVAILABLE_APPLICATIONS\' | translate}}</div>',enableSorting:!1,enableFiltering:!1,enableColumnMenu:!1},{name:"action",width:75,buttons:[{"class":"blue-hoki",href:"/channels/voice/routes/outbound/view/{{row.entity.id}}/settings",name:"settings"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.exten, row.entity.id)"}]}]};a.gridOptions=i.gridOptions(j,b,a,{type:"outbound"})},a.create=function(){k.open({animation:!0,templateUrl:"app/channels/voice/route/outbound/list/create.modal.html",controller:"VoiceRouteOutboundListCreateCtrl"})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.routes.outbound.list",{url:"/list",templateUrl:"app/channels/voice/route/outbound/list/list.html",controller:"VoiceRouteOutboundListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"smart-table",insertBefore:"#ng_load_plugins_before",files:["assets/css/smart_table.css"]}])}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.routes.outbound",{url:"/outbound",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("VoiceRouteOutboundViewCtrl",["$scope","xAlert","$translate","$stateParams","socket","$location","WizardHandler","Modal","application","interval","Route","Trunk","VoiceContext","Interval","Tag",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){function p(b){var c,d;if("always"===b.intType)c=null,d="*,*,*,*";else if("list"===b.intType)d=b.IntervalId?_.find(a.Intervals,{id:b.IntervalId}).name:"*,*,*,*",c=b.IntervalId||null;else if("custom"===b.intType){c=null;var e,f,g,h;e=b.t_from&&b.t_to&&!b.alwaysTime?moment(b.t_from).format("HH:mm")+"-"+moment(b.t_to).format("HH:mm"):"*",b.wd_from&&"always"!==b.wd_from?(f=b.wd_from,b.wd_to&&"always"!==b.wd_to&&(f+="-"+b.wd_to)):f="*",b.md_from&&"always"!==b.md_from?(g=b.md_from,b.md_to&&"always"!==b.md_to&&(g+="-"+b.md_to)):g="*",b.m_from&&"always"!==b.m_from?(h=b.m_from,b.m_to&&"always"!==b.m_to&&(h+="-"+b.m_to)):h="*",d=e+","+f+","+g+","+h}void 0===a.selectedApp?(a.application.interval=d,a.application.IntervalId=c):(a.route.Applications[a.selectedApp].interval=d,a.route.Applications[a.selectedApp].IntervalId=c)}function q(){if(a.interval.intType=a.route.Applications[a.selectedApp].IntervalId?"list":"*,*,*,*"===a.route.Applications[a.selectedApp].interval?"always":"custom",a.interval.IntervalId=a.route.Applications[a.selectedApp].IntervalId,!a.route.Applications[a.selectedApp].IntervalId){var b,c=a.route.Applications[a.selectedApp].interval?a.route.Applications[a.selectedApp].interval.split(","):["*","*","*","*"];c.forEach(function(c,d){switch(d){case 0:"*"!==c?(b=c.split("-"),a.interval.t_from=moment(b[0],"HH:mm"),a.interval.t_to=moment(b[1],"HH:mm"),a.interval.alwaysTime=!1):(a.interval.t_from=moment(new Date),a.interval.t_to=moment(new Date),a.interval.alwaysTime=!0);break;case 1:"*"!==c?(b=c.split("-"),a.interval.wd_from=b[0],a.interval.wd_to=b[1]?b[1]:"always"):(a.interval.wd_from="always",a.interval.wd_to="always");break;case 2:"*"!==c?(b=c.split("-"),a.interval.md_from=b[0],a.interval.md_to=b[1]?b[1]:"always"):(a.interval.md_from="always",a.interval.md_to="always");break;case 3:"*"!==c?(b=c.split("-"),a.interval.m_from=b[0],a.interval.m_to=b[1]?b[1]:"always"):(a.interval.m_from="always",a.interval.m_to="always")}})}}a.$translate=c,a.selectedApp=void 0,a.showGrid=!0,a.$application=i.application,a.$interval=j.interval,a._=_,a.recordSwitch={onText:"On",offText:"Off",isActive:!0,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.alwaysSwitch={isActive:!0,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.selectedRows=[],a.gridOptions={enableHorizontalScrollbar:0,enableVerticalScrollbar:0,enableSorting:!1,rowTemplate:'<div grid="grid" class="ui-grid-draggable-row" draggable="true"><div ng-repeat="(colRenderIndex, col) in colContainer.renderedColumns track by col.colDef.name" class="ui-grid-cell" ng-class="{ \'ui-grid-row-header-cell\': col.isRowHeader, \'custom\': true }" ui-grid-cell></div></div>',columnDefs:[{name:"app",displayName:"APPLICATION_APPLICATION",cellClass:"ui-grid-vcenter",cellTemplate:"<div><span data-ng-if=\"row.entity.appType === 'externalDial'\">Default</span><span data-ng-if=\"row.entity.appType !== 'externalDial'\">{{row.entity.app}}</span></div>",headerCellFilter:"translate",enableColumnMenu:!1},{name:"appType",headerCellFilter:"translate",displayName:"APPLICATION_INFO",cellClass:"ui-grid-vcenter",cellTemplate:"<div>{{'APPLICATION_APPS_'+(row.entity.appType || (grid.appScope._.find(grid.appScope.$application.applications,{value:row.entity.app}) ? row.entity.app : 'custom')).toUpperCase() | translate}}</div>",enableColumnMenu:!1},{name:"appdata",displayName:"APPLICATION_ARGUMENTS",headerCellFilter:"translate",cellClass:"ui-grid-vcenter",cellTemplate:"<div>{{row.entity.appdata.join(',')}}</div>",enableColumnMenu:!1},{name:"interval",displayName:"APPLICATION_TIME_INTERVAL",headerCellFilter:"translate",enableColumnMenu:!1},{name:"action",displayName:"APPLICATION_ACTION",headerCellFilter:"translate",width:125,enableColumnMenu:!1,cellClass:"ui-grid-vcenter",cellTemplate:'<div><a class="btn btn-xs blue-hoki" data-ng-click="grid.appScope.openApplication(grid.appScope.gridOptions.data.indexOf(row.entity))"><i class="icon-settings"></i></a><a class="btn btn-xs red-sunglo" data-ng-click="grid.appScope.deleteApp(row.entity.app+\' application\', grid.appScope.gridOptions.data.indexOf(row.entity))"><i class="fa fa-trash"></i></a></div>'}],onRegisterApi:function(b){b.selection.on.rowSelectionChanged(a,function(b){b.isSelected?a.selectedRows.push(b.entity):_.pull(a.selectedRows,b.entity)}),b.selection.on.rowSelectionChangedBatch(a,function(b){b[0].isSelected?a.selectedRows=_.map(b,"entity"):a.selectedRows=[]}),b.draggableRows.on.rowDropped(a,function(b,c){a.updateRoute()}),b.grid.registerDataChangeCallback(function(){r(a.gridOptions.data.length)})}},a.deleteItems=h.confirm["delete"](function(){_.remove(a.route.Applications,function(b){return _.includes(a.selectedRows,b)}),a.selectedRows=[],a.updateRoute()});var r=function(a){var b=a?30*a+120:177;angular.element(document.getElementsByClassName("ui-grid")[0]).css("height",b+"px")};a.initApplication=function(b){b&&(a.selectedApp=void 0),a.forms={info:void 0,interval:void 0},a.application={},a.interval={intType:"always",t_from:moment(new Date),t_to:moment(new Date),wd_from:"always",wd_to:"always",md_from:"always",md_to:"always",m_from:"always",m_to:"always",alwaysTime:!0},a.main={app:""},a.applications=[{name:"Default",value:"Dial",type:"outboundDial"},{name:"Custom",value:"custom",type:"custom"}]},a.$watch("interval",function(a){a&&p(a)},!0),a.$watch("main.app",function(c){if(c){var d,e;switch(void 0===a.selectedApp&&(a.application={appType:c.type,app:c.value,interval:a.application.interval||"*,*,*,*",appdata:[]}),c.value){case"Dial":d=l;break;default:d=null,e=null}if(d)return d.get().$promise.then(function(b){a.items=b.rows}).then(function(){return e?e.get().$promise:void 0}).then(function(b){b&&(a.items2=b.rows)})["catch"](function(a){b.error(a)})}},!0),a.deselectAndRedirect=function(b){a.selectedApp=void 0,f.path(b)},a.getIntervals=function(){return n.get().$promise.then(function(b){a.Intervals=b.rows,e.syncUpdates("interval",a.Intervals)})["catch"](function(a){b.error(a)})},a.getRoute=function(){return k.get({id:d.id}).$promise.then(function(b){a.route=b,a.gridOptions.data=b.Applications,r(a.gridOptions.data.length)})["catch"](function(a){f.path("/channels/voice/routes/outbound/list")})},a.getApplication=function(){if(void 0===a.selectedApp)f.path("/channels/voice/routes/outbound/list");else{if(a.showGrid=!0,a.route.Applications[a.selectedApp].appType)a.main.app=_.find(a.applications,{type:a.route.Applications[a.selectedApp].appType});else{a.main.app=_.find(a.applications,{type:"custom"});var b=a.route.Applications[a.selectedApp].appdata.join(",");a.route.Applications[a.selectedApp].appdata=[b],a.route.Applications[a.selectedApp].appType="custom"}q()}},a.openApplication=function(b){a.selectedApp=b,a.showGrid=!1,f.path("/channels/voice/routes/outbound/view/"+d.id+"/routes/settings")},a.updateRoute=function(e){return a.route.exten=a.$application.checkUnderscore(a.route.exten),_.forEach(a.route.Applications,function(a){"outboundDial"===a.appType&&(a.appdata[4]=a.appdata[4]||"",a.appdata[4]+=(_.includes(a.appdata[4],"x")?"":"x")+(_.includes(a.appdata[4],"X")?"":"X"))}),k.update({id:a.route.id},a.route).$promise.then(function(g){a.selectedApp=void 0,b.show(c.instant("MESSAGE_WELL_DONE")+"!","success"),e&&f.path("/channels/voice/routes/outbound/view/"+d.id+"/"+e)})["catch"](function(a){b.error(a)})},a.getContexts=function(){return m.get().$promise.then(function(b){a.voiceContexts=b.rows,e.syncUpdates("voice_context",a.voiceContexts)})["catch"](function(a){b.error(a)})},a.getTags=function(){return o.get().$promise.then(function(b){b.rows.unshift({name:"--"}),a.tags=b.rows})["catch"](function(a){b.error(a)})},a.deleteApp=h.confirm["delete"](function(b){a.route.Applications.splice(b,1),a.updateRoute()}),a.addApplication=function(){a.route.Applications.push(a.application),a.updateRoute("routes")},a.goNext=function(){g.wizard().next()},a.previous=function(){g.wizard().previous()},a.formValidation=function(a){return a},a.$on("destroy",function(){e.unsyncUpdates("voice_extension")})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.routes.outbound.view",{url:"/view/:id",templateUrl:"app/channels/voice/route/outbound/view/view.html",controller:"VoiceRouteOutboundViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.channels.voice.routes.outbound.view.settings",{url:"/settings",templateUrl:"app/channels/voice/route/outbound/view/view.settings.html"}).state("main.channels.voice.routes.outbound.view.routes",{url:"/routes",templateUrl:"app/channels/voice/route/outbound/view/view.routes.html"}).state("main.channels.voice.routes.outbound.view.route",{url:"/route",templateUrl:"app/channels/voice/route/outbound/view/view.route.html"}).state("main.channels.voice.routes.outbound.view.routes.settings",{url:"/settings",templateUrl:"app/channels/voice/route/outbound/view/view.routeSettings.html"})}]),angular.module("xCallyShuttleApp").factory("Route",["$resource",function(a){return a("/api/voice/extensions/:id",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.routes",{url:"/routes",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:21}}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice",{url:"/voice",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user","agent"],redirectTo:"landing",id:7}}})}]),angular.module("xCallyShuttleApp").controller("VoiceVoicemailListCtrl",["$scope","VoiceMail","gridOptions",function(a,b,c){a.initView=function(){var d={exporterCsvFilename:"voice_mails.csv",primaryKey:"uniqueid",columnDefs:[{name:"mailbox"},{name:"fullname"},{name:"email"},{name:"action",width:75,buttons:[{"class":"blue-hoki",href:"/channels/voice/voicemails/view/{{row.entity.uniqueid}}/settings",name:"profile"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.mailbox, row.entity.uniqueid)"}]}]};a.gridOptions=c.gridOptions(b,d,a)}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.voicemails.list",{url:"/list",templateUrl:"app/channels/voice/voicemail/list/list.html",controller:"VoiceVoicemailListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"smart-table",insertBefore:"#ng_load_plugins_before",files:["assets/css/smart_table.css"]}])}]}})}]),angular.module("xCallyShuttleApp").controller("VoiceVoicemailViewCtrl",["$scope","VoiceMail","VoiceMailMessage","VoiceContext","$http","xAlert","$translate","$stateParams","socket","$sce","Modal","$location","gridOptions",function(a,b,c,d,e,f,g,h,i,j,k,l,m){function n(){var b={exporterCsvFilename:"voice_mail_messages.csv",primaryKey:"id",columnDefs:[{name:"callerid"},{name:"stamp",displayName:"APPLICATION_DATE",cellClass:"ui-grid-vcenter",cellTemplate:"<div>{{grid.appScope.moment(row.entity.stamp).format('YYYY-MM-DD HH:mm:ss')}}</div>"},{name:"duration",cellClass:"ui-grid-vcenter",cellTemplate:"<div>{{row.entity.duration*1000 | date:'mm:ss'}}</div>"},{name:"audio",displayName:"",width:225,enableSorting:!1,enableFiltering:!1,buttons:[{directive:'<audio-file-download params="{id:row.entity.id,controller:\'download\'}" resource="grid.appScope.VoiceMailMessage"></audio-file-download>'}]},{name:"action",width:150,buttons:[{directive:'<motion-file-download params="{id:row.entity.id,controller:\'download\'}" resource="grid.appScope.VoiceMailMessage" mimetype="audio/wav" btnclass="btn btn-xs blue-hoki" filename="row.entity.msg_id+\'.wav\'"></motion-file-download>'},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.id, row.entity.id)"}]}]};a.gridOptions=m.gridOptions(c,b,a,{mailbox:a.voicemail.mailbox,context:a.voicemail.context})}a.moment=moment,a["switch"]={isActive:!0,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.VoiceMailMessage=c,a.getVoicemail=function(){return b.get({id:h.uniqueid}).$promise.then(function(b){delete b.password,delete b.stamp,a.voicemail=b})["catch"](function(a){l.path("/voice/voicemails/list")})},a.updateVoiceVoicemail=function(){return b.update({id:h.uniqueid},a.voicemail).$promise.then(function(){f.show(g.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){f.error(a)})},a.getContexts=function(){return d.get().$promise.then(function(b){a.voiceContexts=b.rows})["catch"](function(a){f.error(a)})},a.getMessages=function(){return a.voicemail?void n():b.get({id:h.uniqueid}).$promise.then(function(b){delete b.password,delete b.stamp,a.voicemail=b,n()})["catch"](function(a){l.path("/voice/voicemails/view/"+h.uniqueid+"/settings")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.voicemails.view",{url:"/view/:uniqueid",templateUrl:"app/channels/voice/voicemail/view/view.html",controller:"VoiceVoicemailViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.channels.voice.voicemails.view.settings",{url:"/settings",templateUrl:"app/channels/voice/voicemail/view/view.settings.html"}).state("main.channels.voice.voicemails.view.messages",{url:"/messages",templateUrl:"app/channels/voice/voicemail/view/view.messages.html"})}]),angular.module("xCallyShuttleApp").factory("VoiceMail",["$resource",function(a){return a("/api/voice/voicemails/:id/:controller",{uniqueid:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.voicemails",{url:"/voicemails",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:23}}})}]),angular.module("xCallyShuttleApp").factory("VoiceMailMessage",["$resource",function(a){return a("/api/voice/voicemails/messages/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("VoiceVoicemailWizardCtrl",["$scope","VoiceMail","xAlert","WizardHandler","$location","Setting",function(a,b,c,d,e,f){a.initWizard=function(){a.form={},a.item={context:"from-voicemail"}},a.next=function(){d.wizard().next()},a.previous=function(){d.wizard().previous()},a.exitValidation=function(a){return a},a.getFirstFreeMailbox=function(){f.get({controller:"mailbox"}).$promise.then(function(b){a.item.mailbox=b.value})["catch"](function(a){c.error(a)})},a.createItem=function(){return a.item.customer_id=a.item.mailbox,b.save(a.item).$promise.then(function(){e.path("/channels/voice/voicemails/list")})["catch"](function(a){c.error(data)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.channels.voice.voicemails.wizard",{url:"/wizard",templateUrl:"app/channels/voice/voicemail/wizard/wizard.html",controller:"VoiceVoicemailWizardCtrl"})}]),angular.module("xCallyShuttleApp").factory("VoiceQueue",["$resource",function(a){ +return a("/api/voice/queues/:id/:controller/:controller2",{name:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("Company",["$resource",function(a){return a("/api/contactmanager/companies/:id/:controller",{name:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.contactmanager.companies",{url:"/companies",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:5}}})}]),angular.module("xCallyShuttleApp").controller("CompanyListCreateModalCtrl",["$scope","$uibModalInstance",function(a,b){a.forms={dashboard:void 0},a.item={},a.ok=function(){a.item.model=JSON.stringify({title:a.item.name}),b.close(a.item)},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("ContactManagerCompanyListCtrl",["$scope","$translate","xAlert","Modal","$uibModal","$log","Company","gridOptions","$location",function(a,b,c,d,e,f,g,h,i){a.initView=function(){var b={exporterCsvFilename:"Companies.csv",columnDefs:[{name:"name"},{name:"description"},{name:"action",width:100,buttons:[{"class":"blue-hoki",name:"profile",href:"/contactmanager/companies/view/{{row.entity.id}}/settings"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"},{"class":"green-turquoise",name:"contacts",uisref:"main.contactmanager.contacts.list({companyId:{{row.entity.id}}})"}]}]};a.gridOptions=h.gridOptions(g,b,a)},a.create=function(){var a=e.open({animation:!0,size:"lg",templateUrl:"app/contactmanager/company/list/create.modal.html",controller:"CompanyListCreateModalCtrl"});a.result.then(function(a){return g.save(a).$promise.then(function(a){i.path("/contactmanager/companies/view/"+a.id+"/settings")})["catch"](function(a){c.error(a)})},function(){f.info("Modal dismissed at: "+new Date)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.contactmanager.companies.list",{url:"/list",templateUrl:"app/contactmanager/company/list/list.html",controller:"ContactManagerCompanyListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"smart-table",insertBefore:"#ng_load_plugins_before",files:["assets/css/smart_table.css"]}])}]}})}]),angular.module("xCallyShuttleApp").controller("ContactManagerCompanyViewCtrl",["$scope","xAlert","$translate","$stateParams","$location","Company",function(a,b,c,d,e,f){a.getCompany=function(){return f.get({id:d.id}).$promise.then(function(b){a.company=b})["catch"](function(a){e.path("/contactmanager/companies/list")})},a.updateCompany=function(){return f.update({id:d.id},a.company).$promise.then(function(){b.show(c.instant("MESSAGE_WELL_DONE")+"!","success")})["catch"](function(a){b.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.contactmanager.companies.view",{url:"/view/:id",templateUrl:"app/contactmanager/company/view/view.html",controller:"ContactManagerCompanyViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.contactmanager.companies.view.settings",{url:"/settings",templateUrl:"app/contactmanager/company/view/view.settings.html"})}]),angular.module("xCallyShuttleApp").factory("Contact",["$resource",function(a){return a("/api/contactmanager/contacts/:id/:controller",{id:"@id"},{update:{method:"PUT"},search:{method:"POST"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.contactmanager.contacts",{url:"/contacts",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("ContactManagerListCopyModalCtrl",["$scope","$uibModalInstance","xAlert","List","Contact","$translate",function(a,b,c,d,e,f){a.item={},a.getLists=function(){return d.get().$promise.then(function(b){a.lists=b.rows})["catch"](function(a){c.error(a)})},a.ok=function(){b.close(a.item)},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("ContactManagerListImportModalCtrl",["$scope","$uibModalInstance","indexes","csv","xAlert","socket","List","Contact","$translate","Company",function(a,b,c,d,e,f,g,h,i,j){function k(b){if(b>=a.csvLength||a.stopped)return void(a.importing=!1);for(var c,f=[],g=b;b+200>g&&g<a.csvLength;g++)c={},_.forOwn(a.item,function(b,e){switch(e){case"tags":c.tags=[],a.item.tags.forEach(function(a){""!==d[g][a]&&c.tags.push(d[g][a])});break;default:c[e]=d[g][b]}}),c.tags=c.tags?c.tags.join(","):void 0,c.ListId=a.item.ListId,c.CompanyId=a.item.CompanyId||null,f.push(c);return h.save({controller:"bulk"},{contacts:f}).$promise.then(function(b){a["import"].success+=b.ok*a.addingQuote,a["import"].succeeded+=b.ok,a["import"].fail+=b.ko*a.addingQuote,a["import"].failed+=b.ko,k(g)})["catch"](function(b){a.stopped=!0,e.error(b),k(g)})}a.indexes=c,a.importing=!1,a.submitted=!1,a.stopped=!1,a["import"]={success:0,fail:0,succeeded:0,failed:0},a.csvLength=d.length,a.addingQuote=100/a.csvLength,a.forms={csv:void 0},a.item={},a.start=function(){a.importing=!0,a.submitted=!0,k(0)},a.getLists=function(){return g.get().$promise.then(function(b){a.lists=b.rows,a.item.ListId=1,a.getCustomFields()})["catch"](function(a){e.error(a)})},a.getCompanies=function(){return j.get().$promise.then(function(b){a.companies=b.rows})["catch"](function(a){e.error(a)})},a.getCustomFields=function(){return g.get({listId:a.item.ListId,controller:"customfields"}).$promise.then(function(b){b.rows.forEach(function(a){a.values=JSON.parse(a.values)}),a.customFields=b.rows,f.socket.on("custom_field:remove",function(b){_.remove(a.customFields,function(a){return b.id==a.id})}),f.socket.on("custom_field:save",function(b){if(b.ListId===a.item.ListId){var c=_.find(a.customFields,{id:b.id});c||("string"==typeof b.values&&(b.values=JSON.parse(b.values)),a.customFields.push(b))}})})["catch"](function(a){console.error(a),e.error(a)})},a.close=function(){b.close()},a.stop=function(){a.stopped=!0}}]),angular.module("xCallyShuttleApp").controller("ContactManagerContactListCtrl",["$scope","$translate","Modal","FileUploader","Papa","$uibModal","$log","Contact","gridOptions","List","uiGridConstants","xAlert","socket","$stateParams","Auth","Company",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){a.Auth=o,a.initView=function(){var c;return j.get().$promise.then(function(b){return a.lists=[],a.customFields=[],b.rows.forEach(function(b,c){_.forEach(b.CustomFields,function(b){a.customFields.push({name:b.name,alias:b.alias})}),a.lists.push({value:b.id,label:b.name})}),p.get().$promise}).then(function(b){a.companies=[],b.rows.forEach(function(b,c){a.companies.push({value:b.id,label:b.name})})}).then(function(){var d=[{"class":"blue-hoki",name:"profile",onClick:"grid.appScope.openContactTab(row.entity)"}];o.isAgent()||(d.push({"class":"green",title:b.instant("APPLICATION_COPY"),name:"copy",onClick:"grid.appScope.copy(row.entity.id)"}),d.push({"class":"red-sunglo",name:"delete",title:b.instant("APPLICATION_DELETE"),onClick:"grid.appScope.deleteItem(row.entity.fullname, row.entity.id)"})),c={exporterCsvFilename:"Contacts.csv",columnDefs:[{name:"firstName"},{name:"lastName"},{name:"phone"},{name:"email"},{name:"ListId",displayName:"APPLICATION_LIST",field:"List.name",filter:{type:k.filter.SELECT,term:n.listId||null,selectOptions:a.lists},cellTemplate:'<div class="centered-uigrid-td"><a href="/contactmanager/lists/view/{{row.entity.ListId}}/settings">{{row.entity.List.name}}</a></div>'},{name:"CompanyId",displayName:"APPLICATION_COMPANY",field:"Company.name",filter:{type:k.filter.SELECT,term:n.companyId||null,selectOptions:a.companies},cellTemplate:'<div class="centered-uigrid-td"><a href="/contactmanager/companies/view/{{row.entity.CompanyId}}/settings">{{row.entity.Company.name}}</a></div>'},{name:"tags",filterHeaderTemplate:'<div class="ui-grid-filter-container row"><div ng-repeat="colFilter in col.filters" class="col-md-12 col-md-offset-0 col-sm-12 col-sm-offset-0 col-xs-12 col-xs-offset-0"><div custom-grid-tags-filter-header></div></div></div>',filters:[{name:"tags"}],cellTemplate:"<div class=\"centered-uigrid-td\">{{row.entity.tags.join(',')}}</div>"}]},_.forEach(a.customFields,function(a){c.columnDefs.push({name:a.name,displayName:a.alias,visible:!1})}),c.columnDefs.push({name:"action",width:100,buttons:d}),a.gridOptions=i.gridOptions(h,c,a),m.socket.on("contact_manager:remove",function(b){a.gridOptions.getPage()})})["catch"](function(a){l.error(a)})},d.FileSelect.prototype.isEmptyAfterSelection=function(){return!0};var q=a.uploader=new d({queueLimit:1,clearInputAfterAddedToQueue:!0});q.onAfterAddingFile=function(b){console.log("fileadded"),e.parse(b._file,{header:!0,complete:function(b){a.uploader.clearQueue(),a["import"](b.data)},error:function(a){console.log(a)}})},a["import"]=function(b){var c=f.open({animation:!0,size:"lg",backdrop:"static",keyboard:!1,templateUrl:"app/contactmanager/contact/list/import.modal.html",controller:"ContactManagerListImportModalCtrl",resolve:{indexes:function(){return _.keys(b[0])},csv:function(){return b}}});c.result.then(function(b){a.gridOptions.getPage()},function(){g.info("Modal dismissed at: "+new Date)})},a.copy=function(b){var c=f.open({animation:!0,size:"small",templateUrl:"app/contactmanager/contact/list/copy.modal.html",controller:"ContactManagerListCopyModalCtrl"});c.result.then(function(c){return h.save({id:b,controller:"copy"},c).$promise.then(function(b){a.openContactTab({firstName:b.firstName,lastName:b.lastName,id:b.id})})["catch"](function(a){l.error(a)})},function(){g.info("Modal dismissed at: "+new Date)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.contactmanager.contacts.list",{url:"/list",templateUrl:"app/contactmanager/contact/list/list.html",params:{listId:null,companyId:null},controller:"ContactManagerContactListCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.contactmanager",{url:"/contactmanager",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user","agent"],redirectTo:"landing",id:5}}})}]),angular.module("xCallyShuttleApp").factory("List",["$resource",function(a){return a("/api/contactmanager/lists/:listId/:controller/:id",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.contactmanager.lists",{url:"/lists",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:5}}})}]),angular.module("xCallyShuttleApp").controller("ContactManagerListListCreateModalCtrl",["$scope","$uibModalInstance",function(a,b){a.forms={dashboard:void 0},a.item={},a.ok=function(){b.close(a.item)},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("ContactManagerListListCtrl",["$scope","$http","$translate","Modal","xAlert","$uibModal","$log","List","gridOptions",function(a,b,c,d,e,f,g,h,i){a.initView=function(){var b={exporterCsvFilename:"Lists.csv",columnDefs:[{name:"name"},{name:"description"},{name:"action",width:100,buttons:[{"class":"blue-hoki",name:"settings",href:"/contactmanager/lists/view/{{row.entity.id}}/settings"},{"class":"green-turquoise",name:"contacts",uisref:"main.contactmanager.contacts.list({listId:{{row.entity.id}}})"},{"class":"{{row.entity.defaultEntry ? 'red-sunglo disabled' : 'red-sunglo'}}",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=i.gridOptions(h,b,a)},a.create=function(){var d=f.open({animation:!0,templateUrl:"app/contactmanager/list/list/create.modal.html",controller:"ContactManagerListListCreateModalCtrl"});d.result.then(function(d){b.post("/api/contactmanager/lists/",d).then(function(b){a.gridOptions.getPage(),e.show(c.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){e.error(a)})},function(){g.info("Modal dismissed at: "+new Date)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.contactmanager.lists.list",{url:"/list",templateUrl:"app/contactmanager/list/list/list.html",controller:"ContactManagerListListCtrl"})}]),angular.module("xCallyShuttleApp").controller("ContactManagerListCustomFieldViewCreateModalCtrl",["$scope","$uibModalInstance","$translate",function(a,b,c){a.$translate=c,a.forms={dashboard:void 0},a.item={},a.choices=[{value:""}],a.addField=function(){a.choices.push({})},a.removeField=function(b){a.choices.splice(b,1)},a.types=[{name:"APPLICATION_TEXT",value:"text"},{name:"APPLICATION_SELECT",value:"select"}],a.ok=function(){"select"===a.item.type&&(a.item.values=angular.toJson(a.choices)),b.close(a.item)},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("ContactManagerListViewCtrl",["$scope","xAlert","$translate","$stateParams","socket","$location","$uibModal","$log","Modal","List","Team","gridOptions",function(a,b,c,d,e,f,g,h,i,j,k,l){function m(a){var b=a.split(""),c=0,d=0;return b.shift(),b.forEach(function(a,b){"{"===a?c++:"}"===a&&(c--,c||(d=b+1))}),d?JSON.parse("["+a.substr(1,d)+"]"):[]}var n=function(){return{select:function(b){return j.save({listId:a.list.id,controller:"agents"},{agents:b}).$promise.then(function(){a.getTeams()})["catch"](function(a){console.log(a)})},deselect:function(b){return j["delete"]({listId:a.list.id,controller:"agents",agents:b}).$promise.then(function(){a.getTeams()})["catch"](function(a){console.log(a)})}}};a.getList=function(){return j.get({listId:d.id}).$promise.then(function(b){a.list=b})["catch"](function(a){f.path("/contactmanager/lists/list")})},a.updateList=function(){return j.update({id:d.id},a.list).$promise.then(function(){b.show(c.instant("MESSAGE_WELL_DONE")+"!","success")})["catch"](function(a){b.error(a)})},a.getTeams=function(){return k.get({controller:"associations"}).$promise.then(function(b){return a.teams=b.rows,a.list?void 0:a.getList()}).then(function(){return a.list.defaultEntry&&f.path("/contactmanager/lists/list"),j.get({listId:d.id,controller:"agents"}).$promise}).then(function(b){ComponentsDropdowns.bindQueue(a.teams,_.map(b.rows,function(a){return{id:a.id}}),n)})["catch"](function(a){console.error(a)})},a.initCustomFields=function(){var b={exporterCsvFilename:"customfields.csv",primaryKey:"id",columnDefs:[{name:"alias",displayName:"APPLICATION_NAME"},{name:"name",displayName:"APPLICATION_FIELD"},{name:"type"},{name:"description"},{name:"action",width:200,buttons:[{"class":"blue-hoki",href:"/contactmanager/lists/view/{{grid.appScope.$stateParams.id}}/customfields/settings/{{row.entity.id}}",name:"settings"},{"class":"red-sunglo",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)",name:"delete"}]}]};a.gridOptions=l.gridOptions(j,b,a,{listId:d.id,controller:"customfields"})},a.create=function(){var e=g.open({animation:!0,templateUrl:"app/contactmanager/list/view/create.modal.html",controller:"ContactManagerListCustomFieldViewCreateModalCtrl"});e.result.then(function(e){return j.save({listId:d.id,controller:"customfields"},e).$promise.then(function(){a.gridOptions.getPage(),b.show(c.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){b.error(a)})},function(){h.info("Modal dismissed at: "+new Date)})},a.getCustomField=function(){return j.get({listId:d.id,controller:"customfields",id:d.cfId}).$promise.then(function(b){if(a.customField=b,"select"===a.customField.type)try{a.choices=JSON.parse(a.customField.values)}catch(c){a.choices=m(a.customField.values)}})["catch"](function(a){console.error(a)})},a.updateCustomField=function(){var e=angular.copy(a.customField);return"select"===e.type&&(e.values=angular.toJson(a.choices)),j.update({listId:d.id,controller:"customfields",id:d.cfId},e).$promise.then(function(){b.show(c.instant("MESSAGE_WELL_DONE")+"!","success")})["catch"](function(a){b.error(a)})},a.addField=function(){a.choices.push({})},a.removeField=function(b){a.choices.splice(b,1)}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.contactmanager.lists.view",{url:"/view/:id",templateUrl:"app/contactmanager/list/view/view.html",controller:"ContactManagerListViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.contactmanager.lists.view.settings",{url:"/settings",templateUrl:"app/contactmanager/list/view/view.settings.html"}).state("main.contactmanager.lists.view.agents",{url:"/agents",templateUrl:"app/contactmanager/list/view/view.agents.html",cache:!1,serie:!0,resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/jquery-multi-select/css/multi-select.css","assets/plugins/jquery-multi-select/js/jquery.multi-select.js","assets/plugins/jquery-quicksearch/jquery.quicksearch.js","assets/scripts/components-dropdowns.js"]})}]}}).state("main.contactmanager.lists.view.customfields",{url:"/customfields",templateUrl:"app/contactmanager/list/view/view.customFields.html"}).state("main.contactmanager.lists.view.customfields.settings",{url:"/settings/:cfId",templateUrl:"app/contactmanager/list/view/view.customFieldSettings.html",controller:"ContactManagerListViewCtrl"})}]),angular.module("xCallyShuttleApp").controller("DashboardChatCtrl",["$scope","Auth","ChatRoom","socket","Agent","$q","$translate","ReportChatSession","$timeout",function(a,b,c,d,e,f,g,h,i){a.Auth=b,a.moment=moment,a["new"]=0,a.open=0,a.unmanaged=0,a.closed=0;var j=function(a){var b=a?30*a+130:270;angular.element(document.getElementsByClassName("ui-grid")[0]).css("height",b+"px"),angular.element(document.getElementsByClassName("ui-grid-viewport")).css("height",30*a+"px")};a.initAgent=function(){a.table1={enableGridMenu:!1,enableHorizontalScrollbar:0,enableVerticalScrollbar:0,multiSelect:!0,columnDefs:[{name:"UserHasChatQueue.queue",headerCellFilter:"translate",displayName:"APPLICATION_QUEUE",cellClass:"text-center ui-grid-vcenter"}],data:[],onRegisterApi:function(b){a.gridApi=b,a.gridApi.grid.registerDataChangeCallback(function(){j(a.gridApi.core.getVisibleRows(a.gridApi.grid).length)})}},a.table2={headerCellFilter:"translate",enableHorizontalScrollbar:0,enableVerticalScrollbar:0,enableFiltering:!0,columnDefs:[{name:"roomid",displayName:"APPLICATION_INTERACTION_ID",headerCellFilter:"translate"},{name:"websitename",displayName:"APPLICATION_WEBSITE",headerCellFilter:"translate"},{name:"application",displayName:"APPLICATION_APPLICATION",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{row.entity.application}} <span data-ng-if=\"row.entity.application == 'queue' && row.entity.queuename\">({{row.entity.queuename}})</span></div>"},{name:"status",displayName:"APPLICATION_STATUS",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div><span data-ng-if="!row.entity.leaveAt">{{\'APPLICATION_QUEUESTATUS_WAITING\' | translate}}</span><span data-ng-if="row.entity.leaveAt && row.entity.abandon">{{\'APPLICATION_QUEUESTATUS_ABANDON\' | translate}}</span><span data-ng-if="row.entity.leaveAt && row.entity.complete">{{\'APPLICATION_QUEUESTATUS_COMPLETE\' | translate}}</span><span data-ng-if="row.entity.leaveAt && row.entity.timeout">{{\'APPLICATION_TIMEOUT\' | translate}}</span><span data-ng-if="!row.entity.leaveAt"> [<css-timer start-time="row.entity.updatedAt"></css-timer>]</span></div>',enableSorting:!1,enableColumnMenu:!1,enableFiltering:!1},{name:"membername",displayName:"APPLICATION_AGENT",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{row.entity.membername || ''}}</div>"}],data:[],gridMenuTitleFilter:function(a){var b=f.defer();return b.resolve(g.instant(a)),b.promise},onRegisterApi:function(b){a.gridApi=b,a.gridApi.grid.registerDataChangeCallback(function(){j(a.table2.data.length)})}},e.get({id:b.getCurrentUser().id,controller:"chat",controller1:"queues"}).$promise.then(function(b){a.table1.data=b.rows})["finally"](function(){d.socket.on("user_has_chat_queue:save",function(c){c.UserId!=b.getCurrentUser().id||_.find(a.table1.data,{id:c.ChatQueueId})||a.table1.data.push({id:c.ChatQueueId,UserHasChatQueue:c})}),d.socket.on("user_has_chat_queue:remove",function(c){c.UserId===b.getCurrentUser().id&&_.remove(a.table1.data,{id:c.ChatQueueId})})})["catch"](function(a){console.error(a)}),h.get({controller:"waiting",controller2:"applications"}).$promise.then(function(b){a.table2.data=b.rows})["finally"](function(){d.socket.on("report_chat_session:save",function(b){var c=_.find(a.table2.data,{id:b.id});c?(_.merge(c,b),b.leaveAt&&i(function(){_.remove(a.table2.data,{id:b.id})},1e4)):b.leaveAt||a.table2.data.push(b)}),d.socket.on("report_chat_session:remove",function(b){_.remove(a.table2.data,{id:b.id})})})["catch"](function(a){console.log(a)})},a.initWidget=function(b){var e;switch(b){case"unmanaged":e=c;break;default:e=h}return e.get({id:b}).$promise.then(function(c){a[b]=c.value,a.charts={interactions:{labels:[g.instant("APPLICATION_DASHBOARD_NEW"),g.instant("APPLICATION_DASHBOARD_OPEN"),g.instant("APPLICATION_UNMANAGED"),g.instant("APPLICATION_DASHBOARD_CLOSED"),g.instant("APPLICATION_DASHBOARD_ABANDONED")],values:[a["new"],a.open,a.unmanaged,a.closed,a.abandoned],colours:["#44B6AE","#578EBE","#35AA47","#8775A7","#f3c200"]}},d.socket.on("report_chat_dashboard:"+b,function(c){a[b]=c.value,a.charts.interactions.values=[a["new"],a.open,a.unmanaged,a.closed]})})["catch"](function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").controller("DashboardCtrl",["$scope","$translate","Auth",function(a,b,c){}]),angular.module("xCallyShuttleApp").factory("Dashboard",["$resource",function(a){return a("/api/dashboards/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.dashboard",{"abstract":!0,url:"/dashboard",templateUrl:"app/dashboard/dashboard.html",controller:"DashboardCtrl",data:{permissions:{only:["admin","user","agent"],redirectTo:"landing",id:1}}}).state("main.dashboard.voice",{url:"/voice",controller:"DashboardVoiceCtrl",templateUrl:"app/dashboard/voice/voice.html"}).state("main.dashboard.chat",{url:"/chat",controller:"DashboardChatCtrl",templateUrl:"app/dashboard/chat/chat.html",data:{permissions:{redirectTo:"landing",id:8}}}).state("main.dashboard.mail",{url:"/mail",controller:"DashboardMailCtrl",templateUrl:"app/dashboard/mail/mail.html",data:{permissions:{redirectTo:"landing",id:9}}}).state("main.dashboard.fax",{url:"/fax",controller:"DashboardFaxCtrl",templateUrl:"app/dashboard/fax/fax.html",data:{permissions:{redirectTo:"landing",id:10}}}).state("main.dashboard.sms",{url:"/sms",controller:"DashboardSmsCtrl",templateUrl:"app/dashboard/sms/sms.html",data:{permissions:{redirectTo:"landing",id:11}}}).state("main.dashboard.openchannel",{url:"/openchannel",controller:"DashboardOpenChannelCtrl",templateUrl:"app/dashboard/openchannel/openchannel.html",data:{permissions:{redirectTo:"landing",id:20}}})}]),angular.module("xCallyShuttleApp").controller("DashboardFaxCtrl",["$scope","Auth","FaxRoom","socket","Agent","$translate","$q","ReportFaxSession","$timeout",function(a,b,c,d,e,f,g,h,i){a.Auth=b,a.moment=moment,a["new"]=0,a.open=0,a.pending=0,a.closed=0,a.initAgent=function(){a.table1={enableGridMenu:!1,enableHorizontalScrollbar:0,enableVerticalScrollbar:0,multiSelect:!0,columnDefs:[{name:"UserHasFaxQueue.queue",headerCellFilter:"translate",displayName:"APPLICATION_QUEUE",cellClass:"text-center ui-grid-vcenter"}],data:[],onRegisterApi:function(b){a.gridApi=b}},a.table2={headerCellFilter:"translate",enableHorizontalScrollbar:0,enableVerticalScrollbar:0,enableFiltering:!0,columnDefs:[{name:"roomid",displayName:"APPLICATION_INTERACTION_ID",headerCellFilter:"translate"},{name:"accountname",displayName:"APPLICATION_ACCOUNT_NAME",headerCellFilter:"translate"},{name:"application",displayName:"APPLICATION_APPLICATION",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{row.entity.application}} <span data-ng-if=\"row.entity.application == 'queue' && row.entity.queuename\">({{row.entity.queuename}})</span></div>"},{name:"status",displayName:"APPLICATION_STATUS",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div><span data-ng-if="!row.entity.leaveAt">{{\'APPLICATION_QUEUESTATUS_WAITING\' | translate}}</span><span data-ng-if="row.entity.leaveAt && row.entity.complete">{{\'APPLICATION_QUEUESTATUS_COMPLETE\' | translate}}</span><span data-ng-if="row.entity.leaveAt && row.entity.timeout">{{\'APPLICATION_TIMEOUT\' | translate}}</span><span data-ng-if="!row.entity.leaveAt"> [<css-timer start-time="row.entity.updatedAt"></css-timer>]</span></div>',enableSorting:!1,enableColumnMenu:!1,enableFiltering:!1},{name:"membername",displayName:"APPLICATION_AGENT",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{row.entity.membername || ''}}</span></div>"}],data:[],gridMenuTitleFilter:function(a){var b=g.defer();return b.resolve(f.instant(a)),b.promise},onRegisterApi:function(b){a.gridApi=b}},e.get({id:b.getCurrentUser().id,controller:"fax",controller1:"queues"}).$promise.then(function(b){a.table1.data=b.rows})["finally"](function(){d.socket.on("user_has_fax_queue:save",function(c){c.UserId!=b.getCurrentUser().id||_.find(a.table1.data,{id:c.FaxQueueId})||a.table1.data.push({id:c.FaxQueueId,UserHasFaxQueue:c})}),d.socket.on("user_has_fax_queue:remove",function(c){c.UserId===b.getCurrentUser().id&&_.remove(a.table1.data,{id:c.FaxQueueId})})})["catch"](function(a){console.error(a)}),h.get({controller:"waiting",controller2:"applications"}).$promise.then(function(b){a.table2.data=b.rows})["finally"](function(){d.socket.on("report_fax_session:save",function(b){var c=_.find(a.table2.data,{id:b.id});c?(_.merge(c,b),b.leaveAt&&i(function(){_.remove(a.table2.data,{id:b.id})},1e4)):b.leaveAt||a.table2.data.push(b)}),d.socket.on("report_fax_session:remove",function(b){_.remove(a.table2.data,{id:b.id})})})["catch"](function(a){console.log(a)})},a.initWidget=function(b){var e;switch(b){case"timeout":case"waiting":e=h;break;default:e=c}return e.get({id:b}).$promise.then(function(c){a[b]=c.value,a.charts={interactions:{labels:[f.instant("APPLICATION_DASHBOARD_NEW"),f.instant("APPLICATION_DASHBOARD_OPEN"),f.instant("APPLICATION_DASHBOARD_PENDING"),f.instant("APPLICATION_DASHBOARD_CLOSED")],values:[a["new"],a.open,a.pending,a.closed],colours:["#44B6AE","#578EBE","#35AA47","#8775A7"]}},d.socket.on("report_fax_dashboard:"+b,function(c){a[b]=c.value,a.charts.interactions.values=[a["new"],a.open,a.pending,a.closed]})})["catch"](function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").controller("DashboardMailCtrl",["$scope","Auth","MailRoom","socket","Agent","$translate","$q","ReportMailSession","$timeout",function(a,b,c,d,e,f,g,h,i){a.Auth=b,a.moment=moment,a["new"]=0,a.open=0,a.pending=0,a.closed=0,a.charts={interactions:{labels:[f.instant("APPLICATION_DASHBOARD_NEW"),f.instant("APPLICATION_DASHBOARD_OPEN"),f.instant("APPLICATION_DASHBOARD_PENDING"),f.instant("APPLICATION_DASHBOARD_CLOSED")],values:[a["new"],a.open,a.pending,a.closed],colours:["#44B6AE","#578EBE","#35AA47","#8775A7"]}},a.initAgent=function(){a.table1={enableGridMenu:!1,enableHorizontalScrollbar:0,enableVerticalScrollbar:0,multiSelect:!0,columnDefs:[{name:"UserHasMailQueue.queue",headerCellFilter:"translate",displayName:"APPLICATION_QUEUE",cellClass:"text-center ui-grid-vcenter"}],data:[],onRegisterApi:function(b){a.gridApi=b}},a.table2={headerCellFilter:"translate",enableHorizontalScrollbar:0,enableVerticalScrollbar:0,enableFiltering:!0,columnDefs:[{name:"roomid",displayName:"APPLICATION_INTERACTION_ID",headerCellFilter:"translate"},{name:"accountname",displayName:"APPLICATION_ACCOUNT_NAME",headerCellFilter:"translate"},{name:"application",displayName:"APPLICATION_APPLICATION",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{row.entity.application}} <span data-ng-if=\"row.entity.application == 'queue' && row.entity.queuename\">({{row.entity.queuename}})</span></div>"},{name:"status",displayName:"APPLICATION_STATUS",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div><span data-ng-if="!row.entity.leaveAt">{{\'APPLICATION_QUEUESTATUS_WAITING\' | translate}}</span><span data-ng-if="row.entity.leaveAt && row.entity.complete">{{\'APPLICATION_QUEUESTATUS_COMPLETE\' | translate}}</span><span data-ng-if="row.entity.leaveAt && row.entity.timeout">{{\'APPLICATION_TIMEOUT\' | translate}}</span><span data-ng-if="!row.entity.leaveAt"> [<css-timer start-time="row.entity.updatedAt"></css-timer>]</span></div>',enableSorting:!1,enableColumnMenu:!1,enableFiltering:!1},{name:"membername",displayName:"APPLICATION_AGENT",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{row.entity.membername || ''}}</span></div>"}],data:[],gridMenuTitleFilter:function(a){var b=g.defer();return b.resolve(f.instant(a)),b.promise},onRegisterApi:function(b){a.gridApi=b,a.gridApi.grid.registerDataChangeCallback(function(){})}},e.get({id:b.getCurrentUser().id,controller:"mail",controller1:"queues"}).$promise.then(function(b){a.table1.data=b.rows})["finally"](function(){d.socket.on("user_has_mail_queue:save",function(c){c.UserId!=b.getCurrentUser().id||_.find(a.table1.data,{id:c.MailQueueId})||a.table1.data.push({id:c.MailQueueId,UserHasMailQueue:c})}),d.socket.on("user_has_mail_queue:remove",function(c){c.UserId===b.getCurrentUser().id&&_.remove(a.table1.data,{id:c.MailQueueId})})})["catch"](function(a){console.error(a)}),h.get({controller:"waiting",controller2:"applications"}).$promise.then(function(b){a.table2.data=b.rows})["finally"](function(){d.socket.on("report_mail_session:save",function(b){var c=_.find(a.table2.data,{id:b.id});c?(_.merge(c,b),b.leaveAt&&i(function(){_.remove(a.table2.data,{id:b.id})},1e4)):b.leaveAt||a.table2.data.push(b)}),d.socket.on("report_mail_session:remove",function(b){_.remove(a.table2.data,{id:b.id})})})["catch"](function(a){console.log(a)})},a.initWidget=function(b){var e;switch(b){case"timeout":case"waiting":e=h;break;default:e=c}return e.get({id:b}).$promise.then(function(c){a[b]=c.value,a.charts={interactions:{labels:[f.instant("APPLICATION_DASHBOARD_NEW"),f.instant("APPLICATION_DASHBOARD_OPEN"),f.instant("APPLICATION_DASHBOARD_PENDING"),f.instant("APPLICATION_DASHBOARD_CLOSED")],values:[a["new"],a.open,a.pending,a.closed],colours:["#44B6AE","#578EBE","#35AA47","#8775A7"]}},d.socket.on("report_mail_dashboard:"+b,function(c){a[b]=c.value,a.charts.interactions.values=[a["new"],a.open,a.pending,a.closed]})})["catch"](function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").controller("DashboardOpenChannelCtrl",["$scope","Auth","OpenChannelRoom","socket","Agent","$translate","$q","ReportOpenChannelSession","$timeout",function(a,b,c,d,e,f,g,h,i){a.Auth=b,a.moment=moment,a["new"]=0,a.open=0,a.pending=0,a.closed=0,a.initAgent=function(){a.table1={enableGridMenu:!1,enableHorizontalScrollbar:0,enableVerticalScrollbar:0,multiSelect:!0,columnDefs:[{name:"UserHasOpenchannelQueue.queue",headerCellFilter:"translate",displayName:"APPLICATION_QUEUE",cellClass:"text-center ui-grid-vcenter"}],data:[],onRegisterApi:function(b){a.gridApi=b}},a.table2={headerCellFilter:"translate",enableHorizontalScrollbar:0,enableVerticalScrollbar:0,enableFiltering:!0,columnDefs:[{name:"roomid",displayName:"APPLICATION_INTERACTION_ID",headerCellFilter:"translate"},{name:"accountname",displayName:"APPLICATION_ACCOUNT_NAME",headerCellFilter:"translate"},{name:"application",displayName:"APPLICATION_APPLICATION",headerCellFilter:"translate", +cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{row.entity.application}} <span data-ng-if=\"row.entity.application == 'queue' && row.entity.queuename\">({{row.entity.queuename}})</span></div>"},{name:"status",displayName:"APPLICATION_STATUS",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div><span data-ng-if="!row.entity.leaveAt">{{\'APPLICATION_QUEUESTATUS_WAITING\' | translate}}</span><span data-ng-if="row.entity.leaveAt && row.entity.complete">{{\'APPLICATION_QUEUESTATUS_COMPLETE\' | translate}}</span><span data-ng-if="row.entity.leaveAt && row.entity.timeout">{{\'APPLICATION_TIMEOUT\' | translate}}</span><span data-ng-if="!row.entity.leaveAt"> [<css-timer start-time="row.entity.updatedAt"></css-timer>]</span></div>',enableSorting:!1,enableColumnMenu:!1,enableFiltering:!1},{name:"membername",displayName:"APPLICATION_AGENT",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{row.entity.membername || ''}}</span></div>"}],data:[],gridMenuTitleFilter:function(a){var b=g.defer();return b.resolve(f.instant(a)),b.promise},onRegisterApi:function(b){a.gridApi=b}},e.get({id:b.getCurrentUser().id,controller:"openchannel",controller1:"queues"}).$promise.then(function(b){a.table1.data=b.rows})["finally"](function(){d.socket.on("user_has_openchannel_queue:save",function(c){c.UserId!=b.getCurrentUser().id||_.find(a.table1.data,{id:c.OpenChannelQueueId})||a.table1.data.push({id:c.OpenChannelQueueId,UserHasOpenChannelQueue:c})}),d.socket.on("user_has_openchannel_queue:remove",function(c){c.UserId===b.getCurrentUser().id&&_.remove(a.table1.data,{id:c.OpenChannelQueueId})})})["catch"](function(a){console.error(a)}),h.get({controller:"waiting",controller2:"applications"}).$promise.then(function(b){a.table2.data=b.rows})["finally"](function(){d.socket.on("report_openchannel_session:save",function(b){var c=_.find(a.table2.data,{id:b.id});c?(_.merge(c,b),b.leaveAt&&i(function(){_.remove(a.table2.data,{id:b.id})},1e4)):b.leaveAt||a.table2.data.push(b)}),d.socket.on("report_openchannel_session:remove",function(b){_.remove(a.table2.data,{id:b.id})})})["catch"](function(a){console.log(a)})},a.initWidget=function(b){var e;switch(b){case"timeout":case"waiting":e=h;break;default:e=c}return e.get({id:b}).$promise.then(function(c){a[b]=c.value,a.charts={interactions:{labels:[f.instant("APPLICATION_DASHBOARD_NEW"),f.instant("APPLICATION_DASHBOARD_OPEN"),f.instant("APPLICATION_DASHBOARD_PENDING"),f.instant("APPLICATION_DASHBOARD_CLOSED")],values:[a["new"],a.open,a.pending,a.closed],colours:["#44B6AE","#578EBE","#35AA47","#8775A7"]}},d.socket.on("report_openchannel_dashboard:"+b,function(c){a[b]=c.value,a.charts.interactions.values=[a["new"],a.open,a.pending,a.closed]})})["catch"](function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").controller("DashboardSmsCtrl",["$scope","Auth","SmsRoom","socket","Agent","$translate","$q","ReportSmsSession","$timeout",function(a,b,c,d,e,f,g,h,i){a.Auth=b,a.moment=moment,a["new"]=0,a.open=0,a.pending=0,a.closed=0,a.initAgent=function(){a.table1={enableGridMenu:!1,enableHorizontalScrollbar:0,enableVerticalScrollbar:0,multiSelect:!0,columnDefs:[{name:"UserHasSmsQueue.queue",headerCellFilter:"translate",displayName:"APPLICATION_QUEUE",cellClass:"text-center ui-grid-vcenter"}],data:[],onRegisterApi:function(b){a.gridApi=b}},a.table2={headerCellFilter:"translate",enableHorizontalScrollbar:0,enableVerticalScrollbar:0,enableFiltering:!0,columnDefs:[{name:"roomid",displayName:"APPLICATION_INTERACTION_ID",headerCellFilter:"translate"},{name:"accountname",displayName:"APPLICATION_ACCOUNT_NAME",headerCellFilter:"translate"},{name:"application",displayName:"APPLICATION_APPLICATION",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{row.entity.application}} <span data-ng-if=\"row.entity.application == 'queue' && row.entity.queuename\">({{row.entity.queuename}})</span></div>"},{name:"status",displayName:"APPLICATION_STATUS",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div><span data-ng-if="!row.entity.leaveAt">{{\'APPLICATION_QUEUESTATUS_WAITING\' | translate}}</span><span data-ng-if="row.entity.leaveAt && row.entity.complete">{{\'APPLICATION_QUEUESTATUS_COMPLETE\' | translate}}</span><span data-ng-if="row.entity.leaveAt && row.entity.timeout">{{\'APPLICATION_TIMEOUT\' | translate}}</span><span data-ng-if="!row.entity.leaveAt"> [<css-timer start-time="row.entity.updatedAt"></css-timer>]</span></div>',enableSorting:!1,enableColumnMenu:!1,enableFiltering:!1},{name:"membername",displayName:"APPLICATION_AGENT",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{row.entity.membername || ''}}</span></div>"}],data:[],gridMenuTitleFilter:function(a){var b=g.defer();return b.resolve(f.instant(a)),b.promise},onRegisterApi:function(b){a.gridApi=b}},e.get({id:b.getCurrentUser().id,controller:"sms",controller1:"queues"}).$promise.then(function(b){a.table1.data=b.rows})["finally"](function(){d.socket.on("user_has_sms_queue:save",function(c){c.UserId!=b.getCurrentUser().id||_.find(a.table1.data,{id:c.SmsQueueId})||a.table1.data.push({id:c.SmsQueueId,UserHasSmsQueue:c})}),d.socket.on("user_has_sms_queue:remove",function(c){c.UserId===b.getCurrentUser().id&&_.remove(a.table1.data,{id:c.SmsQueueId})})})["catch"](function(a){console.error(a)}),h.get({controller:"waiting",controller2:"applications"}).$promise.then(function(b){a.table2.data=b.rows})["finally"](function(){d.socket.on("report_sms_session:save",function(b){var c=_.find(a.table2.data,{id:b.id});c?(_.merge(c,b),b.leaveAt&&i(function(){_.remove(a.table2.data,{id:b.id})},1e4)):b.leaveAt||a.table2.data.push(b)}),d.socket.on("report_sms_session:remove",function(b){_.remove(a.table2.data,{id:b.id})})})["catch"](function(a){console.log(a)})},a.initWidget=function(b){var e;switch(b){case"timeout":case"waiting":e=h;break;default:e=c}return e.get({id:b}).$promise.then(function(c){a[b]=c.value,a.charts={interactions:{labels:[f.instant("APPLICATION_DASHBOARD_NEW"),f.instant("APPLICATION_DASHBOARD_OPEN"),f.instant("APPLICATION_DASHBOARD_PENDING"),f.instant("APPLICATION_DASHBOARD_CLOSED")],values:[a["new"],a.open,a.pending,a.closed],colours:["#44B6AE","#578EBE","#35AA47","#8775A7"]}},d.socket.on("report_sms_dashboard:"+b,function(c){a[b]=c.value,a.charts.interactions.values=[a["new"],a.open,a.pending,a.closed]})})["catch"](function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").controller("DashboardVoiceCtrl",["$scope","$rootScope","$timeout","Auth","ReportQueue","ReportCall","Agent","VoiceQueue","Dashboard","socket",function(a,b,c,d,e,f,g,h,i,j){a.moment=moment,a.radioSwitch={size:"mini",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"success",onColor:"danger"};var k=function(a,b){var c=a?30*a+130:177;angular.element(document.getElementsByName(b)[0]).css("height",c+"px")};a.initUser=function(){var b;if(a.user=d.getCurrentUser(),a.voice={},a.$on("$destroy",function(){b&&(b.terminate(),j.socket.removeAllListeners("dashboard:voice:waiting"),j.socket.removeAllListeners("dashboard:voice:active"),j.socket.removeAllListeners("dashboard:voice:complete"),j.socket.removeAllListeners("dashboard:voice:abandon"),j.socket.removeAllListeners("dashboard:voice:unmanaged"),j.socket.removeAllListeners("dashboard:voice:holdtime"),j.socket.removeAllListeners("dashboard:voice:talktime"))}),a.onmessage=function(b){a.voice=b.data,a.$apply()},window.Worker){switch(b=new Worker("assets/workers/dashboard/voice/worker.js"),a.user.role){case"admin":h.get().$promise.then(function(a){return b.postMessage({evt:"myQueues",queues:a.rows}),i.get({id:"voice",controller:"init"}).$promise}).then(function(a){a.evt="dashboard:voice:init",b.postMessage(a)})["catch"](function(a){console.error(a)});break;case"user":b.postMessage({evt:"myQueues",queues:a.user.PVoiceQueues}),i.get({id:"voice",controller:"init"}).$promise.then(function(a){a.evt="dashboard:voice:init",b.postMessage(a)})}b.onmessage=a.onmessage}j.socket.on("dashboard:voice:waiting",function(a){a.evt="dashboard:voice:waiting",b.postMessage(a)}),j.socket.on("dashboard:voice:active",function(a){a.evt="dashboard:voice:active",b.postMessage(a)}),j.socket.on("dashboard:voice:complete",function(a){a.evt="dashboard:voice:complete",b.postMessage(a)}),j.socket.on("dashboard:voice:abandon",function(a){a.evt="dashboard:voice:abandon",b.postMessage(a)}),j.socket.on("dashboard:voice:unmanaged",function(a){a.evt="dashboard:voice:unmanaged",b.postMessage(a)}),j.socket.on("dashboard:voice:talktime",function(a){a.evt="dashboard:voice:talktime",b.postMessage(a)}),j.socket.on("dashboard:voice:holdtime",function(a){a.evt="dashboard:voice:holdtime",b.postMessage(a)}),j.socket.on("dashboard:voice:outbound",function(a){a.evt="dashboard:voice:outbound",b.postMessage(a)})},a.initAgent=function(){return a.agent=d.getCurrentUser(),j.socket.on("voice:queue:agent:join",function(b){b.loggedAt=moment().format("YYYY-MM-DD HH:mm:ss"),b.callstaken=0,a.table1.data.push(b)}),j.socket.on("voice:queue:agent:leave",function(b){_.remove(a.table1.data,{queue:b.queue})}),a.table1={enableHorizontalScrollbar:0,enableVerticalScrollbar:0,enableFiltering:!0,enableSorting:!0,showGridFooter:!0,paginationPageSizes:[10,25,50,75],paginationPageSize:10,columnDefs:[{name:"queue",headerCellFilter:"translate",displayName:"APPLICATION_QUEUE",cellClass:"text-center ui-grid-vcenter"},{name:"loggedAt",displayName:"logged At",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div><span am-time-ago="row.entity.loggedAt"></span></div>'},{name:"lastcall",headerCellFilter:"translate",displayName:"APPLICATION_LAST_CALL",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div><span am-time-ago="row.entity.lastcall"></span></div>'},{name:"callstaken",headerCellFilter:"translate",displayName:"APPLICATION_CALLS_TAKEN",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div><span>{{row.entity.callstaken || 0}}</span></div>"}],data:[],onRegisterApi:function(b){a.gridApi=b,a.gridApi.grid.registerDataChangeCallback(function(){k(a.table1.paginationPageSize>a.table1.data.length?a.table1.data.length:a.table1.paginationPageSize,"table1")}),a.gridApi.pagination.on.paginationChanged(a,function(b,c){k(c>a.table1.data.length?a.table1.data.length:c,"table1")})}},a.table2={enableGridMenu:!1,enableHorizontalScrollbar:0,enableVerticalScrollbar:0,multiSelect:!1,columnDefs:[{name:"queue",displayName:"APPLICATION_QUEUE",headerCellFilter:"translate"},{name:"status",displayName:"APPLICATION_STATUS",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div><span data-ng-if="!row.entity.queuecallerleaveAt">{{\'APPLICATION_QUEUESTATUS_WAITING\' | translate}}</span><span data-ng-if="row.entity.queuecallerleaveAt && !row.entity.queuecallercomplete && !row.entity.queuecallerabandon">{{\'APPLICATION_TALKING\' | translate}}</span><span data-ng-if="row.entity.queuecallercomplete">{{\'APPLICATION_QUEUESTATUS_COMPLETE\' | translate}}</span><span data-ng-if="row.entity.queuecallerabandon">{{\'APPLICATION_QUEUESTATUS_ABANDON\' | translate}}</span><span data-ng-if="!row.entity.queuecallerleaveAt">[<css-timer start-time="row.entity.updatedAt"></css-timer>]</span></div>',enableSorting:!1,enableColumnMenu:!1,enableFiltering:!1},{name:"caller",displayName:"APPLICATION_CALLER",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{row.entity.calleridnum || ''}} {{row.entity.calleridname || ''}}</span></div>",enableSorting:!1,enableColumnMenu:!1,enableFiltering:!1},{name:"position",displayName:"APPLICATION_POSITION",headerCellFilter:"translate"},{name:"lastAssignedTo",displayName:"APPLICATION_AGENT",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter"}],data:[],onRegisterApi:function(b){a.gridApi1=b,a.gridApi1.grid.registerDataChangeCallback(function(){k(a.gridApi1.core.getVisibleRows(a.gridApi1.grid).length,"table2")})}},a.table3={exporterCsvFilename:"abandoned_calls.csv",enableRowHeaderSelection:!0,paginationPageSizes:[10,25,50,75],paginationPageSize:10,enableFiltering:!0,enableSorting:!0,enableGridMenu:!1,flatEntityAccess:!0,showGridFooter:!0,fastWatch:!0,enableSelectAll:!1,enableHorizontalScrollbar:0,enableVerticalScrollbar:1,columnDefs:[{name:"queue",displayName:"APPLICATION_QUEUE",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter"},{name:"caller",displayName:"APPLICATION_CALLER",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{row.entity.calleridnum || ''}} {{row.entity.calleridname || ''}}</div>"},{name:"createdAt",displayName:"APPLICATION_DATE",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"<div>{{row.entity.updatedAt | date:'yyyy-MM-dd HH:mm:ss'}}</div>"},{name:"lastAssignedTo",cellClass:"text-center ui-grid-vcenter",displayName:"APPLICATION_LAST_ASSIGNED_TO",headerCellFilter:"translate"},{name:"assigned",displayName:"APPLICATION_STATUS",headerCellFilter:"translate",cellTemplate:'<div class="centered-uigrid-td"><input data-ng-change="grid.appScope.updateItem(row.entity)", bs-switch ng-model="row.entity.assigned" type="checkbox" switch-active="{{ !row.entity.assigned || grid.appScope.agent.name === row.entity.lastAssignedTo }}" switch-on-text="{{ \'APPLICATION_ASSIGNED\' | translate }}" switch-off-text="{{ \'APPLICATION_FREE\' | translate }}" switch-on-color="{{ grid.appScope.radioSwitch.onColor }}" switch-off-color="{{ grid.appScope.radioSwitch.offColor }}" switch-animate="{{ grid.appScope.radioSwitch.animate }}" switch-size="{{ grid.appScope.radioSwitch.size }}" switch-label="{{ grid.appScope.radioSwitch.label }}" switch-icon="{{ grid.appScope.radioSwitch.icon }}" switch-radio-off="{{ grid.appScope.radioSwitch.radioOff }}" switch-label-width="{{ grid.appScope.radioSwitch.labelWidth }}" switch-handle-width="{{ grid.appScope.radioSwitch.handleWidth }}"></div>',enableFiltering:!1}],data:[],onRegisterApi:function(b){a.gridApi2=b,a.gridApi2.grid.registerDataChangeCallback(function(){k(a.gridApi2.core.getVisibleRows(a.gridApi2.grid).length,"table3")})}},g.get({id:d.getCurrentUser().id,controller:"voice",controller1:"queues"}).$promise.then(function(b){a.table1.data=_.map(b.rows,function(a){return{queue:a.UserHasVoiceQueue.queue,loggedAt:a.UserHasVoiceQueue.loggedAt,callstaken:a.UserHasVoiceQueue.callstaken,lastcall:a.UserHasVoiceQueue.lastcall}})})["finally"](function(){k(a.table1.paginationPageSize>a.table1.data.length?a.table1.data.length:a.table1.paginationPageSize,"table1"),j.socket.on("voice:queue:update",function(b){var c=_.find(a.table1.data,{queue:b.queue});c?_.merge(c,b):a.table1.data.push(b)}),j.socket.on("user_has_voice_queue:remove",function(b){b.UserId===d.getCurrentUser().id&&_.remove(a.table1.data,{queue:b.queue})}),j.socket.on("user_has_voice_queue:save",function(b){if(b.UserId===d.getCurrentUser().id){var c=_.find(a.table1.data,{queue:b.queue});!c&&b.logged&&a.table1.data.unshift({queue:b.queue,loggedAt:moment(),lastcall:null,callstaken:0})}})})["catch"](function(a){console.error(a)}),e.get({id:"waiting",controller:"calls"}).$promise.then(function(b){a.table2.data=b.rows})["finally"](function(){j.socket.on("report_queue:save",function(b){a.table2.data.push(b)}),j.socket.on("report_queue:update",function(b){var d=_.find(a.table2.data,{id:b.id});d&&(_.merge(d,b),b.queuecallerleaveAt&&c(function(){_.remove(a.table2.data,{id:b.id})},3e3))})})["catch"](function(a){console.error(a)}),e.get({controller:"abandoned",controller2:"all"}).$promise.then(function(b){a.table3.data=b.rows})["catch"](function(a){console.error(a)})["finally"](function(){j.socket.on("report_queue:update",function(b){b.queuecallerabandon&&a.table3.data.unshift(b)})})},a.updateItem=function(b){return e.update({id:b.id},{assigned:b.assigned,lastAssignedTo:b.assigned?a.agent.name:void 0}).$promise["catch"](function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.desk",{url:"/desk",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin"],redirectTo:"main.dashboard.voice"}}})}]),angular.module("xCallyShuttleApp").factory("DeskAccount",["$resource",function(a){return a("/api/desk/accounts/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("DeskListCtrl",["$scope","$http","$rootScope","xAlert","$translate","socket","Modal","stResource",function(a,b,c,d,e,f,g,h){a.conf={accountsByPage:{name:"10",value:10}},a.accountsByPage=[{name:"10",value:10},{name:"25",value:25},{name:"50",value:50},{name:"All",value:0}],a.accounts={checked:[]},a.check=function(b,c){c?a.accounts.checked=angular.copy(_.map(a.displayedDeskAccounts,"id")):a.accounts.checked=[]},a.getAccounts=function(b){return _.map(a.displayedDeskAccounts,function(a){var c={};return b.forEach(function(b){c[b]=a[b]}),c})},a.initList=function(b){f.unsyncUpdates("desk_account"),b.url="/api/desk/accounts",h.getPage(b).then(function(d){a.displayedDeskAccounts=d.rows,b.pagination.numberOfPages=d.total_pages,c.updateTableConfig(a.accountsByPage,a.displayedDeskAccounts.length),c.updateTableConfig(a.conf.accountsByPage,a.displayedDeskAccounts.length)}),f.socket.on("desk_account:save",function(){a.initList(b)}),f.socket.on("desk_account:remove",function(c){a.accounts.checked=_.without(a.accounts.checked,c.id),a.initList(b)})},a.deleteItem=g.confirm["delete"](function(a){b["delete"]("/api/desk/accounts/"+a).success(function(){d.show(e.instant("MESSAGE_WELL_DONE")+"!","success")}).error(function(a){d.error(a)})}),a.deleteItems=g.confirm["delete"](function(){b["delete"]("/api/desk/accounts",{params:{id:a.accounts.checked}}).success(function(){d.show(e.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){d.error(a)})}),a.checkAccount=function(a){b.get("/api/desk/accounts/"+a+"/check").then(function(){d.show(e.instant("MESSAGE_ACCOUNT_VERIFIED"),"success")})["catch"](function(){d.show(e.instant("MESSAGE_ACCOUNT_INVALID"),"danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.desk.list",{url:"/list",templateUrl:"app/desk/list/list.html",controller:"DeskListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"smart-table",insertBefore:"#ng_load_plugins_before",files:["assets/css/smart_table.css"]}])}]}})}]),angular.module("xCallyShuttleApp").controller("DeskViewCtrl",["$scope","$http","$stateParams","$translate","$location","WizardHandler","socket","xAlert","Modal","desk_com",function(a,b,c,d,e,f,g,h,i,j){a.$stateParams=c,a.config={autoHideScrollbar:!1,theme:"dark",advanced:{updateOnContentResize:!0},setHeight:500,scrollInertia:0},a.initConfiguration=function(){a.formsConfiguration={},a.configuration={}},a.goNext=function(){f.wizard().next()},a.formValidation=function(a){return a},a.$on("$destroy",function(){g.unsyncUpdates("desk_configuration"),g.unsyncUpdates("desk_field")}),a.initView=function(){b.get("/api/desk/accounts/"+c.id).success(function(b){a.account=b}).error(function(a){h.error(a)})},a.updateItem=function(){b.put("/api/desk/accounts/"+c.id,a.account).success(function(){h.show(d.instant("MESSAGE_WELL_DONE")+".","success")}).error(function(){h.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG")+".","danger")})},a.getConfigurations=function(){b.get("/api/desk/configurations",{params:{AccountId:c.id}}).success(function(b){a.configurations=b,g.socket.on("desk_configuration:remove",function(b){_.remove(a.configurations,{id:b.id})})}).error(function(a){h.error(a)})},a.deleteConfiguration=i.confirm["delete"](function(a){b["delete"]("api/desk/configurations/"+a).success(function(){h.show(d.instant("MESSAGE_WELL_DONE"),"success")}).error(function(){h.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})}),a.createConfiguration=function(){a.configuration.AccountId=c.id,b.post("api/desk/configurations",a.configuration).success(function(a){e.path("desk/view/"+c.id+"/configurations/settings/"+a.id)}).error(function(){h.show("Something went wrong!","danger")})},a.fieldType=["string","variable"],a.descFieldType=["string","key_value"],a.getFields=function(){b.get("/api/desk/accounts/"+c.id+"/fields").success(function(b){a.accountFields=j.fields.concat(b)}).error(function(a){h.error(a)})},a.getConfiguration=function(){b.get("/api/desk/configurations/"+c.configurationId).success(function(b){a.configurationName=b.name,a.subjectConfig=b.Subject,a.descriptionConfig=b.Description,a.fieldConfig=b.Field,g.socket.on("desk_field:remove",function(b){_.remove(a.subjectConfig,{id:b.id}),_.remove(a.descriptionConfig,{id:b.id}),_.remove(a.fieldConfig,{id:b.id})})}).error(function(a){h.error(a)})},a.getVariables=function(){b.get("/api/variables").success(function(b){a.variables=b.rows}).error(function(a){h.error(a)})},a.removeItem=function(a){b["delete"]("api/desk/fields/"+a.id).success(function(){h.show(d.instant("MESSAGE_WELL_DONE"),"success")}).error(function(){h.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},a.addItemSubject=function(){var d={type:"string",content:""};b.post("/api/desk/configurations/"+c.configurationId+"/subject",d).success(function(b){a.subjectConfig.push(b)}).error(function(){h.show("Something went wrong!","danger")})},a.addItemDescription=function(){var d={type:"string",content:""};b.post("/api/desk/configurations/"+c.configurationId+"/description",d).success(function(b){a.descriptionConfig.push(b)}).error(function(){h.show("Something went wrong!","danger")})},a.addItemField=function(){var d={content:""};b.post("/api/desk/configurations/"+c.configurationId+"/field",d).success(function(b){a.fieldConfig.push(b)}).error(function(){h.show("Something went wrong!","danger")})},a.updateField=function(a){b.put("/api/desk/fields/"+a.id,a).success(function(){}).error(function(){h.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG")+".","danger")})},a.changeType=function(b){"variable"===b.type?b.content="":"string"===b.type&&(b.VariableId=null),a.updateField(b)},a.changeDescType=function(b){"key_value"===b.type?(b.content="","string"===b.keyType?b.VariableId=null:"variable"===b.keyType&&(b.keyContent="")):"string"===b.type&&(b.VariableId=null,b.key="",b.keyContent=""),a.updateField(b)},a.changeFieldType=function(b){if(b.content="",b.idField){var c=_.find(a.accountFields,"id",b.idField);c&&(b.customField=_.result(c,"custom",!0))}a.updateField(b)},a.getSystemFieldOptions=function(b){if(b){var c=_.find(a.accountFields,"id",b);return c?c.data.choices?c.data.choices:null:void 0}}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.desk.view",{url:"/view/:id",templateUrl:"app/desk/view/view.html",controller:"DeskViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.desk.view.account",{url:"/account",templateUrl:"app/desk/view/view.account.html"}).state("main.desk.view.configurations",{url:"/configurations",templateUrl:"app/desk/view/view.configurations.html"}).state("main.desk.view.configurations.settings",{url:"/settings/:configurationId",templateUrl:"app/desk/view/view.configurationSettings.html",controller:"DeskViewCtrl"}).state("main.desk.view.configuration",{url:"/configuration",templateUrl:"app/desk/view/view.configuration.html"})}]),angular.module("xCallyShuttleApp").controller("DeskWizardCtrl",["$scope","$http","$location","$translate","xAlert","WizardHandler",function(a,b,c,d,e,f){a.translate=d,a.initWizard=function(){a.$translate=d,a.forms={},a.item={}},a.next=function(){f.wizard().next()},a.exitValidation=function(a){return a},a.createItem=function(){console.log(a.item),b.post("api/desk/accounts",a.item).success(function(){e.show(d.instant("MESSAGE_WELL_DONE")+".","success"),c.path("/desk/list")}).error(function(){e.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG")+".","danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.desk.wizard",{url:"/wizard",templateUrl:"app/desk/wizard/wizard.html",controller:"DeskWizardCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.freshdesk",{url:"/freshdesk",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin"],redirectTo:"main.dashboard.voice"}}})}]),angular.module("xCallyShuttleApp").factory("FreshdeskAccount",["$resource",function(a){return a("/api/freshdesk/accounts/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("FreshdeskListCtrl",["$scope","$http","$rootScope","xAlert","$translate","socket","Modal","stResource",function(a,b,c,d,e,f,g,h){a.conf={accountsByPage:{name:"10",value:10}},a.accountsByPage=[{name:"10",value:10},{name:"25",value:25},{name:"50",value:50},{name:"All",value:0}],a.accounts={checked:[]},a.check=function(b,c){c?a.accounts.checked=angular.copy(_.map(a.displayedFreshdeskAccounts,"id")):a.accounts.checked=[]},a.getAccounts=function(b){return _.map(a.displayedFreshdeskAccounts,function(a){var c={};return b.forEach(function(b){c[b]=a[b]}),c})},a.initList=function(b){f.unsyncUpdates("freshdesk_account"),b.url="/api/freshdesk/accounts",h.getPage(b).then(function(d){a.displayedFreshdeskAccounts=d.rows,b.pagination.numberOfPages=d.total_pages,c.updateTableConfig(a.accountsByPage,a.displayedFreshdeskAccounts.length),c.updateTableConfig(a.conf.accountsByPage,a.displayedFreshdeskAccounts.length)}),f.socket.on("freshdesk_account:save",function(){a.initList(b)}),f.socket.on("freshdesk_account:remove",function(c){a.accounts.checked=_.without(a.accounts.checked,c.id),a.initList(b)})},a.deleteItem=g.confirm["delete"](function(a){b["delete"]("/api/freshdesk/accounts/"+a).success(function(){d.show(e.instant("MESSAGE_WELL_DONE")+"!","success")}).error(function(a){d.error(a)})}),a.deleteItems=g.confirm["delete"](function(){b["delete"]("/api/freshdesk/accounts",{params:{id:a.accounts.checked}}).success(function(){d.show(e.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){d.error(a)})}),a.checkAccount=function(a){b.get("/api/freshdesk/accounts/"+a+"/check").then(function(){d.show(e.instant("MESSAGE_ACCOUNT_VERIFIED"),"success")})["catch"](function(){d.show(e.instant("MESSAGE_ACCOUNT_INVALID"),"danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.freshdesk.list",{url:"/list",templateUrl:"app/freshdesk/list/list.html",controller:"FreshdeskListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"smart-table",insertBefore:"#ng_load_plugins_before",files:["assets/css/smart_table.css"]}])}]}})}]),angular.module("xCallyShuttleApp").controller("FreshdeskViewCtrl",["$scope","$http","$stateParams","$translate","$location","$filter","WizardHandler","socket","xAlert","Modal",function(a,b,c,d,e,f,g,h,i,j){a.$stateParams=c,a.config={autoHideScrollbar:!1,theme:"dark",advanced:{updateOnContentResize:!0},setHeight:500,scrollInertia:0},a.initConfiguration=function(){a.formsConfiguration={},a.configuration={}},a.goNext=function(){g.wizard().next()},a.formValidation=function(a){return a},a.$on("$destroy",function(){h.unsyncUpdates("freshdesk_configuration"),h.unsyncUpdates("freshdesk_field")}),a.initView=function(){b.get("/api/freshdesk/accounts/"+c.id).success(function(b){a.account=b}).error(function(a){i.error(a)})},a.updateItem=function(){b.put("/api/freshdesk/accounts/"+c.id,a.account).success(function(){i.show(d.instant("MESSAGE_WELL_DONE")+".","success")}).error(function(){i.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG")+".","danger")})},a.getConfigurations=function(){b.get("/api/freshdesk/configurations",{params:{AccountId:c.id}}).success(function(b){a.configurations=b,h.socket.on("freshdesk_configuration:remove",function(b){_.remove(a.configurations,{id:b.id})})}).error(function(a){i.error(a)})},a.deleteConfiguration=j.confirm["delete"](function(a){b["delete"]("api/freshdesk/configurations/"+a).success(function(){i.show(d.instant("MESSAGE_WELL_DONE"),"success")}).error(function(){i.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})}),a.createConfiguration=function(){a.configuration.AccountId=c.id,b.post("api/freshdesk/configurations",a.configuration).success(function(a){e.path("freshdesk/view/"+c.id+"/configurations/settings/"+a.id)}).error(function(){i.show("Something went wrong!","danger")})},a.fieldType=["string","variable"],a.descFieldType=["string","key_value"],a.getFields=function(){b.get("/api/freshdesk/accounts/"+c.id+"/fields").success(function(b){a.accountFields=[],b=f("freshdesk")(b),_.forEach(b,function(b){a.accountFields.push(b.ticket_field)})}).error(function(a){i.error(a)})},a.getConfiguration=function(){b.get("/api/freshdesk/configurations/"+c.configurationId).success(function(b){a.configurationName=b.name,a.subjectConfig=b.Subject,a.descriptionConfig=b.Description,a.fieldConfig=b.Field,h.socket.on("freshdesk_field:remove",function(b){_.remove(a.subjectConfig,{id:b.id}),_.remove(a.descriptionConfig,{id:b.id}),_.remove(a.fieldConfig,{id:b.id})})}).error(function(a){i.error(a)})},a.getVariables=function(){b.get("/api/variables").success(function(b){a.variables=b.rows}).error(function(a){i.error(a)})},a.removeItem=function(a){b["delete"]("api/freshdesk/fields/"+a.id).success(function(){i.show(d.instant("MESSAGE_WELL_DONE"),"success")}).error(function(){i.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},a.addItemSubject=function(){var d={type:"string",content:""};b.post("/api/freshdesk/configurations/"+c.configurationId+"/subject",d).success(function(b){a.subjectConfig.push(b)}).error(function(){i.show("Something went wrong!","danger")})},a.addItemDescription=function(){var d={type:"string",content:""};b.post("/api/freshdesk/configurations/"+c.configurationId+"/description",d).success(function(b){a.descriptionConfig.push(b)}).error(function(){i.show("Something went wrong!","danger")})},a.addItemField=function(){var d={content:""};b.post("/api/freshdesk/configurations/"+c.configurationId+"/field",d).success(function(b){a.fieldConfig.push(b)}).error(function(){i.show("Something went wrong!","danger")})},a.updateField=function(a){b.put("/api/freshdesk/fields/"+a.id,a).success(function(){}).error(function(){i.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG")+".","danger")})},a.changeType=function(b){"variable"===b.type?b.content="":"string"===b.type&&(b.VariableId=null),a.updateField(b)},a.changeDescType=function(b){"key_value"===b.type?(b.content="","string"===b.keyType?b.VariableId=null:"variable"===b.keyType&&(b.keyContent="")):"string"===b.type&&(b.VariableId=null,b.key="",b.keyContent=""),a.updateField(b)},a.changeFieldType=function(b){if(b.content="",b.idField){var c=_.find(a.accountFields,"name",b.idField);c&&(b.customField=!_.result(c,"default",!0))}a.updateField(b)},a.getSystemFieldOptions=function(b){if(b){var c=_.find(a.accountFields,"name",b);return c?c.choices.length>0?c.choices:null:void 0}}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.freshdesk.view",{url:"/view/:id",templateUrl:"app/freshdesk/view/view.html",controller:"FreshdeskViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.freshdesk.view.account",{url:"/account",templateUrl:"app/freshdesk/view/view.account.html"}).state("main.freshdesk.view.configurations",{url:"/configurations",templateUrl:"app/freshdesk/view/view.configurations.html"}).state("main.freshdesk.view.configurations.settings",{url:"/settings/:configurationId",templateUrl:"app/freshdesk/view/view.configurationSettings.html",controller:"FreshdeskViewCtrl"}).state("main.freshdesk.view.configuration",{url:"/configuration",templateUrl:"app/freshdesk/view/view.configuration.html"})}]),angular.module("xCallyShuttleApp").controller("FreshdeskWizardCtrl",["$scope","$http","$location","$translate","xAlert","WizardHandler",function(a,b,c,d,e,f){ +a.translate=d,a.initWizard=function(){a.$translate=d,a.forms={},a.item={}},a.next=function(){f.wizard().next()},a.exitValidation=function(a){return a},a.createItem=function(){console.log(a.item),b.post("api/freshdesk/accounts",a.item).success(function(){e.show(d.instant("MESSAGE_WELL_DONE")+".","success"),c.path("/freshdesk/list")}).error(function(){e.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG")+".","danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.freshdesk.wizard",{url:"/wizard",templateUrl:"app/freshdesk/wizard/wizard.html",controller:"FreshdeskWizardCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.iframe",{url:"/iframe",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("IframeViewCtrl",["$scope","Auth","Integration","xAlert","$translate","$sce",function(a,b,c,d,e,f){a.Auth=b,a.initView=function(){return c.get({state:"iframe"}).$promise.then(function(c){a.iframe=_.first(c.rows),a.iframe.remoteUri?a.url=f.trustAsResourceUrl(a.iframe.remoteUri):b.isAgent()&&d.show(e.instant("MESSAGE_NO_IFRAME_CONFIGURED")+".","danger")})["catch"](function(a){d.error(a)})},a.updateItem=function(){return b.isAgent()?void 0:c.update({id:a.iframe.id},a.iframe).$promise.then(function(){d.show(e.instant("MESSAGE_WELL_DONE")+".","success")})["catch"](function(a){d.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.iframe.view",{url:"/view",templateUrl:"app/iframe/view/view.html",controller:"IframeViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]}])}]}})}]),angular.module("xCallyShuttleApp").factory("Integration",["$resource",function(a){return a("/api/integrations/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.integrations",{url:"/integrations",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:19}}})}]),angular.module("xCallyShuttleApp").controller("IntegrationListCtrl",["$scope","Modal","socket","FileUploader","Integration","xAlert",function(a,b,c,d,e,f){a.integrationsByPage=10;var g=a.uploader=new d({url:"api/integrations",autoUpload:!0,removeAfterUpload:!0});g.filters.push({name:"zipFilter",fn:function(a){var b="|"+a.type.slice(a.type.lastIndexOf("/")+1)+"|";return-1!=="|zip|".indexOf(b)}}),g.onSuccessItem=function(a,b,c,d){console.info("onSuccessItem",a,b,c,d),f.show(b.name,"success")},g.onErrorItem=function(a,b,c,d){console.info("onErrorItem",a,b,c,d),b.errors.forEach(function(a){f.error(err)})},a.deleteItem=b.confirm["delete"](function(a){e["delete"]({id:a},function(){f.show("Integration Removed","success")},function(a){f.error(a)})}),a.initList=function(){a.integrations=e.query({},function(a){c.syncUpdates("integration",a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.integrations.list",{url:"/list",templateUrl:"app/integration/list/list.html",controller:"IntegrationListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/plugins/bootstrap-fileinput/bootstrap-fileinput.js"]})}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.jscripty",{url:"/jscripty",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").factory("JscriptyProject",["$resource",function(a){return a("/api/jscripty/projects/:id/:controller/:action/:action2",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("JscriptyProjectListCtrl",["$scope","$uibModal","JscriptyProject","gridOptions","Auth",function(a,b,c,d,e){a.Auth=e,a.initView=function(){var b={exporterCsvFilename:"jscriptyProjects.csv",columnDefs:[{name:"name"},{name:"description"},{name:"action",width:300,buttons:[{"class":"blue-hoki",icon:"icon-settings",href:"/jscripty/projects/view/{{row.entity.id}}",hide:e.isAgent()},{"class":" green-turquoise",icon:"fa fa-play",onClick:"grid.appScope.openJscriptyTab(row.entity)"},{"class":"purple",icon:"icon-book-open",href:"/jscripty/projects/report/{{row.entity.id}}/sessions",hide:e.isAgent()},{"class":"red-sunglo",icon:"fa fa-trash",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)",hide:e.isAgent()}]}]};a.gridOptions=d.gridOptions(c,b,a)},a.createItem=function(){var c=b.open({animation:!0,templateUrl:"app/jscripty/project/list/list.create.modal.html",controller:"JscriptyProjectListCreateCtrl"});c.result.then(function(b){console.log(b),a.gridOptions.getPage()})}}]),angular.module("xCallyShuttleApp").controller("JscriptyProjectListCreateCtrl",["$scope","$translate","$uibModalInstance","JscriptyProject","xAlert",function(a,b,c,d,e){a.form={},a.item={},a.save=function(){return d.save(a.item).$promise.then(function(a){e.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)})["catch"](function(a){console.log(a),e.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.jscripty.projects.list",{url:"/list",templateUrl:"app/jscripty/project/list/list.html",controller:"JscriptyProjectListCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.jscripty.projects",{url:"/projects",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("JscriptyProjectReportCtrl",["$scope","uiGridConstants","$http","$state","$stateParams","socket","Auth","Modal","xAlert","$translate","$rootScope","gridOptions","JscriptyProject","$location",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n){a.projectStats={started:0,incomplete:0,completed:0},a.projectId=e.id,a.initView=function(){m.get({id:e.id}).$promise.then(function(b){a.project=b})["catch"](function(a){i.error(a)}),m.get({id:e.id,controller:"sessions"}).$promise.then(function(b){var c=_.groupBy(b.rows,"status");a.projectStats.started=c.started?c.started.length:0,a.projectStats.completed=c.completed?c.completed.length:0,a.projectStats.incomplete=c.incomplete?c.incomplete.length:0})["catch"](function(a){i.error(a)})},a.pdf=function(a,b){var c=[];if(a){var d=html2canvas(document.getElementById(a)),e=d.parse(),f=d.render(e),g=f.toDataURL("image/png");c.push({image:g,width:500,style:"img"})}b.length&&_.forEach(b,function(a){var b=html2canvas(document.getElementById(a.question_id)),d=b.parse(),e=b.render(d),f=e.toDataURL("image/png");c.push({image:f,width:500,style:"img"})});var h={content:c};pdfMake.createPdf(h).download("Project_summary.pdf")},a.getProjectSessions=function(){var c={exporterCsvFilename:"jscriptyProjects.csv",columnDefs:[{name:"session_id",displayName:"APPLICATION_SESSIONID"},{name:"queue",displayName:"APPLICATION_QUEUE"},{name:"membername",displayName:"APPLICATION_AGENT"},{name:"calleridnum",displayName:"APPLICATION_CALLERIDNUM"},{name:"createdAt",displayName:"APPLICATION_STARTEDAT",filterHeaderTemplate:'<div class="ui-grid-filter-container row"><div ng-repeat="colFilter in col.filters" class="col-md-6 col-md-offset-0 col-sm-5 col-sm-offset-0 col-xs-5 col-xs-offset-0"><div custom-grid-date-filter-header></div></div></div>',filters:[{name:"From",condition:b.filter.GREATER_THAN_OR_EQUAL},{name:"To",condition:b.filter.LESS_THAN_OR_EQUAL}]},{name:"completedAt",displayName:"APPLICATION_COMPLETEDAT",filterHeaderTemplate:'<div class="ui-grid-filter-container row"><div ng-repeat="colFilter in col.filters" class="col-md-6 col-md-offset-0 col-sm-5 col-sm-offset-0 col-xs-5 col-xs-offset-0"><div custom-grid-date-filter-header></div></div></div>',filters:[{name:"From",condition:b.filter.GREATER_THAN_OR_EQUAL},{name:"To",condition:b.filter.LESS_THAN_OR_EQUAL}]},{name:"status",displayName:"APPLICATION_STATUS"},{name:"last_question_id",displayName:"APPLICATION_LASTQUESTIONID"},{name:"action",width:100,buttons:[{"class":"blue-hoki",href:"/jscripty/projects/report/{{row.entity.projectId}}/session/{{row.entity.session_id}}",name:"Detail"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteSession(row.entity.session_id)"}]}]};a.gridOptions=l.gridOptions(m,c,a,{id:e.id,controller:"sessions"})},a.deleteSession=function(b){m["delete"]({id:e.id,controller:"sessions",action:b}).$promise.then(function(b){a.gridOptions.getPage(),a.initView(),i.show(j.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){i.error(a)})},a.getSessionDetails=function(){m.get({id:e.id,controller:"sessions",action:e.sessionId}).$promise.then(function(b){a.session=b,a.sessionQuestions=b.ReportJscriptyQuestions})["catch"](function(a){i.error(a)})},a.getQuestionSummary=function(){var b={exporterCsvFilename:"jscriptyProjects.csv",columnDefs:[{name:"question_id",displayName:"APPLICATION_QUESTIONID"},{name:"question_type",displayName:"APPLICATION_QUESTIONTYPE"},{name:"question_label",displayName:"APPLICATION_QUESTIONLABEL"},{name:"question_text",displayName:"APPLICATION_QUESTION"},{name:"count",displayName:"APPLICATION_COUNT",enableFiltering:!1},{name:"action",width:100,buttons:[{"class":"blue-hoki",href:"/jscripty/projects/report/"+e.id+"/detail/{{row.entity.question_id}}",name:"Detail"}]}]};a.gridOptions=l.gridOptions(m,b,a,{id:e.id,controller:"questions",action:"summary"})},a.getQuestionInputs=function(){var b={exporterCsvFilename:"jscriptyProjects.csv",columnDefs:[{name:"session_id",displayName:"APPLICATION_SESSIONID"},{name:"question_id",displayName:"APPLICATION_QUESTIONID",enableFiltering:!1},{name:"question_label",displayName:"APPLICATION_QUESTIONLABEL",enableFiltering:!1},{name:"question_text",displayName:"APPLICATION_QUESTION",enableFiltering:!1},{name:"input_label",displayName:"APPLICATION_INPUTLABEL",enableFiltering:!1},{name:"input_value",cellTemplate:'<div uib-tooltip="{{row.entity.input_value}}">{{row.entity.input_value}}</div>',displayName:"APPLICATION_INPUTVALUE",enableFiltering:!1}]};a.gridOptions=l.gridOptions(m,b,a,{id:e.id,controller:"inputs"})},a.getProjectDetail=function(){a.projectDetail=[],m.query({id:e.id,controller:"questions",action:"detail"}).$promise.then(function(b){console.log(e.questionId),e.questionId?a.projectDetail.push(_.find(b,function(a){return a.question_id==parseInt(e.questionId)})):a.projectDetail=b,console.log(a.projectDetail)})["catch"](function(a){i.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.jscripty.projects.report",{url:"/report/:id",templateUrl:"app/jscripty/project/report/report.html",controller:"JscriptyProjectReportCtrl"}).state("main.jscripty.projects.report.sessions",{url:"/sessions",templateUrl:"app/jscripty/project/report/report.sessions.html"}).state("main.jscripty.projects.report.summary",{url:"/summary",templateUrl:"app/jscripty/project/report/report.summary.html"}).state("main.jscripty.projects.report.inputs",{url:"/inputs",templateUrl:"app/jscripty/project/report/report.inputs.html"}).state("main.jscripty.projects.report.detail",{url:"/detail",templateUrl:"app/jscripty/project/report/report.detail.html"}).state("main.jscripty.projects.report.questionDetail",{url:"/detail/:questionId",controller:"JscriptyProjectReportCtrl",templateUrl:"app/jscripty/project/report/report.detail.html"}).state("main.jscripty.projects.report.sessionDetail",{url:"/session/:sessionId",controller:"JscriptyProjectReportCtrl",templateUrl:"app/jscripty/project/report/report.session.detail.html"})}]),angular.module("xCallyShuttleApp").controller("JscriptyProjectViewCtrl",["$scope","$http","$state","$stateParams","socket","Auth","Modal","xAlert","$translate","$rootScope",function(a,b,c,d,e,f,g,h,i,j){a.jscriptyProject={},a.getProject=function(){b.get("/api/jscripty/projects/"+d.id).success(function(b){a.jscriptyProject=b,angular.element(document).ready(function(){window.onerror=function(a,b,c){try{if(null!=a&&-1!=a.indexOf("Script error."));else{var d=new Image;d.src="assets/plugins/mxgraph/images/1x1.png?msg="+encodeURIComponent(a)+"&url="+encodeURIComponent(b)+"&lnum="+encodeURIComponent(c)}}catch(e){}},b.token=f.getToken();var a=new EditorUi(new Editor);a.openString(b.draft,b.name,b),a.editor.graphChangeListener=function(a,b){var c=b.properties.rtChange||!1;c||(this.modified=!0)}}),e.syncUpdates("jscripty_project",[b],function(a,c,d){c.id===b.id})})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.jscripty.projects.view",{url:"/view/:id",templateUrl:"app/jscripty/project/view/view.html",controller:"JscriptyProjectViewCtrl",authenticate:!0,resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",serie:!0,cache:!1,files:["assets/plugins/mxgraph/css/common.css","assets/plugins/mxgraph/css/explorer.css","assets/plugins/mxgraph/styles/grapheditor.css","assets/plugins/mxgraph/styles/custom.css","assets/plugins/jscripty/js/custom.js","assets/plugins/mxgraph/js/mxClient.js","assets/plugins/jscripty/js/Editor.js","assets/plugins/jscripty/js/Graph.js","assets/plugins/jscripty/js/EditorUi.js","assets/plugins/jscripty/js/Actions.js","assets/plugins/jscripty/js/Menus.js","assets/plugins/jscripty/js/Sidebar.js","assets/plugins/jscripty/js/Toolbar.js","assets/plugins/jscripty/js/Dialogs.js"]}])}]}})}]),angular.module("xCallyShuttleApp").controller("LandingCtrl",["$scope","$location","$window","$timeout","Auth","Setting","YourDashboard",function(a,b,c,d,e,f,g){function h(b,c){var d,f,g=b.length;for(d=0;g>d;d++)if(_.includes(c,b[d].id))if(b[d].SubModules&&b[d].SubModules.length){if(f=h(b[d].SubModules,c))return f}else switch(b[d].id){case 2:var i={};i[e.getRole()]=!0;var j=_.find(a.tempDashboards,i);if(j)return f="/tools/yourdashboards/show/"+j.id,delete a.tempDashboards,f;break;default:return b[d].path}}function i(c){c||(a.message="MESSAGE_NO_AVAILABLE_MODULES"),d(function(){b.path(c)},500)}a.initLanding=function(){a.year=moment().year(),f.get({controller:"info"}).$promise.then(function(b){a.info=b})["catch"](function(a){console.error(a)});var c,d;return(d=e.getCurrentUser().$promise)?d.then(function(b){switch(c=b,c.role){case"user":if(_.includes(_.map(b.Modules,"id"),2))return g.get().$promise.then(function(d){a.tempDashboards=d.rows,i(h(c.Modules,_.map(b.Modules,"id")))})["catch"](function(){_.remove(c.Modules,{id:2}),i(h(c.Modules,_.map(b.Modules,"id")))});i(h(c.Modules,_.map(b.Modules,"id")));break;case"admin":case"agent":i("/dashboard/voice")}})["catch"](function(a){console.error(a),b.path("/login")}):void b.path("/login")}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("landing",{url:"/landing",templateUrl:"app/landing/landing.html",controller:"LandingCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/error.css","assets/css/login.css"]}])}]}})}]),angular.module("xCallyShuttleApp").controller("LoginCtrl",["$scope","Auth","$location","$window","$rootScope","Setting","xAlert","$stateParams",function(a,b,c,d,e,f,g,h){a.year=moment().year(),a.recovered=h.reset,a.userLogin={},a.userSignUp={},a.loginSubmitted=!1,a.signupSubmitted=!1,a.errorLogin=!1,a.errorSignup=!1,a.errorLog="",a.forgotPassword=!1,a.showRecoverMessage=!1,a.flagLogin1=!1,a.getInfo=function(){return f.get({controller:"info"}).$promise.then(function(b){a.info=b})["catch"](function(a){console.error(a)})},a.toggleLogin=function(){a.flagLogin1=!a.flagLogin1},a.toggleForgotPassword=function(b){a.showRecoverMessage=!1,a.userLogin.email="",a.forgotPassword=b},e.bodyLayout="login",a.$on("$viewContentLoaded",function(){Metronic.init(),Layout.init()}),a.recover=function(){b.recover({email:a.userLogin.email}).then(function(){a.showRecoverMessage=!0})["catch"](function(b){console.log(b),a.showRecoverMessage=!1,g.error(b)})},a.login=function(d){a.loginSubmitted=!0,d.$valid?b.login({name:a.userLogin.name,password:a.userLogin.password,remember:a.userLogin.remember}).then(function(){c.path("/landing")})["catch"](function(b){a.errorLog=b.message||"error",a.errorLogin=!0}):a.errorLogin=!0},a.signup=function(c){a.signupSubmitted=!0,c.$valid?b.createUser({email:a.userSignUp.email,fullname:a.userSignUp.fullname,name:a.userSignUp.name,password:a.userSignUp.password,role:a.userSignUp.role,online:!0})["catch"](function(b){a.errorLog=b.message||"error",a.errorSignup=!0}):a.errorSignup=!0},a.loginOauth=function(a){d.location.href="/auth/"+a}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("login",{url:"/login",templateUrl:"app/login/login.html",params:{reset:null},controller:"LoginCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/login.css"]}])}]}})}]),angular.module("xCallyShuttleApp").factory("Action",["$resource",function(a){return a("/api/actions/:name/:controller",{name:"@name"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("Ami",["$resource",function(a){return a("/api/ami/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("ChooseContactModalCtrl",["$scope","$uibModalInstance","data","xAlert","$translate","Contact",function(a,b,c,d,e,f){a.open=function(a){b.close(a)},a.getContacts=function(){return f.search({controller:"listcontact"},c).$promise.then(function(b){a.contacts=b.rows})["catch"](function(a){d.error(a)})},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("CloseEditedTabModalCtrl",["$scope","$uibModalInstance",function(a,b){a.close=function(){b.close()},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("CloseEditedTabModalJscriptyCtrl",["$scope","$uibModalInstance","project","JscriptyProject","xAlert",function(a,b,c,d,e){a.init=function(){a.project=c},a.close=function(){d.update({id:a.project.projectId,controller:"sessions",action:a.project.sessionId},{status:"incomplete",completedAt:Date(),last_question_id:a.project.lastQuestionId}).$promise.then(function(a){e.show("Project Ended","success")}),b.close()},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("ContactManagerSetDisposition",["$scope","$uibModalInstance","VoiceDisposition",function(a,b,c){a.initDisposition=function(){return c.get().$promise.then(function(b){a.dispositions=b.rows})["catch"](function(a){console.error(a)})},a.item={},a.ok=function(){b.close(a.item)},a.cancel=function(){b.dismiss()}}]),angular.module("xCallyShuttleApp").controller("customGridDateFilterModalCtrl",["$scope","$rootScope","$log","$uibModalInstance","term","hasTime",function(a,b,c,d,e,f){if(a.hasTime=f,a.dateTime={},e)if(f){var g=e.split(" ");a.dateTime.filterDate=moment(g[0]),a.dateTime.time=e[1]?moment(g[1],"HH:mm"):moment()}else a.dateTime.filterDate=moment(e);else f&&(a.dateTime.time=moment());a.setFilterDate=function(b){d.close({date:moment(b).format("YYYY-MM-DD").toString(),time:f?a.dateTime.time?moment(a.dateTime.time).format("HH:mm").toString():moment().format("HH:mm").toString():null})},a.cancelDateFilter=function(){d.dismiss()}}]),angular.module("xCallyShuttleApp").controller("customGridTagsModalCtrl",["$scope","$rootScope","$log","$uibModalInstance","term","Tag","xAlert",function(a,b,c,d,e,f,g){a.initModal=function(){return a.item={},f.get().$promise.then(function(b){a.tags=_.map(b.rows,"name"),a.item.myTags=e})["catch"](function(a){console.log("error retrieving tags"),g.error(a),d.dismiss()})},a.setFilterTags=function(){d.close(a.item.myTags)},a.cancelTagsFilter=function(){d.dismiss()}}]),angular.module("xCallyShuttleApp").factory("templateVariable",["$translate",function(a){return[{id:"voice",label:a.instant("APPLICATION_VOICE"),title:a.instant("APPLICATION_VOICE"),groups:[{label:a.instant("APPLICATION_QUEUE"),values:[{value:"{{uniqueid}}",label:a.instant("APPLICATION_UNIQUEID"),description:a.instant("APPLICATION_UNIQUEID")},{value:"{{calleridnum}}",label:a.instant("APPLICATION_CALLERIDNUM"),description:a.instant("APPLICATION_CALLERIDNUM")},{value:"{{calleridname}}",label:a.instant("APPLICATION_CALLERIDNAME"),description:a.instant("APPLICATION_CALLERIDNAME")},{value:"{{queue}}",label:a.instant("APPLICATION_QUEUE"),description:a.instant("APPLICATION_QUEUE")},{value:"{{interface}}",label:a.instant("APPLICATION_INTERFACE"),description:a.instant("APPLICATION_INTERFACE")},{value:"{{membername}}",label:a.instant("APPLICATION_MEMBERNAME"),description:a.instant("APPLICATION_MEMBERNAME")},{value:"{{holdtime}}",label:a.instant("APPLICATION_HOLDTIME"),description:a.instant("APPLICATION_HOLDTIME")},{value:"{{talktime}}",label:a.instant("APPLICATION_TALKTIME"),description:a.instant("APPLICATION_TALKTIME")},{value:"{{connectedlinenum}}",label:a.instant("APPLICATION_CONNECTEDLINENUM"),description:a.instant("APPLICATION_CONNECTEDLINENUM")},{value:"{{connectedlinename}}",label:a.instant("APPLICATION_CONNECTEDLINENAME"),description:a.instant("APPLICATION_CONNECTEDLINENAME")},{value:"{{agentconnectAt}}",label:a.instant("APPLICATION_CONNECTED_AT"),description:a.instant("APPLICATION_CONNECTED_AT")},{value:"{{agentcalledAt}}",label:a.instant("APPLICATION_CALLED_AT"),description:a.instant("APPLICATION_CALLED_AT")},{value:"{{agentcompleteAt}}",label:a.instant("APPLICATION_COMPLETED_AT"),description:a.instant("APPLICATION_AGENT_CALLED_AT")},{value:"{{reason}}",label:a.instant("APPLICATION_REASON"),description:a.instant("APPLICATION_REASON")},{value:"{{lastevent}}",label:a.instant("APPLICATION_LAST_EVENT"),description:a.instant("APPLICATION_LAST_EVENT")},{value:"{{channel}}",label:a.instant("APPLICATION_CHANNEL"),description:a.instant("APPLICATION_CHANNEL")}]}]},{id:"chat",label:a.instant("APPLICATION_CHAT"),title:a.instant("APPLICATION_CHAT"),groups:[{label:a.instant("APPLICATION_VARIABLES"),values:[{value:"{{username}}",label:a.instant("APPLICATION_USERNAME"),description:a.instant("APPLICATION_USERNAME")},{value:"{{email}}",label:a.instant("APPLICATION_MAIL"),description:a.instant("APPLICATION_MAIL")},{value:"{{text}}",label:a.instant("APPLICATION_TEXT"),description:a.instant("APPLICATION_TEXT")},{value:"{{chatWebsite}}",label:a.instant("APPLICATION_WEBSITE"),description:a.instant("APPLICATION_WEBSITE")}]}]},{id:"mail",label:a.instant("APPLICATION_MAIL"),title:a.instant("APPLICATION_MAIL"),groups:[{label:a.instant("APPLICATION_INTERACTION"),values:[{value:"{{interactionId}}",label:a.instant("APPLICATION_INTERACTION_ID"),description:a.instant("APPLICATION_INTERACTION_ID")},{value:"{{subject}}",label:a.instant("APPLICATION_SUBJECT"),description:a.instant("APPLICATION_SUBJECT")},{value:"{{{body}}}",label:a.instant("APPLICATION_MESSAGE"),description:a.instant("APPLICATION_MESSAGE")},{value:"{{accountName}}",label:a.instant("APPLICATION_ACCOUNT"),description:a.instant("APPLICATION_ACCOUNT")},{value:"{{from}}",label:"From",description:"From"},{value:"{{to}}",label:"To",description:"To"},{value:"{{cc}}",label:"Cc",description:"Cc"},{value:"{{agentName}}",label:a.instant("APPLICATION_AGENT_NAME"),description:a.instant("APPLICATION_AGENT_NAME")},{value:"{{agentEmail}}",label:a.instant("APPLICATION_AGENT_EMAIL"),description:a.instant("APPLICATION_AGENT_EMAIL")},{value:"{{createdAt}}",label:a.instant("APPLICATION_CREATED_AT"),description:a.instant("APPLICATION_CREATED_AT")}]}]}]}]),angular.module("xCallyShuttleApp").controller("gridDatePickerFilterCtrl",["$scope","$timeout","$uibModal","uiGridConstants",function(a,b,c,d){b(function(){a.col.colDef.name;a.openDatePicker=function(b){var d=c.open({templateUrl:"app/main/customDateFilter.modal.html",controller:"customGridDateFilterModalCtrl",size:"md",windowClass:"custom-date-filter-modal",resolve:{term:[function(){return b.term||null}],hasTime:b.hasTime||!1}});d.result.then(function(c){a.colFilter.listTerm=[],a.colFilter.term=c.date,b.hasTime&&(a.colFilter.term+=" "+c.time)})}})}]),angular.module("xCallyShuttleApp").factory("gridOptions",["Modal","xAlert","$translate","$interval","$q","usSpinnerService",function(a,b,c,d,e,f){return{gridOptions:function(d,g,h,i,j,k,l){function m(a,b){a.filter&&a.filter.term&&b&&(o[a.name]=a.filter.term),a.filters&&(a.filters.length>1?a.filters.forEach(function(b){b.term?64===b.condition?o[a.name+"_uiFrom"]=b.term:256===b.condition&&(o[a.name+"_uiTo"]=b.term):64===b.condition?delete o[a.name+"_uiFrom"]:256===b.condition&&delete o[a.name+"_uiTo"]}):a.filters.length&&a.filters[0].term?o[a.name]=a.filters[0].term:delete o[a.name])}h.id=[];var n=k?"gridOptions"+k:"gridOptions",o={offset:0,limit:10},p={offset:0,limit:10};g.draggable&&(g.rowTemplate='<div grid="grid" class="ui-grid-draggable-row" draggable="true"><div ng-repeat="(colRenderIndex, col) in colContainer.renderedColumns track by col.colDef.name" class="ui-grid-cell" ng-class="{ \'ui-grid-row-header-cell\': col.isRowHeader, \'custom\': true }" ui-grid-cell></div></div>',g.useExternalPagination=!1,g.enablePaginationControls=!1,g.showGridFooter=!1);var q=function(a){var b=a&&a>h[n].paginationPageSize?h[n].paginationPageSize:a,c=b?30*b+120:177,d=angular.element(document.getElementsByName(n)).length?angular.element(document.getElementsByName(n)[0]):angular.element(document.getElementsByClassName("ui-grid")[0]);d.css("height",c+"px")},r=function(a,b){return h[n].enablePaginationControls||(delete o.offset,delete o.limit),f.spin("spinner-grid"),i=a||i,d=b||d,d.get(i?_.merge(o,i):o).$promise.then(function(a){h[n].totalItems=a.count,h[n].data=a.rows,q(a.rows.length),l&&l()})["catch"](function(a){console.error(a)})["finally"](function(){f.stop("spinner-grid")})};return h.deleteItem=a.confirm["delete"](function(a){var e=i?angular.copy(i):{};return _.merge(e,{id:a}),d.remove(e).$promise.then(function(){r(),b.show(c.instant("MESSAGE_WELL_DONE")+"!","success"),h.gridApi.selection.clearSelectedRows(),h.id=[]})["catch"](function(a){b.error(a)})}),h.deleteItems=a.confirm["delete"](function(){var a=i?angular.copy(i):{};return _.merge(a,{ids:h.id}),d["delete"](a).$promise.then(function(){r(),b.show(c.instant("MESSAGE_WELL_DONE")+"!","success"),h.gridApi.selection.clearSelectedRows(),h.id=[]})["catch"](function(a){b.error(a)})}),g.columnDefs.forEach(function(a){m(a,!0),a.hasOwnProperty("displayName")||(a.displayName="APPLICATION_"+a.name.toUpperCase()),a.headerCellFilter="translate",a.hasOwnProperty("buttons")&&(a.displayName="",a.cellClass="ui-grid-vcenter",a.enableSorting=!1,a.enableFiltering=!1,a.enableColumnMenu=!1,a.cellTemplate="<div>",a.buttons.forEach(function(b){if(b.directive)a.cellTemplate+=b.directive;else{if(a.cellTemplate+="<a",a.cellTemplate+=b.hide?' data-ng-hide="'+b.hide+'" ':" ",a.cellTemplate+=b["class"]?' class="btn btn-xs '+b["class"]+'" ':" ",a.cellTemplate+=b.href?' data-ng-href="'+b.href+'" ':" ",a.cellTemplate+=b.uisref?' ui-sref="'+b.uisref+'" ':" ",a.cellTemplate+=b.onClick?' data-ng-click="'+b.onClick+'" ':" ",a.cellTemplate+=b.title?' title="'+b.title+'"':"",a.cellTemplate+=">",a.cellTemplate+=b.icon?'<i class="'+b.icon+'"></i>':"",b.name)switch(b.name){case"delete":a.cellTemplate+='<i class="icon-trash" title="'+b.name+'"></i>';break;case"profile":case"settings":case"detail":case"embedding":a.cellTemplate+='<i class="icon-settings" title="'+b.name+'"></i>';break;case"view":a.cellTemplate+='<i class="icon-doc" title="'+b.name+'"></i>';break;case"clone":a.cellTemplate+='<i class="icon-docs" title="'+b.name+'"></i>';break;case"permits":a.cellTemplate+='<i class="icon-key"></i>';break;case"copy":a.cellTemplate+='<i class="fa fa-files-o" title="'+b.name+'"></i>';break;case"select":a.cellTemplate+='<i class="icon-check" title="'+b.name+'"></i>';break;case"preview":a.cellTemplate+='<i class="icon-magnifier" title="'+b.name+'"></i>';break;case"contacts":a.cellTemplate+='<i class="fa fa-users" title="'+b.name+'"></i>';break;case"download":case"export":a.cellTemplate+='<i class="fa fa-download" title="'+b.name+'"></i>';break;case"agents":a.cellTemplate+='<i class="icon-people" title="'+b.name+'"></i>';break;case"run":a.cellTemplate+='<i class="fa fa-cogs" title="'+b.name+'"></i>';break;case"mailRoom":a.cellTemplate+='<i class="fa fa-envelope"></i>';break;case"chatRoom":a.cellTemplate+='<i class="fa fa-users"></i>';break;case"faxRoom":a.cellTemplate+='<i class="fa fa-fax"></i>';break;case"smsRoom":a.cellTemplate+='<i class="glyphicon glyphicon-comment"></i>';break;case"check":a.cellTemplate+='<i class="fa fa-check" title="'+b.name+'"></i>';break;case"queues":a.cellTemplate+='<i class="icon-docs" title="'+b.name+'"></i>';break;default:a.cellTemplate+="{{'APPLICATION_"+b.name.toUpperCase()+"' | translate}}"}else a.cellTemplate+=b.displayName?"{{'"+b.displayName+"' | translate}}":"";a.cellTemplate+="</a> "}}),a.cellTemplate+="<div>",delete a.buttons)}),_.merge({enableGridMenu:!0,headerCellFilter:"translate",enableHorizontalScrollbar:0,enableVerticalScrollbar:0,enableRowSelection:!0,enableSelectAll:!0,enableFiltering:!0,showGridFooter:!0,paginationPageSizes:[10,25,50,75],paginationPageSize:10,useExternalPagination:!0,useExternalSorting:!0,useExternalFiltering:!0,multiSelect:!0,getPage:r,gridMenuTitleFilter:function(a){var b=e.defer();return b.resolve(c.instant(a)),b.promise},exporterAllDataFn:function(){return p.offset=o.offset,p.limit=o.limit,o={offset:0,limit:null},r().then(function(){o.offset=p.offset,o.limit=p.limit,r()})},exporterFieldCallback:function(a,b,c,d){if("applications"===c.field&&b.entity.Applications){var e="";return _.forEach(b.entity.Applications,function(a){e+=a.app+"("+a.appdata.join(",")+")"}),e}return d},exporterHeaderFilter:c.instant,onRegisterApi:function(a){h.gridApi=a,h.gridApi.selection&&(h.gridApi.selection.on.rowSelectionChanged(h,function(a){a.isSelected?h.id.push(h.gridApi.grid.options.primaryKey?a.entity[h.gridApi.grid.options.primaryKey]:a.entity.id):_.pull(h.id,h.gridApi.grid.options.primaryKey?a.entity[h.gridApi.grid.options.primaryKey]:a.entity.id)}),h.gridApi.selection.on.rowSelectionChangedBatch(h,function(a){a[0].isSelected?h.id=_.union(h.id,_.map(a,h.gridApi.grid.options.primaryKey?"entity."+h.gridApi.grid.options.primaryKey:"entity.id")):_.map(a,h.gridApi.grid.options.primaryKey?"entity."+h.gridApi.grid.options.primaryKey:"entity.id").forEach(function(a){_.pull(h.id,a)})})),h.gridApi.core.on.sortChanged(h,function(a,b){0===b.length?o.order=null:o.order=b[0].name+" "+b[0].sort.direction.toUpperCase(),r()});for(var e=0;e<h.gridOptions.columnDefs.length;e++)if(h.gridOptions.columnDefs[e].hasOwnProperty("sort")){o.order=h.gridOptions.columnDefs[e].name+" "+h.gridOptions.columnDefs[e].sort.direction.toUpperCase();break}h.gridApi.pagination.on.paginationChanged(h,function(a,b){o.offset=(a-1)*b,o.limit=b,r()}),h.gridApi.core.on.filterChanged(h,function(){var a=this.grid;a.columns.forEach(function(a){m(a)}),r()}),h.gridApi.draggableRows&&h.gridApi.draggableRows.on.rowDropped(h,function(a){a.fromIndex!==a.toIndex&&d.update(i,h[n].data).$promise.then(function(){b.show(c.instant("MESSAGE_WELL_DONE")+"!","success")})["catch"](function(a){b.error(a)})["finally"](function(){r()})}),j||r()}},g)}}}]),angular.module("xCallyShuttleApp").controller("gridTagsFilterCtrl",["$scope","$timeout","$uibModal","uiGridConstants",function(a,b,c,d){b(function(){a.col.colDef.name;a.openTags=function(b){var d=c.open({templateUrl:"app/main/customTagsFilter.modal.html",controller:"customGridTagsModalCtrl",size:"md",resolve:{term:[function(){if(b.term){var a=b.term.split(";");return a.pop(),a}return[]}]}});d.result.then(function(b){a.colFilter.listTerm=[],b.length&&(a.colFilter.term=b.join(";")+";")})}})}]),angular.module("xCallyShuttleApp").controller("MainCtrl",["$scope","$rootScope","$translate","$timeout","socket","Auth","xAlert","$uibModal","$log","$state","Contact","$window","$location","localStorageService","YourDashboard",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){function p(d){b.activeTour={ +main:!1},b.tourConfig={main:[{type:"function",fn:function(){b.tempTourPath=m.path()}},{type:"title",heading:c.instant("TOUR_MAIN_WELCOME"),text:'<div class="row"><div id="title-text" class="col-md-12"><span class="main-text">'+c.instant("TOUR_MAIN_DISCOVER_MOTION")+"</span><br/></div></div>",curtainClass:"myCurtainClass"}]},(f.isAdmin()||b.userModules[1])&&(b.tourConfig.main=b.tourConfig.main.concat([{type:"location_change",path:"/dashboard/voice"},{type:"title",heading:c.instant("TOUR_MAIN_DASHBOARD"),text:c.instant("TOUR_MAIN_DASHBOARD_MESSAGE"),curtainClass:"myCurtainClass"}])),(f.isAdmin()||b.userModules[2])&&d&&(b.tourConfig.main=b.tourConfig.main.concat([{type:"location_change",path:"/tools/yourdashboards/show/"+d.id},{type:"title",heading:c.instant("TOUR_MAIN_YOURDASHBOARD"),text:c.instant("TOUR_MAIN_YOURDASHBOARD_MESSAGE"),curtainClass:"myCurtainClass"}]),delete a.tempDashboards),(f.isAdmin()||b.userModules[4])&&(b.tourConfig.main=b.tourConfig.main.concat([{type:"location_change",path:"/staff/agents/list"},{type:"title",heading:c.instant("TOUR_MAIN_AGENTS"),text:c.instant("TOUR_MAIN_AGENTS_MESSAGE"),curtainClass:"myCurtainClass"}])),f.isAdmin()&&(b.tourConfig.main=b.tourConfig.main.concat([{type:"location_change",path:"/channels/voice/queues/list"},{type:"title",heading:c.instant("TOUR_MAIN_VOICE_QUEUE"),text:c.instant("TOUR_MAIN_VOICE_QUEUE_ADD_MESSAGE"),curtainClass:"myCurtainClass"}])),b.license.chat&&(f.isAdmin()||b.userModules[30])&&(b.tourConfig.main=b.tourConfig.main.concat([{type:"location_change",path:"/channels/chat/queues/list"},{type:"title",heading:c.instant("TOUR_MAIN_CHAT_QUEUE"),text:c.instant("TOUR_MAIN_CHAT_QUEUE_MESSAGE"),curtainClass:"myCurtainClass"}])),b.license.openchannel&&(f.isAdmin()||b.userModules[46])&&(b.tourConfig.main=b.tourConfig.main.concat([{type:"location_change",path:"/channels/openchannel/accounts/list"},{type:"title",heading:c.instant("TOUR_MAIN_OPENCHANNEL"),text:c.instant("TOUR_MAIN_OPENCHANNEL_MESSAGE"),curtainClass:"myCurtainClass"}])),(f.isAdmin()||b.userModules[14])&&(b.tourConfig.main=b.tourConfig.main.concat([{type:"location_change",path:"/square/projects/list"},{type:"title",heading:c.instant("TOUR_MAIN_SQUARE_PROJECT"),text:c.instant("TOUR_MAIN_SQUARE_PROJECT_MESSAGE"),curtainClass:"myCurtainClass"}])),(f.isAdmin()||b.userModules[52])&&(b.tourConfig.main=b.tourConfig.main.concat([{type:"location_change",path:"/tools/trunks/list"},{type:"title",heading:c.instant("TOUR_MAIN_TRUNKS"),text:c.instant("TOUR_MAIN_TRUNKS_MESSAGE"),curtainClass:"myCurtainClass"}])),(f.isAdmin()||b.userModules[52])&&(b.tourConfig.main=b.tourConfig.main.concat([{type:"location_change",path:"/tools/triggers/list"},{type:"title",heading:c.instant("TOUR_MAIN_TRIGGERS"),text:c.instant("TOUR_MAIN__MESSAGE"),curtainClass:"myCurtainClass"}])),b.license.jscripty&&(f.isAdmin()||b.userModules[50])&&(b.tourConfig.main=b.tourConfig.main.concat([{type:"location_change",path:"/jscripty/projects/list"},{type:"title",heading:c.instant("TOUR_MAIN_JSCRIPTY"),text:c.instant("TOUR_MAIN_JSCRIPTY_MESSAGE"),curtainClass:"myCurtainClass"}])),(f.isAdmin()||b.userModules[17])&&(b.tourConfig.main=b.tourConfig.main.concat([{type:"location_change",path:"/analytics/reports/list"},{type:"title",heading:c.instant("TOUR_MAIN_REPORTS"),text:c.instant("TOUR_MAIN_REPORTS_MESSAGE"),curtainClass:"myCurtainClass"}])),b.tourConfig.main=b.tourConfig.main.concat([{type:"title",heading:c.instant("TOUR_MAIN_END"),text:c.instant("TOUR_MAIN_END_MESSAGE"),curtainClass:"myCurtainClass"}]),n.get("skipTour")||(b.activeTour.main=!0)}a.awesomeThings=[],b.workspaces=[],a.Auth=f,b.userModules={},a.keepMeLoggedModalInstance=void 0,b.initTours=function(){return f.isAdmin()||b.userModules[2]?o.get().$promise.then(function(a){var b={};b[f.getRole()]=!0,p(_.find(a.rows,b))})["catch"](function(a){console.log(a)}):void p()},f.getCurrentUser().$promise.then(function(a){a.Modules.forEach(function(a){b.userModules[a.id]=!0}),b.initTours()})["catch"](function(a){g.error(a)}),b.onTourFinish=function(){n.set("skipTour",!0),b.tempTourPath&&m.path(b.tempTourPath)},b.onTourSkip=function(){n.set("skipTour",!0)},a.select=function(a){switch(a.type){case"chatRoom":case"mailRoom":case"faxRoom":a.unread=0}},e.socket.on("agent:save",function(b){!b.online&&f.isAgent()&&(a.keepMeLoggedModalInstance||(a.keepMeLoggedModalInstance=h.open({animation:!0,backdrop:"static",keyboard:!1,templateUrl:"app/main/keepMeLogged.modal.html",controller:["$scope","$uibModalInstance",function(a,b){a.close=function(){b.close(!0)},a.cancel=function(){b.close(!1)}}]}),a.keepMeLoggedModalInstance.result.then(function(a){a?l.location.reload():(f.logout(),m.path("/login"))})))}),a.openTdTab=function(a){b.workspaces.push({type:"tdDisposal",name:"Motion Dialer Disposition","class":"icon-control-forward",active:!0,spooler:a})},a.deselect=function(){},a.isAdmin=f.isAdmin,a.isLoggedIn=f.isLoggedIn,a.getCurrentUser=f.getCurrentUser,a.CurrentUser=f.getCurrentUser(),e.socket.on("user_has_voice_queue_permit:change",function(){a.CurrentUser=f.getCurrentUser()}),e.socket.on("user_has_chat_queue_permit:change",function(){a.CurrentUser=f.getCurrentUser()}),e.socket.on("user_has_mail_queue_permit:change",function(){a.CurrentUser=f.getCurrentUser()}),e.socket.on("user_has_fax_queue_permit:change",function(){a.CurrentUser=f.getCurrentUser()}),e.socket.on("user_has_sms_queue_permit:change",function(){a.CurrentUser=f.getCurrentUser()}),a.mainTab={active:!0},a.closeJscriptyTab=function(a){if(b.workspaces[a].edited){var c=h.open({animation:!0,templateUrl:"app/main/closeEditedTab.modal.jscripty.html",controller:"CloseEditedTabModalJscriptyCtrl",resolve:{project:b.workspaces[a]}});c.result.then(function(){b.workspaces.splice(a,1)})}else b.workspaces.splice(a,1)},b.closeTab=function(a){var c;b.workspaces[a].edited?"jscripty"===b.workspaces[a].type?b.workspaces[a].end():(c=h.open({animation:!0,templateUrl:"app/main/closeEditedTab.modal.html",controller:"CloseEditedTabModalCtrl"}),c.result.then(function(){b.workspaces.splice(a,1)},function(){i.info("Modal dismissed at: "+new Date)})):b.workspaces.splice(a,1)},a.createContact=function(d,e){return e.CompanyId||delete e.CompanyId,k.save(e).$promise.then(function(e){b.workspaces.splice(d,1);var f=e.firstName;e.lastName&&(f+=" "+e.lastName),a.openContactTab({firstName:e.firstName,lastName:e.lastName,id:e.id}),g.show(c.instant("MESSAGE_WELL_DONE")+"!","success")})["catch"](function(a){g.error(a)})};var q=function(b){var c=h.open({animation:!0,templateUrl:"app/main/chooseContact.modal.html",controller:"ChooseContactModalCtrl",resolve:{data:function(){return b}}});c.result.then(function(c){c?a.openContactTab(c,b):a.newContact(b)},function(){i.info("Modal dismissed at: "+new Date)})};a.updateContact=function(a,d){var e=angular.copy(d);return e.CompanyId||(e.CompanyId=null),k.update({id:e.id},e).$promise.then(function(){b.workspaces[a].edited=!1,g.show(c.instant("MESSAGE_WELL_DONE")+"!","success")})["catch"](function(a){g.error(a)})},e.socket.on("report_integration:contactmanager",function(a){q(a)}),e.socket.on("report_integration:jscripty",function(b){a.openJscriptyTab({name:"Jscripty",id:b.projectId,calleridnum:b.calleridnum,calleridname:b.calleridname,queue:b.queue,membername:b.membername})}),e.socket.on("report_integration:salesforce",function(a){l.open(a.url,"_blank")}),e.socket.on("report_integration:tdDisposal",function(b){a.openTdTab(b)}),b.openContactTab=function(a,c){var d=_.find(b.workspaces,{contactID:a.id});if(d)d.active=!0;else{var e=a.firstName;a.lastName&&(e+=" "+a.lastName),b.workspaces.push({name:e,type:"contact",contactID:a.id,"class":"icon-user",active:!0,data:c||null})}},a.openJscriptyTab=function(a){b.workspaces.push({name:a.name,type:"jscripty",active:!0,data:a})},a.newContact=function(a){b.workspaces.push({name:"New Contact",type:"newContact","class":"icon-user",active:!0,data:a||null})},a.$on("$viewContentLoaded",function(){Metronic.init()}),b.language=c.use(),a.changeLanguage=function(a){return c.use(a).then(function(a){b.language=a,-1!==["main.jscripty.projects.view","main.square.projects.view"].indexOf(j.current.name)&&l.location.reload()})["catch"](function(a){console.error(a)})},a.$on("$destroy",function(){console.log("main $destroy"),e.unsyncUpdates("user_has_voice_queue_permit"),e.unsyncUpdates("user_has_chat_queue_permit"),e.unsyncUpdates("user_has_mail_queue_permit"),e.unsyncUpdates("user_has_fax_queue_permit"),e.unsyncUpdates("user_has_sms_queue_permit")})}]),angular.module("xCallyShuttleApp").directive("ngSpinnerBar",["$rootScope",function(a){return{link:function(b,c){c.addClass("hide"),a.$on("$stateChangeStart",function(){"spinner-page"===c[0].id&&c.removeClass("hide")}),a.$on("$stateChangeSuccess",function(){"spinner-page"===c[0].id&&(c.addClass("hide"),$("body").removeClass("page-on-load"),Layout.setSidebarMenuActiveLink("match"),setTimeout(function(){Metronic.scrollTop()},1e3))}),a.$on("$spinnerStart",function(){"spinner-request"===c[0].id&&c.removeClass("hide")}),a.$on("$spinnerStop",function(){"spinner-request"===c[0].id&&c.addClass("hide")}),a.$on("$stateNotFound",function(){"spinner-page"===c[0].id&&c.addClass("hide")}),a.$on("$stateChangeError",function(){"spinner-page"===c[0].id&&c.addClass("hide")})}}}]).directive("a",function(){return{restrict:"E",link:function(a,b,c){(c.ngClick||""===c.href||"#"===c.href)&&b.on("click",function(a){a.preventDefault()})}}}).directive("nxEqual",function(){return{require:"ngModel",link:function(a,b,c,d){return c.nxEqual?(a.$watch(c.nxEqual,function(a){d.$setValidity("nxEqual",a===d.$viewValue)}),void d.$parsers.push(function(b){var e=b===a.$eval(c.nxEqual);return d.$setValidity("nxEqual",e),e?b:void 0})):void console.error("nxEqual expects a model as an argument!")}}}).directive("ngEnter",function(){return function(a,b,c){b.bind("keydown keypress",function(b){13===b.which&&(a.$apply(function(){a.$eval(c.ngEnter)}),b.preventDefault())})}}).directive("dropdownMenuHover",function(){return{link:function(a,b){b.dropdownHover()}}}).directive("uiSelectRequired",function(){return{require:"ngModel",link:function(a,b,c,d){d.$validators.uiSelectRequired=function(a){return a&&a.length}}}}).directive("rpattern",function(){return{restrict:"A",require:"ngModel",link:function(a,b,c,d){function e(a,b){return null==b||""===b||!h||a.test(b)?(d.$setValidity("pattern",!0),b):void d.$setValidity("pattern",!1)}var f,g=c.rpattern,h=!0;g&&(g.match(/^\/(.*)\/$/)?(g=new RegExp(g.substr(1,g.length-2)),f=function(a){return e(g,a)}):f=function(b){var c=a.$eval(g);if(!c||!c.test)throw new Error("Expected "+g+" to be a RegExp but was "+c);return e(c,b)}),d.$formatters.push(f),d.$parsers.push(f),c.$observe("required",function(a){h=a,f(d.$viewValue)})}}}).directive("newContact",["$compile","xAlert","socket","$translate","$timeout","List","Tag","Company","ReportCall","$uibModal","$rootScope","Auth",function(a,b,c,d,e,f,g,h,i,j,k,l){return{restrict:"E",scope:{workspace:"=",index:"=",submit:"&onSubmit"},templateUrl:"app/main/template/template.contactTab.html",compile:function(a,m){return function(a,m,n){function o(){a.$watch("contact",function(b,c){angular.equals(b,c)||(a.workspace.edited=!0)},!0)}a.license=k.license,a.Auth=l,a.forms={general:{}},a.firstLoad=!0,a.detail={tab:"main"},a.contact={CompanyId:"",disposed:!1},a.submitButtonLabel=d.instant("APPLICATION_CONFIRM"),a.getAgent=function(){return l.getCurrentUser().$promise.then(function(b){a.agent=b})["catch"](function(a){b.error(a)})},a.callPhoneBar=function(c,e){var f;switch(e){case"call":f="http://127.0.0.1:"+a.agent.phoneBarRemoteControlPort+"/api/originate/"+c;break;case"transfer":f="http://127.0.0.1:"+a.agent.phoneBarRemoteControlPort+"/api/transfer?number="+c;break;default:f="http://127.0.0.1:"+a.agent.phoneBarRemoteControlPort+"/api/originate/"+c}return $http.get(f).success(function(){b.show(d.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){b.error(a)})},a.dispose=function(){return j.open({animation:!0,templateUrl:"app/main/cm.disposition.modal.html",controller:"ContactManagerSetDisposition"}).result.then(function(c){return i.update({id:a.workspace.data.uniqueid},c).$promise.then(function(){a.contact.disposed=!0,b.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){b.error(a)})})},a.init=function(){a.workspace.data&&(a.contact.firstName=a.workspace.data.calleridname?a.workspace.data.calleridname:a.workspace.data.messageId?a.workspace.data.messageId:a.workspace.data.uniqueid?a.workspace.data.uniqueid:"",a.workspace.data.calleridnum&&(a.contact.phone=a.workspace.data.calleridnum),a.workspace.data.from&&(a.contact.email=a.workspace.data.from)),a.getTags(),a.getCompanies(),a.getLists(),a.getAgent()},a.getLists=function(){return f.get().$promise.then(function(b){a.lists=b.rows,c.syncUpdates("list",a.lists),a.contact.ListId=a.lists[0]?a.lists[0].id:null,a.getCustomFields()})["catch"](function(a){b.error(a)})},a.getCustomFields=function(){return f.get({listId:a.contact.ListId,controller:"customfields"}).$promise.then(function(b){a.customFields=b.rows,a.customFields.forEach(function(a){a.values=JSON.parse(a.values)}),c.socket.on("custom_field:remove",function(b){_.remove(a.customFields,function(a){return b.id==a.id})}),c.socket.on("custom_field:save",function(b){if(b.ListId===a.contact.ListId){var c=_.find(a.customFields,{id:b.id});c||("string"==typeof b.values&&(b.values=JSON.parse(b.values)),a.customFields.push(b))}}),!a.firstLoad||a.workspace.data?(a.workspace.edited=!0,a.firstLoad=!1):(a.firstLoad=!1,o())})["catch"](function(a){console.error(a),b.error(a)})},a.getTags=function(){return g.get().$promise.then(function(b){a.tags=_.map(b.rows,"name")})["catch"](function(a){console.error(a),b.error(a)})},a.getCompanies=function(){return h.get().$promise.then(function(b){a.companies=b.rows,a.companies.unshift({id:"",name:"-- None --"}),c.syncUpdates("company",a.companies)})["catch"](function(a){console.error(a),b.error(a)})},e(function(){a.init()})}}}}]).directive("contact",["$compile","xAlert","socket","$timeout","List","Tag","Company","Contact","$translate","gridOptions","$uibModal","ReportCall","$rootScope","usSpinnerService","uiGridConstants","$log","Auth","$http",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r){return{restrict:"E",scope:{workspace:"=",index:"=",submit:"&onSubmit"},templateUrl:"app/main/template/template.contactTab.html",compile:function(a,j){return function(a,j,s){function t(b){var c=[],d={};_.forEach(a.columns[a.log[b].show][a.log[b].detail].indexes,function(e,f){d={name:e,displayName:a.columns[a.log[b].show][a.log[b].detail].header[f],headerCellFilter:"translate",enableSorting:!1,enableColumnMenu:!1},"createdAt"===e&&(d.cellTemplate="<div class=\"centered-uigrid-td\">{{row.entity.createdAt | date:'dd/MM/yyyy HH:mm:ss'}}</div>",d.filterHeaderTemplate='<div class="ui-grid-filter-container row"><div ng-repeat="colFilter in col.filters" class="col-md-6 col-md-offset-0 col-sm-5 col-sm-offset-0 col-xs-5 col-xs-offset-0"><div custom-grid-date-filter-header></div></div></div>',d.filters=[{name:"From",condition:o.filter.GREATER_THAN_OR_EQUAL},{name:"To",condition:o.filter.LESS_THAN_OR_EQUAL}]),c.push(d)}),a.columns[a.log[b].show][a.log[b].detail].actions&&c.push(a.columns[a.log[b].show][a.log[b].detail].actions),c.forEach(function(a){u(a,b,!0),a.hasOwnProperty("displayName")||(a.displayName="APPLICATION_"+a.name.toUpperCase()),a.headerCellFilter="translate",a.hasOwnProperty("buttons")&&(a.displayName="",a.cellClass="ui-grid-vcenter",a.enableSorting=!1,a.enableFiltering=!1,a.enableColumnMenu=!1,a.cellTemplate="<div>",a.buttons.forEach(function(b){if(b.directive)a.cellTemplate+=b.directive;else{if(a.cellTemplate+="<a",a.cellTemplate+=b.hide?' data-ng-hide="'+b.hide+'" ':" ",a.cellTemplate+=b["class"]?' class="btn btn-xs '+b["class"]+'" ':" ",a.cellTemplate+=b.href?' data-ng-href="'+b.href+'" ':" ",a.cellTemplate+=b.uisref?' ui-sref="'+b.uisref+'" ':" ",a.cellTemplate+=b.onClick?' data-ng-click="'+b.onClick+'" ':" ",a.cellTemplate+=b.title?' title="'+b.title+'"':"",a.cellTemplate+=">",a.cellTemplate+=b.icon?'<i class="'+b.icon+'"></i>':"",b.name)switch(b.name){case"delete":a.cellTemplate+='<i class="fa fa-trash"></i>';break;case"profile":case"settings":case"detail":case"embedding":a.cellTemplate+='<i class="icon-settings"></i>';break;case"agents":a.cellTemplate+='<i class="icon-people"></i>';break;case"run":a.cellTemplate+='<i class="fa fa-cogs"></i>';break;case"mailRoom":a.cellTemplate+='<i class="fa fa-envelope"></i>';break;case"chatRoom":a.cellTemplate+='<i class="fa fa-users"></i>';break;case"faxRoom":a.cellTemplate+='<i class="fa fa-fax"></i>';break;case"smsRoom":a.cellTemplate+='<i class="glyphicon glyphicon-comment"></i>';break;default:a.cellTemplate+="{{'APPLICATION_"+b.name.toUpperCase()+"' | translate}}"}else a.cellTemplate+=b.displayName?"{{'"+b.displayName+"' | translate}}":"";a.cellTemplate+="</a> "}}),a.cellTemplate+="<div>",delete a.buttons)});var e={enablePaginationControls:!0,exporterCsvFilename:b+".csv",columnDefs:c,enableGridMenu:!0,headerCellFilter:"translate",enableHorizontalScrollbar:0,enableVerticalScrollbar:0,enableFiltering:!0,showGridFooter:!0,paginationPageSizes:[10,25,50,75],paginationPageSize:10,useExternalPagination:!0,useExternalSorting:!0,useExternalFiltering:!0,showTreeExpandNoChildren:!0,data:[],gridMenuTitleFilter:function(a){var b=$q.defer();return b.resolve(i.instant(a)),b.promise},onRegisterApi:function(c){a.gridApi=c,a.gridApi.grid.registerDataChangeCallback(function(){}),a.gridApi.core.on.sortChanged(a,function(a,c){0===c.length?v.order=null:v.order=c[0].name+" "+c[0].sort.direction.toUpperCase(),w(b)}),a.gridApi.pagination.on.paginationChanged(a,function(a,c){v.offset=(a-1)*c,v.limit=c,w(b)}),a.gridApi.core.on.filterChanged(a,function(){var a=this.grid;a.columns.forEach(function(a){u(a,b)}),w(b)})}};w(b,e)}function u(a,b,c){a.filter&&a.filter.term&&c&&(v[b][a.name]=a.filter.term),a.filters&&(a.filters.length>1?a.filters.forEach(function(c){c.term?64===c.condition?v[b][a.name+"_uiFrom"]=c.term:256===c.condition&&(v[b][a.name+"_uiTo"]=c.term):64===c.condition?delete v[b][a.name+"_uiFrom"]:256===c.condition&&delete v[b][a.name+"_uiTo"]}):a.filters.length&&a.filters[0].term?v[b][a.name]=a.filters[0].term:delete v[b][a.name])}a.moment=moment,a.license=m.license,a.forms={general:{}},a.detail={tab:"main"},a.log={daily:{show:"phone",type:"inbound",detail:"general"},history:{show:"phone",type:"inbound",detail:"general"}},a.columns={phone:{general:{header:["APPLICATION_SOURCE","APPLICATION_DESTINATION","APPLICATION_DISPOSITION","APPLICATION_DATE"],indexes:["source","destination","disposition","createdAt"]},queue:{header:["APPLICATION_CALLERID","APPLICATION_QUEUE","APPLICATION_DATE"],indexes:["calleridnum","queue","createdAt"]}},email:{general:{header:["APPLICATION_FROM","APPLICATION_TO","APPLICATION_DISPOSITION","APPLICATION_DATE"],indexes:["from","account","disposition","createdAt"],actions:{name:"action",displayName:"",width:40,buttons:[{"class":"green",name:"mailRoom",onClick:"grid.appScope.openRoom(row.entity.id, 'mailRoom')"}]}}},chat:{general:{header:["APPLICATION_WEBSITE","APPLICATION_VISITOR","APPLICATION_DISPOSITION","APPLICATION_DATE"],indexes:["website","contact","disposition","createdAt"],actions:{name:"action",displayName:"",width:40,buttons:[{"class":"green",name:"chatRoom",onClick:"grid.appScope.openRoom(row.entity.id, 'chatRoom')"}]}}},fax:{general:{header:["APPLICATION_FROM","APPLICATION_TO","APPLICATION_DISPOSITION","APPLICATION_DATE"],indexes:["contact","account","disposition","createdAt"],actions:{name:"action",displayName:"",width:40,buttons:[{"class":"green",name:"faxRoom",onClick:"grid.appScope.openRoom(row.entity.id, 'faxRoom')"}]}}},sms:{general:{header:["APPLICATION_ACCOUNT","APPLICATION_FROM","APPLICATION_DISPOSITION","APPLICATION_DATE"],indexes:["account","contact","disposition","createdAt"],actions:{name:"action",displayName:"",width:40,buttons:[{"class":"green",name:"smsRoom",onClick:"grid.appScope.openRoom(row.entity.id, 'smsRoom')"}]}}}},a.Auth=q,a.getAgent=function(){return q.getCurrentUser().$promise.then(function(b){a.agent=b})["catch"](function(a){b.error(a)})},a.callPhoneBar=function(c,d){var e;switch(d){case"call":e="http://127.0.0.1:"+a.agent.phoneBarRemoteControlPort+"/api/originate/"+c;break;case"transfer":e="http://127.0.0.1:"+a.agent.phoneBarRemoteControlPort+"/api/transfer?number="+c;break;default:e="http://127.0.0.1:"+a.agent.phoneBarRemoteControlPort+"/api/originate/"+c}return r.get(e).success(function(){b.show(i.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){b.error(a)})},a.copy=function(a){var c=k.open({animation:!0,size:"small",templateUrl:"app/contactmanager/contact/list/copy.modal.html",controller:"ContactManagerListCopyModalCtrl"});c.result.then(function(c){return h.save({id:a,controller:"copy"},c).$promise.then(function(a){m.openContactTab({firstName:a.firstName,lastName:a.lastName,id:a.id})})["catch"](function(a){b.error(a)})},function(){p.info("Modal dismissed at: "+new Date)})},a.merge=function(c){var d=k.open({animation:!0,size:"lg",templateUrl:"app/main/mergeContact.choose.modal.html",controller:"ContactManagerMergeContactChoose",resolve:{listId:c.ListId}});d.result.then(function(d){var e=k.open({animation:!0,size:"lg",templateUrl:"app/main/mergeContact.merge.modal.html",controller:"ContactManagerMergeContactMerge",resolve:{contactId:d,mergeContact:c}});e.result.then(function(e){return e.oldContact=c.id,h.save({id:d,controller:"merge"},e).$promise.then(function(b){m.workspaces.splice(a.index,1),_.remove(m.workspaces,{contactID:b.id}),m.openContactTab({firstName:b.firstName,lastName:b.lastName,id:b.id})})["catch"](function(a){b.error(a)})},function(){p.info("Modal dismissed at: "+new Date)})},function(){p.info("Modal dismissed at: "+new Date)})},a.dispose=function(){return k.open({animation:!0,templateUrl:"app/main/cm.disposition.modal.html",controller:"ContactManagerSetDisposition"}).result.then(function(c){return l.update({id:a.workspace.data.uniqueid},c).$promise.then(function(){a.contact.disposed=!0,b.show(i.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){b.error(a)})})},a.companyInfo=function(b){k.open({animation:!0,size:"lg",templateUrl:"app/main/company.info.modal.html",controller:["$scope","$uibModalInstance","company",function(a,b,c){a.company=c,a.close=function(){b.dismiss("cancel")}}],resolve:{company:_.find(a.companies,{id:b})}})},a.updateLog=function(b,c,d,e){c&&(a.log[b].show=c),d&&(a.log[b].detail=d),e&&(a.log[b].type=e),t(b)},a.openRoom=function(a,b,c){var d=_.find(m.workspaces,{id:a,type:b});if(d)d.active=!0;else{var e;switch(b){case"mailRoom":e="icon-envelope";break;case"chatRoom":e="fa fa-users";break;case"faxRoom":e="fa fa-fax";break;case"smsRoom":e="glyphicon glyphicon-comment"}m.workspaces.push({id:a,type:b,"class":e,active:!0,data:c})}};var v={daily:{offset:0,limit:10},history:{offset:0,limit:10}},w=function(b,c){return n.spin("spinner-grid"),h.get(_.merge(_.merge({id:a.workspace.contactID,controller:"log",logType:b,order:"createdAt DESC"},a.log[b]),v[b])).$promise.then(function(d){c&&(a["gridOptions"+b]=c),a["gridOptions"+b].totalItems=d.count,a["gridOptions"+b].data=d.rows,x("gridOptions"+b,d.rows.length)})["catch"](function(a){console.error(a)})["finally"](function(){n.stop("spinner-grid")})},x=function(a,b){var c=b?30*b+120:177;angular.element(document.getElementsByName(a)[0]).css("height",c+"px")};a.getContact=function(){return h.get({id:a.workspace.contactID}).$promise.then(function(b){a.contact=b,a.contact.CompanyId||(a.contact.CompanyId=""),a.getCustomFields(b.ListId),a.updateLog("daily"),a.updateLog("history")})["catch"](function(a){console.error(a),b.error(a)})},a.getTags=function(){return f.get().$promise.then(function(b){a.tags=_.map(b.rows,"name")})["catch"](function(a){console.error(a),b.error(a)})},a.getCompanies=function(){return g.get().$promise.then(function(b){a.companies=b.rows,a.companies.unshift({id:"",name:"-- None --"}),c.syncUpdates("company",a.companies)})["catch"](function(a){console.error(a),b.error(a)})},a.getCustomFields=function(d){return a.customFields=[],e.get({listId:d,controller:"customfields"}).$promise.then(function(b){b.rows.forEach(function(b){try{"select"===b.type&&(b.values=JSON.parse(b.values)),a.customFields.push(b)}catch(c){console.log("Cf not valid:",b.alias)}}),c.socket.on("custom_field:remove",function(b){_.remove(a.customFields,function(a){return b.id==a.id})}),c.socket.on("custom_field:save",function(b){if(b.ListId===d){var c=_.find(a.customFields,{id:b.id});c||("string"==typeof b.values&&(b.values=JSON.parse(b.values)),a.customFields.push(b))}})})["catch"](function(a){console.error(a),b.error(a)})},d(function(){a.getTags(),a.getCompanies(),a.getContact(),a.getAgent()})}}}}]).directive("jscripty",["$compile","xAlert","$http","socket","JscriptyProject",function(a,b,c,d,e){return{restrict:"E",scope:{workspace:"=",index:"=",submit:"&onSubmit"},templateUrl:"app/main/template/template.jscriptyTab.html",compile:function(a,d){return function(a,d,f){a.count=0,a.questions=[];var g,h=a.workspace.data.id;c.get("/api/jscripty/projects/"+h+"/download").success(function(b){b?c.post("/api/jscripty/projects/"+h+"/sessions",{projectId:h,status:"started",queue:a.workspace.data.queue,calleridnum:a.workspace.data.calleridnum,callername:a.workspace.data.callername,membername:a.workspace.data.membername}).success(function(c){g=c.session_id,a.workspace.edited=!0,a.workspace.sessionId=g,a.workspace.projectId=h;var d=mxUtils.parseXml(b),e=new mxCodec(d);a.decObj=e.decode(d.documentElement);var f=_.find(a.decObj.cells,function(a){return a.vertex&&"start"==a.value.nodeName});if("OFF"==f.getAttribute("state")){var j=_.find(f.edges,function(a){return a.source.id==f.id}).target;a.questions[a.count]=a.currentQuestion=i(j)}else a.questions[a.count]=a.currentQuestion=f;a.saveQuestions()}):(console.log("No project published!"),alert("No project published!"),a.submit({index:a.index}))}),a.next=function(b,c){switch(a.currentQuestion.answer&&a.currentQuestion.answer!=c&&(a.questions=_.take(a.questions,a.count+1)),a.currentQuestion.answer=c,b.value.nodeName){case"question":b=i(b)}a.questions[a.count]=a.currentQuestion,a.currentQuestion=b,a.count++,a.questions[a.count]=b,a.saveQuestions()};var i=function(a){var b=[];return a.options=[],_.forEach(a.edges,function(c,d){if(c.source.id==a.id&&c.value){var e=String(c.value).split(",");e.length>1?(_.forEach(e,function(b,d){var e=Object.create(c);e.setValue(b),a.edges.push(e),a.options.push(b)}),b.push(c)):a.options.push(e[0])}}),_.forEach(b,function(b){_.remove(a.edges,function(a){return a.value==b.value&&a.id==b.id})}),a};a.end=function(){a.saveQuestions(),a.workspace.lastQuestionId=a.questions[a.questions.length-1].id,"end"==a.questions[a.questions.length-1].value.nodeName&&(a.workspace.edited=!1,e.update({id:h,controller:"sessions",action:g},{status:"completed",completedAt:Date(),last_question_id:a.questions[a.questions.length-1].id}).$promise.then(function(a){b.show("Project Ended","success")})),a.submit({index:a.index})},a.workspace.end=a.end,a.back=function(){a.count--,a.currentQuestion=a.questions[a.count]},a.setCurrentQuestion=function(b){a.count=b,a.currentQuestion=a.questions[a.count]},a.saveQuestions=function(){for(var c=[],d=[],f=0;f<a.questions.length;f++){if(a.questions[f].children)for(var i=a.questions[f].children,j=0;j<i.length;j++)d[j]={input_id:i[j].id,input_type:i[j].getAttribute("type"),input_label:i[j].getAttribute("label"),input_value:"checkbox"!=i[j].getAttribute("type")||i[j].answer?i[j].answer:!1};c[f]={sessionId:g,projectId:h,question_id:a.questions[f].id,question_type:a.questions[f].value.nodeName,question_label:a.questions[f].getAttribute("label"),question_text:a.questions[f].getAttribute("question")||a.questions[f].getAttribute("text"),question_other_label:a.questions[f].getAttribute("other"),question_other_answer:a.questions[f].otheranswer,question_answer:a.questions[f].answer,question_options:a.questions[f].options?JSON.stringify({options:a.questions[f].options}):null,index:f,ReportJscriptyInputs:d},d=[]}e.save({id:h,controller:"sessions",action:g,action2:"questions"},c).$promise.then(function(a){})["catch"](function(a){b.error(a)})}}}}}]).directive("reportBuilder",["$compile",function(a){return{restrict:"E",scope:{group:"=",fields:"=",forms:"=",firstCall:"="},templateUrl:"app/main/template/template.reportBuilderView.html",compile:function(b,c){var d,e;return d=b.contents().remove(),function(b,c,f){b.operators=[{name:"AND"},{name:"OR"}],b.conditions=[{name:"="},{name:"!="},{name:"<"},{name:"<="},{name:">"},{name:">="},{name:"LIKE"},{name:"NOT LIKE"},{name:"IS NULL"},{name:"IS NOT NULL"},{name:"IS EMPTY"},{name:"IS NOT EMPTY"}],b.inputIsRequired=function(a){if(a.condition)switch(a.condition){case"IS NULL":case"IS NOT NULL":case"IS EMPTY":case"IS NOT EMPTY":a.required=!1;break;default:a.required=!0}},b.addCondition=function(){b.group.rules.push({condition:"=",field:"",value:""})},b.removeCondition=function(a){b.group.rules.splice(a,1)},b.addGroup=function(){b.group.rules.push({group:{operator:"AND",rules:[{condition:"=",field:"",value:""}]}})},b.randomName=function(a,b){var c=[];for(a=a||5,b=b||"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";--a;)c.push(b.charAt(Math.floor(Math.random()*b.length)));return c.join("")},b.removeGroup=function(){b.$parent.group&&b.$parent.group.rules.splice(b.$parent.$index,1)},e||(e=a(d)),c.append(e(b,function(a){return a}))}}}}]).directive("dynamicName",["$compile",function(a){return{restrict:"A",terminal:!0,priority:1e3,link:function(b,c,d){c.attr("name",b.$eval(d.dynamicName)),c.removeAttr("dynamic-name"),a(c)(b)}}}]).directive("onReadFile",["$parse",function(a){return{restrict:"A",scope:!1,link:function(b,c,d){var e=a(d.onReadFile);c.on("change",function(a){var c=new FileReader;c.onload=function(a){b.$apply(function(){e(b,{$fileContent:a.target.result})})},c.readAsText((a.srcElement||a.target).files[0])})}}}]).directive("motionFileDownload",["xAlert","$translate","$timeout","$location","FileSaver","$compile",function(a,b,c,d,e,f){return{restrict:"E",template:'<a uib-tooltip=\'{{tooltiptext}}\' class="{{btnclass || \'btn default btn-xs blue-hoki\'}}" href="" data-ng-click="download()" ><i class="icon-cloud-download"></i>{{btncontent || \'\'}}</a>',scope:{mimetype:"=",filename:"=",resource:"=",params:"=",btnclass:"@",btncontent:"@",tooltiptext:"@"},link:function(b,c,d){var f=c.children()[0];b.$on("download-start",function(){$(f).attr("disabled","disabled")}),b.$on("downloaded",function(a,c){var d=base64ToBlob(c,b.mimetype);e.saveAs(d,b.filename),$(f).attr("disabled",!1)}),b.download=function(){return b.$emit("download-start"),b.resource.get(b.params).$promise.then(function(a){b.$emit("downloaded",a.downloadString)})["catch"](function(b){a.error(b),$(f).attr("disabled",!1)})}}}}]).directive("audioFileDownload",["xAlert","$translate","$uibModal",function(a,b,c){return{restrict:"E",template:'<button type="button" class="btn default btn-xs blue-hoki" data-ng-click="download()"><i class="fa fa-play"></i> {{ \'APPLICATION_PREVIEW\' | translate}}</button>',scope:{resource:"=",params:"="},link:function(b,d,e){var f=d.children()[0];b.$on("download-start",function(a,c){b.tempHtml=$(f).html(),$(f).attr("disabled","disabled").html('<i class="icon-refresh"></i> Loading...')}),b.$on("downloaded",function(a,d){c.open({animation:!0,size:"small",templateUrl:"app/main/audioFileDownload.play.modal.html",controller:["$scope","$uibModalInstance","$sce","audio",function(a,b,c,d){a.audio=c.trustAsResourceUrl("data:audio/wav;base64,"+d.data),a.close=function(){b.dismiss("cancel")}}],resolve:{audio:function(){return{data:d}}}});$(f).html(b.tempHtml).attr("disabled",!1)}),b.$on("error",function(a,c){$(f).html(b.tempHtml).attr("disabled",!1)}),b.download=function(){return b.$emit("download-start"),b.resource.get(b.params).$promise.then(function(a){b.$emit("downloaded",a.downloadString); +})["catch"](function(c){a.error(c),b.$emit("error")})}}}}]).directive("uiRequired",function(){return{require:"ngModel",link:function(a,b,c,d){d.$validators.required=function(a,b){return!(b&&0===b.length&&"true"===c.uiRequired)},c.$observe("uiRequired",function(){d.$setValidity("required",!("true"===c.uiRequired&&d.$viewValue&&0===d.$viewValue.length))})}}}).directive("schrollBottom",function(){return{scope:{schrollBottom:"="},link:function(a,b){a.$watchCollection("schrollBottom",function(a){a&&$(b).scrollTop($(b)[0].scrollHeight)})}}}).directive("customGridDateFilterHeader",function(){return{templateUrl:"app/main/customDateFilterHeader.html",controller:"gridDatePickerFilterCtrl"}}).directive("customGridTagsFilterHeader",function(){return{templateUrl:"app/main/customTagsFilterHeader.html",controller:"gridTagsFilterCtrl"}}).directive("infiniteScroll",["$window",function(a){return{link:function(a,b,c){var d=parseInt(c.threshold)||0,e=b[0];b.bind("scroll",function(){a.$eval(c.canLoad)&&e.scrollTop+e.offsetHeight>=e.scrollHeight-d&&a.$apply(c.infiniteScroll)})}}}]).directive("tigerDialDisposal",["$compile","xAlert","socket","$translate","$timeout","$rootScope","MotionDialerSpooler","Agent",function(a,b,c,d,e,f,g,h){return{restrict:"E",scope:{workspace:"=",index:"="},templateUrl:"app/main/template/template.tigerDialDisposal.html",compile:function(a,c){return function(a,c,i){a.moment=moment,a.entitySpooler={},a.forms={td:{}},a.init=function(){return h.get().$promise.then(function(b){a.agents=[],b&&b.rows.forEach(function(b){a.agents.push("SIP/"+b.name)})})["catch"](function(a){b.error(a)})},a.save=function(){var c;switch(a.entitySpooler.retrieve){case"CLOSED":c=g.close({id:parseInt(a.workspace.spooler.ticketId)});break;case"OPEN":c=g.open({id:parseInt(a.workspace.spooler.ticketId)});break;case"BLACK_LIST":c=g.blacklist({id:parseInt(a.workspace.spooler.ticketId)});break;case"PLANNED":c=g.planning({id:parseInt(a.workspace.spooler.ticketId),date:moment(a.entitySpooler.planningtime).format("YYYY-MM-DD HH:mm")});break;case"PLANNED_PEER":c=g.planningpeer({id:parseInt(a.workspace.spooler.ticketId),date:moment(a.entitySpooler.planningtime).format("YYYY-MM-DD HH:mm"),peer:a.entitySpooler.planningpeer})}c?c.$promise.then(function(c){c.status>0?b.show(d.instant("MESSAGE_WELL_DONE"),"success"):c.response?c.response.RMI.errors.forEach(function(c){c?(b.show(c.field+": "+c.error,"danger"),f.workspaces.splice(a.index,1)):b.show("Please, check your connection!","danger")}):b.show("Please, check your connection!","danger")})["catch"](function(a){b.error(a)}):b.show("RETRIEVE NOT FOUND","danger")},e(function(){a.init()})}}}}]).directive("cssTimer",["$window","$interval",function(a,b){return{restrict:"EA",template:"<span>{{ millis | formatMilliseconds | date:format }}</span>",scope:{interval:"@",format:"@",startTime:"="},link:function(a,c,d){function e(){a.millis=Math.abs((new Date).getTime()-new Date(a.startTime).getTime())+1e3,a.activeInterval=b(function(){a.millis+=a.interval},a.interval)}a.interval||(a.interval=1e3),a.format||(a.format="HH:mm:ss"),e(),a.$watch("startTime",function(c,d){b.cancel(a.activeInterval),e()},!0)}}}]),angular.module("xCallyShuttleApp").filter("propsFilter",function(){return function(a,b){var c=[];return angular.isArray(a)?a.forEach(function(a){for(var d=!1,e=Object.keys(b),f=0;f<e.length;f++){var g=e[f],h=b[g].toLowerCase();if(-1!==a[g].toString().toLowerCase().indexOf(h)){d=!0;break}}d&&c.push(a)}):c=a,c}}).filter("capitalize",function(){return function(a){return a?a.replace(/([^\W_]+[^\s-]*) */g,function(a){return a.charAt(0).toUpperCase()+a.substr(1).toLowerCase()}):""}}).filter("salesforce",function(){var a=["CallDisposition","CallDurationInSeconds","CallObject","CallType","IsArchived","Priority","Status","Type"];return function(b){return _.remove(b,function(b){return b.custom===!1&&a.indexOf(b.name)<0}),b}}).filter("sugarcrm",function(){var a=["account_id","account_name","account_name1","assigned_user_name","assigned_user_id","case_number","created_by","created_by_name","date_entered","date_modified","deleted","description","id","modified_by_name","modified_user_id","name"];return function(b){return _.remove(b,function(b){return a.indexOf(b.name)>=0}),b}}).filter("freshdesk",function(){var a=["requester","subject","agent","description"];return function(b){return _.remove(b,function(b){return a.indexOf(b.ticket_field.name)>=0}),b}}).filter("zendesk",function(){var a=["subject","assignee","description"];return function(b){return _.remove(b,function(b){return a.indexOf(b.type)>=0}),b}}).filter("slice",function(){return function(a,b,c){return a?a.slice(b,c):void 0}}).filter("trusted",["$sce",function(a){var b=document.createElement("div");return function(c){return b.innerHTML=c,a.trustAsHtml(b.textContent)}}]).filter("formatMilliseconds",[function(){return function(a){return new Date(1970,0,1).setMilliseconds(a)}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main",{"abstract":!0,templateUrl:"app/main/main.html",controller:"MainCtrl",resolve:{authorization:["$q","Auth","$state","$timeout","$location","localStorageService",function(a,b,c,d,e,f){return b.getToken()?a.when():(f.remove("loggedIn"),d(function(){e.path("/login")}),a.reject())}],deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css","assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/plugins/mxgraph/js/mxClient.js","assets/plugins/ckeditor/ckeditor.js","assets/css/login.css"]}])}]}})}]),angular.module("xCallyShuttleApp").factory("xAlert",["$translate","Notification","$state",function(a,b,c){return{show:function(c,d){switch(d){case"success":b.success({message:c,title:'<i class="glyphicon glyphicon-ok"></i> <strong>'+a.instant("MESSAGE_SUCCESS")+"!</strong>",delay:5e3});break;case"info":b.info({message:c,title:'<i class="glyphicon glyphicon-info-sign"></i> <strong>'+a.instant("MESSAGE_INFO")+"!</strong>",delay:5e3});break;case"danger":b.error({message:c,title:'<i class="glyphicon glyphicon-exclamation-sign"></i> <strong>'+a.instant("MESSAGE_ERROR")+"!</strong>",delay:1e4});break;case"warning":b.warning({message:c,title:'<i class="glyphicon glyphicon-warning-sign"></i> <strong>'+a.instant("MESSAGE_WARNING")+"!</strong>",delay:1e4});break;default:b.info(c)}},error:function(d){var e,f;d?d.status&&401===d.status?(e="Unauthorized!",f=!0):d.data?(e=d.data.translatedMessage||d.data.message||d.data||"Generic Error",console.log(d)):e=d.translatedMessage||d.message||"Generic Error":e="Generic Error",b.error({message:a.instant(e),title:'<i class="glyphicon glyphicon-exclamation-sign"></i> <strong>'+a.instant("MESSAGE_ERROR")+"!</strong>",delay:1e4}),f&&c.go("login")}}}]).factory("stResource",["$q","$filter","$timeout","$rootScope","$http","$translate","xAlert",function(a,b,c,d,e,f,g){return{getPage:function(b){var c={page:Math.ceil(b.pagination.start/b.pagination.number),per_page:b.pagination.number};b.sort.predicate&&(c.sort_by=b.sort.predicate,c.sort_order=b.sort.reverse?"DESC":"ASC"),_.forIn(b.search.predicateObject,function(a,b){c[b]=a}),b.search.params&&(c.clientQuery={},_.forIn(b.search.params,function(a,b){c.clientQuery[b]=a})),d.$broadcast("$spinnerStart"),e.get(b.url,{params:c}).success(function(a){f.resolve(a),d.$broadcast("$spinnerStop")}).error(function(a){g.error(a),d.$broadcast("$spinnerStop")});var f=a.defer();return f.promise}}}]).factory("xNotification",["$translate","Notification","$rootScope",function(a,b,c){return{show:function(d,e,f,g,h,i){var j=c.$new(),k={message:e,title:d,templateUrl:"app/main/template/template.notification.html",delay:g,scope:j};switch(j.acceptBtn=a.instant("APPLICATION_ACCEPT"),j.rejectBtn=a.instant("APPLICATION_REJECT"),j.nAccept=h,j.nReject=i,f){case"chat":j["class"]="alert-info",j.icon="icon-bubble";break;case"mail":j["class"]="alert-success",j.icon="icon-envelope";break;case"fax":j["class"]="alert-warning",j.icon="fa fa-fax";break;case"sms":j["class"]="alert-danger",j.icon="glyphicon glyphicon-comment";break;case"openchannel":j["class"]="alert-danger",j.icon="icon-globe";break;default:j["class"]="alert-info"}return new b(k)}}}]),angular.module("xCallyShuttleApp").controller("ContactManagerMergeContactChoose",["$scope","$translate","Contact","gridOptions","List","uiGridConstants","xAlert","$stateParams","Company","$uibModalInstance","listId",function(a,b,c,d,e,f,g,h,i,j,k){a.initView=function(){var b;return e.get().$promise.then(function(b){return a.lists=[],a.customFields=[],b.rows.forEach(function(b,c){_.forEach(b.CustomFields,function(b){a.customFields.push({name:b.name,alias:b.alias})}),a.lists.push({value:b.id,label:b.name})}),i.get().$promise}).then(function(b){a.companies=[],b.rows.forEach(function(b,c){a.companies.push({value:b.id,label:b.name})})}).then(function(){var e=[{"class":"blue-hoki",name:"select",onClick:"grid.appScope.choose(row.entity.id)"}];b={exporterCsvFilename:"Contacts.csv",columnDefs:[{name:"firstName"},{name:"lastName"},{name:"phone"},{name:"email"},{name:"ListId",displayName:"APPLICATION_LIST",field:"List.name",enableFiltering:!1},{name:"CompanyId",displayName:"APPLICATION_COMPANY",field:"Company.name",filter:{type:f.filter.SELECT,term:h.companyId||null,selectOptions:a.companies}}]},_.forEach(a.customFields,function(a){b.columnDefs.push({name:a.name,displayName:a.alias,visible:!1})}),b.columnDefs.push({name:"action",width:30,buttons:e}),a.gridOptions=d.gridOptions(c,b,a,{ListId:k})})["catch"](function(a){g.error(a)})},a.choose=function(a){j.close(a)},a.cancel=function(){j.dismiss()}}]),angular.module("xCallyShuttleApp").controller("ContactManagerMergeContactMerge",["$scope","$translate","Contact","xAlert","Company","$uibModalInstance","contactId","List","mergeContact","Tag",function(a,b,c,d,e,f,g,h,i,j){a.initView=function(){return e.get().$promise.then(function(b){return a.companies=b.rows,a.companies.unshift({id:"",name:"-- None --"}),j.get().$promise}).then(function(b){return a.tags=_.map(b.rows,"name"),c.get({id:g}).$promise}).then(function(b){a.fields={},a.contact={};var c=_.merge(_.keys(b),_.keys(i));return _.forEach(c,function(c){switch(c){case"tags":a.contact.tags=_.union(b.tags||[],i.tags||[]);break;case"$promise":case"$resolved":break;default:a.fields[c]=[],b[c]&&a.fields[c].push(b[c]),i[c]&&a.fields[c].push(i[c]),a.contact[c]=a.fields[c][0]||null}}),h.get({listId:b.ListId,controller:"customfields"}).$promise}).then(function(b){a.customFields=b.rows,a.customFields.forEach(function(a){a.values=JSON.parse(a.values)})})["catch"](function(a){d.error(a)})},a.merge=function(){a.contact.CompanyId||(a.contact.CompanyId=null),f.close(a.contact)},a.cancel=function(){f.dismiss()}}]),angular.module("xCallyShuttleApp").factory("Widget",["$resource",function(a){return a("/api/widgets/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("MarketCtrl",["$scope","$http","$translate","socket","xAlert","Modal","$timeout","Integration",function(a,b,c,d,e,f,g,h){function i(a,b){return Math.floor(Math.random()*(b-a+1))+a}a.initView=function(){return h.get().$promise.then(function(b){a.integrations=b.rows,a.groupedIntegration=_.chunk(a.integrations,4),d.syncUpdates("integration",a.integrations,function(){a.groupedIntegration=_.chunk(a.integrations,4)})})["catch"](function(a){e.error(a,"danger")})},a.isProgressing=!1,a.$on("$destroy",function(){d.unsyncUpdates("integration")}),a.installIntegration=function(b){return navigator.onLine?(a.status="Downloading",a.percentage=i(1,50),a.isProgressing=!0,b.downloading=!0,h.update({id:b.id},{active:!0}).$promise.then(function(){g(function(){a.percentage=i(51,99),a.status="Installing"},2500),g(function(){a.percentage=100,a.isProgressing=!1,a.status="Completed!",b.downloading=!1,e.show(c.instant("MESSAGE_WELL_DONE")+".","success")},5e3)})["catch"](function(){b.downloading=!1,a.percentage=0,a.isProgressing=!1,e.show(c.instant("MESSAGE_SOMETHING_WENT_WRONG")+".","danger")})):void e.show(c.instant("MESSAGE_NO_INTERNET_CONNECTION")+".","danger")},a.uninstallIntegration=function(b){return navigator.onLine?(a.status="Uninstalling",a.percentage=i(1,99),a.isProgressing=!0,b.downloading=!0,h.update({id:b.id},{active:!1}).$promise.then(function(){g(function(){a.percentage=100,a.isProgressing=!1,a.status="Completed!",b.downloading=!1,e.show(c.instant("MESSAGE_WELL_DONE")+".","success")},5e3)})["catch"](function(){b.downloading=!1,a.percentage=0,a.isProgressing=!1,e.show(c.instant("MESSAGE_SOMETHING_WENT_WRONG")+".","danger")})):void e.show(c.instant("MESSAGE_NO_INTERNET_CONNECTION")+".","danger")}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.market",{url:"/market",templateUrl:"app/market/market.html",controller:"MarketCtrl",data:{permissions:{only:["admin"],redirectTo:"main.dashboard.voice"}}})}]),angular.module("xCallyShuttleApp").controller("MotionbarCtrl",["$scope","$stateParams","$cookieStore","$window","$location","Auth",function(a,b,c,d,e,f){console.log(b),b.token&&b.userId&&b.role&&b.redirectTo?(f.loginWithToken(b.token,b.userId,b.role),d.location.href=decodeURIComponent(b.redirectTo)):e.path("/login")}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("motionbar",{url:"/motionbar?redirectTo&token&userId&role",template:"<div ui-view></div>",controller:"MotionbarCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.motiondialer.blacklist",{url:"/blacklist",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("MotionDialerBlackListListCtrl",["$scope","$uibModal","$translate","xAlert","Modal","MotionDialerBlackList","uiGridConstants",function(a,b,c,d,e,f,g){a.initView=function(){a.gridOptions={paginationPageSizes:[10,25,50,75],paginationPageSize:10,enableFiltering:!0,enableSorting:!0,enableGridMenu:!0,flatEntityAccess:!0,showGridFooter:!0,fastWatch:!0,columnDefs:[{name:"id",width:60},{name:"phone"},{name:"description",enableSorting:!1},{name:"updatedtime",sort:{direction:g.DESC},enableFiltering:!1},{name:"action",cellTemplate:'<div><a class="btn btn-xs red-sunglo" data-ng-click="grid.appScope.deleteItem(row.entity.phone, row.entity.id)"><i class="icon-trash"></i></a></div>',enableSorting:!1,cellClass:"ui-grid-vcenter",enableFiltering:!1}]},f.list({page:1,size:6e5}).$promise.then(function(b){b.status>0?a.gridOptions.data=b.response.RMI.rows:d.show("Please, check your connection!","danger")})["catch"](function(a){d.error(a)})},a.createItem=function(){var c=b.open({animation:!0,templateUrl:"app/motiondialer/blacklist/list/list.create.modal.html",controller:"MotionDialerBlackListListCreateCtrl"});c.result.then(function(b){a.gridOptions.data.push(b.response.RMI)})},a.deleteItem=e.confirm["delete"](function(b){return f["delete"]({id:b}).$promise.then(function(e){e.status>0?(_.remove(a.gridOptions.data,{id:b}),d.show(c.instant("MESSAGE_WELL_DONE"),"success")):d.show(e.message||"Please, check your connection!","danger")})["catch"](function(a){d.error(a)})})}]),angular.module("xCallyShuttleApp").controller("MotionDialerBlackListListCreateCtrl",["$scope","$translate","$uibModalInstance","MotionDialerBlackList","xAlert",function(a,b,c,d,e){a.form={},a.item={},a.save=function(){return d.insert(a.item).$promise.then(function(a){a.status>0?(e.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)):e.show(a.message||"Please, check your connection!","danger")})["catch"](function(a){e.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.motiondialer.blacklist.list",{url:"/list",templateUrl:"app/motiondialer/blacklist/list/list.html",controller:"MotionDialerBlackListListCtrl",authenticate:!0})}]),angular.module("xCallyShuttleApp").factory("MotionDialerBlackList",["$resource",function(a){return a("/api/rest/blacklist/:controller",null,{list:{method:"POST",params:{controller:"list"}},insert:{method:"POST",params:{controller:"insert"}},"delete":{method:"POST",params:{controller:"delete"}},find:{method:"POST",params:{controller:"find"}},update:{method:"POST",params:{controller:"update"}}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.motiondialer.info",{url:"/info",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").factory("MotionDialerSystem",["$resource",function(a){return a("/api/rest/system/:controller",null,{properties:{method:"POST",params:{controller:"properties"}}})}]),angular.module("xCallyShuttleApp").controller("MotionDialerInfoViewCtrl",["$scope","xAlert","MotionDialerSystem",function(a,b,c){a.getProperties=function(){return c.properties().$promise.then(function(c){console.log(c),c.status>0?a.properties=c.response.RMI:b.show(c.message||"Please, check your connection!","danger")})["catch"](function(a){b.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.motiondialer.info.view",{url:"/view",templateUrl:"app/motiondialer/info/view/view.html",controller:"MotionDialerInfoViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.motiondialer.info.view.about",{url:"/about",templateUrl:"app/motiondialer/info/view/view.about.html"}).state("main.motiondialer.info.view.details",{url:"/details",templateUrl:"app/motiondialer/info/view/view.details.html"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.motiondialer.lists",{url:"/lists",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("MotionDialerListListCtrl",["$scope","$uibModal","$translate","xAlert","Modal","MotionDialerList","uiGridConstants","usSpinnerService",function(a,b,c,d,e,f,g,h){a.initView=function(){return a.gridOptions={paginationPageSizes:[10,25,50,75],paginationPageSize:10,enableFiltering:!0,enableSorting:!0,enableGridMenu:!0,flatEntityAccess:!0,showGridFooter:!0,fastWatch:!0,columnDefs:[{name:"id",width:60},{name:"name"},{name:"description",enableSorting:!1},{name:"updatedtime",sort:{direction:g.DESC},enableFiltering:!1},{name:"action",cellTemplate:'<div><a class="btn btn-xs blue-hoki" href="/motiondialer/lists/view/{{row.entity.id}}/settings"><i class="icon-settings"></i></a> <a class="btn btn-xs red-sunglo" data-ng-click="grid.appScope.deleteItem(row.entity.name, row.entity.id)"><i class="icon-trash"></i></a></div>',enableSorting:!1,cellClass:"ui-grid-vcenter",enableFiltering:!1}]},f.list({page:1,size:6e5}).$promise.then(function(b){b.status>0?a.gridOptions.data=b.response.RMI.rows:d.show("Please, check your connection!","danger")})["catch"](function(a){d.error(a)})["finally"](function(){h.stop("spinner-grid")})},a.createItem=function(){var c=b.open({animation:!0,templateUrl:"app/motiondialer/list/list/list.create.modal.html",controller:"MotionDialerListListCreateCtrl"});c.result.then(function(b){a.gridOptions.data.push(b.response.RMI)})},a.deleteItem=e.confirm["delete"](function(b){return f["delete"]({id:b}).$promise.then(function(e){e.status>0?(_.remove(a.gridOptions.data,{id:b}),d.show(c.instant("MESSAGE_WELL_DONE"),"success")):d.show(e.message||"Please, check your connection!","danger")})["catch"](function(a){d.error(a)})})}]),angular.module("xCallyShuttleApp").controller("MotionDialerListListCreateCtrl",["$scope","$translate","$uibModalInstance","MotionDialerList","xAlert",function(a,b,c,d,e){a.form={},a.item={},a.save=function(){return d.insert(a.item).$promise.then(function(a){a.status>0?(e.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)):e.show(a.message||"Please, check your connection!","danger")})["catch"](function(a){e.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.motiondialer.lists.list",{url:"/list",templateUrl:"app/motiondialer/list/list/list.html",controller:"MotionDialerListListCtrl",authenticate:!0})}]),angular.module("xCallyShuttleApp").factory("MotionDialerContact",["$resource",function(a){return a("/api/rest/contact/:controller",null,{list:{method:"POST",params:{controller:"list"}},insert:{method:"POST",params:{controller:"insert"}},"delete":{method:"POST",params:{controller:"delete"}},find:{method:"POST",params:{controller:"find"}},update:{method:"POST",params:{controller:"update"}}})}]),angular.module("xCallyShuttleApp").factory("MotionDialerList",["$resource",function(a){return a("/api/rest/list/:controller",null,{list:{method:"POST",params:{controller:"list"}},insert:{method:"POST",params:{controller:"insert"}},"delete":{method:"POST",params:{controller:"delete"}},find:{method:"POST",params:{controller:"find"}},update:{method:"POST",params:{controller:"update"}}})}]),angular.module("xCallyShuttleApp").controller("MotionDialerViewContactCreateCtrl",["$scope","$translate","$uibModalInstance","$stateParams","MotionDialerContact","xAlert","MotionDialerTimezone",function(a,b,c,d,e,f,g){a.form={},a.item={},a.timezones=g.list(),a.save=function(){return console.log(a.item),e.insert({id_list:parseInt(d.id),name:a.item.name,phones:a.item.phones.trim().split(","),description:a.item.description||""}).$promise.then(function(a){console.log(a),a.status>0?(f.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)):f.show(a.message||"Please, check your connection!","danger")})["catch"](function(a){f.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").controller("MotionDialerListContactImportModalCtrl",["$scope","$uibModalInstance","$stateParams","indexes","csv","xAlert","MotionDialerContact","MotionDialerTimezone",function(a,b,c,d,e,f,g,h){function i(b){if(b>=a.csvLength||a.stopped)return void(a.importing=!1);var d={id_list:parseInt(c.id),name:"",phones:[],variables:[],description:"",account:"",timezone:""},f={};return _.forOwn(a.item,function(a,c){switch(c){case"phones":_.forEach(a,function(a){e[b][a]&&d.phones.push(e[b][a])});break;case"variables":_.forEach(a,function(a){e[b][a]&&(f={},f[a]=e[b][a],d.variables.push(f))});break;default:d[c]=e[b][a]}}),d.phones.length?(d.timezone||delete d.timezone,g.insert(d).$promise.then(function(b){b.status>0?(a["import"].success+=j,a["import"].succeeded++,k.push(b.response.RMI)):(console.log(b),a["import"].fail+=j,a["import"].failed++)})["catch"](function(b){console.log(b),a["import"].fail+=j,a["import"].failed++})["finally"](function(){i(b+1)})):(a.noPhone.push(b+2),a["import"].fail+=j,a["import"].failed++,i(b+1),void 0)}a.form={},a.item={},a.timezones=h.list(),a.uiTimeZones=[],_.forEach(a.timezones,function(b){_.forEach(b.zones,function(c){c.group=b.group,a.uiTimeZones.push(c)})}),a.indexes=d,a.importing=!1,a.submitted=!1,a.stopped=!1,a["import"]={success:0,fail:0,succeeded:0,failed:0},a.csvLength=e.length;var j=100/a.csvLength,k=[];a.start=function(){a.noPhone=[],a.importing=!0,a.submitted=!0,i(0)},a.close=function(){b.close(k)},a.stop=function(){a.stopped=!0}}]),angular.module("xCallyShuttleApp").controller("MotionDialerListViewCtrl",["$scope","$translate","$stateParams","$uibModal","xAlert","uiGridConstants","usSpinnerService","MotionDialerList","MotionDialerContact","Modal","FileUploader","Papa",function(a,b,c,d,e,f,g,h,i,j,k,l){a.getList=function(){return h.find({id:parseInt(c.id)}).$promise.then(function(b){b.status>0?a.list=b.response.RMI:e.show(b.message||"Please, check your connection!","danger")})["catch"](function(a){e.error(a)})},a.updateList=function(){return h.update({id:a.list.id,name:a.list.name,description:a.list.description}).$promise.then(function(a){a.status>0?e.show(b.instant("MESSAGE_WELL_DONE"),"success"):e.show(a.message||"Please, check your connection!","danger")})["catch"](function(a){e.error(a)})},a.getContacts=function(){return a.gridOptions={paginationPageSizes:[10,25,50,75],paginationPageSize:10,enableFiltering:!0,enableSorting:!0,enableGridMenu:!0,flatEntityAccess:!0,showGridFooter:!0,fastWatch:!0,columnDefs:[{name:"name"},{name:"phones",cellTemplate:"<div>{{row.entity.phones.join(',')}}</div>",cellClass:"ui-grid-vcenter"},{name:"description",enableSorting:!1},{name:"updatedtime",sort:{direction:f.DESC},enableFiltering:!1},{name:"action",cellTemplate:'<div><a class="btn btn-xs red-sunglo" data-ng-click="grid.appScope.deleteContact(row.entity.name, row.entity.id)"><i class="icon-trash"></i></a></div>',enableSorting:!1,cellClass:"ui-grid-vcenter",enableFiltering:!1}]},i.list({id_list:parseInt(c.id),page:1,size:6e5}).$promise.then(function(b){b.status>0?a.gridOptions.data=b.response.RMI.rows:e.show(b.message||"Please, check your connection!","danger")})["catch"](function(a){e.error(a)})["finally"](function(){g.stop("spinner-grid")})},a.deleteContact=j.confirm["delete"](function(c){return i["delete"]({id:c}).$promise.then(function(d){d.status>0?(_.remove(a.gridOptions.data,{id:c}),e.show(b.instant("MESSAGE_WELL_DONE"),"success")):e.show(d.message||"Please, check your connection!","danger")})["catch"](function(a){e.error(a)})}),a.createContact=function(){var b=d.open({animation:!0,templateUrl:"app/motiondialer/list/view/view.contact.create.modal.html",controller:"MotionDialerViewContactCreateCtrl"});b.result.then(function(b){a.gridOptions.data.push(b.response.RMI)})};var m=a.uploader=new k({queueLimit:1,clearInputAfterAddedToQueue:!0});m.onAfterAddingFile=function(b){l.parse(b._file,{header:!0,complete:function(b){a.uploader.clearQueue(),a["import"](b.data)},error:function(a){e.error(a)}})},a["import"]=function(b){var c=d.open({animation:!0,backdrop:"static",keyboard:!1,templateUrl:"app/motiondialer/list/view/view.contact.import.modal.html",controller:"MotionDialerListContactImportModalCtrl",resolve:{indexes:function(){return _.keys(b[0])},csv:function(){return b}}});c.result.then(function(b){console.log(b),a.gridOptions.data=a.gridOptions.data.concat(b)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.motiondialer.lists.view",{url:"/view/:id",templateUrl:"app/motiondialer/list/view/view.html",controller:"MotionDialerListViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.motiondialer.lists.view.settings",{url:"/settings",templateUrl:"app/motiondialer/list/view/view.settings.html"}).state("main.motiondialer.lists.view.contacts",{url:"/contacts",templateUrl:"app/motiondialer/list/view/view.contacts.html"})}]),angular.module("xCallyShuttleApp").factory("MotionDialerTimezone",function(){return{list:function(){return[{group:"US (Common)",zones:[{value:"America/Puerto_Rico",name:"Puerto Rico (Atlantic)"},{value:"America/New_York",name:"New York (Eastern)"},{value:"America/Chicago",name:"Chicago (Central)"},{value:"America/Denver",name:"Denver (Mountain)"},{value:"America/Phoenix",name:"Phoenix (MST)"},{value:"America/Los_Angeles",name:"Los Angeles (Pacific)"},{value:"America/Anchorage",name:"Anchorage (Alaska)"},{value:"Pacific/Honolulu",name:"Honolulu (Hawaii)"}]},{group:"America",zones:[{value:"America/Adak",name:"Adak"},{value:"America/Anchorage",name:"Anchorage"},{value:"America/Anguilla",name:"Anguilla"},{value:"America/Antigua",name:"Antigua"},{value:"America/Araguaina",name:"Araguaina"},{value:"America/Argentina/Buenos_Aires",name:"Argentina - Buenos Aires"},{value:"America/Argentina/Catamarca",name:"Argentina - Catamarca"},{value:"America/Argentina/ComodRivadavia",name:"Argentina - ComodRivadavia"},{value:"America/Argentina/Cordoba",name:"Argentina - Cordoba"},{value:"America/Argentina/Jujuy",name:"Argentina - Jujuy"},{value:"America/Argentina/La_Rioja",name:"Argentina - La Rioja"},{value:"America/Argentina/Mendoza",name:"Argentina - Mendoza"},{value:"America/Argentina/Rio_Gallegos",name:"Argentina - Rio Gallegos"},{value:"America/Argentina/Salta",name:"Argentina - Salta"},{value:"America/Argentina/San_Juan",name:"Argentina - San Juan"},{value:"America/Argentina/San_Luis",name:"Argentina - San Luis"},{value:"America/Argentina/Tucuman",name:"Argentina - Tucuman"},{value:"America/Argentina/Ushuaia",name:"Argentina - Ushuaia"},{value:"America/Aruba",name:"Aruba"},{value:"America/Asuncion",name:"Asuncion"},{value:"America/Atikokan",name:"Atikokan"},{value:"America/Atka",name:"Atka"},{value:"America/Bahia",name:"Bahia"},{value:"America/Barbados",name:"Barbados"},{value:"America/Belem",name:"Belem"},{value:"America/Belize",name:"Belize"},{value:"America/Blanc-Sablon",name:"Blanc-Sablon"},{value:"America/Boa_Vista",name:"Boa Vista"},{value:"America/Bogota",name:"Bogota"},{value:"America/Boise",name:"Boise"},{value:"America/Buenos_Aires",name:"Buenos Aires"},{value:"America/Cambridge_Bay",name:"Cambridge Bay"},{value:"America/Campo_Grande",name:"Campo Grande"},{value:"America/Cancun",name:"Cancun"},{value:"America/Caracas",name:"Caracas"},{value:"America/Catamarca",name:"Catamarca"},{value:"America/Cayenne",name:"Cayenne"},{value:"America/Cayman",name:"Cayman"},{value:"America/Chicago",name:"Chicago"},{value:"America/Chihuahua",name:"Chihuahua"},{value:"America/Coral_Harbour",name:"Coral Harbour"},{value:"America/Cordoba",name:"Cordoba"},{value:"America/Costa_Rica",name:"Costa Rica"},{value:"America/Cuiaba",name:"Cuiaba"},{value:"America/Curacao",name:"Curacao"},{value:"America/Danmarkshavn",name:"Danmarkshavn"},{value:"America/Dawson",name:"Dawson"},{value:"America/Dawson_Creek",name:"Dawson Creek"},{value:"America/Denver",name:"Denver"},{value:"America/Detroit",name:"Detroit"},{value:"America/Dominica",name:"Dominica"},{value:"America/Edmonton",name:"Edmonton"},{value:"America/Eirunepe",name:"Eirunepe"},{value:"America/El_Salvador",name:"El Salvador"},{value:"America/Ensenada",name:"Ensenada"},{value:"America/Fortaleza",name:"Fortaleza"},{value:"America/Fort_Wayne",name:"Fort Wayne"},{value:"America/Glace_Bay",name:"Glace Bay"},{value:"America/Godthab",name:"Godthab"},{value:"America/Goose_Bay",name:"Goose Bay"},{value:"America/Grand_Turk",name:"Grand Turk"},{value:"America/Grenada",name:"Grenada"},{value:"America/Guadeloupe",name:"Guadeloupe"},{value:"America/Guatemala",name:"Guatemala"},{value:"America/Guayaquil",name:"Guayaquil"},{value:"America/Guyana",name:"Guyana"},{value:"America/Halifax",name:"Halifax"},{value:"America/Havana",name:"Havana"},{value:"America/Hermosillo",name:"Hermosillo"},{value:"America/Indiana/Indianapolis",name:"Indiana - Indianapolis"},{value:"America/Indiana/Knox",name:"Indiana - Knox"},{value:"America/Indiana/Marengo",name:"Indiana - Marengo"},{value:"America/Indiana/Petersburg",name:"Indiana - Petersburg"},{value:"America/Indiana/Tell_City",name:"Indiana - Tell City"},{value:"America/Indiana/Vevay",name:"Indiana - Vevay"},{value:"America/Indiana/Vincennes",name:"Indiana - Vincennes"},{value:"America/Indiana/Winamac",name:"Indiana - Winamac"},{value:"America/Indianapolis",name:"Indianapolis"},{value:"America/Inuvik",name:"Inuvik"},{value:"America/Iqaluit",name:"Iqaluit"},{value:"America/Jamaica",name:"Jamaica"},{value:"America/Jujuy",name:"Jujuy"},{value:"America/Juneau",name:"Juneau"},{value:"America/Kentucky/Louisville",name:"Kentucky - Louisville"},{value:"America/Kentucky/Monticello",name:"Kentucky - Monticello"},{value:"America/Knox_IN",name:"Knox IN"},{value:"America/La_Paz",name:"La Paz"},{value:"America/Lima",name:"Lima"},{value:"America/Los_Angeles",name:"Los Angeles"},{value:"America/Louisville",name:"Louisville"},{value:"America/Maceio",name:"Maceio"},{value:"America/Managua",name:"Managua"},{value:"America/Manaus",name:"Manaus"},{value:"America/Marigot",name:"Marigot"},{value:"America/Martinique",name:"Martinique"},{value:"America/Matamoros",name:"Matamoros"},{value:"America/Mazatlan",name:"Mazatlan"},{value:"America/Mendoza",name:"Mendoza"},{value:"America/Menominee",name:"Menominee"},{value:"America/Merida",name:"Merida"},{value:"America/Mexico_City", +name:"Mexico City"},{value:"America/Miquelon",name:"Miquelon"},{value:"America/Moncton",name:"Moncton"},{value:"America/Monterrey",name:"Monterrey"},{value:"America/Montevideo",name:"Montevideo"},{value:"America/Montreal",name:"Montreal"},{value:"America/Montserrat",name:"Montserrat"},{value:"America/Nassau",name:"Nassau"},{value:"America/New_York",name:"New York"},{value:"America/Nipigon",name:"Nipigon"},{value:"America/Nome",name:"Nome"},{value:"America/Noronha",name:"Noronha"},{value:"America/North_Dakota/Center",name:"North Dakota - Center"},{value:"America/North_Dakota/New_Salem",name:"North Dakota - New Salem"},{value:"America/Ojinaga",name:"Ojinaga"},{value:"America/Panama",name:"Panama"},{value:"America/Pangnirtung",name:"Pangnirtung"},{value:"America/Paramaribo",name:"Paramaribo"},{value:"America/Phoenix",name:"Phoenix"},{value:"America/Port-au-Prince",name:"Port-au-Prince"},{value:"America/Porto_Acre",name:"Porto Acre"},{value:"America/Port_of_Spain",name:"Port of Spain"},{value:"America/Porto_Velho",name:"Porto Velho"},{value:"America/Puerto_Rico",name:"Puerto Rico"},{value:"America/Rainy_River",name:"Rainy River"},{value:"America/Rankin_Inlet",name:"Rankin Inlet"},{value:"America/Recife",name:"Recife"},{value:"America/Regina",name:"Regina"},{value:"America/Resolute",name:"Resolute"},{value:"America/Rio_Branco",name:"Rio Branco"},{value:"America/Rosario",name:"Rosario"},{value:"America/Santa_Isabel",name:"Santa Isabel"},{value:"America/Santarem",name:"Santarem"},{value:"America/Santiago",name:"Santiago"},{value:"America/Santo_Domingo",name:"Santo Domingo"},{value:"America/Sao_Paulo",name:"Sao Paulo"},{value:"America/Scoresbysund",name:"Scoresbysund"},{value:"America/Shiprock",name:"Shiprock"},{value:"America/St_Barthelemy",name:"St Barthelemy"},{value:"America/St_Johns",name:"St Johns"},{value:"America/St_Kitts",name:"St Kitts"},{value:"America/St_Lucia",name:"St Lucia"},{value:"America/St_Thomas",name:"St Thomas"},{value:"America/St_Vincent",name:"St Vincent"},{value:"America/Swift_Current",name:"Swift Current"},{value:"America/Tegucigalpa",name:"Tegucigalpa"},{value:"America/Thule",name:"Thule"},{value:"America/Thunder_Bay",name:"Thunder Bay"},{value:"America/Tijuana",name:"Tijuana"},{value:"America/Toronto",name:"Toronto"},{value:"America/Tortola",name:"Tortola"},{value:"America/Vancouver",name:"Vancouver"},{value:"America/Virgin",name:"Virgin"},{value:"America/Whitehorse",name:"Whitehorse"},{value:"America/Winnipeg",name:"Winnipeg"},{value:"America/Yakutat",name:"Yakutat"},{value:"America/Yellowknife",name:"Yellowknife"}]},{group:"Europe",zones:[{value:"Europe/Amsterdam",name:"Amsterdam"},{value:"Europe/Andorra",name:"Andorra"},{value:"Europe/Athens",name:"Athens"},{value:"Europe/Belfast",name:"Belfast"},{value:"Europe/Belgrade",name:"Belgrade"},{value:"Europe/Berlin",name:"Berlin"},{value:"Europe/Bratislava",name:"Bratislava"},{value:"Europe/Brussels",name:"Brussels"},{value:"Europe/Bucharest",name:"Bucharest"},{value:"Europe/Budapest",name:"Budapest"},{value:"Europe/Chisinau",name:"Chisinau"},{value:"Europe/Copenhagen",name:"Copenhagen"},{value:"Europe/Dublin",name:"Dublin"},{value:"Europe/Gibraltar",name:"Gibraltar"},{value:"Europe/Guernsey",name:"Guernsey"},{value:"Europe/Helsinki",name:"Helsinki"},{value:"Europe/Isle_of_Man",name:"Isle of Man"},{value:"Europe/Istanbul",name:"Istanbul"},{value:"Europe/Jersey",name:"Jersey"},{value:"Europe/Kaliningrad",name:"Kaliningrad"},{value:"Europe/Kiev",name:"Kiev"},{value:"Europe/Lisbon",name:"Lisbon"},{value:"Europe/Ljubljana",name:"Ljubljana"},{value:"Europe/London",name:"London"},{value:"Europe/Luxembourg",name:"Luxembourg"},{value:"Europe/Madrid",name:"Madrid"},{value:"Europe/Malta",name:"Malta"},{value:"Europe/Mariehamn",name:"Mariehamn"},{value:"Europe/Minsk",name:"Minsk"},{value:"Europe/Monaco",name:"Monaco"},{value:"Europe/Moscow",name:"Moscow"},{value:"Europe/Nicosia",name:"Nicosia"},{value:"Europe/Oslo",name:"Oslo"},{value:"Europe/Paris",name:"Paris"},{value:"Europe/Podgorica",name:"Podgorica"},{value:"Europe/Prague",name:"Prague"},{value:"Europe/Riga",name:"Riga"},{value:"Europe/Rome",name:"Rome"},{value:"Europe/Samara",name:"Samara"},{value:"Europe/San_Marino",name:"San Marino"},{value:"Europe/Sarajevo",name:"Sarajevo"},{value:"Europe/Simferopol",name:"Simferopol"},{value:"Europe/Skopje",name:"Skopje"},{value:"Europe/Sofia",name:"Sofia"},{value:"Europe/Stockholm",name:"Stockholm"},{value:"Europe/Tallinn",name:"Tallinn"},{value:"Europe/Tirane",name:"Tirane"},{value:"Europe/Tiraspol",name:"Tiraspol"},{value:"Europe/Uzhgorod",name:"Uzhgorod"},{value:"Europe/Vaduz",name:"Vaduz"},{value:"Europe/Vatican",name:"Vatican"},{value:"Europe/Vienna",name:"Vienna"},{value:"Europe/Vilnius",name:"Vilnius"},{value:"Europe/Volgograd",name:"Volgograd"},{value:"Europe/Warsaw",name:"Warsaw"},{value:"Europe/Zagreb",name:"Zagreb"},{value:"Europe/Zaporozhye",name:"Zaporozhye"},{value:"Europe/Zurich",name:"Zurich"}]},{group:"Asia",zones:[{value:"Asia/Aden",name:"Aden"},{value:"Asia/Almaty",name:"Almaty"},{value:"Asia/Amman",name:"Amman"},{value:"Asia/Anadyr",name:"Anadyr"},{value:"Asia/Aqtau",name:"Aqtau"},{value:"Asia/Aqtobe",name:"Aqtobe"},{value:"Asia/Ashgabat",name:"Ashgabat"},{value:"Asia/Ashkhabad",name:"Ashkhabad"},{value:"Asia/Baghdad",name:"Baghdad"},{value:"Asia/Bahrain",name:"Bahrain"},{value:"Asia/Baku",name:"Baku"},{value:"Asia/Bangkok",name:"Bangkok"},{value:"Asia/Beirut",name:"Beirut"},{value:"Asia/Bishkek",name:"Bishkek"},{value:"Asia/Brunei",name:"Brunei"},{value:"Asia/Calcutta",name:"Calcutta"},{value:"Asia/Choibalsan",name:"Choibalsan"},{value:"Asia/Chongqing",name:"Chongqing"},{value:"Asia/Chungking",name:"Chungking"},{value:"Asia/Colombo",name:"Colombo"},{value:"Asia/Dacca",name:"Dacca"},{value:"Asia/Damascus",name:"Damascus"},{value:"Asia/Dhaka",name:"Dhaka"},{value:"Asia/Dili",name:"Dili"},{value:"Asia/Dubai",name:"Dubai"},{value:"Asia/Dushanbe",name:"Dushanbe"},{value:"Asia/Gaza",name:"Gaza"},{value:"Asia/Harbin",name:"Harbin"},{value:"Asia/Ho_Chi_Minh",name:"Ho Chi Minh"},{value:"Asia/Hong_Kong",name:"Hong Kong"},{value:"Asia/Hovd",name:"Hovd"},{value:"Asia/Irkutsk",name:"Irkutsk"},{value:"Asia/Istanbul",name:"Istanbul"},{value:"Asia/Jakarta",name:"Jakarta"},{value:"Asia/Jayapura",name:"Jayapura"},{value:"Asia/Jerusalem",name:"Jerusalem"},{value:"Asia/Kabul",name:"Kabul"},{value:"Asia/Kamchatka",name:"Kamchatka"},{value:"Asia/Karachi",name:"Karachi"},{value:"Asia/Kashgar",name:"Kashgar"},{value:"Asia/Kathmandu",name:"Kathmandu"},{value:"Asia/Katmandu",name:"Katmandu"},{value:"Asia/Kolkata",name:"Kolkata"},{value:"Asia/Krasnoyarsk",name:"Krasnoyarsk"},{value:"Asia/Kuala_Lumpur",name:"Kuala Lumpur"},{value:"Asia/Kuching",name:"Kuching"},{value:"Asia/Kuwait",name:"Kuwait"},{value:"Asia/Macao",name:"Macao"},{value:"Asia/Macau",name:"Macau"},{value:"Asia/Magadan",name:"Magadan"},{value:"Asia/Makassar",name:"Makassar"},{value:"Asia/Manila",name:"Manila"},{value:"Asia/Muscat",name:"Muscat"},{value:"Asia/Nicosia",name:"Nicosia"},{value:"Asia/Novokuznetsk",name:"Novokuznetsk"},{value:"Asia/Novosibirsk",name:"Novosibirsk"},{value:"Asia/Omsk",name:"Omsk"},{value:"Asia/Oral",name:"Oral"},{value:"Asia/Phnom_Penh",name:"Phnom Penh"},{value:"Asia/Pontianak",name:"Pontianak"},{value:"Asia/Pyongyang",name:"Pyongyang"},{value:"Asia/Qatar",name:"Qatar"},{value:"Asia/Qyzylorda",name:"Qyzylorda"},{value:"Asia/Rangoon",name:"Rangoon"},{value:"Asia/Riyadh",name:"Riyadh"},{value:"Asia/Saigon",name:"Saigon"},{value:"Asia/Sakhalin",name:"Sakhalin"},{value:"Asia/Samarkand",name:"Samarkand"},{value:"Asia/Seoul",name:"Seoul"},{value:"Asia/Shanghai",name:"Shanghai"},{value:"Asia/Singapore",name:"Singapore"},{value:"Asia/Taipei",name:"Taipei"},{value:"Asia/Tashkent",name:"Tashkent"},{value:"Asia/Tbilisi",name:"Tbilisi"},{value:"Asia/Tehran",name:"Tehran"},{value:"Asia/Tel_Aviv",name:"Tel Aviv"},{value:"Asia/Thimbu",name:"Thimbu"},{value:"Asia/Thimphu",name:"Thimphu"},{value:"Asia/Tokyo",name:"Tokyo"},{value:"Asia/Ujung_Pandang",name:"Ujung Pandang"},{value:"Asia/Ulaanbaatar",name:"Ulaanbaatar"},{value:"Asia/Ulan_Bator",name:"Ulan Bator"},{value:"Asia/Urumqi",name:"Urumqi"},{value:"Asia/Vientiane",name:"Vientiane"},{value:"Asia/Vladivostok",name:"Vladivostok"},{value:"Asia/Yakutsk",name:"Yakutsk"},{value:"Asia/Yekaterinburg",name:"Yekaterinburg"},{value:"Asia/Yerevan",name:"Yerevan"}]},{group:"Africa",zones:[{value:"Africa/Abidjan",name:"Abidjan"},{value:"Africa/Accra",name:"Accra"},{value:"Africa/Addis_Ababa",name:"Addis Ababa"},{value:"Africa/Algiers",name:"Algiers"},{value:"Africa/Asmara",name:"Asmara"},{value:"Africa/Asmera",name:"Asmera"},{value:"Africa/Bamako",name:"Bamako"},{value:"Africa/Bangui",name:"Bangui"},{value:"Africa/Banjul",name:"Banjul"},{value:"Africa/Bissau",name:"Bissau"},{value:"Africa/Blantyre",name:"Blantyre"},{value:"Africa/Brazzaville",name:"Brazzaville"},{value:"Africa/Bujumbura",name:"Bujumbura"},{value:"Africa/Cairo",name:"Cairo"},{value:"Africa/Casablanca",name:"Casablanca"},{value:"Africa/Ceuta",name:"Ceuta"},{value:"Africa/Conakry",name:"Conakry"},{value:"Africa/Dakar",name:"Dakar"},{value:"Africa/Dar_es_Salaam",name:"Dar es Salaam"},{value:"Africa/Djibouti",name:"Djibouti"},{value:"Africa/Douala",name:"Douala"},{value:"Africa/El_Aaiun",name:"El Aaiun"},{value:"Africa/Freetown",name:"Freetown"},{value:"Africa/Gaborone",name:"Gaborone"},{value:"Africa/Harare",name:"Harare"},{value:"Africa/Johannesburg",name:"Johannesburg"},{value:"Africa/Kampala",name:"Kampala"},{value:"Africa/Khartoum",name:"Khartoum"},{value:"Africa/Kigali",name:"Kigali"},{value:"Africa/Kinshasa",name:"Kinshasa"},{value:"Africa/Lagos",name:"Lagos"},{value:"Africa/Libreville",name:"Libreville"},{value:"Africa/Lome",name:"Lome"},{value:"Africa/Luanda",name:"Luanda"},{value:"Africa/Lubumbashi",name:"Lubumbashi"},{value:"Africa/Lusaka",name:"Lusaka"},{value:"Africa/Malabo",name:"Malabo"},{value:"Africa/Maputo",name:"Maputo"},{value:"Africa/Maseru",name:"Maseru"},{value:"Africa/Mbabane",name:"Mbabane"},{value:"Africa/Mogadishu",name:"Mogadishu"},{value:"Africa/Monrovia",name:"Monrovia"},{value:"Africa/Nairobi",name:"Nairobi"},{value:"Africa/Ndjamena",name:"Ndjamena"},{value:"Africa/Niamey",name:"Niamey"},{value:"Africa/Nouakchott",name:"Nouakchott"},{value:"Africa/Ouagadougou",name:"Ouagadougou"},{value:"Africa/Porto-Novo",name:"Porto-Novo"},{value:"Africa/Sao_Tome",name:"Sao Tome"},{value:"Africa/Timbuktu",name:"Timbuktu"},{value:"Africa/Tripoli",name:"Tripoli"},{value:"Africa/Tunis",name:"Tunis"},{value:"Africa/Windhoek",name:"Windhoek"}]},{group:"Australia",zones:[{value:"Australia/ACT",name:"ACT"},{value:"Australia/Adelaide",name:"Adelaide"},{value:"Australia/Brisbane",name:"Brisbane"},{value:"Australia/Broken_Hill",name:"Broken Hill"},{value:"Australia/Canberra",name:"Canberra"},{value:"Australia/Currie",name:"Currie"},{value:"Australia/Darwin",name:"Darwin"},{value:"Australia/Eucla",name:"Eucla"},{value:"Australia/Hobart",name:"Hobart"},{value:"Australia/LHI",name:"LHI"},{value:"Australia/Lindeman",name:"Lindeman"},{value:"Australia/Lord_Howe",name:"Lord Howe"},{value:"Australia/Melbourne",name:"Melbourne"},{value:"Australia/North",name:"North"},{value:"Australia/NSW",name:"NSW"},{value:"Australia/Perth",name:"Perth"},{value:"Australia/Queensland",name:"Queensland"},{value:"Australia/South",name:"South"},{value:"Australia/Sydney",name:"Sydney"},{value:"Australia/Tasmania",name:"Tasmania"},{value:"Australia/Victoria",name:"Victoria"},{value:"Australia/West",name:"West"},{value:"Australia/Yancowinna",name:"Yancowinna"}]},{group:"Indian",zones:[{value:"Indian/Antananarivo",name:"Antananarivo"},{value:"Indian/Chagos",name:"Chagos"},{value:"Indian/Christmas",name:"Christmas"},{value:"Indian/Cocos",name:"Cocos"},{value:"Indian/Comoro",name:"Comoro"},{value:"Indian/Kerguelen",name:"Kerguelen"},{value:"Indian/Mahe",name:"Mahe"},{value:"Indian/Maldives",name:"Maldives"},{value:"Indian/Mauritius",name:"Mauritius"},{value:"Indian/Mayotte",name:"Mayotte"},{value:"Indian/Reunion",name:"Reunion"}]},{group:"Atlantic",zones:[{value:"Atlantic/Azores",name:"Azores"},{value:"Atlantic/Bermuda",name:"Bermuda"},{value:"Atlantic/Canary",name:"Canary"},{value:"Atlantic/Cape_Verde",name:"Cape Verde"},{value:"Atlantic/Faeroe",name:"Faeroe"},{value:"Atlantic/Faroe",name:"Faroe"},{value:"Atlantic/Jan_Mayen",name:"Jan Mayen"},{value:"Atlantic/Madeira",name:"Madeira"},{value:"Atlantic/Reykjavik",name:"Reykjavik"},{value:"Atlantic/South_Georgia",name:"South Georgia"},{value:"Atlantic/Stanley",name:"Stanley"},{value:"Atlantic/St_Helena",name:"St Helena"}]},{group:"Pacific",zones:[{value:"Pacific/Apia",name:"Apia"},{value:"Pacific/Auckland",name:"Auckland"},{value:"Pacific/Chatham",name:"Chatham"},{value:"Pacific/Easter",name:"Easter"},{value:"Pacific/Efate",name:"Efate"},{value:"Pacific/Enderbury",name:"Enderbury"},{value:"Pacific/Fakaofo",name:"Fakaofo"},{value:"Pacific/Fiji",name:"Fiji"},{value:"Pacific/Funafuti",name:"Funafuti"},{value:"Pacific/Galapagos",name:"Galapagos"},{value:"Pacific/Gambier",name:"Gambier"},{value:"Pacific/Guadalcanal",name:"Guadalcanal"},{value:"Pacific/Guam",name:"Guam"},{value:"Pacific/Honolulu",name:"Honolulu"},{value:"Pacific/Johnston",name:"Johnston"},{value:"Pacific/Kiritimati",name:"Kiritimati"},{value:"Pacific/Kosrae",name:"Kosrae"},{value:"Pacific/Kwajalein",name:"Kwajalein"},{value:"Pacific/Majuro",name:"Majuro"},{value:"Pacific/Marquesas",name:"Marquesas"},{value:"Pacific/Midway",name:"Midway"},{value:"Pacific/Nauru",name:"Nauru"},{value:"Pacific/Niue",name:"Niue"},{value:"Pacific/Norfolk",name:"Norfolk"},{value:"Pacific/Noumea",name:"Noumea"},{value:"Pacific/Pago_Pago",name:"Pago Pago"},{value:"Pacific/Palau",name:"Palau"},{value:"Pacific/Pitcairn",name:"Pitcairn"},{value:"Pacific/Ponape",name:"Ponape"},{value:"Pacific/Port_Moresby",name:"Port Moresby"},{value:"Pacific/Rarotonga",name:"Rarotonga"},{value:"Pacific/Saipan",name:"Saipan"},{value:"Pacific/Samoa",name:"Samoa"},{value:"Pacific/Tahiti",name:"Tahiti"},{value:"Pacific/Tarawa",name:"Tarawa"},{value:"Pacific/Tongatapu",name:"Tongatapu"},{value:"Pacific/Truk",name:"Truk"},{value:"Pacific/Wake",name:"Wake"},{value:"Pacific/Wallis",name:"Wallis"},{value:"Pacific/Yap",name:"Yap"}]},{group:"Antarctica",zones:[{value:"Antarctica/Casey",name:"Casey"},{value:"Antarctica/Davis",name:"Davis"},{value:"Antarctica/DumontDUrville",name:"DumontDUrville"},{value:"Antarctica/Macquarie",name:"Macquarie"},{value:"Antarctica/Mawson",name:"Mawson"},{value:"Antarctica/McMurdo",name:"McMurdo"},{value:"Antarctica/Palmer",name:"Palmer"},{value:"Antarctica/Rothera",name:"Rothera"},{value:"Antarctica/South_Pole",name:"South Pole"},{value:"Antarctica/Syowa",name:"Syowa"},{value:"Antarctica/Vostok",name:"Vostok"}]},{group:"Arctic",zones:[{value:"Arctic/Longyearbyen",name:"Longyearbyen"}]},{group:"UTC",zones:[{value:"UTC",name:"UTC"}]},{group:"Manual Offsets",zones:[{value:"UTC-12",name:"UTC-12"},{value:"UTC-11",name:"UTC-11"},{value:"UTC-10",name:"UTC-10"},{value:"UTC-9",name:"UTC-9"},{value:"UTC-8",name:"UTC-8"},{value:"UTC-7",name:"UTC-7"},{value:"UTC-6",name:"UTC-6"},{value:"UTC-5",name:"UTC-5"},{value:"UTC-4",name:"UTC-4"},{value:"UTC-3",name:"UTC-3"},{value:"UTC-2",name:"UTC-2"},{value:"UTC-1",name:"UTC-1"},{value:"UTC+0",name:"UTC+0"},{value:"UTC+1",name:"UTC+1"},{value:"UTC+2",name:"UTC+2"},{value:"UTC+3",name:"UTC+3"},{value:"UTC+4",name:"UTC+4"},{value:"UTC+5",name:"UTC+5"},{value:"UTC+6",name:"UTC+6"},{value:"UTC+7",name:"UTC+7"},{value:"UTC+8",name:"UTC+8"},{value:"UTC+9",name:"UTC+9"},{value:"UTC+10",name:"UTC+10"},{value:"UTC+11",name:"UTC+11"},{value:"UTC+12",name:"UTC+12"},{value:"UTC+13",name:"UTC+13"},{value:"UTC+14",name:"UTC+14"}]}]}}}),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.motiondialer",{url:"/motiondialer",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:16}}})}]),angular.module("xCallyShuttleApp").controller("MotionDialerProcessListCtrl",["$scope","$uibModal","$translate","xAlert","Modal","MotionDialerProcess","uiGridConstants","usSpinnerService",function(a,b,c,d,e,f,g,h){a.initView=function(){return a.gridOptions={paginationPageSizes:[10,25,50,75],paginationPageSize:10,enableFiltering:!0,enableSorting:!0,enableGridMenu:!0,flatEntityAccess:!0,showGridFooter:!0,fastWatch:!0,columnDefs:[{name:"id",width:60},{name:"name"},{name:"queue",enableSorting:!1},{name:"extension",enableSorting:!1},{name:"id_list",enableSorting:!1,cellTemplate:'<div><a class="btn btn-xs grey-cascade" href="/motiondialer/lists/view/{{row.entity.id_list}}/settings">{{row.entity.id_list}}</a></div>',cellClass:"ui-grid-vcenter"},{name:"status",cellTemplate:"<div><a class=\"btn btn-xs\" data-ng-class=\"row.entity.status == 'STOP' ? 'red-sunglo' : 'green-meadow'\" data-ng-href=\"#\">{{ (row.entity.status === 'RUN') ? 'RUNNING' : 'STOPPED'}}</a></div>",cellClass:"ui-grid-vcenter",filter:{type:g.filter.SELECT,selectOptions:[{value:"RUN",label:"RUNNING"},{value:"STOP",label:"STOPPED"}]}},{name:"updatedtime",sort:{direction:g.DESC},enableFiltering:!1},{name:"action",cellTemplate:'<div><a class="btn btn-xs blue-hoki" href="/motiondialer/processes/view/{{row.entity.id}}/overview"><i class="icon-settings"></i></a><a class="btn btn-xs red-sunglo" data-ng-click="grid.appScope.deleteItem(row.entity.name, row.entity.id)"><i class="icon-trash"></i></a></div>',enableSorting:!1,cellClass:"ui-grid-vcenter",enableFiltering:!1}]},f.list({page:1,size:6e5}).$promise.then(function(b){console.log(b),b.status>0?a.gridOptions.data=b.response.RMI.rows:d.show("Please, check your connection!","danger")})["catch"](function(a){d.error(a)})["finally"](function(){h.stop("spinner-grid")})},a.createProcessQueue=function(){var c=b.open({animation:!0,templateUrl:"app/motiondialer/process/list/list.create.queue.modal.html",controller:"MotionDialerProcessListCreateQueueCtrl"});c.result.then(function(b){a.gridOptions.data.push(b.response.RMI)})},a.createProcessSquare=function(){var c=b.open({animation:!0,templateUrl:"app/motiondialer/process/list/list.create.square.modal.html",controller:"MotionDialerProcessListCreateSquareCtrl"});c.result.then(function(b){a.gridOptions.data.push(b.response.RMI)})},a.deleteItem=e.confirm["delete"](function(b){return f["delete"]({id:b}).$promise.then(function(e){e.status>0?(_.remove(a.gridOptions.data,{id:b}),d.show(c.instant("MESSAGE_WELL_DONE"),"success")):d.show(e.message||"Please, check your connection!","danger")})["catch"](function(a){d.error(a)})})}]),angular.module("xCallyShuttleApp").controller("MotionDialerProcessListCreateQueueCtrl",["$scope","$translate","$uibModalInstance","MotionDialerProcess","MotionDialerList","Trunk","VoiceQueue","Route","xAlert",function(a,b,c,d,e,f,g,h,i){a.form={},a.item={fetch_sort:"ASC",timeout:3},a.initModal=function(){return g.get().$promise.then(function(b){return a.queues={},b&&(a.queues=b.rows),f.get().$promise}).then(function(b){return a.trunks={},b&&(a.trunks=b.rows),a.trunks.push({name:"fake"}),e.list({page:1,size:6e5}).$promise}).then(function(b){a.lists={},b.status>0?a.lists=b.response.RMI.rows:i.show("Please, check your connection!","danger")})["catch"](function(a){i.error(a)})},a.save=function(){console.log(a.item);var e="_process_"+a.item.name+Math.round(1e5*Math.random()),f="Generated by Motion Dialer, Process Queue"+(a.item.description?", "+a.item.description:"");return h.save({appdata:"Internal Call",context:"from-sip",exten:e.replace(/\s/g,"_"),type:"internal",description:f,Applications:[{appdata:["CDR(type)=tigerdial"],app:"Set",interval:"*,*,*,*",type:"internal"},{appdata:["QUEUE_PRIO=99"],app:"Set",interval:"*,*,*,*",type:"internal"},{appdata:["CALLERID(name)=${AUTODIAL_NAME}"],app:"Set",interval:"*,*,*,*",type:"internal"},{appdata:["CALLERID(num)=${AUTODIAL_PHONE}"],app:"Set",interval:"*,*,*,*",type:"internal"},{appdata:[a.item.queue.name,"","","",a.item.timeout],app:"Queue",interval:"*,*,*,*",type:"internal"}]}).$promise.then(function(b){return d.insert({name:a.item.name,id_list:a.item.list.id,queue:a.item.queue.name,device:a.item.device.name,context:"from-sip",extension:e.replace(/\s/g,"_"),description:a.item.description,auto_closed:!0,fetch_sort:a.item.fetch_sort,hooks:[{target:"http://localhost:9000/api/report/integrations/tdDisposal",type:"http",http_method:"POST",json:"true",event:"hangup"}]}).$promise}).then(function(a){a.status>0?(i.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)):i.show(a.message||"Please, check your connection!","danger")})["catch"](function(a){i.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").controller("MotionDialerProcessListCreateSquareCtrl",["$scope","$translate","$uibModalInstance","MotionDialerProcess","MotionDialerList","SquareProject","Trunk","Route","xAlert",function(a,b,c,d,e,f,g,h,i){a.form={},a.item={fetch_sort:"ASC"},a.initModal=function(){return f.get().$promise.then(function(b){return a.projects={},b&&(a.projects=b.rows),g.get().$promise}).then(function(b){return a.trunks={},b&&(a.trunks=b.rows),a.trunks.push({name:"fake"}),e.list({page:1,size:6e5}).$promise}).then(function(b){a.lists={},b.status>0?a.lists=b.response.RMI.rows:i.show("Please, check your connection!","danger")})["catch"](function(a){i.error(a)})},a.save=function(){console.log(a.item);var e="_process_"+a.item.name+Math.round(1e5*Math.random()),f="Generated by Motion Dialer, Process Square"+(a.item.description?", "+a.item.description:"");return h.save({appdata:"Internal Call",context:"from-sip",exten:e.replace(/\s/g,"_"),type:"internal",description:f,Applications:[{appdata:["CDR(type)=tigerdial"],app:"Set",interval:"*,*,*,*",type:"internal"},{appdata:["agi://127.0.0.1/square",a.item.project.name],app:"AGI",interval:"*,*,*,*",type:"internal"}]}).$promise.then(function(b){return d.insert({name:a.item.name,id_list:a.item.list.id,queue:"none",device:a.item.device.name,context:"from-sip",extension:e.replace(/\s/g,"_"),description:a.item.description,auto_closed:!0,channel_limit:15,fetch_sort:a.item.fetch_sort}).$promise}).then(function(a){a.status>0?(i.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)):i.show(a.message||"Please, check your connection!","danger")})["catch"](function(a){i.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.motiondialer.processes.list",{url:"/list",templateUrl:"app/motiondialer/process/list/list.html",controller:"MotionDialerProcessListCtrl",authenticate:!0})}]),angular.module("xCallyShuttleApp").factory("MotionDialerProcess",["$resource",function(a){return a("/api/rest/process/:controller",null,{list:{method:"POST",params:{controller:"list"}},insert:{method:"POST",params:{controller:"insert"}},"delete":{method:"POST",params:{controller:"delete"}},find:{method:"POST",params:{controller:"find"}},update:{method:"POST",params:{controller:"update"}}})}]),angular.module("xCallyShuttleApp").factory("MotionDialerSpooler",["$resource",function(a){return a("/api/rest/spooler/:controller/:retrieve/:peer",null,{list:{method:"POST",params:{controller:"list"}},"delete":{method:"POST",params:{controller:"delete"}},find:{method:"POST",params:{controller:"find"}},summary:{method:"POST",params:{controller:"summary"}},close:{method:"POST",params:{controller:"retrieve",retrieve:"close"}},open:{method:"POST",params:{controller:"retrieve",retrieve:"open"}},blacklist:{method:"POST",params:{controller:"retrieve",retrieve:"blacklist"}},planning:{method:"POST",params:{controller:"retrieve",retrieve:"planning"}},planningpeer:{method:"POST",params:{controller:"retrieve",retrieve:"planning",peer:"peer"}}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.motiondialer.processes",{url:"/processes",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("MotionDialerProcessViewCtrl",["$scope","$translate","$stateParams","$uibModal","xAlert","uiGridConstants","usSpinnerService","MotionDialerProcess","MotionDialerSpooler","Modal","VoiceQueue",function(a,b,c,d,e,f,g,h,i,j,k){a.process={},a.techs=["SIP","IAX","LOCAL","KHOMP"],a.dialFormats=["tech/device/number","tech/number@device"],a.checkDuplicates=["ALWAYS","IFOPEN","NO"],a.codecs=["g729","ilbc","gsm","ulaw","alaw"],a.getProcess=function(){return h.find({id:parseInt(c.id)}).$promise.then(function(b){console.log(b),b.status>0?(b.response.RMI.codecs=b.response.RMI.codecs.split(","),a.process=b.response.RMI,a.process.hooks&&a.process.hooks.length?a.process.disposal=!0:a.process.disposal=!1):e.show(b.message||"Please, check your connection!","danger")})["catch"](function(a){e.error(a)})},a.getSummary=function(){return i.summary({id_process:parseInt(c.id)}).$promise.then(function(b){if(b.status>0){a.summary=b.response.RMI.totals,a.total=0;for(var c=0;c<a.summary.length;c++)a.total+=a.summary[c][1]}else e.show(b.message||"Please, check your connection!","danger")})["catch"](function(a){e.error(a)})["finally"](function(){g.stop("spinner-grid")})},a.updateProcess=function(){var c=_.clone(a.process);return delete c.updatedtime,delete c.id_list,delete c.createdtime,delete c.runtime,delete c.fetch_sort,c.codecs=c.codecs.join(","),""===c.timezone&&delete c.timezone,c.disposal?c.hooks=[{target:"http://localhost:9000/api/report/integrations/tdDisposal",type:"http",http_method:"POST",json:"true",event:"hangup"}]:c.hooks=[],delete c.disposal,h.update(c).$promise.then(function(c){c.status>0?(c.response.RMI.codecs=c.response.RMI.codecs.split(","),a.process=c.response.RMI,a.process.hooks&&a.process.hooks.length?a.process.disposal=!0:a.process.disposal=!1,e.show(b.instant("MESSAGE_WELL_DONE"),"success")):c.response.RMI.errors.forEach(function(a){a?e.show(a.field+": "+a.error,"danger"):e.show("Please, check your connection!","danger")})})["catch"](function(a){e.error(a)})},a.getSpooler=function(){return g.spin("spinner-grid"),a.gridOptions||(a.gridOptions={paginationPageSizes:[10,25,50,75],paginationPageSize:10,enableFiltering:!0,enableSorting:!0,enableGridMenu:!0,flatEntityAccess:!0,showGridFooter:!0,fastWatch:!0,headerCellFilter:"translate",columnDefs:[{name:"name"},{name:"phones",cellTemplate:"<div>{{row.entity.phones.join(',')}}</div>",cellClass:"ui-grid-vcenter"},{name:"retrieve",displayName:"APPLICATION_STATUS",headerCellFilter:"translate",filter:{type:f.filter.SELECT,selectOptions:[{value:"PLANNED_PEER",label:"PLANNED PEER"},{value:"PLANNED",label:"PLANNED"},{value:"BLACK_LIST",label:"BLACKLIST"},{value:"OPEN",label:"OPEN"},{value:"CLOSED",label:"CLOSED"},{value:"MAX_ATTEMPTS",label:"MAX ATTEMPTS"},{value:"COUNTER_BLOCK",label:"COUNTER BLOCK"},{value:"PLANNED_REQUEST",label:"PLANNED REQUEST"},{value:"DELETE",label:"DELETE"}]}},{name:"counter",enableFiltering:!1},{name:"planningtime",cellTemplate:"<div>{{row.entity.planningtime | date:'yyyy-MM-dd HH:mm'}}</div>",cellClass:"ui-grid-vcenter",enableFiltering:!1},{name:"action",cellTemplate:'<div><a class="btn btn-xs green" data-ng-click="grid.appScope.historySpooler(row.entity.history)"><i class="icon-info"></i></a> <a class="btn btn-xs blue-hoki" data-ng-click="grid.appScope.editSpooler(row.entity)"><i class="icon-settings"></i></a> <a class="btn btn-xs red-sunglo" data-ng-click="grid.appScope.deleteSpooler(row.entity.phones.join(), row.entity.id)"><i class="fa fa-trash"></i></a></div>',enableSorting:!1,cellClass:"ui-grid-vcenter",enableFiltering:!1}]}),i.list({id_process:parseInt(c.id),page:1,size:6e5}).$promise.then(function(b){b.status>0?a.gridOptions.data=b.response.RMI.rows:e.show(b.message||"Please, check your connection!","danger")})["catch"](function(a){e.error(a)})["finally"](function(){g.stop("spinner-grid")})},a.deleteSpooler=j.confirm["delete"](function(c){return i["delete"]({id:c}).$promise.then(function(d){d.status>0?(_.remove(a.gridOptions.data,{id:c}),e.show(b.instant("MESSAGE_WELL_DONE"),"success")):e.show(d.message||"Please, check your connection!","danger")})["catch"](function(a){e.error(a)})}),a.historySpooler=function(b){var c=d.open({animation:!0,templateUrl:"app/motiondialer/process/view/view.spooler.history.modal.html",controller:"MotionDialerViewSpoolerHistoryCtrl",resolve:{historySpooler:function(){return b}}});c.result.then(function(b){a.gridOptions.data.push(b.response.RMI)})},a.editSpooler=function(a){var b=d.open({animation:!0,templateUrl:"app/motiondialer/process/view/view.spooler.edit.modal.html",controller:"MotionDialerViewSpoolerEditCtrl",resolve:{entitySpooler:function(){return a}}});b.result.then(function(){})},a.initSettings=function(){return a.queues=null,k.get().$promise.then(function(b){b&&(a.queues=b.rows)})["catch"](function(a){e.error(a)})},a.createInterval=function(b){var c=d.open({animation:!0,templateUrl:"app/motiondialer/process/view/view.create.interval.modal.html",controller:"MotionDialerViewCreateIntervalCtrl",resolve:{objectProcess:function(){return a.process},intervalType:function(){return b},intervalValue:function(){return b?"8:00-20:00|MON-FRI|*|*":"00:01-07:59|SAT-SUN|*|*"}}});c.result.then(function(b){a.process=b})},a.editInterval=function(b,c){var e=d.open({animation:!0,templateUrl:"app/motiondialer/process/view/view.create.interval.modal.html",controller:"MotionDialerViewCreateIntervalCtrl",resolve:{objectProcess:function(){return a.process},intervalType:function(){return b},intervalValue:function(){return c}}});e.result.then(function(b){a.process=b})},a.deleteInterval=j.confirm["delete"](function(c,d){var f={id:a.process.id};return d?(f.intervals=[],f.intervals=f.intervals.concat(a.process.intervals),f.intervals.splice(c,1)):(f.not_intervals=[],f.not_intervals=f.not_intervals.concat(a.process.not_intervals),f.not_intervals.splice(c,1)),h.update(f).$promise.then(function(c){c.status>0?(c.response.RMI.codecs=c.response.RMI.codecs.split(","),a.process=c.response.RMI,e.show(b.instant("MESSAGE_WELL_DONE"),"success")):c.response.RMI.errors.forEach(function(a){a?e.show(a.field+": "+a.error,"danger"):e.show("Please, check your connection!","danger")})})["catch"](function(a){e.error(a)})}),a.runOrStop=function(){var b=d.open({animation:!0,templateUrl:"app/motiondialer/process/view/view.run.process.modal.html",controller:"MotionDialerViewRunProcessCtrl",resolve:{statusProcess:function(){return a.process.status}}});b.result.then(function(b){a.process.status=b.status})}}]),angular.module("xCallyShuttleApp").controller("MotionDialerViewCreateIntervalCtrl",["$scope","$translate","$uibModalInstance","$stateParams","MotionDialerProcess","xAlert","objectProcess","intervalType","intervalValue","interval",function(a,b,c,d,e,f,g,h,i,j){function k(a){var b,c=a.split("|"),d={};return c.forEach(function(a,c){switch(c){case 0:"*"!==a?(b=a.split("-"),d.t_from=moment(b[0],"HH:mm"),d.t_to=moment(b[1],"HH:mm"),d.alwaysTime=!1):(d.t_from=moment(new Date),d.t_to=moment(new Date),d.alwaysTime=!0);break;case 1:"*"!==a?(b=a.split("-"),d.wd_from=b[0].toLowerCase(),d.wd_to=b[1]?b[1].toLowerCase():"always"):(d.wd_from="always",d.wd_to="always");break;case 2:"*"!==a?(b=a.split("-"),d.md_from=b[0],d.md_to=b[1]?b[1]:"always"):(d.md_from="always",d.md_to="always");break;case 3:"*"!==a?(b=a.split("-"),d.m_from=b[0],d.m_to=b[1]?b[1]:"always"):(d.m_from="always",d.m_to="always")}}),d}function l(a){var b,c,d,e;return b=a.t_from&&a.t_to&&!a.alwaysTime?moment(a.t_from).format("HH:mm")+"-"+moment(a.t_to).format("HH:mm"):"*",a.wd_from&&"always"!==a.wd_from?(c=a.wd_from.toUpperCase(),a.wd_to&&"always"!==a.wd_to&&(c+="-"+a.wd_to.toUpperCase())):c="*",a.md_from&&"always"!==a.md_from?(d=a.md_from,a.md_to&&"always"!==a.md_to&&(d+="-"+a.md_to)):d="*",a.m_from&&"always"!==a.m_from?(e=a.m_from,a.m_to&&"always"!==a.m_to&&(e+="-"+a.m_to)):e="*",b+"|"+c+"|"+d+"|"+e}a.form={},a.$interval=j.interval,a.splittedInterval=k(i),a.save=function(){var d=l(a.splittedInterval);console.log(d);var i={id:g.id};return h?(i.intervals=[],i.intervals=i.intervals.concat(g.intervals),i.intervals.push(d)):(i.not_intervals=[], +i.not_intervals=i.not_intervals.concat(g.not_intervals),i.not_intervals.push(d)),console.log(i),e.update(i).$promise.then(function(a){a.status>0?(a.response.RMI.codecs=a.response.RMI.codecs.split(","),f.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a.response.RMI)):a.response.RMI.errors.forEach(function(a){a?f.show(a.field+": "+a.error,"danger"):f.show("Please, check your connection!","danger")})})["catch"](function(a){f.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.motiondialer.processes.view",{url:"/view/:id",templateUrl:"app/motiondialer/process/view/view.html",controller:"MotionDialerProcessViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.motiondialer.processes.view.overview",{url:"/overview",templateUrl:"app/motiondialer/process/view/view.overview.html"}).state("main.motiondialer.processes.view.settings",{url:"/settings",templateUrl:"app/motiondialer/process/view/view.settings.html"}).state("main.motiondialer.processes.view.intervals",{url:"/intervals",templateUrl:"app/motiondialer/process/view/view.intervals.html"}).state("main.motiondialer.processes.view.spooler",{url:"/spooler",templateUrl:"app/motiondialer/process/view/view.spooler.html"})}]),angular.module("xCallyShuttleApp").controller("MotionDialerViewRunProcessCtrl",["$scope","$stateParams","$uibModalInstance","$translate","statusProcess","MotionDialerProcess","xAlert",function(a,b,c,d,e,f,g){a.status="RUN"===e?"STOP":"RUN",a.yes=function(){f.update({id:parseInt(b.id),status:a.status}).$promise.then(function(a){a.status>0?(g.show(d.instant("MESSAGE_WELL_DONE"),"success"),c.close(a.response.RMI)):g.show(a.message||"Please, check your connection!","danger")})["catch"](function(a){g.error(a)})},a.no=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").controller("MotionDialerViewSpoolerEditCtrl",["$scope","$translate","$uibModalInstance","$stateParams","MotionDialerSpooler","xAlert","entitySpooler","Agent",function(a,b,c,d,e,f,g,h){a.moment=moment,a.initModal=function(){return h.get().$promise.then(function(b){a.agents=[],b&&b.rows.forEach(function(b){a.agents.push("SIP/"+b.name)})})["catch"](function(a){f.error(a)})},a.entitySpooler=g,a.save=function(){var d;switch(a.entitySpooler.retrieve){case"CLOSED":d=e.close({id:parseInt(a.entitySpooler.id)});break;case"OPEN":d=e.open({id:parseInt(a.entitySpooler.id)});break;case"BLACK_LIST":d=e.blacklist({id:parseInt(a.entitySpooler.id)});break;case"PLANNED":d=e.planning({id:parseInt(a.entitySpooler.id),date:moment(a.entitySpooler.planningtime).format("YYYY-MM-DD HH:mm")});break;case"PLANNED_PEER":d=e.planningpeer({id:parseInt(a.entitySpooler.id),date:moment(a.entitySpooler.planningtime).format("YYYY-MM-DD HH:mm"),peer:a.entitySpooler.planningpeer})}d?d.$promise.then(function(a){console.log(a),a.status>0?(f.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close()):a.response.RMI.errors.forEach(function(a){a?f.show(a.field+": "+a.error,"danger"):f.show("Please, check your connection!","danger")})})["catch"](function(a){f.error(a)}):f.show("RETRIEVE NOT FOUND","danger")},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").controller("MotionDialerViewSpoolerHistoryCtrl",["$scope","$translate","$uibModalInstance","$stateParams","MotionDialerSpooler","xAlert","historySpooler",function(a,b,c,d,e,f,g){a.historySpooler=g,a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").factory("ReportMotionDialer",["$resource",function(a){return a("/api/report/motiondialer/:id/:controller",{name:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("ResetCtrl",["$scope","Auth","$location","$window","$rootScope","Setting","xAlert","$stateParams","$state",function(a,b,c,d,e,f,g,h,i){a.userReset={},a.getInfo=function(){return f.get({controller:"info"}).$promise.then(function(b){a.info=b})["catch"](function(a){console.error(a)})},e.bodyLayout="login",a.$on("$viewContentLoaded",function(){Metronic.init(),Layout.init()}),a.reset=function(){b.reset({token:h.token,password:a.userReset.password}).then(function(){i.go("login",{reset:!0})})["catch"](function(a){g.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("reset",{url:"/reset/:token",templateUrl:"app/reset/reset.html",controller:"ResetCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/login.css"]}])}]}})}]),angular.module("xCallyShuttleApp").controller("SalesforceListCtrl",["$scope","SalesforceAccount","gridOptions","xAlert","$translate",function(a,b,c,d,e){a.initView=function(){var d={exporterCsvFilename:"salesforce_account.csv",columnDefs:[{name:"name",displayName:"APPLICATION_NAME"},{name:"username"},{name:"remoteUri",displayName:"APPLICATION_URI"},{name:"action",buttons:[{"class":"blue-hoki",href:"/salesforce/view/{{row.entity.id}}/account",name:"profile"},{"class":"green-jungle",name:"check",onClick:"grid.appScope.checkAccount(row.entity.id)"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=c.gridOptions(b,d,a)},a.checkAccount=function(a){return b.check({id:a}).$promise.then(function(){d.show(e.instant("MESSAGE_ACCOUNT_VERIFIED"),"success")})["catch"](function(){d.show(e.instant("MESSAGE_ACCOUNT_INVALID"),"danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.salesforce.list",{url:"/list",templateUrl:"app/salesforce/list/list.html",controller:"SalesforceListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"smart-table",insertBefore:"#ng_load_plugins_before",files:["assets/css/smart_table.css"]}])}]}})}]),angular.module("xCallyShuttleApp").factory("SalesforceAccount",["$resource",function(a){return a("/api/salesforce/accounts/:id/:controller",{id:"@id"},{update:{method:"PUT"},fields:{params:{controller:"fields"},isArray:!0},check:{params:{controller:"check"}}})}]).factory("SalesforceConfiguration",["$resource",function(a){return a("/api/salesforce/accounts/:accountId/configurations/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]).factory("SalesforceField",["$resource",function(a){return a("/api/salesforce/accounts/:accountId/configurations/:configurationId/fields/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.salesforce",{url:"/salesforce",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin"],redirectTo:"main.dashboard.voice"}}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.salesforce.view.configurations",{url:"/configurations",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("SalesforceViewConfigurationListCtrl",["$scope","$stateParams","$translate","gridOptions","SalesforceConfiguration","$uibModal",function(a,b,c,d,e,f){a.initView=function(){var c={exporterCsvFilename:"salesforce_configurations.csv",columnDefs:[{name:"name"},{name:"description"},{name:"action",width:125,buttons:[{"class":"blue-hoki",href:"/salesforce/view/{{row.entity.AccountId}}/configurations/view/{{row.entity.id}}",name:"profile"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=d.gridOptions(e,c,a,{accountId:b.id})},a.createItem=function(){var b=f.open({animation:!0,templateUrl:"app/salesforce/view/configuration/list/create.modal.html",controller:"SalesforceCreateConfigurationCtrl"});b.result.then(function(){a.gridOptions.getPage()})}}]),angular.module("xCallyShuttleApp").controller("SalesforceCreateConfigurationCtrl",["$scope","$translate","$uibModalInstance","SalesforceConfiguration","xAlert","$stateParams","channel",function(a,b,c,d,e,f,g){a.form={},a.item={},a.channels=g,a.item.channel="voice",a.item.type="Queue",a.save=function(){return d.save({accountId:f.id},a.item).$promise.then(function(a){e.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)})["catch"](function(a){e.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.salesforce.view.configurations.list",{url:"/list",templateUrl:"app/salesforce/view/configuration/list/list.html",controller:"SalesforceViewConfigurationListCtrl"})}]),angular.module("xCallyShuttleApp").controller("SalesforceViewConfigurationViewCtrl",["$scope","$filter","$stateParams","$translate","socket","variable","xAlert","SalesforceAccount","SalesforceConfiguration","SalesforceField","Variable",function(a,b,c,d,e,f,g,h,i,j,k){a.$on("$destroy",function(){e.unsyncUpdates("salesforce_field")}),a.config={autoHideScrollbar:!1,theme:"dark",advanced:{updateOnContentResize:!0},setHeight:300,scrollInertia:0},a.fieldType=[{type:"string",title:"String"},{type:"variable",title:"Variable"},{type:"customVariable",title:"Custom Variable"}],a.descFieldType=[{type:"string",title:"String"},{type:"keyValue",title:"Key Value"}],a.groupVariableByGroup=function(a){switch(a.group){case"voice_queue":return"Voice: Queue";default:return"Other"}},a.initView=function(){a.configurationName="",a.subjectConfig=[],a.descriptionConfig=[],a.fieldConfig=[],a.variables=f},a.getConfiguration=function(){return i.get({accountId:c.id,id:c.configurationId}).$promise.then(function(b){a.configurationName=b.name,a.subjectConfig=b.Subject,a.descriptionConfig=b.Description,a.fieldConfig=b.Field,e.socket.on("salesforce_field:remove",function(b){_.remove(a.subjectConfig,{id:b.id}),_.remove(a.descriptionConfig,{id:b.id}),_.remove(a.fieldConfig,{id:b.id})})})["catch"](function(a){g.error(a)})},a.getCustomVariables=function(){return k.get().$promise.then(function(b){a.customVariables=b.rows})["catch"](function(a){g.error(a)})},a.getFields=function(){return h.fields({id:c.id}).$promise.then(function(c){a.accountFields=_.sortByOrder(b("salesforce")(c),"name","asc"),console.log(a.accountFields)})["catch"](function(a){g.error(a)})},a.addItem=function(b){var d={};switch(b){case"subject":case"description":d={type:"string",content:""};break;case"field":d={content:""}}return i.save({accountId:c.id,id:c.configurationId,controller:b},d).$promise.then(function(c){switch(b){case"subject":a.subjectConfig.push(c);break;case"description":a.descriptionConfig.push(c);break;case"field":a.fieldConfig.push(c)}})["catch"](function(a){g.error(a)})},a.changeType=function(b){"variable"===b.type?(b.content="",b.variableName=""):"string"===b.type?(b.VariableId=null,b.variableName=""):"customVariable"===b.type&&(b.VariableId=null,b.content=""),a.updateField(b)},a.updateField=function(a){return j.update({accountId:c.id,configurationId:c.configurationId,id:a.id},a).$promise.then(function(){})["catch"](function(a){g.error(a)})},a.removeItem=function(a){return j["delete"]({accountId:c.id,configurationId:c.configurationId,id:a.id}).$promise.then(function(){g.show(d.instant("MESSAGE_WELL_DONE")+"!","success")})["catch"](function(a){g.error(a)})},a.changeDescType=function(b){"keyValue"===b.type?(b.content="","string"===b.keyType?(b.VariableId=null,b.variableName=""):"variable"===b.keyType?(b.keyContent="",b.VariableId=null):"customVariable"===b.keyType&&(b.keyContent="",b.variableName="")):"string"===b.type&&(b.VariableId=null,b.variableName="",b.key="",b.keyContent=""),a.updateField(b)},a.getSystemFieldOptions=function(b){if(b){var c=_.find(a.accountFields,"name",b);if(c)switch(c.type){case"picklist":return c.picklistValues;default:return}}}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.salesforce.view.configurations.view",{url:"/view/:configurationId",templateUrl:"app/salesforce/view/configuration/view/view.html",controller:"SalesforceViewConfigurationViewCtrl"})}]),angular.module("xCallyShuttleApp").controller("SalesforceViewCtrl",["$scope","$http","$stateParams","$translate","$location","WizardHandler","socket","xAlert","Modal","$filter","SalesforceAccount",function(a,b,c,d,e,f,g,h,i,j,k){a.initView=function(){return k.get({id:c.id}).$promise.then(function(b){a.account=b})["catch"](function(a){h.error(a)})},a.updateItem=function(){return k.update({id:c.id},a.account).$promise.then(function(){h.show(d.instant("MESSAGE_WELL_DONE")+".","success")})["catch"](function(a){h.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.salesforce.view",{url:"/view/:id",templateUrl:"app/salesforce/view/view.html",controller:"SalesforceViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.salesforce.view.account",{url:"/account",templateUrl:"app/salesforce/view/view.account.html"})}]),angular.module("xCallyShuttleApp").controller("SalesforceWizardCtrl",["$scope","$http","$location","$translate","xAlert","WizardHandler",function(a,b,c,d,e,f){a.translate=d,a.initWizard=function(){a.$translate=d,a.forms={},a.item={},a.item.serverUrl=c.protocol()+"://"+location.host},a.next=function(){f.wizard().next()},a.exitValidation=function(a){return a},a.createItem=function(){console.log(a.item),b.post("api/salesforce/accounts",a.item).success(function(){e.show(d.instant("MESSAGE_WELL_DONE")+".","success"),c.path("/salesforce/list")}).error(function(a){e.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.salesforce.wizard",{url:"/wizard",templateUrl:"app/salesforce/wizard/wizard.html",controller:"SalesforceWizardCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.customization",{url:"/customization",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("CustomizationGeneralViewCtrl",["$scope","gridOptions","$uibModal","FileUploader","$cookieStore","xAlert","$translate","Setting","$rootScope",function(a,b,c,d,e,f,g,h,i){a.radioSwitch={isActive:!!i.license.custom,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"};var j=a.uploader=new d({url:"api/settings/logo/main",queueLimit:1,withCredentials:!0,headers:{Authorization:"Bearer "+e.get("token")}});j.filters.push({name:"imageFilter",fn:function(a){var b="|"+a.type.slice(a.type.lastIndexOf("/")+1)+"|";return-1!=="|jpg|png|jpeg|".indexOf(b)}}),j.onSuccessItem=function(a,b){i.settings.logo=b.logo,f.show(g.instant("MESSAGE_WELL_DONE"),"success")},j.onErrorItem=function(){f.show(g.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")},j.onCompleteAll=function(){j.clearQueue()};var k=a.uploader2=new d({url:"api/settings/logo/login",queueLimit:1,withCredentials:!0,headers:{Authorization:"Bearer "+e.get("token")}});k.filters.push({name:"imageFilter",fn:function(a){var b="|"+a.type.slice(a.type.lastIndexOf("/")+1)+"|";return-1!=="|jpg|png|jpeg|".indexOf(b)}}),k.onSuccessItem=function(a,b){f.show(g.instant("MESSAGE_WELL_DONE"),"success")},k.onErrorItem=function(){f.show(g.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")},k.onCompleteAll=function(){k.clearQueue()},a.initView=function(){return h.get({id:1}).$promise.then(function(b){a.settings={defaultLogo:b.defaultLogo,defaultLoginLogo:b.defaultLoginLogo,footerWhiteLabel:b.footerWhiteLabel,defaultFooterWhiteLabel:b.defaultFooterWhiteLabel}})["catch"](function(a){f.error(a)})},a.update=function(){return h.update({id:1},a.settings).$promise.then(function(b){_.merge(i.settings,a.settings),f.show(g.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){f.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.customization.view.general",{url:"/general",templateUrl:"app/setting/customization/view/general/general.html",controller:"CustomizationGeneralViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/scripts/jquery.sparkline.min.js","assets/plugins/bootstrap-fileinput/bootstrap-fileinput.js","assets/scripts/profile.js"]})}]}})}]),angular.module("xCallyShuttleApp").controller("CustomizationViewCtrl",["$scope",function(a){}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.customization.view",{url:"/view",templateUrl:"app/setting/customization/view/view.html",controller:"CustomizationViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.general",{url:"/general",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("GeneralMainViewCtrl",["$scope","xAlert","$translate","Setting",function(a,b,c,d){a.initView=function(){return d.get({id:1}).$promise.then(function(b){a.settings={agi_port:b.agi_port,min_internal:b.min_internal,min_mailbox:b.min_mailbox,securePassword:b.securePassword}})["catch"](function(a){b.error(a)})},a.update=function(){return d.update({id:1},a.settings).$promise.then(function(a){b.show(c.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){b.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.general.view.main",{url:"/main",templateUrl:"app/setting/general/view/main/main.html",controller:"GeneralMainViewCtrl"})}]),angular.module("xCallyShuttleApp").controller("GeneralViewCtrl",["$scope",function(a){}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.general.view",{url:"/view",templateUrl:"app/setting/general/view/view.html",controller:"GeneralViewCtrl"})}]),angular.module("xCallyShuttleApp").factory("License",["$resource",function(a){return a("/api/licenses/:id/:controller",{id:"@id"},{request:{method:"POST",params:{id:"request"}}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.license",{url:"/license",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("LicenseUpdateCtrl",["$scope","$translate","$uibModalInstance","xAlert","Setting",function(a,b,c,d,e){a.form={},a.item={},a.getLicense=function(){return e.get({id:1}).$promise.then(function(b){a.item.license=b.license})["catch"](function(a){d.error(a)})},a.update=function(){return e.update({id:1},a.item).$promise.then(function(a){d.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)})["catch"](function(a){d.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").controller("LicenseViewCtrl",["$scope","$rootScope","$translate","License","xAlert","$window","$uibModal",function(a,b,c,d,e,f,g){a.radioSwitch={isActive:!0,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.initView=function(){return d.get(function(b){a.item=b.license})},a.submitRequest=function(){return d.request(a.item,function(){e.show(c.instant("MESSAGE_WELL_DONE"),"success")},function(a){switch(a.status){case 304:e.show(a.statusText,"info");break;default:e.error(a)}})},a.updateLicense=function(){var a=g.open({animation:!0,templateUrl:"app/setting/license/view/update.modal.html",controller:"LicenseUpdateCtrl"});a.result.then(function(){f.location.reload()})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.license.view",{url:"/view",templateUrl:"app/setting/license/view/view.html",controller:"LicenseViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/pricing-tables.css"]}])}]}})}]),angular.module("xCallyShuttleApp").factory("Externip",["$resource",function(a){return a("/api/network/externips/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("Localnet",["$resource",function(a){return a("/api/network/localnets/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.network",{url:"/network",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("ExternipCtrl",["$scope","$uibModal","gridOptions","Externip",function(a,b,c,d){a.initView=function(){var b={exporterCsvFilename:"network_externip.csv",columnDefs:[{name:"value"},{name:"action",buttons:[{"class":"blue-hoki",onClick:"grid.appScope.createItem(row.entity)",name:"profile"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=c.gridOptions(d,b,a)},a.createItem=function(c){var d=b.open({animation:!0,templateUrl:"app/setting/network/view/externip/externip.create.modal.html",controller:"ExternipCreateCtrl",resolve:{item:c}});d.result.then(function(){a.gridOptions.getPage()})}}]),angular.module("xCallyShuttleApp").controller("ExternipCreateCtrl",["$scope","$translate","$uibModalInstance","$stateParams","Externip","xAlert","item",function(a,b,c,d,e,f,g){a.initModal=function(){a.form={},a.item=g||{},a.title=g?b.instant("APPLICATION_EDIT_EXTERNIP"):b.instant("APPLICATION_NEW_EXTERNIP")},a.save=function(){return g?e.update({id:a.item.id},a.item).$promise.then(function(a){f.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)})["catch"](function(a){f.error(a)}):e.save({},a.item).$promise.then(function(a){f.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)})["catch"](function(a){f.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.network.view.externip",{url:"/externip",templateUrl:"app/setting/network/view/externip/externip.html",controller:"ExternipCtrl"})}]),angular.module("xCallyShuttleApp").controller("LocalnetCtrl",["$scope","gridOptions","Localnet","$uibModal",function(a,b,c,d){a.initView=function(){var d={exporterCsvFilename:"network_localnet.csv",columnDefs:[{name:"value"},{name:"action",buttons:[{"class":"blue-hoki",onClick:"grid.appScope.createItem(row.entity)",name:"profile"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=b.gridOptions(c,d,a)},a.createItem=function(b){var c=d.open({animation:!0,templateUrl:"app/setting/network/view/localnet/localnet.create.modal.html",controller:"LocalnetCreateCtrl",resolve:{item:b}});c.result.then(function(){a.gridOptions.getPage()})}}]),angular.module("xCallyShuttleApp").controller("LocalnetCreateCtrl",["$scope","$translate","$uibModalInstance","$stateParams","Localnet","xAlert","item",function(a,b,c,d,e,f,g){a.initModal=function(){if(a.form={},a.item=g||{},a.title=g?b.instant("APPLICATION_EDIT_LOCALNET"):b.instant("APPLICATION_NEW_LOCALNET"),g&&g.value){var c=a.item.value.split("/");c.length>1&&(a.item.address=c[0],a.item.mask=c[1])}},a.save=function(){var d=a.item.address+"/"+a.item.mask;return g?e.update({id:a.item.id},{value:d}).$promise.then(function(a){f.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)})["catch"](function(a){f.error(a)}):e.save({},{value:d}).$promise.then(function(a){f.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)})["catch"](function(a){f.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.network.view.localnet",{url:"/localnet",templateUrl:"app/setting/network/view/localnet/localnet.html",controller:"LocalnetCtrl"})}]),angular.module("xCallyShuttleApp").controller("NetworkViewCtrl",function(){}),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.network.view",{url:"/view",templateUrl:"app/setting/network/view/view.html",controller:"NetworkViewCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting",{url:"/setting",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:18}}})}]),angular.module("xCallyShuttleApp").factory("Setting",["$resource",function(a){return a("/api/settings/:id/:controller/:param",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("Smtp",["$resource",function(a){return a("/api/mail/servers/out/:id/:controller/:controller2",{id:"@id"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.smtp",{url:"/smtp",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("SmtpViewCtrl",["$scope","$stateParams","$translate","socket","MailServerOut","Setting","MailAccount","xAlert",function(a,b,c,d,e,f,g,h){a.initView=function(){return a.smtpDisabled=!1,a.isActive=!0,a.size="small",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.CONST_TIMEOUT=3e4,a.item={account:{service:!0,MailServerOut:{ssl:!1}}},a.$on("$destroy",function(){d.socket.removeAllListeners("mail_server_out:state")}),d.socket.on("mail_server_out:state",function(b){a.item&&Number(b.id)===a.item.account.MailServerOut.id&&(a.item.account.MailServerOut.state=b.state,a.item.account.MailServerOut.source=JSON.parse(b.source))}),f.get({id:"smtp"}).$promise.then(function(b){a.item.account=b})["catch"](function(b){switch(b.status){case 404:a.item.account.name=null,a.item.account.address=null,a.item.account.MailServerOut={ssl:!1},h.show("Service SMTP server not configured.","info");break;default:h.error(b)}})},a.updateItem=function(){return a.item.account.id?(delete a.item.account.MailServerOut.state,delete a.item.account.MailServerOut.source,f.update({id:"smtp",controller:a.item.account.id},a.item.account).$promise.then(function(){h.show(c.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){h.error(a)})):f.save({id:"smtp"},{description:"Custom Account",name:a.item.account.name,address:a.item.account.address,service:a.item.account.service,custom:!0,MailServerOut:a.item.account.MailServerOut}).$promise.then(function(b){a.item.account=b,h.show(c.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){h.error(a)})},a.test=function(){return e.get({id:a.item.account.MailServerOut.id,controller:"test"}).$promise["catch"](function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.smtp.view",{url:"/view",templateUrl:"app/setting/smtp/view/view.html",controller:"SmtpViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.system",{url:"/system",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("SystemViewConsoleCtrl",["$scope","Setting","xAlert","usSpinnerService","$timeout","$translate","socket",function(a,b,c,d,e,f,g){function h(b){var c=_.findIndex(a.commandHistory.commands,function(a){return a===b});-1!==c&&a.commandHistory.commands.splice(c,1),a.commandHistory.commands.unshift(b)}a.output="<b>"+f.instant("APPLICATION_CONSOLE_WELCOME")+"</b><br/>",a.item={command:""},a.commandHistory={commands:[],index:-1},a.busy=!1,a.cmdFocus=function(){e(function(){angular.element("#command").trigger("focus")})},a.sendCmd=function(){return a.commandHistory.index=-1,a.tmp=a.item.command,a.item.command="",a.output+="<b>motion*CLI> "+a.tmp+"</b><br>",a.tmp?(h(a.tmp.trim()),a.busy=!0,d.spin("console-spinner"),b.save({controller:"asterisk"},{command:a.tmp}).$promise):void 0},g.socket.on("console:result",function(b){a.output+=b.content.replace(/(?:\r\n|\r|\n)/g,"<br />").replace("Response: Follows<br />Privilege: Command<br />","").replace(/ActionID: .[0-9]*<br \/>/,"").replace(/ActionID: .[0-9]*/,"")+"<br>",d.stop("console-spinner"),a.busy=!1,a.cmdFocus()}),g.socket.on("console:error",function(b){d.stop("console-spinner"),a.output+="command error:"+b.data.message+"<br>",a.busy=!1,a.cmdFocus()}),a.keyUp=function(b){switch(b.keyCode){case 40:a.commandHistory.commands[a.commandHistory.index-1]?a.item.command=a.commandHistory.commands[--a.commandHistory.index]:(a.item.command="",a.commandHistory.index=-1);break;case 38:a.commandHistory.commands[a.commandHistory.index+1]&&(a.item.command=a.commandHistory.commands[++a.commandHistory.index]);break;case 37:break;case 39:break;default:a.commandHistory.index=-1}},e(function(){angular.element("#command").trigger("focus"),d.stop("console-spinner")})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.system.view.console",{url:"/console",templateUrl:"app/setting/system/view/console/console.html",controller:"SystemViewConsoleCtrl"})}]),angular.module("xCallyShuttleApp").controller("SystemViewGeneralCtrl",["$scope","$stateParams","$translate","socket","Setting","xAlert","usSpinnerService",function(a,b,c,d,e,f,g){function h(b){a.system.memory={labels:_.keys(b.memory.details),values:_.values(_.map(b.memory.details,function(a){return Math.round(a/1024)})),Total:Math.round(b.memory.Total/1024)},g.stop("memory-spinner"),a.system.disks=[],_.forEach(b.disks,function(b){a.system.disks.push({mount:b.mount,size:Number((b.size/1048576).toFixed(2)),values:_.values(_.map(b.details,function(a){return Number((a/1048576).toFixed(2))})),labels:_.keys(b.details)})}),a.system.mount=a.system.disks[0],g.stop("disk-spinner"),a.system.cpu={motion:Math.round(b.cpu.motion),cores:[]},_.forEach(b.cpu.cores,function(b){delete b.nice,delete b.irq,a.system.cpu.cores.push({labels:_.keys(b),values:_.values(b),colours:["#803690","#DCDCDC","#00ADF9"]})}),g.stop("cpu-spinner")}a.system={mount:void 0},a.initView=function(){return g.spin("memory-spinner"),g.spin("disk-spinner"),g.spin("cpu-spinner"),e.get({controller:"system"}).$promise.then(function(a){h(a)})["catch"](function(a){f.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.system.view.general",{url:"/general",templateUrl:"app/setting/system/view/general/general.html",controller:"SystemViewGeneralCtrl"})}]),angular.module("xCallyShuttleApp").controller("SystemViewLogsCtrl",["$scope","$stateParams","$translate","socket","Setting","xAlert","usSpinnerService",function(a,b,c,d,e,f,g){a.initView=function(){return a.logs={errors:"",output:""},g.spin("logs-spinner"),e.get({controller:"logs"}).$promise.then(function(b){a.logs=b,g.stop("logs-spinner")})["catch"](function(a){f.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.system.view.logs",{url:"/logs",templateUrl:"app/setting/system/view/logs/logs.html",controller:"SystemViewLogsCtrl"})}]),angular.module("xCallyShuttleApp").controller("SystemViewCtrl",["$scope",function(a){}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.system.view",{url:"/view",templateUrl:"app/setting/system/view/view.html",controller:"SystemViewCtrl"})}]),angular.module("xCallyShuttleApp").controller("UpdateListCtrl",["$scope","gridOptions","$uibModal","$location","Update","xAlert","$log","$translate","$state",function(a,b,c,d,e,f,g,h,i){a.initCounter=function(){a.$on("timer-stopped",function(a,b){f.show(h.instant("MESSAGE_UPDATE_COMPLETED")+'<a href="https://wiki.xcallymotion.com/display/XMD/xCally+Motion+service+manager#xCallyMotionservicemanager-pm2start|stop|restartmotion" target="_blank" style="color: blue;"> Read more</a>',"success"), +i.go("main.setting.updates.list")})},a.initView=function(){return e.get({controller:"current"}).$promise.then(function(b){a.currentVersion=b.currentVersion,a.latestVersion=b.latestVersion})["catch"](function(a){console.log(a)})},a.pull=function(){var a=c.open({animation:!0,templateUrl:"app/setting/update/list/list.pull.html",controller:"UpdateListPullCtrl"});a.result.then(function(){return d.path("/setting/updates/landing"),e.pull().$promise.then(function(a){var b=!1;a&&(a.summary&&_.forOwn(a.summary,function(a){a&&(b=!0)}),(a.insertions&&!_.isEmpty(a.insertions)||a.deletions&&!_.isEmpty(a.deletions))&&(b=!0)),b?f.show(h.instant("MESSAGE_PULL_COMPLETED"),"success"):(f.show(h.instant("MESSAGE_NO_UPDATES"),"success"),d.path("/setting/updates/list"))})["catch"](function(a){console.log(a),f.error(a),d.path("/setting/updates/list")})},function(){g.info("Modal dismissed at: "+new Date)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.updates.list",{url:"/list",templateUrl:"app/setting/update/list/list.html",controller:"UpdateListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"css",insertBefore:"#ng_load_plugins_before",files:["assets/css/pricing-table.css"]}])}]}}).state("main.setting.updates.landing",{url:"/landing",templateUrl:"app/setting/update/list/landing.html",controller:"UpdateListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"css",insertBefore:"#ng_load_plugins_before",files:["assets/css/error.css"]}])}]}})}]),angular.module("xCallyShuttleApp").controller("UpdateListPullCtrl",["$scope","$uibModalInstance",function(a,b){a.modal={dismissable:!0,title:"Confirm Update",html:"Are you sure you want to update?",buttons:[{classes:"btn btn-success",text:"Update",click:function(){b.close()}},{classes:"btn default",text:"Cancel",click:function(){b.dismiss("cancel")}}]}}]),angular.module("xCallyShuttleApp").factory("Update",["$resource",function(a){return a("/api/updates/:id/:controller",{id:"@id"},{pull:{method:"GET",params:{id:"pull"}}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.updates",{url:"/updates",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["hasUpdate"],redirectTo:"main.dashboard.voice"}}})}]),angular.module("xCallyShuttleApp").controller("SquareOdbcListCtrl",["$scope","$uibModal","$translate","SquareOdbc","gridOptions","xAlert",function(a,b,c,d,e,f){a.initView=function(){var b={exporterCsvFilename:"odbc.csv",columnDefs:[{name:"name"},{name:"dsn",displayName:"APPLICATION_ODBC"},{name:"description"},{name:"action",width:250,buttons:[{"class":"blue-hoki",href:"/square/odbc/view/{{row.entity.id}}/settings",name:"settings"},{"class":"green-jungle",name:"check",onClick:"grid.appScope.checkConnection(row.entity.id)"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=e.gridOptions(d,b,a)},a.createItem=function(){var c=b.open({animation:!0,templateUrl:"app/square/odbc/list/list.create.modal.html",controller:"SquareOdbcListCreateCtrl"});c.result.then(function(){a.gridOptions.getPage()})},a.checkConnection=function(a){return d.get({id:a,controller:"check"}).$promise.then(function(){f.show(c.instant("MESSAGE_CONNECTION_VERIFIED"),"success")})["catch"](function(){f.show(c.instant("MESSAGE_CONNECTION_INVALID"),"danger")})}}]),angular.module("xCallyShuttleApp").controller("SquareOdbcListCreateCtrl",["$scope","$translate","$uibModalInstance","SquareOdbc","xAlert",function(a,b,c,d,e){a.form={},a.item={},a.item.dsn||(a.item.dsn="DRIVER=MySQL;SERVER=127.0.0.1;UID=xcall;PWD=password;DATABASE=motion"),a.save=function(){return d.save(a.item).$promise.then(function(a){e.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)})["catch"](function(a){e.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.square.odbc.list",{url:"/list",templateUrl:"app/square/odbc/list/list.html",controller:"SquareOdbcListCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.square.odbc",{url:"/odbc",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").factory("SquareOdbc",["$resource",function(a){return a("/api/square/odbc/:id/:controller",{name:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("SquareOdbcViewCtrl",["$scope","$translate","$stateParams","SquareOdbc","xAlert",function(a,b,c,d,e){a.odbc={},a.getOdbc=function(){return d.get({id:c.id}).$promise.then(function(b){a.odbc=b})["catch"](function(a){e.error(a)})},a.updateOdbc=function(){var f=angular.copy(a.odbc);return d.update({id:c.id},f).$promise.then(function(){e.show(b.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){e.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.square.odbc.view",{url:"/view/:id",templateUrl:"app/square/odbc/view/view.html",controller:"SquareOdbcViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.square.odbc.view.settings",{url:"/settings",templateUrl:"app/square/odbc/view/view.settings.html"})}]),angular.module("xCallyShuttleApp").controller("SquareProjectListCtrl",["$scope","$uibModal","SquareProject","gridOptions",function(a,b,c,d){a.initView=function(){var b={exporterCsvFilename:"projects.csv",columnDefs:[{name:"name"},{name:"description"},{name:"action",width:160,buttons:[{"class":"blue-hoki",href:"/square/projects/view/{{row.entity.id}}",name:"settings"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=d.gridOptions(c,b,a)},a.createItem=function(){var c=b.open({animation:!0,templateUrl:"app/square/project/list/list.create.modal.html",controller:"SquareProjectListCreateCtrl"});c.result.then(function(b){console.log(b),a.gridOptions.getPage()})}}]),angular.module("xCallyShuttleApp").controller("SquareProjectListCreateCtrl",["$scope","$translate","$uibModalInstance","SquareProject","xAlert",function(a,b,c,d,e){a.form={},a.item={},a.save=function(){return d.save(a.item).$promise.then(function(a){e.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)})["catch"](function(a){e.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.square.projects.list",{url:"/list",templateUrl:"app/square/project/list/list.html",controller:"SquareProjectListCtrl",authenticate:!0})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.square.projects",{url:"/projects",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").factory("SquareProject",["$resource",function(a){return a("/api/square/projects/:id/:controller",{name:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("SquareProjectViewCtrl",["$scope","$stateParams","Auth","xAlert","SquareProject","socket","$translate","$log","$uibModal",function(a,b,c,d,e,f,g,h,i){a.squareProject={},a.$on("$destroy",function(){f.unsyncUpdates("square_project")}),a.getProject=function(){return e.get({id:b.id}).$promise.then(function(b){a.squareProject=b,angular.element(document).ready(function(){window.onerror=function(a,b,c){try{if(null!==a&&-1!==a.indexOf("Script error."));else{var e=new Image;e.src="assets/plugins/mxgraph/images/1x1.png?msg="+encodeURIComponent(a)+"&url="+encodeURIComponent(b)+"&lnum="+encodeURIComponent(c)}}catch(f){d.error(f)}},b.token=c.getToken();var a=new EditorUi(new Editor);a.openString(b.preproduction,b.name,b),a.editor.graphChangeListener=function(a,b){var c=b.properties.rtChange||!1;c||(this.modified=!0)}}),f.socket.on("square_project:save",function(c){c.id===b.id&&(a.squareProject=_.merge(a.squareProject,c))})})["catch"](function(a){d.error(a)})},a.editNotes=function(){var c=i.open({animation:!0,templateUrl:"app/square/project/view/projectNotes.modal.html",controller:["$scope","$uibModalInstance","notes",function(a,b,c){a.notes=c,a.close=function(){b.close(a.notes)},a.cancel=function(){b.dismiss("cancel")}}],resolve:{notes:{value:a.squareProject.notes}}});c.result.then(function(a){return e.update({id:b.id},{notes:a.value}).$promise.then(function(){d.show(g.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){d.error(a)})},function(){h.info("Modal dismissed at: "+new Date)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.square.projects.view",{url:"/view/:id",templateUrl:"app/square/project/view/view.html",controller:"SquareProjectViewCtrl",authenticate:!0,resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",serie:!0,cache:!1,files:["assets/plugins/mxgraph/css/common.css","assets/plugins/mxgraph/css/explorer.css","assets/plugins/mxgraph/styles/grapheditor.css","assets/plugins/mxgraph/styles/custom.css","assets/plugins/square/js/custom.js","assets/plugins/mxgraph/js/mxClient.js","assets/plugins/square/js/Editor.js","assets/plugins/square/js/Graph.js","assets/plugins/square/js/EditorUi.js","assets/plugins/square/js/Actions.js","assets/plugins/square/js/Menus.js","assets/plugins/square/js/Sidebar.js","assets/plugins/square/js/Toolbar.js","assets/plugins/square/js/Dialogs.js"]}])}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.square.realtime",{url:"/realtime",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:14}}})}]),angular.module("xCallyShuttleApp").factory("ReportSquare",["$resource",function(a){return a("/api/report/square/:id/:controller",{name:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("ReportSquareDetail",["$resource",function(a){return a("/api/report/square/details/:id/:controller",{name:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("SquareRealtimeViewGeneralCtrl",["$scope","$log","$uibModal","$translate","socket","xAlert","ReportSquare","usSpinnerService","$q","uiGridConstants",function(a,b,c,d,e,f,g,h,i,j){function k(b){return h.spin("spinner-grid"),g.get(m).$promise.then(function(b){a.gridOptions.totalItems=b.count,a.gridOptions.data=b.rows})["catch"](function(a){f.error(a)})["finally"](function(){b&&l(),h.stop("spinner-grid")})}function l(){e.socket.on("report_square:save",function(b){if(b.leaveAt){var c=_.remove(a.gridOptions.data,{id:b.id});c&&k()}else{var d=_.find(a.gridOptions.data,{id:b.id});if(!d&&a.gridOptions.data.length<m.limit){var e=_.clone(m);if(_.forEach(["offset","limit","controller","order"],function(a){delete e[a]}),_.isEmpty(e))a.gridOptions.data.push(b);else{var f=!0;_.forOwn(e,function(a,c){_.includes(b[c],a)||(f=!1)}),f&&a.gridOptions.data.push(b)}}}})}var m={controller:"realtime",offset:0,limit:25};a.moment=moment,a.init=function(){a.gridOptions={enableGridMenu:!0,headerCellFilter:"translate",enableHorizontalScrollbar:0,enableVerticalScrollbar:0,enableFiltering:!0,showGridFooter:!0,paginationPageSizes:[10,25,50,75],paginationPageSize:25,useExternalPagination:!0,useExternalSorting:!0,useExternalFiltering:!0,showTreeExpandNoChildren:!0,columnDefs:[{name:"uniqueid"},{name:"callerid"},{name:"extension"},{name:"project_name",displayName:"APPLICATION_PROJECT",headerCellFilter:"translate"},{name:"joinAt",displayName:"APPLICATION_ELAPSED_TIME",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'<div><css-timer start-time="row.entity.joinAt"></css-timer></div>',enableSorting:!1,enableColumnMenu:!1,enableFiltering:!1}],data:[],gridMenuTitleFilter:function(a){var b=i.defer();return b.resolve(d.instant(a)),b.promise},onRegisterApi:function(b){a.gridApi=b,a.gridApi.grid.registerDataChangeCallback(function(){n(a.gridApi.core.getVisibleRows(a.gridApi.grid).length)}),a.gridApi.core.on.sortChanged(a,function(a,b){0===b.length?m.order=null:m.order=b[0].name+" "+b[0].sort.direction.toUpperCase(),k()}),a.gridApi.pagination.on.paginationChanged(a,function(a,b){m.offset=(a-1)*b,m.limit=b,k()}),a.gridApi.core.on.filterChanged(a,function(){var a=this.grid;a.columns.forEach(function(a){a.filters[0].term?m[a.name]=a.filters[0].term:delete m[a.name]}),k()})}},k(!0)};var n=function(a){var b=a?30*a+130:270;angular.element(document.getElementsByClassName("ui-grid")[0]).css("height",b+"px"),angular.element(document.getElementsByClassName("ui-grid-viewport")).css("height",30*a+"px")};a.$on("$destroy",function(){e.unsyncUpdates("report_square")})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.square.realtime.view.general",{url:"/general",templateUrl:"app/square/realtime/view/general/general.html",controller:"SquareRealtimeViewGeneralCtrl"})}]),angular.module("xCallyShuttleApp").controller("SquareRealtimeViewCtrl",["$scope",function(a){}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.square.realtime.view",{url:"/view",templateUrl:"app/square/realtime/view/view.html",controller:"SquareRealtimeViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]}])}]}})}]),angular.module("xCallyShuttleApp").controller("SquareRecordingListCtrl",["$scope","SquareRecording","gridOptions","uiGridConstants",function(a,b,c,d){a.SquareRecording=b;a.initView=function(){var e={exporterCsvFilename:"recordings.csv",rowHeight:30,columnDefs:[{name:"uniqueid"},{name:"callerid",displayName:"APPLICATION_CALLERIDNUM"},{name:"filename"},{name:"extension"},{name:"projectName",displayName:"APPLICATION_PROJECT"},{name:"createdAt",displayName:"APPLICATION_DATE",cellFilter:"date:'yyyy-MM-dd HH:mm'",filterHeaderTemplate:'<div class="ui-grid-filter-container row"><div ng-repeat="colFilter in col.filters" class="col-md-6 col-md-offset-0 col-sm-5 col-sm-offset-0 col-xs-5 col-xs-offset-0"><div custom-grid-date-filter-header></div></div></div>',filters:[{name:"From",condition:d.filter.GREATER_THAN_OR_EQUAL,hasTime:!0},{name:"To",condition:d.filter.LESS_THAN_OR_EQUAL,hasTime:!0}],sort:{direction:d.DESC,priority:0}},{name:"audio",displayName:"",width:100,enableSorting:!1,enableFiltering:!1,cellClass:"ui-grid-vcenter",cellTemplate:"<div><audio-file-download data-ng-if=\"row.entity.savePath.split('.').pop() == 'wav'\" params=\"{id:row.entity.id,controller:'stream'}\" resource=\"grid.appScope.SquareRecording\"></audio-file-download><span data-ng-if=\"row.entity.value.split('.').pop() == 'gsm'\" title=\"{{'MESSAGE_GSM_PREVIEW_NOT_SUPPORTED' | translate}}\">{{'MESSAGE_GSM_PREVIEW_NOT_SUPPORTED' | translate}}</span></div>"},{name:"action",width:80,buttons:[{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.filename || row.entity.uniqueid, row.entity.id)"},{directive:"<motion-file-download params=\"{id:row.entity.id,controller:'stream'}\" resource=\"grid.appScope.SquareRecording\" mimetype=\"'audio/'+row.entity.value.split('.').pop()\" btnclass=\"btn btn-xs blue-hoki\" filename=\"(row.entity.filename || row.entity.uniqueid)+'.'+row.entity.savePath.split('.').pop()\"></motion-file-download>"}]}]};a.gridOptions=c.gridOptions(b,e,a)}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.square.recordings.list",{url:"/list",templateUrl:"app/square/recording/list/list.html",controller:"SquareRecordingListCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.square.recordings",{url:"/recordings",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").factory("SquareRecording",["$resource",function(a){return a("/api/square/recordings/:id/:controller",{id:"@id"},{update:{method:"PUT"},patch:{method:"PATCH"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.square",{url:"/square",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:14}}})}]),angular.module("xCallyShuttleApp").factory("Agent",["$resource",function(a){return a("/api/agents/:id/:controller/:controller1/:controller2/:controller3",{id:"@id"},{changePassword:{method:"PUT",params:{controller:"password"}},update:{method:"PUT"},patch:{method:"PATCH"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff.agents",{url:"/agents",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user","agent"],redirectTo:"landing",id:4}}})}]),angular.module("xCallyShuttleApp").controller("AgentListCtrl",["$scope","$timeout","Agent","Auth","gridOptions",function(a,b,c,d,e){a.initView=function(){a.Auth=d;var b={exporterCsvFilename:"agents.csv",columnDefs:[{name:"fullname"},{name:"name",displayName:"APPLICATION_USERNAME"},{name:"internal"},{name:"email"},{name:"description"},{name:"action",width:100,buttons:[{"class":"blue-hoki",href:"/staff/agents/view/{{row.entity.id}}/account",name:"profile"},{"class":"green-meadow",href:"/staff/agents/view/{{row.entity.id}}/queues/voice",name:"queues"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.fullname, row.entity.id)"}]}]};a.gridOptions=e.gridOptions(c,b,a)}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff.agents.list",{url:"/list",templateUrl:"app/staff/agent/list/list.html",controller:"AgentListCtrl",data:{permissions:{only:["admin","user","agent"],redirectTo:"landing",id:4}}})}]),angular.module("xCallyShuttleApp").controller("AgentViewCtrl",["$scope","$http","xAlert","$translate","$stateParams","$cookieStore","Agent","FileUploader","Auth","MailQueue","User","VoiceQueue","ChatQueue","FaxQueue","SmsQueue","OpenChannelQueue","Setting",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){a.Auth=i,a.radioSwitch={isActive:!0,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.recordSwitch={onText:"On",offText:"Off",isActive:!0,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.initVoiceQueues=function(){var a={},b={};return l.get().$promise.then(function(b){return a.queues=_.map(b.rows,function(a){return{name:a.name}}),g.get({id:e.id,controller:"voice",controller2:"queues"}).$promise}).then(function(a){b.queues=_.map(a.rows,function(a){return{name:a.name}})}).then(function(){ComponentsDropdowns.bindAgent(a,b,"voice",e.id,g)})["catch"](function(a){console.error(a)})},a.initChatQueues=function(){var a={},b={};return m.get().$promise.then(function(b){return a.queues=_.map(b.rows,function(a){return{id:a.id,name:a.name}}),g.get({id:e.id,controller:"chat",controller2:"queues"}).$promise}).then(function(a){b.queues=_.map(a.rows,function(a){return{id:a.id,name:a.name}})}).then(function(){ComponentsDropdowns.bindAgent(a,b,"chat",e.id,g)})["catch"](function(a){console.error(a)})},a.initMailQueues=function(){var a={},b={};return j.get().$promise.then(function(b){return a.queues=_.map(b.rows,function(a){return{id:a.id,name:a.name}}),g.get({id:e.id,controller:"mail",controller2:"queues"}).$promise}).then(function(a){b.queues=_.map(a.rows,function(a){return{id:a.id,name:a.name}})}).then(function(){ComponentsDropdowns.bindAgent(a,b,"mail",e.id,g)})["catch"](function(a){console.error(a)})},a.initSmsQueues=function(){var a={},b={};return o.get().$promise.then(function(b){return a.queues=_.map(b.rows,function(a){return{id:a.id,name:a.name}}),g.get({id:e.id,controller:"sms",controller2:"queues"}).$promise}).then(function(a){b.queues=_.map(a.rows,function(a){return{id:a.id,name:a.name}})}).then(function(){ComponentsDropdowns.bindAgent(a,b,"sms",e.id,g)})["catch"](function(a){console.error(a)})},a.initFaxQueues=function(){var a={},b={};return n.get().$promise.then(function(b){return a.queues=_.map(b.rows,function(a){return{id:a.id,name:a.name}}),g.get({id:e.id,controller:"fax",controller2:"queues"}).$promise}).then(function(a){b.queues=_.map(a.rows,function(a){return{id:a.id,name:a.name}})}).then(function(){ComponentsDropdowns.bindAgent(a,b,"fax",e.id,g)})["catch"](function(a){console.error(a)})},a.initOpenchannelQueues=function(){var a={},b={};return p.get().$promise.then(function(b){return a.queues=_.map(b.rows,function(a){return{id:a.id,name:a.name}}),g.get({id:e.id,controller:"openchannel",controller2:"queues"}).$promise}).then(function(a){b.queues=_.map(a.rows,function(a){return{id:a.id,name:a.name}})}).then(function(){ComponentsDropdowns.bindAgent(a,b,"openchannel",e.id,g)})["catch"](function(a){console.error(a)})},a.updatePassword=function(){var b={newPassword:a.agent.newPwd};return i.isAdmin()?b.id=e.id:b.oldPassword=a.agent.currentPwd,k.changePassword(b).$promise.then(function(){c.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){c.error(a)})};var r=a.uploader=new h({url:"api/users/"+e.id+"/avatar",queueLimit:1,withCredentials:!0,headers:{Authorization:"Bearer "+f.get("token")}});r.filters.push({name:"imageFilter",fn:function(a){var b="|"+a.type.slice(a.type.lastIndexOf("/")+1)+"|";return-1!=="|jpg|png|jpeg|".indexOf(b)}}),r.onSuccessItem=function(b,e){a.agent.userpic=e.userpic,a.agent.id===i.getCurrentUser().id&&(i.getCurrentUser().userpic=e.userpic),c.show(d.instant("MESSAGE_WELL_DONE"),"success")},r.onErrorItem=function(){c.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")},r.onCompleteAll=function(){r.clearQueue()},a.initView=function(){return g.get({id:e.id}).$promise.then(function(b){return a.agent=b,a.agent.transport=a.agent.transport?a.agent.transport.split(","):[],a.agent.allow=a.agent.allow?a.agent.allow.split(";"):[],a.agent.nat=a.agent.nat?a.agent.nat.split(","):[],q.get({id:1}).$promise}).then(function(b){a.setting=b})["catch"](function(a){c.error(a)})},a.patchItem=function(){return g.update({id:e.id},{chatCapacity:a.agent.chatCapacity,mailCapacity:a.agent.mailCapacity,faxCapacity:a.agent.faxCapacity,smsCapacity:a.agent.smsCapacity,openchannelCapacity:a.agent.openchannelCapacity}).$promise.then(function(){c.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){c.error(a)})},a.updateItem=function(){var b=angular.copy(a.agent);return delete b.password,delete b.md5secret,b.transport=b.transport.join(","),b.allow=b.allow.join(";"),b.nat=b.nat.join(","),g.update({id:e.id},b).$promise.then(function(){c.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){c.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff.agents.view",{url:"/view/:id",templateUrl:"app/staff/agent/view/view.html",controller:"AgentViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]},data:{permissions:{only:["admin","user","agent"],redirectTo:"landing",id:4}}}).state("main.staff.agents.view.account",{url:"/account",templateUrl:"app/staff/agent/view/view.account.html",data:{permissions:{only:["admin","user","agent"],redirectTo:"landing",id:4}},resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/scripts/jquery.sparkline.min.js","assets/plugins/bootstrap-fileinput/bootstrap-fileinput.js","assets/scripts/profile.js"]})}]}}).state("main.staff.agents.view.voice",{url:"/voice",templateUrl:"app/staff/agent/view/view.voice.html",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:4}}}).state("main.staff.agents.view.chat",{url:"/chat",templateUrl:"app/staff/agent/view/view.chat.html",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:4}}}).state("main.staff.agents.view.mail",{url:"/mail",templateUrl:"app/staff/agent/view/view.mail.html",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:4}}}).state("main.staff.agents.view.fax",{url:"/fax",templateUrl:"app/staff/agent/view/view.fax.html",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:4}}}).state("main.staff.agents.view.sms",{url:"/sms",templateUrl:"app/staff/agent/view/view.sms.html",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:4}}}).state("main.staff.agents.view.openchannel",{url:"/openchannel",templateUrl:"app/staff/agent/view/view.openchannel.html",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:4}}}).state("main.staff.agents.view.motionbar",{url:"/motionbar",templateUrl:"app/staff/agent/view/view.motionbar.html",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:4}}}).state("main.staff.agents.view.queues",{url:"/queues",templateUrl:"app/staff/agent/view/view.queues.html",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:4}},cache:!1,serie:!0,resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/jquery-multi-select/css/multi-select.css","assets/plugins/jquery-multi-select/js/jquery.multi-select.js","assets/plugins/jquery-quicksearch/jquery.quicksearch.js","assets/scripts/components-dropdowns.js"]})}]}}).state("main.staff.agents.view.queues.voice",{url:"/voice",templateUrl:"app/staff/agent/view/view.queues.voice.html",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:7}}}).state("main.staff.agents.view.queues.chat",{url:"/chat",templateUrl:"app/staff/agent/view/view.queues.chat.html",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:8}}}).state("main.staff.agents.view.queues.mail",{url:"/mail",templateUrl:"app/staff/agent/view/view.queues.mail.html",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:9}}}).state("main.staff.agents.view.queues.fax",{url:"/fax",templateUrl:"app/staff/agent/view/view.queues.fax.html",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:10}}}).state("main.staff.agents.view.queues.sms",{url:"/sms",templateUrl:"app/staff/agent/view/view.queues.sms.html",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:11}}}).state("main.staff.agents.view.queues.openchannel",{url:"/openchannel",templateUrl:"app/staff/agent/view/view.queues.openchannel.html",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:20}}})}]),angular.module("xCallyShuttleApp").controller("AgentWizardCtrl",["$scope","$rootScope","$location","$translate","$http","Agent","VoiceQueue","ChatQueue","MailQueue","SmsQueue","FaxQueue","OpenChannelQueue","Setting","xAlert","WizardHandler",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){a.maxAmount=1e3,a._data={voice:{queues:[]},chat:{queues:[]},mail:{queues:[]},sms:{queues:[]},fax:{queues:[]},openchannel:{queues:[]}},a._agent=angular.copy(a._data),a.forms={info:void 0,voice:void 0},a.item={role:"agent",allow:["alaw","ulaw","gsm"],transport:["udp"],context:"from-sip"},a.next=function(){o.wizard().next()},a.getAmount=function(){return m.get({controller:"internal",internal:a.item.minInternal}).$promise.then(function(b){a.item.minInternal=Number(b.value),a.maxAmount=b.range||1e3})["catch"](function(a){n.error(a)})},a.exitValidation=function(a){return a},a.getFirstFreeInternal=function(){return m.get({controller:"internal"}).$promise.then(function(b){return a.internal=b,a.item.internal=b.value,a.item.minInternal=b.value,a.maxAmount=b.range||1e3,m.get({id:1}).$promise}).then(function(b){a.setting=b})["catch"](function(a){n.error(a)})},a.createItem=function(){var b=angular.copy(a.item);return delete b.minInternal,b.transport&&(b.transport=b.transport.join(",")),a.item.allow&&(b.allow=b.allow.join(";")),b.channels=a._agent,f.save(b).$promise.then(function(a){c.path("/staff/agents/view/"+a.id+"/queues/voice")})["catch"](function(a){console.log(a),n.error(a)})},a.createItems=function(){var b=angular.copy(a.item);return delete b.internal,b.transport&&(b.transport=b.transport.join(",")),b.allow&&(b.allow=b.allow.join(";")),f.save({id:"bulk"},b).$promise.then(function(){c.path("/staff/agents/list")})["catch"](function(a){console.log(a),n.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff.agents.wizard",{url:"/wizard",templateUrl:"app/staff/agent/wizard/wizard.html",controller:"AgentWizardCtrl",data:{permissions:{only:["admin"],redirectTo:"main.dashboard.voice"}},resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/jquery-multi-select/css/multi-select.css","assets/plugins/jquery-multi-select/js/jquery.multi-select.js","assets/plugins/jquery-quicksearch/jquery.quicksearch.js","assets/scripts/components-dropdowns.js"]})}]}}).state("main.staff.agents.bulk",{url:"/bulk",templateUrl:"app/staff/agent/wizard/wizard-bulk.html",controller:"AgentWizardCtrl",data:{permissions:{only:["admin"],redirectTo:"main.dashboard.voice"}}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff",{url:"/staff",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("TeamCreateCtrl",["$scope","$uibModalInstance","Team","xAlert",function(a,b,c,d){a.form={},a.item={},a.ok=function(){return c.save(a.item).$promise.then(function(){b.close(a.item)})["catch"](function(a){d.error(a)})},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("TeamListCtrl",["$scope","Team","gridOptions","$uibModal",function(a,b,c,d){a.initView=function(){var d={exporterCsvFilename:"teams.csv",columnDefs:[{name:"name"},{name:"description"},{name:"action",width:100,buttons:[{"class":"{{row.entity.defaultEntry ? 'blue-hoki disabled' : 'blue-hoki'}}",href:"/staff/teams/view/{{row.entity.id}}/settings",name:"profile"},{"class":"{{row.entity.defaultEntry ? 'green-turquoise disabled' : 'green-turquoise'}}",name:"agents",href:"/staff/teams/view/{{row.entity.id}}/agents"},{"class":"{{row.entity.defaultEntry ? 'red-sunglo disabled' : 'red-sunglo'}}",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=c.gridOptions(b,d,a)},a.createItem=function(){d.open({animation:!0,templateUrl:"app/staff/team/list/create.modal.html",controller:"TeamCreateCtrl"}).result.then(function(){a.gridOptions.getPage()})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff.teams.list",{url:"/list",templateUrl:"app/staff/team/list/list.html",controller:"TeamListCtrl"})}]),angular.module("xCallyShuttleApp").factory("Team",["$resource",function(a){return a("/api/teams/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff.teams",{url:"/teams",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin"],redirectTo:"landing"}}})}]),angular.module("xCallyShuttleApp").controller("TeamViewCtrl",["$scope","$http","$stateParams","$translate","Team","Agent","xAlert",function(a,b,c,d,e,f,g){var h=function(){return{select:function(b){return console.log("agents",b),e.save({id:a.team.id,controller:"agents"},{agents:b})},deselect:function(b){return e["delete"]({id:a.team.id,controller:"agents",agents:b})}}};a.initView=function(){return e.get({id:c.id}).$promise.then(function(b){a.team=b})["catch"](function(a){g.error(a)})},a.initAgents=function(){return f.get().$promise.then(function(b){return a.agents=b.rows,e.get({id:c.id,controller:"agents"}).$promise}).then(function(b){ComponentsDropdowns.bindTeam(_.map(b.rows,"id"),_.map(a.agents,function(a){return{id:a.id,name:a.name,fullname:a.fullname,internal:a.internal}}),h)})["catch"](function(a){g.error(a)})},a.updateItem=function(){var b=angular.copy(a.team);return e.update({ +id:c.id},b).$promise.then(function(){g.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){g.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff.teams.view",{url:"/view/:id",templateUrl:"app/staff/team/view/view.html",controller:"TeamViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.staff.teams.view.agents",{url:"/agents",templateUrl:"app/staff/team/view/view.agents.html",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/jquery-multi-select/css/multi-select.css","assets/plugins/jquery-multi-select/js/jquery.multi-select.js","assets/plugins/jquery-quicksearch/jquery.quicksearch.js","assets/scripts/components-dropdowns.js"]}])}]}}).state("main.staff.teams.view.settings",{url:"/settings",templateUrl:"app/staff/team/view/view.settings.html"})}]),angular.module("xCallyShuttleApp").controller("TelephoneListCtrl",["$scope","Telephone","gridOptions",function(a,b,c){a.initView=function(){var d={exporterCsvFilename:"telephones.csv",columnDefs:[{name:"fullname"},{name:"name"},{name:"internal"},{name:"description"},{name:"action",width:75,buttons:[{"class":"blue-hoki",href:"/staff/telephones/view/{{row.entity.id}}/account",name:"profile"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.fullname, row.entity.id)"}]}]};a.gridOptions=c.gridOptions(b,d,a)}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff.telephones.list",{url:"/list",templateUrl:"app/staff/telephone/list/list.html",controller:"TelephoneListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"smart-table",insertBefore:"#ng_load_plugins_before",files:["assets/css/smart_table.css"]}])}]}})}]),angular.module("xCallyShuttleApp").factory("Telephone",["$resource",function(a){return a("/api/telephones/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff.telephones",{url:"/telephones",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin"],redirectTo:"landing"}}})}]),angular.module("xCallyShuttleApp").controller("TelephoneViewCtrl",["$scope","$http","$stateParams","$translate","$cookieStore","Auth","xAlert","Telephone","Setting",function(a,b,c,d,e,f,g,h,i){a.initView=function(){return a.Auth=f,a.forms={},h.get({id:c.id}).$promise.then(function(b){return delete b.password,a.item=b,a.item.transport=a.item.transport?a.item.transport.split(","):[],a.item.allow=a.item.allow?a.item.allow.split(";"):[],i.get({id:1}).$promise}).then(function(b){a.setting=b})["catch"](function(a){g.error(a)})},a.updateItem=function(){var b=angular.copy(a.item);return b.transport=b.transport.join(","),b.allow=b.allow.join(";"),h.update(b).$promise.then(function(){g.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){g.error(a)})},a.updatePassword=function(){return h.update({password:a.item.password}).$promise.then(function(){g.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){g.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff.telephones.view",{url:"/view/:id",templateUrl:"app/staff/telephone/view/view.html",controller:"TelephoneViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.staff.telephones.view.account",{url:"/account",templateUrl:"app/staff/telephone/view/view.account.html",resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css","assets/scripts/jquery.sparkline.min.js","assets/plugins/bootstrap-fileinput/bootstrap-fileinput.js","assets/scripts/profile.js"]})}]}}).state("main.staff.telephones.view.voice",{url:"/voice",templateUrl:"app/staff/telephone/view/view.voice.html",data:{permissions:{only:["admin"],redirectTo:"main.dashboard.voice"}}})}]),angular.module("xCallyShuttleApp").controller("TelephoneWizardCtrl",["$scope","$http","$location","WizardHandler","xAlert","$translate","Telephone","Setting",function(a,b,c,d,e,f,g,h){a.forms={},a.item={allow:["alaw","ulaw","gsm"],transport:["udp"],context:"from-sip"},a.next=function(){d.wizard().next()},a.exitValidation=function(a){return a},a.getFirstFreeInternal=function(){return h.get({controller:"internal"}).$promise.then(function(b){return a.item.internal=b.value,h.get({id:1}).$promise}).then(function(b){a.setting=b})["catch"](function(a){e.error(a)})},a.createItem=function(){var b=angular.copy(a.item);return b.transport&&(b.transport=b.transport.join(",")),a.item.allow&&(b.allow=b.allow.join(";")),g.save(b).$promise.then(function(){c.path("/staff/telephones/list")})["catch"](function(a){e.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff.telephones.wizard",{url:"/wizard",templateUrl:"app/staff/telephone/wizard/wizard.html",controller:"TelephoneWizardCtrl"})}]),angular.module("xCallyShuttleApp").controller("UserListCtrl",["$scope","$timeout","User","Auth","gridOptions",function(a,b,c,d,e){function f(a){if(a){var b=_.words(a),c=_.map(b,function(a){return a?a[0]:""});return c.join("").toUpperCase()}return!1}a.getUserAvatar=function(a,c,d){b(function(){angular.element("#userImg"+a).avatar({useGravatar:!1,initials:d?[]:f(c),fallbackImage:"api/users/avatar/"+d,size:80})})},a.isAdmin=function(a){return"admin"===a},a.initView=function(){var b={exporterCsvFilename:"users.csv",columnDefs:[{name:"fullname"},{name:"name",displayName:"APPLICATION_USERNAME"},{name:"internal"},{name:"email"},{name:"description"},{name:"action",width:100,buttons:[{"class":"blue-hoki",href:"/staff/users/view/{{row.entity.id}}/account",name:"profile"},{"class":"green-meadow",href:"/staff/users/view/{{row.entity.id}}/permit/voice",name:"permits",hide:"grid.appScope.isAdmin(row.entity.role)"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.fullname, row.entity.id)"}]}]};a.gridOptions=e.gridOptions(c,b,a)}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff.users.list",{url:"/list",templateUrl:"app/staff/user/list/list.html",controller:"UserListCtrl"})}]),angular.module("xCallyShuttleApp").factory("Module",["$resource",function(a){return a("/api/modules/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("User",["$resource",function(a){return a("/api/users/:id/:controller/:controller2/:controller3",{id:"@id"},{changePassword:{method:"PUT",params:{controller:"password"}},update:{method:"PUT"},me:{method:"GET",params:{id:"me"}}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff.users",{url:"/users",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin"],redirectTo:"landing"}}})}]),angular.module("xCallyShuttleApp").controller("UserViewCtrl",["$scope","$stateParams","$cookieStore","$translate","FileUploader","User","Auth","xAlert","MailQueue","VoiceQueue","ChatQueue","FaxQueue","SmsQueue","OpenChannelQueue","Team","Module","Setting",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){function r(a,b){var c,d,e=b.length;for(c=0;e>c;c++){if(b[c].id===a)return b[c];if(b[c].SubModules&&b[c].SubModules.length&&(d=r(a,b[c].SubModules)))return d}}function s(b){var c=r(b.ModuleId,a.modules);if(b.status===!0)c.status=!0;else{var d=_.filter(c.SubModules,{status:!0});d.length||(c.status=!1)}c.ModuleId&&s(c)}function t(a,b){a.forEach(function(a){a.status=b,a.SubModules&&a.SubModules.length&&t(a.SubModules,b)})}function u(a,b){b.forEach(function(b){_.find(a,{id:b.id})?b.status=!0:b.status=!1,b.SubModules&&b.SubModules.length&&u(a,b.SubModules)})}function v(a,b){return a=_.union(a,_.map(_.filter(b,{status:!0}),"id")),b.forEach(function(b){b.SubModules&&b.SubModules.length&&(a=_.union(a,v(a,b.SubModules)))}),a}a.Auth=g,a._=_,a.moduleSwitch={onText:"On",offText:"Off",isActive:!0,size:"mini",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.initVoiceQueues=function(){var a={},c={};return j.get().$promise.then(function(c){return a.queues=_.map(c.rows,function(a){return{name:a.name}}),f.query({id:b.id,controller:"allowed",controller2:"voice",controller3:"queues"}).$promise}).then(function(a){c.queues=_.map(a,function(a){return{name:a.name}})}).then(function(){ComponentsDropdowns.bindPermit(a,c,"voice",b.id,f)})["catch"](function(a){console.error(a)})},a.initChatQueues=function(){var a={},c={};return k.get().$promise.then(function(c){return a.queues=_.map(c.rows,function(a){return{id:a.id,name:a.name}}),f.query({id:b.id,controller:"allowed",controller2:"chat",controller3:"queues"}).$promise}).then(function(a){c.queues=_.map(a,function(a){return{id:a.id,name:a.name}})}).then(function(){ComponentsDropdowns.bindPermit(a,c,"chat",b.id,f)})["catch"](function(a){console.error(a)})},a.initMailQueues=function(){var a={},c={};return i.get().$promise.then(function(c){return a.queues=_.map(c.rows,function(a){return{id:a.id,name:a.name}}),f.query({id:b.id,controller:"allowed",controller2:"mail",controller3:"queues"}).$promise}).then(function(a){c.queues=_.map(a,function(a){return{id:a.id,name:a.name}})}).then(function(){ComponentsDropdowns.bindPermit(a,c,"mail",b.id,f)})["catch"](function(a){console.error(a)})},a.initSmsQueues=function(){var a={},c={};return m.get().$promise.then(function(c){return a.queues=_.map(c.rows,function(a){return{id:a.id,name:a.name}}),f.query({id:b.id,controller:"allowed",controller2:"sms",controller3:"queues"}).$promise}).then(function(a){c.queues=_.map(a,function(a){return{id:a.id,name:a.name}})}).then(function(){ComponentsDropdowns.bindPermit(a,c,"sms",b.id,f)})["catch"](function(a){console.error(a)})},a.initFaxQueues=function(){var a={},c={};return l.get().$promise.then(function(c){return a.queues=_.map(c.rows,function(a){return{id:a.id,name:a.name}}),f.query({id:b.id,controller:"allowed",controller2:"fax",controller3:"queues"}).$promise}).then(function(a){c.queues=_.map(a,function(a){return{id:a.id,name:a.name}})}).then(function(){ComponentsDropdowns.bindPermit(a,c,"fax",b.id,f)})["catch"](function(a){console.error(a)})},a.initOpenchannelQueues=function(){var a={},c={};return n.get().$promise.then(function(c){return a.queues=_.map(c.rows,function(a){return{id:a.id,name:a.name}}),f.query({id:b.id,controller:"allowed",controller2:"openchannel",controller3:"queues"}).$promise}).then(function(a){c.queues=_.map(a,function(a){return{id:a.id,name:a.name}})}).then(function(){ComponentsDropdowns.bindPermit(a,c,"openchannel",b.id,f)})["catch"](function(a){console.error(a)})},a.initView=function(){return f.get({id:b.id}).$promise.then(function(b){return a.user=b,a.user.transport=a.user.transport?a.user.transport.split(","):[],a.user.allow=a.user.allow?a.user.allow.split(";"):[],q.get({id:1}).$promise}).then(function(b){a.setting=b})["catch"](function(a){h.error(a)})},a.updateItem=function(){var c=angular.copy(a.user);return delete c.password,delete c.md5secret,c.transport=c.transport.join(","),c.allow=c.allow.join(";"),f.update({id:b.id},c).$promise.then(function(){h.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){h.error(a)})},a.updatePassword=function(){var c={newPassword:a.user.newPwd};return g.isAdmin()?c.id=b.id:c.oldPassword=a.user.currentPwd,f.changePassword(c).$promise.then(function(){h.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){h.error(a)})};var w=a.uploader=new e({url:"api/users/"+b.id+"/avatar",queueLimit:1,withCredentials:!0,headers:{Authorization:"Bearer "+c.get("token")}});w.filters.push({name:"imageFilter",fn:function(a){var b="|"+a.type.slice(a.type.lastIndexOf("/")+1)+"|";return-1!=="|jpg|png|jpeg|".indexOf(b)}}),a.getModules=function(){return a.associatedModules=[],p.get().$promise.then(function(c){return a.modules=_.filter(c.rows,function(a){return!a.ModuleId}),f.query({id:b.id,controller:"allowed",controller2:"modules"}).$promise}).then(function(b){u(b,a.modules)})["catch"](function(a){h.error(a)})},a.updatePermissions=function(c){c.ModuleId&&s(c),c.SubModules&&c.SubModules.length&&t(c.SubModules,c.status);var e=v([],a.modules);return f.save({id:b.id,controller:"allowed",controller2:"modules"},{modules:e}).$promise.then(function(){h.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){h.error(a)})},w.onSuccessItem=function(b,c){a.user.userpic=c.userpic,a.user.id===g.getCurrentUser().id&&(g.getCurrentUser().userpic=c.userpic),h.show(d.instant("MESSAGE_WELL_DONE"),"success")},w.onErrorItem=function(){h.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")},w.onCompleteAll=function(){w.clearQueue()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff.users.view",{url:"/view/:id",templateUrl:"app/staff/user/view/view.html",controller:"UserViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.staff.users.view.account",{url:"/account",templateUrl:"app/staff/user/view/view.account.html",resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css","assets/scripts/jquery.sparkline.min.js","assets/plugins/bootstrap-fileinput/bootstrap-fileinput.js","assets/scripts/profile.js"]})}]}}).state("main.staff.users.view.voice",{url:"/voice",templateUrl:"app/staff/user/view/view.voice.html",data:{permissions:{only:["admin"],redirectTo:"main.dashboard.voice"}}}).state("main.staff.users.view.permit",{url:"/permit",templateUrl:"app/staff/user/view/view.permit.html",data:{permissions:{only:["admin"],redirectTo:"main.dashboard.voice"}},cache:!1,serie:!0,resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/jquery-multi-select/css/multi-select.css","assets/plugins/jquery-multi-select/js/jquery.multi-select.js","assets/plugins/jquery-quicksearch/jquery.quicksearch.js","assets/scripts/components-dropdowns.js"]})}]}}).state("main.staff.users.view.permit.voice",{url:"/voice",templateUrl:"app/staff/user/view/view.permit.voice.html",data:{permissions:{only:["admin"],redirectTo:"main.dashboard.voice"}}}).state("main.staff.users.view.permit.chat",{url:"/chat",templateUrl:"app/staff/user/view/view.permit.chat.html",data:{permissions:{only:["admin"],redirectTo:"main.dashboard.chat"}}}).state("main.staff.users.view.permit.mail",{url:"/mail",templateUrl:"app/staff/user/view/view.permit.mail.html",data:{permissions:{only:["admin"],redirectTo:"main.dashboard.mail"}}}).state("main.staff.users.view.permit.fax",{url:"/fax",templateUrl:"app/staff/user/view/view.permit.fax.html",data:{permissions:{only:["admin"],redirectTo:"main.dashboard.fax"}}}).state("main.staff.users.view.permit.sms",{url:"/sms",templateUrl:"app/staff/user/view/view.permit.sms.html",data:{permissions:{only:["admin"],redirectTo:"main.dashboard.sms"}}}).state("main.staff.users.view.permit.openchannel",{url:"/openchannel",templateUrl:"app/staff/user/view/view.permit.openchannel.html",data:{permissions:{only:["admin"],redirectTo:"main.dashboard.openchannel"}}}).state("main.staff.users.view.permit.modules",{url:"/modules",templateUrl:"app/staff/user/view/view.permit.modules.html",data:{permissions:{only:["admin"],redirectTo:"main.dashboard.voice"}}})}]),angular.module("xCallyShuttleApp").controller("UserWizardCtrl",["$scope","$location","WizardHandler","xAlert","$translate","User","Setting","Auth",function(a,b,c,d,e,f,g,h){a.initWizard=function(){return a.Auht=h,a.forms={info:void 0,voice:void 0},a.item={role:"user",host:"dynamic",context:"from-sip"},g.get({controller:"internal"}).$promise.then(function(b){return a.item.internal=b.value,g.get({id:1}).$promise}).then(function(b){a.setting=b})["catch"](function(a){d.error(a)})},a.next=function(){c.wizard().next()},a.exitValidation=function(a){return a},a.createItem=function(){return f.save(a.item).$promise.then(function(a){b.path("user"===a.role?"/staff/users/view/"+a.id+"/permit/voice":"/staff/users/view/"+a.id+"/account")})["catch"](function(a){d.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff.users.wizard",{url:"/wizard",templateUrl:"app/staff/user/wizard/wizard.html",controller:"UserWizardCtrl"})}]),angular.module("xCallyShuttleApp").controller("SugarcrmListCtrl",["$scope","SugarcrmAccount","gridOptions","xAlert","$translate","Modal",function(a,b,c,d,e,f){a.initView=function(){var d={exporterCsvFilename:"sugarcrm_account.csv",columnDefs:[{name:"name",displayName:"APPLICATION_NAME"},{name:"username"},{name:"remoteUri",displayName:"APPLICATION_REMOTE_ADDRESS"},{name:"action",width:250,buttons:[{"class":"blue-hoki",href:"/sugarcrm/view/{{row.entity.id}}/account",name:"profile"},{"class":"green-jungle",name:"check",onClick:"grid.appScope.checkAccount(row.entity.id)"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=c.gridOptions(b,d,a)},a.checkAccount=function(a){return b.get({id:a,controller:"check"}).$promise.then(function(){d.show(e.instant("MESSAGE_ACCOUNT_VERIFIED"),"success")})["catch"](function(a){d.show(e.instant("MESSAGE_ACCOUNT_INVALID"),"danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.sugarcrm.list",{url:"/list",templateUrl:"app/sugarcrm/list/list.html",controller:"SugarcrmListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"smart-table",insertBefore:"#ng_load_plugins_before",files:["assets/css/smart_table.css"]}])}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.sugarcrm",{url:"/sugarcrm",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin"],redirectTo:"main.dashboard.voice"}}})}]),angular.module("xCallyShuttleApp").factory("SugarcrmAccount",["$resource",function(a){return a("/api/sugarcrm/accounts/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("SugarcrmConfiguration",["$resource",function(a){return a("/api/sugarcrm/configurations/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("SugarcrmField",["$resource",function(a){return a("/api/sugarcrm/fields/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("SugarcrmViewCtrl",["$scope","$http","$stateParams","$translate","$location","$filter","WizardHandler","socket","xAlert","Modal",function(a,b,c,d,e,f,g,h,i,j){a.$stateParams=c,a.config={autoHideScrollbar:!1,theme:"dark",advanced:{updateOnContentResize:!0},setHeight:500,scrollInertia:0},a.initConfiguration=function(){a.formsConfiguration={},a.configuration={}},a.goNext=function(){g.wizard().next()},a.formValidation=function(a){return a},a.$on("$destroy",function(){h.unsyncUpdates("sugarcrm_configuration"),h.unsyncUpdates("sugarcrm_field")}),a.initView=function(){b.get("/api/sugarcrm/accounts/"+c.id).success(function(b){a.account=b}).error(function(a){i.error(a)})},a.updateItem=function(){b.put("/api/sugarcrm/accounts/"+c.id,a.account).success(function(){i.show(d.instant("MESSAGE_WELL_DONE")+".","success")}).error(function(){i.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG")+".","danger")})},a.getConfigurations=function(){b.get("/api/sugarcrm/configurations",{params:{AccountId:c.id}}).success(function(b){a.configurations=b,h.socket.on("sugarcrm_configuration:remove",function(b){_.remove(a.configurations,{id:b.id})})}).error(function(a){i.error(a)})},a.deleteConfiguration=j.confirm["delete"](function(a){b["delete"]("api/sugarcrm/configurations/"+a).success(function(){i.show(d.instant("MESSAGE_WELL_DONE"),"success")}).error(function(){i.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})}),a.createConfiguration=function(){a.configuration.AccountId=c.id,b.post("api/sugarcrm/configurations",a.configuration).success(function(a){e.path("sugarcrm/view/"+c.id+"/configurations/settings/"+a.id)}).error(function(){i.show("Something went wrong!","danger")})},a.fieldType=["string","variable"],a.descFieldType=["string","key_value"],a.getFields=function(){b.get("/api/sugarcrm/accounts/"+c.id+"/fields").success(function(b){a.accountFields=_.sortByOrder(f("sugarcrm")(_.toArray(b)),"name","asc"),_.forEach(b,function(a){a.options=_.toArray(a.options)})}).error(function(a){i.error(a)})},a.getConfiguration=function(){b.get("/api/sugarcrm/configurations/"+c.configurationId).success(function(b){a.configurationName=b.name,a.subjectConfig=b.Subject,a.descriptionConfig=b.Description,a.fieldConfig=b.Field,h.socket.on("sugarcrm_field:remove",function(b){_.remove(a.subjectConfig,{id:b.id}),_.remove(a.descriptionConfig,{id:b.id}),_.remove(a.fieldConfig,{id:b.id})})}).error(function(a){i.error(a)})},a.getVariables=function(){b.get("/api/variables").success(function(b){a.variables=b.rows}).error(function(a){i.error(a)})},a.removeItem=function(a){b["delete"]("api/sugarcrm/fields/"+a.id).success(function(){i.show(d.instant("MESSAGE_WELL_DONE"),"success")}).error(function(){i.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},a.addItemSubject=function(){var d={type:"string",content:""};b.post("/api/sugarcrm/configurations/"+c.configurationId+"/subject",d).success(function(b){a.subjectConfig.push(b)}).error(function(){i.show("Something went wrong!","danger")})},a.addItemDescription=function(){var d={type:"string",content:""};b.post("/api/sugarcrm/configurations/"+c.configurationId+"/description",d).success(function(b){a.descriptionConfig.push(b)}).error(function(){i.show("Something went wrong!","danger")})},a.addItemField=function(){var d={content:""};b.post("/api/sugarcrm/configurations/"+c.configurationId+"/field",d).success(function(b){a.fieldConfig.push(b)}).error(function(){i.show("Something went wrong!","danger")})},a.updateField=function(a){b.put("/api/sugarcrm/fields/"+a.id,a).success(function(){}).error(function(){i.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG")+".","danger")})},a.changeType=function(b){"variable"===b.type?b.content="":"string"===b.type&&(b.VariableId=null),a.updateField(b)},a.changeDescType=function(b){"key_value"===b.type?(b.content="","string"===b.keyType?b.VariableId=null:"variable"===b.keyType&&(b.keyContent="")):"string"===b.type&&(b.VariableId=null,b.key="",b.keyContent=""),a.updateField(b)},a.changeFieldType=function(b){b.content="",a.updateField(b)},a.getSystemFieldOptions=function(b){if(b){var c=_.find(a.accountFields,"name",b);return c?c.options.length>0?c.options:null:void 0}}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.sugarcrm.view",{url:"/view/:id",templateUrl:"app/sugarcrm/view/view.html",controller:"SugarcrmViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.sugarcrm.view.account",{url:"/account",templateUrl:"app/sugarcrm/view/view.account.html"}).state("main.sugarcrm.view.configurations",{url:"/configurations",templateUrl:"app/sugarcrm/view/view.configurations.html"}).state("main.sugarcrm.view.configurations.settings",{url:"/settings/:configurationId",templateUrl:"app/sugarcrm/view/view.configurationSettings.html",controller:"SugarcrmViewCtrl"}).state("main.sugarcrm.view.configuration",{url:"/configuration",templateUrl:"app/sugarcrm/view/view.configuration.html"})}]),angular.module("xCallyShuttleApp").controller("SugarcrmkWizardCtrl",["$scope","$http","$location","$translate","xAlert","WizardHandler",function(a,b,c,d,e,f){a.translate=d,a.initWizard=function(){a.$translate=d,a.forms={},a.item={}},a.next=function(){f.wizard().next()},a.exitValidation=function(a){return a},a.createItem=function(){b.post("api/sugarcrm/accounts",a.item).success(function(){e.show(d.instant("MESSAGE_WELL_DONE")+".","success"),c.path("/sugarcrm/list")}).error(function(){e.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG")+".","danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.sugarcrm.wizard",{url:"/wizard",templateUrl:"app/sugarcrm/wizard/wizard.html",controller:"SugarcrmkWizardCtrl"})}]),angular.module("xCallyShuttleApp").factory("CannedAnswer",["$resource",function(a){return a("/api/answers/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.answers",{url:"/answers",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:58}}})}]),angular.module("xCallyShuttleApp").controller("AnswerListCtrl",["$scope","$uibModal","CannedAnswer","gridOptions",function(a,b,c,d){a.initView=function(){var b={exporterCsvFilename:"answers.csv",columnDefs:[{name:"key",displayName:"APPLICATION_NAME"},{name:"value"},{name:"description"},{name:"action",width:75,buttons:[{"class":"blue-hoki",href:"/tools/answers/view/{{row.entity.id}}/settings",name:"settings"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.key, row.entity.id)"}]}]};a.gridOptions=d.gridOptions(c,b,a)},a.createItem=function(){b.open({animation:!0,templateUrl:"app/tools/answer/list/list.create.modal.html",controller:"AnswerListCreateCtrl"}).result.then(function(b){a.gridOptions.getPage()})}}]),angular.module("xCallyShuttleApp").controller("AnswerListCreateCtrl",["$scope","$translate","$uibModalInstance","CannedAnswer","xAlert",function(a,b,c,d,e){a.form={},a.item={},a.save=function(){return d.save(a.item).$promise.then(function(a){e.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)})["catch"](function(a){e.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.answers.list",{url:"/list",templateUrl:"app/tools/answer/list/list.html",controller:"AnswerListCtrl"})}]),angular.module("xCallyShuttleApp").controller("AnswerViewCtrl",["$scope","$http","xAlert","$translate","$stateParams","$location","CannedAnswer",function(a,b,c,d,e,f,g){a.getAnswer=function(){return g.get({id:e.id}).$promise.then(function(b){a.answer=b})["catch"](function(a){c.error(a)})},a.updateAnswer=function(){var b=angular.copy(a.answer);return g.update({id:e.id},b).$promise.then(function(){c.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){c.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.answers.view",{url:"/view/:id",templateUrl:"app/tools/answer/view/view.html",controller:"AnswerViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.tools.answers.view.settings",{url:"/settings",templateUrl:"app/tools/answer/view/view.settings.html"})}]),angular.module("xCallyShuttleApp").factory("Automation",["$resource",function(a){return a("/api/automations/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.automations",{url:"/automations",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:51}}})}]),angular.module("xCallyShuttleApp").controller("AutomationListCtrl",["$scope","$http","$translate","xAlert","Automation","gridOptions",function(a,b,c,d,e,f){a.onText="On",a.offText="Off",a.isActive=!0,a.size="mini",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.initView=function(){var b={exporterCsvFilename:"Automations.csv",columnDefs:[{name:"name"},{name:"description"},{name:"channel"},{name:"status",cellTemplate:'<div class="centered-uigrid-td"><input data-ng-change="grid.appScope.updateItem(row.entity)", bs-switch ng-model="row.entity.status" type="checkbox" switch-active="{{ grid.appScope.isActive }}" switch-on-text="{{ grid.appScope.onText }}" switch-off-text="{{ grid.appScope.offText }}" switch-on-color="{{ grid.appScope.onColor }}" switch-off-color="{{ grid.appScope.offColor }}" switch-animate="{{ grid.appScope.animate }}" switch-size="{{ grid.appScope.size }}" switch-label="{{ grid.appScope.label }}" switch-icon="{{ grid.appScope.icon }}" switch-radio-off="{{ grid.appScope.radioOff }}" switch-label-width="{{ grid.appScope.labelWidth }}" switch-handle-width="{{ grid.appScope.handleWidth }}"></div>',width:100,enableFiltering:!1},{name:"action",width:75,buttons:[{"class":"blue-hoki",href:"/tools/automations/view/{{row.entity.id}}/settings",name:"settings"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=f.gridOptions(e,b,a)},a.updateItem=function(a){return e.update({id:a.id},a).$promise.then(function(){d.show(c.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){console.error(a),d.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.automations.list",{url:"/list",templateUrl:"app/tools/automation/list/list.html",controller:"AutomationListCtrl"})}]),angular.module("xCallyShuttleApp").controller("AutomationViewCtrl",["$scope","$stateParams","$http","$translate","xAlert","automations","Automation","$location",function(a,b,c,d,e,f,g,h){a.$automations=f,a.recordSwitch={onText:"On",offText:"Off",isActive:!0,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.forms={general:{}},a.addCondition=function(b){a.automation[b].push({field:"",operator:"",value:""})},a.removeCondition=function(b,c){a.automation[b].splice(c,1)},a.addAction=function(){a.automation.Actions.push({action:"",data1:"",data2:"",data3:"",data4:"",data5:""})},a.resetActionData=function(a){a.data1="",a.data2="",a.data3="",a.data4="",a.data5=""},a.removeAction=function(b){a.automation.Actions.splice(b,1)},a.initView=function(){return g.get({id:b.id}).$promise.then(function(b){a.automation=b})["catch"](function(a){e.error(a),h.path("/tools/automations/list")})},a.updateAutomation=function(){return g.update({id:b.id},a.automation).$promise.then(function(){e.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){console.error(a),e.error(a)})},a.exitValidation=function(b){return console.log(b&&(a.automation.All.length||a.automation.Any.length)&&a.automation.Actions.length),!(!b||!a.automation.All.length&&!a.automation.Any.length||!a.automation.Actions.length)}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.automations.view",{url:"/view/:id",templateUrl:"app/tools/automation/view/view.html",controller:"AutomationViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]})}]}}).state("main.tools.automations.view.settings",{url:"/settings",templateUrl:"app/tools/automation/view/view.settings.html"}).state("main.tools.automations.view.routes",{url:"/routes",templateUrl:"app/tools/automation/view/view.routes.html" +}).state("main.tools.automations.view.application",{url:"/application",templateUrl:"app/tools/automation/view/view.application.html"})}]),angular.module("xCallyShuttleApp").controller("AutomationWizardCtrl",["$scope","$http","$location","xAlert","automations","WizardHandler","Automation",function(a,b,c,d,e,f,g){a.$automations=e,a.statusSwitch={onText:"On",offText:"Off",isActive:!0,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.tempData={voice:{},mail:{},chat:{},fax:{}},a.item={All:[],Any:[],Actions:[]},a.forms={general:void 0,settings:void 0},a.addCondition=function(b){a.item[b].push({field:"",operator:"",value:""})},a.removeCondition=function(b,c){a.item[b].splice(c,1)},a.addAction=function(){a.item.Actions.push({action:"",data1:"",data2:"",data3:"",data4:"",data5:""})},a.resetActionData=function(a){a.data1="",a.data2="",a.data3="",a.data4="",a.data5=""},a.removeAction=function(b){a.item.Actions.splice(b,1)},a.$watch("item.channel",function(b,c){c&&(a.tempData[c].All=_.clone(a.item.All,!0),a.tempData[c].Any=_.clone(a.item.Any,!0),a.tempData[c].Actions=_.clone(a.item.Actions,!0)),a.item.All=a.tempData[b].All?a.tempData[b].All:[],a.item.Any=a.tempData[b].Any?a.tempData[b].Any:[],a.item.Actions=a.tempData[b].Actions?a.tempData[b].Actions:[]},!0),a.item.channel="mail",a.createItem=function(){return g.save(a.item).$promise.then(function(){c.path("/tools/automations/list")})["catch"](function(a){console.error(a),d.error(a)})},a.next=function(){f.wizard().next()},a.previous=function(){f.wizard().previous()},a.exitValidation=function(a){return a},a.exitSettingsValidation=function(b){return!(!b||!a.item.All.length&&!a.item.Any.length||!a.item.Actions.length)}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.automations.wizard",{url:"/wizard",templateUrl:"app/tools/automation/wizard/wizard.html",controller:"AutomationWizardCtrl"})}]),angular.module("xCallyShuttleApp").factory("Interval",["$resource",function(a){return a("/api/intervals/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.intervals",{url:"/intervals",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:53}}})}]),angular.module("xCallyShuttleApp").controller("IntervalListCtrl",["$scope","$uibModal","Interval","gridOptions",function(a,b,c,d){a.initView=function(){var b={exporterCsvFilename:"intervals.csv",columnDefs:[{name:"name"},{name:"description"},{name:"action",width:75,buttons:[{"class":"blue-hoki",href:"/tools/intervals/view/{{row.entity.id}}/settings",name:"settings"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=d.gridOptions(c,b,a)},a.createItem=function(){var c=b.open({animation:!0,templateUrl:"app/tools/interval/list/list.create.modal.html",controller:"IntervalListCreateCtrl"});c.result.then(function(b){console.log(b),a.gridOptions.getPage()})}}]),angular.module("xCallyShuttleApp").controller("IntervalListCreateCtrl",["$scope","$translate","$uibModalInstance","Interval","xAlert",function(a,b,c,d,e){a.form={},a.item={},a.save=function(){return d.save(a.item).$promise.then(function(a){e.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)})["catch"](function(a){e.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.intervals.list",{url:"/list",templateUrl:"app/tools/interval/list/list.html",controller:"IntervalListCtrl"})}]),angular.module("xCallyShuttleApp").controller("IntervalViewCtrl",["$scope","$http","xAlert","$translate","$stateParams","socket","$location","WizardHandler","Modal","interval",function(a,b,c,d,e,f,g,h,i,j){function k(b){var c,d,e,f;c=b.t_from&&b.t_to&&!b.alwaysTime?moment(b.t_from).format("HH:mm")+"-"+moment(b.t_to).format("HH:mm"):"*",b.wd_from&&"always"!==b.wd_from?(d=b.wd_from,b.wd_to&&"always"!==b.wd_to&&(d+="-"+b.wd_to)):d="*",b.md_from&&"always"!==b.md_from?(e=b.md_from,b.md_to&&"always"!==b.md_to&&(e+="-"+b.md_to)):e="*",b.m_from&&"always"!==b.m_from?(f=b.m_from,b.m_to&&"always"!==b.m_to&&(f+="-"+b.m_to)):f="*",void 0!==a.selectedSubInterval?a.interval.SubIntervals[a.selectedSubInterval].interval=c+","+d+","+e+","+f:a.subinterval.interval=c+","+d+","+e+","+f}a.$translate=d,a.$interval=j.interval,a.selectedSubInterval=void 0,a["switch"]={isActive:!0,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.gridOptions={columnDefs:[{name:"name",displayName:"APPLICATION_NAME",headerCellFilter:"translate"},{name:"interval",displayName:"APPLICATION_INTERVAL",headerCellFilter:"translate"},{name:"action",displayName:"APPLICATION_ACTION",headerCellFilter:"translate",width:125,cellTemplate:'<a class="btn btn-xs blue-hoki" data-ng-click="grid.appScope.openSubInterval(grid.appScope.gridOptions.data.indexOf(row.entity))">{{\'APPLICATION_SETTINGS\' | translate}}</a><a class="btn btn-xs red-sunglo" data-ng-click="grid.appScope.deleteSubInterval(row.entity.name+\' interval\', grid.appScope.gridOptions.data.indexOf(row.entity))">{{\'APPLICATION_DELETE\' | translate}}</a>'}]},a.forms={subinterval:void 0,general:void 0},a.initSubInterval=function(b){b&&(a.selectedSubInterval=void 0),a.subinterval={},a.splittedInterval={t_from:moment(new Date),t_to:moment(new Date),wd_from:"always",wd_to:"always",md_from:"always",md_to:"always",m_from:"always",m_to:"always",alwaysTime:!0}},a.next=function(){h.wizard().next()},a.previous=function(){h.wizard().previous()},a.exitValidation=function(a){return a},a.deselectAndRedirect=function(b){a.selectedSubInterval=void 0,g.path(b)},a.getInterval=function(){b.get("/api/intervals/"+e.id).success(function(b){a.interval=b,a.gridOptions.data=b.SubIntervals}).error(function(a){console.error(a),g.path("/tools/intervals/list")})},a.openSubInterval=function(b){a.selectedSubInterval=b,g.path("/tools/intervals/view/"+e.id+"/subintervals/settings")},a.updateInterval=function(f){a.selectedSubInterval=void 0,b.put("/api/intervals/"+e.id,a.interval).success(function(){a.getInterval(),c.show(d.instant("MESSAGE_WELL_DONE")+"!","success"),f&&g.path("/tools/intervals/view/"+e.id+"/"+f)}).error(function(a){c.error(a)})},a.getSubInterval=function(){void 0===a.selectedSubInterval&&g.path("/tools/intervals/list"),a.splittedInterval={t_from:moment(new Date),t_to:moment(new Date)};var b,c=a.interval.SubIntervals[a.selectedSubInterval]?a.interval.SubIntervals[a.selectedSubInterval].interval.split(","):["*","*","*","*"];c.forEach(function(c,d){switch(d){case 0:"*"!==c?(b=c.split("-"),a.splittedInterval.t_from=moment(b[0],"HH:mm"),a.splittedInterval.t_to=moment(b[1],"HH:mm"),a.splittedInterval.alwaysTime=!1):(a.splittedInterval.t_from=moment(new Date),a.splittedInterval.t_to=moment(new Date),a.splittedInterval.alwaysTime=!0);break;case 1:"*"!==c?(b=c.split("-"),a.splittedInterval.wd_from=b[0],a.splittedInterval.wd_to=b[1]?b[1]:"always"):(a.splittedInterval.wd_from="always",a.splittedInterval.wd_to="always");break;case 2:"*"!==c?(b=c.split("-"),a.splittedInterval.md_from=b[0],a.splittedInterval.md_to=b[1]?b[1]:"always"):(a.splittedInterval.md_from="always",a.splittedInterval.md_to="always");break;case 3:"*"!==c?(b=c.split("-"),a.splittedInterval.m_from=b[0],a.splittedInterval.m_to=b[1]?b[1]:"always"):(a.splittedInterval.m_from="always",a.splittedInterval.m_to="always")}})},a.$watch("splittedInterval",function(a){a&&k(a)},!0),a.addSubInterval=function(){a.interval.SubIntervals.push(a.subinterval),a.updateInterval("subintervals")},a.deleteSubInterval=i.confirm["delete"](function(b){a.interval.SubIntervals.splice(b,1),a.updateInterval()})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.intervals.view",{url:"/view/:id",templateUrl:"app/tools/interval/view/view.html",controller:"IntervalViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.tools.intervals.view.settings",{url:"/settings",templateUrl:"app/tools/interval/view/view.settings.html"}).state("main.tools.intervals.view.subintervals",{url:"/subintervals",templateUrl:"app/tools/interval/view/view.subintervals.html"}).state("main.tools.intervals.view.subinterval",{url:"/subinterval",templateUrl:"app/tools/interval/view/view.subinterval.html"}).state("main.tools.intervals.view.subintervals.settings",{url:"/settings",templateUrl:"app/tools/interval/view/view.subintervalSettings.html"})}]),angular.module("xCallyShuttleApp").controller("PauseListCtrl",["$scope","$log","$uibModal","$translate","Pause","gridOptions",function(a,b,c,d,e,f){a.initView=function(){var b={exporterCsvFilename:"pauses.csv",columnDefs:[{name:"name"},{name:"description"},{name:"action",width:75,buttons:[{"class":"blue-hoki",href:"/tools/pauses/view/{{row.entity.id}}/settings",name:"settings"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=f.gridOptions(e,b,a)},a.createItem=function(){var b=c.open({animation:!0,templateUrl:"app/tools/pause/list/list.create.modal.html",controller:"PauseListCreateCtrl"});b.result.then(function(b){console.log(b),a.gridOptions.getPage()})}}]),angular.module("xCallyShuttleApp").controller("PauseListCreateCtrl",["$scope","$translate","$uibModalInstance","Pause","xAlert",function(a,b,c,d,e){a.form={},a.item={},a.save=function(){return d.save(a.item).$promise.then(function(a){e.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)})["catch"](function(a){e.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.pauses.list",{url:"/list",templateUrl:"app/tools/pause/list/list.html",controller:"PauseListCtrl"})}]),angular.module("xCallyShuttleApp").factory("Pause",["$resource",function(a){return a("/api/pauses/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.pauses",{url:"/pauses",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:57}}})}]),angular.module("xCallyShuttleApp").controller("PauseViewCtrl",["$scope","$http","xAlert","$translate","$stateParams","$location","Pause",function(a,b,c,d,e,f,g){a.getPause=function(){return g.get({id:e.id}).$promise.then(function(b){a.pause=b})["catch"](function(a){c.error(a)})},a.updatePause=function(){var b=angular.copy(a.pause);return g.update({id:e.id},b).$promise.then(function(){c.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){c.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.pauses.view",{url:"/view/:id",templateUrl:"app/tools/pause/view/view.html",controller:"PauseViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.tools.pauses.view.settings",{url:"/settings",templateUrl:"app/tools/pause/view/view.settings.html"})}]),angular.module("xCallyShuttleApp").controller("SchedulerListCtrl",["$scope","Scheduler","gridOptions","xAlert","$translate","socket",function(a,b,c,d,e,f){a._=_,a.switches={isActive:!0,size:"mini",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.scheduleTypes=[{name:"APPLICATION_REPORT_EXTRACTION",value:"report"},{name:"APPLICATION_HISTORY_MOVE",value:"history"},{name:"APPLICATION_DB_BACKUP",value:"backup"}],a.initView=function(){var d={exporterCsvFilename:"Schedules.csv",columnDefs:[{name:"name"},{name:"type",cellTemplate:'<div class="centered-uigrid-td">{{grid.appScope._.find(grid.appScope.scheduleTypes,{value:row.entity.type}).name | translate}}</div>'},{name:"description"},{name:"active",cellTemplate:'<div class="centered-uigrid-td"><input data-ng-change="grid.appScope.updateItem(row.entity)", bs-switch ng-model="row.entity.active" type="checkbox" switch-active="{{ grid.appScope.switches.isActive }}" switch-on-text="{{ \'APPLICATION_YES\' | translate }}" switch-off-text="{{ \'APPLICATION_NO\' | translate }}" switch-on-color="{{ grid.appScope.switches.onColor }}" switch-off-color="{{ grid.appScope.switches.offColor }}" switch-animate="{{ grid.appScope.switches.animate }}" switch-size="{{ grid.appScope.switches.size }}" switch-label="{{ grid.appScope.switches.label }}" switch-icon="{{ grid.appScope.switches.icon }}" switch-radio-off="{{ grid.appScope.switches.radioOff }}" switch-label-width="{{ grid.appScope.switches.labelWidth }}" switch-handle-width="{{ grid.appScope.switches.handleWidth }}"></div>',enableFiltering:!1,enableSorting:!1},{name:"sendMail",displayName:"APPLICATION_SEND_MAIL",cellTemplate:'<div data-ng-if="row.entity.type == \'report\'" class="centered-uigrid-td"><input data-ng-change="grid.appScope.updateItem(row.entity)", bs-switch ng-model="row.entity.sendMail" type="checkbox" switch-active="{{ grid.appScope.switches.isActive }}" switch-on-text="{{ \'APPLICATION_YES\' | translate }}" switch-off-text="{{ \'APPLICATION_NO\' | translate }}" switch-on-color="{{ grid.appScope.switches.onColor }}" switch-off-color="{{ grid.appScope.switches.offColor }}" switch-animate="{{ grid.appScope.switches.animate }}" switch-size="{{ grid.appScope.switches.size }}" switch-label="{{ grid.appScope.switches.label }}" switch-icon="{{ grid.appScope.switches.icon }}" switch-radio-off="{{ grid.appScope.switches.radioOff }}" switch-label-width="{{ grid.appScope.switches.labelWidth }}" switch-handle-width="{{ grid.appScope.switches.handleWidth }}"></div>',enableFiltering:!1,enableSorting:!1},{name:"action",width:100,buttons:[{"class":"blue-hoki",href:"/tools/scheduler/view/{{row.entity.id}}/settings",name:"settings"},{"class":"green-turquoise",name:"run",onClick:"grid.appScope.runSchedule(row.entity.id)"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=c.gridOptions(b,d,a)},a.updateItem=function(a){return b.update({id:a.id},a).$promise.then(function(){d.show(e.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){console.error(a),d.error(a)})},a.runSchedule=function(a){return b.get({id:a,controller:"run"}).$promise.then(function(){d.show(e.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){console.error(a),d.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.scheduler.list",{url:"/list",templateUrl:"app/tools/scheduler/list/list.html",controller:"SchedulerListCtrl"})}]),angular.module("xCallyShuttleApp").factory("Scheduler",["$resource",function(a){return a("/api/scheduler/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.scheduler",{url:"/scheduler",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:61}}})}]),angular.module("xCallyShuttleApp").controller("SchedulerViewCtrl",["$scope","xAlert","$translate","$stateParams","socket","$location","ReportTree","Scheduler","DefaultReport","CustomReport","$timeout","MailServerOut",function(a,b,c,d,e,f,g,h,i,j,k,l){function m(){switch(a.schedule.cronType=a.rangeExec.type,a.rangeExec.type){case"daily":a.schedule.cron="00 "+a.rangeExec.hour+" * * *";break;case"weekly":a.schedule.cron="00 "+a.rangeExec.hour+" * * "+a.rangeExec.weekDays.join(",");break;case"monthly":a.schedule.cron="00 "+a.rangeExec.hour+" "+a.rangeExec.monthDay+" * *"}}function n(b){var c;switch(b.cronType){case"daily":a.rangeExec.hour=Number(b.cron.split(" ")[1]),a.rangeExec.type=b.cronType;break;case"weekly":c=b.cron.split(" "),a.rangeExec.hour=Number(c[1]),c[4].split(",").forEach(function(b){a.rangeExec.weekDays.push(Number(b))}),a.rangeExec.type=b.cronType;break;case"monthly":c=b.cron.split(" "),a.rangeExec.hour=Number(c[1]),a.rangeExec.monthDay=Number(c[2]),a.rangeExec.type=b.cronType;break;case"currentDay":a.switchValues.today=!0}a.$watch("rangeExec",function(b){a.switchValues.today||m()},!0)}a.forms={},a.rangeExec={weekDays:[],monthDay:null,hour:0,type:null},a.initReports=function(){var c;return a.reports=[],a.tempTodayCron=null,g.query().$promise.then(function(b){return a.defaultTreeData=JSON.parse(b[0].tree),a.customTreeData=JSON.parse(b[1].tree),i.get().$promise}).then(function(b){return a.defRep=b.rows,a.defRep.length&&_.forEach(a.defRep,function(b){c=_.find(a.defaultTreeData,{id:b.parent}),c&&(b.parent="Motion Reports - "+c.text,b.type="default")}),j.get().$promise}).then(function(b){return a.cusRep=b.rows,a.cusRep.length&&_.forEach(a.cusRep,function(b){c=_.find(a.customTreeData,{id:b.parent}),c&&(b.parent="Custom Reports - "+c.text,b.type="custom")}),l.get().$promise}).then(function(b){a.mailServers=b.rows})["catch"](function(a){b.error(a)})},a.initView=function(){return h.get({id:d.id}).$promise.then(function(b){a.schedule=b,n(b)}).then(function(){e.socket.on("schedule:update",function(b){a.schedule.id===b.id&&(a.schedule.active=b.active,a.schedule.sendMail=b.sendMail)})})["catch"](function(a){console.error(a),f.path("/tools/scheduler/list")})},a.refreshSlider=function(){k(function(){a.$broadcast("rzSliderForceRender"),a.refreshSlider=null})},a.monthDays=function(){for(var a=[],b=1;31>=b;b++)a.push(b);return a}(),a.hours=function(){for(var a=[],b=0;23>=b;b++)a.push(b);return a}(),a.setReportTree=function(b){a.schedule.reportType=b.type},a.validitySlider={ceil:24,floor:0,showTicks:!0},a.switchValues={today:!1},a.switches={isActive:!0,size:"mini",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.scheduleTypes=[{name:"APPLICATION_REPORT_EXTRACTION",value:"report"}],a.todayCron=[{name:"15 min",value:"*/15 * * * *"},{name:"30 min",value:"*/30 * * * *"},{name:"1 h",value:"0 * * * *"}],a.reportRanges=[{name:"APPLICATION_PREVIOUS_DAY",value:"yesterday"},{name:"APPLICATION_LAST_SEVEN_DAYS",value:"last7"},{name:"APPLICATION_LAST_THIRTY_DAYS",value:"last30"},{name:"APPLICATION_LAST_MONTH",value:"lastMonth"}],a.cronTypes=[{name:"APPLICATION_DAY",value:"daily"},{name:"APPLICATION_WEEK",value:"weekly"},{name:"APPLICATION_MONTH",value:"monthly"}],a.weekDays=[{name:"APPLICATION_MONDAY",value:1},{name:"APPLICATION_TUESDAY",value:2},{name:"APPLICATION_WEDNESDAY",value:3},{name:"APPLICATION_THURSDAY",value:4},{name:"APPLICATION_FRIDAY",value:5},{name:"APPLICATION_SATURDAY",value:6},{name:"APPLICATION_SUNDAY",value:0}],a.checkToday=function(){a.switchValues.today?(a.schedule.cron=angular.copy(a.tempTodayCron),a.schedule.cronType="currentDay"):(a.tempTodayCron=angular.copy(a.schedule.cron),a.schedule.cron=void 0,m())},a.updateSchedule=function(){return h.update({id:a.schedule.id},a.schedule).$promise.then(function(){b.show(c.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){console.error(a),b.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.scheduler.view",{url:"/view/:id",templateUrl:"app/tools/scheduler/view/view.html",controller:"SchedulerViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.tools.scheduler.view.settings",{url:"/settings",templateUrl:"app/tools/scheduler/view/view.settings.html"})}]),angular.module("xCallyShuttleApp").controller("SchedulerWizardCtrl",["$scope","WizardHandler","$location","xAlert","Scheduler","ReportTree","$translate","DefaultReport","CustomReport","MailServerOut",function(a,b,c,d,e,f,g,h,i,j){function k(){switch(a.item.cronType=a.rangeExec.type,a.rangeExec.type){case"daily":a.item.cron="00 "+a.rangeExec.hour+" * * *";break;case"weekly":a.item.cron="00 "+a.rangeExec.hour+" * * "+a.rangeExec.weekDays.join(",");break;case"monthly":a.item.cron="00 "+a.rangeExec.hour+" "+a.rangeExec.monthDay+" * *"}}a.forms={},a.item={validityStart:8,validityEnd:16,type:"report",reportType:"default"},a.initReports=function(){a.reports=[];var b;return f.query().$promise.then(function(b){return a.defaultTreeData=JSON.parse(b[0].tree),a.customTreeData=JSON.parse(b[1].tree),h.get().$promise}).then(function(c){return a.defRep=c.rows,a.defRep.length&&_.forEach(a.defRep,function(c){b=_.find(a.defaultTreeData,{id:c.parent}),b&&(c.parent="Motion Reports - "+b.text,c.type="default")}),i.get().$promise}).then(function(c){return a.cusRep=c.rows,a.cusRep.length&&_.forEach(a.cusRep,function(c){b=_.find(a.customTreeData,{id:c.parent}),b&&(c.parent="Custom Reports - "+b.text,c.type="custom")}),j.get().$promise}).then(function(b){a.mailServers=b.rows;var c=_.find(a.mailServers,{MailAccountId:null});c&&(c.username+=" (custom)")})["catch"](function(a){d.error(a)})},a.setReportTree=function(b){a.item.reportType=b.type},a.validitySlider={ceil:24,floor:0,showTicks:!0},a.switchValues={today:!1},a.switches={isActive:!0,size:"mini",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.scheduleTypes=[{name:"APPLICATION_REPORT_EXTRACTION",value:"report"}],a.todayCron=[{name:"15 min",value:"*/15 * * * *"},{name:"30 min",value:"*/30 * * * *"},{name:"1 h",value:"0 * * * *"}],a.reportRanges=[{name:"APPLICATION_PREVIOUS_DAY",value:"yesterday"},{name:"APPLICATION_LAST_SEVEN_DAYS",value:"last7"},{name:"APPLICATION_LAST_THIRTY_DAYS",value:"last30"},{name:"APPLICATION_LAST_MONTH",value:"lastMonth"}],a.cronTypes=[{name:"APPLICATION_DAY",value:"daily"},{name:"APPLICATION_WEEK",value:"weekly"},{name:"APPLICATION_MONTH",value:"monthly"}],a.weekDays=[{name:"APPLICATION_MONDAY",value:1},{name:"APPLICATION_TUESDAY",value:2},{name:"APPLICATION_WEDNESDAY",value:3},{name:"APPLICATION_THURSDAY",value:4},{name:"APPLICATION_FRIDAY",value:5},{name:"APPLICATION_SATURDAY",value:6},{name:"APPLICATION_SUNDAY",value:0}],a.tempTodayCron=null,a.checkToday=function(){a.switchValues.today?(a.item.cron=angular.copy(a.tempTodayCron),a.item.cronType="currentDay"):(a.tempTodayCron=angular.copy(a.item.cron),a.item.cron=void 0,k())},a.monthDays=function(){for(var a=[],b=1;31>=b;b++)a.push(b);return a}(),a.hours=function(){for(var a=[],b=0;23>=b;b++)a.push(b);return a}(),a.rangeExec={weekDays:[],monthDay:null,hour:0,type:null},a.$watch("rangeExec",function(b){a.switchValues.today||k()},!0),a.next=function(){b.wizard().next()},a.previous=function(){b.wizard().previous()},a.exitValidation=function(a){return a},a.createItem=function(){return e.save(a.item).$promise.then(function(){c.path("/tools/scheduler/list")})["catch"](function(a){d.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.scheduler.wizard",{url:"/wizard",templateUrl:"app/tools/scheduler/wizard/wizard.html",controller:"SchedulerWizardCtrl"})}]),angular.module("xCallyShuttleApp").controller("SoundListCtrl",["$scope","$http","socket","Modal","$q","FileUploader","$translate","xAlert","$cookieStore","$sce","Sound",function(a,b,c,d,e,f,g,h,i,j,k){a.Sound=k,a.isCollapsed=!0,a.downloadButtonClass="btn btn-xs blue-hoki",a["delete"]=d.confirm["delete"](function(a){b["delete"]("/api/sounds/"+a).success(function(a){}).error(function(a){console.log(a)})}),a.updateAudio=function(a,c){var d=e.defer();return b.put("/api/sounds/"+a,c).success(function(a){d.resolve()}).error(function(a){console.log(a.message),d.reject(a.message)}),d.promise},a.$on("$destroy",function(){c.unsyncUpdates("sound")}),a.initList=function(){b.get("/api/sounds").success(function(b){a.sounds=b.rows,b.rows.length||(a.isCollapsed=!1),c.syncUpdates("sound",a.sounds,function(){a.sounds.length||(a.isCollapsed=!1)})})};var l=a.uploader=new f({url:"/api/sounds",withCredentials:!0,headers:{Authorization:"Bearer "+i.get("token")}});l.filters.push({name:"customFilter",fn:function(a,b){return this.queue.length<10}}),l.onWhenAddingFileFailed=function(a,b,c){console.info("onWhenAddingFileFailed",a,b,c)},l.onAfterAddingFile=function(a){console.info("onAfterAddingFile",a)},l.onAfterAddingAll=function(a){console.info("onAfterAddingAll",a)},l.onBeforeUploadItem=function(a){console.info("onBeforeUploadItem",a)},l.onProgressItem=function(a,b){console.info("onProgressItem",a,b),a.isUploading=!0},l.onProgressAll=function(a){console.info("onProgressAll",a)},l.onSuccessItem=function(a,b,c,d){console.info("onSuccessItem",a,b,c,d),a.isUploading=!1},l.onErrorItem=function(a,b,c,d){console.info("onErrorItem",a,b,c,d),a.responseMessage=b,a.isUploading=!1},l.onCancelItem=function(a,b,c,d){console.info("onCancelItem",a,b,c,d),a.isUploading=!1},l.onCompleteItem=function(a,b,c,d){console.info("onCompleteItem",a,b,c,d),a.isUploading=!1},l.onCompleteAll=function(){console.info("onCompleteAll")}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.sounds.list",{url:"/list",templateUrl:"app/tools/sound/list/list.html",controller:"SoundListCtrl",authenticate:!0,resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/plugins/bootstrap-fileinput/bootstrap-fileinput.js"]})}]}})}]),angular.module("xCallyShuttleApp").factory("Sound",["$resource",function(a){return a("/api/sounds/:id/:controller",{name:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.sounds",{url:"/sounds",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:60}}})}]),angular.module("xCallyShuttleApp").controller("TagListCtrl",["$scope","$uibModal","Tag","gridOptions","$rootScope",function(a,b,c,d,e){a.initView=function(){var b={exporterCsvFilename:"tag.csv",columnDefs:[{name:"name"},{name:"description"},{name:"action",width:75,buttons:[{"class":"blue-hoki",href:"/tools/tags/view/{{row.entity.id}}/settings",name:"settings"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=d.gridOptions(c,b,a)},a.createItem=function(){var c=b.open({animation:!0,templateUrl:"app/tools/tag/list/list.create.modal.html",controller:"TagListCreateCtrl"});c.result.then(function(){a.gridOptions.getPage()})}}]),angular.module("xCallyShuttleApp").controller("TagListCreateCtrl",["$scope","$translate","$uibModalInstance","Tag","xAlert",function(a,b,c,d,e){a.form={},a.item={},a.save=function(){return d.save(a.item).$promise.then(function(a){e.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)})["catch"](function(a){e.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.tags.list",{url:"/list",templateUrl:"app/tools/tag/list/list.html",controller:"TagListCtrl"})}]),angular.module("xCallyShuttleApp").factory("Tag",["$resource",function(a){return a("/api/tags/:id/:controller/:tag",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.tags",{url:"/tags",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:55}}})}]),angular.module("xCallyShuttleApp").controller("TagViewCtrl",["$scope","$http","xAlert","$translate","$stateParams","$location","Tag","gridOptions","List","Company","Contact","uiGridConstants","usSpinnerService",function(a,b,c,d,e,f,g,h,i,j,k,l,m){function n(){m.stop("spinner-grid"),a.readyGrid=!0}a.getTag=function(){return g.get({id:e.id}).$promise.then(function(b){a.tag=b})["catch"](function(a){c.error(a)})},a.updateTag=function(){var b=angular.copy(a.tag);return g.update({id:e.id},b).$promise.then(function(){c.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){c.error(a)})},a.initChat=function(){m.spin("spinner-grid");var b={enableRowSelection:!1,exporterCsvFilename:"tagChat.csv",columnDefs:[{name:"type"},{name:"status"},{name:"ChatWebsite.name",displayName:"APPLICATION_WEBSITE"},{name:"ChatVisitor.email",displayName:"APPLICATION_VISITOR"},{name:"action",width:40,buttons:[{"class":"green",name:"chatRoom",onClick:"grid.appScope.openRoom(row.entity.id, 'chatRoom')"}]}]};a.gridOptions=h.gridOptions(g,b,a,{controller:"chat",tag:a.tag.name},null,null,n())},a.initMail=function(){m.spin("spinner-grid");var b={enableRowSelection:!1,exporterCsvFilename:"tagMail.csv",columnDefs:[{name:"subject"},{name:"from"},{name:"account"},{name:"status"},{name:"action",width:40,buttons:[{"class":"green",name:"mailRoom",onClick:"grid.appScope.openRoom(row.entity.id, 'mailRoom')"}]}]};a.gridOptions=h.gridOptions(g,b,a,{controller:"mail",tag:a.tag.name},null,null,n())},a.initFax=function(){m.spin("spinner-grid");var b={enableRowSelection:!1,exporterCsvFilename:"tagFax.csv",columnDefs:[{name:"from"},{name:"account"},{name:"status"},{name:"action",width:40,buttons:[{"class":"green",name:"faxRoom",onClick:"grid.appScope.openRoom(row.entity.id, 'faxRoom')"}]}]};a.gridOptions=h.gridOptions(g,b,a,{controller:"fax",tag:a.tag.name},null,null,n())},a.initSms=function(){m.spin("spinner-grid");var b={enableRowSelection:!1,exporterCsvFilename:"tagSms.csv",columnDefs:[{name:"from"},{name:"status"},{name:"action",width:40,buttons:[{"class":"green",name:"smsRoom",onClick:"grid.appScope.openRoom(row.entity.id, 'smsRoom')"}]}]};a.gridOptions=h.gridOptions(g,b,a,{controller:"sms",tag:a.tag.name},null,null,n())},a.initContacts=function(){a.readyGrid=!1,m.spin("spinner-grid");var b;return i.get().$promise.then(function(b){return a.lists=[],b.rows.forEach(function(b,c){a.lists.push({value:b.id,label:b.name})}),j.get().$promise}).then(function(b){a.companies=[],b.rows.forEach(function(b,c){a.companies.push({value:b.id,label:b.name})})}).then(function(){b={enableRowSelection:!1,exporterCsvFilename:"tagContacts.csv",columnDefs:[{name:"firstName"},{name:"lastName"},{name:"phone"},{name:"email"},{name:"ListId",displayName:"APPLICATION_LIST",field:"List.name",filter:{type:l.filter.SELECT,selectOptions:a.lists}},{name:"CompanyId",displayName:"APPLICATION_COMPANY",field:"Company.name",filter:{type:l.filter.SELECT,term:e.companyId||null,selectOptions:a.companies}},{name:"action",width:40,buttons:[{"class":"blue-hoki",name:"profile",onClick:"grid.appScope.openContactTab(row.entity)"}]}]},a.gridOptions=h.gridOptions(g,b,a,{controller:"contacts",tag:a.tag.name},null,null,n())})["catch"](function(a){c.error(a)})},a.openRoom=function(b,c){var d=_.find(a.workspaces,{id:b,type:c});if(d)d.active=!0;else{var e;switch(c){case"mailRoom":e="icon-envelope";break;case"chatRoom":e="fa fa-users";break;case"faxRoom":e="fa fa-fax";break;case"smsRoom":e="glyphicon glyphicon-comment"}a.workspaces.push({id:b,type:c,"class":e,active:!0})}}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.tags.view",{url:"/view/:id",templateUrl:"app/tools/tag/view/view.html",controller:"TagViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.tools.tags.view.settings",{url:"/settings",templateUrl:"app/tools/tag/view/view.settings.html"}).state("main.tools.tags.view.chat",{url:"/chat",templateUrl:"app/tools/tag/view/view.chat.html"}).state("main.tools.tags.view.mail",{url:"/mail",templateUrl:"app/tools/tag/view/view.mail.html" +}).state("main.tools.tags.view.fax",{url:"/fax",templateUrl:"app/tools/tag/view/view.fax.html"}).state("main.tools.tags.view.sms",{url:"/sms",templateUrl:"app/tools/tag/view/view.sms.html"}).state("main.tools.tags.view.contacts",{url:"/contacts",templateUrl:"app/tools/tag/view/view.contacts.html"})}]),angular.module("xCallyShuttleApp").controller("TemplateListCtrl",["$scope","Template","gridOptions",function(a,b,c){a.initView=function(){var d={exporterCsvFilename:"templates.csv",columnDefs:[{name:"name"},{name:"description"},{name:"action",width:75,buttons:[{"class":"blue-hoki",href:"/tools/templates/view/{{row.entity.id}}/settings",name:"settings"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=c.gridOptions(b,d,a)}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.templates.list",{url:"/list",templateUrl:"app/tools/template/list/list.html",controller:"TemplateListCtrl"})}]),angular.module("xCallyShuttleApp").factory("Template",["$resource",function(a){return a("/api/templates/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.templates",{url:"/templates",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:56}}})}]),angular.module("xCallyShuttleApp").controller("TemplateViewCtrl",["$scope","$rootScope","$http","$translate","$stateParams","xAlert","Template","templateVariable","Variable",function(a,b,c,d,e,f,g,h,i){a.initItem=function(){CKEDITOR.plugins.addExternal("richparams","/assets/plugins/ckeditor-richparams/"),a.options={language:b.language,allowedContent:!0,entities:!1,skin:"office2013",contentsCss:"/assets/css/global/richparams.css",extraPlugins:"richparams,autogrow",autoGrow_minHeight:450,richparams:h,disableNativeSpellChecker:!1,toolbar:[{name:"clipboard",items:["Cut","Copy","Paste","PasteText","PasteFromWord","-","Undo","Redo"]},{name:"links",items:["Link","Unlink","Anchor"]},{name:"insert",items:["Image","Table","HorizontalRule","SpecialChar"]},{name:"tools",items:["Maximize"]},{name:"document",items:["Source"]},"/",{name:"basicstyles",items:["Bold","Italic","Underline","Strike","Subscript","Superscript","-","RemoveFormat"]},{name:"paragraph",items:["NumberedList","BulletedList","-","Outdent","Indent","-","Blockquote"]},{name:"styles",items:["Styles","Format"]},"/",{name:"motion",items:["voice","chat","mail"]}]},a.form={},a.item={},a.item=g.get({id:e.id})},a.updateItem=function(){return g.update(a.item).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){f.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.templates.view",{url:"/view/:id",templateUrl:"app/tools/template/view/view.html",controller:"TemplateViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.tools.templates.view.settings",{url:"/settings",templateUrl:"app/tools/template/view/view.settings.html"})}]),angular.module("xCallyShuttleApp").controller("TemplateWizardCtrl",["$scope","$rootScope","$location","$http","WizardHandler","xAlert","Template","templateVariable",function(a,b,c,d,e,f,g,h){a.initWizard=function(){CKEDITOR.plugins.addExternal("richparams","/assets/plugins/ckeditor-richparams/"),a.options={language:b.language,allowedContent:!0,entities:!1,skin:"office2013",contentsCss:"/assets/css/global/richparams.css",extraPlugins:"richparams,autogrow",autoGrow_minHeight:450,disableNativeSpellChecker:!1,richparams:h,toolbar:[{name:"clipboard",items:["Cut","Copy","Paste","PasteText","PasteFromWord","-","Undo","Redo"]},{name:"links",items:["Link","Unlink","Anchor"]},{name:"insert",items:["Image","Table","HorizontalRule","SpecialChar"]},{name:"tools",items:["Maximize"]},{name:"document",items:["Source"]},"/",{name:"basicstyles",items:["Bold","Italic","Underline","Strike","Subscript","Superscript","-","RemoveFormat"]},{name:"paragraph",items:["NumberedList","BulletedList","-","Outdent","Indent","-","Blockquote"]},{name:"styles",items:["Styles","Format"]},"/",{name:"motion",items:["voice","chat","mail"]}]},a.item={},a.form={}},a.exitValidation=function(a){return a},a.createItem=function(){return g.save({name:a.item.name,description:a.item.description,subject:a.item.subject||null,html:a.item.html||null,text:a.item.text||null}).$promise.then(function(){c.path("/tools/templates/list")})["catch"](function(a){f.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.templates.wizard",{url:"/wizard",templateUrl:"app/tools/template/wizard/wizard.html",controller:"TemplateWizardCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools",{url:"/tools",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user","agent"],redirectTo:"landing",id:13}}})}]),angular.module("xCallyShuttleApp").controller("TriggerListCtrl",["$scope","$http","$translate","Modal","xAlert","Trigger","gridOptions",function(a,b,c,d,e,f,g){a.onText="On",a.offText="Off",a.isActive=!0,a.size="mini",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.initView=function(){var b={exporterCsvFilename:"Triggers.csv",columnDefs:[{name:"name"},{name:"description"},{name:"channel"},{name:"status",cellTemplate:'<div class="centered-uigrid-td"><input data-ng-change="grid.appScope.updateItem(row.entity)", bs-switch ng-model="row.entity.status" type="checkbox" switch-active="{{ grid.appScope.isActive }}" switch-on-text="{{ grid.appScope.onText }}" switch-off-text="{{ grid.appScope.offText }}" switch-on-color="{{ grid.appScope.onColor }}" switch-off-color="{{ grid.appScope.offColor }}" switch-animate="{{ grid.appScope.animate }}" switch-size="{{ grid.appScope.size }}" switch-label="{{ grid.appScope.label }}" switch-icon="{{ grid.appScope.icon }}" switch-radio-off="{{ grid.appScope.radioOff }}" switch-label-width="{{ grid.appScope.labelWidth }}" switch-handle-width="{{ grid.appScope.handleWidth }}"></div>',width:100,enableFiltering:!1},{name:"action",width:75,buttons:[{"class":"blue-hoki",href:"/tools/triggers/view/{{row.entity.id}}/settings",name:"settings"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=g.gridOptions(f,b,a)},a.updateItem=function(a){return f.update({id:a.id},a).$promise.then(function(){e.show(c.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){e.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.triggers.list",{url:"/list",templateUrl:"app/tools/trigger/list/list.html",controller:"TriggerListCtrl"})}]),angular.module("xCallyShuttleApp").factory("Trigger",["$resource",function(a){return a("/api/triggers/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.triggers",{url:"/triggers",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:50}}})}]),angular.module("xCallyShuttleApp").controller("TriggerViewCtrl",["$scope","$stateParams","$http","$translate","xAlert","triggers","Trigger","$location",function(a,b,c,d,e,f,g,h){a.$triggers=f,a.recordSwitch={onText:"On",offText:"Off",isActive:!0,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.forms={general:{}},a.addCondition=function(b){a.trigger[b].push({field:"",operator:"",value:""})},a.removeCondition=function(b,c){a.trigger[b].splice(c,1)},a.addAction=function(){a.trigger.Actions.push({action:"",data1:"",data2:"",data3:"",data4:"",data5:""})},a.resetActionData=function(a){a.data1="",a.data2="",a.data3="",a.data4="",a.data5=""},a.removeAction=function(b){a.trigger.Actions.splice(b,1)},a.initView=function(){return g.get({id:b.id}).$promise.then(function(b){a.trigger=b})["catch"](function(a){e.error(a),h.path("/tools/triggers/list")})},a.updateTrigger=function(){return g.update({id:b.id},a.trigger).$promise.then(function(){e.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){console.error(a),e.error(a)})},a.exitValidation=function(b){return!(!b||!a.trigger.All.length&&!a.trigger.Any.length||!a.trigger.Actions.length)}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.triggers.view",{url:"/view/:id",templateUrl:"app/tools/trigger/view/view.html",controller:"TriggerViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]})}]}}).state("main.tools.triggers.view.settings",{url:"/settings",templateUrl:"app/tools/trigger/view/view.settings.html"}).state("main.tools.triggers.view.routes",{url:"/routes",templateUrl:"app/tools/trigger/view/view.routes.html"}).state("main.tools.triggers.view.application",{url:"/application",templateUrl:"app/tools/trigger/view/view.application.html"})}]),angular.module("xCallyShuttleApp").controller("TriggerWizardCtrl",["$scope","$http","$location","xAlert","triggers","WizardHandler","Trigger",function(a,b,c,d,e,f,g){a.$triggers=e,a.statusSwitch={onText:"On",offText:"Off",isActive:!0,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.tempData={voice:{},mail:{},chat:{},fax:{}},a.item={All:[],Any:[],Actions:[]},a.forms={general:void 0,settings:void 0},a.addCondition=function(b){a.item[b].push({field:"",operator:"",value:""})},a.removeCondition=function(b,c){a.item[b].splice(c,1)},a.addAction=function(){a.item.Actions.push({action:"",data1:"",data2:"",data3:"",data4:"",data5:""})},a.resetActionData=function(a){a.data1="",a.data2="",a.data3="",a.data4="",a.data5=""},a.removeAction=function(b){a.item.Actions.splice(b,1)},a.$watch("item.channel",function(b,c){c&&(a.tempData[c].All=_.clone(a.item.All,!0),a.tempData[c].Any=_.clone(a.item.Any,!0),a.tempData[c].Actions=_.clone(a.item.Actions,!0)),a.item.All=a.tempData[b].All?a.tempData[b].All:[],a.item.Any=a.tempData[b].Any?a.tempData[b].Any:[],a.item.Actions=a.tempData[b].Actions?a.tempData[b].Actions:[]},!0),a.item.channel="voice",a.createItem=function(){return g.save(a.item).$promise.then(function(){c.path("/tools/triggers/list")})["catch"](function(a){console.error(a),d.error(a)})},a.next=function(){f.wizard().next()},a.previous=function(){f.wizard().previous()},a.exitValidation=function(a){return a},a.exitSettingsValidation=function(b){return!(!b||!a.item.All.length&&!a.item.Any.length||!a.item.Actions.length)}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.triggers.wizard",{url:"/wizard",templateUrl:"app/tools/trigger/wizard/wizard.html",controller:"TriggerWizardCtrl"})}]),angular.module("xCallyShuttleApp").controller("TrunkListCtrl",["$scope","Trunk","gridOptions","xAlert","$translate","socket",function(a,b,c,d,e,f){function g(){f.socket.on("trunk:update",function(b){var c=_.find(a.gridOptions.data,{name:b.name});c&&(c.status=b.status,c.peerstatus=b.peerstatus)})}a.isActive=!0,a.size="mini",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.initView=function(){var d={exporterCsvFilename:"Trunks.csv",columnDefs:[{name:"name"},{name:"active",cellTemplate:'<div class="centered-uigrid-td"><input data-ng-change="grid.appScope.updateItem(row.entity)", bs-switch ng-model="row.entity.active" type="checkbox" switch-active="{{ grid.appScope.isActive }}" switch-on-text="{{ \'APPLICATION_YES\' | translate }}" switch-off-text="{{ \'APPLICATION_NO\' | translate }}" switch-on-color="{{ grid.appScope.onColor }}" switch-off-color="{{ grid.appScope.offColor }}" switch-animate="{{ grid.appScope.animate }}" switch-size="{{ grid.appScope.size }}" switch-label="{{ grid.appScope.label }}" switch-icon="{{ grid.appScope.icon }}" switch-radio-off="{{ grid.appScope.radioOff }}" switch-label-width="{{ grid.appScope.labelWidth }}" switch-handle-width="{{ grid.appScope.handleWidth }}"></div>'},{name:"host"},{name:"description"},{name:"status",cellTemplate:'<div class="centered-uigrid-td" data-ng-if="row.entity.active && row.entity.registry && row.entity.status">{{row.entity.status}}</div>'},{name:"peerstatus",cellTemplate:'<div class="centered-uigrid-td" data-ng-if="row.entity.active && row.entity.peerstatus">{{row.entity.peerstatus}}</div>'},{name:"action",width:75,buttons:[{"class":"blue-hoki",href:"/tools/trunks/view/{{row.entity.name}}/settings",name:"settings"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.name)"}]}]};a.gridOptions=c.gridOptions(b,d,a,null,null,null,g)},a.updateItem=function(a){return b.update({id:a.name},a).$promise.then(function(){d.show(e.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){console.error(a),d.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.trunks.list",{url:"/list",templateUrl:"app/tools/trunk/list/list.html",controller:"TrunkListCtrl"})}]),angular.module("xCallyShuttleApp").factory("Trunk",["$resource",function(a){return a("/api/trunks/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.trunks",{url:"/trunks",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:52}}})}]),angular.module("xCallyShuttleApp").controller("TrunkViewCtrl",["$scope","$http","xAlert","$translate","$stateParams","socket","$location","Trunk","VoiceContext",function(a,b,c,d,e,f,g,h,i){a.activeSwitch={isActive:!0,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.initView=function(){return h.get({id:e.id}).$promise.then(function(b){b.nat=b.nat?b.nat.split(","):[],b.allow=b.allow?b.allow.split(";"):[],b.insecure=b.insecure?b.insecure.split(","):[],b.transport=b.transport?b.transport.split(","):[],a.trunk=b}).then(function(){f.socket.on("trunk:update",function(b){a.trunk.name===b.name&&(a.trunk.status=b.status)})})["catch"](function(a){console.error(a),g.path("/tools/trunks/list")})},a.updateTrunk=function(){""===a.trunk.password&&delete a.trunk.password;var b=angular.copy(a.trunk);return b.nat=b.nat.join(","),b.allow=b.allow.join(";"),b.insecure=b.insecure.join(","),b.transport=b.transport.join(","),h.update({id:e.id},b).$promise.then(function(){c.show(d.instant("MESSAGE_WELL_DONE")+"!","success")})["catch"](function(a){c.error(a)})},a.getContexts=function(){return i.get().$promise.then(function(b){a.voiceContexts=b.rows})["catch"](function(a){c.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.trunks.view",{url:"/view/:id",templateUrl:"app/tools/trunk/view/view.html",controller:"TrunkViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.tools.trunks.view.settings",{url:"/settings",templateUrl:"app/tools/trunk/view/view.settings.html"})}]),angular.module("xCallyShuttleApp").controller("TrunkWizardCtrl",["$scope","WizardHandler","$location","xAlert","Trunk",function(a,b,c,d,e){a.initWizard=function(){a.forms={},a.item={context:"from-voip-provider"}},a.next=function(){b.wizard().next()},a.previous=function(){b.wizard().previous()},a.exitValidation=function(a){return a},a.createItem=function(){return a.item.fromuser=a.item.defaultuser,a.item.fromdomain=a.item.host,e.save(a.item).$promise.then(function(){c.path("/tools/trunks/list")})["catch"](function(a){d.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.trunks.wizard",{url:"/wizard",templateUrl:"app/tools/trunk/wizard/wizard.html",controller:"TrunkWizardCtrl"})}]),angular.module("xCallyShuttleApp").controller("VariableListCtrl",["$scope","$uibModal","Variable","gridOptions",function(a,b,c,d){a.initView=function(){var b={exporterCsvFilename:"variables.csv",columnDefs:[{name:"name"},{name:"description"},{name:"action",width:75,buttons:[{"class":"blue-hoki",href:"/tools/variables/view/{{row.entity.id}}/settings",name:"settings"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=d.gridOptions(c,b,a)},a.createItem=function(){var c=b.open({animation:!0,templateUrl:"app/tools/variable/list/list.create.modal.html",controller:"VariableListCreateCtrl"});c.result.then(function(b){console.log(b),a.gridOptions.getPage()})}}]),angular.module("xCallyShuttleApp").controller("VariableListCreateCtrl",["$scope","$translate","$uibModalInstance","Variable","xAlert",function(a,b,c,d,e){a.form={},a.item={},a.save=function(){return d.save(a.item).$promise.then(function(a){e.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)})["catch"](function(a){e.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.variables.list",{url:"/list",templateUrl:"app/tools/variable/list/list.html",controller:"VariableListCtrl"})}]),angular.module("xCallyShuttleApp").factory("Variable",["$resource",function(a){return a("/api/variables/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.variables",{url:"/variables",template:"<div ui-view></div>","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:54}}})}]),angular.module("xCallyShuttleApp").controller("VariableViewCtrl",["$scope","$translate","$stateParams","xAlert","Variable",function(a,b,c,d,e){a.getVariable=function(){return e.get({id:c.id}).$promise.then(function(b){a.variable=b})["catch"](function(a){d.error(a)})},a.updateVariable=function(){return e.update({id:c.id},a.variable).$promise.then(function(){d.show(b.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){d.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.variables.view",{url:"/view/:id",templateUrl:"app/tools/variable/view/view.html",controller:"VariableViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.tools.variables.view.settings",{url:"/settings",templateUrl:"app/tools/variable/view/view.settings.html"})}]),angular.module("xCallyShuttleApp").controller("YourdashboardListCloneModalCtrl",["$scope","$uibModalInstance",function(a,b){a.forms={dashboard:void 0},a.item={},a.ok=function(){b.close(a.item)},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("YourdashboardListCreateModalCtrl",["$scope","$uibModalInstance",function(a,b){a.forms={dashboard:void 0},a.item={},a.ok=function(){a.item.model=JSON.stringify({title:a.item.name}),b.close(a.item)},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("YourdashboardListCtrl",["$scope","$http","$translate","xAlert","Modal","$uibModal","$log","YourDashboard","gridOptions",function(a,b,c,d,e,f,g,h,i){a.initView=function(){var b={exporterCsvFilename:"voice_contexts.csv",columnDefs:[{name:"name"},{name:"description"},{name:"action",width:125,buttons:[{"class":"green",href:"/tools/yourdashboards/show/{{row.entity.id}}",name:"view"},{"class":"blue-hoki",href:"/tools/yourdashboards/view/{{row.entity.id}}/settings",name:"settings"},{"class":"{{row.entity.defaultEntry ? 'red-sunglo disabled' : 'red-sunglo'}}",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"},{"class":"purple",name:"clone",onClick:"grid.appScope.clone(row.entity.id)"}]}]};a.gridOptions=i.gridOptions(h,b,a)},a.create=function(){var b=f.open({animation:!0,templateUrl:"app/tools/yourdashboard/list/create.modal.html",controller:"YourdashboardListCreateModalCtrl"});b.result.then(function(b){return h.save(b).$promise.then(function(){d.show(c.instant("MESSAGE_WELL_DONE"),"success"),a.gridOptions.getPage()})["catch"](function(a){console.error(a),d.error(a)})},function(){g.info("Modal dismissed at: "+new Date)})},a.clone=function(b){var e=f.open({animation:!0,templateUrl:"app/tools/yourdashboard/list/clone.modal.html",controller:"YourdashboardListCloneModalCtrl"});e.result.then(function(e){return h.save({id:b,controller:"clone"},e).$promise.then(function(){d.show(c.instant("MESSAGE_WELL_DONE"),"success"),a.gridOptions.getPage()})["catch"](function(a){console.error(a),d.error(a)})},function(){g.info("Modal dismissed at: "+new Date)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.yourdashboards.list",{url:"/list",templateUrl:"app/tools/yourdashboard/list/list.html",controller:"YourdashboardListCtrl",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:59}}})}]),angular.module("xCallyShuttleApp").controller("LeaveEditedDashboardModalCtrl",["$scope","$uibModalInstance",function(a,b){a.close=function(){b.close()},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("YourdashboardShowCtrl",["$scope","$rootScope","localStorageService","xAlert","$translate","Auth","$stateParams","$location","$uibModal","$log","YourDashboard",function(a,b,c,d,e,f,g,h,i,j,k){function l(a){var b,c;if(!a)return 0;for(a=a.toString(),b=c=a.length;b--;){var d=a[b].charCodeAt();d>=56320&&57343>=d&&b--,d>127&&2047>=d?c++:d>2047&&65535>=d&&(c+=2)}return c}a.Auth=f,a.editMode=!1,a.getDashboard=function(){return k.get({id:g.id}).$promise.then(function(b){!b[f.getRole()]&&h.path("/landing");var c={name:"dashboard",structure:"4-8",enableconfirmdelete:!0,maximizable:!0,collapsible:!0};b.model=JSON.parse(b.model||'{"title":"Dashboard"}'),b.editable=!(!f.isAdmin()||!b.editable),a.dashboard=_.merge(c,b)})["catch"](function(a){h.path("/tools/yourdashboards/list")})},a.$on("$locationChangeStart",function(b,c,d){if(a.editMode){b.preventDefault();var e=i.open({animation:!0,templateUrl:"app/tools/yourdashboard/show/leaveEditedDashboard.modal.html",controller:"LeaveEditedDashboardModalCtrl"});e.result.then(function(b){a.editMode=!1;var d=location.protocol+"//"+location.host;h.path(c.replace(d,""))},function(){j.info("Modal dismissed at: "+new Date)})}});var m=function(c,f,h){var i=angular.copy(a.dashboard);return i.name=a.dashboard.model.title,i.model=JSON.stringify(i.model),l(i.model)<=64e3?k.update({id:g.id},i).$promise.then(function(){d.show(e.instant("MESSAGE_DASHBOARD_SAVED")+"!","success"),a.editMode=!1})["catch"](function(b){d.error(b),i.model=JSON.parse(i.model),i.name="dashboard",a.dashboard=i}):(d.show(e.instant("MESSAGE_DASHBOARD_TOO_BIG")+"!","warning"),void b.$broadcast("adfToggleEditMode"))};a.$on("adfDashboardChanged",m),a.$on("adfIsEditMode",function(){a.editMode=!0}),a.$on("destroy",function(){console.log("main dashboard")})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.yourdashboards.show",{url:"/show/:id",templateUrl:"app/tools/yourdashboard/show/show.html",controller:"YourdashboardShowCtrl",data:{permissions:{only:["admin","user","agent"],redirectTo:"landing",id:2}}})}]),angular.module("xCallyShuttleApp").controller("YourdashboardViewCtrl",["$scope","$rootScope","xAlert","$translate","$stateParams","$location","YourDashboard",function(a,b,c,d,e,f,g){a.radioSwitch={isActive:!0,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.getDashboard=function(){return g.get({id:e.id}).$promise.then(function(b){delete b.model,a.dashboard=b})["catch"](function(){f.path("/tools/yourdashboards/list")})},a.updateDashboard=function(){var b=angular.copy(a.dashboard);return g.update({id:e.id},b).$promise.then(function(){c.show(d.instant("MESSAGE_WELL_DONE")+"!","success")})["catch"](function(d){c.error(d),a.dashboard=b})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.yourdashboards.view",{url:"/view/:id",templateUrl:"app/tools/yourdashboard/view/view.html",controller:"YourdashboardViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]},data:{permissions:{only:["admin","user"],redirectTo:"landing",id:59}}}).state("main.tools.yourdashboards.view.settings",{url:"/settings",templateUrl:"app/tools/yourdashboard/view/view.settings.html"})}]),angular.module("xCallyShuttleApp").factory("YourDashboard",["$resource",function(a){return a("/api/dashboards/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.yourdashboards",{url:"/yourdashboards",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("ZendeskListCtrl",["$scope","ZendeskAccount","gridOptions","xAlert","$translate",function(a,b,c,d,e){a.initView=function(){var d={exporterCsvFilename:"zendesk_account.csv",columnDefs:[{name:"name",displayName:"APPLICATION_NAME"},{name:"username"},{name:"remoteUri",displayName:"APPLICATION_URI"},{name:"action",buttons:[{"class":"blue-hoki",href:"/zendesk/view/{{row.entity.id}}/account",name:"profile"},{"class":"green-jungle",name:"check",onClick:"grid.appScope.checkAccount(row.entity.id)"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=c.gridOptions(b,d,a)},a.checkAccount=function(a){return b.check({id:a}).$promise.then(function(){d.show(e.instant("MESSAGE_ACCOUNT_VERIFIED"),"success")})["catch"](function(){d.show(e.instant("MESSAGE_ACCOUNT_INVALID"),"danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.zendesk.list",{url:"/list",templateUrl:"app/zendesk/list/list.html",controller:"ZendeskListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"smart-table",insertBefore:"#ng_load_plugins_before",files:["assets/css/smart_table.css"]}])}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.zendesk.view.configurations",{url:"/configurations",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("ZendeskViewConfigurationListCtrl",["$scope","$stateParams","$translate","gridOptions","ZendeskConfiguration","$uibModal",function(a,b,c,d,e,f){a.initView=function(){var c={exporterCsvFilename:"zendesk_configurations.csv",columnDefs:[{name:"name"},{name:"description"},{name:"action",width:125,buttons:[{"class":"blue-hoki",href:"/zendesk/view/{{row.entity.AccountId}}/configurations/view/{{row.entity.id}}",name:"profile"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=d.gridOptions(e,c,a,{accountId:b.id})},a.createItem=function(){var b=f.open({animation:!0,templateUrl:"app/zendesk/view/configuration/list/create.modal.html",controller:"ZendeskCreateConfigurationCtrl"});b.result.then(function(){a.gridOptions.getPage()})}}]),angular.module("xCallyShuttleApp").controller("ZendeskCreateConfigurationCtrl",["$scope","$translate","$uibModalInstance","ZendeskConfiguration","xAlert","$stateParams","channel",function(a,b,c,d,e,f,g){a.form={},a.item={},a.channels=g,a.item.channel="voice",a.item.type="Queue",a.save=function(){return d.save({accountId:f.id},a.item).$promise.then(function(a){e.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)})["catch"](function(a){e.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.zendesk.view.configurations.list",{url:"/list",templateUrl:"app/zendesk/view/configuration/list/list.html",controller:"ZendeskViewConfigurationListCtrl"})}]),angular.module("xCallyShuttleApp").controller("ZendeskViewConfigurationViewCtrl",["$scope","$stateParams","$filter","$translate","socket","ZendeskConfiguration","xAlert","variable","Variable","ZendeskAccount","Tag","ZendeskField",function(a,b,c,d,e,f,g,h,i,j,k,l){a.$on("$destroy",function(){e.unsyncUpdates("zendesk_field")}),a.config={autoHideScrollbar:!1,theme:"dark",advanced:{updateOnContentResize:!0},setHeight:300,scrollInertia:0},a.fieldType=[{type:"string",title:"String"},{type:"variable",title:"Variable"},{type:"customVariable",title:"Custom Variable"}],a.descFieldType=[{type:"string",title:"String"},{type:"keyValue",title:"Key Value"}],a.groupVariableByGroup=function(a){switch(a.group){case"voice_queue":return"Voice: Queue";case"voice_outbound":return"Voice: Outbound";default:return"Other"}},a.initView=function(){a.configurationName="",a.subjectConfig=[],a.descriptionConfig=[],a.fieldConfig=[],a.selectedTags={tags:[]},a.variables=h},a.getConfiguration=function(){return f.get({accountId:b.id,id:b.configurationId}).$promise.then(function(b){a.configurationName=b.name,a.subjectConfig=b.Subject,a.descriptionConfig=b.Description,a.fieldConfig=b.Field,a.selectedTags={tags:_.map(b.Tags,function(a){return a.id})},e.socket.on("zendesk_field:remove",function(b){_.remove(a.subjectConfig,{id:b.id}),_.remove(a.descriptionConfig,{id:b.id}),_.remove(a.fieldConfig,{id:b.id})})})["catch"](function(a){g.error(a)})},a.getCustomVariables=function(){return i.get().$promise.then(function(b){a.customVariables=b.rows})["catch"](function(a){g.error(a)})},a.getFields=function(){return j.fields({id:b.id}).$promise.then(function(b){a.accountFields=c("zendesk")(b)})["catch"](function(a){g.error(a)})},a.getTags=function(){return k.get().$promise.then(function(b){a.tags=b.rows})["catch"](function(a){g.error(a)})},a.addItem=function(c){var d={};switch(c){case"subject":case"description":d={type:"string",content:""};break;case"field":d={content:""}}return f.save({accountId:b.id,id:b.configurationId,controller:c},d).$promise.then(function(b){switch(c){case"subject":a.subjectConfig.push(b);break;case"description":a.descriptionConfig.push(b);break;case"field":a.fieldConfig.push(b)}})["catch"](function(a){g.error(a)})},a.changeType=function(b){"variable"===b.type?(b.content="",b.variableName=""):"string"===b.type?(b.VariableId=null,b.variableName=""):"customVariable"===b.type&&(b.VariableId=null,b.content=""),a.updateField(b)},a.updateField=function(a){return l.update({accountId:b.id,configurationId:b.configurationId,id:a.id},a).$promise.then(function(){})["catch"](function(a){g.error(a)})},a.removeItem=function(a){return l["delete"]({accountId:b.id,configurationId:b.configurationId,id:a.id}).$promise.then(function(){g.show(d.instant("MESSAGE_WELL_DONE")+"!","success")})["catch"](function(a){g.error(a)})},a.changeDescType=function(b){"keyValue"===b.type?(b.content="","string"===b.keyType?(b.VariableId=null,b.variableName=""):"variable"===b.keyType?(b.keyContent="",b.VariableId=null):"customVariable"===b.keyType&&(b.keyContent="",b.variableName="")):"string"===b.type&&(b.VariableId=null,b.variableName="",b.key="",b.keyContent=""),a.updateField(b)},a.changeFieldType=function(b){if(b.content="",b.variableName="",b.nameField="",b.VariableId=null,b.idField){var c=_.find(a.accountFields,"id",b.idField);c&&(c.system_field_options?(b.customField=!1, +b.nameField=c.title.toLowerCase()):b.customField=!0)}a.updateField(b)},a.updateTags=function(){return f.update({accountId:b.id,id:b.configurationId,controller:"tags"},a.selectedTags.tags).$promise.then(function(){g.show(d.instant("MESSAGE_WELL_DONE")+".","success")})["catch"](function(a){g.error(a)})},a.getSystemFieldOptions=function(b){if(b){var c=_.find(a.accountFields,"id",b);return c?c.system_field_options?c.system_field_options:null:void 0}}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.zendesk.view.configurations.view",{url:"/view/:configurationId",templateUrl:"app/zendesk/view/configuration/view/view.html",controller:"ZendeskViewConfigurationViewCtrl"})}]),angular.module("xCallyShuttleApp").controller("ZendeskViewCtrl",["$scope","$stateParams","$translate","xAlert","Modal","ZendeskAccount",function(a,b,c,d,e,f){a.initView=function(){return f.get({id:b.id}).$promise.then(function(b){a.account=b})["catch"](function(a){d.error(a)})},a.updateItem=function(){return f.update({id:b.id},a.account).$promise.then(function(){d.show(c.instant("MESSAGE_WELL_DONE")+".","success")})["catch"](function(a){d.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.zendesk.view",{url:"/view/:id",templateUrl:"app/zendesk/view/view.html",controller:"ZendeskViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.zendesk.view.account",{url:"/account",templateUrl:"app/zendesk/view/view.account.html"})}]),angular.module("xCallyShuttleApp").controller("ZendeskWizardCtrl",["$scope","$http","$location","$translate","xAlert","WizardHandler","ZendeskAccount",function(a,b,c,d,e,f,g){a.translate=d,a.initWizard=function(){a.$translate=d,a.forms={},a.item={},a.item.authType="password",a.item.serverUrl=c.protocol()+"://"+location.host},a.next=function(){f.wizard().next()},a.exitValidation=function(a){return a},a.createItem=function(){return g.save(a.item).$promise.then(function(){e.show(d.instant("MESSAGE_WELL_DONE")+".","success"),c.path("/zendesk/list")})["catch"](function(a){e.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.zendesk.wizard",{url:"/wizard",templateUrl:"app/zendesk/wizard/wizard.html",controller:"ZendeskWizardCtrl"})}]),angular.module("xCallyShuttleApp").factory("ZendeskAccount",["$resource",function(a){return a("/api/zendesk/accounts/:id/:controller",{id:"@id"},{update:{method:"PUT"},fields:{params:{controller:"fields"},isArray:!0},check:{params:{controller:"check"}}})}]).factory("ZendeskConfiguration",["$resource",function(a){return a("/api/zendesk/accounts/:accountId/configurations/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]).factory("ZendeskField",["$resource",function(a){return a("/api/zendesk/accounts/:accountId/configurations/:configurationId/fields/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.zendesk",{url:"/zendesk",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").factory("Auth",["$location","$rootScope","$http","User","$cookieStore","$q","localStorageService",function(a,b,c,d,e,f,g){var h={};return e.get("token")&&(h=d.me()),{login:function(a,i){var j=i||angular.noop,k=f.defer();return c.post("/auth/local",{name:a.name,password:a.password,remember:a.remember}).success(function(a){return e.put("role",a.role),e.put("token",a.token),e.put("userId",a.userId),g.set("loggedIn",!0),h=d.me({},function(){b.$broadcast("login")}),k.resolve(a),j()}).error(function(a){return this.logout(),k.reject(a),j(a)}.bind(this)),k.promise},recover:function(a,b){var d=b||angular.noop,e=f.defer();return c.post("/auth/local/recover",{email:a.email}).success(function(a){return e.resolve(a),d()}).error(function(a){return e.reject(a),d(a)}.bind(this)),e.promise},reset:function(a,b){var d=b||angular.noop,e=f.defer();return c.post("/auth/local/reset/"+a.token,{password:a.password}).success(function(a){return e.resolve(a),d()}).error(function(a){return e.reject(a),d(a)}.bind(this)),e.promise},loginWithToken:function(a,c,f){e.put("role",f),e.put("token",a),e.put("userId",c),h=d.me({},function(){b.$broadcast("login")})},logout:function(){e.remove("role"),e.remove("token"),e.remove("userId"),g.set("loggedIn"),h={},b.$broadcast("logout")},createUser:function(a,b){var c=b||angular.noop;return d.save(a,function(b){return e.put("token",b.token),h=d.me(),c(a)},function(a){return this.logout(),c(a)}.bind(this)).$promise},changePassword:function(a,b,c){var e=c||angular.noop;return d.changePassword({id:h.id},{oldPassword:a,newPassword:b},function(a){return e(null,a)},function(a){return e(a)}).$promise},getCurrentUser:function(){return h},isLoggedIn:function(){return h.hasOwnProperty("role")},isLoggedInAsync:function(a){h.hasOwnProperty("$promise")?h.$promise.then(function(){a(!0)})["catch"](function(){a(!1)}):a(h.hasOwnProperty("role")?!0:!1)},isAdmin:function(){return"admin"===(e.get("role")||h.role)},isUser:function(){return"user"===(e.get("role")||h.role)},isAgent:function(){return"agent"===(e.get("role")||h.role)},getRole:function(){return h.role},getToken:function(){return e.get("token")}}}]),angular.module("xCallyShuttleApp").directive("actionBuilderAccountEmail",["$compile","$timeout","MailAccount","xAlert","Template",function(a,b,c,d,e){return{restrict:"E",scope:{element:"=",form:"="},templateUrl:"components/directives/action/accountEmail/actionBuilder.html",compile:function(f){function g(a,b){var c=[];for(a=a||5,b=b||"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";--a;)c.push(b.charAt(Math.floor(Math.random()*b.length)));return c.join("")}var h,i;return h=f.contents().remove(),function(f,j){f.randomName=g(),b(function(){return c.get().$promise.then(function(a){return _.forEach(a.rows,function(a){a.id=String(a.id)}),f.accounts=a,e.get().$promise}).then(function(a){_.forEach(a.rows,function(a){a.id=String(a.id)}),f.templates=a.rows})["catch"](function(a){d.error(a)})}),i||(i=a(h)),j.append(i(f,function(a){return a}))}}}}]),angular.module("xCallyShuttleApp").directive("actionBuilderAccountSms",["$compile","$timeout","SmsAccount","xAlert",function(a,b,c,d){return{restrict:"E",scope:{element:"=",form:"="},templateUrl:"components/directives/action/accountSms/actionBuilder.html",compile:function(e){function f(a,b){var c=[];for(a=a||5,b=b||"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";--a;)c.push(b.charAt(Math.floor(Math.random()*b.length)));return c.join("")}var g,h;return g=e.contents().remove(),function(e,i){e.randomName=f(),b(function(){return c.get().$promise.then(function(a){_.forEach(a.rows,function(a){a.id=String(a.id)}),e.accounts=a})["catch"](function(a){d.error(a)})}),h||(h=a(g)),i.append(h(e,function(a){return a}))}}}}]),angular.module("xCallyShuttleApp").directive("actionBuilderAccountTemplate",["$compile","xAlert","$http","$timeout","Template","MailAccount",function(a,b,c,d,e,f){return{restrict:"E",scope:{element:"=",form:"="},templateUrl:"components/directives/action/accountTemplate/actionBuilder.html",compile:function(c){function g(a,b){var c=[];for(a=a||5,b=b||"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";--a;)c.push(b.charAt(Math.floor(Math.random()*b.length)));return c.join("")}var h,i;return h=c.contents().remove(),function(c,j){c.randomName=g(),d(function(){return e.get().$promise.then(function(a){_.forEach(a.rows,function(a){a.id=String(a.id)}),c.templates=a}).then(function(){return f.get()}).then(function(a){c.accounts=a})["catch"](function(a){b.error(a)})}),i||(i=a(h)),j.append(i(c,function(a){return a}))}}}}]),angular.module("xCallyShuttleApp").directive("actionBuilderClose",["$compile",function(a){return{restrict:"E",scope:{element:"=",form:"="},templateUrl:"components/directives/action/close/actionBuilder.html",compile:function(b){function c(a,b){var c=[];for(a=a||5,b=b||"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";--a;)c.push(b.charAt(Math.floor(Math.random()*b.length)));return c.join("")}var d,e;return d=b.contents().remove(),function(b,f){b.randomName=c(),e||(e=a(d)),f.append(e(b,function(a){return a}))}}}}]),angular.module("xCallyShuttleApp").directive("actionBuilderEmail",["$compile","xAlert","$timeout","Template",function(a,b,c,d){return{restrict:"E",scope:{element:"=",form:"="},templateUrl:"components/directives/action/email/actionBuilder.html",compile:function(e){function f(a,b){var c=[];for(a=a||5,b=b||"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";--a;)c.push(b.charAt(Math.floor(Math.random()*b.length)));return c.join("")}var g,h;return g=e.contents().remove(),function(e,i){e.randomName=f(),c(function(){return d.get().$promise.then(function(a){_.forEach(a.rows,function(a){a.id=String(a.id)}),e.templates=a.rows})["catch"](function(a){b.error(a)})}),h||(h=a(g)),i.append(h(e,function(a){return a}))}}}}]),angular.module("xCallyShuttleApp").directive("actionBuilderForward",["$compile",function(a){return{restrict:"E",scope:{element:"=",form:"="},templateUrl:"components/directives/action/forward/actionBuilder.html",compile:function(b){function c(a,b){var c=[];for(a=a||5,b=b||"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";--a;)c.push(b.charAt(Math.floor(Math.random()*b.length)));return c.join("")}var d,e;return d=b.contents().remove(),function(b,f){b.randomName=c(),e||(e=a(d)),f.append(e(b,function(a){return a}))}}}}]),angular.module("xCallyShuttleApp").directive("actionBuilderHttp",["$compile",function(a){return{restrict:"E",scope:{element:"=",form:"="},templateUrl:"components/directives/action/http/actionBuilder.html",compile:function(b){function c(a,b){var c=[];for(a=a||5,b=b||"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";--a;)c.push(b.charAt(Math.floor(Math.random()*b.length)));return c.join("")}var d,e;return d=b.contents().remove(),function(b,f){b.randomName=c(),b.methods=["GET","POST"],e||(e=a(d)),f.append(e(b,function(a){return a}))}}}}]),angular.module("xCallyShuttleApp").directive("actionBuilderIntegration",["$compile","xAlert","$http","$timeout","Integration","$translate","ZendeskAccount","DeskAccount","SalesforceAccount","FreshdeskAccount","SugarcrmAccount",function(a,b,c,d,e,f,g,h,i,j,k){return{restrict:"E",scope:{element:"=",form:"="},templateUrl:"components/directives/action/integration/actionBuilder.html",compile:function(c){function f(a,b){var c=[];for(a=a||5,b=b||"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";--a;)c.push(b.charAt(Math.floor(Math.random()*b.length)));return c.join("")}var l,m;return l=c.contents().remove(),function(c,n){c.randomName=f(),d(function(){return e.get({active:1}).$promise.then(function(a){_.remove(a.rows,function(a){return"iframe"===a.state}),c.integrations=a.rows,c.element.data1&&o()})["catch"](function(a){b.error(a)})});var o=function(){var a;switch(c.element.data1){case"zendesk":a=g;break;case"desk":a=h;break;case"salesforce":a=i;break;case"freshdesk":a=j;break;case"sugarcrm":a=k}return a?a.get().$promise.then(function(a){c.accounts=a.rows,c.element.data2&&p()})["catch"](function(a){b.error(a)}):void 0},p=function(){c.configurations=_.find(c.accounts,{id:Number(c.element.data2)}).Configurations};c.changeIntegration=function(){c.element.data2="",o()},c.changeAccount=function(){c.element.data3="",p()},m||(m=a(l)),n.append(m(c,function(a){return a}))}}}}]),angular.module("xCallyShuttleApp").directive("actionBuilderJscripty",["$compile","xAlert","$http","$timeout","Template","$translate","JscriptyProject",function(a,b,c,d,e,f,g){return{restrict:"E",scope:{element:"=",form:"="},templateUrl:"components/directives/action/jscripty/actionBuilder.html",compile:function(c){var e,f;return e=c.contents().remove(),function(c,h){function i(a,b){var c=[];for(a=a||5,b=b||"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";--a;)c.push(b.charAt(Math.floor(Math.random()*b.length)));return c.join("")}c.randomName=i(),d(function(){return g.get().$promise.then(function(a){_.forEach(a.rows,function(a){a.id=String(a.id)}),c.projects=a.rows})["catch"](function(a){b.error(a)})}),f||(f=a(e)),h.append(f(c,function(a){return a}))}}}}]),angular.module("xCallyShuttleApp").directive("actionBuilderMotionBar",["$compile","xAlert","$http","$timeout","Template",function(a,b,c,d,e){return{restrict:"E",scope:{element:"=",form:"="},templateUrl:"components/directives/action/motionbar/actionBuilder.html",compile:function(c){var f,g;return f=c.contents().remove(),function(c,h){function i(){return e.get().$promise.then(function(a){_.forEach(a.rows,function(a){a.id=String(a.id)}),c.templates=a.rows})["catch"](function(a){b.error(a)})}function j(a,b){var c=[];for(a=a||5,b=b||"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";--a;)c.push(b.charAt(Math.floor(Math.random()*b.length)));return c.join("")}c.randomName=j(),c.motionActions=[{name:"Popup",value:"0"},{name:"URL",value:"1"},{name:"Windows App",value:"2"}],c.changeMode=function(){c.element.data2="",c.element.data3="",i()},d(function(){return i()}),g||(g=a(f)),h.append(g(c,function(a){return a}))}}}}]),angular.module("xCallyShuttleApp").directive("actionBuilderStatus",["$compile",function(a){return{restrict:"E",scope:{element:"=",form:"="},templateUrl:"components/directives/action/status/actionBuilder.html",compile:function(b){var c,d;return c=b.contents().remove(),function(b,e){function f(a,b){var c=[];for(a=a||5,b=b||"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";--a;)c.push(b.charAt(Math.floor(Math.random()*b.length)));return c.join("")}b.randomName=f(),b.states=[{name:"APPLICATION_STATUS_NEW",value:"NEW"},{name:"APPLICATION_STATUS_OPEN",value:"OPEN"},{name:"APPLICATION_STATUS_PENDING",value:"PENDING"},{name:"APPLICATION_STATUS_CLOSED",value:"CLOSED"}],d||(d=a(c)),e.append(d(b,function(a){return a}))}}}}]),angular.module("xCallyShuttleApp").directive("actionBuilderTag",["$compile","xAlert","$http","$timeout","Tag",function(a,b,c,d,e){return{restrict:"E",scope:{myElement:"=element",form:"="},templateUrl:"components/directives/action/tag/actionBuilder.html",compile:function(c){function f(a,b){var c=[];for(a=a||5,b=b||"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";--a;)c.push(b.charAt(Math.floor(Math.random()*b.length)));return c.join("")}var g,h;return g=c.contents().remove(),function(c,i){console.log("myElement",c.myElement),c.randomName=f(),c.data={tags:c.myElement.data1?c.myElement.data1.split(";"):[]},c.$watch("data.tags",function(a){c.myElement.data1=a.join(";")}),d(function(){return e.get().$promise.then(function(a){c.tags=a.rows})["catch"](function(a){b.error(a)})}),h||(h=a(g)),i.append(h(c,function(a){return a}))}}}}]),angular.module("xCallyShuttleApp").directive("actionBuilderTemplate",["$compile","xAlert","$timeout","Template",function(a,b,c,d){return{restrict:"E",scope:{element:"=",form:"="},templateUrl:"components/directives/action/template/actionBuilder.html",compile:function(e){function f(a,b){var c=[];for(a=a||5,b=b||"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";--a;)c.push(b.charAt(Math.floor(Math.random()*b.length)));return c.join("")}var g,h;return g=e.contents().remove(),function(e,i){e.randomName=f(),c(function(){return d.get().$promise.then(function(a){_.forEach(a.rows,function(a){a.id=String(a.id)}),e.templates=a.rows})["catch"](function(a){b.error(a)})}),h||(h=a(g)),i.append(h(e,function(a){return a}))}}}}]),angular.module("xCallyShuttleApp").directive("actionBuilderUrlForward",["$compile",function(a){return{restrict:"E",scope:{element:"=",form:"="},templateUrl:"components/directives/action/urlforward/actionBuilder.html",compile:function(b){function c(a,b){var c=[];for(a=a||5,b=b||"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";--a;)c.push(b.charAt(Math.floor(Math.random()*b.length)));return c.join("")}var d,e;return d=b.contents().remove(),function(b,f){b.randomName=c(),b.types=[{name:"HTTP GET",value:"GET"},{name:"HTTP POST",value:"POST"}],e||(e=a(d)),f.append(e(b,function(a){return a}))}}}}]),angular.module("xCallyShuttleApp").directive("conditionBuilder",["$compile","$timeout","$translate","xAlert",function(a,b,c,d){return{restrict:"E",scope:{element:"=",serviceindex:"=",service:"=",form:"="},templateUrl:"components/directives/condition/conditionBuilder.html",compile:function(e){var f,g;return f=e.contents().remove(),function(e,h){function i(a){var b=_.find(e.service.services[e.serviceindex].conditions,{value:a});if(b)if(e.elementType=b.type,b.arr)e.values=b.arr;else if(b.resource)return b.resource.get(b.params||{}).$promise.then(function(a){e.values=_.map(a.rows,function(a){return{name:a[b.resName||b.resValue],value:a[b.resValue]}})})["catch"](function(a){d.show(c.instant(a.message),"danger")})}function j(a,b){var c=[];for(a=a||5,b=b||"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";--a;)c.push(b.charAt(Math.floor(Math.random()*b.length)));return c.join("")}e._=_,e.randomName=j(),b(function(){e.element.field&&i(e.element.field)}),e.checkCondition=function(a){e.element.value="",e.element.operator="",i(a)},g||(g=a(f)),h.append(g(e,function(a){return a}))}}}}]),angular.module("xCallyShuttleApp").factory("xNotificationLicense",["Notification","$rootScope","$location",function(a,b,c){return{show:function(d){var e=b.$new();return e["class"]="alert-warning",e.icon="fa fa-exclamation-triangle",e.more=function(){c.path("/setting/license/view")},new a({delay:d,templateUrl:"components/factories/xNotificationLicense/xNotificationLicense.html",scope:e})}}}]),angular.module("xCallyShuttleApp").filter("secToTime",[function(){return function(a){return new Date(1970,0,1).setSeconds(a)}}]),angular.module("xCallyShuttleApp").controller("FooterController",["$scope","Setting",function(a,b){a.year=moment().year(),a.$on("$includeContentLoaded",function(){Layout.initFooter()}),a.initFooter=function(){return b.get({controller:"info"}).$promise.then(function(b){a.info=b})["catch"](function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").controller("HeaderController",["$scope","$rootScope","$location","$state","$http","$interval","$notification","Auth","xAlert","socket","xNotificationLicense","toastr","localStorageService","Agent","SmsReport","MailReport","OpenChannelReport","ChatReport","ChatRoom","xNotification","$timeout","$translate","$window","User","Pause","Action","FaxReport","List","MailAccount","ChatWebsite","FaxAccount","SmsAccount","OpenChannelAccount","ReportAgent","$uibModal","$log","ReportDial",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K){function L(a,b,c){return null===b&&(b=50),null===c&&(c="..."),a&&a.length>b?a.substring(0,b-c.length)+c:a}function M(b){var c,d="reason";switch(b){case"mail":c=p;break;case"chat":c=r;break;case"fax":c=A;break;case"sms":c=o;break;case"agent":c=H,d="lastevent";break;case"dial":c=K,d="dialstatus";break;case"openchannel":c=q;break;default:return}return c.get({limit:10,order:"updatedAt DESC"}).$promise.then(function(c){_.forEach(c.rows,function(a){if(a[d])switch(a[d].toLowerCase()){case"answer":case"connect":case"complete":a.status="taken";break;case"answered_elsewhere":a.status="taken_elsewhere";break;case"called":a.status="lost";break;case"busy":a.status="busy";break;case"rejected":a.status="rejected";break;case"cancel":case"abandoned":a.status="abandoned"}}),a.agentNotifications[b].rows=c.rows,j.socket.on("report_"+b+":save",function(c){c.status="none",a.agentNotifications[b].rows.unshift(c),"agent"!==b&&"dial"!==b&&(a.agentNotifications[b].timeout[c.id]=setTimeout(function(){clearTimeout(a.agentNotifications[b].timeout[c.id]),_.find(a.agentNotifications[b].rows,{id:c.id}).status="lost",angular.element(document.getElementById("header_"+b+"_notification_bar")).hasClass("open")||a.agentNotifications[b]["new"]++,delete a.agentNotifications[b].timeout[c.id]},1e3*c.timeslot))}),j.socket.on("report_"+b+":update",function(c){if("agent"===b){var e=_.find(a.activeCalls,{id:c.id});e&&(c.agentcomplete||c.agentringnoanswer||c.agentdump)?_.remove(a.activeCalls,{id:c.id}):!c.agentconnectAt||c.agentcomplete||c.agentringnoanswer||c.agentdump||a.activeCalls.push(c)}var f=_.find(a.agentNotifications[b].rows,{id:c.id});if(f&&("agent"!==b&&"dial"!==b&&a.agentNotifications[b].timeout[c.id]&&(clearTimeout(a.agentNotifications[b].timeout[c.id]),delete a.agentNotifications[b].timeout[c.id]),c[d])){switch(c[d].toLowerCase()){case"answer":case"connect":case"complete":c.status="taken";break;case"answered_elsewhere":c.status="taken_elsewhere",angular.element(document.getElementById("header_"+b+"_notification_bar")).hasClass("open")||a.agentNotifications.chat["new"]++;break;case"busy":c.status="busy",angular.element(document.getElementById("header_"+b+"_notification_bar")).hasClass("open")||a.agentNotifications[b]["new"]++;break;case"rejected":c.status="rejected";break;case"cancel":case"abandoned":c.status="abandoned",angular.element(document.getElementById("header_"+b+"_notification_bar")).hasClass("open")||a.agentNotifications[b]["new"]++}_.merge(f,c)}})})["catch"](function(a){i.error(a)})}function N(){return a.headerAgent=h.getCurrentUser(),a.readyTimer=1e3*moment().unix(),y.get().$promise.then(function(b){a.headerPauses=b.rows,j.syncUpdates("pause",a.headerPauses)}).then(function(){j.socket.on("agent:save",function(b){a.headerAgent.id===b.id&&(_.merge(a.headerAgent,b),b.voicePause&&b.mailPause&&b.chatPause&&b.faxPause&&b.smsPause&&b.openchannelPause||(a.readyTimer=1e3*moment().unix()))})})["finally"](function(){h.getCurrentUser().loginInPause&&!m.get("loggedIn")&&a.headerPause("pause")})["catch"](function(a){console.log("Error synchronizing agent status:",a)})}function O(){return H.get({id:"active",controller:"calls"}).$promise.then(function(b){a.activeCalls=b.rows})["catch"](function(a){i.error(a)})}a.moment=moment,$(document).on("click",".tabbed-dropdown",function(a){a.stopPropagation()}),a.license.token!==a.license.token2&&(h.isAdmin()||h.isUser())&&f(function(){"main.setting.license.view"!==d.current.name&&k.show(3e4)},3e4),a.openRoom=function(b,c){var d=_.find(a.workspaces,{id:b,type:c});if(d)d.active=!0;else{var e;switch(c){case"mailRoom":e="icon-envelope";break;case"chatRoom":e="fa fa-users";break;case"faxRoom":e="fa fa-fax";break;case"smsRoom":e="glyphicon glyphicon-comment";break;case"openchannelRoom":e="icon-globe"}a.workspaces.push({id:b,type:c,"class":e,active:!0})}},a.toggleSidebar=function(){b.settings.layout.pageSidebarClosed=!b.settings.layout.pageSidebarClosed,m.set("sidebarClosed",b.settings.layout.pageSidebarClosed)},a.chooseContact=function(b){var c=I.open({animation:!0,templateUrl:"app/main/chooseContact.modal.html",controller:"ChooseContactModalCtrl",resolve:{data:function(){return{eventChannel:"voice",calleridnum:b}}}});c.result.then(function(c){c?a.openContactTab(c):a.newContact({calleridnum:b})},function(){J.info("Modal dismissed at: "+new Date)})},a.loadNotifications=function(b){if(!a.busyLoad[b].end){a.busyLoad[b].busy=!0;var c,d="reason";switch(b){case"mail":c=p;break;case"chat":c=r;break;case"fax":c=A;break;case"sms":c=o;break;case"agent":c=H,d="lastevent";break;case"dial":c=K,d="dialstatus";break;case"openchannel":c=q;break;default:return}return c.get({limit:10,offset:a.agentNotifications[b].rows.length,order:"updatedAt DESC"}).$promise.then(function(c){c.rows.length?(_.forEach(c.rows,function(a){if(a[d])switch(a[d].toLowerCase()){case"answer":case"connect":case"complete":a.status="taken";break;case"answered_elsewhere":a.status="taken_elsewhere";break;case"called":a.status="lost";break;case"busy":a.status="busy";break;case"rejected":a.status="rejected";break;case"abandoned":a.status="abandoned"}}),a.agentNotifications[b].rows=a.agentNotifications[b].rows.concat(c.rows)):a.busyLoad[b].end=!0,a.busyLoad[b].busy=!1})["catch"](function(a){i.error(a)})}},a.headerPause=function(b,c,d){return z.save({name:b,agent:a.headerAgent.id,type:c||"DEFAULT PAUSE",data4:c||"DEFAULT PAUSE",channel:d||"all"}).$promise.then(function(){i.show(v.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){i.error(a)})},h.isAgent()&&(N(),a.agentNotifications={mail:{rows:[],"new":0,timeout:{}},chat:{rows:[],"new":0,timeout:{}},fax:{rows:[],"new":0,timeout:{}},sms:{rows:[],"new":0,timeout:{}},agent:{rows:[],"new":0},dial:{rows:[],"new":0},openchannel:{rows:[],"new":0}},a.busyLoad={mail:{busy:!1,end:!1},chat:{busy:!1,end:!1},fax:{busy:!1,end:!1},sms:{busy:!1,end:!1},agent:{busy:!1,end:!1},dial:{busy:!1,end:!1},openchannel:{busy:!1,end:!1}},O(),M("agent"),M("dial"),a.license.mail&&M("mail"),a.license.chat&&M("chat"),a.license.fax&&M("fax"),a.license.messaging&&M("sms"),a.license.openchannel&&M("openchannel")),j.socket.on("user_has_chat_room:save",function(b){var c;return s.get({id:Number(b.ChatRoomId)}).$promise.then(function(b){console.log("chatRoom",b),c=b;var d=_.find(a.workspaces,{id:Number(c.id),type:"chatRoom"});d?d.name=a.getFullnames(c):a.workspaces.push({id:c.id,name:a.getFullnames(c),type:"chatRoom","class":"icon-bubble",unread:1})})["catch"](function(a){console.error(a)})}),j.socket.on("chat_message:save",function(b){var c;if(b.UserId!==h.getCurrentUser().id){var d=_.find(a.workspaces,{id:Number(b.ChatRoomId),type:"chatRoom"});if(!d)return s.get({id:Number(b.ChatRoomId)}).$promise.then(function(b){c=b,a.workspaces.push({id:c.id,name:a.getFullnames(b),type:"chatRoom","class":"icon-bubble",unread:1})})["catch"](function(a){console.error(a)})}});var P=function(){return w.Notification},Q=function(){b.settings.layout.onFocus=!0},R=function(){b.settings.layout.onFocus=!1};w.onfocus=Q,w.onblur=R,a.getFullnames=function(a){var b=_.map(a.Users,"fullname");return a.ChatVisitor&&b.unshift(a.ChatVisitor.fullname),_.without(b,h.getCurrentUser().fullname).join(", ")},a.openContact=function(b,c,d){if(d&&"<unknown>"!==d){var e,f;switch(b){case"mail":e=C,f={email:d};break;case"chat":e=D,f={email:d};break;case"fax":e=E,f={fax:d};break;case"sms":e=F,f={mobile:d};break;default:return}return e.get({id:c}).$promise.then(function(a){return a.ListId?B.save({listId:a.ListId,controller:"contacts"},f).$promise:null}).then(function(b){if(b){var c=_.find(a.workspaces,{contactID:b.id});c?c.active=!0:a.workspaces.push({active:!0,"class":"icon-user",contactID:b.id,name:b.email,type:"contact"})}else i.show(v.instant("MESSAGE_NO_LIST_CONFIGURED"),"info")})["catch"](function(a){console.error(a)})}},a.initHeader=function(){"agent"===h.getCurrentUser().role&&(j.socket.on("report_chat:save",function(a){P&&!b.settings.layout.onFocus&&g("CHAT CHANNEL",{icon:"assets/images/media/channels/chat64.png",body:"NEW Incoming Chat Visitor!",delay:1e3*a.timeslot});var c="<b>"+v.instant("APPLICATION_FROM")+"</b>: "+a.visitorname+"<br><b>"+v.instant("APPLICATION_EMAIL")+"</b>: "+a.visitoremail;"queue"===a.application&&(c+="<br><b>"+v.instant("APPLICATION_QUEUE")+"</b>: "+a.queuename),t.show(v.instant("APPLICATION_NEW_CHAT_REQUEST"),c,"chat",1e3*a.timeslot,function(){return r.get({id:a.id,controller1:"accept",controller2:a.uniqueid}).$promise.then(function(){i.show("Chat properly assigned","success")})["catch"](function(a){switch(a.status){case 504:i.show(v.instant("MESSAGE_CHAT_ALREADY_MANAGED"),"info");break;default:i.error(a)}})},function(){return r.get({id:a.id,controller1:"reject"}).$promise.then(function(){i.show("Chat properly rejected","success")})["catch"](function(a){i.error(a)})})}),j.socket.on("report_mail:save",function(c){var d=_.find(a.workspaces,{id:c.roomid,type:"mailRoom"});if(!d){var e="<b>"+v.instant("APPLICATION_ACCOUNT")+"</b>: "+c.accountname+"<br> <b>"+v.instant("APPLICATION_FROM")+"</b>: "+c.from+"<br> <b>"+v.instant("APPLICATION_SUBJECT")+"</b>: "+(L(c.subject,30,"...")||"No subject");"queue"===c.application&&(e+="<br><b>"+v.instant("APPLICATION_QUEUE")+"</b>: "+c.queuename),t.show(v.instant("APPLICATION_NEW_MAIL_REQUEST"),e,"mail",1e3*c.timeslot,function(){return p.get({id:c.id,controller1:"accept",controller2:c.uniqueid}).$promise.then(function(){var b=_.find(a.workspaces,{id:c.roomid,type:"mailRoom"});b?b.active=!0:a.workspaces.push({id:c.roomid,name:c.subject||"No subject",type:"mailRoom","class":"icon-envelope",active:!0,unread:0})})["catch"](function(a){switch(a.status){case 504:i.show(v.instant("MESSAGE_MAIL_ALREADY_MANAGED"),"info");break;default:i.error(a)}})},function(){return p.get({id:c.id,controller1:"reject"}).$promise["catch"](function(a){i.error(a)})}),P&&!b.settings.layout.onFocus?g("MAIL CHANNEL",{icon:"assets/images/media/channels/mail64.png",body:"NEW Incoming Mail Message!",delay:1e3*c.timeslot}):console.log("Notification API not supported in your browser")}}),j.socket.on("report_sms:save",function(b){var c="<b>"+v.instant("APPLICATION_ACCOUNT")+"</b>: "+b.accountname+"<br> <b>"+v.instant("APPLICATION_FROM")+"</b>: "+b.from;"queue"===b.application&&(c+="<br><b>"+v.instant("APPLICATION_QUEUE")+"</b>: "+b.queuename),t.show(v.instant("APPLICATION_NEW_SMS_REQUEST"),c,"sms",1e3*b.timeslot,function(){return o.get({id:b.id,controller1:"accept",controller2:b.uniqueid}).$promise.then(function(){var c=_.find(a.workspaces,{id:b.roomid,type:"smsRoom"});c?c.active=!0:a.workspaces.push({id:b.roomid,name:b.from,type:"smsRoom","class":"glyphicon glyphicon-comment",active:!0})})["catch"](function(a){switch(a.status){case 504:i.show(v.instant("MESSAGE_SMS_ALREADY_MANAGED"),"info");break;default:i.error(a)}})},function(){return o.get({id:b.id,controller1:"reject"}).$promise.then(function(){i.show("SMS properly rejected","success")})["catch"](function(a){i.error(a)})}),P?g("SMS CHANNEL",{icon:"assets/images/media/channels/chat64.png",body:"NEW Incoming SMS Message!",delay:1e3*b.timeslot}):console.log("Notification API not supported in your browser")}),j.socket.on("report_openchannel:save",function(b){var c="<b>"+v.instant("APPLICATION_ACCOUNT")+"</b>: "+b.accountname+"<br> <b>"+v.instant("APPLICATION_FROM")+"</b>: "+b.from;"queue"===b.application&&(c+="<br><b>"+v.instant("APPLICATION_QUEUE")+"</b>: "+b.queuename),t.show(v.instant("APPLICATION_NEW_MESSAGE"),c,"openchannel",1e3*b.timeslot,function(){return q.get({id:b.id,controller1:"accept",controller2:b.uniqueid}).$promise.then(function(){var c=_.find(a.workspaces,{id:b.roomid,type:"openchannelRoom"});c?c.active=!0:a.workspaces.push({id:b.roomid,name:b.from,type:"openchannelRoom","class":"icon-globe",active:!0})})["catch"](function(a){switch(a.status){case 504:i.show(v.instant("MESSAGE_ALREADY_MANAGED"),"info");break;default:i.error(a)}})},function(){return q.get({id:b.id,controller1:"reject"}).$promise.then(function(){i.show("Message properly rejected","success")})["catch"](function(a){i.error(a)})}),P?g("OPEN CHANNEL",{icon:"assets/images/media/channels/chat64.png",body:"NEW Incoming Message!",delay:1e3*b.timeslot}):console.log("Notification API not supported in your browser")}),j.socket.on("report_fax:save",function(c){var d=_.find(a.workspaces,{id:c.roomid,type:"faxRoom"});if(!d){var e="<b>"+v.instant("APPLICATION_ACCOUNT")+"</b>: "+c.accountname+"<br> <b>"+v.instant("APPLICATION_PHONE")+"</b>: "+c.from;"queue"===c.application&&(e+="<br><b>"+v.instant("APPLICATION_QUEUE")+"</b>: "+c.queuename),t.show(v.instant("APPLICATION_NEW_FAX_REQUEST"),e,"fax",1e3*c.timeslot,function(){return A.get({id:c.id,controller1:"accept",controller2:c.uniqueid}).$promise.then(function(){var b=_.find(a.workspaces,{id:c.roomid,type:"faxRoom"});b?b.active=!0:a.workspaces.push({id:c.roomid,name:c.from,type:"faxRoom","class":"fa fa-fax",active:!0,unread:0})})["catch"](function(a){switch(a.status){case 504:i.show(v.instant("MESSAGE_FAX_ALREADY_MANAGED"),"info");break;default:i.error(a)}})},function(){return A.get({id:c.id,controller1:"reject"}).$promise["catch"](function(a){i.err(a)})}),P&&!b.settings.layout.onFocus?g("FAX CHANNEL",{icon:"assets/images/media/channels/telephone124.png", +body:"NEW Incoming Fax Message!",delay:1e3*c.timeslot}):console.log("Notification API not supported in your browser")}}))},a.logout=function(){return e.get("/auth/local/logout").success(function(){h.logout(),c.path("/login")}).error(function(a){console.error(a)})},a.isActive=function(a){return a===c.path()},a.$on("$destroy",function(){console.log("header $destroy"),j.unsyncUpdates("pause"),j.unsyncUpdates("agent"),j.unsyncUpdates("report_chat"),j.unsyncUpdates("report_mail"),j.unsyncUpdates("report_fax"),j.unsyncUpdates("report_sms"),j.unsyncUpdates("report_openchannel"),j.unsyncUpdates("user_has_chat_room"),j.unsyncUpdates("chat_message")})}]),angular.module("xCallyShuttleApp").factory("Modal",["$rootScope","$uibModal",function(a,b){function c(c,d){var e=a.$new();return c=c||{},d=d||"modal-default",angular.extend(e,c),b.open({templateUrl:"components/modal/delete.html",windowClass:d,scope:e})}return{confirm:{"delete":function(a){return a=a||angular.noop,function(){var b,d=Array.prototype.slice.call(arguments),e=d.shift();b=c({modal:{dismissable:!0,title:"Confirm Delete",html:"<p>Are you sure you want to delete"+(e?"<strong> "+e+"</strong>":" selected items")+"?</p>",buttons:[{classes:"btn red",text:"Delete",click:function(a){b.close(a)}},{classes:"btn default",text:"Cancel",click:function(a){b.dismiss(a)}}]}},"over-topbar center"),b.result.then(function(b){a.apply(b,d)})}}}}}]),angular.module("xCallyShuttleApp").service("application",function(){var a={applications:[{type:null,name:"APPLICATION_QUEUE",value:"Queue"},{type:null,name:"APPLICATION_PLAYBACK",value:"Playback"},{type:null,name:"Dial",value:"Dial"},{type:"internalDial",name:"APPLICATION_INTERNAL_DIAL",value:"Dial"},{type:"externalDial",name:"APPLICATION_EXTERNAL_DIAL",value:"Dial"},{type:"RingGroup",name:"Ring Group",value:"Dial"},{type:null,name:"Cally-Square Project",value:"AGI"},{type:null,name:"GoTo",value:"Goto"},{type:null,name:"Hangup",value:"Hangup"},{type:null,name:"Set",value:"Set"},{type:"custom",name:"Custom",value:"custom"},{type:null,name:"APPLICATION_VOICEMAIL",value:"Voicemail"}],queueOptions:[{value:"C",name:"APPLICATION_QUEUE_OPTION_C"},{value:"c",name:"APPLICATION_QUEUE_OPTION_c"},{value:"d",name:"APPLICATION_QUEUE_OPTION_d"},{value:"F",name:"APPLICATION_QUEUE_OPTION_F"},{value:"h",name:"APPLICATION_QUEUE_OPTION_h"},{value:"H",name:"APPLICATION_QUEUE_OPTION_H"},{value:"n",name:"APPLICATION_QUEUE_OPTION_n"},{value:"i",name:"APPLICATION_QUEUE_OPTION_i"},{value:"I",name:"APPLICATION_QUEUE_OPTION_I"},{value:"r",name:"APPLICATION_QUEUE_OPTION_r"},{value:"R",name:"APPLICATION_QUEUE_OPTION_R"},{value:"t",name:"APPLICATION_QUEUE_OPTION_t"},{value:"T",name:"APPLICATION_QUEUE_OPTION_T"},{value:"w",name:"APPLICATION_QUEUE_OPTION_w"},{value:"W",name:"APPLICATION_QUEUE_OPTION_W"},{value:"k",name:"APPLICATION_QUEUE_OPTION_k"},{value:"K",name:"APPLICATION_QUEUE_OPTION_K"},{value:"x",name:"APPLICATION_QUEUE_OPTION_x"},{value:"X",name:"APPLICATION_QUEUE_OPTION_X"}],audioOptions:[{value:"skip",name:"APPLICATION_PLAYBACK_OPTION_SKIP"},{value:"noanswer",name:"APPLICATION_PLAYBACK_OPTION_NOANSWER"},{value:"j",name:"APPLICATION_PLAYBACK_OPTION_J"},{value:"say",name:"APPLICATION_PLAYBACK_OPTION_SAY"}],hangupCauses:[{value:"",name:"--"},{value:"1",name:"APPLICATION_HANGUP_CAUSE_1"},{value:"16",name:"APPLICATION_HANGUP_CAUSE_16"},{value:"17",name:"APPLICATION_HANGUP_CAUSE_17"},{value:"18",name:"APPLICATION_HANGUP_CAUSE_18"},{value:"21",name:"APPLICATION_HANGUP_CAUSE_21"},{value:"22",name:"APPLICATION_HANGUP_CAUSE_22"},{value:"27",name:"APPLICATION_HANGUP_CAUSE_27"},{value:"38",name:"APPLICATION_HANGUP_CAUSE_38"},{value:"41",name:"APPLICATION_HANGUP_CAUSE_41"}],intTypes:[{value:"always",name:"APPLICATION_ALWAYS"},{value:"custom",name:"APPLICATION_CUSTOM"},{value:"list",name:"APPLICATION_FROM_LIST"}],checkUnderscore:function(a){return 0===a.indexOf("_")?a:"_"+a}};return{application:a}}),angular.module("xCallyShuttleApp").service("automations",function(){var a={mail:{conditions:[{name:"APPLICATION_STATUS",value:"status",type:"select",arr:[{name:"APPLICATION_STATUS_NEW",value:"NEW"},{name:"APPLICATION_STATUS_OPEN",value:"OPEN"},{name:"APPLICATION_STATUS_CLOSED",value:"CLOSED"},{name:"APPLICATION_STATUS_PENDING",value:"PENDING"}],operators:[{value:"equals",name:"APPLICATION_EQUALS_TO"},{value:"not_equals",name:"APPLICATION_NOT_EQUALS_TO"}]},{name:"APPLICATION_HOURS_SINCE_CREATED",value:"createdAt",type:"input",operators:[{value:"greater_or_equal",name:"APPLICATION_GTE_TO"},{value:"less_or_equal",name:"APPLICATION_LTE_TO"},{value:"greater",name:"APPLICATION_GREATER_THAN"},{value:"less",name:"APPLICATION_LESS_THAN"}]}],actions:[{name:"APPLICATION_STATUS",value:"status"}]},chat:{conditions:[{name:"APPLICATION_STATUS",value:"status",type:"select",arr:[{name:"APPLICATION_STATUS_NEW",value:"NEW"},{name:"APPLICATION_STATUS_OPEN",value:"OPEN"},{name:"APPLICATION_STATUS_CLOSED",value:"CLOSED"},{name:"APPLICATION_STATUS_PENDING",value:"PENDING"}],operators:[{value:"equals",name:"APPLICATION_EQUALS_TO"},{value:"not_equals",name:"APPLICATION_NOT_EQUALS_TO"}]},{name:"APPLICATION_HOURS_SINCE_CREATED",value:"createdAt",type:"input",operators:[{value:"greater_or_equal",name:"APPLICATION_GTE_TO"},{value:"less_or_equal",name:"APPLICATION_LTE_TO"},{value:"greater",name:"APPLICATION_GREATER_THAN"},{value:"less",name:"APPLICATION_LESS_THAN"}]}],actions:[{name:"APPLICATION_STATUS",value:"status"}]},fax:{conditions:[{name:"APPLICATION_STATUS",value:"status",type:"select",arr:[{name:"APPLICATION_STATUS_NEW",value:"NEW"},{name:"APPLICATION_STATUS_OPEN",value:"OPEN"},{name:"APPLICATION_STATUS_CLOSED",value:"CLOSED"}],operators:[{value:"equals",name:"APPLICATION_EQUALS_TO"},{value:"not_equals",name:"APPLICATION_NOT_EQUALS_TO"}]},{name:"APPLICATION_HOURS_SINCE_CREATED",value:"createdAt",type:"input",operators:[{value:"greater_or_equal",name:"APPLICATION_GTE_TO"},{value:"less_or_equal",name:"APPLICATION_LTE_TO"},{value:"greater",name:"APPLICATION_GREATER_THAN"},{value:"less",name:"APPLICATION_LESS_THAN"}]}],actions:[{name:"APPLICATION_STATUS",value:"status"}]}},b=["mail","fax","chat"];return{services:a,channels:b}}),angular.module("xCallyShuttleApp").service("channel",function(){var a=[{name:"Voice",value:"voice"}];return a}),angular.module("xCallyShuttleApp").service("desk_com",function(){var a=[{id:"priority",label:"Priority",custom:!1,data:{choices:[1,2,3,4,5,6,7,8,9,10]}},{id:"status",label:"Status",custom:!1,data:{choices:["new","open","pending","resolved","closed"]}},{id:"type",label:"Type",custom:!1,data:{choices:["chat","twitter","email","qna","facebook","phone"]}}];return{fields:a}}),angular.module("xCallyShuttleApp").service("interval",function(){var a={months:[{value:"always",name:"APPLICATION_ALWAYS"},{value:"jan",name:"APPLICATION_JANUARY"},{value:"feb",name:"APPLICATION_FEBRUARY"},{value:"mar",name:"APPLICATION_MARCH"},{value:"apr",name:"APPLICATION_APRIL"},{value:"may",name:"APPLICATION_MAY"},{value:"jun",name:"APPLICATION_JUNE"},{value:"jul",name:"APPLICATION_JULY"},{value:"aug",name:"APPLICATION_AUGUST"},{value:"sep",name:"APPLICATION_SEPTEMBER"},{value:"oct",name:"APPLICATION_OCTOBER"},{value:"nov",name:"APPLICATION_NOVEMBER"},{value:"dec",name:"APPLICATION_DECEMBER"}],monthsNumber:[{value:"always",name:"APPLICATION_ALWAYS"},{value:"1",name:"APPLICATION_JANUARY"},{value:"2",name:"APPLICATION_FEBRUARY"},{value:"3",name:"APPLICATION_MARCH"},{value:"4",name:"APPLICATION_APRIL"},{value:"5",name:"APPLICATION_MAY"},{value:"6",name:"APPLICATION_JUNE"},{value:"7",name:"APPLICATION_JULY"},{value:"8",name:"APPLICATION_AUGUST"},{value:"9",name:"APPLICATION_SEPTEMBER"},{value:"10",name:"APPLICATION_OCTOBER"},{value:"11",name:"APPLICATION_NOVEMBER"},{value:"12",name:"APPLICATION_DECEMBER"}],daysOfWeek:[{value:"always",name:"APPLICATION_ALWAYS"},{value:"mon",name:"APPLICATION_MONDAY"},{value:"tue",name:"APPLICATION_TUESDAY"},{value:"wed",name:"APPLICATION_WEDNESDAY"},{value:"thu",name:"APPLICATION_THURSDAY"},{value:"fri",name:"APPLICATION_FRIDAY"},{value:"sat",name:"APPLICATION_SATURDAY"},{value:"sun",name:"APPLICATION_SUNDAY"}],daysOfMonth:["always",1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31]};return{interval:a}}),angular.module("xCallyShuttleApp").service("report",["ReportAgent","ReportCall","ReportMailSession","ReportMember","ReportQueue","ReportIntegration","ReportChatSession","ReportSmsSession","Contact","Recording","ReportSquare","ReportSquareDetail","User","ReportFaxSession","MailRoom","MailMessage","FaxRoom","FaxMessage","ChatRoom","ChatMessage","SmsRoom","SmsMessage","OpenChannelRoom","OpenChannelMessage","ReportOpenChannelSession","ReportMotionDialer","UserHasVoiceQueue",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A){var B=[{value:"users",resource:m,channel:"General"},{value:"cm_contacts",resource:i,channel:"General"},{value:"report_integration_history",resource:f,channel:"General"},{value:"report_agent_history",resource:a,channel:"Voice"},{value:"report_call_history",resource:b,channel:"Voice"},{value:"report_member_history",resource:d,channel:"Voice"},{value:"report_queue_history",resource:e,channel:"Voice"},{value:"voice_recordings",resource:j,channel:"Voice"},{value:"report_square_history",resource:k,channel:"Voice"},{value:"report_square_details_history",resource:l,channel:"Voice"},{value:"report_tdial",resource:z,channel:"Voice"},{value:"report_chat_session_history",resource:g,channel:"Chat"},{value:"chat_rooms",resource:s,channel:"Chat"},{value:"chat_messages",resource:t,channel:"Chat"},{value:"report_mail_session_history",resource:c,channel:"Mail"},{value:"mail_rooms",resource:o,channel:"Mail"},{value:"mail_messages",resource:p,channel:"Mail"},{value:"report_fax_session_history",resource:n,channel:"Fax"},{value:"fax_rooms",resource:q,channel:"Fax"},{value:"fax_messages",resource:r,channel:"Fax"},{value:"report_sms_session_history",resource:h,channel:"Sms"},{value:"sms_rooms",resource:u,channel:"Sms"},{value:"sms_messages",resource:v,channel:"Sms"},{value:"report_openchannel_session_history",resource:y,channel:"Open Channel"},{value:"openchannel_rooms",resource:w,channel:"Open Channel"},{value:"openchannel_messages",resource:x,channel:"Open Channel"},{value:"user_has_voice_queues",resource:A,channel:"Voice"}];return{tables:B}}]),angular.module("xCallyShuttleApp").service("strategies",function(){return["beepall","roundrobin","rrmemory"]}),angular.module("xCallyShuttleApp").service("triggers",["VoiceQueue","Route",function(a,b){var c={voice:{conditions:[{name:"APPLICATION_QUEUE",value:"queue",type:"select",resource:a,resValue:"name",operators:[{value:"equals",name:"APPLICATION_EQUALS_TO"},{value:"not_equals",name:"APPLICATION_NOT_EQUALS_TO"}]},{name:"APPLICATION_CALL_STATUS",value:"lastevent",type:"select",arr:[{name:"ringing",value:"called"},{name:"up",value:"connect"},{name:"hangup",value:"complete"},{name:"rejected",value:"rejected"},{name:"abandoned",value:"abandoned"}],operators:[{value:"equals",name:"APPLICATION_EQUALS_TO"},{value:"not_equals",name:"APPLICATION_NOT_EQUALS_TO"}]},{name:"APPLICATION_OUTBOUND_ROUTE",value:"routeId",type:"select",resource:b,resValue:"id",resName:"exten",params:{type:"outbound"},operators:[{value:"equals",name:"APPLICATION_EQUALS_TO"},{value:"not_equals",name:"APPLICATION_NOT_EQUALS_TO"}]}],actions:[{name:"APPLICATION_CONTACT_MANAGER",value:"contactManager"},{name:"APPLICATION_INTEGRATIONS",value:"integration",propertyField:"select"},{name:"APPLICATION_MOTION_BAR",value:"motionbar",propertyField:"select"},{name:"APPLICATION_JSCRIPTY",value:"jscripty",propertyField:"select"},{name:"APPLICATION_URL_FORWARD",value:"urlForward"}]},mail:{conditions:[{name:"APPLICATION_FROM",value:"from",type:"input",operators:[{value:"contains",name:"APPLICATION_CONTAINS"},{value:"not_contains",name:"APPLICATION_NOT_CONTAINS"}]},{name:"APPLICATION_TO",value:"to",type:"input",operators:[{value:"contains",name:"APPLICATION_CONTAINS"},{value:"not_contains",name:"APPLICATION_NOT_CONTAINS"}]},{name:"APPLICATION_CC",value:"cc",type:"input",operators:[{value:"contains",name:"APPLICATION_CONTAINS"},{value:"not_contains",name:"APPLICATION_NOT_CONTAINS"}]},{name:"APPLICATION_SUBJECT",value:"subject",type:"input",operators:[{value:"equals",name:"APPLICATION_EQUALS_TO"},{value:"not_equals",name:"APPLICATION_NOT_EQUALS_TO"},{value:"contains",name:"APPLICATION_CONTAINS"},{value:"not_contains",name:"APPLICATION_NOT_CONTAINS"}]},{name:"APPLICATION_BODY",value:"text",type:"input",operators:[{value:"equals",name:"APPLICATION_EQUALS_TO"},{value:"not_equals",name:"APPLICATION_NOT_EQUALS_TO"},{value:"contains",name:"APPLICATION_CONTAINS"},{value:"not_contains",name:"APPLICATION_NOT_CONTAINS"}]}],actions:[{name:"APPLICATION_TEMPLATE",value:"template"},{name:"APPLICATION_EMAIL",value:"email"},{name:"APPLICATION_EMAIL_FROM_ACCOUNT",value:"accountEmail"},{name:"APPLICATION_SMS",value:"accountSms"},{name:"APPLICATION_FORWARD",value:"forward"},{name:"APPLICATION_TAG",value:"tag"},{name:"APPLICATION_HTTP_REQUEST",value:"http"},{name:"APPLICATION_CLOSE",value:"close"}]},chat:{conditions:[{name:"APPLICATION_NAME",value:"fullname",type:"input",operators:[{value:"equals",name:"APPLICATION_EQUALS_TO"},{value:"not_equals",name:"APPLICATION_NOT_EQUALS_TO"}]},{name:"APPLICATION_EMAIL",value:"email",type:"input",operators:[{value:"contains",name:"APPLICATION_CONTAINS"},{value:"not_contains",name:"APPLICATION_NOT_CONTAINS"}]}],actions:[{name:"APPLICATION_EMAIL_FROM_ACCOUNT",value:"accountEmail"},{name:"APPLICATION_SMS",value:"accountSms"},{name:"APPLICATION_TEMPLATE",value:"accountTemplate"},{name:"APPLICATION_TAG",value:"tag"},{name:"APPLICATION_HTTP_REQUEST",value:"http"},{name:"APPLICATION_CLOSE",value:"close"}]},sms:{conditions:[{name:"APPLICATION_FROM",value:"from",type:"input",operators:[{value:"contains",name:"APPLICATION_CONTAINS"},{value:"not_contains",name:"APPLICATION_NOT_CONTAINS"}]},{name:"APPLICATION_BODY",value:"body",type:"input",operators:[{value:"equals",name:"APPLICATION_EQUALS_TO"},{value:"not_equals",name:"APPLICATION_NOT_EQUALS_TO"},{value:"contains",name:"APPLICATION_CONTAINS"},{value:"not_contains",name:"APPLICATION_NOT_CONTAINS"}]}],actions:[{name:"APPLICATION_EMAIL_FROM_ACCOUNT",value:"accountEmail"},{name:"APPLICATION_SMS",value:"accountSms"},{name:"APPLICATION_TEMPLATE",value:"accountTemplate"},{name:"APPLICATION_TAG",value:"tag"},{name:"APPLICATION_HTTP_REQUEST",value:"http"},{name:"APPLICATION_CLOSE",value:"close"}]}},d=["voice","mail","chat","sms"];return{services:c,channels:d}}]),angular.module("xCallyShuttleApp").service("variable",function(){var a=[{title:"Unique ID",name:"uniqueid",group:"voice_queue"},{title:"Caller Number",name:"calleridnum",group:"voice_queue"},{title:"Caller Name",name:"calleridname",group:"voice_queue"},{title:"Queue",name:"queue",group:"voice_queue"},{title:"Called Number",name:"destcalleridnum",group:"voice_queue"},{title:"Called Name",name:"destcalleridname",group:"voice_queue"},{title:"Hold Time",name:"holdtime",group:"voice_queue"},{title:"Talk Time",name:"talktime",group:"voice_queue"},{title:"Connected Time",name:"agentconnectAt",group:"voice_queue"},{title:"Called Time",name:"agentcalledAt",group:"voice_queue"},{title:"DNID",name:"destexten",group:"voice_queue"},{title:"Complete Time",name:"agentcompleteAt",group:"voice_queue"},{title:"No Answer Time",name:"agentringnoanswerAt",group:"voice_queue"},{title:"Recording URL",name:"recordingURL",group:"voice_queue"},{title:"Unique ID",name:"uniqueid",group:"voice_outbound"},{title:"Caller Number",name:"calleridnum",group:"voice_outbound"},{title:"Caller Name",name:"calleridname",group:"voice_outbound"},{title:"Called Number",name:"destcalleridnum",group:"voice_outbound"},{title:"Called Name",name:"destcalleridname",group:"voice_outbound"},{title:"Start Time",name:"starttime",group:"voice_outbound"},{title:"Answer Time",name:"answertime",group:"voice_outbound"},{title:"Complete Time",name:"endtime",group:"voice_outbound"},{title:"Recording URL",name:"recordingURL",group:"voice_outbound"},{title:"Member Name",name:"membername",group:"voice_outbound"}];return a}),angular.module("xCallyShuttleApp").controller("SidebarController",["$scope","$rootScope","$resource","$location","Auth","Dashboard","Integration","xAlert","$stateParams","socket","$uibModal","Setting",function(a,b,c,d,e,f,g,h,i,j,k,l){a.Auth=e,a.$on("$includeContentLoaded",function(){Metronic.init(),Layout.initSidebar()}),a.getSidebarDashboards=function(){return f.get().$promise.then(function(c){b.dashboards=c.rows,j.syncUpdates("dashboard",b.dashboards),a.$watch("dashboards",function(a){a&&b.initTours()},!0)})["catch"](function(){h.show("Error loading your dashboards","danger")})},a.about=function(){k.open({animation:!0,size:"sm",templateUrl:"app/main/about.modal.html",controller:["$scope","$uibModalInstance",function(a,b){a.year=moment().year(),a.getInfo=function(){return l.get({controller:"info"}).$promise.then(function(b){a.info=b})["catch"](function(a){console.error(a)})},a.close=function(){b.dismiss("cancel")}}]})},a.getSidebarIntegrations=function(){return e.isAdmin()||e.isAgent()||b.userModules[19]?g.get().$promise.then(function(b){a.integrations=b.rows,j.syncUpdates("integration",a.integrations)})["catch"](function(a){h.error(a)}):void 0},a.$on("sidebar $destroy",function(){console.log("destroy"),j.unsyncUpdates("dashboard"),j.unsyncUpdates("integration")})}]),angular.module("xCallyShuttleApp").factory("socket",["$rootScope","$window","socketFactory","Auth",function(a,b,c,d){var e=d.getCurrentUser(),f=io("",{query:"token="+d.getToken()+"&userId="+e.id+"&name="+e.name+"&role="+(e.role||"agent")+"&source=browser",path:"/socket.io-client"}),g=c({ioSocket:f});return a.$on("logout",function(){g&&(g.disconnect(!0),b.location.reload())}),{socket:g,syncUpdates:function(a,b,c){c=c||angular.noop,g.on(a+":save",function(a){var d=_.find(b,{id:a.id}),e=b.indexOf(d),f="created";d?(_.merge(b[e],a),f="updated"):b.unshift(a),c(f,a,b)}),g.on(a+":remove",function(a){var d="deleted";_.remove(b,{id:a.id}),c(d,a,b)})},unsyncUpdates:function(a){g.removeAllListeners(a+":save"),g.removeAllListeners(a+":update"),g.removeAllListeners(a+":remove")},syncUpdatesByAttributes:function(a,b,c,d){d=d||angular.noop,g.on(a+":save",function(a){var e=!0;if(_.forIn(b,function(b,c){return a[c]&&a[c]===b?!0:e=!1}),e){var f=_.find(c,{id:a.id}),g=c.indexOf(f),h="created";f?(_.merge(c[g],a),h="updated"):c.unshift(a),d(h,a,c)}}),g.on(a+":remove",function(a){var b="deleted";_.remove(c,{id:a.id}),d(b,a,c)})},syncMailMessageUpdates:function(a,b,c,d){d=d||angular.noop,g.on(a+":"+b+":save",function(a){var b=_.find(c,{id:a.id}),e=c.indexOf(b),f="created";b?(_.merge(c[e],a),f="updated"):c.unshift(a),d(f,a)}),g.on(a+":"+b+":remove",function(a){var b="deleted";_.remove(c,{id:a.id}),d(b,a,c)})},unsyncMailMessageUpdates:function(a,b){g.removeAllListeners(a+":"+b+":save"),g.removeAllListeners(a+":"+b+":remove")},syncFaxMessageUpdates:function(a,b,c,d){d=d||angular.noop,g.on(a+":"+b+":save",function(a){var b=_.find(c,{id:a.id}),e=c.indexOf(b),f="created";b?(_.merge(c[e],a),f="updated"):c.unshift(a),d(f,a)}),g.on(a+":"+b+":remove",function(a){var b="deleted";_.remove(c,{id:a.id}),d(b,a,c)})},unsyncFaxMessageUpdates:function(a,b){g.removeAllListeners(a+":"+b+":save"),g.removeAllListeners(a+":"+b+":remove")}}}]),function(a,b){angular.module("adf.widget.counter",["adf.provider"]).config(["dashboardProvider",function(a){a.widget("counter",{title:"Single Value",description:"Single Value for db results",templateUrl:"{widgetsPath}/counter/src/view.html",controller:"apiwidgetCounterViewCtrl",edit:{templateUrl:"{widgetsPath}/counter/src/edit.html",controller:"apiwidgetCounterEditCtrl"}})}]).service("apiServiceCounter",["Widget",function(a){return{get:function(b){return a.get({select:b.select,condition:encodeURIComponent(b.condition),table:b.report.replace("_history",""),controller:"counter"}).$promise.then(function(a){return a})["catch"](function(a){console.log(a)})}}}]).controller("apiwidgetCounterEditCtrl",["$scope","report",function(a,b){a.config.reportTables=b.tables,a.config.colors=[{name:"Grey",value:"grey"},{name:"Grey 2",value:"grey-cascade"},{name:"Grey 3",value:"grey-silver"},{name:"Grey 4",value:"grey-steel"},{name:"Grey 5",value:"grey-carrara"},{name:"Grey 6",value:"grey-gallery"},{name:"Blue",value:"blue"},{name:"Blue 2",value:"blue-hoki"},{name:"Blue 3",value:"blue-steel"},{name:"Blue 4",value:"blue-madison"},{name:"Blue 5",value:"blue-chambray"},{name:"Blue 6",value:"blue-ebonyclay"},{name:"Red",value:"red"},{name:"Red 2",value:"red-pink"},{name:"Red 3",value:"red-sunglo"},{name:"Red 4",value:"red-intense"},{name:"Red 5",value:"red-thunderbird"},{name:"Red 6",value:"red-flamingo"},{name:"Green",value:"green"},{name:"Green 2",value:"green-meadow"},{name:"Green 3",value:"green-seagreen"},{name:"Green 4",value:"green-turquoise"},{name:"Green 5",value:"green-haze"},{name:"Green 6",value:"green-jungle"},{name:"Purple",value:"purple"},{name:"Purple 2",value:"purple-plum"},{name:"Purple 3",value:"purple-medium"},{name:"Purple 4",value:"purple-studio"},{name:"Purple 5",value:"purple-wisteria"},{name:"Purple 6",value:"purple-seance"},{name:"Yellow",value:"yellow"},{name:"Yellow 2",value:"yellow-gold"},{name:"Yellow 3",value:"yellow-casablanca"},{name:"Yellow 4",value:"yellow-crusta"},{name:"Yellow 5",value:"yellow-lemon"},{name:"Yellow 6",value:"yellow-saffron"}],a.config.icons=[{name:"Talk bubbles",value:"fa-comments"},{name:"Bar Chart",value:"fa-bar-chart"},{name:"Shopping Cart",value:"fa-shopping-cart"},{name:"Globe",value:"fa-globe"},{name:"Volume Control Phone",value:"fa-volume-control-phone"},{name:"Comments",value:"fa-comments-o"},{name:"Commenting",value:"fa-commenting-o"},{name:"Coffee",value:"fa-coffee"},{name:"Clock",value:"fa-clock-o"},{name:"Envelope",value:"fa-envelope-o"},{name:"Hourglass",value:"fa-hourglass-half"},{name:"Percent",value:"fa-percent"}],a.config.select=a.config.select?a.config.select:"COUNT(*)",a.config.timeout=a.config.timeout>=5?a.config.timeout:5,a.config.color=a.config.color?a.config.color:"blue-madison",a.config.icon=a.config.icon?a.config.icon:"fa-comments",a.config.link=a.config.link?a.config.link:"#",a.config.linkText=a.config.linkText?a.config.linkText:"VIEW MORE"}]).controller("apiwidgetCounterViewCtrl",["$scope","$interval","apiServiceCounter",function(a,b,c){a.config.timeout=a.config.timeout>=5?a.config.timeout:5,a.config.condition=a.config.condition?a.config.condition:null,a.config.color=a.config.color?a.config.color:"blue-madison",a.config.icon=a.config.icon?a.config.icon:"fa-comments",a.config.link=a.config.link?a.config.link:"#",a.config.linkText=a.config.linkText?a.config.linkText:"VIEW MORE",a.counterApiCall=function(){a.config.report&&c.get(a.config).then(function(b){b?b.result&&b.result.length>1||_.keys(b.result[0]).length>1?(a.tooManyResults=!0,a.result=null):(a.tooManyResults=!1,null!==_.values(b.result[0])[0]?a.result=_.values(b.result[0])[0].toString():a.result="--"):a.result=null})},a.counterApiCall();var d=b(function(){a.counterApiCall()},1e3*parseInt(a.config.timeout));a.$on("$destroy",function(){b.cancel(d)})}]),angular.module("adf.widget.counter").run(["$templateCache",function(a){a.put("{widgetsPath}/counter/src/edit.html","<form role=form><div class=form-group><label for=select>Select</label> <input type=text class=form-control id=condition ng-model=config.select placeholder=Select></div><div class=form-group><label class=control-label>From</label><ui-select data-ng-model=config.report name=report theme=bootstrap><ui-select-match placeholder=From>{{'APPLICATION_'+$select.selected.value.toUpperCase() | translate}}</ui-select-match><ui-select-choices group-by=\"'channel'\" repeat=\"table.value as table in config.reportTables | filter: $select.search\"><div ng-bind-html=\"'APPLICATION_'+table.value.toUpperCase() | translate | highlight: $select.search\"></div></ui-select-choices></ui-select></div><div class=form-group><label for=condition>Where</label> <input type=text class=form-control id=condition ng-model=config.condition placeholder=Where></div><div class=form-group><label for=condition>{{'APPLICATION_REFRESH_TIMEOUT' | translate}}</label> <input type=number class=form-control id=timeout ng-model=config.timeout placeholder=\"{{'APPLICATION_REFRESH_TIMEOUT' | translate}}\" min=5></div><div class=form-group><label class=control-label>{{'APPLICATION_WIDGET_COLOR' | translate}}</label><ui-select data-ng-model=config.color name=color theme=bootstrap><ui-select-match placeholder=\"{{ 'APPLICATION_WIDGET_COLOR' | translate }}\"><div data-ng-class=\"'bg-'+$select.selected.value\"> </div></ui-select-match><ui-select-choices repeat=\"color.value as color in config.colors | filter: $select.search\"><div data-ng-class=\"'bg-'+color.value\"> </div></ui-select-choices></ui-select></div><div class=form-group><label class=control-label>{{'APPLICATION_WIDGET_ICON' | translate}}</label><ui-select data-ng-model=config.icon name=icon theme=bootstrap><ui-select-match placeholder=\"{{ 'APPLICATION_WIDGET_ICON' | translate }}\"><i class=fa ng-class=$select.selected.value></i></ui-select-match><ui-select-choices repeat=\"icon.value as icon in config.icons | filter: $select.search\"><i class=fa ng-class=icon.value></i></ui-select-choices></ui-select></div><div class=form-group><label for=condition>{{'APPLICATION_WIDGET_DETAILS' | translate}}</label> <input type=text class=form-control id=details ng-model=config.details maxlength=30 placeholder=\"{{'APPLICATION_WIDGET_DETAILS' | translate}}\"></div><div class=form-group><label for=condition>{{'APPLICATION_WIDGET_LINK' | translate}}</label> <input type=text class=form-control id=link ng-model=config.link placeholder=http://yourlink></div><div class=form-group><label for=condition>{{'APPLICATION_WIDGET_LINK_TEXT' | translate}}</label> <input type=text class=form-control id=linkText ng-model=config.linkText maxlength=30 placeholder=\"{{'APPLICATION_WIDGET_LINK_TEXT' | translate}}\"></div></form>"),a.put("{widgetsPath}/counter/src/view.html",'<div class=dashboard-stat ng-class=config.color ng-if=result><div class=visual><i class=fa ng-class=config.icon></i></div><div class=details><div class=number>{{result}}</div><div class=desc>{{config.details}}</div></div><a class=more href={{config.link}}>{{config.linkText}} <i class="m-icon-swapright m-icon-white"></i></a></div><div class="alert alert-danger" role=alert ng-if=!config.report><span class="glyphicon glyphicon-exclamation-sign" aria-hidden=true></span> <span class=sr-only>{{\'APPLICATION_ERROR\' | translate}}:</span> {{\'MESSAGE_WIDGET_SELECT_REPORT\' | translate}}</div><div class="alert alert-danger" role=alert ng-if=tooManyResults><span class="glyphicon glyphicon-exclamation-sign" aria-hidden=true></span> <span class=sr-only>{{\'APPLICATION_ERROR\' | translate}}:</span> {{\'MESSAGE_TOO_MANY_RESULTS\' | translate}}</div><div class="alert alert-danger" role=alert ng-if="!result && !tooManyResults"><span class="glyphicon glyphicon-exclamation-sign" aria-hidden=true></span> <span class=sr-only>{{\'APPLICATION_ERROR\' | translate}}:</span> {{\'MESSAGE_QUERY_NOT_VALID\' | translate}}</div>')}])}(window),function(a,b){angular.module("adf.widget.pie-chart",["adf.provider"]).config(["dashboardProvider",function(a){a.widget("pie-chart",{title:"Pie-Chart",description:"Display a pie-chart starting from DB values",templateUrl:"{widgetsPath}/pie-chart/src/view.html",controller:"apiWidgetPieChartViewCtrl",edit:{templateUrl:"{widgetsPath}/pie-chart/src/edit.html",controller:"apiWidgetPieChartEditCtrl"}})}]).service("apiServicePieChart",["Widget",function(a){return{get:function(b){return a.get({condition:encodeURIComponent(b.condition),table:b.report.replace("_history",""),fields:b.fields,controller:"piechart"}).$promise.then(function(a){return a})["catch"](function(a){console.log(a)})}}}]).controller("apiWidgetPieChartEditCtrl",["$scope","report",function(a,b){function c(){return a.config.fields||(a.config.fields=[{column:"",alias:""}]),a.config.fields}a.config.reportTables=b.tables,a.config.timeout=a.config.timeout>=5?a.config.timeout:5,a.config.fields=a.config.fields?a.config.fields:[{column:"",alias:""}],a.addField=function(){c().push({})},a.removeField=function(a){c().splice(a,1)}}]).controller("apiWidgetPieChartViewCtrl",["$scope","$interval","apiServicePieChart",function(a,b,c){a.config.timeout=a.config.timeout>=5?a.config.timeout:5,a.pieChartApiCall=function(){a.config.report&&a.config.fields.length&&""!==a.config.fields[0].column&&""!==a.config.fields[0].alias&&c.get(a.config).then(function(b){if(b&&b.result&&1===b.result.length){a.labels=[],a.data=[];for(var c in b.result[0])a.labels.push(c),a.data.push(b.result[0][c])}else a.labels=[],a.data=[]})},a.pieChartApiCall();var d=b(function(){a.pieChartApiCall()},1e3*parseInt(a.config.timeout));a.$on("$destroy",function(){b.cancel(d)})}]),angular.module("adf.widget.pie-chart").run(["$templateCache",function(a){a.put("{widgetsPath}/pie-chart/src/edit.html","<form role=form><div class=form-group><label class=control-label>{{'APPLICATION_REPORT' | translate}}</label><ui-select data-ng-model=config.report name=report theme=bootstrap><ui-select-match placeholder=\"{{ 'APPLICATION_REPORT' | translate }}\">{{'APPLICATION_'+$select.selected.value.toUpperCase() | translate}}</ui-select-match><ui-select-choices group-by=\"'channel'\" repeat=\"table.value as table in config.reportTables | filter: $select.search\"><div ng-bind-html=\"'APPLICATION_'+table.value.toUpperCase() | translate | highlight: $select.search\"></div></ui-select-choices></ui-select></div><div><label class=control-label>{{'APPLICATION_FIELDS' | translate}}</label></div><div class=padding-bottom ng-repeat=\"field in config.fields\"><div class=form-group><div class=input-group><input type=text class=form-control ng-model=field.column> <span class=input-group-addon>as</span> <input type=text class=form-control ng-model=field.alias> <span class=input-group-btn ng-if=\"config.fields.length>1\"><button class=\"btn btn-danger\" type=button data-ng-click=removeField($index)><i class=\"fa fa-times\"></i> {{'APPLICATION_REMOVE' | translate}}</button></span></div></div></div><button type=button class=\"btn btn-sm green mbottom20\" ng-click=addField()><i class=\"fa fa-plus\"></i> {{'APPLICATION_ADD_FIELD' | translate}}</button><div class=form-group><label for=condition>{{'APPLICATION_CONDITION' | translate}}</label> <input type=text class=form-control id=condition ng-model=config.condition placeholder=\"{{'APPLICATION_CONDITION' | translate}}\"></div><div class=form-group><label for=condition>{{'APPLICATION_REFRESH_TIMEOUT' | translate}}</label> <input type=number class=form-control id=timeout ng-model=config.timeout placeholder=\"{{'APPLICATION_REFRESH_TIMEOUT' | translate}}\" min=5></div></form>"),a.put("{widgetsPath}/pie-chart/src/view.html",'<div ng-if=labels.length ng-style=config.style><canvas id=doughnut class="chart chart-doughnut" chart-data=data chart-labels=labels legend=true></canvas></div><div class="alert alert-danger" role=alert ng-if=!config.report><span class="glyphicon glyphicon-exclamation-sign" aria-hidden=true></span> <span class=sr-only>{{\'APPLICATION_ERROR\' | translate}}:</span> {{\'MESSAGE_WIDGET_SELECT_REPORT\' | translate}}</div><div class="alert alert-danger" role=alert ng-if=!labels.length><span class="glyphicon glyphicon-exclamation-sign" aria-hidden=true></span> <span class=sr-only>{{\'APPLICATION_ERROR\' | translate}}:</span> {{\'MESSAGE_ENTER_VALID_CONDITION\' | translate}}</div><div class="alert alert-danger" role=alert ng-if=!labels.length><span class="glyphicon glyphicon-exclamation-sign" aria-hidden=true></span> <span class=sr-only>{{\'APPLICATION_ERROR\' | translate}}:</span> {{\'MESSAGE_ENTER_ONE_VALID_METRIC_AND_CHECK_OTHER\' | translate}}</div>')}])}(window),function(a,b){angular.module("adf.widget.table",["adf.provider"]).value("apiServiceUrlTable","/api/widgets/table").config(["dashboardProvider",function(a){ +a.widget("table",{title:"Table",description:"Show tabbed results from db",templateUrl:"{widgetsPath}/table/src/view.html",controller:"apiWidgetTableViewCtrl",edit:{templateUrl:"{widgetsPath}/table/src/edit.html",controller:"apiWidgetTableEditCtrl"}})}]).service("apiServiceTable",["$q","$http","apiServiceUrlTable",function(a,b,c){return{get:function(d){var e=a.defer();return b.get(c,{params:{condition:encodeURIComponent(d.condition),table:d.report,fields:d.fields}}).success(function(a){a?e.resolve(a):e.reject()}).error(function(a){console.log(a),e.reject()}),e.promise}}}]).controller("apiWidgetTableEditCtrl",["$scope",function(a){function b(){return a.config.fields||(a.config.fields=[{column:"",alias:""}]),a.config.fields}a.config.reportTables=[{name:"Agents",value:"agent"},{name:"Calls",value:"call"},{name:"Dials",value:"dial"},{name:"Members",value:"member"},{name:"Queues",value:"queue"}],a.config.timeout=a.config.timeout?a.config.timeout:1,a.config.height=a.config.height?a.config.height:350,a.config.fields=a.config.fields?a.config.fields:[{column:"",alias:""}],a.addField=function(){b().push({})},a.removeField=function(a){b().splice(a,1)}}]).controller("apiWidgetTableViewCtrl",["$scope","$interval","apiServiceTable",function(a,b,c){a.config.timeout=a.config.timeout?a.config.timeout:1,a.config.height=a.config.height?a.config.height:350,a.config.style={"max-height":a.config.height+"px",overflow:"scroll"},a.tableApiCall=function(){a.config.condition&&a.config.report&&a.config.fields.length&&""!==a.config.fields[0].column&&""!==a.config.fields[0].alias&&c.get(a.config).then(function(b){a.results=b})},a.tableApiCall();var d=b(function(){a.tableApiCall()},1e3*parseInt(a.config.timeout));a.$on("$destroy",function(){b.cancel(d)})}]),angular.module("adf.widget.table").run(["$templateCache",function(a){a.put("{widgetsPath}/table/src/edit.html",'<form role=form><div class=form-group><label class=control-label>{{\'APPLICATION_REPORT\' | translate}}</label><ui-select data-ng-model=config.report name=report theme=bootstrap><ui-select-match placeholder="{{ \'APPLICATION_REPORT\' | translate }}">{{$select.selected.name}}</ui-select-match><ui-select-choices repeat="report.value as report in config.reportTables | filter: $select.search"><div ng-bind-html="report.name | highlight: $select.search"></div></ui-select-choices></ui-select></div><div><label class=control-label>{{\'APPLICATION_METRICS\' | translate}}</label></div><div class=padding-bottom ng-repeat="field in config.fields"><div class=form-group><div class=input-group><input type=text class=form-control ng-model=field.column> <span class=input-group-addon>as</span> <input type=text class=form-control ng-model=field.alias> <span class=input-group-btn ng-if="config.fields.length>1"><button class="btn btn-danger" type=button data-ng-click=removeField($index)><i class="fa fa-times"></i> {{\'APPLICATION_REMOVE\' | translate}}</button></span></div></div></div><button type=button class="btn btn-sm green mbottom20" ng-click=addField()><i class="fa fa-plus"></i> {{\'APPLICATION_ADD_FIELD\' | translate}}</button><div class=form-group><label for=condition>{{\'APPLICATION_CONDITION\' | translate}}</label> <input type=text class=form-control id=condition ng-model=config.condition placeholder="{{\'APPLICATION_CONDITION\' | translate}}"></div><div class=form-group><label for=condition>{{\'APPLICATION_REFRESH_TIMEOUT\' | translate}}</label> <input type=number class=form-control id=timeout ng-model=config.timeout placeholder="{{\'APPLICATION_REFRESH_TIMEOUT\' | translate}}" min=1></div><div class=form-group><label for=condition>{{\'APPLICATION_WIDGET_MAX_HEIGHT\' | translate}}</label> <input type=number class=form-control id=height ng-model=config.height placeholder="{{\'APPLICATION_WIDGET_MAX_HEIGHT\' | translate}}" min=350></div></form>'),a.put("{widgetsPath}/table/src/view.html",'<div ng-if=results ng-style=config.style><table st-table=results class="table table-striped table-bordered table-hover"><div class=table-responsive><thead><tr><th colspan={{config.fields.length}}><div class=row><div class=col-md-6></div><div class=col-md-6><div class="input-group input-medium pull-right"><input st-search placeholder="{{ \'APPLICATION_SEARCH\' | translate }}" class=form-control type=search> <span class=input-group-addon><i class="fa fa-search"></i></span></div></div></div></th></tr><tr><th ng-repeat="field in config.fields">{{field.alias}}</th></tr></thead><tbody><tr data-ng-repeat="result in results" class=animate-repeat><td ng-repeat="field in config.fields">{{result[field.alias]}}</td></tr><tr data-ng-hide=results.length><td colspan={{config.fields.length}} style=text-align:center;><i>{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</i></td></tr></tbody><tfoot><tr><td colspan={{config.fields.length}} class=text-center><div st-pagination class=pagination st-items-by-page=10 st-displayed-pages=3></div></td></tr></tfoot></div></table></div><div class="alert alert-danger" role=alert ng-if=!config.report><span class="glyphicon glyphicon-exclamation-sign" aria-hidden=true></span> <span class=sr-only>{{\'APPLICATION_ERROR\' | translate}}:</span> {{\'MESSAGE_WIDGET_SELECT_REPORT\' | translate}}</div><div class="alert alert-danger" role=alert ng-if=!results><span class="glyphicon glyphicon-exclamation-sign" aria-hidden=true></span> <span class=sr-only>{{\'APPLICATION_ERROR\' | translate}}:</span> {{\'MESSAGE_ENTER_VALID_CONDITION\' | translate}}</div><div class="alert alert-danger" role=alert ng-if=!results><span class="glyphicon glyphicon-exclamation-sign" aria-hidden=true></span> <span class=sr-only>{{\'APPLICATION_ERROR\' | translate}}:</span> {{\'MESSAGE_ENTER_ONE_VALID_FIELD_AND_CHECK_OTHER\' | translate}}</div>')}])}(window);var Metronic=function(){var a,b=!1,c=!1,d=!1,e=!1,f=[],g="assets/",h="img/",i="plugins/",j="css/",k={blue:"#89C4F4",red:"#F3565D",green:"#1bbc9b",purple:"#9b59b6",grey:"#95a5a6",yellow:"#F8CB00"},l=function(){"rtl"===$("body").css("direction")&&(b=!0),c=!!navigator.userAgent.match(/MSIE 8.0/),d=!!navigator.userAgent.match(/MSIE 9.0/),e=!!navigator.userAgent.match(/MSIE 10.0/),e&&$("html").addClass("ie10"),(e||d||c)&&$("html").addClass("ie")},m=function(){for(var a=0;a<f.length;a++){var b=f[a];b.call()}},n=function(){var a;if(c){var b;$(window).resize(function(){b!=document.documentElement.clientHeight&&(a&&clearTimeout(a),a=setTimeout(function(){m()},50),b=document.documentElement.clientHeight)})}else $(window).resize(function(){a&&clearTimeout(a),a=setTimeout(function(){m()},50)})},o=function(){$("body").on("click",".portlet > .portlet-title > .tools > a.remove",function(a){a.preventDefault();var b=$(this).closest(".portlet");$("body").hasClass("page-portlet-fullscreen")&&$("body").removeClass("page-portlet-fullscreen"),b.find(".portlet-title .fullscreen").tooltip("destroy"),b.find(".portlet-title > .tools > .reload").tooltip("destroy"),b.find(".portlet-title > .tools > .remove").tooltip("destroy"),b.find(".portlet-title > .tools > .config").tooltip("destroy"),b.find(".portlet-title > .tools > .collapse, .portlet > .portlet-title > .tools > .expand").tooltip("destroy"),b.remove()}),$("body").on("click",".portlet > .portlet-title .fullscreen",function(a){a.preventDefault();var b=$(this).closest(".portlet");if(b.hasClass("portlet-fullscreen"))$(this).removeClass("on"),b.removeClass("portlet-fullscreen"),$("body").removeClass("page-portlet-fullscreen"),b.children(".portlet-body").css("height","auto");else{var c=Metronic.getViewPort().height-b.children(".portlet-title").outerHeight()-parseInt(b.children(".portlet-body").css("padding-top"))-parseInt(b.children(".portlet-body").css("padding-bottom"));$(this).addClass("on"),b.addClass("portlet-fullscreen"),$("body").addClass("page-portlet-fullscreen"),b.children(".portlet-body").css("height",c)}}),$("body").on("click",".portlet > .portlet-title > .tools > a.reload",function(a){a.preventDefault();var b=$(this).closest(".portlet").children(".portlet-body"),c=$(this).attr("data-url"),d=$(this).attr("data-error-display");c?(Metronic.blockUI({target:b,animate:!0,overlayColor:"none"}),$.ajax({type:"GET",cache:!1,url:c,dataType:"html",success:function(a){Metronic.unblockUI(b),b.html(a)},error:function(a,c,e){Metronic.unblockUI(b);var f="Error on reloading the content. Please check your connection and try again.";"toastr"==d&&toastr?toastr.error(f):"notific8"==d&&$.notific8?($.notific8("zindex",11500),$.notific8(f,{theme:"ruby",life:3e3})):alert(f)}})):(Metronic.blockUI({target:b,animate:!0,overlayColor:"none"}),window.setTimeout(function(){Metronic.unblockUI(b)},1e3))}),$('.portlet .portlet-title a.reload[data-load="true"]').click(),$("body").on("click",".portlet > .portlet-title > .tools > .collapse, .portlet .portlet-title > .tools > .expand",function(a){a.preventDefault()})},p=function(){if($().uniform){var a=$("input[type=checkbox]:not(.toggle, .make-switch, .icheck), input[type=radio]:not(.toggle, .star, .make-switch, .icheck)");a.size()>0&&a.each(function(){0===$(this).parents(".checker").size()&&$(this).show()})}},q=function(){$().iCheck&&$(".icheck").each(function(){var a=$(this).attr("data-checkbox")?$(this).attr("data-checkbox"):"icheckbox_minimal-grey",b=$(this).attr("data-radio")?$(this).attr("data-radio"):"iradio_minimal-grey";a.indexOf("_line")>-1||b.indexOf("_line")>-1?$(this).iCheck({checkboxClass:a,radioClass:b,insert:'<div class="icheck_line-icon"></div>'+$(this).attr("data-label")}):$(this).iCheck({checkboxClass:a,radioClass:b})})},r=function(){$().bootstrapSwitch&&$(".make-switch").bootstrapSwitch()},s=function(){$().confirmation&&$("[data-toggle=confirmation]").confirmation({container:"body",btnOkClass:"btn-xs btn-success",btnCancelClass:"btn-xs btn-danger"})},t=function(){$("body").on("shown.bs.collapse",".accordion.scrollable",function(a){Metronic.scrollTo($(a.target))})},u=function(){if(location.hash){var a=location.hash.substr(1);$('a[href="#'+a+'"]').parents(".tab-pane:hidden").each(function(){var a=$(this).attr("id");$('a[href="#'+a+'"]').click()}),$('a[href="#'+a+'"]').click()}},v=function(){$("body").on("hide.bs.modal",function(){$(".modal:visible").size()>1&&$("html").hasClass("modal-open")===!1?$("html").addClass("modal-open"):$(".modal:visible").size()<=1&&$("html").removeClass("modal-open")}),$("body").on("show.bs.modal",".modal",function(){$(this).hasClass("modal-scroll")&&$("body").addClass("modal-open-noscroll")}),$("body").on("hide.bs.modal",".modal",function(){$("body").removeClass("modal-open-noscroll")}),$("body").on("hidden.bs.modal",".modal:not(.modal-cached)",function(){$(this).removeData("bs.modal")})},w=function(){$(".tooltips").tooltip(),$(".portlet > .portlet-title .fullscreen").tooltip({container:"body",title:"Fullscreen"}),$(".portlet > .portlet-title > .tools > .reload").tooltip({container:"body",title:"Reload"}),$(".portlet > .portlet-title > .tools > .remove").tooltip({container:"body",title:"Remove"}),$(".portlet > .portlet-title > .tools > .config").tooltip({container:"body",title:"Settings"}),$(".portlet > .portlet-title > .tools > .collapse, .portlet > .portlet-title > .tools > .expand").tooltip({container:"body",title:"Collapse/Expand"})},x=function(){$("body").on("click",".dropdown-menu.hold-on-click",function(a){a.stopPropagation()})},y=function(){$("body").on("click",'[data-close="alert"]',function(a){$(this).parent(".alert").hide(),$(this).closest(".note").hide(),a.preventDefault()}),$("body").on("click",'[data-close="note"]',function(a){$(this).closest(".note").hide(),a.preventDefault()}),$("body").on("click",'[data-remove="note"]',function(a){$(this).closest(".note").remove(),a.preventDefault()})},z=function(){$('[data-hover="dropdown"]').not(".hover-initialized").each(function(){$(this).dropdownHover(),$(this).addClass("hover-initialized")})},A=function(){$(".popovers").popover(),$(document).on("click.bs.popover.data-api",function(b){a&&a.popover("hide")})},B=function(){Metronic.initSlimScroll(".scroller")},C=function(){jQuery.fancybox&&$(".fancybox-button").size()>0&&$(".fancybox-button").fancybox({groupAttr:"data-rel",prevEffect:"none",nextEffect:"none",closeBtn:!0,helpers:{title:{type:"inside"}}})},D=function(){(c||d)&&$("input[placeholder]:not(.placeholder-no-fix), textarea[placeholder]:not(.placeholder-no-fix)").each(function(){var a=$(this);""===a.val()&&""!==a.attr("placeholder")&&a.addClass("placeholder").val(a.attr("placeholder")),a.focus(function(){a.val()==a.attr("placeholder")&&a.val("")}),a.blur(function(){""!==a.val()&&a.val()!=a.attr("placeholder")||a.val(a.attr("placeholder"))})})},E=function(){$().select2&&$(".select2me").select2({placeholder:"Select"})};return{init:function(){l(),n(),p(),q(),r(),B(),C(),E(),o(),y(),x(),u(),w(),A(),t(),v(),s(),D()},initAjax:function(){p(),q(),r(),z(),B(),E(),C(),x(),w(),A(),t(),s()},initComponents:function(){this.initAjax()},setLastPopedPopover:function(b){a=b},addResizeHandler:function(a){f.push(a)},runResizeHandlers:function(){m()},scrollTo:function(a,b){var c=a&&a.size()>0?a.offset().top:0;a&&($("body").hasClass("page-header-fixed")&&(c-=$(".page-header").height()),c+=b?b:-1*a.height()),$("html,body").animate({scrollTop:c},"slow")},initSlimScroll:function(a){$(a).each(function(){if(!$(this).attr("data-initialized")){var a;a=$(this).attr("data-height")?$(this).attr("data-height"):$(this).css("height"),$(this).slimScroll({allowPageScroll:!0,size:"7px",color:$(this).attr("data-handle-color")?$(this).attr("data-handle-color"):"#bbb",wrapperClass:$(this).attr("data-wrapper-class")?$(this).attr("data-wrapper-class"):"slimScrollDiv",railColor:$(this).attr("data-rail-color")?$(this).attr("data-rail-color"):"#eaeaea",position:b?"left":"right",height:a,alwaysVisible:"1"==$(this).attr("data-always-visible"),railVisible:"1"==$(this).attr("data-rail-visible"),disableFadeOut:!0}),$(this).attr("data-initialized","1")}})},destroySlimScroll:function(a){$(a).each(function(){if("1"===$(this).attr("data-initialized")){$(this).removeAttr("data-initialized"),$(this).removeAttr("style");var a={};$(this).attr("data-handle-color")&&(a["data-handle-color"]=$(this).attr("data-handle-color")),$(this).attr("data-wrapper-class")&&(a["data-wrapper-class"]=$(this).attr("data-wrapper-class")),$(this).attr("data-rail-color")&&(a["data-rail-color"]=$(this).attr("data-rail-color")),$(this).attr("data-always-visible")&&(a["data-always-visible"]=$(this).attr("data-always-visible")),$(this).attr("data-rail-visible")&&(a["data-rail-visible"]=$(this).attr("data-rail-visible")),$(this).slimScroll({wrapperClass:$(this).attr("data-wrapper-class")?$(this).attr("data-wrapper-class"):"slimScrollDiv",destroy:!0});var b=$(this);$.each(a,function(a,c){b.attr(a,c)})}})},scrollTop:function(){Metronic.scrollTo()},blockUI:function(a){a=$.extend(!0,{},a);var b="";if(b=a.animate?'<div class="loading-message '+(a.boxed?"loading-message-boxed":"")+'"><div class="block-spinner-bar"><div class="bounce1"></div><div class="bounce2"></div><div class="bounce3"></div></div></div>':a.iconOnly?'<div class="loading-message '+(a.boxed?"loading-message-boxed":"")+'"><img src="'+this.getGlobalImgPath()+'loading-spinner-blue.gif" align=""></div>':a.textOnly?'<div class="loading-message '+(a.boxed?"loading-message-boxed":"")+'"><span> '+(a.message?a.message:"LOADING...")+"</span></div>":'<div class="loading-message '+(a.boxed?"loading-message-boxed":"")+'"><img src="'+this.getGlobalImgPath()+'loading-spinner-blue.gif" align=""><span> '+(a.message?a.message:"LOADING...")+"</span></div>",a.target){var c=$(a.target);c.height()<=$(window).height()&&(a.cenrerY=!0),c.block({message:b,baseZ:a.zIndex?a.zIndex:1e3,centerY:void 0!==a.cenrerY?a.cenrerY:!1,css:{top:"10%",border:"0",padding:"0",backgroundColor:"none"},overlayCSS:{backgroundColor:a.overlayColor?a.overlayColor:"#555",opacity:a.boxed?.05:.1,cursor:"wait"}})}else $.blockUI({message:b,baseZ:a.zIndex?a.zIndex:1e3,css:{border:"0",padding:"0",backgroundColor:"none"},overlayCSS:{backgroundColor:a.overlayColor?a.overlayColor:"#555",opacity:a.boxed?.05:.1,cursor:"wait"}})},unblockUI:function(a){a?$(a).unblock({onUnblock:function(){$(a).css("position",""),$(a).css("zoom","")}}):$.unblockUI()},startPageLoading:function(a){a&&a.animate?($(".page-spinner-bar").remove(),$("body").append('<div class="page-spinner-bar"><div class="bounce1"></div><div class="bounce2"></div><div class="bounce3"></div></div>')):($(".page-loading").remove(),$("body").append('<div class="page-loading"><img src="'+this.getGlobalImgPath()+'loading-spinner-blue.gif"/> <span>'+(a&&a.message?a.message:"Loading...")+"</span></div>"))},stopPageLoading:function(){$(".page-loading, .page-spinner-bar").remove()},alert:function(a){a=$.extend(!0,{container:"",place:"append",type:"success",message:"",close:!0,reset:!0,focus:!0,closeInSeconds:0,icon:""},a);var b=Metronic.getUniqueID("Metronic_alert"),c='<div id="'+b+'" class="Metronic-alerts alert alert-'+a.type+' fade in">'+(a.close?'<button type="button" class="close" data-dismiss="alert" aria-hidden="true"></button>':"")+(""!==a.icon?'<i class="fa-lg fa fa-'+a.icon+'"></i> ':"")+a.message+"</div>";return a.reset&&$(".Metronic-alerts").remove(),a.container?"append"==a.place?$(a.container).append(c):$(a.container).prepend(c):$("body").hasClass("page-container-bg-solid")?$(".page-title").after(c):$(".page-bar").size()>0?$(".page-bar").after(c):$(".page-breadcrumb").after(c),a.focus&&Metronic.scrollTo($("#"+b)),a.closeInSeconds>0&&setTimeout(function(){$("#"+b).remove()},1e3*a.closeInSeconds),b},initUniform:function(a){a?$(a).each(function(){0===$(this).parents(".checker").size()&&($(this).show(),$(this).uniform())}):p()},updateUniform:function(a){$.uniform.update(a)},initFancybox:function(){C()},getActualVal:function(a){return a=$(a),a.val()===a.attr("placeholder")?"":a.val()},getURLParameter:function(a){var b,c,d=window.location.search.substring(1),e=d.split("&");for(b=0;b<e.length;b++)if(c=e[b].split("="),c[0]==a)return unescape(c[1]);return null},isTouchDevice:function(){try{return document.createEvent("TouchEvent"),!0}catch(a){return!1}},getViewPort:function(){var a=window,b="inner";return"innerWidth"in window||(b="client",a=document.documentElement||document.body),{width:a[b+"Width"],height:a[b+"Height"]}},getUniqueID:function(a){return"prefix_"+Math.floor(Math.random()*(new Date).getTime())},isIE8:function(){return c},isIE9:function(){return d},isRTL:function(){return b},isAngularJsApp:function(){return"undefined"!=typeof angular},getAssetsPath:function(){return g},setAssetsPath:function(a){g=a},setGlobalImgPath:function(a){h=a},getGlobalImgPath:function(){return g+h},setGlobalPluginsPath:function(a){i=a},getGlobalPluginsPath:function(){return g+i},getGlobalCssPath:function(){return g+j},getBrandColor:function(a){return k[a]?k[a]:""},getResponsiveBreakpoint:function(a){var b={xs:480,sm:768,md:900,lg:1200};return b[a]?b[a]:0}}}(),Layout=function(){var a="img/",b="css/",c=Metronic.getResponsiveBreakpoint("md"),d=function(){var a,b=$(".page-content"),d=$(".page-sidebar"),e=$("body");if(e.hasClass("page-footer-fixed")===!0&&e.hasClass("page-sidebar-fixed")===!1){var f=Metronic.getViewPort().height-$(".page-footer").outerHeight()-$(".page-header").outerHeight();b.height()<f&&b.attr("style","min-height:"+f+"px")}else{if(e.hasClass("page-sidebar-fixed"))a=g(),e.hasClass("page-footer-fixed")===!1&&(a-=$(".page-footer").outerHeight());else{var h=$(".page-header").outerHeight(),i=$(".page-footer").outerHeight();a=Metronic.getViewPort().width<c?Metronic.getViewPort().height-h-i:d.height()+20,a+h+i<=Metronic.getViewPort().height&&(a=Metronic.getViewPort().height-h-i)}b.attr("style","min-height:"+a+"px")}},e=function(a,b){var d=location.hash.toLowerCase(),e=$(".page-sidebar-menu");if("click"===a||"set"===a?b=$(b):"match"===a&&e.find("li > a").each(function(){var a=$(this).attr("href").toLowerCase();return a.length>1&&d.substr(1,a.length-1)==a.substr(1)?void(b=$(this)):void 0}),b&&0!=b.size()&&"javascript:;"!==b.attr("href").toLowerCase()&&"#"!==b.attr("href").toLowerCase()){parseInt(e.data("slide-speed")),e.data("keep-expanded");e.find("li.active").removeClass("active"),e.find("li > a > .selected").remove(),e.hasClass("page-sidebar-menu-hover-submenu")===!1?e.find("li.open").each(function(){0===$(this).children(".sub-menu").size()&&($(this).removeClass("open"),$(this).find("> a > .arrow.open").removeClass("open"))}):e.find("li.open").removeClass("open"),b.parents("li").each(function(){$(this).addClass("active"),$(this).find("> a > span.arrow").addClass("open"),1===$(this).parent("ul.page-sidebar-menu").size()&&$(this).find("> a").append('<span class="selected"></span>'),1===$(this).children("ul.sub-menu").size()&&$(this).addClass("open")}),"click"===a&&Metronic.getViewPort().width<c&&$(".page-sidebar").hasClass("in")&&$(".page-header .responsive-toggler").click()}},f=function(){jQuery(".page-sidebar").on("click","li > a",function(a){var b=$(this).next().hasClass("sub-menu");if(!(Metronic.getViewPort().width>=c&&1===$(this).parents(".page-sidebar-menu-hover-submenu").size())){if(b===!1)return void(Metronic.getViewPort().width<c&&$(".page-sidebar").hasClass("in")&&$(".page-header .responsive-toggler").click());if(!$(this).next().hasClass("sub-menu always-open")){var e=$(this).parent().parent(),f=$(this),g=$(".page-sidebar-menu"),h=jQuery(this).next(),i=g.data("auto-scroll"),j=parseInt(g.data("slide-speed")),k=g.data("keep-expanded");k!==!0&&(e.children("li.open").children("a").children(".arrow").removeClass("open"),e.children("li.open").children(".sub-menu:not(.always-open)").slideUp(j),e.children("li.open").removeClass("open"));var l=-200;h.is(":visible")?(jQuery(".arrow",jQuery(this)).removeClass("open"),jQuery(this).parent().removeClass("open"),h.slideUp(j,function(){i===!0&&$("body").hasClass("page-sidebar-closed")===!1&&($("body").hasClass("page-sidebar-fixed")?g.slimScroll({scrollTo:f.position().top}):Metronic.scrollTo(f,l)),d()})):b&&(jQuery(".arrow",jQuery(this)).addClass("open"),jQuery(this).parent().addClass("open"),h.slideDown(j,function(){i===!0&&$("body").hasClass("page-sidebar-closed")===!1&&($("body").hasClass("page-sidebar-fixed")?g.slimScroll({scrollTo:f.position().top}):Metronic.scrollTo(f,l)),d()})),a.preventDefault()}}}),jQuery(".page-sidebar").on("click"," li > a.ajaxify",function(a){a.preventDefault(),Metronic.scrollTop();var b=$(this).attr("href"),d=jQuery(".page-sidebar ul"),e=($(".page-content"),$(".page-content .page-content-body"));d.children("li.active").removeClass("active"),d.children("arrow.open").removeClass("open"),$(this).parents("li").each(function(){$(this).addClass("active"),$(this).children("a > span.arrow").addClass("open")}),$(this).parents("li").addClass("active"),Metronic.getViewPort().width<c&&$(".page-sidebar").hasClass("in")&&$(".page-header .responsive-toggler").click(),Metronic.startPageLoading();var f=$(this);$.ajax({type:"GET",cache:!1,url:b,dataType:"html",success:function(a){0===f.parents("li.open").size()&&$(".page-sidebar-menu > li.open > a").click(),Metronic.stopPageLoading(),e.html(a),Layout.fixContentHeight(),Metronic.initAjax()},error:function(a,b,c){Metronic.stopPageLoading(),e.html("<h4>Could not load the requested content.</h4>")}})}),jQuery(".page-content").on("click",".ajaxify",function(a){a.preventDefault(),Metronic.scrollTop();var b=$(this).attr("href"),d=($(".page-content"),$(".page-content .page-content-body"));Metronic.startPageLoading(),Metronic.getViewPort().width<c&&$(".page-sidebar").hasClass("in")&&$(".page-header .responsive-toggler").click(),$.ajax({type:"GET",cache:!1,url:b,dataType:"html",success:function(a){Metronic.stopPageLoading(),d.html(a),Layout.fixContentHeight(),Metronic.initAjax()},error:function(a,b,c){d.html("<h4>Could not load the requested content.</h4>"),Metronic.stopPageLoading()}})}),i(),$(".page-sidebar").on("click",".sidebar-search .remove",function(a){a.preventDefault(),$(".sidebar-search").removeClass("open")}),$(".page-sidebar .sidebar-search").on("keypress","input.form-control",function(a){return 13==a.which?($(".sidebar-search").submit(),!1):void 0}),0!==$(".sidebar-search").size()&&($(".sidebar-search .input-group").on("click",function(a){a.stopPropagation()}),$("body").on("click",function(){$(".sidebar-search").hasClass("open")&&$(".sidebar-search").removeClass("open")}))},g=function(){var a=Metronic.getViewPort().height-$(".page-header").outerHeight();return $("body").hasClass("page-footer-fixed")&&(a-=$(".page-footer").outerHeight()),a},h=function(){var a=$(".page-sidebar-menu");return Metronic.destroySlimScroll(a),0===$(".page-sidebar-fixed").size()?void d():void(Metronic.getViewPort().width>=c&&(a.attr("data-height",g()),Metronic.initSlimScroll(a),d()))},i=function(){var a=$("body");a.hasClass("page-sidebar-fixed")&&$(".page-sidebar").on("mouseenter",function(){a.hasClass("page-sidebar-closed")&&$(this).find(".page-sidebar-menu").removeClass("page-sidebar-menu-closed")}).on("mouseleave",function(){a.hasClass("page-sidebar-closed")&&$(this).find(".page-sidebar-menu").addClass("page-sidebar-menu-closed")})},j=function(){$("body");$.cookie&&"1"===$.cookie("sidebar_closed")&&Metronic.getViewPort().width>=c?($("body").addClass("page-sidebar-closed"),$(".page-sidebar-menu").addClass("page-sidebar-menu-closed")):$.cookie&&$.cookie("sidebar_closed","0")},k=function(){$(".page-header").on("click",'.hor-menu a[data-toggle="tab"]',function(a){a.preventDefault();var b=$(".hor-menu .nav"),c=b.find("li.current");$("li.active",c).removeClass("active"),$(".selected",c).remove();var d=$(this).parents("li").last();d.addClass("current"),d.find("a:first").append('<span class="selected"></span>')}),$(".page-header").on("click",".search-form",function(a){$(this).addClass("open"),$(this).find(".form-control").focus(),$(".page-header .search-form .form-control").on("blur",function(a){$(this).closest(".search-form").removeClass("open"),$(this).unbind("blur")})}),$(".page-header").on("keypress",".hor-menu .search-form .form-control",function(a){return 13==a.which?($(this).closest(".search-form").submit(),!1):void 0}),$(".page-header").on("mousedown",".search-form.open .submit",function(a){a.preventDefault(),a.stopPropagation(),$(this).closest(".search-form").submit()}),$('[data-hover="megamenu-dropdown"]').not(".hover-initialized").each(function(){$(this).dropdownHover(),$(this).addClass("hover-initialized")}),$(document).on("click",".mega-menu-dropdown .dropdown-menu",function(a){a.stopPropagation()})},l=function(){$("body").on("shown.bs.tab",'a[data-toggle="tab"]',function(){d()})},m=function(){var a=300,b=500;navigator.userAgent.match(/iPhone|iPad|iPod/i)?$(window).bind("touchend touchcancel touchleave",function(c){$(this).scrollTop()>a?$(".scroll-to-top").fadeIn(b):$(".scroll-to-top").fadeOut(b)}):$(window).scroll(function(){$(this).scrollTop()>a?$(".scroll-to-top").fadeIn(b):$(".scroll-to-top").fadeOut(b)}),$(".scroll-to-top").click(function(a){return a.preventDefault(),$("html, body").animate({scrollTop:0},b),!1})},n=function(){var a,b=$(".full-height-content");if(a=Metronic.getViewPort().height-$(".page-header").outerHeight(!0)-$(".page-footer").outerHeight(!0)-$(".page-title").outerHeight(!0)-$(".page-bar").outerHeight(!0),b.hasClass("portlet")){var d=b.find(".portlet-body");if(Metronic.getViewPort().width<c)return void Metronic.destroySlimScroll(d.find(".full-height-content-body"));a=a-b.find(".portlet-title").outerHeight(!0)-parseInt(b.find(".portlet-body").css("padding-top"))-parseInt(b.find(".portlet-body").css("padding-bottom"))-2,b.hasClass("full-height-content-scrollable")?(a-=35,d.find(".full-height-content-body").css("height",a),Metronic.initSlimScroll(d.find(".full-height-content-body"))):d.css("min-height",a)}else{if(Metronic.getViewPort().width<c)return void Metronic.destroySlimScroll(b.find(".full-height-content-body"));b.hasClass("full-height-content-scrollable")?(a-=35,b.find(".full-height-content-body").css("height",a),Metronic.initSlimScroll(b.find(".full-height-content-body"))):b.css("min-height",a)}};return{initHeader:function(){k()},setSidebarMenuActiveLink:function(a,b){e(a,b)},initSidebar:function(){h(),f(),j(),Metronic.isAngularJsApp()&&e("match"),Metronic.addResizeHandler(h)},initContent:function(){n(),l(),Metronic.addResizeHandler(d),Metronic.addResizeHandler(n)},initFooter:function(){m()},init:function(){this.initHeader(),this.initSidebar(),this.initContent(),this.initFooter()},fixContentHeight:function(){d()},initFixedSidebarHoverEffect:function(){i()},initFixedSidebar:function(){h()},getLayoutImgPath:function(){return Metronic.getAssetsPath()+a},getLayoutCssPath:function(){return Metronic.getAssetsPath()+b}}}();angular.module("xCallyShuttleApp").run(["$templateCache",function(a){a.put("app/analytic/extracted/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-file-pdf-o"></i>\n <a href="/analytics/extracted/list">{{ \'APPLICATION_EXTRACTED_REPORTS\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="fa fa-file-pdf-o font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_EXTRACTED_REPORTS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <!-- <a class="btn btn-icon-only btn-default fullscreen" href="#"></a> -->\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n\n<!-- END PAGE CONTENT-->\n'),a.put("app/analytic/metric/list/create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_METRIC\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="forms.metric" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.metric.name.$touched || forms.metric.$submitted) && forms.metric.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="(forms.metric.name.$touched || forms.metric.$submitted) && forms.metric.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START TABLE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.metric.table.$touched || forms.metric.$submitted) && forms.metric.table.$invalid}">\n <label class="control-label">{{\'APPLICATION_TABLE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="item.table" name="table" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{\'APPLICATION_\'+$select.selected.value.toUpperCase() | translate}}</ui-select-match>\n <ui-select-choices repeat="table.value as table in tables | filter: $select.search">\n <div ng-bind-html="\'APPLICATION_\'+table.value.toUpperCase() | translate | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.metric.table.$touched || forms.metric.$submitted) && forms.metric.table.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TABLE-->\n\n <!-- START METRIC -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.metric.metric.$touched || forms.metric.$submitted) && forms.metric.metric.$invalid}">\n <label class="control-label">{{\'APPLICATION_METRIC\' | translate}}<span class="required" aria-required="true">*</span></label>\n <textarea type="text" name="metric" placeholder="{{\'APPLICATION_METRIC\' | translate}}" class="form-control" data-ng-model="item.metric" required/></textarea>\n <span data-ng-show="(forms.metric.metric.$touched || forms.metric.$submitted) && forms.metric.metric.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END METRIC -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="ok()" ng-disabled="forms.metric.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'), +a.put("app/analytic/metric/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-calculator"></i>\n <a href="/analytics/metrics/list">{{ \'APPLICATION_METRICS\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <!-- <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-calculator font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_DEFAULT_METRICS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n </div>\n </div> -->\n <!-- <div class="portlet-body"> -->\n <!-- START TABLE -->\n <!-- <div ui-grid="gridOptionsDefault" data-ng-if="gridOptionsDefault" name="gridOptionsDefault" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptionsDefault.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div> -->\n <!-- END TABLE -->\n <!-- </div> -->\n <div class="portlet-title"><!-- removed margin-top20 class from title when commented the default metrics section-->\n <div class="caption font-green-sharp">\n <i class="icon-calculator font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_METRICS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <button class="btn green-jungle " ng-click="create()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_METRIC\' | translate }}\n </button>\n </div>\n <!-- <a class="btn btn-icon-only btn-default fullscreen" href="#"></a> -->\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" data-ng-if="gridOptions" name="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/analytic/metric/list/view.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_METRIC\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="forms.metric" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.metric.name.$touched || forms.metric.$submitted) && forms.metric.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}</label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required readonly/>\n <span data-ng-show="(forms.metric.name.$touched || forms.metric.$submitted) && forms.metric.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START TABLE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.metric.table.$touched || forms.metric.$submitted) && forms.metric.table.$invalid}">\n <label class="control-label">{{\'APPLICATION_TABLE\' | translate}}</label>\n <ui-select data-ng-model="item.table" name="table" theme="bootstrap" required data-ng-disabled="true">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{\'APPLICATION_\'+$select.selected.value.toUpperCase() | translate}}</ui-select-match>\n <ui-select-choices repeat="table.value as table in tables | filter: $select.search">\n <div ng-bind-html="\'APPLICATION_\'+table.value.toUpperCase() | translate | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.metric.table.$touched || forms.metric.$submitted) && forms.metric.table.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TABLE-->\n\n <!-- START METRIC -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.metric.metric.$touched || forms.metric.$submitted) && forms.metric.metric.$invalid}">\n <label class="control-label">{{\'APPLICATION_METRIC\' | translate}}</label>\n <textarea type="text" name="metric" placeholder="{{\'APPLICATION_METRIC\' | translate}}" class="form-control" data-ng-model="item.metric" required readonly/></textarea>\n <span data-ng-show="(forms.metric.metric.$touched || forms.metric.$submitted) && forms.metric.metric.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END METRIC -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description" readonly></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn default" type="button" ng-click="close()">{{ \'APPLICATION_CLOSE\' | translate }}</button>\n</div>\n'),a.put("app/analytic/metric/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getMetric()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-eye"></i>\n <a href="/analytics/metrics/list">{{ \'APPLICATION_METRICS\' | translate }}</a>\n <i data-ng-show="metric" class="fa fa-angle-right"></i>\n </li>\n <li data-ng-show="metric">\n <a href="#">{{metric.name}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/metric.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{metric.name}}\n </div>\n <!-- <div class="profile-usertitle-job">\n {{user.role}}\n </div> -->\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.analytics.metrics.view.settings\')}">\n <a data-ng-href="/analytics/metrics/view/{{metric.id}}/settings">\n <i class="icon-settings"></i>\n {{ \'APPLICATION_SETTINGS\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/analytic/metric/view/view.settings.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_METRIC\' | translate}} {{ \'APPLICATION_SETTINGS\' | translate}} </span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n </li>\n </ul>\n </div>\n\n <div class="portlet-body">\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.general" data-ng-submit="forms.general.$valid && updateMetric()" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="metric.name" required/>\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START TABLE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.table.$touched || forms.general.$submitted) && forms.general.table.$invalid}">\n <label class="control-label">{{\'APPLICATION_TABLE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="metric.table" name="table" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{\'APPLICATION_\'+$select.selected.value.toUpperCase() | translate}}</ui-select-match>\n <ui-select-choices repeat="table.value as table in tables | filter: $select.search">\n <div ng-bind-html="\'APPLICATION_\'+table.value.toUpperCase() | translate | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.general.table.$touched || forms.general.$submitted) && forms.general.table.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TABLE-->\n\n <!-- START METRIC -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.metric.$touched || forms.general.$submitted) && forms.general.metric.$invalid}">\n <label class="control-label">{{\'APPLICATION_METRIC\' | translate}}<span class="required" aria-required="true">*</span></label>\n <textarea type="text" name="metric" placeholder="{{\'APPLICATION_METRIC\' | translate}}" class="form-control" data-ng-model="metric.metric" required/></textarea>\n <span data-ng-show="(forms.general.metric.$touched || forms.general.$submitted) && forms.general.metric.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END METRIC -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="metric.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END ADVANCED TAB -->\n\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/analytic/report/list/copy.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_COPY_REPORT\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp" style="padding-left:10px;">\n <i class="icon-folder font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_COPY_TO\' | translate }} </span>\n </div>\n </div>\n <div class="portlet-body">\n <div js-tree="customTreeConfig" ng-model="customTreeData" should-apply="ac()" tree="customTreeInstance" tree-events="ready:initCustomScopeTree;"></div>\n </div>\n </div>\n <div class="has-error">\n <span data-ng-show="showAlert" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_SELECT_FOLDER\' | translate}}.\n </span>\n </div>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" data-ng-click="ok()">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/analytic/report/list/create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_REPORT\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="forms.report" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.report.name.$touched || forms.report.$submitted) && forms.report.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="(forms.report.name.$touched || forms.report.$submitted) && forms.report.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.report.name.$touched || forms.report.$submitted) && forms.report.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_PATH\' | translate}}<span class="required" aria-required="true"></span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_PATH\' | translate}}" class="form-control" data-ng-model="path" disabled/>\n <span data-ng-show="(forms.report.name.$touched || forms.report.$submitted) && forms.report.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="ok()" ng-disabled="forms.report.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/analytic/report/list/deleteNode.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_DELETE_FOLDER\' | translate }}</h3>\n</div>\n<div class="modal-body">\n<p>\n {{\'MESSAGE_DELETE_NODE\' | translate}} : <b>{{node}}</b>?\n</p>\n<p>\n {{\'MESSAGE_ALL_REPORTS_WILL_BE_DELETED\' | translate}}\n</p>\n</div>\n<div class="modal-footer">\n <button class="btn btn-danger" type="button" ng-click="ok()" ng-disabled="forms.report.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/analytic/report/list/extract.modal.html",'<div class="modal-header">\n <button type="button" ng-click="cancel()" class="close">×</button>\n <h4 class="modal-title">{{ \'APPLICATION_EXTRACT_REPORT\' | translate }}</h4>\n</div>\n<div class="modal-body" style="text-align:center;">\n <form name="forms.report" class="form-inline mbottom20" novalidate>\n <div class="form-group" data-ng-class="{\'hidden\':daily}">\n <label class="control-label">{{\'APPLICATION_DATE_RANGE\' | translate}}</label>\n <input type="daterange" name="dates" ranges="ranges" style="min-width:190px;" enabletimepicker="timepicker" placeholder="{{\'APPLICATION_DATE_RANGE\' | translate}}" class="form-control" data-ng-model="dates" max-date="{{maxdate}}" data-ng-required="!daily" data-ng-disabled="daily" data-ng-class="{\'disabled-invisible\':daily}" style="cursor:pointer;" readonly/>\n </div>\n <div class="form-group" data-ng-if="daily">\n <label class="control-label">{{\'APPLICATION_FROM\' | translate}}</label>\n </div>\n <div class="form-group" data-ng-if="daily">\n <uib-timepicker ng-model="dailyTime.start" ng-change="changed()" hour-step="1" minute-step="1" show-meridian="false"></uib-timepicker>\n </div>\n <div class="form-group" data-ng-if="daily">\n <label class="control-label">{{\'APPLICATION_TO\' | translate}}</label>\n </div>\n <div class="form-group" data-ng-if="daily">\n <uib-timepicker ng-model="dailyTime.end" ng-change="changed()" hour-step="1" minute-step="1" show-meridian="false"></uib-timepicker>\n </div>\n <!-- START STATUS -->\n <div class="form-group">\n <input\n bs-switch\n class="form-control"\n ng-model="daily"\n type="checkbox"\n name="auth"\n switch-active="{{ dailySwitch.isActive }}"\n switch-on-text="{{ dailySwitch.onText }}"\n switch-off-text="{{ dailySwitch.offText }}"\n switch-on-color="{{ dailySwitch.onColor }}"\n switch-off-color="{{ dailySwitch.offColor }}"\n switch-animate="{{ dailySwitch.animate }}"\n switch-size="{{ dailySwitch.size }}"\n switch-label="{{ dailySwitch.label }}"\n switch-icon="{{ dailySwitch.icon }}"\n switch-radio-off="{{ dailySwitch.radioOff }}"\n switch-label-width="{{ dailySwitch.labelWidth }}"\n switch-handle-width="{{ dailySwitch.handleWidth }}">\n </div>\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn default green-jungle" type="button" data-ng-click="extract(\'csv\')"><i class="fa fa-file-excel-o"></i> {{ \'APPLICATION_SAVE_AS_CSV\' | translate }}</button>\n <button class="btn default red-intense" type="button" data-ng-click="extract(\'pdf\')"><i class="fa fa-file-pdf-o"></i> {{ \'APPLICATION_SAVE_AS_PDF\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/analytic/report/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getTrees()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-book-open"></i>\n <a href="/analytics/reports/list">{{ \'APPLICATION_REPORTS\' | translate }}</a>\n </li>\n </ul>\n </div>\n <div class="col-fixed">\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp" style="padding-left:10px;">\n <i class="icon-folder font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_FOLDERS\' | translate }} </span>\n </div>\n <div class="inputs">\n <div class="portlet-input input-inline input-small">\n <div class="input-icon right">\n <i class="icon-magnifier"></i>\n <input type="text" data-ng-model="searchField" data-ng-change="searchTrees()" class="form-control input-circle" placeholder="search...">\n </div>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <div js-tree="defaultTreeConfig" ng-model="defaultTreeData" should-apply="ac()" tree="defaultTreeInstance" tree-events="ready:initDefaultScopeTree;select_node:selectDefaultNode;"></div>\n <div js-tree="customTreeConfig" ng-model="customTreeData" should-apply="ac()" tree="customTreeInstance" tree-events="ready:initCustomScopeTree;select_node:selectCustomNode;rename_node:updateCustomTree;delete_node:updateCustomTree;move_node:updateCustomTree;create_node:updateCustomTree;"></div>\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n <div class="row tree-row">\n <div class="col-md-12">\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-book-open font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_REPORTS\' | translate }}<span data-ng-if="selectedNode"> - {{selectedNode}}</span></span>\n </div>\n <div data-ng-if="!defaultTreeActive" class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <span class="btn default btn-file">\n <span class="fileinput-new">\n <i class="icon-cloud-upload"></i> {{\'APPLICATION_IMPORT_FROM_JSON\' | translate}}</span>\n <input type="file" on-read-file="import($fileContent)"/>\n </span>\n </div>\n <div class="btn-group">\n <button class="btn green-jungle " ng-click="create()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_REPORT\' | translate }}\n </button>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <div ng-slide-down="gridOptions" lazy-render duration="1">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n </div>\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/analytic/report/list/preview.modal.html",'<div class="modal-header">\n <button type="button" ng-click="cancel()" class="close">×</button>\n <h4 class="modal-title">{{ \'APPLICATION_REPORT_PREVIEW\' | translate }}</h4>\n</div>\n<div class="modal-body" style="text-align:center;">\n <form name="forms.report" class="form-inline mbottom20" novalidate>\n <div class="form-group" data-ng-class="{\'hidden\':daily}">\n <label class="control-label">{{\'APPLICATION_DATE_RANGE\' | translate}}<span class="required" aria-required="true"></span></label>\n <input type="daterange" name="dates" ranges="ranges" style="min-width:190px;" enabletimepicker="timepicker" placeholder="{{\'APPLICATION_DATE_RANGE\' | translate}}" class="form-control" data-ng-model="dates" data-ng-change="getPage()" max-date="{{maxdate}}" data-ng-required="!daily" data-ng-disabled="daily" data-ng-class="{\'disabled-invisible\':daily}" style="cursor:pointer;" readonly/>\n </div>\n <div class="form-group" data-ng-if="daily">\n <label class="control-label">{{\'APPLICATION_FROM\' | translate}}</label>\n </div>\n <div class="form-group" data-ng-if="daily">\n <uib-timepicker ng-model="dailyTime.start" ng-change="changed()" hour-step="1" minute-step="1" show-meridian="false"></uib-timepicker>\n </div>\n <div class="form-group" data-ng-if="daily">\n <label class="control-label">{{\'APPLICATION_TO\' | translate}}</label>\n </div>\n <div class="form-group" data-ng-if="daily">\n <uib-timepicker ng-model="dailyTime.end" ng-change="changed()" hour-step="1" minute-step="1" show-meridian="false"></uib-timepicker>\n </div>\n <div class="form-group" data-ng-if="daily">\n <button class="btn btn-small btn-sm btn-success" data-ng-click="getPage()">Apply</button>\n </div>\n <div class="form-group">\n <input\n bs-switch\n class="form-control"\n ng-model="daily"\n type="checkbox"\n name="auth"\n data-ng-change="getPage()"\n switch-active="{{ dailySwitch.isActive }}"\n switch-on-text="{{ dailySwitch.onText }}"\n switch-off-text="{{ dailySwitch.offText }}"\n switch-on-color="{{ dailySwitch.onColor }}"\n switch-off-color="{{ dailySwitch.offColor }}"\n switch-animate="{{ dailySwitch.animate }}"\n switch-size="{{ dailySwitch.size }}"\n switch-label="{{ dailySwitch.label }}"\n switch-icon="{{ dailySwitch.icon }}"\n switch-radio-off="{{ dailySwitch.radioOff }}"\n switch-label-width="{{ dailySwitch.labelWidth }}"\n switch-handle-width="{{ dailySwitch.handleWidth }}">\n </div>\n </form>\n <div ng-slide-down="showResult" lazy-render duration="1">\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-exporter class="grid extract-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n </div>\n</div>\n<div class="modal-footer">\n<button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CLOSE\' | translate }}</button>\n</div>\n'),a.put("app/analytic/report/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getReport()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-book-open"></i>\n <a href="/analytics/reports/list">{{ \'APPLICATION_REPORTS\' | translate }}</a>\n <i data-ng-show="report" class="fa fa-angle-right"></i>\n </li>\n <li data-ng-show="report">\n <a href="#">{{report.name}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/analytic/report/view/view.settings.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <div class="caption-subject font-blue-madison bold uppercase dot">{{ \'APPLICATION_REPORT\' | translate}} {{ \'APPLICATION_SETTINGS\' | translate}} - {{report.name}} </div>\n </div>\n <ul class="nav nav-tabs">\n <li>\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n </li>\n <li class="active">\n <a href="#" data-target="#tab_1_2" data-toggle="tab">{{ \'APPLICATION_BUILD\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_3" data-toggle="tab" data-ng-click="showResult = true">{{ \'APPLICATION_TEST_PREVIEW\' | translate}}</a>\n </li>\n </ul>\n </div>\n\n <div class="portlet-body">\n\n <div class="tab-content">\n\n <!-- GENERAL TAB -->\n <div class="tab-pane" id="tab_1_1">\n <form name="forms.general" data-ng-submit="forms.report.$valid && forms.general.$valid && updateReport()" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="report.name" required/>\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="report.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}" />\n </form>\n </div>\n <!-- END GENERAL TAB -->\n\n <!-- BUILD TAB -->\n <div class="tab-pane active" id="tab_1_2">\n <form name="forms.report" data-ng-submit="forms.report.$valid && forms.general.$valid && updateReport()" novalidate>\n <!-- START TABLE INPUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.report.table.$touched || forms.report.$submitted) && forms.report.table.$invalid}">\n <label class="control-label">{{\'APPLICATION_TABLE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="report.table" name="table" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{\'APPLICATION_\'+$select.selected.value.toUpperCase() | translate}}</ui-select-match>\n <ui-select-choices group-by="\'channel\'" repeat="table.value as table in tables | filter: $select.search">\n <div ng-bind-html="\'APPLICATION_\'+table.value.toUpperCase() | translate | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.report.table.$touched || forms.report.$submitted) && forms.report.table.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TABLE INPUT-->\n <div data-ng-if="report.table" class="mbottom20 pbottom20 table-responsive">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_FIELDS\' | translate}} </span>\n </div>\n </div>\n <!-- START TABLE -->\n <table class="table table-striped table-bordered table-hover">\n <thead>\n <tr>\n <th>{{ \'APPLICATION_FIELD\' | translate }} / {{ \'APPLICATION_METRIC\' | translate }}</th>\n <th style="min-width:167px;">{{ \'APPLICATION_ALIAS\' | translate }}</th>\n <th>{{ \'APPLICATION_FUNCTION\' | translate }}</th>\n <th>{{ \'APPLICATION_FORMAT\' | translate }}</th>\n <th>{{ \'APPLICATION_GROUP_BY\' | translate }}</th>\n <th>{{ \'APPLICATION_ORDER_BY\' | translate }}</th>\n <th></th>\n <th style="min-width:66px;"></th>\n </tr>\n </thead>\n <tbody ui-sortable="sortableOptions" data-ng-model="report.Fields">\n <tr data-ng-repeat="field in report.Fields">\n <td>\n <!-- START FIELD -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.report.$submitted && !field.field}">\n <!-- <label class="control-label">{{\'APPLICATION_FIELD\' | translate}}<span class="required" aria-required="true">*</span></label> -->\n <div class="input-group">\n <ui-select data-ng-if="!field.custom" data-ng-model="field.field" dynamic-name="randomName()" theme="bootstrap" on-select="setMetricId($item,$index)" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}"><span ng-bind-html="$select.selected.name"></span></ui-select-match>\n <ui-select-choices repeat="tableField.value as tableField in tableFields | filter: $select.search">\n <div ng-bind-html="tableField.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <input data-ng-if="field.custom" type="text" dynamic-name="randomName()" placeholder="{{\'APPLICATION_CUSTOM\' | translate}}" class="form-control" data-ng-model="field.field" required/>\n <span class="input-group-btn">\n <button type="button" data-ng-click="toggleCustom(field)" class="btn btn-default">\n <span class="icon-pencil" data-ng-class="{\'font-blue\':field.custom}"></span>\n </button>\n </span>\n </div>\n <span data-ng-show="forms.report.$submitted && !field.field" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END FIELD-->\n </td>\n <td>\n <!-- START ALIAS -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.report.$submitted && !field.alias}">\n <!-- <label class="control-label">{{\'APPLICATION_ALIAS\' | translate}}<span class="required" aria-required="true">*</span></label> -->\n <input type="text" dynamic-name="randomName()" placeholder="{{\'APPLICATION_ALIAS\' | translate}}" class="form-control" data-ng-model="field.alias" data-ng-pattern="\'[A-Za-z0-9 <>=,.%_\\\\+*!\\\\-\\\\[\\\\]]+\'" required/>\n <span data-ng-show="forms.report.$submitted && !field.alias" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="forms.report.$submitted && !field.alias" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n </span>\n </div>\n <!-- END ALIAS -->\n </td>\n <td>\n <!-- START FUNCTION -->\n <div class="form-group">\n <!-- <label class="control-label">{{\'APPLICATION_FIELD\' | translate}}<span class="required" aria-required="true">*</span></label> -->\n <ui-select data-ng-model="field.function" name="function" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_FUNCTION\' | translate}}" allow-clear>{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="function.value as function in functions | filter: $select.search">\n <div ng-bind-html="function.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END FUNCTION-->\n </td>\n <td>\n <!-- START FORMAT -->\n <div class="form-group">\n <!-- <label class="control-label">{{\'APPLICATION_FIELD\' | translate}}<span class="required" aria-required="true">*</span></label> -->\n <ui-select data-ng-model="field.format" name="format" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_FORMAT\' | translate}}" allow-clear>{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="format.value as format in formatFunctions | filter: $select.search">\n <div ng-bind-html="format.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END FORMAT-->\n </td>\n <td>\n <!-- START GROUP_BY -->\n <div class="form-group">\n <!-- <label class="control-label">{{\'APPLICATION_FIELD\' | translate}}<span class="required" aria-required="true">*</span></label> -->\n <ui-select data-ng-model="field.groupBy" name="groupBy" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_GROUP_BY\' | translate}}">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="groupBy.value as groupBy in groupByField | filter: $select.search">\n {{$translate.instant(groupBy.name)}}\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END GROUP_BY-->\n </td>\n <td>\n <!-- START ORDER_BY -->\n <div class="form-group">\n <!-- <label class="control-label">{{\'APPLICATION_FIELD\' | translate}}<span class="required" aria-required="true">*</span></label> -->\n <ui-select data-ng-model="field.orderBy" name="orderBy" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_ORDER_BY\' | translate}}" allow-clear>{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="orderBy in [\'ASC\',\'DESC\'] | filter: $select.search">\n <div ng-bind-html="orderBy | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END TABLE INPUT-->\n </td>\n <td class="report-field-remove">\n <button class="btn red" type="button" data-ng-click="removeField($index)"><i class="fa fa-times"></i></button>\n </td>\n <td class="report-field-handle">\n <!-- <img data-ng-src="assets/images/move.png" class="img-responsive"> -->\n </td>\n </tr>\n <tr data-ng-hide="report.Fields.length" class="unsortable">\n <td colspan="8" style="text-align:center;">\n <i>{{ \'MESSAGE_ADD_A_FIELD\' | translate }}</i>\n </td>\n </tr>\n </tbody>\n </table>\n <button type="button" class="btn btn-sm green padding-bottom" ng-click="addField()">\n <i class="fa fa-plus"></i> {{\'APPLICATION_ADD_FIELD\' | translate}}\n </button>\n <!-- END TABLE -->\n </div>\n <div data-ng-if="report.Fields.length" class="mbottom20 pbottom20">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_CONDITIONS\' | translate}} </span>\n </div>\n </div>\n <div class="alert alert-info">\n <strong>Output</strong>\n <br>\n <span ng-bind-html="output"></span>\n </div>\n\n <report-builder group="report.conditions.group" fields="tableFields" forms="forms" firstCall=\'true\'></report-builder>\n </div>\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}" />\n </form>\n </div>\n <!-- END BUILD TAB -->\n\n <!-- PREVIEW TAB -->\n <div class="tab-pane" id="tab_1_3">\n <div ng-slide-down="showResult" lazy-render duration="0.5">\n <div ui-grid="gridOptions" data-ng-if="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-move-columns class="grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n </div>\n </div>\n <!-- END PREVIEW TAB -->\n\n </div>\n </div>\n </div>\n </div>\n</div>\n'), +a.put("app/channels/chat/offline/list/list.html",'<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-bubble"></i>\n <a href="#">{{ \'APPLICATION_CHAT\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-login"></i>\n <a href="/channels/chat/offline/list">{{ \'APPLICATION_OFFLINE\' | translate }}</a>\n </li>\n </ul>\n </div>\n </div>\n</div>\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-question font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_OFFLINE_MESSAGES\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/chat/offline/message/message.directive.html",'<div class="message">\n <div class="row">\n <div class="col-md-12">\n <span class="bold">From: </span>\n [<a href="" data-ng-click="openContact(message.email)">{{message.email}}</a>]\n </div>\n </div>\n <br>\n <span class="todo-tasklist-date">\n <i class="icon-calendar"></i> {{message.createdAt | date:\'medium\'}} (<span am-time-ago="message.createdAt"></span>)\n </span>\n <hr>\n <div class="body text-left message-body" data-ng-bind="message.text"></div>\n <h5 data-ng-hide="message.text" class="media-heading"><i>{{\'MESSAGE_NO_AVAILABLE_TEXT\' | translate | lowercase}}</i></h5>\n</div>\n'),a.put("app/channels/chat/offline/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initView();">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-bubble"></i>\n <a href="#">{{ \'APPLICATION_CHAT\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-login"></i>\n <a href="/channels/chat/offline/list">Offline</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-user"></i>\n <a href="#">{{enquiry.username}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE CONTENT -->\n <div class="portlet light">\n <div class="portlet-title">\n <div class="caption">\n <span data-ng-if="enquiry.ChatWebsite" class="caption-subject font-green-sharp bold uppercase">{{enquiry.ChatWebsite.name}}</span>\n </div>\n </div>\n <div class="portlet-body">\n <div class="row">\n <div class="col-md-4">\n <!-- Visitor Information -->\n <div class="portlet">\n <div class="portlet-body">\n <v-accordion class="vAccordion--default">\n <v-pane expanded="true">\n <v-pane-header>\n <ng-letter-avatar data-ng-if="enquiry.ChatVisitor" height="40" width="40" data="{{enquiry.ChatVisitor.fullname}}" fontsize="25" avatarcustombgcolor="#B0B0B0" charCount="2" avatarcustomborder="border:2px solid #EA4C61" shape="round"></ng-letter-avatar>\n </v-pane-header>\n <v-pane-content>\n {{\'APPLICATION_NAME\' | translate}}:<p>{{enquiry.ChatVisitor.fullname}}</p>\n {{\'APPLICATION_EMAIL\' | translate}}:<p><a data-ng-click="openContact(enquiry.ChatVisitor.email)" href="">{{enquiry.ChatVisitor.email}}</a></p>\n <span data-ng-if="enquiry.ChatVisitor.labelOfflineData1">{{enquiry.ChatVisitor.labelOfflineData1}}: <p>{{enquiry.ChatVisitor.offlineData1}}</p></span>\n <span data-ng-if="enquiry.ChatVisitor.labelOfflineData2">{{enquiry.ChatVisitor.labelOfflineData2}}: <p>{{enquiry.ChatVisitor.offlineData2}}</p></span>\n <span data-ng-if="enquiry.ChatVisitor.labelOfflineData3">{{enquiry.ChatVisitor.labelOfflineData3}}: <p>{{enquiry.ChatVisitor.offlineData3}}</p></span>\n {{\'APPLICATION_REMOTE_ADDRESS\' | translate}}:<p>{{enquiry.ChatVisitor.remote_address}}</p>\n {{\'APPLICATION_BROWSER\' | translate}}:<p>{{enquiry.ChatVisitor.browser}}</p>\n {{\'APPLICATION_REFERER\' | translate}}:<p>{{enquiry.ChatVisitor.referer}} - {{enquiry.ChatWebsite.name}}</p>\n {{\'APPLICATION_OS\' | translate}}:<p>{{enquiry.ChatVisitor.os}}</p>\n </v-pane-content>\n </v-pane>\n </v-accordion>\n </div>\n </div>\n </div>\n <div class="col-md-8">\n <!-- Offline message -->\n <div id="mail-box">\n <ul class="chats">\n <li class="in">\n <enquiry-message message="enquiry" list-id="enquiry.ChatWebsite.ListId"></enquiry-message>\n </li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/chat/online/list/list.html",'<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-bubble"></i>\n <a href="#">{{ \'APPLICATION_CHAT\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-login"></i>\n <a href="/channels/chat/online/list">{{ \'APPLICATION_ONLINE\' | translate }}</a>\n </li>\n </ul>\n </div>\n </div>\n</div>\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-question font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_VISITORS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/chat/online/view/view.detail.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_DETAIL\' | translate}}</span>\n </div>\n </div>\n <div class="portlet-body row" data-ng-init="initView()">\n <div class="col-md-6">\n <div class="news-blocks">\n <h3>\n <a href="#" class="inactive-link">{{\'APPLICATION_MESSAGES\' | translate}}</a>\n <!-- <a href="#" data-ng-click="export()" data-ng-show="chatRoom.ChatMessages.length" class="btn btn-sm blue pull-right"><i class="icon-cloud-download"></i> {{\'APPLICATION_EXPORT\' | translate}} CSV </a> -->\n <a href="api/chat/rooms/{{chatRoom.id}}/export" target="_blank" data-ng-show="chatRoom.ChatMessages.length" class="btn btn-sm blue pull-right"><i class="icon-cloud-download"></i> {{\'APPLICATION_EXPORT\' | translate}} CSV </a>\n <hr>\n </h3>\n <div class="news-block-tags">\n <em am-time-ago="chatRoom.ChatVisitor.ChatEnquiry.createdAt"></em>\n </div>\n <p>\n <div ng-scrollbars ng-scrollbars-config="config">\n <ul class="chats">\n <li data-ng-class="{\'out\': message.User, \'in\':message.ChatVisitor}" data-ng-repeat="message in chatRoom.ChatMessages | orderBy:\'createdAt\'">\n <img class="avatar" data-ng-src="api/users/avatar/{{message.User.userpic || \'unknown_avatar\'}}">\n <div class="message">\n <span class="arrow">\n </span>\n <a href="#" class="name">\n {{message.User ? message.User.fullname : message.ChatVisitor.fullname}}\n </a>\n <span class="datetime">\n at {{message.createdAt | date: \'medium\'}}\n </span>\n <span class="body">\n {{message.body}}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </div>\n </div>\n <div class="col-md-6">\n <div class="news-blocks">\n <h3>\n <a href="#" class="inactive-link">{{\'APPLICATION_VISITOR\' | translate}}</a>\n <hr>\n </h3>\n <div class="margin-top-20 profile-desc-link">\n <i class="icon-user"></i>\n <a href="#" class="inactive-link">{{chatRoom.ChatVisitor.fullname}}</a>\n </div>\n <div class="margin-top-20 profile-desc-link">\n <i class="icon-envelope"></i>\n <a href="#" class="inactive-link">{{chatRoom.ChatVisitor.email}}</a>\n </div>\n <div class="margin-top-20 profile-desc-link">\n <i class="icon-globe"></i>\n <a href="#" class="inactive-link">{{chatRoom.ChatVisitor.remote_address}}</a>\n </div>\n <div class="margin-top-20 profile-desc-link">\n <i class="icon-home"></i>\n <a href="#" class="inactive-link">{{chatRoom.ChatVisitor.referer}} - {{chatRoom.ChatVisitor.ChatWebsite.name}}</a>\n </div>\n <div class="margin-top-20 profile-desc-link">\n <i class="icon-cursor"></i>\n <a href="#" class="inactive-link">{{chatRoom.ChatVisitor.browser}}</a>\n </div>\n <div class="margin-top-20 profile-desc-link">\n <i class="icon-screen-desktop"></i>\n <a href="#" class="inactive-link">{{chatRoom.ChatVisitor.os}}</a>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n'),a.put("app/channels/chat/online/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-bubble"></i>\n <a href="#">{{ \'APPLICATION_CHAT\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-login"></i>\n <a href="/channels/chat/online/list">Online</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/enquiry.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- START USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{chatRoom.ChatVisitor.email}}\n </div>\n <div class="profile-usertitle-job">\n {{chatRoom.ChatVisitor.fullname}}\n </div>\n </div>\n <!-- END USER TITLE -->\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.channels.chat.online.view.detail\')}">\n <a data-ng-href="/channels/chat/online/view/{{chatRoom.id}}/detail">\n <i class="icon-tag"></i>\n {{ \'APPLICATION_DETAIL\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/chat/preview/preview.html",'<style>\n.xc_header_logo\n{\n display:block;\n background-image:url({{chatWebsite.remote}}/api/xchatty/assets?resource=images/motion_logo.png);\n width:40px;\n height:40px;\n float:left;;\n margin-left: 10px !important;\n margin-top: 6px !important;\n}\n.xc_rating {\n text-align: center;\n}\n.xc_rating_label > input{ /* HIDE RADIO */\n display:none;\n}\n.xc_rating_label > input + img{ /* IMAGE STYLES */\n cursor:pointer;\n border:2px solid transparent;\n}\n.xc_rating_label > input:checked + img{ /* (CHECKED) IMAGE STYLES */\n /*border:2px solid #f00;*/\n background-color: #efefef;\n}\n\n.xc_label {\n display: inline-block;\n max-width: 100%;\n margin-bottom: 5px;\n font-weight: bold;\n}\n\n.xc_online_message,\n.xc_offline_message,\n.xc_rating_message\n{\n text-align: center;\n}\n\n.xc_div_group {\n margin: 10px 0 10px 0;\n}\n.xc_footer\n{\n text-align: center;\n padding-bottom: 5px;\n}\n\n.xc_powered\n{\n color: grey;\n font: 10px/16px "Lucida Grande","Lucida Sans Unicode",Arial,Verdana,sans-serif;\n padding-bottom: 5px;\n}\n\n.xc_chat_container\n{\n //width:379px;\n //position:fixed;\n //bottom:0;\n //right:50px;\n z-index:9999;\n background-color:transparent;\n}\n\n.xc_chat_container *\n{\n font-family:Arial,Helvetica,sans-serif;\n font-size:13px;\n margin:0;\n padding:0;\n}\n\n.xc_chat_container p\n{\n margin:5px 0;\n}\n\n.xc_signup_wrapper\n{\n max-height:375px;\n}\n\n.xc_conversation_container\n{\n max-height:375px;\n list-style:none;\n overflow:auto;\n margin:0;\n padding:20px 10px;\n}\n\n.xc_conversation_container a\n{\n color:#036;\n}\n\n.xc_conversation_container a.xc_btn_style\n{\n color:#fff;\n}\n\ndiv.xc_chat_head\n{\n color:#fff;\n background:{{chatWebsite.color}};\n //border-radius: 20px 20px 0px 0px !important;\n height:52px;\n line-height:55px;\n cursor:pointer;\n}\n\ndiv.xc_chat_head.rounded\n{\n border-radius: 20px 20px 0px 0px !important;\n}\n\ndiv.xc_chat_head.squared\n{\n //border-radius: 20px 20px 0px 0px !important;\n}\n\n.xc_chat_head-title\n{\n margin:5px 0 0 15px;\n color: #fff;\n}\n\n.xc_header_icon\n{\n display:block;\n background-image:url({{chatWebsite.remote}}/api/xchatty/assets?resource=images/iconVisitorchat.png);\n width:21px;\n height:16px;\n float:right;\n margin:20px 20px 0 0;\n}\n\n.xc_header_icon span.xc_notification_badge span\n{\n display:block;\n height:16px;\n width:15px;\n text-align:center;\n font-size:9px;\n color:#555;\n position:relative;\n top:-20px;\n left:4px;\n margin:0;\n padding:0;\n}\n\n.xc_sub-head-spacer\n{\n padding:1px;\n}\n\n.xc_conversation\n{\n display:none;\n margin:0 12px 0 11px;\n}\n\n.xc_chat_toggle_container\n{\n /*background:mediumslateblue center 52px;*/\n background: white;\n border-style: solid;\n border-width: 1px;\n border-color: {{chatWebsite.color}};\n //display:none;\n}\n\n.xc_signup_wrapper,.xc_notifications_wrapper,.xc_enquiry_wrapper,.xc_rating_wrapper\n{\n //display:none;\n display:block;\n overflow:auto;\n line-height:1;\n padding:25px;\n}\n\n.xc_exit_chat_container\n{\n text-align:right;\n width:95%;\n margin:0 auto;\n padding:5px 1px 0 0;\n}\n\n.xc_exit_chat_container span,.xc_exit_chat_container a\n{\n font-size:80%;\n color:#666;\n text-decoration:none;\n}\n\n.xc_exit_chat_container a:hover\n{\n color:#333;\n}\n\na.xc_btn_exit_chat_confirm:hover\n{\n color:red;\n}\n\na.xc_btn_exit_chat_cancel:hover\n{\n color:#0c0;\n}\n\nform.xc_form_reply\n{\n position:relative;\n}\n\n.xc_form_reply\n{\n /*background-color:#e3e3e3;*/\n text-align:center;\n /*border-top:1px solid #d3d3d3;*/\n}\n\n.xc_input_message\n{\n height:100px;\n margin:10px auto 5px;\n}\n\n.xc_input_enquiry_message,\n.xc_input_rating_message\n{\n height:100px;\n}\n\n.xc_form_signup,.xc_form_enquiry,.xc_form_rating\n{\n /*text-align:center;*/\n}\n\n.xc_chat_container textarea,.xc_chat_container input[type=text]\n{\n width:95%;\n min-width:95%;\n max-width:95%;\n -webkit-box-sizing:border-box;\n -moz-box-sizing:border-box;\n box-sizing:border-box;\n background-color:#fff;\n border:1px solid #ccc;\n -webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);\n -moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);\n box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);\n -webkit-transition:border linear .2s, box-shadow linear .2s;\n -moz-transition:border linear .2s, box-shadow linear .2s;\n -o-transition:border linear .2s, box-shadow linear .2s;\n transition:border linear .2s, box-shadow linear .2s;\n display:inline-block;\n font-size:14px;\n line-height:20px;\n color:#555;\n -webkit-border-radius:4px;\n -moz-border-radius:4px;\n border-radius:4px;\n vertical-align:middle;\n margin:3px 0;\n padding:4px 6px;\n resize: none;\n}\n\n.xc_chat_container textarea:focus,.xc_chat_container input[type=text]:focus\n{\n outline: {{chatWebsite.color_focus}} auto 5px;\n}\n\n.xc_chat_container input[type=text]\n{\n height: 30px;\n}\n\n.xc_message_sending textarea, .xc_enquiry_sending textarea\n{\n background: #fff url({{chatWebsite.remote}}/api/xchatty/assets?resource=images/loading.gif) 98% 5px no-repeat;\n}\n\n.xc_chatrow\n{\n display:block;\n border-top:1px dashed #e3e3e3;\n margin:5px 0;\n clear: both;\n}\n\n.xc_chatrow p\n{\n color:#444;\n word-wrap:break-word;\n}\n\n.xc_time\n{\n float:right;\n font-size:80%;\n color:#ccc;\n padding-left:12px;\n margin:3px;\n}\n\n.xc_submission_pending\n{\n background:transparent url({{chatWebsite.remote}}/api/xchatty/assets?resource=images/bullet_clock.png) left center norepeat;\n}\n\n.xc_submission_confirmed\n{\n background:transparent url({{chatWebsite.remote}}/api/xchatty/assets?resource=images/bullet_tick.png) left center norepeat;\n}\n\n.xc_fullname\n{\n font-weight:700;\n}\n\n.xc_fullname:after\n{\n content:":";\n}\n\n.xc_avatar\n{\n float: left;\n margin: 0 5px 5px 0;\n display: inline-block;\n width: 40px;\n height: 40px;\n border-radius: 5px;\n -moz-border-radius: 5px;\n -webkit-border-radius: 5px;\n}\n\n.xc_smilie\n{\n background-repeat:no-repeat;\n display:inline-block;\n width:18px;\n height:18px;\n text-indent:-9999px;\n white-space:nowrap;\n}\n\n.xc_btn_load_more\n{\n width:100%!important;\n}\n\n.xc_notifications_wrapper\n{\n text-shadow:0 1px 0 rgba(255,255,255,0.5);\n}\n\n.xc_notification_success\n{\n color:#468847;\n}\n\n.xc_notification_error\n{\n color:#b94a48;\n}\n\n.xc_errorlist\n{\n margin:0 0 0 25px;\n padding:0;\n}\n\ni.xc_btn_notifications_close\n{\n float:right;\n font-weight:700;\n font-size:20px;\n color:#ccc;\n cursor:pointer;\n margin:-15px 0 0;\n padding:0;\n}\n\n.xc_btn_style\n{\n width:95%;\n text-align:center;\n line-height:1.2;\n font-size:90%;\n -moz-box-shadow:inset 0 1px 0 0 {{chatWebsite.color_button}};\n -webkit-box-shadow:inset 0 1px 0 0 {{chatWebsite.color_button}};\n box-shadow:inset 0 1px 0 0 {{chatWebsite.color_button}};\n background:0;\n background-color:{{chatWebsite.color_button}};\n -moz-border-radius:4px;\n -webkit-border-radius:4px;\n border-radius:4px;\n border:1px solid {{chatWebsite.color_button}};\n display:inline-block;\n color:#fff;\n font-weight:700;\n text-decoration:none;\n text-shadow:1px 1px 0 #000c17;\n margin:0 auto 5px;\n padding:2px 0;\n}\n\n.xc_btn_style:hover\n{\n background:0;\n background-color:{{chatWebsite.color_button}};\n color: #fff;\n text-decoration: none;\n}\n\n.xc_btn_style:active\n{\n position:relative;\n top:1px;\n}\n\n.xc_composing_container\n{\n display: none;\n width: 95%;\n margin: 0 auto;\n background: transparent url({{chatWebsite.remote}}/api/xchatty/assets?resource=images/bullet_pencil.png) 6px center no-repeat;\n padding-left: 19px;\n font-style: italic;\n}\n\n@media only screen and (max-height: 620px) {\n .xc_conversation_container\n {\n max-height:300px!important;\n }\n}\n\n@media only screen and (max-height: 545px) {\n .xc_conversation_container\n {\n max-height:200px!important;\n }\n}\n\n@media only screen and (max-height: 445px) {\n .xc_conversation_container\n {\n max-height:150px!important;\n }\n}\n\n@media only screen and (max-width: 480px) {\n .xc_chat_container\n {\n width:95%!important;\n right:auto!important;\n -webkit-border-top-left-radius:15px;\n -webkit-border-top-right-radius:15px;\n -moz-border-radius-topleft:15px;\n -moz-border-radius-topright:15px;\n border-top-left-radius:15px;\n border-top-right-radius:15px;\n box-shadow:0 0 5px rgba(0,0,0,.5);\n -webkit-box-shadow:0 0 5px rgba(0,0,0,.5);\n -moz-box-shadow:0 0 5px rgba(0,0,0,.5);\n }\n\n div.xc_chat_head\n {\n background-color:#036;\n background-image:none;\n line-height:25px;\n height:auto;\n -webkit-border-top-left-radius:15px;\n -webkit-border-top-right-radius:15px;\n -moz-border-radius-topleft:15px;\n -moz-border-radius-topright:15px;\n border-top-left-radius:15px;\n border-top-right-radius:15px;\n padding:10px;\n }\n\n .xc_chat_toggle_container\n {\n background-color:#fff;\n background-image:none;\n border-color:#036;\n border-style:solid;\n border-width:0 1px;\n }\n\n .xc_header_icon\n {\n background-image:url({{chatWebsite.remote}}/api/xchatty/assets?resource=images/icon_visitorchat.png);\n margin:0;\n }\n\n .xc_header_icon span.xc_notification_badge span\n {\n top:-5px;\n left:5px;\n }\n\n .xc_notification_success\n {\n background-color:#dff0d8;\n border:1px solid #d6e9c6;\n }\n\n .xc_conversation_container\n {\n max-height:375px;\n border-color:#036;\n }\n\n .xc_notification_error\n {\n background-color:#f2dede;\n border:1px solid #eed3d7;\n }\n\n .xc_sub-head-spacer\n {\n display:none;\n padding:0;\n }\n\n .xc_chat_head-title,.xc_conversation\n {\n margin:0;\n }\n}\n</style>\n<div class="xc_chat_container">\n <div class="xc_chat_head {{chatWebsite.header_shape}}">\n <i class="xc_header_icon">\n <span class="xc_notification_badge">\n <span class="xc_notification_badge_number"></span>\n </span>\n </i>\n <i class="xc_header_logo" style="background-image:url(/api/xchatty/assets?resource=images/{{(chatWebsite.defaultLogo || !license.custom) ? \'motionLogo.png\' : (!chatWebsite.defaultLogo && chatWebsite.logo && license.custom) ? chatWebsite.logo+\'&uploaded\' : \'motionLogo.png\'}});background-size:contain;"></i>\n </a>\n <span class="xc_chat_head-title">{{statePreview.state == \'online\' ? chatWebsite.header_online : chatWebsite.header_offline}}</span>\n </div>\n <div class="xc_chat_toggle_container">\n <div class="xc_sub-head-spacer"></div>\n <!-- <div class="xc_notifications_wrapper">\n <ul class="xc_errorlist"></ul>\n </div> -->\n <div class="xc_enquiry_wrapper" data-ng-show=\'statePreview.state == "offline"\'>\n <form class="xc_form_enquiry" accept-charset="UTF-8">\n <p class="xc_offline_message" ng-bind-html=\'chatWebsite.offline_message\'></p>\n <br>\n <div ng-if="chatWebsite.enquiry_enable">\n <div class="xc_div_group">\n <label for="enquiryFullname" class="xc_label">{{chatWebsite.name_title}} *</label>\n <input id="enquiryFullname" maxlength="45" data-label="Name" type="text" name="data[Enquiry][fullname]" placeholder="{{chatWebsite.username_placeholder}}" class="xc_input_enquiry_fullname" required/>\n </div>\n <br>\n <div class="xc_div_group">\n <label for="enquiryEmail" class="xc_label">{{chatWebsite.email_title}} *</label>\n <input id="enquiryEmail" maxlength="85" type="text" data-label="Email Address" name="data[Enquiry][email]" placeholder="{{chatWebsite.email_placeholder}}" class="xc_input_enquiry_email" required/>\n </div>\n <br>\n <div class="xc_div_group">\n <label for="enquiryMessage" class="xc_label">{{chatWebsite.message_title}} *</label>\n <textarea id="enquiryMessage" data-label="Message" maxlength="1500" placeholder="{{chatWebsite.enquiry_message_placeholder}}" name="data[Enquiry][message]" class="xc_input_enquiry_message" required></textarea>\n </div>\n <br>\n <button type="submit" class="xc_btn_enquiry xc_btn_style">{{chatWebsite.enquiry_button}}</button>\n </div>\n </form>\n </div>\n <div class="xc_signup_wrapper" data-ng-show=\'statePreview.state == "online"\'>\n <form class="xc_form_signup" accept-charset="UTF-8">\n <p class="xc_online_message" ng-bind-html=\'chatWebsite.online_message\'></p>\n <br>\n <div class="xc_div_group">\n <label for="dataFullname" class="xc_label">{{chatWebsite.name_title}} *</label>\n <input maxlength="45" id="dataFullname" data-label="Fullname" type="text" name="data[Discussion][fullname]" placeholder="{{chatWebsite.username_placeholder}}" class="xc_input_fullname" required/>\n </div>\n <br>\n <div class="xc_div_group">\n <label for="dataEmail" class="xc_label">{{chatWebsite.email_title}} *</label>\n <input maxlength="85" id="dataEmail" data-label="Email Address" type="text" name="data[Discussion][email]" placeholder="{{chatWebsite.email_placeholder}}" class="xc_input_email" required/>\n </div>\n <br>\n <input type="hidden" class="xc_input_visitor_time" name="data[Discussion][visitor_time]" />\n <button type="submit" class="xc_btn_signup xc_btn_style">{{chatWebsite.start_chat_button}}</button>\n </form>\n </div>\n <div class="xc_rating_wrapper" data-ng-show=\'statePreview.state == "rating"\'>\n <form class="xc_form_rating" accept-charset="UTF-8">\n <p class="xc_rating_message">{{chatWebsite.rating_message}}</p>\n <br>\n <div class="xc_rating">\n <label class="xc_rating_label" style="padding:30px;">\n <input type="radio" name="data[Rating][rating]" value="good" />\n <img src="{{chatWebsite.remote}}/api/xchatty/assets?resource=images/like.png" alt="Good" height="50"/>\n </label>\n <label class="xc_rating_label" style="padding:30px;">\n <input type="radio" name="data[Rating][rating]" value="bad"/>\n <img src="{{chatWebsite.remote}}/api/xchatty/assets?resource=images/dislike.png" alt="Good" height="50"/>\n </label>\n </div>\n <div class="xc_div_group">\n <label for="ratingMessage" class="xc_label">Message</label>\n <textarea id="ratingMessage" data-label="Message" maxlength="1500" name="data[Rating][message]" class="xc_input_rating_message"></textarea>\n </div>\n <button type="submit" class="xc_button_rating xc_btn_style">{{chatWebsite.rating_send}}</button>\n <button type="button" class="xc_button_skip_rating xc_btn_style">{{chatWebsite.rating_skip}}</button>\n </form>\n </div>\n <div class="xc_footer">\n <div data-ng-if="chatWebsite.defaultWhiteLabel || !license.custom" class="xc_powered"><a>Powered by xCALLY</a></div>\n <div data-ng-if="!chatWebsite.defaultWhiteLabel && license.custom" data-ng-bind-html="chatWebsite.whiteLabel"></div>\n </div>\n</div>\n</div>\n'),a.put("app/channels/chat/queue/list/list.create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_QUEUE\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.name.$touched || form.$submitted) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" data-ng-pattern="settings.patternName" required />\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$invalid && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$invalid && form.name.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_PATTERN_NAME\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START STRATEGY -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.strategy.$touched || form.$submitted) && form.strategy.$invalid}">\n <label class="control-label">{{\'APPLICATION_STRATEGY\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="item.strategy" name="strategy" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected | uppercase}}</ui-select-match>\n <ui-select-choices repeat="strategy in [\'beepall\',\'roundrobin\',\'rrmemory\'] | filter: $select.search">\n <div ng-bind-html="strategy.toUpperCase() | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form.strategy.$touched || form.$submitted) && form.strategy.$invalid && form.strategy.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END STRATEGY -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.timeout.$touched || form.$submitted) && form.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_AGENT_TIMEOUT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" name="timeout" placeholder="Timeout" class="form-control" data-ng-model="item.timeout" required min="1"/>\n <span data-ng-show="(form.timeout.$touched || form.$submitted) && form.timeout.$invalid && form.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n\n <!-- START AGENTS-->\n <div class="form-body" data-ng-init="getTeams()">\n <label for="penalty">{{\'APPLICATION_PENALTY\' | translate}}</label>\n <div class="input-group input-small mbottom20">\n <input type="number" class="spinner-input form-control" maxlength="3" data-ng-model="item.penalty" readonly>\n <div class="spinner-buttons input-group-btn btn-group-vertical">\n <button type="button" class="btn spinner-up btn-xs blue" data-ng-click="item.penalty=item.penalty+1">\n <i class="fa fa-angle-up"></i>\n </button>\n <button type="button" class="btn spinner-down btn-xs blue" data-ng-disabled="!item.penalty" data-ng-click="item.penalty=item.penalty-1">\n <i class="fa fa-angle-down"></i>\n </button>\n </div>\n </div>\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-team">\n </div>\n </div>\n </div>\n <!-- END AGENTS-->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'), +a.put("app/channels/chat/queue/list/list.html",'<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-bubble"></i>\n <a href="#">{{ \'APPLICATION_CHAT\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-docs"></i>\n <a href="#">{{ \'APPLICATION_QUEUES\' | translate }}</a>\n </li>\n </ul>\n </div>\n </div>\n</div>\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-docs font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_QUEUES\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <a class="btn green-jungle" href="#" data-ng-click="createItem()" data-ng-if="Auth.isAdmin()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_QUEUE\' | translate }}\n </a>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/chat/queue/view/view.agents.html",'<div class="row" data-ng-init="getTeams()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_AGENTS\' | translate}}</span>\n </div>\n </div>\n <div class="portlet-body">\n <!-- BEGIN FORM-->\n <form action="index.html" class="form-horizontal form-row-seperated">\n <div class="form-body">\n <label for="penalty">{{\'APPLICATION_PENALTY\' | translate}}</label>\n <div class="input-group input-small mbottom20">\n <input type="number" class="spinner-input form-control" maxlength="3" data-ng-model="queue.penalty" readonly>\n <div class="spinner-buttons input-group-btn btn-group-vertical">\n <button type="button" class="btn spinner-up btn-xs blue" data-ng-click="queue.penalty=queue.penalty+1">\n <i class="fa fa-angle-up"></i>\n </button>\n <button type="button" class="btn spinner-down btn-xs blue" data-ng-disabled="!queue.penalty" data-ng-click="queue.penalty=queue.penalty-1">\n <i class="fa fa-angle-down"></i>\n </button>\n </div>\n </div>\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-team">\n </div>\n </div>\n </div>\n </form>\n <!-- END FORM-->\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/chat/queue/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getQueue()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-bubble"></i>\n <a href="#">{{ \'APPLICATION_CHAT\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-docs"></i>\n <a href="/channels/chat/queues/list">{{ \'APPLICATION_QUEUES\' | translate }}</a>\n <i data-ng-show="queue" class="fa fa-angle-right"></i>\n </li>\n <li data-ng-show="queue">\n <a href="#">{{queue.name}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/queue.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{queue.name}}\n </div>\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.channels.chat.queues.view.settings\')}">\n <a data-ng-href="/channels/chat/queues/view/{{queue.id}}/settings">\n <i class="icon-settings"></i>\n {{ \'APPLICATION_SETTINGS\' | translate}} </a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.channels.chat.queues.view.agents\')}" data-ng-show="Auth.getCurrentUser().role === \'admin\'">\n <a data-ng-href="/channels/chat/queues/view/{{queue.id}}/agents">\n <i class="icon-people"></i>\n {{ \'APPLICATION_AGENTS\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/chat/queue/view/view.settings.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_SETTINGS\' | translate}}</span>\n </div>\n </div>\n <div class="portlet-body">\n <form name="forms.general" data-ng-submit="forms.general.$valid && updateChatQueue()" novalidate>\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="queue.name" data-ng-pattern="settings.patternName" required />\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid && forms.general.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid && forms.general.name.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_PATTERN_NAME\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START STRATEGY -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.strategy.$touched || forms.general.$submitted) && forms.general.strategy.$invalid}">\n <label class="control-label">{{\'APPLICATION_STRATEGY\' | translate}}</label>\n <ui-select data-ng-model="queue.strategy" name="strategy" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected | uppercase}}</ui-select-match>\n <ui-select-choices repeat="strategy in [\'beepall\',\'roundrobin\',\'rrmemory\'] | filter: $select.search">\n <div ng-bind-html="strategy.toUpperCase() | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END STRATEGY -->\n\n <!-- START TIMEOUT -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_AGENT\' | translate}} {{\'APPLICATION_TIMEOUT\' | translate}}</label>\n <input type="number" name="timeout" placeholder="{{\'APPLICATION_TIMEOUT\' | translate}}" class="form-control" min="1" data-ng-model="queue.timeout"/>\n </div>\n <!-- END TIMEOUT -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="queue.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n <input data-ng-if="Auth.isAdmin()" class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/chat/realtime/view/agent/agent.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initAgents()">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns class="ui-grid" ui-grid-tree-view ui-grid-expandable-row ui-grid-pagination ui-grid-auto-resize>\n <span us-spinner spinner-key="grid-spinner" spinner-start-active="true"></span>\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/chat/realtime/view/agent/agent.modal.info.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_INTERFACE_INFO\' | translate }}</h3>\n</div>\n<div class="modal-body">\n<div data-ng-if="agent.ipaddr" class="well">\n <div>{{agent.ipaddr}}:{{agent.port}}</div>\n <div>{{agent.fullcontact}}</div>\n <div>{{agent.useragent}}</div>\n <div>{{agent.lastms}}</div>\n</div>\n<div data-ng-if="!agent.ipaddr" class="alert alert-danger" role="alert">\n {{\'MESSAGE_NO_AVAILABLE_INFO\' | translate}}\n</div>\n</div>\n<div class="modal-footer">\n <button class="btn default" type="button" ng-click="close()">{{ \'APPLICATION_CLOSE\' | translate }}</button>\n</div>\n'),a.put("app/channels/chat/realtime/view/agent/queue.modal.add.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_JOIN_QUEUE\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <div class="form-group row">\n <label class="col-md-2 control-label" style="margin-top: 7px;">{{\'APPLICATION_QUEUE\' | translate}}:</label>\n <div class="col-md-10">\n <ui-select multiple ng-model="item.queues" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_QUEUE\' | translate}}">{{$item.name}}</ui-select-match>\n <ui-select-choices repeat="queue.id as queue in queues | filter: $select.search">\n <div ng-bind-html="queue.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n</div>\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/chat/realtime/view/application/application.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initApplications()">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns class="ui-grid" ui-grid-auto-resize>\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/chat/realtime/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-bubble"></i>\n <a href="#">{{ \'APPLICATION_CHAT\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-energy"></i>\n <a href="#">{{ \'APPLICATION_REALTIME\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <div>\n <nav class="navbar navbar-default" role="navigation">\n <div class="collapse navbar-collapse">\n <ul class="nav navbar-nav">\n <li data-ng-class="{\'active\': $state.is(\'main.channels.chat.realtime.view.agents\')}">\n <a href="/channels/chat/realtime/view/agents">\n {{\'APPLICATION_AGENTS\' | translate}}\n </a>\n </li>\n <li data-ng-class="{\'active\': $state.is(\'main.channels.chat.realtime.view.applications\')}">\n <a href="/channels/chat/realtime/view/applications">\n {{\'APPLICATION_APPLICATIONS\' | translate}}\n </a>\n </li>\n </ul>\n </div>\n </nav>\n </div>\n\n <div ui-view></div>\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/chat/room/external/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n <div class="portlet light" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption">\n <div class="btn-group btn-group-solid">\n <button type="button" class="btn btn-sm default" data-ng-model="query.status" uib-btn-radio="\'OPEN\'" uib-uncheckable>OPEN</button>\n </div>\n <div class="btn-group btn-group-solid">\n <button type="button" class="btn btn-sm default" data-ng-model="query.status" uib-btn-radio="\'CLOSED\'" uib-uncheckable>CLOSED</button>\n </div>\n </div>\n <div class="actions">\n <a href="#" class="btn btn-icon-only blue" data-ng-click="tagItems();" data-ng-show="id.length">\n <i class="fa fa-tags"></i>\n </a>\n <a href="#" class="btn btn-icon-only default" data-ng-click="getPage();">\n <i class="fa fa-refresh"></i>\n </a>\n </div>\n</div>\n<div class="portlet-title" data-ng-show="tags.length">\n <!-- START TAGS -->\n <div class="form-group">\n <div class="row">\n <div class="col-md-1">\n <a href="#" class="btn btn-icon-only">\n <i class="fa fa-tags" style="color: gray;"></i>\n </a>\n </div>\n <div class="col-md-11">\n <ui-select multiple data-ng-model="query.tags" theme="bootstrap" on-select="onChanged($item, $model)" on-remove="onChanged($item, $model)">\n <ui-select-match placeholder="Search by tag...">{{$item}}</ui-select-match>\n <ui-select-choices repeat="tag in tags | filter:$select.search">\n {{tag}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n </div>\n <!-- END TAGS -->\n</div>\n<div class="portlet-body">\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="spinner-grid" spinner-start-active="true"></span>\n <!-- END UI-GRID SPINNER -->\n\n <!-- START TABLE -->\n\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-selection ui-grid-pagination class="ui-grid">\n <div class="watermark" data-ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/chat/room/group/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n <div class="portlet light" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption">\n <div class="btn-group btn-group-solid">\n <button type="button" class="btn btn-sm default" data-ng-model="query.status" uib-btn-radio="\'OPEN\'" uib-uncheckable>OPEN</button>\n </div>\n <div class="btn-group btn-group-solid">\n <button type="button" class="btn btn-sm default" data-ng-model="query.status" uib-btn-radio="\'CLOSED\'" uib-uncheckable>CLOSED</button>\n </div>\n </div>\n <div class="actions">\n <a href="#" class="btn btn-icon-only default" data-ng-click="getPage();">\n <i class="fa fa-refresh"></i>\n </a>\n </div>\n</div>\n<div class="portlet-title" data-ng-show="tags.length">\n <!-- START TAGS -->\n <div class="form-group">\n <div class="row">\n <div class="col-md-1">\n <a href="#" class="btn btn-icon-only">\n <i class="fa fa-tags" style="color: gray;"></i>\n </a>\n </div>\n <div class="col-md-11">\n <ui-select multiple data-ng-model="query.tags" theme="bootstrap" on-select="onChanged($item, $model)" on-remove="onChanged($item, $model)">\n <ui-select-match placeholder="Search by tag...">{{$item}}</ui-select-match>\n <ui-select-choices repeat="tag in tags | filter:$select.search">\n {{tag}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n </div>\n <!-- END TAGS -->\n</div>\n<div class="portlet-body">\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="spinner-grid" spinner-start-active="true"></span>\n <!-- END UI-GRID SPINNER -->\n\n <!-- START TABLE -->\n\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination class="ui-grid">\n <div class="watermark" data-ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/chat/room/internal/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12" data-ng-init="initView()">\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="spinner-grid" spinner-start-active="true"></span>\n <!-- END UI-GRID SPINNER -->\n\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination class="ui-grid">\n <div class="watermark" data-ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/chat/room/room.add.html",'<div class="modal-header">\n <button ng-if="modal.dismissable" type="button" data-ng-click="$dismiss()" class="close">×</button>\n <h4 class="modal-title">{{\'APPLICATION_NEW_GROUP\' | translate}}</h4>\n</div>\n\n<div class="modal-body">\n <div class="portlet box blue">\n <div class="portlet-title">\n <div class="caption">\n <i class="icon-people"></i>{{\'APPLICATION_AGENTS\' | translate}}\n </div>\n </div>\n <div class="portlet-body">\n <ul>\n <li data-ng-repeat="item in items">\n {{item.fullname}}\n </li>\n <li data-ng-repeat="item in selected.items">\n {{item.fullname}}\n </li>\n </ul>\n </div>\n </div>\n\n <ui-select multiple name="items" ng-model="selected.items" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_SELECTED_AGENTS\' | translate}}">{{$item.fullname}}</ui-select-match>\n <ui-select-choices repeat="{id: agent.id, fullname: agent.fullname} as agent in agents.rows | filter: $select.search">\n {{agent.fullname}}\n </ui-select-choices>\n </ui-select>\n</div>\n\n<div class="modal-footer">\n <button class="btn btn-success" type="button" data-ng-click="ok()" data-ng-show="selected.items.length">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" data-ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/chat/room/room.close.html",'<div class="modal-header">\n <button ng-if="modal.dismissable" type="button" ng-click="$dismiss()" class="close">×</button>\n <h4 ng-if="modal.title" ng-bind="modal.title | translate" class="modal-title"></h4>\n</div>\n<div class="modal-body">\n <p ng-if="modal.text && !closed" ng-bind="modal.text | translate"></p>\n <form name="form" novalidate data-ng-init="initDisposition()">\n <div class="form-group">\n <ui-select data-ng-model="item.disposition" name="list" theme="bootstrap" data-ng-disabled="!dispositions.length" required>\n <ui-select-match placeholder="{{\'APPLICATION_DISPOSITION\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="disposition.name as disposition in dispositions | filter: $select.search">\n <div ng-bind-html="disposition.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <div class="note note-warning" data-ng-hide="dispositions.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_DISPOSITIONS_AVAILABLE\' | translate }}\n </p>\n </div>\n</form>\n <!-- <div ng-if="modal.html" ng-bind-html="modal.html"></div> -->\n</div>\n<div class="modal-footer">\n <button class="btn btn-danger" type="button" ng-click="ok()">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n <!-- <button ng-repeat="button in modal.buttons" ng-class="button.classes" ng-click="button.click($event)" ng-bind="button.text" class="btn"></button> -->\n</div>\n'),a.put("app/channels/chat/room/room.directive.html",'<div class="portlet light">\n <div class="portlet-title">\n <div class="caption">\n <span data-ng-if="chatRoom" class="label label-sm label-default">{{chatRoom.status}}</span>\n <span data-ng-if="chatRoom.ChatWebsite"> | </span>\n <span data-ng-if="chatRoom.ChatWebsite" class="caption-subject font-green-sharp bold uppercase">{{chatRoom.ChatWebsite.name | truncate: 25: \'...\': true}}</span>\n </div>\n <div class="actions">\n <button class="btn btn-icon-only btn-primary" data-ng-click="addAgent(chatRoom.id)" data-ng-disabled="chatRoom.status === \'CLOSED\'">\n <i class="fa fa-user-plus"></i>\n </button>\n <button class="btn btn-icon-only" data-ng-class="{\'btn-success\':chatRoom.status !== \'CLOSED\',\'grey-cascade\':chatRoom.status === \'CLOSED\'}" data-ng-click="closeRoom(chatRoom.id)" data-ng-if="chatRoom.ChatVisitors.length" data-ng-disabled="chatRoom.status === \'CLOSED\' && chatRoom.disposition">\n <i data-ng-class="{\'fa fa-upload\':chatRoom.status !== \'CLOSED\',\'icon-target\':chatRoom.status === \'CLOSED\'}"></i>\n </button>\n <a href="api/chat/rooms/{{chatRoom.id}}/export" target="_blank" class="btn btn-primary btn-icon-only" data-ng-if="chatRoom" title="{{\'APPLICATION_EXPORT\' | translate}} CSV">\n <i class="fa fa-download"></i>\n </a>\n <button class="btn default btn-icon-only" data-ng-if="chatRoom && chatRoom.status !== \'CLOSED\'" data-ng-click="togglePanelLeft()" title="{{\'APPLICATION_RESIZE\' | translate}}">\n <i ng-class="panelRight == \'col-md-12\' ? \'icon-size-actual\' : \'icon-size-fullscreen\'"></i>\n </button>\n </div>\n </div>\n <div class="portlet-body">\n<div class="row">\n <div data-ng-class="panelLeft" data-ng-show="panelLeft">\n <div class="portlet">\n <div class="portlet-body">\n <div class="portlet-title line">\n <div class="form">\n <!-- START TAGS -->\n <div class="form-group">\n <div class="row">\n <div class="col-md-1">\n <a href="#" class="btn btn-icon-only">\n <i class="fa fa-tags" style="color: gray;"></i>\n </a>\n </div>\n <div class="col-md-11">\n <ui-select multiple data-ng-model="form.tags" theme="bootstrap" on-select="onChanged(chatRoom.id)" on-remove="onChanged(chatRoom.id)">\n <ui-select-match placeholder="Tags...">{{$item}}</ui-select-match>\n <ui-select-choices repeat="tag in tags | filter:$select.search" class="">\n {{tag}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n </div>\n <!-- END TAGS -->\n </div>\n </div>\n <v-accordion class="vAccordion--default">\n <v-pane data-ng-if="chatRoom.ChatVisitors.length" data-ng-repeat="chatVisitor in chatRoom.ChatVisitors" expanded="true">\n <v-pane-header>\n <ng-letter-avatar\n height="40"\n width="40"\n data="{{chatRoom.ChatVisitor.fullname}}"\n fontsize="25"\n avatarcustombgcolor="#B0B0B0"\n charCount="2"\n avatarcustomborder="border:2px solid #EA4C61"\n shape="round"></ng-letter-avatar>\n </v-pane-header>\n <v-pane-content>\n {{\'APPLICATION_ROOM_ID\' | translate}}: <p>{{chatRoom.id}}</p>\n {{\'APPLICATION_NAME\' | translate}}: <p>{{chatRoom.ChatVisitor.fullname}}</p>\n {{\'APPLICATION_EMAIL\' | translate}}: <p><a data-ng-click="openContact(chatRoom.ChatVisitor.email)" href="">{{chatRoom.ChatVisitor.email}}</a></p>\n <span data-ng-if="chatRoom.ChatVisitor.labelData1">{{chatRoom.ChatVisitor.labelData1}}: <p>{{chatRoom.ChatVisitor.data1}}</p></span>\n <span data-ng-if="chatRoom.ChatVisitor.labelData2">{{chatRoom.ChatVisitor.labelData2}}: <p>{{chatRoom.ChatVisitor.data2}}</p></span>\n <span data-ng-if="chatRoom.ChatVisitor.labelData3">{{chatRoom.ChatVisitor.labelData3}}: <p>{{chatRoom.ChatVisitor.data3}}</p></span>\n {{\'APPLICATION_REMOTE_ADDRESS\' | translate}}: <p>{{chatRoom.ChatVisitor.remote_address}}</p>\n {{\'APPLICATION_BROWSER\' | translate}}: <p>{{chatRoom.ChatVisitor.browser}}</p>\n {{\'APPLICATION_REFERER\' | translate}}:<p>{{chatRoom.ChatVisitor.referer}} - {{enquiry.ChatWebsite.name}}</p>\n {{\'APPLICATION_OS\' | translate}}: <p>{{chatRoom.ChatVisitor.os}}</p>\n </v-pane-content>\n </v-pane>\n\n <v-pane data-ng-repeat="user in chatRoom.Users | filter:{ id: \'!\' + user.id}">\n <v-pane-header>\n <ng-letter-avatar\n height="40"\n width="40"\n data="{{user.fullname}}"\n fontsize="25"\n avatarcustombgcolor="#B0B0B0"\n avatarcustomborder="border:2px solid #3399CC"\n charCount="2"\n shape="round"></ng-letter-avatar>\n </v-pane-header>\n <v-pane-content>\n {{\'APPLICATION_NAME\' | translate}}: <p>{{user.fullname}}</p>\n {{\'APPLICATION_ROLE\' | translate}}: <p>{{user.role}}</p>\n {{\'APPLICATION_INTERNAL\' | translate}}: <p>{{user.internal}}</p>\n {{\'APPLICATION_EMAIL\' | translate}}: <p><a data-ng-href="mailto:{{user.email}}">{{user.email}}</a></p>\n </v-pane-content>\n </v-pane>\n </v-accordion>\n </div>\n </div>\n </div>\n <div data-ng-class="panelRight">\n <div class="note note-info" data-ng-if="chatRoom && chatRoom.status == \'CLOSED\'">\n <h4 class="block"><i class="icon-info"></i> {{\'MESSAGE_CHAT_ROOM_CLOSED\' | translate}}!</h4>\n <p>\n <strong>{{\'MESSAGE_CHAT_ROOM_CLOSED_DETAILS\' | translate}}.</strong>\n </p>\n <hr>\n <p>\n <i class="icon-target"></i> {{\'APPLICATION_DISPOSITION\' | translate}}: <strong>{{chatRoom.disposition}}</strong>\n </p>\n <p>\n <i class="icon-star"></i> {{\'APPLICATION_RATING\' | translate}}: <strong>{{chatRoom.rating | ucfirst}}</strong>\n </p>\n <p>\n <i class="icon-note"></i> {{\'APPLICATION_RATING_MESSAGE\' | translate}}: <strong>{{chatRoom.ratingMessage}}</strong>\n </p>\n <p>\n <i class="icon-calendar"></i> {{\'APPLICATION_UPDATED_AT\' | translate}}: <strong>{{chatRoom.updatedAt | date:\'medium\'}}</strong> (<span am-time-ago="chatRoom.updatedAt"></span>)\n </p>\n </div>\n <div class="portlet light bordered">\n <div class="portlet-body">\n <div id="chat-box" schroll-bottom="chatRoom.ChatMessages">\n <ul class="chats">\n <li data-ng-repeat="message in chatRoom.ChatMessages" data-ng-class="message.UserId == user.id ? \'out\' : \'in\'">\n <div class="avatar" data-ng-class="message.ChatVisitor ? \'pretty-avatar-v\' : \'pretty-avatar\'">\n <ng-letter-avatar\n data-ng-if="!message.ChatVisitor"\n height="40"\n width="40"\n fontsize="25"\n data="{{message.User.fullname}}"\n avatarcustombgcolor="#B0B0B0"\n avatarcustomborder="border:2px solid #3399CC"\n charCount="2"\n shape="round"></ng-letter-avatar>\n <ng-letter-avatar\n data-ng-if="message.ChatVisitor"\n height="40"\n width="40"\n fontsize="25"\n data="{{message.ChatVisitor.fullname}}"\n avatarcustombgcolor="#B0B0B0"\n avatarcustomborder="border:2px solid #EA4C61"\n charCount="2"\n shape="round"></ng-letter-avatar>\n </div>\n <div class="message">\n <span class="arrow"></span>\n <a data-ng-click="message.ChatVisitor && openContact(chatRoom.ChatVisitor.email)" class="name">{{message.User.fullname || message.ChatVisitor.fullname}} </a>\n <span am-time-ago="message.createdAt"></span>\n <ng-emoticons emoticons-data="message.body"></ng-emoticons>\n </div>\n </li>\n <li data-ng-if="chatRoom.status === \'CLOSED\'">\n <div class="media-body" style="text-align: center;">\n <h5 class="media-heading"><i>{{\'MESSAGE_CHAT_CLOSED\' | translate | lowercase}}</i></h5>\n </div>\n </li>\n </ul>\n </div>\n <div class="chat-form" data-ng-if="chatRoom && isMyRoom(chatRoom.Users)">\n <div class="input-cont">\n <input class="form-control" type="text" placeholder="Type a message here..." ng-enter="sendMessage()" data-ng-model="message.body" data-ng-disabled="chatRoom.status === \'CLOSED\'"/>\n </div>\n <div class="btn-cont">\n <span class="arrow"></span>\n <a href="#" class="btn blue icn-only" data-ng-disabled="chatRoom.status === \'CLOSED\'" data-ng-click="sendMessage()">\n <i class="fa fa-check icon-white"></i>\n </a>\n </div>\n </div>\n <div class="form-group chat-canned-answer-div" data-ng-if="chatRoom.status !== \'CLOSED\'" data-ng-class="{\'has-error\': forms.compose.subject.$invalid && forms.compose.$submitted}">\n <div class="row">\n <div class="col-md-1">\n <a href="#" class="btn btn-icon-only">\n <i class="fa fa-magic" style="color: gray;"></i>\n </a>\n </div>\n <div class="col-md-11">\n <input type="text"\n data-ng-model="modelOptions.selectedAnswer"\n uib-typeahead="key for key in getAnswers($viewValue)"\n placeholder="Canned answers.."\n typeahead-loading="loadingLocations"\n typeahead-no-results="noResults"\n typeahead-on-select="onSelect($item)"\n class="form-control">\n <i ng-show="loadingLocations" class="glyphicon glyphicon-refresh"></i>\n <div ng-show="noResults">\n <i class="glyphicon glyphicon-remove"></i> No Results Found\n </div>\n <span data-ng-show="forms.compose.subject.$invalid && forms.compose.$submitted" class="help-block help-block-error">\n'+" <strong>{{'APPLICATION_WARNING' | translate}}!</strong> {{'MESSAGE_REQUIRED_FIELD' | translate}}.\n </span>\n </div>\n </div>\n\n </div>\n </div>\n </div>\n</div>\n</div>\n</div>\n"), +a.put("app/channels/chat/room/room.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-bubble"></i>\n <a href="#">{{ \'APPLICATION_CHAT\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-users"></i>\n <a href="#">{{ \'APPLICATION_INTERACTIONS\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <div class="row inbox">\n <div class="col-md-2">\n <ul class="inbox-nav margin-bottom-10">\n <li data-ng-class="{active: $state.includes(\'main.channels.chat.room.internal\')}">\n <a href="/channels/chat/room/internal/list" class="btn">\n {{\'APPLICATION_INTERNAL\' | translate}}\n </a>\n <b></b>\n </li>\n <li data-ng-class="{active: $state.includes(\'main.channels.chat.room.external\')}">\n <a href="/channels/chat/room/external/list" class="btn">\n {{\'APPLICATION_EXTERNAL\' | translate}}\n </a>\n <b></b>\n </li>\n <li data-ng-class="{active: $state.includes(\'main.channels.chat.room.group\')}">\n <a href="/channels/chat/room/group/list" class="btn">\n {{\'APPLICATION_GROUPS\' | translate}}\n </a>\n <b></b>\n </li>\n </ul>\n </div>\n\n <div class="col-md-10">\n <div class="room-content">\n <div ui-view></div>\n </div>\n </div>\n </div>\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/chat/room/template.html",'<div ng-bind-html="neText" ne-hljs></div>\n<div class="ne-video" ng-if="video.host" class="fade">\n <div class="ne-video-preview" ng-hide="nePlayVideo || !options.video.details">\n <div class="ne-video-thumb" ng-click="nePlayVideo=!nePlayVideo">\n <img ng-src="{{video.thumbnail}}" alt=""/>\n <i class="fa fa-play-circle-o"></i>\n </div>\n <div class="ne-video-detail">\n <div class="ne-video-title">\n <a ng-href="{{video.url}}">{{video.title}}</a>\n </div>\n <div class="ne-video-desc">\n {{video.description}}\n </div>\n <div class="ne-video-stats">\n <span><i class="fa fa-eye"></i> {{video.views}}</span>\n <span><i class="fa fa-heart"></i> {{video.likes}}</span>\n </div>\n </div>\n </div>\n <div class="ne-video-player" ng-if="nePlayVideo || !(options.video.details)">\n <iframe ng-src="{{video.embedSrc}}" frameBorder="0" width="{{video.width}}" height="{{video.height}}" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>\n </div>\n</div>\n<div class="ne-video" ng-if="video.basic">\n <div class="ne-video-player">\n <div class="player">\n <video ng-src="{{video.basic}}" controls></video>\n </div>\n </div>\n</div>\n<div ng-init="neImageLong=false" ng-class="{false:\'ne-image\', true:\'ne-image ne-image-long\'}[neImageLong]"\nng-if="image.url">\n<div class="ne-image-wrapper">\n <img ng-src="{{image.url}}" ng-click="neImageLong=!neImageLong" alt=""/>\n</div>\n</div>\n<!-- <div class="ne-pdf" ng-if="pdf.url">\n <div class="ne-pdf-preview" ng-hide="neShowPdf">\n <div class="ne-pdf-icon">\n <i class="fa fa-file-pdf-o"></i>\n </div>\n <div class="ne-pdf-detail" >\n <div class="ne-pdf-title">\n <a href="">{{pdf.url}}</a>\n </div>\n <div class="ne-pdf-view">\n\n <button><i class="fa fa-download"></i> <a ng-href="{{pdf.url}}" target="_blank">Download</a></button>\n <button ng-click="neShowPdf=!neShowPdf"><i class="fa fa-eye"></i> View PDF</button>\n\n </div>\n </div>\n </div>\n <div class="ne-pdf-viewer" ng-if="neShowPdf" ng-show="neShowPdf">\n <iframe ng-src="{{pdf.url}}" frameBorder="0"></iframe>\n </div>\n\n</div>\n<div class="ne-audio" ng-if="audio.url">\n <audio ng-src="{{audio.url}}" controls></audio>\n</div> -->\n'),a.put("app/channels/chat/room/view.tags.modal.html",'<div class="modal-header" data-ng-init="initModal()">\n <h3 class="modal-title">{{ \'APPLICATION_TAGS\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <!-- START TRANSPORT -->\n <div class="form-group">\n <form name="form" novalidate>\n <!-- START TAGS -->\n <div class="form-group">\n <ui-select multiple data-ng-model="item.tags" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_TAGS\' | translate}}">{{$item}}</ui-select-match>\n <ui-select-choices repeat="tag in tags | filter: $select.search">\n {{tag}}\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END TAGS -->\n </form>\n </div>\n <!-- END TRANSPORT -->\n</div>\n<div class="modal-footer">\n <button type="button" class="btn" data-ng-class="button.class" data-ng-click="button.click()"data-ng-repeat="button in modal.buttons">{{button.text | translate}}</button>\n <!-- <button class="btn btn-success" type="button" data-ng-click="ok()">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" data-ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button> -->\n</div>\n'),a.put("app/channels/chat/visitor/list/list.html",'<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-bubble"></i>\n <a href="#">{{ \'APPLICATION_CHAT\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-question"></i>\n <a href="/channels/chat/visitors/list">{{ \'APPLICATION_VISITORS\' | translate }}</a>\n </li>\n </ul>\n </div>\n </div>\n</div>\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-question font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_VISITORS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/chat/visitor/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-bubble"></i>\n <a href="#">{{ \'APPLICATION_CHAT\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-question"></i>\n <a href="/channels/chat/visitors/list">{{ \'APPLICATION_VISITORS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li data-ng-show="chatVisitor">\n <a href="#">{{chatVisitor.fullname}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/visitor.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{chatVisitor.fullname}}\n </div>\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.channels.chat.visitors.view.profile\')}">\n <a data-ng-href="/channels/chat/visitors/view/{{chatVisitor.id}}/profile">\n <i class="icon-tag"></i>\n {{ \'APPLICATION_PROFILE\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/chat/visitor/view/view.profile.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_PROFILE\' | translate}}</span>\n </div>\n </div>\n <div class="portlet-body" data-ng-init="initView()">\n <div>\n <h4 class="profile-desc-title">{{chatVisitor.email}}</h4>\n <div class="margin-top-20 profile-desc-link">\n <i class="icon-magnifier"></i>\n <a href="#" class="inactive-link">{{chatVisitor.origin}}</a>\n </div>\n <div class="margin-top-20 profile-desc-link">\n <i class="icon-globe"></i>\n <a href="#" class="inactive-link">{{chatVisitor.remote_address}}</a>\n </div>\n <div class="margin-top-20 profile-desc-link">\n <i class="icon-user"></i>\n <a href="#" class="inactive-link">{{chatVisitor.user_agent | truncate: 50: \'...\'}}</a>\n </div>\n <div class="margin-top-20 profile-desc-link">\n <i class="icon-flag"></i>\n <a href="#" class="inactive-link">{{chatVisitor.visitor_language}}</a>\n </div>\n <div class="margin-top-20 profile-desc-link">\n <i class="icon-home"></i>\n <a href="#" class="inactive-link">{{chatVisitor.referer}}</a>\n </div>\n <div class="margin-top-20 profile-desc-link">\n <i class="icon-cursor"></i>\n <a href="#" class="inactive-link">{{chatVisitor.browser}}</a>\n </div>\n <div class="margin-top-20 profile-desc-link">\n <i class="icon-screen-desktop"></i>\n <a href="#" class="inactive-link">{{chatVisitor.os}}</a>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/chat/website/list/list.html",'<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-bubble"></i>\n <a href="#">{{ \'APPLICATION_CHAT\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-globe"></i>\n <a href="#">{{ \'APPLICATION_WEB_SITES\' | translate }}</a>\n </li>\n </ul>\n </div>\n </div>\n</div>\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-notebook font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_WEB_SITES\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <a class="btn green-jungle" href="/channels/chat/websites/wizard">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_WEB_SITE\' | translate }}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/chat/website/view/action/list/list.html",'<div class="row" data-ng-init="initActons()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_ACTIONS\' | translate}}</span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <a class="btn green-jungle" href="/channels/chat/websites/view/{{chatWebsite.id}}/actions/wizard" data-toggle="dropdown">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_ACTION\' | translate }}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/chat/website/view/action/view/view.html",'\n<div class="row" data-ng-init="initAction()">\n <div class="col-md-12">\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-directions font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_ACTION\' | translate }}</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <form name="forms.settings" ng-submit="updateItem()" novalidate>\n <!-- START APP -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.app.$touched || forms.settings.$submitted) && forms.settings.app.$invalid}">\n <label class="control-label">{{ \'APPLICATION_APPLICATION\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.app" name="app" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_APPLICATION\' | translate }}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="app.value as app in apps | filter: $select.search">\n <div ng-bind-html="app.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.app.$touched || forms.settings.$submitted) && forms.settings.app.$invalid && forms.settings.app.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END APP -->\n\n <div class="app-settings" ng-slide-down="application.app === \'queue\'" lazy-render duration="1" data-ng-init="getQueues()">\n <!-- START QUEUE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.queue.$touched || forms.settings.$submitted) && forms.settings.queue.$invalid}">\n <label class="control-label">{{\'APPLICATION_QUEUE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.ChatQueueId" name="queue" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="queue.id as queue in queues | filter: $select.search">\n <div ng-bind-html="queue.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="queues.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_QUEUES_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/channels/chat/queues/list">{{\'APPLICATION_QUEUES\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.settings.queue.$touched || forms.settings.$submitted) && forms.settings.queue.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END QUEUE -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="number" name="timeout" placeholder="{{\'APPLICATION_TIMEOUT\' | translate}}" class="form-control" data-ng-model="application.timeout" min="1" required/>\n <span data-ng-show="(forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid && forms.settings.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.app === \'agent\'" lazy-render duration="1" data-ng-init="getAgents()">\n <!-- START AGENT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.agent.$touched || forms.settings.$submitted) && forms.settings.agent.$invalid}">\n <label class="control-label">{{\'APPLICATION_AGENT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.UserId" name="agent" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.fullname}}</ui-select-match>\n <ui-select-choices repeat="agent.id as agent in agents | filter: $select.search">\n <div ng-bind-html="agent.fullname | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="agents.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_AGENTS_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/staff/agents/list">{{\'APPLICATION_QUEUES\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.settings.agent.$touched || forms.settings.$submitted) && forms.settings.agent.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END AGENT -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="number" name="timeout" placeholder="{{\'APPLICATION_TIMEOUT\' | translate}}" class="form-control" data-ng-model="application.timeout" min="1" required/>\n <span data-ng-show="(forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid && forms.settings.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.app === \'sendMail\'" lazy-render duration="1" data-ng-init="getMailAccounts();getTemplates()">\n <!-- START SENDMAIL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TO\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="email" name="to" placeholder="{{\'APPLICATION_TO\' | translate}}" class="form-control" data-ng-model="application.data2" min="1" required/>\n <span data-ng-show="(forms.settings.from.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid && forms.settings.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.mail.$touched || forms.settings.$submitted) && forms.settings.account.$invalid}">\n <label class="control-label">{{\'APPLICATION_ACCOUNT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data8" name="account" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="account.id as account in mailAccounts | filter: $select.search">\n <div ng-bind-html="account.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.account.$touched || forms.settings.$submitted) && forms.settings.account.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.template.$touched || forms.settings.$submitted) && forms.settings.template.$invalid}">\n <label class="control-label">{{\'APPLICATION_TEMPLATE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data9" name="template" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="template.id as template in templates | filter: $select.search">\n <div ng-bind-html="template.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.template.$touched || forms.settings.$submitted) && forms.settings.template.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END SENDMAIL -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.app === \'sendSms\'" lazy-render duration="1" data-ng-init="getSmsAccounts()">\n <!-- START SENDSms -->\n <div class="app-settings" ng-slide-down="application.app === \'sendSms\'" lazy-render duration="1">\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.to.$touched || forms.settings.$submitted) && forms.settings.to.$invalid}">\n <label class="control-label">{{\'APPLICATION_TO\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" ng-pattern="/^[\\+]?[0-9]+$/" name="to" placeholder="{{\'APPLICATION_TO\' | translate}}" class="form-control" data-ng-model="application.data2" required/>\n <span data-ng-show="(forms.settings.to.$touched || forms.settings.$submitted) && forms.settings.to.$invalid && forms.settings.to.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.account.$touched || forms.settings.$submitted) && forms.settings.account.$invalid}">\n <label class="control-label">{{\'APPLICATION_ACCOUNT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data8" name="account" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="account.id as account in smsAccounts | filter: $select.search">\n <div ng-bind-html="account.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.account.$touched || forms.settings.$submitted) && forms.settings.account.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.text.$touched || forms.text.$submitted) && forms.settings.text.$invalid}">\n <label class="control-label">{{\'APPLICATION_TEXT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <textarea id="text" class="form-control maxlength-handler" maxlength="160" name="text" data-ng-model="application.data6" required></textarea>\n <span data-ng-show="(forms.settings.text.$touched || forms.settings.$submitted) && forms.settings.text.$invalid && forms.settings.text.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n\n <!-- END SENDSms -->\n </div>\n\n <!-- START INTERVAL_TYPE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.intType.$touched || forms.settings.$submitted) && forms.settings.intType.$invalid}">\n <label class="control-label">{{ \'APPLICATION_INTERVAL_TYPE\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.intType" theme="bootstrap" name="intType" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="intType.value as intType in $application.intTypes | filter: $select.search">\n {{ intType.name | translate }}\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.intType.$touched || forms.settings.$submitted) && forms.settings.intType.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERVAL_TYPE -->\n\n <div class="app-settings" ng-slide-down="application.intType === \'custom\'" lazy-render duration="1">\n <!-- START TIME -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_TIME\' | translate }}</label>\n <div class="input-group input-large">\n <fieldset class="pull-left" ng-disabled="application.alwaysTime">\n <uib-timepicker name="t_from" data-ng-model="application.t_from" show-meridian="false" show-spinners="false" mousewheel="false"></uib-timepicker>\n </fieldset>\n <div class="input-group-addon col-md-1 interval-to pull-left">to</div>\n <fieldset ng-disabled="application.alwaysTime"><uib-timepicker name="t_to" data-ng-model="application.t_to" show-meridian="false" show-spinners="false" mousewheel="false"></uib-timepicker></fieldset>\n <!-- <label class="control-label pointer-cursor"><input type="checkbox" data-ng-model="application.alwaysTime">{{\'APPLICATION_ALWAYS\' | translate}}</label> -->\n </div>\n </div>\n <!-- END TIME -->\n\n <!-- START ALWAYS -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_ALWAYS\' | translate }}</label>\n <div class="input-group input-large">\n <label class="control-label pointer-cursor">\n <input\n bs-switch\n data-ng-model="application.alwaysTime"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n <!-- <input type="checkbox" data-ng-model="application.alwaysTime"> -->\n </label>\n </div>\n </div>\n <!-- END ALWAYS -->\n\n <!-- START WEEKDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_WEEKDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="application.wd_from" theme="bootstrap" name="wd_from">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{ weekDay.name | translate}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="application.wd_to" theme="bootstrap" name="wd_to">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{ weekDay.name | translate }}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END WEEKDAY -->\n\n <!-- START MONTHDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTHDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="application.md_from" theme="bootstrap" name="md_from">\n <ui-select-match allow-clear>{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search" ui-disable-choice="application.md_to && application.md_to!==\'always\' && monthDay>application.md_to && monthDay!==\'always\'">\n {{monthDay}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="application.md_to" theme="bootstrap" name="md_to">\n <ui-select-match allow-clear>{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search" ui-disable-choice="application.md_from && application.md_from!==\'always\' && monthDay<application.md_from && monthDay!==\'always\'">\n {{monthDay}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTHDAY -->\n\n <!-- START MONTH -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTH\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="application.m_from" theme="bootstrap" name="m_from">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{ month.name | translate }}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="application.m_to" theme="bootstrap" name="m_to">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{ month.name | translate }}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTH -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.intType === \'list\'" lazy-render duration="1" data-ng-init="getIntervals()">\n\n <!-- START INTERVALS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.IntervalId.$touched || forms.settings.$submitted) && forms.settings.IntervalId.$invalid}">\n <label class="control-label">{{\'APPLICATION_INTERVALS\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.IntervalId" theme="bootstrap" name="IntervalId" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{ $select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="interval.id as interval in intervals | filter: $select.search">\n {{ interval.name}}\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="intervals.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_INTERVAL_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/tools/intervals/list">{{\'APPLICATION_INTERVALS\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.settings.IntervalId.$touched || forms.settings.$submitted) && forms.settings.IntervalId.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERVALS -->\n\n </div>\n <button class="btn green-haze" type="submit">{{\'APPLICATION_UPDATE\' | translate}}</button>\n </form>\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'), +a.put("app/channels/chat/website/view/action/wizard/wizard.html",'\n<div class="row" data-ng-init="initWizard()">\n <div class="col-md-12">\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-directions font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_ACTION\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="createItem()">\n <wz-step title="{{\'APPLICATION_APPLICATION\' | translate}}" canexit="formValidation(forms.action.$valid)">\n <form name="forms.action" novalidate>\n <!-- START APP -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.action.$submitted && forms.action.app.$invalid}">\n <label class="control-label">{{ \'APPLICATION_APPLICATION\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.app" name="app" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_APPLICATION\' | translate }}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="app.value as app in apps | filter: $select.search">\n <div ng-bind-html="app.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.action.$submitted && forms.action.app.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END APP -->\n\n <div class="app-settings" ng-slide-down="application.app === \'agent\'" lazy-render duration="1" data-ng-init="getAgents()">\n <!-- START AGENT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.agent.$touched || forms.action.$submitted) && forms.action.agent.$invalid}">\n <label class="control-label">{{\'APPLICATION_AGENT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.UserId" name="agent" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.fullname}}</ui-select-match>\n <ui-select-choices repeat="agent.id as agent in agents | filter: $select.search">\n <div ng-bind-html="agent.fullname | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="agents.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_AGENTS_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/staff/agents/list">{{\'APPLICATION_QUEUES\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.action.agent.$touched || forms.action.$submitted) && forms.action.agent.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END AGENT -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.timeout.$touched || forms.action.$submitted) && forms.action.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="number" name="timeout" placeholder="{{\'APPLICATION_TIMEOUT\' | translate}}" class="form-control" data-ng-model="application.timeout" min="1" required/>\n <span data-ng-show="(forms.action.timeout.$touched || forms.action.$submitted) && forms.action.timeout.$invalid && forms.action.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n\n </div>\n\n <div class="app-settings" ng-slide-down="application.app === \'queue\'" lazy-render duration="1" data-ng-init="getQueues()">\n <!-- START QUEUE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.queue.$touched || forms.action.$submitted) && forms.action.queue.$invalid}">\n <label class="control-label">{{\'APPLICATION_QUEUE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.ChatQueueId" name="queue" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="queue.id as queue in queues | filter: $select.search">\n <div ng-bind-html="queue.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="queues.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_QUEUES_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/channels/chat/queues/list">{{\'APPLICATION_QUEUES\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.action.queue.$touched || forms.action.$submitted) && forms.action.queue.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END QUEUE -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.timeout.$touched || forms.action.$submitted) && forms.action.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="number" name="timeout" placeholder="{{\'APPLICATION_TIMEOUT\' | translate}}" class="form-control" data-ng-model="application.timeout" min="1" required/>\n <span data-ng-show="(forms.action.timeout.$touched || forms.action.$submitted) && forms.action.timeout.$invalid && forms.action.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.app === \'sendMail\'" lazy-render duration="1" data-ng-init="getMailAccounts();getTemplates()">\n <!-- START SENDMAIL -->\n <div class="app-settings" ng-slide-down="application.app === \'sendMail\'" lazy-render duration="1">\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.timeout.$touched || forms.action.$submitted) && forms.action.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TO\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="email" name="to" placeholder="{{\'APPLICATION_TO\' | translate}}" class="form-control" data-ng-model="application.data2" min="1" required/>\n <span data-ng-show="(forms.action.from.$touched || forms.action.$submitted) && forms.action.timeout.$invalid && forms.action.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.mail.$touched || forms.action.$submitted) && forms.action.account.$invalid}">\n <label class="control-label">{{\'APPLICATION_ACCOUNT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data8" name="account" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="account.id as account in mailAccounts | filter: $select.search">\n <div ng-bind-html="account.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.action.account.$touched || forms.action.$submitted) && forms.action.account.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.template.$touched || forms.action.$submitted) && forms.action.template.$invalid}">\n <label class="control-label">{{\'APPLICATION_TEMPLATE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data9" name="template" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="template.id as template in templates | filter: $select.search">\n <div ng-bind-html="template.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.action.template.$touched || forms.action.$submitted) && forms.action.template.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END SENDMAIL -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.app === \'sendSms\'" lazy-render duration="1" data-ng-init="getSmsAccounts()">\n <!-- START SENDSms -->\n <div class="app-settings" ng-slide-down="application.app === \'sendSms\'" lazy-render duration="1">\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.to.$touched || forms.action.$submitted) && forms.action.to.$invalid}">\n <label class="control-label">{{\'APPLICATION_TO\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" ng-pattern="/^[\\+]?[0-9]+$/" name="to" placeholder="{{\'APPLICATION_TO\' | translate}}" class="form-control" data-ng-model="application.data2" required/>\n <span data-ng-show="(forms.action.to.$touched || forms.action.$submitted) && forms.action.to.$invalid && forms.action.to.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.account.$touched || forms.action.$submitted) && forms.action.account.$invalid}">\n <label class="control-label">{{\'APPLICATION_ACCOUNT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data8" name="account" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="account.id as account in smsAccounts | filter: $select.search">\n <div ng-bind-html="account.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.action.account.$touched || forms.action.$submitted) && forms.action.account.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.text.$touched || forms.action.$submitted) && forms.action.text.$invalid}">\n <label class="control-label">{{\'APPLICATION_TEXT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <textarea id="text" class="form-control maxlength-handler" maxlength="160" name="text" data-ng-model="application.data6" required></textarea>\n <span data-ng-show="(forms.action.text.$touched || forms.action.$submitted) && forms.action.text.$invalid && forms.action.text.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n\n <!-- END SENDSms -->\n </div>\n\n <!-- START INTERVAL_TYPE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.intType.$touched || forms.action.$submitted) && forms.action.intType.$invalid}">\n <label class="control-label">{{ \'APPLICATION_INTERVAL_TYPE\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.intType" theme="bootstrap" name="intType" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="intType.value as intType in $application.intTypes | filter: $select.search">\n {{ intType.name | translate }}\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.action.intType.$touched || forms.action.$submitted) && forms.action.intType.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERVAL_TYPE -->\n\n <div class="app-settings" ng-slide-down="application.intType === \'custom\'" lazy-render duration="1">\n <!-- START TIME -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_TIME\' | translate }}</label>\n <div class="input-group input-large">\n <fieldset class="pull-left" ng-disabled="application.alwaysTime">\n <uib-timepicker name="t_from" data-ng-model="application.t_from" show-meridian="false" show-spinners="false" mousewheel="false"></uib-timepicker>\n </fieldset>\n <div class="input-group-addon col-md-1 interval-to pull-left">to</div>\n <fieldset ng-disabled="application.alwaysTime"><uib-timepicker name="t_to" data-ng-model="application.t_to" show-meridian="false" show-spinners="false" mousewheel="false"></uib-timepicker></fieldset>\n <!-- <label class="control-label pointer-cursor"><input type="checkbox" data-ng-model="application.alwaysTime">{{\'APPLICATION_ALWAYS\' | translate}}</label> -->\n </div>\n </div>\n <!-- END TIME -->\n\n <!-- START ALWAYS -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_ALWAYS\' | translate }}</label>\n <div class="input-group input-large">\n <label class="control-label pointer-cursor">\n <input\n bs-switch\n data-ng-model="application.alwaysTime"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n <!-- <input type="checkbox" data-ng-model="application.alwaysTime"> -->\n </label>\n </div>\n </div>\n <!-- END ALWAYS -->\n\n <!-- START WEEKDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_WEEKDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="application.wd_from" theme="bootstrap" name="wd_from">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{ weekDay.name | translate}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="application.wd_to" theme="bootstrap" name="wd_to">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{ weekDay.name | translate }}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END WEEKDAY -->\n\n <!-- START MONTHDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTHDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="application.md_from" theme="bootstrap" name="md_from">\n <ui-select-match allow-clear>{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search" ui-disable-choice="application.md_to && application.md_to!==\'always\' && monthDay>application.md_to && monthDay!==\'always\'">\n {{monthDay}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="application.md_to" theme="bootstrap" name="md_to">\n <ui-select-match allow-clear>{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search" ui-disable-choice="application.md_from && application.md_from!==\'always\' && monthDay<application.md_from && monthDay!==\'always\'">\n {{monthDay}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTHDAY -->\n\n <!-- START MONTH -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTH\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="application.m_from" theme="bootstrap" name="m_from">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{ month.name | translate }}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="application.m_to" theme="bootstrap" name="m_to">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{ month.name | translate }}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTH -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.intType === \'list\'" lazy-render duration="1" data-ng-init="getIntervals()">\n\n <!-- START INTERVALS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.IntervalId.$touched || forms.action.$submitted) && forms.action.IntervalId.$invalid}">\n <label class="control-label">{{\'APPLICATION_INTERVALS\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.IntervalId" theme="bootstrap" name="IntervalId" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{ $select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="interval.id as interval in intervals | filter: $select.search">\n {{ interval.name}}\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="intervals.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_INTERVAL_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/tools/intervals/list">{{\'APPLICATION_INTERVALS\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.action.IntervalId.$touched || forms.action.$submitted) && forms.action.IntervalId.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERVALS -->\n\n </div>\n\n <input class="btn green-haze" type="submit" data-ng-click="next()" value="{{\'APPLICATION_CONTINUE\' | translate}}"/>\n </form>\n </wz-step>\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n <input class="btn green-haze" type="submit" data-ng-click="next()" value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n </wz-step>\n </wizard>\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/chat/website/view/disposition/modal/add.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_DISPOSITIONS\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.form.$touched || form.$submitted) && form.form.$invalid}">\n <div class="">\n <input type="text" name="form" placeholder="{{\'APPLICATION_DISPOSITION\' | translate}}" class="form-control" data-ng-model="name" required/>\n <span data-ng-show="form.form.$touched && form.form.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n <!-- END NAME -->\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" data-ng-click="ok()" data-ng-show="form.$valid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" data-ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/chat/website/view/disposition/view/view.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_DISPOSITIONS\' | translate}}</span>\n </div>\n <div class="actions actions-md">\n <a href="#" class="btn btn-icon-only green" data-ng-click="addDisposition();">\n <i class="fa fa-plus"></i>\n </a>\n </div>\n </div>\n <div class="portlet-body" data-ng-init="initView()">\n <div class="tab-content">\n <div class="row" data-ng-hide="dispositions.length">\n <div class="col-md-12">\n <div class="note note-info">\n <h4 class="block">Info! {{\'MESSAGE_NO_DISPOSITIONS_AVAILABLE\' | translate}}</h4>\n </div>\n </div>\n </div>\n\n <!-- GENERAL TAB -->\n <div class="row" data-ng-repeat="disposition in dispositions">\n <div class="col-md-12 form-group">\n <div class="input-group">\n <div>\n <input class="form-control" type="text" placeholder="{{\'APPLICATION_DISPOSITION\' | translate}}" data-ng-model="disposition.name">\n </div>\n <span class="input-group-btn">\n <button class="btn btn-success" type="button" data-ng-click="updateDisposition(disposition.id, disposition.name);"><i class="fa fa-cloud-upload fa-fw"></i> {{\'APPLICATION_UPDATE\' | translate}}</button>\n <button class="btn btn-danger" type="button" data-ng-click="deleteDisposition(disposition.id);"><i class="fa fa-times fa-fw"></i> {{\'APPLICATION_DELETE\' | translate}}</button>\n </span>\n </div>\n </div>\n </div>\n <!-- END GENERAL TAB -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/chat/website/view/embedding/view/view.html",'<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_EMBEDDING\' | translate}}</span>\n </div>\n <div class="actions">\n <div class="btn-group">\n <a class="btn green-jungle" href="#" data-ng-click="copyToClipboard();">\n <i class="fa fa-clipboard"></i> {{\'APPLICATION_COPY_TO_CLIPBOARD\' | translate}}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <div class="row">\n <div class="col-md-12">\n <h3>{{\'APPLICATION_EMBED_SNIPPET\' | translate}}</h3>\n <p>\n {{\'MESSAGE_EMBED_SNIPPET\' | translate}}\n </p>\n <div class="form-body">\n <div class="form-group">\n <div class="col-md-12">\n <code-mirror lang="html" model="snippetCode"></code-mirror>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/chat/website/view/form/view/view.html",'<div class="row" data-ng-init="getChatWebsiteFields(\'online\');getChatWebsiteFields(\'offline\');">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_ONLINE\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_2" data-toggle="tab">{{\'APPLICATION_OFFLINE\' | translate}}</a>\n </li>\n </ul>\n </div>\n <div class="portlet-body">\n <div class="row">\n <div class="col-md-12">\n <div class="tab-content">\n <div class="tab-pane active" id="tab_1_1">\n <div class="row">\n <div class="col-md-6">\n <div class="portlet">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-book-open font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_FIELDS_SELECTED\' | translate }}</span>\n </div>\n <div class="actions">\n <div class="btn-group">\n <a class="btn green-jungle" href="#" data-ng-click="saveForm(\'online\');">\n <i class="fa fa-check"></i> {{ \'APPLICATION_SAVE\' | translate }}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <div fb-builder="online"></div>\n </div>\n </div>\n </div>\n <div class="col-md-6">\n <div class="portlet">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-book-open font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_FIELDS_AVAILABLE\' | translate }}</span>\n </div>\n </div>\n <div class="portlet-body">\n <div fb-components></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class="tab-pane" id="tab_1_2">\n <div class="row">\n <div class="col-md-6">\n <div class="portlet">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-book-open font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_FIELDS_SELECTED\' | translate }}</span>\n </div>\n <div class="actions">\n <div class="btn-group">\n <a class="btn green-jungle" href="#" data-ng-click="saveForm(\'offline\');">\n <i class="fa fa-check"></i> {{ \'APPLICATION_SAVE\' | translate }}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <div fb-builder="offline"></div>\n </div>\n </div>\n </div>\n <div class="col-md-6">\n <div class="portlet">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-book-open font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_FIELDS_AVAILABLE\' | translate }}</span>\n </div>\n </div>\n <div class="portlet-body">\n <div fb-components></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n</div>\n'),a.put("app/channels/chat/website/view/hooks/view/view.html",'<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_HOOKS\' | translate}}</span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_ACCEPT\' | translate}}</a>\n </li>\n <li >\n <a href="#" data-target="#tab_1_2" data-toggle="tab">{{\'APPLICATION_REJECT\' | translate}}</a>\n </li>\n <li >\n <a href="#" data-target="#tab_1_3" data-toggle="tab">{{\'APPLICATION_CLOSE\' | translate}}</a>\n </li>\n </ul>\n </div>\n <div class="portlet-body">\n <div class="tab-content">\n <!-- ACCEPT TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.accept" data-ng-submit="forms.accept.$valid && updateItem()" novalidate>\n <!-- START ACCEPT URL -->\n <div class="row">\n <div class="form-group col-md-4" data-ng-class="{\'has-error\': (forms.accept.method.$touched || forms.accept.$submitted) && forms.accept.method.$invalid}">\n <label class="control-label">{{\'APPLICATION_METHOD\' | translate}}</label>\n <ui-select data-ng-model="account.acceptMethod" name="method" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_METHOD\' | translate}}">{{$select.selected.name | uppercase}}</ui-select-match>\n <ui-select-choices repeat="type.value as type in types | filter: $select.search">\n <div ng-bind-html="type.name | highlight: $select.search | uppercase" ></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.accept.method.$touched || forms.accept.$submitted) && forms.accept.method.$invalid && forms.accept.method.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div class="form-group col-md-8" data-ng-class="{\'has-error\': (forms.accept.url.$touched || forms.accept.$submitted) && forms.accept.url.$invalid}">\n <label class="control-label">{{\'APPLICATION_URL\' | translate}}</label>\n <input type="url" name="url" placeholder="{{\'APPLICATION_URL\' | translate}}" class="form-control" data-ng-model="account.acceptUrl" ng-required="account.acceptMethod"/>\n <span data-ng-show="(forms.accept.url.$touched || forms.accept.$submitted) && forms.accept.url.$invalid && forms.accept.url.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n <!-- END ACCEPT URL-->\n <!-- START ACTIONS-->\n <!-- START PAUSE -->\n <div class="row" ng-repeat = "action in account.actions">\n <div ng-switch="action.action">\n <div ng-switch-when="pause">\n <div class="form-group col-md-4">\n <label class="control-label">{{\'APPLICATION_PAUSE\' | translate}}</label></br>\n <input\n bs-switch\n data-ng-change="resetActionData(action)"\n data-ng-model="action.enabled"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_ENABLED\' | translate }}"\n switch-off-text="{{ \'APPLICATION_DISABLED\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n </div>\n <div ng-if="action.enabled" class="form-group col-md-8">\n <label class="control-label">{{\'APPLICATION_TYPE\' | translate}}</label>\n <ui-select name="action" data-ng-model="action.type" theme="bootstrap" >\n <ui-select-match placeholder="{{\'APPLICATION_TYPE\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat=" pause.name as pause in pauses | filter: $select.search">\n <div ng-bind-html="pause.name | highlight: $select.search | uppercase" ></div>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n </div>\n </div>\n <!-- END ACTION -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END ACCEPT TAB -->\n <!-- START REJECT TAB -->\n <div class="tab-pane" id="tab_1_2">\n <form name="forms.reject" data-ng-submit="forms.reject.$valid && updateItem()" novalidate>\n <!-- START REJECT URL -->\n <div class="row">\n <div class="form-group col-md-4" data-ng-class="{\'has-error\': (forms.reject.method.$touched || forms.reject.$submitted) && forms.reject.method.$invalid}">\n <label class="control-label">{{\'APPLICATION_METHOD\' | translate}}</label>\n <ui-select data-ng-model="account.rejectMethod" name="method" theme="bootstrap" >\n <ui-select-match placeholder="{{\'APPLICATION_METHOD\' | translate}}">{{$select.selected.name | uppercase}}</ui-select-match>\n <ui-select-choices repeat="type.value as type in types | filter: $select.search">\n <div ng-bind-html="type.name | highlight: $select.search | uppercase" ></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.reject.method.$touched || forms.reject.$submitted) && forms.reject.method.$invalid && forms.reject.method.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div class="form-group col-md-8" data-ng-class="{\'has-error\': (forms.reject.url.$touched || forms.reject.$submitted) && forms.reject.url.$invalid}">\n <label class="control-label">{{\'APPLICATION_URL\' | translate}}</label>\n <input type="url" name="url" placeholder="{{\'APPLICATION_URL\' | translate}}" class="form-control" data-ng-model="account.rejectUrl" ng-required="account.rejectMethod"/>\n <span data-ng-show="(forms.reject.url.$touched || forms.reject.$submitted) && forms.reject.url.$invalid && forms.reject.url.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n\n <!-- END REJECT URL -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END REJECT TAB -->\n <!-- START CLOSE TAB -->\n <div class="tab-pane" id="tab_1_3">\n <form name="forms.close" data-ng-submit="forms.close.$valid && updateItem()" novalidate>\n <div class="row">\n <div class="form-group col-md-4" data-ng-class="{\'has-error\': (forms.close.method.$touched || forms.close.$submitted) && forms.close.method.$invalid}">\n <label class="control-label">{{\'APPLICATION_METHOD\' | translate}}</label>\n <ui-select data-ng-model="account.closeMethod" name="method" theme="bootstrap" >\n <ui-select-match placeholder="{{\'APPLICATION_METHOD\' | translate}}">{{$select.selected.name | uppercase}}</ui-select-match>\n <ui-select-choices repeat="type.value as type in types | filter: $select.search">\n <div ng-bind-html="type.name | highlight: $select.search | uppercase" ></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.close.method.$touched || forms.close.$submitted) && forms.close.method.$invalid && forms.close.method.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div class="form-group col-md-8" data-ng-class="{\'has-error\': (forms.close.url.$touched || forms.close.$submitted) && forms.close.url.$invalid}">\n <label class="control-label">{{\'APPLICATION_URL\' | translate}}</label>\n <input type="url" name="url" placeholder="{{\'APPLICATION_URL\' | translate}}" class="form-control" data-ng-model="account.closeUrl" ng-required="account.closeMethod"/>\n <span data-ng-show="(forms.close.url.$touched || forms.close.$submitted) && forms.close.url.$invalid && forms.close.url.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END CLOSE TAB -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'), +a.put("app/channels/chat/website/view/proactive/list/list.create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{title}}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.name.$touched || form.$submitted) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START TYPE -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.type.$touched || form.$submitted) && form.type.$invalid}">\n <label class="control-label">{{\'APPLICATION_TYPE\' | translate}}</label>\n <ui-select name="type" ng-model="item.type" theme="bootstrap" ng-disabled="disabled">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.title}}</ui-select-match>\n <ui-select-choices repeat="item.type as item in possibleType | filter: $select.search">\n <div ng-bind-html="item.title | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END TYPE -->\n\n <!-- START SELECTOR -->\n <div class="form-group" data-ng-if="item.type === \'mouseOver\'" data-ng-class="{\'has-error\': (form.selector.$touched || form.$submitted) && form.selector.$invalid}">\n <label class="control-label">{{\'APPLICATION_SELECTOR\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="selector" placeholder="{{\'APPLICATION_SELECTOR\' | translate}}" class="form-control" data-ng-model="item.selector" required/>\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END SELECTOR -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-if="item.type === \'timeout\'" data-ng-class="{\'has-error\': (form.timeout.$touched || form.$submitted) && form.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" name="timeout" placeholder="{{\'APPLICATION_TIMEOUT\' | translate}}" class="form-control" data-ng-model="item.timeout" min="0" required/>\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/chat/website/view/proactive/list/list.html",'<div class="row" data-ng-init="initProactiveActions()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_PROACTIVE_ACTIONS\' | translate}}</span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <a class="btn green-jungle" href="#" data-toggle="dropdown" data-ng-click="createItem()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_PROACTIVE_ACTION\' | translate }}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/chat/website/view/setting/view/view.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_SETTINGS\' | translate}}</span>\n </div>\n </div>\n <div class="portlet-body" data-ng-init="initView()">\n <form name="forms.info" data-ng-submit="forms.info.$valid && updateItemChatWebsite()" novalidate>\n <!-- START LIST -->\n <div class="form-group" data-ng-if="license.cm">\n <label class="control-label">{{\'APPLICATION_LIST\' | translate}}</label>\n <div class="input-group">\n\n <ui-select data-ng-model="chatWebsite.ListId" name="list" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_LIST\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="list.id as list in lists | filter: $select.search">\n <div ng-bind-html="list.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n\n <span class="input-group-btn">\n <button type="button" data-ng-click="chatWebsite.ListId = null" class="btn btn-default">\n <span class="glyphicon glyphicon-trash"></span>\n </button>\n </span>\n\n </div>\n </div>\n <!-- END LIST -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/chat/website/view/snippet/view/view.html",'<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_SNIPPET\' | translate}}</span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_APPEARANCE\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_2" data-toggle="tab">{{\'APPLICATION_FORMS\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_3" data-toggle="tab">{{\'APPLICATION_LABELS\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_4" data-toggle="tab">{{\'APPLICATION_SETTINGS\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_5" data-toggle="tab">{{\'APPLICATION_OFFLINE\' | translate}}</a>\n </li>\n </ul>\n </div>\n <div class="portlet-body">\n <div class="row">\n <div class="col-md-8">\n <div class="tab-content">\n\n <!-- APPEARANCE TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.formAppearance" data-ng-submit="forms.formAppearance.$valid && updateItem()" novalidate>\n\n <!-- START MAIN COLOR -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formAppearance.mainColor.$touched || forms.formAppearance.$submitted) && forms.formAppearance.host.$invalid}">\n <label class="control-label">{{\'APPLICATION_MAIN_COLOR\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input colorpicker type="text" name="mainColor" placeholder="{{\'APPLICATION_MAIN_COLOR\' | translate}}" style="color:{{chatWebsite.color}}" class="form-control" data-ng-model="chatWebsite.color" required/>\n <span data-ng-show="(forms.formAppearance.mainColor.$touched || forms.formAppearance.$submitted) && forms.formAppearance.mainColor.$invalid && forms.formAppearance.mainColor.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END MAIN COLOR -->\n\n <!-- START FOCUS COLOR -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formAppearance.focusColor.$touched || forms.formAppearance.$submitted) && forms.formAppearance.focusColor.$invalid}">\n <label class="control-label">{{\'APPLICATION_FOCUS_COLOR\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input colorpicker type="text" name="focusColor" placeholder="{{\'APPLICATION_FOCUS_COLOR\' | translate}}" style="color:{{chatWebsite.color_focus}}" class="form-control" data-ng-model="chatWebsite.color_focus" required/>\n <span data-ng-show="(forms.formAppearance.focusColor.$touched || forms.formAppearance.$submitted) && forms.formAppearance.focusColor.$invalid && forms.formAppearance.focusColor.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END FOCUS COLOR -->\n\n <!-- START BUTTON COLOR -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formAppearance.buttonColor.$touched || forms.formAppearance.$submitted) && forms.formAppearance.buttonColor.$invalid}">\n <label class="control-label">{{\'APPLICATION_BUTTON_COLOR\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input colorpicker type="text" name="buttonColor" placeholder="{{\'APPLICATION_BUTTON_COLOR\' | translate}}" style="color:{{chatWebsite.color_button}}" class="form-control" data-ng-model="chatWebsite.color_button" required/>\n <span data-ng-show="(forms.formAppearance.buttonColor.$touched || forms.formAppearance.$submitted) && forms.formAppearance.buttonColor.$invalid && forms.formAppearance.buttonColor.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END BUTTON COLOR -->\n\n <!-- START HEADER SHAPE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formAppearance.headerShape.$touched || forms.formAppearance.$submitted) && forms.formAppearance.headerShape.$invalid}">\n <label class="control-label">{{\'APPLICATION_HEADER_SHAPE\' | translate}}</label>\n <!-- <input colorpicker type="text" name="animationToggle" placeholder="{{\'APPLICATION_BUTTON_COLOR\' | translate}}" class="form-control" data-ng-model="chatWebsite.animation" required/> -->\n <ui-select data-ng-model="chatWebsite.header_shape" name="headerShape" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$translate.instant(\'APPLICATION_\' + $select.selected.toUpperCase())}}</ui-select-match>\n <ui-select-choices repeat="headerShape in [\'rounded\',\'squared\'] | filter: $select.search">\n <div ng-bind-html="$translate.instant(\'APPLICATION_\' + headerShape.toUpperCase()) | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END HEADER SHAPE -->\n\n <!-- START ANIMATION TOGGLE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formAppearance.animationToggle.$touched || forms.formAppearance.$submitted) && forms.formAppearance.animationToggle.$invalid}">\n <label class="control-label">{{\'APPLICATION_ANIMATION\' | translate}}</label></br>\n <!-- <input colorpicker type="text" name="animationToggle" placeholder="{{\'APPLICATION_BUTTON_COLOR\' | translate}}" class="form-control" data-ng-model="chatWebsite.animation" required/> -->\n <input\n bs-switch\n class="form-control"\n ng-model="chatWebsite.animation"\n type="checkbox"\n switch-active="{{ true }}"\n switch-on-text="{{\'APPLICATION_YES\' | translate}}"\n switch-off-text="{{\'APPLICATION_NO\' | translate}}"\n switch-on-color="{{ radioSwitch.onColor }}"\n switch-off-color="{{ radioSwitch.offColor }}"\n switch-animate="{{ radioSwitch.animate }}"\n switch-size="{{ radioSwitch.size }}"\n switch-label="{{ radioSwitch.label }}"\n switch-icon="{{ radioSwitch.icon }}"\n switch-radio-off="{{ radioSwitch.radioOff }}"\n switch-label-width="{{ radioSwitch.labelWidth }}"\n switch-handle-width="{{ radioSwitch.handleWidth }}">\n </div>\n <!-- END ANIMATION TOGGLE -->\n\n <div class="portlet-title tabbable-line margin-top20">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_WHITE_LABEL\' | translate}}</span>\n </div>\n </div>\n\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DEFAULT\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="chatWebsite.defaultWhiteLabel"\n data-ng-init="chatWebsite.defaultWhiteLabel = license.custom ? chatWebsite.defaultWhiteLabel : true"\n type="checkbox"\n name="defaultWhitelabel"\n switch-active="{{ radioSwitch.isActive }}"\n switch-on-text="{{\'APPLICATION_YES\' | translate}}"\n switch-off-text="{{\'APPLICATION_NO\' | translate}}"\n switch-on-color="{{ radioSwitch.onColor }}"\n switch-off-color="{{ radioSwitch.offColor }}"\n switch-animate="{{ radioSwitch.animate }}"\n switch-size="{{ radioSwitch.size }}"\n switch-label="{{ radioSwitch.label }}"\n switch-icon="{{ radioSwitch.icon }}"\n switch-radio-off="{{ radioSwitch.radioOff }}"\n switch-label-width="{{ radioSwitch.labelWidth }}"\n switch-handle-width="{{ radioSwitch.handleWidth }}">\n </div>\n <!-- END DEFAULT -->\n <!-- START LABEL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formAppearance.whiteLabel.$touched || forms.formAppearance.$submitted) && forms.formAppearance.whiteLabel.$invalid}">\n <label class="control-label">{{\'APPLICATION_WHITE_LABEL\' | translate}}<span data-ng-if="!chatWebsite.defaultWhiteLabel" class="required" aria-required="true">*</span></label>\n <textarea type="password" name="whiteLabel" placeholder="{{\'APPLICATION_WHITE_LABEL\' | translate}}" class="form-control" data-ng-model="chatWebsite.whiteLabel" data-ng-disabled="chatWebsite.defaultWhiteLabel || !license.custom" data-ng-required="!chatWebsite.defaultWhiteLabel && license.custom"/></textarea>\n <span data-ng-show="(forms.formAppearance.whiteLabel.$touched || forms.formAppearance.$submitted) && forms.formAppearance.whiteLabel.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END LABEL -->\n\n <div class="portlet-title tabbable-line margin-top20">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_LOGO\' | translate}}</span>\n </div>\n </div>\n <div class="row">\n\n <div class="form-group col-md-6 col-sm-6">\n <label class="control-label">{{\'APPLICATION_DEFAULT\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="chatWebsite.defaultLogo"\n data-ng-init="chatWebsite.defaultLogo = license.custom ? chatWebsite.defaultLogo : true"\n type="checkbox"\n name="defaultLogo"\n switch-active="{{ radioSwitch.isActive }}"\n switch-on-text="{{\'APPLICATION_YES\' | translate}}"\n switch-off-text="{{\'APPLICATION_NO\' | translate}}"\n switch-on-color="{{ radioSwitch.onColor }}"\n switch-off-color="{{ radioSwitch.offColor }}"\n switch-animate="{{ radioSwitch.animate }}"\n switch-size="{{ radioSwitch.size }}"\n switch-label="{{ radioSwitch.label }}"\n switch-icon="{{ radioSwitch.icon }}"\n switch-radio-off="{{ radioSwitch.radioOff }}"\n switch-label-width="{{ radioSwitch.labelWidth }}"\n switch-handle-width="{{ radioSwitch.handleWidth }}">\n </div>\n <!-- END STATUS -->\n <div class="form-group col-md-6 col-sm-6" data-ng-if="!chatWebsite.defaultLogo && license.custom">\n <div class="fileinput fileinput-new" data-provides="fileinput">\n <div class="fileinput-new thumbnail" style="width: 200px; height: 150px;">\n <img ng-src="assets/images/media/noProfileImage.png" alt=""/>\n </div>\n <div class="fileinput-preview fileinput-exists thumbnail" style="max-width: 200px; max-height: 150px;">\n </div>\n <div>\n <span class="btn default btn-file" data-ng-show="!uploader.queue[0]">\n <span> {{ \'APPLICATION_SELECT_IMAGE\' | translate }} </span>\n <input type="file" nv-file-select="" uploader="uploader"/><br/>\n </span>\n <button type="button" class="btn default" data-ng-show="uploader.queue[0]" data-dismiss="fileinput" ng-click="uploader.queue[0].remove()">\n {{ \'APPLICATION_REMOVE\' | translate }}\n <!-- </button>\n <button type="button" class="btn green-haze" data-ng-show="uploader.queue[0]" data-ng-click="uploader.queue[0].upload()" ng-disabled="uploader.queue[0].isReady || uploader.queue[0].isUploading || uploader.queue[0].isSuccess">\n {{ \'APPLICATION_CONFIRM\' | translate }}\n </button> -->\n </div>\n <p>\n </br> {{ \'MESSAGE_SUPPORTED_FORMATS\' | translate }} <b>jpg, png, jpeg</b>.\n </p>\n </div>\n </div>\n </div>\n <div class="row">\n <div class="col-md-2">\n <table class="table" border="0">\n <tbody>\n <tr data-ng-repeat="item in uploader.queue">\n <td style="border-top-style:none">\n <strong>\n {{ item.file.name }}\n </strong>\n </td>\n <td data-ng-show="uploader.isHTML5" nowrap style="border-top-style:none">\n {{ item.file.size/1024/1024|number:2 }} MB\n </td>\n <td nowrap style="border-top-style:none">\n <button type="button" class="btn btn-danger btn-xs" data-ng-click="item.remove()">\n <span class="glyphicon glyphicon-trash"></span> Remove\n </button>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n\n <input class="btn green-haze" type="submit" data-ng-click="uploader.queue[0] && uploader.queue[0].upload()" data-ng-disabled="uploader.queue[0].isReady || uploader.queue[0].isUploading || uploader.queue[0].isSuccess" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END APPEARANCE TAB -->\n\n <!-- FORMS TAB -->\n <div class="tab-pane" id="tab_1_2">\n <form name="forms.formFunctionality" data-ng-submit="forms.formFunctionality.$valid && updateItem()" novalidate>\n\n <!-- START DOWNLOAD TRANSCRIPT -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DOWNLOAD_TRANSCRIPT\' | translate}}</label>\n </br>\n <input\n bs-switch\n class="form-control"\n ng-model="chatWebsite.download_transcript"\n type="checkbox"\n switch-active="true"\n switch-on-text="{{\'APPLICATION_YES\' | translate}}"\n switch-off-text="{{\'APPLICATION_NO\' | translate}}"\n switch-on-color="{{ radioSwitch.onColor }}"\n switch-off-color="{{ radioSwitch.offColor }}"\n switch-animate="{{ radioSwitch.animate }}"\n switch-size="{{ radioSwitch.size }}"\n switch-label="{{ radioSwitch.label }}"\n switch-icon="{{ radioSwitch.icon }}"\n switch-radio-off="{{ radioSwitch.radioOff }}"\n switch-label-width="{{ radioSwitch.labelWidth }}"\n switch-handle-width="{{ radioSwitch.handleWidth }}">\n </div>\n <!-- END DOWNLOAD TRANSCRIPT -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END FORMS TAB -->\n\n <!-- STRINGS TAB -->\n <div class="tab-pane" id="tab_1_3">\n <form name="forms.formLabel" data-ng-submit="forms.formLabel.$valid && updateItem()" novalidate>\n\n <h4 class="block" data-ng-show="statePreview.state == \'online\'">{{\'APPLICATION_ONLINE_STATE\' | translate}}</h4>\n\n <!-- START HEADER ONLINE -->\n <div class="form-group" data-ng-show="statePreview.state == \'online\'" data-ng-class="{\'has-error\': (forms.formLabel.headerOnline.$touched || forms.formLabel.$submitted) && forms.formLabel.headerOnline.$invalid}">\n <label class="control-label">{{\'APPLICATION_HEADER_ONLINE\' | translate}}</label>\n <input type="text" name="headerOnline" placeholder="{{\'APPLICATION_HEADER_ONLINE\' | translate}}" class="form-control" data-ng-model="chatWebsite.header_online"/>\n </div>\n <!-- END HEADER ONLINE -->\n\n <!-- START ONLINE MESSAGE-->\n <div class="form-group" data-ng-show="statePreview.state == \'online\'" data-ng-class="{\'has-error\': (forms.formLabel.onlineMessage.$touched || forms.formLabel.$submitted) && forms.formLabel.onlineMessage.$invalid}">\n <label class="control-label">{{\'APPLICATION_ONLINE_MESSAGE\' | translate}}</label>\n <input type="text" name="onlineMessage" placeholder="{{\'APPLICATION_ONLINE_MESSAGE\' | translate}}" class="form-control" data-ng-model="chatWebsite.online_message"/>\n </div>\n <!-- END HEADER ONLINE -->\n\n <!-- START USERNAME TITLE -->\n <div class="form-group" data-ng-show="statePreview.state == \'online\' || statePreview.state == \'offline\'" data-ng-class="{\'has-error\': (forms.formLabel.nameTitle.$touched || forms.formLabel.$submitted) && forms.formLabel.nameTitle.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME_TITLE\' | translate}}</label>\n <input type="text" name="nameTitle" placeholder="{{\'APPLICATION_NAME_TITLE\' | translate}}" class="form-control" data-ng-model="chatWebsite.name_title"/>\n </div>\n <!-- END USERNAME TITLE -->\n\n <!-- START USERNAME PLACEHOLDER -->\n <div class="form-group" data-ng-show="statePreview.state == \'online\' || statePreview.state == \'offline\'" data-ng-class="{\'has-error\': (forms.formLabel.usernamePlaceholder.$touched || forms.formLabel.$submitted) && forms.formLabel.usernamePlaceholder.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME_PLACEHOLDER\' | translate}}</label>\n <input type="text" name="usernamePlaceholder" placeholder="{{\'APPLICATION_NAME_PLACEHOLDER\' | translate}}" class="form-control" data-ng-model="chatWebsite.username_placeholder"/>\n </div>\n <!-- END USERNAME PLACEHOLDER -->\n\n <!-- START EMAIL TITLE -->\n <div class="form-group" data-ng-show="statePreview.state == \'online\' || statePreview.state == \'offline\'" data-ng-class="{\'has-error\': (forms.formLabel.emailTitle.$touched || forms.formLabel.$submitted) && forms.formLabel.emailTitle.$invalid}">\n <label class="control-label">{{\'APPLICATION_EMAIL_TITLE\' | translate}}</label>\n <input type="text" name="emailTitle" placeholder="{{\'APPLICATION_EMAIL_TITLE\' | translate}}" class="form-control" data-ng-model="chatWebsite.email_title"/>\n </div>\n <!-- END EMAIL TITLE -->\n\n <!-- START EMAIL PLACEHOLDER -->\n <div class="form-group" data-ng-show="statePreview.state == \'online\' || statePreview.state == \'offline\'" data-ng-class="{\'has-error\': (forms.formLabel.emailPlaceholder.$touched || forms.formLabel.$submitted) && forms.formLabel.emailPlaceholder.$invalid}">\n <label class="control-label">{{\'APPLICATION_EMAIL_PLACEHOLDER\' | translate}}</label>\n <input type="text" name="emailPlaceholder" placeholder="{{\'APPLICATION_EMAIL_PLACEHOLDER\' | translate}}" class="form-control" data-ng-model="chatWebsite.email_placeholder"/>\n </div>\n <!-- END EMAIL PLACEHOLDER -->\n\n <!-- START START CHAT BUTTON -->\n <div class="form-group" data-ng-show="statePreview.state == \'online\'" data-ng-class="{\'has-error\': (forms.formLabel.startChatButton.$touched || forms.formLabel.$submitted) && forms.formLabel.startChatButton.$invalid}">\n <label class="control-label">{{\'APPLICATION_START_CHAT_BUTTON\' | translate}}</label>\n <input type="text" name="startChatButton" placeholder="{{\'APPLICATION_START_CHAT_BUTTON\' | translate}}" class="form-control" data-ng-model="chatWebsite.start_chat_button"/>\n </div>\n <!-- END START CHAT BUTTON -->\n\n <h4 class="block" data-ng-show="statePreview.state == \'rating\'">{{\'APPLICATION_RATING_STATE\' | translate}}</h4>\n\n <!-- START RATING MESSAGE -->\n <div class="form-group" data-ng-show="statePreview.state == \'rating\'" data-ng-class="{\'has-error\': (forms.formLabel.ratingMessage.$touched || forms.formLabel.$submitted) && forms.formLabel.ratingMessage.$invalid}">\n <label class="control-label">{{\'APPLICATION_RATING_MESSAGE\' | translate}}</label>\n <input type="text" name="ratingMessage" placeholder="{{\'APPLICATION_RATING_MESSAGE\' | translate}}" class="form-control" data-ng-model="chatWebsite.rating_message"/>\n </div>\n <!-- END RATING MESSAGE -->\n\n <!-- START RATING SEND BUTTON -->\n <div class="form-group" data-ng-show="statePreview.state == \'rating\'" data-ng-class="{\'has-error\': (forms.formLabel.ratingSend.$touched || forms.formLabel.$submitted) && forms.formLabel.ratingSend.$invalid}">\n <label class="control-label">{{\'APPLICATION_RATING_SEND_BUTTON\' | translate}}</label>\n <input type="text" name="ratingSend" placeholder="{{\'APPLICATION_RATING_SEND_BUTTON\' | translate}}" class="form-control" data-ng-model="chatWebsite.rating_send"/>\n </div>\n <!-- END RATING SEND BUTTON -->\n\n <!-- START RATING SKIP BUTTON -->\n <div class="form-group" data-ng-show="statePreview.state == \'rating\'" data-ng-class="{\'has-error\': (forms.formLabel.ratingSkip.$touched || forms.formLabel.$submitted) && forms.formLabel.ratingSkip.$invalid}">\n <label class="control-label">{{\'APPLICATION_RATING_SKIP_BUTTON\' | translate}}</label>\n <input type="text" name="ratingSkip" placeholder="{{\'APPLICATION_RATING_SKIP_BUTTON\' | translate}}" class="form-control" data-ng-model="chatWebsite.rating_skip"/>\n </div>\n <!-- END RATING SKIP BUTTON -->\n\n <h4 class="block" data-ng-show="statePreview.state == \'offline\'">{{\'APPLICATION_OFFLINE_STATE\' | translate}}</h4>\n\n <!-- START HEADER OFFLINE -->\n <div class="form-group" data-ng-show="statePreview.state == \'offline\'" data-ng-class="{\'has-error\': (forms.formLabel.headerOffline.$touched || forms.formLabel.$submitted) && forms.formLabel.headerOnline.$invalid}">\n <label class="control-label">{{\'APPLICATION_HEADER_OFFLINE\' | translate}}</label>\n <input type="text" name="headerOffline" placeholder="{{\'APPLICATION_HEADER_OFFLINE\' | translate}}" class="form-control" data-ng-model="chatWebsite.header_offline"/>\n </div>\n <!-- END HEADER OFFLINE -->\n\n <!-- START OFFLINE MESSAGE-->\n <div class="form-group" data-ng-show="statePreview.state == \'offline\'" data-ng-class="{\'has-error\': (forms.formLabel.offlineMessage.$touched || forms.formLabel.$submitted) && forms.formLabel.offlineMessage.$invalid}">\n <label class="control-label">{{\'APPLICATION_OFFLINE_MESSAGE\' | translate}}</label>\n <input type="text" name="offlineMessage" placeholder="{{\'APPLICATION_OFFLINE_MESSAGE\' | translate}}" class="form-control" data-ng-model="chatWebsite.offline_message"/>\n </div>\n <!-- END OFFLINE MESSAGE -->\n\n <!-- START ENQUIRY MESSAGE TITLE-->\n <div class="form-group" data-ng-show="statePreview.state == \'offline\'" data-ng-class="{\'has-error\': (forms.formLabel.enquiryMessageTitle.$touched || forms.formLabel.$submitted) && forms.formLabel.enquiryMessageTitle.$invalid}">\n <label class="control-label">{{\'APPLICATION_ENQUIRY_MESSAGE_TITLE\' | translate}}</label>\n <input type="text" name="enquiryMessageTitle" placeholder="{{\'APPLICATION_ENQUIRY_MESSAGE_TITLE\' | translate}}" class="form-control" data-ng-model="chatWebsite.message_title"/>\n </div>\n <!-- END ENQUIRY MESSAGE TITLE -->\n\n <!-- START ENQUIRY MESSAGE PLACEHOLDER-->\n <div class="form-group" data-ng-show="statePreview.state == \'offline\'" data-ng-class="{\'has-error\': (forms.formLabel.enquiryMessagePlaceholder.$touched || forms.formLabel.$submitted) && forms.formLabel.enquiryMessagePlaceholder.$invalid}">\n <label class="control-label">{{\'APPLICATION_ENQUIRY_MESSAGE_PLACEHOLDER\' | translate}}</label>\n <input type="text" name="enquiryMessagePlaceholder" placeholder="{{\'APPLICATION_ENQUIRY_MESSAGE_PLACEHOLDER\' | translate}}" class="form-control" data-ng-model="chatWebsite.enquiry_message_placeholder"/>\n </div>\n <!-- END ENQUIRY MESSAGE PLACEHOLDER -->\n\n <!-- START ENQUIRY BUTTON -->\n <div class="form-group" data-ng-show="statePreview.state == \'offline\'" data-ng-class="{\'has-error\': (forms.formLabel.enquiryButton.$touched || forms.formLabel.$submitted) && forms.formLabel.enquiryButton.$invalid}">\n <label class="control-label">{{\'APPLICATION_ENQUIRY_BUTTON\' | translate}}</label>\n <input type="text" name="enquiryButton" placeholder="{{\'APPLICATION_ENQUIRY_BUTTON\' | translate}}" class="form-control" data-ng-model="chatWebsite.enquiry_button"/>\n </div>\n <!-- END ENQUIRY BUTTON -->\n\n <!-- START AGENTS BUSY BUTTON -->\n <div class="form-group" data-ng-show="statePreview.state == \'online\'" data-ng-class="{\'has-error\': (forms.formLabel.agentsBusy.$touched || forms.formLabel.$submitted) && forms.formLabel.agentsBusy.$invalid}">\n <label class="control-label">{{\'APPLICATION_AGENTS_BUSY\' | translate}}</label>\n <input type="text" name="agentsBusy" placeholder="{{\'APPLICATION_AGENTS_BUSY\' | translate}}" class="form-control" data-ng-model="chatWebsite.agents_busy"/>\n </div>\n <!-- END AGENTS BUSY BUTTON -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END STRINGS TAB -->\n\n <!-- SETTINGS TAB -->\n <div class="tab-pane" id="tab_1_4">\n <form name="forms.formSetting" data-ng-submit="forms.formSetting.$valid && updateItem()" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formSetting.name.$touched || forms.formSetting.$submitted) && forms.formSetting.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="chatWebsite.name" required/>\n <span data-ng-show="(forms.formSetting.name.$touched || forms.formSetting.$submitted) && forms.formSettings.name.$invalid && forms.formSetting.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START ADDRESS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formSetting.address.$touched || forms.formSetting.$submitted) && forms.formSetting.address.$invalid}">\n <label class="control-label">{{\'APPLICATION_WEB_ADDRESS\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="url" name="address" placeholder="{{\'APPLICATION_WEB_ADDRESS\' | translate}}" class="form-control" data-ng-model="chatWebsite.address" required/>\n <span data-ng-show="(forms.formSetting.address.$touched || forms.formSetting.$submitted) && forms.formSetting.address.$invalid && forms.formSetting.address.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END ADDRESS -->\n\n <!-- START REMOTE IP -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formSetting.remote.$touched || forms.formSetting.$submitted) && forms.formSetting.remote.$invalid}">\n <label class="control-label">{{\'APPLICATION_MOTION_ADDRESS\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="url" name="remote" placeholder="{{\'APPLICATION_MOTION_ADDRESS\' | translate}}" class="form-control" data-ng-model="chatWebsite.remote" required/>\n <span data-ng-show="(forms.formSetting.remote.$touched || forms.formSetting.$submitted) && forms.formSetting.remote.$invalid && forms.formSetting.remote.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span class="help-block help-block-info">\n {{\'MESSAGE_MOTION_ADDRESS_FORMAT\' | translate}}\n </span>\n </div>\n <!-- END REMOTE IP -->\n\n <!-- START FIDELITY -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_FIDELITY\' | translate}}</label></br>\n <input\n bs-switch\n data-ng-model="chatWebsite.fidelity"\n type="checkbox"\n switch-active="{{ fidelitySwitch.isActive }}"\n switch-on-text="{{ \'APPLICATION_ENABLED\' | translate }}"\n switch-off-text="{{ \'APPLICATION_DISABLED\' | translate }}"\n switch-on-color="{{ fidelitySwitch.onColor }}"\n switch-off-color="{{ fidelitySwitch.offColor }}"\n switch-animate="{{ fidelitySwitch.animate }}"\n switch-size="{{ fidelitySwitch.size }}"\n switch-label="{{ fidelitySwitch.label }}"\n switch-icon="{{ fidelitySwitch.icon }}"\n switch-radio-off="{{ fidelitySwitch.radioOff }}"\n switch-label-width="{{ fidelitySwitch.labelWidth }}"\n switch-handle-width="{{ fidelitySwitch.handleWidth }}">\n </div>\n <!-- END FIDELITY -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-if="chatWebsite.fidelity" data-ng-class="{\'has-error\': (forms.formSetting.timeout.$touched || forms.formSetting.$submitted) && forms.formSetting.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" min="0" name="timeout" placeholder="{{\'APPLICATION_TIMEOUT\' | translate}}" class="form-control" data-ng-model="chatWebsite.timeout" required/>\n <span data-ng-show="(forms.formSetting.timeout.$touched || forms.formSetting.$submitted) && forms.formSetting.timeout.$invalid && forms.formSetting.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.formSetting.timeout.$touched || forms.formSetting.$submitted) && forms.formSetting.timeout.$invalid && forms.formSetting.timeout.$error.number" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_NUMERIC_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formSetting.description.$touched || forms.formSetting.$submitted) && forms.formSetting.description.$invalid}">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="chatWebsite.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END SETTINGS TAB -->\n\n <!-- OFFLINE TAB -->\n <div class="tab-pane" id="tab_1_5">\n <form name="forms.formOffline" data-ng-submit="forms.formOffline.$valid && updateItem()" novalidate>\n\n <!-- START ENQUIRY ENABLE -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_ENQUIRY_ENABLED\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="chatWebsite.enquiry_enable"\n type="checkbox"\n switch-active="{{ enquirySwitch.isActive }}"\n switch-on-text="{{ enquirySwitch.onText }}"\n switch-off-text="{{ enquirySwitch.offText }}"\n switch-on-color="{{ enquirySwitch.onColor }}"\n switch-off-color="{{ enquirySwitch.offColor }}"\n switch-animate="{{ enquirySwitch.animate }}"\n switch-size="{{ enquirySwitch.size }}"\n switch-label="{{ enquirySwitch.label }}"\n switch-icon="{{ enquirySwitch.icon }}"\n switch-radio-off="{{ enquirySwitch.radioOff }}"\n switch-label-width="{{ enquirySwitch.labelWidth }}"\n switch-handle-width="{{ enquirySwitch.handleWidth }}">\n </div>\n <!-- END ENQUIRY ENABLE -->\n\n <!-- START ENQUIRY FORWARDING -->\n <div class="form-group" data-ng-if="chatWebsite.enquiry_enable">\n <label class="control-label">{{\'APPLICATION_ENQUIRY_FORWARDING\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="chatWebsite.enquiry_forwarding"\n type="checkbox"\n switch-active="{{ enquirySwitch.isActive }}"\n switch-on-text="{{ enquirySwitch.onText }}"\n switch-off-text="{{ enquirySwitch.offText }}"\n switch-on-color="{{ enquirySwitch.onColor }}"\n switch-off-color="{{ enquirySwitch.offColor }}"\n switch-animate="{{ enquirySwitch.animate }}"\n switch-size="{{ enquirySwitch.size }}"\n switch-label="{{ enquirySwitch.label }}"\n switch-icon="{{ enquirySwitch.icon }}"\n switch-radio-off="{{ enquirySwitch.radioOff }}"\n switch-label-width="{{ enquirySwitch.labelWidth }}"\n switch-handle-width="{{ enquirySwitch.handleWidth }}">\n <span class="help-block col-md-12">{{\'MESSAGE_REMEMBER_SMTP_SERVICE_ACCOUNT\' | translate}}.</span>\n </div>\n <!-- END ENQUIRY FORWARDING -->\n\n <!-- START REMOTE IP -->\n <div class="form-group" data-ng-if="chatWebsite.enquiry_enable && chatWebsite.enquiry_forwarding" data-ng-class="{\'has-error\': (forms.formOffline.forwardingAddress.$touched || forms.formOffline.$submitted) && forms.formSetting.forwardingAddress.$invalid}">\n <label class="control-label">{{\'APPLICATION_ENQUIRY_FORWARDING_ADDRESS\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="forwardingAddress" placeholder="{{\'APPLICATION_ADDRESS\' | translate}}" class="form-control" data-ng-model="chatWebsite.enquiry_forwarding_address" required/>\n <span data-ng-show="(forms.formOffline.forwardingAddress.$touched || forms.formOffline.$submitted) && forms.formOffline.forwardingAddress.$invalid && forms.formOffline.forwardingAddress.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END REMOTE IP -->\n\n <!-- START HEADER SHAPE -->\n <div class="form-group" data-ng-if="chatWebsite.enquiry_enable && chatWebsite.enquiry_forwarding" data-ng-class="{\'has-error\': (forms.formOffline.OfflineTemplateId.$touched || forms.formOffline.$submitted) && forms.formOffline.OfflineTemplateId.$invalid}">\n <label class="control-label">{{\'APPLICATION_TEMPLATE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="chatWebsite.OfflineTemplateId" name="OfflineTemplateId" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="template.id as template in templates | filter: $select.search">\n <div ng-bind-html="template.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.formOffline.OfflineTemplateId.$touched || forms.formOffline.$submitted) && forms.formOffline.OfflineTemplateId.$invalid && forms.formOffline.OfflineTemplateId.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END HEADER SHAPE -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END OFFLINE TAB -->\n </div>\n </div>\n <div class="col-md-4">\n <!-- START STATE -->\n <div class="form-group">\n <!-- <label class="control-label">{{\'APPLICATION_ANIMATION\' | translate}}</label> -->\n <!-- <input colorpicker type="text" name="animationToggle" placeholder="{{\'APPLICATION_BUTTON_COLOR\' | translate}}" class="form-control" data-ng-model="chatWebsite.animation" required/> -->\n <ui-select data-ng-model="statePreview.state" name="statePreview" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="statePreview in [\'online\',\'rating\',\'offline\'] | filter: $select.search">\n <div ng-bind-html="statePreview | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END STATE -->\n <preview></preview>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n'), +a.put("app/channels/chat/website/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-bubble"></i>\n <a href="#">{{ \'APPLICATION_CHAT\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-globe"></i>\n <a href="/channels/chat/websites/list">{{ \'APPLICATION_WEB_SITES\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <a href="#">{{chatWebsite.name}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img src="assets/images/media/website.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{chatWebsite.name}}\n </div>\n <div class="profile-usertitle-job">\n {{chatWebsite.address}}\n </div>\n </div>\n <!-- END SIDEBAR USER TITLE -->\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.includes(\'main.channels.chat.websites.view.embedding\')}">\n <a ng-href="/channels/chat/websites/view/{{chatWebsite.id}}/embedding/view">\n <i class="fa fa-code"></i>\n {{ \'APPLICATION_EMBEDDING\' | translate }} </a>\n </li>\n <li data-ng-class="{active: $state.includes(\'main.channels.chat.websites.view.snippet\')}">\n <a ng-href="/channels/chat/websites/view/{{chatWebsite.id}}/snippet/view">\n <i class="icon-note"></i>\n {{ \'APPLICATION_SNIPPET\' | translate }} </a>\n </li>\n <li data-ng-class="{active: $state.includes(\'main.channels.chat.websites.view.form\')}">\n <a ng-href="/channels/chat/websites/view/{{chatWebsite.id}}/forms/view">\n <i class="icon-list"></i>\n {{ \'APPLICATION_FORMS\' | translate }} </a>\n </li>\n <li data-ng-class="{active: $state.includes(\'main.channels.chat.websites.view.proactive\')}">\n <a ng-href="/channels/chat/websites/view/{{chatWebsite.id}}/proactive/list">\n <i class="icon-target"></i>\n {{ \'APPLICATION_PROACTIVE_ACTIONS\' | translate }} </a>\n </li>\n <li data-ng-class="{active: $state.includes(\'main.channels.chat.websites.view.actions\')}">\n <a ng-href="/channels/chat/websites/view/{{chatWebsite.id}}/actions/list">\n <i class="icon-directions"></i>\n {{ \'APPLICATION_ACTIONS\' | translate }} </a>\n </li>\n <li ng-class="{active: $state.is(\'main.channels.chat.websites.view.hooks\')}">\n <a href="/channels/chat/websites/view/{{chatWebsite.id}}/hooks">\n <i class="fa fa-code"></i>\n {{\'APPLICATION_HOOKS\' | translate}} </a>\n </li>\n <li data-ng-class="{active: $state.includes(\'main.channels.chat.websites.view.dispositions\')}">\n <a ng-href="/channels/chat/websites/view/{{chatWebsite.id}}/dispositions">\n <i class="icon-target"></i>\n {{ \'APPLICATION_DISPOSITIONS\' | translate }} </a>\n </li>\n <li ng-class="{active: $state.is(\'main.channels.chat.websites.view.settings\')}">\n <a href="/channels/chat/websites/view/{{chatWebsite.id}}/settings">\n <i class="icon-settings"></i>\n {{\'APPLICATION_SETTINGS\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/chat/website/wizard/wizard.html",'<!-- BEGIN PAGE HEADER-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-bubble"></i>\n <a href="#">{{ \'APPLICATION_CHAT\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-globe"></i>\n <a href="/channels/chat/websites/list">{{ \'APPLICATION_WEB_SITES\' | translate }}</a>\n </li>\n </ul>\n </div>\n </div>\n</div>\n<!-- END PAGE HEADER-->\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initWizard();">\n <div class="col-md-12">\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-notebook font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_WEB_SITE\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="createItem()">\n <wz-step title="{{\'APPLICATION_WEB_SITE_INFO\' | translate}}" canexit="exitValidation(forms.formSetting.$valid)">\n <form name="forms.formSetting" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formSetting.name.$touched || forms.formSetting.$submitted) && forms.formSetting.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="forms.formSetting.name.$touched && !forms.formSettings.name.$valid && forms.formSetting.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START ADDRESS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formSetting.address.$touched || forms.formSetting.$submitted) && forms.formSetting.address.$invalid}">\n <label class="control-label">{{\'APPLICATION_WEB_ADDRESS\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="url" name="address" placeholder="{{\'APPLICATION_WEB_ADDRESS\' | translate}}" class="form-control" data-ng-model="item.address" required/>\n <span data-ng-show="(forms.formSetting.address.$touched || forms.formSetting.$submitted) && forms.formSetting.address.$invalid && forms.formSetting.address.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END ADDRESS -->\n\n <!-- START REMOTE IP -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formSetting.remote.$touched || forms.formSetting.$submitted) && forms.formSetting.remote.$invalid}">\n <label class="control-label">{{\'APPLICATION_MOTION_ADDRESS\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="url" name="remote" placeholder="{{\'APPLICATION_MOTION_ADDRESS\' | translate}}" class="form-control" data-ng-model="item.remote" required/>\n <span class="help-block help-block-info">\n {{\'MESSAGE_MOTION_ADDRESS_FORMAT\' | translate}}\n </span>\n <span data-ng-show="(forms.formSetting.remote.$touched || forms.formSetting.$submitted) && forms.formSetting.remote.$invalid && forms.formSetting.remote.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END REMOTE IP -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.form.description"/>\n </div>\n <!-- END DESCRIPTION -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" ng-click="next()"/>\n </form>\n </wz-step>\n\n <wz-step title="{{\'APPLICATION_WEB_SITE_APPEARANCE\' | translate}}" canexit="exitValidation(forms.formAppearance.$valid)">\n <form name="forms.formAppearance" novalidate>\n\n <!-- START MAIN COLOR -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formAppearance.mainColor.$touched || forms.formAppearance.$submitted) && forms.formAppearance.host.$invalid}">\n <label class="control-label">{{\'APPLICATION_MAIN_COLOR\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input colorpicker type="text" name="mainColor" placeholder="{{\'APPLICATION_MAIN_COLOR\' | translate}}" style="color:{{item.color}}" class="form-control" data-ng-model="item.color" required/>\n <span data-ng-show="(forms.formAppearance.mainColor.$touched || forms.formAppearance.$submitted) && forms.formAppearance.mainColor.$invalid && forms.formAppearance.mainColor.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END MAIN COLOR -->\n\n <!-- START FOCUS COLOR -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formAppearance.focusColor.$touched || forms.formAppearance.$submitted) && forms.formAppearance.focusColor.$invalid}">\n <label class="control-label">{{\'APPLICATION_FOCUS_COLOR\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input colorpicker type="text" name="focusColor" placeholder="{{\'APPLICATION_FOCUS_COLOR\' | translate}}" style="color:{{item.color_focus}}" class="form-control" data-ng-model="item.color_focus" required/>\n <span data-ng-show="(forms.formAppearance.focusColor.$touched || forms.formAppearance.$submitted) && forms.formAppearance.focusColor.$invalid && forms.formAppearance.focusColor.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END FOCUS COLOR -->\n\n <!-- START BUTTON COLOR -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formAppearance.buttonColor.$touched || forms.formAppearance.$submitted) && forms.formAppearance.buttonColor.$invalid}">\n <label class="control-label">{{\'APPLICATION_BUTTON_COLOR\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input colorpicker type="text" name="buttonColor" placeholder="{{\'APPLICATION_BUTTON_COLOR\' | translate}}" style="color:{{item.color_button}}" class="form-control" data-ng-model="item.color_button" required/>\n <span data-ng-show="(forms.formAppearance.buttonColor.$touched || forms.formAppearance.$submitted) && forms.formAppearance.buttonColor.$invalid && forms.formAppearance.buttonColor.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END BUTTON COLOR -->\n\n <!-- START HEADER SHAPE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formAppearance.headerShape.$touched || forms.formAppearance.$submitted) && forms.formAppearance.headerShape.$invalid}">\n <label class="control-label">{{\'APPLICATION_HEADER_SHAPE\' | translate}}</label>\n <!-- <input colorpicker type="text" name="animationToggle" placeholder="{{\'APPLICATION_BUTTON_COLOR\' | translate}}" class="form-control" data-ng-model="item.animation" required/> -->\n <ui-select data-ng-model="item.header_shape" name="headerShape" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$translate.instant(\'APPLICATION_\' + $select.selected.toUpperCase())}}</ui-select-match>\n <ui-select-choices repeat="headerShape in [\'rounded\',\'squared\'] | filter: $select.search">\n <div ng-bind-html="$translate.instant(\'APPLICATION_\' + headerShape.toUpperCase()) | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END HEADER SHAPE -->\n\n <!-- START ANIMATION TOGGLE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formAppearance.animationToggle.$touched || forms.formAppearance.$submitted) && forms.formAppearance.animationToggle.$invalid}">\n <label class="control-label">{{\'APPLICATION_ANIMATION\' | translate}}</label>\n <ui-select data-ng-model="item.animation" name="animationToggle" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected ? \'On\' : \'Off\'}}</ui-select-match>\n <ui-select-choices repeat="filter in [true,false] | filter: $select.search">\n <div ng-bind-html="filter ? \'On\' : \'Off\' | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END ANIMATION TOGGLE -->\n\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" ng-click="next()"/>\n </form>\n </wz-step>\n\n <wz-step title="{{\'APPLICATION_LABELS\' | translate}}" canexit="exitValidation(forms.formLabel.$valid)">\n <form name="forms.formLabel" novalidate>\n\n <!-- START HEADER ONLINE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formLabel.headerOnline.$touched || forms.formLabel.$submitted) && forms.formLabel.headerOnline.$invalid}">\n <label class="control-label">{{\'APPLICATION_HEADER_ONLINE\' | translate}}</label>\n <input type="text" name="headerOnline" placeholder="{{\'APPLICATION_HEADER_ONLINE\' | translate}}" class="form-control" data-ng-model="item.header_online"/>\n </div>\n <!-- END HEADER ONLINE -->\n\n <!-- START ONLINE MESSAGE-->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formLabel.onlineMessage.$touched || forms.formLabel.$submitted) && forms.formLabel.onlineMessage.$invalid}">\n <label class="control-label">{{\'APPLICATION_ONLINE_MESSAGE\' | translate}}</label>\n <input type="text" name="onlineMessage" placeholder="{{\'APPLICATION_ONLINE_MESSAGE\' | translate}}" class="form-control" data-ng-model="item.online_message"/>\n </div>\n <!-- END HEADER ONLINE -->\n\n <!-- START USERNAME TITLE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formLabel.nameTitle.$touched || forms.formLabel.$submitted) && forms.formLabel.nameTitle.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME_TITLE\' | translate}}</label>\n <input type="text" name="nameTitle" placeholder="{{\'APPLICATION_NAME_TITLE\' | translate}}" class="form-control" data-ng-model="item.name_title"/>\n </div>\n <!-- END USERNAME TITLE -->\n\n <!-- START USERNAME PLACEHOLDER -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formLabel.usernamePlaceholder.$touched || forms.formLabel.$submitted) && forms.formLabel.usernamePlaceholder.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME_PLACEHOLDER\' | translate}}</label>\n <input type="text" name="usernamePlaceholder" placeholder="{{\'APPLICATION_NAME_PLACEHOLDER\' | translate}}" class="form-control" data-ng-model="item.username_placeholder"/>\n </div>\n <!-- END USERNAME PLACEHOLDER -->\n\n <!-- START EMAIL TITLE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formLabel.emailTitle.$touched || forms.formLabel.$submitted) && forms.formLabel.emailTitle.$invalid}">\n <label class="control-label">{{\'APPLICATION_EMAIL_TITLE\' | translate}}</label>\n <input type="text" name="emailTitle" placeholder="{{\'APPLICATION_EMAIL_TITLE\' | translate}}" class="form-control" data-ng-model="item.email_title"/>\n </div>\n <!-- END EMAIL TITLE -->\n\n <!-- START EMAIL PLACEHOLDER -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formLabel.emailPlaceholder.$touched || forms.formLabel.$submitted) && forms.formLabel.emailPlaceholder.$invalid}">\n <label class="control-label">{{\'APPLICATION_EMAIL_PLACEHOLDER\' | translate}}</label>\n <input type="text" name="emailPlaceholder" placeholder="{{\'APPLICATION_EMAIL_PLACEHOLDER\' | translate}}" class="form-control" data-ng-model="item.email_placeholder"/>\n </div>\n <!-- END EMAIL PLACEHOLDER -->\n\n <!-- START START CHAT BUTTON -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formLabel.startChatButton.$touched || forms.formLabel.$submitted) && forms.formLabel.startChatButton.$invalid}">\n <label class="control-label">{{\'APPLICATION_START_CHAT_BUTTON\' | translate}}</label>\n <input type="text" name="startChatButton" placeholder="{{\'APPLICATION_START_CHAT_BUTTON\' | translate}}" class="form-control" data-ng-model="item.start_chat_button"/>\n </div>\n <!-- END START CHAT BUTTON -->\n\n <!-- START RATING MESSAGE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formLabel.ratingMessage.$touched || forms.formLabel.$submitted) && forms.formLabel.ratingMessage.$invalid}">\n <label class="control-label">{{\'APPLICATION_RATING_MESSAGE\' | translate}}</label>\n <input type="text" name="ratingMessage" placeholder="{{\'APPLICATION_RATING_MESSAGE\' | translate}}" class="form-control" data-ng-model="item.rating_message"/>\n </div>\n <!-- END RATING MESSAGE -->\n\n <!-- START RATING START TEXT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formLabel.ratingSend.$touched || forms.formLabel.$submitted) && forms.formLabel.ratingSend.$invalid}">\n <label class="control-label">{{\'APPLICATION_RATING_SEND_BUTTON\' | translate}}</label>\n <input type="text" name="ratingSend" placeholder="{{\'APPLICATION_RATING_SEND_BUTTON\' | translate}}" class="form-control" data-ng-model="item.rating_send"/>\n </div>\n <!-- END RATING START TEXT -->\n\n <!-- START RATING MESSAGE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formLabel.ratingSkip.$touched || forms.formLabel.$submitted) && forms.formLabel.ratingSkip.$invalid}">\n <label class="control-label">{{\'APPLICATION_RATING_SKIP_BUTTON\' | translate}}</label>\n <input type="text" name="ratingSkip" placeholder="{{\'APPLICATION_RATING_SKIP_BUTTON\' | translate}}" class="form-control" data-ng-model="item.rating_skip"/>\n </div>\n <!-- END RATING MESSAGE -->\n\n <!-- START HEADER OFFLINE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formLabel.headerOffline.$touched || forms.formLabel.$submitted) && forms.formLabel.headerOnline.$invalid}">\n <label class="control-label">{{\'APPLICATION_HEADER_OFFLINE\' | translate}}</label>\n <input type="text" name="headerOffline" placeholder="{{\'APPLICATION_HEADER_OFFLINE\' | translate}}" class="form-control" data-ng-model="item.header_offline"/>\n </div>\n <!-- END HEADER OFFLINE -->\n\n <!-- START OFFLINE MESSAGE-->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formLabel.offlineMessage.$touched || forms.formLabel.$submitted) && forms.formLabel.onlineMessage.$invalid}">\n <label class="control-label">{{\'APPLICATION_OFFLINE_MESSAGE\' | translate}}</label>\n <input type="text" name="offlineMessage" placeholder="{{\'APPLICATION_OFFLINE_MESSAGE\' | translate}}" class="form-control" data-ng-model="item.offline_message"/>\n </div>\n <!-- END OFFLINE MESSAGE -->\n\n <!-- START ENQUIRY MESSAGE TITLE-->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formLabel.enquiryMessageTitle.$touched || forms.formLabel.$submitted) && forms.formLabel.enquiryMessageTitle.$invalid}">\n <label class="control-label">{{\'APPLICATION_ENQUIRY_MESSAGE_TITLE\' | translate}}</label>\n <input type="text" name="enquiryMessageTitle" placeholder="{{\'APPLICATION_ENQUIRY_MESSAGE_TITLE\' | translate}}" class="form-control" data-ng-model="item.message_title"/>\n </div>\n <!-- END ENQUIRY MESSAGE TITLE -->\n\n <!-- START ENQUIRY MESSAGE PLACEHOLDER-->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formLabel.enquiryMessagePlaceholder.$touched || forms.formLabel.$submitted) && forms.formLabel.onlineMessage.$invalid}">\n <label class="control-label">{{\'APPLICATION_ENQUIRY_MESSAGE_PLACEHOLDER\' | translate}}</label>\n <input type="text" name="enquiryMessagePlaceholder" placeholder="{{\'APPLICATION_ENQUIRY_MESSAGE_PLACEHOLDER\' | translate}}" class="form-control" data-ng-model="item.enquiry_message_placeholder"/>\n </div>\n <!-- END ENQUIRY MESSAGE PLACEHOLDER -->\n\n <!-- START ENQUIRY BUTTON -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formLabel.enquiryButton.$touched || forms.formLabel.$submitted) && forms.formLabel.enquiryButton.$invalid}">\n <label class="control-label">{{\'APPLICATION_ENQUIRY_BUTTON\' | translate}}</label>\n <input type="text" name="enquiryButton" placeholder="{{\'APPLICATION_ENQUIRY_BUTTON\' | translate}}" class="form-control" data-ng-model="item.enquiry_button"/>\n </div>\n <!-- END ENQUIRY BUTTON -->\n\n <!-- START AGENTS BUSY BUTTON -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formLabel.agentsBusy.$touched || forms.formLabel.$submitted) && forms.formLabel.agentsBusy.$invalid}">\n <label class="control-label">{{\'APPLICATION_AGENTS_BUSY\' | translate}}</label>\n <input type="text" name="agentsBusy" placeholder="{{\'APPLICATION_AGENTS_BUSY\' | translate}}" class="form-control" data-ng-model="item.agents_busy"/>\n </div>\n <!-- END AGENTS BUSY BUTTON -->\n\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" ng-click="next()"/>\n </form>\n </wz-step>\n\n <wz-step title="{{\'APPLICATION_FORMS\' | translate}}" canexit="exitValidation(forms.formAppearance.$valid)">\n <form name="forms.formFunctionality" novalidate>\n\n <!-- START DOWNLOAD TRANSCRIPT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formFunctionality.animationToggle.$touched || forms.formFunctionality.$submitted) && forms.formFunctionality.animationToggle.$invalid}">\n <label class="control-label">{{\'APPLICATION_DOWNLOAD_TRANSCRIPT\' | translate}}</label>\n <ui-select data-ng-model="item.download_transcript" name="downloadTranscript" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected ? \'On\' : \'Off\'}}</ui-select-match>\n <ui-select-choices repeat="downloadTranscript in [true, false] | filter: $select.search">\n <div ng-bind-html="downloadTranscript ? \'On\' : \'Off\' | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END DOWNLOAD TRANSCRIPT -->\n\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" ng-click="next()"/>\n </form>\n </wz-step>\n\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n <input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n </wz-step>\n </wizard>\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/fax/account/list/list.create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_FAX_ACCOUNT\' | translate }}</h3>\n</div>\n<div class="modal-body" data-ng-init="initWizard();">\n <form name="form" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.$submitted || form.name.$touched) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="form.name.$error.required && (form.$submitted || form.name.$touched)" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START TRUNKS -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.$submitted || form.trunk.$touched) && form.trunk.$invalid}">\n <label class="control-label">{{\'APPLICATION_TRUNK\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="item.TrunkName" name="trunk" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_TRUNK\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="trunk.name as trunk in trunks | filter: $select.search">\n <div data-ng-bind="trunk.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="trunks.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_TRUNKS_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/tools/trunks/list">{{\'APPLICATION_INTERVALS\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="form.trunk.$error.required && (form.$submitted || form.trunk.$touched)" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- START TRUNKS -->\n\n <!-- START LOCALSTATIONID -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.$submitted || form.localstationid.$touched) && form.localstationid.$invalid}">\n <label class="control-label">{{\'APPLICATION_LOCALSTATIONID\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="localstationid" placeholder="{{\'APPLICATION_LOCALSTATIONID\' | translate}}" class="form-control" data-ng-model="item.localstationid" required/>\n <span data-ng-show="form.localstationid.$error.required && (form.$submitted || form.localstationid.$touched)" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span class="help-block">\n {{\'DESCRIPTION_LOCALSTATIONID\' | translate}}.\n </span>\n </div>\n <!-- END LOCALSTATIONID -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/fax/account/list/list.html",'<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-fax"></i>\n <a href="#">{{ \'APPLICATION_FAX\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-notebook"></i>\n <a href="/channels/fax/accounts/list">{{ \'APPLICATION_ACCOUNTS\' | translate }}</a>\n </li>\n </ul>\n </div>\n </div>\n</div>\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-notebook font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_ACCOUNTS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <button type="button" class="btn green-jungle" data-toggle="dropdown" data-hover="dropdown" data-delay="1000" data-close-others="true" aria-expanded="true">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_ACCOUNT\' | translate }} <i class="fa fa-angle-down"></i>\n </button>\n <ul class="dropdown-menu" role="menu">\n <li>\n <a href="/channels/fax/accounts/wizard">\n {{ \'APPLICATION_STANDARD\' | translate }}\n </a>\n </li>\n <li>\n <a href="#" data-ng-click="createItem()">\n {{ \'APPLICATION_QUICK\' | translate }}\n </a>\n </li>\n </ul>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/fax/account/view/action/list/list.html",'<div class="row" data-ng-init="initActons()">\r\n <div class="col-md-12">\r\n <div class="portlet light">\r\n <div class="portlet-title tabbable-line">\r\n <div class="caption caption-md">\r\n <i class="icon-globe theme-font hide"></i>\r\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_ACTIONS\' | translate}}</span>\r\n </div>\r\n <div class="actions">\r\n <div class="btn-group" data-ng-show="id.length">\r\n <a class="btn red" href="#" data-ng-click="deleteItems()">\r\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\r\n </a>\r\n </div>\r\n <div class="btn-group">\r\n <a class="btn green-jungle" href="/channels/fax/accounts/view/{{account.id}}/actions/wizard" data-toggle="dropdown">\r\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_ACTION\' | translate }}\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n <div class="portlet-body">\r\n <!-- START TABLE -->\r\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\r\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\r\n </div>\r\n <!-- END TABLE -->\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n'), +a.put("app/channels/fax/account/view/action/view/view.html",'\n<div class="row" data-ng-init="initAction()">\n <div class="col-md-12">\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-directions font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_ACTION\' | translate }}</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <form name="forms.settings" ng-submit="updateItem()" novalidate>\n <!-- START APP -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.app.$touched || forms.settings.$submitted) && forms.settings.app.$invalid}">\n <label class="control-label">{{ \'APPLICATION_APPLICATION\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.app" name="app" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_APPLICATION\' | translate }}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="app.value as app in apps | filter: $select.search">\n <div ng-bind-html="app.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.app.$touched || forms.settings.$submitted) && forms.settings.app.$invalid && forms.settings.app.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END APP -->\n\n <div class="app-settings" ng-slide-down="application.app === \'queue\'" lazy-render duration="1" data-ng-init="getQueues()">\n <!-- START QUEUE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.queue.$touched || forms.settings.$submitted) && forms.settings.queue.$invalid}">\n <label class="control-label">{{\'APPLICATION_QUEUE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.FaxQueueId" name="queue" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="queue.id as queue in queues | filter: $select.search">\n <div ng-bind-html="queue.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="queues.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_QUEUES_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/channels/fax/queues/list">{{\'APPLICATION_QUEUES\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.settings.queue.$touched || forms.settings.$submitted) && forms.settings.queue.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END QUEUE -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="number" name="timeout" placeholder="{{\'APPLICATION_TIMEOUT\' | translate}}" class="form-control" data-ng-model="application.timeout" min="1" required/>\n <span data-ng-show="(forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid && forms.settings.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.app === \'agent\'" lazy-render duration="1" data-ng-init="getAgents()">\n <!-- START AGENT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.agent.$touched || forms.settings.$submitted) && forms.settings.agent.$invalid}">\n <label class="control-label">{{\'APPLICATION_AGENT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.UserId" name="agent" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.fullname}}</ui-select-match>\n <ui-select-choices repeat="agent.id as agent in agents | filter: $select.search">\n <div ng-bind-html="agent.fullname | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="agents.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_AGENTS_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/staff/agents/list">{{\'APPLICATION_QUEUES\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.settings.agent.$touched || forms.settings.$submitted) && forms.settings.agent.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END AGENT -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="number" name="timeout" placeholder="{{\'APPLICATION_TIMEOUT\' | translate}}" class="form-control" data-ng-model="application.timeout" min="1" required/>\n <span data-ng-show="(forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid && forms.settings.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.app === \'sendMail\'" lazy-render duration="1" data-ng-init="getMailAccounts();getTemplates()">\n <!-- START SENDMAIL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TO\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="email" name="to" placeholder="{{\'APPLICATION_TO\' | translate}}" class="form-control" data-ng-model="application.data2" min="1" required/>\n <span data-ng-show="(forms.settings.from.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid && forms.settings.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.mail.$touched || forms.settings.$submitted) && forms.settings.account.$invalid}">\n <label class="control-label">{{\'APPLICATION_ACCOUNT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data8" name="account" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="account.id as account in mailAccounts | filter: $select.search">\n <div ng-bind-html="account.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.account.$touched || forms.settings.$submitted) && forms.settings.account.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.template.$touched || forms.settings.$submitted) && forms.settings.template.$invalid}">\n <label class="control-label">{{\'APPLICATION_TEMPLATE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data9" name="template" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="template.id as template in templates | filter: $select.search">\n <div ng-bind-html="template.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.template.$touched || forms.settings.$submitted) && forms.settings.template.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END SENDMAIL -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.app === \'sendSms\'" lazy-render duration="1" data-ng-init="getSmsAccounts()">\n <!-- START SENDSms -->\n <div class="app-settings" ng-slide-down="application.app === \'sendSms\'" lazy-render duration="1">\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.to.$touched || forms.settings.$submitted) && forms.settings.to.$invalid}">\n <label class="control-label">{{\'APPLICATION_TO\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" ng-pattern="/^[\\+]?[0-9]+$/" name="to" placeholder="{{\'APPLICATION_TO\' | translate}}" class="form-control" data-ng-model="application.data2" required/>\n <span data-ng-show="(forms.settings.to.$touched || forms.settings.$submitted) && forms.settings.to.$invalid && forms.settings.to.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.account.$touched || forms.settings.$submitted) && forms.settings.account.$invalid}">\n <label class="control-label">{{\'APPLICATION_ACCOUNT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data8" name="account" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="account.id as account in smsAccounts | filter: $select.search">\n <div ng-bind-html="account.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.account.$touched || forms.settings.$submitted) && forms.settings.account.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.text.$touched || forms.text.$submitted) && forms.settings.text.$invalid}">\n <label class="control-label">{{\'APPLICATION_TEXT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <textarea id="text" class="form-control maxlength-handler" maxlength="160" name="text" data-ng-model="application.data6" required></textarea>\n <span data-ng-show="(forms.settings.text.$touched || forms.settings.$submitted) && forms.settings.text.$invalid && forms.settings.text.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n\n <!-- END SENDSms -->\n </div>\n\n <!-- START INTERVAL_TYPE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.intType.$touched || forms.settings.$submitted) && forms.settings.intType.$invalid}">\n <label class="control-label">{{ \'APPLICATION_INTERVAL_TYPE\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.intType" theme="bootstrap" name="intType" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="intType.value as intType in $application.intTypes | filter: $select.search">\n {{ intType.name | translate }}\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.intType.$touched || forms.settings.$submitted) && forms.settings.intType.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERVAL_TYPE -->\n\n <div class="app-settings" ng-slide-down="application.intType === \'custom\'" lazy-render duration="1">\n <!-- START TIME -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_TIME\' | translate }}</label>\n <div class="input-group input-large">\n <fieldset class="pull-left" ng-disabled="application.alwaysTime">\n <uib-timepicker name="t_from" data-ng-model="application.t_from" show-meridian="false" show-spinners="false" mousewheel="false"></uib-timepicker>\n </fieldset>\n <div class="input-group-addon col-md-1 interval-to pull-left">to</div>\n <fieldset ng-disabled="application.alwaysTime"><uib-timepicker name="t_to" data-ng-model="application.t_to" show-meridian="false" show-spinners="false" mousewheel="false"></uib-timepicker></fieldset>\n <!-- <label class="control-label pointer-cursor"><input type="checkbox" data-ng-model="application.alwaysTime">{{\'APPLICATION_ALWAYS\' | translate}}</label> -->\n </div>\n </div>\n <!-- END TIME -->\n\n <!-- START ALWAYS -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_ALWAYS\' | translate }}</label>\n <div class="input-group input-large">\n <label class="control-label pointer-cursor">\n <input\n bs-switch\n data-ng-model="application.alwaysTime"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n <!-- <input type="checkbox" data-ng-model="application.alwaysTime"> -->\n </label>\n </div>\n </div>\n <!-- END ALWAYS -->\n\n <!-- START WEEKDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_WEEKDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="application.wd_from" theme="bootstrap" name="wd_from">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{ weekDay.name | translate}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="application.wd_to" theme="bootstrap" name="wd_to">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{ weekDay.name | translate }}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END WEEKDAY -->\n\n <!-- START MONTHDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTHDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="application.md_from" theme="bootstrap" name="md_from">\n <ui-select-match allow-clear>{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search" ui-disable-choice="application.md_to && application.md_to!==\'always\' && monthDay>application.md_to && monthDay!==\'always\'">\n {{monthDay}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="application.md_to" theme="bootstrap" name="md_to">\n <ui-select-match allow-clear>{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search" ui-disable-choice="application.md_from && application.md_from!==\'always\' && monthDay<application.md_from && monthDay!==\'always\'">\n {{monthDay}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTHDAY -->\n\n <!-- START MONTH -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTH\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="application.m_from" theme="bootstrap" name="m_from">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{ month.name | translate }}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="application.m_to" theme="bootstrap" name="m_to">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{ month.name | translate }}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTH -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.intType === \'list\'" lazy-render duration="1" data-ng-init="getIntervals()">\n\n <!-- START INTERVALS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.IntervalId.$touched || forms.settings.$submitted) && forms.settings.IntervalId.$invalid}">\n <label class="control-label">{{\'APPLICATION_INTERVALS\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.IntervalId" theme="bootstrap" name="IntervalId" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{ $select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="interval.id as interval in intervals | filter: $select.search">\n {{ interval.name}}\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="intervals.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_INTERVALS_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/tools/intervals/list">{{\'APPLICATION_INTERVALS\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.settings.IntervalId.$touched || forms.settings.$submitted) && forms.settings.IntervalId.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERVALS -->\n\n </div>\n <button class="btn green-haze" type="submit">{{\'APPLICATION_UPDATE\' | translate}}</button>\n </form>\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/fax/account/view/action/wizard/wizard.html",'\n<div class="row" data-ng-init="initWizard()">\n <div class="col-md-12">\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-directions font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_ACTION\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="createItem()">\n <wz-step title="{{\'APPLICATION_APPLICATION\' | translate}}" canexit="formValidation(forms.action.$valid)">\n <form name="forms.action" novalidate>\n <!-- START APP -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.action.$submitted && forms.action.app.$invalid}">\n <label class="control-label">{{ \'APPLICATION_APPLICATION\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.app" name="app" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_APPLICATION\' | translate }}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="app.value as app in apps | filter: $select.search">\n <div ng-bind-html="app.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.action.$submitted && forms.action.app.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END APP -->\n\n <div class="app-settings" ng-slide-down="application.app === \'agent\'" lazy-render duration="1" data-ng-init="getAgents()">\n <!-- START AGENT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.agent.$touched || forms.action.$submitted) && forms.action.agent.$invalid}">\n <label class="control-label">{{\'APPLICATION_AGENT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.UserId" name="agent" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.fullname}}</ui-select-match>\n <ui-select-choices repeat="agent.id as agent in agents | filter: $select.search">\n <div ng-bind-html="agent.fullname | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="agents.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_AGENTS_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/staff/agents/list">{{\'APPLICATION_QUEUES\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.action.agent.$touched || forms.action.$submitted) && forms.action.agent.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END AGENT -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.timeout.$touched || forms.action.$submitted) && forms.action.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="number" name="timeout" placeholder="{{\'APPLICATION_TIMEOUT\' | translate}}" class="form-control" data-ng-model="application.timeout" min="1" required/>\n <span data-ng-show="(forms.action.timeout.$touched || forms.action.$submitted) && forms.action.timeout.$invalid && forms.action.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n\n </div>\n\n <div class="app-settings" ng-slide-down="application.app === \'queue\'" lazy-render duration="1" data-ng-init="getQueues()">\n <!-- START QUEUE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.queue.$touched || forms.action.$submitted) && forms.action.queue.$invalid}">\n <label class="control-label">{{\'APPLICATION_QUEUE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.FaxQueueId" name="queue" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="queue.id as queue in queues | filter: $select.search">\n <div ng-bind-html="queue.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="queues.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_QUEUES_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/channels/fax/queues/list">{{\'APPLICATION_QUEUES\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.action.queue.$touched || forms.action.$submitted) && forms.action.queue.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END QUEUE -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.timeout.$touched || forms.action.$submitted) && forms.action.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="number" name="timeout" placeholder="{{\'APPLICATION_TIMEOUT\' | translate}}" class="form-control" data-ng-model="application.timeout" min="1" required/>\n <span data-ng-show="(forms.action.timeout.$touched || forms.action.$submitted) && forms.action.timeout.$invalid && forms.action.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.app === \'sendMail\'" lazy-render duration="1" data-ng-init="getMailAccounts();getTemplates()">\n <!-- START SENDMAIL -->\n <div class="app-settings" ng-slide-down="application.app === \'sendMail\'" lazy-render duration="1">\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.timeout.$touched || forms.action.$submitted) && forms.action.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TO\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="email" name="to" placeholder="{{\'APPLICATION_TO\' | translate}}" class="form-control" data-ng-model="application.data2" min="1" required/>\n <span data-ng-show="(forms.action.from.$touched || forms.action.$submitted) && forms.action.timeout.$invalid && forms.action.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.mail.$touched || forms.action.$submitted) && forms.action.account.$invalid}">\n <label class="control-label">{{\'APPLICATION_ACCOUNT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data8" name="account" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="account.id as account in mailAccounts | filter: $select.search">\n <div ng-bind-html="account.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.action.account.$touched || forms.action.$submitted) && forms.action.account.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.template.$touched || forms.action.$submitted) && forms.action.template.$invalid}">\n <label class="control-label">{{\'APPLICATION_TEMPLATE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data9" name="template" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="template.id as template in templates | filter: $select.search">\n <div ng-bind-html="template.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.action.template.$touched || forms.action.$submitted) && forms.action.template.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END SENDMAIL -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.app === \'sendSms\'" lazy-render duration="1" data-ng-init="getSmsAccounts()">\n <!-- START SENDSms -->\n <div class="app-settings" ng-slide-down="application.app === \'sendSms\'" lazy-render duration="1">\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.to.$touched || forms.action.$submitted) && forms.action.to.$invalid}">\n <label class="control-label">{{\'APPLICATION_TO\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" ng-pattern="/^[\\+]?[0-9]+$/" name="to" placeholder="{{\'APPLICATION_TO\' | translate}}" class="form-control" data-ng-model="application.data2" required/>\n <span data-ng-show="(forms.action.to.$touched || forms.action.$submitted) && forms.action.to.$invalid && forms.action.to.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.account.$touched || forms.action.$submitted) && forms.action.account.$invalid}">\n <label class="control-label">{{\'APPLICATION_ACCOUNT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data8" name="account" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="account.id as account in smsAccounts | filter: $select.search">\n <div ng-bind-html="account.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.action.account.$touched || forms.action.$submitted) && forms.action.account.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.text.$touched || forms.action.$submitted) && forms.action.text.$invalid}">\n <label class="control-label">{{\'APPLICATION_TEXT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <textarea id="text" class="form-control maxlength-handler" maxlength="160" name="text" data-ng-model="application.data6" required></textarea>\n <span data-ng-show="(forms.action.text.$touched || forms.action.$submitted) && forms.action.text.$invalid && forms.action.text.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n\n <!-- END SENDSms -->\n </div>\n\n <!-- START INTERVAL_TYPE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.intType.$touched || forms.action.$submitted) && forms.action.intType.$invalid}">\n <label class="control-label">{{ \'APPLICATION_INTERVAL_TYPE\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.intType" theme="bootstrap" name="intType" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="intType.value as intType in $application.intTypes | filter: $select.search">\n {{ intType.name | translate }}\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.action.intType.$touched || forms.action.$submitted) && forms.action.intType.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERVAL_TYPE -->\n\n <div class="app-settings" ng-slide-down="application.intType === \'custom\'" lazy-render duration="1">\n <!-- START TIME -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_TIME\' | translate }}</label>\n <div class="input-group input-large">\n <fieldset class="pull-left" ng-disabled="application.alwaysTime">\n <uib-timepicker name="t_from" data-ng-model="application.t_from" show-meridian="false" show-spinners="false" mousewheel="false"></uib-timepicker>\n </fieldset>\n <div class="input-group-addon col-md-1 interval-to pull-left">to</div>\n <fieldset ng-disabled="application.alwaysTime"><uib-timepicker name="t_to" data-ng-model="application.t_to" show-meridian="false" show-spinners="false" mousewheel="false"></uib-timepicker></fieldset>\n <!-- <label class="control-label pointer-cursor"><input type="checkbox" data-ng-model="application.alwaysTime">{{\'APPLICATION_ALWAYS\' | translate}}</label> -->\n </div>\n </div>\n <!-- END TIME -->\n\n <!-- START ALWAYS -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_ALWAYS\' | translate }}</label>\n <div class="input-group input-large">\n <label class="control-label pointer-cursor">\n <input\n bs-switch\n data-ng-model="application.alwaysTime"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n <!-- <input type="checkbox" data-ng-model="application.alwaysTime"> -->\n </label>\n </div>\n </div>\n <!-- END ALWAYS -->\n\n <!-- START WEEKDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_WEEKDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="application.wd_from" theme="bootstrap" name="wd_from">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{ weekDay.name | translate}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="application.wd_to" theme="bootstrap" name="wd_to">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{ weekDay.name | translate }}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END WEEKDAY -->\n\n <!-- START MONTHDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTHDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="application.md_from" theme="bootstrap" name="md_from">\n <ui-select-match allow-clear>{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search" ui-disable-choice="application.md_to && application.md_to!==\'always\' && monthDay>application.md_to && monthDay!==\'always\'">\n {{monthDay}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="application.md_to" theme="bootstrap" name="md_to">\n <ui-select-match allow-clear>{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search" ui-disable-choice="application.md_from && application.md_from!==\'always\' && monthDay<application.md_from && monthDay!==\'always\'">\n {{monthDay}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTHDAY -->\n\n <!-- START MONTH -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTH\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="application.m_from" theme="bootstrap" name="m_from">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{ month.name | translate }}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="application.m_to" theme="bootstrap" name="m_to">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{ month.name | translate }}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTH -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.intType === \'list\'" lazy-render duration="1" data-ng-init="getIntervals()">\n\n <!-- START INTERVALS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.IntervalId.$touched || forms.action.$submitted) && forms.action.IntervalId.$invalid}">\n <label class="control-label">{{\'APPLICATION_INTERVALS\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.IntervalId" theme="bootstrap" name="IntervalId" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{ $select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="interval.id as interval in intervals | filter: $select.search">\n {{ interval.name}}\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="intervals.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_INTERVALS_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/tools/intervals/list">{{\'APPLICATION_INTERVALS\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.action.IntervalId.$touched || forms.action.$submitted) && forms.action.IntervalId.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERVALS -->\n\n </div>\n\n <input class="btn green-haze" type="submit" data-ng-click="next()" value="{{\'APPLICATION_CONTINUE\' | translate}}"/>\n </form>\n </wz-step>\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n <input class="btn green-haze" type="submit" data-ng-click="next()" value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n </wz-step>\n </wizard>\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'), +a.put("app/channels/fax/account/view/disposition/modal/add.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_DISPOSITIONS\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.form.$touched || form.$submitted) && form.form.$invalid}">\n <div class="">\n <!-- <input type="text" name="form" placeholder="{{\'APPLICATION_DISPOSITION\' | translate}}" class="form-control" data-ng-model="name" data-ng-pattern="/^[a-zA-Z0-9]*$/" required/> -->\n <input type="text" name="form" placeholder="{{\'APPLICATION_DISPOSITION\' | translate}}" class="form-control" data-ng-model="name" required/>\n <span data-ng-show="form.form.$touched && form.form.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <!-- <span data-ng-show="form.form.$touched && form.form.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_PATTERN\' | translate}}.\n </span> -->\n </div>\n <!-- <div class="help-block">\n {{\'MESSAGE_ALLOWED_NUMBERS_AND_LETTERS\' | translate}}\n </div> -->\n </div>\n <!-- END NAME -->\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" data-ng-click="ok()" data-ng-show="form.$valid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" data-ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/fax/account/view/disposition/view/view.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_DISPOSITIONS\' | translate}}</span>\n </div>\n <div class="actions actions-md">\n <a href="#" class="btn btn-icon-only green" data-ng-click="addDisposition();">\n <i class="fa fa-plus"></i>\n </a>\n </div>\n </div>\n <div class="portlet-body" data-ng-init="initView()">\n <div class="tab-content">\n <div class="row" data-ng-hide="dispositions.length">\n <div class="col-md-12">\n <div class="note note-info">\n <h4 class="block">Info! {{\'MESSAGE_NO_DISPOSITIONS_AVAILABLE\' | translate}}</h4>\n </div>\n </div>\n </div>\n\n <!-- GENERAL TAB -->\n <div class="row" data-ng-repeat="disposition in dispositions">\n <div class="col-md-12 form-group">\n <div class="input-group">\n <div>\n <input class="form-control" type="text" placeholder="{{\'APPLICATION_DISPOSITION\' | translate}}" data-ng-model="disposition.name">\n </div>\n <span class="input-group-btn">\n <button class="btn btn-success" type="button" data-ng-click="updateDisposition(disposition.id, disposition.name);"><i class="fa fa-cloud-upload fa-fw"></i> {{\'APPLICATION_UPDATE\' | translate}}</button>\n <button class="btn btn-danger" type="button" data-ng-click="deleteDisposition(disposition.id);"><i class="fa fa-times fa-fw"></i> {{\'APPLICATION_DELETE\' | translate}}</button>\n </span>\n </div>\n </div>\n </div>\n <!-- END GENERAL TAB -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/fax/account/view/hooks/view/view.html",'<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_HOOKS\' | translate}}</span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_ACCEPT\' | translate}}</a>\n </li>\n <li >\n <a href="#" data-target="#tab_1_2" data-toggle="tab">{{\'APPLICATION_REJECT\' | translate}}</a>\n </li>\n <li >\n <a href="#" data-target="#tab_1_3" data-toggle="tab">{{\'APPLICATION_CLOSE\' | translate}}</a>\n </li>\n </ul>\n </div>\n <div class="portlet-body">\n <div class="tab-content">\n <!-- ACCEPT TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.accept" data-ng-submit="forms.accept.$valid && updateItemFaxAccount()" novalidate>\n <div class="row">\n <div class="form-group col-md-4" data-ng-class="{\'has-error\': (forms.accept.method.$touched || forms.accept.$submitted) && forms.accept.method.$invalid}">\n <label class="control-label">{{\'APPLICATION_METHOD\' | translate}}</label>\n <ui-select data-ng-model="account.acceptMethod" name="method" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_METHOD\' | translate}}">{{$select.selected.name | uppercase}}</ui-select-match>\n <ui-select-choices repeat="type.value as type in types | filter: $select.search">\n <div ng-bind-html="type.name | highlight: $select.search | uppercase" ></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.accept.method.$touched || forms.accept.$submitted) && forms.accept.method.$invalid && forms.accept.method.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div class="form-group col-md-8" data-ng-class="{\'has-error\': (forms.accept.url.$touched || forms.accept.$submitted) && forms.accept.url.$invalid}">\n <label class="control-label">{{\'APPLICATION_URL\' | translate}}</label>\n <input type="url" name="url" placeholder="{{\'APPLICATION_URL\' | translate}}" class="form-control" data-ng-model="account.acceptUrl" ng-required="account.acceptMethod"/>\n <span data-ng-show="(forms.accept.url.$touched || forms.accept.$submitted) && forms.accept.url.$invalid && forms.accept.url.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n <!-- START ACTIONS-->\n <div class="row" ng-repeat = "action in account.actions">\n <div ng-switch="action.action">\n <div ng-switch-when="pause">\n <div class="form-group col-md-4">\n <label class="control-label">{{\'APPLICATION_PAUSE\' | translate}}</label></br>\n <input\n bs-switch\n data-ng-change="resetActionData(action)"\n data-ng-model="action.enabled"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_ENABLED\' | translate }}"\n switch-off-text="{{ \'APPLICATION_DISABLED\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n </div>\n <div ng-if="action.enabled" class="form-group col-md-8">\n <label class="control-label">{{\'APPLICATION_TYPE\' | translate}}</label>\n <ui-select name="action" data-ng-model="action.type" theme="bootstrap" >\n <ui-select-match placeholder="{{\'APPLICATION_TYPE\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat=" pause.name as pause in pauses | filter: $select.search">\n <div ng-bind-html="pause.name | highlight: $select.search | uppercase" ></div>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n </div>\n </div>\n <!-- END ACTION -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END ACCEPT TAB -->\n <!-- START REJECT TAB -->\n <div class="tab-pane" id="tab_1_2">\n <form name="forms.reject" data-ng-submit="forms.reject.$valid && updateItemFaxAccount()" novalidate>\n <div class="row">\n <div class="form-group col-md-4" data-ng-class="{\'has-error\': (forms.reject.method.$touched || forms.reject.$submitted) && forms.reject.method.$invalid}">\n <label class="control-label">{{\'APPLICATION_METHOD\' | translate}}</label>\n <ui-select data-ng-model="account.rejectMethod" name="method" theme="bootstrap" >\n <ui-select-match placeholder="{{\'APPLICATION_METHOD\' | translate}}">{{$select.selected.name | uppercase}}</ui-select-match>\n <ui-select-choices repeat="type.value as type in types | filter: $select.search">\n <div ng-bind-html="type.name | highlight: $select.search | uppercase" ></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.reject.method.$touched || forms.reject.$submitted) && forms.reject.method.$invalid && forms.reject.method.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div class="form-group col-md-8" data-ng-class="{\'has-error\': (forms.reject.url.$touched || forms.reject.$submitted) && forms.reject.url.$invalid}">\n <label class="control-label">{{\'APPLICATION_URL\' | translate}}</label>\n <input type="url" name="url" placeholder="{{\'APPLICATION_URL\' | translate}}" class="form-control" data-ng-model="account.rejectUrl" ng-required="account.rejectMethod"/>\n <span data-ng-show="(forms.reject.url.$touched || forms.reject.$submitted) && forms.reject.url.$invalid && forms.reject.url.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END ACCEPT TAB -->\n <!-- START CLOSE TAB -->\n <div class="tab-pane" id="tab_1_3">\n <form name="forms.close" data-ng-submit="forms.close.$valid && updateItemFaxAccount()" novalidate>\n <div class="row">\n <div class="form-group col-md-4" data-ng-class="{\'has-error\': (forms.close.method.$touched || forms.close.$submitted) && forms.close.method.$invalid}">\n <label class="control-label">{{\'APPLICATION_METHOD\' | translate}}</label>\n <ui-select data-ng-model="account.closeMethod" name="method" theme="bootstrap" >\n <ui-select-match placeholder="{{\'APPLICATION_METHOD\' | translate}}">{{$select.selected.name | uppercase}}</ui-select-match>\n <ui-select-choices repeat="type.value as type in types | filter: $select.search">\n <div ng-bind-html="type.name | highlight: $select.search | uppercase" ></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.close.method.$touched || forms.close.$submitted) && forms.close.method.$invalid && forms.close.method.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div class="form-group col-md-8" data-ng-class="{\'has-error\': (forms.close.url.$touched || forms.close.$submitted) && forms.close.url.$invalid}">\n <label class="control-label">{{\'APPLICATION_URL\' | translate}}</label>\n <input type="url" name="url" placeholder="{{\'APPLICATION_URL\' | translate}}" class="form-control" data-ng-model="account.closeUrl" ng-required="account.closeMethod"/>\n <span data-ng-show="(forms.close.url.$touched || forms.close.$submitted) && forms.close.url.$invalid && forms.close.url.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END CLOSE TAB -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/fax/account/view/setting/view/view.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_SETTINGS\' | translate}}</span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_GENERAL\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_2" data-toggle="tab">{{\'APPLICATION_ADVANCED\' | translate}}</a>\n </li>\n </ul>\n </div>\n <div class="portlet-body" data-ng-init="initView()">\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.general" data-ng-submit="forms.general.$valid && updateItemFaxAccount()" novalidate>\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.$submitted || forms.general.name.$touched) && forms.general.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="account.name" required/>\n <span data-ng-show="forms.general.name.$error.required && (forms.general.$submitted || forms.general.name.$touched)" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START HEADERINFO -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.$submitted || forms.general.headerinfo.$touched) && forms.general.headerinfo.$invalid}">\n <label class="control-label">{{\'APPLICATION_HEADERINFO\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="headerinfo" placeholder="{{\'APPLICATION_HEADERINFO\' | translate}}" class="form-control" data-ng-model="account.headerinfo" required/>\n <span data-ng-show="forms.general.headerinfo.$error.required && (forms.general.$submitted || forms.general.headerinfo.$touched)" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span class="help-block">\n {{\'DESCRIPTION_HEADERINFO\' | translate}}.\n </span>\n </div>\n <!-- END HEADERINFO -->\n\n <!-- START TRUNKS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.$submitted || forms.general.trunk.$touched) && forms.general.trunk.$invalid}">\n <label class="control-label">{{\'APPLICATION_TRUNK\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="account.TrunkName" name="trunk" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_TRUNK\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="trunk.name as trunk in trunks | filter: $select.search">\n <div data-ng-bind="trunk.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="trunks.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_TRUNKS_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/tools/trunks/list">{{\'APPLICATION_INTERVALS\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="forms.general.trunk.$error.required && (forms.general.$submitted || forms.general.trunk.$touched)" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- START TRUNKS -->\n\n <!-- START LOCALSTATIONID -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.$submitted || forms.general.localstationid.$touched) && forms.general.localstationid.$invalid}">\n <label class="control-label">{{\'APPLICATION_LOCALSTATIONID\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="localstationid" placeholder="{{\'APPLICATION_LOCALSTATIONID\' | translate}}" class="form-control" data-ng-model="account.localstationid" required/>\n <span data-ng-show="forms.general.localstationid.$error.required && (forms.general.$submitted || forms.general.localstationid.$touched)" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span class="help-block">\n {{\'DESCRIPTION_LOCALSTATIONID\' | translate}}.\n </span>\n </div>\n <!-- END LOCALSTATIONID -->\n\n <!-- START LIST -->\n <div class="form-group" data-ng-if="license.cm">\n <label class="control-label">{{\'APPLICATION_LIST\' | translate}}</label>\n <div class="input-group">\n\n <ui-select data-ng-model="account.ListId" name="list" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_LIST\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="list.id as list in lists | filter: $select.search">\n <div ng-bind-html="list.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n\n <span class="input-group-btn">\n <button type="button" data-ng-click="account.ListId = null" class="btn btn-default">\n <span class="glyphicon glyphicon-trash"></span>\n </button>\n </span>\n\n </div>\n </div>\n <!-- END LIST -->\n\n <!-- START FIDELITY -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_FIDELITY\' | translate}}</label></br>\n <input\n bs-switch\n data-ng-model="account.fidelity"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_ENABLED\' | translate }}"\n switch-off-text="{{ \'APPLICATION_DISABLED\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n </div>\n <!-- END FIDELITY -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-if="account.fidelity" data-ng-class="{\'has-error\': (forms.general.$submitted || forms.general.timeout.$touched) && forms.general.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" min="0" name="timeout" placeholder="{{\'APPLICATION_PORT\' | translate}}" class="form-control" data-ng-model="account.timeout" required/>\n <span data-ng-show="(forms.general.timeout.$touched || forms.general.$submitted) && forms.general.timeout.$invalid && forms.general.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.general.timeout.$touched || forms.general.$submitted) && forms.general.timeout.$invalid && forms.general.timeout.$error.number" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_NUMERIC_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="account.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END GENERAL TAB -->\n\n <!-- ADVANCED TAB -->\n <div class="tab-pane" id="tab_1_2">\n <form name="forms.advanced" data-ng-submit="forms.advanced.$valid && updateItemFaxAccount()" novalidate>\n <div class="row">\n <div class="col-md-6">\n <!-- START ECM -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_ECM\' | translate}}<span class="required" aria-required="true">*</span></label><br>\n <input\n bs-switch\n ng-model="account.ecm"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_ENABLED\' | translate }}"\n switch-off-text="{{ \'APPLICATION_DISABLED\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}"\n ng-true-value="\'yes\'"\n ng-false-value="\'no\'">\n <span class="help-block">\n {{\'DESCRIPTION_ECM\' | translate}}.\n </span>\n </div>\n <!-- END ECM -->\n\n <!-- START MINRATE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.$submitted || forms.advanced.minrate.$touched) && forms.advanced.minrate.$invalid}">\n <label class="control-label">{{\'APPLICATION_MINRATE\' | translate}} <span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="account.minrate" name="minrate" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_MINRATE\' | translate}}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="minrate in rate | filter: $select.search">\n <div data-ng-bind="minrate | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{\'DESCRIPTION_MINRATE\' | translate}}.\n </span>\n <span data-ng-show="forms.advanced.minrate.$error.required && (forms.advanced.$submitted || forms.advanced.minrate.$touched)" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- START MINRATE -->\n\n <!-- START MAXRATE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.$submitted || forms.advanced.maxrate.$touched) && forms.advanced.maxrate.$invalid}">\n <label class="control-label">{{\'APPLICATION_MAXRATE\' | translate}} <span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="account.maxrate" name="maxrate" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_MAXRATE\' | translate}}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="maxrate in rate | filter: $select.search">\n <div data-ng-bind="maxrate | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{\'DESCRIPTION_MAXRATE\' | translate}}.\n </span>\n <span data-ng-show="forms.advanced.maxrate.$error.required && (forms.advanced.$submitted || forms.advanced.maxrate.$touched)" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- START MAXRATE -->\n\n <!-- START MODEM -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.$submitted || forms.advanced.modem.$touched) && forms.advanced.modem.$invalid}">\n <label class="control-label">{{\'APPLICATION_MODEM\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="modem" placeholder="{{\'APPLICATION_MODEM\' | translate}}" class="form-control" data-ng-model="account.modem" required/>\n <span class="help-block">\n {{\'DESCRIPTION_MODEM\' | translate}}.\n </span>\n <span data-ng-show="forms.advanced.modem.$error.required && (forms.advanced.$submitted || forms.advanced.modem.$touched)" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END MODEM -->\n </div>\n <div class="col-md-6">\n <!-- START GATEWAY -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.$submitted || forms.advanced.gateway.$touched) && forms.advanced.gateway.$invalid}">\n <label class="control-label">{{\'APPLICATION_GATEWAY\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="gateway" placeholder="{{\'APPLICATION_GATEWAY\' | translate}}" class="form-control" data-ng-model="account.gateway" required data-ng-pattern="settings.patternGateway"/>\n <span class="help-block">\n {{\'DESCRIPTION_GATEWAY\' | translate}}.\n </span>\n <span data-ng-show="(forms.advanced.gateway.$touched || forms.advanced.$submitted) && forms.advanced.gateway.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.advanced.gateway.$touched || forms.advanced.$submitted) && forms.advanced.gateway.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_PATTERN_GATEWAY\' | translate}}.\n </span>\n </div>\n <!-- END GATEWAY -->\n\n <!-- START FAXDETECT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.$submitted || forms.advanced.faxdetect.$touched) && forms.advanced.faxdetect.$invalid}">\n <label class="control-label">{{\'APPLICATION_FAXDETECT\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="faxdetect" placeholder="{{\'APPLICATION_FAXDETECT\' | translate}}" class="form-control" data-ng-model="account.faxdetect" required data-ng-pattern="settings.patternFaxdetect"/>\n <span class="help-block">\n {{\'DESCRIPTION_FAXDETECT\' | translate}}.\n </span>\n <span data-ng-show="(forms.advanced.faxdetect.$touched || forms.advanced.$submitted) && forms.advanced.faxdetect.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.advanced.faxdetect.$touched || forms.advanced.$submitted) && forms.advanced.faxdetect.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_PATTERN_FAXDETECT\' | translate}}.\n </span>\n </div>\n <!-- END FAXDETECT -->\n\n <!-- START T38TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.$submitted || forms.advanced.t38timeout.$touched) && forms.advanced.t38timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_T38TIMEOUT\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="number" name="t38timeout" placeholder="{{\'APPLICATION_T38TIMEOUT\' | translate}}" class="form-control" data-ng-model="account.t38timeout" required min="1000"/>\n <span class="help-block">\n {{\'DESCRIPTION_T38TIMEOUT\' | translate}}.\n </span>\n <span data-ng-show="(forms.advanced.t38timeout.$touched || forms.advanced.$submitted) && forms.advanced.t38timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.advanced.t38timeout.$touched || forms.advanced.$submitted) && forms.advanced.t38timeout.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_T38TIMEOUT\' | translate}}.\n </span>\n </div>\n <!-- END T38TIMEOUT -->\n\n <!-- START TECH -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.$submitted || forms.advanced.tech.$touched) && forms.advanced.tech.$invalid}">\n <label class="control-label">{{\'APPLICATION_TECHNOLOGY\' | translate}} <span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="account.tech" name="tech" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_TECHNOLOGY\' | translate}}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="tech in techs | filter: $select.search">\n <div data-ng-bind="tech | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.advanced.tech.$touched || forms.advanced.$submitted) && forms.advanced.tech.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- START TECH -->\n </div>\n </div>\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END ADVANCED TAB -->\n\n </div>\n </div>\n </div>\n </div>\n</div>\n'), +a.put("app/channels/fax/account/view/view.html",'<!-- BEGIN PAGE HEADER-->\n<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-fax"></i>\n <a href="#">{{ \'APPLICATION_FAX\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-notebook"></i>\n <a href="/channels/fax/accounts/list">{{ \'APPLICATION_ACCOUNTS\' | translate }}</a>\n <i class="fa fa-angle-right" data-ng-show="account"></i>\n </li>\n <li data-ng-show="account">\n <a href="#">{{ account.name || account.description }}</a>\n </li>\n </ul>\n </div>\n\n<!-- END PAGE HEADER-->\n\n<!-- BEGIN PAGE CONTENT-->\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/account.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{ account.name || account.description }}\n </div>\n <div class="profile-usertitle-job">\n {{ account.phone }}\n </div>\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.channels.fax.accounts.view.settings\')}">\n <a href="/channels/fax/accounts/view/{{account.id}}/settings">\n <i class="icon-settings"></i>\n {{\'APPLICATION_SETTINGS\' | translate}} </a>\n </li>\n <li ng-class="{active: $state.is(\'main.channels.fax.accounts.view.hooks\')}">\n <a href="/channels/fax/accounts/view/{{account.id}}/hooks">\n <i class="fa fa-code"></i>\n {{\'APPLICATION_HOOKS\' | translate}} </a>\n </li>\n <li ng-class="{active: $state.is(\'main.channels.fax.accounts.view.dispositions\')}">\n <a href="/channels/fax/accounts/view/{{account.id}}/dispositions">\n <i class="icon-target"></i>\n {{\'APPLICATION_DISPOSITIONS\' | translate}} </a>\n </li>\n <li ng-class="{active: $state.includes(\'main.channels.fax.accounts.view.actions\')}">\n <a href="/channels/fax/accounts/view/{{account.id}}/actions/list">\n <i class="icon-directions"></i>\n {{\'APPLICATION_ACTIONS\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/fax/account/wizard/wizard.html",'<!-- BEGIN PAGE HEADER-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-fax"></i>\n <a href="#">{{ \'APPLICATION_FAX\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-notebook"></i>\n <a href="/channels/fax/accounts/list">{{ \'APPLICATION_ACCOUNTS\' | translate }}</a>\n </li>\n </ul>\n </div>\n </div>\n</div>\n<!-- END PAGE HEADER-->\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initWizard()">\n <div class="col-md-12">\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-notebook font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_ACCOUNT\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="createItem()">\n <wz-step title="{{\'APPLICATION_GENERAL\' | translate}}" canexit="exitValidation(forms.formGeneral.$valid)">\n <form name="forms.formGeneral" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formGeneral.$submitted || forms.formGeneral.name.$touched) && forms.formGeneral.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="forms.formGeneral.name.$error.required && (forms.formGeneral.$submitted || forms.formGeneral.name.$touched)" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START HEADERINFO -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formGeneral.$submitted || forms.formGeneral.headerinfo.$touched) && forms.formGeneral.headerinfo.$invalid}">\n <label class="control-label">{{\'APPLICATION_HEADERINFO\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="headerinfo" placeholder="{{\'APPLICATION_HEADERINFO\' | translate}}" class="form-control" data-ng-model="item.headerinfo" required/>\n <span data-ng-show="forms.formGeneral.headerinfo.$error.required && (forms.formGeneral.$submitted || forms.formGeneral.headerinfo.$touched)" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span class="help-block">\n {{\'DESCRIPTION_HEADERINFO\' | translate}}.\n </span>\n </div>\n <!-- END HEADERINFO -->\n\n <!-- START TRUNKS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formGeneral.$submitted || forms.formGeneral.trunk.$touched) && forms.formGeneral.trunk.$invalid}">\n <label class="control-label">{{\'APPLICATION_TRUNK\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="item.TrunkName" name="trunk" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_TRUNK\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="trunk.name as trunk in trunks | filter: $select.search">\n <div data-ng-bind="trunk.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="trunks.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_TRUNKS_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/tools/trunks/list">{{\'APPLICATION_INTERVALS\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="forms.formGeneral.trunk.$error.required && (forms.formGeneral.$submitted || forms.formGeneral.trunk.$touched)" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- START TRUNKS -->\n\n <!-- START LOCALSTATIONID -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formGeneral.$submitted || forms.formGeneral.localstationid.$touched) && forms.formGeneral.localstationid.$invalid}">\n <label class="control-label">{{\'APPLICATION_LOCALSTATIONID\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="localstationid" placeholder="{{\'APPLICATION_LOCALSTATIONID\' | translate}}" class="form-control" data-ng-model="item.localstationid" required/>\n <span data-ng-show="forms.formGeneral.localstationid.$error.required && (forms.formGeneral.$submitted || forms.formGeneral.localstationid.$touched)" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span class="help-block">\n {{\'DESCRIPTION_LOCALSTATIONID\' | translate}}.\n </span>\n </div>\n <!-- END LOCALSTATIONID -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" data-ng-click="next()"/>\n\n </form>\n </wz-step>\n\n <wz-step title="{{\'APPLICATION_ADVANCED\' | translate}}" canexit="exitValidation(forms.formAdvanced.$valid)">\n <form name="forms.formAdvanced" novalidate>\n\n <!-- START ECM -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_ECM\' | translate}}<span class="required" aria-required="true">*</span></label><br>\n <input\n bs-switch\n ng-model="item.ecm"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_ENABLED\' | translate }}"\n switch-off-text="{{ \'APPLICATION_DISABLED\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}"\n ng-true-value="\'yes\'"\n ng-false-value="\'no\'">\n <span class="help-block">\n {{\'DESCRIPTION_ECM\' | translate}}.\n </span>\n </div>\n <!-- END ECM -->\n\n <!-- START MINRATE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formAdvanced.$submitted || forms.formAdvanced.minrate.$touched) && forms.formAdvanced.minrate.$invalid}">\n <label class="control-label">{{\'APPLICATION_MINRATE\' | translate}} <span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="item.minrate" name="minrate" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_MINRATE\' | translate}}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="minrate in rate | filter: $select.search">\n <div data-ng-bind="minrate | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{\'DESCRIPTION_MINRATE\' | translate}}.\n </span>\n <span data-ng-show="forms.formAdvanced.minrate.$error.required && (forms.formAdvanced.$submitted || forms.formAdvanced.minrate.$touched)" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- START MINRATE -->\n\n <!-- START MAXRATE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formAdvanced.$submitted || forms.formAdvanced.maxrate.$touched) && forms.formAdvanced.maxrate.$invalid}">\n <label class="control-label">{{\'APPLICATION_MAXRATE\' | translate}} <span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="item.maxrate" name="maxrate" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_MAXRATE\' | translate}}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="maxrate in rate | filter: $select.search">\n <div data-ng-bind="maxrate | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{\'DESCRIPTION_MAXRATE\' | translate}}.\n </span>\n <span data-ng-show="forms.formAdvanced.maxrate.$error.required && (forms.formAdvanced.$submitted || forms.formAdvanced.maxrate.$touched)" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- START MAXRATE -->\n\n <!-- START MODEM -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formAdvanced.$submitted || forms.formAdvanced.modem.$touched) && forms.formAdvanced.modem.$invalid}">\n <label class="control-label">{{\'APPLICATION_MODEM\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="modem" placeholder="{{\'APPLICATION_MODEM\' | translate}}" class="form-control" data-ng-model="item.modem" required/>\n <span class="help-block">\n {{\'DESCRIPTION_MODEM\' | translate}}.\n </span>\n <span data-ng-show="forms.formAdvanced.modem.$error.required && (forms.formAdvanced.$submitted || forms.formAdvanced.modem.$touched)" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END MODEM -->\n\n <!-- START GATEWAY -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formAdvanced.$submitted || forms.formAdvanced.gateway.$touched) && forms.formAdvanced.gateway.$invalid}">\n <label class="control-label">{{\'APPLICATION_GATEWAY\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="gateway" placeholder="{{\'APPLICATION_GATEWAY\' | translate}}" class="form-control" data-ng-model="item.gateway" required data-ng-pattern="settings.patternGateway"/>\n <span class="help-block">\n {{\'DESCRIPTION_GATEWAY\' | translate}}.\n </span>\n <span data-ng-show="(forms.formAdvanced.gateway.$touched || forms.formAdvanced.$submitted) && forms.formAdvanced.gateway.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.formAdvanced.gateway.$touched || forms.formAdvanced.$submitted) && forms.formAdvanced.gateway.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_PATTERN_GATEWAY\' | translate}}.\n </span>\n </div>\n <!-- END GATEWAY -->\n\n <!-- START FAXDETECT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formAdvanced.$submitted || forms.formAdvanced.faxdetect.$touched) && forms.formAdvanced.faxdetect.$invalid}">\n <label class="control-label">{{\'APPLICATION_FAXDETECT\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="faxdetect" placeholder="{{\'APPLICATION_FAXDETECT\' | translate}}" class="form-control" data-ng-model="item.faxdetect" required data-ng-pattern="settings.patternFaxdetect"/>\n <span class="help-block">\n {{\'DESCRIPTION_FAXDETECT\' | translate}}.\n </span>\n <span data-ng-show="(forms.formAdvanced.faxdetect.$touched || forms.formAdvanced.$submitted) && forms.formAdvanced.faxdetect.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.formAdvanced.faxdetect.$touched || forms.formAdvanced.$submitted) && forms.formAdvanced.faxdetect.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_PATTERN_FAXDETECT\' | translate}}.\n </span>\n </div>\n <!-- END FAXDETECT -->\n\n <!-- START T38TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formAdvanced.$submitted || forms.formAdvanced.t38timeout.$touched) && forms.formAdvanced.t38timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_T38TIMEOUT\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="number" name="t38timeout" placeholder="{{\'APPLICATION_T38TIMEOUT\' | translate}}" class="form-control" data-ng-model="item.t38timeout" required min="1000"/>\n <span class="help-block">\n {{\'DESCRIPTION_T38TIMEOUT\' | translate}}.\n </span>\n <span data-ng-show="(forms.formAdvanced.t38timeout.$touched || forms.formAdvanced.$submitted) && forms.formAdvanced.t38timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.formAdvanced.t38timeout.$touched || forms.formAdvanced.$submitted) && forms.formAdvanced.t38timeout.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_T38TIMEOUT\' | translate}}.\n </span>\n </div>\n <!-- END T38TIMEOUT -->\n\n <!-- START TECH -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formAdvanced.$submitted || forms.formAdvanced.tech.$touched) && forms.formAdvanced.tech.$invalid}">\n <label class="control-label">{{\'APPLICATION_TECHNOLOGY\' | translate}} <span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="item.tech" name="tech" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_TECHNOLOGY\' | translate}}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="tech in techs | filter: $select.search">\n <div data-ng-bind="tech | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.formAdvanced.tech.$touched || forms.formAdvanced.$submitted) && forms.formAdvanced.tech.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- START TECH -->\n\n <button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" data-ng-click="next()"/>\n\n </form>\n </wz-step>\n\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n <input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n </wz-step>\n\n </wizard>\n\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/fax/inbox/message/info.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_INFO\' | translate }}</h3>\n</div>\n<div class="modal-body" data-ng-init="initInfo()">\n <div class="form-group" ng-if="data">\n <json-formatter json="data" open="1"></json-formatter>\n </div>\n <div class="note note-warning" data-ng-hide="data">\n <h4 class="block"></h4>\n <p>\n {{ \'MESSAGE_NO_INFO_AVAILABLE\' | translate }}\n </p>\n </div>\n\n</div>\n<div class="modal-footer">\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CLOSE\' | translate }}</button>\n</div>\n'),a.put("app/channels/fax/inbox/message/message.directive.html",'<div class="message">\n <div class="row">\n <div class="col-md-6">\n <span class="bold">From: </span>\n [<a href="" data-ng-click="openContact(message.from)">{{message.from}}</a>]\n <br>\n <span class="bold">To: </span>\n [<a href="" data-ng-click="openContact(message.to)">{{message.to}}</a>]\n </div>\n <div class="col-md-6">\n <span class="pull-right">\n <a ng-click="info(message)"><i class="icon-info font-blue"></i></a>\n </span>\n <span class="pull-right" data-ng-show="message.User">{{\'APPLICATION_SENT_BY\' | translate}}: <strong>{{message.User.fullname}}</strong></span>\n </div>\n </div>\n <br>\n <span class="todo-tasklist-date">\n <span class="pull-right" data-ng-if="message.status!==\'RECEIVED\'" data-ng-switch="message.status" uib-tooltip="{{\'APPLICATION_PAGE_TRANSFERRED\' | translate}}: {{message.pagestransferred}} - {{\'APPLICATION_RETRY\' | translate}}: {{message.retry}}">\n <a ng-switch-when="SENDING" href="#" class="btn default btn-xs inactive-link blue-stripe"> {{message.status | uppercase}}\n <i class="fa fa-warning"></i>\n </a>\n <a ng-switch-when="FAILED" href="#" class="btn default btn-xs red-stripe" data-ng-click="retry(message.id)"> {{message.status | uppercase}}\n <i class="fa fa-times"></i>\n </a>\n <a ng-switch-when="SENT" href="#" class="btn default btn-xs inactive-link green-stripe"> {{message.status | uppercase}}\n <i class="fa fa-check"></i>\n </a>\n </span>\n <span class="pull-right" data-ng-if="message.status===\'RECEIVED\'" uib-tooltip="{{\'APPLICATION_PAGE_TRANSFERRED\' | translate}}: {{message.pagestransferred}}">\n <a href="#" class="btn default btn-xs inactive-link green-stripe"> {{message.status | uppercase}}\n <i class="fa fa-check"></i>\n </a>\n </span>\n <i class="icon-calendar"></i> <span am-time-ago="message.updatedAt"></span>\n </span>\n <hr data-ng-if="message.FaxAttachments.length">\n <div data-ng-repeat="faxAttachment in message.FaxAttachments">\n <strong>{{faxAttachment.name}}</strong>\n <a target="_self" download="{{faxAttachment.name}}" href="api/fax/attachments/{{faxAttachment.id}}">\n <i class="icon-cloud-download"></i>\n </a>\n </div>\n</div>\n'),a.put("app/channels/fax/inbox/note/note.directive.html",'<div class="note">\n <div class="row">\n <div class="col-md-6">\n <a type="button" name="button" data-ng-if="::(Auth.getCurrentUser().id == message.UserId)" data-ng-click="deleteNote()">\n <i class="fa fa-trash-o" style="color: red;"></i>\n </a>\n\n <i class="icon-calendar"></i> <span am-time-ago="message.updatedAt"></span>\n </div>\n <div class="col-md-6">\n <span class="pull-right" data-ng-show="message.User">{{\'APPLICATION_ADD_BY\' | translate}}: <strong>{{message.User.fullname}}</strong></span>\n </div>\n </div>\n <hr>\n <span class="body text-left" data-ng-bind-html="message.text" style="white-space: pre-wrap;"></span>\n</div>\n'),a.put("app/channels/fax/inbox/note/note.modal.html",'<div class="modal-header" data-ng-init="initModal()">\n <h3 class="modal-title">{{ \'APPLICATION_NOTES\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n <div class="form-group">\n <textarea data-ng-model="item.text" name="text" rows="10" style="resize: none; width: 100%;"></textarea>\n </div>\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" data-ng-click="ok()">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" data-ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/fax/inbox/room/room.directive.html",'<!-- BEGIN TODO CONTENT -->\n<div class="todo-content" data-ng-init="initForm();">\n <div class="portlet light">\n <div class="portlet-title">\n <div class="caption">\n <button data-ng-if="(!forms.compose.from.$invalid && !forms.compose.to.$invalid && uploader.queue.length) && faxRoom.status !== \'CLOSED\'" class="btn btn-sm btn-default green-meadow" data-ng-click="sendFax()">\n <i class="icon-paper-plane" style="color: white;"></i> {{\'APPLICATION_SEND\' | translate}}\n </button>\n <span data-ng-if="(!forms.compose.from.$invalid && !forms.compose.to.$invalid && uploader.queue.length) && faxRoom && faxRoom.status !== \'CLOSED\'"> | </span>\n <span data-ng-if="faxRoom" class="label label-default"> #{{faxRoom.id}} {{faxRoom.status}}</span>\n <span data-ng-if="faxRoom"> | </span>\n <span data-ng-if="faxRoom" class="caption-subject font-green-sharp bold">{{faxRoom.contact}}</span>\n </div>\n <div class="actions" data-ng-switch="faxRoom.status">\n <button class="btn btn-icon-only yellow" data-ng-if="faxRoom" data-ng-click="loadNote()" data-ng-hide="faxRoom.status == \'CLOSED\'" title="{{\'APPLICATION_NOTES\' | translate}}">\n <i class="fa fa-sticky-note"></i>\n </button>\n <button class="file-upload" data-ng-hide="faxRoom.status == \'CLOSED\'">\n <i class="fa fa-paperclip"></i> <input type="file" data-ng-if="uploader" data-ng-hide="faxRoom.status == \'CLOSED\'" nv-file-select uploader="uploader" multiple class="file-input" title="{{\'APPLICATION_ATTACHMENTS\' | translate}}">\n </button>\n <!-- UPDATE SECTION START -->\n <button data-ng-class="faxRoom.status == \'CLOSED\' ? \'grey-cascade\' : \'btn-success\'" class="btn btn-icon-only" data-ng-hide="faxRoom.status == \'CLOSED\' && faxRoom.disposition" data-ng-if="faxRoom" data-ng-click="closeRoom()" title="{{\'APPLICATION_STATUS\' | translate}}">\n <i data-ng-class="faxRoom.status == \'CLOSED\' ? \'icon-target\' : \'fa fa-upload\'"></i>\n </button>\n <!-- UPDATE SECTION END -->\n <button class="btn default btn-icon-only" data-ng-if="faxRoom && faxRoom.status !== \'CLOSED\'" data-ng-click="togglePanelLeft()" title="{{\'APPLICATION_RESIZE\' | translate}}">\n <i ng-class="panelRight == \'col-md-12\' ? \'icon-size-actual\' : \'icon-size-fullscreen\'"></i>\n </button>\n </div>\n </div>\n <div class="portlet-body">\n <div class="row">\n <div data-ng-show="panelLeft" data-ng-class="panelLeft">\n <div class="form">\n <!-- START TAGS -->\n <div class="form-group" data-ng-if="faxRoom.status !== \'CLOSED\'">\n <div class="row">\n <div class="col-md-1">\n <a href="#" class="btn btn-icon-only">\n <i class="fa fa-tags" style="color: gray;"></i>\n </a>\n </div>\n <div class="col-md-11">\n <ui-select multiple data-ng-model="form.tags" theme="bootstrap" on-select="onChanged($item, $model)" on-remove="onChanged($item, $model)" data-ng-disabled="faxRoom.status == \'CLOSED\'">\n <ui-select-match placeholder="Tags...">{{$item}}</ui-select-match>\n <ui-select-choices repeat="tag in tags | filter:$select.search" class="">\n {{tag}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n </div>\n <!-- END TAGS -->\n </div>\n\n <hr data-ng-if="faxRoom && faxRoom.status !== \'CLOSED\'">\n\n <!-- END TAGS -->\n\n <div id="mail-box">\n <ul class="chats">\n <li\n data-ng-switch="faxMessage.status"\n data-ng-class="{\'in\': faxMessage.status == \'RECEIVED\', \'out\': faxMessage.status == \'SENT\' || faxMessage.status == \'SENDING\' || faxMessage.status == \'FAILED\' || faxMessage.status == \'NOTE\'}"\n data-ng-repeat="faxMessage in faxRoom.FaxMessages | orderBy:\'-createdAt\'">\n <div class="avatar" data-ng-class="faxMessage.UserId ? \'pretty-avatar\' : \'pretty-avatar-v\'">\n <ng-letter-avatar\n data-ng-if="faxMessage.UserId"\n height="40"\n width="40"\n fontsize="25"\n data="{{faxMessage.User.fullname}}"\n avatarcustombgcolor="#B0B0B0"\n avatarcustomborder="border:2px solid #3399CC"\n charCount="2"\n shape="round"></ng-letter-avatar>\n <ng-letter-avatar\n data-ng-if="!faxMessage.UserId"\n height="40"\n width="40"\n fontsize="25"\n data="{{faxMessage.from}}"\n avatarcustombgcolor="#B0B0B0"\n avatarcustomborder="border:2px solid #EA4C61"\n charCount="1"\n shape="round"></ng-letter-avatar>\n </div>\n <fax-note message="faxMessage" ng-switch-when="NOTE"></fax-note>\n <fax-message message="faxMessage" list-id="faxRoom.FaxAccount.ListId" ng-switch-default></fax-message>\n </li>\n </ul>\n </div>\n </div>\n <div data-ng-class="panelRight">\n <div class="note note-info" data-ng-if="faxRoom && faxRoom.status == \'CLOSED\'">\n <h4 class="block"><i class="icon-info"></i> {{\'MESSAGE_FAX_ROOM_CLOSED\' | translate}}!</h4>\n <p>\n <strong>{{\'MESSAGE_FAX_ROOM_CLOSED_DETAILS\' | translate}}.</strong>\n </p>\n <hr>\n <p>\n <i class="icon-target"></i> {{\'APPLICATION_DISPOSITION\' | translate}}: <strong>{{faxRoom.disposition}}</strong>\n </p>\n <p>\n <i class="icon-calendar"></i> {{\'APPLICATION_UPDATED_AT\' | translate}}: <strong>{{faxRoom.updatedAt | date:\'medium\'}}</strong> (<span am-time-ago="faxRoom.updatedAt"></span>)\n </p>\n </div>\n <form name="forms.compose" data-ng-submit="sendFax()" class="form-horizontal" novalidate>\n\n <!-- START HEAD -->\n <div class="form">\n\n <v-accordion class="vAccordion--default" ng-if="faxRoom.status !== \'CLOSED\'">\n <v-pane expanded="expanded">\n <v-pane-header>\n <i class="icon-people"></i> From: {{form.from}}, To: {{form.to[0].fax}}\n </v-pane-header>\n <v-pane-content>\n <!-- START FROM -->\n <div class="form-group" data-ng-if="faxRoom.status !== \'CLOSED\'" data-ng-class="{\'has-error\': forms.compose.from.$invalid}">\n <div class="col-md-12">\n <div class="row">\n <div class="col-md-1">\n <label class="control-label">From:</label>\n </div>\n <div class="col-md-11">\n <ui-select data-ng-model="form.from" data-ng-change="setList($select.selected.ListId)" theme="bootstrap" name="from" required>\n <ui-select-match placeholder="From...">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="faxAccount.localstationid as faxAccount in faxAccounts | filter: $select.search">\n <div data-ng-bind-html="faxAccount.name | highlight: $select.search"></div>\n <small data-ng-bind-html="faxAccount.localstationid | highlight: $select.search"></small>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.compose.from.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n </div>\n </div>\n <!-- END FROM -->\n\n <!-- START TO -->\n <div class="form-group" data-ng-if="faxRoom.status !== \'CLOSED\'" data-ng-class="{\'has-error\': forms.compose.to.$invalid}">\n <div class="col-md-12">\n <div class="row">\n <div class="col-md-1">\n <label class="control-label">To:</label>\n </div>\n <div class="col-md-11">\n <tags-input name="to" ng-model="form.to" type="text" display-property="fax" max-tags="1" min-tags="1">\n <auto-complete source="getContacts($query)"></auto-complete>\n </tags-input>\n <span data-ng-show="forms.compose.to.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_TO_LIMIT\' | translate}}.\n </span>\n </div>\n </div>\n </div>\n </div>\n <!-- END TO -->\n\n </v-pane-content>\n </v-pane>\n </v-accordion>\n\n <!-- START ATTACH -->\n <div class="form-group" data-ng-if="uploader && (faxRoom.status !== \'CLOSED\')">\n <div class="col-md-12">\n <hr ng-if="uploader.queue.length">\n <table class="table">\n <tbody>\n <tr ng-repeat="item in uploader.queue">\n <td style="border-top:none"><strong>{{ item.file.name | truncate: 5: \'...\': true}}</strong></td>\n <td style="border-top:none" ng-show="uploader.isHTML5" nowrap>{{ item.file.size/1024/1024|number:2 }} MB</td>\n <td style="border-top:none" ng-show="uploader.isHTML5">\n <div class="progress" style="margin-bottom: 0;">\n <div class="progress-bar" role="progressbar" ng-style="{ \'width\': item.progress + \'%\' }"></div>\n </div>\n </td>\n <td style="border-top-style:none" class="text-center">\n <span ng-show="item.isSuccess"><i class="glyphicon glyphicon-ok"></i></span>\n <span ng-show="item.isCancel"><i class="glyphicon glyphicon-ban-circle"></i></span>\n <span ng-show="item.isError"><i class="glyphicon glyphicon-remove"></i></span>\n </td>\n <td style="border-top-style:none" nowrap>\n <button type="button" class="btn btn-danger btn-xs" data-ng-click="item.remove()">\n <span class="glyphicon glyphicon-trash"></span> {{\'APPLICATION_REMOVE\' | translate}}\n </button>\n </td>\n </tr>\n </tbody>\n </table>\n <div>\n </div>\n </div>\n </div>\n <!-- END ATTACH -->\n\n </div>\n </form>\n </div>\n </div>\n </div>\n </div>\n</div>\n<!-- END TODO CONTENT -->\n'), +a.put("app/channels/fax/inbox/status/status.modal.html",'<div class="modal-header">\n <button data-ng-if="modal.dismissable" type="button" data-ng-click="$dismiss()" class="close">×</button>\n <h4 data-ng-if="modal.title" data-ng-bind="modal.title | translate" class="modal-title"></h4>\n</div>\n<div class="modal-body">\n <p data-ng-if="modal.text && !closed" ng-bind="modal.text | translate"></p>\n <form name="form" novalidate data-ng-init="initDisposition()">\n <div class="form-group">\n <ui-select data-ng-model="item.disposition" name="disposition" theme="bootstrap" data-ng-disabled="!dispositions.length" required>\n <ui-select-match placeholder="{{\'APPLICATION_DISPOSITION\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="disposition.name as disposition in dispositions | filter: $select.search">\n <div ng-bind-html="disposition.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <div class="note note-warning" data-ng-if="dispositions.length < 1">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_DISPOSITIONS_AVAILABLE\' | translate }}\n </p>\n </div>\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" data-ng-click="ok()">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" data-ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/fax/inbox/view/account/list/list.html",'<!-- BEGIN Portlet PORTLET-->\n<div class="portlet light" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption">\n <div class="btn-group btn-group-solid">\n <button type="button" class="btn btn-sm default" data-ng-model="query.status" uib-btn-radio="\'NEW\'" uib-uncheckable>NEW</button>\n </div>\n <div class="btn-group btn-group-solid">\n <button type="button" class="btn btn-sm default" data-ng-model="query.status" uib-btn-radio="\'OPEN\'" uib-uncheckable>OPEN</button>\n </div>\n <div class="btn-group btn-group-solid">\n <button type="button" class="btn btn-sm default" data-ng-model="query.status" uib-btn-radio="\'PENDING\'" uib-uncheckable>PENDING</button>\n </div>\n <div class="btn-group btn-group-solid">\n <button type="button" class="btn btn-sm default" data-ng-model="query.status" uib-btn-radio="\'CLOSED\'" uib-uncheckable>CLOSED</button>\n </div>\n </div>\n <div class="actions">\n <a href="#" class="btn btn-icon-only default" data-ng-click="getPage();">\n <i class="fa fa-refresh"></i>\n </a>\n <a href="#" class="btn btn-icon-only red" data-ng-click="deleteItems();" data-ng-show="id.length && isAdmin">\n <i class="fa fa-trash"></i>\n </a>\n <a href="#" class="btn btn-icon-only btn-success" data-ng-click="disposeItems();" data-ng-show="id.length">\n <i class="fa fa-upload"></i>\n </a>\n <a href="#" class="btn btn-icon-only blue" data-ng-click="tagItems();" data-ng-show="id.length">\n <i class="fa fa-tags"></i>\n </a>\n <a href="#" class="btn btn-icon-only green" data-ng-click="openRoom(null, \'New Message\')">\n <i class="fa fa-plus"></i>\n </a>\n </div>\n </div>\n <div class="portlet-title" data-ng-show="tags.length">\n <!-- START TAGS -->\n <div class="form-group">\n <div class="row">\n <div class="col-md-1">\n <a href="#" class="btn btn-icon-only">\n <i class="fa fa-tags" style="color: gray;"></i>\n </a>\n </div>\n <div class="col-md-11">\n <ui-select multiple data-ng-model="query.tags" theme="bootstrap" on-select="onChanged($item, $model)" on-remove="onChanged($item, $model)">\n <ui-select-match placeholder="Search by tag...">{{$item}}</ui-select-match>\n <ui-select-choices repeat="tag in tags | filter:$select.search">\n {{tag}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n </div>\n <!-- END TAGS -->\n </div>\n <div class="portlet-body">\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="spinner-grid" spinner-start-active="false"></span>\n <!-- END UI-GRID SPINNER -->\n\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-pagination ui-grid-selection ui-grid-exporter class="ui-grid-inbox">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n</div>\n<!-- END Portlet PORTLET-->\n'),a.put("app/channels/fax/inbox/view/view.agents.modal.html",'<div class="modal-header" data-ng-init="initModal()">\n <h3 class="modal-title">{{ \'APPLICATION_AGENTS\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <!-- START TRANSPORT -->\n <div class="form-group">\n <form name="form" novalidate>\n <!-- START TRANSPORT -->\n <div class="form-group">\n <ui-select multiple name="agents" data-ng-model="item.agents" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_AGENTS\' | translate}}">{{$item.fullname}}</ui-select-match>\n <ui-select-choices repeat="agent.id as agent in agents | filter: $select.search">\n {{agent.fullname}}\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="agents">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_AGENTS_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/staff/agents/list">{{\'APPLICATION_AGENTS\' | translate}}</a>\n </p>\n </div>\n </div>\n <!-- END TRANSPORT -->\n </form>\n </div>\n <!-- END TRANSPORT -->\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" data-ng-click="ok()">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" data-ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/fax/inbox/view/view.html",'<div class="row">\r\n <div class="col-md-12">\r\n <div class="page-bar">\r\n <ul class="page-breadcrumb">\r\n <li>\r\n <i class="icon-rocket"></i>\r\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\r\n <i class="fa fa-angle-right"></i>\r\n </li>\r\n <li>\r\n <i class="fa fa-spinner"></i>\r\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\r\n <i class="fa fa-angle-right"></i>\r\n </li>\r\n <li>\r\n <i class="fa fa-fax"></i>\r\n <a href="#">{{ \'APPLICATION_FAX\' | translate }}</a>\r\n <i class="fa fa-angle-right"></i>\r\n </li>\r\n <li>\r\n <i class="icon-note"></i>\r\n <a href="#">{{ \'APPLICATION_INBOX\' | translate }}</a>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- BEGIN PAGE CONTENT-->\r\n<div class="row inbox">\r\n <div class="col-md-3">\r\n <ul class="inbox-nav margin-bottom-10">\r\n <li data-ng-class="{active: $stateParams.id == faxAccount.id}" data-ng-repeat="faxAccount in faxAccounts">\r\n <a href="/channels/fax/inbox/view/account/{{faxAccount.id}}/list" class="btn">\r\n <i class="icon-notebook"></i> {{faxAccount.name}}\r\n </a>\r\n <b></b>\r\n </li>\r\n </ul>\r\n <div class="note note-warning" data-ng-hide="faxAccounts.length">\r\n <h4 class="block">Warning!</h4>\r\n <p>\r\n {{ \'MESSAGE_NO_AVAILABLE_ACCOUNTS\' | translate }}\r\n </p>\r\n <p>\r\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/channels/fax/accounts/list">{{\'APPLICATION_ACCOUNTS\' | translate}}</a>\r\n </p>\r\n </div>\r\n </div>\r\n\r\n <div class="col-md-9" data-ng-init="initView()">\r\n <!-- BEGIN PROFILE CONTENT -->\r\n <div class="room-content">\r\n <div ui-view>\r\n <div class="note note-info">\r\n <h4 class="block">Info! {{\'APPLICATION_NO_ACCOUNT_SELECTED\' | translate}}</h4>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- END PROFILE CONTENT -->\r\n </div>\r\n</div>\r\n'),a.put("app/channels/fax/inbox/view/view.status.modal.html",'<div class="modal-header" data-ng-init="initModal()">\n <h3 class="modal-title">{{ modal.title | translate }}</h3>\n</div>\n<div class="modal-body">\n <p data-ng-if="modal.text" data-ng-bind="modal.text"></p>\n <div data-ng-if="modal.html" data-ng-bind-html="modal.html"></div>\n</div>\n<div class="modal-footer">\n <button data-ng-repeat="button in modal.buttons"\n data-ng-class="button.classes"\n data-ng-click="button.click($event)"\n data-ng-bind="button.text | translate" class="btn"></button>\n</div>\n'),a.put("app/channels/fax/inbox/view/view.tags.modal.html",'<div class="modal-header" data-ng-init="initModal()">\n <h3 class="modal-title">{{ \'APPLICATION_TAGS\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <!-- START TRANSPORT -->\n <div class="form-group">\n <form name="form" novalidate>\n <!-- START TAGS -->\n <div class="form-group">\n <ui-select multiple data-ng-model="item.tags" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_TAGS\' | translate}}">{{$item}}</ui-select-match>\n <ui-select-choices repeat="tag in tags | filter: $select.search">\n {{tag}}\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END TAGS -->\n </form>\n </div>\n <!-- END TRANSPORT -->\n</div>\n<div class="modal-footer">\n <button type="button" class="btn" data-ng-class="button.class" data-ng-click="button.click()"data-ng-repeat="button in modal.buttons">{{button.text | translate}}</button>\n <!-- <button class="btn btn-success" type="button" data-ng-click="ok()">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" data-ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button> -->\n</div>\n'),a.put("app/channels/fax/queue/list/list.create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_QUEUE\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.name.$touched || form.$submitted) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" data-ng-pattern="settings.patternName" required />\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$invalid && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$invalid && form.name.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_PATTERN_NAME\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START STRATEGY -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.strategy.$touched || form.$submitted) && form.strategy.$invalid}">\n <label class="control-label">{{\'APPLICATION_STRATEGY\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="item.strategy" name="strategy" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected | uppercase}}</ui-select-match>\n <ui-select-choices repeat="strategy in strategies | filter: $select.search">\n <div ng-bind-html="strategy | uppercase | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form.strategy.$touched || form.$submitted) && form.strategy.$invalid && form.strategy.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END STRATEGY -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.timeout.$touched || form.$submitted) && form.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_AGENT_TIMEOUT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" name="timeout" placeholder="Timeout" class="form-control" data-ng-model="item.timeout" required min="1"/>\n <span data-ng-show="(form.timeout.$touched || form.$submitted) && form.timeout.$invalid && form.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n\n <!-- START AGENTS-->\n <div class="form-body" data-ng-init="getTeams()">\n <label for="penalty">{{\'APPLICATION_PENALTY\' | translate}}</label>\n <div class="input-group input-small mbottom20">\n <input type="number" class="spinner-input form-control" maxlength="3" data-ng-model="item.penalty" readonly>\n <div class="spinner-buttons input-group-btn btn-group-vertical">\n <button type="button" class="btn spinner-up btn-xs blue" data-ng-click="item.penalty=item.penalty+1">\n <i class="fa fa-angle-up"></i>\n </button>\n <button type="button" class="btn spinner-down btn-xs blue" data-ng-disabled="!item.penalty" data-ng-click="item.penalty=item.penalty-1">\n <i class="fa fa-angle-down"></i>\n </button>\n </div>\n </div>\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-team">\n </div>\n </div>\n </div>\n <!-- END AGENTS-->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/fax/queue/list/list.html",'<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-fax"></i>\n <a href="#">{{ \'APPLICATION_FAX\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-docs"></i>\n <a href="/channels/fax/queues/lis">{{ \'APPLICATION_QUEUES\' | translate }}</a>\n </li>\n </ul>\n </div>\n </div>\n</div>\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-docs font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_QUEUES\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <a class="btn green-jungle" href="#" data-ng-click="createItem()" data-ng-if="Auth.isAdmin()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_QUEUE\' | translate }}\n </a>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/fax/queue/view/view.agents.html",'<div class="row" data-ng-init="getTeams()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_AGENTS\' | translate}}</span>\n </div>\n </div>\n <div class="portlet-body">\n <!-- BEGIN FORM-->\n <form action="index.html" class="form-horizontal form-row-seperated">\n <div class="form-body">\n <label for="penalty">{{\'APPLICATION_PENALTY\' | translate}}</label>\n <div class="input-group input-small mbottom20">\n <input type="number" class="spinner-input form-control" maxlength="3" data-ng-model="queue.penalty" readonly>\n <div class="spinner-buttons input-group-btn btn-group-vertical">\n <button type="button" class="btn spinner-up btn-xs blue" data-ng-click="queue.penalty=queue.penalty+1">\n <i class="fa fa-angle-up"></i>\n </button>\n <button type="button" class="btn spinner-down btn-xs blue" data-ng-disabled="!queue.penalty" data-ng-click="queue.penalty=queue.penalty-1">\n <i class="fa fa-angle-down"></i>\n </button>\n </div>\n </div>\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-team">\n </div>\n </div>\n </div>\n </form>\n <!-- END FORM-->\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/fax/queue/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getQueue()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-fax"></i>\n <a href="#">{{ \'APPLICATION_FAX\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-docs"></i>\n <a href="/channels/fax/queues/list">{{ \'APPLICATION_QUEUES\' | translate }}</a>\n <i data-ng-show="queue" class="fa fa-angle-right"></i>\n </li>\n <li data-ng-show="queue">\n <a href="#">{{queue.name}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/queue.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{queue.name}}\n </div>\n <!-- <div class="profile-usertitle-job">\n {{user.role}}\n </div> -->\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.channels.fax.queues.view.settings\')}">\n <a data-ng-href="/channels/fax/queues/view/{{queue.id}}/settings">\n <i class="icon-settings"></i>\n {{ \'APPLICATION_SETTINGS\' | translate}} </a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.channels.fax.queues.view.agents\')}" data-ng-show="Auth.getCurrentUser().role === \'admin\'">\n <a data-ng-href="/channels/fax/queues/view/{{queue.id}}/agents">\n <i class="icon-people"></i>\n {{ \'APPLICATION_AGENTS\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/fax/queue/view/view.settings.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_SETTINGS\' | translate}}</span>\n </div>\n </div>\n <div class="portlet-body">\n <form name="forms.general" data-ng-submit="forms.general.$valid && updateFaxQueue()" novalidate>\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="queue.name" data-ng-pattern="settings.patternName" required />\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid && forms.general.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid && forms.general.name.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_PATTERN_NAME\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START STRATEGY -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.strategy.$touched || forms.general.$submitted) && forms.general.strategy.$invalid}">\n <label class="control-label">{{\'APPLICATION_STRATEGY\' | translate}}</label>\n <ui-select data-ng-model="queue.strategy" name="strategy" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected | uppercase}}</ui-select-match>\n <ui-select-choices repeat="strategy in strategies | filter: $select.search">\n <div ng-bind-html="strategy | uppercase | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END STRATEGY -->\n\n <!-- START TIMEOUT -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}}</label>\n <input type="number" name="timeout" placeholder="{{\'APPLICATION_TIMEOUT\' | translate}}" class="form-control" min="1" data-ng-model="queue.timeout"/>\n </div>\n <!-- END TIMEOUT -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="queue.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n <input data-ng-if="Auth.isAdmin()" class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/fax/realtime/view/agent/agent.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initAgents()">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns class="ui-grid" ui-grid-tree-view ui-grid-expandable-row ui-grid-pagination ui-grid-auto-resize>\n <span us-spinner spinner-key="grid-spinner" spinner-start-active="true"></span>\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/fax/realtime/view/agent/agent.modal.info.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_INTERFACE_INFO\' | translate }}</h3>\n</div>\n<div class="modal-body">\n<div data-ng-if="agent.ipaddr" class="well">\n <div>{{agent.ipaddr}}:{{agent.port}}</div>\n <div>{{agent.fullcontact}}</div>\n <div>{{agent.useragent}}</div>\n <div>{{agent.lastms}}</div>\n</div>\n<div data-ng-if="!agent.ipaddr" class="alert alert-danger" role="alert">\n {{\'MESSAGE_NO_AVAILABLE_INFO\' | translate}}\n</div>\n</div>\n<div class="modal-footer">\n <button class="btn default" type="button" ng-click="close()">{{ \'APPLICATION_CLOSE\' | translate }}</button>\n</div>\n'),a.put("app/channels/fax/realtime/view/agent/queue.modal.add.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_JOIN_QUEUE\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <div class="form-group row">\n <label class="col-md-2 control-label" style="margin-top: 7px;">{{\'APPLICATION_QUEUE\' | translate}}:</label>\n <div class="col-md-10">\n <ui-select multiple ng-model="item.queues" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_QUEUE\' | translate}}">{{$item.name}}</ui-select-match>\n <ui-select-choices repeat="queue.id as queue in queues | filter: $select.search">\n <div ng-bind-html="queue.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n</div>\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/fax/realtime/view/application/application.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initApplications()">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns class="ui-grid" ui-grid-auto-resize>\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/fax/realtime/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-fax"></i>\n <a href="#">{{ \'APPLICATION_FAX\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-energy"></i>\n <a href="#">{{ \'APPLICATION_REALTIME\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <div>\n <nav class="navbar navbar-default" role="navigation">\n <div class="collapse navbar-collapse">\n <ul class="nav navbar-nav">\n <li data-ng-class="{\'active\': $state.is(\'main.channels.fax.realtime.view.agents\')}">\n <a href="/channels/fax/realtime/view/agents">\n {{\'APPLICATION_AGENTS\' | translate}}\n </a>\n </li>\n <li data-ng-class="{\'active\': $state.is(\'main.channels.fax.realtime.view.applications\')}">\n <a href="/channels/fax/realtime/view/applications">\n {{\'APPLICATION_APPLICATIONS\' | translate}}\n </a>\n </li>\n </ul>\n </div>\n </nav>\n </div>\n\n <div ui-view></div>\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/mail/account/list/list.html",'<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-envelope"></i>\n <a href="#">{{ \'APPLICATION_MAIL\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-notebook"></i>\n <a href="#">{{ \'APPLICATION_ACCOUNTS\' | translate }}</a>\n </li>\n </ul>\n </div>\n </div>\n</div>\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-notebook font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_ACCOUNTS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group">\n <a class="btn btn-default" href="#" data-ng-click="gridOptions.getPage();">\n <i class="icon-reload"></i>\n </a>\n </div>\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <a class="btn green-jungle" href="/channels/mail/accounts/wizard">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_ACCOUNT\' | translate }}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/mail/account/view/action/list/list.html",'<div class="row" data-ng-init="initActons()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_ACTIONS\' | translate}}</span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <a class="btn green-jungle" href="/channels/mail/accounts/view/{{account.id}}/actions/wizard" data-toggle="dropdown">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_ACTION\' | translate }}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n </div>\n</div>\n'), +a.put("app/channels/mail/account/view/action/view/view.html",'\n<div class="row" data-ng-init="initAction()">\n <div class="col-md-12">\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-directions font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_ACTION\' | translate }}</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <form name="forms.settings" ng-submit="updateItem()" novalidate>\n <!-- START APP -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.app.$touched || forms.settings.$submitted) && forms.settings.app.$invalid}">\n <label class="control-label">{{ \'APPLICATION_APPLICATION\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.app" name="app" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_APPLICATION\' | translate }}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="app.value as app in apps | filter: $select.search">\n <div ng-bind-html="app.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.app.$touched || forms.settings.$submitted) && forms.settings.app.$invalid && forms.settings.app.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END APP -->\n\n <div class="app-settings" ng-slide-down="application.app === \'queue\'" lazy-render duration="1" data-ng-init="getQueues()">\n <!-- START QUEUE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.queue.$touched || forms.settings.$submitted) && forms.settings.queue.$invalid}">\n <label class="control-label">{{\'APPLICATION_QUEUE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.MailQueueId" name="queue" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="queue.id as queue in queues | filter: $select.search">\n <div ng-bind-html="queue.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="queues.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_QUEUES_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/channels/mail/queues/list">{{\'APPLICATION_QUEUES\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.settings.queue.$touched || forms.settings.$submitted) && forms.settings.queue.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END QUEUE -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="number" name="timeout" placeholder="{{\'APPLICATION_TIMEOUT\' | translate}}" class="form-control" data-ng-model="application.timeout" min="1" required/>\n <span data-ng-show="(forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid && forms.settings.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.app === \'agent\'" lazy-render duration="1" data-ng-init="getAgents()">\n <!-- START AGENT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.agent.$touched || forms.settings.$submitted) && forms.settings.agent.$invalid}">\n <label class="control-label">{{\'APPLICATION_AGENT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.UserId" name="agent" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.fullname}}</ui-select-match>\n <ui-select-choices repeat="agent.id as agent in agents | filter: $select.search">\n <div ng-bind-html="agent.fullname | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="agents.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_AGENTS_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/staff/agents/list">{{\'APPLICATION_AGENTS\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.settings.agent.$touched || forms.settings.$submitted) && forms.settings.agent.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END AGENT -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="number" name="timeout" placeholder="{{\'APPLICATION_TIMEOUT\' | translate}}" class="form-control" data-ng-model="application.timeout" min="1" required/>\n <span data-ng-show="(forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid && forms.settings.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.app === \'sendMail\'" lazy-render duration="1" data-ng-init="getMailAccounts();getTemplates()">\n <!-- START SENDMAIL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.timeout.$touched || forms.action.$submitted) && forms.action.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TO\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="email" name="to" placeholder="{{\'APPLICATION_TO\' | translate}}" class="form-control" data-ng-model="application.data2" min="1" required/>\n <span data-ng-show="(forms.action.from.$touched || forms.action.$submitted) && forms.action.timeout.$invalid && forms.action.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.mail.$touched || forms.action.$submitted) && forms.action.account.$invalid}">\n <label class="control-label">{{\'APPLICATION_ACCOUNT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data8" name="account" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="account.id as account in mailAccounts | filter: $select.search">\n <div ng-bind-html="account.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.action.account.$touched || forms.action.$submitted) && forms.action.account.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.template.$touched || forms.action.$submitted) && forms.action.template.$invalid}">\n <label class="control-label">{{\'APPLICATION_TEMPLATE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data9" name="template" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="template.id as template in templates | filter: $select.search">\n <div ng-bind-html="template.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.action.template.$touched || forms.action.$submitted) && forms.action.template.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END SENDMAIL -->\n </div>\n\n\n <div class="app-settings" ng-slide-down="application.app === \'replyMail\'" lazy-render duration="1" data-ng-init="getMailAccounts();getTemplates()">\n <!-- START REPLYMAIL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.type.$touched || forms.action.$submitted) && forms.action.type.$invalid}">\n <label class="control-label">{{\'APPLICATION_TYPE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data1" name="type" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.key | translate }}</ui-select-match>\n <ui-select-choices repeat="type.value as type in types | filter: $select.search">\n <div ng-bind-html="type.key | translate | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.action.type.$touched || forms.action.$submitted) && forms.action.type.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.mail.$touched || forms.action.$submitted) && forms.action.account.$invalid}">\n <label class="control-label">{{\'APPLICATION_ACCOUNT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data8" name="account" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="account.id as account in mailAccounts | filter: $select.search">\n <div ng-bind-html="account.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.action.account.$touched || forms.action.$submitted) && forms.action.account.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.template.$touched || forms.action.$submitted) && forms.action.template.$invalid}">\n <label class="control-label">{{\'APPLICATION_TEMPLATE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data9" name="template" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="template.id as template in templates | filter: $select.search">\n <div ng-bind-html="template.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.action.template.$touched || forms.action.$submitted) && forms.action.template.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END REPLYMAIL -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.app === \'sendSms\'" lazy-render duration="1" data-ng-init="getSmsAccounts()">\n <!-- START SENDSms -->\n <div class="app-settings" ng-slide-down="application.app === \'sendSms\'" lazy-render duration="1">\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.to.$touched || forms.settings.$submitted) && forms.settings.to.$invalid}">\n <label class="control-label">{{\'APPLICATION_TO\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" ng-pattern="/^[\\+]?[0-9]+$/" name="to" placeholder="{{\'APPLICATION_TO\' | translate}}" class="form-control" data-ng-model="application.data2" required/>\n <span data-ng-show="(forms.settings.to.$touched || forms.settings.$submitted) && forms.settings.to.$invalid && forms.settings.to.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.account.$touched || forms.settings.$submitted) && forms.settings.account.$invalid}">\n <label class="control-label">{{\'APPLICATION_ACCOUNT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data8" name="account" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="account.id as account in smsAccounts | filter: $select.search">\n <div ng-bind-html="account.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.account.$touched || forms.settings.$submitted) && forms.settings.account.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.text.$touched || forms.text.$submitted) && forms.settings.text.$invalid}">\n <label class="control-label">{{\'APPLICATION_TEXT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <textarea id="text" class="form-control maxlength-handler" maxlength="160" name="text" data-ng-model="application.data6" required></textarea>\n <span data-ng-show="(forms.settings.text.$touched || forms.settings.$submitted) && forms.settings.text.$invalid && forms.settings.text.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n\n <!-- END SENDSms -->\n </div>\n\n <!-- START INTERVAL_TYPE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.intType.$touched || forms.settings.$submitted) && forms.settings.intType.$invalid}">\n <label class="control-label">{{ \'APPLICATION_INTERVAL_TYPE\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.intType" theme="bootstrap" name="intType" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="intType.value as intType in $application.intTypes | filter: $select.search">\n {{ intType.name | translate }}\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.intType.$touched || forms.settings.$submitted) && forms.settings.intType.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERVAL_TYPE -->\n\n <div class="app-settings" ng-slide-down="application.intType === \'custom\'" lazy-render duration="1">\n <!-- START TIME -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_TIME\' | translate }}</label>\n <div class="input-group input-large">\n <fieldset class="pull-left" ng-disabled="application.alwaysTime">\n <uib-timepicker name="t_from" data-ng-model="application.t_from" show-meridian="false" show-spinners="false" mousewheel="false"></uib-timepicker>\n </fieldset>\n <div class="input-group-addon col-md-1 interval-to pull-left">to</div>\n <fieldset ng-disabled="application.alwaysTime"><uib-timepicker name="t_to" data-ng-model="application.t_to" show-meridian="false" show-spinners="false" mousewheel="false"></uib-timepicker></fieldset>\n <!-- <label class="control-label pointer-cursor"><input type="checkbox" data-ng-model="application.alwaysTime">{{\'APPLICATION_ALWAYS\' | translate}}</label> -->\n </div>\n </div>\n <!-- END TIME -->\n\n <!-- START ALWAYS -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_ALWAYS\' | translate }}</label>\n <div class="input-group input-large">\n <label class="control-label pointer-cursor">\n <input\n bs-switch\n data-ng-model="application.alwaysTime"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n </label>\n </div>\n </div>\n <!-- END ALWAYS -->\n\n <!-- START WEEKDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_WEEKDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="application.wd_from" theme="bootstrap" name="wd_from">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{ weekDay.name | translate}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="application.wd_to" theme="bootstrap" name="wd_to">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{ weekDay.name | translate }}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END WEEKDAY -->\n\n <!-- START MONTHDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTHDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="application.md_from" theme="bootstrap" name="md_from">\n <ui-select-match allow-clear>{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search" ui-disable-choice="application.md_to && application.md_to!==\'always\' && monthDay>application.md_to && monthDay!==\'always\'">\n {{monthDay}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="application.md_to" theme="bootstrap" name="md_to">\n <ui-select-match allow-clear>{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search" ui-disable-choice="application.md_from && application.md_from!==\'always\' && monthDay<application.md_from && monthDay!==\'always\'">\n {{monthDay}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTHDAY -->\n\n <!-- START MONTH -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTH\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="application.m_from" theme="bootstrap" name="m_from">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{ month.name | translate }}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="application.m_to" theme="bootstrap" name="m_to">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{ month.name | translate }}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTH -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.intType === \'list\'" lazy-render duration="1" data-ng-init="getIntervals()">\n\n <!-- START INTERVALS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.IntervalId.$touched || forms.settings.$submitted) && forms.settings.IntervalId.$invalid}">\n <label class="control-label">{{\'APPLICATION_INTERVALS\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.IntervalId" theme="bootstrap" name="IntervalId" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{ $select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="interval.id as interval in intervals | filter: $select.search">\n {{ interval.name}}\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="intervals.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_INTERVAL_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/tools/intervals/list">{{\'APPLICATION_INTERVALS\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.settings.IntervalId.$touched || forms.settings.$submitted) && forms.settings.IntervalId.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERVALS -->\n\n </div>\n <button class="btn green-haze" type="submit">{{\'APPLICATION_UPDATE\' | translate}}</button>\n </form>\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/mail/account/view/action/wizard/wizard.html",'\n<div class="row" data-ng-init="initWizard()">\n <div class="col-md-12">\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-directions font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_ACTION\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="createItem()">\n <wz-step title="{{\'APPLICATION_APPLICATION\' | translate}}" canexit="formValidation(forms.action.$valid)">\n\n <form name="forms.action" novalidate>\n <!-- START APP -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.action.$submitted && forms.action.app.$invalid}">\n <label class="control-label">{{ \'APPLICATION_APPLICATION\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.app" name="app" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_APPLICATION\' | translate }}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="app.value as app in apps | filter: $select.search">\n <div ng-bind-html="app.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.action.$submitted && forms.action.app.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END APP -->\n\n <div class="app-settings" ng-slide-down="application.app === \'agent\'" lazy-render duration="1" data-ng-init="getAgents()">\n <!-- START AGENT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.agent.$touched || forms.action.$submitted) && forms.action.agent.$invalid}">\n <label class="control-label">{{\'APPLICATION_AGENT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.UserId" name="agent" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.fullname}}</ui-select-match>\n <ui-select-choices repeat="agent.id as agent in agents | filter: $select.search">\n <div ng-bind-html="agent.fullname | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="agents.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_AGENTS_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/staff/agents/list">{{\'APPLICATION_AGENTS\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.action.agent.$touched || forms.action.$submitted) && forms.action.agent.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END AGENT -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.timeout.$touched || forms.action.$submitted) && forms.action.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="number" name="timeout" placeholder="{{\'APPLICATION_TIMEOUT\' | translate}}" class="form-control" data-ng-model="application.timeout" min="1" required/>\n <span data-ng-show="(forms.action.timeout.$touched || forms.action.$submitted) && forms.action.timeout.$invalid && forms.action.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n\n </div>\n\n <div class="app-settings" ng-slide-down="application.app === \'queue\'" lazy-render duration="1" data-ng-init="getQueues()">\n <!-- START QUEUE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.queue.$touched || forms.action.$submitted) && forms.action.queue.$invalid}">\n <label class="control-label">{{\'APPLICATION_QUEUE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.MailQueueId" name="queue" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="queue.id as queue in queues | filter: $select.search">\n <div ng-bind-html="queue.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="queues.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_QUEUES_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/channels/mail/queues/list">{{\'APPLICATION_QUEUES\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.action.queue.$touched || forms.action.$submitted) && forms.action.queue.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END QUEUE -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.timeout.$touched || forms.action.$submitted) && forms.action.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="number" name="timeout" placeholder="{{\'APPLICATION_TIMEOUT\' | translate}}" class="form-control" data-ng-model="application.timeout" min="1" required/>\n <span data-ng-show="(forms.action.timeout.$touched || forms.action.$submitted) && forms.action.timeout.$invalid && forms.action.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.app === \'sendMail\'" lazy-render duration="1" data-ng-init="getMailAccounts();getTemplates()">\n <!-- START SENDMAIL -->\n <div class="app-settings" ng-slide-down="application.app === \'sendMail\'" lazy-render duration="1">\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.timeout.$touched || forms.action.$submitted) && forms.action.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TO\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="email" name="to" placeholder="{{\'APPLICATION_TO\' | translate}}" class="form-control" data-ng-model="application.data2" min="1" required/>\n <span data-ng-show="(forms.action.from.$touched || forms.action.$submitted) && forms.action.timeout.$invalid && forms.action.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.mail.$touched || forms.action.$submitted) && forms.action.account.$invalid}">\n <label class="control-label">{{\'APPLICATION_ACCOUNT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data8" name="account" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="account.id as account in mailAccounts | filter: $select.search">\n <div ng-bind-html="account.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.action.account.$touched || forms.action.$submitted) && forms.action.account.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.template.$touched || forms.action.$submitted) && forms.action.template.$invalid}">\n <label class="control-label">{{\'APPLICATION_TEMPLATE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data9" name="template" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="template.id as template in templates | filter: $select.search">\n <div ng-bind-html="template.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.action.template.$touched || forms.action.$submitted) && forms.action.template.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END SENDMAIL -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.app === \'replyMail\'" lazy-render duration="1" data-ng-init="getMailAccounts();getTemplates()">\n <!-- START REPLYMAIL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.type.$touched || forms.action.$submitted) && forms.action.type.$invalid}">\n <label class="control-label">{{\'APPLICATION_TYPE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data1" name="type" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.key | translate }}</ui-select-match>\n <ui-select-choices repeat="type.value as type in types | filter: $select.search">\n <div ng-bind-html="type.key | translate | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.action.type.$touched || forms.action.$submitted) && forms.action.type.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.mail.$touched || forms.action.$submitted) && forms.action.account.$invalid}">\n <label class="control-label">{{\'APPLICATION_ACCOUNT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data8" name="account" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="account.id as account in mailAccounts | filter: $select.search">\n <div ng-bind-html="account.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.action.account.$touched || forms.action.$submitted) && forms.action.account.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.template.$touched || forms.action.$submitted) && forms.action.template.$invalid}">\n <label class="control-label">{{\'APPLICATION_TEMPLATE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data9" name="template" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="template.id as template in templates | filter: $select.search">\n <div ng-bind-html="template.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.action.template.$touched || forms.action.$submitted) && forms.action.template.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END REPLYMAIL -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.app === \'sendSms\'" lazy-render duration="1" data-ng-init="getSmsAccounts()">\n <!-- START SENDSms -->\n <div class="app-settings" ng-slide-down="application.app === \'sendSms\'" lazy-render duration="1">\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.to.$touched || forms.action.$submitted) && forms.action.to.$invalid}">\n <label class="control-label">{{\'APPLICATION_TO\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" ng-pattern="/^[\\+]?[0-9]+$/" name="to" placeholder="{{\'APPLICATION_TO\' | translate}}" class="form-control" data-ng-model="application.data2" required/>\n <span data-ng-show="(forms.action.to.$touched || forms.action.$submitted) && forms.action.to.$invalid && forms.action.to.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.account.$touched || forms.action.$submitted) && forms.action.account.$invalid}">\n <label class="control-label">{{\'APPLICATION_ACCOUNT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data8" name="account" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="account.id as account in smsAccounts | filter: $select.search">\n <div ng-bind-html="account.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.action.account.$touched || forms.action.$submitted) && forms.action.account.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.text.$touched || forms.action.$submitted) && forms.action.text.$invalid}">\n <label class="control-label">{{\'APPLICATION_TEXT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <textarea id="text" class="form-control maxlength-handler" maxlength="160" name="text" data-ng-model="application.data6" required></textarea>\n <span data-ng-show="(forms.action.text.$touched || forms.action.$submitted) && forms.action.text.$invalid && forms.action.text.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n\n <!-- END SENDSms -->\n </div>\n\n <!-- START INTERVAL_TYPE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.intType.$touched || forms.action.$submitted) && forms.action.intType.$invalid}">\n <label class="control-label">{{ \'APPLICATION_INTERVAL_TYPE\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.intType" theme="bootstrap" name="intType" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="intType.value as intType in $application.intTypes | filter: $select.search">\n {{ intType.name | translate }}\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.action.intType.$touched || forms.action.$submitted) && forms.action.intType.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERVAL_TYPE -->\n\n <div class="app-settings" ng-slide-down="application.intType === \'custom\'" lazy-render duration="1">\n <!-- START TIME -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_TIME\' | translate }}</label>\n <div class="input-group input-large">\n <fieldset class="pull-left" ng-disabled="application.alwaysTime">\n <uib-timepicker name="t_from" data-ng-model="application.t_from" show-meridian="false" show-spinners="false" mousewheel="false"></uib-timepicker>\n </fieldset>\n <div class="input-group-addon col-md-1 interval-to pull-left">to</div>\n <fieldset ng-disabled="application.alwaysTime"><uib-timepicker name="t_to" data-ng-model="application.t_to" show-meridian="false" show-spinners="false" mousewheel="false"></uib-timepicker></fieldset>\n <!-- <label class="control-label pointer-cursor"><input type="checkbox" data-ng-model="application.alwaysTime">{{\'APPLICATION_ALWAYS\' | translate}}</label> -->\n </div>\n </div>\n <!-- END TIME -->\n\n <!-- START ALWAYS -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_ALWAYS\' | translate }}</label>\n <div class="input-group input-large">\n <label class="control-label pointer-cursor">\n <input\n bs-switch\n data-ng-model="application.alwaysTime"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n <!-- <input type="checkbox" data-ng-model="application.alwaysTime"> -->\n </label>\n </div>\n </div>\n <!-- END ALWAYS -->\n\n <!-- START WEEKDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_WEEKDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="application.wd_from" theme="bootstrap" name="wd_from">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{ weekDay.name | translate}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="application.wd_to" theme="bootstrap" name="wd_to">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{ weekDay.name | translate }}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END WEEKDAY -->\n\n <!-- START MONTHDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTHDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="application.md_from" theme="bootstrap" name="md_from">\n <ui-select-match allow-clear>{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search" ui-disable-choice="application.md_to && application.md_to!==\'always\' && monthDay>application.md_to && monthDay!==\'always\'">\n {{monthDay}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="application.md_to" theme="bootstrap" name="md_to">\n <ui-select-match allow-clear>{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search" ui-disable-choice="application.md_from && application.md_from!==\'always\' && monthDay<application.md_from && monthDay!==\'always\'">\n {{monthDay}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTHDAY -->\n\n <!-- START MONTH -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTH\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="application.m_from" theme="bootstrap" name="m_from">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{ month.name | translate }}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="application.m_to" theme="bootstrap" name="m_to">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{ month.name | translate }}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTH -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.intType === \'list\'" lazy-render duration="1" data-ng-init="getIntervals()">\n\n <!-- START INTERVALS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.IntervalId.$touched || forms.action.$submitted) && forms.action.IntervalId.$invalid}">\n <label class="control-label">{{\'APPLICATION_INTERVALS\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.IntervalId" theme="bootstrap" name="IntervalId" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{ $select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="interval.id as interval in intervals | filter: $select.search">\n {{ interval.name}}\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="intervals.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_INTERVAL_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/tools/intervals/list">{{\'APPLICATION_INTERVALS\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.action.IntervalId.$touched || forms.action.$submitted) && forms.action.IntervalId.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERVALS -->\n\n </div>\n\n <input class="btn green-haze" type="submit" data-ng-click="next()" value="{{\'APPLICATION_CONTINUE\' | translate}}"/>\n\n </form>\n </wz-step>\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n <input class="btn green-haze" type="submit" data-ng-click="next()" value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n </wz-step>\n </wizard>\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'), +a.put("app/channels/mail/account/view/disposition/modal/add.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_DISPOSITIONS\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.form.$touched || form.$submitted) && form.form.$invalid}">\n <div class="">\n <!-- <input type="text" name="form" placeholder="{{\'APPLICATION_DISPOSITION\' | translate}}" class="form-control" data-ng-model="name" data-ng-pattern="/^[a-zA-Z0-9]*$/" required/> -->\n <input type="text" name="form" placeholder="{{\'APPLICATION_DISPOSITION\' | translate}}" class="form-control" data-ng-model="name" required/>\n <span data-ng-show="form.form.$touched && form.form.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <!-- <span data-ng-show="form.form.$touched && form.form.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_PATTERN\' | translate}}.\n </span> -->\n </div>\n <!-- <div class="help-block">\n {{\'MESSAGE_ALLOWED_NUMBERS_AND_LETTERS\' | translate}}\n </div> -->\n </div>\n <!-- END NAME -->\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" data-ng-click="ok()" data-ng-show="form.$valid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" data-ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/mail/account/view/disposition/view/view.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_DISPOSITIONS\' | translate}}</span>\n </div>\n <div class="actions actions-md">\n <a href="#" class="btn btn-icon-only green" data-ng-click="addDisposition();">\n <i class="fa fa-plus"></i>\n </a>\n </div>\n </div>\n <div class="portlet-body" data-ng-init="initView()">\n <div class="tab-content">\n <div class="row" data-ng-hide="dispositions.length">\n <div class="col-md-12">\n <div class="note note-info">\n <h4 class="block">Info! {{\'MESSAGE_NO_DISPOSITIONS_AVAILABLE\' | translate}}</h4>\n </div>\n </div>\n </div>\n\n <!-- GENERAL TAB -->\n <div class="row" data-ng-repeat="disposition in dispositions">\n <div class="col-md-12 form-group">\n <div class="input-group">\n <div>\n <input class="form-control" type="text" placeholder="{{\'APPLICATION_DISPOSITION\' | translate}}" data-ng-model="disposition.name">\n </div>\n <span class="input-group-btn">\n <button class="btn btn-success" type="button" data-ng-click="updateDisposition(disposition.id, disposition.name);"><i class="fa fa-cloud-upload fa-fw"></i> {{\'APPLICATION_UPDATE\' | translate}}</button>\n <button class="btn btn-danger" type="button" data-ng-click="deleteDisposition(disposition.id);"><i class="fa fa-times fa-fw"></i> {{\'APPLICATION_DELETE\' | translate}}</button>\n </span>\n </div>\n </div>\n </div>\n <!-- END GENERAL TAB -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/mail/account/view/hooks/view/view.html",'<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_HOOKS\' | translate}}</span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_ACCEPT\' | translate}}</a>\n </li>\n <li >\n <a href="#" data-target="#tab_1_2" data-toggle="tab">{{\'APPLICATION_REJECT\' | translate}}</a>\n </li>\n <li >\n <a href="#" data-target="#tab_1_3" data-toggle="tab">{{\'APPLICATION_CLOSE\' | translate}}</a>\n </li>\n </ul>\n </div>\n <div class="portlet-body">\n <div class="tab-content">\n <!-- ACCEPT TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.accept" data-ng-submit="forms.accept.$valid && updateItemMailAccount()" novalidate>\n <div class="row">\n <div class="form-group col-md-4" data-ng-class="{\'has-error\': (forms.accept.method.$touched || forms.accept.$submitted) && forms.accept.method.$invalid}">\n <label class="control-label">{{\'APPLICATION_METHOD\' | translate}}</label>\n <ui-select data-ng-model="account.acceptMethod" name="method" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_METHOD\' | translate}}">{{$select.selected.name | uppercase}}</ui-select-match>\n <ui-select-choices repeat="type.value as type in types | filter: $select.search">\n <div ng-bind-html="type.name | highlight: $select.search | uppercase" ></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.accept.method.$touched || forms.accept.$submitted) && forms.accept.method.$invalid && forms.accept.method.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div class="form-group col-md-8" data-ng-class="{\'has-error\': (forms.accept.url.$touched || forms.accept.$submitted) && forms.accept.url.$invalid}">\n <label class="control-label">{{\'APPLICATION_URL\' | translate}}</label>\n <input type="url" name="url" placeholder="{{\'APPLICATION_URL\' | translate}}" class="form-control" data-ng-model="account.acceptUrl" ng-required="account.acceptMethod"/>\n <span data-ng-show="(forms.accept.url.$touched || forms.accept.$submitted) && forms.accept.url.$invalid && forms.accept.url.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n <div class="row" ng-repeat = "action in account.actions">\n <div ng-switch="action.action">\n <div ng-switch-when="pause">\n <div class="form-group col-md-4">\n <label class="control-label">{{\'APPLICATION_PAUSE\' | translate}}</label></br>\n <input\n bs-switch\n data-ng-change="resetActionData(action)"\n data-ng-model="action.enabled"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_ENABLED\' | translate }}"\n switch-off-text="{{ \'APPLICATION_DISABLED\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n </div>\n <div ng-if="action.enabled" class="form-group col-md-8">\n <label class="control-label">{{\'APPLICATION_TYPE\' | translate}}</label>\n <ui-select name="action" data-ng-model="action.type" theme="bootstrap" >\n <ui-select-match placeholder="{{\'APPLICATION_TYPE\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat=" pause.name as pause in pauses | filter: $select.search">\n <div ng-bind-html="pause.name | highlight: $select.search | uppercase" ></div>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n </div>\n </div>\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END ACCEPT TAB -->\n <!-- START REJECT TAB -->\n <div class="tab-pane" id="tab_1_2">\n <form name="forms.reject" data-ng-submit="forms.reject.$valid && updateItemMailAccount()" novalidate>\n <div class="row">\n <div class="form-group col-md-4" data-ng-class="{\'has-error\': (forms.reject.method.$touched || forms.reject.$submitted) && forms.reject.method.$invalid}">\n <label class="control-label">{{\'APPLICATION_METHOD\' | translate}}</label>\n <ui-select data-ng-model="account.rejectMethod" name="method" theme="bootstrap" >\n <ui-select-match placeholder="{{\'APPLICATION_METHOD\' | translate}}">{{$select.selected.name | uppercase}}</ui-select-match>\n <ui-select-choices repeat="type.value as type in types | filter: $select.search">\n <div ng-bind-html="type.name | highlight: $select.search | uppercase" ></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.reject.method.$touched || forms.reject.$submitted) && forms.reject.method.$invalid && forms.reject.method.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div class="form-group col-md-8" data-ng-class="{\'has-error\': (forms.reject.url.$touched || forms.reject.$submitted) && forms.reject.url.$invalid}">\n <label class="control-label">{{\'APPLICATION_URL\' | translate}}</label>\n <input type="url" name="url" placeholder="{{\'APPLICATION_URL\' | translate}}" class="form-control" data-ng-model="account.rejectUrl" ng-required="account.rejectMethod"/>\n <span data-ng-show="(forms.reject.url.$touched || forms.reject.$submitted) && forms.reject.url.$invalid && forms.reject.url.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END REJECT TAB -->\n <!-- START CLOSE TAB -->\n <div class="tab-pane" id="tab_1_3">\n <form name="forms.close" data-ng-submit="forms.close.$valid && updateItemMailAccount()" novalidate>\n <div class="row">\n <div class="form-group col-md-4" data-ng-class="{\'has-error\': (forms.close.method.$touched || forms.close.$submitted) && forms.close.method.$invalid}">\n <label class="control-label">{{\'APPLICATION_METHOD\' | translate}}</label>\n <ui-select data-ng-model="account.closeMethod" name="method" theme="bootstrap" >\n <ui-select-match placeholder="{{\'APPLICATION_METHOD\' | translate}}">{{$select.selected.name | uppercase}}</ui-select-match>\n <ui-select-choices repeat="type.value as type in types | filter: $select.search">\n <div ng-bind-html="type.name | highlight: $select.search | uppercase" ></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.close.method.$touched || forms.close.$submitted) && forms.close.method.$invalid && forms.close.method.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div class="form-group col-md-8" data-ng-class="{\'has-error\': (forms.close.url.$touched || forms.close.$submitted) && forms.close.url.$invalid}">\n <label class="control-label">{{\'APPLICATION_URL\' | translate}}</label>\n <input type="url" name="url" placeholder="{{\'APPLICATION_URL\' | translate}}" class="form-control" data-ng-model="account.closeUrl" ng-required="account.closeMethod"/>\n <span data-ng-show="(forms.close.url.$touched || forms.close.$submitted) && forms.close.url.$invalid && forms.close.url.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END CLOSE TAB -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/mail/account/view/other/view/view.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_OTHER\' | translate}}</span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_GENERALS\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_2" data-toggle="tab">{{\'APPLICATION_SIGNATURE\' | translate}}</a>\n </li>\n </ul>\n </div>\n <div class="portlet-body" data-ng-init="initView()">\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="mail-spinner-grid" spinner-start-active="false"></span>\n <!-- END UI-GRID SPINNER -->\n\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.info" data-ng-submit="forms.info.$valid && updateItemMailAccount()" novalidate>\n <!-- START WHITE LABEL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.whiteLabel.$touched || forms.info.$submitted) && forms.info.whiteLabel.$invalid}">\n <label class="control-label">{{\'APPLICATION_WHITE_LABEL\' | translate}}</label>\n <textarea type="text" name="whiteLabel" placeholder="{{\'APPLICATION_WHITE_LABEL\' | translate}}" class="form-control" data-ng-model="account.whiteLabel" data-ng-disabled="!license.custom"/></textarea>\n <span data-ng-show="(forms.info.whiteLabel.$touched || forms.info.$submitted) && forms.info.whiteLabel.$invalid && forms.info.whiteLabel.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END WHITE LABEL -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}" data-ng-disabled="!license.custom"/>\n </form>\n </div>\n <!-- END GENERAL TAB -->\n\n <!-- GENERAL TAB -->\n <div class="tab-pane" id="tab_1_2">\n <form name="forms.signature" data-ng-submit="updateItemMailAccount()" novalidate>\n <!-- START SIGNATURE -->\n <div class="form-group">\n <div ckeditor="options" ng-model="account.signature"></div>\n </div>\n <!-- END WHITE LABEL -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END GENERAL TAB -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/mail/account/view/setting/view/view.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_SETTINGS\' | translate}}</span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_GENERALS\' | translate}}</a>\n </li>\n <li data-ng-if="account.MailServerIn">\n <a href="#" data-target="#tab_1_2" data-toggle="tab">IMAP</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_3" data-toggle="tab">SMTP</a>\n </li>\n </ul>\n </div>\n <div class="portlet-body" data-ng-init="initView()">\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="mail-spinner-grid" spinner-start-active="false"></span>\n <!-- END UI-GRID SPINNER -->\n\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.info" data-ng-submit="forms.info.$valid && updateItemMailAccount()" novalidate>\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="account.name" required/>\n <span data-ng-show="(forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid && forms.info.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START ADDRESS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.address.$touched || forms.info.$submitted) && forms.info.address.$invalid}">\n <label class="control-label">{{\'APPLICATION_EMAIL_ADDRESS\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="address" placeholder="{{\'APPLICATION_ADDRESS\' | translate}}" class="form-control" data-ng-model="account.address" required/>\n <span data-ng-show="(forms.info.address.$touched || forms.info.$submitted) && forms.info.address.$invalid && forms.info.address.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END ADDRESS -->\n\n <!-- START LIST -->\n <div class="form-group" data-ng-if="license.cm">\n <label class="control-label">{{\'APPLICATION_LIST\' | translate}}</label>\n <div class="input-group">\n\n <ui-select data-ng-model="account.ListId" name="list" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_LIST\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="list.id as list in lists | filter: $select.search">\n <div ng-bind-html="list.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n\n <span class="input-group-btn">\n <button type="button" data-ng-click="account.ListId = null" class="btn btn-default">\n <span class="glyphicon glyphicon-trash"></span>\n </button>\n </span>\n\n </div>\n </div>\n <!-- END LIST -->\n\n <!-- START TEMPLATE -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_TEMPLATE\' | translate}}</label>\n <div class="input-group">\n\n <ui-select data-ng-model="account.TemplateId" name="template" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_TEMPLATE\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="template.id as template in templates | filter: $select.search">\n <div ng-bind-html="template.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n\n <span class="input-group-btn">\n <button type="button" data-ng-click="account.TemplateId = null" class="btn btn-default">\n <span class="glyphicon glyphicon-trash"></span>\n </button>\n </span>\n\n </div>\n </div>\n <!-- END TEMPLATE -->\n\n <!-- START FIDELITY -->\n <div class="form-group" data-ng-if="account.MailServerIn">\n <label class="control-label">{{\'APPLICATION_FIDELITY\' | translate}}</label></br>\n <input\n bs-switch\n data-ng-model="account.fidelity"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_ENABLED\' | translate }}"\n switch-off-text="{{ \'APPLICATION_DISABLED\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n </div>\n <!-- END FIDELITY -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-if="account.fidelity" data-ng-class="{\'has-error\': (forms.info.timeout.$touched || forms.info.$submitted) && forms.info.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" min="0" name="timeout" placeholder="{{\'APPLICATION_PORT\' | translate}}" class="form-control" data-ng-model="account.timeout" required/>\n <span data-ng-show="(forms.info.timeout.$touched || forms.info.$submitted) && forms.info.timeout.$invalid && forms.info.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.info.timeout.$touched || forms.info.$submitted) && forms.info.timeout.$invalid && forms.info.timeout.$error.number" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_NUMERIC_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="account.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n <!-- START SERVICE -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_SERVICE\' | translate}}</label><br>\n <input\n bs-switch\n data-ng-model="account.service"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_ENABLED\' | translate }}"\n switch-off-text="{{ \'APPLICATION_DISABLED\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n </div>\n <!-- END SERVICE -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END GENERAL TAB -->\n\n <!-- IMAP TAB -->\n <div class="tab-pane" id="tab_1_2" data-ng-if="account.MailServerIn">\n <div class="note note-danger" data-ng-show="account.MailServerIn.state === \'DISCONNECTED\' || account.MailServerIn.state === \'ERROR\'">\n <p> ERROR </p>\n <json-formatter open="1" json="account.MailServerIn.source"></json-formatter>\n </div>\n\n <div class="note note-success" data-ng-show="account.MailServerIn.state === \'CONNECTED\'">\n <p> CONNECTED </p>\n </div>\n\n <div class="note note-info" data-ng-show="account.MailServerIn.state === \'CONNECTING\'">\n <p> TRYING... </p>\n </div>\n\n <form name="forms.formIn" data-ng-submit="forms.formIn.$valid && updateItemMailServerIn()" novalidate>\n <!-- START HOST -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formIn.host.$touched || forms.formIn.$submitted) && forms.formIn.host.$invalid}">\n <label class="control-label">{{\'APPLICATION_HOST\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="host" placeholder="{{\'APPLICATION_HOST\' | translate}}" class="form-control" data-ng-model="account.MailServerIn.host" required/>\n <span data-ng-show="(forms.formIn.host.$touched || forms.formIn.$submitted) && forms.formIn.host.$invalid && forms.formIn.host.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END HOST -->\n\n <!-- START USERNAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formIn.username.$touched || forms.formIn.$submitted) && forms.formIn.username.$invalid}">\n <label class="control-label">{{\'APPLICATION_USERNAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="username" placeholder="{{\'APPLICATION_USERNAME\' | translate}}" class="form-control" data-ng-model="account.MailServerIn.username" required/>\n <span data-ng-show="(forms.formIn.username.$touched || forms.formIn.$submitted) && forms.formIn.username.$invalid && forms.formIn.username.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n\n <!-- START PASSWORD -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formIn.password.$touched || forms.formIn.$submitted) && forms.formIn.password.$invalid}">\n <label class="control-label">{{\'APPLICATION_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="password" name="password" placeholder="{{\'APPLICATION_PASSWORD\' | translate}}" class="form-control" data-ng-model="account.MailServerIn.password" required/>\n <span data-ng-show="(forms.formIn.password.$touched || forms.formIn.$submitted) && forms.formIn.password.$invalid && forms.formIn.password.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PASSWORD -->\n\n <!-- START PORT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formIn.port.$touched || forms.formIn.$submitted) && forms.formIn.port.$invalid}">\n <label class="control-label">{{\'APPLICATION_PORT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" name="port" placeholder="{{\'APPLICATION_PORT\' | translate}}" class="form-control" data-ng-model="account.MailServerIn.port" required/>\n <span data-ng-show="(forms.formIn.port.$touched || forms.formIn.$submitted) && forms.formIn.port.$invalid && forms.formIn.port.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.formIn.port.$touched || forms.formIn.$submitted) && forms.formIn.port.$invalid && forms.formIn.port.$error.number" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_NUMERIC_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PORT -->\n\n <!-- START MAILBOX -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_MAILBOX\' | translate}}</label>\n <input type="text" name="mailbox" placeholder="{{\'APPLICATION_MAILBOX\' | translate}}" class="form-control" data-ng-model="account.MailServerIn.mailbox"/>\n </div>\n <!-- END MAILBOX -->\n\n <!-- START SEARCH FILTER -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_SEARCH_FILTER\' | translate}}</label>\n <ui-select data-ng-model="account.MailServerIn.filter" name="filter" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="filter in [\'UNSEEN\'] | filter: $select.search">\n <div ng-bind-html="filter | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- START SEARCH FILTER -->\n\n <!-- START connTimeout -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.in.connTimeout.$touched || forms.in.$submitted) && forms.in.connTimeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_CONNECTION_TIMEOUT\' | translate}} [sec]<span class="required" aria-required="true">*</span></label>\n <input type="number" name="connTimeout" placeholder="{{\'APPLICATION_CONNECTION_TIMEOUT\' | translate}}" class="form-control" data-ng-model="account.MailServerIn.connTimeout" required/>\n <span data-ng-show="(forms.in.connTimeout.$touched || forms.in.$submitted) && forms.in.connTimeout.$invalid && forms.in.connTimeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.in.connTimeout.$touched || forms.in.$submitted) && forms.in.connTimeout.$invalid && forms.in.connTimeout.$error.number" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_NUMERIC_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END connTimeout -->\n\n <!-- START authTimeout -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.in.authTimeout.$touched || forms.in.$submitted) && forms.in.authTimeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_AUTH_TIMEOUT\' | translate}} [sec]<span class="required" aria-required="true">*</span></label>\n <input type="number" name="authTimeout" placeholder="{{\'APPLICATION_AUTH_TIMEOUT\' | translate}}" class="form-control" data-ng-model="account.MailServerIn.authTimeout" required/>\n <span data-ng-show="(forms.in.authTimeout.$touched || forms.in.$submitted) && forms.in.authTimeout.$invalid && forms.in.authTimeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.in.authTimeout.$touched || forms.in.$submitted) && forms.in.authTimeout.$invalid && forms.in.authTimeout.$error.number" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_NUMERIC_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END authTimeout -->\n\n <!-- START DELETE -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DELETE_MAIL_FROM_SERVER\' | translate}}</label><br>\n <input\n bs-switch\n data-ng-model="account.MailServerIn.delete"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_ENABLED\' | translate }}"\n switch-off-text="{{ \'APPLICATION_DISABLED\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n </div>\n <!-- END DELETE -->\n\n <!-- START SSL -->\n <div class="form-group">\n <label class="control-label">SSL</label><br>\n <input\n bs-switch\n data-ng-model="account.MailServerIn.ssl"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_ENABLED\' | translate }}"\n switch-off-text="{{ \'APPLICATION_DISABLED\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n </div>\n <!-- END SSL -->\n\n <!-- START Keepalive -->\n <div class="form-group">\n <label class="control-label">Keepalive</label><br>\n <input\n bs-switch\n data-ng-model="account.MailServerIn.keepalive"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_ENABLED\' | translate }}"\n switch-off-text="{{ \'APPLICATION_DISABLED\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n </div>\n <!-- END Keepalive -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END IMAP TAB -->\n\n <!-- SMTP TAB -->\n <div class="tab-pane" id="tab_1_3">\n\n <div class="note note-danger" data-ng-show="account.MailServerOut.state === \'DISCONNECTED\' || account.MailServerOut.state === \'ERROR\'">\n <p> ERROR </p>\n <json-formatter open="1" json="account.MailServerOut.source"></json-formatter>\n </div>\n\n <div class="note note-success" data-ng-show="account.MailServerOut.state === \'CONNECTED\'">\n <p> CONNECTED </p>\n </div>\n\n <div class="note note-info" data-ng-show="account.MailServerOut.state === \'CONNECTING\'">\n <p> TRYING... </p>\n </div>\n\n <form name="forms.formOut" data-ng-submit="forms.formOut.$valid && updateItemMailServerOut()" novalidate>\n\n <!-- START HOST -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formOut.host.$touched || forms.formOut.$submitted) && forms.formOut.host.$invalid}">\n <label class="control-label">{{\'APPLICATION_HOST\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="host" placeholder="{{\'APPLICATION_HOST\' | translate}}" class="form-control" data-ng-model="account.MailServerOut.host" required/>\n <span data-ng-show="(forms.formOut.host.$touched || forms.formOut.$submitted) && forms.formOut.host.$invalid && forms.formOut.host.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END HOST -->\n\n <!-- START USERNAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formOut.username.$touched || forms.formOut.$submitted) && forms.formOut.username.$invalid}">\n <label class="control-label">{{\'APPLICATION_USERNAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="username" placeholder="{{\'APPLICATION_USERNAME\' | translate}}" class="form-control" data-ng-model="account.MailServerOut.username" required/>\n <span data-ng-show="(forms.formOut.username.$touched || forms.formOut.$submitted) && forms.formOut.username.$invalid && forms.formOut.username.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n\n <!-- START PASSWORD -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formOut.password.$touched || forms.formOut.$submitted) && forms.formOut.password.$invalid}">\n <label class="control-label">{{\'APPLICATION_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="password" name="password" placeholder="{{\'APPLICATION_PASSWORD\' | translate}}" class="form-control" data-ng-model="account.MailServerOut.password" required/>\n <span data-ng-show="(forms.formOut.password.$touched || forms.formOut.$submitted) && forms.formOut.password.$invalid && forms.formOut.password.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PASSWORD -->\n\n <!-- START PORT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formOut.port.$touched || forms.formOut.$submitted) && forms.formOut.port.$invalid}">\n <label class="control-label">{{\'APPLICATION_PORT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" name="port" placeholder="{{\'APPLICATION_PORT\' | translate}}" class="form-control" data-ng-model="account.MailServerOut.port" required/>\n <span data-ng-show="(forms.formOut.form.$touched || forms.formOut.$submitted) && forms.formOut.port.$invalid && forms.formOut.port.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.formOut.form.$touched || forms.formOut.$submitted) && forms.formOut.port.$invalid && forms.formOut.port.$error.number" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_NUMERIC_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PORT -->\n\n <!-- START SSL -->\n <div class="form-group">\n <label class="control-label">SSL</label><br>\n <input\n bs-switch\n data-ng-model="account.MailServerOut.ssl"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_ENABLED\' | translate }}"\n switch-off-text="{{ \'APPLICATION_DISABLED\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n </div>\n <!-- END SSL -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n <input class="btn blue-madison" type="button" value="Test" data-ng-click="test()"/>\n </form>\n </div>\n <!-- END SMTP TAB -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'), +a.put("app/channels/mail/account/view/view.html",'<!-- BEGIN PAGE HEADER-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-envelope"></i>\n <a href="#">{{ \'APPLICATION_MAIL\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-notebook"></i>\n <a href="/channels/mail/accounts/list">{{ \'APPLICATION_ACCOUNTS\' | translate }}</a>\n <i class="fa fa-angle-right" data-ng-show="account"></i>\n </li>\n <li data-ng-show="account">\n <a href="#">{{ account.description || account.name }}</a>\n </li>\n </ul>\n </div>\n\n<!-- END PAGE HEADER-->\n\n<!-- BEGIN PAGE CONTENT-->\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar" data-ng-init="initView()">\n <!-- PORTLET main.channels -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img ng-src="assets/images/media/account.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{ account.description || account.name }}\n </div>\n <div class="profile-usertitle-job">\n {{account.email}}\n </div>\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li ng-class="{active: $state.is(\'main.channels.mail.accounts.view.settings\')}">\n <a href="/channels/mail/accounts/view/{{account.id}}/settings">\n <i class="icon-settings"></i>\n {{\'APPLICATION_SETTINGS\' | translate}} </a>\n </li>\n <li ng-class="{active: $state.is(\'main.channels.mail.accounts.view.hooks\')}" data-ng-if="account.MailServerIn">\n <a href="/channels/mail/accounts/view/{{account.id}}/hooks">\n <i class="fa fa-code"></i>\n {{\'APPLICATION_HOOKS\' | translate}} </a>\n </li>\n <li ng-class="{active: $state.is(\'main.channels.mail.accounts.view.dispositions\')}" data-ng-if="account.MailServerIn">\n <a href="/channels/mail/accounts/view/{{account.id}}/dispositions">\n <i class="icon-target"></i>\n {{\'APPLICATION_DISPOSITIONS\' | translate}} </a>\n </li>\n <li ng-class="{active: $state.includes(\'main.channels.mail.accounts.view.actions\')}" data-ng-if="account.MailServerIn">\n <a href="/channels/mail/accounts/view/{{account.id}}/actions/list">\n <i class="icon-directions"></i>\n {{\'APPLICATION_ACTIONS\' | translate}} </a>\n </li>\n <li ng-class="{active: $state.includes(\'main.channels.mail.accounts.view.other\')}" data-ng-if="account.MailServerIn">\n <a href="/channels/mail/accounts/view/{{account.id}}/other">\n <i class="icon-equalizer"></i>\n {{\'APPLICATION_OTHER\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <div ui-view class="profile-content"></div>\n <!-- END PROFILE CONTENT -->\n </div>\n<!-- END PAGE CONTENT-->\n</div>\n'),a.put("app/channels/mail/account/wizard/wizard.html",'\n<div class="row" data-ng-init="initWizard()">\n <div class="col-md-12">\n <!-- BEGIN PAGE HEADER-->\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-envelope"></i>\n <a href="#">{{ \'APPLICATION_MAIL\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-notebook"></i>\n <a href="/channels/mail/accounts/list">{{ \'APPLICATION_ACCOUNTS\' | translate }}</a>\n </li>\n </ul>\n </div>\n <!-- END PAGE HEADER-->\n\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-notebook font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_ACCOUNT\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="createItem()">\n <wz-step title="{{\'APPLICATION_ACCOUNT_INFO\' | translate}}" canexit="formValidation(forms.info.$valid)">\n <form name="forms.info" novalidate>\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="(forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid && forms.info.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START ADDRESS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.address.$touched || forms.info.$submitted) && forms.info.address.$invalid}">\n <label class="control-label">{{\'APPLICATION_EMAIL_ADDRESS\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="address" placeholder="{{\'APPLICATION_ADDRESS\' | translate}}" class="form-control" data-ng-model="item.address" required/>\n <span data-ng-show="(forms.info.address.$touched || forms.info.$submitted) && forms.info.address.$invalid && forms.info.address.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END ADDRESS -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"/>\n </div>\n <!-- END DESCRIPTION -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" data-ng-click="goNext()"/>\n </form>\n </wz-step>\n\n <wz-step title="IMAP" canexit="formValidation(forms.in.$valid)">\n <form name="forms.in" novalidate>\n <!-- START HOST -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.in.host.$touched || forms.in.$submitted) && forms.in.host.$invalid}">\n <label class="control-label">{{\'APPLICATION_INCOMING_MAIL_SERVER\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="host" placeholder="{{\'APPLICATION_HOST\' | translate}}" class="form-control" data-ng-model="item.MailServerIn.host" required/>\n <span data-ng-show="(forms.in.host.$touched || forms.in.$submitted) && forms.in.host.$invalid && forms.in.host.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END HOST -->\n\n <!-- START USERNAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.in.username.$touched || forms.in.$submitted) && forms.in.username.$invalid}">\n <label class="control-label">{{\'APPLICATION_USERNAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="username" placeholder="{{\'APPLICATION_USERNAME\' | translate}}" class="form-control" data-ng-model="item.MailServerIn.username" name="username" required/>\n <span data-ng-show="(forms.in.username.$touched || forms.in.$submitted) && forms.in.username.$invalid && forms.in.username.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n\n <!-- START PASSWORD -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.in.password.$touched || forms.in.$submitted) && forms.in.password.$invalid}">\n <label class="control-label">{{\'APPLICATION_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="password" name="password" placeholder="{{\'APPLICATION_PASSWORD\' | translate}}" class="form-control" data-ng-model="item.MailServerIn.password" required/>\n <span data-ng-show="(forms.in.password.$touched || forms.in.$submitted) && forms.in.password.$invalid && forms.in.password.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PASSWORD -->\n\n <!-- START PORT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.in.port.$touched || forms.in.$submitted) && forms.in.port.$invalid}">\n <label class="control-label">{{\'APPLICATION_PORT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" name="port" placeholder="{{\'APPLICATION_PORT\' | translate}}" class="form-control" data-ng-model="item.MailServerIn.port" required/>\n <span data-ng-show="(forms.in.port.$touched || forms.in.$submitted) && forms.in.port.$invalid && forms.in.port.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.in.port.$touched || forms.in.$submitted) && forms.in.port.$invalid && forms.in.port.$error.number" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_NUMERIC_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PORT -->\n\n <!-- START MAILBOX -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_MAILBOX\' | translate}}</label>\n <input type="text" name="mailbox" placeholder="{{\'APPLICATION_MAILBOX\' | translate}}" class="form-control" data-ng-model="item.MailServerIn.mailbox"/>\n </div>\n <!-- END MAILBOX -->\n\n <!-- START SEARCH FILTER -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_SEARCH_FILTER\' | translate}}</label>\n <ui-select data-ng-model="item.MailServerIn.filter" name="filter" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="filter in [\'UNSEEN\'] | filter: $select.search">\n <div data-ng-bind="filter | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- START SEARCH FILTER -->\n\n <!-- START connTimeout -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.in.connTimeout.$touched || forms.in.$submitted) && forms.in.connTimeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_CONNECTION_TIMEOUT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" name="connTimeout" placeholder="{{\'APPLICATION_CONNECTION_TIMEOUT\' | translate}}" class="form-control" data-ng-model="item.MailServerIn.connTimeout" required/>\n <span data-ng-show="(forms.in.connTimeout.$touched || forms.in.$submitted) && forms.in.connTimeout.$invalid && forms.in.connTimeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.in.connTimeout.$touched || forms.in.$submitted) && forms.in.connTimeout.$invalid && forms.in.connTimeout.$error.number" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_NUMERIC_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END connTimeout -->\n\n <!-- START authTimeout -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.in.authTimeout.$touched || forms.in.$submitted) && forms.in.authTimeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_AUTH_TIMEOUT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" name="authTimeout" placeholder="{{\'APPLICATION_AUTH_TIMEOUT\' | translate}}" class="form-control" data-ng-model="item.MailServerIn.authTimeout" required/>\n <span data-ng-show="(forms.in.authTimeout.$touched || forms.in.$submitted) && forms.in.authTimeout.$invalid && forms.in.authTimeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.in.authTimeout.$touched || forms.in.$submitted) && forms.in.authTimeout.$invalid && forms.in.authTimeout.$error.number" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_NUMERIC_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END authTimeout -->\n\n <!-- START DELETE -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DELETE_MAIL_FROM_SERVER\' | translate}}</label><br>\n <input\n bs-switch\n data-ng-model="item.MailServerIn.delete"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_ENABLED\' | translate }}"\n switch-off-text="{{ \'APPLICATION_DISABLED\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n </div>\n <!-- END DELETE -->\n\n <!-- START SSL -->\n <div class="form-group">\n <label class="control-label">SSL</label><br>\n <input\n bs-switch\n data-ng-model="item.MailServerIn.ssl"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_ENABLED\' | translate }}"\n switch-off-text="{{ \'APPLICATION_DISABLED\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n </div>\n <!-- END SSL -->\n\n <!-- START Keepalive -->\n <div class="form-group">\n <label class="control-label">Keepalive</label><br>\n <input\n bs-switch\n data-ng-model="item.MailServerIn.keepalive"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_ENABLED\' | translate }}"\n switch-off-text="{{ \'APPLICATION_DISABLED\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n </div>\n <!-- END Keepalive -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" ng-click="goNext()"/>\n </form>\n </wz-step>\n\n <wz-step title="SMTP" canexit="formValidation(forms.out.$valid)">\n <form name="forms.out" novalidate>\n <!-- START HOST -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.out.host.$touched || forms.out.$submitted) && forms.out.host.$invalid}">\n <label class="control-label">{{\'APPLICATION_OUTGOING_MAIL_SERVER\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="host" placeholder="{{\'APPLICATION_HOST\' | translate}}" class="form-control" data-ng-model="item.MailServerOut.host" required/>\n <span data-ng-show="(forms.out.host.$touched || forms.out.$submitted) && forms.out.host.$invalid && forms.out.host.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END HOST -->\n\n <!-- START USERNAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.out.username.$touched || forms.out.$submitted) && forms.out.username.$invalid}">\n <label class="control-label">{{\'APPLICATION_USERNAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="username" placeholder="{{\'APPLICATION_USERNAME\' | translate}}" class="form-control" data-ng-model="item.MailServerOut.username" required/>\n <span data-ng-show="(forms.out.username.$touched || forms.out.$submitted) && forms.out.username.$invalid && forms.out.username.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n\n <!-- START PASSWORD -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.out.password.$touched || forms.out.$submitted) && forms.out.password.$invalid}">\n <label class="control-label">{{\'APPLICATION_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="password" name="password" placeholder="{{\'APPLICATION_PASSWORD\' | translate}}" class="form-control" data-ng-model="item.MailServerOut.password" required/>\n <span data-ng-show="(forms.out.password.$touched || forms.out.$submitted) && forms.out.password.$invalid && forms.out.password.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PASSWORD -->\n\n <!-- START PORT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.out.port.$touched || forms.out.$submitted) && forms.out.port.$invalid}">\n <label class="control-label">{{\'APPLICATION_PORT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" name="port" placeholder="{{\'APPLICATION_PORT\' | translate}}" class="form-control" data-ng-model="item.MailServerOut.port" required/>\n <span data-ng-show="(out.$touched || forms.out.$submitted) && forms.out.port.$invalid && forms.out.port.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(out.$touched || forms.out.$submitted) && forms.out.port.$invalid && forms.out.port.$error.number" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_NUMERIC_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PORT -->\n\n <!-- START SSL -->\n <div class="form-group">\n <label class="control-label">SSL</label><br>\n <input\n bs-switch\n data-ng-model="item.MailServerOut.ssl"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_ENABLED\' | translate }}"\n switch-off-text="{{ \'APPLICATION_DISABLED\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n </div>\n <!-- END SSL -->\n\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" ng-click="goNext()"/>\n </form>\n </wz-step>\n\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n <input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n </wz-step>\n </wizard>\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/mail/inbox/message/info.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_INFO\' | translate }}</h3>\n</div>\n<div class="modal-body" data-ng-init="initInfo()">\n <div class="form-group" ng-if="data">\n <json-formatter json="data" open="1"></json-formatter>\n </div>\n <div class="note note-warning" data-ng-hide="data">\n <h4 class="block"></h4>\n <p>\n {{ \'MESSAGE_NO_INFO_AVAILABLE\' | translate }}\n </p>\n </div>\n\n</div>\n<div class="modal-footer">\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CLOSE\' | translate }}</button>\n</div>\n'),a.put("app/channels/mail/inbox/message/message.directive.html",'<div class="message">\n <div class="row">\n <div class="col-md-12">\n <span class="bold">From: </span>\n <a href="" data-ng-click="openContact(message.from[0])">{{message.from[0]}} </a>\n <br>\n <span class="bold">To: </span>\n <a href="" data-ng-click="openContact(to)" data-ng-repeat="to in message.to">{{to}}<span data-ng-if="!$last">, </span></a>\n <br>\n <span data-ng-if="message.cc.length" class="bold">Cc: </span>\n <a href="" data-ng-click="openContact(cc)" data-ng-repeat="cc in message.cc">{{cc}}<span data-ng-if="!$last">, </span></a>\n <br>\n <span data-ng-if="message.bcc.length" class="bold">Bcc: </span>\n <a href="" data-ng-click="openContact(bcc)" data-ng-repeat="cc in message.bcc">{{bcc}}<span data-ng-if="!$last">, </span></a>\n </div>\n <div class="row">\n <div class="col-md-12">\n <span class="pull-right" data-ng-if="message.User">{{\'APPLICATION_SENT_BY\' | translate}}: <strong>{{message.User.fullname}}</strong></span>\n <span class="pull-right" data-ng-if="message.voiceSource">{{\'APPLICATION_SENT_BY\' | translate}}: <strong>Cally ²</strong>\n <a ng-click="info(message.voiceSource)"><i class="icon-info font-blue"></i>\n </a>\n </span>\n </div>\n </div>\n <br>\n <span class="todo-tasklist-date">\n <span class="pull-right" data-ng-switch="message.status" data-ng-if="message.status!==\'RECEIVED\'" uib-tooltip="{{\'APPLICATION_RETRY\' | translate}}: {{message.retry}}">\n <a ng-switch-when="SENDING" href="#" class="btn default btn-xs inactive-link blue-stripe"> {{message.status | uppercase}}\n <i class="fa fa-warning"></i>\n </a>\n <a ng-switch-when="SENT" href="#" class="btn default btn-xs inactive-link green-stripe"> {{message.status | uppercase}}\n <i class="fa fa-check"></i>\n </a>\n <a ng-switch-when="FAILED" href="#" class="btn default btn-xs red-stripe" data-ng-click="retry(message.id)"> {{message.status | uppercase}}\n <i class="fa fa-times"></i>\n </a>\n </span>\n <span class="pull-right" data-ng-if="message.status===\'RECEIVED\'">\n <a href="#" class="btn default btn-xs inactive-link green-stripe"> {{message.status | uppercase}}\n <i class="fa fa-check"></i>\n </a>\n </span>\n <i class="icon-calendar"></i> <span am-time-ago="message.updatedAt"></span>\n </span>\n <hr>\n <div class="body text-left message-body" data-ng-bind="message.text"></div>\n <h5 data-ng-hide="message.text" class="media-heading"><i>{{\'MESSAGE_NO_AVAILABLE_TEXT\' | translate | lowercase}}</i></h5>\n <hr data-ng-if="message.MailAttachments.length">\n <div data-ng-repeat="mailAttachment in message.MailAttachments">\n <strong>{{mailAttachment.name}}</strong>\n <span>\n ({{mailAttachment.size | prettyBytes}})\n </span>\n <a target="_self" download="{{mailAttachment.name}}" href="api/mail/attachments/{{mailAttachment.id}}">\n <i class="icon-cloud-download"></i>\n </a>\n <a ng-if="::(mailAttachment.type.indexOf(\'image\') > -1)" ng-click="openPreview(mailAttachment.id)">\n <i class="icon-picture"></i>\n </a>\n </div>\n</div>\n'),a.put("app/channels/mail/inbox/note/note.directive.html",'<div class="note">\n <div class="row">\n <div class="col-md-6">\n <a type="button" name="button" data-ng-if="::(Auth.getCurrentUser().id == message.UserId)" data-ng-click="deleteNote()">\n <i class="fa fa-trash-o" style="color: red;"></i>\n </a>\n\n <i class="icon-calendar"></i> <span am-time-ago="message.updatedAt"></span>\n </div>\n <div class="col-md-6">\n <span class="pull-right" data-ng-show="message.User">{{\'APPLICATION_ADD_BY\' | translate}}: <strong>{{message.User.fullname}}</strong></span>\n </div>\n </div>\n <hr>\n <span class="body text-left" data-ng-bind-html="message.text" style="white-space: pre-wrap;"></span>\n</div>\n'),a.put("app/channels/mail/inbox/note/note.modal.html",'<div class="modal-header" data-ng-init="initModal()">\n <h3 class="modal-title">{{ \'APPLICATION_NOTES\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n <div class="form-group">\n <textarea data-ng-model="item.text" name="text" rows="10" style="resize: none; width: 100%;"></textarea>\n </div>\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" data-ng-click="ok()">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" data-ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/mail/inbox/room/room.directive.html",'<!-- BEGIN TODO CONTENT -->\n<div class="todo-content">\n <div class="portlet light">\n <div class="portlet-title">\n <div class="caption">\n <button data-ng-if="form.from.length && form.to.length && mailRoom.status !== \'CLOSED\' && form.html" class="btn btn-sm btn-default green-meadow" data-ng-click="sendMail()">\n <i class="icon-paper-plane" style="color: white;"></i> {{\'APPLICATION_SEND\' | translate}}\n </button>\n <span data-ng-if="mailRoom && form.from.length && form.to.length && mailRoom.status !== \'CLOSED\' && form.html"> | </span>\n <span data-ng-if="mailRoom" class="label label-default"> #{{mailRoom.id}} {{mailRoom.status}}</span>\n <span data-ng-if="mailRoom"> | </span>\n <span data-ng-if="mailRoom && mailRoom.ParentId" class="label label-warning"> Ref: <a data-ng-click="openRoom(mailRoom.ParentId)">#{{mailRoom.ParentId}}</a></span>\n <span data-ng-if="mailRoom && mailRoom.ParentId"> | </span>\n <span data-ng-if="mailRoom" class="caption-subject font-green-sharp bold uppercase dot">{{mailRoom.subject || \'No subject\'}}</span>\n </div>\n <div class="actions">\n <button class="btn btn-icon-only yellow" data-ng-if="mailRoom" data-ng-click="loadNote()" data-ng-hide="mailRoom.status == \'CLOSED\'" title="{{\'APPLICATION_NOTES\' | translate}}">\n <i class="fa fa-sticky-note"></i>\n </button>\n <button class="file-upload" data-ng-hide="mailRoom.status == \'CLOSED\'">\n <i class="fa fa-paperclip"></i> <input type="file" data-ng-if="uploader" data-ng-disabled="mailRoom.status == \'CLOSED\'" nv-file-select uploader="uploader" multiple class="file-input" title="{{\'APPLICATION_ATTACHMENTS\' | translate}}">\n </button>\n <!-- UPDATE SECTION START -->\n <button data-ng-class="mailRoom.status == \'CLOSED\' ? \'grey-cascade\' : \'btn-success\'" class="btn btn-icon-only" data-ng-disabled="mailRoom.status == \'CLOSED\' && mailRoom.disposition" data-ng-if="mailRoom" data-ng-click="closeRoom()" title="{{\'APPLICATION_STATUS\' | translate}}">\n <i data-ng-class="mailRoom.status == \'CLOSED\' ? \'icon-target\' : \'fa fa-upload\'"></i>\n </button>\n <!-- UPDATE SECTION END -->\n <button class="btn default btn-icon-only" data-ng-if="mailRoom && mailRoom.status !== \'CLOSED\'" data-ng-click="togglePanelLeft()" title="{{\'APPLICATION_RESIZE\' | translate}}">\n <i ng-class="panelRight == \'col-md-12\' ? \'icon-size-actual\' : \'icon-size-fullscreen\'"></i>\n </button>\n </div>\n </div>\n <div class="portlet-body">\n <div class="row">\n <div data-ng-if="panelLeft" data-ng-class="panelLeft">\n <div class="form">\n <!-- START TAGS -->\n <div class="form-group" data-ng-if="mailRoom.status !== \'CLOSED\'">\n <div class="row">\n <div class="col-md-1">\n <a href="#" class="btn btn-icon-only">\n <i class="fa fa-tags" style="color: gray;"></i>\n </a>\n </div>\n <div class="col-md-11">\n <ui-select multiple data-ng-model="form.tags" theme="bootstrap" on-select="onChanged($item, $model)" on-remove="onChanged($item, $model)" data-ng-disabled="mailRoom.status == \'CLOSED\'">\n <ui-select-match placeholder="Tags...">{{$item}}</ui-select-match>\n <ui-select-choices repeat="tag in tags | filter:$select.search" class="">\n {{tag}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n </div>\n <!-- END TAGS -->\n </div>\n\n <hr data-ng-if="mailRoom && mailRoom.status !== \'CLOSED\'">\n\n <!-- END TAGS -->\n <div id="mail-box">\n <ul class="chats">\n <li\n data-ng-switch="mailMessage.status"\n data-ng-class="{\'in\': mailMessage.status == \'RECEIVED\', \'out\': mailMessage.status == \'SENT\' || mailMessage.status == \'SENDING\' || mailMessage.status == \'FAILED\' || mailMessage.status == \'NOTE\'}"\n data-ng-repeat="mailMessage in mailRoom.MailMessages | orderBy:\'-createdAt\'">\n <div class="avatar" data-ng-class="message.UserId ? \'pretty-avatar\' : \'pretty-avatar-v\'">\n <ng-letter-avatar\n data-ng-if="mailMessage.UserId"\n height="40"\n width="40"\n fontsize="25"\n data="{{mailMessage.User.fullname}}"\n avatarcustombgcolor="#B0B0B0"\n avatarcustomborder="border:2px solid #3399CC"\n charCount="2"\n shape="round"></ng-letter-avatar>\n <ng-letter-avatar\n data-ng-if="!mailMessage.UserId"\n height="40"\n width="40"\n fontsize="25"\n data="{{mailMessage.from[0]}}"\n avatarcustombgcolor="#B0B0B0"\n avatarcustomborder="border:2px solid #EA4C61"\n charCount="1"\n shape="round"></ng-letter-avatar>\n </div>\n <mail-note message="mailMessage" ng-switch-when="NOTE"></mail-note>\n <mail-message message="mailMessage" list-id="mailRoom.MailAccount.ListId" ng-switch-default></mail-message>\n </li>\n </ul>\n </div>\n </div>\n <div data-ng-class="panelRight">\n <div class="note note-info" data-ng-if="mailRoom && mailRoom.status == \'CLOSED\'">\n <h4 class="block"><i class="icon-info"></i> {{\'MESSAGE_MAIL_ROOM_CLOSED\' | translate}}!</h4>\n <p>\n <strong>{{\'MESSAGE_MAIL_ROOM_CLOSED_DETAILS\' | translate}}.</strong>\n </p>\n <hr>\n <p>\n <i class="icon-target"></i> {{\'APPLICATION_DISPOSITION\' | translate}}: <strong>{{mailRoom.disposition}}</strong>\n </p>\n <p>\n <i class="icon-calendar"></i> {{\'APPLICATION_UPDATED_AT\' | translate}}: <strong>{{mailRoom.updatedAt | date:\'medium\'}}</strong> (<span am-time-ago="mailRoom.updatedAt"></span>)\n </p>\n </div>\n <form name="forms.compose" data-ng-submit="sendMail()" class="form-horizontal" novalidate>\n <!-- START HEAD -->\n <div class="form">\n <v-accordion class="vAccordion--default" ng-if="mailRoom.status !== \'CLOSED\'">\n <v-pane expanded="expanded">\n <v-pane-header>\n <i class="icon-people"></i> From: {{form.from[0]}}, To: {{form.to[0].email}} <span ng-if="form.to.length > 1">(+{{form.to.length - 1}})</span>\n </v-pane-header>\n <v-pane-content>\n <!-- START FROM -->\n <div class="form-group" data-ng-if="mailRoom.status !== \'CLOSED\'">\n <div class="col-md-12">\n <div class="row">\n <div class="col-md-1">\n <label class="control-label">From:</label>\n </div>\n <div class="col-md-11">\n <ui-select data-ng-model="form.from[0]" data-ng-change="setList($select.selected.ListId)" theme="bootstrap" name="from" required>\n <ui-select-match placeholder="From...">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="mailAccount.address as mailAccount in mailAccounts | filter: $select.search">\n <div data-ng-bind-html="mailAccount.name | highlight: $select.search"></div>\n <small data-ng-bind-html="mailAccount.address | highlight: $select.search"></small>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n </div>\n </div>\n <!-- END FROM -->\n\n <!-- MAIL TO -->\n <div class="form-group" data-ng-if="mailRoom.status !== \'CLOSED\'">\n <div class="col-md-12">\n <div class="row">\n <div class="col-md-1">\n <label class="control-label">To:</label>\n </div>\n <div class="col-md-11">\n <tags-input ng-model="form.to" type="email" display-property="email">\n <auto-complete source="getContacts($query)"></auto-complete>\n </tags-input>\n </div>\n </div>\n </div>\n </div>\n <!-- END TO -->\n\n <!-- START CC -->\n <div class="form-group" data-ng-if="mailRoom.status !== \'CLOSED\'">\n <div class="col-md-12">\n <div class="row">\n <div class="col-md-1">\n <label class="control-label">Cc:</label>\n </div>\n <div class="col-md-11">\n <tags-input ng-model="form.cc" type="email" display-property="email">\n <auto-complete source="getContacts($query)"></auto-complete>\n </tags-input>\n </div>\n </div>\n </div>\n </div>\n <!-- END CC -->\n\n <!-- START BCC -->\n <div class="form-group" data-ng-if="mailRoom.status !== \'CLOSED\'">\n <div class="col-md-12">\n <div class="row">\n <div class="col-md-1">\n <label class="control-label">Bcc:</label>\n </div>\n <div class="col-md-11">\n <tags-input ng-model="form.bcc" type="email" display-property="email">\n <auto-complete source="getContacts($query)"></auto-complete>\n </tags-input>\n </div>\n </div>\n </div>\n </div>\n <!-- END BCC -->\n\n <!-- START SUBJECT -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.compose.subject.$invalid && forms.compose.$submitted}" data-ng-if="mailRoom.status !== \'CLOSED\'">\n <div class="col-md-12">\n <div class="row">\n <div class="col-md-1">\n <label class="control-label">Subj:</label>\n </div>\n <div class="col-md-11">\n <input type="text" name="subject" class="form-control todo-taskbody-taskdesc" placeholder="Subject..." rows="8" data-ng-model="form.subject">\n <span data-ng-if="forms.compose.subject.$invalid && forms.compose.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n </div>\n </div>\n <!-- END SUJBECT -->\n </v-pane-content>\n </v-pane>\n </v-accordion>\n\n <!-- START ATTACH -->\n <div class="form-group" data-ng-if="uploader && (mailRoom.status !== \'CLOSED\')">\n <div class="col-md-12">\n <hr ng-if="uploader.queue.length">\n <table class="table">\n <tbody>\n <tr ng-repeat="item in uploader.queue">\n <td style="border-top:none" rowspan="{{uploader.queue.length}}" ng-if="(!$index)">\n {{\'APPLICATION_ATTACHMENTS\' | translate}}:\n </td>\n <td style="border-top:none"><strong>{{ item.file.name }}</strong></td>\n <td style="border-top:none" ng-show="uploader.isHTML5" nowrap>{{ item.file.size/1024/1024|number:2 }} MB</td>\n <td style="border-top:none" ng-show="uploader.isHTML5">\n <div class="progress" style="margin-bottom: 0;">\n <div class="progress-bar" role="progressbar" ng-style="{ \'width\': item.progress + \'%\' }"></div>\n </div>\n </td>\n <td style="border-top-style:none" class="text-center">\n <span ng-show="item.isSuccess"><i class="glyphicon glyphicon-ok"></i></span>\n <span ng-show="item.isCancel"><i class="glyphicon glyphicon-ban-circle"></i></span>\n <span ng-show="item.isError"><i class="glyphicon glyphicon-remove"></i></span>\n </td>\n <td style="border-top-style:none" nowrap>\n <button type="button" class="btn btn-danger btn-xs" data-ng-click="item.remove()">\n <span class="glyphicon glyphicon-trash"></span> {{\'APPLICATION_REMOVE\' | translate}}\n </button>\n </td>\n </tr>\n </tbody>\n </table>\n <div>\n </div>\n </div>\n </div>\n <!-- END ATTACH -->\n\n <!-- START CANNED -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.compose.subject.$invalid && forms.compose.$submitted}" data-ng-if="mailRoom.status !== \'CLOSED\'">\n <div class="col-md-12">\n <div class="row">\n <div class="col-md-1">\n <a href="#" class="btn btn-icon-only">\n <i class="fa fa-magic" style="color: gray;"></i>\n </a>\n </div>\n <div class="col-md-11">\n <input type="text"\n data-ng-model="modelOptions.selectedAnswer"\n uib-typeahead="key for key in getAnswers($viewValue)"\n placeholder="Canned answers.."\n typeahead-loading="loadingLocations"\n typeahead-no-results="noResults"\n typeahead-on-select="onSelectAnswer($item)"\n class="form-control">\n <i ng-show="loadingLocations" class="glyphicon glyphicon-refresh"></i>\n <div ng-show="noResults">\n <i class="glyphicon glyphicon-remove"></i> No Results Found\n </div>\n <span data-ng-if="forms.compose.subject.$invalid && forms.compose.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n </div>\n </div>\n <!-- END CANNED -->\n\n <!-- START HTML -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.compose.text.$invalid && forms.compose.$submitted}" data-ng-if="mailRoom.status !== \'CLOSED\'">\n <div class="col-md-12">\n <div ckeditor="options" ng-model="form.html" ready="onCKReady($instance)"></div>\n <span data-ng-if="forms.compose.text.$invalid && forms.compose.$submitted" class="help-block help-block-error">\n'+" <strong>{{'APPLICATION_WARNING' | translate}}!</strong> {{'MESSAGE_REQUIRED_FIELD' | translate}}.\n </span>\n </div>\n </div>\n <!-- END HTML -->\n\n </div>\n </form>\n </div>\n </div>\n </div>\n</div>\n</div>\n<!-- END TODO CONTENT -->\n"), +a.put("app/channels/mail/inbox/status/status.modal.html",'<div class="modal-header">\n <button data-ng-if="modal.dismissable" type="button" data-ng-click="$dismiss()" class="close">×</button>\n <h4 data-ng-if="modal.title" data-ng-bind="modal.title | translate" class="modal-title"></h4>\n</div>\n<div class="modal-body">\n <p data-ng-if="modal.text && !closed" ng-bind="modal.text | translate"></p>\n <form name="form" novalidate data-ng-init="initDisposition()">\n <div class="form-group">\n <ui-select data-ng-model="item.disposition" name="disposition" theme="bootstrap" data-ng-disabled="!dispositions.length" required>\n <ui-select-match placeholder="{{\'APPLICATION_DISPOSITION\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="disposition.name as disposition in dispositions | filter: $select.search">\n <div ng-bind-html="disposition.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <div class="note note-warning" data-ng-if="dispositions.length < 1">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_DISPOSITIONS_AVAILABLE\' | translate }}\n </p>\n </div>\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" data-ng-click="ok()">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" data-ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/mail/inbox/view/account/list/list.html",'<!-- BEGIN Portlet PORTLET-->\n<div class="portlet light" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption">\n <div class="btn-group btn-group-solid">\n <button type="button" class="btn btn-sm default" data-ng-model="query.status" uib-btn-radio="\'NEW\'" uib-uncheckable>NEW</button>\n </div>\n <div class="btn-group btn-group-solid">\n <button type="button" class="btn btn-sm default" data-ng-model="query.status" uib-btn-radio="\'OPEN\'" uib-uncheckable>OPEN</button>\n </div>\n <div class="btn-group btn-group-solid">\n <button type="button" class="btn btn-sm default" data-ng-model="query.status" uib-btn-radio="\'PENDING\'" uib-uncheckable>PENDING</button>\n </div>\n <div class="btn-group btn-group-solid">\n <button type="button" class="btn btn-sm default" data-ng-model="query.status" uib-btn-radio="\'CLOSED\'" uib-uncheckable>CLOSED</button>\n </div>\n </div>\n <div class="actions">\n <a href="#" class="btn btn-icon-only default" data-ng-click="getPage();">\n <i class="fa fa-refresh"></i>\n </a>\n <a href="#" class="btn btn-icon-only red" data-ng-click="deleteItems();" data-ng-show="id.length && isAdmin">\n <i class="fa fa-trash"></i>\n </a>\n <a href="#" class="btn btn-icon-only btn-success" data-ng-click="disposeItems();" data-ng-show="id.length">\n <i class="fa fa-upload"></i>\n </a>\n <a href="#" class="btn btn-icon-only blue" data-ng-click="tagItems();" data-ng-show="id.length">\n <i class="fa fa-tags"></i>\n </a>\n <a href="#" class="btn btn-icon-only green" data-ng-click="openRoom(null, \'New Message\')">\n <i class="fa fa-plus"></i>\n </a>\n </div>\n </div>\n <div class="portlet-title" data-ng-show="tags.length">\n <!-- START TAGS -->\n <div class="form-group">\n <div class="row">\n <div class="col-md-1">\n <a href="#" class="btn btn-icon-only">\n <i class="fa fa-tags" style="color: gray;"></i>\n </a>\n </div>\n <div class="col-md-11">\n <ui-select multiple data-ng-model="query.tags" theme="bootstrap" on-select="onChanged($item, $model)" on-remove="onChanged($item, $model)">\n <ui-select-match placeholder="Search by tag...">{{$item}}</ui-select-match>\n <ui-select-choices repeat="tag in tags | filter:$select.search">\n {{tag}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n </div>\n <!-- END TAGS -->\n </div>\n <div class="portlet-body">\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="spinner-grid" spinner-start-active="false"></span>\n <!-- END UI-GRID SPINNER -->\n\n <!-- START TABLE -->\n <div ui-grid="gridOptions" class="ui-grid" ui-grid-auto-resize ui-grid-pagination ui-grid-selection>\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n</div>\n<!-- END Portlet PORTLET-->\n'),a.put("app/channels/mail/inbox/view/view.agents.modal.html",'<div class="modal-header" data-ng-init="initModal()">\n <h3 class="modal-title">{{ \'APPLICATION_AGENTS\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <!-- START TRANSPORT -->\n <div class="form-group">\n <form name="form" novalidate>\n <!-- START TRANSPORT -->\n <div class="form-group">\n <ui-select multiple name="agents" data-ng-model="item.agents" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_AGENTS\' | translate}}">{{$item.fullname}}</ui-select-match>\n <ui-select-choices repeat="agent.id as agent in agents | filter: $select.search">\n {{agent.fullname}}\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END TRANSPORT -->\n </form>\n </div>\n <!-- END TRANSPORT -->\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" data-ng-click="ok()">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" data-ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/mail/inbox/view/view.html",'<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-envelope"></i>\n <a href="#">{{ \'APPLICATION_MAIL\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-note"></i>\n <a href="#">{{ \'APPLICATION_INBOX\' | translate }}</a>\n </li>\n </ul>\n </div>\n </div>\n</div>\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row inbox">\n <div class="col-md-3">\n <ul class="inbox-nav margin-bottom-10">\n <li data-ng-class="{active: $stateParams.id == mailAccount.id}" data-ng-repeat="mailAccount in mailAccounts">\n <a href="/channels/mail/inbox/view/account/{{mailAccount.id}}/list" class="btn">\n <i class="icon-notebook"></i> {{mailAccount.name}}\n </a>\n <b></b>\n </li>\n </ul>\n </div>\n\n <div class="col-md-9" data-ng-init="initView()">\n <!-- BEGIN PROFILE CONTENT -->\n <div class="room-content">\n <div ui-view>\n <div class="note note-info">\n <h4 class="block">Info! {{\'APPLICATION_NO_ACCOUNT_SELECTED\' | translate}}</h4>\n </div>\n </div>\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n\n</div>\n'),a.put("app/channels/mail/inbox/view/view.tags.modal.html",'<div class="modal-header" data-ng-init="initModal()">\n <h3 class="modal-title">{{ \'APPLICATION_TAGS\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <!-- START TRANSPORT -->\n <div class="form-group">\n <form name="form" novalidate>\n <!-- START TAGS -->\n <div class="form-group">\n <ui-select multiple data-ng-model="item.tags" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_TAGS\' | translate}}">{{$item}}</ui-select-match>\n <ui-select-choices repeat="tag in tags | filter: $select.search">\n {{tag}}\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END TAGS -->\n </form>\n </div>\n <!-- END TRANSPORT -->\n</div>\n<div class="modal-footer">\n <button type="button" class="btn" data-ng-class="button.class" data-ng-click="button.click()"data-ng-repeat="button in modal.buttons">{{button.text | translate}}</button>\n <!-- <button class="btn btn-success" type="button" data-ng-click="ok()">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" data-ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button> -->\n</div>\n'),a.put("app/channels/mail/inbox/view/view.templates.modal.html",'<div class="modal-header" data-ng-init="initModal()">\n <h3 class="modal-title">{{ \'APPLICATION_TEMPLATES\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <div class="note note-info" data-ng-show="!templates.length">\n <h4 class="block">Info!</h4>\n <p>\n {{\'MESSAGE_NO_TEMPLATES_AVAILABLE\' | translate}}\n </p>\n </div>\n <form name="form" data-ng-show="templates.length" novalidate>\n <div class="form-group">\n <ui-select data-ng-model="item.template" theme="bootstrap">\n <ui-select-match placeholder="Select a template in the list or search his name...">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="template in templates | propsFilter: {name: $select.search}">\n <div ng-bind-html="template.name | highlight: $select.search"></div>\n <small data-ng-show="template.description">\n {{\'APPLICATION_DESCRIPTION\' | translate}}: {{template.description}}\n </small>\n </ui-select-choices>\n </ui-select>\n </div>\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" data-ng-click="ok()" data-ng-show="templates.length">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" data-ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/mail/queue/list/list.create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_QUEUE\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.name.$touched || form.$submitted) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" data-ng-pattern="settings.patternName" required />\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$invalid && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$invalid && form.name.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_PATTERN_NAME\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START STRATEGY -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.strategy.$touched || form.$submitted) && form.strategy.$invalid}">\n <label class="control-label">{{\'APPLICATION_STRATEGY\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="item.strategy" name="strategy" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected | uppercase}}</ui-select-match>\n <ui-select-choices repeat="strategy in strategies | filter: $select.search">\n <div ng-bind-html="strategy.toUpperCase() | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form.strategy.$touched || form.$submitted) && form.strategy.$invalid && form.strategy.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END STRATEGY -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.timeout.$touched || form.$submitted) && form.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_AGENT_TIMEOUT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" min="0" name="timeout" placeholder="Timeout" class="form-control" data-ng-model="item.timeout" required min="1"/>\n <span data-ng-show="(form.timeout.$touched || form.$submitted) && form.timeout.$invalid && form.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n\n <!-- START AGENTS-->\n <div class="form-body" data-ng-init="getTeams()">\n <label for="penalty">{{\'APPLICATION_PENALTY\' | translate}}</label>\n <div class="input-group input-small mbottom20">\n <input type="number" class="spinner-input form-control" maxlength="3" data-ng-model="item.penalty" readonly>\n <div class="spinner-buttons input-group-btn btn-group-vertical">\n <button type="button" class="btn spinner-up btn-xs blue" data-ng-click="item.penalty=item.penalty+1">\n <i class="fa fa-angle-up"></i>\n </button>\n <button type="button" class="btn spinner-down btn-xs blue" data-ng-disabled="!item.penalty" data-ng-click="item.penalty=item.penalty-1">\n <i class="fa fa-angle-down"></i>\n </button>\n </div>\n </div>\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-team">\n </div>\n </div>\n </div>\n <!-- END AGENTS-->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/mail/queue/list/list.html",'<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-envelope"></i>\n <a href="#">{{ \'APPLICATION_MAIL\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-docs"></i>\n <a href="#">{{ \'APPLICATION_QUEUES\' | translate }}</a>\n </li>\n </ul>\n </div>\n </div>\n</div>\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-docs font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_QUEUES\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group" data-ng-if="Auth.isAdmin()">\n <a class="btn green-jungle" href="#" data-ng-click="createItem()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_QUEUE\' | translate }}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/mail/queue/view/view.agents.html",'<div class="row" data-ng-init="getTeams()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_AGENTS\' | translate}}</span>\n </div>\n </div>\n <div class="note note-warning" data-ng-hide="teams.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_AVAILABLE_TEAMS\' | translate }}\n </p>\n </div>\n <div class="portlet-body">\n <!-- BEGIN FORM-->\n <form action="index.html" class="form-horizontal form-row-seperated">\n <div class="form-body">\n <label for="penalty">{{\'APPLICATION_PENALTY\' | translate}}</label>\n <div class="input-group input-small mbottom20">\n <input type="number" class="spinner-input form-control" maxlength="3" data-ng-model="queue.penalty" readonly>\n <div class="spinner-buttons input-group-btn btn-group-vertical">\n <button type="button" class="btn spinner-up btn-xs blue" data-ng-click="queue.penalty=queue.penalty+1">\n <i class="fa fa-angle-up"></i>\n </button>\n <button type="button" class="btn spinner-down btn-xs blue" data-ng-disabled="!queue.penalty" data-ng-click="queue.penalty=queue.penalty-1">\n <i class="fa fa-angle-down"></i>\n </button>\n </div>\n </div>\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-team">\n </div>\n </div>\n </div>\n </form>\n <!-- END FORM-->\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/mail/queue/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getQueue()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-envelope"></i>\n <a href="#">{{ \'APPLICATION_MAIL\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-docs"></i>\n <a href="/channels/mail/queues/list">{{ \'APPLICATION_QUEUES\' | translate }}</a>\n <i data-ng-show="queue" class="fa fa-angle-right"></i>\n </li>\n <li data-ng-show="queue">\n <a href="#">{{queue.name}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET main.channels -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/queue.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{queue.name}}\n </div>\n <!-- <div class="profile-usertitle-job">\n {{user.role}}\n </div> -->\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.channels.mail.queues.view.settings\')}">\n <a data-ng-href="/channels/mail/queues/view/{{queue.id}}/settings">\n <i class="icon-settings"></i>\n {{ \'APPLICATION_SETTINGS\' | translate}} </a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.channels.mail.queues.view.agents\')}" data-ng-show="Auth.getCurrentUser().role === \'admin\'">\n <a data-ng-href="/channels/mail/queues/view/{{queue.id}}/agents">\n <i class="icon-people"></i>\n {{ \'APPLICATION_AGENTS\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET main.channels -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n </div>\n <!-- END PAGE CONTENT-->\n'),a.put("app/channels/mail/queue/view/view.settings.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_SETTINGS\' | translate}}</span>\n </div>\n </div>\n <div class="portlet-body">\n <form name="forms.general" data-ng-submit="forms.general.$valid && updateMailQueue()" novalidate>\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="queue.name" data-ng-pattern="settings.patternName" required />\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid && forms.general.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid && forms.general.name.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_PATTERN_NAME\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="queue.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n <!-- START TIMEOUT -->\n <div class="form-group">\n <label class="control-label">Agent Timeout</label>\n <input type="number" name="timeout" placeholder="Timeout" class="form-control" min="1" data-ng-model="queue.timeout"/>\n </div>\n <!-- END TIMEOUT -->\n\n <!-- START STRATEGY -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.strategy.$touched || forms.general.$submitted) && forms.general.strategy.$invalid}">\n <label class="control-label">{{\'APPLICATION_STRATEGY\' | translate}}</label>\n <ui-select data-ng-model="queue.strategy" name="strategy" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected | uppercase}}</ui-select-match>\n <ui-select-choices repeat="strategy in strategies | filter: $select.search">\n <div ng-bind-html="strategy.toUpperCase() | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END STRATEGY -->\n\n <input data-ng-if="Auth.isAdmin()" class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/mail/realtime/view/agent/agent.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initAgents()">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns class="ui-grid" ui-grid-tree-view ui-grid-expandable-row ui-grid-pagination ui-grid-auto-resize>\n <span us-spinner spinner-key="grid-spinner" spinner-start-active="true"></span>\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/mail/realtime/view/agent/agent.modal.info.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_INTERFACE_INFO\' | translate }}</h3>\n</div>\n<div class="modal-body">\n<div data-ng-if="agent.ipaddr" class="well">\n <div>{{agent.ipaddr}}:{{agent.port}}</div>\n <div>{{agent.fullcontact}}</div>\n <div>{{agent.useragent}}</div>\n <div>{{agent.lastms}}</div>\n</div>\n<div data-ng-if="!agent.ipaddr" class="alert alert-danger" role="alert">\n {{\'MESSAGE_NO_AVAILABLE_INFO\' | translate}}\n</div>\n</div>\n<div class="modal-footer">\n <button class="btn default" type="button" ng-click="close()">{{ \'APPLICATION_CLOSE\' | translate }}</button>\n</div>\n'),a.put("app/channels/mail/realtime/view/agent/queue.modal.add.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_JOIN_QUEUE\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <div class="form-group row">\n <label class="col-md-2 control-label" style="margin-top: 7px;">{{\'APPLICATION_QUEUE\' | translate}}:</label>\n <div class="col-md-10">\n <ui-select multiple ng-model="item.queues" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_QUEUE\' | translate}}">{{$item.name}}</ui-select-match>\n <ui-select-choices repeat="queue.id as queue in queues | filter: $select.search">\n <div ng-bind-html="queue.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n</div>\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/mail/realtime/view/application/application.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initApplications()">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns class="ui-grid" ui-grid-auto-resize>\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/mail/realtime/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-envelope"></i>\n <a href="#">{{ \'APPLICATION_MAIL\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-energy"></i>\n <a href="#">{{ \'APPLICATION_REALTIME\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <div>\n <nav class="navbar navbar-default" role="navigation">\n <div class="collapse navbar-collapse">\n <ul class="nav navbar-nav">\n <li data-ng-class="{\'active\': $state.is(\'main.channels.mail.realtime.view.agents\')}">\n <a href="/channels/mail/realtime/view/agents">\n {{\'APPLICATION_AGENTS\' | translate}}\n </a>\n </li>\n <li data-ng-class="{\'active\': $state.is(\'main.channels.mail.realtime.view.applications\')}">\n <a href="/channels/mail/realtime/view/applications">\n {{\'APPLICATION_APPLICATIONS\' | translate}}\n </a>\n </li>\n </ul>\n </div>\n </nav>\n </div>\n\n <div ui-view></div>\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/mail/realtime/view/view.queue.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initAgents()">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div id="grid1" ui-grid="gridOptions" ui-grid-resize-columns ui-grid-tree-view class="grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/openchannel/account/list/list.html",'<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-globe"></i>\n <a href="#">{{ \'APPLICATION_OPEN_CHANNEL\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-notebook"></i>\n <a href="/channels/openchannel/accounts/list">{{ \'APPLICATION_ACCOUNTS\' | translate }}</a>\n </li>\n </ul>\n </div>\n </div>\n</div>\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-notebook font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_ACCOUNTS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group">\n <a class="btn btn-default" href="#" data-ng-click="gridOptions.getPage();">\n <i class="icon-reload"></i>\n </a>\n </div>\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <a class="btn green-jungle" href="/channels/openchannel/accounts/wizard">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_ACCOUNT\' | translate }}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/openchannel/account/view/action/list/list.html",'<div class="row" data-ng-init="initActions()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_ACTIONS\' | translate}}</span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <a class="btn green-jungle" href="/channels/openchannel/accounts/view/{{account.id}}/actions/wizard" data-toggle="dropdown">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_ACTION\' | translate }}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n </div>\n</div>\n'), +a.put("app/channels/openchannel/account/view/action/view/view.html",'\n<div class="row" data-ng-init="initAction()">\n <div class="col-md-12">\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-directions font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_ACTION\' | translate }}</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <form name="forms.settings" ng-submit="updateItem()" novalidate>\n <!-- START APP -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.app.$touched || forms.settings.$submitted) && forms.settings.app.$invalid}">\n <label class="control-label">{{ \'APPLICATION_APPLICATION\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.app" name="app" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_APPLICATION\' | translate }}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="app.value as app in apps | filter: $select.search">\n <div ng-bind-html="app.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.app.$touched || forms.settings.$submitted) && forms.settings.app.$invalid && forms.settings.app.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END APP -->\n\n <div class="app-settings" ng-slide-down="application.app === \'queue\'" lazy-render duration="1" data-ng-init="getQueues()">\n <!-- START QUEUE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.queue.$touched || forms.settings.$submitted) && forms.settings.queue.$invalid}">\n <label class="control-label">{{\'APPLICATION_QUEUE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.OpenchannelQueueId" name="queue" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="queue.id as queue in queues | filter: $select.search">\n <div ng-bind-html="queue.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="queues.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_QUEUES_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/channels/openchannel/queues/list">{{\'APPLICATION_QUEUES\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.settings.queue.$touched || forms.settings.$submitted) && forms.settings.queue.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END QUEUE -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="number" name="timeout" placeholder="{{\'APPLICATION_TIMEOUT\' | translate}}" class="form-control" data-ng-model="application.timeout" min="1" required/>\n <span data-ng-show="(forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid && forms.settings.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.app === \'agent\'" lazy-render duration="1" data-ng-init="getAgents()">\n <!-- START AGENT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.agent.$touched || forms.settings.$submitted) && forms.settings.agent.$invalid}">\n <label class="control-label">{{\'APPLICATION_AGENT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.UserId" name="agent" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.fullname}}</ui-select-match>\n <ui-select-choices repeat="agent.id as agent in agents | filter: $select.search">\n <div ng-bind-html="agent.fullname | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="agents.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_AGENTS_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/staff/agents/list">{{\'APPLICATION_QUEUES\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.settings.agent.$touched || forms.settings.$submitted) && forms.settings.agent.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END AGENT -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="number" name="timeout" placeholder="{{\'APPLICATION_TIMEOUT\' | translate}}" class="form-control" data-ng-model="application.timeout" min="1" required/>\n <span data-ng-show="(forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid && forms.settings.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.app === \'sendMail\'" lazy-render duration="1" data-ng-init="getMailAccounts();getTemplates()">\n <!-- START SENDMAIL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TO\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="email" name="to" placeholder="{{\'APPLICATION_TO\' | translate}}" class="form-control" data-ng-model="application.data2" min="1" required/>\n <span data-ng-show="(forms.settings.from.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid && forms.settings.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.mail.$touched || forms.settings.$submitted) && forms.settings.account.$invalid}">\n <label class="control-label">{{\'APPLICATION_ACCOUNT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data8" name="account" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="account.id as account in mailAccounts | filter: $select.search">\n <div ng-bind-html="account.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.account.$touched || forms.settings.$submitted) && forms.settings.account.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.template.$touched || forms.settings.$submitted) && forms.settings.template.$invalid}">\n <label class="control-label">{{\'APPLICATION_TEMPLATE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data9" name="template" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="template.id as template in templates | filter: $select.search">\n <div ng-bind-html="template.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.template.$touched || forms.settings.$submitted) && forms.settings.template.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END SENDMAIL -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.app === \'sendSms\'" lazy-render duration="1" data-ng-init="getSmsAccounts()">\n <!-- START SENDSms -->\n <div class="app-settings" ng-slide-down="application.app === \'sendSms\'" lazy-render duration="1">\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.to.$touched || forms.settings.$submitted) && forms.settings.to.$invalid}">\n <label class="control-label">{{\'APPLICATION_TO\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" ng-pattern="/^[\\+]?[0-9]+$/" name="to" placeholder="{{\'APPLICATION_TO\' | translate}}" class="form-control" data-ng-model="application.data2" required/>\n <span data-ng-show="(forms.settings.to.$touched || forms.settings.$submitted) && forms.settings.to.$invalid && forms.settings.to.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.account.$touched || forms.settings.$submitted) && forms.settings.account.$invalid}">\n <label class="control-label">{{\'APPLICATION_ACCOUNT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data8" name="account" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="account.id as account in smsAccounts | filter: $select.search">\n <div ng-bind-html="account.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.account.$touched || forms.settings.$submitted) && forms.settings.account.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.text.$touched || forms.text.$submitted) && forms.settings.text.$invalid}">\n <label class="control-label">{{\'APPLICATION_TEXT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <textarea id="text" class="form-control maxlength-handler" maxlength="160" name="text" data-ng-model="application.data6" required></textarea>\n <span data-ng-show="(forms.settings.text.$touched || forms.settings.$submitted) && forms.settings.text.$invalid && forms.settings.text.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n\n <!-- END SENDSms -->\n </div>\n\n <!-- START INTERVAL_TYPE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.intType.$touched || forms.settings.$submitted) && forms.settings.intType.$invalid}">\n <label class="control-label">{{ \'APPLICATION_INTERVAL_TYPE\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.intType" theme="bootstrap" name="intType" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="intType.value as intType in $application.intTypes | filter: $select.search">\n {{ intType.name | translate }}\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.intType.$touched || forms.settings.$submitted) && forms.settings.intType.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERVAL_TYPE -->\n\n <div class="app-settings" ng-slide-down="application.intType === \'custom\'" lazy-render duration="1">\n <!-- START TIME -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_TIME\' | translate }}</label>\n <div class="input-group input-large">\n <fieldset class="pull-left" ng-disabled="application.alwaysTime">\n <uib-timepicker name="t_from" data-ng-model="application.t_from" show-meridian="false" show-spinners="false" mousewheel="false"></uib-timepicker>\n </fieldset>\n <div class="input-group-addon col-md-1 interval-to pull-left">to</div>\n <fieldset ng-disabled="application.alwaysTime"><uib-timepicker name="t_to" data-ng-model="application.t_to" show-meridian="false" show-spinners="false" mousewheel="false"></uib-timepicker></fieldset>\n <!-- <label class="control-label pointer-cursor"><input type="checkbox" data-ng-model="application.alwaysTime">{{\'APPLICATION_ALWAYS\' | translate}}</label> -->\n </div>\n </div>\n <!-- END TIME -->\n\n <!-- START ALWAYS -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_ALWAYS\' | translate }}</label>\n <div class="input-group input-large">\n <label class="control-label pointer-cursor">\n <input\n bs-switch\n data-ng-model="application.alwaysTime"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n <!-- <input type="checkbox" data-ng-model="application.alwaysTime"> -->\n </label>\n </div>\n </div>\n <!-- END ALWAYS -->\n\n <!-- START WEEKDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_WEEKDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="application.wd_from" theme="bootstrap" name="wd_from">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{ weekDay.name | translate}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="application.wd_to" theme="bootstrap" name="wd_to">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{ weekDay.name | translate }}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END WEEKDAY -->\n\n <!-- START MONTHDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTHDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="application.md_from" theme="bootstrap" name="md_from">\n <ui-select-match allow-clear>{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search" ui-disable-choice="application.md_to && application.md_to!==\'always\' && monthDay>application.md_to && monthDay!==\'always\'">\n {{monthDay}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="application.md_to" theme="bootstrap" name="md_to">\n <ui-select-match allow-clear>{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search" ui-disable-choice="application.md_from && application.md_from!==\'always\' && monthDay<application.md_from && monthDay!==\'always\'">\n {{monthDay}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTHDAY -->\n\n <!-- START MONTH -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTH\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="application.m_from" theme="bootstrap" name="m_from">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{ month.name | translate }}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="application.m_to" theme="bootstrap" name="m_to">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{ month.name | translate }}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTH -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.intType === \'list\'" lazy-render duration="1" data-ng-init="getIntervals()">\n\n <!-- START INTERVALS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.IntervalId.$touched || forms.settings.$submitted) && forms.settings.IntervalId.$invalid}">\n <label class="control-label">{{\'APPLICATION_INTERVALS\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.IntervalId" theme="bootstrap" name="IntervalId" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{ $select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="interval.id as interval in intervals | filter: $select.search">\n {{ interval.name}}\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="intervals.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_INTERVAL_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/tools/intervals/list">{{\'APPLICATION_INTERVALS\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.settings.IntervalId.$touched || forms.settings.$submitted) && forms.settings.IntervalId.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERVALS -->\n\n </div>\n <button class="btn green-haze" type="submit">{{\'APPLICATION_UPDATE\' | translate}}</button>\n </form>\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/openchannel/account/view/action/wizard/wizard.html",'<div class="row" data-ng-init="initWizard()">\n <div class="col-md-12">\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-directions font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_ACTION\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="createItem()">\n <wz-step title="{{\'APPLICATION_APPLICATION\' | translate}}" canexit="formValidation(forms.action.$valid)">\n <form name="forms.action" novalidate>\n <!-- START APP -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.action.$submitted && forms.action.app.$invalid}">\n <label class="control-label">{{ \'APPLICATION_APPLICATION\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.app" name="app" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_APPLICATION\' | translate }}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="app.value as app in apps | filter: $select.search">\n <div ng-bind-html="app.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.action.$submitted && forms.action.app.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END APP -->\n\n <div class="app-settings" ng-slide-down="application.app === \'agent\'" lazy-render duration="1" data-ng-init="getAgents()">\n <!-- START AGENT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.agent.$touched || forms.action.$submitted) && forms.action.agent.$invalid}">\n <label class="control-label">{{\'APPLICATION_AGENT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.UserId" name="agent" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.fullname}}</ui-select-match>\n <ui-select-choices repeat="agent.id as agent in agents | filter: $select.search">\n <div ng-bind-html="agent.fullname | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="agents.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_AGENTS_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/staff/agents/list">{{\'APPLICATION_QUEUES\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.action.agent.$touched || forms.action.$submitted) && forms.action.agent.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END AGENT -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.timeout.$touched || forms.action.$submitted) && forms.action.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="number" name="timeout" placeholder="{{\'APPLICATION_TIMEOUT\' | translate}}" class="form-control" data-ng-model="application.timeout" min="1" required/>\n <span data-ng-show="(forms.action.timeout.$touched || forms.action.$submitted) && forms.action.timeout.$invalid && forms.action.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n\n </div>\n\n <div class="app-settings" ng-slide-down="application.app === \'queue\'" lazy-render duration="1" data-ng-init="getQueues()">\n <!-- START QUEUE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.queue.$touched || forms.action.$submitted) && forms.action.queue.$invalid}">\n <label class="control-label">{{\'APPLICATION_QUEUE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.ChatQueueId" name="queue" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="queue.id as queue in queues | filter: $select.search">\n <div ng-bind-html="queue.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="queues.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_QUEUES_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/channels/openchannel/queues/list">{{\'APPLICATION_QUEUES\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.action.queue.$touched || forms.action.$submitted) && forms.action.queue.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END QUEUE -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.timeout.$touched || forms.action.$submitted) && forms.action.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="number" name="timeout" placeholder="{{\'APPLICATION_TIMEOUT\' | translate}}" class="form-control" data-ng-model="application.timeout" min="1" required/>\n <span data-ng-show="(forms.action.timeout.$touched || forms.action.$submitted) && forms.action.timeout.$invalid && forms.action.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.app === \'sendMail\'" lazy-render duration="1" data-ng-init="getMailAccounts();getTemplates()">\n <!-- START SENDMAIL -->\n <div class="app-settings" ng-slide-down="application.app === \'sendMail\'" lazy-render duration="1">\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.timeout.$touched || forms.action.$submitted) && forms.action.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TO\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="email" name="to" placeholder="{{\'APPLICATION_TO\' | translate}}" class="form-control" data-ng-model="application.data2" min="1" required/>\n <span data-ng-show="(forms.action.from.$touched || forms.action.$submitted) && forms.action.timeout.$invalid && forms.action.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.mail.$touched || forms.action.$submitted) && forms.action.account.$invalid}">\n <label class="control-label">{{\'APPLICATION_ACCOUNT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data8" name="account" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="account.id as account in mailAccounts | filter: $select.search">\n <div ng-bind-html="account.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.action.account.$touched || forms.action.$submitted) && forms.action.account.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.template.$touched || forms.action.$submitted) && forms.action.template.$invalid}">\n <label class="control-label">{{\'APPLICATION_TEMPLATE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data9" name="template" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="template.id as template in templates | filter: $select.search">\n <div ng-bind-html="template.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.action.template.$touched || forms.action.$submitted) && forms.action.template.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END SENDMAIL -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.app === \'sendSms\'" lazy-render duration="1" data-ng-init="getSmsAccounts()">\n <!-- START SENDSms -->\n <div class="app-settings" ng-slide-down="application.app === \'sendSms\'" lazy-render duration="1">\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.to.$touched || forms.action.$submitted) && forms.action.to.$invalid}">\n <label class="control-label">{{\'APPLICATION_TO\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" ng-pattern="/^[\\+]?[0-9]+$/" name="to" placeholder="{{\'APPLICATION_TO\' | translate}}" class="form-control" data-ng-model="application.data2" required/>\n <span data-ng-show="(forms.action.to.$touched || forms.action.$submitted) && forms.action.to.$invalid && forms.action.to.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.account.$touched || forms.action.$submitted) && forms.action.account.$invalid}">\n <label class="control-label">{{\'APPLICATION_ACCOUNT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data8" name="account" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="account.id as account in smsAccounts | filter: $select.search">\n <div ng-bind-html="account.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.action.account.$touched || forms.action.$submitted) && forms.action.account.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.text.$touched || forms.action.$submitted) && forms.action.text.$invalid}">\n <label class="control-label">{{\'APPLICATION_TEXT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <textarea id="text" class="form-control maxlength-handler" maxlength="160" name="text" data-ng-model="application.data6" required></textarea>\n <span data-ng-show="(forms.action.text.$touched || forms.action.$submitted) && forms.action.text.$invalid && forms.action.text.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n\n <!-- END SENDSms -->\n </div>\n\n <!-- START INTERVAL_TYPE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.intType.$touched || forms.action.$submitted) && forms.action.intType.$invalid}">\n <label class="control-label">{{ \'APPLICATION_INTERVAL_TYPE\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.intType" theme="bootstrap" name="intType" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="intType.value as intType in $application.intTypes | filter: $select.search">\n {{ intType.name | translate }}\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.action.intType.$touched || forms.action.$submitted) && forms.action.intType.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERVAL_TYPE -->\n\n <div class="app-settings" ng-slide-down="application.intType === \'custom\'" lazy-render duration="1">\n <!-- START TIME -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_TIME\' | translate }}</label>\n <div class="input-group input-large">\n <fieldset class="pull-left" ng-disabled="application.alwaysTime">\n <uib-timepicker name="t_from" data-ng-model="application.t_from" show-meridian="false" show-spinners="false" mousewheel="false"></uib-timepicker>\n </fieldset>\n <div class="input-group-addon col-md-1 interval-to pull-left">to</div>\n <fieldset ng-disabled="application.alwaysTime">\n <uib-timepicker name="t_to" data-ng-model="application.t_to" show-meridian="false" show-spinners="false" mousewheel="false"></uib-timepicker>\n </fieldset>\n <!-- <label class="control-label pointer-cursor"><input type="checkbox" data-ng-model="application.alwaysTime">{{\'APPLICATION_ALWAYS\' | translate}}</label> -->\n </div>\n </div>\n <!-- END TIME -->\n\n <!-- START ALWAYS -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_ALWAYS\' | translate }}</label>\n <div class="input-group input-large">\n <label class="control-label pointer-cursor">\n <input\n bs-switch\n data-ng-model="application.alwaysTime"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n <!-- <input type="checkbox" data-ng-model="application.alwaysTime"> -->\n </label>\n </div>\n </div>\n <!-- END ALWAYS -->\n\n <!-- START WEEKDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_WEEKDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="application.wd_from" theme="bootstrap" name="wd_from">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{ weekDay.name | translate}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="application.wd_to" theme="bootstrap" name="wd_to">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{ weekDay.name | translate }}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END WEEKDAY -->\n\n <!-- START MONTHDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTHDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="application.md_from" theme="bootstrap" name="md_from">\n <ui-select-match allow-clear>{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search" ui-disable-choice="application.md_to && application.md_to!==\'always\' && monthDay>application.md_to && monthDay!==\'always\'">\n {{monthDay}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="application.md_to" theme="bootstrap" name="md_to">\n <ui-select-match allow-clear>{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search" ui-disable-choice="application.md_from && application.md_from!==\'always\' && monthDay<application.md_from && monthDay!==\'always\'">\n {{monthDay}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTHDAY -->\n\n <!-- START MONTH -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTH\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="application.m_from" theme="bootstrap" name="m_from">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{ month.name | translate }}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="application.m_to" theme="bootstrap" name="m_to">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{ month.name | translate }}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTH -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.intType === \'list\'" lazy-render duration="1" data-ng-init="getIntervals()">\n\n <!-- START INTERVALS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.IntervalId.$touched || forms.action.$submitted) && forms.action.IntervalId.$invalid}">\n <label class="control-label">{{\'APPLICATION_INTERVALS\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.IntervalId" theme="bootstrap" name="IntervalId" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{ $select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="interval.id as interval in intervals | filter: $select.search">\n {{ interval.name}}\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="intervals.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_INTERVAL_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/tools/intervals/list">{{\'APPLICATION_INTERVALS\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.action.IntervalId.$touched || forms.action.$submitted) && forms.action.IntervalId.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERVALS -->\n\n </div>\n\n <input class="btn green-haze" type="submit" data-ng-click="next()" value="{{\'APPLICATION_CONTINUE\' | translate}}" />\n </form>\n </wz-step>\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n <input class="btn green-haze" type="submit" data-ng-click="next()" value="{{\'APPLICATION_CONFIRM\' | translate}}" />\n </wz-step>\n </wizard>\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'), +a.put("app/channels/openchannel/account/view/api/view/view.html",'<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_API\' | translate}}</span>\n </div>\n </div>\n <div class="portlet-body">\n <div class="tab-content">\n <div class="tab-pane active" id="tab_1_1">\n <!-- START API -->\n <div class="row" >\n <div class="col-md-12">\n <label class="control-label">Receive URL</label>\n </div>\n </div>\n <div class="row" >\n <div class="col-md-11">\n <code-mirror model="receiveurl"></code-mirror>\n </div>\n <div class="col-md-1">\n <a class="btn btn-sm green-jungle" data-ng-click="copyToClipboard(receiveurl);"><i class="fa fa-clipboard"></i>\n </a>\n </div>\n </div>\n <!-- END API -->\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/openchannel/account/view/disposition/modal/add.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_DISPOSITIONS\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.form.$touched || form.$submitted) && form.form.$invalid}">\n <div class="">\n <input type="text" name="form" placeholder="{{\'APPLICATION_DISPOSITION\' | translate}}" class="form-control" data-ng-model="name" required/>\n <span data-ng-show="form.form.$touched && form.form.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n <!-- END NAME -->\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" data-ng-click="ok()" data-ng-show="form.$valid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" data-ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/openchannel/account/view/disposition/view/view.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_DISPOSITIONS\' | translate}}</span>\n </div>\n <div class="actions actions-md">\n <a href="#" class="btn btn-icon-only green" data-ng-click="addDisposition();">\n <i class="fa fa-plus"></i>\n </a>\n </div>\n </div>\n <div class="portlet-body" data-ng-init="initView()">\n <div class="tab-content">\n <div class="row" data-ng-hide="dispositions.length">\n <div class="col-md-12">\n <div class="note note-info">\n <h4 class="block">Info! {{\'MESSAGE_NO_DISPOSITIONS_AVAILABLE\' | translate}}</h4>\n </div>\n </div>\n </div>\n\n <!-- GENERAL TAB -->\n <div class="row" data-ng-repeat="disposition in dispositions">\n <div class="col-md-12 form-group">\n <div class="input-group">\n <div>\n <input class="form-control" type="text" placeholder="{{\'APPLICATION_DISPOSITION\' | translate}}" data-ng-model="disposition.name">\n </div>\n <span class="input-group-btn">\n <button class="btn btn-success" type="button" data-ng-click="updateDisposition(disposition.id, disposition.name);"><i class="fa fa-cloud-upload fa-fw"></i> {{\'APPLICATION_UPDATE\' | translate}}</button>\n <button class="btn btn-danger" type="button" data-ng-click="deleteDisposition(disposition.id);"><i class="fa fa-times fa-fw"></i> {{\'APPLICATION_DELETE\' | translate}}</button>\n </span>\n </div>\n </div>\n </div>\n <!-- END GENERAL TAB -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/openchannel/account/view/hooks/view/view.html",'<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_HOOKS\' | translate}}</span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_SEND\' | translate}}</a>\n </li>\n <li >\n <a href="#" data-target="#tab_1_2" data-toggle="tab">{{\'APPLICATION_ACCEPT\' | translate}}</a>\n </li>\n <li >\n <a href="#" data-target="#tab_1_3" data-toggle="tab">{{\'APPLICATION_REJECT\' | translate}}</a>\n </li>\n <li >\n <a href="#" data-target="#tab_1_4" data-toggle="tab">{{\'APPLICATION_CLOSE\' | translate}}</a>\n </li>\n </ul>\n </div>\n <div class="portlet-body">\n <div class="tab-content">\n <!-- START REPLY TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.info" data-ng-submit="forms.info.$valid && updateItem()" novalidate>\n <div class="row">\n <div class="form-group col-md-4" data-ng-class="{\'has-error\': (forms.info.method.$touched || forms.info.$submitted) && forms.info.method.$invalid}">\n <label class="control-label">{{\'APPLICATION_METHOD\' | translate}}</label>\n <ui-select data-ng-model="account.replyMethod" name="method" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_METHOD\' | translate}}">{{$select.selected.name | uppercase}}</ui-select-match>\n <ui-select-choices repeat="type.value as type in types | filter: $select.search" >\n <div ng-bind-html="type.name | highlight: $select.search | uppercase" ></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.info.method.$touched || forms.info.$submitted) && forms.info.method.$invalid && forms.info.method.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div class="form-group col-md-8" data-ng-class="{\'has-error\': (forms.info.url.$touched || forms.info.$submitted) && forms.info.url.$invalid}">\n <label class="control-label">{{\'APPLICATION_URL\' | translate}}</label>\n <input type="url" name="url" placeholder="{{\'APPLICATION_URL\' | translate}}" class="form-control" data-ng-model="account.replyUrl" ng-required="account.replyMethod"/>\n <span data-ng-show="(forms.info.url.$touched || forms.info.$submitted) && forms.info.url.$invalid && forms.info.url.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END REPLY TAB -->\n\n <!-- START ACCEPT TAB -->\n <div class="tab-pane" id="tab_1_2">\n <form name="forms.accept" data-ng-submit="forms.accept.$valid && updateItem()" novalidate>\n <div class="row">\n <div class="form-group col-md-4" data-ng-class="{\'has-error\': (forms.accept.method.$touched || forms.accept.$submitted) && forms.accept.method.$invalid}">\n <label class="control-label">{{\'APPLICATION_METHOD\' | translate}}</label>\n <ui-select data-ng-model="account.acceptMethod" name="method" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_METHOD\' | translate}}">{{$select.selected.name | uppercase}}</ui-select-match>\n <ui-select-choices repeat="type.value as type in types | filter: $select.search">\n <div ng-bind-html="type.name | highlight: $select.search | uppercase" ></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.accept.method.$touched || forms.accept.$submitted) && forms.accept.method.$invalid && forms.accept.method.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div class="form-group col-md-8" data-ng-class="{\'has-error\': (forms.accept.url.$touched || forms.accept.$submitted) && forms.accept.url.$invalid}">\n <label class="control-label">{{\'APPLICATION_URL\' | translate}}</label>\n <input type="url" name="url" placeholder="{{\'APPLICATION_URL\' | translate}}" class="form-control" data-ng-model="account.acceptUrl" ng-required="account.acceptMethod"/>\n <span data-ng-show="(forms.accept.url.$touched || forms.accept.$submitted) && forms.accept.url.$invalid && forms.accept.url.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n <!-- START ACTIONS-->\n <div class="row" ng-repeat = "action in account.actions">\n <div ng-switch="action.action">\n <div ng-switch-when="pause">\n <div class="form-group col-md-4">\n <label class="control-label">{{\'APPLICATION_PAUSE\' | translate}}</label></br>\n <input\n bs-switch\n data-ng-change="resetActionData(action)"\n data-ng-model="action.enabled"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_ENABLED\' | translate }}"\n switch-off-text="{{ \'APPLICATION_DISABLED\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n </div>\n <div ng-if="action.enabled" class="form-group col-md-8">\n <label class="control-label">{{\'APPLICATION_TYPE\' | translate}}</label>\n <ui-select name="action" data-ng-model="action.type" theme="bootstrap" >\n <ui-select-match placeholder="{{\'APPLICATION_TYPE\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat=" pause.name as pause in pauses | filter: $select.search">\n <div ng-bind-html="pause.name | highlight: $select.search | uppercase" ></div>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n </div>\n </div>\n <!-- END ACTION -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END ACCEPT TAB -->\n <!-- START REJECT TAB -->\n <div class="tab-pane" id="tab_1_3">\n <form name="forms.reject" data-ng-submit="forms.reject.$valid && updateItem()" novalidate>\n <div class="row">\n <div class="form-group col-md-4" data-ng-class="{\'has-error\': (forms.reject.method.$touched || forms.reject.$submitted) && forms.reject.method.$invalid}">\n <label class="control-label">{{\'APPLICATION_METHOD\' | translate}}</label>\n <ui-select data-ng-model="account.rejectMethod" name="method" theme="bootstrap" >\n <ui-select-match placeholder="{{\'APPLICATION_METHOD\' | translate}}">{{$select.selected.name | uppercase}}</ui-select-match>\n <ui-select-choices repeat="type.value as type in types | filter: $select.search">\n <div ng-bind-html="type.name | highlight: $select.search | uppercase" ></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.reject.method.$touched || forms.reject.$submitted) && forms.reject.method.$invalid && forms.reject.method.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div class="form-group col-md-8" data-ng-class="{\'has-error\': (forms.reject.url.$touched || forms.reject.$submitted) && forms.reject.url.$invalid}">\n <label class="control-label">{{\'APPLICATION_URL\' | translate}}</label>\n <input type="url" name="url" placeholder="{{\'APPLICATION_URL\' | translate}}" class="form-control" data-ng-model="account.rejectUrl" ng-required="account.rejectMethod"/>\n <span data-ng-show="(forms.reject.url.$touched || forms.reject.$submitted) && forms.reject.url.$invalid && forms.reject.url.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END REJECT TAB -->\n <!-- START CLOSE TAB -->\n <div class="tab-pane" id="tab_1_4">\n <form name="forms.close" data-ng-submit="forms.close.$valid && updateItem()" novalidate>\n <div class="row">\n <div class="form-group col-md-4" data-ng-class="{\'has-error\': (forms.close.method.$touched || forms.close.$submitted) && forms.close.method.$invalid}">\n <label class="control-label">{{\'APPLICATION_METHOD\' | translate}}</label>\n <ui-select data-ng-model="account.closeMethod" name="method" theme="bootstrap" >\n <ui-select-match placeholder="{{\'APPLICATION_METHOD\' | translate}}">{{$select.selected.name | uppercase}}</ui-select-match>\n <ui-select-choices repeat="type.value as type in types | filter: $select.search">\n <div ng-bind-html="type.name | highlight: $select.search | uppercase" ></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.close.method.$touched || forms.close.$submitted) && forms.close.method.$invalid && forms.close.method.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div class="form-group col-md-8" data-ng-class="{\'has-error\': (forms.close.url.$touched || forms.close.$submitted) && forms.close.url.$invalid}">\n <label class="control-label">{{\'APPLICATION_URL\' | translate}}</label>\n <input type="url" name="url" placeholder="{{\'APPLICATION_URL\' | translate}}" class="form-control" data-ng-model="account.closeUrl" ng-required="account.closeMethod"/>\n <span data-ng-show="(forms.close.url.$touched || forms.close.$submitted) && forms.close.url.$invalid && forms.close.url.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END CLOSE TAB -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/openchannel/account/view/setting/view/view.html",'<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_SETTINGS\' | translate}}</span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_GENERALS\' | translate}}</a>\n </li>\n </ul>\n </div>\n <div class="portlet-body">\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.info" data-ng-submit="forms.info.$valid && updateItem()" novalidate>\n <!-- START ID -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_ID\' | translate}}<span class="required" aria-required="true">*</span>\n </label>\n <input type="text" name="id" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="account.id" ng-disabled="true" required/>\n </div>\n <!-- END ID-->\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="account.name" required/>\n <span data-ng-show="(forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid && forms.info.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n <!-- START LIST -->\n <div class="form-group" data-ng-if="license.cm">\n <label class="control-label">{{\'APPLICATION_LIST\' | translate}}</label>\n <div class="input-group">\n\n <ui-select data-ng-model="account.ListId" name="list" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_LIST\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="list.id as list in lists | filter: $select.search">\n <div ng-bind-html="list.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n\n <span class="input-group-btn">\n <button type="button" data-ng-click="account.ListId = null" class="btn btn-default">\n <span class="glyphicon glyphicon-trash"></span>\n </button>\n </span>\n\n </div>\n </div>\n <!-- END LIST -->\n <!-- START FIDELITY -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_FIDELITY\' | translate}}</label></br>\n <input\n bs-switch\n data-ng-model="account.fidelity"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_ENABLED\' | translate }}"\n switch-off-text="{{ \'APPLICATION_DISABLED\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n </div>\n <!-- END FIDELITY -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-if="account.fidelity" data-ng-class="{\'has-error\': (forms.info.timeout.$touched || forms.info.$submitted) && forms.info.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" min="0" name="timeout" placeholder="{{\'APPLICATION_PORT\' | translate}}" class="form-control" data-ng-model="account.timeout" required/>\n <span data-ng-show="(forms.info.timeout.$touched || forms.info.$submitted) && forms.info.timeout.$invalid && forms.info.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.info.timeout.$touched || forms.info.$submitted) && forms.info.timeout.$invalid && forms.info.timeout.$error.number" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_NUMERIC_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="account.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n <!-- START CUSTOM -->\n <!-- <div class="form-group">\n <label class="control-label">{{\'APPLICATION_REPLY\' | translate}}</label></br>\n <input\n bs-switch\n data-ng-model="account.reply"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_ENABLED\' | translate }}"\n switch-off-text="{{ \'APPLICATION_DISABLED\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n </div> -->\n <!-- START REPLY HOOK -->\n <!-- <div ng-if= "account.reply" class="row">\n <div class="form-group col-md-4" data-ng-class="{\'has-error\': (forms.info.method.$touched || forms.info.$submitted) && forms.info.method.$invalid}">\n <label class="control-label">{{\'APPLICATION_METHOD\' | translate}}</label>\n <ui-select data-ng-model="account.replyMethod" name="method" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_METHOD\' | translate}}">{{$select.selected.name | uppercase}}</ui-select-match>\n <ui-select-choices repeat="type.value as type in types | filter: $select.search" >\n <div ng-bind-html="type.name | highlight: $select.search | uppercase" ></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.info.method.$touched || forms.info.$submitted) && forms.info.method.$invalid && forms.info.method.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div class="form-group col-md-8" data-ng-class="{\'has-error\': (forms.info.url.$touched || forms.info.$submitted) && forms.info.url.$invalid}">\n <label class="control-label">{{\'APPLICATION_URL\' | translate}}</label>\n <input type="url" name="url" placeholder="{{\'APPLICATION_URL\' | translate}}" class="form-control" data-ng-model="account.replyUrl" required/>\n <span data-ng-show="(forms.info.url.$touched || forms.info.$submitted) && forms.info.url.$invalid && forms.info.url.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div> -->\n <!-- START REPLY HOOK -->\n <!-- END CUSTOM -->\n\n <!-- START REMOTE IP -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.remote.$touched || forms.info.$submitted) && forms.info.remote.$invalid}">\n <label class="control-label">{{\'APPLICATION_MOTION_ADDRESS\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="url" name="remote" placeholder="{{\'APPLICATION_MOTION_ADDRESS\' | translate}}" class="form-control" data-ng-model="account.remote" required/>\n <span class="help-block help-block-info">\n {{\'MESSAGE_MOTION_ADDRESS_FORMAT\' | translate}}\n </span>\n <span data-ng-show="(forms.info.remote.$touched || forms.info.$submitted) && forms.info.remote.$invalid && forms.info.remote.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END REMOTE IP -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END GENERAL TAB -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/openchannel/account/view/view.html",'<!-- BEGIN PAGE HEADER-->\n<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-globe"></i>\n <a href="#">{{ \'APPLICATION_OPEN_CHANNEL\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-notebook"></i>\n <a href="/channels/openchannel/accounts/list">{{ \'APPLICATION_ACCOUNTS\' | translate }}</a>\n <i class="fa fa-angle-right" data-ng-show="account"></i>\n </li>\n <li data-ng-show="account">\n <a href="#">{{ account.description || account.name }}</a>\n </li>\n </ul>\n </div>\n\n<!-- END PAGE HEADER-->\n\n<!-- BEGIN PAGE CONTENT-->\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET main.channels -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img ng-src="assets/images/media/account.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{ account.description || account.name }}\n </div>\n <div class="profile-usertitle-job">\n {{account.email}}\n </div>\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li ng-class="{active: $state.is(\'main.channels.openchannel.accounts.view.settings\')}">\n <a href="/channels/openchannel/accounts/view/{{account.id}}/settings">\n <i class="icon-settings"></i>\n {{\'APPLICATION_SETTINGS\' | translate}} </a>\n </li>\n <li ng-class="{active: $state.is(\'main.channels.openchannel.accounts.view.api\')}">\n <a href="/channels/openchannel/accounts/view/{{account.id}}/api">\n <i class="fa fa-external-link"></i>\n {{\'APPLICATION_API\' | translate}} </a>\n </li>\n <li ng-class="{active: $state.is(\'main.channels.openchannel.accounts.view.hooks\')}">\n <a href="/channels/openchannel/accounts/view/{{account.id}}/hooks">\n <i class="fa fa-code"></i>\n {{\'APPLICATION_HOOKS\' | translate}} </a>\n </li>\n <li ng-class="{active: $state.is(\'main.channels.openchannel.accounts.view.dispositions\')}">\n <a href="/channels/openchannel/accounts/view/{{account.id}}/dispositions">\n <i class="icon-target"></i>\n {{\'APPLICATION_DISPOSITIONS\' | translate}} </a>\n </li>\n <li ng-class="{active: $state.includes(\'main.channels.openchannel.accounts.view.actions\')}">\n <a href="/channels/openchannel/accounts/view/{{account.id}}/actions/list">\n <i class="icon-directions"></i>\n {{\'APPLICATION_ACTIONS\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <div ui-view class="profile-content"></div>\n <!-- END PROFILE CONTENT -->\n </div>\n<!-- END PAGE CONTENT-->\n</div>\n'),a.put("app/channels/openchannel/account/wizard/wizard.html",'\n<div class="row" data-ng-init="initWizard()">\n <div class="col-md-12">\n <!-- BEGIN PAGE HEADER-->\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-globe"></i>\n <a href="#">{{ \'APPLICATION_OPEN_CHANNEL\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-notebook"></i>\n <a href="/channels/openchannel/accounts/list">{{ \'APPLICATION_ACCOUNTS\' | translate }}</a>\n </li>\n </ul>\n </div>\n <!-- END PAGE HEADER-->\n\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-notebook font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_ACCOUNT\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="createItem()">\n <wz-step title="{{\'APPLICATION_ACCOUNT_INFO\' | translate}}" canexit="formValidation(forms.info.$valid)">\n <form name="forms.info" novalidate>\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="(forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid && forms.info.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"/>\n </div>\n <!-- END DESCRIPTION -->\n <!-- START REMOTE IP -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.remote.$touched || forms.info.$submitted) && forms.info.remote.$invalid}">\n <label class="control-label">{{\'APPLICATION_MOTION_ADDRESS\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="url" name="remote" placeholder="{{\'APPLICATION_MOTION_ADDRESS\' | translate}}" class="form-control" data-ng-model="item.remote" required/>\n <span class="help-block help-block-info">\n {{\'MESSAGE_MOTION_ADDRESS_FORMAT\' | translate}}\n </span>\n <span data-ng-show="(forms.info.remote.$touched || forms.info.$submitted) && forms.info.remote.$invalid && forms.info.remote.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END REMOTE IP -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" data-ng-click="goNext()"/>\n </form>\n </wz-step>\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n <input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n </wz-step>\n </wizard>\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'), +a.put("app/channels/openchannel/inbox/message/info.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_INFO\' | translate }}</h3>\n</div>\n<div class="modal-body" data-ng-init="initInfo()" style=" overflow-x: auto;" >\n <div data-ng-if="data" >\n <json-formatter json="data" open="1"></json-formatter>\n </div>\n <div class="note note-warning" data-ng-hide="data">\n <p>\n {{ \'MESSAGE_NO_INFO_AVAILABLE\' | translate }}\n </p>\n </div>\n\n</div>\n<div class="modal-footer">\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CLOSE\' | translate }}</button>\n</div>\n'),a.put("app/channels/openchannel/inbox/message/message.html",'<div class="message">\n <div class="row">\n <div class="col-md-6">\n <!-- <span data-ng-if="Message.from" class="bold">From: {{Message.from}} </span>\n <br>\n <span data-ng-if="Message.to" class="bold">To: {{Message.to}} </span>\n <br> -->\n <div class="row" ng-if="Message.from">\n <div class="col-md-12">\n <span data-ng-if="Message.from" class="bold">From: {{Message.from}} </span>\n </div>\n </div>\n <div class="row" ng-if="Message.to">\n <div class="col-md-12">\n <span data-ng-if="Message.to" class="bold">To: {{Message.to}} </span>\n </div>\n </div>\n <div class="row" ng-if="Message.name">\n <div class="col-md-12">\n <span class="bold">Name: {{Message.name}}</span>\n </div>\n </div>\n <div class="row" ng-if="Message.phone">\n <div class="col-md-12">\n <span class="bold">Phone: <a href="" data-ng-click="openContact(\'phone\',Message.phone)">{{Message.phone}}</a></span>\n </div>\n </div>\n <div class="row" ng-if="Message.email">\n <div class="col-md-12">\n <span class="bold">Email: <a href="" data-ng-click="openContact(\'email\',Message.email)">{{Message.email}}</a></span>\n </div>\n </div>\n </div>\n <div class="col-md-6">\n <span class="pull-right" data-ng-if="Message.User">{{\'APPLICATION_SENT_BY\' | translate}}: <strong>{{Message.User.fullname}}</strong></span>\n </div>\n </div>\n <br>\n <span class="todo-tasklist-date">\n <span class="pull-right" data-ng-switch="Message.status">\n <a ng-switch-when="RECEIVED" href="#" class="btn default btn-xs inactive-link green-stripe"> {{Message.status | uppercase}}\n <i class="fa fa-check"></i>\n </a>\n <a ng-switch-when="SENT" href="#" class="btn default btn-xs inactive-link green-stripe"> {{Message.status | uppercase}}\n <i class="fa fa-check"></i>\n </a>\n <a ng-switch-when="DELIVERED" href="#" class="btn default btn-xs inactive-link green-stripe"> {{Message.status | uppercase}}\n <i class="fa fa-check"></i>\n </a>\n <a ng-switch-when="SENDING" href="#" class="btn default btn-xs inactive-link blue-stripe" > {{Message.status | uppercase}}\n <i class="fa fa-warning"></i>\n </a>\n <a ng-switch-when="FAILED" href="#" class="btn default btn-xs red-stripe" data-ng-click="info(Message.res_data)"> {{Message.status | uppercase}}\n <i class="fa fa-times"></i>\n </a>\n <a ng-switch-default href="#" class="btn default btn-xs"> {{Message.status | uppercase}}\n </a>\n <br>\n </span>\n\n <i class="icon-calendar"></i> <span am-time-ago="Message.updatedAt"></span>\n </span>\n <hr>\n <ng-emoticons emoticons-data="Message.body"></ng-emoticons>\n <!-- <span class="body text-left" data-ng-bind-html="Message.body" style="white-space: pre-wrap;"></span> -->\n </div>\n'),a.put("app/channels/openchannel/inbox/room/room.directive.html",'<!-- BEGIN TODO CONTENT -->\n\n<div class="todo-content">\n <div class="portlet light">\n <div class="portlet-title">\n <div class="caption">\n <button class="btn btn-sm btn-default green-meadow" data-ng-if="Room.status !== \'CLOSED\'" data-ng-disabled="!form.body || forms.compose.from.$invalid || forms.compose.to.$invalid" data-ng-click="sendMessage()">\n <i class="icon-paper-plane" style="color: white;"></i> {{\'APPLICATION_SEND\' | translate}}\n </button>\n <span data-ng-show="Room && Room.status !== \'CLOSED\'"> | </span>\n <span data-ng-show="Room" class="label label-default">#{{Room.id}} {{Room.status}}</span>\n <span data-ng-if="Room && Room.ParentId"> | </span>\n <span data-ng-if="Room && Room.ParentId" class="label label-warning"> Ref: <a data-ng-click="openRoom(Room.ParentId,Room.contact)">#{{Room.ParentId}}</a></span>\n </div>\n <div class="actions" data-ng-switch="Room.status">\n <button class="btn btn-icon-only" data-ng-show="Room" data-ng-class="{\'btn-success\':Room.status !== \'CLOSED\',\'grey-cascade\':Room.status === \'CLOSED\'}" data-ng-click="closeRoom(Room.id)" data-ng-disabled="Room.status === \'CLOSED\' && Room.disposition">\n <i data-ng-class="{\'fa fa-upload\':Room.status !== \'CLOSED\',\'icon-target\':Room.status === \'CLOSED\'}"></i>\n </button>\n <button class="btn default btn-icon-only" data-ng-if="Room && Room.status !== \'CLOSED\'" type="button" data-ng-click="togglePanelLeft()" title="{{\'APPLICATION_RESIZE\' | translate}}">\n <i ng-class="panelRight == \'col-md-12\' ? \'icon-size-actual\' : \'icon-size-fullscreen\'"></i>\n </button>\n </div>\n </div>\n <div class="portlet-body">\n <div class="row">\n <div data-ng-show="panelLeft" data-ng-class="panelLeft">\n <div class="form">\n <!-- START TAGS -->\n <div class="form-group" data-ng-if="Room.status !== \'CLOSED\' || (Room.status == \'CLOSED\' && form.tags.length)">\n <div class="row">\n <div class="col-md-1">\n <a href="#" class="btn btn-icon-only">\n <i class="fa fa-tags" style="color: gray;"></i>\n </a>\n </div>\n <div class="col-md-11">\n <ui-select data-ng-disabled="Room.status == \'CLOSED\'" multiple data-ng-model="form.tags" theme="bootstrap" on-select="onChanged($item, $model)" on-remove="onChanged($item, $model)">\n <ui-select-match placeholder="Tags...">{{$item}}</ui-select-match>\n <ui-select-choices repeat="tag in tags | filter:$select.search" class="">\n {{tag}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n </div>\n <!-- END TAGS -->\n </div>\n <hr data-ng-if="Room && Room.status !== \'CLOSED\'">\n\n <div ng-scrollbars ng-scrollbars-config="{\n autoHideScrollbar: false,\n theme: \'light\',\n advanced: {\n updateOnContentResize: true\n },\n setHeight: 781,\n scrollInertia: 0\n }">\n <ul class="chats">\n <li data-ng-switch="Room.status" data-ng-class="{\'in\': Message.status == \'RECEIVED\', \'out\': Message.status == \'SENT\' || Message.status == \'SENDING\' || Message.status == \'FAILED\' || Message.status == \'NOTE\' || Message.status == \'DELIVERED\' || Message.status == \'QUEUED\' || Message.status != \'RECEIVED\' }" data-ng-repeat="Message in Room.OpenchannelMessages | orderBy:\'-createdAt\'">\n <!-- <img class="avatar" alt="" data-ng-src="api/users/avatar/{{getCurrentUser().userpic && smsMessage.status === \'SENT\' ? getCurrentUser().userpic : \'unknown_avatar\'}}"> -->\n <!-- <note message="smsMessage" ng-switch-when="NOTE"></note> -->\n <div class="avatar" data-ng-class="Message.UserId ? \'pretty-avatar\' : \'pretty-avatar-v\'">\n <ng-letter-avatar\n data-ng-if="Message.UserId"\n height="40"\n width="40"\n fontsize="25"\n data="{{Message.User.fullname}}"\n avatarcustombgcolor="#B0B0B0"\n avatarcustomborder="border:2px solid #3399CC"\n charCount="2"\n shape="round"></ng-letter-avatar>\n <ng-letter-avatar\n data-ng-if="!Message.UserId"\n height="40"\n width="40"\n fontsize="25"\n data="{{Message.from}}"\n avatarcustombgcolor="#B0B0B0"\n avatarcustomborder="border:2px solid #EA4C61"\n charCount="1"\n shape="round"></ng-letter-avatar>\n </div>\n <message message="Message" list-id="Room.OpenchannelAccount.ListId" ng-switch-default></message>\n </li>\n </ul>\n </div>\n </div>\n <div data-ng-class="panelRight">\n\n <div class="note note-info" data-ng-if="Room && Room.status == \'CLOSED\'">\n <h4 class="block">Info! {{\'MESSAGE_ROOM_CLOSED\' | translate}}</h4>\n <p>\n {{\'MESSAGE_ROOM_CLOSED_DETAILS\' | translate}}.\n </p>\n <hr>\n <p>\n <i class="icon-target"></i> {{\'APPLICATION_DISPOSITION\' | translate}}: <strong>{{Room.disposition}}</strong>\n </p>\n <p>\n <i class="icon-calendar"></i> {{\'APPLICATION_UPDATED_AT\' | translate}}: <strong>{{Room.updatedAt | date:\'medium\'}}</strong> (<span am-time-ago="Room.updatedAt"></span>)\n </p>\n </div>\n <form name="forms.compose" data-ng-submit="forms.compose.$valid" class="form-horizontal" novalidate>\n <!-- START HEAD -->\n <div class="form">\n\n <!-- START FROM -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.compose.from.$invalid && forms.compose.$submitted}" data-ng-if="Room.status !== \'CLOSED\'">\n <div class="col-md-12">\n <div class="row">\n <div class="col-md-1">\n <label class="control-label">From:</label>\n </div>\n <div class="col-md-11">\n <ui-select data-ng-disabled="Room" theme="bootstrap" name="from" data-ng-model="form.from" required>\n <ui-select-match placeholder="From...">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="Account.name as Account in Accounts | filter: $select.search">\n <div data-ng-bind-html="Account.name | highlight: $select.search"></div>\n <small data-ng-bind-html="Account.name | highlight: $select.search"></small>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.compose.from.$invalid && forms.compose.$submitted " class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n </div>\n </div>\n <!-- END FROM -->\n <!-- START TO -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.compose.to.$invalid && forms.compose.$submitted}" data-ng-if="Room.status !== \'CLOSED\'">\n\n <div class="col-md-12">\n <div class="row">\n <div class="col-md-1">\n <label class="control-label">To:</label>\n </div>\n <div class="col-md-11">\n <input type="text" name="to" class="form-control todo-taskbody-taskdesc" placeholder="To..." rows="8" data-ng-disabled="Room" data-ng-model="form.to" required>\n <span data-ng-show="forms.compose.to.$invalid && forms.compose.$submitted " class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n </div>\n </div>\n <!-- END TO -->\n <!-- START CANNED -->\n <div class="form-group" data-ng-if="Room.status !== \'CLOSED\'">\n <div class="row">\n <div class="col-md-1">\n <a href="#" class="btn btn-icon-only">\n <i class="fa fa-magic" style="color: gray;"></i>\n </a>\n </div>\n <div class="col-md-11">\n <input type="text"\n data-ng-model="modelOptions.selectedAnswer"\n uib-typeahead="key for key in getAnswers($viewValue)"\n placeholder="Canned answers.."\n typeahead-loading="loadingLocations"\n typeahead-no-results="noResults"\n typeahead-on-select="onSelect($item)"\n class="form-control">\n <i ng-show="loadingLocations" class="glyphicon glyphicon-refresh"></i>\n <div ng-show="noResults">\n <i class="glyphicon glyphicon-remove"></i> No Results Found\n </div>\n </div>\n </div>\n\n </div>\n <!-- END CANNED -->\n <!-- START message -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.compose.body.$invalid && forms.compose.$submitted}" data-ng-if=" Room.status !== \'CLOSED\'">\n <div class="col-md-12">\n <textarea id="text" class="form-control maxlength-handler" rows="8" name="body" data-ng-model="form.body"></textarea>\n <span data-ng-show="forms.compose.body.$invalid && forms.compose.$submitted " class="help-block help-block-error">\n'+" <strong>{{'APPLICATION_WARNING' | translate}}!</strong> {{'MESSAGE_REQUIRED_FIELD' | translate}}.\n </span>\n </div>\n </div>\n\n <!-- END message -->\n </div>\n </form>\n </div>\n </div>\n </div>\n </div>\n</div>\n<!-- END TODO CONTENT -->\n"),a.put("app/channels/openchannel/inbox/view/account/list/list.html",'<!-- BEGIN Portlet PORTLET-->\n<div class="portlet light" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption">\n <div class="btn-group btn-group-solid">\n <button type="button" class="btn btn-sm default" data-ng-model="query.status" uib-btn-radio="\'NEW\'" uib-uncheckable>NEW</button>\n </div>\n <div class="btn-group btn-group-solid">\n <button type="button" class="btn btn-sm default" data-ng-model="query.status" uib-btn-radio="\'OPEN\'" uib-uncheckable>OPEN</button>\n </div>\n <div class="btn-group btn-group-solid">\n <button type="button" class="btn btn-sm default" data-ng-model="query.status" uib-btn-radio="\'PENDING\'" uib-uncheckable>PENDING</button>\n </div>\n <div class="btn-group btn-group-solid">\n <button type="button" class="btn btn-sm default" data-ng-model="query.status" uib-btn-radio="\'CLOSED\'" uib-uncheckable>CLOSED</button>\n </div>\n </div>\n <div class="actions">\n <a href="#" class="btn btn-icon-only default" data-ng-click="getPage();">\n <i class="fa fa-refresh"></i>\n </a>\n <a href="#" class="btn btn-icon-only red" data-ng-click="deleteItems();" data-ng-show="id.length && isAdmin">\n <i class="fa fa-trash"></i>\n </a>\n <a href="#" class="btn btn-icon-only blue" data-ng-click="tagItems();" data-ng-show="id.length">\n <i class="fa fa-tags"></i>\n </a>\n <a href="#" class="btn btn-icon-only green" data-ng-click="openRoom(null, \'New Message\')">\n <i class="fa fa-plus"></i>\n </a>\n </div>\n </div>\n <div class="portlet-title" data-ng-show="tags.length">\n <!-- START TAGS -->\n <div class="form-group">\n <div class="row">\n <div class="col-md-1">\n <a href="#" class="btn btn-icon-only">\n <i class="fa fa-tags" style="color: gray;"></i>\n </a>\n </div>\n <div class="col-md-11">\n <ui-select multiple data-ng-model="query.tags" theme="bootstrap" on-select="onChanged($item, $model)" on-remove="onChanged($item, $model)">\n <ui-select-match placeholder="Search by tag...">{{$item}}</ui-select-match>\n <ui-select-choices repeat="tag in tags | filter:$select.search">\n {{tag}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n </div>\n <!-- END TAGS -->\n </div>\n <div class="portlet-body">\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="spinner-grid" spinner-start-active="false"></span>\n <!-- END UI-GRID SPINNER -->\n\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid-inbox">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n</div>\n<!-- END Portlet PORTLET-->\n'),a.put("app/channels/openchannel/inbox/view/view.agents.modal.html",'<div class="modal-header" data-ng-init="initModal()">\n <h3 class="modal-title">{{ \'APPLICATION_AGENTS\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <!-- START TRANSPORT -->\n <div class="form-group">\n <form name="form" novalidate>\n <!-- START TRANSPORT -->\n <div class="form-group">\n <ui-select multiple name="agents" data-ng-model="item.agents" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_AGENTS\' | translate}}">{{$item.fullname}}</ui-select-match>\n <ui-select-choices repeat="agent.id as agent in agents | filter: $select.search">\n {{agent.fullname}}\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END TRANSPORT -->\n </form>\n </div>\n <!-- END TRANSPORT -->\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" data-ng-click="ok()">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" data-ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/openchannel/inbox/view/view.html",'<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-globe"></i>\n <a href="#">{{ \'APPLICATION_OPEN_CHANNEL\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-note"></i>\n <a href="/channels/openchannel/inbox/list">{{ \'APPLICATION_INBOX\' | translate }}</a>\n </li>\n </ul>\n </div>\n </div>\n</div>\n\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row inbox" data-ng-init="initView()">\n <div class="col-md-3">\n <ul class="inbox-nav margin-bottom-10">\n <li data-ng-class="{active: $stateParams.id == Account.id}" data-ng-repeat="Account in Accounts">\n <a href="/channels/openchannel/inbox/view/account/{{Account.id}}/list" class="btn">\n <i class="icon-notebook"></i> {{Account.name}}\n </a>\n <b></b>\n </li>\n </ul>\n </div>\n\n <div class="col-md-9" >\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view>\n <div class="note note-info">\n <h4 class="block">Info! {{\'APPLICATION_NO_ACCOUNT_SELECTED\' | translate}}</h4>\n </div>\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/openchannel/inbox/view/view.status.modal.html",'<div class="modal-header">\n <button ng-if="modal.dismissable" type="button" ng-click="$dismiss()" class="close">×</button>\n <h4 ng-if="modal.title" ng-bind="modal.title | translate" class="modal-title"></h4>\n</div>\n<div class="modal-body">\n <p ng-if="modal.text && !closed" ng-bind="modal.text | translate"></p>\n <form name="form" novalidate data-ng-init="initDisposition()">\n <div class="form-group">\n <ui-select data-ng-model="item.disposition" name="list" theme="bootstrap" data-ng-disabled="!dispositions.length" required>\n <ui-select-match placeholder="{{\'APPLICATION_DISPOSITION\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="disposition.name as disposition in dispositions | filter: $select.search">\n <div ng-bind-html="disposition.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <div class="note note-warning" data-ng-hide="dispositions.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_DISPOSITIONS_AVAILABLE\' | translate }}\n </p>\n </div>\n</form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-danger" type="button" ng-click="ok()">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/openchannel/inbox/view/view.tags.modal.html",'<div class="modal-header" data-ng-init="initModal()">\n <h3 class="modal-title">{{ \'APPLICATION_TAGS\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <!-- START TRANSPORT -->\n <div class="form-group">\n <form name="form" novalidate>\n <!-- START TAGS -->\n <div class="form-group">\n <ui-select multiple data-ng-model="item.tags" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_TAGS\' | translate}}">{{$item}}</ui-select-match>\n <ui-select-choices repeat="tag in tags | filter: $select.search">\n {{tag}}\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END TAGS -->\n </form>\n </div>\n <!-- END TRANSPORT -->\n</div>\n<div class="modal-footer">\n <button type="button" class="btn" data-ng-class="button.class" data-ng-click="button.click()"data-ng-repeat="button in modal.buttons">{{button.text | translate}}</button>\n <!-- <button class="btn btn-success" type="button" data-ng-click="ok()">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" data-ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button> -->\n</div>\n'),a.put("app/channels/openchannel/queue/list/list.create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_QUEUE\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.name.$touched || form.$submitted) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" data-ng-pattern="settings.patternName" required />\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$invalid && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$invalid && form.name.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_PATTERN_NAME\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.timeout.$touched || form.$submitted) && form.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_AGENT_TIMEOUT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" min="0" name="timeout" placeholder="Timeout" class="form-control" data-ng-model="item.timeout" required min="1"/>\n <span data-ng-show="(form.timeout.$touched || form.$submitted) && form.timeout.$invalid && form.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n\n <!-- START STRATEGY -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.strategy.$touched || form.$submitted) && form.strategy.$invalid}">\n <label class="control-label">{{\'APPLICATION_STRATEGY\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="item.strategy" name="strategy" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.toUpperCase()}}</ui-select-match>\n <ui-select-choices repeat="strategy in strategies | filter: $select.search">\n <div ng-bind-html="strategy.toUpperCase() | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form.strategy.$touched || form.$submitted) && form.strategy.$invalid && form.strategy.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END STRATEGY -->\n\n <!-- START AGENTS-->\n <div class="form-body" data-ng-init="getTeams()">\n <label for="penalty">{{\'APPLICATION_PENALTY\' | translate}}</label>\n <div class="input-group input-small mbottom20">\n <input type="number" class="spinner-input form-control" maxlength="3" data-ng-model="item.penalty" readonly>\n <div class="spinner-buttons input-group-btn btn-group-vertical">\n <button type="button" class="btn spinner-up btn-xs blue" data-ng-click="item.penalty=item.penalty+1">\n <i class="fa fa-angle-up"></i>\n </button>\n <button type="button" class="btn spinner-down btn-xs blue" data-ng-disabled="!item.penalty" data-ng-click="item.penalty=item.penalty-1">\n <i class="fa fa-angle-down"></i>\n </button>\n </div>\n </div>\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-team">\n </div>\n </div>\n </div>\n <!-- END AGENTS-->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/openchannel/queue/list/list.html",'<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-globe"></i>\n <a href="#">{{ \'APPLICATION_OPEN_CHANNEL\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-docs"></i>\n <a href="#">{{ \'APPLICATION_QUEUES\' | translate }}</a>\n </li>\n </ul>\n </div>\n </div>\n</div>\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-docs font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_QUEUES\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <a class="btn green-jungle" href="#" data-ng-click="createItem()" data-ng-if="Auth.isAdmin()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_QUEUE\' | translate }}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/openchannel/queue/view/view.agents.html",'<div class="row" data-ng-init="getTeams()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_AGENTS\' | translate}}</span>\n </div>\n </div>\n <div class="note note-warning" data-ng-hide="teams.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_AVAILABLE_TEAMS\' | translate }}\n </p>\n </div>\n <div class="portlet-body">\n <!-- BEGIN FORM-->\n <form action="index.html" class="form-horizontal form-row-seperated">\n <div class="form-body">\n <label for="penalty">{{\'APPLICATION_PENALTY\' | translate}}</label>\n <div class="input-group input-small mbottom20">\n <input type="number" class="spinner-input form-control" maxlength="3" data-ng-model="queue.penalty" readonly>\n <div class="spinner-buttons input-group-btn btn-group-vertical">\n <button type="button" class="btn spinner-up btn-xs blue" data-ng-click="queue.penalty=queue.penalty+1">\n <i class="fa fa-angle-up"></i>\n </button>\n <button type="button" class="btn spinner-down btn-xs blue" data-ng-disabled="!queue.penalty" data-ng-click="queue.penalty=queue.penalty-1">\n <i class="fa fa-angle-down"></i>\n </button>\n </div>\n </div>\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-team">\n </div>\n </div>\n </div>\n </form>\n <!-- END FORM-->\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/openchannel/queue/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getQueue()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-globe"></i>\n <a href="#">{{ \'APPLICATION_OPEN_CHANNEL\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-docs"></i>\n <a href="/channels/openchannel/queues/list">{{ \'APPLICATION_QUEUES\' | translate }}</a>\n <i data-ng-show="queue" class="fa fa-angle-right"></i>\n </li>\n <li data-ng-show="queue">\n <a href="#">{{queue.name}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET main.channels -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/queue.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{queue.name}}\n </div>\n <!-- <div class="profile-usertitle-job">\n {{user.role}}\n </div> -->\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.channels.openchannel.queues.view.settings\')}">\n <a data-ng-href="/channels/openchannel/queues/view/{{queue.id}}/settings">\n <i class="icon-settings"></i>\n {{ \'APPLICATION_SETTINGS\' | translate}} </a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.channels.openchannel.queues.view.agents\')}" data-ng-show="Auth.getCurrentUser().role === \'admin\'">\n <a data-ng-href="/channels/openchannel/queues/view/{{queue.id}}/agents">\n <i class="icon-people"></i>\n {{ \'APPLICATION_AGENTS\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET main.channels -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n </div>\n <!-- END PAGE CONTENT-->\n'), +a.put("app/channels/openchannel/queue/view/view.settings.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_SETTINGS\' | translate}}</span>\n </div>\n </div>\n <div class="portlet-body">\n <form name="forms.general" data-ng-submit="forms.general.$valid && updateQueue()" novalidate>\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="queue.name" data-ng-pattern="settings.patternName" required />\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid && forms.general.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid && forms.general.name.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_PATTERN_NAME\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="queue.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n <!-- START TIMEOUT -->\n <div class="form-group">\n <label class="control-label">Timeout</label>\n <input type="number" name="timeout" placeholder="Timeout" class="form-control" min="1" data-ng-model="queue.timeout"/>\n </div>\n <!-- END TIMEOUT -->\n\n <!-- START HEADER SHAPE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.strategy.$touched || forms.general.$submitted) && forms.general.strategy.$invalid}">\n <label class="control-label">{{\'APPLICATION_STRATEGY\' | translate}}</label>\n <ui-select data-ng-model="queue.strategy" name="strategy" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.toUpperCase()}}</ui-select-match>\n <ui-select-choices repeat="strategy in strategies | filter: $select.search">\n <div ng-bind-html="strategy | uppercase | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END HEADER SHAPE -->\n <input data-ng-if="Auth.isAdmin()" class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/openchannel/realtime/view/agent/agent.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initAgents()">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns class="ui-grid" ui-grid-tree-view ui-grid-expandable-row ui-grid-pagination ui-grid-auto-resize>\n <span us-spinner spinner-key="grid-spinner" spinner-start-active="true"></span>\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/openchannel/realtime/view/agent/agent.modal.info.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_INTERFACE_INFO\' | translate }}</h3>\n</div>\n<div class="modal-body">\n<div data-ng-if="agent.ipaddr" class="well">\n <div>{{agent.ipaddr}}:{{agent.port}}</div>\n <div>{{agent.fullcontact}}</div>\n <div>{{agent.useragent}}</div>\n <div>{{agent.lastms}}</div>\n</div>\n<div data-ng-if="!agent.ipaddr" class="alert alert-danger" role="alert">\n {{\'MESSAGE_NO_AVAILABLE_INFO\' | translate}}\n</div>\n</div>\n<div class="modal-footer">\n <button class="btn default" type="button" ng-click="close()">{{ \'APPLICATION_CLOSE\' | translate }}</button>\n</div>\n'),a.put("app/channels/openchannel/realtime/view/agent/queue.modal.add.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_JOIN_QUEUE\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <div class="form-group row">\n <label class="col-md-2 control-label" style="margin-top: 7px;">{{\'APPLICATION_QUEUE\' | translate}}:</label>\n <div class="col-md-10">\n <ui-select multiple ng-model="item.queues" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_QUEUE\' | translate}}">{{$item.name}}</ui-select-match>\n <ui-select-choices repeat="queue.id as queue in queues | filter: $select.search">\n <div ng-bind-html="queue.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n</div>\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/openchannel/realtime/view/application/application.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initApplications()">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns class="ui-grid" ui-grid-auto-resize>\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/openchannel/realtime/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-globe"></i>\n <a href="#">{{ \'APPLICATION_OPEN_CHANNEL\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-energy"></i>\n <a href="#">{{ \'APPLICATION_REALTIME\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <div>\n <nav class="navbar navbar-default" role="navigation">\n <div class="collapse navbar-collapse">\n <ul class="nav navbar-nav">\n <li data-ng-class="{\'active\': $state.is(\'main.channels.openchannel.realtime.view.agents\')}">\n <a href="/channels/openchannel/realtime/view/agents">\n {{\'APPLICATION_AGENTS\' | translate}}\n </a>\n </li>\n <li data-ng-class="{\'active\': $state.is(\'main.channels.openchannel.realtime.view.applications\')}">\n <a href="/channels/openchannel/realtime/view/applications">\n {{\'APPLICATION_APPLICATIONS\' | translate}}\n </a>\n </li>\n </ul>\n </div>\n </nav>\n </div>\n\n <div ui-view></div>\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/openchannel/realtime/view/view.queue.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initAgents()">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div id="grid1" ui-grid="gridOptions" ui-grid-resize-columns ui-grid-tree-view class="grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/realtime/view/agent/agent.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initAgents()">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns class="ui-grid" ui-grid-pagination ui-grid-auto-resize>\n <span us-spinner spinner-key="grid-spinner" spinner-start-active="true"></span>\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/realtime/view/agent/agent.modal.info.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_INTERFACE_INFO\' | translate }}</h3>\n</div>\n<div class="modal-body">\n<div data-ng-if="agent.ipaddr" class="well">\n <div>{{agent.ipaddr}}:{{agent.port}}</div>\n <div>{{agent.fullcontact}}</div>\n <div>{{agent.useragent}}</div>\n <div>{{agent.lastms}}</div>\n</div>\n<div data-ng-if="!agent.ipaddr" class="alert alert-danger" role="alert">\n {{\'MESSAGE_NO_AVAILABLE_INFO\' | translate}}\n</div>\n</div>\n<div class="modal-footer">\n <button class="btn default" type="button" ng-click="close()">{{ \'APPLICATION_CLOSE\' | translate }}</button>\n</div>\n'),a.put("app/channels/realtime/view/agent/queue.modal.add.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_JOIN_QUEUE\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <div class="form-group row">\n <label class="col-md-2 control-label" style="margin-top: 7px;">{{\'APPLICATION_QUEUE\' | translate}}:</label>\n <div class="col-md-10">\n <ui-select multiple ng-model="item.queues" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_QUEUE\' | translate}}">{{$item.name}}</ui-select-match>\n <ui-select-choices repeat="queue.name as queue in queues | filter: $select.search">\n <div ng-bind-html="queue.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n</div>\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/realtime/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-energy"></i>\n <a href="/channels/realtime/view/agents">{{ \'APPLICATION_REALTIME\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <div>\n <nav class="navbar navbar-default" role="navigation">\n <div class="collapse navbar-collapse">\n <ul class="nav navbar-nav">\n <li data-ng-class="{\'active\': $state.is(\'main.channels.realtime.view.agents\')}">\n <a href="/channels/realtime/view/agents">\n {{\'APPLICATION_AGENTS\' | translate}}\n </a>\n </li>\n </ul>\n </div>\n </nav>\n </div>\n <div ui-view></div>\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/sms/account/list/list.html",'<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="glyphicon glyphicon-comment"></i>\n <a href="#">{{ \'APPLICATION_SMS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-notebook"></i>\n <a href="/channels/sms/accounts/list">{{ \'APPLICATION_ACCOUNTS\' | translate }}</a>\n </li>\n </ul>\n </div>\n </div>\n</div>\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-notebook font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_ACCOUNTS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group">\n <a class="btn btn-default" href="#" data-ng-click="gridOptions.getPage();">\n <i class="icon-reload"></i>\n </a>\n </div>\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <a class="btn green-jungle" href="/channels/sms/accounts/wizard">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_ACCOUNT\' | translate }}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/sms/account/view/action/list/list.html",'<div class="row" data-ng-init="initActions()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_ACTIONS\' | translate}}</span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <a class="btn green-jungle" href="/channels/sms/accounts/view/{{account.id}}/actions/wizard" data-toggle="dropdown">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_ACTION\' | translate }}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/sms/account/view/action/view/view.html",'\n<div class="row" data-ng-init="initAction()">\n <div class="col-md-12">\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-directions font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_ACTION\' | translate }}</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <form name="forms.settings" ng-submit="updateItem()" novalidate>\n <!-- START APP -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.app.$touched || forms.settings.$submitted) && forms.settings.app.$invalid}">\n <label class="control-label">{{ \'APPLICATION_APPLICATION\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.app" name="app" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_APPLICATION\' | translate }}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="app.value as app in apps | filter: $select.search">\n <div ng-bind-html="app.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.app.$touched || forms.settings.$submitted) && forms.settings.app.$invalid && forms.settings.app.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END APP -->\n\n <div class="app-settings" ng-slide-down="application.app === \'queue\'" lazy-render duration="1" data-ng-init="getQueues()">\n <!-- START QUEUE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.queue.$touched || forms.settings.$submitted) && forms.settings.queue.$invalid}">\n <label class="control-label">{{\'APPLICATION_QUEUE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.SmsQueueId" name="queue" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="queue.id as queue in queues | filter: $select.search">\n <div ng-bind-html="queue.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="queues.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_QUEUES_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/channels/sms/queues/list">{{\'APPLICATION_QUEUES\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.settings.queue.$touched || forms.settings.$submitted) && forms.settings.queue.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END QUEUE -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="number" name="timeout" placeholder="{{\'APPLICATION_TIMEOUT\' | translate}}" class="form-control" data-ng-model="application.timeout" min="1" required/>\n <span data-ng-show="(forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid && forms.settings.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.app === \'agent\'" lazy-render duration="1" data-ng-init="getAgents()">\n <!-- START AGENT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.agent.$touched || forms.settings.$submitted) && forms.settings.agent.$invalid}">\n <label class="control-label">{{\'APPLICATION_AGENT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.UserId" name="agent" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.fullname}}</ui-select-match>\n <ui-select-choices repeat="agent.id as agent in agents | filter: $select.search">\n <div ng-bind-html="agent.fullname | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="agents.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_AGENTS_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/staff/agents/list">{{\'APPLICATION_QUEUES\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.settings.agent.$touched || forms.settings.$submitted) && forms.settings.agent.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END AGENT -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="number" name="timeout" placeholder="{{\'APPLICATION_TIMEOUT\' | translate}}" class="form-control" data-ng-model="application.timeout" min="1" required/>\n <span data-ng-show="(forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid && forms.settings.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.app === \'sendMail\'" lazy-render duration="1" data-ng-init="getMailAccounts();getTemplates()">\n <!-- START SENDMAIL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.to.$touched || forms.settings.$submitted) && forms.settings.to.$invalid}">\n <label class="control-label">{{\'APPLICATION_TO\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="email" name="to" placeholder="{{\'APPLICATION_TO\' | translate}}" class="form-control" data-ng-model="application.data2" min="1" required/>\n <span data-ng-show="(forms.settings.to.$touched || forms.settings.$submitted) && forms.settings.to.$invalid && forms.settings.to.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.account.$touched || forms.settings.$submitted) && forms.settings.account.$invalid}">\n <label class="control-label">{{\'APPLICATION_ACCOUNT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data8" name="account" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="account.id as account in mailAccounts | filter: $select.search">\n <div ng-bind-html="account.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.account.$touched || forms.settings.$submitted) && forms.settings.account.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.template.$touched || forms.settings.$submitted) && forms.settings.template.$invalid}">\n <label class="control-label">{{\'APPLICATION_TEMPLATE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data9" name="template" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="template.id as template in templates | filter: $select.search">\n <div ng-bind-html="template.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.template.$touched || forms.settings.$submitted) && forms.settings.template.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END SENDMAIL -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.app === \'sendSms\'" lazy-render duration="1" data-ng-init="getSmsAccounts()">\n <!-- START SENDSms -->\n <div class="app-settings" ng-slide-down="application.app === \'sendSms\'" lazy-render duration="1">\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.to.$touched || forms.settings.$submitted) && forms.settings.to.$invalid}">\n <label class="control-label">{{\'APPLICATION_TO\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" ng-pattern="/^[\\+]?[0-9]+$/" name="to" placeholder="{{\'APPLICATION_TO\' | translate}}" class="form-control" data-ng-model="application.data2" required/>\n <span data-ng-show="(forms.settings.to.$touched || forms.settings.$submitted) && forms.settings.to.$invalid && forms.settings.to.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.account.$touched || forms.settings.$submitted) && forms.settings.account.$invalid}">\n <label class="control-label">{{\'APPLICATION_ACCOUNT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data8" name="account" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="account.id as account in smsAccounts | filter: $select.search">\n <div ng-bind-html="account.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.account.$touched || forms.settings.$submitted) && forms.settings.account.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.text.$touched || forms.text.$submitted) && forms.settings.text.$invalid}">\n <label class="control-label">{{\'APPLICATION_TEXT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <textarea id="text" class="form-control maxlength-handler" maxlength="160" name="text" data-ng-model="application.data6" required></textarea>\n <span data-ng-show="(forms.settings.text.$touched || forms.settings.$submitted) && forms.settings.text.$invalid && forms.settings.text.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n\n <!-- END SENDSms -->\n </div>\n <!-- START INTERVAL_TYPE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.intType.$touched || forms.settings.$submitted) && forms.settings.intType.$invalid}">\n <label class="control-label">{{ \'APPLICATION_INTERVAL_TYPE\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.intType" theme="bootstrap" name="intType" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="intType.value as intType in $application.intTypes | filter: $select.search">\n {{ intType.name | translate }}\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.intType.$touched || forms.settings.$submitted) && forms.settings.intType.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERVAL_TYPE -->\n\n <div class="app-settings" ng-slide-down="application.intType === \'custom\'" lazy-render duration="1">\n <!-- START TIME -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_TIME\' | translate }}</label>\n <div class="input-group input-large">\n <fieldset class="pull-left" ng-disabled="application.alwaysTime">\n <uib-timepicker name="t_from" data-ng-model="application.t_from" show-meridian="false" show-spinners="false" mousewheel="false"></uib-timepicker>\n </fieldset>\n <div class="input-group-addon col-md-1 interval-to pull-left">to</div>\n <fieldset ng-disabled="application.alwaysTime"><uib-timepicker name="t_to" data-ng-model="application.t_to" show-meridian="false" show-spinners="false" mousewheel="false"></uib-timepicker></fieldset>\n <!-- <label class="control-label pointer-cursor"><input type="checkbox" data-ng-model="application.alwaysTime">{{\'APPLICATION_ALWAYS\' | translate}}</label> -->\n </div>\n </div>\n <!-- END TIME -->\n\n <!-- START ALWAYS -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_ALWAYS\' | translate }}</label>\n <div class="input-group input-large">\n <label class="control-label pointer-cursor">\n <input\n bs-switch\n data-ng-model="application.alwaysTime"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n <!-- <input type="checkbox" data-ng-model="application.alwaysTime"> -->\n </label>\n </div>\n </div>\n <!-- END ALWAYS -->\n\n <!-- START WEEKDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_WEEKDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="application.wd_from" theme="bootstrap" name="wd_from">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{ weekDay.name | translate}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="application.wd_to" theme="bootstrap" name="wd_to">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{ weekDay.name | translate }}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END WEEKDAY -->\n\n <!-- START MONTHDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTHDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="application.md_from" theme="bootstrap" name="md_from">\n <ui-select-match allow-clear>{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search" ui-disable-choice="application.md_to && application.md_to!==\'always\' && monthDay>application.md_to && monthDay!==\'always\'">\n {{monthDay}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="application.md_to" theme="bootstrap" name="md_to">\n <ui-select-match allow-clear>{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search" ui-disable-choice="application.md_from && application.md_from!==\'always\' && monthDay<application.md_from && monthDay!==\'always\'">\n {{monthDay}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTHDAY -->\n\n <!-- START MONTH -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTH\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="application.m_from" theme="bootstrap" name="m_from">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{ month.name | translate }}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="application.m_to" theme="bootstrap" name="m_to">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{ month.name | translate }}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTH -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.intType === \'list\'" lazy-render duration="1" data-ng-init="getIntervals()">\n\n <!-- START INTERVALS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.IntervalId.$touched || forms.settings.$submitted) && forms.settings.IntervalId.$invalid}">\n <label class="control-label">{{\'APPLICATION_INTERVALS\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.IntervalId" theme="bootstrap" name="IntervalId" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{ $select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="interval.id as interval in intervals | filter: $select.search">\n {{ interval.name}}\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="intervals.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_INTERVAL_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/tools/intervals/list">{{\'APPLICATION_INTERVALS\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.settings.IntervalId.$touched || forms.settings.$submitted) && forms.settings.IntervalId.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERVALS -->\n\n </div>\n <button class="btn green-haze" type="submit">{{\'APPLICATION_UPDATE\' | translate}}</button>\n </form>\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'), +a.put("app/channels/sms/account/view/action/wizard/wizard.html",'\n<div class="row" data-ng-init="initWizard()">\n <div class="col-md-12">\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-directions font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_ACTION\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="createItem()">\n <wz-step title="{{\'APPLICATION_APPLICATION\' | translate}}" canexit="formValidation(forms.action.$valid)">\n <form name="forms.action" novalidate>\n <!-- START APP -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.action.$submitted && forms.action.app.$invalid}">\n <label class="control-label">{{ \'APPLICATION_APPLICATION\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.app" name="app" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_APPLICATION\' | translate }}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="app.value as app in apps | filter: $select.search">\n <div ng-bind-html="app.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.action.$submitted && forms.action.app.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END APP -->\n\n <div class="app-settings" ng-slide-down="application.app === \'agent\'" lazy-render duration="1" data-ng-init="getAgents()">\n <!-- START AGENT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.agent.$touched || forms.action.$submitted) && forms.action.agent.$invalid}">\n <label class="control-label">{{\'APPLICATION_AGENT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.UserId" name="agent" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.fullname}}</ui-select-match>\n <ui-select-choices repeat="agent.id as agent in agents | filter: $select.search">\n <div ng-bind-html="agent.fullname | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="agents.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_AGENTS_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/staff/agents/list">{{\'APPLICATION_AGENTS\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.action.agent.$touched || forms.action.$submitted) && forms.action.agent.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END AGENT -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.timeout.$touched || forms.action.$submitted) && forms.action.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="number" name="timeout" placeholder="{{\'APPLICATION_TIMEOUT\' | translate}}" class="form-control" data-ng-model="application.timeout" min="1" required/>\n <span data-ng-show="(forms.action.timeout.$touched || forms.action.$submitted) && forms.action.timeout.$invalid && forms.action.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n\n </div>\n\n <div class="app-settings" ng-slide-down="application.app === \'queue\'" lazy-render duration="1" data-ng-init="getQueues()">\n <!-- START QUEUE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.queue.$touched || forms.action.$submitted) && forms.action.queue.$invalid}">\n <label class="control-label">{{\'APPLICATION_QUEUE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.SmsQueueId" name="queue" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="queue.id as queue in queues | filter: $select.search">\n <div ng-bind-html="queue.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="queues.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_QUEUES_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/channels/sms/queues/list">{{\'APPLICATION_QUEUES\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.action.queue.$touched || forms.action.$submitted) && forms.action.queue.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END QUEUE -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.timeout.$touched || forms.action.$submitted) && forms.action.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="number" name="timeout" placeholder="{{\'APPLICATION_TIMEOUT\' | translate}}" class="form-control" data-ng-model="application.timeout" min="1" required/>\n <span data-ng-show="(forms.action.timeout.$touched || forms.action.$submitted) && forms.action.timeout.$invalid && forms.action.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.app === \'sendMail\'" lazy-render duration="1" data-ng-init="getMailAccounts();getTemplates()">\n <!-- START SENDMAIL -->\n <div class="app-settings" ng-slide-down="application.app === \'sendMail\'" lazy-render duration="1">\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.to.$touched || forms.action.$submitted) && forms.action.to.$invalid}">\n <label class="control-label">{{\'APPLICATION_TO\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="email" name="to" placeholder="{{\'APPLICATION_TO\' | translate}}" class="form-control" data-ng-model="application.data2" required/>\n <span data-ng-show="(forms.action.to.$touched || forms.action.$submitted) && forms.action.to.$invalid && forms.action.to.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.mail.$touched || forms.action.$submitted) && forms.action.account.$invalid}">\n <label class="control-label">{{\'APPLICATION_ACCOUNT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data8" name="account" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="account.id as account in mailAccounts | filter: $select.search">\n <div ng-bind-html="account.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.action.account.$touched || forms.action.$submitted) && forms.action.account.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.template.$touched || forms.action.$submitted) && forms.action.template.$invalid}">\n <label class="control-label">{{\'APPLICATION_TEMPLATE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data9" name="template" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="template.id as template in templates | filter: $select.search">\n <div ng-bind-html="template.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.action.template.$touched || forms.action.$submitted) && forms.action.template.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END SENDMAIL -->\n </div>\n <div class="app-settings" ng-slide-down="application.app === \'sendSms\'" lazy-render duration="1" data-ng-init="getSmsAccounts()">\n <!-- START SENDSms -->\n <div class="app-settings" ng-slide-down="application.app === \'sendSms\'" lazy-render duration="1">\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.to.$touched || forms.action.$submitted) && forms.action.to.$invalid}">\n <label class="control-label">{{\'APPLICATION_TO\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" ng-pattern="/^[\\+]?[0-9]+$/" name="to" placeholder="{{\'APPLICATION_TO\' | translate}}" class="form-control" data-ng-model="application.data2" required/>\n <span data-ng-show="(forms.action.to.$touched || forms.action.$submitted) && forms.action.to.$invalid && forms.action.to.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.account.$touched || forms.action.$submitted) && forms.action.account.$invalid}">\n <label class="control-label">{{\'APPLICATION_ACCOUNT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.data8" name="account" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="account.id as account in smsAccounts | filter: $select.search">\n <div ng-bind-html="account.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.action.account.$touched || forms.action.$submitted) && forms.action.account.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.text.$touched || forms.action.$submitted) && forms.action.text.$invalid}">\n <label class="control-label">{{\'APPLICATION_TEXT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <textarea id="text" class="form-control maxlength-handler" maxlength="160" name="text" data-ng-model="application.data6" required></textarea>\n <span data-ng-show="(forms.action.text.$touched || forms.action.$submitted) && forms.action.text.$invalid && forms.action.text.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n\n <!-- END SENDSms -->\n </div>\n <!-- START INTERVAL_TYPE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.intType.$touched || forms.action.$submitted) && forms.action.intType.$invalid}">\n <label class="control-label">{{ \'APPLICATION_INTERVAL_TYPE\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.intType" theme="bootstrap" name="intType" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="intType.value as intType in $application.intTypes | filter: $select.search">\n {{ intType.name | translate }}\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.action.intType.$touched || forms.action.$submitted) && forms.action.intType.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERVAL_TYPE -->\n\n <div class="app-settings" ng-slide-down="application.intType === \'custom\'" lazy-render duration="1">\n <!-- START TIME -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_TIME\' | translate }}</label>\n <div class="input-group input-large">\n <fieldset class="pull-left" ng-disabled="application.alwaysTime">\n <uib-timepicker name="t_from" data-ng-model="application.t_from" show-meridian="false" show-spinners="false" mousewheel="false"></uib-timepicker>\n </fieldset>\n <div class="input-group-addon col-md-1 interval-to pull-left">to</div>\n <fieldset ng-disabled="application.alwaysTime"><uib-timepicker name="t_to" data-ng-model="application.t_to" show-meridian="false" show-spinners="false" mousewheel="false"></uib-timepicker></fieldset>\n <!-- <label class="control-label pointer-cursor"><input type="checkbox" data-ng-model="application.alwaysTime">{{\'APPLICATION_ALWAYS\' | translate}}</label> -->\n </div>\n </div>\n <!-- END TIME -->\n\n <!-- START ALWAYS -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_ALWAYS\' | translate }}</label>\n <div class="input-group input-large">\n <label class="control-label pointer-cursor">\n <input\n bs-switch\n data-ng-model="application.alwaysTime"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n <!-- <input type="checkbox" data-ng-model="application.alwaysTime"> -->\n </label>\n </div>\n </div>\n <!-- END ALWAYS -->\n\n <!-- START WEEKDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_WEEKDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="application.wd_from" theme="bootstrap" name="wd_from">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{ weekDay.name | translate}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="application.wd_to" theme="bootstrap" name="wd_to">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{ weekDay.name | translate }}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END WEEKDAY -->\n\n <!-- START MONTHDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTHDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="application.md_from" theme="bootstrap" name="md_from">\n <ui-select-match allow-clear>{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search" ui-disable-choice="application.md_to && application.md_to!==\'always\' && monthDay>application.md_to && monthDay!==\'always\'">\n {{monthDay}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="application.md_to" theme="bootstrap" name="md_to">\n <ui-select-match allow-clear>{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search" ui-disable-choice="application.md_from && application.md_from!==\'always\' && monthDay<application.md_from && monthDay!==\'always\'">\n {{monthDay}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTHDAY -->\n\n <!-- START MONTH -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTH\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="application.m_from" theme="bootstrap" name="m_from">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{ month.name | translate }}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="application.m_to" theme="bootstrap" name="m_to">\n <ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{ month.name | translate }}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTH -->\n </div>\n\n <div class="app-settings" ng-slide-down="application.intType === \'list\'" lazy-render duration="1" data-ng-init="getIntervals()">\n\n <!-- START INTERVALS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.action.IntervalId.$touched || forms.action.$submitted) && forms.action.IntervalId.$invalid}">\n <label class="control-label">{{\'APPLICATION_INTERVALS\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.IntervalId" theme="bootstrap" name="IntervalId" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{ $select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="interval.id as interval in intervals | filter: $select.search">\n {{ interval.name}}\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="intervals.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_INTERVAL_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/tools/intervals/list">{{\'APPLICATION_INTERVALS\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.action.IntervalId.$touched || forms.action.$submitted) && forms.action.IntervalId.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERVALS -->\n\n </div>\n\n <input class="btn green-haze" type="submit" data-ng-click="next()" value="{{\'APPLICATION_CONTINUE\' | translate}}"/>\n </form>\n </wz-step>\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n <input class="btn green-haze" type="submit" data-ng-click="next()" value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n </wz-step>\n </wizard>\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/sms/account/view/api/view/view.html",'<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_API\' | translate}}</span>\n </div>\n </div>\n <div class="portlet-body">\n <div class="tab-content">\n <!-- CALLBACK TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <!-- START CALLBACK URL -->\n <div class="row" >\n <div class="col-md-12">\n <label class="control-label">Receive URL</label>\n <p>\n Copy the following url and insert it into your {{account.type}} account settings to receive SMS.\n <a href="https://wiki.xcallymotion.com/display/XMD/SMS" target="_blank">Detail</a>\n </p>\n </div>\n </div>\n <div class="row" >\n <div class="col-md-11">\n <code-mirror model="receiveurl"></code-mirror>\n </div>\n <div class="col-md-1">\n <a class="btn btn-sm green-jungle" data-ng-click="copyToClipboard(receiveurl);"><i class="fa fa-clipboard"></i>\n </a>\n </div>\n </div><br>\n <!-- END CALLACK URL -->\n <!-- START DELIVERY CALLBACK URL -->\n <div ng-if= "account.smstype == \'classic+\'" class="row" ng-show="!forms.info.remote.$invalid">\n <div class="col-md-12">\n <label class="control-label">Delivery URL </label>\n <p>\n Copy the following url and insert it into your {{account.type}} account settings to receive delivery report.\n <a href="https://wiki.xcallymotion.com/display/XMD/SMS" target="_blank">Detail</a>\n </p>\n </div>\n </div>\n <div ng-if= "account.smstype == \'classic+\'" class="row" ng-show="!forms.info.remote.$invalid">\n <div class="col-md-11">\n <code-mirror class="control-label" model="deliveryurl"></code-mirror>\n </div>\n <div class="col-md-1">\n <a class="btn btn-sm green-jungle" data-ng-click="copyToClipboard(deliveryurl);"><i class="fa fa-clipboard"></i>\n </a>\n </div>\n </div>\n <!-- END DELIVERY CALLACK URL -->\n </div>\n <!-- END CALLBACK TAB -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/sms/account/view/disposition/modal/add.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_DISPOSITIONS\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.form.$touched || form.$submitted) && form.form.$invalid}">\n <div class="">\n <input type="text" name="form" placeholder="{{\'APPLICATION_DISPOSITION\' | translate}}" class="form-control" data-ng-model="name" required/>\n <span data-ng-show="form.form.$touched && form.form.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n <!-- END NAME -->\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" data-ng-click="ok()" data-ng-show="form.$valid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" data-ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/sms/account/view/disposition/view/view.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_DISPOSITIONS\' | translate}}</span>\n </div>\n <div class="actions actions-md">\n <a href="#" class="btn btn-icon-only green" data-ng-click="addDisposition();">\n <i class="fa fa-plus"></i>\n </a>\n </div>\n </div>\n <div class="portlet-body" data-ng-init="initView()">\n <div class="tab-content">\n <div class="row" data-ng-hide="dispositions.length">\n <div class="col-md-12">\n <div class="note note-info">\n <h4 class="block">Info! {{\'MESSAGE_NO_DISPOSITIONS_AVAILABLE\' | translate}}</h4>\n </div>\n </div>\n </div>\n\n <!-- GENERAL TAB -->\n <div class="row" data-ng-repeat="disposition in dispositions">\n <div class="col-md-12 form-group">\n <div class="input-group">\n <div>\n <input class="form-control" type="text" placeholder="{{\'APPLICATION_DISPOSITION\' | translate}}" data-ng-model="disposition.name">\n </div>\n <span class="input-group-btn">\n <button class="btn btn-success" type="button" data-ng-click="updateDisposition(disposition.id, disposition.name);"><i class="fa fa-cloud-upload fa-fw"></i> {{\'APPLICATION_UPDATE\' | translate}}</button>\n <button class="btn btn-danger" type="button" data-ng-click="deleteDisposition(disposition.id);"><i class="fa fa-times fa-fw"></i> {{\'APPLICATION_DELETE\' | translate}}</button>\n </span>\n </div>\n </div>\n </div>\n <!-- END GENERAL TAB -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/sms/account/view/hooks/view/view.html",'<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_HOOKS\' | translate}}</span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_ACCEPT\' | translate}}</a>\n </li>\n <li >\n <a href="#" data-target="#tab_1_2" data-toggle="tab">{{\'APPLICATION_REJECT\' | translate}}</a>\n </li>\n <li >\n <a href="#" data-target="#tab_1_3" data-toggle="tab">{{\'APPLICATION_CLOSE\' | translate}}</a>\n </li>\n </ul>\n </div>\n <div class="portlet-body">\n <div class="tab-content">\n <!-- ACCEPT TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.accept" data-ng-submit="forms.accept.$valid && updateItemSmsAccount()" novalidate>\n <!-- START ACCEPT URL -->\n <div class="row">\n <div class="form-group col-md-4" data-ng-class="{\'has-error\': (forms.accept.method.$touched || forms.accept.$submitted) && forms.accept.method.$invalid}">\n <label class="control-label">{{\'APPLICATION_METHOD\' | translate}}</label>\n <ui-select data-ng-model="account.acceptMethod" name="method" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_METHOD\' | translate}}">{{$select.selected.name | uppercase}}</ui-select-match>\n <ui-select-choices repeat="type.value as type in types | filter: $select.search">\n <div ng-bind-html="type.name | highlight: $select.search | uppercase" ></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.accept.method.$touched || forms.accept.$submitted) && forms.accept.method.$invalid && forms.accept.method.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div class="form-group col-md-8" data-ng-class="{\'has-error\': (forms.accept.url.$touched || forms.accept.$submitted) && forms.accept.url.$invalid}">\n <label class="control-label">{{\'APPLICATION_URL\' | translate}}</label>\n <input type="url" name="url" placeholder="{{\'APPLICATION_URL\' | translate}}" class="form-control" data-ng-model="account.acceptUrl" ng-required="account.acceptMethod"/>\n <span data-ng-show="(forms.accept.url.$touched || forms.accept.$submitted) && forms.accept.url.$invalid && forms.accept.url.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n <!-- END ACCEPT URL-->\n <!-- START ACTIONS-->\n <!-- START PAUSE -->\n <div class="row" ng-repeat = "action in account.actions">\n <div ng-switch="action.action">\n <div ng-switch-when="pause">\n <div class="form-group col-md-4">\n <label class="control-label">{{\'APPLICATION_PAUSE\' | translate}}</label></br>\n <input\n bs-switch\n data-ng-change="resetActionData(action)"\n data-ng-model="action.enabled"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_ENABLED\' | translate }}"\n switch-off-text="{{ \'APPLICATION_DISABLED\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n </div>\n <div ng-if="action.enabled" class="form-group col-md-8">\n <label class="control-label">{{\'APPLICATION_TYPE\' | translate}}</label>\n <ui-select name="action" data-ng-model="action.type" theme="bootstrap" >\n <ui-select-match placeholder="{{\'APPLICATION_TYPE\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat=" pause.name as pause in pauses | filter: $select.search">\n <div ng-bind-html="pause.name | highlight: $select.search | uppercase" ></div>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n </div>\n </div>\n <!-- END ACTION -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END ACCEPT TAB -->\n <!-- START REJECT TAB -->\n <div class="tab-pane" id="tab_1_2">\n <form name="forms.reject" data-ng-submit="forms.reject.$valid && updateItemSmsAccount()" novalidate>\n <!-- START REJECT URL -->\n <div class="row">\n <div class="form-group col-md-4" data-ng-class="{\'has-error\': (forms.reject.method.$touched || forms.reject.$submitted) && forms.reject.method.$invalid}">\n <label class="control-label">{{\'APPLICATION_METHOD\' | translate}}</label>\n <ui-select data-ng-model="account.rejectMethod" name="method" theme="bootstrap" >\n <ui-select-match placeholder="{{\'APPLICATION_METHOD\' | translate}}">{{$select.selected.name | uppercase}}</ui-select-match>\n <ui-select-choices repeat="type.value as type in types | filter: $select.search">\n <div ng-bind-html="type.name | highlight: $select.search | uppercase" ></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.reject.method.$touched || forms.reject.$submitted) && forms.reject.method.$invalid && forms.reject.method.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div class="form-group col-md-8" data-ng-class="{\'has-error\': (forms.reject.url.$touched || forms.reject.$submitted) && forms.reject.url.$invalid}">\n <label class="control-label">{{\'APPLICATION_URL\' | translate}}</label>\n <input type="url" name="url" placeholder="{{\'APPLICATION_URL\' | translate}}" class="form-control" data-ng-model="account.rejectUrl" ng-required="account.rejectMethod"/>\n <span data-ng-show="(forms.reject.url.$touched || forms.reject.$submitted) && forms.reject.url.$invalid && forms.reject.url.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n\n <!-- END REJECT URL -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END REJECT TAB -->\n <!-- START CLOSE TAB -->\n <div class="tab-pane" id="tab_1_3">\n <form name="forms.close" data-ng-submit="forms.close.$valid && updateItemSmsAccount()" novalidate>\n <div class="row">\n <div class="form-group col-md-4" data-ng-class="{\'has-error\': (forms.close.method.$touched || forms.close.$submitted) && forms.close.method.$invalid}">\n <label class="control-label">{{\'APPLICATION_METHOD\' | translate}}</label>\n <ui-select data-ng-model="account.closeMethod" name="method" theme="bootstrap" >\n <ui-select-match placeholder="{{\'APPLICATION_METHOD\' | translate}}">{{$select.selected.name | uppercase}}</ui-select-match>\n <ui-select-choices repeat="type.value as type in types | filter: $select.search">\n <div ng-bind-html="type.name | highlight: $select.search | uppercase" ></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.close.method.$touched || forms.close.$submitted) && forms.close.method.$invalid && forms.close.method.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div class="form-group col-md-8" data-ng-class="{\'has-error\': (forms.close.url.$touched || forms.close.$submitted) && forms.close.url.$invalid}">\n <label class="control-label">{{\'APPLICATION_URL\' | translate}}</label>\n <input type="url" name="url" placeholder="{{\'APPLICATION_URL\' | translate}}" class="form-control" data-ng-model="account.closeUrl" ng-required="account.closeMethod"/>\n <span data-ng-show="(forms.close.url.$touched || forms.close.$submitted) && forms.close.url.$invalid && forms.close.url.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END CLOSE TAB -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'), +a.put("app/channels/sms/account/view/setting/view/view.html",'<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_SETTINGS\' | translate}}</span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_GENERALS\' | translate}}</a>\n </li>\n </ul>\n </div>\n <div class="portlet-body">\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.info" data-ng-submit="forms.info.$valid && updateItemSmsAccount()" novalidate>\n <!-- START ID -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_ID\' | translate}}<span class="required" aria-required="true">*</span>\n </label>\n <input type="text" name="id" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="account.id" ng-disabled="true" required/>\n </div>\n <!-- END ID-->\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="account.name" required/>\n <span data-ng-show="(forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid && forms.info.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n <!-- START LIST -->\n <div class="form-group" data-ng-if="license.cm">\n <label class="control-label">{{\'APPLICATION_LIST\' | translate}}</label>\n <div class="input-group">\n\n <ui-select data-ng-model="account.ListId" name="list" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_LIST\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="list.id as list in lists | filter: $select.search">\n <div ng-bind-html="list.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n\n <span class="input-group-btn">\n <button type="button" data-ng-click="account.ListId = null" class="btn btn-default">\n <span class="glyphicon glyphicon-trash"></span>\n </button>\n </span>\n\n </div>\n </div>\n <!-- END LIST -->\n <!-- START FIDELITY -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_FIDELITY\' | translate}}</label></br>\n <input\n bs-switch\n data-ng-model="account.fidelity"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_ENABLED\' | translate }}"\n switch-off-text="{{ \'APPLICATION_DISABLED\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n </div>\n <!-- END FIDELITY -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-if="account.fidelity" data-ng-class="{\'has-error\': (forms.info.timeout.$touched || forms.info.$submitted) && forms.info.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" min="0" name="timeout" placeholder="{{\'APPLICATION_PORT\' | translate}}" class="form-control" data-ng-model="account.timeout" required/>\n <span data-ng-show="(forms.info.timeout.$touched || forms.info.$submitted) && forms.info.timeout.$invalid && forms.info.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.info.timeout.$touched || forms.info.$submitted) && forms.info.timeout.$invalid && forms.info.timeout.$error.number" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_NUMERIC_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="account.description"/>\n </div>\n <!-- END DESCRIPTION -->\n <!-- START TWILIO -->\n <!-- START PHONE -->\n <div ng-if= "account.type == \'twilio\'" class="form-group" data-ng-class="{\'has-error\': ( forms.info.phone.$touched ||forms.info.$submitted) && forms.info.phone.$invalid}">\n <label class="control-label">{{\'APPLICATION_PHONE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" ng-pattern="/^[\\+]?[0-9]+$/" placeholder="{{\'APPLICATION_PHONE\' | translate}}" class="form-control" data-ng-model="account.phone" name="phone" required/>\n <span data-ng-show="(forms.info.phone.$touched || forms.in.$submitted) && forms.info.phone.$invalid && forms.info.phone.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PHONE -->\n\n <!-- START SID -->\n <div ng-if= "account.type == \'twilio\'" class="form-group" data-ng-class="{\'has-error\': (forms.info.sid.$touched || forms.info.$submitted) && forms.info.sid.$invalid}">\n <label class="control-label">{{\'APPLICATION_SID\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="sid" placeholder="{{\'APPLICATION_SID\' | translate}}" class="form-control" data-ng-model="account.sid" name="sid" required/>\n <span data-ng-show="(forms.info.sid.$touched || forms.info.$submitted) && forms.info.sid.$invalid && forms.info.sid.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END SID -->\n <!-- START TOKEN -->\n <div ng-if= "account.type == \'twilio\'" class="form-group" data-ng-class="{\'has-error\': (forms.info.token.$touched || forms.info.$submitted) && forms.info.token.$invalid}">\n <label class="control-label">{{\'APPLICATION_TOKEN\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="token" placeholder="{{\'APPLICATION_TOKEN\' | translate}}" class="form-control" data-ng-model="account.token" name="token" required/>\n <span data-ng-show="(forms.info.token.$touched || forms.info.$submitted) && forms.info.token.$invalid && forms.info.token.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END SID -->\n <!-- END TWILIO -->\n <!-- START SKEBBY -->\n <!-- START SKEBBY SMS TYPE -->\n <div ng-if= " account.type == \'skebby\'" class="form-group" data-ng-class="{\'has-error\': (forms.info.smstype.$touched || forms.info.$submitted) && forms.info.smstype.$invalid}">\n <label class="control-label">{{\'APPLICATION_SMS_TYPE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="account.smstype" name="smstype" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'SMS_TYPE\' | translate}}">{{$select.selected | uppercase}}</ui-select-match>\n <ui-select-choices repeat="smstype in [\'basic\',\'classic\',\'classic+\'] | filter: $select.search">\n <div data-ng-bind="smstype | highlight: $select.search | uppercase" ></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.info.smstype.$touched || forms.info.$submitted) && forms.info.smstype.$invalid && forms.info.smstype.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END SKEBBY SMS TYPE -->\n <!-- START PHONE -->\n <div ng-if= "account.type == \'skebby\' " class="form-group" data-ng-class="{\'has-error\': ( forms.info.phone.$touched ||forms.info.$submitted) && forms.info.phone.$invalid}">\n <label class="control-label">{{\'APPLICATION_PHONE\' | translate}}<span class="required" aria-required="true"></span></label>\n <input type="text" ng-pattern="/^[0-9]+$/" placeholder="{{\'APPLICATION_PHONE\' | translate}}" class="form-control" data-ng-model="account.phone" name="phone" required/>\n <span class="help-block">\n {{ \'DESCRIPTION_PHONE_NUMBER\' | translate }}\n </span>\n <span data-ng-show="(forms.info.phone.$touched || forms.in.$submitted) && forms.info.phone.$invalid && forms.info.phone.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PHONE -->\n <!-- START USERNAME -->\n <div ng-if= "account.type == \'skebby\'" class="form-group" data-ng-class="{\'has-error\': (forms.info.username.$touched || forms.info.$submitted) && forms.info.username.$invalid}">\n <label class="control-label">{{\'APPLICATION_USERNAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="username" placeholder="{{\'APPLICATION_USERNAME\' | translate}}" class="form-control" data-ng-model="account.username" name="username" required/>\n <span data-ng-show="(forms.info.username.$touched || forms.info.$submitted) && forms.info.username.$invalid && forms.info.username.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n\n <!-- START PASSWORD -->\n <div ng-if= "account.type == \'skebby\'" class="form-group" data-ng-class="{\'has-error\': (forms.info.password.$touched || forms.info.$submitted) && forms.info.password.$invalid}">\n <label class="control-label">{{\'APPLICATION_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="password" name="password" placeholder="{{\'APPLICATION_PASSWORD\' | translate}}" class="form-control" data-ng-model="account.password" required/>\n <span data-ng-show="(forms.info.password.$touched || forms.info.$submitted) && forms.info.password.$invalid && forms.info.password.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PASSWORD -->\n <!-- END SKEBBY -->\n <!-- START REMOTE IP -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.remote.$touched || forms.info.$submitted) && forms.info.remote.$invalid}">\n <label class="control-label">{{\'APPLICATION_MOTION_ADDRESS\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="url" name="remote" placeholder="{{\'APPLICATION_MOTION_ADDRESS\' | translate}}" class="form-control" data-ng-model="account.remote" required/>\n <span class="help-block help-block-info">\n {{\'MESSAGE_MOTION_ADDRESS_FORMAT\' | translate}}\n </span>\n <span data-ng-show="(forms.info.remote.$touched || forms.info.$submitted) && forms.info.remote.$invalid && forms.info.remote.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END REMOTE IP -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END GENERAL TAB -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/sms/account/view/view.html",'<!-- BEGIN PAGE HEADER-->\n<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="glyphicon glyphicon-comment"></i>\n <a href="#">{{ \'APPLICATION_SMS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-notebook"></i>\n <a href="/channels/sms/accounts/list">{{ \'APPLICATION_ACCOUNTS\' | translate }}</a>\n <i class="fa fa-angle-right" data-ng-show="account"></i>\n </li>\n <li data-ng-show="account">\n <a href="#">{{ account.description || account.name }}</a>\n </li>\n </ul>\n </div>\n\n<!-- END PAGE HEADER-->\n\n<!-- BEGIN PAGE CONTENT-->\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET main.channels -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img ng-src="assets/images/media/account.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{ account.description || account.name }}\n </div>\n <div class="profile-usertitle-job">\n {{account.email}}\n </div>\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li ng-class="{active: $state.is(\'main.channels.sms.accounts.view.settings\')}">\n <a href="/channels/sms/accounts/view/{{account.id}}/settings">\n <i class="icon-settings"></i>\n {{\'APPLICATION_SETTINGS\' | translate}} </a>\n </li>\n <li ng-class="{active: $state.is(\'main.channels.sms.accounts.view.api\')}">\n <a href="/channels/sms/accounts/view/{{account.id}}/api">\n <i class="fa fa-external-link"></i>\n {{\'APPLICATION_API\' | translate}} </a>\n </li>\n <li ng-class="{active: $state.is(\'main.channels.sms.accounts.view.hooks\')}">\n <a href="/channels/sms/accounts/view/{{account.id}}/hooks">\n <i class="fa fa-code"></i>\n {{\'APPLICATION_HOOKS\' | translate}} </a>\n </li>\n <li ng-class="{active: $state.is(\'main.channels.sms.accounts.view.dispositions\')}">\n <a href="/channels/sms/accounts/view/{{account.id}}/dispositions">\n <i class="icon-target"></i>\n {{\'APPLICATION_DISPOSITIONS\' | translate}} </a>\n </li>\n <li ng-class="{active: $state.includes(\'main.channels.sms.accounts.view.actions\')}">\n <a href="/channels/sms/accounts/view/{{account.id}}/actions/list">\n <i class="icon-directions"></i>\n {{\'APPLICATION_ACTIONS\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <div ui-view class="profile-content"></div>\n <!-- END PROFILE CONTENT -->\n </div>\n<!-- END PAGE CONTENT-->\n</div>\n'),a.put("app/channels/sms/account/view/view.settings.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_SETTINGS\' | translate}}</span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_GENERALS\' | translate}}</a>\n </li>\n </ul>\n </div>\n <div class="portlet-body">\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.info" data-ng-submit="forms.info.$valid && updateItemSmsAccount()" novalidate>\n <!-- START ID -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_ID\' | translate}}<span class="required" aria-required="true">*</span>\n </label>\n <input type="text" name="id" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="account.id" ng-disabled="true" required/>\n </div>\n <!-- END ID-->\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="account.name" required/>\n <span data-ng-show="(forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid && forms.info.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n <!-- START LIST -->\n <div class="form-group" data-ng-if="license.cm">\n <label class="control-label">{{\'APPLICATION_LIST\' | translate}}</label>\n <div class="input-group">\n\n <ui-select data-ng-model="account.ListId" name="list" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_LIST\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="list.id as list in lists | filter: $select.search">\n <div ng-bind-html="list.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n\n <span class="input-group-btn">\n <button type="button" data-ng-click="account.ListId = null" class="btn btn-default">\n <span class="glyphicon glyphicon-trash"></span>\n </button>\n </span>\n\n </div>\n </div>\n <!-- END LIST -->\n\n\n <!-- START FIDELITY -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_FIDELITY\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n data-ng-model="account.fidelity"\n type="checkbox"\n name="auth"\n switch-active="{{ recordSwitch.isActive }}"\n switch-on-text="{{ recordSwitch.onText }}"\n switch-off-text="{{ recordSwitch.offText }}"\n switch-on-color="{{ recordSwitch.onColor }}"\n switch-off-color="{{ recordSwitch.offColor }}"\n switch-animate="{{ recordSwitch.animate }}"\n switch-size="{{ recordSwitch.size }}"\n switch-label="{{ recordSwitch.label }}"\n switch-icon="{{ recordSwitch.icon }}"\n switch-radio-off="{{ recordSwitch.radioOff }}"\n switch-label-width="{{ recordSwitch.labelWidth }}"\n switch-handle-width="{{ recordSwitch.handleWidth }}">\n </div>\n <!-- END FIDELITY -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-if="account.fidelity" data-ng-class="{\'has-error\': (forms.info.timeout.$touched || forms.info.$submitted) && forms.info.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" min="0" name="timeout" placeholder="{{\'APPLICATION_PORT\' | translate}}" class="form-control" data-ng-model="account.timeout" required/>\n <span data-ng-show="(forms.info.timeout.$touched || forms.info.$submitted) && forms.info.timeout.$invalid && forms.info.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.info.timeout.$touched || forms.info.$submitted) && forms.info.timeout.$invalid && forms.info.timeout.$error.number" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_NUMERIC_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="account.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n <!-- START PHONE FOR TWILLIO ACCOUNT -->\n\n <div ng-if= "account.type == \'twilio\'" class="form-group" data-ng-class="{\'has-error\': ( forms.info.phone.$touched ||forms.info.$submitted) && forms.info.phone.$invalid}">\n <label class="control-label">{{\'APPLICATION_PHONE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" ng-pattern="/^[\\+]?[0-9]+$/" placeholder="{{\'APPLICATION_PHONE\' | translate}}" class="form-control" data-ng-model="account.phone" name="phone" required/>\n<!-- Format with a \'+\' and country code -->\n <!-- <span class="help-block">\n {{ \'DESCRIPTION_PHONE_NUMBER\' | translate }}\n </span> -->\n <span data-ng-show="(forms.info.phone.$touched || forms.in.$submitted) && forms.info.phone.$invalid && forms.info.phone.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PHONE FOR TWILLIO ACCOUNT -->\n\n <!-- START SID -->\n <div ng-if= "account.type == \'twilio\'" class="form-group" data-ng-class="{\'has-error\': (forms.info.sid.$touched || forms.info.$submitted) && forms.info.sid.$invalid}">\n <label class="control-label">{{\'APPLICATION_SID\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="sid" placeholder="{{\'APPLICATION_SID\' | translate}}" class="form-control" data-ng-model="account.sid" name="sid" required/>\n <span data-ng-show="(forms.info.sid.$touched || forms.info.$submitted) && forms.info.sid.$invalid && forms.info.sid.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END SID -->\n <!-- START TOKEN -->\n <div ng-if= "account.type == \'twilio\'" class="form-group" data-ng-class="{\'has-error\': (forms.info.token.$touched || forms.info.$submitted) && forms.info.token.$invalid}">\n <label class="control-label">{{\'APPLICATION_TOKEN\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="token" placeholder="{{\'APPLICATION_TOKEN\' | translate}}" class="form-control" data-ng-model="account.token" name="token" required/>\n <span data-ng-show="(forms.info.token.$touched || forms.info.$submitted) && forms.info.token.$invalid && forms.info.token.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END SID -->\n\n <!-- START SMS TYPE -->\n\n <div ng-if= " account.type == \'skebby\'" class="form-group" data-ng-class="{\'has-error\': (forms.info.smstype.$touched || forms.info.$submitted) && forms.info.smstype.$invalid}">\n <label class="control-label">{{\'APPLICATION_SMS_TYPE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="account.smstype" name="smstype" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'SMS_TYPE\' | translate}}">{{$select.selected | uppercase}}</ui-select-match>\n <ui-select-choices repeat="smstype in [\'basic\',\'classic\',\'classic+\'] | filter: $select.search">\n <div data-ng-bind="smstype | highlight: $select.search | uppercase" ></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.info.smstype.$touched || forms.info.$submitted) && forms.info.smstype.$invalid && forms.info.smstype.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TYPE -->\n <!-- START PHONE FOR SKEBBY ACCOUNT -->\n <div ng-if= "account.type == \'skebby\' " class="form-group" data-ng-class="{\'has-error\': ( forms.info.phone.$touched ||forms.info.$submitted) && forms.info.phone.$invalid}">\n <label class="control-label">{{\'APPLICATION_PHONE\' | translate}}<span class="required" aria-required="true"></span></label>\n <input type="text" ng-pattern="/^[0-9]+$/" placeholder="{{\'APPLICATION_PHONE\' | translate}}" class="form-control" data-ng-model="account.phone" name="phone" required/>\n <span class="help-block">\n {{ \'DESCRIPTION_PHONE_NUMBER\' | translate }}\n </span>\n <span data-ng-show="(forms.info.phone.$touched || forms.in.$submitted) && forms.info.phone.$invalid && forms.info.phone.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PHONE -->\n <!-- START USERNAME -->\n <div ng-if= "account.type == \'skebby\'" class="form-group" data-ng-class="{\'has-error\': (forms.info.username.$touched || forms.info.$submitted) && forms.info.username.$invalid}">\n <label class="control-label">{{\'APPLICATION_USERNAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="username" placeholder="{{\'APPLICATION_USERNAME\' | translate}}" class="form-control" data-ng-model="account.username" name="username" required/>\n <span data-ng-show="(forms.info.username.$touched || forms.info.$submitted) && forms.info.username.$invalid && forms.info.username.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n\n <!-- START PASSWORD -->\n <div ng-if= "account.type == \'skebby\'" class="form-group" data-ng-class="{\'has-error\': (forms.info.password.$touched || forms.info.$submitted) && forms.info.password.$invalid}">\n <label class="control-label">{{\'APPLICATION_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="password" name="password" placeholder="{{\'APPLICATION_PASSWORD\' | translate}}" class="form-control" data-ng-model="account.password" required/>\n <span data-ng-show="(forms.info.password.$touched || forms.info.$submitted) && forms.info.password.$invalid && forms.info.password.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PASSWORD -->\n <!-- START REMOTE IP -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.remote.$touched || forms.info.$submitted) && forms.info.remote.$invalid}">\n <label class="control-label">{{\'APPLICATION_MOTION_ADDRESS\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="url" name="remote" placeholder="{{\'APPLICATION_MOTION_ADDRESS\' | translate}}" class="form-control" data-ng-model="account.remote" required/>\n <span data-ng-show="(forms.info.remote.$touched || forms.info.$submitted) && forms.info.remote.$invalid && forms.info.remote.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END REMOTE IP -->\n <!-- START CALLBACK URL -->\n <div ng-show="!forms.info.remote.$invalid" class="row" >\n <!-- <div class="row"> -->\n <div class="col-md-12">\n <label class="control-label">URL </label><br>\n <span ng-if= "account.type == \'twilio\' || account.type == \'skebby\'">\n Copy the following url and insert it into your {{account.type}} account settings to receive sms.\n <a href="https://wiki.xcallymotion.com/display/XMD/SMS" target="_blank">Detail</a>\n </span>\n </div>\n </div>\n <br>\n <div ng-show="!forms.info.remote.$invalid" class="row" >\n <div class="col-md-11">\n <code-mirror model="receiveurl"></code-mirror>\n </div>\n <div class="col-md-1">\n <a class="btn btn-sm green-jungle" data-ng-click="copyToClipboard(receiveurl);"><i class="fa fa-clipboard"></i>\n </a>\n </div>\n </div>\n <!-- END CALLACK URL -->\n <!-- START DELIVERY CALLBACK URL -->\n <div ng-if= "account.smstype == \'classic+\'" class="row" ng-show="!forms.info.remote.$invalid">\n <div class="col-md-12">\n <label class="control-label">Delivery URL </label><br>\n Copy the following url and insert it into your {{account.type}} account settings to receive delivery status.\n <a href="https://wiki.xcallymotion.com/display/XMD/SMS" target="_blank">Detail</a>\n </div>\n </div>\n <br>\n <div ng-if= "account.smstype == \'classic+\'" class="row" ng-show="!forms.info.remote.$invalid">\n <div class="col-md-11">\n <code-mirror class="control-label" model="deliveryurl"></code-mirror>\n </div>\n <div class="col-md-1">\n <a class="btn btn-sm green-jungle" data-ng-click="copyToClipboard(deliveryurl);"><i class="fa fa-clipboard"></i>\n </a>\n </div>\n </div>\n <!-- END DELIVERY CALLACK URL -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END GENERAL TAB -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'), +a.put("app/channels/sms/account/wizard/wizard.html",'\n<div class="row" data-ng-init="initWizard()">\n <div class="col-md-12">\n <!-- BEGIN PAGE HEADER-->\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="glyphicon glyphicon-comment"></i>\n <a href="#">{{ \'APPLICATION_SMS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-notebook"></i>\n <a href="/channels/sms/accounts/list">{{ \'APPLICATION_ACCOUNTS\' | translate }}</a>\n </li>\n </ul>\n </div>\n <!-- END PAGE HEADER-->\n\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-notebook font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_ACCOUNT\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="createItem()">\n <wz-step title="{{\'APPLICATION_ACCOUNT_INFO\' | translate}}" canexit="formValidation(forms.info.$valid)">\n <form name="forms.info" novalidate>\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="(forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid && forms.info.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"/>\n </div>\n <!-- END DESCRIPTION -->\n <!-- START APPLICATION TYPE -->\n\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.type.$touched || forms.info.$submitted) && forms.info.type.$invalid}">\n <label class="control-label">{{\'APPLICATION_TYPE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="item.type" name="type" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_TYPE\' | translate}}">{{$select.selected | uppercase}}</ui-select-match>\n <ui-select-choices repeat="type in [\'twilio\',\'skebby\'] | filter: $select.search">\n <div data-ng-bind="type | highlight: $select.search | uppercase" ></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.info.type.$touched || forms.info.$submitted) && forms.info.type.$invalid && forms.info.type.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TYPE -->\n <!-- START PHONE FOR TWILLIO ACCOUNT -->\n <div ng-if= "item.type == \'twilio\'" class="form-group" data-ng-class="{\'has-error\': ( forms.info.phone.$touched ||forms.info.$submitted) && forms.info.phone.$invalid}">\n <label class="control-label">{{\'APPLICATION_PHONE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" ng-pattern="/^[\\+]?[0-9]+$/" placeholder="{{\'APPLICATION_PHONE\' | translate}}" class="form-control" data-ng-model="item.phone" name="phone" required/>\n <span data-ng-show="(forms.info.phone.$touched || forms.info.$submitted) && forms.info.phone.$invalid && forms.info.phone.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PHONE FOR TWILLIO ACCOUNT -->\n <!-- START SID -->\n <div ng-if= "item.type == \'twilio\'" class="form-group" data-ng-class="{\'has-error\': ( forms.info.sid.$touched ||forms.info.$submitted) && forms.info.sid.$invalid}">\n <label class="control-label">{{\'APPLICATION_SID\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" placeholder="{{\'APPLICATION_SID\' | translate}}" class="form-control" data-ng-model="item.sid" name="sid" required/>\n <span data-ng-show="(forms.info.sid.$touched || forms.info.$submitted) && forms.info.sid.$invalid && forms.info.sid.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END SID -->\n <!-- START TOKEN -->\n <div ng-if= "item.type == \'twilio\'" class="form-group" data-ng-class="{\'has-error\': (forms.info.token.$touched || forms.info.$submitted) && forms.info.token.$invalid}">\n <label class="control-label">{{\'APPLICATION_TOKEN\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" placeholder="{{\'APPLICATION_TOKEN\' | translate}}" class="form-control" data-ng-model="item.token" name="token" required/>\n <span data-ng-show="(forms.info.token.$touched || forms.info.$submitted) && forms.info.token.$invalid && forms.info.token.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END SID -->\n\n <!-- START SMS TYPE -->\n <div ng-if= " item.type == \'skebby\'" class="form-group" data-ng-class="{\'has-error\': (forms.info.smstype.$touched || forms.info.$submitted) && forms.info.smstype.$invalid}">\n <label class="control-label">{{\'APPLICATION_SMS_TYPE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="item.smstype" name="smstype" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'SMS_TYPE\' | translate}}">{{$select.selected | uppercase}}</ui-select-match>\n <ui-select-choices repeat="smstype in [\'basic\',\'classic\',\'classic+\'] | filter: $select.search">\n <div data-ng-bind="smstype | highlight: $select.search | uppercase" ></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.info.smstype.$touched || forms.info.$submitted) && forms.info.smstype.$invalid && forms.info.smstype.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TYPE -->\n <!-- START PHONE FOR SKEBBY ACCOUNT -->\n <div ng-if= "item.type == \'skebby\' " class="form-group" data-ng-class="{\'has-error\': ( forms.info.phone.$touched ||forms.info.$submitted) && forms.info.phone.$invalid}">\n <label class="control-label">{{\'APPLICATION_PHONE\' | translate}}<span class="required" aria-required="true"></span></label>\n <input type="text" ng-pattern="/^[0-9]+$/" placeholder="{{\'APPLICATION_PHONE\' | translate}}" class="form-control" data-ng-model="item.phone" name="phone" required/>\n <span class="help-block">\n {{ \'DESCRIPTION_PHONE_NUMBER\' | translate }}\n </span>\n <span data-ng-show="(forms.info.phone.$touched || forms.info.$submitted) && forms.info.phone.$invalid && forms.info.phone.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PHONE -->\n <!-- START USERNAME -->\n <div ng-if= "item.type == \'skebby\'" class="form-group" data-ng-class="{\'has-error\': (forms.info.username.$touched || forms.info.$submitted) && forms.info.username.$invalid}">\n <label class="control-label">{{\'APPLICATION_USERNAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="username" placeholder="{{\'APPLICATION_USERNAME\' | translate}}" class="form-control" data-ng-model="item.username" name="username" required/>\n <span data-ng-show="(forms.info.username.$touched || forms.info.$submitted) && forms.info.username.$invalid && forms.info.username.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n <!-- START PASSWORD -->\n <div ng-if= "item.type == \'skebby\'" class="form-group" data-ng-class="{\'has-error\': (forms.info.password.$touched || forms.info.$submitted) && forms.info.password.$invalid}">\n <label class="control-label">{{\'APPLICATION_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="password" name="password" placeholder="{{\'APPLICATION_PASSWORD\' | translate}}" class="form-control" data-ng-model="item.password" required/>\n <span data-ng-show="(forms.info.password.$touched || forms.info.$submitted) && forms.info.password.$invalid && forms.info.password.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PASSWORD -->\n <!-- START REMOTE IP -->\n <div ng-if= "item.type" class="form-group" data-ng-class="{\'has-error\': (forms.info.remote.$touched || forms.info.$submitted) && forms.info.remote.$invalid}">\n <label class="control-label">{{\'APPLICATION_MOTION_ADDRESS\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="url" name="remote" placeholder="{{\'APPLICATION_MOTION_ADDRESS\' | translate}}" class="form-control" data-ng-model="item.remote" required/>\n <span class="help-block help-block-info">\n {{\'MESSAGE_MOTION_ADDRESS_FORMAT\' | translate}}\n </span>\n <span data-ng-show="(forms.info.remote.$touched || forms.info.$submitted) && forms.info.remote.$invalid && forms.info.remote.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END REMOTE IP -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" data-ng-click="goNext()"/>\n </form>\n </wz-step>\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n <input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n </wz-step>\n </wizard>\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/sms/inbox/room/room.directive.html",'<!-- BEGIN TODO CONTENT -->\n\n<div class="todo-content">\n <div class="portlet light">\n <div class="portlet-title">\n <div class="caption">\n <button class="btn btn-sm btn-default green-meadow" data-ng-if="SmsRoom.status !== \'CLOSED\'" data-ng-disabled="!form.body || forms.compose.from.$invalid || forms.compose.to.$invalid" data-ng-click="sendSMS()">\n <i class="icon-paper-plane" style="color: white;"></i> {{\'APPLICATION_SEND\' | translate}}\n </button>\n <span data-ng-show="SmsRoom && SmsRoom.status !== \'CLOSED\'"> | </span>\n <span data-ng-show="SmsRoom" class="label label-default">#{{SmsRoom.id}} {{SmsRoom.status}}</span>\n <span data-ng-if="SmsRoom && SmsRoom.ParentId"> | </span>\n <span data-ng-if="SmsRoom && SmsRoom.ParentId" class="label label-warning"> Ref: <a data-ng-click="openRoom(SmsRoom.ParentId,SmsRoom.contact)">#{{SmsRoom.ParentId}}</a></span>\n </div>\n <div class="actions" data-ng-switch="SmsRoom.status">\n <button class="btn btn-icon-only" data-ng-show="SmsRoom" data-ng-class="{\'btn-success\':SmsRoom.status !== \'CLOSED\',\'grey-cascade\':SmsRoom.status === \'CLOSED\'}" data-ng-click="closeRoom(SmsRoom.id)" data-ng-disabled="SmsRoom.status === \'CLOSED\' && SmsRoom.disposition">\n <i data-ng-class="{\'fa fa-upload\':SmsRoom.status !== \'CLOSED\',\'icon-target\':SmsRoom.status === \'CLOSED\'}"></i>\n </button>\n <button class="btn default btn-icon-only" data-ng-if="SmsRoom && SmsRoom.status !== \'CLOSED\'" type="button" data-ng-click="togglePanelLeft()" title="{{\'APPLICATION_RESIZE\' | translate}}">\n <i ng-class="panelRight == \'col-md-12\' ? \'icon-size-actual\' : \'icon-size-fullscreen\'"></i>\n </button>\n </div>\n </div>\n <div class="portlet-body">\n <div class="row">\n <div data-ng-show="panelLeft" data-ng-class="panelLeft">\n <div class="form">\n <!-- START TAGS -->\n <div class="form-group" data-ng-if="SmsRoom.status !== \'CLOSED\' || (SmsRoom.status == \'CLOSED\' && form.tags.length)">\n <div class="row">\n <div class="col-md-1">\n <a href="#" class="btn btn-icon-only">\n <i class="fa fa-tags" style="color: gray;"></i>\n </a>\n </div>\n <div class="col-md-11">\n <ui-select data-ng-disabled="SmsRoom.status == \'CLOSED\'" multiple data-ng-model="form.tags" theme="bootstrap" on-select="onChanged($item, $model)" on-remove="onChanged($item, $model)">\n <ui-select-match placeholder="Tags...">{{$item}}</ui-select-match>\n <ui-select-choices repeat="tag in tags | filter:$select.search" class="">\n {{tag}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n </div>\n <!-- END TAGS -->\n </div>\n <hr data-ng-if="SmsRoom && SmsRoom.status !== \'CLOSED\'">\n\n <div ng-scrollbars ng-scrollbars-config="{\n autoHideScrollbar: false,\n theme: \'light\',\n advanced: {\n updateOnContentResize: true\n },\n setHeight: 781,\n scrollInertia: 0\n }">\n <ul class="chats">\n <li data-ng-switch="SmsRoom.status" data-ng-class="{\'in\': smsMessage.status == \'RECEIVED\', \'out\': smsMessage.status == \'SENT\' || smsMessage.status == \'SENDING\' || smsMessage.status == \'FAILED\' || smsMessage.status == \'NOTE\' || smsMessage.status == \'DELIVERED\' || smsMessage.status == \'QUEUED\' || smsMessage.status != \'RECEIVED\' }" data-ng-repeat="smsMessage in SmsRoom.SmsMessages | orderBy:\'-createdAt\'">\n <div class="avatar" data-ng-class="smsMessage.UserId ? \'pretty-avatar\' : \'pretty-avatar-v\'">\n <ng-letter-avatar\n data-ng-if="smsMessage.UserId"\n height="40"\n width="40"\n fontsize="25"\n data="{{smsMessage.User.fullname}}"\n avatarcustombgcolor="#B0B0B0"\n avatarcustomborder="border:2px solid #3399CC"\n charCount="2"\n shape="round"></ng-letter-avatar>\n <ng-letter-avatar\n data-ng-if="!smsMessage.UserId"\n height="40"\n width="40"\n fontsize="25"\n data="{{smsMessage.from}}"\n avatarcustombgcolor="#B0B0B0"\n avatarcustomborder="border:2px solid #EA4C61"\n charCount="1"\n shape="round"></ng-letter-avatar>\n </div>\n <sms message="smsMessage" list-id="SmsRoom.SmsAccount.ListId" accounttype=\'SmsRoom.SmsAccount.type\' ng-switch-default></sms>\n </li>\n </ul>\n </div>\n </div>\n <div data-ng-class="panelRight">\n <div class="note note-info" data-ng-if="SmsRoom && SmsRoom.status == \'CLOSED\'">\n <h4 class="block">Info! {{\'MESSAGE_SMS_ROOM_CLOSED\' | translate}}</h4>\n <p>\n {{\'MESSAGE_SMS_ROOM_CLOSED_DETAILS\' | translate}}.\n </p>\n <hr>\n <p>\n <i class="icon-target"></i> {{\'APPLICATION_DISPOSITION\' | translate}}: <strong>{{SmsRoom.disposition}}</strong>\n </p>\n <p>\n <i class="icon-calendar"></i> {{\'APPLICATION_UPDATED_AT\' | translate}}: <strong>{{SmsRoom.updatedAt | date:\'medium\'}}</strong> (<span am-time-ago="SmsRoom.updatedAt"></span>)\n </p>\n </div>\n <form name="forms.compose" data-ng-submit="forms.compose.$valid && sendSMS()" class="form-horizontal" novalidate>\n <!-- START HEAD -->\n <div class="form">\n\n <!-- START FROM -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.compose.from.$invalid && forms.compose.$submitted}" data-ng-if="SmsRoom.status !== \'CLOSED\'">\n <div class="col-md-12">\n <div class="row">\n <div class="col-md-1">\n <label class="control-label">From:</label>\n </div>\n <div class="col-md-11">\n <ui-select data-ng-disabled="SmsRoom" theme="bootstrap" name="from" data-ng-model="form.from" required>\n <ui-select-match placeholder="From...">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="smsAccount.phone as smsAccount in smsAccounts | filter: $select.search">\n <div data-ng-bind-html="smsAccount.name | highlight: $select.search"></div>\n <small data-ng-bind-html="smsAccount.phone | highlight: $select.search"></small>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.compose.from.$invalid && forms.compose.$submitted " class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n </div>\n </div>\n <!-- END FROM -->\n <!-- START TO -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.compose.to.$invalid && forms.compose.$submitted}" data-ng-if="SmsRoom.status !== \'CLOSED\'">\n\n <div class="col-md-12">\n <div class="row">\n <div class="col-md-1">\n <label class="control-label">To:</label>\n </div>\n <div class="col-md-11">\n <input type="text" ng-pattern="/^[\\+]?[0-9]+$/" name="to" class="form-control todo-taskbody-taskdesc" placeholder="To..." rows="8" data-ng-disabled="SmsRoom" data-ng-model="form.to" required>\n <span data-ng-show="forms.compose.to.$invalid && forms.compose.$submitted " class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n </div>\n </div>\n <!-- END TO -->\n <!-- START CANNED -->\n <div class="form-group" data-ng-if="SmsRoom.status !== \'CLOSED\'">\n <div class="row">\n <div class="col-md-1">\n <a href="#" class="btn btn-icon-only">\n <i class="fa fa-magic" style="color: gray;"></i>\n </a>\n </div>\n <div class="col-md-11">\n <input type="text"\n data-ng-model="modelOptions.selectedAnswer"\n uib-typeahead="key for key in getAnswers($viewValue)"\n placeholder="Canned answers.."\n typeahead-loading="loadingLocations"\n typeahead-no-results="noResults"\n typeahead-on-select="onSelect($item)"\n class="form-control">\n <i ng-show="loadingLocations" class="glyphicon glyphicon-refresh"></i>\n <div ng-show="noResults">\n <i class="glyphicon glyphicon-remove"></i> No Results Found\n </div>\n </div>\n </div>\n\n </div>\n <!-- END CANNED -->\n <!-- START message -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.compose.body.$invalid && forms.compose.$submitted}" data-ng-if="SmsRoom.status !== \'CLOSED\'">\n <div class="col-md-12">\n <textarea id="text" class="form-control maxlength-handler" rows="8" maxlength="160" name="body" data-ng-model="form.body" ></textarea>\n <button id="btnPost" type="button" class="btn btn-success pull-right" ng-class="{\'btn-warning\': form.body.length >= 120, \'btn-danger\': form.body.length >= 141 }">{{ 160 - form.body.length }}</button>\n <span class="help-block"> Max 160 chars</span>\n <span data-ng-show="forms.compose.body.$invalid && forms.compose.$submitted " class="help-block help-block-error">\n'+" <strong>{{'APPLICATION_WARNING' | translate}}!</strong> {{'MESSAGE_REQUIRED_FIELD' | translate}}.\n </span>\n </div>\n </div>\n\n <!-- END message -->\n </div>\n </form>\n </div>\n </div>\n </div>\n </div>\n</div>\n<!-- END TODO CONTENT -->\n"),a.put("app/channels/sms/inbox/sms/info.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_INFO\' | translate }}</h3>\n</div>\n<div class="modal-body" data-ng-init="initInfo()" style=" overflow-x: auto;">\n <div class="form-group" ng-if="data">\n <json-formatter json="data" open="1"></json-formatter>\n </div>\n <div class="note note-warning" data-ng-hide="data">\n <p>\n {{ \'MESSAGE_NO_INFO_AVAILABLE\' | translate }}\n </p>\n </div>\n\n</div>\n<div class="modal-footer">\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CLOSE\' | translate }}</button>\n</div>\n'),a.put("app/channels/sms/inbox/sms/sms.html",'<div class="message">\n <div class="row">\n <div class="col-md-6">\n <span class="bold">From: </span>\n [<a href="" data-ng-click="openContact(smsMessage.from)">{{smsMessage.from}}</a>]\n <br>\n <span class="bold">To: </span>\n [<a href="" data-ng-click="openContact(smsMessage.to)">{{smsMessage.to}}</a>]\n <br>\n </div>\n <div class="col-md-6">\n <span class="pull-right" data-ng-if="smsMessage.User">{{\'APPLICATION_SENT_BY\' | translate}}: <strong>{{smsMessage.User.fullname}}</strong></span>\n <span class="pull-right" data-ng-if="smsMessage.source">{{\'APPLICATION_SENT_BY\' | translate}}: <strong>Cally ²</strong>\n <a ng-click="info(smsMessage.source)"><i class="icon-info font-blue"></i>\n </a>\n </div>\n </div>\n\n <br>\n <span class="todo-tasklist-date">\n <span class="pull-right" data-ng-switch="smsMessage.status">\n <a ng-switch-when="RECEIVED" href="#" class="btn default btn-xs inactive-link green-stripe"> {{smsMessage.status | uppercase}}\n <i class="fa fa-check"></i>\n </a>\n <a ng-switch-when="SENT" href="#" class="btn default btn-xs inactive-link green-stripe"> {{smsMessage.status | uppercase}}\n <i class="fa fa-check"></i>\n </a>\n <a ng-switch-when="DELIVERED" href="#" class="btn default btn-xs inactive-link green-stripe"> {{smsMessage.status | uppercase}}\n <i class="fa fa-check"></i>\n </a>\n <a ng-switch-when="SENDING" href="#" class="btn default btn-xs inactive-link blue-stripe" > {{smsMessage.status | uppercase}}\n <i class="fa fa-warning"></i>\n </a>\n <a ng-switch-when="FAILED" href="#" class="btn default btn-xs red-stripe" data-ng-click="info(null,smsMessage.res_data)"> {{smsMessage.status | uppercase}}\n <i class="fa fa-times"></i>\n </a>\n <a ng-switch-default href="#" class="btn default btn-xs"> {{smsMessage.status | uppercase}}\n </a>\n <br>\n <!-- <a ng-href="https://www.twilio.com/docs/errors/{{smsMessage.errorcode}}" target="_blank" ng-if="(smsMessage.errorcode) && (accounttype==\'twilio\')">Error Code:{{smsMessage.errorcode}}</a>\n <a ng-href="{{smsMessage.errorcode.length > 2 ? \'http://www.skebby.com/sms-api/sms-gateway/developers-docs/#receiveNotifySection\' : \'http://www.skebby.com/sms-api/sms-gateway/developers-docs/#errorCodesSection\'}}" target="_blank" ng-if="(smsMessage.errorcode != 1) && (smsMessage.errorcode) && (accounttype==\'skebby\')">Error Code:{{smsMessage.errorcode}}</a> -->\n </span>\n\n <i class="icon-calendar"></i> <span am-time-ago="smsMessage.updatedAt"></span>\n </span>\n <hr>\n <span class="body text-left" data-ng-bind-html="smsMessage.body" style="white-space: pre-wrap;"></span>\n\n </div>\n'),a.put("app/channels/sms/inbox/view/account/list/list.html",'<!-- BEGIN Portlet PORTLET-->\n<div class="portlet light" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption">\n <div class="btn-group btn-group-solid">\n <button type="button" class="btn btn-sm default" data-ng-model="query.status" uib-btn-radio="\'NEW\'" uib-uncheckable>NEW</button>\n </div>\n <div class="btn-group btn-group-solid">\n <button type="button" class="btn btn-sm default" data-ng-model="query.status" uib-btn-radio="\'OPEN\'" uib-uncheckable>OPEN</button>\n </div>\n <div class="btn-group btn-group-solid">\n <button type="button" class="btn btn-sm default" data-ng-model="query.status" uib-btn-radio="\'PENDING\'" uib-uncheckable>PENDING</button>\n </div>\n <div class="btn-group btn-group-solid">\n <button type="button" class="btn btn-sm default" data-ng-model="query.status" uib-btn-radio="\'CLOSED\'" uib-uncheckable>CLOSED</button>\n </div>\n </div>\n <div class="actions">\n <a href="#" class="btn btn-icon-only default" data-ng-click="getPage();">\n <i class="fa fa-refresh"></i>\n </a>\n <a href="#" class="btn btn-icon-only red" data-ng-click="deleteItems();" data-ng-show="id.length && isAdmin">\n <i class="fa fa-trash"></i>\n </a>\n <a href="#" class="btn btn-icon-only btn-success" data-ng-click="disposeItems();" data-ng-show="id.length">\n <i class="fa fa-upload"></i>\n </a>\n <a href="#" class="btn btn-icon-only blue" data-ng-click="tagItems();" data-ng-show="id.length">\n <i class="fa fa-tags"></i>\n </a>\n <a href="#" class="btn btn-icon-only green" data-ng-click="openRoom(null, \'New Message\')">\n <i class="fa fa-plus"></i>\n </a>\n </div>\n </div>\n <div class="portlet-title" data-ng-show="tags.length">\n <!-- START TAGS -->\n <div class="form-group">\n <div class="row">\n <div class="col-md-1">\n <a href="#" class="btn btn-icon-only">\n <i class="fa fa-tags" style="color: gray;"></i>\n </a>\n </div>\n <div class="col-md-11">\n <ui-select multiple data-ng-model="query.tags" theme="bootstrap" on-select="onChanged($item, $model)" on-remove="onChanged($item, $model)">\n <ui-select-match placeholder="Search by tag...">{{$item}}</ui-select-match>\n <ui-select-choices repeat="tag in tags | filter:$select.search">\n {{tag}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n </div>\n <!-- END TAGS -->\n </div>\n <div class="portlet-body">\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="spinner-grid" spinner-start-active="false"></span>\n <!-- END UI-GRID SPINNER -->\n\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-pagination ui-grid-selection ui-grid-exporter class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n</div>\n<!-- END Portlet PORTLET-->\n'),a.put("app/channels/sms/inbox/view/view.agents.modal.html",'<div class="modal-header" data-ng-init="initModal()">\n <h3 class="modal-title">{{ \'APPLICATION_AGENTS\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <!-- START TRANSPORT -->\n <div class="form-group">\n <form name="form" novalidate>\n <!-- START TRANSPORT -->\n <div class="form-group">\n <ui-select multiple name="agents" data-ng-model="item.agents" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_AGENTS\' | translate}}">{{$item.fullname}}</ui-select-match>\n <ui-select-choices repeat="agent.id as agent in agents | filter: $select.search">\n {{agent.fullname}}\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END TRANSPORT -->\n </form>\n </div>\n <!-- END TRANSPORT -->\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" data-ng-click="ok()">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" data-ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/sms/inbox/view/view.html",'<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="glyphicon glyphicon-comment"></i>\n <a href="#">{{ \'APPLICATION_SMS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-note"></i>\n <a href="/channels/sms/inbox/list">{{ \'APPLICATION_INBOX\' | translate }}</a>\n </li>\n </ul>\n </div>\n </div>\n</div>\n\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row inbox" data-ng-init="initView()">\n <div class="col-md-3">\n <ul class="inbox-nav margin-bottom-10">\n <li data-ng-class="{active: $stateParams.id == smsAccount.id}" data-ng-repeat="smsAccount in smsAccounts">\n <a href="/channels/sms/inbox/view/account/{{smsAccount.id}}/list" class="btn">\n <i class="icon-notebook"></i> {{smsAccount.name}}\n </a>\n <b></b>\n </li>\n </ul>\n </div>\n\n <div class="col-md-9" >\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view>\n <div class="note note-info">\n <h4 class="block">Info! {{\'APPLICATION_NO_ACCOUNT_SELECTED\' | translate}}</h4>\n </div>\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/sms/inbox/view/view.status.modal.html",'<div class="modal-header">\n <button ng-if="modal.dismissable" type="button" ng-click="$dismiss()" class="close">×</button>\n <h4 ng-if="modal.title" ng-bind="modal.title | translate" class="modal-title"></h4>\n</div>\n<div class="modal-body">\n <p ng-if="modal.text && !closed" ng-bind="modal.text | translate"></p>\n <form name="form" novalidate data-ng-init="initDisposition()">\n <div class="form-group">\n <ui-select data-ng-model="item.disposition" name="list" theme="bootstrap" data-ng-disabled="!dispositions.length" required>\n <ui-select-match placeholder="{{\'APPLICATION_DISPOSITION\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="disposition.name as disposition in dispositions | filter: $select.search">\n <div ng-bind-html="disposition.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <div class="note note-warning" data-ng-hide="dispositions.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_DISPOSITIONS_AVAILABLE\' | translate }}\n </p>\n </div>\n</form>\n <!-- <div ng-if="modal.html" ng-bind-html="modal.html"></div> -->\n</div>\n<div class="modal-footer">\n <button class="btn btn-danger" type="button" ng-click="ok()">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n <!-- <button ng-repeat="button in modal.buttons" ng-class="button.classes" ng-click="button.click($event)" ng-bind="button.text" class="btn"></button> -->\n</div>\n'), +a.put("app/channels/sms/inbox/view/view.tags.modal.html",'<div class="modal-header" data-ng-init="initModal()">\n <h3 class="modal-title">{{ \'APPLICATION_TAGS\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <!-- START TRANSPORT -->\n <div class="form-group">\n <form name="form" novalidate>\n <!-- START TAGS -->\n <div class="form-group">\n <ui-select multiple data-ng-model="item.tags" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_TAGS\' | translate}}">{{$item}}</ui-select-match>\n <ui-select-choices repeat="tag in tags | filter: $select.search">\n {{tag}}\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END TAGS -->\n </form>\n </div>\n <!-- END TRANSPORT -->\n</div>\n<div class="modal-footer">\n <button type="button" class="btn" data-ng-class="button.class" data-ng-click="button.click()"data-ng-repeat="button in modal.buttons">{{button.text | translate}}</button>\n <!-- <button class="btn btn-success" type="button" data-ng-click="ok()">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" data-ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button> -->\n</div>\n'),a.put("app/channels/sms/inbox/view/view.templates.modal.html",'<div class="modal-header" data-ng-init="initModal()">\n <h3 class="modal-title">{{ \'APPLICATION_TEMPLATES\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <div class="note note-info" data-ng-show="!templates.length">\n <h4 class="block">Info!</h4>\n <p>\n {{\'MESSAGE_NO_TEMPLATES_AVAILABLE\' | translate}}\n </p>\n </div>\n <form name="form" data-ng-show="templates.length" novalidate>\n <div class="form-group">\n <ui-select data-ng-model="item.template" theme="bootstrap">\n <ui-select-match placeholder="Select a template in the list or search his name...">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="template in templates | propsFilter: {name: $select.search}">\n <div ng-bind-html="template.name | highlight: $select.search"></div>\n <small data-ng-show="template.description">\n {{\'APPLICATION_DESCRIPTION\' | translate}}: {{template.description}}\n </small>\n </ui-select-choices>\n </ui-select>\n </div>\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" data-ng-click="ok()" data-ng-show="templates.length">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" data-ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/sms/queue/list/list.create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_QUEUE\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.name.$touched || form.$submitted) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" data-ng-pattern="settings.patternName" required />\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$invalid && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$invalid && form.name.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_PATTERN_NAME\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START STRATEGY -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.strategy.$touched || form.$submitted) && form.strategy.$invalid}">\n <label class="control-label">{{\'APPLICATION_STRATEGY\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="item.strategy" name="strategy" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.toUpperCase()}}</ui-select-match>\n <ui-select-choices repeat="strategy in strategies | filter: $select.search">\n <div ng-bind-html="strategy.toUpperCase() | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form.strategy.$touched || form.$submitted) && form.strategy.$invalid && form.strategy.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END STRATEGY -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.timeout.$touched || form.$submitted) && form.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_AGENT_TIMEOUT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" min="0" name="timeout" placeholder="Timeout" class="form-control" data-ng-model="item.timeout" required min="1"/>\n <span data-ng-show="(form.timeout.$touched || form.$submitted) && form.timeout.$invalid && form.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n\n <!-- START AGENTS-->\n <div class="form-body" data-ng-init="getTeams()">\n <label for="penalty">{{\'APPLICATION_PENALTY\' | translate}}</label>\n <div class="input-group input-small mbottom20">\n <input type="number" class="spinner-input form-control" maxlength="3" data-ng-model="item.penalty" readonly>\n <div class="spinner-buttons input-group-btn btn-group-vertical">\n <button type="button" class="btn spinner-up btn-xs blue" data-ng-click="item.penalty=item.penalty+1">\n <i class="fa fa-angle-up"></i>\n </button>\n <button type="button" class="btn spinner-down btn-xs blue" data-ng-disabled="!item.penalty" data-ng-click="item.penalty=item.penalty-1">\n <i class="fa fa-angle-down"></i>\n </button>\n </div>\n </div>\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-team">\n </div>\n </div>\n </div>\n <!-- END AGENTS-->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/sms/queue/list/list.html",'<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="glyphicon glyphicon-comment"></i>\n <a href="#">{{ \'APPLICATION_SMS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-docs"></i>\n <a href="#">{{ \'APPLICATION_QUEUES\' | translate }}</a>\n </li>\n </ul>\n </div>\n </div>\n</div>\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-docs font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_QUEUES\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <a class="btn green-jungle" href="#" data-ng-click="createItem()" data-ng-if="Auth.isAdmin()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_QUEUE\' | translate }}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/sms/queue/view/view.agents.html",'<div class="row" data-ng-init="getTeams()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_AGENTS\' | translate}}</span>\n </div>\n </div>\n <div class="note note-warning" data-ng-hide="teams.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_AVAILABLE_TEAMS\' | translate }}\n </p>\n </div>\n <div class="portlet-body">\n <!-- BEGIN FORM-->\n <form action="index.html" class="form-horizontal form-row-seperated">\n <div class="form-body">\n <label for="penalty">{{\'APPLICATION_PENALTY\' | translate}}</label>\n <div class="input-group input-small mbottom20">\n <input type="number" class="spinner-input form-control" maxlength="3" data-ng-model="queue.penalty" readonly>\n <div class="spinner-buttons input-group-btn btn-group-vertical">\n <button type="button" class="btn spinner-up btn-xs blue" data-ng-click="queue.penalty=queue.penalty+1">\n <i class="fa fa-angle-up"></i>\n </button>\n <button type="button" class="btn spinner-down btn-xs blue" data-ng-disabled="!queue.penalty" data-ng-click="queue.penalty=queue.penalty-1">\n <i class="fa fa-angle-down"></i>\n </button>\n </div>\n </div>\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-team">\n </div>\n </div>\n </div>\n </form>\n <!-- END FORM-->\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/sms/queue/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getQueue()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="glyphicon glyphicon-comment"></i>\n <a href="#">{{ \'APPLICATION_SMS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-docs"></i>\n <a href="/channels/sms/queues/list">{{ \'APPLICATION_QUEUES\' | translate }}</a>\n <i data-ng-show="queue" class="fa fa-angle-right"></i>\n </li>\n <li data-ng-show="queue">\n <a href="#">{{queue.name}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET main.channels -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/queue.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{queue.name}}\n </div>\n <!-- <div class="profile-usertitle-job">\n {{user.role}}\n </div> -->\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.channels.sms.queues.view.settings\')}">\n <a data-ng-href="/channels/sms/queues/view/{{queue.id}}/settings">\n <i class="icon-settings"></i>\n {{ \'APPLICATION_SETTINGS\' | translate}} </a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.channels.sms.queues.view.agents\')}" data-ng-show="Auth.getCurrentUser().role === \'admin\'">\n <a data-ng-href="/channels/sms/queues/view/{{queue.id}}/agents">\n <i class="icon-people"></i>\n {{ \'APPLICATION_AGENTS\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET main.channels -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n </div>\n <!-- END PAGE CONTENT-->\n'),a.put("app/channels/sms/queue/view/view.settings.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_SETTINGS\' | translate}}</span>\n </div>\n </div>\n <div class="portlet-body">\n <form name="forms.general" data-ng-submit="forms.general.$valid && updateSmsQueue()" novalidate>\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="queue.name" data-ng-pattern="settings.patternName" required />\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid && forms.general.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid && forms.general.name.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_PATTERN_NAME\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START STRATEGY -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.strategy.$touched || forms.general.$submitted) && forms.general.strategy.$invalid}">\n <label class="control-label">{{\'APPLICATION_STRATEGY\' | translate}}</label>\n <ui-select data-ng-model="queue.strategy" name="strategy" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected | uppercase}}</ui-select-match>\n <ui-select-choices repeat="strategy in strategies | filter: $select.search">\n <div ng-bind-html="strategy | uppercase | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END STRATEGY -->\n\n <!-- START TIMEOUT -->\n <div class="form-group">\n <label class="control-label">Timeout</label>\n <input type="number" name="timeout" placeholder="Timeout" class="form-control" min="1" data-ng-model="queue.timeout"/>\n </div>\n <!-- END TIMEOUT -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="queue.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n <input data-ng-if="Auth.isAdmin()" class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/sms/realtime/view/agent/agent.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initAgents()">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns class="ui-grid" ui-grid-tree-view ui-grid-expandable-row ui-grid-pagination ui-grid-auto-resize>\n <span us-spinner spinner-key="grid-spinner" spinner-start-active="true"></span>\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/sms/realtime/view/agent/agent.modal.info.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_INTERFACE_INFO\' | translate }}</h3>\n</div>\n<div class="modal-body">\n<div data-ng-if="agent.ipaddr" class="well">\n <div>{{agent.ipaddr}}:{{agent.port}}</div>\n <div>{{agent.fullcontact}}</div>\n <div>{{agent.useragent}}</div>\n <div>{{agent.lastms}}</div>\n</div>\n<div data-ng-if="!agent.ipaddr" class="alert alert-danger" role="alert">\n {{\'MESSAGE_NO_AVAILABLE_INFO\' | translate}}\n</div>\n</div>\n<div class="modal-footer">\n <button class="btn default" type="button" ng-click="close()">{{ \'APPLICATION_CLOSE\' | translate }}</button>\n</div>\n'),a.put("app/channels/sms/realtime/view/agent/queue.modal.add.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_JOIN_QUEUE\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <div class="form-group row">\n <label class="col-md-2 control-label" style="margin-top: 7px;">{{\'APPLICATION_QUEUE\' | translate}}:</label>\n <div class="col-md-10">\n <ui-select multiple ng-model="item.queues" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_QUEUE\' | translate}}">{{$item.name}}</ui-select-match>\n <ui-select-choices repeat="queue.id as queue in queues | filter: $select.search">\n <div ng-bind-html="queue.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n</div>\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/sms/realtime/view/application/application.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initApplications()">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns class="ui-grid" ui-grid-auto-resize>\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/sms/realtime/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-directions"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="glyphicon glyphicon-comment"></i>\n <a href="#">{{ \'APPLICATION_SMS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-energy"></i>\n <a href="#">{{ \'APPLICATION_REALTIME\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <div>\n <nav class="navbar navbar-default" role="navigation">\n <div class="collapse navbar-collapse">\n <ul class="nav navbar-nav">\n <li data-ng-class="{\'active\': $state.is(\'main.channels.sms.realtime.view.agents\')}">\n <a href="/channels/sms/realtime/view/agents">\n {{\'APPLICATION_AGENTS\' | translate}}\n </a>\n </li>\n <li data-ng-class="{\'active\': $state.is(\'main.channels.sms.realtime.view.applications\')}">\n <a href="/channels/sms/realtime/view/applications">\n {{\'APPLICATION_APPLICATIONS\' | translate}}\n </a>\n </li>\n </ul>\n </div>\n </nav>\n </div>\n\n <div ui-view></div>\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/sms/realtime/view/view.queue.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initAgents()">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div id="grid1" ui-grid="gridOptions" ui-grid-resize-columns ui-grid-tree-view class="grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/voice/chanspy/list/list.create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_CHANSPY\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.name.$touched || form.$submitted) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START PREFIX -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.prefix.$touched || form.$submitted) && form.prefix.$invalid}">\n <label class="control-label">{{\'APPLICATION_PREFIX\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="prefix" placeholder="{{\'APPLICATION_PREFIX\' | translate}}" class="form-control" data-ng-model="item.prefix" required/>\n <span data-ng-show="(form.prefix.$touched || form.$submitted) && form.prefix.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PREFIX -->\n\n <!-- START OPTIONS -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.options.$touched || form.$submitted) && form.options.$invalid}">\n <label class="control-label">{{\'APPLICATION_OPTIONS\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select multiple data-ng-model="item.options" name="options" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$item.value}}: {{$item.name | translate}}</ui-select-match>\n <ui-select-choices repeat="option.value as option in options | filter: $select.search">\n <div ng-bind-html="option.value + \': \' + (option.name | translate) | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form.options.$touched || form.$submitted) && form.options.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END OPTIONS -->\n\n <!-- START AUTH -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_AUTH\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="item.auth"\n type="checkbox"\n name="auth"\n data-ng-init="item.auth = 0"\n switch-active="{{ recordSwitch.isActive }}"\n switch-on-text="{{ recordSwitch.onText }}"\n switch-off-text="{{ recordSwitch.offText }}"\n switch-on-color="{{ recordSwitch.onColor }}"\n switch-off-color="{{ recordSwitch.offColor }}"\n switch-animate="{{ recordSwitch.animate }}"\n switch-size="{{ recordSwitch.size }}"\n switch-label="{{ recordSwitch.label }}"\n switch-icon="{{ recordSwitch.icon }}"\n switch-radio-off="{{ recordSwitch.radioOff }}"\n switch-label-width="{{ recordSwitch.labelWidth }}"\n switch-handle-width="{{ recordSwitch.handleWidth }}">\n </div>\n <!-- END AUTH -->\n\n <!-- START PASSWORD -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.password.$touched || form.$submitted) && form.password.$invalid}">\n <label class="control-label">{{\'APPLICATION_PASSWORD\' | translate}}<span data-ng-show="item.auth" class="required" aria-required="true">*</span></label>\n <input type="password" name="password" placeholder="{{\'APPLICATION_PASSWORD\' | translate}}" class="form-control" data-ng-model="item.password" data-ng-disabled="!item.auth" data-ng-required="item.auth"/>\n <span data-ng-show="(form.password.$touched || form.$submitted) && form.password.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PASSWORD -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/voice/chanspy/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-earphones-alt"></i>\n <a href="#">{{ \'APPLICATION_VOICE\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-user-secret"></i>\n <a href="/channels/voice/chanspys/list">{{ \'APPLICATION_CHANSPY\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="fa fa-user-secret font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_CHANSPY\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <button class="btn green-jungle " ng-click="createItem()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_CHANSPY\' | translate }}\n </button>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/voice/chanspy/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getChanSpy()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-earphones-alt"></i>\n <a href="#">{{ \'APPLICATION_VOICE\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-user-secret"></i>\n <a href="/channels/voice/chanspy/list">{{ \'APPLICATION_CHANSPY\' | translate }}</a>\n <i data-ng-show="chanspy" class="fa fa-angle-right"></i>\n </li>\n <li data-ng-show="chanspy">\n <a href="#">{{chanspy.name}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/chanspy.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{chanspy.name}}\n </div>\n <!-- <div class="profile-usertitle-job">\n {{user.role}}\n </div> -->\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.channels.voice.chanspy.view.settings\')}">\n <a data-ng-href="/channels/voice/chanspy/view/{{chanspy.id}}/settings">\n <i class="icon-settings"></i>\n {{ \'APPLICATION_SETTINGS\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'), +a.put("app/channels/voice/chanspy/view/view.settings.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_CHANSPY\' | translate}} {{ \'APPLICATION_SETTINGS\' | translate}} </span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n </li>\n </ul>\n </div>\n\n <div class="portlet-body">\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.general" data-ng-submit="forms.general.$valid && updateChanSpy()" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="chanspy.name" required/>\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START PREFIX -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.general.prefix.$touched || form.general.$submitted) && form.general.prefix.$invalid}">\n <label class="control-label">{{\'APPLICATION_PREFIX\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="prefix" placeholder="{{\'APPLICATION_PREFIX\' | translate}}" class="form-control" data-ng-model="chanspy.prefix" required/>\n <span data-ng-show="(form.general.prefix.$touched || form.general.$submitted) && form.general.prefix.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PREFIX -->\n\n <!-- START OPTIONS -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.general.options.$touched || form.general.$submitted) && form.general.options.$invalid}">\n <label class="control-label">{{\'APPLICATION_OPTIONS\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select multiple data-ng-model="chanspy.options" name="options" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$item.value}}: {{$item.name | translate}}</ui-select-match>\n <ui-select-choices repeat="option.value as option in options | filter: $select.search">\n <div ng-bind-html="option.value + \': \' + (option.name | translate) | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form.general.options.$touched || form.general.$submitted) && form.general.options.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END OPTIONS -->\n\n <!-- START AUTH -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_AUTH\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="chanspy.auth"\n type="checkbox"\n name="auth"\n switch-active="{{ recordSwitch.isActive }}"\n switch-on-text="{{ recordSwitch.onText }}"\n switch-off-text="{{ recordSwitch.offText }}"\n switch-on-color="{{ recordSwitch.onColor }}"\n switch-off-color="{{ recordSwitch.offColor }}"\n switch-animate="{{ recordSwitch.animate }}"\n switch-size="{{ recordSwitch.size }}"\n switch-label="{{ recordSwitch.label }}"\n switch-icon="{{ recordSwitch.icon }}"\n switch-radio-off="{{ recordSwitch.radioOff }}"\n switch-label-width="{{ recordSwitch.labelWidth }}"\n switch-handle-width="{{ recordSwitch.handleWidth }}">\n </div>\n <!-- END AUTH -->\n\n <!-- START PASSWORD -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.general.password.$touched || form.general.$submitted) && form.general.password.$invalid}">\n <label class="control-label">{{\'APPLICATION_PASSWORD\' | translate}}<span class="required" data-ng-show="chanspy.auth" aria-required="true">*</span></label>\n <input type="password" name="password" placeholder="{{\'APPLICATION_PASSWORD\' | translate}}" class="form-control" data-ng-model="chanspy.password" data-ng-disabled="!chanspy.auth" data-ng-required="chanspy.auth"/>\n <span data-ng-show="(form.general.password.$touched || form.general.$submitted) && form.general.password.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PASSWORD -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="chanspy.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END ADVANCED TAB -->\n\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/voice/context/list/create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_CONTEXT\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.name.$touched || form.$submitted) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"/></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" data-ng-click="ok()" data-ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" data-ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/voice/context/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-earphones-alt"></i>\n <a href="#">{{ \'APPLICATION_VOICE\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-docs"></i>\n <a href="#">{{ \'APPLICATION_CONTEXTS\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-docs font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_CONTEXTS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <a class="btn green-jungle" href="#" data-ng-click="createItem()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_CONTEXT\' | translate }}\n </a>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/voice/context/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getContext()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-earphones-alt"></i>\n <a href="#">{{ \'APPLICATION_VOICE\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-docs"></i>\n <a href="/channels/voice/contexts/list">{{ \'APPLICATION_CONTEXTS\' | translate }}</a>\n <i data-ng-show="context" class="fa fa-angle-right"></i>\n </li>\n <li data-ng-show="context">\n <a href="#">{{context.name}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET main.channels -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/context.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{context.name}}\n </div>\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.channels.voice.contexts.view.settings\')}">\n <a data-ng-href="/channels/voice/contexts/view/{{context.id}}/settings">\n <i class="icon-settings"></i>\n {{ \'APPLICATION_SETTINGS\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET main.channels -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n </div>\n <!-- END PAGE CONTENT-->\n'),a.put("app/channels/voice/context/view/view.settings.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_CONTEXT\' | translate}} {{ \'APPLICATION_SETTINGS\' | translate}} </span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n </li>\n </ul>\n </div>\n\n <div class="portlet-body">\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.general" data-ng-submit="forms.general.$valid && updateVoiceContext()" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.name.$touched || form.$submitted) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="context.name" required readonly/>\n <span class="help-block">\n {{ \'DESCRIPTION_CANT_EDIT_NAME\' | translate }}\n </span>\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="context.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END ADVANCED TAB -->\n\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/voice/disposition/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-earphones-alt"></i>\n <a href="#">{{ \'APPLICATION_VOICE\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-target"></i>\n <a href="/channels/voice/dispositions/list">{{ \'APPLICATION_DISPOSITIONS\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-docs font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_DISPOSITIONS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <a href="#" class="btn btn-icon-only green" data-ng-click="addDisposition();">\n <i class="fa fa-plus"></i>\n </a>\n </div>\n </div>\n <div class="portlet-body">\n <div class="tab-content">\n <div class="row" data-ng-hide="dispositions.length">\n <div class="col-md-12">\n <div class="note note-info">\n <h4 class="block">Info! {{\'MESSAGE_NO_DISPOSITIONS_AVAILABLE\' | translate}}</h4>\n </div>\n </div>\n </div>\n\n <!-- GENERAL TAB -->\n <div class="row" data-ng-repeat="disposition in dispositions">\n <div class="col-md-12 form-group">\n <div class="input-group">\n <div>\n <input class="form-control" type="text" placeholder="{{\'APPLICATION_DISPOSITION\' | translate}}" data-ng-model="disposition.name">\n </div>\n <span class="input-group-btn">\n <button class="btn btn-success" type="button" data-ng-click="updateDisposition(disposition.id, disposition.name);"><i class="fa fa-cloud-upload fa-fw"></i> {{\'APPLICATION_UPDATE\' | translate}}</button>\n <button class="btn btn-danger" type="button" data-ng-click="deleteDisposition(disposition.id);"><i class="fa fa-times fa-fw"></i> {{\'APPLICATION_DELETE\' | translate}}</button>\n </span>\n </div>\n </div>\n </div>\n <!-- END GENERAL TAB -->\n </div>\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/voice/disposition/list/modal/add.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_DISPOSITIONS\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.form.$touched || form.$submitted) && form.form.$invalid}">\n <div class="">\n <input type="text" name="form" placeholder="{{\'APPLICATION_DISPOSITION\' | translate}}" class="form-control" data-ng-model="name" required/>\n <span data-ng-show="form.form.$touched && form.form.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n <!-- END NAME -->\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" data-ng-click="ok()" data-ng-show="form.$valid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" data-ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/voice/moh/list/create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_MOH_CLASS\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.name.$touched || form.$submitted) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="ok()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/voice/moh/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-earphones-alt"></i>\n <a href="#">{{ \'APPLICATION_VOICE\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-music-tone"></i>\n <a href="#">{{ \'APPLICATION_MOHS\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-music-tone font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_MOHS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <a class="btn green-jungle" href="#" data-ng-click="createItem()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_MOH_CLASS\' | translate }}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/voice/moh/view/view.addFiles.html",'\n<div class="row" data-ng-init="getSounds()">\n <div class="col-md-12">\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-notebook font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_MOH\' | translate }} {{ \'APPLICATION_ADD_FILES\' | translate }}</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <div class="note note-warning" data-ng-hide="soundList.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_SOUNDS_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/tools/sounds/list">{{\'APPLICATION_SOUNDS\' | translate}}</a>\n </p>\n </div>\n <form name="forms.general" data-ng-submit="(item.sounds.length > 0) && addMohs()" data-ng-show="soundList.length" novalidate>\n\n <!-- START SOUNDS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.sounds.$touched || forms.general.$submitted) && item.sounds.length == 0}">\n <label class="control-label">{{\'APPLICATION_SOUNDS\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select multiple data-ng-model="item.sounds" theme="bootstrap" name="sounds" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$item.display_name}}</ui-select-match>\n <ui-select-choices repeat="sound.id as sound in soundList | filter: $select.search">\n {{sound.display_name}}\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.general.sounds.$touched || forms.general.$submitted) && item.sounds.length == 0" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END OPTIONS -->\n\n <input type="submit" class="btn green-haze" value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n </form>\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/voice/moh/view/view.audios.html",'<div ui-view class="profile-content">\n<div class="row" data-ng-init="getAudioFiles()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_AUDIOS\' | translate}}</span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="audioFiles">\n <a class="btn green-jungle " href="/channels/voice/mohs/view/{{moh.id}}/add" data-toggle="dropdown">\n <i class="icon-plus"></i> {{ \'APPLICATION_ADD_FILES\' | translate }}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <div class="note note-warning" data-ng-hide="audioFiles">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_FOLDER_DOES_NOT_EXIST\' | translate }}\n </p>\n </div>\n <!-- START TABLE -->\n <table class="table table-striped table-bordered table-hover" data-ng-show="audioFiles">\n <thead>\n <tr>\n <th>{{ \'APPLICATION_NAME\' | translate }}</th>\n <th width="30%">{{ \'APPLICATION_PREVIEW\' | translate }}</th>\n <th width="10%">{{ \'APPLICATION_ACTIONS\' | translate }}</th>\n </tr>\n </thead>\n <tbody data-ng-model="audioFiles">\n <tr data-ng-repeat="audiofile in audioFiles">\n <td>{{audiofile}}</td>\n <td>\n <audio controls ng-src="{{getSecureSrc(audioSources[audiofile])}}" preload="none">\n Your browser does not support the audio tag.\n </audio></td>\n <td>\n <a class="btn default btn-xs red-stripe" data-ng-click="deleteItem(audiofile,audiofile)">\n {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </td>\n </tr>\n <tr data-ng-hide="audioFiles.length">\n <td colspan="3" style="text-align:center;">\n <i>{{ \'MESSAGE_NO_AUDIOFILES_AVAILABLE\' | translate }}</i>\n </td>\n </tr>\n </tbody>\n </table>\n <!-- END TABLE -->\n </div>\n </div>\n </div>\n</div>\n</div>\n'),a.put("app/channels/voice/moh/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getMoh()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-earphones-alt"></i>\n <a href="#">{{ \'APPLICATION_VOICE\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-music-tone"></i>\n <a href="/channels/voice/mohs/list">{{ \'APPLICATION_MOH_CLASS\' | translate }}</a>\n <i data-ng-show="moh" class="fa fa-angle-right"></i>\n </li>\n <li data-ng-show="moh">\n <a href="#">{{moh.name}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET main.channels -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/moh.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{moh.name}}\n </div>\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.channels.voice.mohs.view.settings\')}">\n <a data-ng-href="/channels/voice/mohs/view/{{moh.id}}/settings">\n <i class="icon-settings"></i>\n {{ \'APPLICATION_SETTINGS\' | translate}} </a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.channels.voice.mohs.view.audios\') || $state.is(\'main.channels.voice.mohs.view.add\')}">\n <a data-ng-href="/channels/voice/mohs/view/{{moh.id}}/audios">\n <i class="icon-list"></i>\n {{ \'APPLICATION_AUDIOS\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET main.channels -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/voice/moh/view/view.settings.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_MOH_CLASS\' | translate}} {{ \'APPLICATION_SETTINGS\' | translate}} </span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n </li>\n </ul>\n </div>\n\n <div class="portlet-body" data-ng-init="getContexts();">\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.general" data-ng-submit="forms.general.$valid && updateVoiceMoh()" novalidate>\n\n <!-- START PATH -->\n <div class="form-group" >\n <label class="control-label">{{\'APPLICATION_PATH\' | translate}}</label>\n <input type="text" name="path" class="form-control" data-ng-model="moh.directory" disabled/>\n </div>\n <!-- END PATH -->\n\n <!-- START SORT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.sort.$touched || forms.general.$submitted) && forms.general.sort.$invalid}">\n <label class="control-label">{{\'APPLICATION_SORT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="moh.sort" theme="bootstrap" name="sort" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$translate.instant($select.selected.name)}}</ui-select-match>\n <ui-select-choices repeat="sort.value as sort in sortOptions | filter: $select.search">\n {{$translate.instant(sort.name)}}\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.general.sort.$touched || forms.general.$submitted) && forms.general.sort.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END SORT -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.general.$submitted && forms.general.description.$invalid}">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" class="form-control" data-ng-model="moh.description"/></textarea>\n <span data-ng-show="forms.general.$submitted && forms.general.description.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END DESCRIPTION -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END GENERAL TAB -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'), +a.put("app/channels/voice/queue/list/list.create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_QUEUE\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.queue.name.$touched || form.queue.$submitted) && form.queue.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" data-ng-pattern="settings.patternName" required />\n <span data-ng-show="(form.queue.name.$touched || form.queue.$submitted) && form.queue.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(form.queue.name.$touched || form.queue.$submitted) && form.queue.name.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_PATTERN_NAME\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START STRATEGY -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.queue.strategy.$touched || form.queue.$submitted) && form.queue.strategy.$invalid}">\n <label class="control-label">{{\'APPLICATION_STRATEGY\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="item.strategy" name="strategy" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.toUpperCase()}}</ui-select-match>\n <ui-select-choices repeat="strategy in [\'ringall\', \'leastrecent\', \'fewestcalls\', \'random\', \'rrmemory\', \'linear\', \'wrandom\', \'rrordered\'] | filter: $select.search">\n <div ng-bind-html="strategy.toUpperCase() | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_STRATEGY\' | translate }}\n </span>\n <span data-ng-show="(form.queue.strategy.$touched || form.queue.$submitted) && form.queue.strategy.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END STRATEGY -->\n\n <!-- START AGENTS-->\n <div class="form-body" data-ng-init="getTeams()">\n <label for="penalty">{{\'APPLICATION_PENALTY\' | translate}}</label>\n <div class="input-group input-small mbottom20">\n <input type="number" class="spinner-input form-control" maxlength="3" data-ng-model="item.penalty" readonly>\n <div class="spinner-buttons input-group-btn btn-group-vertical">\n <button type="button" class="btn spinner-up btn-xs blue" data-ng-click="item.penalty=item.penalty+1">\n <i class="fa fa-angle-up"></i>\n </button>\n <button type="button" class="btn spinner-down btn-xs blue" data-ng-disabled="!item.penalty" data-ng-click="item.penalty=item.penalty-1">\n <i class="fa fa-angle-down"></i>\n </button>\n </div>\n </div>\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-team">\n </div>\n </div>\n </div>\n <!-- END AGENTS-->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/voice/queue/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-earphones-alt"></i>\n <a href="#">{{ \'APPLICATION_VOICE\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-docs"></i>\n <a href="#">{{ \'APPLICATION_QUEUES\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-docs font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_QUEUES\' | translate }}</span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <a class="btn green-jungle" href="#" data-ng-click="createItem()" data-ng-if="Auth.isAdmin()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_QUEUE\' | translate }}\n </a>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/voice/queue/view/view.agents.html",'<div class="row" data-ng-init="getTeams()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_AGENTS\' | translate}}</span>\n </div>\n </div>\n <div class="note note-warning" data-ng-hide="teams.length">\n <h4 class="block">Warning!</h4><p>{{ \'MESSAGE_NO_AVAILABLE_TEAMS\' | translate }}</p>\n </div>\n <div class="portlet-body">\n <!-- BEGIN FORM-->\n <form action="index.html" class="form-horizontal form-row-seperated">\n <div class="form-body">\n <label for="penalty">{{\'APPLICATION_PENALTY\' | translate}}</label>\n <div class="input-group input-small mbottom20">\n <input type="number" class="spinner-input form-control" maxlength="3" data-ng-model="queue.penalty" readonly>\n <div class="spinner-buttons input-group-btn btn-group-vertical">\n <button type="button" class="btn spinner-up btn-xs blue" data-ng-click="queue.penalty=queue.penalty+1">\n <i class="fa fa-angle-up"></i>\n </button>\n <button type="button" class="btn spinner-down btn-xs blue" data-ng-disabled="!queue.penalty" data-ng-click="queue.penalty=queue.penalty-1">\n <i class="fa fa-angle-down"></i>\n </button>\n </div>\n </div>\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-team">\n </div>\n </div>\n </div>\n </form>\n <!-- END FORM-->\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/voice/queue/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getQueue()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-earphones-alt"></i>\n <a href="#">{{ \'APPLICATION_VOICE\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-docs"></i>\n <a href="/channels/voice/queues/list">{{ \'APPLICATION_QUEUES\' | translate }}</a>\n <i data-ng-show="queue" class="fa fa-angle-right"></i>\n </li>\n <li data-ng-show="queue">\n <a href="#">{{queue.name}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET main.channels -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/queue.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{queue.name}}\n </div>\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.channels.voice.queues.view.settings\')}">\n <a data-ng-href="/channels/voice/queues/view/{{queue.name}}/settings"> <i class="icon-settings"></i> {{ \'APPLICATION_SETTINGS\' | translate}} </a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.channels.voice.queues.view.agents\')}" data-ng-show="Auth.getCurrentUser().role === \'admin\'">\n <a data-ng-href="/channels/voice/queues/view/{{queue.name}}/agents"><i class="icon-people"></i>{{ \'APPLICATION_AGENTS\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET main.channels -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/voice/queue/view/view.settings.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_QUEUE_SETTINGS\' | translate}}</span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_2" data-toggle="tab">{{ \'APPLICATION_PERIODIC_ANNOUNCE\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_3" data-toggle="tab">{{ \'APPLICATION_ADVANCED\' | translate}}</a>\n </li>\n </ul>\n </div>\n\n <div class="portlet-body" data-ng-init="getContexts();getMohs();getSounds();">\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.general" data-ng-submit="forms.general.$valid && forms.announce.$valid && updateVoiceQueue()" novalidate>\n <div class="row">\n <div class="col-md-6">\n <!-- START STRATEGY -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.strategy.$touched || forms.general.$submitted) && forms.general.strategy.$invalid}">\n <label class="control-label">{{\'APPLICATION_STRATEGY\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="queue.strategy" name="strategy" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.toUpperCase()}}</ui-select-match>\n <ui-select-choices repeat="strategy in [\'ringall\', \'leastrecent\', \'fewestcalls\', \'random\', \'rrmemory\', \'linear\', \'wrandom\', \'rrordered\'] | filter: $select.search">\n <div ng-bind-html="strategy.toUpperCase() | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_STRATEGY\' | translate }}\n </span>\n <span data-ng-show="(forms.general.strategy.$touched || forms.general.$submitted) && forms.general.strategy.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END STRATEGY -->\n\n <!-- START MOH -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.musiconhold.$touched || forms.general.$submitted) && forms.general.musiconhold.$invalid}">\n <label class="control-label">{{\'APPLICATION_MOH\' | translate}}</label>\n <ui-select data-ng-model="queue.musiconhold" name="musiconhold" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="musiconhold.name as musiconhold in voiceMohs | filter: $select.search">\n <div ng-bind-html="musiconhold.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_VOICE_MOH\' | translate }}\n </span>\n <span data-ng-show="(forms.general.musiconhold.$touched || forms.general.$submitted) && forms.general.musiconhold.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END MOH -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.timeout.$touched || forms.general.$submitted) && forms.general.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" min="0" name="timeout" placeholder="{{\'APPLICATION_TIMEOUT\' | translate}}" class="form-control" data-ng-model="queue.timeout" required/>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_TIMEOUT\' | translate }}\n </span>\n <span data-ng-show="(forms.general.timeout.$touched || forms.general.$submitted) && forms.general.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n\n <!-- START MAXLEN -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.maxlen.$touched || forms.general.$submitted) && forms.general.maxlen.$invalid}">\n <label class="control-label">{{\'APPLICATION_MAXLEN\' | translate}}</label>\n <input type="number" min="0" name="maxlen" placeholder="{{\'APPLICATION_MAXLEN\' | translate}}" class="form-control" data-ng-model="queue.maxlen" required/>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_MAXLEN\' | translate }}\n </span>\n <span data-ng-show="(forms.general.maxlen.$touched || forms.general.$submitted) && forms.general.maxlen.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END MAXLEN -->\n\n <!-- START RETRY -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.retry.$touched || forms.general.$submitted) && forms.general.retry.$invalid}">\n <label class="control-label">{{\'APPLICATION_RETRY\' | translate}}</label>\n <input type="number" min="0" name="retry" placeholder="{{\'APPLICATION_RETRY\' | translate}}" class="form-control" data-ng-model="queue.retry" required/>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_RETRY\' | translate }}\n </span>\n <span data-ng-show="(forms.general.retry.$touched || forms.general.$submitted) && forms.general.retry.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END RETRY -->\n\n </div>\n <div class="col-md-6">\n <!-- START WRAPUPTIME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.wrapuptime.$touched || forms.general.$submitted) && forms.general.wrapuptime.$invalid}">\n <label class="control-label">{{\'APPLICATION_WRAPUPTIME\' | translate}}</label>\n <input type="number" min="0" name="wrapuptime" placeholder="{{\'APPLICATION_WRAPUPTIME\' | translate}}" class="form-control" data-ng-model="queue.wrapuptime" required/>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_WRAPUPTIME\' | translate }}\n </span>\n <span data-ng-show="(forms.general.wrapuptime.$touched || forms.general.$submitted) && forms.general.wrapuptime.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END WRAPUPTIME -->\n\n <!-- START WEIGHT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.weight.$touched || forms.general.$submitted) && forms.general.weight.$invalid}">\n <label class="control-label">{{\'APPLICATION_WEIGHT\' | translate}}</label>\n <input type="number" min="0" name="weight" placeholder="{{\'APPLICATION_WEIGHT\' | translate}}" class="form-control" data-ng-model="queue.weight" required/>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_WEIGHT\' | translate }}\n </span>\n <span data-ng-show="(forms.general.weight.$touched || forms.general.$submitted) && forms.general.weight.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END WEIGHT -->\n\n <!-- START JOINEMPTY -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.joinempty.$touched || forms.general.$submitted) && forms.general.joinempty.$invalid}">\n <label class="control-label">{{\'APPLICATION_JOINEMPTY\' | translate}}</label>\n <ui-select multiple data-ng-model="queue.joinempty" name="joinempty" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$item}}</ui-select-match>\n <ui-select-choices repeat="item in [\'yes\',\'no\',\'strict\',\'loose\',\'paused\',\'penalty\',\'inuse\',\'ringing\',\'unavailable\',\'invalid\',\'unknown\',\'wrapup\'] | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_JOINEMPTY\' | translate }}\n </span>\n <span data-ng-show="(forms.general.joinempty.$touched || forms.general.$submitted) && forms.general.joinempty.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END JOINEMPTY -->\n\n <!-- START LEAVEWHENEMPTY -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.leavewhenempty.$touched || forms.general.$submitted) && forms.general.leavewhenempty.$invalid}">\n <label class="control-label">{{\'APPLICATION_LEAVEWHENEMPTY\' | translate}}</label>\n <ui-select multiple data-ng-model="queue.leavewhenempty" name="leavewhenempty" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$item}}</ui-select-match>\n <ui-select-choices repeat="item in [\'yes\',\'no\',\'strict\',\'loose\',\'paused\',\'penalty\',\'inuse\',\'ringing\',\'unavailable\',\'invalid\',\'unknown\',\'wrapup\'] | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_LEAVEWHENEMPTY\' | translate }}\n </span>\n <span data-ng-show="(forms.general.leavewhenempty.$touched || forms.general.$submitted) && forms.general.leavewhenempty.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END LEAVEWHENEMPTY -->\n\n <!-- START ANNOUNCE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.announce.$touched || forms.general.$submitted) && forms.general.announce.$invalid}">\n <label class="control-label">{{\'APPLICATION_ANNOUNCE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="queue.announce" name="announce" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.display_name}}</ui-select-match>\n <ui-select-choices repeat="announce.path as announce in sounds | filter: $select.search">\n <div ng-bind-html="announce.display_name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_ANNOUNCE\' | translate }}\n </span>\n <span data-ng-show="(forms.general.announce.$touched || forms.general.$submitted) && forms.general.announce.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END ANNOUNCE -->\n </div>\n </div>\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="queue.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n\n <div class="tab-pane" id="tab_1_2">\n <form name="forms.announce" data-ng-submit="forms.announce.$valid && forms.general.$valid && updateVoiceQueue()" novalidate>\n <div class="row">\n <div class="col-md-12">\n <!-- START PERIODIC_ANNOUNCE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.announce.periodic_announce.$touched || forms.announce.$submitted) && forms.announce.periodic_announce.$invalid}">\n <label class="control-label">{{\'APPLICATION_PERIODIC_ANNOUNCE\' | translate}}</label>\n <ui-select multiple data-ng-model="queue.periodic_announce" name="periodic_announce" theme="bootstrap" data-ng-disabled="!periodicAnnounces.length">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$item.display_name}}</ui-select-match>\n <ui-select-choices repeat="announce.path as announce in periodicAnnounces | filter: $select.search track by $index">\n <div ng-bind-html="announce.display_name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="periodicAnnounces.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_SOUNDS_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/tools/sounds/list">{{\'APPLICATION_SOUNDS\' | translate}}</a>\n </p>\n </div>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_PERIODIC_ANNOUNCE\' | translate }}\n </span>\n <span data-ng-show="(forms.announce.periodic_announce.$touched || forms.announce.$submitted) && forms.announce.periodic_announce.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PERIODIC_ANNOUNCE -->\n </div>\n </div>\n <div class="row">\n <div class="col-md-6">\n <p><h3>{{\'APPLICATION_SETTINGS\' | translate}}</h3></p>\n <!-- START ANNOUNCE_FREQUENCY -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.announce.announce_frequency.$touched || forms.announce.$submitted) && forms.announce.announce_frequency.$invalid}">\n <label class="control-label">{{\'APPLICATION_ANNOUNCE_FREQUENCY\' | translate}}</label>\n <input type="number" min="0" name="announce_frequency" placeholder="{{\'APPLICATION_ANNOUNCE_FREQUENCY\' | translate}}" class="form-control" data-ng-model="queue.announce_frequency" required/>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_ANNOUNCE_FREQUENCY\' | translate }}\n </span>\n <span data-ng-show="(forms.announce.announce_frequency.$touched || forms.announce.$submitted) && forms.announce.announce_frequency.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END ANNOUNCE_FREQUENCY -->\n\n <!-- START MIN_ANNOUNCE_FREQUENCY -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.announce.min_announce_frequency.$touched || forms.announce.$submitted) && forms.announce.min_announce_frequency.$invalid}">\n <label class="control-label">{{\'APPLICATION_MIN_ANNOUNCE_FREQUENCY\' | translate}}</label>\n <input type="number" min="0" name="min_announce_frequency" placeholder="{{\'APPLICATION_MIN_ANNOUNCE_FREQUENCY\' | translate}}" class="form-control" data-ng-model="queue.min_announce_frequency" required/>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_MIN_ANNOUNCE_FREQUENCY\' | translate }}\n </span>\n <span data-ng-show="(forms.announce.min_announce_frequency.$touched || forms.announce.$submitted) && forms.announce.min_announce_frequency.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END MIN_ANNOUNCE_FREQUENCY -->\n\n <!-- START PERIODIC_ANNOUNCE_FREQUENCY -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.announce.periodic_announce_frequency.$touched || forms.announce.$submitted) && forms.announce.periodic_announce_frequency.$invalid}">\n <label class="control-label">{{\'APPLICATION_PERIODIC_ANNOUNCE_FREQUENCY\' | translate}}</label>\n <input type="number" min="0" name="periodic_announce_frequency" placeholder="{{\'APPLICATION_PERIODIC_ANNOUNCE_FREQUENCY\' | translate}}" class="form-control" data-ng-model="queue.periodic_announce_frequency"/>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_PERIODIC_ANNOUNCE_FREQUENCY\' | translate }}\n </span>\n <span data-ng-show="(forms.announce.periodic_announce_frequency.$touched || forms.announce.$submitted) && forms.announce.periodic_announce_frequency.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PERIODIC_ANNOUNCE_FREQUENCY -->\n\n <!-- START RANDOM_PERIODIC_ANNOUNCE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.announce.random_periodic_announce.$touched || forms.announce.$submitted) && forms.announce.random_periodic_announce.$invalid}">\n <label class="control-label">{{\'APPLICATION_RANDOM_PERIODIC_ANNOUNCE\' | translate}}</label>\n <ui-select data-ng-model="queue.random_periodic_announce" name="random_periodic_announce" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n <ui-select-choices repeat="item in [\'yes\',\'no\'] | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_RANDOM_PERIODIC_ANNOUNCE\' | translate }}\n </span>\n <span data-ng-show="(forms.announce.random_periodic_announce.$touched || forms.announce.$submitted) && forms.announce.random_periodic_announce.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END RANDOM_PERIODIC_ANNOUNCE -->\n\n <!-- START ANNOUNCE_HOLDTIME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.announce.announce_holdtime.$touched || forms.announce.$submitted) && forms.announce.announce_holdtime.$invalid}">\n <label class="control-label">{{\'APPLICATION_ANNOUNCE_HOLDTIME\' | translate}}</label>\n <ui-select data-ng-model="queue.announce_holdtime" name="announce_holdtime" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n <ui-select-choices repeat="item in [\'yes\',\'no\',\'once\'] | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_ANNOUNCE_HOLDTIME\' | translate }}\n </span>\n <span data-ng-show="(forms.announce.announce_holdtime.$touched || forms.announce.$submitted) && forms.announce.announce_holdtime.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END ANNOUNCE_HOLDTIME -->\n\n <!-- START ANNOUNCE_POSITION -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.announce.announce_position.$touched || forms.announce.$submitted) && forms.announce.announce_position.$invalid}">\n <label class="control-label">{{\'APPLICATION_ANNOUNCE_POSITION\' | translate}}</label>\n <ui-select data-ng-model="queue.announce_position" name="announce_position" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n <ui-select-choices repeat="item in [\'yes\',\'no\',\'limit\',\'more\'] | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_ANNOUNCE_POSITION\' | translate }}\n </span>\n <span data-ng-show="(forms.announce.announce_position.$touched || forms.announce.$submitted) && forms.announce.announce_position.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END ANNOUNCE_POSITION -->\n\n <!-- START ANNOUNCE_POSITION_LIMIT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.announce.announce_position_limit.$touched || forms.announce.$submitted) && forms.announce.announce_position_limit.$invalid}">\n <label class="control-label">{{\'APPLICATION_ANNOUNCE_POSITION_LIMIT\' | translate}}</label>\n <input type="number" min="0" name="announce_position_limit" placeholder="{{\'APPLICATION_ANNOUNCE_POSITION_LIMIT\' | translate}}" class="form-control" data-ng-model="queue.announce_position_limit"/>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_ANNOUNCE_POSITION_LIMIT\' | translate }}\n </span>\n <span data-ng-show="(forms.announce.announce_position_limit.$touched || forms.announce.$submitted) && forms.announce.announce_position_limit.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END ANNOUNCE_POSITION_LIMIT -->\n\n <!-- START REPORTHOLDTIME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.announce.reportholdtime.$touched || forms.announce.$submitted) && forms.announce.reportholdtime.$invalid}">\n <label class="control-label">{{\'APPLICATION_REPORTHOLDTIME\' | translate}}</label>\n <ui-select data-ng-model="queue.reportholdtime" name="reportholdtime" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n <ui-select-choices repeat="item in [\'yes\',\'no\'] | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_REPORTHOLDTIME\' | translate }}\n </span>\n <span data-ng-show="(forms.announce.reportholdtime.$touched || forms.announce.$submitted) && forms.announce.reportholdtime.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END REPORTHOLDTIME -->\n\n </div>\n <div class="col-md-6">\n <p><h3>{{\'APPLICATION_SOUNDS\' | translate}}</h3></p>\n <!-- START QUEUE_REPORTHOLD -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.announce.queue_reporthold.$touched || forms.announce.$submitted) && forms.announce.queue_reporthold.$invalid}">\n <label class="control-label">{{\'APPLICATION_QUEUE_REPORTHOLD\' | translate}}</label>\n <ui-select data-ng-model="queue.queue_reporthold" name="queue_reporthold" theme="bootstrap" >\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.display_name}}</ui-select-match>\n <ui-select-choices repeat="announce.path as announce in queueAnnounces | filter: $select.search">\n <div ng-bind-html="announce.display_name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_REPORTHOLD\' | translate }}\n </span>\n <span data-ng-show="(forms.announce.queue_reporthold.$touched || forms.announce.$submitted) && forms.announce.queue_reporthold.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END QUEUE_REPORTHOLD -->\n\n <!-- START QUEUE_YOUARENEXT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.announce.queue_youarenext.$touched || forms.announce.$submitted) && forms.announce.queue_youarenext.$invalid}">\n <label class="control-label">{{\'APPLICATION_QUEUE_YOUARENEXT\' | translate}}</label>\n <ui-select data-ng-model="queue.queue_youarenext" name="queue_youarenext" theme="bootstrap" >\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.display_name}}</ui-select-match>\n <ui-select-choices repeat="announce.path as announce in queueAnnounces | filter: $select.search">\n <div ng-bind-html="announce.display_name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_YOUARENEXT\' | translate }}\n </span>\n <span data-ng-show="(forms.announce.queue_youarenext.$touched || forms.announce.$submitted) && forms.announce.queue_youarenext.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END QUEUE_YOUARENEXT -->\n\n <!-- START QUEUE_THEREARE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.announce.queue_thereare.$touched || forms.announce.$submitted) && forms.announce.queue_thereare.$invalid}">\n <label class="control-label">{{\'APPLICATION_QUEUE_THEREARE\' | translate}}</label>\n <ui-select data-ng-model="queue.queue_thereare" name="queue_thereare" theme="bootstrap" >\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.display_name}}</ui-select-match>\n <ui-select-choices repeat="announce.path as announce in queueAnnounces | filter: $select.search">\n <div ng-bind-html="announce.display_name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_THEREARE\' | translate }}\n </span>\n <span data-ng-show="(forms.announce.queue_thereare.$touched || forms.announce.$submitted) && forms.announce.queue_thereare.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END QUEUE_THEREARE -->\n\n <!-- START QUEUE_CALLSWAITING -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.announce.queue_callswaiting.$touched || forms.announce.$submitted) && forms.announce.queue_callswaiting.$invalid}">\n <label class="control-label">{{\'APPLICATION_QUEUE_CALLSWAITING\' | translate}}</label>\n <ui-select data-ng-model="queue.queue_callswaiting" name="queue_callswaiting" theme="bootstrap" >\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.display_name}}</ui-select-match>\n <ui-select-choices repeat="announce.path as announce in queueAnnounces | filter: $select.search">\n <div ng-bind-html="announce.display_name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_CALLSWAITING\' | translate }}\n </span>\n <span data-ng-show="(forms.announce.queue_callswaiting.$touched || forms.announce.$submitted) && forms.announce.queue_callswaiting.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END QUEUE_CALLSWAITING -->\n\n <!-- START QUEUE_HOLDTIME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.announce.queue_holdtime.$touched || forms.announce.$submitted) && forms.announce.queue_holdtime.$invalid}">\n <label class="control-label">{{\'APPLICATION_QUEUE_HOLDTIME\' | translate}}</label>\n <ui-select data-ng-model="queue.queue_holdtime" name="queue_holdtime" theme="bootstrap" >\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.display_name}}</ui-select-match>\n <ui-select-choices repeat="announce.path as announce in queueAnnounces | filter: $select.search">\n <div ng-bind-html="announce.display_name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_HOLDTIME\' | translate }}\n </span>\n <span data-ng-show="(forms.announce.queue_holdtime.$touched || forms.announce.$submitted) && forms.announce.queue_holdtime.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END QUEUE_HOLDTIME -->\n\n <!-- START QUEUE_MINUTES -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.announce.queue_minutes.$touched || forms.announce.$submitted) && forms.announce.queue_minutes.$invalid}">\n <label class="control-label">{{\'APPLICATION_QUEUE_MINUTES\' | translate}}</label>\n <ui-select data-ng-model="queue.queue_minutes" name="queue_minutes" theme="bootstrap" >\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.display_name}}</ui-select-match>\n <ui-select-choices repeat="announce.path as announce in queueAnnounces | filter: $select.search">\n <div ng-bind-html="announce.display_name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_MINUTES\' | translate }}\n </span>\n <span data-ng-show="(forms.announce.queue_minutes.$touched || forms.announce.$submitted) && forms.announce.queue_minutes.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END QUEUE_MINUTES -->\n\n <!-- START QUEUE_MINUTE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.announce.queue_minute.$touched || forms.announce.$submitted) && forms.announce.queue_minute.$invalid}">\n <label class="control-label">{{\'APPLICATION_QUEUE_MINUTE\' | translate}}</label>\n <ui-select data-ng-model="queue.queue_minute" name="queue_minute" theme="bootstrap" >\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.display_name}}</ui-select-match>\n <ui-select-choices repeat="announce.path as announce in queueAnnounces | filter: $select.search">\n <div ng-bind-html="announce.display_name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_MINUTE\' | translate }}\n </span>\n <span data-ng-show="(forms.announce.queue_minute.$touched || forms.announce.$submitted) && forms.announce.queue_minute.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END QUEUE_MINUTE -->\n\n <!-- START QUEUE_SECONDS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.announce.queue_seconds.$touched || forms.announce.$submitted) && forms.announce.queue_seconds.$invalid}">\n <label class="control-label">{{\'APPLICATION_QUEUE_SECONDS\' | translate}}</label>\n <ui-select data-ng-model="queue.queue_seconds" name="queue_seconds" theme="bootstrap" >\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.display_name}}</ui-select-match>\n <ui-select-choices repeat="announce.path as announce in queueAnnounces | filter: $select.search">\n <div ng-bind-html="announce.display_name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_SECONDS\' | translate }}\n </span>\n <span data-ng-show="(forms.announce.queue_seconds.$touched || forms.announce.$submitted) && forms.announce.queue_seconds.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END QUEUE_SECONDS -->\n\n <!-- START QUEUE_THANKYOU -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.announce.queue_thankyou.$touched || forms.announce.$submitted) && forms.announce.queue_thankyou.$invalid}">\n <label class="control-label">{{\'APPLICATION_QUEUE_THANKYOU\' | translate}}</label>\n <ui-select data-ng-model="queue.queue_thankyou" name="QUEUE_THANKYOU" theme="bootstrap" >\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.display_name}}</ui-select-match>\n <ui-select-choices repeat="announce.path as announce in queueAnnounces | filter: $select.search">\n <div ng-bind-html="announce.display_name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_THANKYOU\' | translate }}\n </span>\n <span data-ng-show="(forms.announce.queue_thankyou.$touched || forms.announce.$submitted) && forms.announce.queue_thankyou.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END QUEUE_THANKYOU -->\n\n </div>\n </div>\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END GENERAL TAB -->\n <!-- ADVANCED TAB -->\n <div class="tab-pane" id="tab_1_3">\n <form name="forms.advanced" data-ng-submit="forms.announce.$valid && forms.general.$valid && forms.advanced.$valid && updateVoiceQueue()" novalidate>\n\n <div class="row">\n <div class="col-md-6">\n\n <!-- START AUTOPAUSE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.autopause.$touched || forms.advanced.$submitted) && forms.advanced.autopause.$invalid}">\n <label class="control-label">{{\'APPLICATION_AUTOPAUSE\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="queue.autopause"\n type="checkbox"\n switch-active="{{ recordSwitch.isActive }}"\n switch-on-text="{{ recordSwitch.onText }}"\n switch-off-text="{{ recordSwitch.offText }}"\n switch-on-color="{{ recordSwitch.onColor }}"\n switch-off-color="{{ recordSwitch.offColor }}"\n switch-animate="{{ recordSwitch.animate }}"\n switch-size="{{ recordSwitch.size }}"\n switch-label="{{ recordSwitch.label }}"\n switch-icon="{{ recordSwitch.icon }}"\n switch-radio-off="{{ recordSwitch.radioOff }}"\n switch-label-width="{{ recordSwitch.labelWidth }}"\n switch-handle-width="{{ recordSwitch.handleWidth }}"\n ng-true-value="\'all\'"\n ng-false-value="\'no\'">\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_AUTOPAUSE\' | translate }}\n </span>\n <span data-ng-show="(forms.advanced.autopause.$touched || forms.advanced.$submitted) && forms.advanced.autopause.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END AUTOPAUSE -->\n\n <!-- START RINGINUSE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.ringinuse.$touched || forms.advanced.$submitted) && forms.advanced.ringinuse.$invalid}">\n <label class="control-label">{{\'APPLICATION_RINGINUSE\' | translate}}</label>\n <ui-select data-ng-model="queue.ringinuse" name="ringinuse" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n <ui-select-choices repeat="item in [\'yes\',\'no\'] | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_RINGINUSE\' | translate }}\n </span>\n <span data-ng-show="(forms.advanced.ringinuse.$touched || forms.advanced.$submitted) && forms.advanced.ringinuse.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END RINGINUSE -->\n\n <!-- START MEMBER_DELAY -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.memberdelay.$touched || forms.advanced.$submitted) && forms.advanced.memberdelay.$invalid}">\n <label class="control-label">{{\'APPLICATION_MEMBER_DELAY\' | translate}}</label>\n <input type="number" min="0" name="memberdelay" placeholder="{{\'APPLICATION_MEMBER_DELAY\' | translate}}" class="form-control" data-ng-model="queue.memberdelay" required/>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_MEMBER_DELAY\' | translate }}\n </span>\n <span data-ng-show="(forms.advanced.memberdelay.$touched || forms.advanced.$submitted) && forms.advanced.memberdelay.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END MEMBER_DELAY -->\n\n <!-- START ACW -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.acw.$touched || forms.advanced.$submitted) && forms.advanced.acw.$invalid}">\n <label class="control-label">{{\'APPLICATION_ACW\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="queue.acw"\n type="checkbox"\n switch-active="{{ recordSwitch.isActive }}"\n switch-on-text="{{ recordSwitch.onText }}"\n switch-off-text="{{ recordSwitch.offText }}"\n switch-on-color="{{ recordSwitch.onColor }}"\n switch-off-color="{{ recordSwitch.offColor }}"\n switch-animate="{{ recordSwitch.animate }}"\n switch-size="{{ recordSwitch.size }}"\n switch-label="{{ recordSwitch.label }}"\n switch-icon="{{ recordSwitch.icon }}"\n switch-radio-off="{{ recordSwitch.radioOff }}"\n switch-label-width="{{ recordSwitch.labelWidth }}"\n switch-handle-width="{{ recordSwitch.handleWidth }}">\n <span class="help-block">\n {{ \'DESCRIPTION_ACW\' | translate }}\n </span>\n <span data-ng-show="(forms.advanced.acw.$touched || forms.advanced.$submitted) && forms.advanced.acw.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_ACW\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END ACW -->\n\n <!-- START SETINTERFACEVAR -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.setinterfacevar.$touched || forms.advanced.$submitted) && forms.advanced.setinterfacevar.$invalid}">\n <label class="control-label">{{\'APPLICATION_SETINTERFACEVAR\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="queue.setinterfacevar"\n type="checkbox"\n switch-active="{{ recordSwitch.isActive }}"\n switch-on-text="{{ recordSwitch.onText }}"\n switch-off-text="{{ recordSwitch.offText }}"\n switch-on-color="{{ recordSwitch.onColor }}"\n switch-off-color="{{ recordSwitch.offColor }}"\n switch-animate="{{ recordSwitch.animate }}"\n switch-size="{{ recordSwitch.size }}"\n switch-label="{{ recordSwitch.label }}"\n switch-icon="{{ recordSwitch.icon }}"\n switch-radio-off="{{ recordSwitch.radioOff }}"\n switch-label-width="{{ recordSwitch.labelWidth }}"\n switch-handle-width="{{ recordSwitch.handleWidth }}">\n <span class="help-block">\n {{ \'DESCRIPTION_SETINTERFACEVAR\' | translate }} <a href="https://wiki.xcallymotion.com/display/XMD/Queues+-+Voice+Channel" target="_blank">wiki</a>)\n </span>\n <span data-ng-show="(forms.advanced.setinterfacevar.$touched || forms.advanced.$submitted) && forms.advanced.setinterfacevar.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_SETINTERFACEVAR\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END SETINTERFACEVAR -->\n\n <!-- START SETQUEUEVAR -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.setqueuevar.$touched || forms.advanced.$submitted) && forms.advanced.setqueuevar.$invalid}">\n <label class="control-label">{{\'APPLICATION_SETQUEUEVAR\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="queue.setqueuevar"\n type="checkbox"\n switch-active="{{ recordSwitch.isActive }}"\n switch-on-text="{{ recordSwitch.onText }}"\n switch-off-text="{{ recordSwitch.offText }}"\n switch-on-color="{{ recordSwitch.onColor }}"\n switch-off-color="{{ recordSwitch.offColor }}"\n switch-animate="{{ recordSwitch.animate }}"\n switch-size="{{ recordSwitch.size }}"\n switch-label="{{ recordSwitch.label }}"\n switch-icon="{{ recordSwitch.icon }}"\n switch-radio-off="{{ recordSwitch.radioOff }}"\n switch-label-width="{{ recordSwitch.labelWidth }}"\n switch-handle-width="{{ recordSwitch.handleWidth }}">\n <span class="help-block">\n {{ \'DESCRIPTION_SETQUEUEVAR\' | translate }} <a href="https://wiki.xcallymotion.com/display/XMD/Queues+-+Voice+Channel" target="_blank">wiki</a>)\n </span>\n <span data-ng-show="(forms.advanced.setqueuevar.$touched || forms.advanced.$submitted) && forms.advanced.setqueuevar.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_SETQUEUEVAR\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END SETQUEUEVAR -->\n\n </div>\n <div class="col-md-6">\n\n <!-- START TIMEOUTRESTART -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.timeoutrestart.$touched || forms.advanced.$submitted) && forms.advanced.timeoutrestart.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEOUTRESTART\' | translate}}</label>\n <ui-select data-ng-model="queue.timeoutrestart" name="timeoutrestart" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n <ui-select-choices repeat="item in [\'yes\',\'no\'] | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_TIMEOUTRESTART\' | translate }}\n </span>\n <span data-ng-show="(forms.advanced.timeoutrestart.$touched || forms.advanced.$submitted) && forms.advanced.timeoutrestart.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUTRESTART -->\n\n <!-- START MONITOR_FORMAT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.monitor_format.$touched || forms.advanced.$submitted) && forms.advanced.monitor_format.$invalid}">\n <label class="control-label">{{\'APPLICATION_MONITOR_FORMAT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="queue.monitor_format" name="monitor_format" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="monFormat.value as monFormat in monitorFormats | filter: $select.search">\n <div ng-bind-html="monFormat.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_MONITOR_FORMAT\' | translate }}\n </span>\n <span data-ng-show="(forms.advanced.monitor_format.$touched || forms.advanced.$submitted) && forms.advanced.monitor_format.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END MONITOR_FORMAT -->\n\n <!-- START CONTEXT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.context.$touched || forms.advanced.$submitted) && forms.advanced.context.$invalid}">\n <label class="control-label">{{\'APPLICATION_CONTEXT\' | translate}}</label>\n <ui-select data-ng-model="queue.context" name="context" theme="bootstrap">\n <ui-select-match allow-clear placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="context.name as context in voiceContexts | filter: $select.search">\n <div ng-bind-html="context.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_QUEUE_VOICE_CONTEXT\' | translate }}\n </span>\n <span data-ng-show="(forms.advanced.context.$touched || forms.advanced.$submitted) && forms.advanced.context.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CONTEXT -->\n\n <!-- START ACW_TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.acwTimeout.$touched || forms.advanced.$submitted) && forms.advanced.acwTimeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_ACW_TIMEOUT\' | translate}}</label>\n <input type="number" min="0" name="acwTimeout" placeholder="{{\'APPLICATION_ACW_TIMEOUT\' | translate}}" class="form-control" data-ng-model="queue.acwTimeout" required/>\n <span class="help-block">\n {{ \'DESCRIPTION_ACW_TIMEOUT\' | translate }}\n </span>\n <span data-ng-show="(forms.advanced.acwTimeout.$touched || forms.advanced.$submitted) && forms.advanced.acwTimeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END ACW_TIMEOUT -->\n\n <!-- START SETQUEUEENTRYVAR -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.setqueueentryvar.$touched || forms.advanced.$submitted) && forms.advanced.setqueueentryvar.$invalid}">\n <label class="control-label">{{\'APPLICATION_SETQUEUEENTRYVAR\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="queue.setqueueentryvar"\n type="checkbox"\n switch-active="{{ recordSwitch.isActive }}"\n switch-on-text="{{ recordSwitch.onText }}"\n switch-off-text="{{ recordSwitch.offText }}"\n switch-on-color="{{ recordSwitch.onColor }}"\n switch-off-color="{{ recordSwitch.offColor }}"\n switch-animate="{{ recordSwitch.animate }}"\n switch-size="{{ recordSwitch.size }}"\n switch-label="{{ recordSwitch.label }}"\n switch-icon="{{ recordSwitch.icon }}"\n switch-radio-off="{{ recordSwitch.radioOff }}"\n switch-label-width="{{ recordSwitch.labelWidth }}"\n switch-handle-width="{{ recordSwitch.handleWidth }}">\n <span class="help-block">\n {{ \'DESCRIPTION_SETQUEUEENTRYVAR\' | translate }} <a href="https://wiki.xcallymotion.com/display/XMD/Queues+-+Voice+Channel" target="_blank">wiki</a>)\n </span>\n <span data-ng-show="(forms.advanced.setqueueentryvar.$touched || forms.advanced.$submitted) && forms.advanced.setqueueentryvar.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_SETQUEUEENTRYVAR\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END SETQUEUEENTRYVAR -->\n\n </div>\n </div>\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END ADVANCED TAB -->\n\n </div>\n </div>\n </div>\n </div>\n</div>\n'), +a.put("app/channels/voice/realtime/view/abandoned/abandoned.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initAbandoned()">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns class="ui-grid" ui-grid-pagination ui-grid-auto-resize>\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/voice/realtime/view/agent/agent.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initAgents()">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns class="ui-grid" ui-grid-tree-view ui-grid-expandable-row ui-grid-pagination ui-grid-auto-resize>\n <span us-spinner spinner-key="grid-spinner" spinner-start-active="true"></span>\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/voice/realtime/view/agent/agent.modal.info.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_SIP_CLIENT_INFO\' | translate }}</h3>\n</div>\n<div class="modal-body">\n<div data-ng-if="agent.ipaddr" class="well">\n <div>{{agent.ipaddr}}:{{agent.port}}</div>\n <div>{{agent.fullcontact}}</div>\n <div>{{agent.useragent}}</div>\n <div>{{agent.lastms}}</div>\n</div>\n<div data-ng-if="!agent.ipaddr" class="alert alert-danger" role="alert">\n {{\'MESSAGE_NO_AVAILABLE_INFO\' | translate}}\n</div>\n<!-- hidden random uiselect, needed to recompile the modal every time and show the content -->\n<ui-select multiple class="hide" ng-model="item.queues" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_QUEUE\' | translate}}">{{$item.name}}</ui-select-match>\n <ui-select-choices repeat="queue.name as queue in queues | filter: $select.search">\n <div ng-bind-html="queue.name | highlight: $select.search"></div>\n </ui-select-choices>\n</ui-select>\n<!-- -->\n</div>\n<div class="modal-footer">\n <button class="btn default" type="button" ng-click="close()">{{ \'APPLICATION_CLOSE\' | translate }}</button>\n</div>\n'),a.put("app/channels/voice/realtime/view/agent/queue.modal.add.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_JOIN_QUEUE\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <div class="form-group row">\n <label class="col-md-2 control-label" style="margin-top: 7px;">{{\'APPLICATION_QUEUE\' | translate}}:</label>\n <div class="col-md-10">\n <ui-select multiple ng-model="item.queues" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_QUEUE\' | translate}}">{{$item.name}}</ui-select-match>\n <ui-select-choices repeat="queue.name as queue in queues | filter: $select.search">\n <div ng-bind-html="queue.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n</div>\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/channels/voice/realtime/view/outbound/outbound.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initDials()">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns class="ui-grid" ui-grid-auto-resize ui-grid-pagination>\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/voice/realtime/view/parameter/parameter.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initParameters()">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns class="ui-grid" ui-grid-tree-view ui-grid-expandable-row ui-grid-pagination ui-grid-auto-resize>\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/voice/realtime/view/queue/queue.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initQueues()">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns class="ui-grid" ui-grid-tree-view ui-grid-expandable-row ui-grid-pagination ui-grid-auto-resize>\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/voice/realtime/view/queuecalls/queuecalls.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initQueues()">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns class="ui-grid" ui-grid-auto-resize ui-grid-pagination>\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/voice/realtime/view/telephone/telephone.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initTelephones()">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns class="ui-grid" ui-grid-pagination ui-grid-auto-resize>\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/voice/realtime/view/telephone/telephone.modal.info.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_INTERFACE_INFO\' | translate }}</h3>\n</div>\n<div class="modal-body">\n<div data-ng-if="telephone.ipaddr" class="well">\n <div>{{telephone.ipaddr}}:{{telephone.port}}</div>\n <div>{{telephone.fullcontact}}</div>\n <div>{{telephone.useragent}}</div>\n <div>{{telephone.lastms}}</div>\n</div>\n<div data-ng-if="!telephone.ipaddr" class="alert alert-danger" role="alert">\n {{\'MESSAGE_NO_AVAILABLE_INFO\' | translate}}\n</div>\n</div>\n<div class="modal-footer">\n <button class="btn default" type="button" ng-click="close()">{{ \'APPLICATION_CLOSE\' | translate }}</button>\n</div>\n'),a.put("app/channels/voice/realtime/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-directions"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-earphones-alt"></i>\n <a href="#">{{ \'APPLICATION_VOICE\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-energy"></i>\n <a href="/channels/voice/realtime/view/agents">{{ \'APPLICATION_REALTIME\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <div>\n <nav class="navbar navbar-default" role="navigation">\n <div class="collapse navbar-collapse">\n <ul class="nav navbar-nav">\n <li data-ng-class="{\'active\': $state.is(\'main.channels.voice.realtime.view.agents\')}">\n <a href="/channels/voice/realtime/view/agents">\n {{\'APPLICATION_AGENTS\' | translate}}\n </a>\n </li>\n <li data-ng-class="{\'active\': $state.is(\'main.channels.voice.realtime.view.telephones\')}" data-ng-show="Auth.isAdmin()">\n <a href="/channels/voice/realtime/view/telephones">\n {{\'APPLICATION_TELEPHONES\' | translate}}\n </a>\n </li>\n <li data-ng-class="{\'active\': $state.is(\'main.channels.voice.realtime.view.queues\')}">\n <a href="/channels/voice/realtime/view/queues">\n {{\'APPLICATION_QUEUES\' | translate}}\n </a>\n </li>\n <li data-ng-class="{\'active\': $state.is(\'main.channels.voice.realtime.view.queuecalls\')}">\n <a href="/channels/voice/realtime/view/queuecalls">\n {{\'APPLICATION_QUEUE_CALLS\' | translate}}\n </a>\n </li>\n <li data-ng-class="{\'active\': $state.is(\'main.channels.voice.realtime.view.parameters\')}">\n <a href="/channels/voice/realtime/view/parameters">\n {{\'APPLICATION_QUEUE_PARAMETERS\' | translate}}\n </a>\n </li>\n <li data-ng-class="{\'active\': $state.is(\'main.channels.voice.realtime.view.abandoned\')}">\n <a href="/channels/voice/realtime/view/abandoned">\n {{\'APPLICATION_QUEUE_ABANDONED\' | translate}}\n </a>\n </li>\n <li data-ng-class="{\'active\': $state.is(\'main.channels.voice.realtime.view.outbound\')}">\n <a href="/channels/voice/realtime/view/outbound">\n {{\'APPLICATION_OUTBOUND_CALLS\' | translate}}\n </a>\n </li>\n </ul>\n </div>\n </nav>\n </div>\n <div ui-view></div>\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/voice/recording/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-earphones-alt"></i>\n <a href="#">{{ \'APPLICATION_VOICE\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-play"></i>\n <a href="#">{{ \'APPLICATION_RECORDINGS\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="fa fa-play font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_RECORDINGS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/voice/route/inbound/list/create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_ROUTE\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="forms.extension" novalidate>\n\n <!-- START EXTEN -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.extension.exten.$touched || forms.extension.$submitted) && forms.extension.exten.$invalid || existRoute}">\n <label class="control-label">{{\'APPLICATION_PHONE_NUMBER\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="exten" placeholder="{{\'APPLICATION_PHONE_NUMBER\' | translate}}" class="form-control" data-ng-model="item.exten" data-ng-pattern="settings.patternName" required/>\n <span data-ng-show="(forms.extension.exten.$touched || forms.extension.$submitted) && forms.extension.exten.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END EXTEN -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="ok()" ng-disabled="forms.extension.$invalid || existRoute">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n<!-- <pre>\n {{item | json}}\n</pre> -->\n'),a.put("app/channels/voice/route/inbound/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-earphones-alt"></i>\n <a href="#">{{ \'APPLICATION_VOICE\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-call-in"></i>\n <a href="/channels/voice/routes/inbound/list">{{ \'APPLICATION_INBOUND\' | translate }} {{ \'APPLICATION_ROUTES\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-users font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_INBOUND\' | translate }} {{ \'APPLICATION_ROUTES\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <a class="btn green-jungle " href="#" data-ng-click="create()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_ROUTE\' | translate }}\n </a>\n </div>\n <!-- <a class="btn btn-icon-only btn-default fullscreen" href="#"></a> -->\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter class="ui-grid" ui-grid-draggable-rows>\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/voice/route/inbound/view/view.applications.html",'<div ui-view class="profile-content">\n<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_ACTIONS\' | translate}}</span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="selectedRows.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <a class="btn green-jungle " href="/channels/voice/routes/inbound/view/{{route.id}}/application" data-toggle="dropdown">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_APPLICATION\' | translate }}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div data-ng-if="showGrid" ui-grid="gridOptions" ui-grid-resize-columns class="grid" ui-grid-selection ui-grid-draggable-rows ui-grid-auto-resize>\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n </div>\n</div>\n</div>\n'),a.put("app/channels/voice/route/inbound/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getRoute()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-earphones-alt"></i>\n <a href="#">{{ \'APPLICATION_VOICE\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-reload"></i>\n <a href="/channels/voice/routes/inbound/list">{{ \'APPLICATION_INBOUND\' | translate }} {{ \'APPLICATION_ROUTES\' | translate }}</a>\n <i data-ng-show="route" class="fa fa-angle-right"></i>\n </li>\n <li data-ng-show="route">\n <a href="#">{{route.exten}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/inboundroute.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{route.exten}}\n </div>\n <!-- <div class="profile-usertitle-job">\n {{user.role}}\n </div> -->\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.channels.voice.routes.inbound.view.settings\')}">\n <a data-ng-click="deselectAndRedirect(\'/channels/voice/routes/inbound/view/\'+route.id+\'/settings\')">\n <i class="icon-settings"></i>\n {{ \'APPLICATION_SETTINGS\' | translate}} </a>\n </li>\n'+" <li data-ng-class=\"{active: $state.is('main.channels.voice.routes.inbound.view.applications') || $state.is('main.channels.voice.routes.inbound.view.application') || $state.is('main.channels.voice.routes.inbound.view.applications.settings')}\">\n <a data-ng-click=\"deselectAndRedirect('/channels/voice/routes/inbound/view/'+route.id+'/applications')\">\n <i class=\"icon-list\"></i>\n {{ 'APPLICATION_ACTIONS' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class=\"profile-content\">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n"),a.put("app/channels/voice/route/inbound/view/view.settings.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_INBOUND\' | translate}} {{ \'APPLICATION_ROUTE\' | translate}} {{ \'APPLICATION_SETTINGS\' | translate}} </span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n </li>\n </ul>\n </div>\n\n <div class="portlet-body" data-ng-init="getContexts()">\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.general" data-ng-submit="forms.general.$valid && updateRoute()" novalidate>\n\n <!-- START EXTEN -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.exten.$touched || forms.general.$submitted) && forms.general.exten.$invalid}">\n <label class="control-label">{{\'APPLICATION_PHONE_NUMBER\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="exten" placeholder="{{\'APPLICATION_PHONE_NUMBER\' | translate}}" class="form-control" data-ng-model="route.exten" required/>\n <span data-ng-show="(forms.general.exten.$touched || forms.general.$submitted) && forms.general.exten.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END EXTEN -->\n\n <!-- START CONTEXT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.context.$touched || forms.general.$submitted) && forms.general.context.$invalid}">\n <label class="control-label">{{\'APPLICATION_CONTEXT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="route.context" name="context" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="context.name as context in voiceContexts | filter: $select.search">\n <div ng-bind-html="context.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_VOICE_CONTEXT\' | translate }}\n </span>\n <span data-ng-show="(forms.general.context.$touched || forms.general.$submitted) && forms.general.context.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CONTEXT -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="route.description"/></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END GENERAL TAB -->\n\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/voice/route/internal/list/create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_ROUTE\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="forms.extension" novalidate>\n\n <!-- START EXTEN -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.extension.exten.$touched || forms.extension.$submitted) && forms.extension.exten.$invalid || existRoute}">\n <label class="control-label">{{\'APPLICATION_PHONE_NUMBER\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="exten" placeholder="{{\'APPLICATION_PHONE_NUMBER\' | translate}}" class="form-control" data-ng-model="item.exten" data-ng-pattern="settings.patternName" required/>\n <span data-ng-show="(forms.extension.exten.$touched || forms.extension.$submitted) && forms.extension.exten.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END EXTEN -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="ok()" ng-disabled="forms.extension.$invalid || existRoute">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n<!-- <pre>\n {{item | json}}\n</pre> -->\n'),a.put("app/channels/voice/route/internal/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-earphones-alt"></i>\n <a href="#">{{ \'APPLICATION_VOICE\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-reload"></i>\n <a href="/voice/routes/internal/list">{{ \'APPLICATION_INTERNAL\' | translate }} {{ \'APPLICATION_ROUTES\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-users font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_INTERNAL\' | translate }} {{ \'APPLICATION_ROUTES\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <a class="btn green-jungle " href="#" data-ng-click="create()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_ROUTE\' | translate }}\n </a>\n </div>\n <!-- <a class="btn btn-icon-only btn-default fullscreen" href="#"></a> -->\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter class="ui-grid" ui-grid-draggable-rows>\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/voice/route/internal/view/view.applications.html",'<div ui-view class="profile-content">\n<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_ACTIONS\' | translate}}</span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="selectedRows.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <a class="btn green-jungle " href="/channels/voice/routes/internal/view/{{route.id}}/application" data-toggle="dropdown">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_APPLICATION\' | translate }}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div data-ng-if="showGrid" ui-grid="gridOptions" ui-grid-resize-columns class="grid" ui-grid-selection ui-grid-draggable-rows ui-grid-auto-resize>\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n </div>\n</div>\n</div>\n'),a.put("app/channels/voice/route/internal/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getRoute()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-earphones-alt"></i>\n <a href="#">{{ \'APPLICATION_VOICE\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-reload"></i>\n <a href="/channels/voice/routes/internal/list">{{ \'APPLICATION_INTERNAL\' | translate }} {{ \'APPLICATION_ROUTES\' | translate }}</a>\n <i data-ng-show="route" class="fa fa-angle-right"></i>\n </li>\n <li data-ng-show="route">\n <a href="#">{{route.exten}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/internalroute.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{route.exten}}\n </div>\n <!-- <div class="profile-usertitle-job">\n {{user.role}}\n </div> -->\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.channels.voice.routes.internal.view.settings\')}">\n <a data-ng-click="deselectAndRedirect(\'/channels/voice/routes/internal/view/\'+route.id+\'/settings\')">\n <i class="icon-settings"></i>\n {{ \'APPLICATION_SETTINGS\' | translate}} </a>\n </li>\n'+" <li data-ng-class=\"{active: $state.is('main.channels.voice.routes.internal.view.applications') || $state.is('main.channels.voice.routes.internal.view.application') || $state.is('main.channels.voice.routes.internal.view.applications.settings')}\">\n <a data-ng-click=\"deselectAndRedirect('/channels/voice/routes/internal/view/'+route.id+'/applications')\">\n <i class=\"icon-list\"></i>\n {{ 'APPLICATION_ACTIONS' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class=\"profile-content\">\n </div>\n <!-- <pre>\n {{route | json}}\n </pre> -->\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n"), +a.put("app/channels/voice/route/internal/view/view.settings.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_INTERNAL\' | translate}} {{ \'APPLICATION_ROUTE\' | translate}} {{ \'APPLICATION_SETTINGS\' | translate}} </span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n </li>\n </ul>\n </div>\n\n <div class="portlet-body" data-ng-init="getContexts()">\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.general" data-ng-submit="forms.general.$valid && updateRoute()" novalidate>\n\n <!-- START EXTEN -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.exten.$touched || forms.general.$submitted) && forms.general.exten.$invalid}">\n <label class="control-label">{{\'APPLICATION_PHONE_NUMBER\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="exten" placeholder="{{\'APPLICATION_PHONE_NUMBER\' | translate}}" class="form-control" data-ng-model="route.exten" required/>\n <span data-ng-show="(forms.general.exten.$touched || forms.general.$submitted) && forms.general.exten.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END EXTEN -->\n\n <!-- START CONTEXT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.context.$touched || forms.general.$submitted) && forms.general.context.$invalid}">\n <label class="control-label">{{\'APPLICATION_CONTEXT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="route.context" name="context" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="context.name as context in voiceContexts | filter: $select.search">\n <div ng-bind-html="context.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_VOICE_CONTEXT\' | translate }}\n </span>\n <span data-ng-show="(forms.general.context.$touched || forms.general.$submitted) && forms.general.context.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CONTEXT -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="route.description"/></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END GENERAL TAB -->\n\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/voice/route/outbound/list/create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_ROUTE\' | translate }}</h3>\n</div>\n<div class="modal-body" data-ng-init="getTags()">\n <form name="forms.extension" novalidate>\n\n <!-- START EXTEN -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.extension.exten.$touched || forms.extension.$submitted) && forms.extension.exten.$invalid || existRoute}">\n <label class="control-label">{{\'APPLICATION_DESTINATION_PATTERN\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="exten" placeholder="{{\'APPLICATION_DESTINATION_PATTERN\' | translate}}" class="form-control" data-ng-model="item.exten" data-ng-pattern="settings.patternName" required/>\n <span data-ng-show="(forms.extension.exten.$touched || forms.extension.$submitted) && forms.extension.exten.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END EXTEN -->\n\n <!-- START TAG -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.extension.tag.$touched || forms.extension.$submitted) && forms.extension.tag.$invalid}">\n <label class="control-label">{{ \'APPLICATION_TAG\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="item.tag" name="tag" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_TAG\' | translate }}" data-ng-init="item.tag = \'--\'">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="tag.name as tag in tags | filter: $select.search">\n <div ng-bind-html="tag.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.extension.tag.$touched || forms.extension.$submitted) && forms.extension.tag.$invalid && forms.extension.tag.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TAG -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="ok()" ng-disabled="forms.extension.$invalid || existRoute">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n<!-- <pre>\n {{item | json}}\n</pre> -->\n'),a.put("app/channels/voice/route/outbound/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-earphones-alt"></i>\n <a href="#">{{ \'APPLICATION_VOICE\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-call-out"></i>\n <a href="/channels/voice/routes/outbound/list">{{ \'APPLICATION_OUTBOUND\' | translate }} {{ \'APPLICATION_ROUTES\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-users font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_OUTBOUND\' | translate }} {{ \'APPLICATION_ROUTES\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <a class="btn green-jungle " href="#" data-ng-click="create()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_ROUTE\' | translate }}\n </a>\n </div>\n <!-- <a class="btn btn-icon-only btn-default fullscreen" href="#"></a> -->\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter class="ui-grid" ui-grid-draggable-rows>\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/voice/route/outbound/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getRoute()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-earphones-alt"></i>\n <a href="#">{{ \'APPLICATION_VOICE\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-call-out"></i>\n <a href="/channels/voice/routes/outbound/list">{{ \'APPLICATION_OUTBOUND\' | translate }} {{ \'APPLICATION_ROUTES\' | translate }}</a>\n <i data-ng-show="route" class="fa fa-angle-right"></i>\n </li>\n <li data-ng-show="route">\n <a href="#">{{route.exten}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/outboundroute.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{route.exten}}\n </div>\n <!-- <div class="profile-usertitle-job">\n {{user.role}}\n </div> -->\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.channels.voice.routes.outbound.view.settings\')}">\n <a data-ng-click="deselectAndRedirect(\'/channels/voice/routes/outbound/view/\'+route.id+\'/settings\')">\n <i class="icon-settings"></i>\n {{ \'APPLICATION_SETTINGS\' | translate}} </a>\n </li>\n'+" <li data-ng-class=\"{active: $state.is('main.channels.voice.routes.outbound.view.routes') || $state.is('main.channels.voice.routes.outbound.view.route') || $state.is('main.channels.voice.routes.outbound.view.routes.settings')}\">\n <a data-ng-click=\"deselectAndRedirect('/channels/voice/routes/outbound/view/'+route.id+'/routes')\">\n <i class=\"icon-list\"></i>\n {{ 'APPLICATION_ACTIONS' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class=\"profile-content\">\n </div>\n <!-- <pre>\n {{route | json}}\n </pre> -->\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n"),a.put("app/channels/voice/route/outbound/view/view.route.html",'<div class="row" data-ng-init="initApplication(true);getIntervals();">\n <div class="col-md-12">\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-notebook font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_NEW_ROUTE\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <div class="profile-usertitle-name">\n {{(main.app.name | translate) || \'Application\'}}\n </div>\n <wizard on-finish="addApplication()">\n <wz-step title="{{\'APPLICATION_SETTINGS\' | translate}}" canexit="formValidation(forms.info.$valid)">\n <form name="forms.info" novalidate>\n <button class="btn green-haze" type="submit" ng-click="goNext()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n <!-- START APP -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.app.$touched || forms.info.$submitted) && forms.info.app.$invalid}">\n <label class="control-label">{{ \'APPLICATION_APPLICATION\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="main.app" name="app" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_APPLICATION\' | translate }}">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="app in applications | filter: $select.search">\n <div ng-bind-html="app.name | translate | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.info.app.$touched || forms.info.$submitted) && forms.info.app.$invalid && forms.info.app.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END APP -->\n <div id="Dial" class="app-settings" ng-slide-down="main.app.value == \'Dial\' && main.app.type == \'outboundDial\'" lazy-render duration="1">\n <!-- START TRUNK -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.trunk.$touched || forms.info.$submitted) && forms.info.trunk.$invalid}">\n <label class="control-label">{{\'APPLICATION_TRUNK\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.appdata[0]" data-ng-init="application.appdata[0] = null" name="trunk" theme="bootstrap" required data-ng-disabled="!items.length">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="trunk.name as trunk in items | filter: $select.search">\n <div ng-bind-html="trunk.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="items.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_TRUNKS_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/tools/trunks/list">{{\'APPLICATION_TRUNKS\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.info.trunk.$touched || forms.info.$submitted) && forms.info.trunk.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TRUNK -->\n\n <!-- START CALLERID -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.callerID.$touched || forms.info.$submitted) && forms.info.callerID.$invalid}">\n <label class="control-label">{{ \'APPLICATION_CALLERID\' | translate }}</label>\n <input type="text" name="callerID" pattern=\'^"[a-zA-Z0-9_.-]*" <[a-zA-Z0-9_.-]*>\' placeholder=\'"name" <number>\' class="form-control" data-ng-model="application.appdata[1]" data-ng-init="application.appdata[1] = null">\n <span class="help-block">\n {{ \'DESCRIPTION_OUTBOUND_CALLERID\' | translate }}\n </span>\n <span data-ng-show="(forms.info.callerID.$touched || forms.info.$submitted) && forms.info.callerID.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CALLERID -->\n\n <!-- START PREFIX -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.prefix.$touched || forms.info.$submitted) && forms.info.prefix.$invalid}">\n <label class="control-label">{{ \'APPLICATION_PREFIX\' | translate }}</label>\n <input type="text" name="prefix" placeholder="{{ \'APPLICATION_PREFIX\' | translate }}" class="form-control" data-ng-model="application.appdata[2]" data-ng-init="application.appdata[2] = null">\n <span class="help-block">\n {{ \'DESCRIPTION_OUTBOUND_PREFIX\' | translate }}\n </span>\n <span data-ng-show="(forms.info.prefix.$touched || forms.info.$submitted) && forms.info.prefix.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PREFIX -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid}">\n <label class="control-label">{{ \'APPLICATION_TIMEOUT\' | translate }}</label>\n <input type="text" pattern="[0-9]+" name="timeout" placeholder="" class="form-control" data-ng-model="application.appdata[3]" data-ng-init="application.appdata[3] = null">\n <span data-ng-show="(forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid && forms.settings.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n\n <!-- START OPTIONS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid}">\n <label class="control-label">{{ \'APPLICATION_OPTIONS\' | translate }}</label>\n <input type="text" name="app_options" placeholder="" class="form-control" data-ng-model="application.appdata[4]" data-ng-init="application.appdata[4] = null">\n <span data-ng-show="(forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid && forms.settings.app_options.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END OPTIONS -->\n\n <!-- START URL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid}">\n <label class="control-label">{{ \'APPLICATION_URL\' | translate }}</label>\n <input type="text" name="url" placeholder="{{ \'APPLICATION_URL\' | translate }}" class="form-control" data-ng-model="application.appdata[5]" data-ng-init="application.appdata[5] = null">\n <span data-ng-show="(forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid && forms.settings.url.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END URL -->\n\n </div>\n <div id="Custom" class="app-settings" ng-slide-down="main.app.type == \'custom\'" lazy-render duration="1">\n\n <!-- START CUSTOMAPP -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.customApp.$touched || forms.info.$submitted) && forms.info.customApp.$invalid}">\n <label class="control-label">{{ \'APPLICATION_CUSTOM_APP\' | translate }}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="customApp" placeholder="{{ \'APPLICATION_CUSTOM_APP\' | translate }}" class="form-control" data-ng-model="application.app" data-ng-init="application.appdata[0] = null" required>\n <span data-ng-show="(forms.info.customApp.$touched || forms.info.$submitted) && forms.info.customApp.$invalid && forms.info.customApp.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CUSTOMAPP -->\n\n <!-- START APPDATA -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.appdata.$touched || forms.info.$submitted) && forms.info.appdata.$invalid}">\n <label class="control-label">{{ \'APPLICATION_ARGUMENTS\' | translate }}</label>\n <input type="text" name="appdata" placeholder="{{ \'APPLICATION_ARGUMENTS\' | translate }}" class="form-control" data-ng-model="application.appdata[0]" data-ng-init="application.appdata[1] = null">\n <span data-ng-show="(forms.info.appdata.$touched || forms.info.$submitted) && forms.info.appdata.$invalid && forms.info.appdata.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END APPDATA -->\n </div>\n <button class="btn green-haze" type="submit" ng-click="goNext()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n </form>\n </wz-step>\n <wz-step title="{{\'APPLICATION_INTERVAL\' | translate}}" canexit="formValidation(forms.interval.IntervalId.$valid || forms.interval.hasOwnProperty(\'t_from\') || forms.interval.intType.$modelValue === \'always\')">\n <form name="forms.interval" novalidate>\n <button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n <button class="btn green-haze" type="submit" ng-click="goNext()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n <!-- START INTERVAL_TYPE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.interval.intType.$touched || forms.interval.$submitted) && forms.interval.intType.$invalid}">\n <label class="control-label">{{\'APPLICATION_INTERVAL_TYPE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="interval.intType" theme="bootstrap" name="intType" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="intType.value as intType in $application.intTypes | filter: $select.search">\n {{$translate.instant(intType.name)}}\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.interval.intType.$touched || forms.interval.$submitted) && forms.interval.intType.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERVAL_TYPE -->\n <div id="customInterval" class="app-settings" ng-slide-down="interval.intType == \'custom\'" lazy-render duration="1">\n <!-- START TIME -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_TIME\' | translate }}</label>\n <div class="input-group input-large">\n <fieldset class="pull-left" ng-disabled="interval.alwaysTime"><uib-timepicker name="t_from" data-ng-model="interval.t_from" show-meridian="false" show-spinners="false"></uib-timepicker></fieldset>\n <div class="input-group-addon col-md-1 interval-to pull-left">to</div>\n <fieldset ng-disabled="interval.alwaysTime"><uib-timepicker name="t_to" data-ng-model="interval.t_to" show-meridian="false" show-spinners="false"></uib-timepicker></fieldset>\n <label class="control-label pointer-cursor"><input type="checkbox" data-ng-model="interval.alwaysTime">{{\'APPLICATION_ALWAYS\' | translate}}</label>\n </div>\n </div>\n <!-- END TIME -->\n\n <!-- START WEEKDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_WEEKDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="interval.wd_from" theme="bootstrap" name="wd_from">\n <ui-select-match placeholder="">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{weekDay.name | translate}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="interval.wd_to" theme="bootstrap" name="wd_to">\n <ui-select-match placeholder="">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{weekDay.name | translate}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END WEEKDAY -->\n\n <!-- START MONTHDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTHDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="interval.md_from" theme="bootstrap" name="md_from">\n <ui-select-match>{{$select.selected === \'always\' ? \'APPLICATION_ALWAYS\' : $select.selected | translate}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search">\n {{monthDay === \'always\' ? \'APPLICATION_ALWAYS\' : monthDay | translate}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="interval.md_to" theme="bootstrap" name="md_to">\n <ui-select-match>{{$select.selected === \'always\' ? \'APPLICATION_ALWAYS\' : $select.selected | translate}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search">\n {{monthDay === \'always\' ? \'APPLICATION_ALWAYS\' : monthDay | translate}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTHDAY -->\n\n <!-- START MONTH -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTH\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="interval.m_from" theme="bootstrap" name="m_from">\n <ui-select-match placeholder="">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{month.name | translate}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="interval.m_to" theme="bootstrap" name="m_to">\n <ui-select-match placeholder="">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{month.name | translate}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTH -->\n </div>\n\n <div id="customInterval" class="app-settings" ng-slide-down="interval.intType == \'list\'" lazy-render duration="1">\n\n <!-- START INTERVALS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.interval.IntervalId.$touched || forms.interval.$submitted) && forms.interval.IntervalId.$invalid}">\n <label class="control-label">{{\'APPLICATION_INTERVALS\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="interval.IntervalId" theme="bootstrap" name="IntervalId" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="interval.id as interval in Intervals | filter: $select.search">\n {{interval.name | translate}}\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.interval.IntervalId.$touched || forms.interval.$submitted) && forms.interval.IntervalId.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERVALS -->\n\n </div>\n\n <button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n <button class="btn green-haze" type="submit" ng-click="goNext()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n </form>\n </wz-step>\n\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n <input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n </wz-step>\n </wizard>\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/voice/route/outbound/view/view.routeSettings.html",'<div class="row" data-ng-init="initApplication();getApplication();getIntervals();">\n <div class="col-md-12">\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-notebook font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_APPLICATION_SETTINGS\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="updateRoute(\'routes\')">\n <div class="profile-usertitle-name">\n {{(main.app.name | translate) || \'Application\'}}\n </div>\n <wz-step title="{{\'APPLICATION_APPLICATION\' | translate}}" canexit="formValidation(forms.info.$valid)">\n <form name="forms.info" novalidate>\n <button class="btn green-haze" type="submit" ng-click="goNext()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n <div id="Dial" class="app-settings" ng-slide-down="main.app.value == \'Dial\' && main.app.type == \'outboundDial\'" lazy-render duration="1">\n\n <!-- START TRUNK -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.trunk.$touched || forms.info.$submitted) && forms.info.trunk.$invalid}">\n <label class="control-label">{{\'APPLICATION_TRUNK\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="route.Applications[selectedApp].appdata[0]" name="trunk" theme="bootstrap" required data-ng-disabled="!items.length">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="trunk.name as trunk in items | filter: $select.search">\n <div ng-bind-html="trunk.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="items.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_TRUNKS_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/tools/trunks/list">{{\'APPLICATION_TRUNKS\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.info.trunk.$touched || forms.info.$submitted) && forms.info.trunk.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TRUNK -->\n\n <!-- START CALLERID -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.callerID.$touched || forms.info.$submitted) && forms.info.callerID.$invalid}">\n <label class="control-label">{{ \'APPLICATION_CALLERID\' | translate }}</label>\n <input type="text" name="callerID" pattern=\'^"[a-zA-Z0-9_.-]*" <[a-zA-Z0-9_.-]*>\' placeholder=\'"name" <number>\' class="form-control" data-ng-model="route.Applications[selectedApp].appdata[1]">\n <span class="help-block">\n {{ \'DESCRIPTION_OUTBOUND_CALLERID\' | translate }} "name" <number>\n </span>\n <span data-ng-show="(forms.info.callerID.$touched || forms.info.$submitted) && forms.info.callerID.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CALLERID -->\n\n <!-- START PREFIX -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.prefix.$touched || forms.info.$submitted) && forms.info.prefix.$invalid}">\n <label class="control-label">{{ \'APPLICATION_PREFIX\' | translate }}</label>\n <input type="text" name="prefix" placeholder="{{ \'APPLICATION_PREFIX\' | translate }}" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[2]">\n <span class="help-block">\n {{ \'DESCRIPTION_OUTBOUND_PREFIX\' | translate }}\n </span>\n <span data-ng-show="(forms.info.prefix.$touched || forms.info.$submitted) && forms.info.prefix.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PREFIX -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid}">\n <label class="control-label">{{ \'APPLICATION_TIMEOUT\' | translate }}</label>\n <input type="text" pattern="[0-9]+" name="timeout" placeholder="" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[3]">\n <span data-ng-show="(forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid && forms.settings.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n\n <!-- START OPTIONS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid}">\n <label class="control-label">{{ \'APPLICATION_OPTIONS\' | translate }}</label>\n <input type="text" name="app_options" placeholder="" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[4]">\n <span data-ng-show="(forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid && forms.settings.app_options.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END OPTIONS -->\n\n <!-- START URL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid}">\n <label class="control-label">{{ \'APPLICATION_URL\' | translate }}</label>\n <input type="text" name="url" placeholder="{{ \'APPLICATION_URL\' | translate }}" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[5]">\n <span data-ng-show="(forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid && forms.settings.url.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END URL -->\n </div>\n <div id="Custom" class="app-settings" ng-slide-down="main.app.type == \'custom\'" lazy-render duration="1">\n\n <!-- START CUSTOMAPP -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.customApp.$touched || forms.info.$submitted) && forms.info.customApp.$invalid}">\n <label class="control-label">{{ \'APPLICATION_CUSTOM_APP\' | translate }}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="customApp" placeholder="{{ \'APPLICATION_CUSTOM_APP\' | translate }}" class="form-control" data-ng-model="route.Applications[selectedApp].app" required>\n <span data-ng-show="(forms.info.customApp.$touched || forms.info.$submitted) && forms.info.customApp.$invalid && forms.info.customApp.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CUSTOMAPP -->\n\n <!-- START APPDATA -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.appdata.$touched || forms.info.$submitted) && forms.info.appdata.$invalid}">\n <label class="control-label">{{ \'APPLICATION_ARGUMENTS\' | translate }}</label>\n <input type="text" name="appdata" placeholder="{{ \'APPLICATION_ARGUMENTS\' | translate }}" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[0]">\n <span data-ng-show="(forms.info.appdata.$touched || forms.info.$submitted) && forms.info.appdata.$invalid && forms.info.appdata.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END APPDATA -->\n </div>\n <button class="btn green-haze" type="submit" ng-click="goNext()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n </form>\n </wz-step>\n <wz-step title="{{\'APPLICATION_INTERVAL\' | translate}}" canexit="formValidation(forms.interval.IntervalId.$valid || forms.interval.hasOwnProperty(\'t_from\') || forms.interval.intType.$modelValue === \'always\')">\n <form name="forms.interval" novalidate>\n <button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n <button class="btn green-haze" type="submit" ng-click="goNext()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n <!-- START INTERVAL_TYPE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.interval.intType.$touched || forms.interval.$submitted) && forms.interval.intType.$invalid}">\n <label class="control-label">{{\'APPLICATION_INTERVAL_TYPE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="interval.intType" theme="bootstrap" name="intType" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="intType.value as intType in $application.intTypes | filter: $select.search">\n {{intType.name | translate}}\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.interval.intType.$touched || forms.interval.$submitted) && forms.interval.intType.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERVAL_TYPE -->\n <div id="customInterval" class="app-settings" ng-slide-down="interval.intType == \'custom\'" lazy-render duration="1">\n <!-- START TIME -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_TIME\' | translate }}</label>\n <div class="input-group input-large">\n <fieldset class="pull-left" ng-disabled="interval.alwaysTime"><uib-timepicker name="t_from" data-ng-model="interval.t_from" show-meridian="false" show-spinners="false"></uib-timepicker></fieldset>\n <div class="input-group-addon col-md-1 interval-to pull-left">to</div>\n <fieldset ng-disabled="interval.alwaysTime"><uib-timepicker name="t_to" data-ng-model="interval.t_to" show-meridian="false" show-spinners="false"></uib-timepicker></fieldset>\n </div>\n </div>\n <!-- END TIME -->\n\n <!-- <label class="control-label pointer-cursor"><input type="checkbox" data-ng-model="interval.alwaysTime">{{\'APPLICATION_ALWAYS\' | translate}}</label> -->\n <!-- START ALWAYS -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_ALWAYS\' | translate }}</label>\n <div class="input-group input-large">\n <label class="control-label pointer-cursor">\n <input\n bs-switch\n data-ng-model="interval.alwaysTime"\n type="checkbox"\n switch-active="{{ alwaysSwitch.isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ alwaysSwitch.onColor }}"\n switch-off-color="{{ alwaysSwitch.offColor }}"\n switch-animate="{{ alwaysSwitch.animate }}"\n switch-size="{{ alwaysSwitch.size }}"\n switch-label="{{ alwaysSwitch.label }}"\n switch-icon="{{ alwaysSwitch.icon }}"\n switch-radio-off="{{ alwaysSwitch.radioOff }}"\n switch-label-width="{{ alwaysSwitch.labelWidth }}"\n switch-handle-width="{{ alwaysSwitch.handleWidth }}">\n </label>\n </div>\n </div>\n <!-- END ALWAYS -->\n\n <!-- START WEEKDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_WEEKDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="interval.wd_from" theme="bootstrap" name="wd_from">\n <ui-select-match placeholder="">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{weekDay.name | translate}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="interval.wd_to" theme="bootstrap" name="wd_to">\n <ui-select-match placeholder="">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{weekDay.name | translate}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END WEEKDAY -->\n\n <!-- START MONTHDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTHDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="interval.md_from" theme="bootstrap" name="md_from">\n <ui-select-match>{{$select.selected === \'always\' ? \'APPLICATION_ALWAYS\' : $select.selected | translate}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search">\n {{monthDay === \'always\' ? \'APPLICATION_ALWAYS\' : monthDay | translate}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="interval.md_to" theme="bootstrap" name="md_to">\n <ui-select-match>{{$select.selected === \'always\' ? \'APPLICATION_ALWAYS\' : $select.selected | translate}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search">\n {{monthDay === \'always\' ? \'APPLICATION_ALWAYS\' : monthDay | translate}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTHDAY -->\n\n <!-- START MONTH -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTH\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="interval.m_from" theme="bootstrap" name="m_from">\n <ui-select-match placeholder="">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{month.name | translate}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="interval.m_to" theme="bootstrap" name="m_to">\n <ui-select-match placeholder="">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{month.name | translate}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTH -->\n </div>\n\n <div id="customInterval" class="app-settings" ng-slide-down="interval.intType == \'list\'" lazy-render duration="1">\n\n <!-- START INTERVALS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.interval.IntervalId.$touched || forms.interval.$submitted) && forms.interval.IntervalId.$invalid}">\n <label class="control-label">{{\'APPLICATION_INTERVALS\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="interval.IntervalId" theme="bootstrap" name="IntervalId" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="interval.id as interval in Intervals | filter: $select.search">\n {{interval.name | translate}}\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="intervals.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_INTERVAL_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/tools/intervals/list">{{\'APPLICATION_INTERVALS\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.interval.IntervalId.$touched || forms.interval.$submitted) && forms.interval.IntervalId.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERVALS -->\n\n </div>\n <button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n <button class="btn green-haze" type="submit" ng-click="goNext()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n </form>\n </wz-step>\n\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n <input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n </wz-step>\n </wizard>\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'), +a.put("app/channels/voice/route/outbound/view/view.routes.html",'<div ui-view class="profile-content">\n<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_ACTIONS\' | translate}}</span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="selectedRows.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <a class="btn green-jungle " href="/channels/voice/routes/outbound/view/{{route.id}}/route" data-toggle="dropdown">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_ROUTE\' | translate }}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div data-ng-if="showGrid" ui-grid="gridOptions" ui-grid-resize-columns class="grid" ui-grid-selection ui-grid-draggable-rows ui-grid-auto-resize>\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n </div>\n</div>\n</div>\n'),a.put("app/channels/voice/route/outbound/view/view.settings.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_OUTBOUND\' | translate}} {{ \'APPLICATION_ROUTE\' | translate}} {{ \'APPLICATION_SETTINGS\' | translate}} </span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n </li>\n </ul>\n </div>\n\n <div class="portlet-body" data-ng-init="getContexts();getTags();">\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.general" data-ng-submit="forms.general.$valid && updateRoute()" novalidate>\n\n <!-- START EXTEN -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.exten.$touched || forms.general.$submitted) && forms.general.exten.$invalid}">\n <label class="control-label">{{\'APPLICATION_DESTINATION_PATTERN\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="exten" placeholder="{{\'APPLICATION_DESTINATION_PATTERN\' | translate}}" class="form-control" data-ng-model="route.exten" required/>\n <span data-ng-show="(forms.general.exten.$touched || forms.general.$submitted) && forms.general.exten.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END EXTEN -->\n\n <!-- START CUTDIGITS -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_CUTDIGITS\' | translate}}</label>\n <input type="text" pattern="[0-9]+" class="form-control" name="cutdigits" data-ng-model="route.cutdigits">\n <span class="help-block">\n </span>\n </div>\n <!-- END CUTDIGITS -->\n\n <!-- START TAG -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.tag.$touched || forms.general.$submitted) && forms.general.tag.$invalid}">\n <label class="control-label">{{\'APPLICATION_TAG\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="route.tag" name="tag" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="tag.name as tag in tags | filter: $select.search">\n <div ng-bind-html="tag.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.general.tag.$touched || forms.general.$submitted) && forms.general.tag.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TAG -->\n\n <!-- START CONTEXT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.context.$touched || forms.general.$submitted) && forms.general.context.$invalid}">\n <label class="control-label">{{\'APPLICATION_CONTEXT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="route.context" name="context" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="context.name as context in voiceContexts | filter: $select.search">\n <div ng-bind-html="context.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_VOICE_CONTEXT\' | translate }}\n </span>\n <span data-ng-show="(forms.general.context.$touched || forms.general.$submitted) && forms.general.context.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CONTEXT -->\n\n <!-- START RECORD -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.record.$touched || forms.general.$submitted) && forms.general.record.$invalid}">\n <label class="control-label">{{\'APPLICATION_RECORDING\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="route.record"\n type="checkbox"\n switch-active="{{ recordSwitch.isActive }}"\n switch-on-text="{{ recordSwitch.onText }}"\n switch-off-text="{{ recordSwitch.offText }}"\n switch-on-color="{{ recordSwitch.onColor }}"\n switch-off-color="{{ recordSwitch.offColor }}"\n switch-animate="{{ recordSwitch.animate }}"\n switch-size="{{ recordSwitch.size }}"\n switch-label="{{ recordSwitch.label }}"\n switch-icon="{{ recordSwitch.icon }}"\n switch-radio-off="{{ recordSwitch.radioOff }}"\n switch-label-width="{{ recordSwitch.labelWidth }}"\n switch-handle-width="{{ recordSwitch.handleWidth }}">\n <span data-ng-show="(forms.general.record.$touched || forms.general.$submitted) && forms.general.record.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END RECORD -->\n\n <!-- START RECORDINGFORMAT -->\n <div data-ng-if="route.record" class="form-group" data-ng-class="{\'has-error\': (forms.general.recordingFormat.$touched || forms.general.$submitted) && forms.general.recordingFormat.$invalid}">\n <label class="control-label">{{\'APPLICATION_FORMAT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="route.recordingFormat" name="recordingFormat" theme="bootstrap" data-ng-required="route.record">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="format in [\'wav\',\'gsm\'] | filter: $select.search">\n <div ng-bind-html="format | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.general.recordingFormat.$touched || forms.general.$submitted) && forms.general.recordingFormat.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END RECORDINGFORMAT -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="route.description"/></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END GENERAL TAB -->\n\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/voice/route/view.application.html",'\n<div class="row" data-ng-init="initApplication(true); getIntervals();">\n <div class="col-md-12">\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-notebook font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_NEW_APPLICATION\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="addApplication()">\n <div class="profile-usertitle-name">\n {{(main.app.name | translate) || \'Application\'}}\n </div>\n <wz-step title="{{\'APPLICATION_APPLICATION\' | translate}}" canexit="formValidation(forms.settings.$valid)">\n <form name="forms.settings" novalidate>\n\n <button class="btn green-haze" type="submit" ng-click="goNext()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n <!-- START APP -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.app.$touched || forms.settings.$submitted) && forms.settings.app.$invalid}">\n <label class="control-label">{{ \'APPLICATION_APPLICATION\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="main.app" name="app" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_APPLICATION\' | translate }}">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="app in $application.applications| filter: $select.search">\n <div ng-bind-html="app.name | translate | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.app.$touched || forms.settings.$submitted) && forms.settings.app.$invalid && forms.settings.app.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END APP -->\n\n <div id="Queue" class="app-settings" ng-slide-down="main.app.value == \'Queue\'" lazy-render duration="1">\n <!-- START QUEUE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.queue.$touched || forms.settings.$submitted) && forms.settings.queue.$invalid}">\n <label class="control-label">{{\'APPLICATION_QUEUE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.appdata[0]" data-ng-init="application.appdata[0] = null" name="queue" theme="bootstrap" required data-ng-disabled="!items.length">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="queue.name as queue in items | filter: $select.search">\n <div ng-bind-html="queue.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="items.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_QUEUES_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/channels/voice/queues/list">{{\'APPLICATION_QUEUES\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.settings.queue.$touched || forms.settings.$submitted) && forms.settings.queue.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END QUEUE -->\n\n <!-- START OPTIONS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid}">\n <label class="control-label">{{\'APPLICATION_OPTIONS\' | translate}}</label>\n <input type="text" pattern="[^,]*" name="app_options" placeholder="{{ \'APPLICATION_OPTIONS\' | translate }}" class="form-control" data-ng-model="application.appdata[1]" data-ng-init="application.appdata[1] = null">\n <span data-ng-show="(forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid && forms.settings.app_options.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n </span>\n </div>\n <!-- END OPTIONS -->\n <!-- START URL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid}">\n <label class="control-label">{{ \'APPLICATION_URL\' | translate }}</label>\n <input type="text" pattern="[^,]*" name="url" placeholder="{{ \'APPLICATION_URL\' | translate }}" class="form-control" data-ng-model="application.appdata[2]" data-ng-init="application.appdata[2] = null">\n <span data-ng-show="(forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid && forms.settings.url.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid && forms.settings.url.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n </span>\n </div>\n <!-- END URL -->\n\n <!-- START APPLICATION_ANNOUNCE_OVERRIDE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.audiofile.$touched || forms.settings.$submitted) && forms.settings.audiofile.$invalid}">\n <label class="control-label">{{\'APPLICATION_ANNOUNCE_OVERRIDE\' | translate}}</label>\n <ui-select data-ng-model="application.appdata[3]" data-ng-init="application.appdata[3] = null" name="audiofile" theme="bootstrap" data-ng-disabled="!items2.length">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.display_name}}</ui-select-match>\n <ui-select-choices repeat="settings.soundPath+\'/\'+audio.save_name as audio in items2 | filter: $select.search">\n <div ng-bind-html="audio.display_name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="items2.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_SOUNDS_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/tools/sounds/list">{{\'APPLICATION_SOUNDS\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.settings.audiofile.$touched || forms.settings.$submitted) && forms.settings.audiofile.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END APPLICATION_ANNOUNCE_OVERRIDE -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid}">\n <label class="control-label">{{ \'APPLICATION_TIMEOUT\' | translate }}</label>\n <input type="text" pattern="[0-9]+" name="timeout" placeholder="" class="form-control" data-ng-model="application.appdata[4]" data-ng-init="application.appdata[4] = null">\n <span data-ng-show="(forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid && forms.settings.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n\n <!-- START AGI -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.agi.$touched || forms.settings.$submitted) && forms.settings.agi.$invalid}">\n <label class="control-label">{{ \'APPLICATION_AGI\' | translate }}</label>\n <input type="text" pattern="[^,]*" name="agi" placeholder="{{ \'APPLICATION_AGI\' | translate }}" class="form-control" data-ng-model="application.appdata[5]" data-ng-init="application.appdata[6] = null">\n <span data-ng-show="(forms.settings.agi.$touched || forms.settings.$submitted) && forms.settings.agi.$invalid && forms.settings.agi.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.settings.agi.$touched || forms.settings.$submitted) && forms.settings.agi.$invalid && forms.settings.agi.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n </span>\n </div>\n <!-- END AGI -->\n\n <!-- START MACRO -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.macro.$touched || forms.settings.$submitted) && forms.settings.macro.$invalid}">\n <label class="control-label">{{ \'APPLICATION_MACRO\' | translate }}</label>\n <input type="text" pattern="[^,]*" name="macro" placeholder="{{ \'APPLICATION_MACRO\' | translate }}" class="form-control" data-ng-model="application.appdata[6]" data-ng-init="application.appdata[6] = null">\n <span data-ng-show="(forms.settings.macro.$touched || forms.settings.$submitted) && forms.settings.macro.$invalid && forms.settings.macro.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.settings.macro.$touched || forms.settings.$submitted) && forms.settings.macro.$invalid && forms.settings.macro.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n </span>\n </div>\n <!-- END MACRO -->\n\n <!-- START GOSUB -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.gosub.$touched || forms.settings.$submitted) && forms.settings.gosub.$invalid}">\n <label class="control-label">{{ \'APPLICATION_GOSUB\' | translate }}</label>\n <input type="text" pattern="[^,]*" name="gosub" placeholder="{{ \'APPLICATION_GOSUB\' | translate }}" class="form-control" data-ng-model="application.appdata[7]" data-ng-init="application.appdata[7] = null">\n <span data-ng-show="(forms.settings.gosub.$touched || forms.settings.$submitted) && forms.settings.gosub.$invalid && forms.settings.gosub.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.settings.gosub.$touched || forms.settings.$submitted) && forms.settings.gosub.$invalid && forms.settings.gosub.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n </span>\n </div>\n <!-- END GOSUB -->\n\n <!-- START RULE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.rule.$touched || forms.settings.$submitted) && forms.settings.rule.$invalid}">\n <label class="control-label">{{ \'APPLICATION_RULE\' | translate }}</label>\n <input type="text" pattern="[^,]*" name="rule" placeholder="{{ \'APPLICATION_RULE\' | translate }}" class="form-control" data-ng-model="application.appdata[8]" data-ng-init="application.appdata[8] = null">\n <span data-ng-show="(forms.settings.rule.$touched || forms.settings.$submitted) && forms.settings.rule.$invalid && forms.settings.rule.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.settings.rule.$touched || forms.settings.$submitted) && forms.settings.rule.$invalid && forms.settings.rule.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n </span>\n </div>\n <!-- END RULE -->\n\n <!-- START POSITION -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.position.$touched || forms.settings.$submitted) && forms.settings.position.$invalid}">\n <label class="control-label">{{ \'APPLICATION_POSITION\' | translate }}</label>\n <input type="number" min="0" name="position" placeholder="{{ \'APPLICATION_POSITION\' | translate }}" class="form-control" data-ng-model="application.appdata[9]" data-ng-init="application.appdata[9] = null">\n <span data-ng-show="(forms.settings.position.$touched || forms.settings.$submitted) && forms.settings.position.$invalid && forms.settings.position.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END POSITION -->\n\n <!-- START ANSWER -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_ANSWER\' | translate }}</label>\n <div class="input-group input-large">\n <label class="control-label pointer-cursor">\n <input\n bs-switch\n data-ng-init="application.answer=true"\n data-ng-model="application.answer"\n type="checkbox"\n switch-active="{{ alwaysSwitch.isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ alwaysSwitch.onColor }}"\n switch-off-color="{{ alwaysSwitch.offColor }}"\n switch-animate="{{ alwaysSwitch.animate }}"\n switch-size="{{ alwaysSwitch.size }}"\n switch-label="{{ alwaysSwitch.label }}"\n switch-icon="{{ alwaysSwitch.icon }}"\n switch-radio-off="{{ alwaysSwitch.radioOff }}"\n switch-label-width="{{ alwaysSwitch.labelWidth }}"\n switch-handle-width="{{ alwaysSwitch.handleWidth }}">\n </label>\n </div>\n </div>\n <!-- END ANSWER -->\n\n </div>\n <div id="Playback" class="app-settings" ng-slide-down="main.app.value == \'Playback\'" lazy-render duration="1">\n <!-- START AUDIOFILE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.audiofile.$touched || forms.settings.$submitted) && forms.settings.audiofile.$invalid}">\n <label class="control-label">{{\'APPLICATION_AUDIO_FILE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.appdata[0]" data-ng-init="application.appdata[0] = null" name="audiofile" theme="bootstrap" required data-ng-disabled="!items.length">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.display_name}}</ui-select-match>\n <ui-select-choices repeat="settings.soundPath+\'/\'+audio.save_name as audio in items | filter: $select.search">\n <div ng-bind-html="audio.display_name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="items.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_SOUNDS_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/tools/sounds/list">{{\'APPLICATION_SOUNDS\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.settings.audiofile.$touched || forms.settings.$submitted) && forms.settings.audiofile.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END AUDIOFILE -->\n\n <!-- START OPTIONS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid}">\n <label class="control-label">{{\'APPLICATION_OPTIONS\' | translate}}</label>\n <input type="text" name="app_options" placeholder="{{ \'APPLICATION_OPTIONS\' | translate }}" class="form-control" data-ng-model="application.appdata[1]" data-ng-init="application.appdata[1] = null">\n <span data-ng-show="(forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END OPTIONS -->\n\n <!-- START ANSWER -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_ANSWER\' | translate }}</label>\n <div class="input-group input-large">\n <label class="control-label pointer-cursor">\n <input\n bs-switch\n data-ng-init="application.answer=true"\n data-ng-model="application.answer"\n type="checkbox"\n switch-active="{{ alwaysSwitch.isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ alwaysSwitch.onColor }}"\n switch-off-color="{{ alwaysSwitch.offColor }}"\n switch-animate="{{ alwaysSwitch.animate }}"\n switch-size="{{ alwaysSwitch.size }}"\n switch-label="{{ alwaysSwitch.label }}"\n switch-icon="{{ alwaysSwitch.icon }}"\n switch-radio-off="{{ alwaysSwitch.radioOff }}"\n switch-label-width="{{ alwaysSwitch.labelWidth }}"\n switch-handle-width="{{ alwaysSwitch.handleWidth }}">\n </label>\n </div>\n </div>\n <!-- END ANSWER -->\n </div>\n <div id="Dial" class="app-settings" ng-slide-down="main.app.value == \'Dial\' && !main.app.type" lazy-render duration="1">\n <!-- START INTERFACE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.interface.$touched || forms.settings.$submitted) && forms.settings.interface.$invalid}">\n <label class="control-label">{{ \'APPLICATION_TYPE\' | translate }}/{{ \'APPLICATION_IDENTIFIER\' | translate }}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="interface" placeholder="SIP/0000" class="form-control" data-ng-model="application.appdata[0]" data-ng-init="application.appdata[0] = null" required>\n <span data-ng-show="(forms.settings.interface.$touched || forms.settings.$submitted) && forms.settings.interface.$invalid && forms.settings.interface.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERFACE -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid}">\n <label class="control-label">{{ \'APPLICATION_TIMEOUT\' | translate }}</label>\n <input type="text" pattern="[0-9]+" name="timeout" placeholder="" class="form-control" data-ng-model="application.appdata[1]" data-ng-init="application.appdata[1] = null">\n <span data-ng-show="(forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid && forms.settings.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n\n <!-- START OPTIONS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid}">\n <label class="control-label">{{ \'APPLICATION_OPTIONS\' | translate }}</label>\n <input type="text" name="app_options" placeholder="" class="form-control" data-ng-model="application.appdata[2]" data-ng-init="application.appdata[2] = null">\n <span data-ng-show="(forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid && forms.settings.app_options.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END OPTIONS -->\n\n <!-- START URL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid}">\n <label class="control-label">{{ \'APPLICATION_URL\' | translate }}</label>\n <input type="text" name="url" placeholder="{{ \'APPLICATION_URL\' | translate }}" class="form-control" data-ng-model="application.appdata[3]" data-ng-init="application.appdata[3] = null">\n <span data-ng-show="(forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid && forms.settings.url.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END URL -->\n </div>\n <div id="internalDial" class="app-settings" ng-slide-down="main.app.value == \'Dial\' && main.app.type == \'internalDial\'" lazy-render duration="1">\n <!-- START INTERNAL DIAL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.user.$touched || forms.settings.$submitted) && forms.settings.user.$invalid}">\n <label class="control-label">{{\'APPLICATION_USER\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.appdata[0]" data-ng-init="application.appdata[0] = null" name="user" theme="bootstrap" required data-ng-disabled="!items.length">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="user.name as user in items | filter: $select.search">\n <div ng-bind-html="user.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.user.$touched || forms.settings.$submitted) && forms.settings.user.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERNAL DIAL -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid}">\n <label class="control-label">{{ \'APPLICATION_TIMEOUT\' | translate }}</label>\n <input type="text" pattern="[0-9]+" name="timeout" placeholder="" class="form-control" data-ng-model="application.appdata[1]" data-ng-init="application.appdata[1] = null">\n <span data-ng-show="(forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid && forms.settings.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n\n <!-- START OPTIONS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid}">\n <label class="control-label">{{ \'APPLICATION_OPTIONS\' | translate }}</label>\n <input type="text" name="app_options" placeholder="" class="form-control" data-ng-model="application.appdata[2]" data-ng-init="application.appdata[2] = null">\n <span data-ng-show="(forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid && forms.settings.app_options.$error.required" class="help-block help-block-error">\n <strong>{{ \'APPLICATION_WARNING\' | translate }}!</strong> {{ \'MESSAGE_REQUIRED_FIELD\' | translate }}.\n </span>\n </div>\n <!-- END OPTIONS -->\n\n <!-- START URL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid}">\n <label class="control-label">{{ \'APPLICATION_URL\' | translate }}</label>\n <input type="text" name="url" placeholder="{{ \'APPLICATION_URL\' | translate }}" class="form-control" data-ng-model="application.appdata[3]" data-ng-init="application.appdata[3] = null">\n <span data-ng-show="(forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid && forms.settings.url.$error.required" class="help-block help-block-error">\n <strong>{{ \'APPLICATION_WARNING\' | translate }}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END URL -->\n\n </div>\n <div id="Dial" class="app-settings" ng-slide-down="main.app.value == \'Dial\' && main.app.type == \'externalDial\'" lazy-render duration="1">\n <!-- START TRUNK -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.trunk.$touched || forms.info.$submitted) && forms.info.trunk.$invalid}">\n <label class="control-label">{{ \'APPLICATION_TRUNK\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.appdata[0]" data-ng-init="application.appdata[0] = null" name="trunk" theme="bootstrap" required data-ng-disabled="!items.length">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="trunk.name as trunk in items | filter: $select.search">\n <div ng-bind-html="trunk.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="items.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_TRUNKS_AVAILABLE\' | translate }}\n </p>\n <p>\n {{ \'APPLICATION_GO_TO\' | translate }} <a href="/tools/trunks/list">{{ \'APPLICATION_TRUNKS\' | translate }}</a>\n </p>\n </div>\n <span data-ng-show="(forms.info.trunk.$touched || forms.info.$submitted) && forms.info.trunk.$error.required" class="help-block help-block-error">\n <strong>{{ \'APPLICATION_WARNING\' | translate }}!</strong> {{ \'MESSAGE_REQUIRED_FIELD\' | translate }}.\n </span>\n </div>\n <!-- END TRUNK -->\n\n <!-- START PHONE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.phone.$touched || forms.settings.$submitted) && forms.settings.phone.$invalid}">\n <label class="control-label">{{ \'APPLICATION_PHONE\' | translate }}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="phone" placeholder="{{\'APPLICATION_PHONE\' | translate}}" class="form-control" data-ng-model="application.appdata[1]" data-ng-init="application.appdata[1] = null" required>\n <span data-ng-show="(forms.settings.phone.$touched || forms.settings.$submitted) && forms.settings.phone.$invalid && forms.settings.phone.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PHONE -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid}">\n <label class="control-label">{{ \'APPLICATION_TIMEOUT\' | translate }}</label>\n <input type="text" pattern="[0-9]+" name="timeout" placeholder="" class="form-control" data-ng-model="application.appdata[2]" data-ng-init="application.appdata[2] = null">\n <span data-ng-show="(forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid && forms.settings.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n\n <!-- START OPTIONS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid}">\n <label class="control-label">{{ \'APPLICATION_OPTIONS\' | translate }}</label>\n <input type="text" name="app_options" placeholder="" class="form-control" data-ng-model="application.appdata[3]" data-ng-init="application.appdata[3] = null">\n <span data-ng-show="(forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid && forms.settings.app_options.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END OPTIONS -->\n\n <!-- START URL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid}">\n <label class="control-label">{{ \'APPLICATION_URL\' | translate }}</label>\n <input type="text" name="url" placeholder="{{ \'APPLICATION_URL\' | translate }}" class="form-control" data-ng-model="application.appdata[4]" data-ng-init="application.appdata[4] = null">\n <span data-ng-show="(forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid && forms.settings.url.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END URL -->\n </div>\n <div id="RingGroup" class="app-settings" ng-slide-down="main.app.value == \'Dial\' && main.app.type == \'RingGroup\'" lazy-render duration="1">\n <!-- START ITEMS -->\n <input type="hidden" name="items" placeholder="{{ \'APPLICATION_URL\' | translate }}" class="form-control" data-ng-model="application.appdata[0]" data-ng-init="initRingGroup()">\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.project.$touched || forms.settings.$submitted) && forms.settings.items.$invalid}">\n <label class="control-label">{{\'APPLICATION_ITEMS\' | translate}}<span class="required" aria-required="true">*</span></label>\n <div class="col-md-12" id="multi-select-user-by-role"></div>\n <span data-ng-show="(forms.settings.items.$touched || forms.settings.$submitted) && forms.settings.items.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END ITEMS -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid}">\n <label class="control-label">{{ \'APPLICATION_TIMEOUT\' | translate }}</label>\n <input type="text" pattern="[0-9]+" name="timeout" placeholder="" class="form-control" data-ng-model="application.appdata[1]" data-ng-init="application.appdata[1] = null">\n <span data-ng-show="(forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid && forms.settings.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n\n <!-- START OPTIONS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid}">\n <label class="control-label">{{ \'APPLICATION_OPTIONS\' | translate }}</label>\n <input type="text" name="app_options" placeholder="" class="form-control" data-ng-model="application.appdata[2]" data-ng-init="application.appdata[2] = null">\n <span data-ng-show="(forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid && forms.settings.app_options.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END OPTIONS -->\n\n <!-- START URL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid}">\n <label class="control-label">{{ \'APPLICATION_URL\' | translate }}</label>\n <input type="text" name="url" placeholder="{{ \'APPLICATION_URL\' | translate }}" class="form-control" data-ng-model="application.appdata[3]" data-ng-init="application.appdata[3] = null">\n <span data-ng-show="(forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid && forms.settings.url.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END URL -->\n </div>\n <div id="AGI" class="app-settings" ng-slide-down="main.app.value == \'AGI\'" lazy-render duration="1">\n <!-- START PROJECT -->\n <input type="hidden" name="url" placeholder="{{ \'APPLICATION_URL\' | translate }}" class="form-control" data-ng-model="application.appdata[0]" data-ng-init="application.appdata[0] = \'agi://127.0.0.1/square\'">\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.project.$touched || forms.settings.$submitted) && forms.settings.project.$invalid}">\n <label class="control-label">{{\'APPLICATION_PROJECT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.appdata[1]" data-ng-init="application.appdata[1] = null" name="project" theme="bootstrap" required data-ng-disabled="!items.length">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="project.name as project in items | filter: $select.search">\n <div ng-bind-html="project.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="items.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_PROJECTS_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/square/projects/list">{{\'APPLICATION_PROJECTS\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.settings.project.$touched || forms.settings.$submitted) && forms.settings.project.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PROJECT -->\n </div>\n <div id="Goto" class="app-settings" ng-slide-down="main.app.value == \'Goto\'" lazy-render duration="1">\n <!-- START CONTEXT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.context.$touched || forms.settings.$submitted) && forms.settings.context.$invalid}">\n <label class="control-label">{{\'APPLICATION_CONTEXT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.appdata[0]" data-ng-init="application.appdata[0] = null" name="context" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="context.name as context in items | filter: $select.search">\n <div ng-bind-html="context.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.context.$touched || forms.settings.$submitted) && forms.settings.context.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CONTEXT -->\n\n <!-- START EXTENSION -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.extension.$touched || forms.settings.$submitted) && forms.settings.extension.$invalid}">\n <label class="control-label">{{ \'APPLICATION_EXTENSION\' | translate }}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="extension" placeholder="" class="form-control" data-ng-model="application.appdata[1]" data-ng-init="application.appdata[1] = null" required>\n <span data-ng-show="(forms.settings.extension.$touched || forms.settings.$submitted) && forms.settings.extension.$invalid && forms.settings.extension.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END EXTENSION -->\n\n <!-- START PRIORITY -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.priority.$touched || forms.settings.$submitted) && forms.settings.priority.$invalid}">\n <label class="control-label">{{ \'APPLICATION_PRIORITY\' | translate }}<span class="required" aria-required="true">*</span></label>\n <input type="text" pattern="[0-9]+" name="priority" placeholder="" class="form-control" data-ng-model="application.appdata[2]" data-ng-init="application.appdata[2] = null" required>\n <span data-ng-show="(forms.settings.priority.$touched || forms.settings.$submitted) && forms.settings.priority.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PRIORITY -->\n </div>\n <div id="Hangup" class="app-settings" ng-slide-down="main.app.value == \'Hangup\'" lazy-render duration="1">\n <!-- START HANGUPCAUSE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.hangupCause.$touched || forms.settings.$submitted) && forms.settings.hangupCause.$invalid}">\n <label class="control-label">{{\'APPLICATION_HANGUP_CAUSE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.appdata[0]" data-ng-init="application.appdata[0] = null" theme="bootstrap" name="hangupCause" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="hangupCause.value as hangupCause in $application.hangupCauses | filter: $select.search">\n <div ng-bind-html="hangupCause.name | translate | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.hangupCause.$touched || forms.settings.$submitted) && forms.settings.hangupCause.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END HANGUPCAUSE -->\n </div>\n <div id="Set" class="app-settings" ng-slide-down="main.app.value == \'Set\'" lazy-render duration="1">\n <!-- START VARIABLE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.variable.$touched || forms.settings.$submitted) && forms.settings.variable.$invalid}">\n <label class="control-label">{{ \'APPLICATION_VARIABLE\' | translate }}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="variable" placeholder="" class="form-control" data-ng-model="application.variable" data-ng-init="application.appdata[0] = null" data-ng-change="updateSetAppdata()" required>\n <span data-ng-show="(forms.settings.variable.$touched || forms.settings.$submitted) && forms.settings.variable.$invalid && forms.settings.variable.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END VARIABLE -->\n\n <!-- START VARVALUE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.varvalue.$touched || forms.settings.$submitted) && forms.settings.varvalue.$invalid}">\n <label class="control-label">{{ \'APPLICATION_VALUE\' | translate }}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="varvalue" placeholder="" class="form-control" data-ng-model="application.value" data-ng-change="updateSetAppdata()" required>\n <span data-ng-show="(forms.settings.varvalue.$touched || forms.settings.$submitted) && forms.settings.varvalue.$invalid && forms.settings.varvalue.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END VARVALUE -->\n </div>\n <div id="Custom" class="app-settings" ng-slide-down="main.app.type == \'custom\'" lazy-render duration="1">\n\n <!-- START CUSTOMAPP -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.customApp.$touched || forms.settings.$submitted) && forms.settings.customApp.$invalid}">\n <label class="control-label">{{ \'APPLICATION_CUSTOM_APP\' | translate }}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="customApp" placeholder="{{ \'APPLICATION_CUSTOM_APP\' | translate }}" class="form-control" data-ng-model="application.app" required>\n <span data-ng-show="(forms.settings.customApp.$touched || forms.settings.$submitted) && forms.settings.customApp.$invalid && forms.settings.customApp.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CUSTOMAPP -->\n\n <!-- START APPDATA -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.appdata.$touched || forms.settings.$submitted) && forms.settings.appdata.$invalid}">\n <label class="control-label">{{ \'APPLICATION_ARGUMENTS\' | translate }}</label>\n <input type="text" name="appdata" placeholder="{{ \'APPLICATION_ARGUMENTS\' | translate }}" class="form-control" data-ng-model="application.appdata[0]" data-ng-init="application.appdata[0] = null">\n <span data-ng-show="(forms.settings.appdata.$touched || forms.settings.$submitted) && forms.settings.appdata.$invalid && forms.settings.appdata.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END APPDATA -->\n </div>\n <div id="Voicemail" class="app-settings" ng-slide-down="main.app.value == \'Voicemail\'" lazy-render duration="1">\n <!-- START VOICEMAIL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.voicemail.$touched || forms.settings.$submitted) && forms.settings.voicemail.$invalid}">\n <label class="control-label">{{ \'APPLICATION_MAILBOX\' | translate }}@{{ \'APPLICATION_CONTEXT\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="application.appdata[0]" data-ng-init="application.appdata[0] = null" theme="bootstrap" name="voicemail" required data-ng-disabled="!items.length">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.mailbox}}</ui-select-match>\n <ui-select-choices repeat="mailbox.mailbox+\'@\'+mailbox.context as mailbox in items | filter: $select.search">\n <div ng-bind-html="mailbox.mailbox | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="items.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_VOICEMAILS_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/channels/voice/voicemails/list">{{\'APPLICATION_VOICEMAILS\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.settings.voicemail.$touched || forms.settings.$submitted) && forms.settings.voicemail.$invalid && forms.settings.voicemail.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END VOICEMAIL -->\n\n <!-- START OPTIONS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid}">\n <label class="control-label">{{\'APPLICATION_OPTIONS\' | translate}}</label>\n <input type="text" name="app_options" placeholder="{{ \'APPLICATION_OPTIONS\' | translate }}" class="form-control" data-ng-model="application.appdata[1]" data-ng-init="application.appdata[1] = null">\n </div>\n <!-- END OPTIONS -->\n </div>\n <button class="btn green-haze" type="submit" ng-click="goNext()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n </form>\n </wz-step>\n <wz-step title="{{\'APPLICATION_INTERVAL\' | translate}}" canexit="formValidation(forms.interval.IntervalId.$valid || forms.interval.hasOwnProperty(\'t_from\') || forms.interval.intType.$modelValue === \'always\')">\n <form name="forms.interval" novalidate>\n <button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n <button class="btn green-haze" type="submit" ng-click="goNext()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n <!-- START INTERVAL_TYPE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.interval.intType.$touched || forms.interval.$submitted) && forms.interval.intType.$invalid}">\n <label class="control-label">{{\'APPLICATION_INTERVAL_TYPE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="interval.intType" theme="bootstrap" name="intType" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="intType.value as intType in $application.intTypes | filter: $select.search">\n <div ng-bind-html="intType.name | translate | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.interval.intType.$touched || forms.interval.$submitted) && forms.interval.intType.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERVAL_TYPE -->\n <div id="customInterval" class="app-settings" ng-slide-down="interval.intType == \'custom\'" lazy-render duration="1">\n <!-- START TIME -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_TIME\' | translate }}</label>\n <div class="input-group input-large">\n <fieldset class="pull-left" ng-disabled="interval.alwaysTime"><uib-timepicker name="t_from" data-ng-model="interval.t_from" show-meridian="false" show-spinners="false"></uib-timepicker></fieldset>\n <div class="input-group-addon col-md-1 interval-to pull-left">to</div>\n <fieldset ng-disabled="interval.alwaysTime"><uib-timepicker name="t_to" data-ng-model="interval.t_to" show-meridian="false" show-spinners="false"></uib-timepicker></fieldset>\n </div>\n </div>\n <!-- END TIME -->\n\n <!-- <label class="control-label pointer-cursor"><input type="checkbox" data-ng-model="interval.alwaysTime">{{\'APPLICATION_ALWAYS\' | translate}}</label> -->\n <!-- START ALWAYS -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_ALWAYS\' | translate }}</label>\n <div class="input-group input-large">\n <label class="control-label pointer-cursor">\n <input\n bs-switch\n data-ng-model="interval.alwaysTime"\n type="checkbox"\n switch-active="{{ alwaysSwitch.isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ alwaysSwitch.onColor }}"\n switch-off-color="{{ alwaysSwitch.offColor }}"\n switch-animate="{{ alwaysSwitch.animate }}"\n switch-size="{{ alwaysSwitch.size }}"\n switch-label="{{ alwaysSwitch.label }}"\n switch-icon="{{ alwaysSwitch.icon }}"\n switch-radio-off="{{ alwaysSwitch.radioOff }}"\n switch-label-width="{{ alwaysSwitch.labelWidth }}"\n switch-handle-width="{{ alwaysSwitch.handleWidth }}">\n </label>\n </div>\n </div>\n <!-- END ALWAYS -->\n\n <!-- START WEEKDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_WEEKDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="interval.wd_from" theme="bootstrap" name="wd_from">\n <ui-select-match placeholder="">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{weekDay.name | translate}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="interval.wd_to" theme="bootstrap" name="wd_to">\n <ui-select-match placeholder="">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{weekDay.name | translate}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END WEEKDAY -->\n\n <!-- START MONTHDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTHDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="interval.md_from" theme="bootstrap" name="md_from">\n <ui-select-match>{{$select.selected === \'always\' ? \'APPLICATION_ALWAYS\' : $select.selected | translate}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search">\n {{monthDay === \'always\' ? \'APPLICATION_ALWAYS\' : monthDay | translate}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="interval.md_to" theme="bootstrap" name="md_to">\n <ui-select-match>{{$select.selected === \'always\' ? \'APPLICATION_ALWAYS\' : $select.selected | translate}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search">\n {{monthDay === \'always\' ? \'APPLICATION_ALWAYS\' : monthDay | translate}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTHDAY -->\n\n <!-- START MONTH -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTH\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="interval.m_from" theme="bootstrap" name="m_from">\n <ui-select-match placeholder="">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{month.name | translate}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="interval.m_to" theme="bootstrap" name="m_to">\n <ui-select-match placeholder="">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{month.name | translate}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTH -->\n </div>\n\n <div id="customInterval" class="app-settings" ng-slide-down="interval.intType == \'list\'" lazy-render duration="1">\n\n <!-- START INTERVALS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.interval.IntervalId.$touched || forms.interval.$submitted) && forms.interval.IntervalId.$invalid}">\n <label class="control-label">{{\'APPLICATION_INTERVALS\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="interval.IntervalId" theme="bootstrap" name="IntervalId" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="interval.id as interval in Intervals | filter: $select.search">\n {{interval.name | translate}}\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="intervals.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_INTERVAL_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/tools/intervals/list">{{\'APPLICATION_INTERVALS\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.interval.IntervalId.$touched || forms.interval.$submitted) && forms.interval.IntervalId.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERVALS -->\n\n </div>\n <button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n <button class="btn green-haze" type="submit" ng-click="goNext()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n </form>\n </wz-step>\n\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n <input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n </wz-step>\n </wizard>\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'), +a.put("app/channels/voice/route/view.applicationSettings.html",'\n<div class="row" data-ng-init="initApplication();getIntervals();getApplication();">\n <div class="col-md-12">\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-notebook font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_APPLICATION_SETTINGS\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="updateRoute(\'applications\')">\n <div class="profile-usertitle-name">\n {{(main.app.name | translate) || \'Application\'}}\n </div>\n <wz-step title="{{\'APPLICATION_APPLICATION\' | translate}}" canexit="formValidation(forms.settings.$valid)">\n <form name="forms.settings" novalidate>\n <!-- <pre>\n {{application | json}}\n </pre> -->\n\n <button class="btn green-haze" type="submit" ng-click="goNext()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n\n <div id="Queue" class="app-settings" ng-slide-down="main.app.value == \'Queue\'" lazy-render duration="1">\n <!-- START QUEUE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.queue.$touched || forms.settings.$submitted) && forms.settings.queue.$invalid}">\n <label class="control-label">{{\'APPLICATION_QUEUE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="route.Applications[selectedApp].appdata[0]" name="queue" theme="bootstrap" required data-ng-disabled="!items.length">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="queue.name as queue in items | filter: $select.search">\n <div ng-bind-html="queue.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="items.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_QUEUES_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/channels/voice/queues/list">{{\'APPLICATION_QUEUES\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.settings.queue.$touched || forms.settings.$submitted) && forms.settings.queue.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END QUEUE -->\n\n <!-- START OPTIONS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid}">\n <label class="control-label">{{\'APPLICATION_OPTIONS\' | translate}}</label>\n <input type="text" pattern="[^,]*" name="app_options" placeholder="{{ \'APPLICATION_OPTIONS\' | translate }}" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[1]">\n <span data-ng-show="(forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid && forms.settings.app_options.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n </span>\n </div>\n <!-- END OPTIONS -->\n\n <!-- START URL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid}">\n <label class="control-label">{{ \'APPLICATION_URL\' | translate }}</label>\n <input type="text" pattern="[^,]*" name="url" placeholder="{{ \'APPLICATION_URL\' | translate }}" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[2]">\n <span data-ng-show="(forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid && forms.settings.url.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid && forms.settings.url.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n </span>\n </div>\n <!-- END URL -->\n\n <!-- START APPLICATION_ANNOUNCE_OVERRIDE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.audiofile.$touched || forms.settings.$submitted) && forms.settings.audiofile.$invalid}">\n <label class="control-label">{{\'APPLICATION_ANNOUNCE_OVERRIDE\' | translate}}</label>\n <ui-select data-ng-model="route.Applications[selectedApp].appdata[3]" name="audiofile" theme="bootstrap" data-ng-disabled="!items2.length">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.display_name}}</ui-select-match>\n <ui-select-choices repeat="settings.soundPath+\'/\'+audio.save_name as audio in items2 | filter: $select.search">\n <div ng-bind-html="audio.display_name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="items2.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_SOUNDS_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/tools/sounds/list">{{\'APPLICATION_SOUNDS\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.settings.audiofile.$touched || forms.settings.$submitted) && forms.settings.audiofile.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END APPLICATION_ANNOUNCE_OVERRIDE -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid}">\n <label class="control-label">{{ \'APPLICATION_TIMEOUT\' | translate }}</label>\n <input type="text" pattern="[0-9]+" name="timeout" placeholder="{{ \'APPLICATION_TIMEOUT\' | translate }}" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[4]">\n <span data-ng-show="(forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid && forms.settings.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n\n <!-- START AGI -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.agi.$touched || forms.settings.$submitted) && forms.settings.agi.$invalid}">\n <label class="control-label">{{ \'APPLICATION_AGI\' | translate }}</label>\n <input type="text" pattern="[^,]*" name="agi" placeholder="{{ \'APPLICATION_AGI\' | translate }}" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[5]">\n <span data-ng-show="(forms.settings.agi.$touched || forms.settings.$submitted) && forms.settings.agi.$invalid && forms.settings.agi.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.settings.agi.$touched || forms.settings.$submitted) && forms.settings.agi.$invalid && forms.settings.agi.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n </span>\n </div>\n <!-- END AGI -->\n\n <!-- START MACRO -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.macro.$touched || forms.settings.$submitted) && forms.settings.macro.$invalid}">\n <label class="control-label">{{ \'APPLICATION_MACRO\' | translate }}</label>\n <input type="text" pattern="[^,]*" name="macro" placeholder="{{ \'APPLICATION_MACRO\' | translate }}" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[6]">\n <span data-ng-show="(forms.settings.macro.$touched || forms.settings.$submitted) && forms.settings.macro.$invalid && forms.settings.macro.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.settings.macro.$touched || forms.settings.$submitted) && forms.settings.macro.$invalid && forms.settings.macro.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n </span>\n </div>\n <!-- END MACRO -->\n\n <!-- START GOSUB -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.gosub.$touched || forms.settings.$submitted) && forms.settings.gosub.$invalid}">\n <label class="control-label">{{ \'APPLICATION_GOSUB\' | translate }}</label>\n <input type="text" pattern="[^,]*" name="gosub" placeholder="{{ \'APPLICATION_GOSUB\' | translate }}" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[7]">\n <span data-ng-show="(forms.settings.gosub.$touched || forms.settings.$submitted) && forms.settings.gosub.$invalid && forms.settings.gosub.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.settings.gosub.$touched || forms.settings.$submitted) && forms.settings.gosub.$invalid && forms.settings.gosub.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n </span>\n </div>\n <!-- END GOSUB -->\n\n <!-- START RULE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.rule.$touched || forms.settings.$submitted) && forms.settings.rule.$invalid}">\n <label class="control-label">{{ \'APPLICATION_RULE\' | translate }}</label>\n <input type="text" pattern="[^,]*" name="rule" placeholder="{{ \'APPLICATION_RULE\' | translate }}" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[8]">\n <span data-ng-show="(forms.settings.rule.$touched || forms.settings.$submitted) && forms.settings.rule.$invalid && forms.settings.rule.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.settings.rule.$touched || forms.settings.$submitted) && forms.settings.rule.$invalid && forms.settings.rule.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n </span>\n </div>\n <!-- END RULE -->\n\n <!-- START POSITION -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.position.$touched || forms.settings.$submitted) && forms.settings.position.$invalid}">\n <label class="control-label">{{ \'APPLICATION_POSITION\' | translate }}</label>\n <input type="number" min="0" name="position" placeholder="{{ \'APPLICATION_POSITION\' | translate }}" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[9]">\n <span data-ng-show="(forms.settings.position.$touched || forms.settings.$submitted) && forms.settings.position.$invalid && forms.settings.position.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END POSITION -->\n\n <!-- START ANSWER -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_ANSWER\' | translate }}</label>\n <div class="input-group input-large">\n <label class="control-label pointer-cursor">\n <input\n bs-switch\n data-ng-model="route.Applications[selectedApp].answer"\n type="checkbox"\n switch-active="{{ alwaysSwitch.isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ alwaysSwitch.onColor }}"\n switch-off-color="{{ alwaysSwitch.offColor }}"\n switch-animate="{{ alwaysSwitch.animate }}"\n switch-size="{{ alwaysSwitch.size }}"\n switch-label="{{ alwaysSwitch.label }}"\n switch-icon="{{ alwaysSwitch.icon }}"\n switch-radio-off="{{ alwaysSwitch.radioOff }}"\n switch-label-width="{{ alwaysSwitch.labelWidth }}"\n switch-handle-width="{{ alwaysSwitch.handleWidth }}">\n </label>\n </div>\n </div>\n <!-- END ANSWER -->\n\n </div>\n <div id="Playback" class="app-settings" ng-slide-down="main.app.value == \'Playback\'" lazy-render duration="1">\n <!-- START AUDIOFILE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.audiofile.$touched || forms.settings.$submitted) && forms.settings.audiofile.$invalid}">\n <label class="control-label">{{\'APPLICATION_AUDIO_FILE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="route.Applications[selectedApp].appdata[0]" name="audiofile" theme="bootstrap" required data-ng-disabled="!items.length">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.display_name}}</ui-select-match>\n <ui-select-choices repeat="settings.soundPath+\'/\'+audio.save_name as audio in items | filter: $select.search">\n <div ng-bind-html="audio.display_name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="items.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_SOUNDS_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/tools/sounds/list">{{\'APPLICATION_SOUNDS\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.settings.audiofile.$touched || forms.settings.$submitted) && forms.settings.audiofile.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END AUDIOFILE -->\n\n <!-- START OPTIONS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid}">\n <label class="control-label">{{\'APPLICATION_OPTIONS\' | translate}}</label>\n <input type="text" name="app_options" placeholder="{{ \'APPLICATION_OPTIONS\' | translate }}" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[1]">\n <span data-ng-show="(forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END OPTIONS -->\n\n <!-- START ANSWER -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_ANSWER\' | translate }}</label>\n <div class="input-group input-large">\n <label class="control-label pointer-cursor">\n <input\n bs-switch\n data-ng-model="route.Applications[selectedApp].answer"\n type="checkbox"\n switch-active="{{ alwaysSwitch.isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ alwaysSwitch.onColor }}"\n switch-off-color="{{ alwaysSwitch.offColor }}"\n switch-animate="{{ alwaysSwitch.animate }}"\n switch-size="{{ alwaysSwitch.size }}"\n switch-label="{{ alwaysSwitch.label }}"\n switch-icon="{{ alwaysSwitch.icon }}"\n switch-radio-off="{{ alwaysSwitch.radioOff }}"\n switch-label-width="{{ alwaysSwitch.labelWidth }}"\n switch-handle-width="{{ alwaysSwitch.handleWidth }}">\n </label>\n </div>\n </div>\n <!-- END ANSWER -->\n\n </div>\n <div id="Dial" class="app-settings" ng-slide-down="main.app.value == \'Dial\' && !main.app.type" lazy-render duration="1">\n <!-- START INTERFACE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.interface.$touched || forms.settings.$submitted) && forms.settings.interface.$invalid}">\n <label class="control-label">{{ \'APPLICATION_TYPE\' | translate }}/{{ \'APPLICATION_IDENTIFIER\' | translate }}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="interface" placeholder="SIP/0000" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[0]" required>\n <span data-ng-show="(forms.settings.interface.$touched || forms.settings.$submitted) && forms.settings.interface.$invalid && forms.settings.interface.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERFACE -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid}">\n <label class="control-label">{{ \'APPLICATION_TIMEOUT\' | translate }}</label>\n <input type="text" pattern="[0-9]+" name="timeout" placeholder="" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[1]">\n <span data-ng-show="(forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid && forms.settings.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n\n <!-- START OPTIONS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid}">\n <label class="control-label">{{ \'APPLICATION_OPTIONS\' | translate }}</label>\n <input type="text" name="app_options" placeholder="" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[2]">\n <span data-ng-show="(forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid && forms.settings.app_options.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END OPTIONS -->\n\n <!-- START URL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid}">\n <label class="control-label">{{ \'APPLICATION_URL\' | translate }}</label>\n <input type="text" name="url" placeholder="{{ \'APPLICATION_URL\' | translate }}" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[3]">\n <span data-ng-show="(forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid && forms.settings.url.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END URL -->\n </div>\n <div id="internalDial" class="app-settings" ng-slide-down="main.app.value == \'Dial\' && main.app.type == \'internalDial\'" lazy-render duration="1">\n <!-- START INTERNAL DIAL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.user.$touched || forms.settings.$submitted) && forms.settings.user.$invalid}">\n <label class="control-label">{{\'APPLICATION_USER\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="route.Applications[selectedApp].appdata[0]" name="user" theme="bootstrap" required data-ng-disabled="!items.length">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="user.name as user in items | filter: $select.search">\n <div ng-bind-html="user.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.user.$touched || forms.settings.$submitted) && forms.settings.user.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERNAL DIAL -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid}">\n <label class="control-label">{{ \'APPLICATION_TIMEOUT\' | translate }}</label>\n <input type="text" pattern="[0-9]+" name="timeout" placeholder="" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[1]">\n <span data-ng-show="(forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid && forms.settings.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n\n <!-- START OPTIONS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid}">\n <label class="control-label">{{ \'APPLICATION_OPTIONS\' | translate }}</label>\n <input type="text" name="app_options" placeholder="" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[2]">\n <span data-ng-show="(forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid && forms.settings.app_options.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END OPTIONS -->\n\n <!-- START URL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid}">\n <label class="control-label">{{ \'APPLICATION_URL\' | translate }}</label>\n <input type="text" name="url" placeholder="{{ \'APPLICATION_URL\' | translate }}" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[3]">\n <span data-ng-show="(forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid && forms.settings.url.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END URL -->\n\n </div>\n <div id="Dial" class="app-settings" ng-slide-down="main.app.value == \'Dial\' && main.app.type == \'externalDial\'" lazy-render duration="1">\n\n <!-- START TRUNK -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.trunk.$touched || forms.info.$submitted) && forms.info.trunk.$invalid}">\n <label class="control-label">{{\'APPLICATION_TRUNK\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="route.Applications[selectedApp].appdata[0]" name="trunk" theme="bootstrap" required data-ng-disabled="!items.length">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="trunk.name as trunk in items | filter: $select.search">\n <div ng-bind-html="trunk.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="items.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_TRUNKS_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/tools/trunks/list">{{\'APPLICATION_TRUNKS\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.info.trunk.$touched || forms.info.$submitted) && forms.info.trunk.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TRUNK -->\n\n <!-- START PHONE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.phone.$touched || forms.settings.$submitted) && forms.settings.phone.$invalid}">\n <label class="control-label">{{ \'APPLICATION_PHONE\' | translate }}<span class="required" aria-required="true">*</span></label>\n <input type="text" pattern="[0-9]+" name="phone" placeholder="{{\'APPLICATION_PHONE\' | translate}}" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[1]">\n <span data-ng-show="(forms.settings.phone.$touched || forms.settings.$submitted) && forms.settings.phone.$invalid && forms.settings.phone.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PHONE -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid}">\n <label class="control-label">{{ \'APPLICATION_TIMEOUT\' | translate }}</label>\n <input type="text" pattern="[0-9]+" name="timeout" placeholder="" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[2]">\n <span data-ng-show="(forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid && forms.settings.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n\n <!-- START OPTIONS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid}">\n <label class="control-label">{{ \'APPLICATION_OPTIONS\' | translate }}</label>\n <input type="text" name="app_options" placeholder="" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[3]">\n <span data-ng-show="(forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid && forms.settings.app_options.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END OPTIONS -->\n\n <!-- START URL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid}">\n <label class="control-label">{{ \'APPLICATION_URL\' | translate }}</label>\n <input type="text" name="url" placeholder="{{ \'APPLICATION_URL\' | translate }}" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[4]">\n <span data-ng-show="(forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid && forms.settings.url.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END URL -->\n </div>\n <div id="RingGroup" class="app-settings" ng-slide-down="main.app.value == \'Dial\' && main.app.type == \'RingGroup\'" lazy-render duration="1">\n <!-- START ITEMS -->\n <input type="hidden" name="items" placeholder="{{ \'APPLICATION_URL\' | translate }}" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[0]" data-ng-init="initRingGroup()">\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.items.$touched || forms.settings.$submitted) && forms.settings.items.$invalid}">\n <label class="control-label">{{\'APPLICATION_ITEMS\' | translate}}<span class="required" aria-required="true">*</span></label>\n <div class="col-md-12" id="multi-select-user-by-role"></div>\n <span data-ng-show="(forms.settings.items.$touched || forms.settings.$submitted) && forms.settings.items.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END ITEMS -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid}">\n <label class="control-label">{{ \'APPLICATION_TIMEOUT\' | translate }}</label>\n <input type="text" pattern="[0-9]+" name="timeout" placeholder="" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[1]" data-ng-init="application.appdata[1] = null">\n <span data-ng-show="(forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid && forms.settings.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n\n <!-- START OPTIONS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid}">\n <label class="control-label">{{ \'APPLICATION_OPTIONS\' | translate }}</label>\n <input type="text" name="app_options" placeholder="" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[2]" data-ng-init="application.appdata[2] = null">\n <span data-ng-show="(forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid && forms.settings.app_options.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END OPTIONS -->\n\n <!-- START URL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid}">\n <label class="control-label">{{ \'APPLICATION_URL\' | translate }}</label>\n <input type="text" name="url" placeholder="{{ \'APPLICATION_URL\' | translate }}" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[3]" data-ng-init="application.appdata[3] = null">\n <span data-ng-show="(forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid && forms.settings.url.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END URL -->\n </div>\n <div id="AGI" class="app-settings" ng-slide-down="main.app.value == \'AGI\'" lazy-render duration="1">\n <!-- START PROJECT -->\n <input type="hidden" name="url" placeholder="{{ \'APPLICATION_URL\' | translate }}" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[0]" data-ng-init="route.Applications[selectedApp].appdata[0] = \'agi://127.0.0.1/square\'">\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.project.$touched || forms.settings.$submitted) && forms.settings.project.$invalid}">\n <label class="control-label">{{\'APPLICATION_PROJECT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="route.Applications[selectedApp].appdata[1]" name="project" theme="bootstrap" required data-ng-disabled="!items.length">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="project.name as project in items | filter: $select.search">\n <div ng-bind-html="project.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="items.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_PROJECTS_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/square/projects/list">{{\'APPLICATION_PROJECTS\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.settings.project.$touched || forms.settings.$submitted) && forms.settings.project.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PROJECT -->\n\n <!-- START URL -->\n <!-- <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid}">\n <label class="control-label">{{ \'APPLICATION_URL\' | translate }}</label>\n <div class="input-group">\n <input type="text" name="url" placeholder="agi://127.0.0.1/square" class="form-control" data-ng-model="application.url" data-ng-disabled="!application.urlEnabled" data-ng-required="application.urlEnabled" rpattern="/^agi:\\/\\/(?:[0-9]{1,3}\\.){3}[0-9]{1,3}\\/square$/">\n <span class="input-group-addon">\n <input type="checkbox" data-ng-model="application.urlEnabled">\n </span>\n </div>\n <span data-ng-show="(forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid && forms.settings.url.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid && forms.settings.url.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n </span>\n </div> -->\n <!-- END URL -->\n\n </div>\n <div id="Goto" class="app-settings" ng-slide-down="main.app.value == \'Goto\'" lazy-render duration="1">\n <!-- START CONTEXT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.context.$touched || forms.settings.$submitted) && forms.settings.context.$invalid}">\n <label class="control-label">{{\'APPLICATION_CONTEXT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="route.Applications[selectedApp].appdata[0]" name="context" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="context.name as context in items | filter: $select.search">\n <div ng-bind-html="context.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.context.$touched || forms.settings.$submitted) && forms.settings.context.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CONTEXT -->\n\n <!-- START EXTENSION -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.extension.$touched || forms.settings.$submitted) && forms.settings.extension.$invalid}">\n <label class="control-label">{{ \'APPLICATION_EXTENSION\' | translate }}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="extension" placeholder="" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[1]" required>\n <span data-ng-show="(forms.settings.extension.$touched || forms.settings.$submitted) && forms.settings.extension.$invalid && forms.settings.extension.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END EXTENSION -->\n\n <!-- START PRIORITY -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.priority.$touched || forms.settings.$submitted) && forms.settings.priority.$invalid}">\n <label class="control-label">{{ \'APPLICATION_PRIORITY\' | translate }}<span class="required" aria-required="true">*</span></label>\n <input type="text" pattern="[0-9]+" name="priority" placeholder="" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[2]" required>\n <span data-ng-show="(forms.settings.priority.$touched || forms.settings.$submitted) && forms.settings.priority.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PRIORITY -->\n </div>\n <div id="Hangup" class="app-settings" ng-slide-down="main.app.value == \'Hangup\'" lazy-render duration="1">\n <!-- START HANGUPCAUSE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.hangupCause.$touched || forms.settings.$submitted) && forms.settings.hangupCause.$invalid}">\n <label class="control-label">{{\'APPLICATION_HANGUP_CAUSE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="route.Applications[selectedApp].appdata[0]" theme="bootstrap" name="hangupCause" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="hangupCause.value as hangupCause in $application.hangupCauses | filter: $select.search">\n {{hangupCause.name | translate}}\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.hangupCause.$touched || forms.settings.$submitted) && forms.settings.hangupCause.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END HANGUPCAUSE -->\n </div>\n <div id="Set" class="app-settings" ng-slide-down="main.app.value == \'Set\'" lazy-render duration="1">\n <!-- START VARIABLE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.variable.$touched || forms.settings.$submitted) && forms.settings.variable.$invalid}">\n <label class="control-label">{{ \'APPLICATION_VARIABLE\' | translate }}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="variable" placeholder="" class="form-control" data-ng-model="application.variable" data-ng-change="updateSetAppdataSettings()" required>\n <span data-ng-show="(forms.settings.variable.$touched || forms.settings.$submitted) && forms.settings.variable.$invalid && forms.settings.variable.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END VARIABLE -->\n\n <!-- START VARVALUE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.varvalue.$touched || forms.settings.$submitted) && forms.settings.varvalue.$invalid}">\n <label class="control-label">{{ \'APPLICATION_VALUE\' | translate }}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="varvalue" placeholder="" class="form-control" data-ng-model="application.value" data-ng-change="updateSetAppdataSettings()" required>\n <span data-ng-show="(forms.settings.varvalue.$touched || forms.settings.$submitted) && forms.settings.varvalue.$invalid && forms.settings.varvalue.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END VARVALUE -->\n </div>\n <div id="Custom" class="app-settings" ng-slide-down="main.app.type == \'custom\'" lazy-render duration="1">\n\n <!-- START CUSTOMAPP -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.customApp.$touched || forms.settings.$submitted) && forms.settings.customApp.$invalid}">\n <label class="control-label">{{ \'APPLICATION_CUSTOM_APP\' | translate }}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="customApp" placeholder="{{ \'APPLICATION_CUSTOM_APP\' | translate }}" class="form-control" data-ng-model="route.Applications[selectedApp].app" required>\n <span data-ng-show="(forms.settings.customApp.$touched || forms.settings.$submitted) && forms.settings.customApp.$invalid && forms.settings.customApp.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CUSTOMAPP -->\n\n <!-- START APPDATA -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.appdata.$touched || forms.settings.$submitted) && forms.settings.appdata.$invalid}">\n <label class="control-label">{{ \'APPLICATION_ARGUMENTS\' | translate }}</label>\n <input type="text" name="appdata" placeholder="{{ \'APPLICATION_ARGUMENTS\' | translate }}" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[0]">\n <span data-ng-show="(forms.settings.appdata.$touched || forms.settings.$submitted) && forms.settings.appdata.$invalid && forms.settings.appdata.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END APPDATA -->\n </div>\n <div id="Voicemail" class="app-settings" ng-slide-down="main.app.value == \'Voicemail\'" lazy-render duration="1">\n <!-- START VOICEMAIL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.voicemail.$touched || forms.settings.$submitted) && forms.settings.voicemail.$invalid}">\n <label class="control-label">{{ \'APPLICATION_MAILBOX\' | translate }}@{{ \'APPLICATION_CONTEXT\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="route.Applications[selectedApp].appdata[0]" theme="bootstrap" name="voicemail" required data-ng-disabled="!items.length">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.mailbox}}</ui-select-match>\n <ui-select-choices repeat="mailbox.mailbox+\'@\'+mailbox.context as mailbox in items | filter: $select.search">\n <div ng-bind-html="mailbox.mailbox | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="items.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_VOICEMAILS_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/channels/voice/voicemails/list">{{\'APPLICATION_VOICEMAILS\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="(forms.settings.voicemail.$touched || forms.settings.$submitted) && forms.settings.voicemail.$invalid && forms.settings.voicemail.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END VOICEMAIL -->\n\n <!-- START OPTIONS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid}">\n <label class="control-label">{{\'APPLICATION_OPTIONS\' | translate}}</label>\n <input type="text" name="app_options" placeholder="{{ \'APPLICATION_OPTIONS\' | translate }}" class="form-control" data-ng-model="route.Applications[selectedApp].appdata[1]">\n </div>\n <!-- END OPTIONS -->\n\n </div>\n <button class="btn green-haze" type="submit" ng-click="goNext()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n </form>\n</wz-step>\n<wz-step title="{{\'APPLICATION_INTERVAL\' | translate}}" canexit="formValidation(forms.interval.IntervalId.$valid || forms.interval.hasOwnProperty(\'t_from\') || forms.interval.intType.$modelValue === \'always\')">\n <form name="forms.interval" novalidate>\n <button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n <button class="btn green-haze" type="submit" ng-click="goNext()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n <!-- START INTERVAL_TYPE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.interval.intType.$touched || forms.interval.$submitted) && forms.interval.intType.$invalid}">\n <label class="control-label">{{\'APPLICATION_INTERVAL_TYPE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="interval.intType" theme="bootstrap" name="intType" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="intType.value as intType in $application.intTypes | filter: $select.search">\n {{intType.name | translate}}\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.interval.intType.$touched || forms.interval.$submitted) && forms.interval.intType.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERVAL_TYPE -->\n <div id="customInterval" class="app-settings" ng-slide-down="interval.intType == \'custom\'" lazy-render duration="1">\n <!-- START TIME -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_TIME\' | translate }}</label>\n <div class="input-group input-large">\n <fieldset class="pull-left" ng-disabled="interval.alwaysTime"><uib-timepicker name="t_from" data-ng-model="interval.t_from" show-meridian="false" show-spinners="false"></uib-timepicker></fieldset>\n <div class="input-group-addon col-md-1 interval-to pull-left">to</div>\n <fieldset ng-disabled="interval.alwaysTime"><uib-timepicker name="t_to" data-ng-model="interval.t_to" show-meridian="false" show-spinners="false"></uib-timepicker></fieldset>\n </div>\n </div>\n <!-- END TIME -->\n\n <!-- <label class="control-label pointer-cursor"><input type="checkbox" data-ng-model="interval.alwaysTime">{{\'APPLICATION_ALWAYS\' | translate}}</label> -->\n <!-- START ALWAYS -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_ALWAYS\' | translate }}</label>\n <div class="input-group input-large">\n <label class="control-label pointer-cursor">\n <input\n bs-switch\n data-ng-model="interval.alwaysTime"\n type="checkbox"\n switch-active="{{ alwaysSwitch.isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ alwaysSwitch.onColor }}"\n switch-off-color="{{ alwaysSwitch.offColor }}"\n switch-animate="{{ alwaysSwitch.animate }}"\n switch-size="{{ alwaysSwitch.size }}"\n switch-label="{{ alwaysSwitch.label }}"\n switch-icon="{{ alwaysSwitch.icon }}"\n switch-radio-off="{{ alwaysSwitch.radioOff }}"\n switch-label-width="{{ alwaysSwitch.labelWidth }}"\n switch-handle-width="{{ alwaysSwitch.handleWidth }}">\n </label>\n </div>\n </div>\n <!-- END ALWAYS -->\n\n <!-- START WEEKDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_WEEKDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="interval.wd_from" theme="bootstrap" name="wd_from">\n <ui-select-match placeholder="">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{weekDay.name | translate}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="interval.wd_to" theme="bootstrap" name="wd_to">\n <ui-select-match placeholder="">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{weekDay.name | translate}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END WEEKDAY -->\n\n <!-- START MONTHDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTHDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="interval.md_from" theme="bootstrap" name="md_from">\n <ui-select-match>{{$select.selected === \'always\' ? \'APPLICATION_ALWAYS\' : $select.selected | translate}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search">\n {{monthDay === \'always\' ? \'APPLICATION_ALWAYS\' : monthDay | translate}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="interval.md_to" theme="bootstrap" name="md_to">\n <ui-select-match>{{$select.selected === \'always\' ? \'APPLICATION_ALWAYS\' : $select.selected | translate}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search">\n {{monthDay === \'always\' ? \'APPLICATION_ALWAYS\' : monthDay | translate}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTHDAY -->\n\n <!-- START MONTH -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTH\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="interval.m_from" theme="bootstrap" name="m_from">\n <ui-select-match placeholder="">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{month.name | translate}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="interval.m_to" theme="bootstrap" name="m_to">\n <ui-select-match placeholder="">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{month.name | translate}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTH -->\n </div>\n\n <div id="customInterval" class="app-settings" ng-slide-down="interval.intType == \'list\'" lazy-render duration="1">\n\n <!-- START INTERVALS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.interval.IntervalId.$touched || forms.interval.$submitted) && forms.interval.IntervalId.$invalid}">\n <label class="control-label">{{\'APPLICATION_INTERVALS\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="interval.IntervalId" theme="bootstrap" name="IntervalId" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="interval.id as interval in Intervals | filter: $select.search">\n {{interval.name | translate}}\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.interval.IntervalId.$touched || forms.interval.$submitted) && forms.interval.IntervalId.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERVALS -->\n\n </div>\n <button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n <button class="btn green-haze" type="submit" ng-click="goNext()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n </form>\n</wz-step>\n\n<wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n <input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n</wz-step>\n</wizard>\n</div>\n</div>\n<!-- END Portlet PORTLET-->\n</div>\n</div>\n<!-- END PAGE CONTENT-->\n'), +a.put("app/channels/voice/voicemail/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-earphones-alt"></i>\n <a href="#">{{ \'APPLICATION_VOICE\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-envelope-letter"></i>\n <a href="#">{{ \'APPLICATION_VOICEMAILS\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-envelope-letter font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_VOICEMAILS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <a class="btn green-jungle" href="/channels/voice/voicemails/wizard">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_VOICEMAIL\' | translate }}\n </a>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/voice/voicemail/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getVoicemail()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-earphones-alt"></i>\n <a href="#">{{ \'APPLICATION_VOICE\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-envelope-letter"></i>\n <a href="/channels/voice/voicemails/list">{{ \'APPLICATION_VOICEMAILS\' | translate }}</a>\n <i data-ng-show="voicemail" class="fa fa-angle-right"></i>\n </li>\n <li data-ng-show="voicemail">\n <a href="#">{{voicemail.mailbox}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET main.channels -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/voicemail.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{voicemail.mailbox}}\n </div>\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.channels.voice.voicemails.view.settings\')}">\n <a data-ng-href="/channels/voice/voicemails/view/{{voicemail.uniqueid}}/settings"><i class="icon-settings"></i>{{ \'APPLICATION_SETTINGS\' | translate}} </a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.channels.voice.voicemails.view.messages\')}">\n <a data-ng-href="/channels/voice/voicemails/view/{{voicemail.uniqueid}}/messages"><i class="icon-speech"></i>{{ \'APPLICATION_MESSAGES\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET main.channels -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/channels/voice/voicemail/view/view.messages.html",'<div class="row" data-ng-init="getMessages()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_MESSAGES\' | translate}}</span>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns data-ng-if="gridOptions" ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/voice/voicemail/view/view.settings.html",'<div class="row" data-ng-init="getContexts()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_VOICEMAIL\' | translate}} {{ \'APPLICATION_SETTINGS\' | translate}} </span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_2" data-toggle="tab">{{ \'APPLICATION_ADVANCED\' | translate}}</a>\n </li>\n </ul>\n </div>\n\n <div class="portlet-body">\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.general" data-ng-submit="forms.general.$valid && updateVoiceVoicemail()" novalidate>\n\n <!-- START FULLNAME -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.general.$submitted && forms.general.fullname.$invalid}">\n <label class="control-label">{{\'APPLICATION_FULLNAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="fullname" placeholder="{{\'APPLICATION_FULLNAME\' | translate}}" class="form-control" data-ng-model="voicemail.fullname" required/>\n <span data-ng-show="forms.general.$submitted && forms.general.fullname.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END FULLNAME -->\n\n <!-- START EMAIL -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.general.$submitted && forms.general.email.$invalid}">\n <label class="control-label">{{\'APPLICATION_EMAIL\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="email" name="email" placeholder="{{\'APPLICATION_EMAIL\' | translate}}" class="form-control" data-ng-model="voicemail.email" required/>\n <span data-ng-show="forms.general.$submitted && forms.general.host.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END EMAIL -->\n\n <!-- START PASSWORD -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.general.$submitted && forms.general.password.$invalid}">\n <label class="control-label">{{\'APPLICATION_NEW_PASSWORD\' | translate}}</label>\n <input type="password" name="password" placeholder="{{\'APPLICATION_NEW_PASSWORD\' | translate}}" class="form-control" data-ng-model="voicemail.password" />\n <span data-ng-show="forms.general.$submitted && forms.general.password.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PASSWORD -->\n\n <!-- START CONFIRM PASSWORD -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.general.$submitted && forms.general.rpassword.$invalid}">\n <label class="control-label">{{\'APPLICATION_CONFIRM_PASSWORD\' | translate}}</label>\n <input type="password" name="rpassword" placeholder="{{\'APPLICATION_CONFIRM_PASSWORD\' | translate}}" class="form-control" data-ng-model="voicemail.rpassword" nx-equal="voicemail.password"/>\n <span data-ng-show="forms.general.$submitted && (forms.general.rpassword.$invalid || forms.general.rpassword.$invalid)" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_PASSWORD\' | translate}}.\n </span>\n </div>\n <!-- END CONFIRM PASSWORD -->\n\n <!-- START MAILBOX -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.general.$submitted && forms.general.mailbox.$invalid}">\n <label class="control-label">{{\'APPLICATION_MAILBOX\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="mailbox" placeholder="{{\'APPLICATION_MAILBOX\' | translate}}" class="form-control" data-ng-model="voicemail.mailbox" required readonly/>\n <span data-ng-show="forms.general.$submitted && forms.general.mailbox.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END MAILBOX -->\n\n <!-- START CONTEXT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.context.$touched || forms.general.$submitted) && forms.general.context.$invalid}">\n <label class="control-label">{{\'APPLICATION_CONTEXT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="voicemail.context" name="context" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="context.name as context in voiceContexts | filter: $select.search">\n <div ng-bind-html="context.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_VOICE_CONTEXT\' | translate }}\n </span>\n <span data-ng-show="(forms.general.context.$touched || forms.general.$submitted) && forms.general.context.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CONTEXT -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END GENERAL TAB -->\n <!-- ADVANCED TAB -->\n <div class="tab-pane" id="tab_1_2">\n <form name="forms.advanced" data-ng-submit="forms.general.$valid && forms.advanced.$valid && updateVoiceVoicemail()" novalidate>\n\n <!-- START TIMEZONE -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.advanced.$submitted && forms.advanced.tz.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEZONE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="mailbox" placeholder="{{\'APPLICATION_TIMEZONE\' | translate}}" class="form-control" data-ng-model="voicemail.tz" required/>\n <span data-ng-show="forms.advanced.$submitted && forms.advanced.tz.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEZONE -->\n\n <!-- START ATTACH -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.attach.$touched || forms.advanced.$submitted) && forms.advanced.attach.$invalid}">\n <label class="control-label">{{\'APPLICATION_ATTACH\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="voicemail.attach"\n type="checkbox"\n switch-active="{{ switch.isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ switch.onColor }}"\n switch-off-color="{{ switch.offColor }}"\n switch-animate="{{ switch.animate }}"\n switch-size="{{ switch.size }}"\n switch-label="{{ switch.label }}"\n switch-icon="{{ switch.icon }}"\n switch-radio-off="{{ switch.radioOff }}"\n switch-label-width="{{ switch.labelWidth }}"\n switch-handle-width="{{ switch.handleWidth }}">\n </div>\n <!-- END ATTACH -->\n\n <!-- START ENVELOPE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.envelope.$touched || forms.advanced.$submitted) && forms.advanced.envelope.$invalid}">\n <label class="control-label">{{\'APPLICATION_ENVELOPE\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="voicemail.envelope"\n type="checkbox"\n switch-active="{{ switch.isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ switch.onColor }}"\n switch-off-color="{{ switch.offColor }}"\n switch-animate="{{ switch.animate }}"\n switch-size="{{ switch.size }}"\n switch-label="{{ switch.label }}"\n switch-icon="{{ switch.icon }}"\n switch-radio-off="{{ switch.radioOff }}"\n switch-label-width="{{ switch.labelWidth }}"\n switch-handle-width="{{ switch.handleWidth }}">\n </div>\n <!-- END ENVELOPE -->\n\n <!-- START DELETE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.delete.$touched || forms.advanced.$submitted) && forms.advanced.delete.$invalid}">\n <label class="control-label">{{\'APPLICATION_DELETE\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="voicemail.delete"\n type="checkbox"\n switch-active="{{ switch.isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ switch.onColor }}"\n switch-off-color="{{ switch.offColor }}"\n switch-animate="{{ switch.animate }}"\n switch-size="{{ switch.size }}"\n switch-label="{{ switch.label }}"\n switch-icon="{{ switch.icon }}"\n switch-radio-off="{{ switch.radioOff }}"\n switch-label-width="{{ switch.labelWidth }}"\n switch-handle-width="{{ switch.handleWidth }}">\n </div>\n <!-- END DELETE -->\n\n <!-- START EMAIL_BODY -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_EMAIL_BODY\' | translate}}</label>\n <textarea type="text" name="emailbody" placeholder="{{\'APPLICATION_EMAIL_BODY\' | translate}}" class="form-control" data-ng-model="voicemail.emailbody"></textarea>\n </div>\n <!-- END EMAIL_BODY -->\n\n <!-- START EMAIL_SUBJECT -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_EMAIL_SUBJECT\' | translate}}</label>\n <textarea type="text" name="emailsubject" placeholder="{{\'APPLICATION_EMAIL_SUBJECT\' | translate}}" class="form-control" data-ng-model="voicemail.emailsubject"></textarea>\n </div>\n <!-- END EMAIL_SUBJECT -->\n\n <!-- START MAX_SECONDS -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.maxsecs.$touched || forms.advanced.$submitted) && forms.advanced.maxsecs.$invalid}">\n <label class="control-label">{{\'APPLICATION_MAX_SECONDS\' | translate}}</label>\n <input type="number" min="0" name="maxsecs" placeholder="{{\'APPLICATION_MAX_SECONDS\' | translate}}" class="form-control" data-ng-model="voicemail.maxsecs" required/>\n <span data-ng-show="(forms.advanced.maxsecs.$touched || forms.advanced.$submitted) && forms.advanced.maxsecs.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END MAX_SECONDS -->\n\n <!-- START MAX_MESSAGES -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.maxmsg.$touched || forms.advanced.$submitted) && forms.advanced.maxmsg.$invalid}">\n <label class="control-label">{{\'APPLICATION_MAX_MESSAGES\' | translate}}</label>\n <input type="number" min="0" name="maxmsg" placeholder="{{\'APPLICATION_MAX_MESSAGES\' | translate}}" class="form-control" data-ng-model="voicemail.maxmsg" required/>\n <span data-ng-show="(forms.advanced.maxmsg.$touched || forms.advanced.$submitted) && forms.advanced.maxmsg.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END MAX_MESSAGES -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END ADVANCED TAB -->\n\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/channels/voice/voicemail/wizard/wizard.html",'<div class="col-md-12" data-ng-init="initWizard()">\n <!-- BEGIN PAGE HEADER-->\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-spinner"></i>\n <a href="#">{{ \'APPLICATION_CHANNELS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-earphones-alt"></i>\n <a href="#">{{ \'APPLICATION_VOICE\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-envelope-letter"></i>\n <a href="/channels/voice/voicemails/list">{{ \'APPLICATION_VOICEMAILS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-options"></i>\n <a href="#">{{ \'APPLICATION_WIZARD\' | translate }}</a>\n </li>\n </ul>\n </div>\n <!-- END PAGE HEADER-->\n\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered" data-ng-init="getFirstFreeMailbox()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-envelope-letter font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_VOICEMAIL\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="createItem()">\n <wz-step title="{{\'APPLICATION_GENERAL\' | translate}}" canexit="exitValidation(form.general.$valid)">\n <form name="form.general" novalidate>\n\n <!-- START FULLNAME -->\n <div class="form-group" data-ng-class="{\'has-error\': form.general.$submitted && form.general.fullname.$invalid}">\n <label class="control-label">{{\'APPLICATION_FULLNAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="fullname" placeholder="{{\'APPLICATION_FULLNAME\' | translate}}" class="form-control" data-ng-model="item.fullname" required/>\n <span data-ng-show="form.general.$submitted && form.general.fullname.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END FULLNAME -->\n\n <!-- START EMAIL -->\n <div class="form-group" data-ng-class="{\'has-error\': form.general.$submitted && form.general.email.$invalid}">\n <label class="control-label">{{\'APPLICATION_EMAIL\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="email" name="email" placeholder="{{\'APPLICATION_EMAIL\' | translate}}" class="form-control" data-ng-model="item.email" required/>\n <span data-ng-show="form.general.$submitted && form.general.host.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END EMAIL -->\n\n <!-- START PASSWORD -->\n <div class="form-group" data-ng-class="{\'has-error\': form.general.$submitted && form.general.password.$invalid}">\n <label class="control-label">{{\'APPLICATION_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="password" name="password" placeholder="{{\'APPLICATION_PASSWORD\' | translate}}" class="form-control" data-ng-model="item.password" required/>\n <span data-ng-show="form.general.$submitted && form.general.password.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PASSWORD -->\n\n <!-- START CONFIRM PASSWORD -->\n <div class="form-group" data-ng-class="{\'has-error\': form.general.$submitted && form.general.rpassword.$invalid}">\n <label class="control-label">{{\'APPLICATION_CONFIRM_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="password" name="rpassword" placeholder="{{\'APPLICATION_CONFIRM_PASSWORD\' | translate}}" class="form-control" data-ng-model="item.rpassword" nx-equal="item.password" required/>\n <span data-ng-show="form.general.$submitted && (form.general.rpassword.$invalid || form.general.rpassword.$invalid)" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_PASSWORD\' | translate}}.\n </span>\n </div>\n <!-- END CONFIRM PASSWORD -->\n\n <!-- START MAILBOX -->\n <div class="form-group" data-ng-class="{\'has-error\': form.general.$submitted && form.general.mailbox.$invalid}">\n <label class="control-label">{{\'APPLICATION_MAILBOX\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="mailbox" placeholder="{{\'APPLICATION_MAILBOX\' | translate}}" class="form-control" data-ng-model="item.mailbox" required readonly/>\n <span data-ng-show="form.general.$submitted && form.general.mailbox.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END MAILBOX -->\n\n <button class="btn green-haze" type="submit" ng-click="next()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n </form>\n </wz-step>\n\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n <input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n </wz-step>\n </wizard>\n </div>\n </div>\n <!-- END PORTLET-->\n</div>\n'),a.put("app/contactmanager/company/list/create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_COMPANY\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="forms.company" novalidate>\n <div class="row">\n <div class="col-md-6">\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.company.name.$touched || forms.company.$submitted) && forms.company.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="(forms.cmopany.name.$touched || forms.company.$submitted) && forms.company.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START VAT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.company.vat.$touched || forms.company.$submitted) && forms.company.vat.$invalid}">\n <label class="control-label">{{\'APPLICATION_VAT\' | translate}}</label>\n <input type="text" name="vat" placeholder="{{\'APPLICATION_VAT\' | translate}}" class="form-control" data-ng-model="item.vat"/>\n <span data-ng-show="(forms.cmopany.vat.$touched || forms.company.$submitted) && forms.company.vat.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END VAT -->\n\n <!-- START COMPANYID -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.company.companyId.$touched || forms.company.$submitted) && forms.company.companyId.$invalid}">\n <label class="control-label">{{\'APPLICATION_COMPANY_ID\' | translate}}</label>\n <input type="text" name="companyId" placeholder="{{\'APPLICATION_COMPANY_ID\' | translate}}" class="form-control" data-ng-model="item.companyId"/>\n <span data-ng-show="(forms.cmopany.companyId.$touched || forms.company.$submitted) && forms.company.companyId.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END COMPANYID -->\n\n <!-- START WEBSITE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.company.website.$touched || forms.company.$submitted) && forms.company.website.$invalid}">\n <label class="control-label">{{\'APPLICATION_WEBSITE\' | translate}}</label>\n <input type="text" name="website" placeholder="{{\'APPLICATION_WEBSITE\' | translate}}" class="form-control" data-ng-model="item.website"/>\n <span data-ng-show="(forms.cmopany.website.$touched || forms.company.$submitted) && forms.company.website.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END WEBSITE -->\n\n <!-- START EMAIL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.company.email.$touched || forms.company.$submitted) && forms.company.email.$invalid}">\n <label class="control-label">{{\'APPLICATION_EMAIL\' | translate}}</label>\n <input type="email" name="email" placeholder="{{\'APPLICATION_EMAIL\' | translate}}" class="form-control" data-ng-model="item.email"/>\n <span data-ng-show="(forms.cmopany.email.$touched || forms.company.$submitted) && forms.company.email.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END EMAIL -->\n\n </div>\n <div class="col-md-6">\n <!-- START PHONE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.company.phone.$touched || forms.company.$submitted) && forms.company.phone.$invalid}">\n <label class="control-label">{{\'APPLICATION_PHONE\' | translate}}</label>\n <input type="text" name="phone" placeholder="{{\'APPLICATION_PHONE\' | translate}}" class="form-control" data-ng-model="item.phone"/>\n <span data-ng-show="(forms.cmopany.phone.$touched || forms.company.$submitted) && forms.company.phone.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PHONE -->\n\n <!-- START FAX -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.company.fax.$touched || forms.company.$submitted) && forms.company.fax.$invalid}">\n <label class="control-label">{{\'APPLICATION_FAX\' | translate}}</label>\n <input type="text" name="fax" placeholder="{{\'APPLICATION_FAX\' | translate}}" class="form-control" data-ng-model="item.fax"/>\n <span data-ng-show="(forms.cmopany.fax.$touched || forms.company.$submitted) && forms.company.fax.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END FAX -->\n\n <!-- START TYPE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.company.type.$touched || forms.company.$submitted) && forms.company.type.$invalid}">\n <label class="control-label">{{\'APPLICATION_TYPE\' | translate}}</label>\n <input type="text" name="type" placeholder="{{\'APPLICATION_TYPE\' | translate}}" class="form-control" data-ng-model="item.type"/>\n <span data-ng-show="(forms.cmopany.type.$touched || forms.company.$submitted) && forms.company.type.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TYPE -->\n\n <!-- START DOMAIN -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.company.emailDomain.$touched || forms.company.$submitted) && forms.company.emailDomain.$invalid}">\n <label class="control-label">{{\'APPLICATION_EMAIL_DOMAIN\' | translate}}</label>\n <input type="text" name="domain" placeholder="{{\'APPLICATION_EMAIL_DOMAIN\' | translate}}" class="form-control" data-ng-model="item.emailDomain"/>\n <span data-ng-show="(forms.cmopany.emailDomain.$touched || forms.company.$submitted) && forms.company.emailDomain.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END DOMAIN -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n </div>\n</div>\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="ok()" ng-disabled="forms.company.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'), +a.put("app/contactmanager/company/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-users"></i>\n <a href="#">{{ \'APPLICATION_CONTACT_MANAGER\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-briefcase"></i>\n <a href="/contactmanager/companies/list">{{ \'APPLICATION_COMPANIES\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-briefcase font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_COMPANIES\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <button class="btn green-jungle " ng-click="create()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_COMPANY\' | translate }}\n </button>\n </div>\n <!-- <a class="btn btn-icon-only btn-default fullscreen" href="#"></a> -->\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/contactmanager/company/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getCompany()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-users"></i>\n <a href="#">{{ \'APPLICATION_CONTACT_MANAGER\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-briefcase"></i>\n <a href="/contactmanager/companies/list">{{ \'APPLICATION_COMPANIES\' | translate }}</a>\n <i data-ng-show="company" class="fa fa-angle-right"></i>\n </li>\n <li data-ng-show="company">\n <a href="#">{{company.name}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/company.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{company.name}}\n </div>\n <!-- <div class="profile-usertitle-job">\n {{user.role}}\n </div> -->\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.contactmanager.companies.view.settings\')}">\n <a data-ng-href="/contactmanager/companies/view/{{company.id}}/settings">\n <i class="icon-settings"></i>\n {{ \'APPLICATION_SETTINGS\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/contactmanager/company/view/view.settings.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_COMPANY\' | translate}} {{ \'APPLICATION_SETTINGS\' | translate}} </span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_2" data-toggle="tab">{{ \'APPLICATION_ADDRESS\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_3" data-toggle="tab">{{ \'APPLICATION_SHIPMENT_ADDRESS\' | translate}}</a>\n </li>\n </ul>\n </div>\n\n <div class="portlet-body">\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.general" data-ng-submit="forms.general.$valid && updateCompany()" novalidate>\n <div class="row">\n <div class="col-md-6">\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="company.name" required/>\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START VAT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.vat.$touched || forms.general.$submitted) && forms.general.vat.$invalid}">\n <label class="control-label">{{\'APPLICATION_VAT\' | translate}}</label>\n <input type="text" name="vat" placeholder="{{\'APPLICATION_VAT\' | translate}}" class="form-control" data-ng-model="company.vat"/>\n <span data-ng-show="(forms.cmopany.vat.$touched || forms.general.$submitted) && forms.general.vat.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END VAT -->\n\n <!-- START COMPANYID -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.companyId.$touched || forms.general.$submitted) && forms.general.companyId.$invalid}">\n <label class="control-label">{{\'APPLICATION_COMPANY_ID\' | translate}}</label>\n <input type="text" name="companyId" placeholder="{{\'APPLICATION_COMPANY_ID\' | translate}}" class="form-control" data-ng-model="company.companyId"/>\n <span data-ng-show="(forms.cmopany.companyId.$touched || forms.general.$submitted) && forms.general.companyId.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END COMPANYID -->\n\n <!-- START WEBSITE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.website.$touched || forms.general.$submitted) && forms.general.website.$invalid}">\n <label class="control-label">{{\'APPLICATION_WEBSITE\' | translate}}</label>\n <input type="text" name="website" placeholder="{{\'APPLICATION_WEBSITE\' | translate}}" class="form-control" data-ng-model="company.website"/>\n <span data-ng-show="(forms.cmopany.website.$touched || forms.general.$submitted) && forms.general.website.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END WEBSITE -->\n\n <!-- START EMAIL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.email.$touched || forms.general.$submitted) && forms.general.email.$invalid}">\n <label class="control-label">{{\'APPLICATION_EMAIL\' | translate}}</label>\n <input type="email" name="email" placeholder="{{\'APPLICATION_EMAIL\' | translate}}" class="form-control" data-ng-model="company.email"/>\n <span data-ng-show="(forms.cmopany.email.$touched || forms.general.$submitted) && forms.general.email.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END EMAIL -->\n </div>\n <div class="col-md-6">\n <!-- START PHONE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.phone.$touched || forms.general.$submitted) && forms.general.phone.$invalid}">\n <label class="control-label">{{\'APPLICATION_PHONE\' | translate}}</label>\n <input type="text" name="phone" placeholder="{{\'APPLICATION_PHONE\' | translate}}" class="form-control" data-ng-model="company.phone"/>\n <span data-ng-show="(forms.cmopany.phone.$touched || forms.general.$submitted) && forms.general.phone.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PHONE -->\n\n <!-- START FAX -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.fax.$touched || forms.general.$submitted) && forms.general.fax.$invalid}">\n <label class="control-label">{{\'APPLICATION_FAX\' | translate}}</label>\n <input type="text" name="fax" placeholder="{{\'APPLICATION_FAX\' | translate}}" class="form-control" data-ng-model="company.fax"/>\n <span data-ng-show="(forms.cmopany.fax.$touched || forms.general.$submitted) && forms.general.fax.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END FAX -->\n\n <!-- START TYPE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.type.$touched || forms.general.$submitted) && forms.general.type.$invalid}">\n <label class="control-label">{{\'APPLICATION_TYPE\' | translate}}</label>\n <input type="text" name="type" placeholder="{{\'APPLICATION_TYPE\' | translate}}" class="form-control" data-ng-model="company.type"/>\n <span data-ng-show="(forms.cmopany.type.$touched || forms.general.$submitted) && forms.general.type.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TYPE -->\n\n <!-- START DOMAIN -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.emailDomain.$touched || forms.general.$submitted) && forms.general.emailDomain.$invalid}">\n <label class="control-label">{{\'APPLICATION_EMAIL_DOMAIN\' | translate}}</label>\n <input type="text" name="domain" placeholder="{{\'APPLICATION_EMAIL_DOMAIN\' | translate}}" class="form-control" data-ng-model="company.emailDomain"/>\n <span data-ng-show="(forms.cmopany.emailDomain.$touched || forms.general.$submitted) && forms.general.emailDomain.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END DOMAIN -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="company.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n </div>\n </div>\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END ADVANCED TAB -->\n <div class="tab-pane" id="tab_1_2">\n <form name="forms.address" data-ng-submit="forms.address.$valid && updateCompany()" novalidate>\n <!-- START STREET -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.address.street.$touched || forms.address.$submitted) && forms.address.street.$invalid}">\n <label class="control-label">{{\'APPLICATION_STREET\' | translate}}</label>\n <input type="text" name="street" placeholder="{{\'APPLICATION_STREET\' | translate}}" class="form-control" data-ng-model="company.street"/>\n <span data-ng-show="(forms.address.street.$touched || forms.address.$submitted) && forms.address.street.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END STREET -->\n\n <!-- START POSTALCODE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.address.postalCode.$touched || forms.address.$submitted) && forms.address.postalCode.$invalid}">\n <label class="control-label">{{\'APPLICATION_POSTALCODE\' | translate}}</label>\n <input type="text" name="postalCode" placeholder="{{\'APPLICATION_POSTALCODE\' | translate}}" class="form-control" data-ng-model="company.postalCode"/>\n <span data-ng-show="(forms.address.postalCode.$touched || forms.address.$submitted) && forms.address.postalCode.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END POSTALCODE -->\n\n <!-- START CITY -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.address.city.$touched || forms.address.$submitted) && forms.address.city.$invalid}">\n <label class="control-label">{{\'APPLICATION_CITY\' | translate}}</label>\n <input type="text" name="city" placeholder="{{\'APPLICATION_CITY\' | translate}}" class="form-control" data-ng-model="company.city"/>\n <span data-ng-show="(forms.address.city.$touched || forms.address.$submitted) && forms.address.city.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CITY -->\n <!-- START COUNTRY -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.address.country.$touched || forms.address.$submitted) && forms.address.country.$invalid}">\n <label class="control-label">{{\'APPLICATION_COUNTRY\' | translate}}</label>\n <input type="text" name="country" placeholder="{{\'APPLICATION_COUNTRY\' | translate}}" class="form-control" data-ng-model="company.country"/>\n <span data-ng-show="(forms.address.country.$touched || forms.address.$submitted) && forms.address.country.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END COUNTRY -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <div class="tab-pane" id="tab_1_3">\n <form name="forms.shipmentAddress" data-ng-submit="forms.shipmentAddress.$valid && updateCompany()" novalidate>\n <!-- START STREET -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.shipmentAddress.sStreet.$touched || forms.shipmentAddress.$submitted) && forms.shipmentAddress.sStreet.$invalid}">\n <label class="control-label">{{\'APPLICATION_STREET\' | translate}}</label>\n <input type="text" name="sStreet" placeholder="{{\'APPLICATION_STREET\' | translate}}" class="form-control" data-ng-model="company.sStreet"/>\n <span data-ng-show="(forms.shipmentAddress.sStreet.$touched || forms.shipmentAddress.$submitted) && forms.shipmentAddress.sStreet.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END STREET -->\n\n <!-- START POSTALCODE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.shipmentAddress.sPostalCode.$touched || forms.shipmentAddress.$submitted) && forms.shipmentAddress.sPostalCode.$invalid}">\n <label class="control-label">{{\'APPLICATION_POSTALCODE\' | translate}}</label>\n <input type="text" name="sPostalCode" placeholder="{{\'APPLICATION_POSTALCODE\' | translate}}" class="form-control" data-ng-model="company.sPostalCode"/>\n <span data-ng-show="(forms.shipmentAddress.sPostalCode.$touched || forms.shipmentAddress.$submitted) && forms.shipmentAddress.sPostalCode.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END POSTALCODE -->\n\n <!-- START CITY -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.shipmentAddress.sCity.$touched || forms.shipmentAddress.$submitted) && forms.shipmentAddress.sCity.$invalid}">\n <label class="control-label">{{\'APPLICATION_CITY\' | translate}}</label>\n <input type="text" name="sCity" placeholder="{{\'APPLICATION_CITY\' | translate}}" class="form-control" data-ng-model="company.sCity"/>\n <span data-ng-show="(forms.shipmentAddress.sCity.$touched || forms.shipmentAddress.$submitted) && forms.shipmentAddress.sCity.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CITY -->\n <!-- START COUNTRY -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.shipmentAddress.sCountry.$touched || forms.shipmentAddress.$submitted) && forms.shipmentAddress.sCountry.$invalid}">\n <label class="control-label">{{\'APPLICATION_COUNTRY\' | translate}}</label>\n <input type="text" name="sCountry" placeholder="{{\'APPLICATION_COUNTRY\' | translate}}" class="form-control" data-ng-model="company.sCountry"/>\n <span data-ng-show="(forms.shipmentAddress.sCountry.$touched || forms.shipmentAddress.$submitted) && forms.shipmentAddress.sCountry.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END COUNTRY -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/contactmanager/contact/list/copy.modal.html",'<div class="modal-header" data-ng-init="getLists()">\n <h3 class="modal-title">{{ \'APPLICATION_COPY_CONTACT\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="forms.copy" novalidate>\n <!-- START LIST -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.csv.ListId.$invalid && forms.csv.$submitted}">\n <label class="control-label">{{\'APPLICATION_LIST\' | translate}}</label>\n <ui-select data-ng-model="item.ListId" theme="bootstrap" name="ListId" data-ng-disabled="disabled" data-ng-change="getCustomFields()" required>\n <ui-select-match placeholder="{{ \'APPLICATION_LIST\' | translate }}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="list.id as list in lists | filter: $select.search">\n <div ng-bind-html="list.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.csv.ListId.$invalid && forms.csv.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END LIST -->\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="ok()" ng-disabled="forms.copy.$invalid || !forms.copy.ListId">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CLOSE\' | translate }}</button>\n</div>\n'),a.put("app/contactmanager/contact/list/import.modal.html",'<div class="modal-header" data-ng-init="getLists();getCompanies();">\n <h3 class="modal-title">{{ \'APPLICATION_IMPORT_FROM_CSV\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="forms.csv" novalidate>\n <div class="row">\n <div class="col-md-6">\n <!-- START LIST -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.csv.ListId.$invalid && forms.csv.$submitted}">\n <label class="control-label">{{\'APPLICATION_LIST\' | translate}}</label>\n <ui-select data-ng-model="item.ListId" theme="bootstrap" name="ListId" data-ng-disabled="disabled" data-ng-change="getCustomFields()">\n <ui-select-match placeholder="{{ \'APPLICATION_LIST\' | translate }}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="list.id as list in lists | filter: $select.search">\n <div ng-bind-html="list.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.csv.ListId.$invalid && forms.csv.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END LIST -->\n\n <!-- START FIRSTNAME -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.csv.firstName.$invalid && forms.csv.$submitted}">\n <label class="control-label">{{\'APPLICATION_FIRSTNAME\' | translate}}</label>\n <ui-select data-ng-model="item.firstName" theme="bootstrap" name="firstName" data-ng-disabled="disabled" required>\n <ui-select-match allow-clear placeholder="{{ \'APPLICATION_FIRSTNAME\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="index in indexes | filter: $select.search">\n <div ng-bind-html="index | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.csv.firstName.$invalid && forms.csv.$touched" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END FIRSTNAME -->\n\n <!-- START LASTNAME -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.csv.lastName.$invalid && forms.csv.$submitted}">\n <label class="control-label">{{\'APPLICATION_LASTNAME\' | translate}}</label>\n <ui-select data-ng-model="item.lastName" theme="bootstrap" name="lastName" data-ng-disabled="disabled">\n <ui-select-match allow-clear placeholder="{{ \'APPLICATION_LASTNAME\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="index in indexes | filter: $select.search">\n <div ng-bind-html="index | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.csv.lastName.$invalid && forms.csv.$touched" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END LASTNAME -->\n\n <!-- START STREET -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.csv.street.$invalid && forms.csv.$submitted}">\n <label class="control-label">{{\'APPLICATION_STREET\' | translate}}</label>\n <ui-select data-ng-model="item.street" theme="bootstrap" name="street" data-ng-disabled="disabled">\n <ui-select-match allow-clear placeholder="{{ \'APPLICATION_STREET\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="index in indexes | filter: $select.search">\n <div ng-bind-html="index | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.csv.street.$invalid && forms.csv.$touched" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END STREET -->\n\n <!-- START POSTALCODE -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.csv.postalCode.$invalid && forms.csv.$submitted}">\n <label class="control-label">{{\'APPLICATION_POSTALCODE\' | translate}}</label>\n <ui-select data-ng-model="item.postalCode" theme="bootstrap" name="postalCode" data-ng-disabled="disabled">\n <ui-select-match allow-clear placeholder="{{ \'APPLICATION_POSTALCODE\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="index in indexes | filter: $select.search">\n <div ng-bind-html="index | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.csv.postalCode.$invalid && forms.csv.$touched" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END POSTALCODE -->\n\n <!-- START CITY -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.csv.city.$invalid && forms.csv.$submitted}">\n <label class="control-label">{{\'APPLICATION_CITY\' | translate}}</label>\n <ui-select data-ng-model="item.city" theme="bootstrap" name="city" data-ng-disabled="disabled">\n <ui-select-match allow-clear placeholder="{{ \'APPLICATION_CITY\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="index in indexes | filter: $select.search">\n <div ng-bind-html="index | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.csv.city.$invalid && forms.csv.$touched" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CITY -->\n\n <!-- START PHONE -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.csv.phone.$invalid && forms.csv.$submitted}">\n <label class="control-label">{{\'APPLICATION_PHONE\' | translate}}</label>\n <ui-select data-ng-model="item.phone" theme="bootstrap" name="phone" data-ng-disabled="disabled">\n <ui-select-match allow-clear placeholder="{{ \'APPLICATION_PHONE\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="index in indexes | filter: $select.search">\n <div ng-bind-html="index | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.csv.phone.$invalid && forms.phone.$touched" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PHONE -->\n\n <!-- START MOBILE -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.csv.mobile.$invalid && forms.csv.$submitted}">\n <label class="control-label">{{\'APPLICATION_MOBILE\' | translate}}</label>\n <ui-select data-ng-model="item.mobile" theme="bootstrap" name="mobile" data-ng-disabled="disabled">\n <ui-select-match allow-clear placeholder="{{ \'APPLICATION_MOBILE\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="index in indexes | filter: $select.search">\n <div ng-bind-html="index | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.csv.mobile.$invalid && forms.mobile.$touched" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END MOBILE -->\n\n </div>\n <div class="col-md-6">\n\n <!-- START COUNTRY -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.csv.country.$invalid && forms.csv.$submitted}">\n <label class="control-label">{{\'APPLICATION_COUNTRY\' | translate}}</label>\n <ui-select data-ng-model="item.country" theme="bootstrap" name="country" data-ng-disabled="disabled">\n <ui-select-match allow-clear placeholder="{{ \'APPLICATION_COUNTRY\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="index in indexes | filter: $select.search">\n <div ng-bind-html="index | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.csv.country.$invalid && forms.csv.$touched" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END COUNTRY -->\n\n <!-- START DATEOFBIRTH -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.csv.dateOfBirth.$invalid && forms.csv.$submitted}">\n <label class="control-label">{{\'APPLICATION_DATEOFBIRTH\' | translate}}</label>\n <ui-select data-ng-model="item.dateOfBirth" theme="bootstrap" name="dateOfBirth" data-ng-disabled="disabled">\n <ui-select-match allow-clear placeholder="{{ \'APPLICATION_DATEOFBIRTH\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="index in indexes | filter: $select.search">\n <div ng-bind-html="index | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.csv.dateOfBirth.$invalid && forms.csv.$touched" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END DATEOFBIRTH -->\n\n <!-- START TAGS -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.csv.tags.$invalid && forms.csv.$submitted}">\n <label class="control-label">{{\'APPLICATION_TAGS\' | translate}}</label>\n <ui-select multiple data-ng-model="item.tags" theme="bootstrap" name="tags" data-ng-disabled="disabled">\n <ui-select-match allow-clear placeholder="{{ \'APPLICATION_TAGS\' | translate }}">{{$item}}</ui-select-match>\n <ui-select-choices repeat="index in indexes | filter: $select.search">\n <div ng-bind-html="index | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.csv.tags.$invalid && forms.csv.$touched" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TAGS -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.csv.description.$invalid && forms.csv.$submitted}">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <ui-select data-ng-model="item.description" theme="bootstrap" name="description" data-ng-disabled="disabled">\n <ui-select-match allow-clear placeholder="{{ \'APPLICATION_DESCRIPTION\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="index in indexes | filter: $select.search">\n <div ng-bind-html="index | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.csv.description.$invalid && forms.csv.$touched" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END DESCRIPTION -->\n\n <!-- START FAX -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.csv.fax.$invalid && forms.csv.$submitted}">\n <label class="control-label">{{\'APPLICATION_FAX\' | translate}}</label>\n <ui-select data-ng-model="item.fax" theme="bootstrap" name="fax" data-ng-disabled="disabled">\n <ui-select-match allow-clear placeholder="{{ \'APPLICATION_FAX\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="index in indexes | filter: $select.search">\n <div ng-bind-html="index | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.csv.fax.$invalid && forms.fax.$touched" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END FAX -->\n\n <!-- START EMAIL -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.csv.email.$invalid && forms.general.$submitted}">\n <label class="control-label">{{\'APPLICATION_EMAIL\' | translate}}</label>\n <ui-select data-ng-model="item.email" theme="bootstrap" name="email" data-ng-disabled="disabled">\n <ui-select-match allow-clear placeholder="{{ \'APPLICATION_EMAIL\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="index in indexes | filter: $select.search">\n <div ng-bind-html="index | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.csv.email.$invalid && forms.csv.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END EMAIL -->\n\n <!-- START COMPANY -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.csv.CompanyId.$invalid && forms.csv.$submitted}">\n <label class="control-label">{{\'APPLICATION_COMPANY\' | translate}}</label>\n <ui-select data-ng-model="item.CompanyId" theme="bootstrap" name="CompanyId" data-ng-disabled="!companies.length">\n <ui-select-match allow-clear placeholder="{{ \'APPLICATION_COMPANY\' | translate }}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="company.id as company in companies | filter: $select.search">\n <div ng-bind-html="company.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="companies.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_COMPANIES_AVAILABLE\' | translate }}\n </p>\n </div>\n <span data-ng-show="forms.csv.CompanyId.$invalid && forms.csv.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END COMPANY -->\n\n </div>\n </div>\n\n <!-- START CUSTOMFIELDS -->\n <div data-ng-repeat="customField in customFields">\n <div class="form-group" data-ng-class="{\'has-error\': forms.csv[customField.name].$invalid && forms.csv.$submitted}">\n <label class="control-label">{{customField.alias}}</label>\n <ui-select data-ng-model="item[customField.name]" theme="bootstrap" name="{{customField.name}}" data-ng-disabled="disabled">\n <ui-select-match allow-clear placeholder="{{customField.alias}}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="index in indexes | filter: $select.search">\n <div ng-bind-html="index | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.csv[customField.name].$invalid && forms.csv.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n <!-- END CUSTOMFIELDS -->\n\n <div>\n <p>{{\'APPLICATION_IMPORT_SUCCEEDED\' | translate}}: {{import.succeeded}}/{{csvLength}}</p>\n <div class="progress progress-sm" style="">\n <div class="progress-bar progress-bar-info" role="progressbar" ng-style="{ \'width\': import.success + \'%\' }"></div>\n </div>\n </div>\n <div>\n <p>{{\'APPLICATION_IMPORT_FAILED\' | translate}}: {{import.failed}}/{{csvLength}}</p>\n <div class="progress progress-sm" style="">\n <div class="progress-bar progress-bar-danger" role="progressbar" ng-style="{ \'width\': import.fail + \'%\' }"></div>\n </div>\n </div>\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="start()" ng-disabled="forms.csv.$invalid || !forms.csv.firstName || submitted">{{ \'APPLICATION_SUBMIT\' | translate }}</button>\n <button class="btn default" type="button" ng-click="close()" data-ng-if="!importing">{{ \'APPLICATION_CLOSE\' | translate }}</button>\n <button class="btn default" type="button" ng-click="stop()" data-ng-if="importing">{{ \'APPLICATION_STOP\' | translate }}</button>\n</div>\n'), +a.put("app/contactmanager/contact/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-users"></i>\n <a href="#">{{ \'APPLICATION_CONTACT_MANAGER\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-users"></i>\n <a href="/contactmanager/contacts/list">{{ \'APPLICATION_CONTACTS\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="fa fa-users font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_CONTACTS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length && !Auth.isAgent()">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <button class="btn green-jungle" data-ng-click="newContact();">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_CONTACT\' | translate }}\n </button>\n <span class="btn default btn-file" data-ng-if="!Auth.isAgent()">\n <span class="fileinput-new">\n <i class="icon-cloud-upload"></i> {{\'APPLICATION_IMPORT_FROM_CSV\' | translate}}</span>\n <input type="file" accept=".csv" nv-file-select="" uploader="uploader"/>\n </span>\n </div>\n <!-- <a class="btn btn-icon-only btn-default fullscreen" href="#"></a> -->\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div data-ng-if="gridOptions" ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/contactmanager/list/list/create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_LIST\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="forms.list" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.list.name.$touched || forms.list.$submitted) && forms.list.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="(forms.list.name.$touched || forms.list.$submitted) && forms.list.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="ok()" ng-disabled="forms.list.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/contactmanager/list/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-users"></i>\n <a href="#">{{ \'APPLICATION_CONTACT_MANAGER\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-list-ul"></i>\n <a href="/contactmanager/lists/list">{{ \'APPLICATION_LISTS\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="fa fa-list-ul font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_LISTS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <button class="btn green-jungle " ng-click="create()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_LIST\' | translate }}\n </button>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/contactmanager/list/view/create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_CUSTOM_FIELD\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="forms.customField" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.customField.name.$touched || forms.customField.$submitted) && forms.customField.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.alias" required/>\n <span data-ng-show="(forms.customField.name.$touched || forms.customField.$submitted) && forms.customField.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START TYPE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.customField.type.$touched || forms.customField.$submitted) && forms.customField.type.$invalid}">\n <label class="control-label">{{ \'APPLICATION_TYPE\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="item.type" name="type" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_TYPE\' | translate }}">{{$translate.instant($select.selected.name)}}</ui-select-match>\n <ui-select-choices repeat="type.value as type in types| filter: $select.search">\n {{$translate.instant(type.name)}}\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.customField.type.$touched || forms.customField.$submitted) && forms.customField.type.$invalid && forms.customField.type.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TYPE -->\n\n <div ng-slide-down="item.type == \'select\'" lazy-render duration="1">\n <div>\n <label class="control-label">{{\'APPLICATION_CHOICES\' | translate}}</label>\n </div>\n <div class="padding-bottom" ng-repeat="choice in choices">\n <div class="form-group">\n <div class="input-group">\n <input type="text" class="form-control" ng-model="choice.value" required>\n <span class="input-group-btn">\n <button class="btn red" type="button"data-ng-click="removeField($index)" data-ng-disabled="choices.length<=1"><i class="fa fa-times"></i></button>\n </span>\n </div>\n </div>\n </div>\n <button type="button" class="btn btn-sm green padding-bottom" ng-click="addField()">\n <i class="fa fa-plus"></i> {{\'APPLICATION_ADD_CHOICE\' | translate}}\n </button>\n\n </div>\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="ok()" ng-disabled="forms.customField.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/contactmanager/list/view/view.agents.html",'<div class="row" data-ng-init="getTeams()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_AGENTS\' | translate}}</span>\n </div>\n </div>\n <div class="note note-warning" data-ng-hide="teams.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_AVAILABLE_TEAMS\' | translate }}\n </p>\n </div>\n <div class="portlet-body">\n <!-- BEGIN FORM-->\n <form action="index.html" class="form-horizontal form-row-seperated">\n <div class="form-body">\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-team">\n </div>\n </div>\n </div>\n </form>\n <!-- END FORM-->\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/contactmanager/list/view/view.customFieldSettings.html",'<div class="row" data-ng-init="getCustomField()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_CUSTOM_FIELD\' | translate}} {{ \'APPLICATION_SETTINGS\' | translate}} </span>\n </div>\n </div>\n\n <div class="portlet-body">\n <!-- GENERAL TAB -->\n <form name="forms.general" data-ng-submit="forms.general.$valid && updateCustomField()" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="customField.alias" required/>\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <div ng-slide-down="customField.type == \'select\'" lazy-render duration="1" class="mbottom20">\n <div>\n <label class="control-label">{{\'APPLICATION_CHOICES\' | translate}}</label>\n </div>\n <div class="padding-bottom" ng-repeat="choice in choices">\n <div class="form-group">\n <div class="input-group">\n <input type="text" class="form-control" ng-model="choice.value" required>\n <span class="input-group-btn">\n <button class="btn red" type="button"data-ng-click="removeField($index)" data-ng-disabled="choices.length<=1"><i class="fa fa-times"></i></button>\n </span>\n </div>\n </div>\n </div>\n <button type="button" class="btn btn-sm green padding-bottom" ng-click="addField()">\n <i class="fa fa-plus"></i> {{\'APPLICATION_ADD_CHOICE\' | translate}}\n </button>\n\n </div>\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="customField.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/contactmanager/list/view/view.customFields.html",'<div ui-view class="profile-content">\n<div class="row" data-ng-init="initCustomFields()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_CUSTOM_FIELDS\' | translate}}</span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <button class="btn green-jungle " ng-click="create()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_CUSTOM_FIELD\' | translate }}\n </button>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n </div>\n</div>\n</div>\n'),a.put("app/contactmanager/list/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getList()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-users"></i>\n <a href="#">{{ \'APPLICATION_CONTACT_MANAGER\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-list-ul"></i>\n <a href="/contactmanager/lists/list">{{ \'APPLICATION_LISTS\' | translate }}</a>\n <i data-ng-show="list" class="fa fa-angle-right"></i>\n </li>\n <li data-ng-show="list">\n <a href="#">{{list.name}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/list.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{list.name}}\n </div>\n <!-- <div class="profile-usertitle-job">\n {{user.role}}\n </div> -->\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.contactmanager.lists.view.settings\')}">\n <a data-ng-href="/contactmanager/lists/view/{{list.id}}/settings">\n <i class="icon-settings"></i>\n {{ \'APPLICATION_SETTINGS\' | translate}} </a>\n </li>\n <li data-ng-if="!list.defaultEntry" data-ng-class="{active: $state.is(\'main.contactmanager.lists.view.agents\')}">\n <a data-ng-href="/contactmanager/lists/view/{{list.id}}/agents">\n <i class="icon-people"></i>\n {{ \'APPLICATION_AGENTS\' | translate}} </a>\n </li>\n <li data-ng-class="{active: $state.includes(\'main.contactmanager.lists.view.customfields\')}">\n <a data-ng-href="/contactmanager/lists/view/{{list.id}}/customfields">\n <i class="icon-pencil"></i>\n {{ \'APPLICATION_CUSTOM_FIELDS\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/contactmanager/list/view/view.settings.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_LIST\' | translate}} {{ \'APPLICATION_SETTINGS\' | translate}} </span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n </li>\n </ul>\n </div>\n\n <div class="portlet-body">\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.general" data-ng-submit="forms.general.$valid && updateList()" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="list.name" data-ng-disabled="list.defaultEntry" required/>\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="list.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END ADVANCED TAB -->\n\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/dashboard/chat/chat.html",'<div data-ng-switch="Auth.getRole()">\n <div ng-switch-when="agent" data-ng-init="initAgent()">\n <div class="row" style="padding-bottom:10px;">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div ui-grid="table1" ui-grid-resize-columns ui-grid-auto-resize class="ui-grid">\n <div class="watermark" data-ng-show="!table1.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n\n <div class="row" style="padding-bottom:10px;">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div ui-grid="table2" ui-grid-resize-columns ui-grid-auto-resize class="ui-grid">\n <div class="watermark" data-ng-show="!table2.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n </div>\n <div ng-switch-default>\n <fieldset>\n <legend>\n <span class="caption-subject"> </span><small class="pull-right font-grey-cascade">{{ \'APPLICATION_TODAY_STATS\' | translate }}</small>\n </legend>\n <div class="row">\n <div class="col-md-8">\n <div class="row">\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" data-ng-init="initWidget(\'waiting\')">\n <div class="dashboard-stat green-haze">\n <div class="visual">\n <i class="fa fa-play"></i>\n </div>\n <div class="details">\n <div class="number">\n {{waiting || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_DASHBOARD_WAITING_NEW\' | translate}}\n </div>\n </div>\n </div>\n </div>\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" data-ng-init="initWidget(\'open\')">\n <div class="dashboard-stat blue-madison">\n <div class="visual">\n <i class="icon-bell"></i>\n </div>\n <div class="details">\n <div class="number">\n {{open || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_DASHBOARD_OPEN\' | translate}}\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class ="row">\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" data-ng-init="initWidget(\'unmanaged\')">\n <div class="dashboard-stat green">\n <div class="visual">\n <i class="icon-options"></i>\n </div>\n <div class="details">\n <div class="number">\n {{unmanaged || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_UNMANAGED\' | translate}}\n </div>\n </div>\n </div>\n </div>\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" data-ng-init="initWidget(\'closed\')">\n <div class="dashboard-stat purple-plum">\n <div class="visual">\n <i class="icon-like"></i>\n </div>\n <div class="details">\n <div class="number">\n {{closed || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_DASHBOARD_CLOSED\' | translate}}\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class ="row">\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" data-ng-init="initWidget(\'abandoned\')">\n <div class="dashboard-stat yellow-crusta">\n <div class="visual">\n <i class="icon-dislike"></i>\n </div>\n <div class="details">\n <div class="number">\n {{abandoned || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_DASHBOARD_ABANDONED\' | translate}}\n </div>\n </div>\n </div>\n </div>\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" >\n <div class="dashboard-stat yellow-casablanca">\n <div class="visual">\n <i class="icon-calculator"></i>\n </div>\n <div class="details">\n <div class="number">\n {{new+open+unmanaged+closed+abandoned || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_TOTAL\' | translate}}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class="col-md-4">\n <!-- <div class="portlet light bordered">\n <div class="portlet-body"> -->\n <canvas class="chart chart-pie" chart-data="charts.interactions.values" chart-labels="charts.interactions.labels" chart-colours="charts.interactions.colours" chart-legend="true">\n </canvas>\n <!-- </div>\n </div> -->\n </div>\n </div>\n <legend>\n <span class="caption-subject"> </span><small class="pull-right font-grey-cascade">{{ \'APPLICATION_INTERACTION_STATS\' | translate }}</small>\n </legend>\n <div class="row">\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" data-ng-init="initWidget(\'timeout\')">\n <div class="dashboard-stat red-intense">\n <div class="visual">\n <i class="icon-dislike"></i>\n </div>\n <div class="details">\n <div class="number">\n {{timeout || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_TIMEOUT\' | translate}}\n </div>\n </div>\n </div>\n </div>\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" data-ng-init="initWidget(\'waiting\')">\n <div class="dashboard-stat purple">\n <div class="visual">\n <i class="icon-hourglass"></i>\n </div>\n <div class="details">\n <div class="number">\n {{waiting || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_WAITING\' | translate}}\n </div>\n </div>\n </div>\n </div>\n </div>\n </fieldset>\n\n </div>\n</div>\n'),a.put("app/dashboard/dashboard.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" id="dashboardView">\n <div class="col-md-12" >\n <div>\n <nav class="navbar navbar-default" role="navigation">\n <div class="navbar-header">\n <button type="button" class="navbar-toggle" data-ng-init="navCollapsed = true" data-ng-click="navCollapsed = !navCollapsed">\n <span class="sr-only">Toggle navigation</span>\n <span class="icon-bar"></span>\n <span class="icon-bar"></span>\n <span class="icon-bar"></span>\n </button>\n </div>\n\n <!-- Collect the nav links, forms, and other content for toggling -->\n <div class="collapse navbar-collapse" ng-class="!navCollapsed && \'in\'" >\n <ul class="nav navbar-nav">\n <li data-ng-class="{active: $state.is(\'main.dashboard.voice\')}">\n <a href="/dashboard/voice">\n <b class=\'icon-earphones-alt\'></b>\n {{ \'APPLICATION_VOICE\' | translate }}\n </a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.dashboard.chat\'),\'disabled-link\':!license.chat}" data-ng-if="::((Auth.isAdmin() || Auth.isAgent() || userModules[8]))">\n <a href="{{license.chat ? \'/dashboard/chat\' : \'#\'}}" class="disable-target">\n <b class=\'icon-bubble\'></b>\n {{ \'APPLICATION_CHAT\' | translate }}\n </a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.dashboard.mail\'),\'disabled-link\':!license.mail}" data-ng-if="::((Auth.isAdmin() || Auth.isAgent() || userModules[9]))">\n <a href="{{license.mail ? \'/dashboard/mail\' : \'#\'}}" class="disable-target">\n <b class=\'icon-envelope\'></b>\n {{ \'APPLICATION_MAIL\' | translate }}\n </a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.dashboard.fax\'),\'disabled-link\':!license.fax}" data-ng-if="::((Auth.isAdmin() || Auth.isAgent() || userModules[10]))">\n <a href="{{license.fax ? \'/dashboard/fax\' : \'#\'}}" class="disable-target">\n <b class=\'fa fa-fax\'></b>\n {{ \'APPLICATION_FAX\' | translate }}\n </a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.dashboard.sms\'),\'disabled-link\':!license.messaging}" data-ng-if="::((Auth.isAdmin() || Auth.isAgent() || userModules[11]))">\n <a href="{{license.messaging ? \'/dashboard/sms\' : \'#\'}}" class="disable-target">\n <b class=\'glyphicon glyphicon-comment\'></b>\n {{ \'APPLICATION_SMS\' | translate }}\n </a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.dashboard.openchannel\'),\'disabled-link\':!license.openchannel}" data-ng-if="::((Auth.isAdmin() || Auth.isAgent() || userModules[20]))">\n <a href="{{license.messaging ? \'/dashboard/openchannel\' : \'#\'}}" class="disable-target">\n <b class=\'icon-globe\'></b>\n {{ \'APPLICATION_OPEN_CHANNEL\' | translate }}\n </a>\n </li>\n </ul>\n </div>\n <!-- /.navbar-collapse -->\n </nav>\n </div>\n <div ui-view></div>\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/dashboard/fax/fax.html",'<div data-ng-switch="Auth.getRole()">\n <div ng-switch-when="agent" data-ng-init="initAgent()">\n <div class="row" style="padding-bottom:10px;">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div ui-grid="table1" ui-grid-resize-columns ui-grid-auto-resize class="ui-grid">\n <div class="watermark" data-ng-show="!table1.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n\n <div class="row" style="padding-bottom:10px;">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div ui-grid="table2" ui-grid-resize-columns ui-grid-auto-resize class="ui-grid">\n <div class="watermark" data-ng-show="!table2.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n </div>\n <div ng-switch-default>\n <fieldset>\n <legend>\n <span class="caption-subject"> </span><small class="pull-right font-grey-cascade">{{ \'APPLICATION_TODAY_STATS\' | translate }}</small>\n </legend>\n <div class="row">\n <div class="col-md-8">\n <div class="row">\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" data-ng-init="initWidget(\'new\')">\n <div class="dashboard-stat green-haze">\n <div class="visual">\n <i class="fa fa-play"></i>\n </div>\n <div class="details">\n <div class="number">\n {{new || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_DASHBOARD_NEW\' | translate}}\n </div>\n </div>\n </div>\n </div>\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" data-ng-init="initWidget(\'open\')">\n <div class="dashboard-stat blue-madison">\n <div class="visual">\n <i class="icon-bell"></i>\n </div>\n <div class="details">\n <div class="number">\n {{open || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_DASHBOARD_OPEN\' | translate}}\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class ="row">\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" data-ng-init="initWidget(\'pending\')">\n <div class="dashboard-stat green">\n <div class="visual">\n <i class="icon-options"></i>\n </div>\n <div class="details">\n <div class="number">\n {{pending || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_DASHBOARD_PENDING\' | translate}}\n </div>\n </div>\n </div>\n </div>\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" data-ng-init="initWidget(\'closed\')">\n <div class="dashboard-stat purple-plum">\n <div class="visual">\n <i class="icon-like"></i>\n </div>\n <div class="details">\n <div class="number">\n {{closed || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_DASHBOARD_CLOSED\' | translate}}\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class ="row">\n <div class="col-lg-12 col-md-12 col-sm-12 col-xs-12" >\n <div class="dashboard-stat yellow-casablanca">\n <div class="visual">\n <i class="icon-calculator"></i>\n </div>\n <div class="details">\n <div class="number">\n {{new+open+pending+closed || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_TOTAL\' | translate}}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class="col-md-4">\n <!-- <div class="portlet light bordered">\n <div class="portlet-body"> -->\n <canvas class="chart chart-pie" chart-data="charts.interactions.values" chart-labels="charts.interactions.labels" chart-colours="charts.interactions.colours" chart-legend="true">\n </canvas>\n <!-- </div>\n </div> -->\n </div>\n </div>\n <legend>\n <span class="caption-subject"> </span><small class="pull-right font-grey-cascade">{{ \'APPLICATION_INTERACTION_STATS\' | translate }}</small>\n </legend>\n <div class="row">\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" data-ng-init="initWidget(\'timeout\')">\n <div class="dashboard-stat red-intense">\n <div class="visual">\n <i class="icon-dislike"></i>\n </div>\n <div class="details">\n <div class="number">\n {{timeout || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_TIMEOUT\' | translate}}\n </div>\n </div>\n </div>\n </div>\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" data-ng-init="initWidget(\'waiting\')">\n <div class="dashboard-stat purple">\n <div class="visual">\n <i class="icon-hourglass"></i>\n </div>\n <div class="details">\n <div class="number">\n {{waiting || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_WAITING\' | translate}}\n </div>\n </div>\n </div>\n </div>\n </div>\n </fieldset>\n\n </div>\n</div>\n'), +a.put("app/dashboard/mail/mail.html",'<div data-ng-switch="Auth.getRole()">\n <div ng-switch-when="agent" data-ng-init="initAgent()">\n <div class="row" style="padding-bottom:10px;">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div ui-grid="table1" ui-grid-resize-columns ui-grid-auto-resize class="ui-grid">\n <div class="watermark" data-ng-show="!table1.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n\n <div class="row" style="padding-bottom:10px;">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div ui-grid="table2" ui-grid-resize-columns ui-grid-auto-resize class="ui-grid">\n <div class="watermark" data-ng-show="!table2.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n </div>\n <div ng-switch-default>\n <fieldset>\n <legend>\n <span class="caption-subject"> </span><small class="pull-right font-grey-cascade">{{ \'APPLICATION_TODAY_STATS\' | translate }}</small>\n </legend>\n <div class="row">\n <div class="col-md-8">\n <div class="row">\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" data-ng-init="initWidget(\'new\')">\n <div class="dashboard-stat green-haze">\n <div class="visual">\n <i class="fa fa-play"></i>\n </div>\n <div class="details">\n <div class="number">\n {{new || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_DASHBOARD_NEW\' | translate}}\n </div>\n </div>\n </div>\n </div>\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" data-ng-init="initWidget(\'open\')">\n <div class="dashboard-stat blue-madison">\n <div class="visual">\n <i class="icon-bell"></i>\n </div>\n <div class="details">\n <div class="number">\n {{open || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_DASHBOARD_OPEN\' | translate}}\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class ="row">\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" data-ng-init="initWidget(\'pending\')">\n <div class="dashboard-stat green">\n <div class="visual">\n <i class="icon-options"></i>\n </div>\n <div class="details">\n <div class="number">\n {{pending || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_DASHBOARD_PENDING\' | translate}}\n </div>\n </div>\n </div>\n </div>\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" data-ng-init="initWidget(\'closed\')">\n <div class="dashboard-stat purple-plum">\n <div class="visual">\n <i class="icon-like"></i>\n </div>\n <div class="details">\n <div class="number">\n {{closed || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_DASHBOARD_CLOSED\' | translate}}\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class ="row">\n <div class="col-lg-12 col-md-12 col-sm-12 col-xs-12" >\n <div class="dashboard-stat yellow-casablanca">\n <div class="visual">\n <i class="icon-calculator"></i>\n </div>\n <div class="details">\n <div class="number">\n {{new+open+pending+closed || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_TOTAL\' | translate}}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class="col-md-4">\n <!-- <div class="portlet light bordered">\n <div class="portlet-body"> -->\n <canvas class="chart chart-pie" chart-data="charts.interactions.values" chart-labels="charts.interactions.labels" chart-colours="charts.interactions.colours" chart-legend="true">\n </canvas>\n <!-- </div>\n </div> -->\n </div>\n </div>\n <legend>\n <span class="caption-subject"> </span><small class="pull-right font-grey-cascade">{{ \'APPLICATION_INTERACTION_STATS\' | translate }}</small>\n </legend>\n <div class="row">\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" data-ng-init="initWidget(\'timeout\')">\n <div class="dashboard-stat red-intense">\n <div class="visual">\n <i class="icon-dislike"></i>\n </div>\n <div class="details">\n <div class="number">\n {{timeout || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_TIMEOUT\' | translate}}\n </div>\n </div>\n </div>\n </div>\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" data-ng-init="initWidget(\'waiting\')">\n <div class="dashboard-stat purple">\n <div class="visual">\n <i class="icon-hourglass"></i>\n </div>\n <div class="details">\n <div class="number">\n {{waiting || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_WAITING\' | translate}}\n </div>\n </div>\n </div>\n </div>\n </div>\n </fieldset>\n\n </div>\n</div>\n'),a.put("app/dashboard/openchannel/openchannel.html",'<div data-ng-switch="Auth.getRole()">\n <div ng-switch-when="agent" data-ng-init="initAgent()">\n <div class="row" style="padding-bottom:10px;">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div ui-grid="table1" ui-grid-resize-columns ui-grid-auto-resize class="ui-grid">\n <div class="watermark" data-ng-show="!table1.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n\n <div class="row" style="padding-bottom:10px;">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div ui-grid="table2" ui-grid-resize-columns ui-grid-auto-resize class="ui-grid">\n <div class="watermark" data-ng-show="!table2.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n </div>\n <div ng-switch-default>\n <fieldset>\n <legend>\n <span class="caption-subject"> </span><small class="pull-right font-grey-cascade">{{ \'APPLICATION_TODAY_STATS\' | translate }}</small>\n </legend>\n <div class="row">\n <div class="col-md-8">\n <div class="row">\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" data-ng-init="initWidget(\'new\')">\n <div class="dashboard-stat green-haze">\n <div class="visual">\n <i class="fa fa-play"></i>\n </div>\n <div class="details">\n <div class="number">\n {{new || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_DASHBOARD_NEW\' | translate}}\n </div>\n </div>\n </div>\n </div>\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" data-ng-init="initWidget(\'open\')">\n <div class="dashboard-stat blue-madison">\n <div class="visual">\n <i class="icon-bell"></i>\n </div>\n <div class="details">\n <div class="number">\n {{open || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_DASHBOARD_OPEN\' | translate}}\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class ="row">\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" data-ng-init="initWidget(\'pending\')">\n <div class="dashboard-stat green">\n <div class="visual">\n <i class="icon-options"></i>\n </div>\n <div class="details">\n <div class="number">\n {{pending || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_DASHBOARD_PENDING\' | translate}}\n </div>\n </div>\n </div>\n </div>\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" data-ng-init="initWidget(\'closed\')">\n <div class="dashboard-stat purple-plum">\n <div class="visual">\n <i class="icon-like"></i>\n </div>\n <div class="details">\n <div class="number">\n {{closed || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_DASHBOARD_CLOSED\' | translate}}\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class ="row">\n <div class="col-lg-12 col-md-12 col-sm-12 col-xs-12" >\n <div class="dashboard-stat yellow-casablanca">\n <div class="visual">\n <i class="icon-calculator"></i>\n </div>\n <div class="details">\n <div class="number">\n {{new+open+pending+closed || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_TOTAL\' | translate}}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class="col-md-4">\n <!-- <div class="portlet light bordered">\n <div class="portlet-body"> -->\n <canvas class="chart chart-pie" chart-data="charts.interactions.values" chart-labels="charts.interactions.labels" chart-colours="charts.interactions.colours" chart-legend="true">\n </canvas>\n <!-- </div>\n </div> -->\n </div>\n </div>\n <legend>\n <span class="caption-subject"> </span><small class="pull-right font-grey-cascade">{{ \'APPLICATION_INTERACTION_STATS\' | translate }}</small>\n </legend>\n <div class="row">\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" data-ng-init="initWidget(\'timeout\')">\n <div class="dashboard-stat red-intense">\n <div class="visual">\n <i class="icon-dislike"></i>\n </div>\n <div class="details">\n <div class="number">\n {{timeout || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_TIMEOUT\' | translate}}\n </div>\n </div>\n </div>\n </div>\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" data-ng-init="initWidget(\'waiting\')">\n <div class="dashboard-stat purple">\n <div class="visual">\n <i class="icon-hourglass"></i>\n </div>\n <div class="details">\n <div class="number">\n {{waiting || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_WAITING\' | translate}}\n </div>\n </div>\n </div>\n </div>\n </div>\n </fieldset>\n\n </div>\n</div>\n'),a.put("app/dashboard/sms/sms.html",'<div data-ng-switch="Auth.getRole()">\n <div ng-switch-when="agent" data-ng-init="initAgent()">\n <div class="row" style="padding-bottom:10px;">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div ui-grid="table1" ui-grid-resize-columns ui-grid-auto-resize class="ui-grid">\n <div class="watermark" data-ng-show="!table1.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n\n <div class="row" style="padding-bottom:10px;">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div ui-grid="table2" ui-grid-resize-columns ui-grid-auto-resize class="ui-grid">\n <div class="watermark" data-ng-show="!table2.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n </div>\n <div ng-switch-default>\n <fieldset>\n <legend>\n <span class="caption-subject"> </span><small class="pull-right font-grey-cascade">{{ \'APPLICATION_TODAY_STATS\' | translate }}</small>\n </legend>\n <div class="row">\n <div class="col-md-8">\n <div class="row">\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" data-ng-init="initWidget(\'new\')">\n <div class="dashboard-stat green-haze">\n <div class="visual">\n <i class="fa fa-play"></i>\n </div>\n <div class="details">\n <div class="number">\n {{new || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_DASHBOARD_NEW\' | translate}}\n </div>\n </div>\n </div>\n </div>\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" data-ng-init="initWidget(\'open\')">\n <div class="dashboard-stat blue-madison">\n <div class="visual">\n <i class="icon-bell"></i>\n </div>\n <div class="details">\n <div class="number">\n {{open || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_DASHBOARD_OPEN\' | translate}}\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class ="row">\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" data-ng-init="initWidget(\'pending\')">\n <div class="dashboard-stat green">\n <div class="visual">\n <i class="icon-options"></i>\n </div>\n <div class="details">\n <div class="number">\n {{pending || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_DASHBOARD_PENDING\' | translate}}\n </div>\n </div>\n </div>\n </div>\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" data-ng-init="initWidget(\'closed\')">\n <div class="dashboard-stat purple-plum">\n <div class="visual">\n <i class="icon-like"></i>\n </div>\n <div class="details">\n <div class="number">\n {{closed || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_DASHBOARD_CLOSED\' | translate}}\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class ="row">\n <div class="col-lg-12 col-md-12 col-sm-12 col-xs-12" >\n <div class="dashboard-stat yellow-casablanca">\n <div class="visual">\n <i class="icon-calculator"></i>\n </div>\n <div class="details">\n <div class="number">\n {{new+open+pending+closed || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_TOTAL\' | translate}}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class="col-md-4">\n <!-- <div class="portlet light bordered">\n <div class="portlet-body"> -->\n <canvas class="chart chart-pie" chart-data="charts.interactions.values" chart-labels="charts.interactions.labels" chart-colours="charts.interactions.colours" chart-legend="true">\n </canvas>\n <!-- </div>\n </div> -->\n </div>\n </div>\n <legend>\n <span class="caption-subject"> </span><small class="pull-right font-grey-cascade">{{ \'APPLICATION_INTERACTION_STATS\' | translate }}</small>\n </legend>\n <div class="row">\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" data-ng-init="initWidget(\'timeout\')">\n <div class="dashboard-stat red-intense">\n <div class="visual">\n <i class="icon-dislike"></i>\n </div>\n <div class="details">\n <div class="number">\n {{timeout || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_TIMEOUT\' | translate}}\n </div>\n </div>\n </div>\n </div>\n <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12" data-ng-init="initWidget(\'waiting\')">\n <div class="dashboard-stat purple">\n <div class="visual">\n <i class="icon-hourglass"></i>\n </div>\n <div class="details">\n <div class="number">\n {{waiting || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_WAITING\' | translate}}\n </div>\n </div>\n </div>\n </div>\n </div>\n </fieldset>\n\n </div>\n</div>\n'),a.put("app/dashboard/voice/voice.html",'<div data-ng-switch="Auth.getRole()">\n <div ng-switch-when="agent" data-ng-init="initAgent()">\n <div class="portlet light">\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="table1" name="table1" ui-grid-resize-columns ui-grid-pagination ui-grid-auto-resize class="ui-grid">\n <div class="watermark" data-ng-show="!table1.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_a" data-toggle="tab">{{\'APPLICATION_WAITING\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_b" data-toggle="tab">{{\'APPLICATION_ABANDONED\' | translate}}</a>\n </li>\n </ul>\n </div>\n <div class="portlet-body" data-ng-init="initView()">\n <div class="tab-content">\n <div class="tab-pane active" id="tab_1_a">\n <!-- START TABLE -->\n <div ui-grid="table2" name="table2" ui-grid-resize-columns ui-grid-auto-resize class="ui-grid">\n <div class="watermark" data-ng-show="!table2.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n <div class="tab-pane" id="tab_1_b">\n <!-- START TABLE -->\n <div ui-grid="table3" name="table3" ui-grid-resize-columns ui-grid-pagination ui-grid-auto-resize class="ui-grid">\n <div class="watermark" data-ng-show="!table3.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n </div>\n </div>\n</div>\n <div ng-switch-default data-ng-init="initUser()">\n <fieldset>\n <legend>\n <span class="caption-subject">{{ \'APPLICATION_INBOUND\' | translate }}</span><small class="font-grey-cascade pull-right">{{ \'APPLICATION_TODAY_STATS\' | translate }}</small>\n </legend>\n\n <div class="row">\n <div class="col-lg-3 col-md-3 col-sm-6 col-xs-12">\n <div class="dashboard-stat blue-madison">\n <div class="visual">\n <i class="icon-bell"></i>\n </div>\n <div class="details">\n <div class="number">\n {{ voice.waiting || 0 }}\n </div>\n <div class="desc">\n {{\'APPLICATION_WAITING\' | translate}}\n </div>\n </div>\n </div>\n </div>\n <div class="col-lg-3 col-md-3 col-sm-6 col-xs-12">\n <div class="dashboard-stat purple-plum">\n <div class="visual">\n <i class="fa fa-play"></i>\n </div>\n <div class="details">\n <div class="number">\n {{ voice.active || 0 }}\n </div>\n <div class="desc">\n {{\'APPLICATION_ACTIVE\' | translate}}\n </div>\n </div>\n </div>\n </div>\n <div class="col-lg-3 col-md-3 col-sm-6 col-xs-12">\n <div class="dashboard-stat green-haze">\n <div class="visual">\n <i class="icon-like"></i>\n </div>\n <div class="details">\n <div class="number">\n {{ voice.complete || 0 }}\n </div>\n <div class="desc">\n {{\'APPLICATION_ANSWERED\' | translate}}\n </div>\n </div>\n </div>\n </div>\n <div class="col-lg-3 col-md-3 col-sm-6 col-xs-12">\n <div class="dashboard-stat red-intense">\n <div class="visual">\n <i class="icon-dislike"></i>\n </div>\n <div class="details">\n <div class="number">\n {{ voice.abandon || 0 }}\n </div>\n <div class="desc">\n {{\'APPLICATION_ABANDONED\' | translate}}\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class="row">\n <div class="col-lg-3 col-md-3 col-sm-6 col-xs-12">\n <div class="dashboard-stat blue-madison">\n <div class="visual">\n <i class="icon-clock"></i>\n </div>\n <div class="details">\n <div class="number">\n {{ (voice.avgAnswerTime || 0) | secToTime | date:\'HH:mm:ss\' }}\n </div>\n <div class="desc">\n {{\'APPLICATION_AVG_ANSWER_TIME\' | translate}}\n </div>\n </div>\n </div>\n </div>\n <div class="col-lg-3 col-md-3 col-sm-6 col-xs-12">\n <div class="dashboard-stat purple-plum">\n <div class="visual">\n <i class="icon-clock"></i>\n </div>\n <div class="details">\n <div class="number">\n {{ (voice.avgTalkTime || 0) | secToTime | date:\'HH:mm:ss\' }}\n </div>\n <div class="desc">\n {{\'APPLICATION_AVG_TALK_TIME\' | translate}}\n </div>\n </div>\n </div>\n </div>\n <div class="col-lg-3 col-md-3 col-sm-6 col-xs-12">\n <div class="dashboard-stat green-haze">\n <div class="visual">\n <i class="icon-pie-chart"></i>\n </div>\n <div class="details">\n <div class="number">\n {{ (voice.answerRate || 0) | number:2}}\n </div>\n <div class="desc">\n {{\'APPLICATION_ANSWER_RATE\' | translate}} (%)\n </div>\n </div>\n </div>\n </div>\n <div class="col-lg-3 col-md-3 col-sm-6 col-xs-12">\n <div class="dashboard-stat red-intense">\n <div class="visual">\n <i class="icon-pie-chart"></i>\n </div>\n <div class="details">\n <div class="number">\n {{ (voice.abandonRate || 0) | number:2}}\n </div>\n <div class="desc">\n {{\'APPLICATION_ABANDON_RATE\' | translate}} (%)\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class="row">\n <div class="col-lg-6 col-md-6 col-sm-6 col-xs-12">\n <div class="dashboard-stat blue-madison">\n <div class="visual">\n <i class="icon-info"></i>\n </div>\n <div class="details">\n <div class="number">\n {{ voice.totalOffered || 0}}\n </div>\n <div class="desc">\n {{\'APPLICATION_TOTAL_OFFERED\' | translate}}\n </div>\n </div>\n </div>\n </div>\n <div class="col-lg-6 col-md-6 col-sm-6 col-xs-12">\n <div class="dashboard-stat purple-plum">\n <div class="visual">\n <i class="icon-info"></i>\n </div>\n <div class="details">\n <div class="number">\n {{ voice.unmanaged || 0 }}\n </div>\n <div class="desc">\n {{\'APPLICATION_UNMANAGED\' | translate}}\n </div>\n </div>\n </div>\n </div>\n </div>\n </fieldset>\n\n <fieldset>\n <legend>\n <span class="caption-subject">{{ \'APPLICATION_OUTBOUND\' | translate }}</span><small class="pull-right font-grey-cascade">{{ \'APPLICATION_TODAY_STATS\' | translate }}</small>\n </legend>\n\n <div class="row">\n <div class="col-lg-3 col-md-3 col-sm-6 col-xs-12">\n <div class="dashboard-stat blue-madison">\n <div class="visual">\n <i class="icon-call-out"></i>\n </div>\n <div class="details">\n <div class="number">\n {{ voice.outbound.manualOutbound || 0 }}\n </div>\n <div class="desc">\n {{\'APPLICATION_MANUAL_OUTBOUND\' | translate}}\n </div>\n </div>\n </div>\n </div>\n <div class="col-lg-3 col-md-3 col-sm-6 col-xs-12">\n <div class="dashboard-stat purple-plum">\n <div class="visual">\n <i class="icon-clock"></i>\n </div>\n <div class="details">\n <div class="number">\n {{ (voice.outbound.globalDuration || 0) | secToTime | date:\'HH:mm:ss\' }}\n </div>\n <div class="desc">\n {{\'APPLICATION_GLOBAL_DURATION\' | translate}}\n </div>\n </div>\n </div>\n </div>\n <div class="col-lg-3 col-md-3 col-sm-6 col-xs-12">\n <div class="dashboard-stat green-haze">\n <div class="visual">\n <i class="icon-like"></i>\n </div>\n <div class="details">\n <div class="number">\n {{ voice.outbound.answered || 0 }}\n </div>\n <div class="desc">\n {{\'APPLICATION_ANSWERED\' | translate}}\n </div>\n </div>\n </div>\n </div>\n <div class="col-lg-3 col-md-3 col-sm-6 col-xs-12">\n <div class="dashboard-stat red-intense">\n <div class="visual">\n <i class="icon-pie-chart"></i>\n </div>\n <div class="details">\n <div class="number">\n {{ (voice.outbound.avgDuration || 0) | secToTime | date:\'HH:mm:ss\' }}\n </div>\n <div class="desc">\n {{\'APPLICATION_AVG_DURATION\' | translate}} (%)\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class="row">\n <div class="col-lg-12 col-md-12 col-sm-12 col-xs-12">\n <div class="dashboard-stat blue-madison">\n <div class="visual">\n <i class="icon-pie-chart"></i>\n </div>\n <div class="details">\n <div class="number">\n {{ (voice.outbound.answerRate || 0) | number:2 }}\n </div>\n <div class="desc">\n {{\'APPLICATION_ANSWER_RATE\' | translate}} (%)\n </div>\n </div>\n </div>\n </div>\n </div>\n\n </fieldset>\n </div>\n</div>\n'),a.put("app/desk/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-handbag"></i>\n <a href="/desk/list">{{ \'APPLICATION_DESK_COM\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-handbag font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_DESK_COM\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="accounts.checked.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <a class="btn green-jungle" href="/desk/wizard">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_ACCOUNT\' | translate }}\n </a>\n </div>\n <a class="btn btn-icon-only btn-default" href="#" ng-csv="getAccounts([\'name\',\'username\',\'remoteUri\',\'authType\',\'consumerKey\',\'consumerSecret\',\'token\',\'tokenSecret\',\'password\'])" csv-header="[\'Name\', \'Username\', \'Remote Address\', \'Authentication Type\', \'Consumer Key\', \'Consumer Secret\', \'Token\', \'Token Secret\', \'Password\']" field-separator=";" filename="desk_accounts.csv">\n <i class="icon-cloud-download"></i></a>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <table st-table="displayedDeskAccounts" st-pipe="initList" class="table table-striped table-bordered table-hover">\n <div class="table-responsive">\n <thead>\n <tr>\n <th colspan="7">\n <div class="row">\n <div class="col-md-6">\n <ui-select class="input-xsmall" ng-model="conf.accountsByPage" theme="bootstrap" ng-disabled="disabled">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="accountByPage in accountsByPage | filter: $select.search">\n <div ng-bind-html="accountByPage.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <div class="col-md-6">\n <div class="input-group input-medium pull-right">\n <input st-search placeholder="{{ \'APPLICATION_SEARCH\' | translate }}" class="form-control" type="search" />\n <span class="input-group-addon">\n <i class="fa fa-search"></i>\n </span>\n </div>\n </div>\n </div>\n </th>\n </tr>\n <tr>\n <th class="small-cells" style="text-align: center; vertical-align: middle"><input type="checkbox" ng-change="check(account, checked)" checklist-model checklist-value="id"></th>\n <th st-sort="name">{{ \'APPLICATION_NAME\' | translate }}</th>\n <th st-sort="username">{{ \'APPLICATION_EMAIL\' | translate }}</th>\n <th st-sort="remoteUri">{{ \'APPLICATION_REMOTE_ADDRESS\' | translate }}</th>\n <th>{{ \'APPLICATION_DESCRIPTION\' | translate }}</th>\n <th>{{ \'APPLICATION_ACTIONS\' | translate }}</th>\n </tr>\n </thead>\n <tbody>\n <tr data-ng-repeat="account in displayedDeskAccounts" class="animate-repeat">\n <td style="text-align: center; vertical-align: middle"><input type="checkbox" checklist-model="accounts.checked" checklist-value="account.id"></td>\n <td>{{account.name}}</td>\n <td>{{account.username}}</td>\n <td>{{account.remoteUri}}</td>\n <td>{{account.description}}</td>\n <td>\n <a class="btn default btn-xs blue-stripe" data-ng-href="/desk/view/{{account.id}}/account">\n {{ \'APPLICATION_EDIT\' | translate }}\n </a>\n <a class="btn default btn-xs green-stripe" data-ng-click="checkAccount(account.id)">\n {{ \'APPLICATION_CHECK\' | translate }}\n </a>\n <a class="btn default btn-xs red-stripe" data-ng-click="deleteItem(account.name,account.id)">\n {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </td>\n </tr>\n <tr data-ng-hide="displayedDeskAccounts.length">\n <td colspan="7" style="text-align:center;">\n <i>No account available</i>\n </td>\n </tr>\n </tbody>\n <tfoot>\n <tr>\n <td/>\n <td>\n <div class="input-icon right">\n <i class="fa fa-search"></i>\n <input st-search="name" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_NAME\' | translate | lowercase}}" class="form-control" type="search"/>\n </div>\n </td>\n <td>\n <div class="input-icon right">\n <i class="fa fa-search"></i>\n <input st-search="email" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_EMAIL\' | translate | lowercase}}" class="form-control" type="search"/>\n </div>\n </td>\n <td>\n <div class="input-icon right">\n <i class="fa fa-search"></i>\n <input st-search="remoteUri" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_REMOTE_ADDRESS\' | translate | lowercase}}" class="form-control" type="search"/>\n </div>\n </td>\n <td/>\n <td/>\n </tr>\n <tr>\n <td colspan="7" class="text-center">\n <div class="pagination" st-pagination st-items-by-page="conf.accountsByPage.value" st-displayed-pages="7"></div>\n </td>\n </tr>\n </tfoot>\n </div>\n </table>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'), +a.put("app/desk/view/view.account.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_ACCOUNT\' | translate}}</span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_GENERALS\' | translate}}</a>\n </li>\n </ul>\n </div>\n <div class="portlet-body">\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.formSetting" data-ng-submit="forms.formSetting.$valid && updateItem()" novalidate>\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="account.name" required/>\n <span data-ng-show="forms.formSetting.name.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="account.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n <!-- START USERNAME -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.username.$invalid}">\n <label class="control-label">{{\'APPLICATION_USERNAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="username" placeholder="{{\'APPLICATION_USERNAME\' | translate}}" class="form-control" data-ng-model="account.username" required/>\n <span data-ng-show="forms.formSetting.username.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n\n <!-- START REMOTE ADDRESS -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.remoteUri.$invalid}">\n <label class="control-label">{{\'APPLICATION_REMOTE_ADDRESS\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="url" name="remoteUri" placeholder="{{\'APPLICATION_REMOTE_ADDRESS\' | translate}}" class="form-control" data-ng-model="account.remoteUri" required />\n <span data-ng-show="forms.formSetting.remoteUri.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n\n <!-- START AUTH TYPE -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.authType.$invalid}">\n <label class="control-label">{{\'APPLICATION_AUTHENTICATION_TYPE\' | translate}}</label>\n <ui-select data-ng-model="account.authType" name="authType" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_AUTHENTICATION_TYPE\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n <ui-select-choices repeat="type in [\'basic\', \'oauth\'] | filter: $select.search">\n <div data-ng-bind="type | capitalize | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.formSetting.authType.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- START AUTH TYPE -->\n\n <!-- START PASSWORD -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.password.$invalid}" ng-slide-down="account.authType == \'basic\'" lazy-render duration="1">\n <label class="control-label">{{\'APPLICATION_PASSWORD\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="password" name="password" placeholder="{{\'APPLICATION_PASSWORD\' | translate}}" class="form-control" data-ng-model="account.password" required/>\n <span data-ng-show="forms.formSetting.password.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PASSWORD -->\n\n <!-- START CONSUMER KEY -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.consumerKey.$invalid}" ng-slide-down="account.authType == \'oauth\'" lazy-render duration="1">\n <label class="control-label">{{\'APPLICATION_CONSUMER_KEY\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="consumerKey" placeholder="{{\'APPLICATION_CONSUMER_KEY\' | translate}}" class="form-control" data-ng-model="account.consumerKey" required/>\n <span data-ng-show="forms.formSetting.consumerKey.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CONSUMER KEY -->\n\n <!-- START CONSUMER SECRET -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.consumerSecret.$invalid}" ng-slide-down="account.authType == \'oauth\'" lazy-render duration="1">\n <label class="control-label">{{\'APPLICATION_CONSUMER_SECRET\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="consumerSecret" placeholder="{{\'APPLICATION_CONSUMER_SECRET\' | translate}}" class="form-control" data-ng-model="account.consumerSecret" required/>\n <span data-ng-show="forms.formSetting.consumerSecret.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CONSUMER SECRET -->\n\n <!-- START TOKEN -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.token.$invalid}" ng-slide-down="account.authType == \'oauth\'" lazy-render duration="1">\n <label class="control-label">{{\'APPLICATION_TOKEN\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="token" placeholder="{{\'APPLICATION_TOKEN\' | translate}}" class="form-control" data-ng-model="account.token" required/>\n <span data-ng-show="forms.formSetting.token.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TOKEN -->\n\n <!-- START TOKEN SECRET-->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.tokenSecret.$invalid}" ng-slide-down="account.authType == \'oauth\'" lazy-render duration="1">\n <label class="control-label">{{\'APPLICATION_TOKEN_SECRET\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="tokenSecret" placeholder="{{\'APPLICATION_TOKEN_SECRET\' | translate}}" class="form-control" data-ng-model="account.tokenSecret" required/>\n <span data-ng-show="forms.formSetting.tokenSecret.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TOKEN SECRET-->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END GENERAL TAB -->\n\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/desk/view/view.configuration.html",'<div class="row" data-ng-init="initConfiguration()">\n <div class="col-md-12">\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-notebook font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_CONFIGURATION\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="createConfiguration()">\n <wz-step title="{{\'APPLICATION_SETTINGS\' | translate}}" canexit="formValidation(formsConfiguration.info.$valid)">\n <form name="formsConfiguration.info" novalidate>\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': formsConfiguration.info.$submitted && formsConfiguration.info.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="configuration.name" required/>\n <span data-ng-show="formsConfiguration.info.name.$invalid && formsConfiguration.info.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="configuration.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" data-ng-click="goNext()"/>\n </form>\n </wz-step>\n\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n <input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n </wz-step>\n </wizard>\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/desk/view/view.configurationSettings.html",'<div class="row" data-ng-init="getConfiguration();getVariables();getFields();">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_CONFIGURATION\' | translate}}: {{configurationName}}</span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_SUBJECT\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_2" data-toggle="tab">{{\'APPLICATION_DESCRIPTION\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_3" data-toggle="tab">{{\'APPLICATION_FIELDS\' | translate}}</a>\n </li>\n </ul>\n </div>\n <div class="portlet-body">\n <div class="tab-content">\n <!-- SUBJECT TAB -->\n <div class="tab-pane ui-padding active" id="tab_1_1">\n <div class="row">\n <div class="col-md-11">\n <span class="caption-subject">All following fields will be join by blank space:</span>\n </div>\n <div class="col-md-1 pull-rigth">\n <button class="btn btn-icon-only green" data-ng-click="addItemSubject()"><i class="fa fa-plus"></i></button>\n </div>\n </div>\n <hr>\n <!-- <div ng-scrollbars ng-scrollbars-config="config"> -->\n <div class="row" data-ng-repeat="subjectItem in subjectConfig">\n <div class="col-md-3">\n <ui-select ng-model="subjectItem.type" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeType(subjectItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n <ui-select-choices repeat="item in fieldType | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search | capitalize"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <div class="col-md-8" data-ng-if="subjectItem.type==\'string\'">\n <div class="form-group">\n <input type="text" class="form-control" data-ng-model="subjectItem.content" data-ng-change="updateField(subjectItem)">\n </div>\n </div>\n <div class="col-md-8" data-ng-if="subjectItem.type==\'variable\'">\n <div class="form-group">\n <ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="subjectItem.VariableId" data-ng-change="updateField(subjectItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="variable.id as variable in variables | filter: $select.search">\n <div ng-bind-html="variable.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <div class="col-md-1">\n <div class="form-group">\n <button class="btn btn-icon-only red" data-ng-click="removeItem(subjectItem)"><i class="fa fa-times"></i></button>\n </div>\n </div>\n </div>\n <!-- </div> -->\n </div>\n <!-- END SUBJECT TAB -->\n <!-- DESCRIPTION TAB -->\n <div class="tab-pane ui-padding" id="tab_1_2">\n <div class="row">\n <div class="col-md-11">\n <span class="caption-subject">All following fields will be join by new line:</span>\n </div>\n <div class="col-md-1 pull-rigth">\n <button class="btn btn-icon-only green" data-ng-click="addItemDescription()"><i class="fa fa-plus"></i></button>\n </div>\n </div>\n <hr>\n <!-- <div ng-scrollbars ng-scrollbars-config="config"> -->\n <div class="row" data-ng-repeat="descriptionItem in descriptionConfig">\n <!-- <pre>\n {{descriptionItem|json}}\n </pre> -->\n <div class="col-md-2">\n <ui-select ng-model="descriptionItem.type" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeDescType(descriptionItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected | ucfirst}}</ui-select-match>\n <ui-select-choices repeat="item in descFieldType | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search | ucfirst"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <div class="col-md-9" data-ng-if="descriptionItem.type==\'string\'">\n <div class="form-group">\n <input type="text" class="form-control" data-ng-model="descriptionItem.content" data-ng-change="updateField(descriptionItem)">\n </div>\n </div>\n <div class="col-md-3" data-ng-if="descriptionItem.type==\'key_value\'">\n <input type="text" class="form-control" placeholder="Key" data-ng-model="descriptionItem.key" data-ng-change="updateField(descriptionItem)">\n </div>\n <div class="col-md-3" data-ng-if="descriptionItem.type==\'key_value\'">\n <ui-select ng-model="descriptionItem.keyType" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeDescType(descriptionItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n <ui-select-choices repeat="item in fieldType | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search | capitalize"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <div class="col-md-3" data-ng-if="descriptionItem.type==\'key_value\' && descriptionItem.keyType==\'string\'">\n <input type="text" class="form-control" placeholder="Value" data-ng-model="descriptionItem.keyContent" data-ng-change="updateField(descriptionItem)">\n </div>\n <div class="col-md-3" data-ng-if="descriptionItem.type==\'key_value\' && descriptionItem.keyType==\'variable\'">\n <div class="form-group">\n <ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="descriptionItem.VariableId" data-ng-change="updateField(descriptionItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="variable.id as variable in variables | filter: $select.search">\n <div ng-bind-html="variable.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <div class="col-md-1">\n <div class="form-group">\n <button class="btn btn-icon-only red" data-ng-click="removeItem(descriptionItem)"><i class="fa fa-times"></i></button>\n </div>\n </div>\n </div>\n <!-- </div> -->\n </div>\n <!-- END DESCRIPTION TAB -->\n <!-- FIELDS TAB -->\n <div class="tab-pane ui-padding" id="tab_1_3">\n <div class="row">\n <div class="col-md-11">\n <span class="caption-subject">Add how to fill the fields present in your account:</span>\n </div>\n <div class="col-md-1 pull-rigth">\n <button class="btn btn-icon-only green" data-ng-click="addItemField()"><i class="fa fa-plus"></i></button>\n </div>\n </div>\n <hr>\n <!-- <div ng-scrollbars ng-scrollbars-config="config"> -->\n <div class="row" data-ng-repeat="fieldItem in fieldConfig">\n <div class="col-md-3">\n <ui-select ng-model="fieldItem.idField" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeFieldType(fieldItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.label}}</ui-select-match>\n <ui-select-choices repeat="item.id as item in accountFields | filter: $select.search">\n <div ng-bind-html="item.label | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <div class="col-md-8" data-ng-if="getSystemFieldOptions(fieldItem.idField)">\n <div class="form-group">\n <ui-select ng-model="fieldItem.content" theme="bootstrap" ng-disabled="disabled" data-ng-change="updateField(fieldItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="item in getSystemFieldOptions(fieldItem.idField) | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField)">\n <div class="form-group">\n <ui-select ng-model="fieldItem.type" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeType(fieldItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected | ucfirst}}</ui-select-match>\n <ui-select-choices repeat="item in fieldType | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search | ucfirst"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField) && fieldItem.type === \'string\'">\n <div class="form-group">\n <input type="text" class="form-control" data-ng-model="fieldItem.content" data-ng-change="updateField(fieldItem)">\n </div>\n </div>\n <div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField) && fieldItem.type === \'variable\'">\n <div class="form-group">\n <ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="fieldItem.VariableId" data-ng-change="updateField(fieldItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="variable.id as variable in variables | filter: $select.search">\n <div ng-bind-html="variable.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <div class="col-md-1">\n <div class="form-group">\n <button class="btn btn-icon-only red" data-ng-click="removeItem(fieldItem)"><i class="fa fa-times"></i></button>\n </div>\n </div>\n </div>\n <!-- </div> -->\n </div>\n <!-- END FIELDS TAB -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/desk/view/view.configurations.html",'<div ui-view class="profile-content">\n <div class="row" data-ng-init="getConfigurations()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_CONFIGURATIONS\' | translate}}</span>\n </div>\n <div class="actions">\n <div class="btn-group">\n <a class="btn green-jungle " href="/desk/view/{{account.id}}/configuration" data-toggle="dropdown">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_CONFIGURATION\' | translate }}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <table class="table table-striped table-bordered table-hover">\n <thead>\n <tr>\n <th>{{\'APPLICATION_NAME\' | translate}}</th>\n <th>{{\'APPLICATION_DESCRIPTION\' | translate}}</th>\n <th>{{ \'APPLICATION_ACTIONS\' | translate }}</th>\n </tr>\n </thead>\n <tbody>\n <tr data-ng-repeat="configuration in configurations">\n <td>{{configuration.name}}</td>\n <td>{{configuration.description}}</td>\n <td>\n <a class="btn default btn-xs blue-stripe" data-ng-href="/desk/view/{{account.id}}/configurations/settings/{{configuration.id}}">\n {{ \'APPLICATION_SETTINGS\' | translate}}\n </a>\n <a class="btn default btn-xs red-stripe" data-ng-click="deleteConfiguration(configuration.name,configuration.id)">\n {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </td>\n </tr>\n <tr data-ng-hide="configurations.length">\n <td colspan="5" style="text-align:center;">\n <i>No configuration available</i>\n </td>\n </tr>\n </tbody>\n </table>\n <!-- END TABLE -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/desk/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-handbag"></i>\n <a href="/desk/list">{{ \'APPLICATION_DESK_COM\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <a href="#">{{account.name}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img src="assets/images/media/desk.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{account.name}}\n </div>\n <div class="profile-usertitle-job">\n {{account.remoteUri}}\n </div>\n </div>\n <!-- END SIDEBAR USER TITLE -->\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.desk.view.account\')}">\n <a ng-href="/desk/view/{{account.id}}/account">\n <i class="icon-user"></i>\n {{ \'APPLICATION_ACCOUNT\' | translate }} </a>\n </li>\n <li data-ng-class="{active: $state.includes(\'main.desk.view.configurations\') || $state.is(\'main.desk.view.configuration\')}">\n <a ng-href="/desk/view/{{account.id}}/configurations">\n <i class="icon-settings"></i>\n {{ \'APPLICATION_CONFIGURATIONS\' | translate }} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/desk/wizard/wizard.html",'<!-- BEGIN PAGE HEADER-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-handbag"></i>\n <a href="/desk/list">{{ \'APPLICATION_DESK_COM\' | translate }}</a>\n </li>\n </ul>\n </div>\n </div>\n</div>\n<!-- END PAGE HEADER-->\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initWizard()">\n <div class="col-md-12">\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-notebook font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_ACCOUNT\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="createItem()">\n <wz-step title="{{\'APPLICATION_ACCOUNT_INFO\' | translate}}" canexit="exitValidation(forms.formSetting.$valid)">\n <form name="forms.formSetting" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="forms.formSetting.name.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n <!-- START USERNAME -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.username.$invalid}">\n <label class="control-label">{{\'APPLICATION_USERNAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="username" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.username" required ng-remote-validate="/api/desk/accounts/validate/username"/>\n <span data-ng-show="forms.formSetting.username.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.formSetting.username.$touched || forms.formSetting.$submitted) && forms.formSetting.username.$error.ngRemoteValidate" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_EXIST_USERNAME\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n\n\n <!-- START REMOTE ADDRESS -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.remoteUri.$invalid}">\n <label class="control-label">{{\'APPLICATION_REMOTE_ADDRESS\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="url" name="remoteUri" placeholder="{{\'APPLICATION_REMOTE_ADDRESS\' | translate}}" class="form-control" data-ng-model="item.remoteUri" required ng-remote-validate="/api/desk/accounts/validate/remoteUri"/>\n <span data-ng-show="forms.formSetting.remoteUri.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.formSetting.remoteUri.$touched || forms.formSetting.$submitted) && forms.formSetting.remoteUri.$error.ngRemoteValidate" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_EXIST_DOMAIN\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n\n <!-- START AUTH TYPE -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.authType.$invalid}">\n <label class="control-label">{{\'APPLICATION_AUTHENTICATION_TYPE\' | translate}}</label>\n <ui-select data-ng-model="item.authType" name="authType" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_AUTHENTICATION_TYPE\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n <ui-select-choices repeat="type in [\'basic\', \'oauth\'] | filter: $select.search">\n <div data-ng-bind="type | capitalize | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.formSetting.authType.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- START AUTH TYPE -->\n\n <!-- START PASSWORD -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.password.$invalid}" ng-slide-down="item.authType == \'basic\'" lazy-render duration="1">\n <label class="control-label">{{\'APPLICATION_PASSWORD\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="password" name="password" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.password" required/>\n <span data-ng-show="forms.formSetting.password.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PASSWORD -->\n\n <!-- START CONSUMER KEY -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.consumerKey.$invalid}" ng-slide-down="item.authType == \'oauth\'" lazy-render duration="1">\n <label class="control-label">{{\'APPLICATION_CONSUMER_KEY\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="consumerKey" placeholder="{{\'APPLICATION_CONSUMER_KEY\' | translate}}" class="form-control" data-ng-model="item.consumerKey" required/>\n <span data-ng-show="forms.formSetting.consumerKey.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CONSUMER KEY -->\n\n <!-- START CONSUMER SECRET -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.consumerSecret.$invalid}" ng-slide-down="item.authType == \'oauth\'" lazy-render duration="1">\n <label class="control-label">{{\'APPLICATION_CONSUMER_SECRET\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="consumerSecret" placeholder="{{\'APPLICATION_CONSUMER_SECRET\' | translate}}" class="form-control" data-ng-model="item.consumerSecret" required/>\n <span data-ng-show="forms.formSetting.consumerSecret.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CONSUMER SECRET -->\n\n <!-- START TOKEN -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.token.$invalid}" ng-slide-down="item.authType == \'oauth\'" lazy-render duration="1">\n <label class="control-label">{{\'APPLICATION_TOKEN\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="token" placeholder="{{\'APPLICATION_TOKEN\' | translate}}" class="form-control" data-ng-model="item.token" required/>\n <span data-ng-show="forms.formSetting.token.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TOKEN -->\n\n <!-- START TOKEN SECRET-->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.tokenSecret.$invalid}" ng-slide-down="item.authType == \'oauth\'" lazy-render duration="1">\n <label class="control-label">{{\'APPLICATION_TOKEN_SECRET\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="tokenSecret" placeholder="{{\'APPLICATION_TOKEN_SECRET\' | translate}}" class="form-control" data-ng-model="item.tokenSecret" required/>\n <span data-ng-show="forms.formSetting.tokenSecret.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TOKEN SECRET-->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" data-ng-click="next()"/>\n\n </form>\n </wz-step>\n\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n <input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n </wz-step>\n\n </wizard>\n\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'), +a.put("app/freshdesk/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-handbag"></i>\n <a href="/freshdesk/list">{{ \'APPLICATION_FRESHDESK\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-handbag font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_FRESHDESK\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="accounts.checked.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <a class="btn green-jungle" href="/freshdesk/wizard">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_ACCOUNT\' | translate }}\n </a>\n </div>\n <a class="btn btn-icon-only btn-default" href="#" ng-csv="getAccounts([\'name\',\'username\',\'remoteUri\',\'apiKey\'])" csv-header="[\'Name\', \'Username\', \'Remote Address\', \'Api Key\']" field-separator=";" filename="freshdesk_accounts.csv">\n <i class="icon-cloud-download"></i></a>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <table st-table="displayedFreshdeskAccounts" st-pipe="initList" class="table table-striped table-bordered table-hover">\n <div class="table-responsive">\n <thead>\n <tr>\n <th colspan="7">\n <div class="row">\n <div class="col-md-6">\n <ui-select class="input-xsmall" ng-model="conf.accountsByPage" theme="bootstrap" ng-disabled="disabled">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="accountByPage in accountsByPage | filter: $select.search">\n <div ng-bind-html="accountByPage.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <div class="col-md-6">\n <div class="input-group input-medium pull-right">\n <input st-search placeholder="{{ \'APPLICATION_SEARCH\' | translate }}" class="form-control" type="search" />\n <span class="input-group-addon">\n <i class="fa fa-search"></i>\n </span>\n </div>\n </div>\n </div>\n </th>\n </tr>\n <tr>\n <th class="small-cells" style="text-align: center; vertical-align: middle"><input type="checkbox" ng-change="check(account, checked)" checklist-model checklist-value="id"></th>\n <th st-sort="name">{{ \'APPLICATION_NAME\' | translate }}</th>\n <th st-sort="username">{{ \'APPLICATION_EMAIL\' | translate }}</th>\n <th st-sort="remoteUri">{{ \'APPLICATION_REMOTE_ADDRESS\' | translate }}</th>\n <th>{{ \'APPLICATION_DESCRIPTION\' | translate }}</th>\n <th>{{ \'APPLICATION_ACTIONS\' | translate }}</th>\n </tr>\n </thead>\n <tbody>\n <tr data-ng-repeat="account in displayedFreshdeskAccounts" class="animate-repeat">\n <td style="text-align: center; vertical-align: middle"><input type="checkbox" checklist-model="accounts.checked" checklist-value="account.id"></td>\n <td>{{account.name}}</td>\n <td>{{account.username}}</td>\n <td>{{account.remoteUri}}</td>\n <td>{{account.description}}</td>\n <td>\n <a class="btn default btn-xs blue-stripe" data-ng-href="/freshdesk/view/{{account.id}}/account">\n {{ \'APPLICATION_EDIT\' | translate }}\n </a>\n <a class="btn default btn-xs green-stripe" data-ng-click="checkAccount(account.id)">\n {{ \'APPLICATION_CHECK\' | translate }}\n </a>\n <a class="btn default btn-xs red-stripe" data-ng-click="deleteItem(account.name,account.id)">\n {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </td>\n </tr>\n <tr data-ng-hide="displayedFreshdeskAccounts.length">\n <td colspan="7" style="text-align:center;">\n <i>No account available</i>\n </td>\n </tr>\n </tbody>\n <tfoot>\n <tr>\n <td/>\n <td>\n <div class="input-icon right">\n <i class="fa fa-search"></i>\n <input st-search="name" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_NAME\' | translate | lowercase}}" class="form-control" type="search"/>\n </div>\n </td>\n <td>\n <div class="input-icon right">\n <i class="fa fa-search"></i>\n <input st-search="email" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_EMAIL\' | translate | lowercase}}" class="form-control" type="search"/>\n </div>\n </td>\n <td>\n <div class="input-icon right">\n <i class="fa fa-search"></i>\n <input st-search="remoteUri" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_REMOTE_ADDRESS\' | translate | lowercase}}" class="form-control" type="search"/>\n </div>\n </td>\n <td/>\n <td/>\n </tr>\n <tr>\n <td colspan="7" class="text-center">\n <div class="pagination" st-pagination st-items-by-page="conf.accountsByPage.value" st-displayed-pages="7"></div>\n </td>\n </tr>\n </tfoot>\n </div>\n </table>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/freshdesk/view/view.account.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_ACCOUNT\' | translate}}</span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_GENERALS\' | translate}}</a>\n </li>\n </ul>\n </div>\n <div class="portlet-body">\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.formSetting" data-ng-submit="forms.formSetting.$valid && updateItem()" novalidate>\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="account.name" required/>\n <span data-ng-show="forms.formSetting.name.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="account.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n <!-- START USERNAME -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.username.$invalid}">\n <label class="control-label">{{\'APPLICATION_USERNAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="username" placeholder="{{\'APPLICATION_USERNAME\' | translate}}" class="form-control" data-ng-model="account.username" required/>\n <span data-ng-show="forms.formSetting.username.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n\n <!-- START REMOTE ADDRESS -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.remoteUri.$invalid}">\n <label class="control-label">{{\'APPLICATION_REMOTE_ADDRESS\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="url" name="remoteUri" placeholder="{{\'APPLICATION_REMOTE_ADDRESS\' | translate}}" class="form-control" data-ng-model="account.remoteUri" required />\n <span data-ng-show="forms.formSetting.remoteUri.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n\n <!-- START API KEY -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.apiKey.$invalid}">\n <label class="control-label">{{\'APPLICATION_API_KEY\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="apiKey" placeholder="{{\'APPLICATION_API_KEY\' | translate}}" class="form-control" data-ng-model="account.apiKey" required/>\n <span data-ng-show="forms.formSetting.apiKey.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END API KEY -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END GENERAL TAB -->\n\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/freshdesk/view/view.configuration.html",'<div class="row" data-ng-init="initConfiguration()">\n <div class="col-md-12">\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-notebook font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_CONFIGURATION\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="createConfiguration()">\n <wz-step title="{{\'APPLICATION_SETTINGS\' | translate}}" canexit="formValidation(formsConfiguration.info.$valid)">\n <form name="formsConfiguration.info" novalidate>\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': formsConfiguration.info.$submitted && formsConfiguration.info.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="configuration.name" required/>\n <span data-ng-show="formsConfiguration.info.name.$invalid && formsConfiguration.info.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="configuration.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" data-ng-click="goNext()"/>\n </form>\n </wz-step>\n\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n <input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n </wz-step>\n </wizard>\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/freshdesk/view/view.configurationSettings.html",'<div class="row" data-ng-init="getConfiguration();getVariables();getFields();">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_CONFIGURATION\' | translate}}: {{configurationName}}</span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_SUBJECT\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_2" data-toggle="tab">{{\'APPLICATION_DESCRIPTION\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_3" data-toggle="tab">{{\'APPLICATION_FIELDS\' | translate}}</a>\n </li>\n </ul>\n </div>\n <div class="portlet-body">\n <div class="tab-content">\n <!-- SUBJECT TAB -->\n <div class="tab-pane ui-padding active" id="tab_1_1">\n <div class="row">\n <div class="col-md-11">\n <span class="caption-subject">All following fields will be join by blank space:</span>\n </div>\n <div class="col-md-1 pull-rigth">\n <button class="btn btn-icon-only green" data-ng-click="addItemSubject()"><i class="fa fa-plus"></i></button>\n </div>\n </div>\n <hr>\n <!-- <div ng-scrollbars ng-scrollbars-config="config"> -->\n <div class="row" data-ng-repeat="subjectItem in subjectConfig">\n <div class="col-md-3">\n <ui-select ng-model="subjectItem.type" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeType(subjectItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n <ui-select-choices repeat="item in fieldType | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search | capitalize"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <div class="col-md-8" data-ng-if="subjectItem.type==\'string\'">\n <div class="form-group">\n <input type="text" class="form-control" data-ng-model="subjectItem.content" data-ng-change="updateField(subjectItem)">\n </div>\n </div>\n <div class="col-md-8" data-ng-if="subjectItem.type==\'variable\'">\n <div class="form-group">\n <ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="subjectItem.VariableId" data-ng-change="updateField(subjectItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="variable.id as variable in variables | filter: $select.search">\n <div ng-bind-html="variable.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <div class="col-md-1">\n <div class="form-group">\n <button class="btn btn-icon-only red" data-ng-click="removeItem(subjectItem)"><i class="fa fa-times"></i></button>\n </div>\n </div>\n </div>\n <!-- </div> -->\n </div>\n <!-- END SUBJECT TAB -->\n <!-- DESCRIPTION TAB -->\n <div class="tab-pane ui-padding" id="tab_1_2">\n <div class="row">\n <div class="col-md-11">\n <span class="caption-subject">All following fields will be join by new line:</span>\n </div>\n <div class="col-md-1 pull-rigth">\n <button class="btn btn-icon-only green" data-ng-click="addItemDescription()"><i class="fa fa-plus"></i></button>\n </div>\n </div>\n <hr>\n <!-- <div ng-scrollbars ng-scrollbars-config="config"> -->\n <div class="row" data-ng-repeat="descriptionItem in descriptionConfig">\n <!-- <pre>\n {{descriptionItem|json}}\n </pre> -->\n <div class="col-md-2">\n <ui-select ng-model="descriptionItem.type" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeDescType(descriptionItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected | ucfirst}}</ui-select-match>\n <ui-select-choices repeat="item in descFieldType | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search | ucfirst"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <div class="col-md-9" data-ng-if="descriptionItem.type==\'string\'">\n <div class="form-group">\n <input type="text" class="form-control" data-ng-model="descriptionItem.content" data-ng-change="updateField(descriptionItem)">\n </div>\n </div>\n <div class="col-md-3" data-ng-if="descriptionItem.type==\'key_value\'">\n <input type="text" class="form-control" placeholder="Key" data-ng-model="descriptionItem.key" data-ng-change="updateField(descriptionItem)">\n </div>\n <div class="col-md-3" data-ng-if="descriptionItem.type==\'key_value\'">\n <ui-select ng-model="descriptionItem.keyType" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeDescType(descriptionItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n <ui-select-choices repeat="item in fieldType | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search | capitalize"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <div class="col-md-3" data-ng-if="descriptionItem.type==\'key_value\' && descriptionItem.keyType==\'string\'">\n <input type="text" class="form-control" placeholder="Value" data-ng-model="descriptionItem.keyContent" data-ng-change="updateField(descriptionItem)">\n </div>\n <div class="col-md-3" data-ng-if="descriptionItem.type==\'key_value\' && descriptionItem.keyType==\'variable\'">\n <div class="form-group">\n <ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="descriptionItem.VariableId" data-ng-change="updateField(descriptionItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="variable.id as variable in variables | filter: $select.search">\n <div ng-bind-html="variable.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <div class="col-md-1">\n <div class="form-group">\n <button class="btn btn-icon-only red" data-ng-click="removeItem(descriptionItem)"><i class="fa fa-times"></i></button>\n </div>\n </div>\n </div>\n <!-- </div> -->\n </div>\n <!-- END DESCRIPTION TAB -->\n <!-- FIELDS TAB -->\n <div class="tab-pane ui-padding" id="tab_1_3">\n <div class="row">\n <div class="col-md-11">\n <span class="caption-subject">Add how to fill the fields present in your account:</span>\n </div>\n <div class="col-md-1 pull-rigth">\n <button class="btn btn-icon-only green" data-ng-click="addItemField()"><i class="fa fa-plus"></i></button>\n </div>\n </div>\n <hr>\n <!-- <div ng-scrollbars ng-scrollbars-config="config"> -->\n <div class="row" data-ng-repeat="fieldItem in fieldConfig">\n <div class="col-md-3">\n <ui-select ng-model="fieldItem.idField" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeFieldType(fieldItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.label}}</ui-select-match>\n <ui-select-choices repeat="item.name as item in accountFields | filter: $select.search">\n <div ng-bind-html="item.label | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <div class="col-md-8" data-ng-if="getSystemFieldOptions(fieldItem.idField)">\n <div class="form-group">\n <ui-select ng-model="fieldItem.content" theme="bootstrap" ng-disabled="disabled" data-ng-change="updateField(fieldItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected[0]}}</ui-select-match>\n <ui-select-choices repeat="item[0] as item in getSystemFieldOptions(fieldItem.idField) | filter: $select.search">\n <div ng-bind-html="item[0] | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField)">\n <div class="form-group">\n <ui-select ng-model="fieldItem.type" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeType(fieldItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected | ucfirst}}</ui-select-match>\n <ui-select-choices repeat="item in fieldType | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search | ucfirst"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField) && fieldItem.type === \'string\'">\n <div class="form-group">\n <input type="text" class="form-control" data-ng-model="fieldItem.content" data-ng-change="updateField(fieldItem)">\n </div>\n </div>\n <div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField) && fieldItem.type === \'variable\'">\n <div class="form-group">\n <ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="fieldItem.VariableId" data-ng-change="updateField(fieldItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="variable.id as variable in variables | filter: $select.search">\n <div ng-bind-html="variable.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <div class="col-md-1">\n <div class="form-group">\n <button class="btn btn-icon-only red" data-ng-click="removeItem(fieldItem)"><i class="fa fa-times"></i></button>\n </div>\n </div>\n </div>\n <!-- </div> -->\n </div>\n <!-- END FIELDS TAB -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/freshdesk/view/view.configurations.html",'<div ui-view class="profile-content">\n <div class="row" data-ng-init="getConfigurations()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_CONFIGURATIONS\' | translate}}</span>\n </div>\n <div class="actions">\n <div class="btn-group">\n <a class="btn green-jungle " href="/freshdesk/view/{{account.id}}/configuration" data-toggle="dropdown">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_CONFIGURATION\' | translate }}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <table class="table table-striped table-bordered table-hover">\n <thead>\n <tr>\n <th>{{\'APPLICATION_NAME\' | translate}}</th>\n <th>{{\'APPLICATION_DESCRIPTION\' | translate}}</th>\n <th>{{ \'APPLICATION_ACTIONS\' | translate }}</th>\n </tr>\n </thead>\n <tbody>\n <tr data-ng-repeat="configuration in configurations">\n <td>{{configuration.name}}</td>\n <td>{{configuration.description}}</td>\n <td>\n <a class="btn default btn-xs blue-stripe" data-ng-href="/freshdesk/view/{{account.id}}/configurations/settings/{{configuration.id}}">\n {{ \'APPLICATION_SETTINGS\' | translate}}\n </a>\n <a class="btn default btn-xs red-stripe" data-ng-click="deleteConfiguration(configuration.name,configuration.id)">\n {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </td>\n </tr>\n <tr data-ng-hide="configurations.length">\n <td colspan="5" style="text-align:center;">\n <i>No configuration available</i>\n </td>\n </tr>\n </tbody>\n </table>\n <!-- END TABLE -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/freshdesk/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-handbag"></i>\n <a href="/freshdesk/list">{{ \'APPLICATION_FRESHDESK\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <a href="#">{{account.name}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img src="assets/images/media/freshdesk.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{account.name}}\n </div>\n <div class="profile-usertitle-job">\n {{account.remoteUri}}\n </div>\n </div>\n <!-- END SIDEBAR USER TITLE -->\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.freshdesk.view.account\')}">\n <a ng-href="/freshdesk/view/{{account.id}}/account">\n <i class="icon-user"></i>\n {{ \'APPLICATION_ACCOUNT\' | translate }} </a>\n </li>\n <li data-ng-class="{active: $state.includes(\'main.freshdesk.view.configurations\') || $state.is(\'main.freshdesk.view.configuration\')}">\n <a ng-href="/freshdesk/view/{{account.id}}/configurations">\n <i class="icon-settings"></i>\n {{ \'APPLICATION_CONFIGURATIONS\' | translate }} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/freshdesk/wizard/wizard.html",'<!-- BEGIN PAGE HEADER-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-handbag"></i>\n <a href="/freshdesk/list">{{ \'APPLICATION_FRESHDESK\' | translate }}</a>\n </li>\n </ul>\n </div>\n </div>\n</div>\n<!-- END PAGE HEADER-->\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initWizard()">\n <div class="col-md-12">\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-notebook font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_ACCOUNT\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="createItem()">\n <wz-step title="{{\'APPLICATION_ACCOUNT_INFO\' | translate}}" canexit="exitValidation(forms.formSetting.$valid)">\n <form name="forms.formSetting" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="forms.formSetting.name.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n <!-- START USERNAME -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.username.$invalid}">\n <label class="control-label">{{\'APPLICATION_USERNAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="username" placeholder="{{\'APPLICATION_USERNAME\' | translate}}" class="form-control" data-ng-model="item.username" required ng-remote-validate="/api/freshdesk/accounts/validate/username"/>\n <span data-ng-show="forms.formSetting.username.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.formSetting.username.$touched || forms.formSetting.$submitted) && forms.formSetting.username.$error.ngRemoteValidate" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_EXIST_USERNAME\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n\n\n <!-- START REMOTE ADDRESS -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.remoteUri.$invalid}">\n <label class="control-label">{{\'APPLICATION_REMOTE_ADDRESS\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="url" name="remoteUri" placeholder="{{\'APPLICATION_REMOTE_ADDRESS\' | translate}}" class="form-control" data-ng-model="item.remoteUri" required ng-remote-validate="/api/freshdesk/accounts/validate/remoteUri"/>\n <span data-ng-show="forms.formSetting.remoteUri.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.formSetting.remoteUri.$touched || forms.formSetting.$submitted) && forms.formSetting.remoteUri.$error.ngRemoteValidate" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_EXIST_DOMAIN\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n\n <!-- START API KEY -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.apiKey.$invalid}">\n <label class="control-label">{{\'APPLICATION_API_KEY\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="apiKey" placeholder="{{\'APPLICATION_API_KEY\' | translate}}" class="form-control" data-ng-model="item.apiKey" required/>\n <span data-ng-show="forms.formSetting.apiKey.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END API KEY -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" data-ng-click="next()"/>\n\n </form>\n </wz-step>\n\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n <input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n </wz-step>\n\n </wizard>\n\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'), +a.put("app/iframe/view/view.html",'<!-- BEGIN PAGE CONTENT-->\r\n<div class="row" data-ng-init="initView()">\r\n <div class="col-md-12">\r\n <div class="page-bar">\r\n <ul class="page-breadcrumb">\r\n <li>\r\n <i class="icon-rocket"></i>\r\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\r\n <i class="fa fa-angle-right"></i>\r\n </li>\r\n <li>\r\n <i class="fa fa-chrome"></i>\r\n <a href="#" data-ng-if="!Auth.isAgent()">{{ \'APPLICATION_IFRAME\' | translate }}</a>\r\n <a href="#" data-ng-if="Auth.isAgent()">{{ iframe.title || iframe.name}}</a>\r\n </li>\r\n </ul>\r\n </div>\r\n\r\n <!-- BEGIN PROFILE SIDEBAR -->\r\n <div class="profile-sidebar" data-ng-if="!Auth.isAgent()">\r\n <!-- PORTLET MAIN -->\r\n <div class="portlet light profile-sidebar-portlet">\r\n <!-- SIDEBAR USERPIC -->\r\n <div class="profile-image">\r\n <img src="assets/images/media/iframe.png" class="img-responsive">\r\n </div>\r\n <!-- END SIDEBAR USERPIC -->\r\n <!-- SIDEBAR USER TITLE -->\r\n <div class="profile-usertitle">\r\n <div class="profile-usertitle-name">\r\n {{iframe.title}}\r\n </div>\r\n <div class="profile-usertitle-job">\r\n {{ \'APPLICATION_IFRAME\' | translate }}\r\n </div>\r\n </div>\r\n <!-- END SIDEBAR USER TITLE -->\r\n </div>\r\n <!-- END PORTLET MAIN -->\r\n </div>\r\n <!-- END BEGIN PROFILE SIDEBAR -->\r\n <!-- BEGIN PROFILE CONTENT -->\r\n <div class="profile-content" data-ng-if="!Auth.isAgent()">\r\n <div class="row">\r\n <div class="col-md-12">\r\n <div class="portlet light">\r\n <div class="portlet-title tabbable-line">\r\n <div class="caption caption-md">\r\n <i class="icon-globe theme-font hide"></i>\r\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_IFRAME\' | translate}}</span>\r\n </div>\r\n <ul class="nav nav-tabs">\r\n <li class="active">\r\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_GENERALS\' | translate}}</a>\r\n </li>\r\n </ul>\r\n </div>\r\n <div class="portlet-body">\r\n <div class="tab-content">\r\n <!-- GENERAL TAB -->\r\n <div class="tab-pane active" id="tab_1_1">\r\n <form name="forms.formSetting" data-ng-submit="forms.formSetting.$valid && updateItem()" novalidate>\r\n <!-- START NAME -->\r\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.name.$invalid}">\r\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}} <span class="required" aria-required="true">*</span></label>\r\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="iframe.title" required/>\r\n <span data-ng-show="forms.formSetting.name.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\r\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\r\n </span>\r\n </div>\r\n <!-- END NAME -->\r\n\r\n <!-- START REMOTE ADDRESS -->\r\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.remoteUri.$invalid}">\r\n <label class="control-label">{{\'APPLICATION_URL\' | translate}} <span class="required" aria-required="true">*</span></label>\r\n <input type="url" name="remoteUri" placeholder="{{\'APPLICATION_URL\' | translate}}" class="form-control" data-ng-model="iframe.remoteUri" required />\r\n <span data-ng-show="forms.formSetting.remoteUri.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\r\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\r\n </span>\r\n </div>\r\n <!-- END USERNAME -->\r\n\r\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}" />\r\n </form>\r\n </div>\r\n <!-- END GENERAL TAB -->\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- END PROFILE CONTENT -->\r\n\r\n <div class="row" data-ng-if="Auth.isAgent()">\r\n <div class="col-md-12">\r\n <iframe ng-if="url" style="height: 600px" src="{{url}}" />\r\n </div>\r\n </div>\r\n\r\n </div>\r\n</div>\r\n<!-- END PAGE CONTENT-->\r\n'),a.put("app/integration/list/list.html",'\n<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-game-controller"></i>\n <a href="/integrations/list">{{ \'APPLICATION_INTEGRATIONS\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initList()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-eye font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_INTEGRATIONS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <span class="btn green-jungle btn-file">\n <span> <i class="icon-plus"></i> New App </span>\n <input type="file" accept=".zip" nv-file-select="" uploader="uploader"/>\n </span>\n <a class="btn btn-icon-only btn-default" href="#" ng-csv="displayedIntegrations" filename="integrations.csv">\n <i class="icon-cloud-download"></i></a>\n <a class="btn btn-icon-only btn-default fullscreen" href="#"></a>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <table st-table="displayedIntegrations" st-safe-src="integrations" class="table table-striped table-bordered table-hover">\n <div class="table-responsive">\n <thead>\n <tr>\n <th colspan="6">\n <div class="row">\n <div class="col-md-6">\n <select class="form-control input-small select2me" data-ng-model="integrationsByPage">\n <option value="10">10</option>\n <option value="25">25</option>\n <option value="50">50</option>\n <option value="{{integrations.length}}">{{ \'APPLICATION_ALL\' | translate }}</option>\n </select>\n </div>\n <div class="col-md-6">\n <div class="input-group input-medium pull-right">\n <input st-search placeholder="{{ \'APPLICATION_SEARCH\' | translate }}" class="form-control" type="search" />\n <span class="input-group-addon">\n <i class="fa fa-search"></i>\n </span>\n </div>\n </div>\n </div>\n </th>\n </tr>\n <tr>\n <th st-sort="id" width="5%" st-sort-default="reverse">{{ \'APPLICATION_ID\' | translate }}</th>\n <th st-sort="fullname">{{ \'APPLICATION_NAME\' | translate }}</th>\n <th st-sort="name">{{ \'APPLICATION_FILENAME\' | translate }}</th>\n <th st-sort="name">{{ \'APPLICATION_VERSION\' | translate }}</th>\n <th st-sort="name">{{ \'APPLICATION_DESCRIPTION\' | translate }}</th>\n <th>{{ \'APPLICATION_ACTIONS\' | translate }}</th>\n </tr>\n </thead>\n <tbody>\n <tr data-ng-repeat="integration in displayedIntegrations">\n <td>{{integration.id}}</td>\n <td>{{integration.name}}</td>\n <td>{{integration.filename}}</td>\n <td>{{integration.version}}</td>\n <td>{{integration.description}}</td>\n <td>\n <span class="btn default btn-xs blue-stripe btn-file">\n <span> {{ \'APPLICATION_UPDATE\' | translate }} </span>\n <input type="file" accept=".zip" nv-file-select="" uploader="uploader"/>\n </span>\n <a class="btn default btn-xs red-stripe" data-ng-click="deleteItem(integration.name, integration.id)">\n {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </td>\n </tr>\n <tr data-ng-hide="integrations.length">\n <td colspan="6" style="text-align:center;">\n <i>No integrations available</i>\n </td>\n </tr>\n </tbody>\n <tfoot>\n <tr>\n <td>\n <div class="input-icon right">\n <i class="fa fa-search"></i>\n <input st-search="id" class="form-control" type="search"/>\n </div>\n </td>\n <td>\n <div class="input-icon right">\n <i class="fa fa-search"></i>\n <input st-search="name" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_NAME\' | translate | lowercase}}" class="form-control" type="search"/>\n </div>\n </td>\n <td>\n <div class="input-icon right">\n <i class="fa fa-search"></i>\n <input st-search="filename" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_FILENAME\' | translate | lowercase}}" class="form-control" type="search"/>\n </div>\n </td>\n <td>\n </td>\n <td>\n </td>\n <td>\n </td>\n </tr>\n <tr>\n <td colspan="6" class="text-center">\n <div st-pagination class="pagination" st-items-by-page="integrationsByPage" st-displayed-pages="7"></div>\n </td>\n </tr>\n </tfoot>\n </div>\n </table>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/jscripty/project/list/list.create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_PROJECT\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.name.$touched || form.$submitted) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/jscripty/project/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-slack"></i>\n <a href="/jscripty/projects/list">{{ \'APPLICATION_PROJECTS\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-docs font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_PROJECTS\' | translate }}</a> </span>\n </div>\n <div class="actions" ng-show="!Auth.isAgent()">\n <div class="btn-group">\n <a class="btn btn-default" href="#" data-ng-click="gridOptions.getPage();">\n <i class="icon-reload"></i>\n </a>\n </div>\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <a class="btn green-jungle" ng-click="createItem()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_PROJECT\' | translate }}\n </a>\n </div>\n <!-- <a class="btn btn-icon-only btn-default fullscreen" href="#"></a> -->\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n\n <!-- <div class="table-responsive"> -->\n\n\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/jscripty/project/report/report.detail.html",'<div class="portlet light bordered" data-ng-init="getProjectDetail();initView()">\n<div class="portlet-title">\n<div class="caption font-green-sharp">\n<i class="fa fa-list font-green-sharp"></i>\n<span class="caption-subject">{{ \'APPLICATION_SUMMARY\' | translate }}</a> </span>\n</div>\n<div class="actions">\n <div class="btn-group">\n <button class="btn btn-icon-only btn-primary" data-ng-click="pdf(\'header\',projectDetail)">\n <i class="fa fa-download"></i>\n </button>\n <!-- <button class="btn btn-icon-only btn-default" data-ng-click="accordion.expandAll()">\n <i class="fa fa-folder-open-o"></i>\n </button>\n <button class="btn btn-icon-only btn-default" data-ng-click="accordion.collapseAll()">\n <i class="fa fa-folder"></i>\n </button> -->\n </div>\n</div>\n</div>\n<div id=\'detail\' class="portlet-body">\n <div class="alert alert-success text-center" ng-show="!projectDetail.length">\n <h4>{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</h4>\n </div>\n <div class="row" ng-show="projectDetail.length">\n <div class="col-md-10 col-md-offset-1">\n <div id="header" class="panel panel-info">\n <div class="panel-heading">\n <strong>Project Name: </strong>{{project.name}}<br>\n <strong>Project Id: </strong>{{project.id}}<br>\n <strong>Completed: </strong>{{projectStats.completed}}<br>\n <strong>Incomplete: </strong>{{projectStats.incomplete}}<br>\n <strong>% Completed: </strong>{{projectStats.completed * 100 /(projectStats.completed + projectStats.incomplete) | number:2}}<br>\n </div>\n </div><br>\n <v-accordion class="vAccordion--default" multiple control="accordion">\n <v-pane id="{{question.question_id }}" ng-repeat="question in projectDetail" expanded="true">\n <v-pane-header>\n Question Id: {{question.question_id}}\n </v-pane-header>\n <v-pane-content>\n <div ng-class=" {{question.graphData.length > 0}} ? \'col-md-8\' : \'col-md-12\'">\n <div class="row">\n <div class="col-md-10 col-md-offset-1 ">\n <h4><strong>{{question.question_label}}</strong> : {{question.question_text}}</h4>\n <br><br>\n <table ng-if="question.choices.length" class="table table-hover" style="table-layout: fixed; width: 100%">\n <thead>\n <tr>\n <th>Response</th>\n <th> #Response </th>\n <th> % </th>\n </tr>\n </thead>\n <tbody>\n <tr ng-if="!choice.other_option" ng-repeat="choice in question.choices ">\n <td style="word-wrap: break-word">{{choice.value}}</td>\n <td>{{choice.count}}</td>\n <td>{{choice.percentage | number:2}}</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n <div class="row" ng-if="question.question_other_label">\n <!-- <div class="row" ng-if="choice.other_option" ng-repeat="choice in question.choices "> -->\n <!-- <div class="col-md-10 col-md-offset-1 ">\n <strong>{{choice.value}}</strong> <span class="badge">{{choice.count}}</span><br>\n </div> -->\n <!-- accordions can be nested :) -->\n <v-accordion >\n <v-pane >\n <!-- ng-repeat="subpane in pane.subpanes" ng-disabled="subpane.isDisabled" -->\n <v-pane-header>\n <strong>{{question.question_other_label}}</strong><br>\n </v-pane-header>\n <v-pane-content>\n <table ng-if="question.choices.length" class="table table-hover" style="table-layout: fixed; width: 100%">\n <thead>\n <tr>\n <th>Response</th>\n <th> #Response </th>\n <!-- <th> % </th> -->\n </tr>\n </thead>\n <tbody>\n\n <tr ng-if="choice.other_option" ng-repeat="choice in question.choices ">\n <td style="word-wrap: break-word">{{choice.value}}</td>\n <td>{{choice.count}}</td>\n <!-- <td>{{choice.percentage | number:2}}</td> -->\n </tr>\n </tbody>\n </table>\n </v-pane-content>\n </v-pane>\n </v-accordion>\n </div>\n <div class="row">\n <div class="col-md-10 col-md-offset-1 ">\n <h4> <strong>Total Respondents: {{question.total}}</strong></h4><br>\n </div>\n </div>\n </div>\n <div class=" col-md-4 pull-right " ng-if="question.graphType == \'bar\' && question.graphData">\n <canvas class="chart chart-bar" chart-data="question.graphData" chart-labels="question.graphLabels" chart-legend="true">\n </canvas>\n </div>\n <div class="col-md-4 pull-right " ng-if="question.graphType == \'pie\' && question.graphData">\n <canvas class="chart chart-pie" chart-data="question.graphData" chart-labels="question.graphLabels" chart-legend="true">\n </canvas>\n </div>\n </v-pane-content>\n </v-pane>\n </v-accordion>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/jscripty/project/report/report.html",'<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-edit"></i>\n <a href="/jscripty/projects/list">{{ \'APPLICATION_JSCRIPTY\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-slack"></i>\n <a href="/jscripty/projects/list">{{ \'APPLICATION_PROJECTS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-book-open"></i>\n <a href="">{{ \'APPLICATION_REPORTS\' | translate }}</a>\n </li>\n </ul>\n </div>\n </div>\n</div>\n<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img src="assets/images/media/report.png" class="img-responsive" >\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{project.name}}[{{project.id}}]\n </div>\n <div class="profile-usertitle-job">\n\n </div>\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.jscripty.projects.report.sessions\')|| $state.is(\'main.jscripty.projects.report.sessionDetail\')}">\n <a data-ng-href=\'/jscripty/projects/report/{{projectId}}/sessions\'>\n <i class="icon-settings"></i>\n Sessions</a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.jscripty.projects.report.summary\') || $state.is( \'main.jscripty.projects.report.questionDetail\')}">\n <a data-ng-href=\'/jscripty/projects/report/{{projectId}}/summary\'>\n <i class="fa fa-bar-chart"></i>\n Questions</a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.jscripty.projects.report.detail\')}">\n <a data-ng-href=\'/jscripty/projects/report/{{projectId}}/detail\'>\n <i class="fa fa-list"></i>\n Summary</a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.jscripty.projects.report.inputs\')}">\n <a data-ng-href=\'/jscripty/projects/report/{{projectId}}/inputs\'>\n <i class="fa fa-edit"></i>\n Inputs</a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n\n </div>\n\n </div>\n\n <div class="profile-content margin-top-20">\n <div class="row">\n <div class="col-md-12">\n <div class="col-lg-4 col-md-4 col-sm-6 col-xs-12">\n <div class="dashboard-stat2">\n <div class="display">\n <div class="number">\n <h3 class="font-green-sharp">{{projectStats.started}}</h3>\n <small>Started</small>\n </div>\n <div class="icon">\n <i class="icon-pie-chart"></i>\n </div>\n </div>\n <div class="progress-info">\n <div class="progress">\n <span style="width: 100%;" class="progress-bar progress-bar-success green-sharp">\n </span>\n </div>\n <div class="status">\n </div>\n </div>\n </div>\n </div>\n <div class="col-lg-4 col-md-4 col-sm-6 col-xs-12">\n <div class="dashboard-stat2">\n <div class="display">\n <div class="number">\n <h3 class="font-red-haze">{{projectStats.incomplete}}</h3>\n <small>Incomplete</small>\n </div>\n <div class="icon">\n <i class="icon-chart"></i>\n </div>\n </div>\n <div class="progress-info">\n <div class="progress">\n <span style="width: 100%;" class="progress-bar progress-bar-success red-haze">\n </span>\n </div>\n <div class="status">\n </div>\n </div>\n </div>\n </div>\n <div class="col-lg-4 col-md-4 col-sm-6 col-xs-12">\n <div class="dashboard-stat2">\n <div class="display">\n <div class="number">\n <h3 class="font-blue-sharp">{{projectStats.completed}}</h3>\n <small>Completed</small>\n </div>\n <div class="icon">\n <i class="icon-like"></i>\n </div>\n </div>\n <div class="progress-info">\n <div class="progress">\n <span style="width: 100%;" class="progress-bar progress-bar-success blue-sharp">\n </span>\n </div>\n <div class="status">\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class="row">\n <div ui-view class="col-md-12">\n </div>\n </div>\n </div>\n </div>\n </div>\n'),a.put("app/jscripty/project/report/report.inputs.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light bordered" data-ng-init="getQuestionInputs()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="fa fa-edit font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_INPUTS\' | translate }}</a> </span>\n </div>\n <div class="tools">\n <!-- <a href="" class="fullscreen" data-original-title="" title="">\n </a> -->\n </div>\n </div>\n <div class="portlet-body" >\n <div ui-grid="gridOptions" ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/jscripty/project/report/report.question.detail.html",'<div class="row" data-ng-init="getDetail()">\n <div class="col-md-12">\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="fa fa-list font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_DETAIL\' | translate }}</a> </span>\n </div>\n </div>\n <div class="portlet-body" >\n <div class="alert alert-success text-center" ng-show="!questionDetail">\n <h4>{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</h4>\n </div>\n <div class="row margin-top-20" ng-show="questionDetail">\n <div class="col-md-10 col-md-offset-1">\n <div class="panel panel-info" >\n <div class="panel-heading">\n <h3 class="panel-title">\n\n <i class="fa-chart "></i>Question Id: {{questionDetail.question_id}}\n </div>\n <div class="panel-body">\n <div class="row">\n <div class="col-md-12">\n <h4><strong>{{questionDetail.question_label}}</strong></h4>\n </div>\n </div>\n <div class="row">\n <div class="col-md-10 col-md-offset-1 ">\n <strong><h4>{{questionDetail.question_text}}</h4></strong><br>\n </div>\n </div>\n <div class="row">\n <div class="col-md-6">\n <div class="row">\n <div class="col-md-10 col-md-offset-1 ">\n <!-- <div class="alert alert-success text-center" ng-show="!questionDetail.choices.length">\n <h4>{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</h4>\n </div> -->\n <table ng-if="questionDetail.choices.length" class="table table-hover" style="table-layout: fixed; width: 100%">\n <thead>\n <tr>\n <th style="width=5%"> Value </th>\n <th style="width=5%"> Count </th>\n <th ng-if="question.graphType != \'PolarArea\'" style="width=5%"> % </th>\n </tr>\n </thead>\n <tbody>\n <tr ng-if="!choice.other_option" ng-repeat="choice in questionDetail.choices ">\n <td style="word-wrap: break-word">{{choice.value}}</td>\n <td>{{choice.count}}</td>\n <td ng-if="question.graphType != \'PolarArea\'">{{choice.percentage | number:2}}</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n <div class="row" ng-if="choice.other_option" ng-repeat="choice in questionDetail.choices ">\n <div class="col-md-6 col-md-offset-3 ">\n <strong><a href="">{{choice.value}}</a> </strong> <span class="badge">{{choice.count}}</span><br>\n\n </div>\n </div>\n <div class="row">\n <div class="col-md-10 col-md-offset-1 ">\n <h4> <strong>Total: {{questionDetail.total}}</strong></h4><br>\n </div>\n </div>\n </div>\n <div class="col-md-6 pull-right ">\n <canvas id="base" class="chart-base" chart-type="questionDetail.graphType"\n chart-data="questionDetail.graphData" chart-labels="questionDetail.graphLabels" chart-legend="true">\n </canvas>\n <!-- <button class="btn btn-success btn-sm pull-right" ng-click="toggle(questionDetail)">{{questionDetail.graphType}}</button> -->\n </div>\n </div>\n\n </div>\n\n </div>\n\n </div>\n </div>\n\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/jscripty/project/report/report.session.detail.html",'\n\n<div class="row" data-ng-init="getSessionDetails()">\n <div class="col-md-12">\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="fa fa-list font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_DETAIL\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group">\n <button class="btn btn-icon-only btn-primary" data-ng-click="pdf(\'header\',sessionQuestions)">\n <i class="fa fa-download"></i>\n </button>\n <!-- <button class="btn btn-icon-only btn-default" data-ng-click="accordion.expandAll()">\n <i class="fa fa-plus-square-o"></i>\n </button>\n <button class="btn btn-icon-only btn-default" data-ng-click="accordion.collapseAll()">\n <i class="icon-collapse-alt"></i>\n </button> -->\n </div>\n </div>\n </div>\n <div class="portlet-body" style="height: auto;">\n <div class="row margin-top-20">\n <div class="col-md-10 col-md-offset-1">\n <div id = "header" class="panel panel-info">\n <div class="panel-heading">\n <strong>Project Name: </strong>{{project.name}}<br>\n <strong>Project Id: </strong>{{project.id}}<br>\n <strong>Session Id: </strong>{{session.session_id}}<br>\n <strong>Status: </strong>{{session.status}}<br>\n <strong>Started At: </strong>{{session.createdAt}}<br>\n <strong>Closed At: </strong>{{session.completedAt}}<br>\n </div>\n </div>\n <v-accordion class="vAccordion--default" multiple control="accordion">\n <v-pane id="{{question.question_id }}" ng-repeat=" question in sessionQuestions | orderBy:\'index\'"" expanded="true">\n <v-pane-header>\n Question Id: {{question.question_id}}\n </v-pane-header>\n <v-pane-content>\n <h4><strong>{{question.question_label}}</strong> : {{question.question_text}}</h4>\n <div ng-if="question.question_type == \'question\'">\n <h4><strong>Answer: </strong>{{question.question_answer}}</h4>\n </div>\n <div ng-if="question.question_other_label">\n <h4>\n <strong>{{question.question_other_label}}: </strong>\n {{question.question_other_answer || \'No Value\'}}\n </h4>\n </div>\n <table class="table table-hover" ng-if="question.ReportJscriptyInputs.length">\n <thead>\n <tr>\n <th > Label </th>\n <th >Answer </th>\n </tr>\n </thead>\n <tbody>\n <tr ng-repeat="input in question.ReportJscriptyInputs |orderBy:\'id\'">\n <td>{{input.input_label}}</td>\n <td>{{input.input_value || \'No Value\'}}</td>\n </tr>\n </tbody>\n </table>\n </v-pane-content>\n </v-pane>\n </v-accordion>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n'), +a.put("app/jscripty/project/report/report.sessions.html",'\n <div class="row" >\n <div class="col-md-12">\n <div class="portlet light bordered" data-ng-init="getProjectSessions()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-settings font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_SESSIONS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group">\n <a class="btn btn-default" href="#" data-ng-click="gridOptions.getPage();initView()">\n <i class="icon-reload"></i>\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body" >\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n'),a.put("app/jscripty/project/report/report.summary.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light bordered" data-ng-init="getQuestionSummary()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="fa fa-bar-chart font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_QUESTIONS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group">\n <!-- <a class="btn btn-default" href="#" data-ng-click="gridOptions.getPage();initView()">\n <i class="icon-reload"></i>\n </a> -->\n </div>\n </div>\n </div>\n <div class="portlet-body" >\n <div ui-grid="gridOptions" ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/jscripty/project/view/view.html",'<div class="row" data-ng-init="getProject()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-edit"></i>\n <a href="/jscripty/projects/list">{{ \'APPLICATION_JSCRIPTY\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-slack"></i>\n <a href="/jscripty/projects/list">{{ \'APPLICATION_PROJECTS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <a ng-href="/jscripty/projects/view/{{jscriptyProject.id}}">{{jscriptyProject.name}}</a>\n </li>\n </ul>\n </div>\n </div>\n</div>\n<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div id="geEditor" class="geEditor"></div>\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n<script>\n\n\n</script>\n'),a.put("app/landing/landing.html",'<!-- BEGIN LOGO -->\n<div class="logo">\n <a href="index.html">\n <img data-ng-if="settings.defaultLoginLogo || !license.custom" ng-src="assets/images/logo-big.png" alt="logo" />\n <img data-ng-if="license.custom && !settings.defaultLoginLogo" ng-src="api/settings/logo/login/{{settings.loginLogo ? settings.loginLogo : \'logo-big\'}}" alt="logo" class="custom-login-logo" onError="this.onerror=null;this.src=\'assets/images/logo-big.png\';"/>\n </a>\n</div>\n<!-- END LOGO -->\n\n<!-- BEGIN LANDING -->\n<div data-ng-init="initLanding()">\n <div data-ng-show="message" class="col-md-12 page-500" style="padding-bottom: 50px;">\n <div class="number">\n Oops!\n </div>\n <div class=" details" style="color: white;">\n <h3>{{message | translate}}.</h3>\n <p>\n Please contact your administrator.<br><br>\n </p>\n </div>\n </div>\n</div>\n<!-- END LANDING -->\n\n<div class="copyright">\n xCALLY Motion v. {{info.version}} | 2016 - {{year + 1}} © Powered by Xenialab <ng-bind-html data-ng-if="license.custom && !settings.defaultFooterWhiteLabel && settings.footerWhiteLabel" ng-bind-html="\'| \'+settings.footerWhiteLabel"></ng-bind-html>\n</div>\n'),a.put("app/login/login.html",'<!-- BEGIN LOGO -->\n<div class="logo" data-ng-init="getInfo()">\n <a>\n <img data-ng-if="settings.defaultLoginLogo || !license.custom" ng-src="assets/images/logo-big.png" alt="logo" />\n <img data-ng-if="license.custom && !settings.defaultLoginLogo" ng-src="api/settings/logo/login/{{settings.loginLogo ? settings.loginLogo : \'logo-big.png\'}}" alt="logo" class="custom-login-logo" onError="this.onerror=null;this.src=\'assets/images/logo-big.png\';"/>\n </a>\n</div>\n<!-- END LOGO -->\n<!-- BEGIN LOGIN -->\n<div class="content">\n <!-- BEGIN LOGIN FORM -->\n <form class="login-form" name="loginForm" data-ng-if="!forgotPassword" data-ng-submit="login(loginForm)" novalidate>\n <h3 class="form-title">Sign In</h3>\n <div class="alert alert-success" data-ng-show="recovered">\n <button class="close" data-close="alert"></button>\n <span>{{\'MESSAGE_ACCOUNT_RECOVERED\' | translate}}</span>\n </div>\n <div class="alert alert-danger" data-ng-class="{\'display-hide\': !loginForm.$submitted || !errorLogin}">\n <button class="close" data-close="alert"></button>\n <span>{{ errorLog ? errorLog : (\'MESSAGE_INSERT_USER_OR_PASS\' | translate)}}</span>\n </div>\n <div class="form-group" data-ng-class="{\'has-error\': loginForm.$submitted && loginForm.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_USERNAME\' | translate}}</label>\n <div class="input-icon">\n <i class="fa fa-user"></i>\n <input ng-enter="login(loginForm)" class="form-control form-control-solid placeholder-no-fix" type="text" autocomplete="off" placeholder="{{\'APPLICATION_USERNAME\' | translate}}" name="name" ng-model="userLogin.name" required/>\n </div>\n <span data-ng-show="loginForm.$submitted && loginForm.name.$invalid" class="help-block">{{\'MESSAGE_REQUIRED_FIELD\' | translate}}</span>\n </div>\n <div class="form-group" data-ng-class="{\'has-error\': loginForm.$submitted && loginForm.password.$invalid}">\n <label class="control-label">{{\'APPLICATION_PASSWORD\' | translate}}</label>\n <div class="input-icon">\n <i class="fa fa-lock"></i>\n <input ng-enter="login(loginForm)" class="form-control form-control-solid placeholder-no-fix" type="password" autocomplete="off" placeholder="{{\'APPLICATION_PASSWORD\' | translate}}" name="password" ng-model="userLogin.password" required/>\n </div>\n <span data-ng-show="loginForm.$submitted && loginForm.password.$invalid" class="help-block">{{\'MESSAGE_REQUIRED_FIELD\' | translate}}</span>\n <span class="help-block"><a href="#" data-ng-click="toggleForgotPassword(true)" class="forget-password">{{\'APPLICATION_FORGOT_PASSWORD\' | translate}}?</a></span>\n </div>\n <div class="form-actions">\n <button type="submit" class="btn btn-success uppercase">{{\'APPLICATION_LOGIN\' | translate}}</button>\n <label class="rememberme check">\n <input type="checkbox" data-ng-model="userLogin.remember"> {{\'APPLICATION_REMEMBER_ME\' | translate}}\n </label>\n <!-- <label class="rememberme check">\n <input type="checkbox" name="remember" value="1"/>Remember </label> -->\n <!-- <a href="javascript:;" id="forget-password" class="forget-password">Forgot Password?</a> -->\n </div>\n </form>\n <form name="forgetForm" data-ng-if="forgotPassword" data-ng-submit="forgetForm.$valid && recover()" novalidate>\n <h3>{{\'APPLICATION_FORGOT_PASSWORD\' | translate}}?</h3>\n <p>\n {{\'APPLICATION_INSERT_EMAIL_TO_RESET\' | translate}}\n </p>\n <div class="alert alert-success" data-ng-show="showRecoverMessage">\n <button class="close" data-close="alert"></button>\n <span>{{\'MESSAGE_CHECK_YOUR_EMAIL_RECOVER\' | translate}}</span>\n </div>\n <div class="form-group" data-ng-class="{\'has-error\': forgetForm.$submitted && forgetForm.email.$invalid}">\n <label class="control-label">{{\'APPLICATION_EMAIL\' | translate}}</label>\n <div class="input-icon">\n <i class="fa fa-envelope"></i>\n <input class="form-control form-control-solid placeholder-no-fix" type="email" placeholder="{{\'APPLICATION_EMAIL\' | translate}}" name="email" ng-model="userLogin.email" required/>\n </div>\n <span data-ng-show="forgetForm.$submitted && forgetForm.email.$invalid" class="help-block">{{\'MESSAGE_REQUIRED_FIELD\' | translate}}</span>\n </div>\n <div class="form-actions">\n <button type="button" id="back-btn" data-ng-click="toggleForgotPassword(false)" class="btn btn-default">{{\'APPLICATION_BACK\' | translate}}</button>\n <button type="submit" class="btn btn-success uppercase pull-right">{{\'APPLICATION_SUBMIT\' | translate}}</button>\n </div>\n </form>\n <div class="login-options">\n <h4>{{\'APPLICATION_FOLLOW_US\' | translate}}</h4>\n <ul class="social-icons">\n <li>\n <a class="social-icon-color facebook" data-original-title="facebook" href="https://www.facebook.com/xcallymotion" target="_blank"></a>\n </li>\n <li>\n <a class="social-icon-color twitter" data-original-title="Twitter" href="https://twitter.com/xcallymotion" target="_blank"></a>\n </li>\n <li>\n <a class="social-icon-color googleplus" data-original-title="Google Plus" href="https://plus.google.com/+Xcally" target="_blank"></a>\n </li>\n <li>\n <a class="social-icon-color linkedin" data-original-title="Linkedin" href="https://www.linkedin.com/company/xcally" target="_blank"></a>\n </li>\n </ul>\n </div>\n</div>\n<div class="copyright">\n xCALLY Motion v. {{info.version}} | 2016 - {{year + 1}} © Powered by Xenialab <ng-bind-html data-ng-if="license.custom && !settings.defaultFooterWhiteLabel && settings.footerWhiteLabel" ng-bind-html="\'| \'+settings.footerWhiteLabel"></ng-bind-html>\n</div>\n<!-- END LOGIN -->\n'),a.put("app/main/about.modal.html",'<div class="center-text">\n<div class="modal-header no-border">\n<button type="button" ng-click="$dismiss()" class="close">×</button>\n <!-- <h3 class="modal-title center-text">{{ \'APPLICATION_ABOUT\' | translate }}</h3> -->\n</div>\n<div class="modal-body" style="padding-top:0px;">\n <div class="mbottom20" data-ng-init="getInfo()">\n <a>\n <img data-ng-if="settings.defaultLoginLogo || !license.custom" ng-src="assets/images/logo-big-pdf.png" alt="logo" class="about-logo" />\n <img data-ng-if="license.custom && !settings.defaultLoginLogo" ng-src="api/settings/logo/login/{{settings.loginLogo ? settings.loginLogo : \'logo-big-pdf.png\'}}" alt="logo" class="custom-login-logo about-logo" onError="this.onerror=null;this.src=\'assets/images/logo-big-pdf.png\';"/>\n </a>\n</div>\n<div class="mbottom20">\n <b class="sounds-title-icon">xCALLY Motion</b><br>\n <small>v. {{info.version}}</small><br><br>\n <small>2016 - {{year + 1}} © Powered by Xenialab</small><br>\n <small><a href="https://www.xcallymotion.com">www.xcallymotion.com</a></small><br>\n <ng-bind-html data-ng-if="license.custom && !settings.defaultFooterWhiteLabel && settings.footerWhiteLabel" ng-bind-html="settings.footerWhiteLabel"></ng-bind-html>\n</div>\n<div class="mbottom20">\n <span><b>{{\'APPLICATION_USEFUL_LINKS\' | translate}}</b></span><br>\n <small><a href="https://wiki.xcallymotion.com/" target="_blank">Wiki</a></small><br>\n <small><a href="http://www.xcally.com/bar/multichannel/Setup.msi" target="_blank">Phonebar Download</a></small><br>\n <small><a href="http://www.xcally.com/support/eula-xcally-license-en.pdf" target="_blank">EULA</a></small><br>\n</div>\n <div class="login-options" style=\'margin-bottom:0px;\'>\n <h4>{{\'APPLICATION_FOLLOW_US\' | translate}}</h4>\n <ul class="social-icons">\n <li>\n <a class="social-icon-color facebook" data-original-title="facebook" href="https://www.facebook.com/xcallymotion" target="_blank"></a>\n </li>\n <li>\n <a class="social-icon-color twitter" data-original-title="Twitter" href="https://twitter.com/xcallymotion" target="_blank"></a>\n </li>\n <li>\n <a class="social-icon-color googleplus" data-original-title="Google Plus" href="https://plus.google.com/+Xcally" target="_blank"></a>\n </li>\n <li>\n <a class="social-icon-color linkedin" data-original-title="Linkedin" href="https://www.linkedin.com/company/xcally" target="_blank"></a>\n </li>\n </ul>\n</div>\n<div class="login-options" style=\'margin-bottom:0px;\'>\n<h4>{{\'APPLICATION_CONTACT_US\' | translate}}:</h4>\n<div class="float-right" style="margin-top:10px;margin-bottom:10px;">\n <a href="mailto:support@xcally.com">support@xcally.com</a></small>\n</div>\n</div>\n</div>\n</div>\n<!-- <div class="modal-footer">\n <button class="btn default" type="button" ng-click="close()">{{ \'APPLICATION_CLOSE\' | translate }}</button>\n</div> -->\n'),a.put("app/main/audioFileDownload.play.modal.html",'<!-- <div class="modal-header">\n <button ng-if="modal.dismissable" type="button" ng-click="$dismiss()" class="close">×</button>\n <h4 ng-if="modal.title" ng-bind="modal.title | translate" class="modal-title"></h4>\n</div> -->\n<div class="modal-body" style="text-align:center;">\n <audio controls autoplay ng-src="{{audio}}" preload="none">\n Your browser does not support the audio tag.</audio>\n</div>\n<!-- <div class="modal-footer">\n <button class="btn default" type="button" ng-click="close()">{{ \'APPLICATION_CLOSE\' | translate }}</button>\n</div> -->\n'),a.put("app/main/chooseContact.modal.html",'<div class="modal-header" data-ng-init="getContacts()">\n <h3 class="modal-title">{{ \'APPLICATION_CHOOSE_CONTACT\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <table st-table="rowCollection" class="table table-striped">\n <tbody>\n <tr>\n <th>{{\'APPLICATION_NAME\' | translate}}</th>\n <th>{{\'APPLICATION_LIST\' | translate}}</th>\n <th></th>\n </tr>\n <tr ng-repeat="contact in contacts">\n <td>{{contact.firstName}} {{contact.lastName || \'\'}}</td>\n <td>{{contact.List.name}}</td>\n <td>\n <button class="btn default btn-xs green-stripe" data-ng-click="open(contact)">\n {{ \'APPLICATION_OPEN\' | translate}}\n </button>\n </td>\n </tr>\n <tr data-ng-hide="contacts.length">\n <td colspan="3" style="text-align:center;">\n <i>{{ \'MESSAGE_NO_CONTACTS_AVAILABLE\' | translate }}</i>\n </td>\n </tr>\n </tbody>\n </table>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="open()"><i class="icon-plus"></i> {{ \'APPLICATION_NEW_CONTACT\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/main/closeEditedTab.modal.html",'<div class="modal-header" data-ng-init="getContacts()">\n <h3 class="modal-title">{{ \'APPLICATION_WARNING\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <p>{{\'MESSAGE_CLOSE_EDITED_TAB\' | translate}}</p>\n</div>\n<div class="modal-footer">\n <button class="btn btn-danger" type="button" ng-click="close()">{{ \'APPLICATION_CLOSE\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/main/closeEditedTab.modal.jscripty.html",' <div class="modal-header" data-ng-init="init()">\n <h3 class="modal-title">{{ \'APPLICATION_WARNING\' | translate }}</h3>\n <!-- <h3 ng-if="projectStatus == \'incomplete\'" class="modal-title">{{ \'APPLICATION_WARNING\' | translate }}</h3> -->\n\n</div>\n<div class="modal-body">\n<!-- <div ng-if="projectStatus == \'incomplete\'" class="modal-body"> -->\n <p>{{\'MESSAGE_CLOSE_INCOMPLETE\' | translate}}</p>\n</div>\n\n\n<div class="modal-footer">\n <button class="btn btn-danger" type="button" ng-click="close()">{{ \'APPLICATION_CLOSE\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/main/cm.disposition.modal.html",'<div class="modal-header">\n <button ng-if="modal.dismissable" type="button" ng-click="$dismiss()" class="close">×</button>\n <h4 ng-if="modal.title" ng-bind="modal.title | translate" class="modal-title"></h4>\n</div>\n<div class="modal-body">\n <form name="form" novalidate data-ng-init="initDisposition()">\n <div class="form-group">\n <ui-select data-ng-model="item.disposition" name="list" theme="bootstrap" data-ng-disabled="!dispositions.length" required>\n <ui-select-match placeholder="{{\'APPLICATION_DISPOSITION\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="disposition.name as disposition in dispositions | filter: $select.search">\n <div ng-bind-html="disposition.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <div class="note note-warning" data-ng-hide="dispositions.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_DISPOSITIONS_AVAILABLE\' | translate }}\n </p>\n </div>\n</form>\n <!-- <div ng-if="modal.html" ng-bind-html="modal.html"></div> -->\n</div>\n<div class="modal-footer">\n <button class="btn btn-danger" type="button" ng-click="ok()" data-ng-disabled="!item.disposition">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n <!-- <button ng-repeat="button in modal.buttons" ng-class="button.classes" ng-click="button.click($event)" ng-bind="button.text" class="btn"></button> -->\n</div>\n'),a.put("app/main/company.info.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_COMPANY_INFO\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_2" data-toggle="tab">{{ \'APPLICATION_ADDRESS\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_3" data-toggle="tab">{{ \'APPLICATION_SHIPMENT_ADDRESS\' | translate}}</a>\n </li>\n </ul>\n </div>\n\n <div class="portlet-body">\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.general" data-ng-submit="forms.general.$valid && updateCompany()" novalidate>\n <div class="row">\n <div class="col-md-6">\n <!-- START NAME -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}</label>\n <input readonly type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="company.name" required/>\n </div>\n <!-- END NAME -->\n\n <!-- START VAT -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_VAT\' | translate}}</label>\n <input readonly type="text" name="vat" placeholder="{{\'APPLICATION_VAT\' | translate}}" class="form-control" data-ng-model="company.vat"/>\n </div>\n <!-- END VAT -->\n\n <!-- START COMPANYID -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_COMPANY_ID\' | translate}}</label>\n <input readonly type="text" name="companyId" placeholder="{{\'APPLICATION_COMPANY_ID\' | translate}}" class="form-control" data-ng-model="company.companyId"/>\n </div>\n <!-- END COMPANYID -->\n\n <!-- START WEBSITE -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_WEBSITE\' | translate}}</label>\n <input readonly type="text" name="website" placeholder="{{\'APPLICATION_WEBSITE\' | translate}}" class="form-control" data-ng-model="company.website"/>\n </div>\n <!-- END WEBSITE -->\n\n <!-- START EMAIL -->\n <div class="form-group" >\n <label class="control-label">{{\'APPLICATION_EMAIL\' | translate}}</label>\n <input readonly type="email" name="email" placeholder="{{\'APPLICATION_EMAIL\' | translate}}" class="form-control" data-ng-model="company.email"/>\n </div>\n <!-- END EMAIL -->\n </div>\n <div class="col-md-6">\n <!-- START PHONE -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_PHONE\' | translate}}</label>\n <input readonly type="text" name="phone" placeholder="{{\'APPLICATION_PHONE\' | translate}}" class="form-control" data-ng-model="company.phone"/>\n </div>\n <!-- END PHONE -->\n\n <!-- START FAX -->\n <div class="form-group" >\n <label class="control-label">{{\'APPLICATION_FAX\' | translate}}</label>\n <input readonly type="text" name="fax" placeholder="{{\'APPLICATION_FAX\' | translate}}" class="form-control" data-ng-model="company.fax"/>\n </div>\n <!-- END FAX -->\n\n <!-- START TYPE -->\n <div class="form-group" >\n <label class="control-label">{{\'APPLICATION_TYPE\' | translate}}</label>\n <input readonly type="text" name="type" placeholder="{{\'APPLICATION_TYPE\' | translate}}" class="form-control" data-ng-model="company.type"/>\n </div>\n <!-- END TYPE -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea readonly type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="company.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n </div>\n </div>\n </form>\n </div>\n <!-- END ADVANCED TAB -->\n <div class="tab-pane" id="tab_1_2">\n <form name="forms.address" novalidate>\n <!-- START STREET -->\n <div class="form-group" >\n <label class="control-label">{{\'APPLICATION_STREET\' | translate}}</label>\n <input readonly type="text" name="street" placeholder="{{\'APPLICATION_STREET\' | translate}}" class="form-control" data-ng-model="company.street"/>\n </div>\n <!-- END STREET -->\n\n <!-- START POSTALCODE -->\n <div class="form-group" >\n <label class="control-label">{{\'APPLICATION_POSTALCODE\' | translate}}</label>\n <input readonly type="text" name="postalCode" placeholder="{{\'APPLICATION_POSTALCODE\' | translate}}" class="form-control" data-ng-model="company.postalCode"/>\n </div>\n <!-- END POSTALCODE -->\n\n <!-- START CITY -->\n <div class="form-group" >\n <label class="control-label">{{\'APPLICATION_CITY\' | translate}}</label>\n <input readonly type="text" name="city" placeholder="{{\'APPLICATION_CITY\' | translate}}" class="form-control" data-ng-model="company.city"/>\n </div>\n <!-- END CITY -->\n <!-- START COUNTRY -->\n <div class="form-group" >\n <label class="control-label">{{\'APPLICATION_COUNTRY\' | translate}}</label>\n <input readonly type="text" name="country" placeholder="{{\'APPLICATION_COUNTRY\' | translate}}" class="form-control" data-ng-model="company.country"/>\n </div>\n <!-- END COUNTRY -->\n </form>\n </div>\n <div class="tab-pane" id="tab_1_3">\n <form name="forms.shipmentAddress" novalidate>\n <!-- START STREET -->\n <div class="form-group" >\n <label class="control-label">{{\'APPLICATION_STREET\' | translate}}</label>\n <input readonly type="text" name="sStreet" placeholder="{{\'APPLICATION_STREET\' | translate}}" class="form-control" data-ng-model="company.sStreet"/>\n </div>\n <!-- END STREET -->\n\n <!-- START POSTALCODE -->\n <div class="form-group" >\n <label class="control-label">{{\'APPLICATION_POSTALCODE\' | translate}}</label>\n <input readonly type="text" name="sPostalCode" placeholder="{{\'APPLICATION_POSTALCODE\' | translate}}" class="form-control" data-ng-model="company.sPostalCode"/>\n </div>\n <!-- END POSTALCODE -->\n\n <!-- START CITY -->\n <div class="form-group" >\n <label class="control-label">{{\'APPLICATION_CITY\' | translate}}</label>\n <input readonly type="text" name="sCity" placeholder="{{\'APPLICATION_CITY\' | translate}}" class="form-control" data-ng-model="company.sCity"/>\n </div>\n <!-- END CITY -->\n <!-- START COUNTRY -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_COUNTRY\' | translate}}</label>\n <input readonly type="text" name="sCountry" placeholder="{{\'APPLICATION_COUNTRY\' | translate}}" class="form-control" data-ng-model="company.sCountry"/>\n </div>\n <!-- END COUNTRY -->\n </form>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n<div class="modal-footer">\n <button class="btn default" type="button" ng-click="close()">{{ \'APPLICATION_CLOSE\' | translate }}</button>\n</div>\n'),a.put("app/main/customDateFilter.modal.html",'<div class="modal-body">\n <uib-datepicker ng-model="dateTime.filterDate"\n class="well well-sm">\n </uib-datepicker>\n <uib-timepicker data-ng-if="hasTime" ng-model="dateTime.time" show-meridian="false"></uib-timepicker>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="setFilterDate(dateTime.filterDate)">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancelDateFilter()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/main/customDateFilterHeader.html",'<input class="ui-grid-filter-input date-time-filter-buttons pointer-cursor" style="width:90%;padding:inherit;" data-ng-click="openDatePicker(colFilter)" placeholder="{{ colFilter.name }}" readonly value="{{colFilter.term | date:\'dd-MM-yyyy\'}}">\n<span role="button" class="ui-grid-filter-button-select cancel-custom-date-range-filter-button ng-scope" data-ng-click="removeFilter(colFilter, $index)" data-ng-if="!colFilter.disableCancelFilterButton" data-ng-disabled="colFilter.term === undefined || colFilter.term === null || colFilter.term === \'\'" data-ng-show="colFilter.term !== undefined && colFilter.term != null" tabindex="0" aria-hidden="false" aria-disabled="false" style="right:22px;">\n <i class="ui-grid-icon-cancel cancel-custom-date-range-filter" ui-grid-one-bind-aria-label="aria.removeFilter" aria-label="Remove Filter"> </i>\n</span>\n'),a.put("app/main/customTagsFilter.modal.html",'<div class="modal-body" data-ng-init="initModal()">\n <!-- START TAGS -->\n<div class="form-group">\n <label class="control-label">{{\'APPLICATION_TAGS\' | translate}}</label>\n <ui-select multiple=\'true\' data-ng-model="item.myTags" theme="bootstrap">\n <ui-select-match placeholder="{{ \'APPLICATION_TAGS\' | translate }}">{{$item}}</ui-select-match>\n <ui-select-choices repeat="tag in tags | filter: $select.search">\n {{tag}}\n </ui-select-choices>\n </ui-select>\n</div>\n<!-- END TAGS -->\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="setFilterTags()">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancelTagsFilter()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/main/customTagsFilterHeader.html",'<input class="ui-grid-filter-input pointer-cursor" style="width:90%;padding:inherit;" data-ng-click="openTags(colFilter)" placeholder="{{ colFilter.name }}" readonly value="{{colFilter.term}}">\n<span role="button" class="ui-grid-filter-button-select cancel-custom-date-range-filter-button ng-scope" data-ng-click="removeFilter(colFilter, $index)" data-ng-if="!colFilter.disableCancelFilterButton" data-ng-disabled="colFilter.term === undefined || colFilter.term === null || colFilter.term === \'\'" data-ng-show="colFilter.term !== undefined && colFilter.term != null" tabindex="0" aria-hidden="false" aria-disabled="false" style="right:5px;">\n <i class="ui-grid-icon-cancel cancel-custom-date-range-filter" ui-grid-one-bind-aria-label="aria.removeFilter" aria-label="Remove Filter"> </i>\n</span>\n'),a.put("app/main/keepMeLogged.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_WARNING\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <p>{{\'MESSAGE_SOMEONE_LOGGED_YOU_OUT\' | translate}}</p>\n</div>\n<div class="modal-footer">\n <button class="btn btn-danger" type="button" ng-click="close()">{{ \'APPLICATION_YES\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_NO\' | translate }}</button>\n</div>\n'),a.put("app/main/main.html",'<!-- BEGIN HEADER -->\n<div data-ng-include="\'components/header/header.html\'" data-ng-controller="HeaderController" class="page-header navbar navbar-fixed-top">\n</div>\n<!-- END HEADER -->\n\n<div class="clearfix">\n</div>\n<!-- BEGIN CONTAINER -->\n<div class="page-container">\n\n <!-- BEGIN SIDEBAR -->\n <div data-ng-include="\'components/sidebar/sidebar.html\'" data-ng-controller="SidebarController" class="page-sidebar-wrapper">\n </div>\n <!-- END SIDEBAR -->\n\n <!-- BEGIN CONTENT -->\n <div class="page-content-wrapper">\n <div class="page-content" data-ng-class="{\'demo\': !license.expiration}">\n\n <!-- BEGIN PAGE CONTENT -->\n <uib-tabset>\n <uib-tab select="addWorkspace()" active="mainTab.active">\n <uib-tab-heading>\n Motion <i class="icon-rocket"></i>\n </uib-tab-heading>\n <div class="hide" data-ng-if="!Auth.isAgent() && activeTour.main" ng-joy-ride="activeTour.main" config="tourConfig.main" on-finish="onTourFinish()" on-skip="onTourSkip()"></div>\n <div ui-view class=""></div>\n </uib-tab>\n <uib-tab class="motion-{{workspace.type}}-uib-tab" data-ng-repeat="workspace in workspaces" active="workspace.active" data-ng-switch="workspace.type" select="select(workspace)" deselect="deselect(workspace)">\n <uib-tab-heading data-ng-mouseup="$event.which === 2 && closeTab($index)">\n <i data-ng-if="workspace.class" class="prova" data-ng-class="workspace.class"></i> {{workspace.name | truncate: 25: \'...\': true}} <span class="badge badge-danger" data-ng-if="workspace.unread">{{workspace.unread}}</span> <i class="icon-close pointer-cursor" data-ng-click="closeTab($index)"></i>\n </uib-tab-heading>\n <div class="" data-ng-switch="workspace.type">\n <new-contact data-ng-switch-when="newContact" workspace="workspace" index="$index" on-submit="createContact(index,item)"></new-contact>\n <contact data-ng-switch-when="contact" workspace="workspace" index="$index" on-submit="updateContact(index,item)"></contact>\n <jscripty data-ng-switch-when="jscripty" workspace="workspace" index="$index" on-submit="closeJscriptyTab(index)"></jscripty>\n <!-- <jscripty data-ng-switch-when="jscripty" workspace="workspace" index="$index" on-submit="closeTab(index,item)"></jscripty> -->\n <chat-room data-ng-switch-when="chatRoom" workspace="workspace" index="$index" on-submit="closeTab(index)"></chat-room>\n <fax-room data-ng-switch-when="faxRoom" workspace="workspace" index="$index" on-submit="closeTab(index)"></fax-room>\n <mail-room data-ng-switch-when="mailRoom" workspace="workspace" index="$index" on-submit="closeTab(index)"></mail-room>\n <sms-room data-ng-switch-when="smsRoom" workspace="workspace" index="$index" on-submit="closeTab(index)"></sms-room>\n <openchannel-room data-ng-switch-when="openchannelRoom" workspace="workspace" index="$index" on-submit="closeTab(index)"></openchannel-room>\n <tiger-dial-disposal data-ng-switch-when="tdDisposal" workspace="workspace" index="$index"></tiger-dial-disposal>\n </div>\n </uib-tab>\n </uib-tabset>\n <!-- END PAGE CONTENT -->\n\n </div>\n </div>\n <!-- END CONTENT -->\n\n</div>\n<!-- END CONTAINER -->\n\n<!-- BEGIN FOOTER -->\n<div data-ng-include="\'components/footer/footer.html\'" data-ng-controller="FooterController" class="page-footer">\n</div>\n<!-- END FOOTER -->\n\n<!-- BEGIN JAVASCRIPTS(Load javascripts at bottom, this will reduce page load time) -->\n<!-- BEGIN CORE PLUGINS -->\n<!--[if lt IE 9]>\n<script src="../../assets/global/plugins/respond.min.js"></script>\n<script src="../../assets/global/plugins/excanvas.min.js"></script>\n<![endif]-->\n\n<!-- END JAVASCRIPTS -->\n'), +a.put("app/main/mergeContact.choose.modal.html",'<div class="modal-header" data-ng-init="initView()">\n <h3 class="modal-title">{{ \'APPLICATION_CHOOSE_CONTACT_TO_MERGE\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <!-- START TABLE -->\n<div data-ng-if="gridOptions" ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n</div>\n<!-- END TABLE -->\n</div>\n<div class="modal-footer">\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/main/mergeContact.merge.modal.html",'<div class="modal-header" data-ng-init="initView()">\n <h3 class="modal-title">{{ \'APPLICATION_MERGE\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="forms.general" data-ng-submit="submit({index:index,item:contact})" novalidate>\n <!-- BEGIN PORTLET -->\n <div class="portlet light ">\n <div class="portlet-body row">\n <div class="col-md-4">\n <!-- START FIRSTNAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.firstName.$touched || forms.general.$submitted) && forms.general.firstName.$invalid}">\n <label class="control-label">{{\'APPLICATION_FIRSTNAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input data-ng-if="fields.firstName.length <= 1" type="text" name="firstName" placeholder="{{\'APPLICATION_FIRSTNAME\' | translate}}" class="form-control" data-ng-model="contact.firstName" required/>\n <ui-select data-ng-if="fields.firstName.length > 1" data-ng-model="contact.firstName" theme="bootstrap" name="firstName" required>\n <ui-select-match placeholder="{{ \'APPLICATION_FIRSTNAME\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="field in fields.firstName | filter: $select.search track by $index">\n <div ng-bind-html="field | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.general.firstName.$touched || forms.general.$submitted) && forms.general.firstName.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END FIRSTNAME -->\n\n <!-- START LASTNAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.lastName.$touched || forms.general.$submitted) && forms.general.lastName.$invalid}">\n <label class="control-label">{{\'APPLICATION_LASTNAME\' | translate}}</label>\n <input data-ng-if="fields.lastName.length <= 1" type="text" name="lastName" placeholder="{{\'APPLICATION_LASTNAME\' | translate}}" class="form-control" data-ng-model="contact.lastName"/>\n <ui-select data-ng-if="fields.lastName.length > 1" data-ng-model="contact.lastName" theme="bootstrap" name="lastName">\n <ui-select-match placeholder="{{ \'APPLICATION_LASTNAME\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="field in fields.lastName | filter: $select.search track by $index">\n <div ng-bind-html="field | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.general.lastName.$touched || forms.general.$submitted) && forms.general.lastName.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END LASTNAME -->\n\n <!-- START COMPANY -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.general.CompanyId.$invalid && forms.general.$submitted}">\n <label class="control-label">{{\'APPLICATION_COMPANY\' | translate}}</label>\n <ui-select data-ng-model="contact.CompanyId" theme="bootstrap" name="CompanyId" ng-disabled="!companies.length" required>\n <ui-select-match placeholder="{{ \'APPLICATION_COMPANY\' | translate }}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="company.id as company in companies | filter: $select.search" null-option="scope.noCompany">\n <div ng-bind-html="company.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="companies.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_COMPANIES_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/contactmanager/companies/list">{{\'APPLICATION_COMPANIES\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="forms.general.CompanyId.$invalid && forms.general.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END COMPANY -->\n </div>\n <div class="col-md-4">\n <!-- START PHONE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.phone.$touched || forms.general.$submitted) && forms.general.phone.$invalid}">\n <label class="control-label">{{\'APPLICATION_PHONE\' | translate}}</label>\n <input data-ng-if="fields.phone.length <= 1" type="text" name="phone" placeholder="{{\'APPLICATION_PHONE\' | translate}}" class="form-control" data-ng-model="contact.phone"/>\n <ui-select data-ng-if="fields.phone.length > 1" data-ng-model="contact.phone" theme="bootstrap" name="phone">\n <ui-select-match placeholder="{{ \'APPLICATION_PHONE\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="field in fields.phone | filter: $select.search track by $index">\n <div ng-bind-html="field | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.general.phone.$touched || forms.general.$submitted) && forms.general.phone.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PHONE -->\n <!-- START MOBILE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.mobile.$touched || forms.general.$submitted) && forms.general.mobile.$invalid}">\n <label class="control-label">{{\'APPLICATION_MOBILE\' | translate}}</label>\n <input data-ng-if="fields.mobile.length <= 1" type="text" name="mobile" placeholder="{{\'APPLICATION_MOBILE\' | translate}}" class="form-control" data-ng-model="contact.mobile"/>\n <ui-select data-ng-if="fields.mobile.length > 1" data-ng-model="contact.mobile" theme="bootstrap" name="mobile">\n <ui-select-match placeholder="{{ \'APPLICATION_MOBILE\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="field in fields.mobile | filter: $select.search track by $index">\n <div ng-bind-html="field | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.general.mobile.$touched || forms.general.$submitted) && forms.general.mobile.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END MOBILE -->\n <!-- START EMAIL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.email.$touched || forms.general.$submitted) && forms.general.email.$invalid}">\n <label class="control-label">{{\'APPLICATION_EMAIL\' | translate}}</label>\n <input data-ng-if="fields.email.length <= 1" type="email" name="email" placeholder="{{\'APPLICATION_EMAIL\' | translate}}" class="form-control" data-ng-model="contact.email"/>\n <ui-select data-ng-if="fields.email.length > 1" data-ng-model="contact.email" theme="bootstrap" name="email">\n <ui-select-match placeholder="{{ \'APPLICATION_EMAIL\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="field in fields.email | filter: $select.search track by $index">\n <div ng-bind-html="field | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.general.email.$touched || forms.general.$submitted) && forms.general.email.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END EMAIL -->\n </div>\n <div class="col-md-4">\n <!-- START FAX -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.fax.$touched || forms.general.$submitted) && forms.general.fax.$invalid}">\n <label class="control-label">{{\'APPLICATION_FAX\' | translate}}</label>\n <input data-ng-if="fields.fax.length <= 1" type="text" name="fax" placeholder="{{\'APPLICATION_FAX\' | translate}}" class="form-control" data-ng-model="contact.fax"/>\n <ui-select data-ng-if="fields.fax.length > 1" data-ng-model="contact.fax" theme="bootstrap" name="fax">\n <ui-select-match placeholder="{{ \'APPLICATION_FAX\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="field in fields.fax | filter: $select.search track by $index">\n <div ng-bind-html="field | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.general.fax.$touched || forms.general.$submitted) && forms.general.fax.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END FAX -->\n <!-- START TAGS -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.general.tags.$invalid && forms.general.$submitted}">\n <label class="control-label">{{\'APPLICATION_TAGS\' | translate}}</label>\n <ui-select multiple=\'true\' data-ng-model="contact.tags" theme="bootstrap" name="tags" ng-disabled="disabled">\n <ui-select-match placeholder="{{ \'APPLICATION_TAGS\' | translate }}">{{$item}}</ui-select-match>\n <ui-select-choices repeat="tag in tags | filter: $select.search">\n <div ng-bind-html="tag | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.general.tags.$invalid && forms.general.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TAGS -->\n <!-- START LIST -->\n <div class="form-group" data-ng-if="contact.id">\n <label class="control-label">{{\'APPLICATION_LIST\' | translate}}</label>\n <input type="text" name="list" placeholder="{{\'APPLICATION_LIST\' | translate}}" class="form-control" data-ng data-ng-model="contact.List.name" disabled/>\n </div>\n <!-- END LIST -->\n </div>\n </div>\n </div>\n <div class="portlet light upborder">\n <div class="portlet-body row">\n <div class="col-md-4">\n <!-- START STREET -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.street.$touched || forms.general.$submitted) && forms.general.street.$invalid}">\n <label class="control-label">{{\'APPLICATION_STREET\' | translate}}</label>\n <input data-ng-if="fields.street.length <= 1" type="text" name="street" placeholder="{{\'APPLICATION_STREET\' | translate}}" class="form-control" data-ng-model="contact.street"/>\n <ui-select data-ng-if="fields.street.length > 1" data-ng-model="contact.street" theme="bootstrap" name="street">\n <ui-select-match placeholder="{{ \'APPLICATION_STREET\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="field in fields.street | filter: $select.search track by $index">\n <div ng-bind-html="field | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.general.street.$touched || forms.general.$submitted) && forms.general.street.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END STREET -->\n\n <!-- START POSTALCODE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.postalCode.$touched || forms.general.$submitted) && forms.general.postalCode.$invalid}">\n <label class="control-label">{{\'APPLICATION_POSTALCODE\' | translate}}</label>\n <input data-ng-if="fields.postalCode.length <= 1" type="text" name="postalCode" placeholder="{{\'APPLICATION_POSTALCODE\' | translate}}" class="form-control" data-ng-model="contact.postalCode"/>\n <ui-select data-ng-if="fields.postalCode.length > 1" data-ng-model="contact.postalCode" theme="bootstrap" name="postalCode">\n <ui-select-match placeholder="{{ \'APPLICATION_POSTALCODE\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="field in fields.postalCode | filter: $select.search track by $index">\n <div ng-bind-html="field | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.general.postalCode.$touched || forms.general.$submitted) && forms.general.postalCode.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END POSTALCODE -->\n\n <!-- START CITY -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.city.$touched || forms.general.$submitted) && forms.general.city.$invalid}">\n <label class="control-label">{{\'APPLICATION_CITY\' | translate}}</label>\n <input data-ng-if="fields.city.length <= 1" type="text" name="city" placeholder="{{\'APPLICATION_CITY\' | translate}}" class="form-control" data-ng-model="contact.city"/>\n <ui-select data-ng-if="fields.city.length > 1" data-ng-model="contact.city" theme="bootstrap" name="city">\n <ui-select-match placeholder="{{ \'APPLICATION_CITY\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="field in fields.city | filter: $select.search track by $index">\n <div ng-bind-html="field | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.general.city.$touched || forms.general.$submitted) && forms.general.city.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CITY -->\n </div>\n <div class="col-md-4">\n <!-- START COUNTRY -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.country.$touched || forms.general.$submitted) && forms.general.country.$invalid}">\n <label class="control-label">{{\'APPLICATION_COUNTRY\' | translate}}</label>\n <input data-ng-if="fields.country.length <= 1" type="text" name="country" placeholder="{{\'APPLICATION_COUNTRY\' | translate}}" class="form-control" data-ng-model="contact.country"/>\n <ui-select data-ng-if="fields.country.length > 1" data-ng-model="contact.country" theme="bootstrap" name="country">\n <ui-select-match placeholder="{{ \'APPLICATION_COUNTRY\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="field in fields.country | filter: $select.search track by $index">\n <div ng-bind-html="field | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.general.country.$touched || forms.general.$submitted) && forms.general.country.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END COUNTRY -->\n\n <!-- START DATEOFBIRTH -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.dateOfBirth.$touched || forms.general.$submitted) && forms.general.dateOfBirth.$invalid}">\n <label class="control-label">{{\'APPLICATION_DATEOFBIRTH\' | translate}}</label>\n <input data-ng-if="fields.dateOfBirth.length <= 1" type="date" name="dateOfBirth" placeholder="{{\'APPLICATION_DATEOFBIRTH\' | translate}}" class="form-control" data-ng-model="contact.dateOfBirth"/>\n <ui-select data-ng-if="fields.dateOfBirth.length > 1" data-ng-model="contact.dateOfBirth" theme="bootstrap" name="dateOfBirth">\n <ui-select-match placeholder="{{ \'APPLICATION_DATEOFBIRTH\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="field in fields.dateOfBirth | filter: $select.search track by $index">\n <div ng-bind-html="field | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.general.dateOfBirth.$touched || forms.general.$submitted) && forms.general.dateOfBirth.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END DATEOFBIRTH -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea style="resize: vertical;" data-ng-if="fields.description.length <= 1" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="contact.description"/></textarea>\n <ui-select data-ng-if="fields.description.length > 1" data-ng-model="contact.description" theme="bootstrap" name="description">\n <ui-select-match placeholder="{{ \'APPLICATION_DESCRIPTION\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="field in fields.description | filter: $select.search track by $index">\n <div ng-bind-html="field | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END DESCRIPTION -->\n </div>\n <div class="col-md-4">\n <!-- START URL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.url.$touched || forms.general.$submitted) && forms.general.url.$invalid}">\n <label class="control-label">{{\'APPLICATION_URL\' | translate}}</label>\n <input data-ng-if="fields.url.length <= 1" type="text" name="url" placeholder="{{\'APPLICATION_URL\' | translate}}" class="form-control" data-ng-model="contact.url"/>\n <ui-select data-ng-if="fields.url.length > 1" data-ng-model="contact.url" theme="bootstrap" name="url">\n <ui-select-match placeholder="{{ \'APPLICATION_URL\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="field in fields.url | filter: $select.search track by $index">\n <div ng-bind-html="field | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.general.url.$touched || forms.general.$submitted) && forms.general.url.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END URL -->\n </div>\n </div>\n </div>\n <div class="portlet light upborder" data-ng-if="customFields.length">\n <div class="portlet-body">\n <div class="row">\n <div class="col-md-4" data-ng-repeat="customField in customFields">\n <div data-ng-if="customField.type==\'text\'" class="form-group" data-ng-class="{\'has-error\': (forms.general[customField.name].$touched || forms.general.$submitted) && forms.general[customField.name].$invalid}">\n <label class="control-label">{{customField.alias}}</label>\n <input data-ng-if="fields[customField.name].length <= 1" type="text" name="{{customField.name}}" placeholder="{{customField.alias}}" class="form-control" data-ng-model="contact[customField.name]"/>\n <ui-select data-ng-if="fields[customField.name].length > 1" data-ng-model="contact[customField.name]" theme="bootstrap" name="{{customField.name}}">\n <ui-select-match placeholder="{{customField.name}}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="field in fields[customField.name] | filter: $select.search track by $index">\n <div ng-bind-html="field | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.general[customField.name].$touched || forms.general.$submitted) && forms.general[customField.name].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div data-ng-if="customField.type==\'select\'" class="form-group" data-ng-class="{\'has-error\': forms.general[customField.name].$invalid && forms.general.$submitted}">\n <label class="control-label">{{customField.alias}}</label>\n <ui-select data-ng-model="contact[customField.name]" theme="bootstrap" name="{{customField.name}}" data-ng-disabled="disabled">\n <ui-select-match allow-clear placeholder="{{customField.alias}}">{{$select.selected.value}}</ui-select-match>\n <ui-select-choices repeat="choice.value as choice in customField.values | filter: $select.search">\n <div ng-bind-html="choice.value | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.general[customField.name].$invalid && forms.general.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n <!-- END PORTLET -->\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="merge()" ng-disabled="forms.general.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/main/template/actionBuilder/template.actionBuilderIntegration.html",'<div data-ng-if="randomName" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$invalid}">\n <ui-select data-ng-model="element.data1" name="data1{{randomName}}" theme="bootstrap" data-ng-change="changeIntegration()" required>\n <ui-select-match placeholder="{{ \'APPLICATION_INTEGRATION\' | translate }}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="integration.state as integration in integrations | filter: $select.search">\n <div ng-bind-html="integration.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{\'APPLICATION_INTEGRATION\' | translate}}\n </span>\n <span data-ng-show="(form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n<div class="form-group col-md-6" data-ng-if="element.data1 && accounts && randomName" data-ng-class="{\'has-error\': (form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$invalid}">\n <ui-select data-ng-model="element.data2" name="data2{{randomName}}" theme="bootstrap" data-ng-change="changeAccount();" required>\n <ui-select-match placeholder="{{\'APPLICATION_ACCOUNT\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="account.id as account in accounts | filter: $select.search">\n <div ng-bind-html="account.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{\'APPLICATION_ACCOUNT\' | translate}}\n </span>\n <span data-ng-show="(form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n<div class="form-group col-md-6" data-ng-if="element.data2 && configurations && randomName" data-ng-class="{\'has-error\': (form[\'data3\'+randomName].$touched || form.$submitted) && form[\'data3\'+randomName].$invalid}">\n <ui-select data-ng-model="element.data3" name="data3{{randomName}}" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_CONFIGURATION\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="config.id as config in configurations | filter: $select.search">\n <div ng-bind-html="config.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{\'APPLICATION_CONFIGURATION\' | translate}}\n </span>\n <span data-ng-show="(form[\'data3\'+randomName].$touched || form.$submitted) && form[\'data3\'+randomName].$error.required" class="help-block help-block-error">\n'+" <strong>{{'APPLICATION_WARNING' | translate}}!</strong> {{'MESSAGE_REQUIRED_FIELD' | translate}}.\n </span>\n</div>\n"),a.put("app/main/template/actionBuilder/template.actionBuilderJscripty.html",'<div data-ng-if="randomName" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$invalid}">\n <ui-select data-ng-model="element.data1" name="data1{{randomName}}" theme="bootstrap" required>\n <ui-select-match>{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="project.id as project in projects | filter: $select.search">\n <div ng-bind-html="project.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$error.required" class="help-block help-block-error">\n'+" <strong>{{'APPLICATION_WARNING' | translate}}!</strong> {{'MESSAGE_REQUIRED_FIELD' | translate}}.\n </span>\n</div>\n"),a.put("app/main/template/actionBuilder/template.actionBuilderMotionBar.html",'<!-- data1: 0 POPUP, 1 URL, 2 WINAPP -->\n<div data-ng-if="randomName" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$invalid}">\n <ui-select data-ng-model="element.data1" name="data1{{randomName}}" theme="bootstrap" required data-ng-change="changeMode();">\n <ui-select-match placeholder="{{ \'APPLICATION_TYPE\' | translate }}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="motionAction.value as motionAction in motionActions | filter: $select.search">\n <div ng-bind-html="motionAction.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'APPLICATION_TYPE\' | translate }}\n </span>\n <span data-ng-show="(form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n\n<!-- data1:0 data2:Template -->\n<div data-ng-if="randomName && element.data1==0" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$invalid}">\n <ui-select data-ng-model="element.data2" name="data2{{randomName}}" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_TEMPLATE\' | translate }}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="template.id as template in templates | filter: $select.search">\n <div ng-bind-html="template.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'APPLICATION_TEMPLATE\' | translate }}\n </span>\n <span data-ng-show="(form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n\n<!-- data1:1 data2:URL -->\n<div data-ng-if="randomName && element.data1==1" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$invalid}">\n <input type="text" ng-model="element.data2" name="data2{{randomName}}" class="form-control" required placeholder="{{ \'APPLICATION_URL\' | translate }}"/>\n <span class="help-block">\n {{ \'APPLICATION_URL\' | translate }}\n </span>\n <span data-ng-show="(form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n\n<!-- data1:2 data2:Application data3:Arguments -->\n<div data-ng-if="randomName && element.data1==2" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$invalid}">\n <input type="text" ng-model="element.data2" name="data2{{randomName}}" class="form-control" required placeholder="{{ \'APPLICATION_APPLICATION\' | translate }}"/>\n <span class="help-block">\n {{ \'APPLICATION_APPLICATION\' | translate }}\n </span>\n <span data-ng-show="(form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n<div data-ng-if="randomName && element.data1==2" class="form-group col-md-6">\n <input type="text" ng-model="element.data3" name="data3{{randomName}}" class="form-control" placeholder="{{ \'APPLICATION_ARGUMENTS\' | translate }}"/>\n <span class="help-block">\n {{ \'APPLICATION_ARGUMENTS\' | translate }}\n </span>\n</div>\n'), +a.put("app/main/template/actionBuilder/template.actionBuilderStatus.html",'<div data-ng-if="randomName" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$invalid}">\n <ui-select data-ng-model="element.data1" name="data1{{randomName}}" theme="bootstrap" required>\n <ui-select-match>{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="status.value as status in states | filter: $select.search">\n <div ng-bind-html="status.name | translate | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$error.required" class="help-block help-block-error">\n'+" <strong>{{'APPLICATION_WARNING' | translate}}!</strong> {{'MESSAGE_REQUIRED_FIELD' | translate}}.\n </span>\n</div>\n"),a.put("app/main/template/actionBuilder/template.actionBuilderTemplate.html",'<div data-ng-if="randomName" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$invalid}">\n <ui-select data-ng-model="element.data1" name="data1{{randomName}}" theme="bootstrap" required>\n <ui-select-match>{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="template.id as template in templates | filter: $select.search">\n <div ng-bind-html="template.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n<div data-ng-if="randomName" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$invalid}">\n <input type="text" ng-model="element.data2" name="data2{{randomName}}" class="form-control" required/>\n <span data-ng-show="(form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n<div class="col-md-6">\n <input type="text" ng-model="element.data3" class="form-control"/>\n</div>\n'),a.put("app/main/template/actionBuilder/template.actionBuilderUrlForward.html",'<div data-ng-if="randomName" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$invalid}">\n <ui-select data-ng-model="element.data1" name="data1{{randomName}}" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_TYPE\' | translate }}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="type.value as type in types | filter: $select.search">\n <div ng-bind-html="type.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{\'APPLICATION_TYPE\' | translate}}\n </span>\n <span data-ng-show="(form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n<div class="form-group col-md-6" data-ng-if="element.data1 && randomName" data-ng-class="{\'has-error\': (form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$invalid}">\n <input type="url" ng-model="element.data2" placeholder="{{ \'APPLICATION_URL\' | translate }}" name="data2{{randomName}}" class="form-control" required/>\n <span class="help-block">\n {{\'APPLICATION_URL\' | translate}}\n </span>\n <span data-ng-show="(form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$error.required" class="help-block help-block-error">\n'+" <strong>{{'APPLICATION_WARNING' | translate}}!</strong> {{'MESSAGE_REQUIRED_FIELD' | translate}}.\n </span>\n</div>\n"),a.put("app/main/template/template.conditionBuilder.html",'<div data-ng-if="randomName" class="form-group col-md-4" data-ng-class="{\'has-error\': (form[\'field\'+randomName].$touched || form.$submitted) && form[\'field\'+randomName].$invalid}">\n <ui-select data-ng-model="element.field" name="field{{randomName}}" theme="bootstrap" data-ng-change="checkCondition(element.field)" required>\n <ui-select-match>{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="condition.value as condition in service.services[serviceindex].conditions | filter: $select.search">\n <div ng-bind-html="condition.name | translate | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form[\'field\'+randomName].$touched || form.$submitted) && form[\'field\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n<div data-ng-if="randomName && element.field" class="form-group col-md-4" data-ng-class="{\'has-error\': (form[\'operator\'+randomName].$touched || form.$submitted) && form[\'operator\'+randomName].$invalid}">\n <ui-select data-ng-model="element.operator" name="operator{{randomName}}" theme="bootstrap" required>\n <ui-select-match>{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="operator.value as operator in _.find(service.services[serviceindex].conditions,{value:element.field}).operators | filter: $select.search">\n <div ng-bind-html="operator.name | translate | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form[\'operator\'+randomName].$touched || form.$submitted) && form[\'operator\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n<div class="col-md-4" data-ng-if="elementType === \'input\' && randomName && element.field" data-ng-class="{\'has-error\': (form[\'value\'+randomName].$touched || form.$submitted) && form[\'value\'+randomName].$invalid}">\n <input type="text" ng-model="element.value" class="form-control" name="value{{randomName}}" required/>\n <span data-ng-show="(form[\'value\'+randomName].$touched || form.$submitted) && form[\'value\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n<div class="form-group col-md-4" data-ng-if="elementType === \'select\' && randomName && element.field" data-ng-class="{\'has-error\': (form[\'value\'+randomName].$touched || form.$submitted) && form[\'value\'+randomName].$invalid}">\n <ui-select data-ng-model="element.value" name="value{{randomName}}" theme="bootstrap" required>\n <ui-select-match>{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="value.value as value in values| filter: $select.search">\n <div ng-bind-html="value.name | translate | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form[\'value\'+randomName].$touched || form.$submitted) && form[\'value\'+randomName].$error.required" class="help-block help-block-error">\n'+" <strong>{{'APPLICATION_WARNING' | translate}}!</strong> {{'MESSAGE_REQUIRED_FIELD' | translate}}.\n </span>\n</div>\n"),a.put("app/main/template/template.contactTab.html",'<div class="row margin-top-20 contact-tab-container">\n <div class="col-md-12 contact-tab">\n <form name="forms.general" data-ng-submit="submit({index:index,item:contact})" novalidate>\n <!-- BEGIN PROFILE CONTENT -->\n <div class="profile-content">\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#tab_1_1{{contact.id || \'\'}}" data-toggle="tab">{{\'APPLICATION_DETAIL\' | translate}}</a>\n </li>\n <li data-ng-if="contact.id">\n <a href="#tab_1_2{{contact.id || \'\'}}" data-toggle="tab">{{\'APPLICATION_CUSTOMER_JOURNEY\' | translate}}</a>\n </li>\n</ul>\n<div class="tab-content">\n <div class="tab-pane fade active in" id="tab_1_1{{contact.id || \'\'}}">\n <!--end add-portfolio-->\n <div class="row portfolio-block" data-ng-if="workspace.data && workspace.data.uniqueid && workspace.data.agentcalledAt">\n <div class="col-md-3">\n <div class="portfolio-text">\n <img src="assets/images/media/CmCall.png" alt=""/>\n <div class="portfolio-text-info">\n <h4>{{\'MESSAGE_INBOUND_CALL_FROM\' | translate}} - {{workspace.data.calleridnum}}</h4>\n <p>\n {{\'MESSAGE_CALL_UNIQUEID\' | translate}} : {{workspace.data.uniqueid}}\n </p>\n </div>\n </div>\n </div>\n <div class="col-md-2 portfolio-stat">\n <div>{{\'APPLICATION_QUEUE\' | translate}} </div>\n <p> {{workspace.data.queue}} </p>\n </div>\n <div class="col-md-3 portfolio-stat">\n <div>{{\'APPLICATION_AGENT\' | translate}} </div>\n <p> {{workspace.data.membername}} </p>\n </div>\n <div class="col-md-2 portfolio-stat">\n <div>{{\'APPLICATION_DATE\' | translate}} </div>\n <p> {{workspace.data.agentcalledAt | date:\'dd/MM/yyyy HH:mm:ss\'}} </p>\n </div>\n <div class="col-md-2 portfolio-stat">\n <button class="btn grey-cascade" type="button" data-ng-click="dispose()" data-ng-disabled="contact.disposed">\n <i class="icon-target"></i> {{\'APPLICATION_DISPOSITION\' | translate}}\n </button>\n </div>\n </div>\n <!--end row-->\n <!-- BEGIN PORTLET -->\n <div class="portlet light ">\n <div class="portlet-title">\n <div class="caption caption-md">\n <i class="icon-bar-chart theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_DETAIL\' | translate}}</span>\n </div>\n <div class="actions">\n <div class="btn-group btn-group-devided" data-toggle="buttons">\n <button type="submit" data-ng-if="contact.id" title="{{\'APPLICATION_COPY\' | translate}}" class="btn btn-circle green btn-sm" data-ng-click="copy(contact.id)"><i class="fa fa-files-o"></i></button>\n <button type="submit" data-ng-if="contact.ListId" class="btn btn-circle purple btn-sm" title="{{\'APPLICATION_MERGE\' | translate}}" data-ng-click="merge(contact)"><i class="icon-link"></i></button>\n <label class="btn btn-transparent grey-salsa btn-circle btn-sm active" data-ng-click="detail.tab=\'main\'">\n <input type="radio" class="toggle">{{\'APPLICATION_MAIN\' | translate}}</label>\n <label class="btn btn-transparent grey-salsa btn-circle btn-sm" data-ng-click="detail.tab=\'other\'">\n <input type="radio" class="toggle">{{\'APPLICATION_OTHER\' | translate}}</label>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <div data-ng-class="{\'hidden\':detail.tab != \'main\'}" class="portlet-body contact-portlet row">\n <div class="col-md-4">\n <!-- START FIRSTNAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.firstName.$touched || forms.general.$submitted) && forms.general.firstName.$invalid}">\n <label class="control-label">{{\'APPLICATION_FIRSTNAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="firstName" placeholder="{{\'APPLICATION_FIRSTNAME\' | translate}}" class="form-control" data-ng-model="contact.firstName" required/>\n <span data-ng-show="(forms.general.firstName.$touched || forms.general.$submitted) && forms.general.firstName.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END FIRSTNAME -->\n\n <!-- START LASTNAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.lastName.$touched || forms.general.$submitted) && forms.general.lastName.$invalid}">\n <label class="control-label">{{\'APPLICATION_LASTNAME\' | translate}}</label>\n <input type="text" name="lastName" placeholder="{{\'APPLICATION_LASTNAME\' | translate}}" class="form-control" data-ng-model="contact.lastName"/>\n <span data-ng-show="(forms.general.lastName.$touched || forms.general.$submitted) && forms.general.lastName.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END LASTNAME -->\n\n <!-- START COMPANY -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.general.CompanyId.$invalid && forms.general.$submitted}">\n <label class="control-label">{{\'APPLICATION_COMPANY\' | translate}}</label>\n <div class="input-group">\n <ui-select data-ng-model="contact.CompanyId" theme="bootstrap" name="CompanyId" ng-disabled="!companies.length" required>\n <ui-select-match placeholder="{{ \'APPLICATION_COMPANY\' | translate }}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="company.id as company in companies | filter: $select.search" null-option="scope.noCompany">\n <div ng-bind-html="company.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="input-group-btn">\n <button type="button" data-ng-click="companyInfo(contact.CompanyId)" class="btn btn-default" data-ng-disabled="!contact.CompanyId">\n <span class="icon-info" data-ng-class="{\'font-blue\':contact.CompanyId}"></span>\n </button>\n </span>\n </div>\n <div class="note note-warning" data-ng-hide="companies.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_COMPANIES_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/contactmanager/companies/list">{{\'APPLICATION_COMPANIES\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="forms.general.CompanyId.$invalid && forms.general.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END COMPANY -->\n </div>\n <div class="col-md-4">\n <!-- START PHONE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.phone.$touched || forms.general.$submitted) && forms.general.phone.$invalid}">\n <label class="control-label">{{\'APPLICATION_PHONE\' | translate}}</label>\n <div class="input-group">\n <input type="text" name="phone" placeholder="{{\'APPLICATION_PHONE\' | translate}}" class="form-control" data-ng-model="contact.phone"/>\n <span class="input-group-btn" uib-dropdown>\n <button data-ng-if="Auth.isAgent()" type="button" uib-dropdown-toggle class="btn btn-default" data-ng-disabled="!contact.phone || !agent.phoneBarRemoteControl" >\n <span class="icon-earphones-alt" data-ng-class="{\'font-blue\':contact.phone && agent.phoneBarRemoteControl}" uib-tooltip="{{!agent.phoneBarRemoteControl ? (\'APPLICATION_ENABLE_REMOTE_PHONEBAR\' | translate) : (\'APPLICATION_MOTION_BAR_CONTROLS\' | translate)}}" ></span>\n </button>\n <ul class="dropdown-menu" uib-dropdown-menu role="menu" aria-labelledby="single-button">\n <li role="menuitem"><a href="#" data-ng-click="callPhoneBar(contact.phone,\'call\')"><i class="icon-phone"></i> {{\'APPLICATION_CALL\' | translate}}</a></li>\n <li role="menuitem"><a href="#" data-ng-click="callPhoneBar(contact.phone,\'transfer\')"><i class="glyphicon glyphicon-random"></i> {{\'APPLICATION_TRANSFER\' | translate}}</a></li>\n </ul>\n <button type="button" data-ng-click="openRoom(null,\'smsRoom\',{to:contact.phone})" class="btn btn-default" data-ng-disabled="!contact.phone || !license.messaging">\n <span class="glyphicon glyphicon-comment" data-ng-class="{\'font-blue\':contact.phone && license.messaging}"></span>\n </button>\n </span>\n </div>\n <span data-ng-show="(forms.general.phone.$touched || forms.general.$submitted) && forms.general.phone.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PHONE -->\n <!-- START MOBILE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.mobile.$touched || forms.general.$submitted) && forms.general.mobile.$invalid}">\n <label class="control-label">{{\'APPLICATION_MOBILE\' | translate}}</label>\n <div class="input-group">\n <input type="text" name="mobile" placeholder="{{\'APPLICATION_MOBILE\' | translate}}" class="form-control" data-ng-model="contact.mobile"/>\n <span class="input-group-btn" uib-dropdown>\n <button data-ng-if="Auth.isAgent()" type="button" uib-dropdown-toggle class="btn btn-default" data-ng-disabled="!contact.mobile || !agent.phoneBarRemoteControl" >\n <span class="icon-earphones-alt" data-ng-class="{\'font-blue\':contact.mobile && agent.phoneBarRemoteControl}" uib-tooltip="{{!agent.phoneBarRemoteControl ? (\'APPLICATION_ENABLE_REMOTE_PHONEBAR\' | translate) : (\'APPLICATION_MOTION_BAR_CONTROLS\' | translate)}}" ></span>\n </button>\n <ul class="dropdown-menu" uib-dropdown-menu role="menu" aria-labelledby="single-button">\n <li role="menuitem"><a href="#" data-ng-click="callPhoneBar(contact.mobile,\'call\')"><i class="icon-phone"></i> {{\'APPLICATION_CALL\' | translate}}</a></li>\n <li role="menuitem"><a href="#" data-ng-click="callPhoneBar(contact.mobile,\'transfer\')"><i class="glyphicon glyphicon-random"></i> {{\'APPLICATION_TRANSFER\' | translate}}</a></li>\n </ul>\n <button type="button" data-ng-click="openRoom(null,\'smsRoom\',{to:contact.mobile})" class="btn btn-default" data-ng-disabled="!contact.mobile || !license.messaging">\n <span class="glyphicon glyphicon-comment" data-ng-class="{\'font-blue\':contact.mobile && license.messaging}"></span>\n </button>\n </span>\n </div>\n <span data-ng-show="(forms.general.mobile.$touched || forms.general.$submitted) && forms.general.mobile.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END MOBILE -->\n <!-- START EMAIL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.email.$touched || forms.general.$submitted) && forms.general.email.$invalid}">\n <label class="control-label">{{\'APPLICATION_EMAIL\' | translate}}</label>\n <div class="input-group">\n <input type="text" name="email" placeholder="{{\'APPLICATION_EMAIL\' | translate}}" class="form-control" data-ng-model="contact.email"/>\n <span class="input-group-btn">\n <button type="button" data-ng-click="openRoom(null,\'mailRoom\',{to:contact.email})" class="btn btn-default" data-ng-disabled="!contact.email || !license.mail">\n <span class="icon-envelope" data-ng-class="{\'font-blue\':contact.email && license.mail}"></span>\n </button>\n </span>\n </div>\n <span data-ng-show="(forms.general.email.$touched || forms.general.$submitted) && forms.general.email.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END EMAIL -->\n </div>\n <div class="col-md-4">\n <!-- START FAX -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.fax.$touched || forms.general.$submitted) && forms.general.fax.$invalid}">\n <label class="control-label">{{\'APPLICATION_FAX\' | translate}}</label>\n <div class="input-group">\n <input type="text" name="fax" placeholder="{{\'APPLICATION_FAX\' | translate}}" class="form-control" data-ng-model="contact.fax"/>\n <span class="input-group-btn">\n <button type="button" data-ng-click="openRoom(null,\'faxRoom\',{to:contact.fax})" class="btn btn-default" data-ng-disabled="!contact.fax || !license.fax">\n <span class="fa fa-fax" data-ng-class="{\'font-blue\':contact.fax && license.fax}"></span>\n </button>\n </span>\n </div>\n <span data-ng-show="(forms.general.fax.$touched || forms.general.$submitted) && forms.general.fax.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END FAX -->\n <!-- START TAGS -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.general.tags.$invalid && forms.general.$submitted}">\n <label class="control-label">{{\'APPLICATION_TAGS\' | translate}}</label>\n <ui-select multiple=\'true\' data-ng-model="contact.tags" theme="bootstrap" name="tags" ng-disabled="disabled">\n <ui-select-match placeholder="{{ \'APPLICATION_TAGS\' | translate }}">{{$item}}</ui-select-match>\n <ui-select-choices repeat="tag in tags | filter: $select.search">\n {{tag}}\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.general.tags.$invalid && forms.general.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TAGS -->\n <!-- START LIST -->\n <div class="form-group" data-ng-if="contact.id">\n <label class="control-label">{{\'APPLICATION_LIST\' | translate}}</label>\n <input type="text" name="list" placeholder="{{\'APPLICATION_LIST\' | translate}}" class="form-control" data-ng data-ng-model="contact.List.name" disabled/>\n </div>\n <!-- END LIST -->\n <!-- START LIST -->\n <div data-ng-if="!contact.id" class="form-group" data-ng-class="{\'has-error\': forms.general.ListId.$invalid && forms.general.$submitted}">\n <label class="control-label">{{\'APPLICATION_LIST\' | translate}}</label>\n <ui-select data-ng-model="contact.ListId" theme="bootstrap" name="ListId" data-ng-change="getCustomFields()" required>\n <ui-select-match placeholder="{{ \'APPLICATION_LIST\' | translate }}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="list.id as list in lists | filter: $select.search">\n <div ng-bind-html="list.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <div class="note note-warning" data-ng-hide="lists.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_LISTS_AVAILABLE\' | translate }}\n </p>\n <p>\n {{\'APPLICATION_GO_TO\' | translate}} <a href="/contactmanager/lists/list">{{\'APPLICATION_LISTS\' | translate}}</a>\n </p>\n </div>\n <span data-ng-show="forms.general.ListId.$invalid && forms.general.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END LIST -->\n </div>\n </div>\n <div data-ng-class="{\'hidden\':detail.tab != \'other\'}" class="portlet-body contact-portlet row">\n <div class="col-md-4">\n <!-- START STREET -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.street.$touched || forms.general.$submitted) && forms.general.street.$invalid}">\n <label class="control-label">{{\'APPLICATION_STREET\' | translate}}</label>\n <input type="text" name="street" placeholder="{{\'APPLICATION_STREET\' | translate}}" class="form-control" data-ng-model="contact.street"/>\n <span data-ng-show="(forms.general.street.$touched || forms.general.$submitted) && forms.general.street.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END STREET -->\n\n <!-- START POSTALCODE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.postalCode.$touched || forms.general.$submitted) && forms.general.postalCode.$invalid}">\n <label class="control-label">{{\'APPLICATION_POSTALCODE\' | translate}}</label>\n <input type="text" name="postalCode" placeholder="{{\'APPLICATION_POSTALCODE\' | translate}}" class="form-control" data-ng-model="contact.postalCode"/>\n <span data-ng-show="(forms.general.postalCode.$touched || forms.general.$submitted) && forms.general.postalCode.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END POSTALCODE -->\n\n <!-- START CITY -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.city.$touched || forms.general.$submitted) && forms.general.city.$invalid}">\n <label class="control-label">{{\'APPLICATION_CITY\' | translate}}</label>\n <input type="text" name="city" placeholder="{{\'APPLICATION_CITY\' | translate}}" class="form-control" data-ng-model="contact.city"/>\n <span data-ng-show="(forms.general.city.$touched || forms.general.$submitted) && forms.general.city.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CITY -->\n </div>\n <div class="col-md-4">\n <!-- START COUNTRY -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.country.$touched || forms.general.$submitted) && forms.general.country.$invalid}">\n <label class="control-label">{{\'APPLICATION_COUNTRY\' | translate}}</label>\n <input type="text" name="country" placeholder="{{\'APPLICATION_COUNTRY\' | translate}}" class="form-control" data-ng-model="contact.country"/>\n <span data-ng-show="(forms.general.country.$touched || forms.general.$submitted) && forms.general.country.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END COUNTRY -->\n\n <!-- START DATEOFBIRTH -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.dateOfBirth.$touched || forms.general.$submitted) && forms.general.dateOfBirth.$invalid}">\n <label class="control-label">{{\'APPLICATION_DATEOFBIRTH\' | translate}}</label>\n <input name="dateOfBirth" type="date" placeholder="{{\'APPLICATION_DATEOFBIRTH\' | translate}}" class="form-control date-picker" data-ng-model="contact.dateOfBirth"/>\n <span data-ng-show="(forms.general.dateOfBirth.$touched || forms.general.$submitted) && forms.general.dateOfBirth.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END DATEOFBIRTH -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea style="resize: vertical;" type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="contact.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n </div>\n <div class="col-md-4">\n <!-- START URL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.url.$touched || forms.general.$submitted) && forms.general.url.$invalid}">\n <label class="control-label">{{\'APPLICATION_URL\' | translate}}</label>\n <input type="text" name="url" placeholder="{{\'APPLICATION_URL\' | translate}}" class="form-control" data-ng-model="contact.url"/>\n <span data-ng-show="(forms.general.url.$touched || forms.general.$submitted) && forms.general.url.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END URL -->\n\n <!-- START CREATED_BY -->\n <div class="form-group" data-ng-if="contact.id">\n <label class="control-label">{{\'APPLICATION_CREATED_BY\' | translate}}</label>\n <input type="text" name="createdBy" placeholder="{{\'APPLICATION_CREATED_BY\' | translate}}" class="form-control" data-ng-model="contact.User.name" disabled/>\n </div>\n <!-- END CREATED_BY -->\n </div>\n </div>\n </div>\n <button type="submit" class="btn btn-circle green-haze btn-sm" data-ng-disabled="!contact.firstName || !contact.ListId">{{\'APPLICATION_UPDATE\' | translate}}</button>\n </div>\n <!-- END PORTLET -->\n <!-- BEGIN PORTLET -->\n <div class="portlet light" data-ng-if="customFields.length">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_CUSTOM_FIELDS\' | translate}}</span>\n </div>\n </div>\n <div class="portlet-body">\n <div class="row">\n <div class="col-md-4" data-ng-repeat="customField in customFields">\n <div data-ng-if="customField.type==\'text\'" class="form-group" data-ng-class="{\'has-error\': (forms.general[customField.name].$touched || forms.general.$submitted) && forms.general[customField.name].$invalid}">\n <label class="control-label">{{customField.alias}}</label>\n <input type="text" name="{{customField.name}}" placeholder="{{customField.alias}}" class="form-control" data-ng-model="contact[customField.name]"/>\n <span data-ng-show="(forms.general[customField.name].$touched || forms.general.$submitted) && forms.general[customField.name].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div data-ng-if="customField.type==\'select\'" class="form-group" data-ng-class="{\'has-error\': forms.general[customField.name].$invalid && forms.general.$submitted}">\n <label class="control-label">{{customField.alias}}</label>\n <ui-select data-ng-model="contact[customField.name]" theme="bootstrap" name="{{customField.name}}" data-ng-disabled="disabled">\n <ui-select-match allow-clear placeholder="{{customField.alias}}">{{$select.selected.value}}</ui-select-match>\n <ui-select-choices repeat="choice.value as choice in customField.values | filter: $select.search">\n <div ng-bind-html="choice.value | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.general[customField.name].$invalid && forms.general.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n </div>\n <button type="submit" class="btn btn-circle green-haze btn-sm" data-ng-disabled="!contact.firstName || !contact.ListId">{{\'APPLICATION_UPDATE\' | translate}}</button>\n </div>\n </div>\n <!-- END PORTLET -->\n </div>\n <div class="tab-pane fade" id="tab_1_2{{contact.id || \'\'}}">\n <!-- BEGIN PORTLET -->\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_CUSTOMER_JOURNEY\' | translate}}</span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_2_1" data-toggle="tab">{{ \'APPLICATION_DAILY\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_2_2" data-toggle="tab">{{ \'APPLICATION_HISTORY\' | translate}}</a>\n </li>\n </ul>\n </div>\n <div class="portlet-body">\n <!--BEGIN TABS-->\n <div class="tab-content">\n <div class="tab-pane active" id="tab_2_1">\n <div class="contact-portlet">\n <div class="actions">\n <div class="btn-group btn-group-devided" data-toggle="buttons">\n <label class="btn btn-transparent grey-salsa btn-circle btn-sm" data-ng-class="{\'active\':log.daily.show === \'phone\'}" data-ng-click="updateLog(\'daily\',\'phone\',\'general\',\'inbound\')">\n <input type="radio" class="toggle">{{\'APPLICATION_PHONES\' | translate}}</label>\n <label class="btn btn-transparent grey-salsa btn-circle btn-sm" data-ng-class="{\'active\':log.daily.show === \'email\'}" data-ng-click="updateLog(\'daily\',\'email\',\'general\',\'room\')">\n <input type="radio" class="toggle">{{\'APPLICATION_EMAILS\' | translate}}</label>\n <label class="btn btn-transparent grey-salsa btn-circle btn-sm" data-ng-class="{\'active\':log.daily.show === \'chat\'}" data-ng-click="updateLog(\'daily\',\'chat\',\'general\',\'room\')">\n <input type="radio" class="toggle">{{\'APPLICATION_CHAT\' | translate}}</label>\n <label class="btn btn-transparent grey-salsa btn-circle btn-sm" data-ng-class="{\'active\':log.daily.show === \'fax\'}" data-ng-click="updateLog(\'daily\',\'fax\',\'general\',\'room\')">\n <input type="radio" class="toggle">{{\'APPLICATION_FAX\' | translate}}</label>\n <label class="btn btn-transparent grey-salsa btn-circle btn-sm" data-ng-class="{\'active\':log.daily.show === \'sms\'}" data-ng-click="updateLog(\'daily\',\'sms\',\'general\',\'room\')">\n <input type="radio" class="toggle">{{\'APPLICATION_SMS\' | translate}}</label>\n </div><span data-ng-if="log.daily.show==\'phone\'"> |</span>\n <div class="btn-group btn-group-devided" data-toggle="buttons" data-ng-if="log.daily.show==\'phone\'">\n <label class="btn btn-transparent grey-salsa btn-circle btn-sm" data-ng-class="{\'active\':log.daily.type === \'inbound\'}" data-ng-click="updateLog(\'daily\',false,false,\'inbound\')">\n <input type="radio" class="toggle">{{\'APPLICATION_INBOUND\' | translate}}</label>\n <label class="btn btn-transparent grey-salsa btn-circle btn-sm" data-ng-class="{\'active\':log.daily.type === \'outbound\'}" data-ng-click="updateLog(\'daily\',false,\'general\',\'outbound\')">\n <input type="radio" class="toggle">{{\'APPLICATION_OUTBOUND\' | translate}}</label>\n </div><span data-ng-if="log.daily.show==\'phone\'"> |</span>\n <div class="btn-group btn-group-devided" data-toggle="buttons" data-ng-if="log.daily.show==\'phone\'">\n <label class="btn btn-transparent grey-salsa btn-circle btn-sm" data-ng-class="{\'active\':log.daily.detail === \'general\'}" data-ng-click="updateLog(\'daily\',false,\'general\',false)">\n <input type="radio" class="toggle">{{\'APPLICATION_GENERAL\' | translate}}</label>\n <label data-ng-if="log.daily.type===\'inbound\'" class="btn btn-transparent grey-salsa btn-circle btn-sm" data-ng-class="{\'active\':log.daily.detail === \'queue\'}" data-ng-click="updateLog(\'daily\',false,\'queue\',\'inbound\')">\n <input type="radio" class="toggle">{{\'APPLICATION_QUEUES\' | translate}}</label>\n </div>\n </div>\n <div data-ng-if="gridOptionsdaily" name="gridOptionsdaily" ui-grid="gridOptionsdaily" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptionsdaily.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n </div>\n </div>\n <div class="tab-pane" id="tab_2_2">\n <div class="contact-portlet">\n <div class="actions">\n <div class="btn-group btn-group-devided" data-toggle="buttons">\n'+" <label class=\"btn btn-transparent grey-salsa btn-circle btn-sm\" data-ng-class=\"{'active':log.history.show === 'phone'}\" data-ng-click=\"updateLog('history','phone','general','inbound')\">\n <input type=\"radio\" class=\"toggle\">{{'APPLICATION_PHONES' | translate}}</label>\n <label class=\"btn btn-transparent grey-salsa btn-circle btn-sm\" data-ng-class=\"{'active':log.history.show === 'email'}\" data-ng-click=\"updateLog('history','email','general','room')\">\n <input type=\"radio\" class=\"toggle\">{{'APPLICATION_EMAILS' | translate}}</label>\n <label class=\"btn btn-transparent grey-salsa btn-circle btn-sm\" data-ng-class=\"{'active':log.history.show === 'chat'}\" data-ng-click=\"updateLog('history','chat','general','room')\">\n <input type=\"radio\" class=\"toggle\">{{'APPLICATION_CHAT' | translate}}</label>\n <label class=\"btn btn-transparent grey-salsa btn-circle btn-sm\" data-ng-class=\"{'active':log.history.show === 'fax'}\" data-ng-click=\"updateLog('history','fax','general','room')\">\n <input type=\"radio\" class=\"toggle\">{{'APPLICATION_FAX' | translate}}</label>\n <label class=\"btn btn-transparent grey-salsa btn-circle btn-sm\" data-ng-class=\"{'active':log.history.show === 'sms'}\" data-ng-click=\"updateLog('history','sms','general','room')\">\n <input type=\"radio\" class=\"toggle\">{{'APPLICATION_SMS' | translate}}</label>\n </div><span data-ng-if=\"log.history.show=='phone'\"> |</span>\n <div class=\"btn-group btn-group-devided\" data-toggle=\"buttons\" data-ng-if=\"log.history.show=='phone'\">\n <label class=\"btn btn-transparent grey-salsa btn-circle btn-sm\" data-ng-class=\"{'active':log.history.type === 'inbound'}\" data-ng-click=\"updateLog('history',false,false,'inbound')\">\n <input type=\"radio\" class=\"toggle\">{{'APPLICATION_INBOUND' | translate}}</label>\n <label class=\"btn btn-transparent grey-salsa btn-circle btn-sm\" data-ng-class=\"{'active':log.history.type === 'outbound'}\" data-ng-click=\"updateLog('history',false,'general','outbound')\">\n <input type=\"radio\" class=\"toggle\">{{'APPLICATION_OUTBOUND' | translate}}</label>\n </div><span data-ng-if=\"log.history.show=='phone'\"> |</span>\n <div class=\"btn-group btn-group-devided\" data-toggle=\"buttons\" data-ng-if=\"log.history.show=='phone'\">\n <label class=\"btn btn-transparent grey-salsa btn-circle btn-sm\" data-ng-class=\"{'active':log.history.detail === 'general'}\" data-ng-click=\"updateLog('history',false,'general',false)\">\n <input type=\"radio\" class=\"toggle\">{{'APPLICATION_GENERAL' | translate}}</label>\n <label data-ng-if=\"log.history.type==='inbound'\" class=\"btn btn-transparent grey-salsa btn-circle btn-sm\" data-ng-class=\"{'active':log.history.detail === 'queue'}\" data-ng-click=\"updateLog('history',false,'queue','inbound')\">\n <input type=\"radio\" class=\"toggle\">{{'APPLICATION_QUEUES' | translate}}</label>\n </div>\n </div>\n <div data-ng-if=\"gridOptionshistory\" name=\"gridOptionshistory\" ui-grid=\"gridOptionshistory\" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-exporter ui-grid-draggable-rows class=\"ui-grid\">\n <div class=\"watermark\" ng-show=\"!gridOptionshistory.data.length\">{{'MESSAGE_NO_RESULTS_AVAILABLE' | translate}}</div>\n </div>\n </div>\n </div>\n </div>\n <!--END TABS-->\n </div>\n </div>\n <!-- END PORTLET -->\n </div>\n <!-- END PROFILE CONTENT -->\n </form>\n</div>\n </div>\n</div>\n"), +a.put("app/main/template/template.jscriptyTab.html",'<div class="portlet light bordered">\n <!-- BEGIN PORTLET BODY -->\n <div class="portlet-body">\n <div class="row">\n <!-- BEGIN SIDEBAR -->\n <div class="profile-sidebar" style="width: 250px;">\n <!-- PORTLET MAIN -->\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li ng-repeat= \'question in questions track by $index\' ng-class="{active: $index == count}">\n <a ng-click="setCurrentQuestion($index)" >\n <i class="fa fa-check"></i> <label ng-if="attribute.nodeName == \'label\'" ng-repeat=\'attribute in question.value.attributes track by $index\'>{{attribute.value}}</label>\n </a>\n </li>\n </ul>\n </div>\n <!-- END SIDEBAR MENU -->\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END SIDEBAR -->\n <div class="profile-content">\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="fa fa-edit font-green-sharp"></i>\n <span ng-if="attribute.nodeName ==\'label\'" ng-repeat=\'attribute in currentQuestion.value.attributes\' class="caption-subject">{{attribute.value}} </span>\n </div>\n\n </div>\n <div class="portlet-body form ">\n <div class="row">\n <div class="col-md-10 col-md-offset-1 ">\n <form >\n <div class="form-body" style="height: 400px; overflow-y: auto;overflow-x:hidden">\n\n <!-- Question -->\n <div class="form-group" style="word-wrap: break-word;" >\n <h3 ng-if="attribute.nodeName ==\'question\' || attribute.nodeName ==\'text\'" ng-repeat=\'attribute in currentQuestion.value.attributes\'>{{attribute.value}}</h3>\n </div>\n <!-- Buttons -->\n\n <div ng-if ="(edge.source.id == currentQuestion.id) && edge.value" ng-repeat=\'edge in currentQuestion.edges track by $index\' class="row">\n <div class="col-md-8 col-md-offset-2">\n <input checked="checked" type="radio" ng-model="currentQuestion.button" ng-value="edge" >\n <label ng-show="(edge.source.id == currentQuestion.id) && edge.value">{{edge.value}}</label><br><br>\n </div>\n </div>\n <!-- Question Other Option -->\n\n <div class="form-group" ng-if= "attribute.nodeName ==\'other\' && attribute.value " ng-repeat=\'attribute in currentQuestion.value.attributes track by $index\'>\n <br>\n <div class="col-md-2">\n <label class="control-label">{{attribute.value}}</label>\n </div>\n <div class="col-md-8">\n <textarea style="overflow:auto" ng-model="currentQuestion.otheranswer" placeholder="Enter text" rows="8" cols="40" ></textarea>\n </div>\n </div>\n <!-- Inputs -->\n <div class="row margin-top-10" ng-repeat=\'question in currentQuestion.children track by $index\'>\n <div class="col-md-10 col-md-offset-1">\n <div ng-repeat=\'attribute in question.value.attributes track by $index\'>\n <div ng-switch="attribute.nodeName">\n <div ng-class="col-md-2" ng-switch-when="label">\n <label class="control-label" style=" display:block;word-break:break-all;" >{{attribute.value}}</label>\n </div>\n <div ng-class="attribute.value != \'checkbox\' ? \'col-md-10 pull-right\': \'col-md-2\'" ng-switch-when="type" ng-switch="attribute.value">\n <input class="form-control" ng-switch-when="text" type="text" ng-model="question.answer" />\n <input class="form-control" ng-switch-when="number" type="number" ng-model="question.answer" />\n <input class=" pull-right" ng-switch-when="checkbox" type="checkbox" ng-model="question.answer" />\n <!-- ng-true-value="\'Selected\'" ng-false-value="\'Not Selected\'" -->\n <textarea class="form-control" ng-switch-when="textarea" ng-model="question.answer" rows="8" cols="40"></textarea>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <!-- actions -->\n <div class="form-actions">\n <div ng-switch="attribute.nodeName" class="btn-set pull-left">\n <button class="btn red-haze " ng-click="end()">\n <span class="fa fa-times" > Close</span>\n </button>\n <!-- <button class="btn red-haze " ng-click="end()">\n <span ng-if="attribute.nodeName ==\'end\'" ng-repeat=\'attribute in currentQuestion.value.attributes\' class="fa fa-times" > Finish</span>\n </button> -->\n <button class="btn blue-haze" ng-show="count" ng-click="back()"><span class="glyphicon glyphicon-chevron-left"></span>Back</button>\n </div>\n <div class="btn-set pull-right">\n <button ng-show=" currentQuestion.button" class="btn blue-hoki" ng-click="next(currentQuestion.button.target, currentQuestion.button.value)">Next<span class="glyphicon glyphicon-chevron-right" ></span></button>\n <button ng-repeat=\'edge in currentQuestion.edges track by $index\' ng-show="(edge.source.id == currentQuestion.id) && !edge.value" class="btn blue-hoki" ng-click="next(edge.target)">Next<span class="glyphicon glyphicon-chevron-right" ></span></button>\n </div>\n </div>\n </form>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <!-- END PORTLET BODY -->\n</div>\n'),a.put("app/main/template/template.notification.html",'<div class="ui-notification alert alert-block" ng-class="class" style="width: 350px; margin-top: 50px;">\n <h4 ng-show="title" class="alert-heading"><i class="{{icon}}"></i> {{title}}</h4>\n <hr>\n <p ng-bind-html="message"></p>\n <br>\n <p>\n <a class="btn btn-success close-notification" href="#" ng-click="nAccept()"><i class="glyphicon glyphicon-ok"></i> {{acceptBtn}} </a>\n <a class="btn btn-danger close-notification" href="#" ng-click="nReject()"><i class="glyphicon glyphicon-remove"></i> {{rejectBtn}} </a>\n </p>\n</div>\n'),a.put("app/main/template/template.reportBuilderView.html",'<div class="alert alert-warning alert-group">\n <div class="form-inline" data-ng-class="{\'has-error\': forms.report.$submitted && !group.rules.length}">\n <select ng-options="o.name as o.name for o in operators" ng-model="group.operator" class="form-control input-sm"></select>\n <button style="margin-left: 5px" type="button" ng-click="addCondition()" class="btn btn-sm btn-success"><span class="glyphicon glyphicon-plus-sign"></span> {{\'APPLICATION_ADD_CONDITION\' | translate}}</button>\n <button style="margin-left: 5px" type="button" ng-click="addGroup()" class="btn btn-sm btn-success"><span class="glyphicon glyphicon-plus-sign"></span> {{\'APPLICATION_ADD_GROUP\' | translate}}</button>\n <button style="margin-left: 5px" type="button" ng-click="removeGroup()" class="btn btn-sm btn-danger"><span class="glyphicon glyphicon-minus-sign"></span> {{\'APPLICATION_REMOVE_GROUP\' | translate}}</button>\n </div>\n <div class="group-conditions">\n <div ng-repeat="rule in group.rules | orderBy:\'index\'" class="condition">\n <div ng-switch="rule.hasOwnProperty(\'group\')">\n <div ng-switch-when="true">\n <report-builder group="rule.group" fields="fields" forms="forms"></report-builder>\n </div>\n <div ng-switch-default="ng-switch-default">\n <div class="row">\n <div class="col-md-2" data-ng-class="{\'has-error\': forms.report.$submitted && !rule.field}">\n <ui-select data-ng-model="rule.field" theme="bootstrap" dynamic-name="randomName()" required>\n <ui-select-match placeholder="" ><span ng-bind-html="$select.selected.name"></span></ui-select-match>\n <ui-select-choices repeat="field.value as field in fields | filter: $select.search">\n <div ng-bind-html="field.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.report.$submitted && !rule.field" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div class="col-md-1">\n <ui-select data-ng-model="rule.condition" theme="bootstrap" dynamic-name="randomName()" data-ng-change="inputIsRequired(rule)" data-ng-init="inputIsRequired(rule)">\n <ui-select-match placeholder="">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="condition.name as condition in conditions | filter: $select.search">\n <div ng-bind-html="condition.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <div class="col-md-2" data-ng-class="{\'has-error\': forms.report.$submitted && !rule.value}" data-ng-if="rule.required">\n <input type="text" ng-model="rule.value" class="form-control" dynamic-name="randomName()" data-ng-required="requiredInput"/>\n <span data-ng-show="forms.report.$submitted && !rule.value" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <button style="margin-left: 5px" ng-click="removeCondition($index)" class="btn btn-sm btn-danger" type="button"><span class="glyphicon glyphicon-minus-sign"></span></button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n'),a.put("app/main/template/template.tigerDialDisposal.html",'<div class="row margin-top-20 contact-tab-container">\n <div class="portlet light bordered">\n <div class="row portfolio-block" data-ng-if="workspace.spooler.destcalleridnum && workspace.spooler.queue && workspace.spooler.agentconnectAt">\n <div class="col-md-2">\n <div class="portfolio-text">\n <img src="assets/images/media/outboundroute.png" class="td-disposal-logo" alt=""/>\n </div>\n </div>\n <div class="col-md-3 portfolio-stat">\n <div>{{\'APPLICATION_CALLED_NUMBER\' | translate}} </div>\n <p> {{workspace.spooler.destcalleridnum}} </p>\n </div>\n <div class="col-md-3 portfolio-stat">\n <div>{{\'APPLICATION_QUEUE\' | translate}} </div>\n <p> {{workspace.spooler.queue}} </p>\n </div>\n <div class="col-md-3 portfolio-stat">\n <div>{{\'APPLICATION_DATE\' | translate}} </div>\n <p> {{workspace.spooler.agentconnectAt | date:\'dd/MM/yyyy HH:mm:ss\'}} </p>\n </div>\n</div>\n <div class="portlet-title">\n <div class="caption font-blue-hoki">\n <span class="caption-subject">{{ workspace.spooler.calleridname }} {{ \'APPLICATION_MOTION_DIALER\' | translate }} {{ \'APPLICATION_DISPOSITION\' | translate }} </span>\n </div>\n </div>\n <div class="portlet-body">\n <div class="padding-bottom row">\n <div class="col-md-12" data-ng-form="tdForm">\n <!-- START RETRIEVE -->\n <div class="form-group" data-ng-class="{\'has-error\': (tdForm.retrieve.$touched || tdForm.$submitted) && tdForm.retrieve.$invalid}">\n <label class="control-label">{{ \'APPLICATION_STATUS\' | translate }}<span class="required" aria-required="true">*</span></label>\n <select name="retrieve" class="form-control" data-ng-model="entitySpooler.retrieve" required>\n <option value="CLOSED">CLOSE</option>\n <option value="OPEN">OPEN</option>\n <option value="BLACK_LIST">BLACKLIST</option>\n <option value="PLANNED">PLANNING</option>\n <option value="PLANNED_PEER">PLANNING AGENT</option>\n </select>\n <span data-ng-show="(tdForm.retrieve.$touched || tdForm.$submitted) && tdForm.retrieve.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END RETRIEVE -->\n <!-- START PLANNING DATE -->\n <div class="form-group" data-ng-if="entitySpooler.retrieve == \'PLANNED\' || entitySpooler.retrieve == \'PLANNED_PEER\'" data-ng-class="{\'has-error\': (tdForm.date.$touched || tdForm.$submitted) && tdForm.date.$invalid}">\n <label class="control-label">PLANNING DATE<span class="required" aria-required="true">*</span></label>\n <uib-datepicker name="date" ng-model="entitySpooler.planningtime" required="entitySpooler.retrieve == \'PLANNED\' || entitySpooler.retrieve == \'PLANNED_PEER\'" data-ng-init="entitySpooler.planningtime = moment();"></uib-datepicker>\n <span data-ng-show="(tdForm.date.$touched || tdForm.$submitted) && tdForm.date.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PLANNING DATE -->\n <!-- START PLANNING TIME -->\n <div class="form-group" data-ng-if="entitySpooler.retrieve == \'PLANNED\' || entitySpooler.retrieve == \'PLANNED_PEER\'" data-ng-class="{\'has-error\': (tdForm.time.$touched || tdForm.$submitted) && tdForm.time.$invalid}">\n <label class="control-label">PLANNING TIME<span class="required" aria-required="true">*</span></label>\n <uib-timepicker name="time" ng-model="entitySpooler.planningtime" required="entitySpooler.retrieve == \'PLANNED\' || entitySpooler.retrieve == \'PLANNED_PEER\'" show-meridian="false" show-seconds="false"></uib-timepicker>\n <span data-ng-show="(tdForm.time.$touched || tdForm.$submitted) && tdForm.time.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PLANNING TIME -->\n <!-- START PLANNING PEER -->\n <div class="form-group" data-ng-if="entitySpooler.retrieve == \'PLANNED_PEER\'" data-ng-class="{\'has-error\': (tdForm.agent.$touched || tdForm.$submitted) && tdForm.agent.$invalid}">\n <label class="control-label">{{\'APPLICATION_AGENT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <select name="agent" class="form-control" data-ng-model="entitySpooler.planningpeer" ng-options="agent for agent in agents" required="entitySpooler.retrieve == \'PLANNED_PEER\'">\n </select>\n <span data-ng-show="(tdForm.agent.$touched || tdForm.$submitted) && tdForm.agent.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PLANNING PEER -->\n <button type="button" class="btn btn-circle green-haze btn-sm" data-ng-disabled="!tdForm.$valid" data-ng-click="save()">{{\'APPLICATION_SAVE\' | translate}}</button>\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/market/market.html",'<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-handbag"></i>\n <a href="/market">Market Place</a>\n </li>\n </ul>\n </div>\n </div>\n</div>\n<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <!-- Our Integration -->\n <div class="headline">\n <h3>Our Integrations</h3>\n </div>\n <div class="row thumbnails" data-ng-repeat="group in groupedIntegration">\n <div class="col-md-3" data-ng-repeat="integration in group">\n <div class="our-integrations">\n <h3> {{integration.name}} <small> {{integration.author}}</small></h3>\n <img data-ng-src="{{integration.logo}}" alt="{{integration.name}}" class="img-responsive"/>\n <div class="integration-info" data-ng-if="!integration.downloading">\n <p>\n {{integration.description}}\n </p>\n <div class="pull-right">\n <a data-ng-disabled="isProgressing" data-ng-if="!integration.active" data-ng-click="installIntegration(integration)" href="#" class="btn btn-xs green-meadow">Install <i class="fa fa-download"></i></a>\n <a data-ng-disabled="isProgressing" data-ng-if="integration.active" data-ng-click="uninstallIntegration(integration)" href="#" class="btn btn-xs red-sunglo">Uninstall <i class="fa fa-trash"></i></a>\n <a href="{{integration.link}}" class="btn btn-xs grey-cascade" target="_blank">More <i class="fa fa-link"></i></a>\n </div>\n </div>\n <div class="integration-info" data-ng-if="integration.downloading">\n <div>\n <uib-progressbar class="progress-striped active" value="percentage" type="success"><i style="color:black;">{{status}}</i></uib-progressbar>\n </div>\n </div>\n </div>\n </div>\n </div>\n <!--/thumbnails-->\n <!-- //End Meer Our Team -->\n </div>\n</div>\n'),a.put("app/motiondialer/blacklist/list/list.create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_CONTACT\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <!-- START PHONE -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.phone.$touched || form.$submitted) && form.phone.$invalid}">\n <label class="control-label">{{\'APPLICATION_PHONE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="phone" placeholder="{{\'APPLICATION_PHONE\' | translate}}" class="form-control" data-ng-model="item.phone" required/>\n <span data-ng-show="(form.phone.$touched || form.$submitted) && form.phone.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PHONE -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/motiondialer/blacklist/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-control-forward"></i>\n <a href="#">Motion Dialer</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-doc"></i>\n <a href="#">{{ \'APPLICATION_BLACKLIST\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-doc font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_BLACKLIST\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group">\n <button class="btn green-jungle " ng-click="createItem()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_CONTACT\' | translate }}\n </button>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-exporter class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/motiondialer/info/view/view.about.html",'<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_ABOUT\' | translate}}</span>\n </div>\n </div>\n <div class="portlet-body">\n <form class="form-horizontal form-row-seperated">\n <div class="form-body">\n <!-- START -->\n <div class="form-group">\n <label class="control-label col-md-3">Specification</label>\n <div class="col-md-9">\n <input type="text" class="form-control" value="{{properties.SpecificationTitle}} ({{properties.SpecificationVersion}}) - {{properties.SpecificationVendor}}" disabled/>\n <span class="help-block">\n </span>\n </div>\n </div>\n <!-- END -->\n <!-- START -->\n <div class="form-group">\n <label class="control-label col-md-3">Implementation</label>\n <div class="col-md-9">\n <input type="text" class="form-control" value="{{properties.ImplementationTitle}} ({{properties.ImplementationVersion}}) - {{properties.ImplementationVendor}}" disabled/>\n <span class="help-block">\n </span>\n </div>\n </div>\n <!-- END -->\n <!-- START -->\n <div class="form-group">\n <label class="control-label col-md-3">Start Time</label>\n <div class="col-md-9">\n <input type="text" class="form-control" data-ng-model="properties.StartTime" disabled/>\n <span class="help-block">\n </span>\n </div>\n </div>\n <!-- END -->\n <!-- START -->\n <div class="form-group">\n <label class="control-label col-md-3">Uptime</label>\n <div class="col-md-9">\n <input type="text" class="form-control" data-ng-model="properties.Uptime" disabled/>\n <span class="help-block">\n </span>\n </div>\n </div>\n <!-- END -->\n <!-- START -->\n <div class="form-group">\n <label class="control-label col-md-3">Operating System</label>\n <div class="col-md-9">\n <input type="text" class="form-control" value="{{properties.OsName}} {{properties.OsVersion}} {{properties.OsArch}}" disabled/>\n <span class="help-block">\n </span>\n </div>\n </div>\n <!-- END -->\n <!-- START -->\n <div class="form-group">\n <label class="control-label col-md-3">Processors</label>\n <div class="col-md-9">\n <input type="text" class="form-control" data-ng-model="properties.Processors" disabled/>\n <span class="help-block">\n </span>\n </div>\n </div>\n <!-- END -->\n <!-- START -->\n <div class="form-group">\n <label class="control-label col-md-3">System Start Time</label>\n <div class="col-md-9">\n <input type="text" class="form-control" data-ng-model="properties.SystemStartTime" disabled/>\n <span class="help-block">\n </span>\n </div>\n </div>\n <!-- END -->\n <!-- START -->\n <div class="form-group">\n <label class="control-label col-md-3">System Uptime</label>\n <div class="col-md-9">\n <input type="text" class="form-control" data-ng-model="properties.SystemUptime" disabled/>\n <span class="help-block">\n </span>\n </div>\n </div>\n <!-- END -->\n <!-- START -->\n <div class="form-group">\n <label class="control-label col-md-3">File System</label>\n <div class="col-md-9">\n <input type="text" class="form-control" value="Usable: {{properties.FileSystem.Usable | number:2}} Free: {{properties.FileSystem.Free | number:2}} Total: {{properties.FileSystem.Total | number:2}}" disabled/>\n <span class="help-block">\n </span>\n </div>\n </div>\n <!-- END -->\n </div>\n </form>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/motiondialer/info/view/view.details.html",'<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_DETAILS\' | translate}}</span>\n </div>\n </div>\n <div class="portlet-body">\n <form class="form-horizontal form-row-seperated">\n <div class="form-body">\n <!-- START -->\n <div class="form-group">\n <label class="control-label col-md-3">Java Specification Name</label>\n <div class="col-md-9">\n <input type="text" class="form-control" data-ng-model="properties.JavaSpecificationName" disabled/>\n <span class="help-block">\n </span>\n </div>\n </div>\n <!-- END -->\n <!-- START -->\n <div class="form-group">\n <label class="control-label col-md-3">Java Home</label>\n <div class="col-md-9">\n <input type="text" class="form-control" data-ng-model="properties.JavaHome" disabled/>\n <span class="help-block">\n </span>\n </div>\n </div>\n <!-- END -->\n <!-- START -->\n <div class="form-group">\n <label class="control-label col-md-3">JavaVm</label>\n <div class="col-md-9">\n <input type="text" class="form-control" value="{{properties.JavaVmName}} ({{properties.JavaVmVersion}} {{properties.JavaVmInfo}}) - {{properties.JavaVmVendor}}" disabled/>\n <span class="help-block">\n </span>\n </div>\n </div>\n <!-- END -->\n\n <!-- START -->\n <div class="form-group">\n <label class="control-label col-md-3">Java</label>\n <div class="col-md-9">\n <input type="text" class="form-control" value="Java ({{properties.JavaVersion}} {{properties.JavaClassVersion}}) - {{properties.JavaVendor}}" disabled/>\n <span class="help-block">\n </span>\n </div>\n </div>\n <!-- END -->\n <!-- START -->\n <div class="form-group">\n <label class="control-label col-md-3">Java Runtime</label>\n <div class="col-md-9">\n <input type="text" class="form-control" value="{{properties.JavaRuntimeName}} ({{JavaRuntimeVersion}})" disabled/>\n <span class="help-block">\n </span>\n </div>\n </div>\n <!-- END -->\n <!-- START -->\n <div class="form-group">\n <label class="control-label col-md-3">Java Rmi Server Hostname</label>\n <div class="col-md-9">\n <input type="text" class="form-control" value="{{properties.JavaRmiServerHostname}}" disabled/>\n <span class="help-block">\n </span>\n </div>\n </div>\n <!-- END -->\n <!-- START -->\n <div class="form-group">\n <label class="control-label col-md-3">User</label>\n <div class="col-md-9">\n <input type="text" class="form-control" value="{{properties.UserName}} {{properties.UserLanguage}}-{{properties.UserCountry}} {{properties.UserTimezone}}" disabled/>\n <span class="help-block">\n </span>\n </div>\n </div>\n <!-- END -->\n <!-- START -->\n <div class="form-group">\n <label class="control-label col-md-3">User Home</label>\n <div class="col-md-9">\n <input type="text" class="form-control" value="{{properties.UserHome}}" disabled/>\n <span class="help-block">\n </span>\n </div>\n </div>\n <!-- END -->\n <!-- START -->\n <div class="form-group">\n <label class="control-label col-md-3">Hostname</label>\n <div class="col-md-9">\n <input type="text" class="form-control" value="{{properties.Hostname}}" disabled/>\n <span class="help-block">\n </span>\n </div>\n </div>\n <!-- END -->\n </div>\n </form>\n </div>\n </div>\n </div>\n</div>\n'), +a.put("app/motiondialer/info/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getProperties()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-control-forward"></i>\n <a href="#">Motion Dialer</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-info"></i>\n <a href="/motiondialer/info/view/properties">{{ \'APPLICATION_INFO\' | translate }}</a>\n <i data-ng-show="variable" class="fa fa-angle-right"></i>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/template.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{ \'APPLICATION_INFO\' | translate }}\n </div>\n <!-- <div class="profile-usertitle-job">\n {{user.role}}\n </div> -->\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.motiondialer.info.view.about\')}">\n <a data-ng-href="/motiondialer/info/view/about">\n <i class="icon-globe"></i>\n {{ \'APPLICATION_ABOUT\' | translate}} </a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.motiondialer.info.view.details\')}">\n <a data-ng-href="/motiondialer/info/view/details">\n <i class="icon-support"></i>\n {{ \'APPLICATION_DETAILS\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/motiondialer/list/list/list.create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_LIST\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.name.$touched || form.$submitted) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/motiondialer/list/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-control-forward"></i>\n <a href="#">Motion Dialer</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-docs"></i>\n <a href="#">{{ \'APPLICATION_LISTS\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-docs font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_LISTS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group">\n <button class="btn green-jungle " ng-click="createItem()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_LIST\' | translate }}\n </button>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="spinner-grid" spinner-start-active="true"></span>\n <!-- END UI-GRID SPINNER -->\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-exporter class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/motiondialer/list/view/view.contact.create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_CONTACT\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.name.$touched || form.$submitted) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START PHONES -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.phones.$touched || form.$submitted) && form.phones.$invalid}">\n <label class="control-label">{{\'APPLICATION_PHONES\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="phones" placeholder="{{\'APPLICATION_PHONES\' | translate}}" class="form-control" data-ng-model="item.phones" required/>\n <span data-ng-show="(form.phones.$touched || form.$submitted) && form.phones.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span class="help-block">\n <p>Insert one or multiple phones separated by commas, for example:</p>\n <p>0123455678, 3456785673, 2345667899</p>\n </span>\n </div>\n <!-- END PHONES -->\n\n <!-- START TIMEZONE -->\n <div class="form-group">\n <label class="control-label">Timezone</label><br>\n <select ng-model="item.timezone">\n <option value="">--</option>\n <optgroup ng-repeat="timezone in timezones" label="{{timezone.group}}">\n <option ng-repeat="zone in timezone.zones" value="{{zone.value}}">{{zone.name}}</option>\n </optgroup>\n </select>\n </div>\n <!-- END TIMEZONE -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/motiondialer/list/view/view.contact.import.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_CONTACT\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <!-- START PHONES -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.phones.$touched || form.$submitted) && form.phones.$invalid}">\n <label class="control-label">{{\'APPLICATION_PHONE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select multiple data-ng-model="item.phones" theme="bootstrap" name="phones" data-ng-disabled="disabled" required>\n <ui-select-match placeholder="{{ \'APPLICATION_PHONE\' | translate }}">{{$select.selected[$index]}}</ui-select-match>\n <ui-select-choices repeat="index in indexes | filter: $select.search">\n <div ng-bind-html="index | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form.phones.$touched || form.$submitted) && form.phones.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PHONES -->\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.name.$touched || form.$submitted) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}</label>\n <ui-select data-ng-model="item.name" theme="bootstrap" name="name" data-ng-disabled="disabled">\n <ui-select-match allow-clear placeholder="{{ \'APPLICATION_NAME\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="index in indexes | filter: $select.search">\n <div ng-bind-html="index | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END NAME -->\n\n <!-- START ACCOUNT_CODE -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.account.$touched || form.$submitted) && form.account.$invalid}">\n <label class="control-label">{{\'APPLICATION_ACCOUNT_CODE\' | translate}}</label>\n <ui-select data-ng-model="item.account" theme="bootstrap" account="account" data-ng-disabled="disabled">\n <ui-select-match allow-clear placeholder="{{ \'APPLICATION_ACCOUNT_CODE\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="index in indexes | filter: $select.search">\n <div ng-bind-html="index | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END ACCOUNT_CODE -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <ui-select data-ng-model="item.description" theme="bootstrap" name="description" data-ng-disabled="disabled">\n <ui-select-match allow-clear placeholder="{{ \'APPLICATION_DESCRIPTION\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="index in indexes | filter: $select.search">\n <div ng-bind-html="index | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END DESCRIPTION -->\n\n <!-- START TIMEZONE -->\n <!-- <div class="form-group">\n <label class="control-label">{{\'APPLICATION_TIMEZONE\' | translate}}</label><br>\n <select ng-model="item.timezone">\n <option value="">--</option>\n <optgroup ng-repeat="timezone in timezones" label="{{timezone.group}}">\n <option ng-repeat="zone in timezone.zones" value="{{zone.value}}">{{zone.name}}</option>\n </optgroup>\n </select>\n </div> -->\n <!-- END TIMEZONE -->\n\n <!-- START TIMEZONE -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_TIMEZONE\' | translate}}</label>\n <ui-select data-ng-model="item.timezone" theme="bootstrap" name="description" data-ng-disabled="disabled">\n <ui-select-match allow-clear placeholder="{{ \'APPLICATION_TIMEZONE\' | translate }}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="timezone.value as timezone in uiTimeZones | filter: $select.search" group-by="\'group\'">\n <div ng-bind-html="timezone.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END TIMEZONE -->\n\n <!-- START VARIABLES -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.variables.$touched || form.$submitted) && form.variables.$invalid}">\n <label class="control-label">{{\'APPLICATION_VARIABLES\' | translate}}</label>\n <ui-select multiple data-ng-model="item.variables" theme="bootstrap" name="variables" data-ng-disabled="disabled">\n <ui-select-match placeholder="{{ \'APPLICATION_VARIABLES\' | translate }}">{{$select.selected[$index]}}</ui-select-match>\n <ui-select-choices repeat="index in indexes | filter: $select.search">\n <div ng-bind-html="index | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form.variables.$touched || form.$submitted) && form.variables.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END VARIABLES -->\n\n </form>\n <!-- START PROGRESS -->\n <div>\n <p>{{\'APPLICATION_IMPORT_SUCCEEDED\' | translate}}: {{import.succeeded}}/{{csvLength}}</p>\n <div class="progress progress-sm" style="">\n <div class="progress-bar progress-bar-info" role="progressbar" ng-style="{ \'width\': import.success + \'%\' }"></div>\n </div>\n </div>\n <div>\n <p>{{\'APPLICATION_IMPORT_FAILED\' | translate}}: {{import.failed}}/{{csvLength}}</p>\n <div class="progress progress-sm" style="">\n <div class="progress-bar progress-bar-danger" role="progressbar" ng-style="{ \'width\': import.fail + \'%\' }"></div>\n </div>\n <div class="has-error" data-ng-if="noPhone.length">\n <span class="help-block help-block-error">\n {{\'APPLICATION_CONTACTS_WITHOUT_PHONE\' | translate}}: {{noPhone}}\n </span>\n </div>\n </div>\n <!-- END PROGRESS -->\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="start()" ng-disabled="form.$invalid || !form.phones || submitted">{{ \'APPLICATION_SUBMIT\' | translate }}</button>\n <button class="btn default" type="button" ng-click="close()" data-ng-if="!importing">{{ \'APPLICATION_CLOSE\' | translate }}</button>\n <button class="btn default" type="button" ng-click="stop()" data-ng-if="importing">{{ \'APPLICATION_STOP\' | translate }}</button>\n</div>\n'),a.put("app/motiondialer/list/view/view.contacts.html",'<div class="row" data-ng-init="getContacts()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_LIST\' | translate}} {{ \'APPLICATION_CONTACTS\' | translate}} </span>\n </div>\n </div>\n\n <div class="portlet-body">\n <div class="btn-group">\n <button class="btn green-jungle margin-bottom-10" ng-click="createContact()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_CONTACT\' | translate }}\n </button>\n <span class="btn default btn-file">\n <span class="fileinput-new"><i class="icon-cloud-upload"></i> {{\'APPLICATION_IMPORT_FROM_CSV\' | translate}}</span>\n <input type="file" nv-file-select="" uploader="uploader"/>\n </span>\n </div>\n\n <!-- <div class="btn-group">\n <button class="btn green-jungle" data-ng-click="newContact();">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_CONTACT\' | translate }}\n </button>\n\n </div> -->\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="spinner-grid" spinner-start-active="true"></span>\n <!-- END UI-GRID SPINNER -->\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-exporter class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/motiondialer/list/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getList()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-control-forward"></i>\n <a href="#">Motion Dialer</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-doc"></i>\n <a href="/motiondialer/lists/list">{{ \'APPLICATION_LISTS\' | translate }}</a>\n <i data-ng-show="list.name" class="fa fa-angle-right"></i>\n </li>\n <li data-ng-show="list.name">\n <a href="#">{{list.name}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/template.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{list.name}}\n </div>\n <!-- <div class="profile-usertitle-job">\n {{user.role}}\n </div> -->\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.motiondialer.lists.view.settings\')}">\n <a data-ng-href="/motiondialer/lists/view/{{list.id}}/settings">\n <i class="icon-settings"></i>\n {{ \'APPLICATION_SETTINGS\' | translate}} </a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.motiondialer.lists.view.contacts\')}">\n <a data-ng-href="/motiondialer/lists/view/{{list.id}}/contacts">\n <i class="icon-people"></i>\n {{ \'APPLICATION_CONTACTS\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/motiondialer/list/view/view.settings.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_LIST\' | translate}} {{ \'APPLICATION_SETTINGS\' | translate}} </span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_general" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n </li>\n </ul>\n </div>\n\n <div class="portlet-body">\n <div class="tab-content">\n <!-- START GENERAL TAB -->\n <div class="tab-pane active" id="tab_general">\n <form name="forms.general" data-ng-submit="forms.general.$valid && updateList()" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="list.name" required/>\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="list.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END GENERAL TAB -->\n\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/motiondialer/process/list/list.create.queue.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_PROCESS\' | translate }} {{\'APPLICATION_QUEUE\' | translate}}</h3>\n</div>\n<div class="modal-body">\n <form name="form" ng-init="initModal()" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.name.$touched || form.$submitted) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n <!-- START LIST -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.list.$touched || form.$submitted) && form.list.$invalid}">\n <label class="control-label">{{\'APPLICATION_LIST\' | translate}}<span class="required" aria-required="true">*</span></label>\n <select name="list" class="form-control" data-ng-model="item.list" ng-options="list.name for list in lists" required>\n </select>\n <span data-ng-show="(form.list.$touched || form.$submitted) && form.list.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END LIST -->\n <!-- START QUEUE -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.queue.$touched || form.$submitted) && form.queue.$invalid}">\n <label class="control-label">{{\'APPLICATION_QUEUE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <select name="queue" class="form-control" data-ng-model="item.queue" ng-options="queue.name for queue in queues" required>\n </select>\n <span data-ng-show="(form.queue.$touched || form.$submitted) && form.queue.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END QUEUE -->\n <!-- START TIMEOUT QUEUE -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.timeout.$touched || form.$submitted) && form.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" min="1" name="timeout" placeholder="{{\'APPLICATION_TIMEOUT\' | translate}}" class="form-control" data-ng-model="item.timeout" required/>\n <span data-ng-show="(form.timeout.$touched || form.$submitted) && form.timeout.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="form.timeout.$error.max || form.timeout.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_NUMBER\' | translate}}.\n </span>\n </div>\n <!-- END MAX RETRIES -->\n <!-- START TRUNK -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.device.$touched || form.$submitted) && form.device.$invalid}">\n <label class="control-label">{{\'APPLICATION_TRUNK\' | translate}}<span class="required" aria-required="true">*</span></label>\n <select name="device" class="form-control" data-ng-model="item.device" ng-options="trunk.name for trunk in trunks" required>\n <option value="fake">{{\'APPLICATION_SELECT\' | translate}} {{\'APPLICATION_TRUNK\' | translate}}</option>\n </select>\n <span data-ng-show="(form.queue.$touched || form.$submitted) && form.queue.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TRUNK -->\n <!-- START FETCH SORT -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_FETCH_SORT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <select name="fetch_sort" class="form-control" data-ng-model="item.fetch_sort" ng-options="fetch_sort for fetch_sort in [\'ASC\', \'DESC\']" required>\n </select>\n <span class="help-block">{{\'DESCRIPTION_TD_FETCH_SORT\' | translate}}</span>\n </div>\n <!-- END FETCH SORT-->\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/motiondialer/process/list/list.create.square.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_PROCESS\' | translate }} {{\'APPLICATION_CALLYSQUARE\' | translate}}</h3>\n</div>\n<div class="modal-body">\n <form name="form" ng-init="initModal()" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.name.$touched || form.$submitted) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n <!-- START LIST -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.list.$touched || form.$submitted) && form.list.$invalid}">\n <label class="control-label">{{\'APPLICATION_LIST\' | translate}}<span class="required" aria-required="true">*</span></label>\n <select name="list" class="form-control" data-ng-model="item.list" ng-options="list.name for list in lists" required>\n </select>\n <span data-ng-show="(form.list.$touched || form.$submitted) && form.list.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END LIST -->\n <!-- START PROJECT -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.project.$touched || form.$submitted) && form.project.$invalid}">\n <label class="control-label">{{\'APPLICATION_PROJECT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <select name="project" class="form-control" data-ng-model="item.project" ng-options="project.name for project in projects" required>\n </select>\n <span data-ng-show="(form.project.$touched || form.$submitted) && form.project.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PROJECT -->\n <!-- START TRUNK -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.device.$touched || form.$submitted) && form.device.$invalid}">\n <label class="control-label">{{\'APPLICATION_TRUNK\' | translate}}<span class="required" aria-required="true">*</span></label>\n <select name="device" class="form-control" data-ng-model="item.device" ng-options="trunk.name for trunk in trunks" required>\n <option value="fake">{{\'APPLICATION_SELECT\' | translate}} {{\'APPLICATION_TRUNK\' | translate}}</option>\n </select>\n <span data-ng-show="(form.device.$touched || form.$submitted) && form.device.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TRUNK -->\n <!-- START FETCH SORT -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_FETCH_SORT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <select name="fetch_sort" class="form-control" data-ng-model="item.fetch_sort" ng-options="fetch_sort for fetch_sort in [\'ASC\', \'DESC\']" required>\n </select>\n <span class="help-block">{{\'DESCRIPTION_TD_FETCH_SORT\' | translate}}</span>\n </div>\n <!-- END FETCH SORT-->\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'), +a.put("app/motiondialer/process/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-control-forward"></i>\n <a href="#">Motion Dialer</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-settings"></i>\n <a href="#">{{ \'APPLICATION_PROCESSES\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-docs font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_PROCESSES\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group">\n <button class="btn green-jungle dropdown-toggle" data-toggle="dropdown" data-close-others="true">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_PROCESS\' | translate }}\n </button>\n <ul class="dropdown-menu pull-right">\n <li>\n <a href="#" ng-click="createProcessQueue()">{{ \'APPLICATION_QUEUE\' | translate }}</a>\n </li>\n <li>\n <a href="#" ng-click="createProcessSquare()">{{ \'APPLICATION_CALLYSQUARE\' | translate | trusted}}</a>\n </li>\n </ul>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="spinner-grid" spinner-start-active="true"></span>\n <!-- END UI-GRID SPINNER -->\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-exporter class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/motiondialer/process/view/view.create.interval.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_INTERVAL\' | translate }} </h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n <!-- START TIME -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_TIME\' | translate }}</label>\n <div class="input-group input-large">\n <fieldset class="pull-left" ng-disabled="splittedInterval.alwaysTime"><uib-timepicker name="t_from" data-ng-model="splittedInterval.t_from" show-meridian="false" show-spinners="false"></uib-timepicker></fieldset>\n <div class="input-group-addon col-md-1 interval-to pull-left">to</div>\n <fieldset ng-disabled="splittedInterval.alwaysTime"><uib-timepicker name="t_to" data-ng-model="splittedInterval.t_to" show-meridian="false" show-spinners="false"></uib-timepicker></fieldset>\n <label class="control-label pointer-cursor"><input type="checkbox" data-ng-model="splittedInterval.alwaysTime">{{\'APPLICATION_ALWAYS\' | translate}}</label>\n </div>\n </div>\n <!-- END TIME -->\n\n <!-- START WEEKDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_WEEKDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="splittedInterval.wd_from" theme="bootstrap" name="wd_from">\n <ui-select-match placeholder="">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{weekDay.name | translate}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="splittedInterval.wd_to" theme="bootstrap" name="wd_to">\n <ui-select-match placeholder="">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{weekDay.name | translate}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END WEEKDAY -->\n\n <!-- START MONTHDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTHDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="splittedInterval.md_from" theme="bootstrap" name="md_from">\n <ui-select-match>{{$select.selected === \'always\' ? \'APPLICATION_ALWAYS\' : $select.selected | translate}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search">\n {{monthDay === \'always\' ? \'APPLICATION_ALWAYS\' : monthDay | translate}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="splittedInterval.md_to" theme="bootstrap" name="md_to">\n <ui-select-match>{{$select.selected === \'always\' ? \'APPLICATION_ALWAYS\' : $select.selected | translate}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search">\n {{monthDay === \'always\' ? \'APPLICATION_ALWAYS\' : monthDay | translate}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTHDAY -->\n\n <!-- START MONTH -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTH\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="splittedInterval.m_from" theme="bootstrap" name="m_from">\n <ui-select-match placeholder="">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.monthsNumber | filter: $select.search">\n {{month.name | translate}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="splittedInterval.m_to" theme="bootstrap" name="m_to">\n <ui-select-match placeholder="">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.monthsNumber | filter: $select.search">\n {{month.name | translate}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTH -->\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/motiondialer/process/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getProcess()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-control-forward"></i>\n <a href="#">Motion Dialer</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-settings"></i>\n <a href="/motiondialer/processes/list">{{ \'APPLICATION_PROCESSES\' | translate }}</a>\n <i data-ng-show="process.name" class="fa fa-angle-right"></i>\n </li>\n <li data-ng-show="process.name">\n <a href="#">{{process.name}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/account.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{process.name}} ({{ (process.status === \'RUN\') ? \'RUNNING...\' : \'STOPPED\' }})\n </div>\n <div class="profile-usertitle-job">\n <a href="/motiondialer/lists/view/{{process.id_list}}/settings">{{ \'APPLICATION_LIST\' | translate}} #{{process.id_list}} ({{process.fetch_sort}})</a>\n </div>\n </div>\n <!-- END SIDEBAR USER TITLE -->\n <div class="profile-userbuttons">\n <button data-ng-show="process.status" type="button" class="btn btn-circle btn-sm" data-ng-class="{\'green-meadow\': process.status == \'STOP\', \'red-sunglo\': process.status == \'RUN\'}" data-ng-click="runOrStop()">{{ (process.status === \'RUN\') ? \'STOP\' : \'RUN\' }}</button>\n </div>\n <div class="profile-userbuttons">\n <button style="cursor:default" data-ng-show="process.runtime" type="button" class="btn btn-circle btn-sm" data-ng-class="{\'green-meadow\': process.runtime.completed, \'yellow-crusta\': !process.runtime.completed}">{{process.runtime.completed ? \'Complete\' : \'Incomplete\'}}</button>\n <button style="cursor:default" class="btn btn-circle btn-sm" data-ng-class="{\'green-meadow\': !process.runtime.outOfTime, \'red-sunglo\': process.runtime.outOfTime}"><i data-ng-class="{\'icon-clock\': !process.runtime.outOfTime, \'icon-close\': process.runtime.outOfTime}"></i> {{process.runtime.outOfTime ? \'Out of time\' : \'On time\'}}</button>\n </div>\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.motiondialer.processes.view.overview\')}">\n <a data-ng-href="/motiondialer/processes/view/{{process.id}}/overview">\n <i class="icon-home"></i>\n {{ \'APPLICATION_OVERVIEW\' | translate}} </a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.motiondialer.processes.view.settings\')}">\n <a data-ng-href="/motiondialer/processes/view/{{process.id}}/settings">\n <i class="icon-settings"></i>\n {{ \'APPLICATION_SETTINGS\' | translate}} </a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.motiondialer.processes.view.intervals\')}">\n <a data-ng-href="/motiondialer/processes/view/{{process.id}}/intervals">\n <i class="icon-clock"></i>\n {{ \'APPLICATION_INTERVALS\' | translate}} </a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.motiondialer.processes.view.spooler\')}">\n <a data-ng-href="/motiondialer/processes/view/{{process.id}}/spooler">\n <i class="icon-options-vertical"></i>\n {{ \'APPLICATION_SPOOLER\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/motiondialer/process/view/view.intervals.html",'<div class="row" data-ng-init="initIntervals()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-clock theme-font"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_PROCESS\' | translate}} {{ \'APPLICATION_INTERVALS\' | translate}} </span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_allow" data-toggle="tab">{{ \'APPLICATION_ALLOW\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_disallow" data-toggle="tab">{{ \'APPLICATION_DISALLOW\' | translate}}</a>\n </li>\n </ul>\n </div>\n <div class="portlet-body">\n <div class="tab-content">\n <!-- ALLOW TAB -->\n <div class="tab-pane active" id="tab_allow">\n <button class="btn green-jungle margin-bottom-10" ng-click="createInterval(true)">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_INTERVAL\' | translate }} ({{ \'APPLICATION_ALLOW\' | translate }})\n </button>\n <table class="table table-bordered table-hover">\n <thead>\n <tr role="row" class="heading">\n <th>\n {{ \'APPLICATION_VALUE\' | translate}}\n </th>\n <th>\n {{ \'APPLICATION_ACTIONS\' | translate}}\n </th>\n </tr>\n </thead>\n <tbody>\n <tr ng-repeat="interval in process.intervals track by $index">\n <td>\n {{interval}}\n </td>\n <td>\n <button href="javascript:;" data-ng-click="editInterval(true, interval)" class="btn blue-hoki btn-sm"> {{ \'APPLICATION_EDIT\' | translate}} </button>\n <button data-ng-click="deleteInterval(interval, $index, true)" class="btn red-sunglo btn-sm"> {{ \'APPLICATION_DELETE\' | translate}} </button>\n </td>\n </tr>\n <tr ng-show="!process.intervals.length"><td colspan=2>{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</td></tr>\n </tbody>\n </table>\n </div>\n <!-- END ALLOW TAB -->\n <!-- DISALLOW TAB -->\n <div class="tab-pane" id="tab_disallow">\n <button class="btn green-jungle margin-bottom-10" ng-click="createInterval(false)">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_INTERVAL\' | translate }} ({{ \'APPLICATION_DISALLOW\' | translate }})\n </button>\n <table class="table table-bordered table-hover">\n <thead>\n <tr role="row" class="heading">\n <th>\n {{ \'APPLICATION_VALUE\' | translate}}\n </th>\n <th>\n {{ \'APPLICATION_ACTIONS\' | translate}}\n </th>\n </tr>\n </thead>\n <tbody>\n <tr ng-repeat="interval in process.not_intervals track by $index">\n <td>\n {{interval}}\n </td>\n <td>\n <button href="javascript:;" data-ng-click="editInterval(false, interval)" class="btn blue-hoki btn-sm"> {{ \'APPLICATION_EDIT\' | translate}} </button>\n <button href="javascript:;" data-ng-click="deleteInterval($index, interval, false)" class="btn red-sunglo btn-sm"> {{ \'APPLICATION_DELETE\' | translate}} </button>\n </td>\n </tr>\n <tr ng-show="!process.not_intervals.length"><td colspan=2>{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</td></tr>\n </tbody>\n </table>\n\n </div>\n <!-- END DISALLOW TAB -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/motiondialer/process/view/view.overview.html",'<div class="row" data-ng-init="getSummary()">\n <div class="col-md-12">\n <!-- BEGIN PORTLET -->\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-bar-chart theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_OVERVIEW\' | translate}}</span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_summary" data-toggle="tab">{{ \'APPLICATION_SUMMARY\' | translate}}</a>\n </li>\n <li ng-show="process.runtime">\n <a href="#" data-target="#tab_advanced" data-toggle="tab">{{ \'APPLICATION_ADVANCED\' | translate}}</a>\n </li>\n </ul>\n </div>\n <div class="portlet-body">\n <div class="tab-content">\n <!-- START SUMMARY TAB -->\n <div class="tab-pane active" id="tab_summary">\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="spinner-grid" spinner-start-active="true"></span>\n <!-- END UI-GRID SPINNER -->\n <div class="row number-stats margin-bottom-30">\n <div class="col-md-6 col-sm-6 col-xs-6">\n <div class="stat-left">\n <div class="stat-number">\n <div class="title">\n {{\'APPLICATION_TOTAL\' | translate}}\n </div>\n <div class="number">\n {{total}}\n </div>\n </div>\n </div>\n </div>\n <div class="col-md-6 col-sm-6 col-xs-6">\n <div class="stat-right">\n <div class="stat-number">\n <div class="title">\n {{\'APPLICATION_FRESH\' | translate}}\n </div>\n <div class="number">\n {{process.runtime.fresh || 0}}\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class="table-scrollable table-scrollable-borderless">\n <table class="table table-hover table-light">\n <thead>\n <tr class="uppercase">\n <th>\n {{\'APPLICATION_STATUS\' | translate}}\n </th>\n <th>\n {{\'APPLICATION_VALUE\' | translate}}\n </th>\n <th>\n {{\'APPLICATION_RATE\' | translate}}\n </th>\n <th>\n {{\'APPLICATION_DESCRIPTION\' | translate}}\n </th>\n </tr>\n </thead>\n <tr ng-repeat="sum in summary">\n <td>\n <a href="#" class="primary-link">{{\'APPLICATION_TD_\' + sum[0] | translate}}</a>\n </td>\n <td>\n {{sum[1]}}\n </td>\n <td>\n <span class="bold theme-font">{{ total ? ((sum[1]/total)*100).toFixed(2) : 0 }}%</span>\n </td>\n <td>\n {{\'DESCRIPTION_TD_\' + sum[0] | translate}}\n </td>\n </tr>\n </table>\n </div>\n </div>\n <!-- END SUMMARY TAB -->\n <!-- START SUMMARY TAB -->\n <div class="tab-pane" id="tab_advanced" ng-show="process.runtime">\n <div class="row number-stats margin-bottom-30">\n <div class="col-md-6 col-sm-6 col-xs-6">\n <div class="stat-left">\n <div class="stat-number">\n <div class="title">\n {{\'APPLICATION_SUCCESS\' | translate}}\n </div>\n <div class="number">\n {{process.runtime.success || 0}}\n </div>\n </div>\n </div>\n </div>\n <div class="col-md-6 col-sm-6 col-xs-6">\n <div class="stat-right">\n <div class="stat-number">\n <div class="title">\n {{\'APPLICATION_FAILED\' | translate}}\n </div>\n <div class="number">\n {{process.runtime.failed || 0}}\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class="table-scrollable table-scrollable-borderless">\n <table class="table table-hover table-light">\n <thead>\n <tr class="uppercase">\n <th>\n {{\'APPLICATION_STATUS\' | translate}}\n </th>\n <th>\n {{\'APPLICATION_VALUE\' | translate}}\n </th>\n <th>\n {{\'APPLICATION_DESCRIPTION\' | translate}}\n </th>\n </tr>\n </thead>\n <tr ng-repeat="(key, value) in process.runtime">\n <td>\n <a href="#" class="primary-link">{{\'APPLICATION_\' + key.toUpperCase() | translate}}</a>\n </td>\n <td ng-switch on="key">\n <span ng-switch-when="avgDial">{{value | number:2}}</span>\n <span ng-switch-when="avgDuration">{{value | number:2}}</span>\n <span ng-switch-when="avgProgress">{{value | number:2}}</span>\n <span ng-switch-when="completed">{{((value)? \'APPLICATION_YES\' : \'APPLICATION_NO\') | translate}}</span>\n <span ng-switch-when="outOfTime">{{((value)? \'APPLICATION_YES\' : \'APPLICATION_NO\') | translate}}</span>\n <span ng-switch-default>{{value}}</span>\n </td>\n <td>\n {{\'DESCRIPTION_TD_\' + key.toUpperCase() | translate}}\n </td>\n </tr>\n </table>\n </div>\n </div>\n <!-- END SUMMARY TAB -->\n </div>\n </div>\n </div>\n <!-- END PORTLET -->\n </div>\n</div>\n'),a.put("app/motiondialer/process/view/view.run.process.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_STATUS\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <p>\n Do you want to {{ status }} the process?\n </p>\n</div>\n<div class="modal-footer">\n <button class="btn default green-meadow" type="button" ng-click="yes()">{{ \'APPLICATION_YES\' | translate }}</button>\n <button class="btn default" type="button" ng-click="no()">{{ \'APPLICATION_NO\' | translate }}</button>\n</div>\n'),a.put("app/motiondialer/process/view/view.settings.html",'<div class="row" data-ng-init="initSettings()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_PROCESS\' | translate}} {{ \'APPLICATION_SETTINGS\' | translate}} </span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_general" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_channel" data-toggle="tab">{{ \'APPLICATION_CHANNEL\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_advanced" data-toggle="tab">{{ \'APPLICATION_ADVANCED\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_status" data-toggle="tab">{{ \'APPLICATION_STATUS\' | translate}}</a>\n </li>\n </ul>\n </div>\n <div class="portlet-body">\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_general">\n <form name="form" data-ng-submit="form.$valid && updateProcess()" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.name.$touched || form.$submitted) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="process.name" required/>\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n <!-- START QUEUE -->\n <div data-ng-show="process.queue != \'none\'" class="form-group" data-ng-class="{\'has-error\': (form.queue.$touched || form.$submitted) && form.queue.$invalid}">\n <label class="control-label">{{\'APPLICATION_QUEUE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="process.queue" name="queue" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="queue.name as queue in queues | filter: $select.search">\n <div ng-bind-html="queue.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form.queue.$touched || form.$submitted) && form.queue.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END QUEUE -->\n <!-- START MAX RETRIES -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.max_retries.$touched || form.$submitted) && form.max_retries.$invalid}">\n <label class="control-label">{{\'APPLICATION_MAX_RETRIES\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" min="1" max="100" name="max_retries" placeholder="{{\'APPLICATION_MAX_RETRIES\' | translate}}" class="form-control" data-ng-model="process.max_retries" required/>\n <span class="help-block">{{\'DESCRIPTION_TD_MAX_RETRIES\' | translate}}</span>\n <span data-ng-show="(form.max_retries.$touched || form.$submitted) && form.max_retries.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="form.max_retries.$error.max || form.max_retries.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_NUMBER\' | translate}}.\n </span>\n </div>\n <!-- END MAX RETRIES -->\n <!-- START RETRY TIME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.retry_time.$touched || form.$submitted) && form.retry_time.$invalid}">\n <label class="control-label">{{\'APPLICATION_RETRY_TIME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" min="1" name="retry_time" placeholder="{{\'APPLICATION_RETRY_TIME\' | translate}}" class="form-control" data-ng-model="process.retry_time" required/>\n <span class="help-block">{{\'DESCRIPTION_TD_RETRY_TIME\' | translate}}</span>\n <span data-ng-show="(form.retry_time.$touched || form.$submitted) && form.retry_time.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="form.retry_time.$error.max || form.retry_time.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_NUMBER\' | translate}}.\n </span>\n </div>\n <!-- END RETRY TIME -->\n <!-- START RETRY TIME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.wait_time.$touched || form.$submitted) && form.wait_time.$invalid}">\n <label class="control-label">{{\'APPLICATION_WAIT_TIME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" min="1000" name="wait_time" placeholder="{{\'APPLICATION_WAIT_TIME\' | translate}}" class="form-control" data-ng-model="process.wait_time" required/>\n <span class="help-block">{{\'DESCRIPTION_TD_WAIT_TIME\' | translate}}</span>\n <span data-ng-show="(form.wait_time.$touched || form.$submitted) && form.wait_time.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="form.wait_time.$error.max || form.wait_time.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_NUMBER\' | translate}}.\n </span>\n </div>\n <!-- END WAIT TIME -->\n <!-- START AUTO CLOSED -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_AUTO_CLOSED\' | translate}}</label></br>\n <input\n bs-switch\n data-ng-model="process.auto_closed"\n type="checkbox"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-animate="false">\n <span class="help-block">{{\'DESCRIPTION_TD_AUTO_CLOSED\' | translate}}</span>\n </div>\n <!-- END AUTO CLOSED -->\n <!-- START WEIGHT -->\n <!-- END WEIGHT -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_AUTODIAL_LEVEL\' | translate}}</label></br>\n <slider ng-model="process.weight" min="0" step="1" max="50"></slider>\n <label>{{\'APPLICATION_VALUE\' | translate}}: {{process.weight}}</label>\n <span class="help-block">{{\'DESCRIPTION_TD_WEIGHT\' | translate}}</span>\n </div>\n <!-- START DISPOSAL -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_TD_DISPOSAL\' | translate}}</label></br>\n <input\n bs-switch\n data-ng-model="process.disposal"\n type="checkbox"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-animate="false">\n <span class="help-block">{{\'DESCRIPTION_TD_DISPOSAL\' | translate}}</span>\n </div>\n <!-- END DISPOSAL -->\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="process.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END GENERAL TAB -->\n <!-- CHANNEL TAB -->\n <div class="tab-pane" id="tab_channel">\n <form name="form" data-ng-submit="form.$valid && updateProcess()" novalidate>\n <!-- START CONTEXT -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.context.$touched || form.$submitted) && form.context.$invalid}">\n <label class="control-label">{{\'APPLICATION_CONTEXT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="context" placeholder="{{\'APPLICATION_CONTEXT\' | translate}}" class="form-control" data-ng-model="process.context" required/>\n <span class="help-block">{{\'DESCRIPTION_TD_CONTEXT\' | translate}}</span>\n <span data-ng-show="(form.context.$touched || form.$submitted) && form.context.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CONTEXT -->\n <!-- START EXTENSION -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.extension.$touched || form.$submitted) && form.extension.$invalid}">\n <label class="control-label">{{\'APPLICATION_EXTENSION\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="extension" placeholder="{{\'APPLICATION_EXTENSION\' | translate}}" class="form-control" data-ng-model="process.extension" required/>\n <span class="help-block">{{\'DESCRIPTION_TD_EXTENSION\' | translate}}</span><a href="/channels/voice/routes/internal/list">Link {{\'APPLICATION_INTERNAL\' | translate}}</a>\n <span data-ng-show="(form.extension.$touched || form.$submitted) && form.extension.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END EXTENSION -->\n <!-- START PRIORITY -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.priority.$touched || form.$submitted) && form.priority.$invalid}">\n <label class="control-label">{{\'APPLICATION_PRIORITY\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" min="1" name="priority" placeholder="{{\'APPLICATION_PRIORITY\' | translate}}" class="form-control" data-ng-model="process.priority" required/>\n <span class="help-block">{{\'DESCRIPTION_TD_PRIORITY\' | translate}}</span>\n <span data-ng-show="(form.priority.$touched || form.$submitted) && form.priority.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="form.priority.$error.max || form.priority.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_NUMBER\' | translate}}.\n </span>\n </div>\n <!-- END PRIORITY -->\n <!-- START PREFIX -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_PREFIX\' | translate}}</label>\n <input type="text" name="prefix_code" placeholder="{{\'APPLICATION_PREFIX\' | translate}}" class="form-control" data-ng-model="process.prefix_code"/>\n <span class="help-block">{{\'DESCRIPTION_TD_PREFIX\' | translate}}</span>\n </div>\n <!-- END PREFIX -->\n <!-- START TECHNOLOGY -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_TECHNOLOGY\' | translate}}<span class="required" aria-required="true">*</span></label>\n <select name="tech" class="form-control" data-ng-model="process.tech" ng-options="tech for tech in techs" required>\n </select>\n <span class="help-block">{{\'DESCRIPTION_TD_TECHNOLOGY\' | translate}}</span>\n </div>\n <!-- END TECHNOLOGY -->\n <!-- START DEVICE -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.device.$touched || form.$submitted) && form.device.$invalid}">\n <label class="control-label">{{\'APPLICATION_TRUNK\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="device" placeholder="{{\'APPLICATION_TRUNK\' | translate}}" class="form-control" data-ng-model="process.device" required/>\n <span class="help-block">{{\'DESCRIPTION_TD_TRUNK\' | translate}}</span>\n <span data-ng-show="(form.device.$touched || form.$submitted) && form.device.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END DEVICE -->\n <!-- START CALLERID -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.callerid.$touched || form.$submitted) && form.callerid.$invalid}">\n <label class="control-label">{{\'APPLICATION_CALLERID\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="callerid" placeholder="{{\'APPLICATION_CALLERID\' | translate}}" class="form-control" data-ng-model="process.callerid" required/>\n <span class="help-block">{{\'DESCRIPTION_TD_CALLERID\' | translate}}</span>\n <span data-ng-show="(form.callerid.$touched || form.$submitted) && form.callerid.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CALLERID -->\n <!-- START CODEC -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_ALLOWED_CODECS\' | translate}}</label>\n <ui-select multiple data-ng-model="process.codecs" name="codecs" theme="bootstrap" data-ng-disabled="disabled">\n <ui-select-match placeholder="Select codec...">{{$item}}</ui-select-match>\n <ui-select-choices repeat="codec in codecs">\n {{codec}}\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END CODEC -->\n <!-- START DIAL FORMAT -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DIAL_FORMAT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <select name="dial_format" class="form-control" data-ng-model="process.dial_format" ng-options="dial_format for dial_format in dialFormats" required>\n </select>\n <span class="help-block">{{\'DESCRIPTION_TD_DIAL_FORMAT\' | translate}}</span>\n </div>\n <!-- END DIAL FORMAT -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END CHANNEL TAB -->\n <!-- ADVANCED TAB -->\n <div class="tab-pane" id="tab_advanced">\n <form name="form" data-ng-submit="form.$valid && updateProcess()" novalidate>\n <!-- START CHECK DUPLICATE -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_CHECK_DUPLICATE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <select name="check_duplicate" class="form-control" data-ng-model="process.check_duplicate" ng-options="check_duplicate for check_duplicate in checkDuplicates" required>\n </select>\n <span class="help-block">{{\'DESCRIPTION_TD_CHECK_DUPLICATE\' | translate}}</span>\n </div>\n <!-- END CHECK DUPLICATE -->\n <!-- START CHECK BLACKLIST -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_CHECK_BLACKLIST\' | translate}}</label></br>\n <input\n bs-switch\n data-ng-model="process.check_blacklist"\n type="checkbox"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-animate="false">\n <span class="help-block">{{\'DESCRIPTION_TD_CHECK_BLACKLIST\' | translate}}</span>\n </div>\n <!-- END CHECK BLACKLIST -->\n <!-- START CHECK PHONE LENGHT -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.check_phone_length.$touched || form.$submitted) && form.check_phone_length.$invalid}">\n <label class="control-label">{{\'APPLICATION_CHECK_PHONE_LENGHT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" min="1" name="check_phone_length" placeholder="{{\'APPLICATION_CHECK_PHONE_LENGHT\' | translate}}" class="form-control" data-ng-model="process.check_phone_length" required/>\n <span class="help-block">{{\'DESCRIPTION_TD_CHECK_PHONE_LENGHT\' | translate}}</span>\n <span data-ng-show="(form.check_phone_length.$touched || form.$submitted) && form.check_phone_length.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="form.check_phone_length.$error.max || form.check_phone_length.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_NUMBER\' | translate}}.\n </span>\n </div>\n <!-- END CHECK PHONE LENGHT -->\n <!-- START TIME SLICE -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.time_slice.$touched || form.$submitted) && form.time_slice.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIME_SLICE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" min="1" name="time_slice" placeholder="{{\'APPLICATION_TIME_SLICE\' | translate}}" class="form-control" data-ng-model="process.time_slice" required/>\n <span class="help-block">{{\'DESCRIPTION_TD_TIME_SLICE\' | translate}}</span>\n <span data-ng-show="(form.time_slice.$touched || form.$submitted) && form.time_slice.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="form.time_slice.$error.max || form.time_slice.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_NUMBER\' | translate}}.\n </span>\n </div>\n <!-- END TIME SLICE -->\n <!-- START MISSED -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_CHECK_MISSED\' | translate}}</label></br>\n <input\n bs-switch\n data-ng-model="process.missed"\n type="checkbox"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-animate="false">\n <span class="help-block">{{\'DESCRIPTION_TD_CHECK_MISSED\' | translate}}</span>\n </div>\n <!-- END MISSED -->\n <!-- START CHANNEL LIMIT -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.channel_limit.$touched || form.$submitted) && form.channel_limit.$invalid}">\n <label class="control-label">{{\'APPLICATION_CHANNEL_LIMIT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" min="0" name="channel_limit" placeholder="{{\'APPLICATION_CHANNEL_LIMIT\' | translate}}" class="form-control" data-ng-model="process.channel_limit" required/>\n <span class="help-block">{{\'DESCRIPTION_TD_CHANNEL_LIMIT\' | translate}}</span>\n <span data-ng-show="(form.channel_limit.$touched || form.$submitted) && form.channel_limit.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="form.channel_limit.$error.max || form.channel_limit.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_NUMBER\' | translate}}.\n </span>\n </div>\n <!-- END CHANNEL LIMIT -->\n <!-- START CONTEXT FOR OTHER CALLS -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_CONTEXT_FOR_OTHER_CALLS\' | translate}}</label>\n <input type="text" name="context_for_other_calls" placeholder="{{\'APPLICATION_CONTEXT_FOR_OTHER_CALLS\' | translate}}" class="form-control" data-ng-model="process.context_for_other_calls"/>\n <span class="help-block">{{\'DESCRIPTION_TD_CONTEXT_FOR_OTHER_CALLS\' | translate}}</span>\n </div>\n <!-- END CONTEXT FOR OTHER CALLS -->\n <!-- START EXTENSION FOR OTHER CALLS-->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_EXTENSION_FOR_OTHER_CALLS\' | translate}}</label>\n <input type="text" name="extension_for_other_calls" placeholder="{{\'APPLICATION_EXTENSION_FOR_OTHER_CALLS\' | translate}}" class="form-control" data-ng-model="process.extension_for_other_calls"/>\n <span class="help-block">{{\'DESCRIPTION_TD_EXTENSION_FOR_OTHER_CALLS\' | translate}}</span>\n </div>\n <!-- END EXTENSION FOR OTHER CALLS-->\n <!-- START PRIORITY FOR OTHER CALLS-->\n <div class="form-group" data-ng-class="{\'has-error\': (form.priority_for_other_calls.$touched || form.$submitted) && form.priority_for_other_calls.$invalid}">\n <label class="control-label">{{\'APPLICATION_PRIORITY_FOR_OTHER_CALLS\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" min="1" name="priority_for_other_calls" placeholder="{{\'APPLICATION_PRIORITY_FOR_OTHER_CALLS\' | translate}}" class="form-control" data-ng-model="process.priority_for_other_calls"/>\n <span class="help-block">{{\'DESCRIPTION_TD_PRIORITY_FOR_OTHER_CALLS\' | translate}}</span>\n <span data-ng-show="form.priority_for_other_calls.$error.max || form.priority_for_other_calls.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_NUMBER\' | translate}}.\n </span>\n </div>\n <!-- END PRIORITY FOR OTHER CALLS -->\n <!-- START TIMEZONE -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_EXTENDED_TIME_INTERVAL\' | translate}}</label>\n <input type="text" name="timezone" placeholder="08:30-20:30" class="form-control" data-ng-model="process.timezone"/>\n <span class="help-block">{{\'DESCRIPTION_TD_EXTENDED_TIME_INTERVAL\' | translate}}</span>\n </div>\n <!-- END TIMEZONE -->\n\n <!-- START AUTO TIMEZONE MANAGEMENT -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_AUTO_TIMEZONE_MANAGEMENT\' | translate}}</label></br>\n <input\n bs-switch\n data-ng-model="process.auto_timezone_management"\n type="checkbox"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-animate="false">\n <span class="help-block">{{\'DESCRIPTION_TD_AUTO_TIMEZONE_MANAGEMENT\' | translate}}</span>\n </div>\n <!-- END AUTO TIMEZONE MANAGEMENT -->\n <!-- START IGNORE STRINGS-->\n <!-- COMMENTED: BECAUSE IGNORE_STRINGS IS AN ARRAY NOT A STRING-->\n <!-- <div class="form-group">\n <label class="control-label">{{\'APPLICATION_IGNORE_STRINGS\' | translate}}</label>\n <input type="text" name="ignore_strings" placeholder="{{\'APPLICATION_IGNORE_STRINGS\' | translate}}" class="form-control" data-ng-model="process.ignore_strings"/>\n <span class="help-block">{{\'DESCRIPTION_TD_IGNORE_STRINGS\' | translate}}</span>\n </div> -->\n <!-- END IGNORE STRINGS-->\n <!-- START MIN OPERATOR -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.min_operator.$touched || form.$submitted) && form.min_operator.$invalid}">\n <label class="control-label">{{\'APPLICATION_MIN_OPERATOR\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" min="1" name="min_operator" placeholder="{{\'APPLICATION_MIN_OPERATOR\' | translate}}" class="form-control" data-ng-model="process.min_operator" required/>\n <span class="help-block">{{\'DESCRIPTION_TD_MIN_OPERATOR\' | translate}}</span>\n <span data-ng-show="(form.min_operator.$touched || form.$submitted) && form.min_operator.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="form.min_operator.$error.max || form.min_operator.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_NUMBER\' | translate}}.\n </span>\n </div>\n <!-- END MIN OPERATOR -->\n <!-- START ALERT MAX CALLS -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.alert_max_calls.$touched || form.$submitted) && form.alert_max_calls.$invalid}">\n <label class="control-label">{{\'APPLICATION_ALERT_MAX_CALLS\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" min="0" name="alert_max_calls" placeholder="{{\'APPLICATION_ALERT_MAX_CALLS\' | translate}}" class="form-control" data-ng-model="process.alert_max_calls" required/>\n <span class="help-block">{{\'DESCRIPTION_TD_ALERT_MAX_CALLS\' | translate}}</span>\n <span data-ng-show="(form.alert_max_calls.$touched || form.$submitted) && form.alert_max_calls.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="form.alert_max_calls.$error.max || form.alert_max_calls.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_NUMBER\' | translate}}.\n </span>\n </div>\n <!-- END ALERT MAX CALLS -->\n <!-- START ALERT TIME SLICE -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.alert_time_slice.$touched || form.$submitted) && form.alert_time_slice.$invalid}">\n <label class="control-label">{{\'APPLICATION_ALERT_TIME_SLICE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" min="1" name="alert_time_slice" placeholder="{{\'APPLICATION_ALERT_TIME_SLICE\' | translate}}" class="form-control" data-ng-model="process.alert_time_slice" required/>\n <span class="help-block">{{\'DESCRIPTION_TD_ALERT_TIME_SLICE\' | translate}}</span>\n <span data-ng-show="(form.alert_time_slice.$touched || form.$submitted) && form.alert_time_slice.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="form.alert_time_slice.$error.max || form.alert_time_slice.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_NUMBER\' | translate}}.\n </span>\n </div>\n <!-- END ALERT TIME SLICE -->\n <!-- START DROP MAX COUNT -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.drop_max_count.$touched || form.$submitted) && form.drop_max_count.$invalid}">\n <label class="control-label">{{\'APPLICATION_DROP_MAX_COUNT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" min="0" name="drop_max_count" placeholder="{{\'APPLICATION_DROP_MAX_COUNT\' | translate}}" class="form-control" data-ng-model="process.drop_max_count" required/>\n <span class="help-block">{{\'DESCRIPTION_TD_DROP_MAX_COUNT\' | translate}}</span>\n <span data-ng-show="(form.drop_max_count.$touched || form.$submitted) && form.drop_max_count.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="form.drop_max_count.$error.max || form.drop_max_count.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_NUMBER\' | translate}}.\n </span>\n </div>\n <!-- END DROP MAX COUNT -->\n <!-- START SUCCESS CALL SIZE -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.success_call_size.$touched || form.$submitted) && form.success_call_size.$invalid}">\n <label class="control-label">{{\'APPLICATION_SUCCESS_CALL_SIZE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" min="1" name="success_call_size" placeholder="{{\'APPLICATION_SUCCESS_CALL_SIZE\' | translate}}" class="form-control" data-ng-model="process.success_call_size" required/>\n <span class="help-block">{{\'DESCRIPTION_TD_SUCCESS_CALL_SIZE\' | translate}}</span>\n <span data-ng-show="(form.success_call_size.$touched || form.$submitted) && form.success_call_size.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="form.success_call_size.$error.max || form.success_call_size.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_NUMBER\' | translate}}.\n </span>\n </div>\n <!-- END SUCCESS CALL SIZE -->\n <!-- START IGNORE STRINGS-->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_TIME_EXPIRED\' | translate}}</label>\n <input type="text" name="expiredtime" placeholder="yyyy-MM-dd HH:mm:ss" class="form-control" data-ng-model="process.expiredtime"/>\n <span class="help-block">{{\'DESCRIPTION_TD_TIME_EXPIRED\' | translate}}</span>\n </div>\n <!-- END IGNORE STRINGS-->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END ANDVANCED TAB -->\n <!-- START STATUS TAB -->\n <div class="tab-pane" id="tab_status">\n <form name="form" data-ng-submit="form.$valid && updateProcess()" novalidate>\n <table class="table table-bordered table-hover">\n <thead>\n <tr role="row" class="heading">\n <th>\n {{ \'APPLICATION_VALUE\' | translate}}\n </th>\n <th>\n {{ \'APPLICATION_MAX_RETRIES\' | translate}}\n </th>\n <th>\n {{ \'APPLICATION_RETRY_TIME\' | translate}} [min]\n </th>\n <th>\n {{ \'APPLICATION_DESCRIPTION\' | translate}}\n </th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td>\n {{ \'APPLICATION_AMD\' | translate}}\n </td>\n <td>\n <input type="number" min="0" name="amd_max_retries"class="form-control" data-ng-model="process.amd_max_retries" required/>\n <span data-ng-show="(form.amd_max_retries.$touched || form.$submitted) && form.amd_max_retries.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="form.amd_max_retries.$error.max || form.amd_max_retries.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_NUMBER\' | translate}}.\n </span>\n </td>\n <td>\n <input type="number" min="0" name="amd_retry_time" class="form-control" data-ng-model="process.amd_retry_time" required/>\n <span data-ng-show="(form.amd_retry_time.$touched || form.$submitted) && form.amd_retry_time.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="form.amd_retry_time.$error.max || form.amd_retry_time.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_NUMBER\' | translate}}.\n </span>\n </td>\n <td>\n {{ \'DESCRIPTION_TD_STATUS_AMD\' | translate}}\n </td>\n </tr>\n <tr>\n <td>\n {{ \'APPLICATION_BUSY\' | translate}}\n </td>\n <td>\n <input type="number" min="0" name="busy_max_retries"class="form-control" data-ng-model="process.busy_max_retries" required/>\n <span data-ng-show="(form.busy_max_retries.$touched || form.$submitted) && form.busy_max_retries.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="form.busy_max_retries.$error.max || form.busy_max_retries.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_NUMBER\' | translate}}.\n </span>\n </td>\n <td>\n <input type="number" min="0" name="busy_retry_time"class="form-control" data-ng-model="process.busy_retry_time" required/>\n <span data-ng-show="(form.busy_retry_time.$touched || form.$submitted) && form.busy_retry_time.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="form.busy_retry_time.$error.max || form.busy_retry_time.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_NUMBER\' | translate}}.\n </span>\n </td>\n <td>\n {{ \'DESCRIPTION_TD_STATUS_BUSY\' | translate}}\n </td>\n </tr>\n <tr>\n <td>\n {{ \'APPLICATION_CONGESTION\' | translate}}\n </td>\n <td>\n <input type="number" min="0" name="congestion_max_retries"class="form-control" data-ng-model="process.congestion_max_retries" required/>\n <span data-ng-show="(form.congestion_max_retries.$touched || form.$submitted) && form.congestion_max_retries.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="form.congestion_max_retries.$error.max || form.congestion_max_retries.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_NUMBER\' | translate}}.\n </span>\n </td>\n <td>\n <input type="number" min="0" name="congestion_retry_time"class="form-control" data-ng-model="process.congestion_retry_time" required/>\n <span data-ng-show="(form.congestion_retry_time.$touched || form.$submitted) && form.congestion_retry_time.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="form.congestion_retry_time.$error.max || form.congestion_retry_time.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_NUMBER\' | translate}}.\n </span>\n </td>\n <td>\n {{ \'DESCRIPTION_TD_STATUS_CONGESTION\' | translate}}\n </td>\n </tr>\n <tr>\n <td>\n {{ \'APPLICATION_DROP\' | translate}}\n </td>\n <td>\n <input type="number" min="0" name="drop_max_retries"class="form-control" data-ng-model="process.drop_max_retries" required/>\n <span data-ng-show="(form.drop_max_retries.$touched || form.$submitted) && form.drop_max_retries.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="form.drop_max_retries.$error.max || form.drop_max_retries.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_NUMBER\' | translate}}.\n </span>\n </td>\n <td>\n <input type="number" min="0" name="drop_retry_time"class="form-control" data-ng-model="process.drop_retry_time" required/>\n <span data-ng-show="(form.drop_retry_time.$touched || form.$submitted) && form.drop_retry_time.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="form.drop_retry_time.$error.max || form.drop_retry_time.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_NUMBER\' | translate}}.\n </span>\n </td>\n <td>\n {{ \'DESCRIPTION_TD_STATUS_DROP\' | translate}}\n </td>\n </tr>\n <tr>\n <td>\n {{ \'APPLICATION_FAILED\' | translate}}\n </td>\n <td>\n <input type="number" min="0" name="failed_max_retries"class="form-control" data-ng-model="process.failed_max_retries" required/>\n <span data-ng-show="(form.failed_max_retries.$touched || form.$submitted) && form.failed_max_retries.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="form.failed_max_retries.$error.max || form.failed_max_retries.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_NUMBER\' | translate}}.\n </span>\n </td>\n <td>\n <input type="number" min="0" name="failed_retry_time"class="form-control" data-ng-model="process.failed_retry_time" required/>\n <span data-ng-show="(form.failed_retry_time.$touched || form.$submitted) && form.failed_retry_time.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="form.failed_retry_time.$error.max || form.failed_retry_time.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_NUMBER\' | translate}}.\n </span>\n </td>\n <td>\n {{ \'DESCRIPTION_TD_STATUS_FAILED\' | translate}}\n </td>\n </tr>\n <tr>\n <td>\n {{ \'APPLICATION_NOANSWER\' | translate}}\n </td>\n <td>\n <input type="number" min="0" name="noanswer_max_retries"class="form-control" data-ng-model="process.noanswer_max_retries" required/>\n <span data-ng-show="(form.noanswer_max_retries.$touched || form.$submitted) && form.noanswer_max_retries.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="form.noanswer_max_retries.$error.max || form.noanswer_max_retries.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_NUMBER\' | translate}}.\n </span>\n </td>\n <td>\n <input type="number" min="0" name="noanswer_retry_time"class="form-control" data-ng-model="process.noanswer_retry_time" required/>\n <span data-ng-show="(form.noanswer_retry_time.$touched || form.$submitted) && form.noanswer_retry_time.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="form.noanswer_retry_time.$error.max || form.noanswer_retry_time.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_NUMBER\' | translate}}.\n </span>\n </td>\n <td>\n {{ \'DESCRIPTION_TD_STATUS_NOANSWER\' | translate}}\n </td>\n </tr>\n <tr>\n <td>\n {{ \'APPLICATION_NOSUCHEXTENSION\' | translate}}\n </td>\n <td>\n <input type="number" min="0" name="nosuchextension_max_retries"class="form-control" data-ng-model="process.nosuchextension_max_retries" required/>\n <span data-ng-show="(form.nosuchextension_max_retries.$touched || form.$submitted) && form.nosuchextension_max_retries.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="form.nosuchextension_max_retries.$error.max || form.nosuchextension_max_retries.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_NUMBER\' | translate}}.\n </span>\n </td>\n <td>\n <input type="number" min="0" name="nosuchextension_retry_time"class="form-control" data-ng-model="process.nosuchextension_retry_time" required/>\n <span data-ng-show="(form.nosuchextension_retry_time.$touched || form.$submitted) && form.nosuchextension_retry_time.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="form.nosuchextension_retry_time.$error.max || form.nosuchextension_retry_time.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_NUMBER\' | translate}}.\n </span>\n </td>\n <td>\n {{ \'DESCRIPTION_TD_STATUS_NOSUCHEXTENSION\' | translate}}\n </td>\n </tr>\n </tbody>\n </table>\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END STATUS TAB -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'), +a.put("app/motiondialer/process/view/view.spooler.edit.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_EDIT\' | translate }} {{ \'APPLICATION_CONTACT\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <!-- START RETRIEVE -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.retrieve.$touched || form.$submitted) && form.retrieve.$invalid}" ng-init="initModal()">\n <label class="control-label">{{ \'APPLICATION_STATUS\' | translate }}<span class="required" aria-required="true">*</span></label>\n <select name="retrieve" class="form-control" data-ng-model="entitySpooler.retrieve" required>\n <option value="CLOSED">CLOSE</option>\n <option value="OPEN">OPEN</option>\n <option value="BLACK_LIST">BLACKLIST</option>\n <option value="PLANNED">PLANNING</option>\n <option value="PLANNED_PEER">PLANNING AGENT</option>\n </select>\n <span data-ng-show="(form.retrieve.$touched || form.$submitted) && form.retrieve.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END RETRIEVE -->\n <!-- START PLANNING DATE -->\n <div class="form-group" data-ng-if="entitySpooler.retrieve == \'PLANNED\' || entitySpooler.retrieve == \'PLANNED_PEER\'" data-ng-class="{\'has-error\': (form.date.$touched || form.$submitted) && form.date.$invalid}">\n <label class="control-label">PLANNING DATE<span class="required" aria-required="true">*</span></label>\n <uib-datepicker name="date" ng-model="entitySpooler.planningtime" required="entitySpooler.retrieve == \'PLANNED\' || entitySpooler.retrieve == \'PLANNED_PEER\'" data-ng-init="entitySpooler.planningtime = moment()"></uib-datepicker>\n <span data-ng-show="(form.date.$touched || form.$submitted) && form.date.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PLANNING DATE -->\n <!-- START PLANNING TIME -->\n <div class="form-group" data-ng-if="entitySpooler.retrieve == \'PLANNED\' || entitySpooler.retrieve == \'PLANNED_PEER\'" data-ng-class="{\'has-error\': (form.time.$touched || form.$submitted) && form.time.$invalid}">\n <label class="control-label">PLANNING TIME<span class="required" aria-required="true">*</span></label>\n <uib-timepicker name="time" ng-model="entitySpooler.planningtime" required="entitySpooler.retrieve == \'PLANNED\' || entitySpooler.retrieve == \'PLANNED_PEER\'" show-meridian="false" show-seconds="false"></uib-timepicker>\n <span data-ng-show="(form.time.$touched || form.$submitted) && form.time.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PLANNING TIME -->\n <!-- START PLANNING PEER -->\n <div class="form-group" data-ng-if="entitySpooler.retrieve == \'PLANNED_PEER\'" data-ng-class="{\'has-error\': (form.agent.$touched || form.$submitted) && form.agent.$invalid}">\n <label class="control-label">{{\'APPLICATION_AGENT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <select name="agent" class="form-control" data-ng-model="entitySpooler.planningpeer" ng-options="agent for agent in agents" required="entitySpooler.retrieve == \'PLANNED_PEER\'">\n </select>\n <span data-ng-show="(form.agent.$touched || form.$submitted) && form.agent.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PLANNING PEER -->\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CLOSE\' | translate }}</button>\n</div>\n'),a.put("app/motiondialer/process/view/view.spooler.history.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_HISTORY\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <json-formatter json="historySpooler" open="2"></json-formatter>\n</div>\n<div class="modal-footer">\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CLOSE\' | translate }}</button>\n</div>\n'),a.put("app/motiondialer/process/view/view.spooler.html",'<div class="row" data-ng-init="getSpooler()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_SPOOLER\' | translate}} </span>\n </div>\n <div class="actions">\n <a class="btn btn-default" href="#" data-ng-click="getSpooler()">\n <i class="icon-refresh"></i>\n </a>\n </div>\n </div>\n\n <div class="portlet-body">\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="spinner-grid" spinner-start-active="true"></span>\n <!-- END UI-GRID SPINNER -->\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-exporter class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/reset/reset.html",'<!-- BEGIN LOGO -->\n<div class="logo" data-ng-init="getInfo()">\n <a href="index.html">\n <img data-ng-if="settings.defaultLoginLogo || !license.custom" ng-src="assets/images/logo-big.png" alt="logo" />\n <img data-ng-if="license.custom && !settings.defaultLoginLogo" ng-src="api/settings/logo/login/{{settings.loginLogo ? settings.loginLogo : \'logo-big.png\'}}" alt="logo" class="custom-login-logo" onError="this.onerror=null;this.src=\'assets/images/logo-big.png\';"/>\n </a>\n</div>\n<!-- END LOGO -->\n<!-- BEGIN RESET -->\n<div class="content">\n <!-- BEGIN RESET FORM -->\n <form name="resetForm" data-ng-submit="resetForm.$valid && reset()" novalidate>\n <h3>{{\'APPLICATION_RESET_PASSWORD\' | translate}}</h3>\n <p>\n {{\'APPLICATION_INSERT_NEW_PASSWORD_RESET\' | translate}}\n </p>\n <div class="form-group" data-ng-class="{\'has-error\': resetForm.$submitted && resetForm.password.$invalid}">\n <label class="control-label">{{\'APPLICATION_NEW_PASSWORD\' | translate}}</label>\n <div class="input-icon">\n <i class="icon-key"></i>\n <input class="form-control form-control-solid placeholder-no-fix" type="password" placeholder="{{\'APPLICATION_NEW_PASSWORD\' | translate}}" name="password" ng-model="userReset.password" data-ng-pattern="settings.patternPassword" required/>\n </div>\n <span data-ng-show="resetForm.$submitted && resetForm.password.$invalid" class="help-block">{{\'MESSAGE_REQUIRED_FIELD\' | translate}}</span>\n <span data-ng-show="(resetForm.password.$touched || resetForm.$submitted) && resetForm.password.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n </span>\n </div>\n <div class="form-group" data-ng-class="{\'has-error\': resetForm.$submitted && resetForm.rePassword.$invalid}">\n <label class="control-label">{{\'APPLICATION_RE_TYPE_NEW_PASSWORD\' | translate}}</label>\n <div class="input-icon">\n <i class="icon-key"></i>\n <input class="form-control form-control-solid placeholder-no-fix" type="password" placeholder="{{\'APPLICATION_RE_TYPE_NEW_PASSWORD\' | translate}}" name="rePassword" ng-model="userReset.rePassword" nx-equal="userReset.password" required/>\n </div>\n <span data-ng-show="resetForm.$submitted && resetForm.rePassword.$invalid" class="help-block">{{\'MESSAGE_REQUIRED_FIELD\' | translate}}</span>\n <span data-ng-show="(resetForm.password.$touched || resetForm.$submitted) && resetForm.$error.nxEqual" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_PASSWORD\' | translate}}.\n </span>\n </div>\n <div class="form-actions">\n <button type="submit" class="btn btn-success uppercase">{{\'APPLICATION_SUBMIT\' | translate}}</button>\n </div>\n </form>\n <!-- END RESET FORM-->\n <div class="login-options">\n <h4>{{\'APPLICATION_FOLLOW_US\' | translate}}</h4>\n <ul class="social-icons">\n <li>\n <a class="social-icon-color facebook" data-original-title="facebook" href="https://www.facebook.com/xenialab"></a>\n </li>\n <li>\n <a class="social-icon-color twitter" data-original-title="Twitter" href="https://twitter.com/xenialab"></a>\n </li>\n <li>\n <a class="social-icon-color googleplus" data-original-title="Goole Plus" href="#"></a>\n </li>\n <li>\n <a class="social-icon-color linkedin" data-original-title="Linkedin" href="#"></a>\n </li>\n </ul>\n </div>\n</div>\n<div class="copyright">\n xCALLY Motion v. {{info.version}} | 2016 - {{year + 1}} © Powered by Xenialab <ng-bind-html data-ng-if="license.custom && !settings.defaultFooterWhiteLabel && settings.footerWhiteLabel" ng-bind-html="\'| \'+settings.footerWhiteLabel"></ng-bind-html>\n</div>\n<!-- END RESET -->\n'),a.put("app/salesforce/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-cloud"></i>\n <a href="/salesforce/list">{{ \'APPLICATION_SALESFORCE\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="fa fa-cloud font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_SALESFORCE\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <a class="btn green-jungle" href="/salesforce/wizard" data-toggle="dropdown">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_ACCOUNT\' | translate }}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/salesforce/view/configuration/list/create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_CONFIGURATION\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.name.$touched || form.name.$submitted) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="(form.name.$touched || form.name.$submitted) && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START CHANNEL -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.channel.$touched || form.channel.$submitted) && form.channel.$invalid}">\n <label class="control-label">{{\'APPLICATION_CHANNEL\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="item.channel" name="channel" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_CHANNEL\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="channel.value as channel in channels | filter: $select.search">\n <div data-ng-bind="channel.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form.channel.$touched || form.channel.$submitted) && form.channel.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- START CHANNEL -->\n\n <!-- START VOICE SUBTYPE -->\n <div data-ng-if="item.channel===\'voice\'" class="form-group" data-ng-class="{\'has-error\': (form.channel.$touched || form.channel.$submitted) && form.channel.$invalid}">\n <label class="control-label">{{\'APPLICATION_TYPE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="item.type" name="type" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_TYPE\' | translate}}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="type in [\'Queue\',\'Outbound\'] | filter: $select.search">\n <div data-ng-bind="type | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form.type.$touched || form.type.$submitted) && form.type.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- START CHANNEL -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"/></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/salesforce/view/configuration/list/list.html",'<div ui-view class="profile-content">\r\n <div class="row">\r\n <div class="col-md-12">\r\n <div class="portlet light" data-ng-init="initView()">\r\n <div class="portlet-title tabbable-line">\r\n <div class="caption caption-md">\r\n <i class="icon-globe theme-font hide"></i>\r\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_CONFIGURATIONS\' | translate}}</span>\r\n </div>\r\n <div class="actions">\r\n <div class="btn-group" data-ng-show="id.length">\r\n <a class="btn red" href="#" data-ng-click="deleteItems()">\r\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\r\n </a>\r\n </div>\r\n <div class="btn-group">\r\n <a class="btn green-jungle" href="#" data-ng-click="createItem()">\r\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_CONFIGURATION\' | translate }}\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n <div class="portlet-body">\r\n <!-- START TABLE -->\r\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\r\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n'),a.put("app/salesforce/view/configuration/view/view.html",'<div class="row" data-ng-init="initView();getConfiguration();getCustomVariables();getFields();">\r\n <div class="col-md-12">\r\n <div class="portlet light">\r\n <div class="portlet-title tabbable-line">\r\n <div class="caption caption-md">\r\n <i class="icon-globe theme-font hide"></i>\r\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_CONFIGURATION\' | translate}}: {{configurationName}}</span>\r\n </div>\r\n <ul class="nav nav-tabs">\r\n <li class="active">\r\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_SUBJECT\' | translate}}</a>\r\n </li>\r\n <li>\r\n <a href="#" data-target="#tab_1_2" data-toggle="tab">{{\'APPLICATION_DESCRIPTION\' | translate}}</a>\r\n </li>\r\n <li>\r\n <a href="#" data-target="#tab_1_3" data-toggle="tab">{{\'APPLICATION_FIELDS\' | translate}}</a>\r\n </li>\r\n </ul>\r\n </div>\r\n <div class="portlet-body">\r\n <div class="tab-content">\r\n <!-- SUBJECT TAB -->\r\n <div class="tab-pane ui-padding active" id="tab_1_1">\r\n <div class="row">\r\n <div class="col-md-11">\r\n <span class="caption-subject">All following fields will be join by blank space:</span>\r\n </div>\r\n <div class="col-md-1 pull-rigth">\r\n <button class="btn btn-icon-only green" data-ng-click="addItem(\'subject\')"><i class="fa fa-plus"></i></button>\r\n </div>\r\n </div>\r\n <hr>\r\n <!-- <div id="subject-item-list" ng-scrollbars ng-scrollbars-config="config"> -->\r\n <div class="row" data-ng-repeat="subjectItem in subjectConfig">\r\n <div class="col-md-3">\r\n <ui-select ng-model="subjectItem.type" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeType(subjectItem)">\r\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.title}}</ui-select-match>\r\n <ui-select-choices repeat="item.type as item in fieldType | filter: $select.search">\r\n <div ng-bind-html="item.title | highlight: $select.search"></div>\r\n </ui-select-choices>\r\n </ui-select>\r\n </div>\r\n <div class="col-md-8" data-ng-if="subjectItem.type==\'string\'">\r\n <div class="form-group">\r\n <input type="text" class="form-control" data-ng-model="subjectItem.content" data-ng-change="updateField(subjectItem)">\r\n </div>\r\n </div>\r\n <div class="col-md-8" data-ng-if="subjectItem.type==\'variable\'">\r\n <div class="form-group">\r\n <ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="subjectItem.variableName" data-ng-change="updateField(subjectItem)">\r\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.title}}</ui-select-match>\r\n <ui-select-choices group-by="groupVariableByGroup" repeat="variable.name as variable in variables | filter: $select.search">\r\n <div ng-bind-html="variable.title | highlight: $select.search"></div>\r\n </ui-select-choices>\r\n </ui-select>\r\n </div>\r\n </div>\r\n <div class="col-md-8" data-ng-if="subjectItem.type==\'customVariable\'">\r\n <div class="form-group">\r\n <ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="subjectItem.VariableId" data-ng-change="updateField(subjectItem)">\r\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\r\n <ui-select-choices repeat="variable.id as variable in customVariables | filter: $select.search">\r\n <div ng-bind-html="variable.name | highlight: $select.search"></div>\r\n </ui-select-choices>\r\n </ui-select>\r\n </div>\r\n </div>\r\n <div class="col-md-1">\r\n <div class="form-group">\r\n <button class="btn btn-icon-only red" data-ng-click="removeItem(subjectItem)"><i class="fa fa-times"></i></button>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- </div> -->\r\n </div>\r\n <!-- END SUBJECT TAB -->\r\n <!-- DESCRIPTION TAB -->\r\n <div class="tab-pane ui-padding" id="tab_1_2">\r\n <div class="row">\r\n <div class="col-md-11">\r\n <span class="caption-subject">All following fields will be join by new line:</span>\r\n </div>\r\n <div class="col-md-1 pull-rigth">\r\n <button class="btn btn-icon-only green" data-ng-click="addItem(\'description\')"><i class="fa fa-plus"></i></button>\r\n </div>\r\n </div>\r\n <hr>\r\n <!-- <div id="description-item-list" ng-scrollbars ng-scrollbars-config="config"> -->\r\n <div class="row" data-ng-repeat="descriptionItem in descriptionConfig">\r\n <div class="col-md-2">\r\n <ui-select ng-model="descriptionItem.type" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeDescType(descriptionItem)">\r\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.title}}</ui-select-match>\r\n <ui-select-choices repeat="item.type as item in descFieldType | filter: $select.search">\r\n <div ng-bind-html="item.title | highlight: $select.search"></div>\r\n </ui-select-choices>\r\n </ui-select>\r\n </div>\r\n <div class="col-md-9" data-ng-if="descriptionItem.type==\'string\'">\r\n <div class="form-group">\r\n <input type="text" class="form-control" data-ng-model="descriptionItem.content" data-ng-change="updateField(descriptionItem)">\r\n </div>\r\n </div>\r\n <div class="col-md-3" data-ng-if="descriptionItem.type==\'keyValue\'">\r\n <input type="text" class="form-control" placeholder="Key" data-ng-model="descriptionItem.key" data-ng-change="updateField(descriptionItem)">\r\n </div>\r\n <div class="col-md-3" data-ng-if="descriptionItem.type==\'keyValue\'">\r\n <ui-select ng-model="descriptionItem.keyType" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeDescType(descriptionItem)">\r\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.title}}</ui-select-match>\r\n <ui-select-choices repeat="item.type as item in fieldType | filter: $select.search">\r\n <div ng-bind-html="item.title | highlight: $select.search"></div>\r\n </ui-select-choices>\r\n </ui-select>\r\n </div>\r\n <div class="col-md-3" data-ng-if="descriptionItem.type==\'keyValue\' && descriptionItem.keyType==\'string\'">\r\n <input type="text" class="form-control" placeholder="Value" data-ng-model="descriptionItem.keyContent" data-ng-change="updateField(descriptionItem)">\r\n </div>\r\n <div class="col-md-3" data-ng-if="descriptionItem.type==\'keyValue\' && descriptionItem.keyType==\'variable\'">\r\n <div class="form-group">\r\n <ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="descriptionItem.variableName" data-ng-change="updateField(descriptionItem)">\r\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.title}}</ui-select-match>\r\n <ui-select-choices group-by="groupVariableByGroup" repeat="variable.name as variable in variables | filter: $select.search">\r\n <div ng-bind-html="variable.title | highlight: $select.search"></div>\r\n </ui-select-choices>\r\n </ui-select>\r\n </div>\r\n </div>\r\n <div class="col-md-3" data-ng-if="descriptionItem.type==\'keyValue\' && descriptionItem.keyType==\'customVariable\'">\r\n <div class="form-group">\r\n <ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="descriptionItem.VariableId" data-ng-change="updateField(descriptionItem)">\r\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\r\n <ui-select-choices repeat="variable.id as variable in customVariables | filter: $select.search">\r\n <div ng-bind-html="variable.name | highlight: $select.search"></div>\r\n </ui-select-choices>\r\n </ui-select>\r\n </div>\r\n </div>\r\n <div class="col-md-1">\r\n <div class="form-group">\r\n <button class="btn btn-icon-only red" data-ng-click="removeItem(descriptionItem)"><i class="fa fa-times"></i></button>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- </div> -->\r\n </div>\r\n <!-- END DESCRIPTION TAB -->\r\n <!-- FIELDS TAB -->\r\n <div class="tab-pane ui-padding" id="tab_1_3">\r\n <div class="row">\r\n <div class="col-md-11">\r\n <span class="caption-subject">Add how to fill the fields present in your account:</span>\r\n </div>\r\n <div class="col-md-1 pull-rigth">\r\n <button class="btn btn-icon-only green" data-ng-click="addItem(\'field\')"><i class="fa fa-plus"></i></button>\r\n </div>\r\n </div>\r\n <hr>\r\n <!-- <div id="field-item-list" ng-scrollbars ng-scrollbars-config="config"> -->\r\n <div class="row" data-ng-repeat="fieldItem in fieldConfig">\r\n <div class="col-md-3">\r\n <ui-select ng-model="fieldItem.idField" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeFieldType(fieldItem)">\r\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.label}}</ui-select-match>\r\n <ui-select-choices repeat="item.name as item in accountFields | filter: $select.search">\r\n <div ng-bind-html="item.label | highlight: $select.search"></div>\r\n </ui-select-choices>\r\n </ui-select>\r\n </div>\r\n <div class="col-md-8" data-ng-if="getSystemFieldOptions(fieldItem.idField)">\r\n <div class="form-group">\r\n <ui-select ng-model="fieldItem.content" theme="bootstrap" ng-disabled="disabled" data-ng-change="updateField(fieldItem)">\r\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.label}}</ui-select-match>\r\n <ui-select-choices repeat="item.value as item in getSystemFieldOptions(fieldItem.idField) | filter: $select.search">\r\n <div ng-bind-html="item.label | highlight: $select.search"></div>\r\n </ui-select-choices>\r\n </ui-select>\r\n </div>\r\n </div>\r\n <div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField)">\r\n <div class="form-group">\r\n <ui-select ng-model="fieldItem.type" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeType(fieldItem)">\r\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.title}}</ui-select-match>\r\n <ui-select-choices repeat="item.type as item in fieldType | filter: $select.search">\r\n <div ng-bind-html="item.title | highlight: $select.search | ucfirst"></div>\r\n </ui-select-choices>\r\n </ui-select>\r\n </div>\r\n </div>\r\n <div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField) && fieldItem.type === \'string\'">\r\n <div class="form-group">\r\n <input type="text" class="form-control" data-ng-model="fieldItem.content" data-ng-change="updateField(fieldItem)">\r\n </div>\r\n </div>\r\n <div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField) && fieldItem.type === \'variable\'">\r\n <div class="form-group">\r\n <ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="fieldItem.variableName" data-ng-change="updateField(fieldItem)">\r\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.title}}</ui-select-match>\r\n <ui-select-choices group-by="groupVariableByGroup" repeat="variable.name as variable in variables | filter: $select.search">\r\n <div ng-bind-html="variable.title | highlight: $select.search"></div>\r\n </ui-select-choices>\r\n </ui-select>\r\n </div>\r\n </div>\r\n <div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField) && fieldItem.type === \'customVariable\'">\r\n <div class="form-group">\r\n <ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="fieldItem.VariableId" data-ng-change="updateField(fieldItem)">\r\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\r\n <ui-select-choices repeat="variable.id as variable in customVariables | filter: $select.search">\r\n <div ng-bind-html="variable.name | highlight: $select.search"></div>\r\n </ui-select-choices>\r\n </ui-select>\r\n </div>\r\n </div>\r\n <div class="col-md-1">\r\n <div class="form-group">\r\n <button class="btn btn-icon-only red" data-ng-click="removeItem(fieldItem)"><i class="fa fa-times"></i></button>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- </div> -->\r\n </div>\r\n <!-- END FIELDS TAB -->\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n'),a.put("app/salesforce/view/view.account.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_ACCOUNT\' | translate}}</span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_GENERALS\' | translate}}</a>\n </li>\n </ul>\n </div>\n <div class="portlet-body">\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.formSetting" data-ng-submit="forms.formSetting.$valid && updateItem()" novalidate>\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="account.name" required/>\n <span data-ng-show="forms.formSetting.name.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="account.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n <!-- START USERNAME -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.username.$invalid}">\n <label class="control-label">{{\'APPLICATION_USERNAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="username" placeholder="{{\'APPLICATION_USERNAME\' | translate}}" class="form-control" data-ng-model="account.username" required/>\n <span data-ng-show="forms.formSetting.username.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n\n <!-- START REMOTE ADDRESS -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.remoteUri.$invalid}">\n <label class="control-label">{{\'APPLICATION_URI\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="url" name="remoteUri" placeholder="{{\'APPLICATION_URI\' | translate}}" class="form-control" data-ng-model="account.remoteUri" required />\n <span data-ng-show="forms.formSetting.remoteUri.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n\n <!-- START PASSWORD -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.password.$invalid}">\n <label class="control-label">{{\'APPLICATION_PASSWORD\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="password" name="password" placeholder="{{\'APPLICATION_PASSWORD\' | translate}}" class="form-control" data-ng-model="account.password" required/>\n <span data-ng-show="forms.formSetting.password.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PASSWORD -->\n\n <!-- START CLIENT ID -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.clientId.$invalid}">\n <label class="control-label">{{\'APPLICATION_CLIENT_ID\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="clientId" placeholder="{{\'APPLICATION_CLIENT_ID\' | translate}}" class="form-control" data-ng-model="account.clientId" required/>\n <span data-ng-show="forms.formSetting.clientId.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CLIENT ID -->\n\n <!-- START CLIENT SECRET -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.clientSecret.$invalid}">\n <label class="control-label">{{\'APPLICATION_CLIENT_SECRET\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="clientSecret" placeholder="{{\'APPLICATION_CLIENT_SECRET\' | translate}}" class="form-control" data-ng-model="account.clientSecret" required/>\n <span data-ng-show="forms.formSetting.clientSecret.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CLIENT SECRET -->\n\n <!-- START SECURITY TOKEN -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.securityToken.$invalid}">\n <label class="control-label">{{\'APPLICATION_SECURITY_TOKEN\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="securityToken" placeholder="{{\'APPLICATION_SECURITY_TOKEN\' | translate}}" class="form-control" data-ng-model="account.securityToken" required/>\n <span data-ng-show="forms.formSetting.securityToken.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END SECURITY TOKEN -->\n\n <!-- START SERVER URL -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.serverUrl.$invalid}">\n <label class="control-label">{{\'APPLICATION_MOTION_ADDRESS\' | translate}}</label>\n <input type="url" name="serverUrl" placeholder="{{\'APPLICATION_MOTION_ADDRESS\' | translate}}" class="form-control" data-ng-model="account.serverUrl"/>\n <span class="help-block">\n {{\'DESCRIPTION_SERVER_URL\' | translate}}.\n </span>\n <span class="help-block help-block-info">\n {{\'MESSAGE_MOTION_ADDRESS_FORMAT\' | translate}}\n </span>\n </div>\n <!-- END SERVER URL -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END GENERAL TAB -->\n\n </div>\n </div>\n </div>\n </div>\n</div>\n'), +a.put("app/salesforce/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-cloud"></i>\n <a href="/salesforce/list">{{ \'APPLICATION_SALESFORCE\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <a href="#">{{account.name}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img src="assets/images/media/salesforce.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{account.name}}\n </div>\n <div class="profile-usertitle-job">\n {{account.remoteUri}}\n </div>\n </div>\n <!-- END SIDEBAR USER TITLE -->\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.salesforce.view.account\')}">\n <a ng-href="/salesforce/view/{{account.id}}/account">\n <i class="icon-user"></i>\n {{ \'APPLICATION_ACCOUNT\' | translate }} </a>\n </li>\n <li data-ng-class="{active: $state.includes(\'main.salesforce.view.configurations\') || $state.is(\'main.salesforce.view.configuration\')}">\n <a ng-href="/salesforce/view/{{account.id}}/configurations/list">\n <i class="icon-settings"></i>\n {{ \'APPLICATION_CONFIGURATIONS\' | translate }} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/salesforce/wizard/wizard.html",'<!-- BEGIN PAGE HEADER-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-cloud"></i>\n <a href="/salesforce/list">{{ \'APPLICATION_SALESFORCE\' | translate }}</a>\n </li>\n </ul>\n </div>\n </div>\n</div>\n<!-- END PAGE HEADER-->\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initWizard()">\n <div class="col-md-12">\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-notebook font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_ACCOUNT\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="createItem()">\n <wz-step title="{{\'APPLICATION_ACCOUNT_INFO\' | translate}}" canexit="exitValidation(forms.formSetting.$valid)">\n <form name="forms.formSetting" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="forms.formSetting.name.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n <!-- START USERNAME -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.username.$invalid}">\n <label class="control-label">{{\'APPLICATION_USERNAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="username" placeholder="{{\'APPLICATION_USERNAME\' | translate}}" class="form-control" data-ng-model="item.username" required ng-remote-validate="/api/salesforce/accounts/validate/username"/>\n <span data-ng-show="forms.formSetting.username.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.formSetting.username.$touched || forms.formSetting.$submitted) && forms.formSetting.username.$error.ngRemoteValidate" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_EXIST_USERNAME\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n\n\n <!-- START REMOTE ADDRESS -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.remoteUri.$invalid}">\n <label class="control-label">{{\'APPLICATION_URI\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="url" name="remoteUri" placeholder="{{\'APPLICATION_URI\' | translate}}" class="form-control" data-ng-model="item.remoteUri" required/>\n <span data-ng-show="forms.formSetting.remoteUri.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n\n <!-- START PASSWORD -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.password.$invalid}">\n <label class="control-label">{{\'APPLICATION_PASSWORD\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="password" name="password" placeholder="{{\'APPLICATION_PASSWORD\' | translate}}" class="form-control" data-ng-model="item.password" required/>\n <span data-ng-show="forms.formSetting.password.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PASSWORD -->\n\n <!-- START CLIENT ID -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.clientId.$invalid}">\n <label class="control-label">{{\'APPLICATION_CLIENT_ID\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="clientId" placeholder="{{\'APPLICATION_CLIENT_ID\' | translate}}" class="form-control" data-ng-model="item.clientId" required/>\n <span data-ng-show="forms.formSetting.clientId.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CLIENT ID -->\n\n <!-- START CLIENT SECRET -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.clientSecret.$invalid}">\n <label class="control-label">{{\'APPLICATION_CLIENT_SECRET\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="clientSecret" placeholder="{{\'APPLICATION_CLIENT_SECRET\' | translate}}" class="form-control" data-ng-model="item.clientSecret" required/>\n <span data-ng-show="forms.formSetting.clientSecret.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CLIENT SECRET -->\n\n <!-- START SECURITY TOKEN -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.securityToken.$invalid}">\n <label class="control-label">{{\'APPLICATION_SECURITY_TOKEN\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="securityToken" placeholder="{{\'APPLICATION_SECURITY_TOKEN\' | translate}}" class="form-control" data-ng-model="item.securityToken" required/>\n <span data-ng-show="forms.formSetting.securityToken.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END SECURITY TOKEN -->\n\n <!-- START SERVER URL -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.serverUrl.$invalid}">\n <label class="control-label">{{\'APPLICATION_MOTION_ADDRESS\' | translate}}</label>\n <input type="url" name="serverUrl" placeholder="{{\'APPLICATION_MOTION_ADDRESS\' | translate}}" class="form-control" data-ng-model="item.serverUrl"/>\n <span class="help-block">\n {{\'DESCRIPTION_SERVER_URL\' | translate}}.\n </span>\n <span class="help-block help-block-info">\n {{\'MESSAGE_MOTION_ADDRESS_FORMAT\' | translate}}\n </span>\n </div>\n <!-- END SERVER URL -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" data-ng-click="next()"/>\n\n </form>\n </wz-step>\n\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n <input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n </wz-step>\n\n </wizard>\n\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/setting/customization/view/general/general.html",'<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_GENERAL_CUSTOMIZATION\' | translate}}</span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_LOGO\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_2" data-toggle="tab">{{ \'APPLICATION_FOOTER_WHITE_LABEL\' | translate}}</a>\n </li>\n </ul>\n </div>\n\n <div class="portlet-body">\n <div class="tab-content">\n <!-- CHANGE LOGO TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <div class="col-md-6 col-sm-6" >\n <div class="portlet light bordered" style="min-height:411px;">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-pie-chart font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_MAIN\' | translate }}</span>\n </div>\n <div class="actions">\n </div>\n </div>\n <div class="portlet-body">\n <form action="#" role="form" class="row">\n <!-- START STATUS -->\n <div class="form-group col-md-6 col-sm-6">\n <label class="control-label">{{\'APPLICATION_DEFAULT\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="settings.defaultLogo"\n data-ng-init="settings.defaultLogo = license.custom ? settings.defaultLogo : true"\n type="checkbox"\n name="defaultLogo"\n data-ng-change="update()"\n switch-active="{{ radioSwitch.isActive }}"\n switch-on-text="{{\'APPLICATION_YES\' | translate}}"\n switch-off-text="{{\'APPLICATION_NO\' | translate}}"\n switch-on-color="{{ radioSwitch.onColor }}"\n switch-off-color="{{ radioSwitch.offColor }}"\n switch-animate="{{ radioSwitch.animate }}"\n switch-size="{{ radioSwitch.size }}"\n switch-label="{{ radioSwitch.label }}"\n switch-icon="{{ radioSwitch.icon }}"\n switch-radio-off="{{ radioSwitch.radioOff }}"\n switch-label-width="{{ radioSwitch.labelWidth }}"\n switch-handle-width="{{ radioSwitch.handleWidth }}">\n </div>\n <!-- END STATUS -->\n <div class="form-group col-md-6 col-sm-6" data-ng-if="!settings.defaultLogo && license.custom">\n <div class="fileinput fileinput-new" data-provides="fileinput">\n <div class="fileinput-new thumbnail">\n <img ng-src="assets/images/media/noProfileImage.png" alt=""/>\n </div>\n <div class="fileinput-preview fileinput-exists thumbnail">\n </div>\n <div>\n <span class="btn default btn-file" data-ng-show="!uploader.queue[0]">\n <span> {{ \'APPLICATION_SELECT_IMAGE\' | translate }} </span>\n <input type="file" nv-file-select="" uploader="uploader"/><br/>\n </span>\n <button type="button" class="btn default" data-ng-show="uploader.queue[0]" data-dismiss="fileinput" ng-click="uploader.queue[0].remove()">\n {{ \'APPLICATION_REMOVE\' | translate }}\n </button>\n <button type="button" class="btn green-haze" data-ng-show="uploader.queue[0]" data-ng-click="uploader.queue[0].upload()" ng-disabled="uploader.queue[0].isReady || uploader.queue[0].isUploading || uploader.queue[0].isSuccess">\n {{ \'APPLICATION_CONFIRM\' | translate }}\n </button>\n </div>\n <p>\n </br> {{ \'MESSAGE_SUPPORTED_FORMATS\' | translate }} <b>jpg, png, jpeg</b>.\n </p>\n </div>\n </div>\n </form>\n <div data-ng-show="uploader2.isHTML5" >\n <div data-ng-repeat="item in uploader.queue" nowrap style="border-top-style:none">\n <strong>{{ item.file.name }}</strong> {{ item.file.size/1024/1024|number:2 }} MB\n <button type="button" class="btn btn-danger btn-xs" data-ng-click="item.remove()">\n <span class="glyphicon glyphicon-trash"></span> Remove\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class="col-md-6 col-sm-6">\n <div class="portlet light bordered" style="min-height:411px;">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-pie-chart font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_LOGIN\' | translate }}</span>\n </div>\n <div class="actions">\n </div>\n </div>\n <div class="portlet-body">\n <form action="#" role="form" class="row">\n <!-- START STATUS -->\n <div class="form-group col-md-6 col-sm-6">\n <label class="control-label">{{\'APPLICATION_DEFAULT\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="settings.defaultLoginLogo"\n data-ng-init="settings.defaultLoginLogo = license.custom ? settings.defaultLoginLogo : true"\n type="checkbox"\n name="defaultLoginLogo"\n data-ng-change="update()"\n switch-active="{{ radioSwitch.isActive }}"\n switch-on-text="{{\'APPLICATION_YES\' | translate}}"\n switch-off-text="{{\'APPLICATION_NO\' | translate}}"\n switch-on-color="{{ radioSwitch.onColor }}"\n switch-off-color="{{ radioSwitch.offColor }}"\n switch-animate="{{ radioSwitch.animate }}"\n switch-size="{{ radioSwitch.size }}"\n switch-label="{{ radioSwitch.label }}"\n switch-icon="{{ radioSwitch.icon }}"\n switch-radio-off="{{ radioSwitch.radioOff }}"\n switch-label-width="{{ radioSwitch.labelWidth }}"\n switch-handle-width="{{ radioSwitch.handleWidth }}">\n </div>\n <!-- END STATUS -->\n <div class="form-group col-md-6 col-sm-6" data-ng-if="!settings.defaultLoginLogo && license.custom">\n <div class="fileinput fileinput-new" data-provides="fileinput">\n <div class="fileinput-new thumbnail">\n <img ng-src="assets/images/media/noProfileImage.png" alt=""/>\n </div>\n <div class="fileinput-preview fileinput-exists thumbnail">\n </div>\n <div>\n <span class="btn default btn-file" data-ng-show="!uploader2.queue[0]">\n <span> {{ \'APPLICATION_SELECT_IMAGE\' | translate }} </span>\n <input type="file" nv-file-select="" uploader="uploader2"/><br/>\n </span>\n <button type="button" class="btn default" data-ng-show="uploader2.queue[0]" data-dismiss="fileinput" ng-click="uploader2.queue[0].remove()">\n {{ \'APPLICATION_REMOVE\' | translate }}\n </button>\n <button type="button" class="btn green-haze" data-ng-show="uploader2.queue[0]" data-ng-click="uploader2.queue[0].upload()" ng-disabled="uploader2.queue[0].isReady || uploader2.queue[0].isUploading || uploader2.queue[0].isSuccess">\n {{ \'APPLICATION_CONFIRM\' | translate }}\n </button>\n </div>\n <p>\n </br> {{ \'MESSAGE_SUPPORTED_FORMATS\' | translate }} <b>jpg, png, jpeg</b>.\n </p>\n </div>\n </div>\n </form>\n <div data-ng-show="uploader2.isHTML5" >\n <div data-ng-repeat="item in uploader.queue" nowrap style="border-top-style:none">\n <strong>{{ item.file.name }}</strong> {{ item.file.size/1024/1024|number:2 }} MB\n <button type="button" class="btn btn-danger btn-xs" data-ng-click="item.remove()">\n <span class="glyphicon glyphicon-trash"></span> Remove\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <!-- END CHANGE LOGO TAB -->\n <!-- CHANGE FOOTER WHITE LABEL TAB -->\n <div class="tab-pane" id="tab_1_2">\n <form name="forms.footerWhiteLabel" data-ng-submit="forms.footerWhiteLabel.$valid && update()" novalidate>\n <!-- START DEFAULT -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DEFAULT\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="settings.defaultFooterWhiteLabel"\n type="checkbox"\n name="defaultFooterWhiteLabel"\n data-ng-change="update()"\n data-ng-init="settings.defaultFooterWhiteLabel = license.custom ? settings.defaultFooterWhiteLabel : true"\n switch-active="{{ radioSwitch.isActive }}"\n switch-on-text="{{\'APPLICATION_YES\' | translate}}"\n switch-off-text="{{\'APPLICATION_NO\' | translate}}"\n switch-on-color="{{ radioSwitch.onColor }}"\n switch-off-color="{{ radioSwitch.offColor }}"\n switch-animate="{{ radioSwitch.animate }}"\n switch-size="{{ radioSwitch.size }}"\n switch-label="{{ radioSwitch.label }}"\n switch-icon="{{ radioSwitch.icon }}"\n switch-radio-off="{{ radioSwitch.radioOff }}"\n switch-label-width="{{ radioSwitch.labelWidth }}"\n switch-handle-width="{{ radioSwitch.handleWidth }}">\n </div>\n <!-- END DEFAULT -->\n <!-- START LABEL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.footerWhiteLabel.footerWhiteLabel.$touched || forms.footerWhiteLabel.$submitted) && forms.footerWhiteLabel.footerWhiteLabel.$invalid}">\n <label class="control-label">{{\'APPLICATION_FOOTER_WHITE_LABEL\' | translate}}<span data-ng-if="!settings.defaultFooterWhiteLabel" class="required" aria-required="true">*</span></label>\n <textarea name="footer" placeholder="{{\'APPLICATION_FOOTER_WHITE_LABEL\' | translate}}" class="form-control" data-ng-model="settings.footerWhiteLabel" data-ng-disabled="settings.defaultFooterWhiteLabel || !license.custom" data-ng-required="!settings.defaultFooterWhiteLabel && license.custom"/></textarea>\n <span data-ng-show="(forms.footerWhiteLabel.footerWhiteLabel.$touched || forms.footerWhiteLabel.$submitted) && forms.footerWhiteLabel.footerWhiteLabel.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END LABEL -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}" data-ng-disabled="!license.custom"/>\n </form>\n </div>\n <!-- END CHANGE FOOTER WHITE LABEL TAB -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/setting/customization/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-settings"></i>\n <a href="#">{{ \'APPLICATION_SETTINGS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-globe"></i>\n <a href="#">{{ \'APPLICATION_CUSTOMIZATION\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img src="assets/images/media/customize.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{ \'APPLICATION_CUSTOMIZATION\' | translate }}\n </div>\n </div>\n <!-- END SIDEBAR USER TITLE -->\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.setting.customization.view.general\')}">\n <a ng-href="/setting/customization/view/general">\n <i class="icon-picture"></i>\n {{ \'APPLICATION_GENERAL\' | translate }} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/setting/general/view/main/main.html",'<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_GENERAL_SETTINGS\' | translate}}</span>\n </div>\n </div>\n <div class="portlet-body">\n <form name="forms.main" data-ng-submit="forms.main.$valid && update()" novalidate>\n <!-- START MIN INTERNAL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.main.min_internal.$touched || forms.main.$submitted) && forms.main.min_internal.$invalid}">\n <label class="control-label">{{\'APPLICATION_MIN_INTERNAL\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" min="1" name="min_internal" placeholder="{{\'APPLICATION_MIN_INTERNAL\' | translate}}" class="form-control" data-ng-model="settings.min_internal" required/>\n <span data-ng-show="(forms.main.min_internal.$touched || forms.main.$submitted) && forms.main.min_internal.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END MIN INTERNAL -->\n\n <!-- START MIN MAILBOX -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.main.min_mailbox.$touched || forms.main.$submitted) && forms.main.min_mailbox.$invalid}">\n <label class="control-label">{{\'APPLICATION_MIN_MAILBOX\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" min="1" name="min_mailbox" placeholder="{{\'APPLICATION_MIN_MAILBOX\' | translate}}" class="form-control" data-ng-model="settings.min_mailbox" required/>\n <span data-ng-show="(forms.main.min_mailbox.$touched || forms.main.$submitted) && forms.main.min_mailbox.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END MIN MAILBOX -->\n\n <!-- START AGI PORT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.main.agi_port.$touched || forms.main.$submitted) && forms.main.agi_port.$invalid}">\n <label class="control-label">{{\'APPLICATION_AGI_PORT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" min="1" name="agi_port" placeholder="{{\'APPLICATION_AGI_PORT\' | translate}}" class="form-control" data-ng-model="settings.agi_port" required/>\n <span data-ng-show="(forms.main.agi_port.$touched || forms.main.$submitted) && forms.main.agi_port.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END AGI PORT -->\n\n <!-- START SSL -->\n <div class="form-group">\n <label class="control-label">\n {{\'APPLICATION_SECURE_PASSWORD\' | translate}}\n </label><br>\n <input\n bs-switch\n data-ng-model="settings.securePassword"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_ENABLED\' | translate }}"\n switch-off-text="{{ \'APPLICATION_DISABLED\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n </div>\n <!-- END SSL -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/setting/general/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-settings"></i>\n <a href="#">{{ \'APPLICATION_SETTINGS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-globe"></i>\n <a href="#">{{ \'APPLICATION_GENERAL\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img src="assets/images/media/customize.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{ \'APPLICATION_GENERAL\' | translate }}\n </div>\n </div>\n <!-- END SIDEBAR USER TITLE -->\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.setting.general.view.main\')}">\n <a ng-href="/setting/general/view/main">\n <i class="icon-picture"></i>\n {{ \'APPLICATION_MAIN\' | translate }} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/setting/license/view/update.modal.html",'<div class="modal-header" data-ng-init="getLicense()">\n <h3 class="modal-title">{{ \'APPLICATION_UPDATE_LICENSE\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <!-- START LICENSE -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_LICENSE\' | translate}}</label>\n <textarea type="text" style="min-height:95px;" name="description" placeholder="{{\'APPLICATION_LICENSE\' | translate}}" class="form-control" data-ng-model="item.license"></textarea>\n </div>\n <!-- END LICENSE -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="update()" ng-disabled="form.$invalid">{{ \'APPLICATION_UPDATE\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/setting/license/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-settings"></i>\n <a href="#">{{ \'APPLICATION_SETTINGS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-info"></i>\n <a href="#">{{ \'APPLICATION_LICENSE\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE CONTENT -->\n <div class="profile-content">\n <div class="row" data-ng-if="(license.token !== license.token2) && license.expirationTime > -1">\n <div class="col-md-12">\n <div class="note note-warning">\n <h4 class="block"><strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_YOUR_LICENSE_WILL_EXPIRE\' | translate}} <strong>{{license.expirationTime}}</strong> {{\'MESSAGE_DAYS\' | translate}}.</h4>\n <p>\n {{\'MESSAGE_SEND_EMAIL_TO\' | translate}} <a href="mailto:license@xcally.com?subject=New%20token%20detected&body=Hi xCALLY, my new token is: {{license.token2}}. Old token: {{license.token}}">license@xcally.com</a>.\n </p>\n <p>\n {{\'APPLICATION_NEW\' | translate | uppercase}} Token: <strong>{{license.token2}}</strong>\n </p>\n </div>\n </div>\n </div>\n <div class="row">\n <div class="col-md-6">\n <div class="pricing hover-effect">\n <div class="pricing-head" data-ng-switch="license.months">\n <h3 ng-switch-when="1">{{\'APPLICATION_MONTH_TO_MONTH\' | translate}}<span>{{license.token || \'unknown\'}} </span></h3>\n <h3 ng-switch-when="12">{{\'APPLICATION_YEARLY\' | translate}}<span>{{license.token || \'unknown\'}} </span></h3>\n <h3 ng-switch-when="36">{{\'APPLICATION_PERPETUAL\' | translate}}<span>{{license.token || \'unknown\'}} </span></h3>\n <h3 ng-switch-default>{{\'APPLICATION_UNKNOWN\' | translate}}<span>{{license.token || \'unknown\'}} </span></h3>\n <h4><i>{{license.expiration ? (license.expiration | date:\'medium\') : \'DEMO\'}}</i>\n <span data-ng-show="license.expiration">Expiration Date </span>\n </h4>\n </div>\n <ul class="pricing-content list-unstyled">\n <li class="row">\n <div class="col-md-9">\n <i class="icon-eye"></i> {{\'APPLICATION_USERS\' | translate}}:\n </div>\n <div class="col-md-3 text-center">\n {{(license.users || license.users >= 0) ? license.users : \'unknown\'}}\n </div>\n </li>\n <li class="row">\n <div class="col-md-9">\n <i class="icon-people"></i> {{\'APPLICATION_AGENTS\' | translate}} ({{\'APPLICATION_CONCURRENTS\' | translate}}):\n </div>\n <div class="col-md-3 text-center">\n {{(license.agents || license.agents >= 0) ? license.agents : \'unknown\'}}\n </div>\n </li>\n <li class="row">\n <div class="col-md-9">\n <i class="icon-phone"></i> {{\'APPLICATION_TELEPHONES\' | translate}}:\n </div>\n <div class="col-md-3 text-center">\n {{(license.telephones || license.telephones >= 0) ? license.telephones : \'unknown\'}}\n </div>\n </li>\n <li class="row">\n <div class="col-md-9">\n <i class="icon-bubble"></i> {{\'APPLICATION_CHAT\' | translate}}:\n </div>\n <div class="col-md-3 text-center">\n <span class="label label-sm" data-ng-class="license.chat ? \'label-success\' : \'label-danger\'">{{license.chat ? \'APPLICATION_ENABLED\' : \'APPLICATION_DISABLED\' | translate}}</span>\n </div>\n </li>\n <li class="row">\n <div class="col-md-9">\n <i class="icon-envelope"></i> {{\'APPLICATION_MAIL\' | translate}}:\n </div>\n <div class="col-md-3 text-center">\n <span class="label label-sm" data-ng-class="license.mail ? \'label-success\' : \'label-danger\'">{{license.mail ? \'APPLICATION_ENABLED\' : \'APPLICATION_DISABLED\' | translate}}</span>\n </div>\n </li>\n <li class="row">\n <div class="col-md-9">\n <i class="fa fa-fax"></i> {{\'APPLICATION_FAX\' | translate}}:\n </div>\n <div class="col-md-3 text-center">\n <span class="label label-sm" data-ng-class="license.fax ? \'label-success\' : \'label-danger\'">{{license.fax ? \'APPLICATION_ENABLED\' : \'APPLICATION_DISABLED\' | translate}}</span>\n </div>\n </li>\n <li class="row">\n <div class="col-md-9">\n <i class="glyphicon glyphicon-comment"></i> {{\'APPLICATION_SMS\' | translate}}:\n </div>\n <div class="col-md-3 text-center">\n <span class="label label-sm" data-ng-class="license.messaging ? \'label-success\' : \'label-danger\'">{{license.messaging ? \'APPLICATION_ENABLED\' : \'APPLICATION_DISABLED\' | translate}}</span>\n </div>\n </li>\n <li class="row">\n <div class="col-md-9">\n <i class="icon-globe"></i> {{\'APPLICATION_OPEN_CHANNEL\' | translate}}:\n </div>\n <div class="col-md-3 text-center">\n <span class="label label-sm" data-ng-class="license.openchannel ? \'label-success\' : \'label-danger\'">{{license.openchannel ? \'APPLICATION_ENABLED\' : \'APPLICATION_DISABLED\' | translate}}</span>\n </div>\n </li>\n <li class="row">\n <div class="col-md-9">\n <i class="icon-notebook"></i> {{\'APPLICATION_CONTACT_MANAGER\' | translate}}:\n </div>\n <div class="col-md-3 text-center">\n <span class="label label-sm" data-ng-class="license.cm ? \'label-success\' : \'label-danger\'">{{license.cm ? \'APPLICATION_ENABLED\' : \'APPLICATION_DISABLED\' | translate}}</span>\n </div>\n </li>\n <li class="row">\n <div class="col-md-9">\n <i class="icon-control-forward"></i> {{\'APPLICATION_MOTION_DIALER\' | translate}}:\n </div>\n <div class="col-md-3 text-center">\n <span class="label label-sm" data-ng-class="license.dialer ? \'label-success\' : \'label-danger\'">{{license.dialer ? \'APPLICATION_ENABLED\' : \'APPLICATION_DISABLED\' | translate}}</span>\n </div>\n </li>\n <li class="row">\n <div class="col-md-9">\n <i class="fa fa-edit"></i> {{\'APPLICATION_JSCRIPTY\' | translate}}:\n </div>\n <div class="col-md-3 text-center">\n <span class="label label-sm" data-ng-class="license.jscripty ? \'label-success\' : \'label-danger\'">{{license.jscripty ? \'APPLICATION_ENABLED\' : \'APPLICATION_DISABLED\' | translate}}</span>\n </div>\n </li>\n <li class="row">\n <div class="col-md-9">\n <i class="icon-equalizer"></i> {{\'APPLICATION_CUSTOMIZATION\' | translate}}:\n </div>\n <div class="col-md-3 text-center">\n <span class="label label-sm" data-ng-class="license.custom ? \'label-success\' : \'label-danger\'">{{license.custom ? \'APPLICATION_ENABLED\' : \'APPLICATION_DISABLED\' | translate}}</span>\n </div>\n </li>\n <li class="row">\n <div class="col-md-9">\n <i class="icon-cloud-download"></i> {{\'APPLICATION_UPDATE\' | translate}}:\n </div>\n <div class="col-md-3 text-center">\n <span class="label label-sm" data-ng-class="license.update ? \'label-success\' : \'label-danger\'">{{license.update ? \'APPLICATION_ENABLED\' : \'APPLICATION_DISABLED\' | translate}}</span>\n </div>\n </li>\n </ul>\n <div class="pricing-footer">\n <p>\n {{license.description}}\n </p>\n <a href="https://www.xcallymotion.com/prices" target="_blank" class="btn yellow-crusta">\n {{\'APPLICATION_PRICES\' | translate}} <i class="m-icon-swapright m-icon-white"></i>\n </a>\n <a href="#" class="btn purple-plum" data-ng-click="updateLicense()">\n {{\'APPLICATION_UPDATE\' | translate}} <i class="icon-refresh m-icon-white"></i>\n </a>\n </div>\n </div>\n </div>\n <div class="col-md-6">\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-info font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_LICENSE_REQUEST\' | translate }}</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <form name="form" novalidate data-ng-submit="submitRequest()">\n\n <!-- START USERS -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.users.$touched || form.$submitted) && form.users.$invalid}">\n <label class="control-label">{{\'APPLICATION_USERS\' | translate}}</label>\n <div class="input-icon">\n <i class="icon-eye"></i>\n <input type="number" name="users" placeholder="{{\'APPLICATION_USERS\' | translate}}" class="form-control" data-ng-model="item.users" min="0" required>\n </div>\n <span data-ng-show="(form.users.$touched || forms.$submitted) && form.users.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END USERS -->\n\n <!-- START AGENTS -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.agents.$touched || form.$submitted) && form.agents.$invalid}">\n <label class="control-label">{{\'APPLICATION_AGENTS\' | translate}} ({{\'APPLICATION_CONCURRENTS\' | translate}})</label>\n <div class="input-icon">\n <i class="icon-people"></i>\n <input type="number" name="agents" placeholder="{{\'APPLICATION_AGENTS\' | translate}} ({{\'APPLICATION_CONCURRENTS\' | translate}})" class="form-control" data-ng-model="item.agents" min="0" required>\n </div>\n <span data-ng-show="(form.users.$touched || forms.$submitted) && form.users.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END AGENTS -->\n\n <!-- START TELEPHONES -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.telephones.$touched || form.$submitted) && form.telephones.$invalid}">\n <label class="control-label">{{\'APPLICATION_TELEPHONES\' | translate}}</label>\n <div class="input-icon">\n <i class="icon-phone"></i>\n <input type="number" name="telephones" placeholder="{{\'APPLICATION_TELEPHONES\' | translate}}" class="form-control" data-ng-model="item.telephones" min="0" required>\n </div>\n <span data-ng-show="(form.telephones.$touched || forms.$submitted) && form.telephones.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TELEPHONES -->\n <div class="row">\n <div class="form-group col-md-4 col-xs-6">\n <label class="control-label">{{\'APPLICATION_CHAT\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="item.chat"\n type="checkbox"\n name="chat"\n switch-active="{{ radioSwitch.isActive }}"\n switch-on-text="{{\'APPLICATION_YES\' | translate}}"\n switch-off-text="{{\'APPLICATION_NO\' | translate}}"\n switch-on-color="{{ radioSwitch.onColor }}"\n switch-off-color="{{ radioSwitch.offColor }}"\n switch-animate="{{ radioSwitch.animate }}"\n switch-size="{{ radioSwitch.size }}"\n switch-label="{{ radioSwitch.label }}"\n switch-icon="{{ radioSwitch.icon }}"\n switch-radio-off="{{ radioSwitch.radioOff }}"\n switch-label-width="{{ radioSwitch.labelWidth }}"\n switch-handle-width="{{ radioSwitch.handleWidth }}">\n </div>\n <div class="form-group col-md-4 col-xs-6">\n <label class="control-label">{{\'APPLICATION_MAIL\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="item.mail"\n type="checkbox"\n name="mail"\n switch-active="{{ radioSwitch.isActive }}"\n switch-on-text="{{\'APPLICATION_YES\' | translate}}"\n switch-off-text="{{\'APPLICATION_NO\' | translate}}"\n switch-on-color="{{ radioSwitch.onColor }}"\n switch-off-color="{{ radioSwitch.offColor }}"\n switch-animate="{{ radioSwitch.animate }}"\n switch-size="{{ radioSwitch.size }}"\n switch-label="{{ radioSwitch.label }}"\n switch-icon="{{ radioSwitch.icon }}"\n switch-radio-off="{{ radioSwitch.radioOff }}"\n switch-label-width="{{ radioSwitch.labelWidth }}"\n switch-handle-width="{{ radioSwitch.handleWidth }}">\n </div>\n <div class="form-group col-md-4 col-xs-6">\n <label class="control-label">{{\'APPLICATION_FAX\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="item.fax"\n type="checkbox"\n name="fax"\n switch-active="{{ radioSwitch.isActive }}"\n switch-on-text="{{\'APPLICATION_YES\' | translate}}"\n switch-off-text="{{\'APPLICATION_NO\' | translate}}"\n switch-on-color="{{ radioSwitch.onColor }}"\n switch-off-color="{{ radioSwitch.offColor }}"\n switch-animate="{{ radioSwitch.animate }}"\n switch-size="{{ radioSwitch.size }}"\n switch-label="{{ radioSwitch.label }}"\n switch-icon="{{ radioSwitch.icon }}"\n switch-radio-off="{{ radioSwitch.radioOff }}"\n switch-label-width="{{ radioSwitch.labelWidth }}"\n switch-handle-width="{{ radioSwitch.handleWidth }}">\n </div>\n <div class="form-group col-md-4 col-xs-6">\n <label class="control-label">{{\'APPLICATION_SMS\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="item.messaging"\n type="checkbox"\n name="messaging"\n switch-active="{{ radioSwitch.isActive }}"\n switch-on-text="{{\'APPLICATION_YES\' | translate}}"\n switch-off-text="{{\'APPLICATION_NO\' | translate}}"\n switch-on-color="{{ radioSwitch.onColor }}"\n switch-off-color="{{ radioSwitch.offColor }}"\n switch-animate="{{ radioSwitch.animate }}"\n switch-size="{{ radioSwitch.size }}"\n switch-label="{{ radioSwitch.label }}"\n switch-icon="{{ radioSwitch.icon }}"\n switch-radio-off="{{ radioSwitch.radioOff }}"\n switch-label-width="{{ radioSwitch.labelWidth }}"\n switch-handle-width="{{ radioSwitch.handleWidth }}">\n </div>\n <div class="form-group col-md-4 col-xs-6">\n <label class="control-label">{{\'APPLICATION_OPEN_CHANNEL\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="item.openchannel"\n type="checkbox"\n name="openchannel"\n switch-active="{{ radioSwitch.isActive }}"\n switch-on-text="{{\'APPLICATION_YES\' | translate}}"\n switch-off-text="{{\'APPLICATION_NO\' | translate}}"\n switch-on-color="{{ radioSwitch.onColor }}"\n switch-off-color="{{ radioSwitch.offColor }}"\n switch-animate="{{ radioSwitch.animate }}"\n switch-size="{{ radioSwitch.size }}"\n switch-label="{{ radioSwitch.label }}"\n switch-icon="{{ radioSwitch.icon }}"\n switch-radio-off="{{ radioSwitch.radioOff }}"\n switch-label-width="{{ radioSwitch.labelWidth }}"\n switch-handle-width="{{ radioSwitch.handleWidth }}">\n </div>\n <div class="form-group col-md-4 col-xs-6">\n <label class="control-label">{{\'APPLICATION_CONTACT_MANAGER\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="item.cm"\n type="checkbox"\n name="cm"\n switch-active="{{ radioSwitch.isActive }}"\n switch-on-text="{{\'APPLICATION_YES\' | translate}}"\n switch-off-text="{{\'APPLICATION_NO\' | translate}}"\n switch-on-color="{{ radioSwitch.onColor }}"\n switch-off-color="{{ radioSwitch.offColor }}"\n switch-animate="{{ radioSwitch.animate }}"\n switch-size="{{ radioSwitch.size }}"\n switch-label="{{ radioSwitch.label }}"\n switch-icon="{{ radioSwitch.icon }}"\n switch-radio-off="{{ radioSwitch.radioOff }}"\n switch-label-width="{{ radioSwitch.labelWidth }}"\n switch-handle-width="{{ radioSwitch.handleWidth }}">\n </div>\n <div class="form-group col-md-4 col-xs-6">\n <label class="control-label">{{\'APPLICATION_MOTION_DIALER\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="item.dialer"\n type="checkbox"\n name="dialer"\n switch-active="{{ radioSwitch.isActive }}"\n switch-on-text="{{\'APPLICATION_YES\' | translate}}"\n switch-off-text="{{\'APPLICATION_NO\' | translate}}"\n switch-on-color="{{ radioSwitch.onColor }}"\n switch-off-color="{{ radioSwitch.offColor }}"\n switch-animate="{{ radioSwitch.animate }}"\n switch-size="{{ radioSwitch.size }}"\n switch-label="{{ radioSwitch.label }}"\n switch-icon="{{ radioSwitch.icon }}"\n switch-radio-off="{{ radioSwitch.radioOff }}"\n switch-label-width="{{ radioSwitch.labelWidth }}"\n switch-handle-width="{{ radioSwitch.handleWidth }}">\n </div>\n <div class="form-group col-md-4 col-xs-6">\n <label class="control-label">{{\'APPLICATION_JSCRIPTY\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="item.jscripty"\n type="checkbox"\n name="jscripty"\n switch-active="{{ radioSwitch.isActive }}"\n switch-on-text="{{\'APPLICATION_YES\' | translate}}"\n switch-off-text="{{\'APPLICATION_NO\' | translate}}"\n switch-on-color="{{ radioSwitch.onColor }}"\n switch-off-color="{{ radioSwitch.offColor }}"\n switch-animate="{{ radioSwitch.animate }}"\n switch-size="{{ radioSwitch.size }}"\n switch-label="{{ radioSwitch.label }}"\n switch-icon="{{ radioSwitch.icon }}"\n switch-radio-off="{{ radioSwitch.radioOff }}"\n switch-label-width="{{ radioSwitch.labelWidth }}"\n switch-handle-width="{{ radioSwitch.handleWidth }}">\n </div>\n <div class="form-group col-md-4 col-xs-6">\n <label class="control-label">{{\'APPLICATION_CUSTOMIZATION\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="item.custom"\n type="checkbox"\n name="custom"\n switch-active="{{ radioSwitch.isActive }}"\n switch-on-text="{{\'APPLICATION_YES\' | translate}}"\n switch-off-text="{{\'APPLICATION_NO\' | translate}}"\n switch-on-color="{{ radioSwitch.onColor }}"\n switch-off-color="{{ radioSwitch.offColor }}"\n switch-animate="{{ radioSwitch.animate }}"\n switch-size="{{ radioSwitch.size }}"\n switch-label="{{ radioSwitch.label }}"\n switch-icon="{{ radioSwitch.icon }}"\n switch-radio-off="{{ radioSwitch.radioOff }}"\n switch-label-width="{{ radioSwitch.labelWidth }}"\n switch-handle-width="{{ radioSwitch.handleWidth }}">\n </div>\n <div class="form-group col-md-4 col-xs-6">\n <label class="control-label">{{\'APPLICATION_UPDATE\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="item.update"\n type="checkbox"\n name="update"\n switch-active="{{ radioSwitch.isActive }}"\n switch-on-text="{{\'APPLICATION_YES\' | translate}}"\n switch-off-text="{{\'APPLICATION_NO\' | translate}}"\n switch-on-color="{{ radioSwitch.onColor }}"\n switch-off-color="{{ radioSwitch.offColor }}"\n switch-animate="{{ radioSwitch.animate }}"\n switch-size="{{ radioSwitch.size }}"\n switch-label="{{ radioSwitch.label }}"\n switch-icon="{{ radioSwitch.icon }}"\n switch-radio-off="{{ radioSwitch.radioOff }}"\n switch-label-width="{{ radioSwitch.labelWidth }}"\n switch-handle-width="{{ radioSwitch.handleWidth }}">\n </div>\n </div>\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_SUBMIT\' | translate}} {{\'APPLICATION_REQUEST\' | translate}}"/>\n </form>\n </div>\n </div>\n </div>\n </div>\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'), +a.put("app/setting/network/view/externip/externip.create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{title}}</h3>\n</div>\n<div class="modal-body" data-ng-init="initModal()">\n <form name="form" novalidate>\n\n <!-- START ADDRESS -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.address.$touched || form.$submitted) && form.address.$invalid}">\n <label class="control-label">{{\'APPLICATION_ADDRESS\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="address" placeholder="{{\'APPLICATION_ADDRESS\' | translate}}" class="form-control" data-ng-model="item.value" required data-ng-pattern="/^(25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})(.(25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})){3}$/"/>\n <span data-ng-show="(form.address.$touched || form.$submitted) && form.address.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(form.address.$touched || form.$submitted) && form.address.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n </span>\n </div>\n <!-- END ADDRESS -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/setting/network/view/externip/externip.html",'<!-- BEGIN PAGE CONTENT-->\r\n<div class="row">\r\n <div class="col-md-12">\r\n <!-- BEGIN Portlet PORTLET-->\r\n <div class="portlet light bordered" data-ng-init="initView()">\r\n <div class="portlet-title">\r\n <div class="caption font-green-sharp">\r\n <i class="icon-globe font-green-sharp"></i>\r\n <span class="caption-subject">{{ \'APPLICATION_EXTERNIP\' | translate }}</a> </span>\r\n </div>\r\n <div class="actions">\r\n <div class="btn-group" data-ng-show="id.length">\r\n <a class="btn red" href="#" data-ng-click="deleteItems()">\r\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\r\n </a>\r\n </div>\r\n <div class="btn-group">\r\n <a class="btn green-jungle" href="#" data-toggle="dropdown" data-ng-click="createItem()">\r\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_EXTERNIP\' | translate }}\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n <div class="portlet-body">\r\n <!-- START TABLE -->\r\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\r\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\r\n </div>\r\n <!-- END TABLE -->\r\n </div>\r\n </div>\r\n <!-- END Portlet PORTLET-->\r\n </div>\r\n</div>\r\n<!-- END PAGE CONTENT-->\r\n'),a.put("app/setting/network/view/localnet/localnet.create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{title}}</h3>\n</div>\n<div class="modal-body" data-ng-init="initModal()">\n <form name="form" novalidate>\n\n <!-- START ADDRESS -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.address.$touched || form.$submitted) && form.address.$invalid}">\n <label class="control-label">{{\'APPLICATION_ADDRESS\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="address" placeholder="{{\'APPLICATION_ADDRESS\' | translate}}" class="form-control" data-ng-model="item.address" required data-ng-pattern="/^(25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})(.(25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})){3}$/"/>\n <span data-ng-show="(form.address.$touched || form.$submitted) && form.address.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(form.address.$touched || form.$submitted) && form.address.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n </span>\n </div>\n <!-- END ADDRESS -->\n\n <!-- START MASK -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.mask.$touched || form.$submitted) && form.mask.$invalid}">\n <label class="control-label">{{\'APPLICATION_MASK\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="mask" placeholder="{{\'APPLICATION_MASK\' | translate}}" class="form-control" data-ng-model="item.mask" required data-ng-pattern="/^(25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})(.(25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})){3}$/"/>\n <span data-ng-show="(form.mask.$touched || form.$submitted) && form.mask.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(form.mask.$touched || form.$submitted) && form.mask.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n </span>\n </div>\n <!-- END MASK -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/setting/network/view/localnet/localnet.html",'<!-- BEGIN PAGE CONTENT-->\r\n<div class="row">\r\n <div class="col-md-12">\r\n <!-- BEGIN Portlet PORTLET-->\r\n <div class="portlet light bordered" data-ng-init="initView()">\r\n <div class="portlet-title">\r\n <div class="caption font-green-sharp">\r\n <i class="icon-desktop font-green-sharp"></i>\r\n <span class="caption-subject">{{ \'APPLICATION_LOCALNET\' | translate }}</a> </span>\r\n </div>\r\n <div class="actions">\r\n <div class="btn-group" data-ng-show="id.length">\r\n <a class="btn red" href="#" data-ng-click="deleteItems()">\r\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\r\n </a>\r\n </div>\r\n <div class="btn-group">\r\n <a class="btn green-jungle" href="#" data-toggle="dropdown" data-ng-click="createItem()">\r\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_LOCALNET\' | translate }}\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n <div class="portlet-body">\r\n <!-- START TABLE -->\r\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\r\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\r\n </div>\r\n <!-- END TABLE -->\r\n </div>\r\n </div>\r\n <!-- END Portlet PORTLET-->\r\n </div>\r\n</div>\r\n<!-- END PAGE CONTENT-->\r\n'),a.put("app/setting/network/view/view.html",'<!-- BEGIN PAGE CONTENT-->\r\n<div class="row">\r\n <div class="col-md-12">\r\n <div class="page-bar">\r\n <ul class="page-breadcrumb">\r\n <li>\r\n <i class="icon-rocket"></i>\r\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\r\n <i class="fa fa-angle-right"></i>\r\n </li>\r\n <li>\r\n <i class="icon-settings"></i>\r\n <a href="#">{{ \'APPLICATION_SETTINGS\' | translate }}</a>\r\n <i class="fa fa-angle-right"></i>\r\n </li>\r\n <li>\r\n <i class="icon-globe"></i>\r\n <a href="#">{{ \'APPLICATION_NETWORK\' | translate }}</a>\r\n </li>\r\n </ul>\r\n </div>\r\n\r\n <!-- BEGIN PROFILE SIDEBAR -->\r\n <div class="profile-sidebar">\r\n <!-- PORTLET MAIN -->\r\n <div class="portlet light profile-sidebar-portlet">\r\n <!-- SIDEBAR USERPIC -->\r\n <div class="profile-image">\r\n <img src="assets/images/media/business.png" class="img-responsive">\r\n </div>\r\n <!-- END SIDEBAR USERPIC -->\r\n <!-- SIDEBAR USER TITLE -->\r\n <div class="profile-usertitle">\r\n <div class="profile-usertitle-name">\r\n {{ \'APPLICATION_NETWORK\' | translate }}\r\n </div>\r\n </div>\r\n <!-- END SIDEBAR USER TITLE -->\r\n <!-- SIDEBAR MENU -->\r\n <div class="profile-usermenu">\r\n <ul class="nav">\r\n <li data-ng-class="{active: $state.is(\'main.setting.network.view.localnet\')}">\r\n <a ng-href="/setting/network/view/localnet">\r\n <i class="icon-screen-desktop"></i>\r\n {{ \'APPLICATION_LOCALNET\' | translate }} </a>\r\n </li>\r\n <li data-ng-class="{active: $state.is(\'main.setting.network.view.externip\')}">\r\n <a ng-href="/setting/network/view/externip">\r\n <i class="icon-globe"></i>\r\n {{ \'APPLICATION_EXTERNIP\' | translate }} </a>\r\n </li>\r\n </ul>\r\n </div>\r\n <!-- END MENU -->\r\n </div>\r\n <!-- END PORTLET MAIN -->\r\n </div>\r\n <!-- END BEGIN PROFILE SIDEBAR -->\r\n <!-- BEGIN PROFILE CONTENT -->\r\n <div ui-view class="profile-content">\r\n </div>\r\n <!-- END PROFILE CONTENT -->\r\n\r\n </div>\r\n</div>\r\n<!-- END PAGE CONTENT-->\r\n'),a.put("app/setting/smtp/view/view.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_GENERALS\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_2" data-toggle="tab">SMTP</a>\n </li>\n </ul>\n </div>\n <div class="portlet-body" data-ng-init="initView();initMailAccounts();">\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="mail-spinner-grid" spinner-start-active="false"></span>\n <!-- END UI-GRID SPINNER -->\n\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.info" data-ng-submit="forms.info.$valid && updateItem()" novalidate>\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.account.name" required/>\n <span data-ng-show="(forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid && forms.info.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.account.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n <!-- START SERVICE -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_SERVICE\' | translate}}</label><br>\n <input\n bs-switch\n data-ng-model="item.account.service"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_ENABLED\' | translate }}"\n switch-off-text="{{ \'APPLICATION_DISABLED\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n </div>\n <!-- END SERVICE -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END GENERAL TAB -->\n\n <!-- SMTP TAB -->\n <div class="tab-pane" id="tab_1_2">\n\n <div class="note note-danger" data-ng-show="item.account.MailServerOut.state === \'DISCONNECTED\' || item.account.MailServerOut.state === \'ERROR\'">\n <p> ERROR </p>\n <json-formatter open="1" json="item.account.MailServerOut.source"></json-formatter>\n </div>\n\n <div class="note note-success" data-ng-show="item.account.MailServerOut.state === \'CONNECTED\'">\n <p> CONNECTED </p>\n </div>\n\n <div class="note note-info" data-ng-show="item.account.MailServerOut.state === \'CONNECTING\'">\n <p> TRYING... </p>\n </div>\n\n <form name="forms.formOut" data-ng-submit="forms.formOut.$valid && updateItem()" novalidate>\n\n <!-- START HOST -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formOut.host.$touched || forms.formOut.$submitted) && forms.formOut.host.$invalid}">\n <label class="control-label">{{\'APPLICATION_HOST\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="host" placeholder="{{\'APPLICATION_HOST\' | translate}}" class="form-control" data-ng-model="item.account.MailServerOut.host" required/>\n <span data-ng-show="(forms.formOut.host.$touched || forms.formOut.$submitted) && forms.formOut.host.$invalid && forms.formOut.host.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END HOST -->\n\n <!-- START USERNAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formOut.username.$touched || forms.formOut.$submitted) && forms.formOut.username.$invalid}">\n <label class="control-label">{{\'APPLICATION_USERNAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="username" placeholder="{{\'APPLICATION_USERNAME\' | translate}}" class="form-control" data-ng-model="item.account.MailServerOut.username" required/>\n <span data-ng-show="(forms.formOut.username.$touched || forms.formOut.$submitted) && forms.formOut.username.$invalid && forms.formOut.username.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n\n <!-- START PASSWORD -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formOut.password.$touched || forms.formOut.$submitted) && forms.formOut.password.$invalid}">\n <label class="control-label">{{\'APPLICATION_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="password" name="password" placeholder="{{\'APPLICATION_PASSWORD\' | translate}}" class="form-control" data-ng-model="item.account.MailServerOut.password" required/>\n <span data-ng-show="(forms.formOut.password.$touched || forms.formOut.$submitted) && forms.formOut.password.$invalid && forms.formOut.password.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PASSWORD -->\n\n <!-- START PORT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.formOut.port.$touched || forms.formOut.$submitted) && forms.formOut.port.$invalid}">\n <label class="control-label">{{\'APPLICATION_PORT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" name="port" placeholder="{{\'APPLICATION_PORT\' | translate}}" class="form-control" data-ng-model="item.account.MailServerOut.port" required/>\n <span data-ng-show="(forms.formOut.form.$touched || forms.formOut.$submitted) && forms.formOut.port.$invalid && forms.formOut.port.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.formOut.form.$touched || forms.formOut.$submitted) && forms.formOut.port.$invalid && forms.formOut.port.$error.number" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_NUMERIC_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PORT -->\n\n <!-- START SSL -->\n <div class="form-group">\n <label class="control-label">SSL</label><br>\n <input\n bs-switch\n data-ng-model="item.account.MailServerOut.ssl"\n type="checkbox"\n switch-active="{{ isActive }}"\n switch-on-text="{{ \'APPLICATION_ENABLED\' | translate }}"\n switch-off-text="{{ \'APPLICATION_DISABLED\' | translate }}"\n switch-on-color="{{ onColor }}"\n switch-off-color="{{ offColor }}"\n switch-animate="{{ animate }}"\n switch-size="{{ size }}"\n switch-label="{{ label }}"\n switch-icon="{{ icon }}"\n switch-radio-off="{{ radioOff }}"\n switch-label-width="{{ labelWidth }}"\n switch-handle-width="{{ handleWidth }}">\n </div>\n <!-- END SSL -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n <input class="btn blue-madison" type="button" value="Test" data-ng-click="test()"/>\n </form>\n </div>\n <!-- END SMTP TAB -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/setting/system/view/console/console.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initView()" data-ng-click="cmdFocus()">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_ASTERISK_CONSOLE\' | translate}}\n <button class="btn btn-default" href="#" data-ng-click="output = \'\';cmdFocus();">\n <i class="icon-ban"></i>\n </button></span>\n </div>\n </div>\n <div class="portlet-body">\n <span us-spinner spinner-key="console-spinner" spinner-start-active="true"></span>\n <div class="well" style="height:400px;overflow-y:scroll;" schroll-bottom="output" data-ng-bind-html="output"></div>\n <form name="forms.console" data-ng-submit="forms.console.$valid && sendCmd() && !busy" novalidate>\n <!-- START COMMAND -->\n <div class="form-group">\n <input type="text" name="command" id="command" placeholder="{{\'APPLICATION_INSERT_COMMAND\' | translate}}" class="form-control" data-ng-model="item.command" data-ng-disabled="busy" autocomplete="off" data-ng-keyup="keyUp($event)"/>\n </div>\n <span class="help-block">\n {{ \'DESCRIPTION_ENTER_TO_COMMAND\' | translate }}\n </span>\n <button type="submit" class="hide"></button>\n <!-- END COMMAND -->\n </form>\n </div>\n </div>\n</div>\n'),a.put("app/setting/system/view/general/general.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="row ">\n <div class="col-md-6 col-sm-6">\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-pie-chart font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_MEMORY\' | translate }} (<b>{{ \'APPLICATION_TOTAL\' | translate }}</b>: {{system.memory.Total}} MB)</a> </span>\n </div>\n <div class="actions">\n <a class="btn btn-default" href="#" data-ng-click="initView()">\n <i class="icon-refresh"></i>\n </a>\n </div>\n </div>\n <div class="portlet-body">\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="memory-spinner" spinner-start-active="true"></span>\n <!-- END UI-GRID SPINNER -->\n <canvas class="chart chart-pie" chart-data="system.memory.values" chart-labels="system.memory.labels" chart-legend="true">\n </canvas>\n </div>\n </div>\n </div>\n <div class="col-md-6 col-sm-6">\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-pie-chart font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_DISK\' | translate }} (<b>{{ \'APPLICATION_TOTAL\' | translate }}</b>: {{system.mount.size}} GB)</a> </span>\n </div>\n <div class="actions">\n <div class="portlet-input input-inline input-medium">\n <div class="input-group">\n <ui-select data-ng-model="system.mount" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_DISK\' | translate}}">{{$select.selected.mount}}</ui-select-match>\n <ui-select-choices repeat="disk in system.disks | filter: $select.search">\n <div ng-bind-html="disk.mount | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="input-group-btn">\n <button class="btn btn-default" href="#" data-ng-click="initView()">\n <i class="icon-refresh"></i>\n </button>\n </span>\n </div>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="disk-spinner" spinner-start-active="true"></span>\n <!-- END UI-GRID SPINNER -->\n <canvas class="chart chart-pie" chart-data="system.mount.values" chart-labels="system.mount.labels" chart-legend="true">\n </canvas>\n <!-- END Portlet PORTLET-->\n </div>\n </div>\n </div>\n </div>\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-pie-chart font-green-sharp"></i>\n <span class="caption-subject">CPU (<b>{{ \'APPLICATION_NUMBER_OF_CORES\' | translate }}</b>: {{system.cpu.cores.length}}, <b>MOTION</b>: {{system.cpu.motion}} % )</a> </span>\n </div>\n <div class="actions">\n <a class="btn btn-default" href="#" data-ng-click="initView()">\n <i class="icon-refresh"></i>\n </a>\n </div>\n </div>\n <div class="portlet-body">\n <div class="row">\n <div class="col-md-2 col-sm-4" data-ng-repeat="cpu in system.cpu.cores">\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="cpu-spinner" spinner-start-active="false"></span>\n <!-- END UI-GRID SPINNER -->\n <canvas class="chart chart-doughnut" chart-data="cpu.values" chart-labels="cpu.labels" chart-colours="cpu.colours" chart-legend="true">\n </canvas>\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/setting/system/view/logs/logs.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initView()">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_LOGS\' | translate}}\n <button class="btn btn-default" href="#" data-ng-click="initView()">\n <i class="icon-refresh"></i>\n </button></span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_OUTPUT\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_2" data-toggle="tab">{{ \'APPLICATION_ERRORS\' | translate}}</a>\n </li>\n </ul>\n </div>\n <div class="portlet-body">\n <div class="tab-content">\n <!-- CHANGE LOGO TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <pre style="height:700px;overflow-y:scroll;" schroll-bottom="logs.output">\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="logs-spinner" spinner-start-active="true"></span>\n <!-- END UI-GRID SPINNER -->\n {{logs.output}}\n </pre>\n </div>\n <div class="tab-pane" id="tab_1_2">\n <pre style="height:700px;overflow-y:scroll;" schroll-bottom="logs.errors">\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="logs-spinner" spinner-start-active="true"></span>\n <!-- END UI-GRID SPINNER -->\n {{logs.errors}}\n </pre>\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/setting/system/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-settings"></i>\n <a href="#">{{ \'APPLICATION_SETTINGS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-pie-chart"></i>\n <a href="#">{{ \'APPLICATION_SYSTEM\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img src="assets/images/media/customize.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{ \'APPLICATION_SYSTEM\' | translate }}\n </div>\n </div>\n <!-- END SIDEBAR USER TITLE -->\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.setting.system.view.general\')}">\n <a ng-href="/setting/system/view/general">\n <i class="icon-pie-chart"></i>\n {{ \'APPLICATION_GENERAL\' | translate }} </a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.setting.system.view.logs\')}">\n <a ng-href="/setting/system/view/logs">\n <i class="icon-list"></i>\n {{ \'APPLICATION_LOGS\' | translate }} </a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.setting.system.view.console\')}">\n <a ng-href="/setting/system/view/console">\n <i class="icon-chemistry"></i>\n {{ \'APPLICATION_ASTERISK_CONSOLE\' | translate }} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/setting/update/list/landing.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-settings"></i>\n <a href="#">{{ \'APPLICATION_SETTINGS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-cloud-download"></i>\n <a href="#">{{ \'APPLICATION_UPDATES\' | translate }}</a>\n </li>\n </ul>\n </div>\n <!-- BEGIN PAGE CONTENT--> \n <div class="row" data-ng-init="initCounter()">\n <div class="col-md-12 page-500">\n <div class="number">\n <timer interval="1000" countdown="120">{{countdown}}</timer>\n </div>\n <div class="details">\n <h3>Wait! We need to restart xCALLY Motion server.</h3>\n <p>\n We are updating it!<br/>\n xCALLY Motion Team<br/><br/>\n </p>\n </div>\n </div>\n </div>\n <!-- END PAGE CONTENT-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/setting/update/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-settings"></i>\n <a href="#">{{ \'APPLICATION_SETTINGS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-cloud-download"></i>\n <a href="#">{{ \'APPLICATION_UPDATES\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <!-- <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-cloud-download font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_UPDATES\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <a class="btn btn-default" href="#" data-ng-click="pull()">\n <i class="icon-cloud-download"></i> {{ \'APPLICATION_UPDATE\' | translate }}\n </a>\n </div>\n </div>\n <div class="portlet-body" data-ng-init="initView()"> -->\n <!-- START TABLE -->\n <!-- <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div> -->\n <!-- END TABLE -->\n <!-- </div> -->\n <!-- END Portlet PORTLET-->\n <!-- </div> -->\n <div class="row">\n <div class="col-md-12">\n <!-- BEGIN INLINE NOTIFICATIONS PORTLET-->\n <div class="portlet">\n <div class="portlet-title">\n <div class="caption">\n <i class="icon-cloud-download font-green-sharp"></i>{{ \'APPLICATION_UPDATE\' | translate }}\n </div>\n <div class="actions">\n <button class="btn btn-default" href="#" data-ng-click="pull()">\n <i class="icon-cloud-download"></i> {{ \'APPLICATION_UPDATE\' | translate }}\n </button>\n </div>\n </div>\n <div class="portlet-body" data-ng-init="initView()">\n <div class="row margin-bottom-40">\n <!-- Pricing -->\n <div class="col-md-6">\n <div class="pricing hover-effect current-version">\n <div class="pricing-head">\n <h3>{{ \'APPLICATION_CURRENT_VERSION\' | translate }} <span>\n {{ \'APPLICATION_LAST_PERFORMED_UPDATE\' | translate }} </span>\n </h3>\n <h4>v. {{currentVersion.version}}</h4>\n </div>\n <ul class="pricing-content list-unstyled">\n <li>\n <i class="icon-clock"></i><b> {{\'APPLICATION_RELEASED_AT\' | translate}}:</b> {{currentVersion.createdAt}}\n </li>\n <li>\n <i class="icon-list"></i> <a href="https://wiki.xcallymotion.com/display/XMD/Motion+GUI#MotionGUI-Version{{currentVersion.version}}">{{\'APPLICATION_CHANGELOG\' | translate}}</a>\n </li>\n </ul>\n <div class="pricing-footer">\n </div>\n </div>\n </div>\n <div class="col-md-6">\n <div class="pricing hover-effect" data-ng-class="{\'disabled-update\':currentVersion.version==latestVersion.version}">\n <div class="pricing-head">\n <h3>{{ \'APPLICATION_LATEST_VERSION\' | translate }} <span>\n {{ \'APPLICATION_LAST_SOFTWARE_UPDATE_AVAILABLE\' | translate }} </span>\n </h3>\n <h4>v. {{latestVersion.version}}</h4>\n </div>\n <ul class="pricing-content list-unstyled">\n <li>\n <i class="icon-clock"></i><b> {{\'APPLICATION_RELEASED_AT\' | translate}}:</b> {{latestVersion.createdAt}}\n </li>\n <li>\n <i class="icon-list"></i> <a href="https://wiki.xcallymotion.com/display/XMD/Motion+GUI#MotionGUI-Version{{latestVersion.version}}">{{\'APPLICATION_CHANGELOG\' | translate}}</a>\n </li>\n </ul>\n <div class="pricing-footer">\n </div>\n </div>\n </div>\n <!--//End Pricing -->\n </div>\n </div>\n </div>\n <!-- END INLINE NOTIFICATIONS PORTLET-->\n </div>\n </div>\n\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'), +a.put("app/setting/update/list/list.pull.html",'<div class="modal-header">\n <button data-ng-if="modal.dismissable" type="button" data-ng-click="$dismiss()" class="close">×</button>\n <h4 ng-if="modal.title" ng-bind="modal.title" class="modal-title"></h4>\n</div>\n<div class="modal-body">\n <p data-ng-if="modal.text" data-ng-bind="modal.text"></p>\n <div data-ng-if="modal.html" data-ng-bind-html="modal.html"></div>\n</div>\n<div class="modal-footer">\n <button data-ng-repeat="button in modal.buttons" data-ng-class="button.classes" data-ng-click="button.click($event)" data-ng-bind="button.text" class="btn"></button>\n</div>\n'),a.put("app/square/odbc/list/list.create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_PROJECT\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.name.$touched || form.$submitted) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DSN -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.dsn.$touched || form.$submitted) && form.dsn.$invalid}">\n <label class="control-label">{{\'APPLICATION_ODBC\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="dsn" placeholder="DRIVER=MySQL;SERVER=127.0.0.1;UID=xcall;PWD=password;DATABASE=motion" class="form-control" data-ng-model="item.dsn" required/>\n <p class="help-block">Es. DRIVER=MySQL;SERVER=127.0.0.1;UID=xcall;PWD=password;DATABASE=motion</p>\n <span data-ng-show="(form.dsn.$touched || form.$submitted) && form.dsn.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END DSN -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/square/odbc/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-superscript"></i>\n <a>Cally ²</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-docs"></i>\n <a href="#">{{ \'APPLICATION_ODBCS\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-docs font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_ODBCS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <button class="btn green-jungle " ng-click="createItem()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_ODBC\' | translate }}\n </button>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/square/odbc/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getOdbc()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-superscript"></i>\n <a>Cally ²</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-docs"></i>\n <a href="/square/odbc/list">{{ \'APPLICATION_ODBCS\' | translate }}</a>\n <i data-ng-show="odbc" class="fa fa-angle-right"></i>\n </li>\n <li data-ng-show="odbc">\n <a href="#">{{odbc.name}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/odbc.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{odbc.name}}\n </div>\n <!-- <div class="profile-usertitle-job">\n {{user.role}}\n </div> -->\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.square.odbc.view.settings\')}">\n <a data-ng-href="/square/odbc/view/{{odbc.id}}/settings">\n <i class="icon-settings"></i>\n {{ \'APPLICATION_SETTINGS\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/square/odbc/view/view.settings.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_ODBC\' | translate}} {{ \'APPLICATION_SETTINGS\' | translate}} </span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n </li>\n </ul>\n </div>\n\n <div class="portlet-body">\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.general" data-ng-submit="forms.general.$valid && updateOdbc()" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="odbc.name" required/>\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DSN -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.odbc.dsn.$touched || forms.odbc.$submitted) && forms.odbc.dsn.$invalid}">\n <label class="control-label">{{\'APPLICATION_ODBC\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="dsn" placeholder="{{\'APPLICATION_DSN\' | translate}}" class="form-control" data-ng-model="odbc.dsn" required/>\n <p class="help-block">Es. DRIVER=MySQL;SERVER=127.0.0.1;UID=xcall;PWD=password;DATABASE=motion</p>\n <span data-ng-show="(forms.odbc.dsn.$touched || forms.odbc.$submitted) && forms.odbc.dsn.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END DSN -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="odbc.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END ADVANCED TAB -->\n\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/square/project/list/list.create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_PROJECT\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.name.$touched || form.$submitted) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/square/project/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-superscript"></i>\n <a>Cally ²</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-slack"></i>\n <a href="#">{{ \'APPLICATION_PROJECTS\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-docs font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_PROJECTS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <button class="btn green-jungle " ng-click="createItem()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_PROJECT\' | translate }}\n </button>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/square/project/view/projectNotes.modal.html",'<div class="yellow-notes">\n<div class="modal-header">\n <button ng-if="modal.dismissable" type="button" ng-click="$dismiss()" class="close">×</button>\n <h4 class="modal-title">{{\'APPLICATION_NOTES\' | translate}}</h4>\n</div>\n<div class="modal-body" style="text-align:center;">\n<textarea name="name" class="notes-textarea" placeholder="{{\'MESSAGE_INSERT_YOUR_TEXT_HERE\' | translate}}" data-ng-model="notes.value"></textarea>\n</div>\n<div class="modal-footer" >\n <button class="btn green-haze" type="button" ng-click="close()">{{ \'APPLICATION_SAVE\' | translate }}</button>\n</div>\n</div>\n'),a.put("app/square/project/view/view.html",'<div class="row" data-ng-init="getProject()">\n <div class="col-md-12">\n <div class="page-bar" style="margin-bottom: 0px;">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-superscript"></i>\n <a>Cally ²</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-slack"></i>\n <a href="/square/projects/list">{{ \'APPLICATION_PROJECTS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <a ng-href="/square/projects/view/{{squareProject.id}}">{{squareProject.name}}</a>\n </li>\n </ul>\n </div>\n\n <h4 class="text-success bold"> {{squareProject.name}} <button class="btn btn-xs yellow-saffron" type="button" data-ng-click="editNotes()"><i class="icon-note"></i> {{\'APPLICATION_NOTES\' | translate}}</button></h4> <p class="text-muted"> {{squareProject.description}} </p>\n\n <div id="geEditor" class="geEditor"></div>\n </div>\n</div>\n<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n\n </div>\n</div>\n\n<!-- END PAGE CONTENT-->\n<script></script>\n'),a.put("app/square/realtime/view/general/general.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="init()">\n <div class="col-md-12">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns class="ui-grid" ui-grid-pagination ui-grid-auto-resize>\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/square/realtime/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-superscript"></i>\n <a href="#">Cally ²</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-energy"></i>\n <a href="/square/realtime/view/general">{{ \'APPLICATION_REALTIME\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <div>\n <nav class="navbar navbar-default" role="navigation">\n <div class="collapse navbar-collapse">\n <ul class="nav navbar-nav">\n <li data-ng-class="{\'active\': $state.is(\'main.square.realtime.view.general\')}">\n <a href="/square/realtime/view/general">\n {{\'APPLICATION_GENERAL\' | translate}}\n </a>\n </li>\n </ul>\n </div>\n </nav>\n </div>\n <div ui-view></div>\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/square/recording/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-superscript"></i>\n <a href="#">Cally ²</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-microphone"></i>\n <a href="#">{{ \'APPLICATION_RECORDINGS\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="fa fa-play font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_RECORDINGS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/staff/agent/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-puzzle"></i>\n <a href="#">{{ \'APPLICATION_STAFF\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-people"></i>\n <a href="#">{{ \'APPLICATION_AGENTS\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-people font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_AGENTS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group" data-ng-show="Auth.getCurrentUser().role === \'admin\'">\n <button type="button" class="btn green-jungle" data-toggle="dropdown" data-hover="dropdown" data-delay="1000" data-close-others="true" aria-expanded="true">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_AGENT\' | translate }} <i class="fa fa-angle-down"></i>\n </button>\n <ul class="dropdown-menu" role="menu">\n <li>\n <a href="/staff/agents/wizard">\n Standard\n </a>\n </li>\n <li>\n <a href="/staff/agents/bulk">\n {{ \'APPLICATION_BULK\' | translate }}\n </a>\n </li>\n </ul>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/staff/agent/view/view.account.html",'<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_PROFILE\' | translate}} {{ \'APPLICATION_ACCOUNT\' | translate}}</span>\n </div>\n <ul class="nav nav-tabs">\n <li data-ng-class="{\'active\': Auth.isAdmin() || userModules[4]}" data-ng-show="Auth.isAdmin() || userModules[4]">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_PERSONAL_INFO\' | translate}}</a>\n </li>\n <li data-ng-show="Auth.isAdmin() || userModules[4]">\n <a href="#" data-target="#tab_1_2" data-toggle="tab">{{ \'APPLICATION_CHANGE_AVATAR\' | translate}}</a>\n </li>\n <li data-ng-show="Auth.isAdmin() || userModules[4] || agent.id === Auth.getCurrentUser().id" data-ng-class="{\'active\': !Auth.isAdmin() && agent.id === Auth.getCurrentUser().id}">\n <a href="#" data-target="#tab_1_3" data-toggle="tab">{{ \'APPLICATION_CHANGE_PASSWORD\' | translate}}</a>\n </li>\n </ul>\n </div>\n\n <div class="portlet-body">\n <div class="tab-content">\n <!-- PERSONAL INFO TAB -->\n <div class="tab-pane" data-ng-class="{\'active\': Auth.isAdmin() || userModules[4]}" data-ng-show="Auth.isAdmin() || userModules[4]" id="tab_1_1">\n <form name="forms.info" data-ng-submit="forms.info.$valid && updateItem()" novalidate>\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.fullname.$touched || forms.info.$submitted) && forms.info.fullname.$invalid}">\n <label class="control-label">{{\'APPLICATION_FULLNAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="fullname" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="agent.fullname" required/>\n <span data-ng-show="(forms.info.fullname.$touched || forms.info.$submitted) && forms.info.fullname.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START USERNAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_USERNAME\' | translate}}</label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_USERNAME\' | translate}}" class="form-control" data-ng-model="agent.name" disabled/>\n </div>\n <!-- END USERNAME -->\n\n <!-- START EMAIL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.email.$touched || forms.info.$submitted) && forms.info.email.$invalid}">\n <label class="control-label">{{\'APPLICATION_EMAIL\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="email" name="email" placeholder="{{\'APPLICATION_EMAIL\' | translate}}" class="form-control" data-ng-model="agent.email" required/>\n <span data-ng-show="(forms.info.email.$touched || forms.info.$submitted) && forms.info.email.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.info.email.$touched || forms.info.$submitted) && forms.info.email.$error.email" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n </span>\n </div>\n <!-- END EMAIL -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="agent.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n <!-- START LOGIN IN PAUSE -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_LOGIN_IN_PAUSE\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="agent.loginInPause"\n type="checkbox"\n name="auth"\n switch-active="{{ recordSwitch.isActive }}"\n switch-on-text="{{ recordSwitch.onText }}"\n switch-off-text="{{ recordSwitch.offText }}"\n switch-on-color="{{ recordSwitch.onColor }}"\n switch-off-color="{{ recordSwitch.offColor }}"\n switch-animate="{{ recordSwitch.animate }}"\n switch-size="{{ recordSwitch.size }}"\n switch-label="{{ recordSwitch.label }}"\n switch-icon="{{ recordSwitch.icon }}"\n switch-radio-off="{{ recordSwitch.radioOff }}"\n switch-label-width="{{ recordSwitch.labelWidth }}"\n switch-handle-width="{{ recordSwitch.handleWidth }}">\n </div>\n <!-- END LOGIN IN PAUSE -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END PERSONAL INFO TAB -->\n <!-- CHANGE AVATAR TAB -->\n <div class="tab-pane" data-ng-show="Auth.isAdmin() || userModules[4]" id="tab_1_2">\n <form action="#" role="form">\n <div class="form-group">\n <div class="fileinput fileinput-new" data-provides="fileinput">\n <div class="fileinput-new thumbnail" style="width: 200px; height: 150px;">\n <img ng-src="assets/images/media/noProfileImage.png" alt=""/>\n </div>\n <div class="fileinput-preview fileinput-exists thumbnail" style="max-width: 200px; max-height: 150px;">\n </div>\n <div>\n <span class="btn default btn-file" data-ng-show="!uploader.queue[0]">\n <span> {{ \'APPLICATION_SELECT_IMAGE\' | translate }} </span>\n <input type="file" nv-file-select="" uploader="uploader" /><br/>\n </span>\n <button type="button" class="btn default" data-ng-show="uploader.queue[0]" data-dismiss="fileinput" ng-click="uploader.queue[0].remove()">\n {{ \'APPLICATION_REMOVE\' | translate }}\n </button>\n <button type="button" class="btn green-haze" data-ng-show="uploader.queue[0]" data-ng-click="uploader.queue[0].upload()" ng-disabled="uploader.queue[0].isReady || uploader.queue[0].isUploading || uploader.queue[0].isSuccess">\n {{ \'APPLICATION_CONFIRM\' | translate }}\n </button>\n </div>\n <p>\n </br> {{ \'MESSAGE_SUPPORTED_FORMATS\' | translate }} <b>jpg, png, jpeg</b>.\n </p>\n </div>\n </div>\n </form>\n <div class="row">\n <div class="col-md-2">\n <table class="table" border="0">\n <tbody>\n <tr data-ng-repeat="item in uploader.queue">\n <td style="border-top-style:none">\n <strong>\n {{ item.file.name }}\n </strong>\n </td>\n <td data-ng-show="uploader.isHTML5" nowrap style="border-top-style:none">\n {{ item.file.size/1024/1024|number:2 }} MB\n </td>\n <td nowrap style="border-top-style:none">\n <button type="button" class="btn btn-danger btn-xs" data-ng-click="item.remove()">\n <span class="glyphicon glyphicon-trash"></span> Remove\n </button>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n </div>\n <!-- END CHANGE AVATAR TAB -->\n <!-- CHANGE PASSWORD TAB -->\n <div class="tab-pane" data-ng-show="Auth.isAdmin() || userModules[4] || agent.id === Auth.getCurrentUser().id" data-ng-class="{\'active\': !Auth.isAdmin() && agent.id === Auth.getCurrentUser().id}" id="tab_1_3">\n <form name="forms.changePwd" data-ng-submit="forms.changePwd.$valid && updatePassword()" novalidate>\n <!-- START CURRENT PWD -->\n <div class="form-group" data-ng-if="!(Auth.isAdmin() || userModules[4])" data-ng-class="{\'has-error\': (forms.changePwd.current_pwd.$touched || forms.changePwd.$submitted) && forms.changePwd.current_pwd.$invalid}">\n <label class="control-label">{{\'APPLICATION_CURRENT_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="password" name="current_pwd" placeholder="{{\'APPLICATION_CURRENT_PASSWORD\' | translate}}" class="form-control" data-ng-model="agent.currentPwd" required/>\n <span data-ng-show="(forms.changePwd.current_pwd.$touched || forms.changePwd.$submitted) && forms.changePwd.current_pwd.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CURRENT PWD -->\n <!-- START NEW PWD -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.changePwd.new_pwd.$touched || forms.changePwd.$submitted) && forms.changePwd.new_pwd.$invalid}">\n <label class="control-label">{{\'APPLICATION_NEW_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="password" name="new_pwd" placeholder="{{\'APPLICATION_NEW_PASSWORD\' | translate}}" class="form-control" data-ng-model="agent.newPwd" data-ng-pattern="setting.securePassword ? settings.patternPassword : settings.patternPasswordLight" required/>\n <span class="help-block">\n {{setting.securePassword ? \'MESSAGE_PASSWORD_FORMAT\' : \'MESSAGE_PASSWORD_LIGTH_FORMAT\' | translate}}\n </span>\n <span data-ng-show="(forms.changePwd.current_pwd.$touched || forms.info.$submitted) && forms.changePwd.current_pwd.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n </span>\n <span data-ng-show="(forms.changePwd.new_pwd.$touched || forms.changePwd.$submitted) && forms.changePwd.new_pwd.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NEW PWD -->\n <!-- START RE-NEW PWD -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.changePwd.re_new_pwd.$touched || forms.changePwd.$submitted) && forms.changePwd.re_new_pwd.$invalid}">\n <label class="control-label">{{\'APPLICATION_RE_TYPE_NEW_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="password" name="re_new_pwd" placeholder="{{\'APPLICATION_RE_TYPE_NEW_PASSWORD\' | translate}}" class="form-control" data-ng-model="agent.reNewPwd" nx-equal="agent.newPwd" required/>\n <span data-ng-show="(forms.changePwd.new_pwd.$touched || forms.changePwd.$submitted) && forms.changePwd.new_pwd.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END RE-NEW PWD -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END CHANGE PASSWORD TAB -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'), +a.put("app/staff/agent/view/view.chat.html",'<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_PROFILE\' | translate}} {{ \'APPLICATION_CHAT\' | translate}}</span>\n </div>\n </div>\n\n <div class="portlet-body">\n <!-- START CHAT TAB -->\n <form name="form" data-ng-submit="patchItem()" novalidate>\n <!-- START CAPACITY -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.capacity.$touched || form.$submitted) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_CAPACITY\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" name="chatCapacity" placeholder="{{\'APPLICATION_CAPACITY\' | translate}}" class="form-control" data-ng-model="agent.chatCapacity" min="0" required/>\n <span class="help-block">\n {{\'MESSAGE_ZERO_MEANS_UNLIMITED\' | translate}}\n </span>\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CAPACITY -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n <!-- END CHAT TAB -->\n </div>\n </div>\n </div>\n</div>\n</div>\n'),a.put("app/staff/agent/view/view.fax.html",'<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_PROFILE\' | translate}} {{ \'APPLICATION_FAX\' | translate}}</span>\n </div>\n </div>\n\n <div class="portlet-body">\n <!-- START CHAT TAB -->\n <form name="form" data-ng-submit="patchItem()" novalidate>\n <!-- START CAPACITY -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.capacity.$touched || form.$submitted) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_CAPACITY\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" name="faxCapacity" placeholder="{{\'APPLICATION_CAPACITY\' | translate}}" class="form-control" data-ng-model="agent.faxCapacity" min="0" required/>\n <span class="help-block">\n {{\'MESSAGE_ZERO_MEANS_UNLIMITED\' | translate}}\n </span>\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CAPACITY -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n <!-- END CHAT TAB -->\n </div>\n </div>\n </div>\n</div>\n</div>\n'),a.put("app/staff/agent/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-puzzle"></i>\n <a href="#">{{ \'APPLICATION_STAFF\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-people"></i>\n <a href="/staff/agents/list">{{ \'APPLICATION_AGENTS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <a href="#">{{agent.fullname}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-userpic">\n <img ng-src="api/users/avatar/{{agent.userpic ? agent.userpic : \'unknown_avatar\'}}" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n\n <!-- START SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{agent.fullname}}\n </div>\n <div class="profile-usertitle-job">\n {{agent.role}}\n </div>\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.staff.agents.view.account\')}">\n <a data-ng-href="/staff/agents/view/{{agent.id}}/account">\n <i class="icon-user"></i>\n {{ \'APPLICATION_ACCOUNT\' | translate}} </a>\n </li>\n\n <li data-ng-class="{active: $state.includes(\'main.staff.agents.view.queues\')}" data-ng-show="Auth.isAdmin() || userModules[7]">\n <a data-ng-href="/staff/agents/view/{{agent.id}}/queues/voice">\n <i class="icon-docs"></i>\n {{ \'APPLICATION_QUEUES\' | translate}} </a>\n </li>\n\n <li data-ng-class="{active: $state.is(\'main.staff.agents.view.voice\')}" data-ng-show="Auth.isAdmin() || userModules[7]">\n <a data-ng-href="/staff/agents/view/{{agent.id}}/voice">\n <i class="icon-earphones-alt"></i>\n {{ \'APPLICATION_VOICE\' | translate}} </a>\n </li>\n\n <li data-ng-class="{active: $state.is(\'main.staff.agents.view.chat\'),\'disabled-link\':!license.chat}" data-ng-show="Auth.isAdmin() || userModules[8]">\n <a data-ng-href="{{license.chat ? \'/staff/agents/view/\'+agent.id+\'/chat\' : \'javascript:;\'}}" class="disable-target">\n <i class="icon-bubble"></i>\n {{ \'APPLICATION_CHAT\' | translate}} </a>\n </li>\n\n <li data-ng-class="{active: $state.is(\'main.staff.agents.view.mail\'),\'disabled-link\':!license.mail}" data-ng-show="Auth.isAdmin() || userModules[9]">\n <a data-ng-href="{{license.mail ? \'/staff/agents/view/\'+agent.id+\'/mail\' : \'javascript:;\'}}" class="disable-target">\n <i class="icon-envelope"></i>\n {{ \'APPLICATION_MAIL\' | translate}} </a>\n </li>\n\n <li data-ng-class="{active: $state.is(\'main.staff.agents.view.fax\'),\'disabled-link\':!license.fax}" data-ng-show="Auth.isAdmin() || userModules[10]">\n <a data-ng-href="{{license.fax ? \'/staff/agents/view/\'+agent.id+\'/fax\' : \'javascript:;\'}}" class="disable-target">\n <i class="fa fa-fax"></i>\n {{ \'APPLICATION_FAX\' | translate}} </a>\n </li>\n\n <li data-ng-class="{active: $state.is(\'main.staff.agents.view.sms\'),\'disabled-link\':!license.messaging}" data-ng-show="Auth.isAdmin() || userModules[11]">\n <a data-ng-href="{{license.messaging ? \'/staff/agents/view/\'+agent.id+\'/sms\' : \'javascript:;\'}}" class="disable-target">\n <i class=" glyphicon glyphicon-comment "></i>\n {{ \'APPLICATION_SMS\' | translate}} </a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.staff.agents.view.openchannel\'),\'disabled-link\':!license.openchannel}" data-ng-show="Auth.isAdmin() || userModules[20]">\n <a data-ng-href="{{license.openchannel ? \'/staff/agents/view/\'+agent.id+\'/openchannel\' : \'javascript:;\'}}" class="disable-target">\n <i class=" icon-globe "></i>\n {{ \'APPLICATION_OPEN_CHANNEL\' | translate}} </a>\n </li>\n\n <li data-ng-class="{active: $state.is(\'main.staff.agents.view.motionbar\')}" data-ng-show="Auth.isAdmin()">\n <a data-ng-href="/staff/agents/view/{{agent.id}}/motionbar">\n <i class="icon-screen-desktop"></i>\n {{ \'APPLICATION_MOTION_BAR\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/staff/agent/view/view.mail.html",'<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_PROFILE\' | translate}} {{ \'APPLICATION_MAIL\' | translate}}</span>\n </div>\n </div>\n\n <div class="portlet-body">\n <!-- START CHAT TAB -->\n <form name="form" data-ng-submit="patchItem()" novalidate>\n <!-- START CAPACITY -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.capacity.$touched || form.$submitted) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_CAPACITY\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" name="mailCapacity" placeholder="{{\'APPLICATION_CAPACITY\' | translate}}" class="form-control" data-ng-model="agent.mailCapacity" min="0" required/>\n <span class="help-block">\n {{\'MESSAGE_ZERO_MEANS_UNLIMITED\' | translate}}\n </span>\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CAPACITY -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n <!-- END CHAT TAB -->\n </div>\n </div>\n </div>\n</div>\n</div>\n'),a.put("app/staff/agent/view/view.motionbar.html",'<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_PROFILE\' | translate}} {{ \'APPLICATION_MOTION_BAR\' | translate}}</span>\n </div>\n <ul class="nav nav-tabs">\n <li data-ng-class="{\'active\': Auth.isAdmin()}" data-ng-show="Auth.isAdmin()">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n </li>\n <li data-ng-show="Auth.isAdmin()">\n <a href="#" data-target="#tab_1_2" data-toggle="tab">{{ \'APPLICATION_CALL_FORWARDING\' | translate}}</a>\n </li>\n <li data-ng-show="Auth.isAdmin()">\n <a href="#" data-target="#tab_1_3" data-toggle="tab">{{ \'APPLICATION_ADVANCED\' | translate}}</a>\n </li>\n </ul>\n </div>\n\n <div class="portlet-body">\n <div class="tab-content">\n <!-- START GENERAL TAB -->\n <div class="tab-pane" data-ng-class="{\'active\': Auth.isAdmin()}" data-ng-show="Auth.isAdmin()" id="tab_1_1">\n <form name="forms.general" data-ng-submit="updateItem()" novalidate>\n\n <!-- START ENABLE_SETTINGS -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_ENABLE_SETTINGS\' | translate}}</label><br>\n <input\n bs-switch\n ng-model="agent.phoneBarEnableSettings"\n type="checkbox"\n switch-active="{{ radioSwitch.isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ radioSwitch.onColor }}"\n switch-off-color="{{ radioSwitch.offColor }}"\n switch-animate="{{ radioSwitch.animate }}"\n switch-size="{{ radioSwitch.size }}"\n switch-label="{{ radioSwitch.label }}"\n switch-icon="{{ radioSwitch.icon }}"\n switch-radio-off="{{ radioSwitch.radioOff }}"\n switch-label-width="{{ radioSwitch.labelWidth }}"\n switch-handle-width="{{ radioSwitch.handleWidth }}">\n </div>\n <!-- END ENABLE_SETTINGS -->\n\n <!-- START AUTO_ANSWER -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_AUTO_ANSWER\' | translate}}</label><br>\n <input\n bs-switch\n ng-model="agent.phoneBarAutoAnswer"\n type="checkbox"\n switch-active="{{ radioSwitch.isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ radioSwitch.onColor }}"\n switch-off-color="{{ radioSwitch.offColor }}"\n switch-animate="{{ radioSwitch.animate }}"\n switch-size="{{ radioSwitch.size }}"\n switch-label="{{ radioSwitch.label }}"\n switch-icon="{{ radioSwitch.icon }}"\n switch-radio-off="{{ radioSwitch.radioOff }}"\n switch-label-width="{{ radioSwitch.labelWidth }}"\n switch-handle-width="{{ radioSwitch.handleWidth }}">\n </div>\n <!-- END AUTO_ANSWER -->\n\n <!-- START APPLICATION_ENABLE_RECORDING -->\n <!-- <div class="form-group">\n <label class="control-label">{{\'APPLICATION_ENABLE_RECORDING\' | translate}}</label><br>\n <input\n bs-switch\n ng-model="agent.phoneBarEnableRecording"\n type="checkbox"\n switch-active="{{ radioSwitch.isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ radioSwitch.onColor }}"\n switch-off-color="{{ radioSwitch.offColor }}"\n switch-animate="{{ radioSwitch.animate }}"\n switch-size="{{ radioSwitch.size }}"\n switch-label="{{ radioSwitch.label }}"\n switch-icon="{{ radioSwitch.icon }}"\n switch-radio-off="{{ radioSwitch.radioOff }}"\n switch-label-width="{{ radioSwitch.labelWidth }}"\n switch-handle-width="{{ radioSwitch.handleWidth }}">\n </div> -->\n <!-- END APPLICATION_ENABLE_RECORDING -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END GENERAL TAB -->\n <!-- START CALL FORWARDING TAB -->\n <div class="tab-pane" data-ng-show="Auth.isAdmin()" id="tab_1_2">\n <form name="forms.callForwarding" data-ng-submit="updateItem()" novalidate>\n\n <!-- START UNCONDITIONAL -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_UNCONDITIONAL\' | translate}}</label><br>\n <input\n bs-switch\n ng-model="agent.phoneBarUnconditional"\n type="checkbox"\n switch-active="{{ radioSwitch.isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ radioSwitch.onColor }}"\n switch-off-color="{{ radioSwitch.offColor }}"\n switch-animate="{{ radioSwitch.animate }}"\n switch-size="{{ radioSwitch.size }}"\n switch-label="{{ radioSwitch.label }}"\n switch-icon="{{ radioSwitch.icon }}"\n switch-radio-off="{{ radioSwitch.radioOff }}"\n switch-label-width="{{ radioSwitch.labelWidth }}"\n switch-handle-width="{{ radioSwitch.handleWidth }}">\n </div>\n <!-- END UNCONDITIONAL -->\n\n\n <!-- START UNCONDITIONAL NUMBER -->\n <div class="form-group" data-ng-if="agent.phoneBarUnconditional" data-ng-class="{\'has-error\': (forms.callForwarding.phoneBarUnconditionalNumber.$touched || forms.callForwarding.$submitted) && forms.callForwarding.phoneBarUnconditionalNumber.$invalid}">\n <input type="text" name="phoneBarUnconditionalNumber" placeholder="{{\'APPLICATION_NUMBER\' | translate}}" class="form-control" data-ng-model="agent.phoneBarUnconditionalNumber" required/>\n <span class="help-block">\n <!-- {{ \'DESCRIPTION_VOICE_HOST\' | translate }} -->\n </span>\n <span data-ng-show="(forms.callForwarding.phoneBarUnconditionalNumber.$touched || forms.callForwarding.$submitted) && forms.callForwarding.phoneBarUnconditionalNumber.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END UNCONDITIONAL NUMBER -->\n\n <!-- START NO REPLY -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_NO_REPLY\' | translate}}</label><br>\n <input\n bs-switch\n ng-model="agent.phoneBarNoReply"\n type="checkbox"\n switch-active="{{ radioSwitch.isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ radioSwitch.onColor }}"\n switch-off-color="{{ radioSwitch.offColor }}"\n switch-animate="{{ radioSwitch.animate }}"\n switch-size="{{ radioSwitch.size }}"\n switch-label="{{ radioSwitch.label }}"\n switch-icon="{{ radioSwitch.icon }}"\n switch-radio-off="{{ radioSwitch.radioOff }}"\n switch-label-width="{{ radioSwitch.labelWidth }}"\n switch-handle-width="{{ radioSwitch.handleWidth }}">\n </div>\n <!-- END NO REPLY -->\n\n <!-- START NO REPLY -->\n <div class="form-group" data-ng-if="agent.phoneBarNoReply" data-ng-class="{\'has-error\': (forms.callForwarding.phoneBarNoReplyNumber.$touched || forms.callForwarding.$submitted) && forms.callForwarding.phoneBarNoReplyNumber.$invalid}">\n <input type="text" name="phoneBarNoReplyNumber" placeholder="{{\'APPLICATION_NUMBER\' | translate}}" class="form-control" data-ng-model="agent.phoneBarNoReplyNumber" required/>\n <span class="help-block">\n <!-- {{ \'DESCRIPTION_VOICE_HOST\' | translate }} -->\n </span>\n <span data-ng-show="(forms.callForwarding.phoneBarNoReplyNumber.$touched || forms.callForwarding.$submitted) && forms.callForwarding.phoneBarNoReplyNumber.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END REPLY -->\n\n <!-- START BUSY -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_BUSY\' | translate}}</label><br>\n <input\n bs-switch\n ng-model="agent.phoneBarBusy"\n type="checkbox"\n switch-active="{{ radioSwitch.isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ radioSwitch.onColor }}"\n switch-off-color="{{ radioSwitch.offColor }}"\n switch-animate="{{ radioSwitch.animate }}"\n switch-size="{{ radioSwitch.size }}"\n switch-label="{{ radioSwitch.label }}"\n switch-icon="{{ radioSwitch.icon }}"\n switch-radio-off="{{ radioSwitch.radioOff }}"\n switch-label-width="{{ radioSwitch.labelWidth }}"\n switch-handle-width="{{ radioSwitch.handleWidth }}">\n </div>\n <!-- END BUSY -->\n\n <!-- START BUSY NUMBER -->\n <div class="form-group" data-ng-if="agent.phoneBarBusy" data-ng-class="{\'has-error\': (forms.callForwarding.phoneBarBusyNumber.$touched || forms.callForwarding.$submitted) && forms.callForwarding.phoneBarBusyNumber.$invalid}">\n <input type="text" name="phoneBarBusyNumber" placeholder="{{\'APPLICATION_NUMBER\' | translate}}" class="form-control" data-ng-model="agent.phoneBarBusyNumber" required/>\n <span class="help-block">\n <!-- {{ \'DESCRIPTION_VOICE_HOST\' | translate }} -->\n </span>\n <span data-ng-show="(forms.callForwarding.phoneBarBusyNumber.$touched || forms.callForwarding.$submitted) && forms.callForwarding.phoneBarBusyNumber.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END BUSY NUMBER -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END CALL FORWARDING TAB -->\n <!-- START ADVANCED TAB -->\n <div class="tab-pane" data-ng-show="Auth.isAdmin()" id="tab_1_3">\n <form name="forms.advanced" data-ng-submit="updateItem()" novalidate>\n\n <!-- START ENABLE REMOTE CONTROL -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_REMOTE_CONTROL\' | translate}}</label><br>\n <input\n bs-switch\n ng-model="agent.phoneBarRemoteControl"\n type="checkbox"\n switch-active="{{ radioSwitch.isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ radioSwitch.onColor }}"\n switch-off-color="{{ radioSwitch.offColor }}"\n switch-animate="{{ radioSwitch.animate }}"\n switch-size="{{ radioSwitch.size }}"\n switch-label="{{ radioSwitch.label }}"\n switch-icon="{{ radioSwitch.icon }}"\n switch-radio-off="{{ radioSwitch.radioOff }}"\n switch-label-width="{{ radioSwitch.labelWidth }}"\n switch-handle-width="{{ radioSwitch.handleWidth }}">\n </div>\n <!-- END ENABLE REMOTE CONTROL -->\n\n\n <!-- START REMOTE CONTROL PORT -->\n <div class="form-group" data-ng-if="agent.phoneBarRemoteControl" data-ng-class="{\'has-error\': (forms.advanced.phoneBarRemoteControlPort.$touched || forms.advanced.$submitted) && forms.advanced.phoneBarRemoteControlPort.$invalid}">\n <label class="control-label">{{\'APPLICATION_REMOTE_CONTROL\' | translate}} {{\'APPLICATION_PORT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" min="1" name="phoneBarRemoteControlPort" placeholder="{{\'APPLICATION_REMOTE_CONTROL\' | translate}} {{\'APPLICATION_PORT\' | translate}}" class="form-control" data-ng-model="agent.phoneBarRemoteControlPort" required/>\n <span class="help-block">Default: 9888</span>\n <span data-ng-show="(forms.advanced.phoneBarRemoteControlPort.$touched || forms.advanced.$submitted) && forms.advanced.phoneBarRemoteControlPort.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="form.advanced.phoneBarRemoteControlPort.$error.max || form.advanced.phoneBarRemoteControlPort.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_NUMBER\' | translate}}.\n </span>\n </div>\n <!-- END REMOTE CONTROL PORT -->\n\n <!-- START SIP EXPIRES -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.phoneBarExpires.$touched || forms.advanced.$submitted) && forms.advanced.phoneBarExpires.$invalid}">\n <label class="control-label">SIP {{\'APPLICATION_EXPIRES\' | translate}} [sec]<span class="required" aria-required="true">*</span></label>\n <input type="number" min="1" name="phoneBarExpires" placeholder="SIP {{\'APPLICATION_EXPIRES\' | translate}}" class="form-control" data-ng-model="agent.phoneBarExpires" required/>\n <span class="help-block">Default: 160</span>\n <span data-ng-show="(forms.advanced.phoneBarExpires.$touched || forms.advanced.$submitted) && forms.advanced.phoneBarExpires.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="form.advanced.phoneBarExpires.$error.max || form.advanced.phoneBarExpires.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_NUMBER\' | translate}} (min 1).\n </span>\n </div>\n <!-- END SIP EXPIRES -->\n\n <!-- START SIP PORT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.phoneBarListenPort.$touched || forms.advanced.$submitted) && forms.advanced.phoneBarListenPort.$invalid}">\n <label class="control-label">SIP {{\'APPLICATION_PORT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" min="0" max="65535" name="phoneBarListenPort" placeholder="SIP {{\'APPLICATION_PORT\' | translate}}" class="form-control" data-ng-model="agent.phoneBarListenPort" required/>\n <span class="help-block">Default: 5060</span>\n <span data-ng-show="(forms.advanced.phoneBarListenPort.$touched || forms.advanced.$submitted) && forms.advanced.phoneBarListenPort.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="form.advanced.phoneBarListenPort.$error.max || form.advanced.phoneBarListenPort.$error.min" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_NUMBER\' | translate}} (0-65535).\n </span>\n </div>\n <!-- END SIP PORT -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END ADVANCED TAB -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/staff/agent/view/view.openchannel.html",'<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_PROFILE\' | translate}} {{ \'APPLICATION_OPEN_CHANNEL\' | translate}}</span>\n </div>\n </div>\n\n <div class="portlet-body">\n <!-- START CHAT TAB -->\n <form name="form" data-ng-submit="patchItem()" novalidate>\n <!-- START CAPACITY -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.capacity.$touched || form.$submitted) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_CAPACITY\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" name="openchannelCapacity" placeholder="{{\'APPLICATION_CAPACITY\' | translate}}" class="form-control" data-ng-model="agent.openchannelCapacity" min="0" required/>\n <span class="help-block">\n {{\'MESSAGE_ZERO_MEANS_UNLIMITED\' | translate}}\n </span>\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CAPACITY -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n <!-- END CHAT TAB -->\n </div>\n </div>\n </div>\n</div>\n</div>\n'),a.put("app/staff/agent/view/view.queues.chat.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12" data-ng-init="initChatQueues()">\n <!-- BEGIN FORM-->\n <form action="#" class="form-horizontal form-row-seperated">\n <div class="form-body">\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-queues-chat">\n </div>\n </div>\n </div>\n </form>\n <!-- END FORM-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/staff/agent/view/view.queues.fax.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12" data-ng-init="initFaxQueues()">\n <!-- BEGIN FORM-->\n <form action="#" class="form-horizontal form-row-seperated">\n <div class="form-body">\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-queues-fax">\n </div>\n </div>\n </div>\n </form>\n <!-- END FORM-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/staff/agent/view/view.queues.html","<!-- BEGIN PAGE CONTENT-->\n<div class=\"row\" data-ng-init=\"initView()\">\n <div class=\"col-md-12\">\n <div>\n <nav class=\"navbar navbar-default\" role=\"navigation\">\n <div class=\"collapse navbar-collapse\">\n <ul class=\"nav navbar-nav\">\n <li data-ng-class=\"{'active': $state.is('main.staff.agents.view.queues.voice')}\">\n <a href=\"/staff/agents/view/{{agent.id}}/queues/voice\">\n <i class=\"icon-earphones-alt\"></i> {{'APPLICATION_VOICE' | translate}}\n </a>\n </li>\n <li data-ng-class=\"{'active': $state.is('main.staff.agents.view.queues.chat'),'disabled-link':!license.chat}\" data-ng-show=\"Auth.isAdmin() || userModules[8]\">\n <a href=\"{{license.chat ? '/staff/agents/view/'+agent.id+'/queues/chat' : 'javascript:;'}}\" class=\"disable-target\">\n <i class=\"icon-bubble\"></i> {{'APPLICATION_CHAT' | translate}}\n </a>\n </li>\n <li data-ng-class=\"{'active': $state.is('main.staff.agents.view.queues.mail'),'disabled-link':!license.mail}\" data-ng-show=\"Auth.isAdmin() || userModules[9]\">\n <a href=\"{{license.mail ? '/staff/agents/view/'+agent.id+'/queues/mail' : 'javascript:;'}}\" class=\"disable-target\">\n <i class=\"icon-envelope\"></i>{{'APPLICATION_MAIL' | translate}}\n </a>\n </li>\n <li data-ng-class=\"{'active': $state.is('main.staff.agents.view.queues.fax'),'disabled-link':!license.fax}\" data-ng-show=\"Auth.isAdmin() || userModules[10]\">\n <a href=\"{{license.fax ? '/staff/agents/view/'+agent.id+'/queues/fax' : 'javascript:;'}}\" class=\"disable-target\">\n <i class=\"fa fa-fax\"></i> {{'APPLICATION_FAX' | translate}}\n </a>\n </li>\n <li data-ng-class=\"{'active': $state.is('main.staff.agents.view.queues.sms'),'disabled-link':!license.messaging}\" data-ng-show=\"Auth.isAdmin() || userModules[11]\">\n <a href=\"{{license.messaging ? '/staff/agents/view/'+agent.id+'/queues/sms' : 'javascript:;'}}\" class=\"disable-target\">\n <i class=\"glyphicon glyphicon-comment\"></i> {{'APPLICATION_SMS' | translate}}\n </a>\n </li>\n <li data-ng-class=\"{'active': $state.is('main.staff.agents.view.queues.openchannel'),'disabled-link':!license.openchannel}\" data-ng-show=\"Auth.isAdmin() || userModules[20]\">\n <a href=\"{{license.openchannel ? '/staff/agents/view/'+agent.id+'/queues/openchannel' : 'javascript:;'}}\" class=\"disable-target\">\n <i class=\"icon-globe\"></i> {{'APPLICATION_OPEN_CHANNEL' | translate}}\n </a>\n </li>\n </ul>\n </div>\n </nav>\n </div>\n <div ui-view></div>\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n"),a.put("app/staff/agent/view/view.queues.mail.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12" data-ng-init="initMailQueues()">\n <!-- BEGIN FORM-->\n <form action="#" class="form-horizontal form-row-seperated">\n <div class="form-body">\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-queues-mail">\n </div>\n </div>\n </div>\n </form>\n <!-- END FORM-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/staff/agent/view/view.queues.openchannel.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12" data-ng-init="initOpenchannelQueues()">\n <!-- BEGIN FORM-->\n <form action="#" class="form-horizontal form-row-seperated">\n <div class="form-body">\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-queues-openchannel">\n </div>\n </div>\n </div>\n </form>\n <!-- END FORM-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'), +a.put("app/staff/agent/view/view.queues.sms.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12" data-ng-init="initSmsQueues()">\n <!-- BEGIN FORM-->\n <form action="#" class="form-horizontal form-row-seperated">\n <div class="form-body">\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-queues-sms">\n </div>\n </div>\n </div>\n </form>\n <!-- END FORM-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/staff/agent/view/view.queues.voice.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12" data-ng-init="initVoiceQueues()">\n <!-- BEGIN FORM-->\n <form action="#" class="form-horizontal form-row-seperated">\n <div class="form-body">\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-queues-voice">\n </div>\n </div>\n </div>\n </form>\n <!-- END FORM-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/staff/agent/view/view.sms.html",'<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_PROFILE\' | translate}} {{ \'APPLICATION_SMS\' | translate}}</span>\n </div>\n </div>\n\n <div class="portlet-body">\n <!-- START CHAT TAB -->\n <form name="form" data-ng-submit="patchItem()" novalidate>\n <!-- START CAPACITY -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.capacity.$touched || form.$submitted) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_CAPACITY\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" name="smsCapacity" placeholder="{{\'APPLICATION_CAPACITY\' | translate}}" class="form-control" data-ng-model="agent.smsCapacity" min="0" required/>\n <span class="help-block">\n {{\'MESSAGE_ZERO_MEANS_UNLIMITED\' | translate}}\n </span>\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CAPACITY -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n <!-- END CHAT TAB -->\n </div>\n </div>\n </div>\n</div>\n</div>\n'),a.put("app/staff/agent/view/view.voice.html",'<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_PROFILE\' | translate}} {{ \'APPLICATION_VOICE\' | translate}}</span>\n </div>\n </div>\n <div class="portlet-body">\n <form name="forms.voice" data-ng-submit="updateItem()" novalidate>\n\n <!-- START INTERNAL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.voice.internal.$touched || forms.voice.$submitted) && forms.voice.internal.$invalid}">\n <label class="control-label">{{\'APPLICATION_INTERNAL_NUMBER\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="internal" placeholder="{{\'APPLICATION_INTERNAL_NUMBER\' | translate}}" class="form-control" data-ng-model="agent.internal" required disabled/>\n <span data-ng-show="(forms.voice.internal.$touched || forms.voice.$submitted) && forms.voice.internal.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERNAL -->\n\n <!-- START TRANSPORT -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_TRANSPORT\' | translate}}</label>\n <ui-select multiple name="transport" ng-model="agent.transport" theme="bootstrap">\n <ui-select-match placeholder="Select transport...">{{$item}}</ui-select-match>\n <ui-select-choices repeat="transport in [\'udp\', \'tcp\', \'ws\', \'wss\'] | filter: $select.search">\n {{transport}}\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_VOICE_TRANSPORT\' | translate }}\n </span>\n </div>\n <!-- END TRANSPORT -->\n\n <!-- START HOST -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.voice.host.$touched || forms.voice.$submitted) && forms.voice.host.$invalid}">\n <label class="control-label">{{\'APPLICATION_HOST\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="host" placeholder="{{\'APPLICATION_HOST\' | translate}}" class="form-control" data-ng-model="agent.host" required/>\n <span class="help-block">\n {{ \'DESCRIPTION_VOICE_HOST\' | translate }}\n </span>\n <span data-ng-show="(forms.voice.host.$touched || forms.voice.$submitted) && forms.voice.host.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END HOST -->\n\n <!-- START NAT -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_NAT\' | translate}}</label>\n <ui-select multiple data-ng-model="agent.nat" name="nat" theme="bootstrap">\n <ui-select-match placeholder="{{ \'APPLICATION_SEARCH_FILTER\' | translate }}">{{$item}}</ui-select-match>\n <ui-select-choices repeat="nat in [\'yes\', \'no\', \'never\', \'route\', \'force_rport\', \'comedia\'] | filter: $select.search">\n {{nat}}\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_VOICE_NAT\' | translate }}\n </span>\n </div>\n <!-- END NAT -->\n\n <!-- START TYPE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.voice.type.$touched || forms.voice.$submitted) && forms.voice.type.$invalid}">\n <label class="control-label">{{\'APPLICATION_TYPE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="agent.type" name="type" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_SEARCH_FILTER\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="type in [\'friend\', \'user\', \'peer\'] | filter: $select.search">\n <div ng-bind-html="type | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_VOICE_TYPE\' | translate }}\n </span>\n <span data-ng-show="(forms.voice.type.$touched || forms.voice.$submitted) && forms.voice.type.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TYPE -->\n\n <!-- START CODEC -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_ALLOWED_CODECS\' | translate}}</label>\n <ui-select multiple ng-model="agent.allow" name="allow" theme="bootstrap" ng-disabled="disabled">\n <ui-select-match placeholder="Select codec...">{{$item}}</ui-select-match>\n <ui-select-choices repeat="allow in [\'g729\', \'ilbc\', \'gsm\', \'ulaw\', \'alaw\'] | filter: $select.search">\n {{allow}}\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_VOICE_CODEC\' | translate }}\n </span>\n </div>\n <!-- END CODEC -->\n\n <!-- START STATUS -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_CHANSPY\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="agent.chanspy"\n type="checkbox"\n name="auth"\n switch-active="{{ recordSwitch.isActive }}"\n switch-on-text="{{ recordSwitch.onText }}"\n switch-off-text="{{ recordSwitch.offText }}"\n switch-on-color="{{ recordSwitch.onColor }}"\n switch-off-color="{{ recordSwitch.offColor }}"\n switch-animate="{{ recordSwitch.animate }}"\n switch-size="{{ recordSwitch.size }}"\n switch-label="{{ recordSwitch.label }}"\n switch-icon="{{ recordSwitch.icon }}"\n switch-radio-off="{{ recordSwitch.radioOff }}"\n switch-label-width="{{ recordSwitch.labelWidth }}"\n switch-handle-width="{{ recordSwitch.handleWidth }}">\n </div>\n <!-- END STATUS -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/staff/agent/wizard/wizard-bulk.html",'<div class="col-md-12">\n <!-- BEGIN PAGE HEADER-->\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-people"></i>\n <a href="/agents/list">{{ \'APPLICATION_AGENTS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-options"></i>\n <a href="/agents/wizard">{{ \'APPLICATION_WIZARD\' | translate }}</a>\n </li>\n </ul>\n </div>\n <!-- END PAGE HEADER-->\n\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered" data-ng-init="getFirstFreeInternal(); item.amount = 2; item.startIndex = 0;">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-user font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_AGENT\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="createItems()">\n <wz-step title="{{\'APPLICATION_ACCOUNT\' | translate}}" canexit="exitValidation(forms.info.$valid)">\n <form name="forms.info" novalidate>\n\n <!-- START AMOUNT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.amount.$touched || forms.info.$submitted) && forms.info.amount.$invalid}">\n <label class="control-label">{{\'APPLICATION_AMOUNT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" name="amount" min="2" max="{{maxAmount}}" placeholder="{{\'APPLICATION_AMOUNT\' | translate}}" class="form-control" data-ng-model="item.amount" required>\n <span data-ng-show="(forms.info.amount.$touched || forms.info.$submitted) && forms.info.amount.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span class="help-block help-block-info">\n {{\'MESSAGE_STARTING_FROM_INTERNAL\' | translate}} <b>{{item.minInternal}}</b> {{\'MESSAGE_MAX_NUM_OF_BULK_AGENTS_IS\' | translate}} <b>{{maxAmount}}</b>\n </span>\n </div>\n <!-- END AMOUNT -->\n\n <!-- START START INDEX -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.startIndex.$touched || forms.info.$submitted) && forms.info.startIndex.$invalid}">\n <label class="control-label">{{\'APPLICATION_START_INDEX\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" name="startIndex" min="0" placeholder="{{\'APPLICATION_START_INDEX\' | translate}}" class="form-control" data-ng-model="item.startIndex" required>\n <span data-ng-show="(forms.info.startIndex.$touched || forms.info.$submitted) && forms.info.startIndex.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END START INDEX -->\n\n <!-- START MIN INTERNAL-->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.internal.$touched || forms.info.$submitted) && forms.info.minInternal.$invalid}">\n <label class="control-label">{{\'APPLICATION_MIN_INTERNAL\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" name="minInternal" min="0" placeholder="{{\'APPLICATION_MIN_INTERNAL\' | translate}}" class="form-control" data-ng-change="getAmount()" data-ng-model="item.minInternal" required>\n <span data-ng-show="(forms.info.minInternal.$touched || forms.info.$submitted) && forms.info.minInternal.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END MIN INTERNAL-->\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.fullname.$touched || forms.info.$submitted) && forms.info.fullname.$invalid}">\n <label class="control-label">{{\'APPLICATION_FULLNAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="fullname" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.fullname" required/>\n <span data-ng-show="(forms.info.fullname.$touched || forms.info.$submitted) && forms.info.fullname.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START USERNAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_USERNAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_USERNAME\' | translate}}" class="form-control" data-ng-model="item.name" data-ng-pattern="settings.patternName" required>\n <span data-ng-show="(forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_PATTERN_NAME\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n\n <!-- START EMAIL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.email.$touched || forms.info.$submitted) && forms.info.email.$invalid}">\n <label class="control-label">{{\'APPLICATION_EMAIL\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="email" name="email" placeholder="{{\'APPLICATION_EMAIL\' | translate}}" class="form-control" data-ng-model="item.email" required>\n <span data-ng-show="(forms.info.email.$touched || forms.info.$submitted) && forms.info.email.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.info.email.$touched || forms.info.$submitted) && forms.info.email.$error.email" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n </span>\n </div>\n <!-- END EMAIL -->\n\n <!-- START PASSWORD -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.password.$touched || forms.info.$submitted) && forms.info.password.$invalid}">\n <label class="control-label">{{\'APPLICATION_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="password" name="password" placeholder="{{\'APPLICATION_PASSWORD\' | translate}}" class="form-control" data-ng-model="item.password" data-ng-pattern="setting.securePassword ? settings.patternPassword : settings.patternPasswordLight" required/>\n <span class="help-block">\n {{setting.securePassword ? \'MESSAGE_PASSWORD_FORMAT\' : \'MESSAGE_PASSWORD_LIGTH_FORMAT\' | translate}}\n </span>\n <span data-ng-show="(forms.info.password.$touched || forms.info.$submitted) && forms.info.password.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.info.password.$touched || forms.info.$submitted) && forms.info.password.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n </span>\n </div>\n <!-- END PASSWORD -->\n\n <!-- START RE PASSWORD -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.rpassword.$touched || forms.info.$submitted) && forms.info.rpassword.$invalid}">\n <label class="control-label">{{\'APPLICATION_CONFIRM_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="password" name="rpassword" placeholder="{{\'APPLICATION_CONFIRM_PASSWORD\' | translate}}" class="form-control" data-ng-model="item.rpassword" nx-equal="item.password" required/>\n <span data-ng-show="(forms.info.rpassword.$touched || forms.info.$submitted) && forms.info.rpassword.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.info.rpassword.$touched || forms.info.$submitted) && forms.info.rpassword.$error.nxEqual" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_PASSWORD\' | translate}}.\n </span>\n </div>\n <!-- END RE PASSWORD -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" ng-click="next()"/>\n </form>\n </wz-step>\n\n <wz-step title="{{\'APPLICATION_VOICE\' | translate}}" canexit="exitValidation(forms.voice.$valid)">\n <form name="forms.voice" novalidate>\n\n <!-- START TRANSPORT -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_TRANSPORT\' | translate}}</label>\n <ui-select multiple name="transport" ng-model="item.transport" theme="bootstrap" ng-disabled="disabled">\n <ui-select-match placeholder="Select transport...">{{$item}}</ui-select-match>\n <ui-select-choices repeat="transport in [\'udp\', \'tcp\', \'ws\', \'wss\'] | filter: $select.search">\n {{transport}}\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_VOICE_TRANSPORT\' | translate }}\n </span>\n </div>\n <!-- END TRANSPORT -->\n\n <!-- START CODEC -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_ALLOWED_CODECS\' | translate}}</label>\n <ui-select multiple ng-model="item.allow" name="allow" theme="bootstrap" ng-disabled="disabled">\n <ui-select-match placeholder="Select codec...">{{$item}}</ui-select-match>\n <ui-select-choices repeat="allow in [\'g729\', \'ilbc\', \'gsm\', \'ulaw\', \'alaw\'] | filter: $select.search">\n {{allow}}\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_VOICE_CODEC\' | translate }}\n </span>\n </div>\n <!-- END CODEC -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" ng-click="next()"/>\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n </form>\n </wz-step>\n\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n <input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n </wz-step>\n </wizard>\n </div>\n </div>\n <!-- END PORTLET-->\n</div>\n'),a.put("app/staff/agent/wizard/wizard.html",'<div class="col-md-12">\n <!-- BEGIN PAGE HEADER-->\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-puzzle"></i>\n <a href="#">{{ \'APPLICATION_STAFF\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-people"></i>\n <a href="/staff/agents/list">{{ \'APPLICATION_AGENTS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-options"></i>\n <a href="/agents/wizard">{{ \'APPLICATION_WIZARD\' | translate }}</a>\n </li>\n </ul>\n </div>\n <!-- END PAGE HEADER-->\n\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered" data-ng-init="getFirstFreeInternal();">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-user font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_AGENT\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="createItem()">\n <wz-step title="{{\'APPLICATION_ACCOUNT\' | translate}}" canexit="exitValidation(forms.info.$valid)">\n <form name="forms.info" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.fullname.$touched || forms.info.$submitted) && forms.info.fullname.$invalid}">\n <label class="control-label">{{\'APPLICATION_FULLNAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="fullname" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.fullname" required/>\n <span data-ng-show="(forms.info.fullname.$touched || forms.info.$submitted) && forms.info.fullname.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START USERNAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_USERNAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_USERNAME\' | translate}}" class="form-control" data-ng-model="item.name" data-ng-pattern="settings.patternName" required>\n <span data-ng-show="(forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_PATTERN_NAME\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n\n <!-- START EMAIL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.email.$touched || forms.info.$submitted) && forms.info.email.$invalid}">\n <label class="control-label">{{\'APPLICATION_EMAIL\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="email" name="email" placeholder="{{\'APPLICATION_EMAIL\' | translate}}" class="form-control" data-ng-model="item.email" required>\n <span data-ng-show="(forms.info.email.$touched || forms.info.$submitted) && forms.info.email.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.info.email.$touched || forms.info.$submitted) && forms.info.email.$error.email" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n </span>\n </div>\n <!-- END EMAIL -->\n\n <!-- START PASSWORD -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.password.$touched || forms.info.$submitted) && forms.info.password.$invalid}">\n <label class="control-label">{{\'APPLICATION_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="password" name="password" placeholder="{{\'APPLICATION_PASSWORD\' | translate}}" class="form-control" data-ng-model="item.password" data-ng-pattern="setting.securePassword ? settings.patternPassword : settings.patternPasswordLight" required/>\n <span class="help-block">\n {{setting.securePassword ? \'MESSAGE_PASSWORD_FORMAT\' : \'MESSAGE_PASSWORD_LIGTH_FORMAT\' | translate}}\n </span>\n <span data-ng-show="(forms.info.password.$touched || forms.info.$submitted) && forms.info.password.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n </span>\n <span data-ng-show="(forms.info.password.$touched || forms.info.$submitted) && forms.info.password.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PASSWORD -->\n\n <!-- START RE PASSWORD -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.rpassword.$touched || forms.info.$submitted) && forms.info.rpassword.$invalid}">\n <label class="control-label">{{\'APPLICATION_CONFIRM_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="password" name="rpassword" placeholder="{{\'APPLICATION_CONFIRM_PASSWORD\' | translate}}" class="form-control" data-ng-model="item.rpassword" nx-equal="item.password" required/>\n <span data-ng-show="(forms.info.rpassword.$touched || forms.info.$submitted) && forms.info.rpassword.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.info.rpassword.$touched || forms.info.$submitted) && forms.info.rpassword.$error.nxEqual" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_PASSWORD\' | translate}}.\n </span>\n </div>\n <!-- END RE PASSWORD -->\n\n <!-- START INTERNAL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.internal.$touched || forms.info.$submitted) && forms.info.internal.$invalid}">\n <label class="control-label">{{\'APPLICATION_INTERNAL_NUMBER\' | translate}}<span class="required" aria-required="true">*</span></label>\n <div class="input-group">\n <input type="number" min="1" name="internal" placeholder="{{\'APPLICATION_INTERNAL_NUMBER\' | translate}}" class="form-control" data-ng-model="item.internal" data-ng-disabled="!item.internalEnabled" data-ng-required="item.internalEnabled"/>\n <span class="input-group-addon">\n <input type="checkbox" data-ng-model="item.internalEnabled">\n </span>\n </div>\n <span data-ng-show="(forms.info.internal.$touched || forms.info.$submitted) && forms.info.internal.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERNAL -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" ng-click="next()"/>\n </form>\n </wz-step>\n\n <wz-step title="{{\'APPLICATION_VOICE\' | translate}}" canexit="exitValidation(forms.voice.$valid)">\n <form name="forms.voice" novalidate>\n\n <!-- START TRANSPORT -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_TRANSPORT\' | translate}}</label>\n <ui-select multiple name="transport" ng-model="item.transport" theme="bootstrap" ng-disabled="disabled">\n <ui-select-match placeholder="Select transport...">{{$item}}</ui-select-match>\n <ui-select-choices repeat="transport in [\'udp\', \'tcp\', \'ws\', \'wss\'] | filter: $select.search">\n {{transport}}\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_VOICE_TRANSPORT\' | translate }}\n </span>\n </div>\n <!-- END TRANSPORT -->\n\n <!-- START CODEC -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_ALLOWED_CODECS\' | translate}}</label>\n <ui-select multiple ng-model="item.allow" name="allow" theme="bootstrap" ng-disabled="disabled">\n <ui-select-match placeholder="Select codec...">{{$item}}</ui-select-match>\n <ui-select-choices repeat="allow in [\'g729\', \'ilbc\', \'gsm\', \'ulaw\', \'alaw\'] | filter: $select.search">\n {{allow}}\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_VOICE_CODEC\' | translate }}\n </span>\n </div>\n <!-- END CODEC -->\n\n <!-- <div class="form-body" data-ng-init="initVoiceQueues()">\n <label class="control-label">{{ \'APPLICATION_QUEUES\' | translate}}</label>\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-queues-voice">\n </div>\n </div>\n </div> -->\n\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" ng-click="next()"/>\n </form>\n </wz-step>\n\n <!-- <wz-step title="{{\'APPLICATION_CHAT\' | translate}}">\n <form name="forms.chat">\n <div class="form-body" data-ng-init="initChatQueues()">\n <label class="control-label">{{ \'APPLICATION_QUEUES\' | translate}}</label>\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-queues-chat">\n </div>\n </div>\n </div>\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" ng-click="next()"/>\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n </form>\n </wz-step> -->\n\n <!-- <wz-step title="{{\'APPLICATION_MAIL\' | translate}}">\n <form name="forms.mail">\n <div class="form-body" data-ng-init="initMailQueues()">\n <label class="control-label">{{ \'APPLICATION_QUEUES\' | translate}}</label>\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-queues-mail">\n </div>\n </div>\n </div>\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" ng-click="next()"/>\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n </form>\n </wz-step> -->\n\n\n <!-- <wz-step title="{{\'APPLICATION_SMS\' | translate}}">\n <form name="forms.sms">\n <div class="form-body" data-ng-init="initSmsQueues()">\n <label class="control-label">{{ \'APPLICATION_QUEUES\' | translate}}</label>\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-queues-sms">\n </div>\n </div>\n </div>\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" ng-click="next()"/>\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n </form>\n </wz-step> -->\n\n <!-- <wz-step title="{{\'APPLICATION_FAX\' | translate}}">\n <form name="forms.fax">\n <div class="form-body" data-ng-init="initFaxQueues()">\n <label class="control-label">{{ \'APPLICATION_QUEUES\' | translate}}</label>\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-queues-fax">\n </div>\n </div>\n </div>\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" ng-click="next()"/>\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n </form>\n </wz-step> -->\n\n <!-- <wz-step title="{{\'APPLICATION_OPEN_CHANNEL\' | translate}}">\n <form name="forms.openchannel">\n <div class="form-body" data-ng-init="initOpenchannelQueues()">\n <label class="control-label">{{ \'APPLICATION_QUEUES\' | translate}}</label>\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-queues-openchannel">\n </div>\n </div>\n </div>\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" ng-click="next()"/>\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n </form>\n </wz-step> -->\n\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n <input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n </wz-step>\n </wizard>\n </div>\n </div>\n <!-- END PORTLET-->\n</div>\n'), +a.put("app/staff/team/list/create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_TEAM\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.name.$touched || form.$submitted) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="ok()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/staff/team/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-puzzle"></i>\n <a href="#">{{ \'APPLICATION_STAFF\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-shield"></i>\n <a href="/staff/teams/list">{{ \'APPLICATION_TEAMS\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-shield font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_TEAMS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <a class="btn green-jungle" href="#" data-ng-click="createItem()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_TEAM\' | translate }}\n </a>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/staff/team/view/view.agents.html",'<div class="row" data-ng-init="initAgents()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_AGENTS\' | translate}}</span>\n </div>\n </div>\n <div class="portlet-body">\n <!-- GENERAL TAB -->\n <!-- BEGIN PORTLET-->\n <!-- BEGIN FORM-->\n <form action="index.html" class="form-horizontal form-row-seperated">\n <div class="form-body">\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-team">\n </div>\n </div>\n </div>\n </form>\n <!-- END FORM-->\n <!-- END PORTLET-->\n <!-- END GENERAL TAB -->\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/staff/team/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-puzzle"></i>\n <a href="#">{{ \'APPLICATION_STAFF\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-shield"></i>\n <a href="/staff/teams/list">{{ \'APPLICATION_TEAMS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <a href="#">{{team.name}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img ng-src="assets/images/media/team.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{team.name}}\n </div>\n\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.staff.teams.view.settings\')}">\n <a data-ng-href="/staff/teams/view/{{team.id}}/settings">\n <i class="icon-settings"></i>\n {{ \'APPLICATION_SETTINGS\' | translate}} </a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.staff.teams.view.agents\')}">\n <a data-ng-href="/staff/teams/view/{{team.id}}/agents">\n <i class="icon-people"></i>\n {{ \'APPLICATION_AGENTS\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content"></div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/staff/team/view/view.settings.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_PROFILE\' | translate}} {{ \'APPLICATION_ACCOUNT\' | translate}}</span>\n </div>\n </div>\n\n <div class="portlet-body">\n <!-- PERSONAL INFO TAB -->\n <div>\n\n <form name="forms.info" data-ng-submit="updateItem()" novalidate>\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="team.name" required/>\n <span data-ng-show="(forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="team.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END PERSONAL INFO TAB -->\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/staff/telephone/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-puzzle"></i>\n <a href="#">{{ \'APPLICATION_STAFF\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-phone"></i>\n <a href="/staff/telephones/list">{{ \'APPLICATION_TELEPHONES\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-phone font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_TELEPHONES\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <a class="btn green-jungle" href="/staff/telephones/wizard" data-toggle="dropdown">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_TELEPHONE\' | translate }}\n </a>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/staff/telephone/view/view.account.html",'<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_ACCOUNT\' | translate}}</span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_ACCOUNT\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-ng-show="Auth.isAdmin() || item.id === getCurrentTelephone().id" data-target="#tab_1_2" data-toggle="tab">{{ \'APPLICATION_CHANGE_PASSWORD\' | translate}}</a>\n </li>\n </ul>\n </div>\n\n <div class="portlet-body">\n <div class="tab-content">\n <!-- PERSONAL INFO TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.info" data-ng-submit="forms.info.$valid && updateItem()" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.fullname.$touched || forms.info.$submitted) && forms.info.fullname.$invalid}">\n <label class="control-label">{{\'APPLICATION_FULLNAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="fullname" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.fullname" required/>\n <span data-ng-show="(forms.info.fullname.$touched || forms.info.$submitted) && forms.info.fullname.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START USERNAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_USERNAME\' | translate}}</label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_USERNAME\' | translate}}" class="form-control" data-ng-model="item.name" disabled/>\n </div>\n <!-- END USERNAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END PERSONAL INFO TAB -->\n\n <!-- CHANGE PASSWORD TAB -->\n <div class="tab-pane" id="tab_1_2" data-ng-show="Auth.isAdmin() || item.id === getCurrentTelephone().id">\n <form name="forms.changePwd" data-ng-submit="forms.changePwd.$valid && updatePassword()" novalidate>\n <!-- START CURRENT PWD -->\n <!-- <div class="form-group" data-ng-if="!Auth.isAdmin()" data-ng-class="{\'has-error\': (forms.changePwd.current_pwd.$touched || forms.changePwd.$submitted) && forms.changePwd.current_pwd.$invalid}">\n <label class="control-label">{{\'APPLICATION_CURRENT_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="password" name="current_pwd" placeholder="{{\'APPLICATION_CURRENT_PASSWORD\' | translate}}" class="form-control" data-ng-model="item.currentPwd" required/>\n <span data-ng-show="(forms.changePwd.current_pwd.$touched || forms.changePwd.$submitted) && forms.changePwd.current_pwd.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div> -->\n <!-- END CURRENT PWD -->\n <!-- START NEW PWD -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.changePwd.new_pwd.$touched || forms.changePwd.$submitted) && forms.changePwd.new_pwd.$invalid}">\n <label class="control-label">{{\'APPLICATION_NEW_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="password" name="new_pwd" placeholder="{{\'APPLICATION_NEW_PASSWORD\' | translate}}" class="form-control" data-ng-model="item.password" data-ng-pattern="settings.patternPassword" required/>\n <span class="help-block">\n {{setting.securePassword ? \'MESSAGE_PASSWORD_FORMAT\' : \'MESSAGE_PASSWORD_LIGTH_FORMAT\' | translate}}\n </span>\n <span data-ng-show="(forms.changePwd.new_pwd.$touched || forms.changePwd.$submitted) && forms.changePwd.new_pwd.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NEW PWD -->\n <!-- START RE-NEW PWD -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.changePwd.re_new_pwd.$touched || forms.changePwd.$submitted) && forms.changePwd.re_new_pwd.$invalid}">\n <label class="control-label">{{\'APPLICATION_RE_TYPE_NEW_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="password" name="re_new_pwd" placeholder="{{\'APPLICATION_RE_TYPE_NEW_PASSWORD\' | translate}}" class="form-control" data-ng-model="item.reNewPwd" nx-equal="item.password" required/>\n <span data-ng-show="(forms.changePwd.new_pwd.$touched || forms.changePwd.$submitted) && forms.changePwd.new_pwd.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END RE-NEW PWD -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END CHANGE PASSWORD TAB -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/staff/telephone/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-puzzle"></i>\n <a href="#">{{ \'APPLICATION_STAFF\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-phone"></i>\n <a href="/staff/telephones/list">{{ \'APPLICATION_TELEPHONES\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <a href="#">{{item.fullname}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR TELEPHONEPIC -->\n <div class="profile-userpic">\n <img data-ng-src="assets/images/media/telephone.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR TELEPHONEPIC -->\n <!-- SIDEBAR TELEPHONE TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{item.fullname}}\n </div>\n <div class="profile-usertitle-job">\n {{item.role}}\n </div>\n </div>\n <!-- END SIDEBAR TELEPHONE TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.staff.telephones.view.account\')}">\n <a data-ng-href="/staff/telephones/view/{{item.id}}/account">\n <i class="icon-phone"></i>\n {{ \'APPLICATION_ACCOUNT\' | translate}} </a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.staff.telephones.view.voice\')}" data-ng-show="Auth.isAdmin()">\n <a data-ng-href="/staff/telephones/view/{{item.id}}/voice">\n <i class="icon-earphones-alt"></i>\n {{ \'APPLICATION_VOICE\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/staff/telephone/view/view.voice.html",'<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_ACCOUNT\' | translate}} {{ \'APPLICATION_VOICE\' | translate}}</span>\n </div>\n </div>\n <div class="portlet-body">\n <form name="forms.info" data-ng-submit="updateItem()" novalidate>\n\n <!-- START INTERNAL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.internal.$touched || forms.info.$submitted) && forms.info.internal.$invalid}">\n <label class="control-label">{{\'APPLICATION_INTERNAL_NUMBER\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" min="1" name="internal" placeholder="{{\'APPLICATION_INTERNAL_NUMBER\' | translate}}" class="form-control" data-ng-model="item.internal" required readonly/>\n <span data-ng-show="(forms.info.internal.$touched || forms.info.$submitted) && forms.info.internal.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.info.internal.$touched || forms.info.$submitted) && forms.info.internal.$error.ngRemoteValidate" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_EXIST_INTERNAL\' | translate}}.\n </span>\n </div>\n <!-- END INTERNAL -->\n\n <!-- START TRANSPORT -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_TRANSPORT\' | translate}}</label>\n <ui-select multiple name="transport" ng-model="item.transport" theme="bootstrap" ng-disabled="disabled">\n <ui-select-match placeholder="Select transport...">{{$item}}</ui-select-match>\n <ui-select-choices repeat="transport in [\'udp\', \'tcp\', \'ws\', \'wss\'] | filter: $select.search">\n {{transport}}\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_VOICE_TRANSPORT\' | translate }}\n </span>\n </div>\n <!-- END TRANSPORT -->\n\n <!-- START CODEC -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_ALLOWED_CODECS\' | translate}}</label>\n <ui-select multiple ng-model="item.allow" name="allow" theme="bootstrap" ng-disabled="disabled">\n <ui-select-match placeholder="Select codec...">{{$item}}</ui-select-match>\n'+" <ui-select-choices repeat=\"allow in ['g729', 'ilbc', 'gsm', 'ulaw', 'alaw'] | filter: $select.search\">\n {{allow}}\n </ui-select-choices>\n </ui-select>\n <span class=\"help-block\">\n {{ 'DESCRIPTION_VOICE_CODEC' | translate }}\n </span>\n </div>\n <!-- END CODEC -->\n\n <input class=\"btn green-haze\" type=\"submit\" value=\"{{'APPLICATION_UPDATE' | translate}}\"/>\n </form>\n </div>\n </div>\n </div>\n</div>\n"),a.put("app/staff/telephone/wizard/wizard.html",'<div class="col-md-12">\n <!-- BEGIN PAGE HEADER-->\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-puzzle"></i>\n <a href="#">{{ \'APPLICATION_STAFF\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-phone"></i>\n <a href="/staff/telephones/list">{{ \'APPLICATION_TELEPHONES\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-options"></i>\n <a href="/staff/telephones/wizard">{{ \'APPLICATION_WIZARD\' | translate }}</a>\n </li>\n </ul>\n </div>\n <!-- END PAGE HEADER-->\n\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered" data-ng-init="getFirstFreeInternal();">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-phone font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_TELEPHONE\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="createItem()">\n <wz-step title="{{\'APPLICATION_ACCOUNT\' | translate}}" canexit="exitValidation(forms.info.$valid)">\n <form name="forms.info" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.fullname.$touched || forms.info.$submitted) && forms.info.fullname.$invalid}">\n <label class="control-label">{{\'APPLICATION_FULLNAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="fullname" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.fullname" required/>\n <span data-ng-show="(forms.info.fullname.$touched || forms.info.$submitted) && forms.info.fullname.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START USERNAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_USERNAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_USERNAME\' | translate}}" class="form-control" data-ng-model="item.name" ata-ng-pattern="settings.patternName" required />\n <span data-ng-show="(forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$error.ngRemoteValidate" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_EXIST_USERNAME\' | translate}}.\n </span>\n <span data-ng-show="(forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_PATTERN_NAME\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n\n <!-- START PASSWORD -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.password.$touched || forms.info.$submitted) && forms.info.password.$invalid}">\n <label class="control-label">{{\'APPLICATION_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="password" name="password" placeholder="{{\'APPLICATION_PASSWORD\' | translate}}" class="form-control" data-ng-model="item.password" data-ng-pattern="setting.securePassword ? settings.patternPassword : settings.patternPasswordLight" required/>\n <span class="help-block">\n {{setting.securePassword ? \'MESSAGE_PASSWORD_FORMAT\' : \'MESSAGE_PASSWORD_LIGTH_FORMAT\' | translate}}\n </span>\n <span data-ng-show="(forms.info.password.$touched || forms.info.$submitted) && forms.info.password.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n </span>\n <span data-ng-show="(forms.info.password.$touched || forms.info.$submitted) && forms.info.password.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PASSWORD -->\n\n <!-- START RE PASSWORD -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.rpassword.$touched || forms.info.$submitted) && forms.info.rpassword.$invalid}">\n <label class="control-label">{{\'APPLICATION_CONFIRM_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="password" name="rpassword" placeholder="{{\'APPLICATION_CONFIRM_PASSWORD\' | translate}}" class="form-control" data-ng-model="item.rpassword" nx-equal="item.password" required/>\n <span data-ng-show="(forms.info.rpassword.$touched || forms.info.$submitted) && forms.info.rpassword.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.info.rpassword.$touched || forms.info.$submitted) && forms.info.rpassword.$error.nxEqual" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_PASSWORD\' | translate}}.\n </span>\n </div>\n <!-- END RE PASSWORD -->\n\n <!-- START INTERNAL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.internal.$touched || forms.info.$submitted) && forms.info.internal.$invalid}">\n <label class="control-label">{{\'APPLICATION_INTERNAL_NUMBER\' | translate}}<span class="required" aria-required="true">*</span></label>\n <div class="input-group">\n <input type="number" min="1" name="internal" placeholder="{{\'APPLICATION_INTERNAL_NUMBER\' | translate}}" class="form-control" data-ng-model="item.internal" data-ng-disabled="!item.internalEnabled" data-ng-required="item.internalEnabled"/>\n <span class="input-group-addon">\n <input type="checkbox" data-ng-model="item.internalEnabled">\n </span>\n </div>\n <span data-ng-show="(forms.info.internal.$touched || forms.info.$submitted) && forms.info.internal.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERNAL -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" ng-click="next()"/>\n </form>\n </wz-step>\n\n <wz-step title="{{\'APPLICATION_VOICE\' | translate}}" canexit="exitValidation(forms.voice.$valid)">\n <form name="forms.voice" novalidate>\n\n <!-- START TRANSPORT -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_TRANSPORT\' | translate}}</label>\n <ui-select multiple name="transport" ng-model="item.transport" theme="bootstrap" ng-disabled="disabled">\n <ui-select-match placeholder="Select transport...">{{$item}}</ui-select-match>\n <ui-select-choices repeat="transport in [\'udp\', \'tcp\', \'ws\', \'wss\'] | filter: $select.search">\n {{transport}}\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_VOICE_TRANSPORT\' | translate }}\n </span>\n </div>\n <!-- END TRANSPORT -->\n\n <!-- START CODEC -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_ALLOWED_CODECS\' | translate}}</label>\n <ui-select multiple ng-model="item.allow" name="allow" theme="bootstrap" ng-disabled="disabled">\n <ui-select-match placeholder="Select codec...">{{$item}}</ui-select-match>\n <ui-select-choices repeat="allow in [\'g729\', \'ilbc\', \'gsm\', \'ulaw\', \'alaw\'] | filter: $select.search">\n {{allow}}\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_VOICE_CODEC\' | translate }}\n </span>\n </div>\n <!-- END CODEC -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" ng-click="next()"/>\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n </form>\n </wz-step>\n\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n <input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n </wz-step>\n </wizard>\n </div>\n </div>\n <!-- END PORTLET-->\n</div>\n'), +a.put("app/staff/user/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-puzzle"></i>\n <a href="#">{{ \'APPLICATION_STAFF\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-eye"></i>\n <a href="#">{{ \'APPLICATION_USERS\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-eye font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_USERS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <a class="btn green-jungle" href="/staff/users/wizard" data-toggle="dropdown">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_USER\' | translate }}\n </a>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/staff/user/view/view.account.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_PROFILE\' | translate}} {{ \'APPLICATION_ACCOUNT\' | translate}}</span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_PERSONAL_INFO\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_2" data-toggle="tab">{{ \'APPLICATION_CHANGE_AVATAR\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-ng-show="Auth.isAdmin() || user.id === getCurrentUser().id" data-target="#tab_1_3" data-toggle="tab">{{ \'APPLICATION_CHANGE_PASSWORD\' | translate}}</a>\n </li>\n </ul>\n </div>\n\n <div class="portlet-body">\n <div class="tab-content">\n <!-- PERSONAL INFO TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.info" data-ng-submit="updateItem()" novalidate>\n\n <!-- START ROLE -->\n <div class="form-group" data-ng-if="Auth.getCurrentUser().role === \'admin\' && Auth.getCurrentUser().id !== user.id">\n <label class="control-label">{{ \'APPLICATION_ROLE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select name="role" data-ng-model="user.role" theme="bootstrap" required>\n <ui-select-match placeholder="Select role...">{{$select.selected | uppercase}}</ui-select-match>\n <ui-select-choices repeat="role in [\'user\', \'admin\'] | filter: $select.search">\n {{role | uppercase}}\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END ROLE -->\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.fullname.$touched || forms.info.$submitted) && forms.info.fullname.$invalid}">\n <label class="control-label">{{\'APPLICATION_FULLNAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="fullname" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="user.fullname" required/>\n <span data-ng-show="(forms.info.fullname.$touched || forms.info.$submitted) && forms.info.fullname.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START USERNAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_USERNAME\' | translate}}</label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_USERNAME\' | translate}}" class="form-control" data-ng-model="user.name" disabled/>\n </div>\n <!-- END USERNAME -->\n\n <!-- START EMAIL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.email.$touched || forms.info.$submitted) && forms.info.email.$invalid}">\n <label class="control-label">{{\'APPLICATION_EMAIL\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="email" name="email" placeholder="{{\'APPLICATION_EMAIL\' | translate}}" class="form-control" data-ng-model="user.email" required/>\n <span data-ng-show="(forms.info.email.$touched || forms.info.$submitted) && forms.info.email.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.info.email.$touched || forms.info.$submitted) && forms.info.email.$error.email" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n </span>\n </div>\n <!-- END EMAIL -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="user.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END PERSONAL INFO TAB -->\n\n <!-- CHANGE AVATAR TAB -->\n <div class="tab-pane" id="tab_1_2">\n <form action="#" role="form">\n <div class="form-group">\n <div class="fileinput fileinput-new" data-provides="fileinput">\n <div class="fileinput-new thumbnail" style="width: 200px; height: 150px;">\n <img ng-src="assets/images/media/noProfileImage.png" alt=""/>\n </div>\n <div class="fileinput-preview fileinput-exists thumbnail" style="max-width: 200px; max-height: 150px;">\n </div>\n <div>\n <span class="btn default btn-file" data-ng-show="!uploader.queue[0]">\n <span> {{ \'APPLICATION_SELECT_IMAGE\' | translate }} </span>\n <input type="file" nv-file-select="" uploader="uploader" /><br/>\n </span>\n <button type="button" class="btn default" data-ng-show="uploader.queue[0]" data-dismiss="fileinput" ng-click="uploader.queue[0].remove()">\n <span> {{ \'APPLICATION_REMOVE\' | translate }} </span>\n </button>\n <button type="button" class="btn green-haze" data-ng-show="uploader.queue[0]" data-ng-click="uploader.queue[0].upload()" ng-disabled="uploader.queue[0].isReady || uploader.queue[0].isUploading || uploader.queue[0].isSuccess">\n <span> {{ \'APPLICATION_CONFIRM\' | translate }} </span>\n </button>\n </div>\n <p>\n </br> {{ \'MESSAGE_SUPPORTED_FORMATS\' | translate }} <b>jpg, png, jpeg</b>.\n </p>\n </div>\n </div>\n </form>\n <div class="row">\n <div class="col-md-2">\n <table class="table" border="0">\n <tbody>\n <tr data-ng-repeat="item in uploader.queue">\n <td style="border-top-style:none">\n <strong>\n {{ item.file.name }}\n </strong>\n </td>\n <td data-ng-show="uploader.isHTML5" nowrap style="border-top-style:none">\n {{ item.file.size/1024/1024|number:2 }} MB\n </td>\n <td nowrap style="border-top-style:none">\n <button type="button" class="btn btn-danger btn-xs" data-ng-click="item.remove()">\n <span class="glyphicon glyphicon-trash"></span> Remove\n </button>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n </div>\n <!-- END CHANGE AVATAR TAB -->\n <!-- CHANGE PASSWORD TAB -->\n <div class="tab-pane" id="tab_1_3" data-ng-show="Auth.isAdmin() || user.id === getCurrentUser().id">\n <form name="forms.changePwd" data-ng-submit="forms.changePwd.$valid && updatePassword()" novalidate>\n <!-- START CURRENT PWD -->\n <div class="form-group" data-ng-if="!Auth.isAdmin()" data-ng-class="{\'has-error\': (forms.changePwd.current_pwd.$touched || forms.changePwd.$submitted) && forms.changePwd.current_pwd.$invalid}">\n <label class="control-label">{{\'APPLICATION_CURRENT_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="password" name="current_pwd" placeholder="{{\'APPLICATION_CURRENT_PASSWORD\' | translate}}" class="form-control" data-ng-model="user.currentPwd" required/>\n <span data-ng-show="(forms.changePwd.current_pwd.$touched || forms.changePwd.$submitted) && forms.changePwd.current_pwd.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CURRENT PWD -->\n <!-- START NEW PWD -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.changePwd.new_pwd.$touched || forms.changePwd.$submitted) && forms.changePwd.new_pwd.$invalid}">\n <label class="control-label">{{\'APPLICATION_NEW_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="password" name="new_pwd" placeholder="{{\'APPLICATION_NEW_PASSWORD\' | translate}}" class="form-control" data-ng-model="user.newPwd" data-ng-pattern="setting.securePassword ? settings.patternPassword : settings.patternPasswordLight" required/>\n <span class="help-block">\n {{setting.securePassword ? \'MESSAGE_PASSWORD_FORMAT\' : \'MESSAGE_PASSWORD_LIGTH_FORMAT\' | translate}}\n </span>\n <span data-ng-show="(forms.changePwd.current_pwd.$touched || forms.info.$submitted) && forms.changePwd.current_pwd.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n </span>\n <span data-ng-show="(forms.changePwd.new_pwd.$touched || forms.changePwd.$submitted) && forms.changePwd.new_pwd.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NEW PWD -->\n <!-- START RE-NEW PWD -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.changePwd.re_new_pwd.$touched || forms.changePwd.$submitted) && forms.changePwd.re_new_pwd.$invalid}">\n <label class="control-label">{{\'APPLICATION_RE_TYPE_NEW_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="password" name="re_new_pwd" placeholder="{{\'APPLICATION_RE_TYPE_NEW_PASSWORD\' | translate}}" class="form-control" data-ng-model="user.reNewPwd" nx-equal="user.newPwd" required/>\n <span data-ng-show="(forms.changePwd.new_pwd.$touched || forms.changePwd.$submitted) && forms.changePwd.new_pwd.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END RE-NEW PWD -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END CHANGE PASSWORD TAB -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/staff/user/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-puzzle"></i>\n <a href="#">{{ \'APPLICATION_STAFF\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-eye"></i>\n <a href="/staff/users/list">{{ \'APPLICATION_USERS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <a href="#">{{user.fullname}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-userpic">\n <img ng-src="api/users/avatar/{{user.userpic ? user.userpic : \'unknown_avatar\'}}" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{user.fullname}}\n </div>\n <div class="profile-usertitle-job">\n {{user.role}}\n </div>\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.staff.users.view.account\')}">\n <a data-ng-href="/staff/users/view/{{user.id}}/account">\n <i class="icon-user"></i>\n {{ \'APPLICATION_ACCOUNT\' | translate}}\n </a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.staff.users.view.voice\')}" data-ng-show="Auth.isAdmin()">\n <a data-ng-href="/staff/users/view/{{user.id}}/voice">\n <i class="icon-earphones-alt"></i>\n {{ \'APPLICATION_VOICE\' | translate}}\n </a>\n </li>\n <li data-ng-class="{active: $state.includes(\'main.staff.users.view.permit\')}" data-ng-show="Auth.isAdmin() && user.role === \'user\'">\n <a data-ng-href="/staff/users/view/{{user.id}}/permit/voice">\n <i class="icon-key"></i>\n {{ \'APPLICATION_PERMITS\' | translate}}\n </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/staff/user/view/view.permit.chat.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12" data-ng-init="initChatQueues()">\n <!-- BEGIN FORM-->\n <form action="#" class="form-horizontal form-row-seperated">\n <div class="form-body">\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-permit">\n </div>\n </div>\n </div>\n </form>\n <!-- END FORM-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/staff/user/view/view.permit.fax.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12" data-ng-init="initFaxQueues()">\n <!-- BEGIN FORM-->\n <form action="#" class="form-horizontal form-row-seperated">\n <div class="form-body">\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-permit">\n </div>\n </div>\n </div>\n </form>\n <!-- END FORM-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/staff/user/view/view.permit.html","<!-- BEGIN PAGE CONTENT-->\n<div class=\"row\">\n <div class=\"col-md-12\">\n <div>\n <nav class=\"navbar navbar-default\" role=\"navigation\">\n <div class=\"collapse navbar-collapse\">\n <ul class=\"nav navbar-nav\">\n <li data-ng-class=\"{'active': $state.is('main.staff.users.view.permit.voice')}\">\n <a href=\"/staff/users/view/{{user.id}}/permit/voice\">\n <i class=\"icon-earphones-alt\"></i> {{'APPLICATION_VOICE' | translate}}\n </a>\n </li>\n <li data-ng-class=\"{'active': $state.is('main.staff.users.view.permit.chat'),'disabled-link':!license.chat}\" data-ng-show=\"Auth.isAdmin() || userModules[8]\">\n <a href=\"{{license.chat ? '/staff/users/view/'+user.id+'/permit/chat' : 'javascript:;'}}\" class=\"disable-target\">\n <i class=\"icon-bubble\"></i> {{'APPLICATION_CHAT' | translate}}\n </a>\n </li>\n <li data-ng-class=\"{'active': $state.is('main.staff.users.view.permit.mail'),'disabled-link':!license.mail}\" data-ng-show=\"Auth.isAdmin() || userModules[9]\">\n <a href=\"{{license.mail ? '/staff/users/view/'+user.id+'/permit/mail' : 'javascript:;'}}\" class=\"disable-target\">\n <i class=\"icon-envelope\"></i>{{'APPLICATION_MAIL' | translate}}\n </a>\n </li>\n <li data-ng-class=\"{'active': $state.is('main.staff.users.view.permit.fax'),'disabled-link':!license.fax}\" data-ng-show=\"Auth.isAdmin() || userModules[10]\">\n <a href=\"{{license.fax ? '/staff/users/view/'+user.id+'/permit/fax' : 'javascript:;'}}\" class=\"disable-target\">\n <i class=\"fa fa-fax\"></i> {{'APPLICATION_FAX' | translate}}\n </a>\n </li>\n <li data-ng-class=\"{'active': $state.is('main.staff.users.view.permit.sms'),'disabled-link':!license.messaging}\" data-ng-show=\"Auth.isAdmin() || userModules[11]\">\n <a href=\"{{license.messaging ? '/staff/users/view/'+user.id+'/permit/sms' : 'javascript:;'}}\" class=\"disable-target\">\n <i class=\"glyphicon glyphicon-comment\"></i> {{'APPLICATION_SMS' | translate}}\n </a>\n </li>\n <li data-ng-class=\"{'active': $state.is('main.staff.users.view.permit.openchannel'),'disabled-link':!license.openchannel}\" data-ng-show=\"Auth.isAdmin() || userModules[20]\">\n <a href=\"{{license.openchannel ? '/staff/users/view/'+user.id+'/permit/openchannel' : 'javascript:;'}}\" class=\"disable-target\">\n <i class=\"icon-globe\"></i> {{'APPLICATION_OPEN_CHANNEL' | translate}}\n </a>\n </li>\n <li data-ng-class=\"{'active': $state.is('main.staff.users.view.permit.modules')}\" data-ng-if=\"user.role !== 'admin'\">\n <a href=\"/staff/users/view/{{user.id}}/permit/modules\">\n <i class=\"icon-menu\"></i> {{'APPLICATION_MODULES' | translate}}\n </a>\n </li>\n </ul>\n </div>\n </nav>\n </div>\n <div ui-view></div>\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n"),a.put("app/staff/user/view/view.permit.mail.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12" data-ng-init="initMailQueues()">\n <!-- BEGIN FORM-->\n <form action="#" class="form-horizontal form-row-seperated">\n <div class="form-body">\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-permit">\n </div>\n </div>\n </div>\n </form>\n <!-- END FORM-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/staff/user/view/view.permit.modules.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row left-margin" data-ng-init="getModules()">\n <div data-ng-repeat="module in modules" data-ng-if="!module.ModuleId && ((module.id === 8 && license.chat) || (module.id === 9 && license.mail) || (module.id === 10 && license.fax) || (module.id === 11 && license.messaging) || (module.id === 20 && license.openchannel) || !_.includes([8,9,10,11,20],module.id))">\n <div class="form-group" data-ng-class="{\'left-margin-40\':module.ModuleId}">\n <span data-ng-if="module.ModuleId">└──</span> <input\n bs-switch\n class="form-control"\n ng-model="module.status"\n type="checkbox"\n data-ng-change="updatePermissions(module)"\n switch-active="{{ moduleSwitch.isActive }}"\n switch-on-text="{{ moduleSwitch.onText }}"\n switch-off-text="{{ moduleSwitch.offText }}"\n switch-on-color="{{ moduleSwitch.onColor }}"\n switch-off-color="{{ moduleSwitch.offColor }}"\n switch-animate="{{ moduleSwitch.animate }}"\n switch-size="{{ moduleSwitch.size }}"\n switch-label="{{ moduleSwitch.label }}"\n switch-icon="{{ moduleSwitch.icon }}"\n switch-radio-off="{{ moduleSwitch.radioOff }}"\n switch-label-width="{{ moduleSwitch.labelWidth }}"\n switch-handle-width="{{ moduleSwitch.handleWidth }}">\n <label class="control-label">{{module.title | translate | trusted}}</label>\n </div>\n <div ng-slide-down="module.status" lazy-render duration="0.5">\n <div data-ng-repeat="subModule in module.SubModules" data-ng-if="(subModule.id === 8 && license.chat) || (subModule.id === 9 && license.mail) || (subModule.id === 10 && license.fax) || (subModule.id === 11 && license.messaging) || (subModule.id === 20 && license.openchannel) || !_.includes([8,9,10,11,20],subModule.id)">\n <div class="form-group" data-ng-class="{\'left-margin-40\':module.ModuleId}">\n <span>└──</span> <input\n bs-switch\n class="form-control"\n ng-model="subModule.status"\n type="checkbox"\n data-ng-change="updatePermissions(subModule)"\n switch-active="{{ moduleSwitch.isActive }}"\n switch-on-text="{{ moduleSwitch.onText }}"\n switch-off-text="{{ moduleSwitch.offText }}"\n switch-on-color="{{ moduleSwitch.onColor }}"\n switch-off-color="{{ moduleSwitch.offColor }}"\n switch-animate="{{ moduleSwitch.animate }}"\n switch-size="{{ moduleSwitch.size }}"\n switch-label="{{ moduleSwitch.label }}"\n switch-icon="{{ moduleSwitch.icon }}"\n switch-radio-off="{{ moduleSwitch.radioOff }}"\n switch-label-width="{{ moduleSwitch.labelWidth }}"\n switch-handle-width="{{ moduleSwitch.handleWidth }}">\n <label class="control-label">{{subModule.title | translate}}</label>\n </div>\n <div ng-slide-down="subModule.status" lazy-render duration="0.5">\n <div data-ng-repeat="subModule2 in subModule.SubModules" class="form-group" data-ng-class="{\'left-margin-40\':module.ModuleId}">\n <span style="margin-left:40px">└──</span> <input\n bs-switch\n class="form-control"\n ng-model="subModule2.status"\n type="checkbox"\n data-ng-change="updatePermissions(subModule2)"\n switch-active="{{ moduleSwitch.isActive }}"\n switch-on-text="{{ moduleSwitch.onText }}"\n switch-off-text="{{ moduleSwitch.offText }}"\n switch-on-color="{{ moduleSwitch.onColor }}"\n switch-off-color="{{ moduleSwitch.offColor }}"\n switch-animate="{{ moduleSwitch.animate }}"\n switch-size="{{ moduleSwitch.size }}"\n switch-label="{{ moduleSwitch.label }}"\n switch-icon="{{ moduleSwitch.icon }}"\n switch-radio-off="{{ moduleSwitch.radioOff }}"\n switch-label-width="{{ moduleSwitch.labelWidth }}"\n switch-handle-width="{{ moduleSwitch.handleWidth }}">\n <label class="control-label">{{subModule2.title | translate}}</label>\n </div>\n </div>\n </div>\n </div>\n </div>\n <!-- END PAGE CONTENT-->\n'),a.put("app/staff/user/view/view.permit.openchannel.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12" data-ng-init="initOpenchannelQueues()">\n <!-- BEGIN FORM-->\n <form action="#" class="form-horizontal form-row-seperated">\n <div class="form-body">\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-permit">\n </div>\n </div>\n </div>\n </form>\n <!-- END FORM-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/staff/user/view/view.permit.sms.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12" data-ng-init="initSmsQueues()">\n <!-- BEGIN FORM-->\n <form action="#" class="form-horizontal form-row-seperated">\n <div class="form-body">\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-permit">\n </div>\n </div>\n </div>\n </form>\n <!-- END FORM-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/staff/user/view/view.permit.voice.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12" data-ng-init="initVoiceQueues()">\n <!-- BEGIN FORM-->\n <form action="#" class="form-horizontal form-row-seperated">\n <div class="form-body">\n <div class="form-group last">\n <div class="col-md-12" id="multi-select-permit">\n </div>\n </div>\n </div>\n </form>\n <!-- END FORM-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/staff/user/view/view.voice.html",'<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_ACCOUNT\' | translate}} {{ \'APPLICATION_VOICE\' | translate}}</span>\n </div>\n </div>\n <div class="portlet-body">\n <form name="forms.info" data-ng-submit="updateItem()" novalidate>\n\n <!-- START INTERNAL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.internal.$touched || forms.info.$submitted) && forms.info.internal.$invalid}">\n <label class="control-label">{{\'APPLICATION_INTERNAL_NUMBER\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="number" min="1" name="internal" placeholder="{{\'APPLICATION_INTERNAL_NUMBER\' | translate}}" class="form-control" data-ng-model="user.internal" required readonly/>\n <span data-ng-show="(forms.info.internal.$touched || forms.info.$submitted) && forms.info.internal.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.info.internal.$touched || forms.info.$submitted) && forms.info.internal.$error.ngRemoteValidate" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_EXIST_INTERNAL\' | translate}}.\n </span>\n </div>\n <!-- END INTERNAL -->\n\n <!-- START TRANSPORT -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_TRANSPORT\' | translate}}</label>\n <ui-select multiple name="transport" ng-model="user.transport" theme="bootstrap" ng-disabled="disabled">\n <ui-select-match placeholder="Select transport...">{{$item}}</ui-select-match>\n <ui-select-choices repeat="transport in [\'udp\', \'tcp\', \'ws\', \'wss\'] | filter: $select.search">\n {{transport}}\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_VOICE_TRANSPORT\' | translate }}\n </span>\n </div>\n <!-- END TRANSPORT -->\n\n <!-- START CODEC -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_ALLOWED_CODECS\' | translate}}</label>\n <ui-select multiple ng-model="user.allow" name="allow" theme="bootstrap" ng-disabled="disabled">\n <ui-select-match placeholder="Select codec...">{{$item}}</ui-select-match>\n'+" <ui-select-choices repeat=\"allow in ['g729', 'ilbc', 'gsm', 'ulaw', 'alaw'] | filter: $select.search\">\n {{allow}}\n </ui-select-choices>\n </ui-select>\n <span class=\"help-block\">\n {{ 'DESCRIPTION_VOICE_CODEC' | translate }}\n </span>\n </div>\n <!-- END CODEC -->\n\n <input class=\"btn green-haze\" type=\"submit\" value=\"{{'APPLICATION_UPDATE' | translate}}\"/>\n </form>\n </div>\n </div>\n </div>\n</div>\n"),a.put("app/staff/user/wizard/wizard.html",'<div class="col-md-12">\n <!-- BEGIN PAGE HEADER-->\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-puzzle"></i>\n <a href="#">{{ \'APPLICATION_STAFF\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-eye"></i>\n <a href="/staff/users/list">{{ \'APPLICATION_USERS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-options"></i>\n <a href="/staff/users/wizard">{{ \'APPLICATION_WIZARD\' | translate }}</a>\n </li>\n </ul>\n </div>\n <!-- END PAGE HEADER-->\n\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered" data-ng-init="initWizard();">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-user font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_USER\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="createItem()">\n <wz-step title="{{\'APPLICATION_ACCOUNT\' | translate}}" canexit="exitValidation(forms.info.$valid)">\n <form name="forms.info" novalidate>\n\n <!-- START ROLE -->\n <div class="form-group" data-ng-if="Auth.getCurrentUser().role === \'admin\'">\n <label class="control-label">{{ \'APPLICATION_ROLE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select name="role" data-ng-model="item.role" theme="bootstrap" required>\n <ui-select-match placeholder="Select role...">{{$select.selected | uppercase}}</ui-select-match>\n <ui-select-choices repeat="role in [\'user\', \'admin\'] | filter: $select.search">\n {{role | uppercase}}\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END ROLE -->\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.fullname.$touched || forms.info.$submitted) && forms.info.fullname.$invalid}">\n <label class="control-label">{{\'APPLICATION_FULLNAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="fullname" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.fullname" required/>\n <span data-ng-show="(forms.info.fullname.$touched || forms.info.$submitted) && forms.info.fullname.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START USERNAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_USERNAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_USERNAME\' | translate}}" class="form-control" data-ng-model="item.name" data-ng-pattern="settings.patternName" required />\n <span data-ng-show="(forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_PATTERN_NAME\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n\n <!-- START EMAIL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.email.$touched || forms.info.$submitted) && forms.info.email.$invalid}">\n <label class="control-label">{{\'APPLICATION_EMAIL\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="email" name="email" placeholder="{{\'APPLICATION_EMAIL\' | translate}}" class="form-control" data-ng-model="item.email" required />\n <span data-ng-show="(forms.info.email.$touched || forms.info.$submitted) && forms.info.email.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.info.email.$touched || forms.info.$submitted) && forms.info.email.$error.email" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n </span>\n </div>\n <!-- END EMAIL -->\n\n <!-- START PASSWORD -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.password.$touched || forms.info.$submitted) && forms.info.password.$invalid}">\n <label class="control-label">{{\'APPLICATION_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="password" name="password" placeholder="{{\'APPLICATION_PASSWORD\' | translate}}" class="form-control" data-ng-model="item.password" data-ng-pattern="setting.securePassword ? settings.patternPassword : settings.patternPasswordLight" required/>\n <span class="help-block">\n {{setting.securePassword ? \'MESSAGE_PASSWORD_FORMAT\' : \'MESSAGE_PASSWORD_LIGTH_FORMAT\' | translate}}\n </span>\n <span data-ng-show="(forms.info.password.$touched || forms.info.$submitted) && forms.info.password.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n </span>\n <span data-ng-show="(forms.info.password.$touched || forms.info.$submitted) && forms.info.password.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PASSWORD -->\n\n <!-- START RE PASSWORD -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.rpassword.$touched || forms.info.$submitted) && forms.info.rpassword.$invalid}">\n <label class="control-label">{{\'APPLICATION_CONFIRM_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="password" name="rpassword" placeholder="{{\'APPLICATION_CONFIRM_PASSWORD\' | translate}}" class="form-control" data-ng-model="item.rpassword" nx-equal="item.password" required/>\n <span data-ng-show="(forms.info.rpassword.$touched || forms.info.$submitted) && forms.info.rpassword.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.info.rpassword.$touched || forms.info.$submitted) && forms.info.rpassword.$error.nxEqual" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_PASSWORD\' | translate}}.\n </span>\n </div>\n <!-- END RE PASSWORD -->\n\n <!-- START INTERNAL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.info.internal.$touched || forms.info.$submitted) && forms.info.internal.$invalid}">\n <label class="control-label">{{\'APPLICATION_INTERNAL_NUMBER\' | translate}}<span class="required" aria-required="true">*</span></label>\n <div class="input-group">\n <input type="number" min="1" name="internal" placeholder="{{\'APPLICATION_INTERNAL_NUMBER\' | translate}}" class="form-control" data-ng-model="item.internal" data-ng-disabled="!item.internalEnabled" data-ng-required="item.internalEnabled"/>\n <span class="input-group-addon">\n <input type="checkbox" data-ng-model="item.internalEnabled">\n </span>\n </div>\n <span data-ng-show="(forms.info.internal.$touched || forms.info.$submitted) && forms.info.internal.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INTERNAL -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" ng-click="next()"/>\n </form>\n </wz-step>\n\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n <input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n </wz-step>\n </wizard>\n </div>\n </div>\n <!-- END PORTLET-->\n</div>\n'), +a.put("app/sugarcrm/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-handbag"></i>\n <a href="/sugarcrm/list">{{ \'APPLICATION_SUGARCRM\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-handbag font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_SUGARCRM\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <a class="btn green-jungle" href="/sugarcrm/wizard" data-toggle="dropdown">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_ACCOUNT\' | translate }}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/sugarcrm/view/view.account.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_ACCOUNT\' | translate}}</span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_GENERALS\' | translate}}</a>\n </li>\n </ul>\n </div>\n <div class="portlet-body">\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.formSetting" data-ng-submit="forms.formSetting.$valid && updateItem()" novalidate>\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="account.name" required/>\n <span data-ng-show="forms.formSetting.name.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="account.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n <!-- START USERNAME -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.username.$invalid}">\n <label class="control-label">{{\'APPLICATION_USERNAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="username" placeholder="{{\'APPLICATION_USERNAME\' | translate}}" class="form-control" data-ng-model="account.username" required/>\n <span data-ng-show="forms.formSetting.username.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n\n <!-- START REMOTE ADDRESS -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.remoteUri.$invalid}">\n <label class="control-label">{{\'APPLICATION_REMOTE_ADDRESS\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="url" name="remoteUri" placeholder="{{\'APPLICATION_REMOTE_ADDRESS\' | translate}}" class="form-control" data-ng-model="account.remoteUri" required />\n <span data-ng-show="forms.formSetting.remoteUri.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n\n <!-- START PASSWORD -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.password.$invalid}">\n <label class="control-label">{{\'APPLICATION_PASSWORD\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="password" name="password" placeholder="{{\'APPLICATION_PASSWORD\' | translate}}" class="form-control" data-ng-model="account.password" required/>\n <span data-ng-show="forms.formSetting.apiKey.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END API KEY -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END GENERAL TAB -->\n\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/sugarcrm/view/view.configuration.html",'<div class="row" data-ng-init="initConfiguration()">\n <div class="col-md-12">\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-notebook font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_CONFIGURATION\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="createConfiguration()">\n <wz-step title="{{\'APPLICATION_SETTINGS\' | translate}}" canexit="formValidation(formsConfiguration.info.$valid)">\n <form name="formsConfiguration.info" novalidate>\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': formsConfiguration.info.$submitted && formsConfiguration.info.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="configuration.name" required/>\n <span data-ng-show="formsConfiguration.info.name.$invalid && formsConfiguration.info.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="configuration.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" data-ng-click="goNext()"/>\n </form>\n </wz-step>\n\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n <input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n </wz-step>\n </wizard>\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/sugarcrm/view/view.configurationSettings.html",'<div class="row" data-ng-init="getConfiguration();getVariables();getFields();">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_CONFIGURATION\' | translate}}: {{configurationName}}</span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_SUBJECT\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_2" data-toggle="tab">{{\'APPLICATION_DESCRIPTION\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_3" data-toggle="tab">{{\'APPLICATION_FIELDS\' | translate}}</a>\n </li>\n </ul>\n </div>\n <div class="portlet-body">\n <div class="tab-content">\n <!-- SUBJECT TAB -->\n <div class="tab-pane ui-padding active" id="tab_1_1">\n <div class="row">\n <div class="col-md-11">\n <span class="caption-subject">All following fields will be join by blank space:</span>\n </div>\n <div class="col-md-1 pull-rigth">\n <button class="btn btn-icon-only green" data-ng-click="addItemSubject()"><i class="fa fa-plus"></i></button>\n </div>\n </div>\n <hr>\n <!-- <div ng-scrollbars ng-scrollbars-config="config"> -->\n <div class="row" data-ng-repeat="subjectItem in subjectConfig">\n <div class="col-md-3">\n <ui-select ng-model="subjectItem.type" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeType(subjectItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n <ui-select-choices repeat="item in fieldType | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search | capitalize"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <div class="col-md-8" data-ng-if="subjectItem.type==\'string\'">\n <div class="form-group">\n <input type="text" class="form-control" data-ng-model="subjectItem.content" data-ng-change="updateField(subjectItem)">\n </div>\n </div>\n <div class="col-md-8" data-ng-if="subjectItem.type==\'variable\'">\n <div class="form-group">\n <ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="subjectItem.VariableId" data-ng-change="updateField(subjectItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="variable.id as variable in variables | filter: $select.search">\n <div ng-bind-html="variable.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <div class="col-md-1">\n <div class="form-group">\n <button class="btn btn-icon-only red" data-ng-click="removeItem(subjectItem)"><i class="fa fa-times"></i></button>\n </div>\n </div>\n </div>\n <!-- </div> -->\n </div>\n <!-- END SUBJECT TAB -->\n <!-- DESCRIPTION TAB -->\n <div class="tab-pane ui-padding" id="tab_1_2">\n <div class="row">\n <div class="col-md-11">\n <span class="caption-subject">All following fields will be join by new line:</span>\n </div>\n <div class="col-md-1 pull-rigth">\n <button class="btn btn-icon-only green" data-ng-click="addItemDescription()"><i class="fa fa-plus"></i></button>\n </div>\n </div>\n <hr>\n <!-- <div ng-scrollbars ng-scrollbars-config="config"> -->\n <div class="row" data-ng-repeat="descriptionItem in descriptionConfig">\n <!-- <pre>\n {{descriptionItem|json}}\n </pre> -->\n <div class="col-md-2">\n <ui-select ng-model="descriptionItem.type" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeDescType(descriptionItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected | ucfirst}}</ui-select-match>\n <ui-select-choices repeat="item in descFieldType | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search | ucfirst"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <div class="col-md-9" data-ng-if="descriptionItem.type==\'string\'">\n <div class="form-group">\n <input type="text" class="form-control" data-ng-model="descriptionItem.content" data-ng-change="updateField(descriptionItem)">\n </div>\n </div>\n <div class="col-md-3" data-ng-if="descriptionItem.type==\'key_value\'">\n <input type="text" class="form-control" placeholder="Key" data-ng-model="descriptionItem.key" data-ng-change="updateField(descriptionItem)">\n </div>\n <div class="col-md-3" data-ng-if="descriptionItem.type==\'key_value\'">\n <ui-select ng-model="descriptionItem.keyType" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeDescType(descriptionItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n <ui-select-choices repeat="item in fieldType | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search | capitalize"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <div class="col-md-3" data-ng-if="descriptionItem.type==\'key_value\' && descriptionItem.keyType==\'string\'">\n <input type="text" class="form-control" placeholder="Value" data-ng-model="descriptionItem.keyContent" data-ng-change="updateField(descriptionItem)">\n </div>\n <div class="col-md-3" data-ng-if="descriptionItem.type==\'key_value\' && descriptionItem.keyType==\'variable\'">\n <div class="form-group">\n <ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="descriptionItem.VariableId" data-ng-change="updateField(descriptionItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="variable.id as variable in variables | filter: $select.search">\n <div ng-bind-html="variable.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <div class="col-md-1">\n <div class="form-group">\n <button class="btn btn-icon-only red" data-ng-click="removeItem(descriptionItem)"><i class="fa fa-times"></i></button>\n </div>\n </div>\n </div>\n <!-- </div> -->\n </div>\n <!-- END DESCRIPTION TAB -->\n <!-- FIELDS TAB -->\n <div class="tab-pane ui-padding" id="tab_1_3">\n <div class="row">\n <div class="col-md-11">\n <span class="caption-subject">Add how to fill the fields present in your account:</span>\n </div>\n <div class="col-md-1 pull-rigth">\n <button class="btn btn-icon-only green" data-ng-click="addItemField()"><i class="fa fa-plus"></i></button>\n </div>\n </div>\n <hr>\n <!-- <div ng-scrollbars ng-scrollbars-config="config"> -->\n <div class="row" data-ng-repeat="fieldItem in fieldConfig">\n <div class="col-md-3">\n <ui-select ng-model="fieldItem.idField" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeFieldType(fieldItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.label}}</ui-select-match>\n <ui-select-choices repeat="item.name as item in accountFields | filter: $select.search">\n <div ng-bind-html="item.label | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <div class="col-md-8" data-ng-if="getSystemFieldOptions(fieldItem.idField)">\n <div class="form-group">\n <ui-select ng-model="fieldItem.content" theme="bootstrap" ng-disabled="disabled" data-ng-change="updateField(fieldItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="item.value as item in getSystemFieldOptions(fieldItem.idField) | filter: $select.search">\n <div ng-bind-html="item.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField)">\n <div class="form-group">\n <ui-select ng-model="fieldItem.type" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeType(fieldItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected | ucfirst}}</ui-select-match>\n <ui-select-choices repeat="item in fieldType | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search | ucfirst"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField) && fieldItem.type === \'string\'">\n <div class="form-group">\n <input type="text" class="form-control" data-ng-model="fieldItem.content" data-ng-change="updateField(fieldItem)">\n </div>\n </div>\n <div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField) && fieldItem.type === \'variable\'">\n <div class="form-group">\n <ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="fieldItem.VariableId" data-ng-change="updateField(fieldItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="variable.id as variable in variables | filter: $select.search">\n <div ng-bind-html="variable.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <div class="col-md-1">\n <div class="form-group">\n <button class="btn btn-icon-only red" data-ng-click="removeItem(fieldItem)"><i class="fa fa-times"></i></button>\n </div>\n </div>\n </div>\n <!-- </div> -->\n </div>\n <!-- END FIELDS TAB -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/sugarcrm/view/view.configurations.html",'<div ui-view class="profile-content">\n <div class="row" data-ng-init="getConfigurations()">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_CONFIGURATIONS\' | translate}}</span>\n </div>\n <div class="actions">\n <div class="btn-group">\n <a class="btn green-jungle " href="/sugarcrm/view/{{account.id}}/configuration" data-toggle="dropdown">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_CONFIGURATION\' | translate }}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <table class="table table-striped table-bordered table-hover">\n <thead>\n <tr>\n <th>{{\'APPLICATION_NAME\' | translate}}</th>\n <th>{{\'APPLICATION_DESCRIPTION\' | translate}}</th>\n <th>{{ \'APPLICATION_ACTIONS\' | translate }}</th>\n </tr>\n </thead>\n <tbody>\n <tr data-ng-repeat="configuration in configurations">\n <td>{{configuration.name}}</td>\n <td>{{configuration.description}}</td>\n <td>\n <a class="btn default btn-xs blue-stripe" data-ng-href="/sugarcrm/view/{{account.id}}/configurations/settings/{{configuration.id}}">\n {{ \'APPLICATION_SETTINGS\' | translate}}\n </a>\n <a class="btn default btn-xs red-stripe" data-ng-click="deleteConfiguration(configuration.name,configuration.id)">\n {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </td>\n </tr>\n <tr data-ng-hide="configurations.length">\n <td colspan="5" style="text-align:center;">\n <i>No configuration available</i>\n </td>\n </tr>\n </tbody>\n </table>\n <!-- END TABLE -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/sugarcrm/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-handbag"></i>\n <a href="/sugarcrm/list">{{ \'APPLICATION_SUGARCRM\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <a href="#">{{account.name}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img src="assets/images/media/sugarcrm.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{account.name}}\n </div>\n <div class="profile-usertitle-job">\n {{account.remoteUri}}\n </div>\n </div>\n <!-- END SIDEBAR USER TITLE -->\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.sugarcrm.view.account\')}">\n <a ng-href="/sugarcrm/view/{{account.id}}/account">\n <i class="icon-user"></i>\n {{ \'APPLICATION_ACCOUNT\' | translate }} </a>\n </li>\n <li data-ng-class="{active: $state.includes(\'main.sugarcrm.view.configurations\') || $state.is(\'main.sugarcrm.view.configuration\')}">\n <a ng-href="/sugarcrm/view/{{account.id}}/configurations">\n <i class="icon-settings"></i>\n {{ \'APPLICATION_CONFIGURATIONS\' | translate }} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/sugarcrm/wizard/wizard.html",'<!-- BEGIN PAGE HEADER-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-handbag"></i>\n <a href="/sugarcrm/list">{{ \'APPLICATION_SUGARCRM\' | translate }}</a>\n </li>\n </ul>\n </div>\n </div>\n</div>\n<!-- END PAGE HEADER-->\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initWizard()">\n <div class="col-md-12">\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-notebook font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_ACCOUNT\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="createItem()">\n <wz-step title="{{\'APPLICATION_ACCOUNT_INFO\' | translate}}" canexit="exitValidation(forms.formSetting.$valid)">\n <form name="forms.formSetting" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="forms.formSetting.name.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n <!-- START USERNAME -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.username.$invalid}">\n <label class="control-label">{{\'APPLICATION_USERNAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="username" placeholder="{{\'APPLICATION_USERNAME\' | translate}}" class="form-control" data-ng-model="item.username" required/>\n <span data-ng-show="forms.formSetting.username.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n\n\n <!-- START REMOTE ADDRESS -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.remoteUri.$invalid}">\n <label class="control-label">{{\'APPLICATION_REMOTE_ADDRESS\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="url" name="remoteUri" placeholder="{{\'APPLICATION_REMOTE_ADDRESS\' | translate}}" class="form-control" data-ng-model="item.remoteUri" required ng-remote-validate="/api/sugarcrm/accounts/validate/remoteUri"/>\n <span data-ng-show="forms.formSetting.remoteUri.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.formSetting.remoteUri.$touched || forms.formSetting.$submitted) && forms.formSetting.remoteUri.$error.ngRemoteValidate" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_EXIST_DOMAIN\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n\n <!-- START PASSWORD -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.password.$invalid}">\n <label class="control-label">{{\'APPLICATION_PASSWORD\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="password" name="password" placeholder="{{\'APPLICATION_PASSWORD\' | translate}}" class="form-control" data-ng-model="item.password" required/>\n <span data-ng-show="forms.formSetting.apiKey.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PASSWORD -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" data-ng-click="next()"/>\n\n </form>\n </wz-step>\n\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n <input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n </wz-step>\n\n </wizard>\n\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/tools/answer/list/list.create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_CANNED_ANSWER\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.key.$touched || form.$submitted) && form.key.$invalid}">\n <label class="control-label">{{\'APPLICATION_KEY\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="key" placeholder="{{\'APPLICATION_KEY\' | translate}}" class="form-control" data-ng-model="item.key" required/>\n <span data-ng-show="(form.key.$touched || form.$submitted) && form.key.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START VALUE -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.value.$touched || form.$submitted) && form.value.$invalid}">\n <label class="control-label">{{\'APPLICATION_VALUE\' | translate}}<span class="required" aria-required="true">*</span></label></label>\n <textarea type="text" name="value" placeholder="{{\'APPLICATION_VALUE\' | translate}}" class="form-control" data-ng-model="item.value" required></textarea>\n <span data-ng-show="(form.value.$touched || form.$submitted) && form.value.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END VALUE -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'), +a.put("app/tools/answer/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-wrench"></i>\n <a href="#">{{ \'APPLICATION_TOOLS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-magic-wand"></i>\n <a href="#">{{ \'APPLICATION_CANNED_ANSWERS\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-magic-wand font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_CANNED_ANSWERS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <a class="btn green-jungle" href="#" data-toggle="dropdown" data-ng-click="createItem()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_CANNED_ANSWER\' | translate }}\n </a>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/tools/answer/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getAnswer()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-wrench"></i>\n <a href="#">{{ \'APPLICATION_TOOLS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-magic-wand"></i>\n <a href="/tools/answers/list">{{ \'APPLICATION_CANNED_ANSWER\' | translate }}</a>\n <i data-ng-show="answer" class="fa fa-angle-right"></i>\n </li>\n <li data-ng-show="answer">\n <a href="#">{{answer.key}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/answer.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{answer.name}}\n </div>\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.tools.answers.view.settings\')}">\n <a data-ng-href="/tools/answers/view/{{answer.id}}/settings">\n <i class="icon-settings"></i>\n {{ \'APPLICATION_SETTINGS\' | translate}}\n </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/tools/answer/view/view.settings.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_CANNED_ANSWER\' | translate}} {{ \'APPLICATION_SETTINGS\' | translate}} </span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n </li>\n </ul>\n </div>\n\n <div class="portlet-body">\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.general" data-ng-submit="forms.general.$valid && updateAnswer()" novalidate>\n\n <!-- START KEY -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.key.$touched || forms.general.$submitted) && forms.general.key.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="key" placeholder="{{\'APPLICATION_KEY\' | translate}}" class="form-control" data-ng-model="answer.key" required/>\n <span data-ng-show="(forms.general.key.$touched || forms.general.$submitted) && forms.general.key.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END KEY -->\n\n <!-- START VALUE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.value.$touched || forms.general.$submitted) && forms.general.value.$invalid}">\n <label class="control-label">{{\'APPLICATION_VALUE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <textarea type="text" name="value" placeholder="{{\'APPLICATION_VALUE\' | translate}}" class="form-control" data-ng-model="answer.value" required></textarea>\n <span data-ng-show="(forms.general.value.$touched || forms.general.$submitted) && forms.general.value.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END VALUE -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="answer.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END ADVANCED TAB -->\n\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/tools/automation/list/list.html",'<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-wrench"></i>\n <a href="#">{{ \'APPLICATION_TOOLS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-bulb"></i>\n <a href="#">{{ \'APPLICATION_AUTOMATIONS\' | translate }}</a>\n </li>\n </ul>\n </div>\n </div>\n</div>\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-bulb font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_AUTOMATIONS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <a class="btn green-jungle " href="/tools/automations/wizard">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_AUTOMATION\' | translate }}\n </a>\n </div>\n <!-- <a class="btn btn-icon-only btn-default fullscreen" href="#"></a> -->\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/tools/automation/view/view.html",'<!-- BEGIN PAGE HEADER-->\n<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-settings"></i>\n <a href="/tools/automations/list">{{ \'APPLICATION_AUTOMATIONS\' | translate }}</a>\n <i class="fa fa-angle-right" data-ng-show="automation"></i>\n </li>\n <li data-ng-show="automation">\n <a href="#">{{ automation.description || automation.name }}</a>\n </li>\n </ul>\n </div>\n\n<!-- END PAGE HEADER-->\n\n<!-- BEGIN PAGE CONTENT-->\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/automation.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{ automation.name }}\n </div>\n <div class="profile-usertitle-job">\n {{ automation.description }}\n </div>\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.tools.automations.view.settings\')}">\n <a href="/tools/automations/view/{{automation.id}}/settings">\n <i class="icon-bulb"></i>\n {{ \'APPLICATION_SETTINGS\' | translate }} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/tools/automation/view/view.settings.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_SETTINGS\' | translate}}</span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_GENERALS\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_2" data-toggle="tab">{{\'APPLICATION_CONDITIONS\' | translate}} & {{\'APPLICATION_ACTIONS\' | translate}}</a>\n </li>\n </ul>\n </div>\n <div class="portlet-body">\n <form name="forms.general" data-ng-submit="exitValidation(forms.general.$valid) && updateAutomation()" novalidate>\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="automation.name" required/>\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid && forms.general.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START CHANNEL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.channel.$touched || forms.general.$submitted) && forms.general.channel.$invalid}">\n <label class="control-label">{{\'APPLICATION_CHANNEL\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="channel" placeholder="{{\'APPLICATION_CHANNEL\' | translate}}" class="form-control" data-ng-model="automation.channel" required readonly/>\n <span data-ng-show="(forms.general.channel.$touched || forms.general.$submitted) && forms.general.channel.$invalid && forms.general.channel.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CHANNEL -->\n\n <!-- START TIMEOUT -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.general.timeout.$touched && forms.general.timeout.$invalid}">\n <label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}} ({{\'APPLICATION_MINUTES\' | translate}})</label>\n <input type="number" name="timeout" min="10" placeholder="{{\'APPLICATION_TIMEOUT\' | translate}} (min 10 {{\'APPLICATION_MINUTES\' | translate}})" class="form-control" data-ng-model="automation.timeout" data-ng-init="item.timeout = 10" required/>\n <span data-ng-show="forms.general.timeout.$touched && forms.general.name.$invalid && forms.general.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TIMEOUT -->\n\n <!-- START STATUS -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_STATUS\' | translate}}</label>\n </br>\n <input bs-switch class="form-control" ng-model="automation.status" type="checkbox" name="status" switch-active="{{ recordSwitch.isActive }}" switch-on-text="{{ recordSwitch.onText }}" switch-off-text="{{ recordSwitch.offText }}" switch-on-color="{{ recordSwitch.onColor }}"\n switch-off-color="{{ recordSwitch.offColor }}" switch-animate="{{ recordSwitch.animate }}" switch-size="{{ recordSwitch.size }}" switch-label="{{ recordSwitch.label }}" switch-icon="{{ recordSwitch.icon }}" switch-radio-off="{{ recordSwitch.radioOff }}"\n switch-label-width="{{ recordSwitch.labelWidth }}" switch-handle-width="{{ recordSwitch.handleWidth }}">\n </div>\n <!-- END STATUS -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="automation.description" />\n </div>\n <!-- END DESCRIPTION -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}" />\n </div>\n <!-- END GENERAL TAB -->\n <div class="tab-pane" id="tab_1_2">\n <!-- All -->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-blue-hoki">\n <i class="icon-tag font-blue-hoki"></i>\n <span class="caption-subject" ng-bind-html="\'APPLICATION_MEET_ALL_CONDITIONS\' | translate"></span>:\n </div>\n </div>\n <div class="portlet-body">\n <div class="portlet light bordered" ng-repeat="all in automation.All">\n <div class="portlet-title">\n <div class="caption font-blue-hoki">\n <span class="caption-subject">{{ \'APPLICATION_ALL\' | translate }} #{{$index+1}}</span>\n </div>\n <div class="actions">\n <a href="#" class="btn red-sunglo btn-icon-only" ng-click="removeCondition(\'All\',$index)"><i class="fa fa-trash"></i></a>\n </div>\n </div>\n <div class="portlet-body">\n <div class="padding-bottom row">\n <div class="col-md-12">\n <condition-builder element="all" serviceindex="automation.channel" service="$automations" form="forms.general"></condition-builder>\n </div>\n </div>\n </div>\n </div>\n <div class="row">\n <div class="col-md-12">\n <button type="button" class="btn btn-sm green padding-bottom" data-ng-click="addCondition(\'All\')">\n <i class="fa fa-plus"></i> {{\'APPLICATION_ADD_CONDITION\' | translate}}\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Any -->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-blue-hoki">\n <i class="icon-tag font-blue-hoki"></i>\n <span class="caption-subject" ng-bind-html="\'APPLICATION_MEET_ANY_CONDITIONS\' | translate"></span>:\n </div>\n </div>\n <div class="portlet-body">\n <div class="portlet light bordered" ng-repeat="any in automation.Any">\n <div class="portlet-title">\n <div class="caption font-blue-hoki">\n <span class="caption-subject">{{ \'APPLICATION_ANY\' | translate }} #{{$index+1}}</span>\n </div>\n <div class="actions">\n <a href="#" class="btn red-sunglo btn-icon-only" ng-click="removeCondition(\'Any\',$index)"><i class="fa fa-trash"></i></a>\n </div>\n </div>\n <div class="portlet-body">\n <div class="padding-bottom row">\n <div class="col-md-12">\n <condition-builder element="any" serviceindex="automation.channel" service="$automations" form="forms.general"></condition-builder>\n </div>\n </div>\n </div>\n </div>\n <div class="row">\n <div class="col-md-12">\n <button type="button" class="btn btn-sm green padding-bottom" data-ng-click="addCondition(\'Any\')">\n <i class="fa fa-plus"></i> {{\'APPLICATION_ADD_CONDITION\' | translate}}\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Actions -->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-blue-hoki">\n <i class="icon-tag font-blue-hoki"></i>\n <span class="caption-subject">{{ \'APPLICATION_ACTIONS\' | translate }}</span>:\n </div>\n </div>\n <div class="portlet-body">\n <div class="portlet light bordered" ng-repeat="action in automation.Actions">\n <div class="portlet-title">\n <div class="caption font-blue-hoki">\n <span class="caption-subject">{{ \'APPLICATION_ACTIONS\' | translate }} #{{$index+1}}</span>\n </div>\n <div class="actions">\n <a href="#" class="btn red-sunglo btn-icon-only" ng-click="removeAction($index)"><i class="fa fa-trash"></i></a>\n </div>\n </div>\n <div class="portlet-body">\n <div class="padding-bottom row">\n <div class="col-md-12">\n <div class="form-group col-md-6" data-ng-class="{\'has-error\': (forms.general[\'action\'+$index].$touched || forms.general.$submitted) && forms.general[\'action\'+$index].$invalid}">\n <ui-select data-ng-model="action.action" theme="bootstrap" data-ng-change="resetActionData(action)" name="action{{$index}}" required>\n <ui-select-match placeholder="{{ \'APPLICATION_ACTION\' | translate }}">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="tAction.value as tAction in $automations.services[automation.channel].actions | filter: $select.search">\n <div ng-bind-html="tAction.name | translate | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'APPLICATION_ACTION\' | translate }}\n </span>\n <span data-ng-show="(forms.general[\'action\'+$index].$touched || forms.general.$submitted) && forms.general[\'action\'+$index].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div ng-switch="action.action">\n <action-builder-status ng-switch-when="status" element="action" form="forms.settings"></action-builder-status>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class="row">\n <div class="col-md-12">\n <button type="button" class="btn btn-sm green padding-bottom" data-ng-click="addAction()">\n <i class="fa fa-plus"></i> {{\'APPLICATION_ADD_ACTION\' | translate}}\n </button>\n </div>\n </div>\n </div>\n </div>\n <div class="has-error" data-ng-show="forms.general.$submitted && !automation.All.length && !automation.Any.length">\n <span class="help-block help-block-error form-control">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INSERT_AT_LEAST_ONE_CONDITION\' | translate}}.\n </span>\n </div>\n <div class="has-error" data-ng-show="forms.general.$submitted && !automation.Actions.length">\n <span class="help-block help-block-error form-control">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INSERT_AT_LEAST_ONE_ACTION\' | translate}}.\n </span>\n </div>\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}" />\n </div>\n </div>\n </form>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/tools/automation/wizard/wizard.html",'<div class="row">\n <div class="col-md-12">\n <!-- BEGIN PAGE HEADER-->\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-settings"></i>\n <a href="/tools/automations/list">{{ \'APPLICATION_AUTOMATIONS\' | translate }}</a>\n </li>\n </ul>\n </div>\n <!-- END PAGE HEADER-->\n\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-bulb font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_AUTOMATIONS\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="createItem()">\n <wz-step title="{{\'APPLICATION_GENERAL\' | translate}}" canexit="exitValidation(forms.general.$valid)">\n <form name="forms.general" data-ng-submit="submit()" novalidate>\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.general.name.$touched && forms.general.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="forms.general.name.$touched && forms.general.name.$invalid && forms.general.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START STATUS -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_STATUS\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="item.status"\n type="checkbox"\n name="status"\n data-ng-init="item.status = 0"\n switch-active="{{ statusSwitch.isActive }}"\n switch-on-text="{{ statusSwitch.onText }}"\n switch-off-text="{{ statusSwitch.offText }}"\n switch-on-color="{{ statusSwitch.onColor }}"\n switch-off-color="{{ statusSwitch.offColor }}"\n switch-animate="{{ statusSwitch.animate }}"\n switch-size="{{ statusSwitch.size }}"\n switch-label="{{ statusSwitch.label }}"\n switch-icon="{{ statusSwitch.icon }}"\n switch-radio-off="{{ statusSwitch.radioOff }}"\n switch-label-width="{{ statusSwitch.labelWidth }}"\n switch-handle-width="{{ statusSwitch.handleWidth }}">\n </div>\n <!-- END STATUS -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" ng-click="next()"/>\n </form>\n </wz-step>\n <wz-step title="{{\'APPLICATION_SETTINGS\' | translate}}" canexit="exitSettingsValidation(forms.settings.$valid)">\n <form name="forms.settings" novalidate>\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-blue-hoki">\n <i class="icon-tag font-blue-hoki"></i>\n <span class="caption-subject">{{ \'APPLICATION_CHANNEL\' | translate }}</span>\n </div>\n </div>\n <div class="portlet-body">\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.channel.$touched || forms.settings.$submitted) && forms.settings.channel.$invalid}">\n <label class="control-label">{{ \'APPLICATION_CHANNEL\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="item.channel" name="channel" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_CHANNEL\' | translate }}">{{$select.selected | capitalize}}</ui-select-match>\n <ui-select-choices repeat="channel in $automations.channels | filter: $select.search">\n <div ng-bind-html="channel | highlight: $select.search | capitalize"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.channel.$touched || forms.settings.$submitted) && forms.settings.channel.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n </div>\n\n <!-- All -->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-blue-hoki">\n <i class="icon-tag font-blue-hoki"></i>\n <span class="caption-subject" ng-bind-html="\'APPLICATION_MEET_ALL_CONDITIONS\' | translate"></span>:\n </div>\n </div>\n <div class="portlet-body">\n <div class="portlet light bordered" ng-repeat="all in item.All">\n <div class="portlet-title">\n <div class="caption font-blue-hoki">\n <span class="caption-subject">{{ \'APPLICATION_ALL\' | translate }} #{{$index+1}}</span>\n </div>\n <div class="actions">\n <a href="#" class="btn red-sunglo btn-icon-only" ng-click="removeCondition(\'All\',$index)"><i class="fa fa-trash"></i></a>\n </div>\n </div>\n <div class="portlet-body">\n <div class="padding-bottom row">\n <div class="col-md-12">\n <condition-builder element="all" serviceindex="item.channel" service="$automations" form="forms.general"></condition-builder>\n </div>\n </div>\n </div>\n </div>\n <div class="row">\n <div class="col-md-12">\n <button type="button" class="btn btn-sm green padding-bottom" data-ng-click="addCondition(\'All\')">\n <i class="fa fa-plus"></i> {{\'APPLICATION_ADD_CONDITION\' | translate}}\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Any -->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-blue-hoki">\n <i class="icon-tag font-blue-hoki"></i>\n <span class="caption-subject" ng-bind-html="\'APPLICATION_MEET_ANY_CONDITIONS\' | translate"></span>:\n </div>\n </div>\n <div class="portlet-body">\n <div class="portlet light bordered" ng-repeat="any in item.Any">\n <div class="portlet-title">\n <div class="caption font-blue-hoki">\n <span class="caption-subject">{{ \'APPLICATION_ANY\' | translate }} #{{$index+1}}</span>\n </div>\n <div class="actions">\n <a href="#" class="btn red-sunglo btn-icon-only" ng-click="removeCondition(\'Any\',$index)"><i class="fa fa-trash"></i></a>\n </div>\n </div>\n <div class="portlet-body">\n <div class="padding-bottom row">\n <div class="col-md-12">\n <condition-builder element="any" serviceindex="item.channel" service="$automations" form="forms.general"></condition-builder>\n </div>\n </div>\n </div>\n </div>\n <div class="row">\n <div class="col-md-12">\n <button type="button" class="btn btn-sm green padding-bottom" data-ng-click="addCondition(\'Any\')">\n <i class="fa fa-plus"></i> {{\'APPLICATION_ADD_CONDITION\' | translate}}\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Actions -->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-blue-hoki">\n <i class="icon-tag font-blue-hoki"></i>\n <span class="caption-subject">{{ \'APPLICATION_ACTIONS\' | translate }}</span>:\n </div>\n </div>\n <div class="portlet-body">\n <div class="portlet light bordered" ng-repeat="action in item.Actions">\n <div class="portlet-title">\n <div class="caption font-blue-hoki">\n <span class="caption-subject">{{ \'APPLICATION_ACTIONS\' | translate }} #{{$index+1}}</span>\n </div>\n <div class="actions">\n <a href="#" class="btn red-sunglo btn-icon-only" ng-click="removeAction($index)"><i class="fa fa-trash"></i></a>\n </div>\n </div>\n <div class="portlet-body">\n <div class="padding-bottom row">\n <div class="col-md-12">\n <div class="form-group col-md-6" data-ng-class="{\'has-error\': (forms.general[\'action\'+$index].$touched || forms.general.$submitted) && forms.general[\'action\'+$index].$invalid}">\n <ui-select data-ng-model="action.action" theme="bootstrap" data-ng-change="resetActionData(action)" name="action{{$index}}" required>\n <ui-select-match placeholder="{{ \'APPLICATION_ACTION\' | translate }}">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="tAction.value as tAction in $automations.services[item.channel].actions | filter: $select.search">\n <div ng-bind-html="tAction.name | translate | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'APPLICATION_ACTION\' | translate }}\n </span>\n <span data-ng-show="(forms.general[\'action\'+$index].$touched || forms.general.$submitted) && forms.general[\'action\'+$index].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div ng-switch="action.action">\n <action-builder-status ng-switch-when="status" element="action" form="forms.settings"></action-builder-status>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class="row">\n <div class="col-md-12">\n <button type="button" class="btn btn-sm green padding-bottom" data-ng-click="addAction()">\n <i class="fa fa-plus"></i> {{\'APPLICATION_ADD_ACTION\' | translate}}\n </button>\n </div>\n </div>\n </div>\n </div>\n <div class="has-error" data-ng-show="forms.settings.$submitted && !item.All.length && !item.Any.length">\n <span class="help-block help-block-error form-control">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INSERT_AT_LEAST_ONE_CONDITION\' | translate}}.\n </span>\n </div>\n <div class="has-error" data-ng-show="forms.settings.$submitted && !item.Actions.length">\n <span class="help-block help-block-error form-control">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INSERT_AT_LEAST_ONE_ACTION\' | translate}}.\n </span>\n </div>\n <button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" ng-click="next()"/>\n </form>\n </wz-step>\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n <input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n </wz-step>\n </wizard>\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'), +a.put("app/tools/interval/list/list.create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_INTERVAL\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.name.$touched || form.$submitted) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/tools/interval/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-wrench"></i>\n <a href="#">{{ \'APPLICATION_TOOLS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-clock"></i>\n <a href="#">{{ \'APPLICATION_INTERVALS\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-docs font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_INTERVALS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <button class="btn green-jungle " ng-click="createItem()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_INTERVAL\' | translate }}\n </button>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/tools/interval/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getInterval()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-wrench"></i>\n <a href="#">{{ \'APPLICATION_TOOLS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-clock"></i>\n <a href="/tools/intervals/list">{{ \'APPLICATION_INTERVALS\' | translate }}</a>\n <i data-ng-show="interval" class="fa fa-angle-right"></i>\n </li>\n <li data-ng-show="interval">\n <a href="#">{{interval.name}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/interval.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{interval.name}}\n </div>\n <!-- <div class="profile-usertitle-job">\n {{user.role}}\n </div> -->\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.tools.intervals.view.settings\')}">\n <a data-ng-click="deselectAndRedirect(\'/tools/intervals/view/\'+interval.id+\'/settings\')">\n <i class="icon-settings"></i>\n {{ \'APPLICATION_SETTINGS\' | translate}} </a>\n </li>\n'+" <li data-ng-class=\"{active: $state.is('main.tools.intervals.view.subintervals') || $state.is('main.tools.intervals.view.subinterval') || $state.is('main.tools.intervals.view.subintervals.settings')}\">\n <a data-ng-click=\"deselectAndRedirect('/tools/intervals/view/'+interval.id+'/subintervals')\">\n <i class=\"icon-list\"></i>\n {{ 'APPLICATION_SUBINTERVALS' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class=\"profile-content\">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n"),a.put("app/tools/interval/view/view.settings.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_INTERVAL\' | translate}} {{ \'APPLICATION_SETTINGS\' | translate}} </span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n </li>\n </ul>\n </div>\n\n <div class="portlet-body">\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.general" data-ng-submit="forms.general.$valid && updateInterval()" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="interval.name" required/>\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="interval.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END ADVANCED TAB -->\n\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/tools/interval/view/view.subinterval.html",'\n<div class="row" data-ng-init="initSubInterval(true)">\n <div class="col-md-12">\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-notebook font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_NEW_SUBINTERVAL\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="addSubInterval()">\n <wz-step title="{{\'APPLICATION_SETTINGS\' | translate}}" canexit="exitValidation(forms.subinterval.name.$valid)">\n <form name="forms.subinterval" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.subinterval.name.$touched || forms.subinterval.$submitted) && forms.subinterval.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="subinterval.name" required/>\n <span data-ng-show="(forms.subinterval.name.$touched || forms.subinterval.$submitted) && forms.subinterval.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START TIME -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_TIME\' | translate }}</label>\n <div class="input-group input-large">\n <fieldset class="pull-left" ng-disabled="splittedInterval.alwaysTime"><uib-timepicker name="t_from" data-ng-model="splittedInterval.t_from" show-meridian="false" show-spinners="false"></uib-timepicker></fieldset>\n <div class="input-group-addon col-md-1 interval-to pull-left">to</div>\n <fieldset ng-disabled="splittedInterval.alwaysTime"><uib-timepicker name="t_to" data-ng-model="splittedInterval.t_to" show-meridian="false" show-spinners="false"></uib-timepicker></fieldset>\n <label class="control-label pointer-cursor margin-top20"><input\n bs-switch\n class="form-control"\n ng-model="splittedInterval.alwaysTime"\n type="checkbox"\n switch-active="{{ switch.isActive }}"\n switch-on-text="{{\'APPLICATION_YES\' | translate}}"\n switch-off-text="{{\'APPLICATION_NO\' | translate}}"\n switch-on-color="{{ switch.onColor }}"\n switch-off-color="{{ switch.offColor }}"\n switch-animate="{{ switch.animate }}"\n switch-size="{{ switch.size }}"\n switch-label="{{ switch.label }}"\n switch-icon="{{ switch.icon }}"\n switch-radio-off="{{ switch.radioOff }}"\n switch-label-width="{{ switch.labelWidth }}"\n switch-handle-width="{{ switch.handleWidth }}"> {{\'APPLICATION_ALWAYS\' | translate}}</label>\n </div>\n </div>\n <!-- END TIME -->\n\n <!-- START WEEKDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_WEEKDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="splittedInterval.wd_from" theme="bootstrap" name="wd_from">\n <ui-select-match placeholder="">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{weekDay.name | translate}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="splittedInterval.wd_to" theme="bootstrap" name="wd_to">\n <ui-select-match placeholder="">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{weekDay.name | translate}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END WEEKDAY -->\n\n <!-- START MONTHDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTHDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="splittedInterval.md_from" theme="bootstrap" name="md_from">\n <ui-select-match>{{$select.selected===\'always\' ? ($select.selected | capitalize) : $select.selected}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search" ui-disable-choice="splittedInterval.md_to && splittedInterval.md_to!==\'always\' && monthDay>splittedInterval.md_to && monthDay!==\'always\'">\n {{monthDay===\'always\' ? (monthDay | capitalize) : monthDay}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="splittedInterval.md_to" theme="bootstrap" name="md_to">\n <ui-select-match>{{$select.selected===\'always\' ? ($select.selected | capitalize) : $select.selected}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search" ui-disable-choice="splittedInterval.md_from && splittedInterval.md_from!==\'always\' && monthDay<splittedInterval.md_from && monthDay!==\'always\'">\n {{monthDay===\'always\' ? (monthDay | capitalize) : monthDay}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTHDAY -->\n\n\n <!-- START MONTH -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTH\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="splittedInterval.m_from" theme="bootstrap" name="m_from">\n <ui-select-match placeholder="">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{month.name | translate}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="splittedInterval.m_to" theme="bootstrap" name="m_to">\n <ui-select-match placeholder="">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{month.name | translate}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTH -->\n\n\n\n <button class="btn green-haze" type="submit" ng-click="next()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n </form>\n </wz-step>\n\n\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n <input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n </wz-step>\n </wizard>\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/tools/interval/view/view.subintervalSettings.html",'\n<div class="row" data-ng-init="initSubInterval();getSubInterval();">\n <div class="col-md-12">\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-notebook font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_SUBINTERVAL_SETTINGS\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="updateInterval(\'subintervals\')">\n <div class="profile-usertitle-name">\n {{subinterval.name}}\n </div>\n <wz-step title="{{\'APPLICATION_SETTINGS\' | translate}}" canexit="exitValidation(forms.subinterval.name.$valid)">\n <form name="forms.subinterval" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.subinterval.name.$touched || forms.subinterval.$submitted) && forms.subinterval.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="interval.SubIntervals[selectedSubInterval].name" required/>\n <span data-ng-show="(forms.subinterval.name.$touched || forms.subinterval.$submitted) && forms.subinterval.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START TIME -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_TIME\' | translate }}</label>\n <div class="input-group input-large">\n <fieldset class="pull-left" ng-disabled="splittedInterval.alwaysTime"><uib-timepicker name="t_from" data-ng-model="splittedInterval.t_from" show-meridian="false" show-spinners="false"></uib-timepicker></fieldset>\n <div class="input-group-addon col-md-1 interval-to pull-left">to</div>\n <fieldset ng-disabled="splittedInterval.alwaysTime"><uib-timepicker name="t_to" data-ng-model="splittedInterval.t_to" show-meridian="false" show-spinners="false"></uib-timepicker></fieldset>\n <label class="control-label pointer-cursor margin-top20"><input\n bs-switch\n class="form-control"\n ng-model="splittedInterval.alwaysTime"\n type="checkbox"\n switch-active="{{ switch.isActive }}"\n switch-on-text="{{\'APPLICATION_YES\' | translate}}"\n switch-off-text="{{\'APPLICATION_NO\' | translate}}"\n switch-on-color="{{ switch.onColor }}"\n switch-off-color="{{ switch.offColor }}"\n switch-animate="{{ switch.animate }}"\n switch-size="{{ switch.size }}"\n switch-label="{{ switch.label }}"\n switch-icon="{{ switch.icon }}"\n switch-radio-off="{{ switch.radioOff }}"\n switch-label-width="{{ switch.labelWidth }}"\n switch-handle-width="{{ switch.handleWidth }}"> {{\'APPLICATION_ALWAYS\' | translate}}</label>\n </div>\n </div>\n <!-- END TIME -->\n\n <!-- START WEEKDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_WEEKDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="splittedInterval.wd_from" theme="bootstrap" name="wd_from">\n <ui-select-match placeholder="">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{weekDay.name | translate}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="splittedInterval.wd_to" theme="bootstrap" name="wd_to">\n <ui-select-match placeholder="">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n {{weekDay.name | translate}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END WEEKDAY -->\n\n <!-- START MONTHDAY -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTHDAY\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="splittedInterval.md_from" theme="bootstrap" name="md_from">\n <ui-select-match>{{$select.selected===\'always\' ? ($select.selected | capitalize) : $select.selected}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search" ui-disable-choice="splittedInterval.md_to && splittedInterval.md_to!==\'always\' && monthDay>splittedInterval.md_to && monthDay!==\'always\'">\n {{monthDay===\'always\' ? (monthDay | capitalize) : monthDay}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="splittedInterval.md_to" theme="bootstrap" name="md_to">\n <ui-select-match>{{$select.selected===\'always\' ? ($select.selected | capitalize) : $select.selected}}</ui-select-match>\n <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search" ui-disable-choice="splittedInterval.md_from && splittedInterval.md_from!==\'always\' && monthDay<splittedInterval.md_from && monthDay!==\'always\'">\n {{monthDay===\'always\' ? (monthDay | capitalize) : monthDay}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTHDAY -->\n\n <!-- START MONTH -->\n <div class="form-group">\n <label class="control-label">{{ \'APPLICATION_MONTH\' | translate }}</label>\n <div class="input-group input-large">\n <ui-select data-ng-model="splittedInterval.m_from" theme="bootstrap" name="m_from">\n <ui-select-match placeholder="">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{month.name | translate}}\n </ui-select-choices>\n </ui-select>\n <span class="input-group-addon">to</span>\n <ui-select data-ng-model="splittedInterval.m_to" theme="bootstrap" name="m_to">\n <ui-select-match placeholder="">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n {{month.name | translate}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <!-- END MONTH -->\n\n\n\n <button class="btn green-haze" type="submit" ng-click="next()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n </form>\n </wz-step>\n\n\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n <input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n </wz-step>\n </wizard>\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/tools/interval/view/view.subintervals.html",'<div ui-view class="profile-content">\n<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_SUBINTERVALS\' | translate}}</span>\n </div>\n <div class="actions">\n <div class="btn-group">\n <a class="btn green-jungle " href="/tools/intervals/view/{{interval.id}}/subinterval" data-toggle="dropdown">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_SUBINTERVAL\' | translate }}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div data-ng-if="selectedSubInterval === undefined" ui-grid="gridOptions" ui-grid-resize-columns class="grid" ui-grid-draggable-rows>\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n </div>\n</div>\n</div>\n'),a.put("app/tools/pause/list/list.create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_PAUSE\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.name.$touched || form.$submitted) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/tools/pause/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-wrench"></i>\n <a href="#">{{ \'APPLICATION_TOOLS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-pause"></i>\n <a href="#">{{ \'APPLICATION_PAUSES\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="fa fa-pause font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_PAUSES\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <a class="btn green-jungle" href="#" data-toggle="dropdown" data-ng-click="createItem()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_PAUSE\' | translate }}\n </a>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/tools/pause/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getPause()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-wrench"></i>\n <a href="#">{{ \'APPLICATION_TOOLS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-control-pause"></i>\n <a href="/tools/pauses/list">{{ \'APPLICATION_PAUSES\' | translate }}</a>\n <i data-ng-show="pause" class="fa fa-angle-right"></i>\n </li>\n <li data-ng-show="pause">\n <a href="#">{{pause.name}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/pause.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{pause.name}}\n </div>\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.tools.pauses.view.settings\')}">\n <a data-ng-href="/tools/pauses/view/{{pause.id}}/settings">\n <i class="icon-settings"></i>\n {{ \'APPLICATION_SETTINGS\' | translate}}\n </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/tools/pause/view/view.settings.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_PAUSE\' | translate}} {{ \'APPLICATION_SETTINGS\' | translate}} </span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n </li>\n </ul>\n </div>\n\n <div class="portlet-body">\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.general" data-ng-submit="forms.general.$valid && updatePause()" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="pause.name" required/>\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="pause.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END ADVANCED TAB -->\n\n </div>\n </div>\n </div>\n </div>\n</div>\n'), +a.put("app/tools/scheduler/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-wrench"></i>\n <a href="#">{{ \'APPLICATION_TOOLS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-calendar"></i>\n <a href="#">{{ \'APPLICATION_SCHEDULER\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-link font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_SCHEDULES\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <a class="btn green-jungle" href="/tools/scheduler/wizard" data-toggle="dropdown">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_SCHEDULE\' | translate }}\n </a>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/tools/scheduler/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-wrench"></i>\n <a href="#">{{ \'APPLICATION_TOOLS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-calendar"></i>\n <a href="/tools/scheduler/list">{{ \'APPLICATION_SCHEDULER\' | translate }}</a>\n <i data-ng-show="schedule" class="fa fa-angle-right"></i>\n </li>\n <li data-ng-show="schedule">\n <a href="#">{{schedule.name}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/scheduler.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{schedule.name}}\n </div>\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.tools.scheduler.view.settings\')}">\n <a data-ng-href="/tools/scheduler/view/{{schedule.id}}/settings"><i class="icon-settings"></i> {{ \'APPLICATION_SETTINGS\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/tools/scheduler/view/view.settings.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_SCHEDULE\' | translate}} {{ \'APPLICATION_SETTINGS\' | translate}} </span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_2" data-toggle="tab" data-ng-click="refreshSlider()">{{ \'APPLICATION_CONFIGURATION\' | translate}}</a>\n </li>\n </ul>\n </div>\n\n <div class="portlet-body">\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.general" data-ng-submit="forms.general.$valid && forms.config.$valid && updateSchedule()" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.$submitted && forms.general.name.$invalid) || forms.general.name.$error.pattern}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="schedule.name" data-ng-pattern="settings.patternName" required/>\n <span data-ng-show="forms.general.$submitted && forms.general.name.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_PATTERN_NAME\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START ACTIVE -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_ACTIVE\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="schedule.active"\n type="checkbox"\n name="status"\n switch-active="{{ switches.isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ switches.onColor }}"\n switch-off-color="{{ switches.offColor }}"\n switch-animate="{{ switches.animate }}"\n switch-size="{{ switches.size }}"\n switch-label="{{ switches.label }}"\n switch-icon="{{ switches.icon }}"\n switch-radio-off="{{ switches.radioOff }}"\n switch-label-width="{{ switches.labelWidth }}"\n switch-handle-width="{{ switches.handleWidth }}">\n </div>\n <!-- END ACTIVE -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="schedule.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END GENERAL TAB -->\n <!-- CONFIG TAB -->\n <div class="tab-pane" id="tab_1_2">\n <form name="forms.config" data-ng-switch="schedule.reportType" data-ng-submit="forms.config.$valid && forms.general.$valid && updateSchedule()" data-ng-if="schedule.type===\'report\'" data-ng-init="initReports()" novalidate>\n\n <div class="row">\n\n <!-- START TYPE -->\n <div class="form-group col-md-2" data-ng-class="{\'has-error\': (forms.config.type.$touched || forms.config.$submitted) && forms.config.type.$invalid}">\n <label class="control-label">{{ \'APPLICATION_TYPE\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="schedule.reportType" name="type" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_TYPE\' | translate }}">{{$select.selected | capitalize}}</ui-select-match>\n <ui-select-choices repeat="report in [\'default\', \'custom\'] | filter: $select.search">\n <div ng-bind-html="report | capitalize | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.config.type.$touched || forms.config.$submitted) && forms.config.type.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TYPE -->\n\n\n <!-- START REPORT -->\n <div data-ng-switch-when="default" class="form-group col-md-8" data-ng-class="{\'has-error\': (forms.config.reportId.$touched || forms.config.$submitted) && forms.config.reportId.$invalid}">\n <label class="control-label">{{ \'APPLICATION_REPORT\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="schedule.reportId" name="reportId" theme="bootstrap" on-select="setReportTree($item,$model)" required>\n <ui-select-match placeholder="{{ \'APPLICATION_REPORT\' | translate }}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices group-by="\'parent\'" repeat="report.id as report in defRep | filter: $select.search">\n <div ng-bind-html="report.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.config.reportId.$touched || forms.config.$submitted) && forms.config.reportId.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END REPORT -->\n\n <!-- START REPORT -->\n <div data-ng-switch-when="custom" class="form-group col-md-8" data-ng-class="{\'has-error\': (forms.config.reportId.$touched || forms.config.$submitted) && forms.config.reportId.$invalid}">\n <label class="control-label">{{ \'APPLICATION_REPORT\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="schedule.reportId" name="reportId" theme="bootstrap" on-select="setReportTree($item,$model)" required>\n <ui-select-match placeholder="{{ \'APPLICATION_REPORT\' | translate }}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices group-by="\'parent\'" repeat="report.id as report in cusRep | filter: $select.search">\n <div ng-bind-html="report.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.config.reportId.$touched || forms.config.$submitted) && forms.config.reportId.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END REPORT -->\n\n <!-- START REPORT -->\n <div class="form-group col-md-2" data-ng-class="{\'has-error\': (forms.config.reportOutput.$touched || forms.config.$submitted) && forms.config.reportOutput.$invalid}">\n <label class="control-label">{{ \'APPLICATION_OUTPUT\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="schedule.reportOutput" name="reportOutput" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_OUTPUT\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="output in [\'CSV\',\'PDF\'] | filter: $select.search">\n <div ng-bind-html="output | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.config.reportOutput.$touched || forms.config.$submitted) && forms.config.reportOutput.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END REPORT -->\n\n </div>\n\n <!-- START TODAY -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_RUN_ON\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n data-ng-model="switchValues.today"\n type="checkbox"\n name="status"\n data-ng-change="checkToday()"\n switch-active="{{ switches.isActive }}"\n switch-on-text="{{ \'APPLICATION_TODAY\' | translate }}"\n switch-off-text="{{ \'APPLICATION_RANGE\' | translate }}"\n switch-on-color="{{ switches.onColor }}"\n switch-off-color="{{ switches.offColor }}"\n switch-animate="{{ switches.animate }}"\n switch-size="{{ switches.size }}"\n switch-label="{{ switches.label }}"\n switch-icon="{{ switches.icon }}"\n switch-radio-off="{{ switches.radioOff }}"\n switch-label-width="{{ switches.labelWidth }}"\n switch-handle-width="{{ switches.handleWidth }}">\n </div>\n <!-- END TODAY -->\n\n <!-- START VALIDITY -->\n <div class="form-group" data-ng-if="switchValues.today">\n <label class="control-label">{{\'APPLICATION_VALIDITY\' | translate}}</label>\n <rzslider rz-slider-model="schedule.validityStart" rz-slider-high="schedule.validityEnd" rz-slider-options="validitySlider"></rzslider>\n </div>\n <!-- END VALIDITY -->\n\n <!-- START RANGE -->\n <div class="form-group" data-ng-if="!switchValues.today" data-ng-class="{\'has-error\': (forms.config.range.$touched || forms.config.$submitted) && forms.config.range.$invalid}">\n <label class="control-label">{{ \'APPLICATION_REPORT_RANGE\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="schedule.reportRange" name="range" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_RANGE\' | translate }}">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="range.value as range in reportRanges | filter: $select.search">\n <div ng-bind-html="range.name | highlight: $select.search | translate"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.config.range.$touched || forms.config.$submitted) && forms.config.range.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END RANGE -->\n\n <!-- START TODAY CRON -->\n <div class="form-group" data-ng-if="switchValues.today" data-ng-class="{\'has-error\': (forms.config.cron.$touched || forms.config.$submitted) && forms.config.cron.$invalid}">\n <label class="control-label">{{ \'APPLICATION_EXECUTE_EVERY\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="schedule.cron" name="cron" theme="bootstrap" data-ng-required="switchValues.today">\n <ui-select-match placeholder="{{ \'APPLICATION_EXECUTE_EVERY\' | translate }}">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="cron.value as cron in todayCron | filter: $select.search">\n <div ng-bind-html="cron.name | highlight: $select.search | translate"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.config.cron.$touched || forms.config.$submitted) && forms.config.cron.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TODAY -->\n <div class="row" data-ng-if="!switchValues.today">\n <!-- START CRONTYPE EXEC -->\n <div class="form-group col-md-4" data-ng-class="{\'has-error\': (forms.config.cronType.$touched || forms.config.$submitted) && forms.config.cronType.$invalid}">\n <label class="control-label">{{ \'APPLICATION_EXECUTE_EVERY\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="rangeExec.type" name="cronType" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_EXECUTE_EVERY\' | translate }}">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="type.value as type in cronTypes | filter: $select.search">\n <div ng-bind-html="type.name | highlight: $select.search | translate"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.config.cronType.$touched || forms.config.$submitted) && forms.config.cronType.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CRONTYPE -->\n\n <!-- START WEEKDAY -->\n <div class="form-group col-md-4" data-ng-if="schedule.cronType === \'weekly\'" data-ng-class="{\'has-error\': (forms.config.weekDay.$touched || forms.config.$submitted) && forms.config.weekDay.$invalid}">\n <label class="control-label">{{ \'APPLICATION_WEEKDAYS\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select multiple data-ng-model="rangeExec.weekDays" name="weekDay" theme="bootstrap" data-ng-required="schedule.cronType === \'weekly\'">\n <ui-select-match placeholder="{{ \'APPLICATION_WEEKDAYS\' | translate }}">{{$item.name | translate}}</ui-select-match>\n <ui-select-choices repeat="day.value as day in weekDays | filter: $select.search">\n <div ng-bind-html="day.name | highlight: $select.search | translate"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.config.weekDay.$touched || forms.config.$submitted) && forms.config.weekDay.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END WEEKDAY -->\n\n <!-- START MONTHDAY -->\n <div class="form-group col-md-4" data-ng-if="schedule.cronType === \'monthly\'" data-ng-class="{\'has-error\': (forms.config.monthDay.$touched || forms.config.$submitted) && forms.config.monthDay.$invalid}">\n <label class="control-label">{{ \'APPLICATION_MONTHDAY\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="rangeExec.monthDay" name="monthDay" theme="bootstrap" data-ng-required="schedule.cronType === \'monthly\'">\n <ui-select-match placeholder="{{ \'APPLICATION_MONTHDAY\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="day in monthDays | filter: $select.search">\n <div ng-bind-html="day | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.config.monthDay.$touched || forms.config.$submitted) && forms.config.monthDay.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END MONTHDAY -->\n\n <!-- START HOUR -->\n <div class="form-group col-md-4" data-ng-if="schedule.cronType" data-ng-class="{\'has-error\': (forms.config.hour.$touched || forms.config.$submitted) && forms.config.hour.$invalid}">\n <label class="control-label">{{ \'APPLICATION_HOUR\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="rangeExec.hour" name="hour" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_HOUR\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="hour in hours | filter: $select.search">\n <div ng-bind-html="hour | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.config.hour.$touched || forms.config.$submitted) && forms.config.hour.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END HOUR -->\n </div>\n\n <!-- START SEND MAIL -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_SEND_MAIL\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n data-ng-model="schedule.sendMail"\n type="checkbox"\n name="status"\n switch-active="{{ switches.isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ switches.onColor }}"\n switch-off-color="{{ switches.offColor }}"\n switch-animate="{{ switches.animate }}"\n switch-size="{{ switches.size }}"\n switch-label="{{ switches.label }}"\n switch-icon="{{ switches.icon }}"\n switch-radio-off="{{ switches.radioOff }}"\n switch-label-width="{{ switches.labelWidth }}"\n switch-handle-width="{{ switches.handleWidth }}">\n </div>\n <!-- END SEND MAIL -->\n <div class="row">\n <!-- START ACCOUNT -->\n <div class="form-group col-md-6" data-ng-class="{\'has-error\': (forms.config.MailServerOutId.$touched || forms.config.$submitted) && forms.config.MailServerOutId.$invalid}">\n <label class="control-label">{{ \'APPLICATION_ACCOUNT\' | translate }}<span class="required" data-ng-if="schedule.sendMail" aria-required="true">*</span></label>\n <ui-select data-ng-model="schedule.MailServerOutId" name="MailServerOutId" theme="bootstrap" data-ng-disabled="!schedule.sendMail" data-ng-required="schedule.sendMail">\n <ui-select-match placeholder="{{ \'APPLICATION_ACCOUNT\' | translate }}">{{$select.selected.username}}</ui-select-match>\n <ui-select-choices repeat="account.id as account in mailServers | filter: $select.search">\n <div ng-bind-html="account.username | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.config.MailServerOutId.$touched || forms.config.$submitted) && forms.config.MailServerOutId.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <div class="note note-warning" data-ng-hide="mailServers.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_ACCOUNTS_AVAILABLE\' | translate }}\n </p>\n </div>\n </div>\n <!-- END ACCOUNT -->\n\n <!-- START EMAIL -->\n <div class="form-group col-md-6" data-ng-class="{\'has-error\': (forms.config.$submitted && forms.config.email.$invalid) || forms.config.email.$error.pattern}">\n <label class="control-label">{{\'APPLICATION_EMAIL_ADDRESS\' | translate}}<span data-ng-if="schedule.sendMail" class="required" aria-required="true">*</span></label>\n <input type="email" name="email" placeholder="{{\'APPLICATION_EMAIL_ADDRESS\' | translate}}" class="form-control" data-ng-model="schedule.email" data-ng-disabled="!schedule.sendMail" data-ng-required="schedule.sendMail"/>\n <span data-ng-show="forms.config.$submitted && forms.config.email.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END EMAIL -->\n\n </div>\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END CONFIG TAB -->\n </div>\n </div>\n </div>\n </div>\n</div>\n<!-- <pre>\n {{rangeExec | json}}\n</pre>\n<pre>\n {{schedule | json}}\n</pre> -->\n'),a.put("app/tools/scheduler/wizard/wizard.html",'<div class="col-md-12">\n <!-- BEGIN PAGE HEADER-->\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-wrench"></i>\n <a href="#">{{ \'APPLICATION_TOOLS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-calendar"></i>\n <a href="/tools/scheduler/list">{{ \'APPLICATION_SCHEDULER\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-options"></i>\n <a href="#">{{ \'APPLICATION_WIZARD\' | translate }}</a>\n </li>\n </ul>\n </div>\n <!-- END PAGE HEADER-->\n\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-link font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_SCHEDULE\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="createItem()">\n <wz-step title="{{\'APPLICATION_GENERAL\' | translate}}" canexit="exitValidation(forms.general.$valid)">\n <form name="forms.general" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.$submitted && forms.general.name.$invalid) || forms.general.name.$error.pattern}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" data-ng-pattern="settings.patternName" required/>\n <span data-ng-show="forms.general.$submitted && forms.general.name.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_PATTERN_NAME\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START ACTIVE -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_ACTIVE\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="item.active"\n type="checkbox"\n name="status"\n data-ng-init="item.active = 0"\n switch-active="{{ switches.isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ switches.onColor }}"\n switch-off-color="{{ switches.offColor }}"\n switch-animate="{{ switches.animate }}"\n switch-size="{{ switches.size }}"\n switch-label="{{ switches.label }}"\n switch-icon="{{ switches.icon }}"\n switch-radio-off="{{ switches.radioOff }}"\n switch-label-width="{{ switches.labelWidth }}"\n switch-handle-width="{{ switches.handleWidth }}">\n </div>\n <!-- END ACTIVE -->\n\n <!-- START TYPE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.type.$touched || forms.general.$submitted) && forms.general.type.$invalid}">\n <label class="control-label">{{ \'APPLICATION_TYPE\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="item.type" name="type" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_TYPE\' | translate }}">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="type.value as type in scheduleTypes | filter: $select.search">\n <div ng-bind-html="type.name | highlight: $select.search | translate"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.general.type.$touched || forms.general.$submitted) && forms.general.type.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TYPE -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n <button class="btn green-haze" type="submit" ng-click="next(true)">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n </form>\n </wz-step>\n\n <wz-step title="{{\'APPLICATION_CONFIGURATION\' | translate}}" canexit="exitValidation(forms.config.$valid)">\n <form name="forms.config" data-ng-switch="item.reportType" data-ng-if="item.type===\'report\'" data-ng-init="initReports()" novalidate>\n <div class="row">\n\n <!-- START TYPE -->\n <div class="form-group col-md-2" data-ng-class="{\'has-error\': (forms.config.type.$touched || forms.config.$submitted) && forms.config.type.$invalid}">\n <label class="control-label">{{ \'APPLICATION_TYPE\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="item.reportType" name="type" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_TYPE\' | translate }}">{{$select.selected | capitalize}}</ui-select-match>\n <ui-select-choices repeat="report in [\'default\', \'custom\'] | filter: $select.search">\n <div ng-bind-html="report | capitalize | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.config.type.$touched || forms.config.$submitted) && forms.config.type.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TYPE -->\n\n <!-- START DEFAULT REPORT -->\n <div data-ng-switch-when="default" class="form-group col-md-8" data-ng-class="{\'has-error\': (forms.config.reportId.$touched || forms.config.$submitted) && forms.config.reportId.$invalid}">\n <label class="control-label">{{ \'APPLICATION_REPORT\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="item.reportId" name="reportId" theme="bootstrap" on-select="setReportTree($item,$model)" required>\n <ui-select-match placeholder="{{ \'APPLICATION_REPORT\' | translate }}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices group-by="\'parent\'" repeat="report.id as report in defRep | filter: $select.search">\n <div ng-bind-html="report.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.config.reportId.$touched || forms.config.$submitted) && forms.config.reportId.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END DEFAULT REPORT -->\n\n <!-- START CUSTOM REPORT -->\n <div data-ng-switch-when="custom" class="form-group col-md-8" data-ng-class="{\'has-error\': (forms.config.reportId.$touched || forms.config.$submitted) && forms.config.reportId.$invalid}">\n <label class="control-label">{{ \'APPLICATION_REPORT\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="item.reportId" name="reportId" theme="bootstrap" on-select="setReportTree($item,$model)" required>\n <ui-select-match placeholder="{{ \'APPLICATION_REPORT\' | translate }}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices group-by="\'parent\'" repeat="report.id as report in cusRep | filter: $select.search">\n <div ng-bind-html="report.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.config.reportId.$touched || forms.config.$submitted) && forms.config.reportId.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CUSTOM REPORT -->\n\n <!-- START OUTPUT -->\n <div class="form-group col-md-2" data-ng-class="{\'has-error\': (forms.config.reportOutput.$touched || forms.config.$submitted) && forms.config.reportOutput.$invalid}">\n <label class="control-label">{{ \'APPLICATION_OUTPUT\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="item.reportOutput" name="reportOutput" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_OUTPUT\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="output in [\'CSV\',\'PDF\'] | filter: $select.search">\n <div ng-bind-html="output | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.config.reportOutput.$touched || forms.config.$submitted) && forms.config.reportOutput.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END OUTPUT -->\n\n </div>\n\n <!-- START TODAY -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_RUN_ON\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n data-ng-model="switchValues.today"\n type="checkbox"\n name="status"\n data-ng-change="checkToday()"\n switch-active="{{ switches.isActive }}"\n switch-on-text="{{ \'APPLICATION_TODAY\' | translate }}"\n switch-off-text="{{ \'APPLICATION_RANGE\' | translate }}"\n switch-on-color="{{ switches.onColor }}"\n switch-off-color="{{ switches.offColor }}"\n switch-animate="{{ switches.animate }}"\n switch-size="{{ switches.size }}"\n switch-label="{{ switches.label }}"\n switch-icon="{{ switches.icon }}"\n switch-radio-off="{{ switches.radioOff }}"\n switch-label-width="{{ switches.labelWidth }}"\n switch-handle-width="{{ switches.handleWidth }}">\n </div>\n <!-- END TODAY -->\n\n <!-- START VALIDITY -->\n <div class="form-group" data-ng-if="switchValues.today">\n <label class="control-label">{{\'APPLICATION_VALIDITY\' | translate}}</label>\n <rzslider rz-slider-model="item.validityStart" rz-slider-high="item.validityEnd" rz-slider-options="validitySlider" data-ng-init="item.validityStart = 8;item.validityEnd = 16;"></rzslider>\n </div>\n <!-- END VALIDITY -->\n\n <!-- START RANGE -->\n <div class="form-group" data-ng-if="!switchValues.today" data-ng-class="{\'has-error\': (forms.config.range.$touched || forms.config.$submitted) && forms.config.range.$invalid}">\n <label class="control-label">{{ \'APPLICATION_REPORT_RANGE\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="item.reportRange" name="range" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_RANGE\' | translate }}">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="range.value as range in reportRanges | filter: $select.search">\n <div ng-bind-html="range.name | highlight: $select.search | translate"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.config.range.$touched || forms.config.$submitted) && forms.config.range.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END RANGE -->\n\n <!-- START TODAY CRON EXEC -->\n <div class="form-group" data-ng-if="switchValues.today" data-ng-class="{\'has-error\': (forms.config.cron.$touched || forms.config.$submitted) && forms.config.cron.$invalid}">\n <label class="control-label">{{ \'APPLICATION_EXECUTE_EVERY\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="item.cron" name="cron" theme="bootstrap" data-ng-required="switchValues.today">\n <ui-select-match placeholder="{{ \'APPLICATION_EXECUTE_EVERY\' | translate }}">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="cron.value as cron in todayCron | filter: $select.search">\n <div ng-bind-html="cron.name | highlight: $select.search | translate"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.config.cron.$touched || forms.config.$submitted) && forms.config.cron.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TODAY CRON -->\n <div class="row" data-ng-if="!switchValues.today">\n <!-- START CRONTYPE EXEC -->\n <div class="form-group col-md-4" data-ng-class="{\'has-error\': (forms.config.cronType.$touched || forms.config.$submitted) && forms.config.cronType.$invalid}">\n <label class="control-label">{{ \'APPLICATION_EXECUTE_EVERY\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="rangeExec.type" name="cronType" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_EXECUTE_EVERY\' | translate }}">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="type.value as type in cronTypes | filter: $select.search">\n <div ng-bind-html="type.name | highlight: $select.search | translate"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.config.cronType.$touched || forms.config.$submitted) && forms.config.cronType.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CRONTYPE -->\n\n <!-- START WEEKDAY -->\n <div class="form-group col-md-4" data-ng-if="item.cronType === \'weekly\'" data-ng-class="{\'has-error\': (forms.config.weekDay.$touched || forms.config.$submitted) && forms.config.weekDay.$invalid}">\n <label class="control-label">{{ \'APPLICATION_WEEKDAYS\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select multiple data-ng-model="rangeExec.weekDays" name="weekDay" theme="bootstrap" data-ng-required="item.cronType === \'weekly\'">\n <ui-select-match placeholder="{{ \'APPLICATION_WEEKDAYS\' | translate }}">{{$item.name | translate}}</ui-select-match>\n <ui-select-choices repeat="day.value as day in weekDays | filter: $select.search">\n <div ng-bind-html="day.name | highlight: $select.search | translate"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.config.weekDay.$touched || forms.config.$submitted) && forms.config.weekDay.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END WEEKDAY -->\n\n <!-- START MONTHDAY -->\n <div class="form-group col-md-4" data-ng-if="item.cronType === \'monthly\'" data-ng-class="{\'has-error\': (forms.config.monthDay.$touched || forms.config.$submitted) && forms.config.monthDay.$invalid}">\n <label class="control-label">{{ \'APPLICATION_MONTHDAY\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="rangeExec.monthDay" name="monthDay" theme="bootstrap" data-ng-required="item.cronType === \'monthly\'">\n <ui-select-match placeholder="{{ \'APPLICATION_MONTHDAY\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="day in monthDays | filter: $select.search">\n <div ng-bind-html="day | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.config.monthDay.$touched || forms.config.$submitted) && forms.config.monthDay.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END MONTHDAY -->\n\n <!-- START HOUR -->\n <div class="form-group col-md-4" data-ng-if="item.cronType" data-ng-class="{\'has-error\': (forms.config.hour.$touched || forms.config.$submitted) && forms.config.hour.$invalid}">\n <label class="control-label">{{ \'APPLICATION_HOUR\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="rangeExec.hour" name="hour" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_HOUR\' | translate }}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="hour in hours | filter: $select.search">\n <div ng-bind-html="hour | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.config.hour.$touched || forms.config.$submitted) && forms.config.hour.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END HOUR -->\n </div>\n\n <!-- START SEND MAIL -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_SEND_MAIL\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n data-ng-model="item.sendMail"\n type="checkbox"\n name="status"\n data-ng-init="item.sendMail = 0"\n switch-active="{{ switches.isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ switches.onColor }}"\n switch-off-color="{{ switches.offColor }}"\n switch-animate="{{ switches.animate }}"\n switch-size="{{ switches.size }}"\n switch-label="{{ switches.label }}"\n switch-icon="{{ switches.icon }}"\n switch-radio-off="{{ switches.radioOff }}"\n switch-label-width="{{ switches.labelWidth }}"\n switch-handle-width="{{ switches.handleWidth }}">\n </div>\n <!-- END SEND MAIL -->\n <div class="row">\n <!-- START ACCOUNT -->\n <div class="form-group col-md-6" data-ng-class="{\'has-error\': (forms.config.MailServerOutId.$touched || forms.config.$submitted) && forms.config.MailServerOutId.$invalid}">\n <label class="control-label">{{ \'APPLICATION_ACCOUNT\' | translate }}<span class="required" data-ng-if="item.sendMail" aria-required="true">*</span></label>\n <ui-select data-ng-model="item.MailServerOutId" name="MailServerOutId" theme="bootstrap" data-ng-disabled="!item.sendMail" data-ng-required="item.sendMail">\n <ui-select-match placeholder="{{ \'APPLICATION_ACCOUNT\' | translate }}">{{$select.selected.username}}</ui-select-match>\n <ui-select-choices repeat="account.id as account in mailServers | filter: $select.search">\n <div ng-bind-html="account.username | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.config.MailServerOutId.$touched || forms.config.$submitted) && forms.config.MailServerOutId.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <div class="note note-warning" data-ng-hide="mailServers.length">\n <h4 class="block">Warning!</h4>\n <p>\n {{ \'MESSAGE_NO_ACCOUNTS_AVAILABLE\' | translate }}\n </p>\n </div>\n </div>\n <!-- END ACCOUNT -->\n\n <!-- START EMAIL -->\n <div class="form-group col-md-6" data-ng-class="{\'has-error\': (forms.config.$submitted && forms.config.email.$invalid) || forms.config.email.$error.pattern}">\n <label class="control-label">{{\'APPLICATION_EMAIL_ADDRESS\' | translate}}<span data-ng-if="item.sendMail" class="required" aria-required="true">*</span></label>\n <input type="email" name="email" placeholder="{{\'APPLICATION_EMAIL_ADDRESS\' | translate}}" class="form-control" data-ng-model="item.email" required data-ng-disabled="!item.sendMail" data-ng-required="item.sendMail"/>\n <span data-ng-show="forms.config.$submitted && forms.config.email.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END EMAIL -->\n </div>\n\n <button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n <button class="btn green-haze" type="submit" ng-click="next()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n </form>\n </wz-step>\n\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n <input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n </wz-step>\n </wizard>\n </div>\n </div>\n <!-- END PORTLET-->\n</div>\n<!-- <pre>\n {{rangeExec | json}}\n</pre>\n<pre>\n {{item | json}}\n</pre> -->\n'), +a.put("app/tools/sound/list/list.html",'<div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-music-tone-alt"></i>\n <a href="#">{{ \'APPLICATION_SOUNDS\' | translate }}</a>\n </li>\n </ul>\n <div class="page-toolbar">\n </div>\n</div>\n<!-- END PAGE HEADER-->\n<!-- BEGIN PAGE CONTENT-->\n<!-- Audio Portlets -->\n<div class="headline">\n <h3><i class="icon-music-tone-alt sounds-title-icon"></i> {{ \'APPLICATION_SOUNDS\' | translate }}</h3>\n</div>\n<div class="portlet light bg-inverse">\n <div class="portlet-title collapsible" ng-click="isCollapsed = !isCollapsed">\n <div class="caption">\n <i class="icon-puzzle font-red-flamingo"></i>\n <span class="caption-subject bold font-red-flamingo uppercase">\n {{\'APPLICATION_FILE_UPLOAD\' | translate}} </span>\n </div>\n <div class="tools">\n <a href="" ng-class="{\'collapse\': !isCollapsed, \'expand\' : isCollapsed}">\n </a>\n </div>\n </div>\n <div class="portlet-body" ng-slide-down="!isCollapsed">\n <div class="row" nv-file-drop="" uploader="uploader" filters="queueLimit, customFilter">\n <div class="col-md-4">\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-settings font-green-sharp"></i>\n <span class="caption-subject bold uppercase">{{\'APPLICATION_SELECT_FILES\' | translate}}</span>\n <span class="caption-helper hide"></span>\n </div>\n <div class="actions">\n </div>\n </div>\n <div class="portlet-body">\n <div ng-show="uploader.isHTML5">\n <div class="file-drop-zone margin-bottom-20" nv-file-over="" uploader="uploader" over-class="file-drop-zone-over">\n Base drop zone\n </div>\n </div>\n <span class="btn default btn-file">\n <span class="fileinput-new">\n {{\'APPLICATION_FILE_UPLOAD\' | translate}}</span>\n <input type="file" nv-file-select="" uploader="uploader" />\n </span>\n <span class="btn default btn-file">\n <span class="fileinput-new">\n {{\'APPLICATION_MULTI_FILE_UPLOAD\' | translate}}</span>\n <input type="file" nv-file-select="" uploader="uploader" multiple /><br/>\n </span>\n <p>\n </br>\n {{ \'MESSAGE_SUPPORTED_FORMATS\' | translate }} <b>wav, mp3, gsm, ogg</b>.\n </p>\n <p>\n {{ \'MESSAGE_MAXIMUM_SOUND_UPLOAD_SIZE\' | translate }} <b>15 Mb</b>.\n </p>\n </div>\n </div>\n </div>\n <div class="col-md-8">\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-settings font-green-sharp"></i>\n <span class="caption-subject bold uppercase">{{\'APPLICATION_UPLOAD_QUEUE\' | translate}}</span>\n <span class="caption-helper">{{\'APPLICATION_QUEUE_LENGTH\' | translate}}: {{ uploader.queue.length }}</span>\n </div>\n <div class="actions">\n </div>\n </div>\n <div class="portlet-body">\n <div class="table-scrollable table-scrollable-borderless">\n <table class="table table-hover table-light">\n <thead>\n <tr class="uppercase">\n <th width="50%">{{\'APPLICATION_NAME\' | translate}}</th>\n <th ng-show="uploader.isHTML5">{{\'APPLICATION_SIZE\' | translate}}</th>\n <th ng-show="uploader.isHTML5">{{\'APPLICATION_PROGRESS\' | translate}}</th>\n <th>{{\'APPLICATION_STATUS\' | translate}}</th>\n <th>{{\'APPLICATION_MESSAGE\' | translate}}</th>\n <th>{{\'APPLICATION_ACTIONS\' | translate}}</th>\n </tr>\n </thead>\n <tbody>\n <tr ng-repeat="item in uploader.queue">\n <td><strong>{{ item.file.name }}</strong></td>\n <td ng-show="uploader.isHTML5" nowrap>{{ item.file.size/1024/1024|number:2 }} MB</td>\n <td ng-show="uploader.isHTML5">\n <div class="progress progress-sm" style="margin-bottom: 0;">\n <div class="progress-bar progress-bar-info" role="progressbar" ng-style="{ \'width\': item.progress + \'%\' }"></div>\n </div>\n </td>\n <td class="text-center">\n <span ng-show="item.isSuccess" class="text-success"><i class="glyphicon glyphicon-ok"></i></span>\n <span ng-show="item.isCancel" class="text-info"><i class="glyphicon glyphicon-ban-circle"></i></span>\n <span ng-show="item.isError" class="text-danger"><i class="glyphicon glyphicon-remove"></i></span>\n <span ng-show="item.isUploading" class="text-info"><i class="glyphicon glyphicon-upload"></i></span>\n </td>\n <td class="text-center">\n <span ng-show="item.responseMessage" class="text-danger">{{item.responseMessage}}</span>\n </td>\n <td nowrap>\n <button type="button" class="btn btn-success btn-xs" ng-click="item.upload()" ng-disabled="item.isReady || item.isUploading || item.isSuccess">\n <span class="glyphicon glyphicon-upload"></span> {{\'APPLICATION_UPLOAD\' | translate}}\n </button>\n <button type="button" class="btn btn-warning btn-xs" ng-click="item.cancel()" ng-disabled="!item.isUploading">\n <span class="glyphicon glyphicon-ban-circle"></span> {{\'APPLICATION_CANCEL\' | translate}}\n </button>\n <button type="button" class="btn btn-danger btn-xs" ng-click="item.remove()">\n <span class="glyphicon glyphicon-trash"></span> {{\'APPLICATION_REMOVE\' | translate}}\n </button>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n <div>\n <p>{{\'APPLICATION_UPLOAD_QUEUE_PROGRESS\' | translate}}:</p>\n <div class="progress progress-sm" style="">\n <div class="progress-bar progress-bar-info" role="progressbar" ng-style="{ \'width\': uploader.progress + \'%\' }"></div>\n </div>\n </div>\n <button type="button" class="btn btn-success btn-s" ng-click="uploader.uploadAll()" ng-disabled="!uploader.getNotUploadedItems().length">\n <span class="glyphicon glyphicon-upload"></span> {{\'APPLICATION_UPLOAD_ALL\' | translate}}\n </button>\n <button type="button" class="btn btn-warning btn-s" ng-click="uploader.cancelAll()" ng-disabled="!uploader.isUploading">\n <span class="glyphicon glyphicon-ban-circle"></span> {{\'APPLICATION_CANCEL_ALL\' | translate}}\n </button>\n <button type="button" class="btn btn-danger btn-s" ng-click="uploader.clearQueue()" ng-disabled="!uploader.queue.length">\n <span class="glyphicon glyphicon-trash"></span> {{\'APPLICATION_REMOVE_ALL\' | translate}}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n<div class="row thumbnails" data-ng-init="initList()">\n <div class="row" ng-show="sounds.length == 0">\n <div class="col-md-12 page-404">\n <div class="details">\n <h3>{{ \'MESSAGE_NO_SOUNDS\' | translate }}</h3>\n <p>\n <a href="/">\n {{ \'MESSAGE_RETURN_HOME\' | translate }} </a>\n {{ \'MESSAGE_OR_UPLOAD_SOUND_FILE\' | translate }}\n </p>\n </div>\n </div>\n </div>\n <div class="audio-portlet-wrapper animate-repeat" ng-repeat="sound in sounds">\n <div class="audio-portlet">\n <div class="audio-portlet-title"><a href="#" editable-text="sound.display_name" onbeforesave="updateAudio(sound.id,{display_name : $data})">{{ sound.display_name || "Empty" }}</a></div>\n <img src="../assets/images/note_placeholder.png" alt="" class="img-responsive"/>\n <div class="file-info">\n <div class="audio-tag-wrapper">\n <audio-file-download params="{id:sound.id,controller:\'stream\'}" resource="Sound"></audio-file-download>\n </div>\n <p id="description_div">\n <a href="#" editable-text="sound.description" onbeforesave="updateAudio(sound.id,{description : $data})">{{ sound.description || "Empty" }}</a>\n </p>\n <p class="float-right">\n <button class="btn btn-xs green-meadow" uib-tooltip-template="\'audioInfoTemplate.html\'"><i class="icon-list"></i></button>\n <motion-file-download params="{id:sound.id,controller:\'download\'}" resource="Sound" mimetype="\'audio/\'+sound.original_format" tooltiptext="Download" filename="sound.display_name+\'.\'+sound.original_format" btnclass="{{downloadButtonClass}}" btncontent=\'{{downloadButtonContent}}\'></motion-file-download>\n <button uib-tooltip="Delete" class="btn btn-xs red-sunglo" ng-click="delete(sound.display_name, sound.id)" tooltip="Delete"><i class="icon-close" ></i></button>\n </p>\n </div>\n </div>\n </div>\n <script type="text/ng-template" id="audioInfoTemplate.html">\n <div>\n <ul class="list-unstyled">\n <li><b>Format : </b>{{sound.original_format}}</li>\n <li><b>Duration : </b>{{sound.original_duration | date: \'mm:ss\'}}</li>\n <li><b>Channels : </b>{{sound.original_channelCount}}</li>\n <li><b>Bitrate : </b>{{sound.original_bitRate/1024}} kbs</li>\n <li><b>Sample Rate : </b>{{sound.original_sampleRate/1000}} KHz</li>\n </ul>\n </div>\n </script>\n</div>\n<!-- End Audio Portlets -->\n'),a.put("app/tools/tag/list/list.create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_TAG\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.name.$touched || form.$submitted) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required data-ng-pattern="settings.patternName"/>\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_PATTERN_NAME\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/tools/tag/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-wrench"></i>\n <a href="#">{{ \'APPLICATION_TOOLS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-tag"></i>\n <a href="#">{{ \'APPLICATION_TAGS\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-docs font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_TAGS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <button class="btn green-jungle " ng-click="createItem()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_TAG\' | translate }}\n </button>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/tools/tag/view/view.chat.html",'<div class="row" >\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_TAGGED_CHAT\' | translate}}</span>\n </div>\n </div>\n\n <div class="portlet-body" data-ng-if="tag" data-ng-init="initChat()">\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="spinner-grid" spinner-start-active="false"></span>\n <!-- END UI-GRID SPINNER -->\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/tools/tag/view/view.contacts.html",'<div class="row" >\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_TAGGED_CONTACTS\' | translate}}</span>\n </div>\n </div>\n\n <div class="portlet-body" data-ng-if="tag" data-ng-init="initContacts()">\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="spinner-grid" spinner-start-active="false"></span>\n <!-- END UI-GRID SPINNER -->\n <!-- START TABLE -->\n <div ui-grid="gridOptions" data-ng-if="readyGrid && gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/tools/tag/view/view.fax.html",'<div class="row" >\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_TAGGED_FAX\' | translate}}</span>\n </div>\n </div>\n\n <div class="portlet-body" data-ng-if="tag" data-ng-init="initFax()">\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="spinner-grid" spinner-start-active="false"></span>\n <!-- END UI-GRID SPINNER -->\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/tools/tag/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getTag()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-wrench"></i>\n <a href="#">{{ \'APPLICATION_TOOLS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-tag"></i>\n <a href="/tools/tags/list">{{ \'APPLICATION_TAGS\' | translate }}</a>\n <i data-ng-show="tag" class="fa fa-angle-right"></i>\n </li>\n <li data-ng-show="tag">\n <a href="#">{{tag.name}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/tag.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{tag.name}}\n </div>\n <!-- <div class="profile-usertitle-job">\n {{user.role}}\n </div> -->\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.tools.tags.view.settings\')}">\n <a data-ng-href="/tools/tags/view/{{tag.id}}/settings">\n <i class="icon-settings"></i>\n {{ \'APPLICATION_SETTINGS\' | translate}} </a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.tools.tags.view.chat\')}">\n <a data-ng-href="{{license.chat ? \'/tools/tags/view/\'+tag.id+\'/chat\' : \'#\'}}" data-ng-class="{\'disabled-link\':!license.chat}">\n <i class="icon-bubble"></i>\n {{ \'APPLICATION_CHAT\' | translate}} </a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.tools.tags.view.mail\')}">\n <a data-ng-href="{{license.mail ? \'/tools/tags/view/\'+tag.id+\'/mail\' : \'#\'}}" data-ng-class="{\'disabled-link\':!license.mail}">\n <i class="icon-envelope"></i>\n {{ \'APPLICATION_MAIL\' | translate}} </a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.tools.tags.view.fax\')}">\n <a data-ng-href="{{license.fax ? \'/tools/tags/view/\'+tag.id+\'/fax\' : \'#\'}}" data-ng-class="{\'disabled-link\':!license.fax}">\n <i class="fa fa-fax"></i>\n {{ \'APPLICATION_FAX\' | translate}} </a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.tools.tags.view.sms\')}" >\n <a data-ng-href="{{license.messaging ? \'/tools/tags/view/\'+tag.id+\'/sms\' : \'#\'}}" data-ng-class="{\'disabled-link\':!license.messaging}">\n <i class="glyphicon glyphicon-comment"></i>\n {{ \'APPLICATION_SMS\' | translate}} </a>\n </li>\n <li data-ng-class="{active: $state.is(\'main.tools.tags.view.contacts\')}">\n <a data-ng-href="{{license.cm ? \'/tools/tags/view/\'+tag.id+\'/contacts\' : \'#\'}}" data-ng-class="{\'disabled-link\':!license.cm}">\n <i class="fa fa-users"></i>\n {{ \'APPLICATION_CONTACTS\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/tools/tag/view/view.mail.html",'<div class="row" >\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_TAGGED_MAIL\' | translate}}</span>\n </div>\n </div>\n\n <div class="portlet-body" data-ng-if="tag" data-ng-init="initMail()">\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="spinner-grid" spinner-start-active="false"></span>\n <!-- END UI-GRID SPINNER -->\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/tools/tag/view/view.settings.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_TAG\' | translate}} {{ \'APPLICATION_SETTINGS\' | translate}} </span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n </li>\n </ul>\n </div>\n\n <div class="portlet-body">\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="spinner-grid" spinner-start-active="false"></span>\n <!-- END UI-GRID SPINNER -->\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.general" data-ng-submit="forms.general.$valid && updateTag()" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="tag.name" required data-ng-pattern="settings.patternName"/>\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_PATTERN_NAME\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="tag.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END ADVANCED TAB -->\n\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/tools/tag/view/view.sms.html",'<div class="row" >\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_TAGGED_SMS\' | translate}}</span>\n </div>\n </div>\n\n <div class="portlet-body" data-ng-if="tag" data-ng-init="initSms()">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/tools/template/list/list.html",'<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-wrench"></i>\n <a href="#">{{ \'APPLICATION_TOOLS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-docs"></i>\n <a href="#">{{ \'APPLICATION_TEMPLATES\' | translate }}</a>\n </li>\n </ul>\n </div>\n </div>\n</div>\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-wrench font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_TEMPLATES\' | translate }}</span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <a class="btn green-jungle" href="/tools/templates/wizard">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_TEMPLATE\' | translate }}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/tools/template/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initItem()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-wrench"></i>\n <a href="#">{{ \'APPLICATION_TOOLS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-docs"></i>\n <a href="/tools/templates/list">{{ \'APPLICATION_TEMPLATES\' | translate }}</a>\n <i data-ng-show="item" class="fa fa-angle-right"></i>\n </li>\n <li data-ng-show="item">\n <a href="#">{{item.name}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/template.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{item.name}}\n </div>\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.tools.templates.view.settings\')}">\n <a data-ng-href="/tools/templates/view/{{item.id}}/settings">\n <i class="icon-settings"></i>\n {{ \'APPLICATION_SETTINGS\' | translate}}\n </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/tools/template/view/view.settings.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_SETTINGS\' | translate}}</span>\n </div>\n </div>\n <div class="portlet-body">\n\n <form name="form" data-ng-submit="form.$valid && updateItem()" class="form-horizontal" novalidate>\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': form.name.$invalid && form.$submitted}">\n <div class="col-md-12">\n <div class="row">\n <div class="col-md-2">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}:<span class="required" aria-required="true">*</span></label>\n </div>\n <div class="col-md-10">\n <input type="text" name="name" class="form-control todo-taskbody-taskdesc" placeholder="{{\'APPLICATION_NAME\' | translate}}..." data-ng-model="item.name" required>\n <span data-ng-show="form.name.$invalid && form.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n </div>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group" data-ng-class="{\'has-error\': form.description.$invalid && form.$submitted}">\n <div class="col-md-12">\n <div class="row">\n <div class="col-md-2">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}:</label>\n </div>\n <div class="col-md-10">\n <input type="text" name="description" class="form-control todo-taskbody-taskdesc" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}..." rows="8" data-ng-model="item.description">\n <span data-ng-show="form.description.$invalid && form.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n </div>\n </div>\n <!-- END NAME -->\n\n <hr>\n\n <!-- START SUBJECT -->\n <div class="form-group row" data-ng-class="{\'has-error\': form.subject.$invalid && form.$submitted}">\n <div class="col-md-12">\n <div class="row">\n <div class="col-md-2">\n <label class="control-label">{{\'APPLICATION_SUBJECT\' | translate}}:</label>\n </div>\n <div class="col-md-10">\n <input type="text" name="subject" class="form-control todo-taskbody-taskdesc" placeholder="{{\'APPLICATION_SUBJECT\' | translate}}..." rows="8" data-ng-model="item.subject">\n <span data-ng-show="form.subject.$invalid && form.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n </div>\n </div>\n <!-- END SUJBECT -->\n\n <!-- START HTML -->\n <div class="form-group row" data-ng-class="{\'has-error\': form.text.$invalid && form.$submitted}">\n <div class="col-md-12">\n <div ckeditor="options" ng-model="item.html"></div>\n <span data-ng-show="form.text.$invalid && form.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n <!-- END HTML -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n </div>\n </div>\n</div>\n'), +a.put("app/tools/template/wizard/wizard.html",'<div class="row">\n <div class="col-md-12">\n <!-- BEGIN PAGE HEADER-->\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-wrench"></i>\n <a href="#">{{ \'APPLICATION_TOOLS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-docs"></i>\n <a href="/tools/templates/list">{{ \'APPLICATION_TEMPLATES\' | translate }}</a>\n </li>\n </ul>\n </div>\n <!-- END PAGE HEADER-->\n\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered" data-ng-init="initWizard()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-docs font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_TEMPLATES\' | translate }} FORM</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <form name="form" data-ng-submit="form.$valid && createItem()" class="form-horizontal" novalidate>\n <!-- START HEAD -->\n <div class="form">\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': form.name.$invalid && form.$submitted}">\n <div class="col-md-12">\n <div class="row">\n <div class="col-md-1">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}:<span class="required" aria-required="true">*</span></label>\n </div>\n <div class="col-md-11">\n <input type="text" name="name" class="form-control todo-taskbody-taskdesc" placeholder="{{\'APPLICATION_NAME\' | translate}}..." data-ng-model="item.name" required>\n <span data-ng-show="form.name.$invalid && form.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n </div>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group" data-ng-class="{\'has-error\': form.description.$invalid && form.$submitted}">\n <div class="col-md-12">\n <div class="row">\n <div class="col-md-1">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}:</label>\n </div>\n <div class="col-md-11">\n <input type="text" name="description" class="form-control todo-taskbody-taskdesc" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}..." rows="8" data-ng-model="item.description">\n <span data-ng-show="form.description.$invalid && form.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n </div>\n </div>\n <!-- END NAME -->\n\n <!-- START SUBJECT -->\n <div class="form-group" data-ng-class="{\'has-error\': form.subject.$invalid && form.$submitted}">\n <div class="col-md-12">\n <div class="row">\n <div class="col-md-1">\n <label class="control-label">{{\'APPLICATION_SUBJECT\' | translate}}:</label>\n </div>\n <div class="col-md-11">\n <input type="text" name="subject" class="form-control todo-taskbody-taskdesc" placeholder="{{\'APPLICATION_SUBJECT\' | translate}}..." rows="8" data-ng-model="item.subject">\n <span data-ng-show="form.subject.$invalid && form.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n </div>\n </div>\n <!-- END SUJBECT -->\n\n <!-- START HTML -->\n <div class="form-group row" data-ng-class="{\'has-error\': form.text.$invalid && form.$submitted}">\n <div class="col-md-12">\n <div ckeditor="options" ng-model="item.html"></div>\n <span data-ng-show="form.text.$invalid && form.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n <!-- END HTML -->\n\n </div>\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" data-ng-click="goNext()"/>\n </form>\n </div>\n </div>\n <!-- END PORTLET-->\n </div>\n</div>\n'),a.put("app/tools/trigger/list/list.html",'<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-wrench"></i>\n <a href="#">{{ \'APPLICATION_TOOLS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-bulb"></i>\n <a href="#">{{ \'APPLICATION_TRIGGERS\' | translate }}</a>\n </li>\n </ul>\n </div>\n </div>\n</div>\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-bulb font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_TRIGGERS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <a class="btn green-jungle " href="/tools/triggers/wizard">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_TRIGGER\' | translate }}\n </a>\n </div>\n <!-- <a class="btn btn-icon-only btn-default fullscreen" href="#"></a> -->\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/tools/trigger/view/view.html",'<!-- BEGIN PAGE HEADER-->\n<div class="row" data-ng-init="initView();">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-wrench"></i>\n <a href="#">{{ \'APPLICATION_TOOLS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-bulb"></i>\n <a href="/tools/triggers/list">{{ \'APPLICATION_TRIGGERS\' | translate }}</a>\n <i class="fa fa-angle-right" data-ng-show="trigger"></i>\n </li>\n <li data-ng-show="trigger">\n <a href="#">{{ trigger.description || trigger.name }}</a>\n </li>\n </ul>\n </div>\n\n<!-- END PAGE HEADER-->\n\n<!-- BEGIN PAGE CONTENT-->\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/trigger.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{ trigger.name }}\n </div>\n <div class="profile-usertitle-job">\n {{ trigger.description }}\n </div>\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.tools.triggers.view.settings\')}">\n <a href="/tools/triggers/view/{{trigger.id}}/settings">\n <i class="icon-bulb"></i>\n {{ \'APPLICATION_SETTINGS\' | translate }} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/tools/trigger/view/view.settings.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_SETTINGS\' | translate}}</span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_GENERALS\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_2" data-toggle="tab">{{\'APPLICATION_CONDITIONS\' | translate}} & {{\'APPLICATION_ACTIONS\' | translate}}</a>\n </li>\n </ul>\n </div>\n <div class="portlet-body">\n <form name="forms.general" data-ng-submit="exitValidation(forms.general.$valid) && updateTrigger()" novalidate>\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="trigger.name" required/>\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid && forms.general.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START CHANNEL -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.channel.$touched || forms.general.$submitted) && forms.general.channel.$invalid}">\n <label class="control-label">{{\'APPLICATION_CHANNEL\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="channel" placeholder="{{\'APPLICATION_CHANNEL\' | translate}}" class="form-control" data-ng-model="trigger.channel" required readonly/>\n <span data-ng-show="(forms.general.channel.$touched || forms.general.$submitted) && forms.general.channel.$invalid && forms.general.channel.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CHANNEL -->\n\n <!-- START STATUS -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_STATUS\' | translate}}</label>\n </br>\n <input bs-switch class="form-control" ng-model="trigger.status" type="checkbox" name="status" switch-active="{{ recordSwitch.isActive }}" switch-on-text="{{ recordSwitch.onText }}" switch-off-text="{{ recordSwitch.offText }}" switch-on-color="{{ recordSwitch.onColor }}"\n switch-off-color="{{ recordSwitch.offColor }}" switch-animate="{{ recordSwitch.animate }}" switch-size="{{ recordSwitch.size }}" switch-label="{{ recordSwitch.label }}" switch-icon="{{ recordSwitch.icon }}" switch-radio-off="{{ recordSwitch.radioOff }}"\n switch-label-width="{{ recordSwitch.labelWidth }}" switch-handle-width="{{ recordSwitch.handleWidth }}">\n </div>\n <!-- END STATUS -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="trigger.description" />\n </div>\n <!-- END DESCRIPTION -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}" />\n </div>\n <!-- END GENERAL TAB -->\n <div class="tab-pane" id="tab_1_2">\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-blue-hoki">\n <i class="icon-tag font-blue-hoki"></i>\n <span class="caption-subject" ng-bind-html="\'APPLICATION_MEET_ALL_CONDITIONS\' | translate"></span>:\n </div>\n </div>\n <div class="portlet-body">\n <div class="portlet light bordered" ng-repeat="all in trigger.All">\n <div class="portlet-title">\n <div class="caption font-blue-hoki">\n <span class="caption-subject">{{ \'APPLICATION_ALL\' | translate }} #{{$index+1}}</span>\n </div>\n <div class="actions">\n <a href="#" class="btn red-sunglo btn-icon-only" ng-click="removeCondition(\'All\',$index)"><i class="fa fa-trash"></i></a>\n </div>\n </div>\n <div class="portlet-body">\n <div class="padding-bottom row">\n <div class="col-md-12">\n <condition-builder element="all" serviceindex="trigger.channel" service="$triggers" form="forms.general"></condition-builder>\n </div>\n </div>\n </div>\n </div>\n <div class="row">\n <div class="col-md-12">\n <button type="button" class="btn btn-sm green padding-bottom" data-ng-click="addCondition(\'All\')">\n <i class="fa fa-plus"></i> {{\'APPLICATION_ADD_CONDITION\' | translate}}\n </button>\n </div>\n </div>\n </div>\n </div>\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-blue-hoki">\n <i class="icon-tag font-blue-hoki"></i>\n <span class="caption-subject" ng-bind-html="\'APPLICATION_MEET_ANY_CONDITIONS\' | translate"></span>:\n </div>\n </div>\n <div class="portlet-body">\n <div class="portlet light bordered" ng-repeat="any in trigger.Any">\n <div class="portlet-title">\n <div class="caption font-blue-hoki">\n <span class="caption-subject">{{ \'APPLICATION_ANY\' | translate }} #{{$index+1}}</span>\n </div>\n <div class="actions">\n <a href="#" class="btn red-sunglo btn-icon-only" ng-click="removeCondition(\'Any\',$index)"><i class="fa fa-trash"></i></a>\n </div>\n </div>\n <div class="portlet-body">\n <div class="padding-bottom row">\n <div class="col-md-12">\n <condition-builder element="any" serviceindex="trigger.channel" service="$triggers" form="forms.general"></condition-builder>\n </div>\n </div>\n </div>\n </div>\n <div class="row">\n <div class="col-md-12">\n <button type="button" class="btn btn-sm green padding-bottom" data-ng-click="addCondition(\'Any\')">\n <i class="fa fa-plus"></i> {{\'APPLICATION_ADD_CONDITION\' | translate}}\n </button>\n </div>\n </div>\n </div>\n </div>\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-blue-hoki">\n <i class="icon-tag font-blue-hoki"></i>\n <span class="caption-subject">{{ \'APPLICATION_ACTIONS\' | translate }}</span>:\n </div>\n </div>\n <div class="portlet-body">\n <div class="portlet light bordered" ng-repeat="action in trigger.Actions">\n <div class="portlet-title">\n <div class="caption font-blue-hoki">\n <span class="caption-subject">{{ \'APPLICATION_ACTIONS\' | translate }} #{{$index+1}}</span>\n </div>\n <div class="actions">\n <a href="#" class="btn red-sunglo btn-icon-only" ng-click="removeAction($index)"><i class="fa fa-trash"></i></a>\n </div>\n </div>\n <div class="portlet-body">\n <div class="padding-bottom row">\n <div class="col-md-12">\n <div class="form-group col-md-6" data-ng-class="{\'has-error\': (forms.general[\'action\'+$index].$touched || forms.general.$submitted) && forms.general[\'action\'+$index].$invalid}">\n <ui-select data-ng-model="action.action" theme="bootstrap" name="action{{$index}}" data-ng-change="resetActionData(action)" required>\n <ui-select-match placeholder="{{ \'APPLICATION_ACTION\' | translate }}">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="tAction.value as tAction in $triggers.services[trigger.channel].actions | filter: $select.search">\n <div ng-bind-html="tAction.name | translate | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.general[\'action\'+$index].$touched || forms.general.$submitted) && forms.general[\'action\'+$index].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div ng-switch="action.action">\n <action-builder-template ng-switch-when="template" element="action" form="forms.general"></action-builder-template>\n <action-builder-account-template ng-switch-when="accountTemplate" element="action" form="forms.general"></action-builder-account-template>\n <action-builder-integration ng-switch-when="integration" element="action" form="forms.general"></action-builder-integration>\n <action-builder-motion-bar ng-switch-when="motionbar" element="action" form="forms.general"></action-builder-motion-bar>\n <action-builder-jscripty ng-switch-when="jscripty" element="action" form="forms.general"></action-builder-jscripty>\n <action-builder-url-forward ng-switch-when="urlForward" element="action" form="forms.general"></action-builder-url-forward>\n <action-builder-close ng-switch-when="close" element="action" form="forms.general"></action-builder-close>\n <action-builder-forward ng-switch-when="forward" element="action" form="forms.general"></action-builder-forward>\n <action-builder-tag ng-switch-when="tag" element="action" form="forms.general"></action-builder-tag>\n <action-builder-http ng-switch-when="http" element="action" form="forms.general"></action-builder-http>\n <action-builder-email ng-switch-when="email" element="action" form="forms.general"></action-builder-email>\n <action-builder-account-email ng-switch-when="accountEmail" element="action" form="forms.general"></action-builder-account-email>\n <action-builder-account-sms ng-switch-when="accountSms" element="action" form="forms.general"></action-builder-account-sms>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class="row">\n <div class="col-md-12">\n <button type="button" class="btn btn-sm green padding-bottom" data-ng-click="addAction()">\n <i class="fa fa-plus"></i> {{\'APPLICATION_ADD_ACTION\' | translate}}\n </button>\n </div>\n </div>\n </div>\n </div>\n <div class="has-error" data-ng-show="forms.general.$submitted && !trigger.All.length && !trigger.Any.length">\n <span class="help-block help-block-error form-control">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INSERT_AT_LEAST_ONE_CONDITION\' | translate}}.\n </span>\n </div>\n <div class="has-error" data-ng-show="forms.general.$submitted && !trigger.Actions.length">\n <span class="help-block help-block-error form-control">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INSERT_AT_LEAST_ONE_ACTION\' | translate}}.\n </span>\n </div>\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}" />\n </div>\n </div>\n </form>\n </div>\n </div>\n</div>\n</div>\n'),a.put("app/tools/trigger/wizard/wizard.html",'<div class="row">\n <div class="col-md-12">\n <!-- BEGIN PAGE HEADER-->\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-wrench"></i>\n <a href="#">{{ \'APPLICATION_TOOLS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-bulb"></i>\n <a href="/tools/triggers/list">{{ \'APPLICATION_TRIGGERS\' | translate }}</a>\n </li>\n </ul>\n </div>\n <!-- END PAGE HEADER-->\n\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-bulb font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_TRIGGERS\' | translate }} WIZARD</span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="createItem()">\n <wz-step title="{{\'APPLICATION_GENERAL\' | translate}}" canexit="exitValidation(forms.general.$valid)">\n <form name="forms.general" novalidate>\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START STATUS -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_STATUS\' | translate}}</label>\n </br>\n <input bs-switch class="form-control" ng-model="item.status" type="checkbox" name="status" data-ng-init="item.status = 0" switch-active="{{ statusSwitch.isActive }}" switch-on-text="{{ statusSwitch.onText }}" switch-off-text="{{ statusSwitch.offText }}"\n switch-on-color="{{ statusSwitch.onColor }}" switch-off-color="{{ statusSwitch.offColor }}" switch-animate="{{ statusSwitch.animate }}" switch-size="{{ statusSwitch.size }}" switch-label="{{ statusSwitch.label }}" switch-icon="{{ statusSwitch.icon }}"\n switch-radio-off="{{ statusSwitch.radioOff }}" switch-label-width="{{ statusSwitch.labelWidth }}" switch-handle-width="{{ statusSwitch.handleWidth }}">\n </div>\n <!-- END STATUS -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description" />\n </div>\n <!-- END DESCRIPTION -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" ng-click="next()" />\n </form>\n </wz-step>\n <wz-step title="{{\'APPLICATION_SETTINGS\' | translate}}" canexit="exitSettingsValidation(forms.settings.$valid)">\n <form name="forms.settings" novalidate>\n\n <!-- Channel -->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-blue-hoki">\n <i class="icon-tag font-blue-hoki"></i>\n <span class="caption-subject">{{ \'APPLICATION_CHANNEL\' | translate }}</span>\n </div>\n </div>\n <div class="portlet-body">\n <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.channel.$touched || forms.settings.$submitted) && forms.settings.channel.$invalid}">\n <label class="control-label">{{ \'APPLICATION_CHANNEL\' | translate }}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="item.channel" name="channel" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_CHANNEL\' | translate }}">{{$select.selected | capitalize}}</ui-select-match>\n <ui-select-choices repeat="channel in $triggers.channels | filter: $select.search">\n <div ng-bind-html="channel | highlight: $select.search | capitalize"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(forms.settings.channel.$touched || forms.settings.$submitted) && forms.settings.channel.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n </div>\n </div>\n\n <!-- All -->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-blue-hoki">\n <i class="icon-tag font-blue-hoki"></i>\n <span class="caption-subject" ng-bind-html="\'APPLICATION_MEET_ALL_CONDITIONS\' | translate"></span>:\n </div>\n </div>\n <div class="portlet-body">\n <div class="portlet light bordered" ng-repeat="all in item.All">\n <div class="portlet-title">\n <div class="caption font-blue-hoki">\n <span class="caption-subject">{{ \'APPLICATION_ALL\' | translate }} #{{$index+1}}</span>\n </div>\n <div class="actions">\n <a href="#" class="btn red-sunglo btn-icon-only" ng-click="removeCondition(\'All\',$index)"><i class="fa fa-trash"></i></a>\n </div>\n </div>\n <div class="portlet-body">\n <div class="padding-bottom row">\n <div class="col-md-12">\n <condition-builder element="all" serviceindex="item.channel" service="$triggers" form="forms.general"></condition-builder>\n </div>\n </div>\n </div>\n </div>\n <div class="row">\n <div class="col-md-12">\n <button type="button" class="btn btn-sm green padding-bottom" data-ng-click="addCondition(\'All\')">\n <i class="fa fa-plus"></i> {{\'APPLICATION_ADD_CONDITION\' | translate}}\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Any -->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-blue-hoki">\n <i class="icon-tag font-blue-hoki"></i>\n <span class="caption-subject" ng-bind-html="\'APPLICATION_MEET_ANY_CONDITIONS\' | translate"></span>:\n </div>\n </div>\n <div class="portlet-body">\n <div class="portlet light bordered" ng-repeat="any in item.Any">\n <div class="portlet-title">\n <div class="caption font-blue-hoki">\n <span class="caption-subject">{{ \'APPLICATION_ANY\' | translate }} #{{$index+1}}</span>\n </div>\n <div class="actions">\n <a href="#" class="btn red-sunglo btn-icon-only" ng-click="removeCondition(\'Any\',$index)"><i class="fa fa-trash"></i></a>\n </div>\n </div>\n <div class="portlet-body">\n <div class="padding-bottom row">\n <div class="col-md-12">\n <condition-builder element="any" serviceindex="item.channel" service="$triggers" form="forms.general"></condition-builder>\n </div>\n </div>\n </div>\n </div>\n <div class="row">\n <div class="col-md-12">\n <button type="button" class="btn btn-sm green padding-bottom" data-ng-click="addCondition(\'Any\')">\n <i class="fa fa-plus"></i> {{\'APPLICATION_ADD_CONDITION\' | translate}}\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Actions -->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-blue-hoki">\n <i class="icon-tag font-blue-hoki"></i>\n <span class="caption-subject">{{ \'APPLICATION_ACTIONS\' | translate }}</span>:\n </div>\n </div>\n <div class="portlet-body">\n <div class="portlet light bordered" ng-repeat="action in item.Actions">\n <div class="portlet-title">\n <div class="caption font-blue-hoki">\n <span class="caption-subject">{{ \'APPLICATION_ACTIONS\' | translate }} #{{$index+1}}</span>\n </div>\n <div class="actions">\n <a href="#" class="btn red-sunglo btn-icon-only" ng-click="removeAction($index)"><i class="fa fa-trash"></i></a>\n </div>\n </div>\n <div class="portlet-body">\n <div class="padding-bottom row">\n <!-- <div class="col-md-12"> -->\n <div class="form-group col-md-6" data-ng-class="{\'has-error\': (forms.general[\'action\'+$index].$touched || forms.general.$submitted) && forms.general[\'action\'+$index].$invalid}">\n <ui-select data-ng-model="action.action" theme="bootstrap" data-ng-change="resetActionData(action)" name="action{{$index}}" required>\n <ui-select-match placeholder="{{ \'APPLICATION_ACTION\' | translate }}">{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="tAction.value as tAction in $triggers.services[item.channel].actions | filter: $select.search">\n <div ng-bind-html="tAction.name | translate | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <!-- <span class="help-block">\n {{ \'APPLICATION_ACTION\' | translate }}\n </span> -->\n <span data-ng-show="(forms.general[\'action\'+$index].$touched || forms.general.$submitted) && forms.general[\'action\'+$index].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <div ng-switch="action.action">\n <action-builder-template ng-switch-when="template" element="action" form="forms.general"></action-builder-template>\n <action-builder-account-template ng-switch-when="accountTemplate" element="action" form="forms.general"></action-builder-account-template>\n <action-builder-integration ng-switch-when="integration" element="action" form="forms.general"></action-builder-integration>\n <action-builder-motion-bar ng-switch-when="motionbar" element="action" form="forms.general"></action-builder-motion-bar>\n <action-builder-jscripty ng-switch-when="jscripty" element="action" form="forms.general"></action-builder-jscripty>\n <action-builder-url-forward ng-switch-when="urlForward" element="action" form="forms.general"></action-builder-url-forward>\n <action-builder-close ng-switch-when="close" element="action" form="forms.general"></action-builder-close>\n <action-builder-forward ng-switch-when="forward" element="action" form="forms.general"></action-builder-forward>\n <action-builder-tag ng-switch-when="tag" element="action" form="forms.general"></action-builder-tag>\n <action-builder-http ng-switch-when="http" element="action" form="forms.general"></action-builder-http>\n <action-builder-email ng-switch-when="email" element="action" form="forms.general"></action-builder-email>\n <action-builder-account-email ng-switch-when="accountEmail" element="action" form="forms.general"></action-builder-account-email>\n <action-builder-account-sms ng-switch-when="accountSms" element="action" form="forms.general"></action-builder-account-sms>\n </div>\n <!-- </div> -->\n </div>\n </div>\n </div>\n <div class="row">\n <div class="col-md-12">\n <button type="button" class="btn btn-sm green padding-bottom" data-ng-click="addAction()">\n <i class="fa fa-plus"></i> {{\'APPLICATION_ADD_ACTION\' | translate}}\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <div class="has-error" data-ng-show="forms.settings.$submitted && !item.All.length && !item.Any.length">\n <span class="help-block help-block-error form-control">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INSERT_AT_LEAST_ONE_CONDITION\' | translate}}.\n </span>\n </div>\n <div class="has-error" data-ng-show="forms.settings.$submitted && !item.Actions.length">\n <span class="help-block help-block-error form-control">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INSERT_AT_LEAST_ONE_ACTION\' | translate}}.\n </span>\n </div>\n <button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" ng-click="next()" />\n </form>\n </wz-step>\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n <input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}" />\n </wz-step>\n </wizard>\n </div>\n </div>\n <!-- END PORTLET-->\n</div>\n</div>\n<!-- END PAGE CONTENT-->\n'), +a.put("app/tools/trunk/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-wrench"></i>\n <a href="#">{{ \'APPLICATION_TOOLS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-link"></i>\n <a href="#">{{ \'APPLICATION_TRUNKS\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-link font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_TRUNKS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <a class="btn green-jungle" href="/tools/trunks/wizard" data-toggle="dropdown">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_TRUNK\' | translate }}\n </a>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/tools/trunk/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-wrench"></i>\n <a href="#">{{ \'APPLICATION_TOOLS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-link"></i>\n <a href="/tools/trunks/list">{{ \'APPLICATION_TRUNKS\' | translate }}</a>\n <i data-ng-show="trunk" class="fa fa-angle-right"></i>\n </li>\n <li data-ng-show="trunk">\n <a href="#">{{trunk.name}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/trunk.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{trunk.name}}\n </div>\n <p data-ng-if="trunk.active && trunk.registry && trunk.status">({{trunk.status}})</p>\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.tools.trunks.view.settings\')}">\n <a data-ng-href="/tools/trunks/view/{{trunk.name}}/settings"><i class="icon-settings"></i> {{ \'APPLICATION_SETTINGS\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/tools/trunk/view/view.settings.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_TRUNK\' | translate}} {{ \'APPLICATION_SETTINGS\' | translate}} </span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_2" data-toggle="tab">{{ \'APPLICATION_ADVANCED\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_3" data-toggle="tab">{{ \'APPLICATION_OTHER_FIELDS\' | translate}}</a>\n </li>\n </ul>\n </div>\n\n <div class="portlet-body" data-ng-init="getContexts();">\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.general" data-ng-submit="forms.general.$valid && updateTrunk()" novalidate>\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="trunk.name" data-ng-pattern="settings.patternName" required readonly/>\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_PATTERN_NAME\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START ACTIVE -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_ACTIVE\' | translate}}</label></br>\n <input\n bs-switch\n class="form-control"\n ng-model="trunk.active"\n type="checkbox"\n name="auth"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-off-color="{{ activeSwitch.offColor }}"\n switch-on-color="{{ activeSwitch.onColor }}"\n switch-animate="{{ activeSwitch.animate }}"\n switch-size="{{ activeSwitch.size }}"\n switch-label="{{ activeSwitch.label }}"\n switch-icon="{{ activeSwitch.icon }}"\n switch-radio-off="{{ activeSwitch.radioOff }}"\n switch-label-width="{{ activeSwitch.labelWidth }}"\n switch-handle-width="{{ activeSwitch.handleWidth }}">\n </div>\n <!-- END ACTIVE -->\n <div class="row">\n\n <div class="col-md-6">\n\n <!-- START HOST -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.host.$touched || forms.general.$submitted) && forms.general.host.$invalid}">\n <label class="control-label">{{\'APPLICATION_HOST\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="host" placeholder="{{\'APPLICATION_HOST\' | translate}}" class="form-control" data-ng-model="trunk.host" required/>\n <span class="help-block">\n {{ \'DESCRIPTION_TRUNK_HOST\' | translate }}\n </span>\n <span data-ng-show="(forms.general.host.$touched || forms.general.$submitted) && forms.general.host.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END HOST -->\n\n <!-- START SECRET -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.secret.$touched || forms.general.$submitted) && forms.general.secret.$invalid}">\n <label class="control-label">{{\'APPLICATION_SECRET\' | translate}}</label>\n <input type="password" name="secret" placeholder="{{\'APPLICATION_SECRET\' | translate}}" class="form-control" data-ng-model="trunk.secret">\n <span class="help-block">\n {{ \'DESCRIPTION_TRUNK_SECRET\' | translate }}\n </span>\n <span data-ng-show="(forms.general.secret.$touched || forms.general.$submitted) && forms.general.secret.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END SECRET -->\n\n <!-- START CONTEXT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.context.$touched || forms.general.$submitted) && forms.general.context.$invalid}">\n <label class="control-label">{{\'APPLICATION_CONTEXT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="trunk.context" name="context" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="context.name as context in voiceContexts | filter: $select.search">\n <div ng-bind-html="context.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_TRUNK_VOICE_CONTEXT\' | translate }}\n </span>\n <span data-ng-show="(forms.general.context.$touched || forms.general.$submitted) && forms.general.context.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CONTEXT -->\n\n <!-- START CALLERID -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.callerid.$touched || forms.general.$submitted) && forms.general.callerid.$invalid}">\n <label class="control-label">{{\'APPLICATION_CALLERID\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="callerid" pattern=\'^"[a-zA-Z0-9_.-]*" <[a-zA-Z0-9_.-]*>\' placeholder="{{\'APPLICATION_CALLERID\' | translate}}" class="form-control" data-ng-model="trunk.callerid"/>\n <span class="help-block">\n {{ \'DESCRIPTION_OUTBOUND_CALLERID\' | translate }} "name" <number>\n </span>\n <span data-ng-show="(forms.general.callerid.$touched || forms.general.$submitted) && forms.general.callerid.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CALLERID -->\n\n <!-- START TYPE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.type.$touched || forms.general.$submitted) && forms.general.type.$invalid}">\n <label class="control-label">{{\'APPLICATION_TYPE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="trunk.type" name="type" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n <ui-select-choices repeat="item in [\'user\',\'peer\',\'friend\'] | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search | capitalize"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_TRUNK_TYPE\' | translate }}\n </span>\n <span data-ng-show="(forms.general.type.$touched || forms.general.$submitted) && forms.general.type.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TYPE -->\n\n <!-- START DTMFMODE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.dtmfmode.$touched || forms.general.$submitted) && forms.general.dtmfmode.$invalid}">\n <label class="control-label">{{\'APPLICATION_DTMFMODE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="trunk.dtmfmode" name="dtmfmode" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="item in [\'rfc2833\', \'info\', \'shortinfo\', \'inband\',\'auto\'] | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_TRUNK_DTMFMODE\' | translate }}\n </span>\n <span data-ng-show="(forms.general.dtmfmode.$touched || forms.general.$submitted) && forms.general.dtmfmode.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END DTMFMODE -->\n\n </div>\n\n <div class="col-md-6">\n\n <!-- START DEFAULT USER -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.general.$submitted && forms.general.defaultuser.$invalid}">\n <label class="control-label">{{\'APPLICATION_DEFAULT_USER\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="defaultuser" placeholder="{{\'APPLICATION_DEFAULT_USER\' | translate}}" class="form-control" data-ng-model="trunk.defaultuser" required/>\n <span class="help-block">\n {{ \'DESCRIPTION_TRUNK_DEFAULT_USER\' | translate }}\n </span>\n <span data-ng-show="forms.general.$submitted && (forms.general.defaultuser.$invalid)" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END DEFAULT USER -->\n\n <!-- START NAT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.nat.$touched || forms.general.$submitted) && forms.general.nat.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select multiple data-ng-model="trunk.nat" name="nat" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$item}}</ui-select-match>\n <ui-select-choices repeat="item in [\'yes\', \'no\', \'never\', \'route\', \'force_rport\', \'comedia\'] | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_TRUNK_NAT\' | translate }}\n </span>\n <span data-ng-show="(forms.general.nat.$touched || forms.general.$submitted) && forms.general.nat.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAT -->\n\n <!-- START QUALIFY -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.qualify.$touched || forms.general.$submitted) && forms.general.qualify.$invalid}">\n <label class="control-label">{{\'APPLICATION_QUALIFY\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="trunk.qualify" name="qualify" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n <ui-select-choices repeat="item in [\'yes\',\'no\'] | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search | capitalize"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_TRUNK_QUALIFY\' | translate }}\n </span>\n <span data-ng-show="(forms.general.qualify.$touched || forms.general.$submitted) && forms.general.qualify.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END QUALIFY -->\n\n <!-- START ALLOW -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.allow.$touched || forms.general.$submitted) && forms.general.allow.$invalid}">\n <label class="control-label">{{\'APPLICATION_ALLOW_CODEC\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select multiple data-ng-model="trunk.allow" name="allow" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$item}}</ui-select-match>\n <ui-select-choices repeat="item in [\'g723\',\'gsm\',\'ulaw\',\'alaw\',\'g726\',\'g722\',\'g729\',\'ilbc\'] | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_TRUNK_ALLOW_CODEC\' | translate }}\n </span>\n <span data-ng-show="(forms.general.allow.$touched || forms.general.$submitted) && forms.general.allow.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END ALLOW -->\n\n <!-- START INSECURE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.insecure.$touched || forms.general.$submitted) && forms.general.insecure.$invalid}">\n <label class="control-label">{{\'APPLICATION_INSECURE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select multiple data-ng-model="trunk.insecure" name="insecure" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$item}}</ui-select-match>\n <ui-select-choices repeat="item in [\'port\',\'invite\',\'very\'] | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_TRUNK_INSECURE\' | translate }}\n </span>\n <span data-ng-show="(forms.general.insecure.$touched || forms.general.$submitted) && forms.general.insecure.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END INSECURE -->\n\n <!-- START CALLLIMIT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.call_limit.$touched || forms.general.$submitted) && forms.general.call_limit.$invalid}">\n <label class="control-label">{{\'APPLICATION_CALLLIMIT\' | translate}}</label>\n <input type="number" min="0" name="call-limit" placeholder="{{\'APPLICATION_CALLLIMIT\' | translate}}" class="form-control" data-ng-model="trunk.call_limit"/>\n <span class="help-block">\n {{ \'DESCRIPTION_TRUNK_CALLLIMIT\' | translate }}\n </span>\n </div>\n <!-- END CALLLIMIT -->\n\n </div>\n </div>\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="trunk.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END GENERAL TAB -->\n <!-- ADVANCED TAB -->\n <div class="tab-pane" id="tab_1_2">\n <form name="forms.advanced" data-ng-submit="forms.advanced.$valid && updateTrunk()" novalidate>\n <div class="row">\n <div class="col-md-6">\n\n <!-- START REGISTRY -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_REGISTRY\' | translate}}</label>\n <input type="text" name="registry" placeholder="{{\'APPLICATION_REGISTRY\' | translate}}" class="form-control" data-ng-model="trunk.registry"/>\n <span class="help-block">\n {{ \'DESCRIPTION_TRUNK_REGISTRY\' | translate }}\n </span>\n </div>\n <!-- END REGISTRY -->\n\n <!-- START DIRECTMEDIA -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.directmedia.$touched || forms.advanced.$submitted) && forms.advanced.directmedia.$invalid}">\n <label class="control-label">{{\'APPLICATION_DIRECTMEDIA\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="trunk.directmedia" name="directmedia" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n <ui-select-choices repeat="item in [\'yes\', \'no\', \'nonat\', \'update\'] | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search | capitalize"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_TRUNK_DIRECTMEDIA\' | translate }}\n </span>\n <span data-ng-show="(forms.advanced.directmedia.$touched || forms.advanced.$submitted) && forms.advanced.directmedia.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END DIRECTMEDIA -->\n\n <!-- START CALLCOUNTER -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.callcounter.$touched || forms.advanced.$submitted) && forms.advanced.callcounter.$invalid}">\n <label class="control-label">{{\'APPLICATION_CALLCOUNTER\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="trunk.callcounter" name="callcounter" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n <ui-select-choices repeat="item in [\'yes\',\'no\'] | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search | capitalize"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_TRUNK_CALLCOUNTER\' | translate }}\n </span>\n <span data-ng-show="(forms.advanced.callcounter.$touched || forms.advanced.$submitted) && forms.advanced.callcounter.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END CALLCOUNTER -->\n\n <!-- START FROMDOMAIN -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.advanced.$submitted && forms.advanced.fromdomain.$invalid}">\n <label class="control-label">{{\'APPLICATION_FROMDOMAIN\' | translate}}</label>\n <input type="text" name="fromdomain" placeholder="{{\'APPLICATION_FROMDOMAIN\' | translate}}" class="form-control" data-ng-model="trunk.fromdomain" />\n <span class="help-block">\n {{ \'DESCRIPTION_TRUNK_FROMDOMAIN\' | translate }}\n </span>\n <span data-ng-show="forms.advanced.$submitted && (forms.advanced.fromdomain.$invalid)" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END FROMDOMAIN -->\n\n <!-- START FROMUSER -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.advanced.$submitted && forms.advanced.fromuser.$invalid}">\n <label class="control-label">{{\'APPLICATION_FROMUSER\' | translate}}</label>\n <input type="text" name="fromuser" placeholder="{{\'APPLICATION_FROMUSER\' | translate}}" class="form-control" data-ng-model="trunk.fromuser" />\n <span class="help-block">\n {{ \'DESCRIPTION_TRUNK_FROMUSER\' | translate }}\n </span>\n <span data-ng-show="forms.advanced.$submitted && (forms.advanced.fromuser.$invalid)" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END FROMUSER -->\n\n </div>\n <div class="col-md-6">\n\n <!-- START OUTBOUNDPROXY -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.advanced.$submitted && forms.advanced.outboundproxy.$invalid}">\n <label class="control-label">{{\'APPLICATION_OUTBOUNDPROXY\' | translate}}</label>\n <input type="text" name="outboundproxy" placeholder="{{\'APPLICATION_OUTBOUNDPROXY\' | translate}}" class="form-control" data-ng-model="trunk.outboundproxy" />\n <span class="help-block">\n {{ \'DESCRIPTION_TRUNK_OUTBOUNDPROXY\' | translate }}\n </span>\n <span data-ng-show="forms.advanced.$submitted && (forms.advanced.outboundproxy.$invalid)" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END OUTBOUNDPROXY -->\n\n <!-- START USEREQPHONE -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.usereqphone.$touched || forms.advanced.$submitted) && forms.advanced.usereqphone.$invalid}">\n <label class="control-label">{{\'APPLICATION_USEREQPHONE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="trunk.usereqphone" name="usereqphone" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n <ui-select-choices repeat="item in [\'yes\',\'no\'] | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search | capitalize"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_TRUNK_USEREQPHONE\' | translate }}\n </span>\n <span data-ng-show="(forms.advanced.usereqphone.$touched || forms.advanced.$submitted) && forms.advanced.usereqphone.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END USEREQPHONE -->\n\n <!-- START TRUSTRPID -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.trustrpid.$touched || forms.advanced.$submitted) && forms.advanced.trustrpid.$invalid}">\n <label class="control-label">{{\'APPLICATION_TRUSTRPID\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="trunk.trustrpid" name="trustrpid" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n <ui-select-choices repeat="item in [\'yes\',\'no\'] | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search | capitalize"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_TRUNK_TRUSTRPID\' | translate }}\n </span>\n <span data-ng-show="(forms.advanced.trustrpid.$touched || forms.advanced.$submitted) && forms.advanced.trustrpid.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TRUSTRPID -->\n\n <!-- START SENDRPID -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.sendrpid.$touched || forms.advanced.$submitted) && forms.advanced.sendrpid.$invalid}">\n <label class="control-label">{{\'APPLICATION_SENDRPID\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="trunk.sendrpid" name="sendrpid" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n <ui-select-choices repeat="item in [\'yes\',\'no\'] | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search | capitalize"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_TRUNK_SENDRPID\' | translate }}\n </span>\n <span data-ng-show="(forms.advanced.sendrpid.$touched || forms.advanced.$submitted) && forms.advanced.sendrpid.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END SENDRPID -->\n\n <!-- START ENCRYPTION -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.encryption.$touched || forms.advanced.$submitted) && forms.advanced.encryption.$invalid}">\n <label class="control-label">{{\'APPLICATION_ENCRYPTION\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="trunk.encryption" name="encryption" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n <ui-select-choices repeat="item in [\'yes\',\'no\'] | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search | capitalize"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_TRUNK_ENCRYPTION\' | translate }}\n </span>\n <span data-ng-show="(forms.advanced.encryption.$touched || forms.advanced.$submitted) && forms.advanced.encryption.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END ENCRYPTION -->\n\n <!-- START PORT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.port.$touched || forms.advanced.$submitted) && forms.advanced.port.$invalid}">\n <label class="control-label">{{\'APPLICATION_PORT\' | translate}}</label>\n <input type="number" min="0" name="port" placeholder="{{\'APPLICATION_PORT\' | translate}}" class="form-control" data-ng-model="trunk.port"/>\n <span class="help-block">\n {{ \'DESCRIPTION_TRUNK_PORT\' | translate }}\n </span>\n <span data-ng-show="(forms.advanced.port.$touched || forms.advanced.$submitted) && forms.advanced.port.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PORT -->\n\n <!-- START TRANSPORT -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.transport.$touched || forms.advanced.$submitted) && forms.advanced.transport.$invalid}">\n <label class="control-label">{{\'APPLICATION_TRANSPORT\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select multiple data-ng-model="trunk.transport" name="transport" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$item}}</ui-select-match>\n <ui-select-choices repeat="item in [\'udp\',\'wss\',\'ws\',\'tcp\',\'tls\'] | filter: $select.search">\n <div ng-bind-html="item | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'DESCRIPTION_TRUNK_TRANSPORT\' | translate }}\n </span>\n <span data-ng-show="(forms.advanced.transport.$touched || forms.advanced.$submitted) && forms.advanced.transport.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TRANSPORT -->\n\n </div>\n </div>\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END ADVANCED TAB -->\n <!-- START OTHER FIELDS TAB -->\n <div class="tab-pane" id="tab_1_3">\n <form name="forms.otherFields" data-ng-submit="forms.otherFields.$valid && updateTrunk()" novalidate>\n <div class="row">\n <div class="col-md-6">\n <!-- START OTHER FIELDS-->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_OTHER_FIELDS\' | translate}}</label>\n <textarea name="otherFields" placeholder="{{\'APPLICATION_OTHER_FIELDS\' | translate}}" class="form-control otherfields-col" data-ng-model="trunk.otherFields"></textarea>\n <span class="help-block">\n {{ \'DESCRIPTION_TRUNK_OTHER_FIELDS\' | translate }}\n </span>\n </div>\n <!-- END OTHER FIELDS -->\n </div>\n <div class="col-md-6">\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_EXAMPLE\' | translate}}</label>\n <div class="well">\n <div>host=dynamicp</div>\n <div>secret=********</div>\n <div>regcontext=tammari-internal</div>\n <div>regexten=1005</div>\n <div>dtmfmode=rfc2833</div>\n <div>insecure=invite,port</div>\n <div>canreinvite=yes</div>\n <div>nat=yes</div>\n <div>qualify=yes</div>\n <div>context=merus-sipphone</div>\n <div>pickupgroup=1</div>\n <div>callgroup=1</div>\n <div>mailbox=1000@default</div>\n </div>\n </div>\n </div>\n </div>\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n\n </div>\n <!-- END OTHER FIELDS TAB -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'), +a.put("app/tools/trunk/wizard/wizard.html",'<div class="col-md-12" data-ng-init="initWizard()">\n <!-- BEGIN PAGE HEADER-->\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-wrench"></i>\n <a href="#">{{ \'APPLICATION_TOOLS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-link"></i>\n <a href="/tools/trunks/list">{{ \'APPLICATION_TRUNKS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-options"></i>\n <a href="#">{{ \'APPLICATION_WIZARD\' | translate }}</a>\n </li>\n </ul>\n </div>\n <!-- END PAGE HEADER-->\n\n <!-- BEGIN PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-link font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_TRUNK\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="createItem()">\n <wz-step title="{{\'APPLICATION_GENERAL\' | translate}}" canexit="exitValidation(forms.general.$valid)">\n <form name="forms.general" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.$submitted && forms.general.name.$invalid) || forms.general.name.$error.pattern}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" data-ng-pattern="settings.patternName" required/>\n <span data-ng-show="forms.general.$submitted && forms.general.name.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$error.pattern" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_INVALID_PATTERN_NAME\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START HOST -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.general.$submitted && forms.general.host.$invalid}">\n <label class="control-label">{{\'APPLICATION_HOST\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="host" placeholder="{{\'APPLICATION_HOST\' | translate}}" class="form-control" data-ng-model="item.host" required/>\n <span class="help-block">\n {{ \'DESCRIPTION_TRUNK_HOST\' | translate }}\n </span>\n <span data-ng-show="forms.general.$submitted && forms.general.host.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END HOST -->\n\n <!-- START PASSWORD -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.general.$submitted && forms.general.password.$invalid}">\n <label class="control-label">{{\'APPLICATION_SECRET\' | translate}}</label>\n <input type="password" name="password" placeholder="{{\'APPLICATION_PASSWORD\' | translate}}" class="form-control" data-ng-model="item.secret"/>\n <span class="help-block">\n {{ \'DESCRIPTION_TRUNK_SECRET\' | translate }}\n </span>\n <span data-ng-show="forms.general.$submitted && forms.general.password.$invalid" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PASSWORD -->\n\n <!-- START DEFAULT USER -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.general.$submitted && forms.general.defaultuser.$invalid}">\n <label class="control-label">{{\'APPLICATION_DEFAULT_USER\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="defaultuser" placeholder="{{\'APPLICATION_DEFAULT\' | translate}} {{\'APPLICATION_USER\' | translate}}" class="form-control" data-ng-model="item.defaultuser" required/>\n <span class="help-block">\n {{ \'DESCRIPTION_TRUNK_DEFAULT_USER\' | translate }}\n </span>\n <span data-ng-show="forms.general.$submitted && (forms.general.defaultuser.$invalid)" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_PASSWORD\' | translate}}.\n </span>\n </div>\n <!-- END DEFAULT USER -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n <button class="btn green-haze" type="submit" ng-click="next(true)">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n </form>\n </wz-step>\n\n <wz-step title="{{\'APPLICATION_ADVANCED\' | translate}}" canexit="exitValidation(forms.advanced.$valid)">\n <form name="forms.advanced" novalidate>\n\n <!-- START REGISTRY -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_REGISTRY\' | translate}}</label>\n <input type="text" name="registry" placeholder="{{\'APPLICATION_REGISTRY\' | translate}}" class="form-control" data-ng-model="item.registry"/>\n <span class="help-block">\n {{ \'DESCRIPTION_TRUNK_REGISTRY\' | translate }}\n </span>\n </div>\n <!-- END REGISTRY -->\n <button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n <button class="btn green-haze" type="submit" ng-click="next()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n </form>\n </wz-step>\n\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n <input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n </wz-step>\n </wizard>\n </div>\n </div>\n <!-- END PORTLET-->\n</div>\n'),a.put("app/tools/variable/list/list.create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_VARIABLE\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.name.$touched || form.$submitted) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="(form.name.$touched || form.$submitted) && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/tools/variable/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-wrench"></i>\n <a href="#">{{ \'APPLICATION_TOOLS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-eye"></i>\n <a href="#">{{ \'APPLICATION_VARIABLES\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-docs font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_VARIABLES\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <button class="btn green-jungle " ng-click="createItem()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_VARIABLE\' | translate }}\n </button>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/tools/variable/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getVariable()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-wrench"></i>\n <a href="#">{{ \'APPLICATION_TOOLS\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-eye"></i>\n <a href="/tools/variables/list">{{ \'APPLICATION_VARIABLES\' | translate }}</a>\n <i data-ng-show="variable" class="fa fa-angle-right"></i>\n </li>\n <li data-ng-show="variable">\n <a href="#">{{variable.name}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/variable.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{variable.name}}\n </div>\n <!-- <div class="profile-usertitle-job">\n {{user.role}}\n </div> -->\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.tools.variables.view.settings\')}">\n <a data-ng-href="/tools/variables/view/{{variable.id}}/settings">\n <i class="icon-settings"></i>\n {{ \'APPLICATION_SETTINGS\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/tools/variable/view/view.settings.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_VARIABLE\' | translate}} {{ \'APPLICATION_SETTINGS\' | translate}} </span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n </li>\n </ul>\n </div>\n\n <div class="portlet-body">\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.general" data-ng-submit="forms.general.$valid && updateVariable()" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="variable.name" required/>\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="variable.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END ADVANCED TAB -->\n\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/tools/yourdashboard/list/clone.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_CLONE_DASHBOARD\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="forms.dashboard" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.dashboard.name.$touched || forms.dashboard.$submitted) && forms.dashboard.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="(forms.dashboard.name.$touched || forms.dashboard.$submitted) && forms.dashboard.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="ok()" ng-disabled="forms.dashboard.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/tools/yourdashboard/list/create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_DASHBOARD\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="forms.dashboard" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.dashboard.name.$touched || forms.dashboard.$submitted) && forms.dashboard.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="(forms.dashboard.name.$touched || forms.dashboard.$submitted) && forms.dashboard.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="ok()" ng-disabled="forms.dashboard.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/tools/yourdashboard/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-tachometer"></i>\n <a href="/tools/yourdashboards/list">{{ \'APPLICATION_YOUR_DASHBOARDS\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-docs font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_YOUR_DASHBOARDS\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <button class="btn green-jungle " ng-click="create()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_DASHBOARD\' | translate }}\n </button>\n </div>\n <!-- <a class="btn btn-icon-only btn-default fullscreen" href="#"></a> -->\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/tools/yourdashboard/show/leaveEditedDashboard.modal.html",'<div class="modal-header" data-ng-init="getContacts()">\n <h3 class="modal-title">{{ \'APPLICATION_WARNING\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <p>{{\'MESSAGE_LEAVE_EDITED_PAGE\' | translate}}</p>\n</div>\n<div class="modal-footer">\n <button class="btn btn-danger" type="button" ng-click="close()">{{ \'APPLICATION_CONTINUE\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/tools/yourdashboard/show/show.html",'<div class="row" style="min-height: 466px;" id="yourDashboardView">\n <div class="col-md-12" ng-init="getDashboard()">\n <adf-dashboard\n data-ng-if="dashboard"\n name="{{dashboard.name}}"\n collapsible="{{dashboard.collapsible}}"\n maximizable="{{dashboard.maximizable}}"\n enableconfirmdelete="{{dashboard.enableconfirmdelete}}"\n structure="{{dashboard.structure}}"\n editable="{{dashboard.editable}}"\n adf-model="dashboard.model"/>\n </div>\n</div>\n'),a.put("app/tools/yourdashboard/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getDashboard()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="fa fa-tachometer"></i>\n <a href="/tools/yourdashboards/list">{{ \'APPLICATION_YOUR_DASHBOARDS\' | translate }}</a>\n <i data-ng-show="dashboard" class="fa fa-angle-right"></i>\n </li>\n <li data-ng-show="dashboard">\n <a href="#">{{dashboard.name}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img data-ng-src="assets/images/media/dashboard.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{dashboard.name}}\n </div>\n <!-- <div class="profile-usertitle-job">\n {{user.role}}\n </div> -->\n </div>\n <!-- END SIDEBAR USER TITLE -->\n\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.tools.yourdashboards.view.settings\')}">\n <a data-ng-href="/tools/yourdashboards/view/{{dashboard.id}}/settings">\n <i class="icon-settings"></i>\n {{ \'APPLICATION_SETTINGS\' | translate}} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/tools/yourdashboard/view/view.settings.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_DASHBOARD\' | translate}} {{ \'APPLICATION_SETTINGS\' | translate}} </span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n </li>\n </ul>\n </div>\n\n <div class="portlet-body">\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.general" data-ng-submit="forms.general.$valid && updateDashboard()" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="dashboard.name" required/>\n <span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START VISIBLE TO ADMIN -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_VISIBLE_TO_ADMIN\' | translate}}</label><br>\n <input\n bs-switch\n ng-model="dashboard.admin"\n type="checkbox"\n switch-active="{{ radioSwitch.isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ radioSwitch.onColor }}"\n switch-off-color="{{ radioSwitch.offColor }}"\n switch-animate="{{ radioSwitch.animate }}"\n switch-size="{{ radioSwitch.size }}"\n switch-label="{{ radioSwitch.label }}"\n switch-icon="{{ radioSwitch.icon }}"\n switch-radio-off="{{ radioSwitch.radioOff }}"\n switch-label-width="{{ radioSwitch.labelWidth }}"\n switch-handle-width="{{ radioSwitch.handleWidth }}">\n </div>\n <!-- END VISIBLE TO ADMIN -->\n\n <!-- START VISIBLE TO USER -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_VISIBLE_TO_USER\' | translate}}</label><br>\n <input\n bs-switch\n ng-model="dashboard.user"\n type="checkbox"\n switch-active="{{ radioSwitch.isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ radioSwitch.onColor }}"\n switch-off-color="{{ radioSwitch.offColor }}"\n switch-animate="{{ radioSwitch.animate }}"\n switch-size="{{ radioSwitch.size }}"\n switch-label="{{ radioSwitch.label }}"\n switch-icon="{{ radioSwitch.icon }}"\n switch-radio-off="{{ radioSwitch.radioOff }}"\n switch-label-width="{{ radioSwitch.labelWidth }}"\n switch-handle-width="{{ radioSwitch.handleWidth }}">\n </div>\n <!-- END VISIBLE TO USER -->\n\n <!-- START VISIBLE TO AGENT -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_VISIBLE_TO_AGENT\' | translate}}</label><br>\n <input\n bs-switch\n ng-model="dashboard.agent"\n type="checkbox"\n switch-active="{{ radioSwitch.isActive }}"\n switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n switch-on-color="{{ radioSwitch.onColor }}"\n switch-off-color="{{ radioSwitch.offColor }}"\n switch-animate="{{ radioSwitch.animate }}"\n switch-size="{{ radioSwitch.size }}"\n switch-label="{{ radioSwitch.label }}"\n switch-icon="{{ radioSwitch.icon }}"\n switch-radio-off="{{ radioSwitch.radioOff }}"\n switch-label-width="{{ radioSwitch.labelWidth }}"\n switch-handle-width="{{ radioSwitch.handleWidth }}">\n </div>\n <!-- END VISIBLE TO AGENT -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="dashboard.description"></textarea>\n </div>\n <!-- END DESCRIPTION -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END ADVANCED TAB -->\n\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/zendesk/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-heart"></i>\n <a href="/zendesk/list">{{ \'APPLICATION_ZENDESK\' | translate }}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered" data-ng-init="initView()">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-heart font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_ZENDESK\' | translate }}</a> </span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <a class="btn green-jungle" href="/zendesk/wizard" data-toggle="dropdown">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_ACCOUNT\' | translate }}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n <!-- END TABLE -->\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/zendesk/view/configuration/list/create.modal.html",'<div class="modal-header">\n <h3 class="modal-title">{{ \'APPLICATION_NEW_CONFIGURATION\' | translate }}</h3>\n</div>\n<div class="modal-body">\n <form name="form" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.name.$touched || form.name.$submitted) && form.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="(form.name.$touched || form.name.$submitted) && form.name.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START CHANNEL -->\n <div class="form-group" data-ng-class="{\'has-error\': (form.channel.$touched || form.channel.$submitted) && form.channel.$invalid}">\n <label class="control-label">{{\'APPLICATION_CHANNEL\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="item.channel" name="channel" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_CHANNEL\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="channel.value as channel in channels | filter: $select.search">\n <div data-ng-bind="channel.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form.channel.$touched || form.channel.$submitted) && form.channel.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- START CHANNEL -->\n\n <!-- START VOICE SUBTYPE -->\n <div data-ng-if="item.channel===\'voice\'" class="form-group" data-ng-class="{\'has-error\': (form.channel.$touched || form.channel.$submitted) && form.channel.$invalid}">\n <label class="control-label">{{\'APPLICATION_TYPE\' | translate}}<span class="required" aria-required="true">*</span></label>\n <ui-select data-ng-model="item.type" name="type" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_TYPE\' | translate}}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="type in [\'Queue\',\'Outbound\'] | filter: $select.search">\n <div data-ng-bind="type | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form.type.$touched || form.type.$submitted) && form.type.$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- START CHANNEL -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"/></textarea>\n </div>\n <!-- END DESCRIPTION -->\n\n </form>\n</div>\n<div class="modal-footer">\n <button class="btn btn-success" type="button" ng-click="save()" ng-disabled="form.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'), +a.put("app/zendesk/view/configuration/list/list.html",'<div ui-view class="profile-content">\n <div class="row">\n <div class="col-md-12">\n <div class="portlet light" data-ng-init="initView()">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_CONFIGURATIONS\' | translate}}</span>\n </div>\n <div class="actions">\n <div class="btn-group" data-ng-show="id.length">\n <a class="btn red" href="#" data-ng-click="deleteItems()">\n <i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n </a>\n </div>\n <div class="btn-group">\n <a class="btn green-jungle" href="#" data-ng-click="createItem()">\n <i class="icon-plus"></i> {{ \'APPLICATION_NEW_CONFIGURATION\' | translate }}\n </a>\n </div>\n </div>\n </div>\n <div class="portlet-body">\n <!-- START TABLE -->\n <div ui-grid="gridOptions" ui-grid-resize-columns ui-grid-auto-resize ui-grid-pagination ui-grid-selection ui-grid-exporter ui-grid-draggable-rows class="ui-grid">\n <div class="watermark" ng-show="!gridOptions.data.length">{{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/zendesk/view/configuration/view/view.html",'<div class="row" data-ng-init="initView();getConfiguration();getCustomVariables();getFields();getTags();">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_CONFIGURATION\' | translate}}: {{configurationName}}</span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_SUBJECT\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_2" data-toggle="tab">{{\'APPLICATION_DESCRIPTION\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_3" data-toggle="tab">{{\'APPLICATION_FIELDS\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_4" data-toggle="tab">{{\'APPLICATION_TAGS\' | translate}}</a>\n </li>\n </ul>\n </div>\n <div class="portlet-body">\n <div class="tab-content">\n <!-- SUBJECT TAB -->\n <div class="tab-pane ui-padding active" id="tab_1_1">\n <div class="row">\n <div class="col-md-11">\n <span class="caption-subject">All following fields will be join by blank space:</span>\n </div>\n <div class="col-md-1 pull-rigth">\n <button class="btn btn-icon-only green" data-ng-click="addItem(\'subject\')"><i class="fa fa-plus"></i></button>\n </div>\n </div>\n <hr>\n <!-- <div id="subject-item-list" ng-scrollbars ng-scrollbars-config="config"> -->\n <div class="row" data-ng-repeat="subjectItem in subjectConfig">\n <div class="col-md-3">\n <ui-select ng-model="subjectItem.type" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeType(subjectItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.title}}</ui-select-match>\n <ui-select-choices repeat="item.type as item in fieldType | filter: $select.search">\n <div ng-bind-html="item.title | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <div class="col-md-8" data-ng-if="subjectItem.type==\'string\'">\n <div class="form-group">\n <input type="text" class="form-control" data-ng-model="subjectItem.content" data-ng-change="updateField(subjectItem)">\n </div>\n </div>\n <div class="col-md-8" data-ng-if="subjectItem.type==\'variable\'">\n <div class="form-group">\n <ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="subjectItem.variableName" data-ng-change="updateField(subjectItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.title}}</ui-select-match>\n <ui-select-choices group-by="groupVariableByGroup" repeat="variable.name as variable in variables | filter: $select.search">\n <div ng-bind-html="variable.title | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <div class="col-md-8" data-ng-if="subjectItem.type==\'customVariable\'">\n <div class="form-group">\n <ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="subjectItem.VariableId" data-ng-change="updateField(subjectItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="variable.id as variable in customVariables | filter: $select.search">\n <div ng-bind-html="variable.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <div class="col-md-1">\n <div class="form-group">\n <button class="btn btn-icon-only red" data-ng-click="removeItem(subjectItem)"><i class="fa fa-times"></i></button>\n </div>\n </div>\n </div>\n <!-- </div> -->\n </div>\n <!-- END SUBJECT TAB -->\n <!-- DESCRIPTION TAB -->\n <div class="tab-pane ui-padding" id="tab_1_2">\n <div class="row">\n <div class="col-md-11">\n <span class="caption-subject">All following fields will be join by new line:</span>\n </div>\n <div class="col-md-1 pull-rigth">\n <button class="btn btn-icon-only green" data-ng-click="addItem(\'description\')"><i class="fa fa-plus"></i></button>\n </div>\n </div>\n <hr>\n <!-- <div id="description-item-list" ng-scrollbars ng-scrollbars-config="config"> -->\n <div class="row" data-ng-repeat="descriptionItem in descriptionConfig">\n <div class="col-md-2">\n <ui-select ng-model="descriptionItem.type" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeDescType(descriptionItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.title}}</ui-select-match>\n <ui-select-choices repeat="item.type as item in descFieldType | filter: $select.search">\n <div ng-bind-html="item.title | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <div class="col-md-9" data-ng-if="descriptionItem.type==\'string\'">\n <div class="form-group">\n <input type="text" class="form-control" data-ng-model="descriptionItem.content" data-ng-change="updateField(descriptionItem)">\n </div>\n </div>\n <div class="col-md-3" data-ng-if="descriptionItem.type==\'keyValue\'">\n <input type="text" class="form-control" placeholder="Key" data-ng-model="descriptionItem.key" data-ng-change="updateField(descriptionItem)">\n </div>\n <div class="col-md-3" data-ng-if="descriptionItem.type==\'keyValue\'">\n <ui-select ng-model="descriptionItem.keyType" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeDescType(descriptionItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.title}}</ui-select-match>\n <ui-select-choices repeat="item.type as item in fieldType | filter: $select.search">\n <div ng-bind-html="item.title | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <div class="col-md-3" data-ng-if="descriptionItem.type==\'keyValue\' && descriptionItem.keyType==\'string\'">\n <input type="text" class="form-control" placeholder="Value" data-ng-model="descriptionItem.keyContent" data-ng-change="updateField(descriptionItem)">\n </div>\n <div class="col-md-3" data-ng-if="descriptionItem.type==\'keyValue\' && descriptionItem.keyType==\'variable\'">\n <div class="form-group">\n <ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="descriptionItem.variableName" data-ng-change="updateField(descriptionItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.title}}</ui-select-match>\n <ui-select-choices group-by="groupVariableByGroup" repeat="variable.name as variable in variables | filter: $select.search">\n <div ng-bind-html="variable.title | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <div class="col-md-3" data-ng-if="descriptionItem.type==\'keyValue\' && descriptionItem.keyType==\'customVariable\'">\n <div class="form-group">\n <ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="descriptionItem.VariableId" data-ng-change="updateField(descriptionItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="variable.id as variable in customVariables | filter: $select.search">\n <div ng-bind-html="variable.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <div class="col-md-1">\n <div class="form-group">\n <button class="btn btn-icon-only red" data-ng-click="removeItem(descriptionItem)"><i class="fa fa-times"></i></button>\n </div>\n </div>\n </div>\n <!-- </div> -->\n </div>\n <!-- END DESCRIPTION TAB -->\n <!-- FIELDS TAB -->\n <div class="tab-pane ui-padding" id="tab_1_3">\n <div class="row">\n <div class="col-md-11">\n <span class="caption-subject">Add how to fill the fields present in your account:</span>\n </div>\n <div class="col-md-1 pull-rigth">\n <button class="btn btn-icon-only green" data-ng-click="addItem(\'field\')"><i class="fa fa-plus"></i></button>\n </div>\n </div>\n <hr>\n <!-- <div id="field-item-list" ng-scrollbars ng-scrollbars-config="config"> -->\n <div class="row" data-ng-repeat="fieldItem in fieldConfig">\n <div class="col-md-3">\n <ui-select ng-model="fieldItem.idField" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeFieldType(fieldItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.title}}</ui-select-match>\n <ui-select-choices repeat="item.id as item in accountFields | filter: $select.search">\n <div ng-bind-html="item.title | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n <div class="col-md-8" data-ng-if="getSystemFieldOptions(fieldItem.idField)">\n <div class="form-group">\n <ui-select ng-model="fieldItem.content" theme="bootstrap" ng-disabled="disabled" data-ng-change="updateField(fieldItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="item.value as item in getSystemFieldOptions(fieldItem.idField) | filter: $select.search">\n <div ng-bind-html="item.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField)">\n <div class="form-group">\n <ui-select ng-model="fieldItem.type" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeType(fieldItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.title}}</ui-select-match>\n <ui-select-choices repeat="item.type as item in fieldType | filter: $select.search">\n <div ng-bind-html="item.title | highlight: $select.search | ucfirst"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField) && fieldItem.type === \'string\'">\n <div class="form-group">\n <input type="text" class="form-control" data-ng-model="fieldItem.content" data-ng-change="updateField(fieldItem)">\n </div>\n </div>\n <div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField) && fieldItem.type === \'variable\'">\n <div class="form-group">\n <ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="fieldItem.variableName" data-ng-change="updateField(fieldItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.title}}</ui-select-match>\n <ui-select-choices group-by="groupVariableByGroup" repeat="variable.name as variable in variables | filter: $select.search">\n <div ng-bind-html="variable.title | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField) && fieldItem.type === \'customVariable\'">\n <div class="form-group">\n <ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="fieldItem.VariableId" data-ng-change="updateField(fieldItem)">\n <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="variable.id as variable in customVariables | filter: $select.search">\n <div ng-bind-html="variable.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <div class="col-md-1">\n <div class="form-group">\n <button class="btn btn-icon-only red" data-ng-click="removeItem(fieldItem)"><i class="fa fa-times"></i></button>\n </div>\n </div>\n </div>\n <!-- </div> -->\n </div>\n <!-- END FIELDS TAB -->\n <!-- TAG TAB -->\n <div class="tab-pane ui-padding" id="tab_1_4">\n <div class="row">\n <div class="col-md-12">\n <span class="caption-subject">Select tags that you want add in the ticket:</span>\n </div>\n </div>\n <hr>\n <form name="forms.tags" data-ng-submit="updateTags()" novalidate>\n <!-- TAG -->\n <div class="form-group">\n <ui-select multiple data-ng-model="selectedTags.tags" theme="bootstrap" name="tags" ng-disabled="disabled">\n <ui-select-match placeholder="{{ \'APPLICATION_TAGS\' | translate }}">{{$item.name}}</ui-select-match>\n <ui-select-choices repeat="tag.id as tag in tags | filter: $select.search">\n {{tag.name}}\n </ui-select-choices>\n </ui-select>\n </div>\n <!-- END TAG -->\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END TAG TAB -->\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/zendesk/view/view.account.html",'<div class="row">\n <div class="col-md-12">\n <div class="portlet light">\n <div class="portlet-title tabbable-line">\n <div class="caption caption-md">\n <i class="icon-globe theme-font hide"></i>\n <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_ACCOUNT\' | translate}}</span>\n </div>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_GENERALS\' | translate}}</a>\n </li>\n </ul>\n </div>\n <div class="portlet-body">\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <form name="forms.formSetting" data-ng-submit="forms.formSetting.$valid && updateItem()" novalidate>\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="account.name" required/>\n <span data-ng-show="forms.formSetting.name.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="account.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n <!-- START USERNAME -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.username.$invalid}">\n <label class="control-label">{{\'APPLICATION_USERNAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="username" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="account.username" required/>\n <span data-ng-show="forms.formSetting.username.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n\n <!-- START REMOTE ADDRESS -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.remoteUri.$invalid}">\n <label class="control-label">{{\'APPLICATION_URI\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="url" name="remoteUri" placeholder="{{\'APPLICATION_URI\' | translate}}" class="form-control" data-ng-model="account.remoteUri" required />\n <span data-ng-show="forms.formSetting.remoteUri.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n\n <!-- START AUTH TYPE -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.authType.$invalid}">\n <label class="control-label">{{\'APPLICATION_AUTHENTICATION_TYPE\' | translate}}</label>\n <ui-select data-ng-model="account.authType" name="authType" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_AUTHENTICATION_TYPE\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n <ui-select-choices repeat="type in [\'password\', \'token\'] | filter: $select.search">\n <div data-ng-bind="type | capitalize | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.formSetting.authType.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- START AUTH TYPE -->\n\n <!-- START PASSWORD -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.password.$invalid}" ng-slide-down="account.authType == \'password\'" lazy-render duration="1">\n <label class="control-label">{{\'APPLICATION_PASSWORD\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="password" name="password" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="account.password" required/>\n <span data-ng-show="forms.formSetting.password.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PASSWORD -->\n\n <!-- START TOKEN -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.token.$invalid}" ng-slide-down="account.authType == \'token\'" lazy-render duration="1">\n <label class="control-label">{{\'APPLICATION_TOKEN\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="token" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="account.token" required/>\n <span data-ng-show="forms.formSetting.token.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TOKEN -->\n\n <!-- START SERVER URL -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.serverUrl.$invalid}">\n <label class="control-label">{{\'APPLICATION_MOTION_ADDRESS\' | translate}}</label>\n <input type="url" name="serverUrl" placeholder="{{\'APPLICATION_MOTION_ADDRESS\' | translate}}" class="form-control" data-ng-model="account.serverUrl"/>\n <span class="help-block">\n {{\'DESCRIPTION_SERVER_URL\' | translate}}.\n </span>\n <span class="help-block help-block-info">\n {{\'MESSAGE_MOTION_ADDRESS_FORMAT\' | translate}}\n </span>\n </div>\n <!-- END SERVER URL -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n </form>\n </div>\n <!-- END GENERAL TAB -->\n\n </div>\n </div>\n </div>\n </div>\n</div>\n'),a.put("app/zendesk/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initView()">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-heart"></i>\n <a href="/zendesk/list">{{ \'APPLICATION_ZENDESK\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <a href="#">{{account.name}}</a>\n </li>\n </ul>\n </div>\n\n <!-- BEGIN PROFILE SIDEBAR -->\n <div class="profile-sidebar">\n <!-- PORTLET MAIN -->\n <div class="portlet light profile-sidebar-portlet">\n <!-- SIDEBAR USERPIC -->\n <div class="profile-image">\n <img src="assets/images/media/zendesk.png" class="img-responsive">\n </div>\n <!-- END SIDEBAR USERPIC -->\n <!-- SIDEBAR USER TITLE -->\n <div class="profile-usertitle">\n <div class="profile-usertitle-name">\n {{account.name}}\n </div>\n <div class="profile-usertitle-job">\n {{account.remoteUri}}\n </div>\n </div>\n <!-- END SIDEBAR USER TITLE -->\n <!-- SIDEBAR MENU -->\n <div class="profile-usermenu">\n <ul class="nav">\n <li data-ng-class="{active: $state.is(\'main.zendesk.view.account\')}">\n <a ng-href="/zendesk/view/{{account.id}}/account">\n <i class="icon-user"></i>\n {{ \'APPLICATION_ACCOUNT\' | translate }} </a>\n </li>\n <li data-ng-class="{active: $state.includes(\'main.zendesk.view.configurations\') || $state.is(\'main.zendesk.view.configuration\')}">\n <a ng-href="/zendesk/view/{{account.id}}/configurations/list">\n <i class="icon-settings"></i>\n {{ \'APPLICATION_CONFIGURATIONS\' | translate }} </a>\n </li>\n </ul>\n </div>\n <!-- END MENU -->\n </div>\n <!-- END PORTLET MAIN -->\n </div>\n <!-- END BEGIN PROFILE SIDEBAR -->\n <!-- BEGIN PROFILE CONTENT -->\n <div ui-view class="profile-content">\n </div>\n <!-- END PROFILE CONTENT -->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/zendesk/wizard/wizard.html",'<!-- BEGIN PAGE HEADER-->\n<div class="row">\n <div class="col-md-12">\n <div class="page-bar">\n <ul class="page-breadcrumb">\n <li>\n <i class="icon-rocket"></i>\n <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n <i class="fa fa-angle-right"></i>\n </li>\n <li>\n <i class="icon-heart"></i>\n <a href="/zendesk/list">{{ \'APPLICATION_ZENDESK\' | translate }}</a>\n </li>\n </ul>\n </div>\n </div>\n</div>\n<!-- END PAGE HEADER-->\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initWizard()">\n <div class="col-md-12">\n <!-- BEGIN Portlet PORTLET-->\n <div class="portlet light bordered">\n <div class="portlet-title">\n <div class="caption font-green-sharp">\n <i class="icon-notebook font-green-sharp"></i>\n <span class="caption-subject">{{ \'APPLICATION_ACCOUNT\' | translate }} WIZARD</a> </span>\n </div>\n </div>\n <div class="portlet-body">\n <wizard on-finish="createItem()">\n <wz-step title="{{\'APPLICATION_ACCOUNT_INFO\' | translate}}" canexit="exitValidation(forms.formSetting.$valid)">\n <form name="forms.formSetting" novalidate>\n\n <!-- START NAME -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.name.$invalid}">\n <label class="control-label">{{\'APPLICATION_NAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n <span data-ng-show="forms.formSetting.name.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END NAME -->\n\n <!-- START DESCRIPTION -->\n <div class="form-group">\n <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n <input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"/>\n </div>\n <!-- END DESCRIPTION -->\n\n <!-- START USERNAME -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.username.$invalid}">\n <label class="control-label">{{\'APPLICATION_USERNAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="username" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.username" required ng-remote-validate="/api/zendesk/accounts/validate/username"/>\n <span data-ng-show="forms.formSetting.username.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.formSetting.username.$touched || forms.formSetting.$submitted) && forms.formSetting.username.$error.ngRemoteValidate" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_EXIST_USERNAME\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n\n <!-- START REMOTE ADDRESS -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.remoteUri.$invalid}">\n <label class="control-label">{{\'APPLICATION_URI\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="url" name="remoteUri" placeholder="{{\'APPLICATION_URI\' | translate}}" class="form-control" data-ng-model="item.remoteUri" required ng-remote-validate="/api/zendesk/accounts/validate/remoteUri"/>\n <span data-ng-show="forms.formSetting.remoteUri.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n <span data-ng-show="(forms.formSetting.remoteUri.$touched || forms.formSetting.$submitted) && forms.formSetting.remoteUri.$error.ngRemoteValidate" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_EXIST_DOMAIN\' | translate}}.\n </span>\n </div>\n <!-- END USERNAME -->\n\n <!-- START AUTH TYPE -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.authType.$invalid}">\n <label class="control-label">{{\'APPLICATION_AUTHENTICATION_TYPE\' | translate}}</label>\n <ui-select data-ng-model="item.authType" name="authType" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_AUTHENTICATION_TYPE\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n <ui-select-choices repeat="type in [\'password\', \'token\'] | filter: $select.search">\n <div data-ng-bind="type | capitalize | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="forms.formSetting.authType.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- START AUTH TYPE -->\n\n <!-- START PASSWORD -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.password.$invalid}" ng-slide-down="item.authType == \'password\'" lazy-render duration="1">\n <label class="control-label">{{\'APPLICATION_PASSWORD\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="password" name="password" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.password" required/>\n <span data-ng-show="forms.formSetting.password.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END PASSWORD -->\n\n <!-- START TOKEN -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.token.$invalid}" ng-slide-down="item.authType == \'token\'" lazy-render duration="1">\n <label class="control-label">{{\'APPLICATION_TOKEN\' | translate}} <span class="required" aria-required="true">*</span></label>\n <input type="text" name="token" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.token" required/>\n <span data-ng-show="forms.formSetting.token.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n </div>\n <!-- END TOKEN -->\n\n <!-- START SERVER URL -->\n <div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.serverUrl.$invalid}">\n <label class="control-label">{{\'APPLICATION_MOTION_ADDRESS\' | translate}}</label>\n <input type="url" name="serverUrl" placeholder="{{\'APPLICATION_MOTION_ADDRESS\' | translate}}" class="form-control" data-ng-model="item.serverUrl"/>\n <span class="help-block">\n {{\'DESCRIPTION_SERVER_URL\' | translate}}.\n </span>\n <span class="help-block help-block-info">\n {{\'MESSAGE_MOTION_ADDRESS_FORMAT\' | translate}}\n </span>\n </div>\n <!-- END SERVER URL -->\n\n <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" data-ng-click="next()"/>\n\n </form>\n </wz-step>\n\n <wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n <p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n <input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n <input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n </wz-step>\n\n </wizard>\n\n </div>\n </div>\n <!-- END Portlet PORTLET-->\n </div>\n</div>\n<!-- END PAGE CONTENT-->\n'), +a.put("components/directives/action/accountEmail/actionBuilder.html",'<div data-ng-if="randomName" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$invalid}">\n <ui-select data-ng-model="element.data1" name="data1{{randomName}}" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_ACCOUNT\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="account.id as account in accounts.rows | filter: $select.search">\n <div ng-bind-html="account.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n\n<div data-ng-if="randomName" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data6\'+randomName].$touched || form.$submitted) && form[\'data6\'+randomName].$invalid}">\n <ui-select data-ng-model="element.data6" name="data6{{randomName}}" theme="bootstrap">\n <ui-select-match allow-clear placeholder="{{\'APPLICATION_TEMPLATE\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="template.id as template in templates | filter: $select.search">\n <div ng-bind-html="template.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form[\'data6\'+randomName].$touched || form.$submitted) && form[\'data6\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n\n<div data-ng-if="randomName" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$invalid}">\n <input type="text" ng-model="element.data2" name="data2{{randomName}}" class="form-control" placeholder="{{\'APPLICATION_TO\' | translate}}" required/>\n <span data-ng-show="(form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n\n<div data-ng-if="randomName" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data3\'+randomName].$touched || form.$submitted) && form[\'data3\'+randomName].$invalid}">\n <input type="text" ng-model="element.data3" name="data3{{randomName}}" class="form-control" placeholder="{{\'APPLICATION_CC\' | translate}}"/>\n <span data-ng-show="(form[\'data3\'+randomName].$touched || form.$submitted) && form[\'data3\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n\n<div data-ng-if="randomName && !element.data6" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data4\'+randomName].$touched || form.$submitted) && form[\'data4\'+randomName].$invalid}">\n <input type="text" ng-model="element.data4" name="data4{{randomName}}" class="form-control" placeholder="{{\'APPLICATION_SUBJECT\' | translate}}"/>\n <span data-ng-show="(form[\'data4\'+randomName].$touched || form.$submitted) && form[\'data4\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n\n<div data-ng-if="randomName" class="form-group col-md-12" data-ng-class="{\'has-error\': (form[\'data5\'+randomName].$touched || form.$submitted) && form[\'data5\'+randomName].$invalid}">\n <textarea rows="10" ng-model="element.data5" name="data5{{randomName}}" class="form-control" placeholder="{{\'APPLICATION_TEXT\' | translate}}" data-ng-required="!element.data6"></textarea>\n <span data-ng-show="(form[\'data5\'+randomName].$touched || form.$submitted) && form[\'data5\'+randomName].$error.required" class="help-block help-block-error">\n'+" <strong>{{'APPLICATION_WARNING' | translate}}!</strong> {{'MESSAGE_REQUIRED_FIELD' | translate}}.\n </span>\n</div>\n"),a.put("components/directives/action/accountSms/actionBuilder.html",'<div data-ng-if="randomName" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$invalid}">\n <ui-select data-ng-model="element.data1" name="data1{{randomName}}" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_ACCOUNT\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="account.id as account in accounts.rows | filter: $select.search">\n <div ng-bind-html="account.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n\n<div data-ng-if="randomName" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$invalid}">\n <input type="text" ng-model="element.data2" name="data2{{randomName}}" class="form-control" placeholder="{{\'APPLICATION_TO\' | translate}}" required/>\n <span data-ng-show="(form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n\n<div data-ng-if="randomName" class="form-group col-md-12" data-ng-class="{\'has-error\': (form[\'data3\'+randomName].$touched || form.$submitted) && form[\'data3\'+randomName].$invalid}">\n <textarea rows="10" ng-model="element.data3" name="data3{{randomName}}" class="form-control" placeholder="{{\'APPLICATION_TEXT\' | translate}}"></textarea>\n <span data-ng-show="(form[\'data3\'+randomName].$touched || form.$submitted) && form[\'data3\'+randomName].$error.required" class="help-block help-block-error">\n'+" <strong>{{'APPLICATION_WARNING' | translate}}!</strong> {{'MESSAGE_REQUIRED_FIELD' | translate}}.\n </span>\n</div>\n"),a.put("components/directives/action/accountTemplate/actionBuilder.html",'<div data-ng-if="randomName" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$invalid}">\n <ui-select data-ng-model="element.data1" name="data1{{randomName}}" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_ACCOUNT\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="account.id as account in accounts.rows | filter: $select.search">\n <div ng-bind-html="account.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n\n<div data-ng-if="randomName" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$invalid}">\n <ui-select data-ng-model="element.data2" name="data2{{randomName}}" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_TEMPLATE\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="template.id as template in templates.rows | filter: $select.search">\n <div ng-bind-html="template.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n\n<div data-ng-if="randomName" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data3\'+randomName].$touched || form.$submitted) && form[\'data3\'+randomName].$invalid}">\n <input type="text" ng-model="element.data3" name="data3{{randomName}}" class="form-control" placeholder="{{\'APPLICATION_TO\' | translate}}" required/>\n <span data-ng-show="(form[\'data3\'+randomName].$touched || form.$submitted) && form[\'data3\'+randomName].$error.required" class="help-block help-block-error">\n'+" <strong>{{'APPLICATION_WARNING' | translate}}!</strong> {{'MESSAGE_REQUIRED_FIELD' | translate}}.\n </span>\n</div>\n"),a.put("components/directives/action/close/actionBuilder.html",'<div data-ng-if="randomName" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$invalid}">\n <input type="text" ng-model="element.data1" name="data1{{randomName}}" class="form-control" placeholder="{{ \'APPLICATION_DISPOSITION\' | translate }}" required/>\n <span data-ng-show="(form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$error.required" class="help-block help-block-error">\n'+" <strong>{{'APPLICATION_WARNING' | translate}}!</strong> {{'MESSAGE_REQUIRED_FIELD' | translate}}.\n </span>\n</div>\n"),a.put("components/directives/action/email/actionBuilder.html",'<div data-ng-if="randomName" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data5\'+randomName].$touched || form.$submitted) && form[\'data5\'+randomName].$invalid}">\n <ui-select data-ng-model="element.data5" name="data5{{randomName}}" theme="bootstrap">\n <ui-select-match allow-clear placeholder="{{\'APPLICATION_TEMPLATE\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="template.id as template in templates | filter: $select.search">\n <div ng-bind-html="template.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form[\'data5\'+randomName].$touched || form.$submitted) && form[\'data5\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n\n<div data-ng-if="randomName" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$invalid}">\n <input type="text" ng-model="element.data1" name="data1{{randomName}}" class="form-control" placeholder="{{\'APPLICATION_TO\' | translate}}" required/>\n <span data-ng-show="(form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n\n<div data-ng-if="randomName" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$invalid}">\n <input type="text" ng-model="element.data2" name="data2{{randomName}}" class="form-control" placeholder="{{\'APPLICATION_CC\' | translate}}"/>\n <span data-ng-show="(form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n\n<div data-ng-if="randomName && !element.data5" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data3\'+randomName].$touched || form.$submitted) && form[\'data3\'+randomName].$invalid}">\n <input type="text" ng-model="element.data3" name="data3{{randomName}}" class="form-control" placeholder="{{\'APPLICATION_SUBJECT\' | translate}}"/>\n <span data-ng-show="(form[\'data3\'+randomName].$touched || form.$submitted) && form[\'data3\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n\n<div data-ng-if="randomName" class="form-group col-md-12" data-ng-class="{\'has-error\': (form[\'data4\'+randomName].$touched || form.$submitted) && form[\'data4\'+randomName].$invalid}">\n <textarea rows="10" ng-model="element.data4" name="data4{{randomName}}" class="form-control" placeholder="{{\'APPLICATION_TEXT\' | translate}}" data-ng-required="!element.data5"></textarea>\n <span data-ng-show="(form[\'data4\'+randomName].$touched || form.$submitted) && form[\'data4\'+randomName].$error.required" class="help-block help-block-error">\n'+" <strong>{{'APPLICATION_WARNING' | translate}}!</strong> {{'MESSAGE_REQUIRED_FIELD' | translate}}.\n </span>\n</div>\n"),a.put("components/directives/action/forward/actionBuilder.html",'<div data-ng-if="randomName" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$invalid}">\n <input type="text" ng-model="element.data1" name="data1{{randomName}}" class="form-control" placeholder="{{ \'APPLICATION_TO\' | translate }}" required/>\n <span data-ng-show="(form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$error.required" class="help-block help-block-error">\n'+" <strong>{{'APPLICATION_WARNING' | translate}}!</strong> {{'MESSAGE_REQUIRED_FIELD' | translate}}.\n </span>\n</div>\n"),a.put("components/directives/action/http/actionBuilder.html",'<div data-ng-if="randomName" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$invalid}">\n <ui-select data-ng-model="element.data1" name="data1{{randomName}}" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_METHOD\' | translate}}">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="method in methods | filter: $select.search">\n <div ng-bind-html="method | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n\n<div data-ng-if="randomName" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$invalid}">\n <input type="text" ng-model="element.data2" name="data2{{randomName}}" class="form-control" placeholder="URL" required/>\n <span data-ng-show="(form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$error.required" class="help-block help-block-error">\n'+" <strong>{{'APPLICATION_WARNING' | translate}}!</strong> {{'MESSAGE_REQUIRED_FIELD' | translate}}.\n </span>\n</div>\n"),a.put("components/directives/action/integration/actionBuilder.html",'<div data-ng-if="randomName" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$invalid}">\n <ui-select data-ng-model="element.data1" name="data1{{randomName}}" theme="bootstrap" data-ng-change="changeIntegration()" required>\n <ui-select-match placeholder="{{ \'APPLICATION_INTEGRATION\' | translate }}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="integration.state as integration in integrations | filter: $select.search">\n <div ng-bind-html="integration.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{\'APPLICATION_INTEGRATION\' | translate}}\n </span>\n <span data-ng-show="(form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n<div class="form-group col-md-6" data-ng-if="element.data1 && accounts && randomName" data-ng-class="{\'has-error\': (form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$invalid}">\n <ui-select data-ng-model="element.data2" name="data2{{randomName}}" theme="bootstrap" data-ng-change="changeAccount();" required>\n <ui-select-match placeholder="{{\'APPLICATION_ACCOUNT\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="account.id as account in accounts | filter: $select.search">\n <div ng-bind-html="account.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{\'APPLICATION_ACCOUNT\' | translate}}\n </span>\n <span data-ng-show="(form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n<div class="form-group col-md-6" data-ng-if="element.data2 && configurations && randomName" data-ng-class="{\'has-error\': (form[\'data3\'+randomName].$touched || form.$submitted) && form[\'data3\'+randomName].$invalid}">\n <ui-select data-ng-model="element.data3" name="data3{{randomName}}" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_CONFIGURATION\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="config.id as config in configurations | filter: $select.search">\n <div ng-bind-html="config.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{\'APPLICATION_CONFIGURATION\' | translate}}\n </span>\n <span data-ng-show="(form[\'data3\'+randomName].$touched || form.$submitted) && form[\'data3\'+randomName].$error.required" class="help-block help-block-error">\n'+" <strong>{{'APPLICATION_WARNING' | translate}}!</strong> {{'MESSAGE_REQUIRED_FIELD' | translate}}.\n </span>\n</div>\n"),a.put("components/directives/action/jscripty/actionBuilder.html",'<div data-ng-if="randomName" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$invalid}">\n <ui-select data-ng-model="element.data1" name="data1{{randomName}}" theme="bootstrap" required>\n <ui-select-match>{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="project.id as project in projects | filter: $select.search">\n <div ng-bind-html="project.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$error.required" class="help-block help-block-error">\n'+" <strong>{{'APPLICATION_WARNING' | translate}}!</strong> {{'MESSAGE_REQUIRED_FIELD' | translate}}.\n </span>\n</div>\n"),a.put("components/directives/action/motionbar/actionBuilder.html",'<!-- data1: 0 POPUP, 1 URL, 2 WINAPP -->\n<div data-ng-if="randomName" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$invalid}">\n <ui-select data-ng-model="element.data1" name="data1{{randomName}}" theme="bootstrap" required data-ng-change="changeMode();">\n <ui-select-match placeholder="{{ \'APPLICATION_TYPE\' | translate }}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="motionAction.value as motionAction in motionActions | filter: $select.search">\n <div ng-bind-html="motionAction.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'APPLICATION_TYPE\' | translate }}\n </span>\n <span data-ng-show="(form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n\n<!-- data1:0 data2:Template -->\n<div data-ng-if="randomName && element.data1==0" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$invalid}">\n <ui-select data-ng-model="element.data2" name="data2{{randomName}}" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_TEMPLATE\' | translate }}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="template.id as template in templates | filter: $select.search">\n <div ng-bind-html="template.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{ \'APPLICATION_TEMPLATE\' | translate }}\n </span>\n <span data-ng-show="(form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n\n<!-- data1:1 data2:URL -->\n<div data-ng-if="randomName && element.data1==1" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$invalid}">\n <input type="text" ng-model="element.data2" name="data2{{randomName}}" class="form-control" required placeholder="{{ \'APPLICATION_URL\' | translate }}"/>\n <span class="help-block">\n {{ \'APPLICATION_URL\' | translate }}\n </span>\n <span data-ng-show="(form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n\n<!-- data1:2 data2:Application data3:Arguments -->\n<div data-ng-if="randomName && element.data1==2" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$invalid}">\n <input type="text" ng-model="element.data2" name="data2{{randomName}}" class="form-control" required placeholder="{{ \'APPLICATION_APPLICATION\' | translate }}"/>\n <span class="help-block">\n {{ \'APPLICATION_APPLICATION\' | translate }}\n </span>\n <span data-ng-show="(form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n<div data-ng-if="randomName && element.data1==2" class="form-group col-md-6">\n <input type="text" ng-model="element.data3" name="data3{{randomName}}" class="form-control" placeholder="{{ \'APPLICATION_ARGUMENTS\' | translate }}"/>\n <span class="help-block">\n {{ \'APPLICATION_ARGUMENTS\' | translate }}\n </span>\n</div>\n'),a.put("components/directives/action/status/actionBuilder.html",'<div data-ng-if="randomName" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$invalid}">\n <ui-select data-ng-model="element.data1" name="data1{{randomName}}" theme="bootstrap" required>\n <ui-select-match>{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="status.value as status in states | filter: $select.search">\n <div ng-bind-html="status.name | translate | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$error.required" class="help-block help-block-error">\n'+" <strong>{{'APPLICATION_WARNING' | translate}}!</strong> {{'MESSAGE_REQUIRED_FIELD' | translate}}.\n </span>\n</div>\n"),a.put("components/directives/action/tag/actionBuilder.html",'<div data-ng-if="randomName" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$invalid}">\n <ui-select multiple data-ng-model="data.tags" theme="bootstrap">\n <ui-select-match placeholder="{{\'APPLICATION_TAG\' | translate}}">{{$item.name}}</ui-select-match>\n <ui-select-choices repeat="tag.name as tag in tags | filter:$select.search" class="">\n {{tag.name}}\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$error.required" class="help-block help-block-error">\n'+" <strong>{{'APPLICATION_WARNING' | translate}}!</strong> {{'MESSAGE_REQUIRED_FIELD' | translate}}.\n </span>\n</div>\n"),a.put("components/directives/action/template/actionBuilder.html",'<div data-ng-if="randomName" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$invalid}">\n <ui-select data-ng-model="element.data1" name="data1{{randomName}}" theme="bootstrap" required>\n <ui-select-match placeholder="{{\'APPLICATION_TEMPLATE\' | translate}}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="template.id as template in templates | filter: $select.search">\n <div ng-bind-html="template.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n\n<div data-ng-if="randomName" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$invalid}">\n <input type="text" ng-model="element.data2" name="data2{{randomName}}" class="form-control" placeholder="{{\'APPLICATION_TO\' | translate}}" required/>\n <span data-ng-show="(form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$error.required" class="help-block help-block-error">\n'+" <strong>{{'APPLICATION_WARNING' | translate}}!</strong> {{'MESSAGE_REQUIRED_FIELD' | translate}}.\n </span>\n</div>\n"),a.put("components/directives/action/urlforward/actionBuilder.html",'<div data-ng-if="randomName" class="form-group col-md-6" data-ng-class="{\'has-error\': (form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$invalid}">\n <ui-select data-ng-model="element.data1" name="data1{{randomName}}" theme="bootstrap" required>\n <ui-select-match placeholder="{{ \'APPLICATION_TYPE\' | translate }}">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="type.value as type in types | filter: $select.search">\n <div ng-bind-html="type.name | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span class="help-block">\n {{\'APPLICATION_TYPE\' | translate}}\n </span>\n <span data-ng-show="(form[\'data1\'+randomName].$touched || form.$submitted) && form[\'data1\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n<div class="form-group col-md-6" data-ng-if="element.data1 && randomName" data-ng-class="{\'has-error\': (form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$invalid}">\n <input type="url" ng-model="element.data2" placeholder="{{ \'APPLICATION_URL\' | translate }}" name="data2{{randomName}}" class="form-control" required/>\n <span class="help-block">\n {{\'APPLICATION_URL\' | translate}}\n </span>\n <span data-ng-show="(form[\'data2\'+randomName].$touched || form.$submitted) && form[\'data2\'+randomName].$error.required" class="help-block help-block-error">\n'+" <strong>{{'APPLICATION_WARNING' | translate}}!</strong> {{'MESSAGE_REQUIRED_FIELD' | translate}}.\n </span>\n</div>\n"),a.put("components/directives/condition/conditionBuilder.html",'<div data-ng-if="randomName" class="form-group col-md-4" data-ng-class="{\'has-error\': (form[\'field\'+randomName].$touched || form.$submitted) && form[\'field\'+randomName].$invalid}">\n <ui-select data-ng-model="element.field" name="field{{randomName}}" theme="bootstrap" data-ng-change="checkCondition(element.field)" required>\n <ui-select-match>{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="condition.value as condition in service.services[serviceindex].conditions | filter: $select.search">\n <div ng-bind-html="condition.name | translate | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form[\'field\'+randomName].$touched || form.$submitted) && form[\'field\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n<div data-ng-if="randomName && element.field" class="form-group col-md-4" data-ng-class="{\'has-error\': (form[\'operator\'+randomName].$touched || form.$submitted) && form[\'operator\'+randomName].$invalid}">\n <ui-select data-ng-model="element.operator" name="operator{{randomName}}" theme="bootstrap" required>\n <ui-select-match>{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="operator.value as operator in _.find(service.services[serviceindex].conditions,{value:element.field}).operators | filter: $select.search">\n <div ng-bind-html="operator.name | translate | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form[\'operator\'+randomName].$touched || form.$submitted) && form[\'operator\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n<div class="col-md-4" data-ng-if="elementType === \'input\' && randomName && element.field" data-ng-class="{\'has-error\': (form[\'value\'+randomName].$touched || form.$submitted) && form[\'value\'+randomName].$invalid}">\n <input type="text" ng-model="element.value" class="form-control" name="value{{randomName}}" required/>\n <span data-ng-show="(form[\'value\'+randomName].$touched || form.$submitted) && form[\'value\'+randomName].$error.required" class="help-block help-block-error">\n <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n </span>\n</div>\n<div class="form-group col-md-4" data-ng-if="elementType === \'select\' && randomName && element.field" data-ng-class="{\'has-error\': (form[\'value\'+randomName].$touched || form.$submitted) && form[\'value\'+randomName].$invalid}">\n <ui-select data-ng-model="element.value" name="value{{randomName}}" theme="bootstrap" required>\n <ui-select-match>{{$select.selected.name | translate}}</ui-select-match>\n <ui-select-choices repeat="value.value as value in values| filter: $select.search">\n <div ng-bind-html="value.name | translate | highlight: $select.search"></div>\n </ui-select-choices>\n </ui-select>\n <span data-ng-show="(form[\'value\'+randomName].$touched || form.$submitted) && form[\'value\'+randomName].$error.required" class="help-block help-block-error">\n'+" <strong>{{'APPLICATION_WARNING' | translate}}!</strong> {{'MESSAGE_REQUIRED_FIELD' | translate}}.\n </span>\n</div>\n"), +a.put("components/factories/xNotificationLicense/xNotificationLicense.html",'<div class="ui-notification alert alert-block" ng-class="class" style="width: 410px;">\n <h4 class="alert-heading">\n <i class="{{icon}}"></i> {{\'APPLICATION_WARNING\' | translate}}! {{\'MESSAGE_YOUR_LICENSE_IS_GOING_TO_EXPIRE\' | translate}}! <a ng-click="more()" style="color: blue;">More.</a>\n </h4>\n</div>\n'),a.put("components/footer/footer.html",'<!-- BEGIN FOOTER -->\n<div class="page-footer" data-ng-init="initFooter()">\n <div class="page-footer-inner">\n xCALLY Motion v. {{info.version}} | 2016 - {{year + 1}} © Powered by Xenialab <ng-bind-html data-ng-if="license.custom && !settings.defaultFooterWhiteLabel && settings.footerWhiteLabel" ng-bind-html="\'| \'+settings.footerWhiteLabel"></ng-bind-html>\n </div>\n <div class="scroll-to-top">\n <i class="icon-arrow-up"></i>\n </div>\n</div>\n<!-- END FOOTER -->\n'),a.put("components/header/header.html",'<!-- BEGIN HEADER INNER -->\n<div class="page-header-inner" data-ng-init="initHeader()">\n <!-- BEGIN LOGO -->\n <div class="page-logo">\n <a href="/">\n <img data-ng-if="settings.defaultLogo || !license.custom" ng-src="assets/images/logo.png" alt="logo" class="logo-default"/>\n <img data-ng-if="!settings.defaultLogo && license.custom" ng-src="api/settings/logo/main/{{settings.logo ? settings.logo : \'logo\'}}" alt="logo" class="logo-default custom-logo" onError="this.onerror=null;this.src=\'assets/images/logo.png\';"/>\n </a>\n <div class="menu-toggler sidebar-toggler" data-ng-click="toggleSidebar()"></div>\n </div>\n\n <!-- END LOGO -->\n <!-- BEGIN HEADER SEARCH BOX -->\n <!-- DOC: Apply "search-form-expanded" right after the "search-form" class to have half expanded search box -->\n <form ng-repeat="call in activeCalls | limitTo:2" class="search-form search-form-expanded">\n <div class="input-group">\n <input type="text" class="form-control" value="{{call.calleridnum}}" readonly>\n <span class="input-group-btn">\n <a href="javascript:;" class="btn submit inactive-link"><i class="icon-earphones-alt"></i></a>\n </span>\n </div>\n </form>\n <!-- END HEADER SEARCH BOX -->\n <!-- BEGIN RESPONSIVE MENU TOGGLER -->\n <a href="javascript:;" class="menu-toggler responsive-toggler" data-toggle="collapse" data-target=".navbar-collapse"></a>\n <!-- END RESPONSIVE MENU TOGGLER -->\n <!-- BEGIN TOP NAVIGATION MENU -->\n <div class="top-menu">\n <ul class="nav navbar-nav pull-right">\n <!-- DOC: Apply "dropdown-dark" class after below "dropdown-extended" to change the dropdown styte -->\n\n <!-- BEGIN USER LOGIN DROPDOWN -->\n <!-- DOC: Apply "dropdown-dark" class after below "dropdown-extended" to change the dropdown styte -->\n <li class="dropdown dropdown-user">\n <a href="#" class="dropdown-toggle" dropdown-menu-hover data-toggle="dropdown" data-close-others="true">\n <img class="img-circle" data-ng-src="api/users/avatar/{{getCurrentUser().userpic || \'unknown_avatar\'}}" alt="...">\n <span class="username username-hide-on-mobile">\n {{ getCurrentUser().fullname }}\n </span>\n <i class="fa fa-angle-down"></i>\n </a>\n <ul class="dropdown-menu dropdown-menu-default">\n <li>\n <a ng-href=" {{isAdmin() ? \'/staff/users/view/\'+getCurrentUser().id+\'/account\' : \'/staff/agents/view/\'+getCurrentUser().id+\'/account\'}}">\n <i class="icon-key"></i>{{\'APPLICATION_CHANGE_PASSWORD\' | translate}}\n </a>\n </li>\n <li data-ng-click="logout()">\n <a href="#">\n <i class="icon-logout"></i> Log Out\n </a>\n </li>\n </ul>\n </li>\n <!-- END USER LOGIN DROPDOWN -->\n <!-- BEGIN QUICK SIDEBAR TOGGLER -->\n <!-- DOC: Apply "dropdown-dark" class after below "dropdown-extended" to change the dropdown styte -->\n <!-- <li class="dropdown dropdown-quick-sidebar-toggler" data-ng-click="toggleQuickSidebar()">\n <a href="#" class="dropdown-toggle">\n <i class="icon-logout"></i>\n </a>\n </li> -->\n <!-- END QUICK SIDEBAR TOGGLER -->\n</ul>\n<ul class="nav navbar-nav pull-right">\n <!-- BEGIN LANGUAGE BAR -->\n <li class="dropdown dropdown-language">\n <a href="#" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown" data-close-others="true">\n <img ng-src="assets/images/flags/{{ language }}.png">\n <i class="fa fa-angle-down"></i>\n </a>\n <ul class="dropdown-menu dropdown-menu-default scrollable-menu">\n <li>\n <a href="#" ng-click="changeLanguage(\'ar\')">\n <img alt="" src="assets/images/flags/ar.png"> {{\'APPLICATION_ARABIC\' | translate}}\n </a>\n </li>\n <li>\n <a href="#" ng-click="changeLanguage(\'da\')">\n <img alt="" src="assets/images/flags/da.png"> {{\'APPLICATION_DANISH\' | translate}}\n </a>\n </li>\n <li>\n <a href="#" ng-click="changeLanguage(\'de\')">\n <img alt="" src="assets/images/flags/de.png"> {{\'APPLICATION_GERMAN\' | translate}}\n </a>\n </li>\n <li>\n <a href="#" ng-click="changeLanguage(\'en_EN\')">\n <img alt="" src="assets/images/flags/en_EN.png"> {{\'APPLICATION_ENGLISH\' | translate}}\n </a>\n </li>\n <li>\n <a href="#" ng-click="changeLanguage(\'es\')">\n <img alt="" src="assets/images/flags/es.png"> {{\'APPLICATION_SPANISH\' | translate}}\n </a>\n </li>\n <li>\n <a href="#" ng-click="changeLanguage(\'fi\')">\n <img alt="" src="assets/images/flags/fi.png"> {{\'APPLICATION_FINNISH\' | translate}}\n </a>\n </li>\n <li>\n <a href="#" ng-click="changeLanguage(\'fr\')">\n <img alt="" src="assets/images/flags/fr.png"> {{\'APPLICATION_FRENCH\' | translate}}\n </a>\n </li>\n <li>\n <a href="#" ng-click="changeLanguage(\'hi\')">\n <img alt="" src="assets/images/flags/hi.png"> {{\'APPLICATION_HINDI\' | translate}}\n </a>\n </li>\n <li>\n <a href="#" ng-click="changeLanguage(\'it\')">\n <img alt="" src="assets/images/flags/it.png"> {{\'APPLICATION_ITALIAN\' | translate}}\n </a>\n </li>\n <li>\n <a href="#" ng-click="changeLanguage(\'ja\')">\n <img alt="" src="assets/images/flags/ja.png"> {{\'APPLICATION_JAPANASE\' | translate}}\n </a>\n </li>\n <li>\n <a href="#" ng-click="changeLanguage(\'ko\')">\n <img alt="" src="assets/images/flags/ko.png"> {{\'APPLICATION_KOREAN\' | translate}}\n </a>\n </li>\n <li>\n <a href="#" ng-click="changeLanguage(\'nl\')">\n <img alt="" src="assets/images/flags/nl.png"> {{\'APPLICATION_DUTCH\' | translate}}\n </a>\n </li>\n <li>\n <a href="#" ng-click="changeLanguage(\'no\')">\n <img alt="" src="assets/images/flags/no.png"> {{\'APPLICATION_NORWEGIAN\' | translate}}\n </a>\n </li>\n <li>\n <a href="#" ng-click="changeLanguage(\'pt-BR\')">\n <img alt="" src="assets/images/flags/pt-BR.png"> {{\'APPLICATION_PORTUGUESE_BRAZIL\' | translate}}\n </a>\n </li>\n <li>\n <a href="#" ng-click="changeLanguage(\'pt-PT\')">\n <img alt="" src="assets/images/flags/pt-PT.png"> {{\'APPLICATION_PORTUGUESE_PORTUGAL\' | translate}}\n </a>\n </li>\n <li>\n <a href="#" ng-click="changeLanguage(\'ru\')">\n <img alt="" src="assets/images/flags/ru.png"> {{\'APPLICATION_RUSSIAN\' | translate}}\n </a>\n </li>\n <li>\n <a href="#" ng-click="changeLanguage(\'sv\')">\n <img alt="" src="assets/images/flags/sv.png"> {{\'APPLICATION_SWEDISH\' | translate}}\n </a>\n </li>\n <li>\n <a href="#" ng-click="changeLanguage(\'tr\')">\n <img alt="" src="assets/images/flags/tr.png"> {{\'APPLICATION_TURKISH\' | translate}}\n </a>\n </li>\n <li>\n <a href="#" ng-click="changeLanguage(\'fa\')">\n <img alt="" src="assets/images/flags/fa.png"> {{\'APPLICATION_PERSIAN\' | translate}}\n </a>\n </li>\n <li>\n <a href="#" ng-click="changeLanguage(\'zh-CN\')">\n <img alt="" src="assets/images/flags/zh-CN.png"> {{\'APPLICATION_CHINESE_SIMPLIFIED\' | translate}}\n </a>\n </li>\n <li>\n <a href="#" ng-click="changeLanguage(\'zh-TW\')">\n <img alt="" src="assets/images/flags/zh-TW.png"> {{\'APPLICATION_CHINESE_TRADITIONAL\' | translate}}\n </a>\n </li>\n </ul>\n </li>\n <!-- END LANGUAGE BAR -->\n</ul>\n<ul data-ng-if="getCurrentUser().role === \'agent\'" class="nav navbar-nav pull-right header-ul-with-separator padding-side-7" data-ng-class="{\'paused-header\':headerAgent.voicePause || headerAgent.mailPause || headerAgent.chatPause || headerAgent.faxPause || headerAgent.smsPause || headerAgent.openchannelPause}">\n <li class="dropdown dropdown-user" >\n <a href="#" class="dropdown-toggle custom-header-a" dropdown-menu-hover data-toggle="dropdown" data-close-others="true" style="cursor:default;">\n <div>{{(headerAgent.voicePause || headerAgent.mailPause || headerAgent.chatPause || headerAgent.faxPause || headerAgent.smsPause || headerAgent.openchannelPause) ? ((!headerAgent.voicePause || !headerAgent.mailPause || !headerAgent.chatPause || !headerAgent.faxPause || !headerAgent.smsPause || !headerAgent.openchannelPause) ? \'(\'+(\'APPLICATION_PARTIAL\' | translate) + \') \'+headerAgent.pauseType : headerAgent.pauseType) : \'READY\'}}</div>\n <div data-ng-if="headerAgent.voicePause || headerAgent.mailPause || headerAgent.chatPause || headerAgent.faxPause || headerAgent.smsPause || headerAgent.openchannelPause"><css-timer start-time="headerAgent.lastPauseAt"></css-timer></div>\n </a>\n </li>\n <li class="dropdown dropdown-user" data-ng-if="headerAgent.voicePause || headerAgent.mailPause || headerAgent.chatPause || headerAgent.faxPause || headerAgent.smsPause || headerAgent.openchannelPause">\n <a href="#" class="dropdown-toggle padding-side-7 header-bar-button header-bar-button-controls" dropdown-menu-hover data-toggle="dropdown" data-close-others="true" data-ng-click="headerPause(\'unpause\')">\n <i class="fa fa-play font-green"></i></a>\n </li>\n <li class="dropdown dropdown-user" data-ng-if="headerAgent.voicePause || headerAgent.mailPause || headerAgent.chatPause || headerAgent.faxPause || headerAgent.smsPause || headerAgent.openchannelPause">\n <a href="#" class="dropdown-toggle header-bar-button" data-toggle="dropdown" data-hover="dropdown" data-close-others="true">\n <i class="fa fa-angle-down"></i>\n </a>\n <ul class="dropdown-menu dropdown-menu-default scrollable-menu">\n <li data-ng-if="headerAgent.voicePause">\n <a href="#" data-ng-click="headerPause(\'unpause\',null,\'voice\')">\n <i class="fa fa-play font-green"></i> {{\'APPLICATION_VOICE\' | translate}}\n </a>\n </li>\n <li data-ng-if="headerAgent.mailPause">\n <a href="#" data-ng-click="headerPause(\'unpause\',null,\'mail\')">\n <i class="fa fa-play font-green"></i> {{\'APPLICATION_MAIL\' | translate}}\n </a>\n </li>\n <li data-ng-if="headerAgent.chatPause">\n <a href="#" data-ng-click="headerPause(\'unpause\',null,\'chat\')">\n <i class="fa fa-play font-green"></i> {{\'APPLICATION_CHAT\' | translate}}\n </a>\n </li>\n <li data-ng-if="headerAgent.faxPause">\n <a href="#" data-ng-click="headerPause(\'unpause\',null,\'fax\')">\n <i class="fa fa-play font-green"></i> {{\'APPLICATION_FAX\' | translate}}\n </a>\n </li>\n <li data-ng-if="headerAgent.smsPause">\n <a href="#" data-ng-click="headerPause(\'unpause\',null,\'sms\')">\n <i class="fa fa-play font-green"></i> {{\'APPLICATION_SMS\' | translate}}\n </a>\n </li>\n <li data-ng-if="headerAgent.openchannelPause">\n <a href="#" data-ng-click="headerPause(\'unpause\',null,\'openchannel\')">\n <i class="fa fa-play font-green"></i> {{\'APPLICATION_OPEN_CHANNEL\' | translate}}\n </a>\n </li>\n </ul>\n </li>\n <li class="dropdown dropdown-user">\n <a href="#" class="dropdown-toggle padding-side-7 header-bar-button header-bar-button-controls" dropdown-menu-hover data-toggle="dropdown" data-close-others="true" data-ng-click="headerPause(\'pause\',\'DEFAULT PAUSE\')">\n <i class="fa fa-pause font-yellow"></i></a>\n </li>\n <li class="dropdown dropdown-user" data-ng-if="headerPauses.length">\n <a href="#" class="dropdown-toggle header-bar-button" data-toggle="dropdown" data-hover="dropdown" data-close-others="true">\n <i class="fa fa-angle-down"></i>\n </a>\n <ul class="dropdown-menu dropdown-menu-default scrollable-menu">\n <li data-ng-repeat="pause in headerPauses">\n <a href="#" data-ng-click="headerPause(\'pause\',pause.name)">\n {{pause.name}}\n </a>\n </li>\n </ul>\n </li>\n </ul>\n <ul class="nav navbar-nav pull-right" data-ng-if="getCurrentUser().role === \'agent\'" >\n <li data class="dropdown dropdown-extended dropdown-notification" id="header_agent_notification_bar" data-ng-click="agentNotifications.agent.new = 0;">\n <a href="#" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown" data-close-others="true">\n <i class="icon-earphones-alt"></i>\n <span class="badge badge-default" data-ng-if="agentNotifications.agent.new">\n {{agentNotifications.agent.new}} </span>\n </a>\n <ul class="dropdown-menu tabbed-dropdown">\n <li class="external">\n <h3><span class="bold">{{\'APPLICATION_LAST_VOICE_NOTIFICATIONS\' | translate}}</span></h3>\n </li>\n <li>\n <ul class="nav nav-tabs">\n <li class="active">\n <a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_INBOUND\' | translate}}</a>\n </li>\n <li>\n <a href="#" data-target="#tab_1_2" data-toggle="tab">{{ \'APPLICATION_OUTBOUND\' | translate}}</a>\n </li>\n </ul>\n\n <div class="tab-content">\n <!-- GENERAL TAB -->\n <div class="tab-pane active" id="tab_1_1">\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="agent-spinner-grid" data-ng-if="busyLoad.agent.busy" spinner-start-active="true"></span>\n <!-- END UI-GRID SPINNER -->\n <ul class="dropdown-menu-list scrollable-menu" style="height: 250px;" data-handle-color="#637283" infinite-scroll="loadNotifications(\'agent\')" can-load=\'!busyLoad.agent.busy\' treshold="261">\n <li data-ng-repeat="notification in agentNotifications.agent.rows">\n <a href="javascript:;" style="cursor:default;">\n <div class="row">\n <div class="col-md-1">\n <img src="assets/images/media/inboundroute.png" style="width:25px;height:25px;" alt="">\n </div>\n <div class="col-md-10">\n <div>{{\'APPLICATION_VOICE_NEW_CALL\' | translate}}<span data-ng-if="notification.status && notification.status !== \'none\'" class="badge float-right" data-ng-class="{\'badge-success\':notification.status === \'taken\',\'badge-danger\':notification.status === \'lost\',\'badge-warning\':notification.status === \'rejected\' || notification.status === \'busy\',\'badge-info\':notification.status === \'taken_elsewhere\'}">{{\'APPLICATION_VOICE_\'+notification.status.toUpperCase() | translate}}</span></div>\n <div><span class="time float-left" style="max-width:none !important;"><span am-time-ago="notification.updatedAt"></span></span></div>\n </div>\n </div>\n <div>\n <span class="message">{{notification.dialstring ? \'APPLICATION_TO\' : \'APPLICATION_FROM\' | translate}}: <span class="span-link" data-ng-click="chooseContact(notification.calleridnum)">{{notification.calleridnum}}</span></span>\n </div>\n <div data-ng-if="notification.status === \'taken_elsewhere\'">\n <span class="message">{{\'APPLICATION_AGENT_NAME\' | translate}}: <span ><b>{{notification.answeredelsewheremembername}}</b></span></span>\n </div>\n <div data-ng-if="notification.status === \'taken\' && notification.lastevent === \'complete\'">\n <span class="message">{{\'APPLICATION_COMPLETED_BY\' | translate}}: <span ><b>{{\'APPLICATION_VOICE_\'+notification.reason.toUpperCase() | translate}}</b></span></span>\n </div>\n </a>\n </li>\n </ul>\n </div>\n <div class="tab-pane" id="tab_1_2">\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="dial-spinner-grid" data-ng-if="busyLoad.dial.busy" spinner-start-active="true"></span>\n <!-- END UI-GRID SPINNER -->\n <ul class="dropdown-menu-list scrollable-menu" style="height: 250px;" data-handle-color="#637283" infinite-scroll="loadNotifications(\'dial\')" can-load=\'!busyLoad.dial.busy\' treshold="261">\n <li data-ng-repeat="notification in agentNotifications.dial.rows">\n <a href="javascript:;" style="cursor:default;">\n <div class="row">\n <div class="col-md-1">\n <img src="assets/images/media/outboundroute.png" style="width:25px;height:25px;" alt="">\n </div>\n <div class="col-md-10">\n <div>{{\'APPLICATION_VOICE_NEW_CALL\' | translate}}<span data-ng-if="notification.status && notification.status !== \'none\'" class="badge float-right" data-ng-class="{\'badge-success\':notification.status === \'taken\',\'badge-danger\':notification.status === \'lost\',\'badge-warning\':notification.status === \'rejected\',\'badge-info\':notification.status === \'taken_elsewhere\'}">{{\'APPLICATION_VOICE_\'+notification.status.toUpperCase() | translate}}</span></div>\n <div><span class="time float-left" style="max-width:none !important;"><span am-time-ago="notification.updatedAt"></span></span></div>\n </div>\n </div>\n <div>\n <span class="message">{{\'APPLICATION_TO\' | translate}}: <span class="span-link" data-ng-click="chooseContact(notification.destcalleridnum)">{{notification.destcalleridnum}}</span></span>\n </div>\n </a>\n </li>\n </ul>\n </div>\n </div>\n </li>\n </ul>\n </li>\n <li data ng-if="license.mail" class="dropdown dropdown-extended dropdown-notification" id="header_mail_notification_bar" data-ng-click="agentNotifications.mail.new = 0;">\n <a href="#" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown" data-close-others="true">\n <i class="icon-envelope-open"></i>\n <span class="badge badge-default" data-ng-if="agentNotifications.mail.new">\n {{agentNotifications.mail.new}} </span>\n </a>\n <ul class="dropdown-menu">\n <li class="external">\n <h3><span class="bold">{{\'APPLICATION_LAST_MAIL_NOTIFICATIONS\' | translate}}</span></h3>\n </li>\n <li>\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="mail-spinner-grid" data-ng-if="busyLoad.mail.busy" spinner-start-active="true"></span>\n <!-- END UI-GRID SPINNER -->\n <ul class="dropdown-menu-list scrollable-menu" style="height: 250px;" data-handle-color="#637283" infinite-scroll="loadNotifications(\'mail\')" can-load=\'!busyLoad.mail.busy\' treshold="261">\n <li data-ng-repeat="notification in agentNotifications.mail.rows">\n <a href="javascript:;" style="cursor:default;">\n <div class="row">\n <div class="col-md-1">\n <img src="assets/images/media/enquiry.png" style="width:25px;height:25px;" alt="">\n </div>\n <div class="col-md-10">\n <div>{{\'APPLICATION_NEW_MESSAGE\' | translate}}<span data-ng-if="notification.status && notification.status !== \'none\'" class="badge float-right" data-ng-class="{\'badge-success pointer-cursor\':notification.status === \'taken\',\'badge-danger\':notification.status === \'lost\',\'badge-warning\':notification.status === \'rejected\'}" data-ng-click="notification.status === \'taken\' && openRoom(notification.roomid, \'mailRoom\')">{{\'APPLICATION_MESSAGE_\'+notification.status.toUpperCase() | translate}} <i data-ng-if="notification.status === \'taken\'" class="fa fa-envelope"></i></span></div>\n <div><span class="time float-left" style="max-width:none !important;"><span am-time-ago="notification.updatedAt"></span></span></div>\n </div>\n </div>\n <div>\n <span class="message">{{\'APPLICATION_FROM\' | translate}}: <span class="span-link" data-ng-click="openContact(\'mail\',notification.accountid,notification.from)">{{notification.from}}</span></span>\n </div>\n </a>\n </li>\n </ul>\n </li>\n </ul>\n </li>\n <li data ng-if="license.chat" class="dropdown dropdown-extended dropdown-notification" id="header_chat_notification_bar" data-ng-click="agentNotifications.chat.new = 0;">\n <a href="#" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown" data-close-others="true">\n <i class="icon-bubble"></i>\n <span class="badge badge-default" data-ng-if="agentNotifications.chat.new">\n {{agentNotifications.chat.new}} </span>\n </a>\n <ul class="dropdown-menu">\n <li class="external">\n <h3><span class="bold">{{\'APPLICATION_LAST_CHAT_NOTIFICATIONS\' | translate}}</span></h3>\n </li>\n <li>\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="chat-spinner-grid" data-ng-if="busyLoad.chat.busy" spinner-start-active="true"></span>\n <!-- END UI-GRID SPINNER -->\n <ul class="dropdown-menu-list scrollable-menu" style="height: 250px;" data-handle-color="#637283" infinite-scroll="loadNotifications(\'chat\')" can-load=\'!busyLoad.chat.busy\' treshold="261">\n <li data-ng-repeat="notification in agentNotifications.chat.rows">\n <a href="javascript:;" style="cursor:default;">\n <div class="row">\n <div class="col-md-1">\n <img src="assets/images/media/website.png" style="width:25px;height:25px;" alt="">\n </div>\n <div class="col-md-10">\n <div>{{\'APPLICATION_NEW_CHAT_REQUEST\' | translate}}<span data-ng-if="notification.status && notification.status !== \'none\'" class="badge float-right" data-ng-class="{\'badge-success pointer-cursor\':notification.status === \'taken\',\'badge-danger\':notification.status === \'lost\',\'badge-warning\':notification.status === \'rejected\'}" data-ng-click="notification.status === \'taken\' && openRoom(notification.roomid, \'chatRoom\')">{{\'APPLICATION_CHAT_\'+notification.status.toUpperCase() | translate}} <i data-ng-if="notification.status === \'taken\'" class="fa fa-envelope"></i></span></div>\n <div><span class="time float-left" style="max-width:none !important;"><span am-time-ago="notification.updatedAt"></span></span></div>\n </div>\n </div>\n <div>\n <span class="message">{{\'APPLICATION_FROM\' | translate}}: <span class="span-link" data-ng-click="openContact(\'chat\',notification.websiteid,notification.visitoremail)">{{notification.visitoremail}}</span></span>\n </div>\n </a>\n </li>\n </ul>\n </li>\n </ul>\n </li>\n <li data ng-if="license.fax" class="dropdown dropdown-extended dropdown-notification" id="header_fax_notification_bar" data-ng-click="agentNotifications.fax.new = 0;">\n <a href="#" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown" data-close-others="true">\n <i class="fa fa-fax"></i>\n <span class="badge badge-default" data-ng-if="agentNotifications.fax.new">\n {{agentNotifications.fax.new}} </span>\n </a>\n <ul class="dropdown-menu">\n <li class="external">\n <h3><span class="bold">{{\'APPLICATION_LAST_FAX_NOTIFICATIONS\' | translate}}</span></h3>\n </li>\n <li>\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="fax-spinner-grid" data-ng-if="busyLoad.fax.busy" spinner-start-active="true"></span>\n <!-- END UI-GRID SPINNER -->\n <ul class="dropdown-menu-list scrollable-menu" style="height: 250px;" data-handle-color="#637283" infinite-scroll="loadNotifications(\'fax\')" can-load=\'!busyLoad.fax.busy\' treshold="261">\n <li data-ng-repeat="notification in agentNotifications.fax.rows">\n <a href="javascript:;" style="cursor:default;">\n <div class="row">\n <div class="col-md-1">\n <img src="assets/images/media/fax.png" style="width:25px;height:25px;" alt="">\n </div>\n <div class="col-md-10">\n <div>{{\'APPLICATION_NEW_FAX_REQUEST\' | translate}}<span data-ng-if="notification.status && notification.status !== \'none\'" class="badge float-right" data-ng-class="{\'badge-success pointer-cursor\':notification.status === \'taken\',\'badge-danger\':notification.status === \'lost\',\'badge-warning\':notification.status === \'rejected\'}" data-ng-click="notification.status === \'taken\' && openRoom(notification.roomid, \'faxRoom\')">{{\'APPLICATION_FAX_\'+notification.status.toUpperCase() | translate}} <i data-ng-if="notification.status === \'taken\'" class="fa fa-envelope"></i></span></div>\n <div><span class="time float-left" style="max-width:none !important;"><span am-time-ago="notification.updatedAt"></span></span></div>\n </div>\n </div>\n <div>\n <span class="message">{{\'APPLICATION_FROM\' | translate}}: <span class="span-link" data-ng-click="openContact(\'fax\',notification.accountid,notification.from)">{{notification.from}}</span></span>\n </div>\n </a>\n </li>\n </ul>\n </li>\n </ul>\n </li>\n <li data ng-if="license.messaging" class="dropdown dropdown-extended dropdown-notification" id="header_sms_notification_bar" data-ng-click="agentNotifications.sms.new = 0;">\n <a href="#" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown" data-close-others="true">\n <i class="glyphicon glyphicon-comment"></i>\n <span class="badge badge-default" data-ng-if="agentNotifications.sms.new">\n {{agentNotifications.sms.new}} </span>\n </a>\n <ul class="dropdown-menu">\n <li class="external">\n <h3><span class="bold">{{\'APPLICATION_LAST_SMS_NOTIFICATIONS\' | translate}}</span></h3>\n </li>\n <li>\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="sms-spinner-grid" data-ng-if="busyLoad.sms.busy" spinner-start-active="true"></span>\n <!-- END UI-GRID SPINNER -->\n <ul class="dropdown-menu-list scrollable-menu" style="height: 250px;" data-handle-color="#637283" infinite-scroll="loadNotifications(\'sms\')" can-load=\'!busyLoad.sms.busy\' treshold="261">\n <li data-ng-repeat="notification in agentNotifications.sms.rows">\n <a href="javascript:;" style="cursor:default;">\n <div class="row">\n <div class="col-md-1">\n <img src="assets/images/media/sms.png" style="width:25px;height:25px;" alt="">\n </div>\n <div class="col-md-10">\n <div>{{\'APPLICATION_NEW_SMS_REQUEST\' | translate}}<span data-ng-if="notification.status && notification.status !== \'none\'" class="badge float-right" data-ng-class="{\'badge-success pointer-cursor\':notification.status === \'taken\',\'badge-danger\':notification.status === \'lost\',\'badge-warning\':notification.status === \'rejected\'}" data-ng-click="notification.status === \'taken\' && openRoom(notification.roomid, \'smsRoom\')">{{\'APPLICATION_SMS_\'+notification.status.toUpperCase() | translate}} <i data-ng-if="notification.status === \'taken\'" class="fa fa-envelope"></i></span></div>\n <div><span class="time float-left" style="max-width:none !important;"><span am-time-ago="notification.updatedAt"></span></span></div>\n </div>\n </div>\n <div>\n <span class="message">{{\'APPLICATION_FROM\' | translate}}: <span class="span-link" data-ng-click="openContact(\'sms\',notification.accountid,notification.from)">{{notification.from}}</span></span>\n </div>\n </a>\n </li>\n </ul>\n </li>\n </ul>\n </li>\n <li data ng-if="license.openchannel" class="dropdown dropdown-extended dropdown-notification" id="header_openchannel_notification_bar" data-ng-click="agentNotifications.openchannel.new = 0;">\n <a href="#" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown" data-close-others="true">\n <i class="icon-globe"></i>\n <span class="badge badge-default" data-ng-if="agentNotifications.openchannel.new">\n {{agentNotifications.openchannel.new}} </span>\n </a>\n <ul class="dropdown-menu">\n <li class="external">\n <h3><span class="bold">{{\'APPLICATION_LAST_OPENCHANNEL_NOTIFICATIONS\' | translate}}</span></h3>\n </li>\n <li>\n <!-- BEGIN UI-GRID SPINNER -->\n <span us-spinner spinner-key="openchannel-spinner-grid" data-ng-if="busyLoad.openchannel.busy" spinner-start-active="true"></span>\n <!-- END UI-GRID SPINNER -->\n <ul class="dropdown-menu-list scrollable-menu" style="height: 250px;" data-handle-color="#637283" infinite-scroll="loadNotifications(\'openchannel\')" can-load=\'!busyLoad.openchannel.busy\' treshold="261">\n <li data-ng-repeat="notification in agentNotifications.openchannel.rows">\n <a href="javascript:;" style="cursor:default;">\n <div class="row">\n <div class="col-md-1">\n <img src="assets/images/media/openchannel.png" style="width:25px;height:25px;" alt="">\n </div>\n <div class="col-md-10">\n'+" <div>{{'APPLICATION_NEW_OPENCHANNEL_REQUEST' | translate}}<span data-ng-if=\"notification.status && notification.status !== 'none'\" class=\"badge float-right\" data-ng-class=\"{'badge-success pointer-cursor':notification.status === 'taken','badge-danger':notification.status === 'lost','badge-warning':notification.status === 'rejected'}\" data-ng-click=\"notification.status === 'taken' && openRoom(notification.roomid, 'openchannelRoom')\">{{'APPLICATION_OPENCHANNEL_'+notification.status.toUpperCase() | translate}} <i data-ng-if=\"notification.status === 'taken'\" class=\"fa fa-envelope\"></i></span></div>\n <div><span class=\"time float-left\" style=\"max-width:none !important;\"><span am-time-ago=\"notification.updatedAt\"></span></span></div>\n </div>\n </div>\n <!-- <div>\n <span class=\"message\">{{'APPLICATION_FROM' | translate}}: <span class=\"span-link\" data-ng-click=\"openContact('openchannel',notification.accountid,notification.from)\">{{notification.from}}</span></span>\n </div> -->\n </a>\n </li>\n </ul>\n </li>\n </ul>\n </li>\n </ul>\n </div>\n <!-- END TOP NAVIGATION MENU -->\n </div>\n <!-- END HEADER INNER -->\n"), +a.put("components/modal/delete.html",'<div class="modal-header">\n <button ng-if="modal.dismissable" type="button" ng-click="$dismiss()" class="close">×</button>\n <h4 ng-if="modal.title" ng-bind="modal.title" class="modal-title"></h4>\n</div>\n<div class="modal-body">\n <p ng-if="modal.text" ng-bind="modal.text"></p>\n <div ng-if="modal.html" ng-bind-html="modal.html"></div>\n</div>\n<div class="modal-footer">\n <button ng-repeat="button in modal.buttons" ng-class="button.classes" ng-click="button.click($event)" ng-bind="button.text" class="btn"></button>\n</div>\n'),a.put("components/sidebar/sidebar.html",'<div id="page-sidebar" class="page-sidebar navbar-collapse collapse" data-ng-init="initSidebar()">\n <!-- BEGIN SIDEBAR MENU -->\n <!-- DOC: Apply "page-sidebar-menu-light" class right after "page-sidebar-menu" to enable light sidebar menu style(without borders) -->\n <!-- DOC: Apply "page-sidebar-menu-hover-submenu" class right after "page-sidebar-menu" to enable hoverable(hover vs accordion) sub menu mode -->\n <!-- DOC: Apply "page-sidebar-menu-closed" class right after "page-sidebar-menu" to collapse("page-sidebar-closed" class must be applied to the body element) the sidebar sub menu mode -->\n <!-- DOC: Set data-auto-scroll="false" to disable the sidebar from auto scrolling/focusing -->\n <!-- DOC: Set data-keep-expand="true" to keep the submenues expanded -->\n <!-- DOC: Set data-auto-speed="200" to adjust the sub menu slide up/down speed -->\n <ul data-ng-click="mainTab.active=true" class="page-sidebar-menu" data-keep-expanded="false" data-auto-scroll="true" data-slide-speed="200" data-ng-class="{\'page-sidebar-menu-closed\': settings.layout.pageSidebarClosed}" data-ng-init="getSidebarIntegrations()">\n <!-- DOC: To remove the search box from the sidebar you just need to completely remove the below "sidebar-search-wrapper" LI element -->\n <li class="sidebar-search-wrapper">\n <!-- BEGIN RESPONSIVE QUICK SEARCH FORM -->\n <!-- DOC: Apply "sidebar-search-bordered" class the below search form to have bordered search box -->\n <!-- DOC: Apply "sidebar-search-bordered sidebar-search-solid" class the below search form to have bordered & solid search box -->\n <form class="sidebar-search sidebar-search-bordered" action="extra_search.html" method="POST">\n <a href="javascript:;" class="remove">\n <i class="icon-close"></i>\n </a>\n </form>\n <!-- END RESPONSIVE QUICK SEARCH FORM -->\n </li>\n\n <!-- START DASHBOARD CASE -->\n <li class="start" data-ng-if="::(Auth.isAdmin() || Auth.isAgent() || userModules[1])" data-ng-class="{active: $state.includes(\'main.dashboard\')}">\n <a href="/dashboard/voice">\n <i class="icon-rocket"></i>\n <span class="title">{{\'APPLICATION_DASHBOARD\' | translate}}</span>\n <span data-ng-if="$state.includes(\'main.dashboard\')" class="selected"></span>\n </a>\n </li>\n <!-- END DASHBOARD CASE -->\n\n <!-- START YOURDASHBOARD LIST CASE -->\n <li data-ng-if="::(!Auth.isUser() || userModules[2])" data-ng-class="{active: $state.is(\'main.tools.yourdashboards.show\')}">\n <a href="javascript:;">\n <i class="fa fa-tachometer"></i>\n <span class="title" >{{\'APPLICATION_YOUR_DASHBOARDS\' | translate}}</span>\n <span class="arrow" data-ng-class="{ open: $state.includes(\'main.tools.yourdashboards.show\') }"></span>\n </a>\n <ul class="sub-menu" data-ng-init="getSidebarDashboards()">\n <li data-ng-class="{active: $stateParams.id == dashboard.id && $state.includes(\'main.tools.yourdashboards.show\')}" data-ng-repeat="dashboard in dashboards" data-ng-if="dashboard[Auth.getRole()]">\n <a href="/tools/yourdashboards/show/{{dashboard.id}}" >\n <i class="icon-screen-desktop"></i>\n <span class="title" >{{dashboard.name}} </span>\n </a>\n </li>\n </ul>\n </li>\n <!-- END YOURDASHBOARD LIST CASE -->\n\n <!-- START STAFF LIST CASE -->\n <li data-ng-class="{active: $state.includes(\'main.staff\')}">\n <a href="javascript:;" data-ng-if="::(Auth.isAdmin() || userModules[3])">\n <i class="icon-puzzle"></i>\n <span class="title" >{{\'APPLICATION_STAFF\' | translate}}</span>\n <span class="arrow" data-ng-class="{open: $state.includes(\'main.staff\')}"></span>\n </a>\n <ul class="sub-menu">\n <!-- START USERS CASE -->\n <li data-ng-if="::(Auth.isAdmin())" data-ng-class="{active: $state.includes(\'main.staff.users\')}">\n <a href="/staff/users/list">\n <i class="icon-eye"></i>\n <span class="title" >{{\'APPLICATION_USERS\' | translate}}</span>\n <span data-ng-if="$state.includes(\'main.staff.users\')" class="selected"></span>\n </a>\n </li>\n <!-- END USERS CASE -->\n\n <!-- START AGENTS CASE -->\n <li data-ng-if="::(Auth.isAdmin() || userModules[4])" data-ng-class="{active: $state.includes(\'main.staff.agents\')}">\n <a href="/staff/agents/list">\n <i class="icon-people"></i>\n <span class="title" >{{\'APPLICATION_AGENTS\' | translate}}</span>\n <span data-ng-if="$state.includes(\'main.staff.agents\')" class="selected"></span>\n </a>\n </li>\n <!-- END AGENTS CASE -->\n\n <!-- START TELEPHONES CASE -->\n <li data-ng-if="::(Auth.isAdmin())" data-ng-class="{active: $state.includes(\'main.staff.telephones\')}">\n <a href="/staff/telephones/list">\n <i class="icon-phone"></i>\n <span class="title" >{{\'APPLICATION_TELEPHONES\' | translate}}</span>\n <span data-ng-if="$state.includes(\'main.staff.telephones\')" class="selected"></span>\n </a>\n </li>\n <!-- END TELEPHONES CASE -->\n\n <!-- START TEAMS CASE -->\n <li data-ng-if="::(Auth.isAdmin())" data-ng-class="{active: $state.includes(\'main.staff.teams\')}">\n <a href="/staff/teams/list">\n <i class="icon-shield"></i>\n <span class="title" >{{\'APPLICATION_TEAMS\' | translate}}</span>\n <span data-ng-if="$state.includes(\'main.staff.teams\')" class="selected"></span>\n </a>\n </li>\n <!-- END TEAMS CASE -->\n </ul>\n </li>\n <!-- END STAFF LIST CASE -->\n\n <!-- START CONTACT MANAGER LIST CASE -->\n <li data-ng-if="::(Auth.isAdmin() || Auth.isAgent() || userModules[5])" data-ng-class="{active: $state.includes(\'main.contactmanager\')}">\n <a href="javascript:;" data-ng-class="{\'disabled-link\':!license.cm}">\n <i class="icon-notebook"></i>\n <span class="title disable-target" >{{\'APPLICATION_CONTACT_MANAGER\' | translate}}</span>\n <span class="arrow" data-ng-class="{ open: $state.includes(\'main.contactmanager.contacts\')\n || $state.includes(\'main.contactmanager.companies\')\n || $state.includes(\'main.contactmanager.listss\') }"></span>\n </a>\n <ul class="sub-menu" data-ng-if="license.cm">\n <!-- START CONTACTS CASE -->\n <li data-ng-class="{active: $state.includes(\'main.contactmanager.contacts\')}">\n <a href="/contactmanager/contacts/list">\n <i class=" fa fa-users"></i>\n <span class="title" >{{\'APPLICATION_CONTACTS\' | translate}}</span>\n <span data-ng-if="$state.includes(\'main.contactmanager.contacts\')" class="selected"></span>\n </a>\n </li>\n <!-- END CONTACTS CASE -->\n <!-- START COMPANIES CASE -->\n <li data-ng-class="{active: $state.includes(\'main.contactmanager.companies\')}" data-ng-if="::(Auth.isAdmin() || Auth.isUser())">\n <a href="/contactmanager/companies/list">\n <i class="icon-briefcase"></i>\n <span class="title" >{{\'APPLICATION_COMPANIES\' | translate}}</span>\n <span data-ng-if="$state.includes(\'main.contactmanager.companies\')" class="selected"></span>\n </a>\n </li>\n <!-- END COMPANIES CASE -->\n <!-- START LISTS CASE -->\n <li data-ng-class="{active: $state.includes(\'main.contactmanager.lists\')}" data-ng-if="::(Auth.isAdmin() || Auth.isUser())">\n <a href="/contactmanager/lists/list">\n <i class="fa fa-list-ul"></i>\n <span class="title" >{{\'APPLICATION_LISTS\' | translate}}</span>\n <span data-ng-if="$state.includes(\'main.contactmanager.lists\')" class="selected"></span>\n </a>\n </li>\n <!-- END LISTS CASE -->\n </ul>\n </li>\n <!-- END CONTACT MANAGER LIST CASE -->\n\n <!-- START CHANNEL LIST CASE -->\n <li data-ng-if="::(Auth.isAdmin() || Auth.isAgent() || userModules[6])" data-ng-class="{active: $state.includes(\'main.channels\')}">\n <a href="javascript:;">\n <i class="fa fa-spinner"></i>\n <span class="title" >{{\'APPLICATION_CHANNELS\' | translate}}</span>\n <span class="arrow" data-ng-class="{open: $state.includes(\'main.channels\')}"></span>\n </a>\n <ul class="sub-menu">\n <!-- START VOICE CASE -->\n <li data-ng-if="::(Auth.isAdmin() || Auth.isAgent() || userModules[7])" data-ng-class="{ active: $state.includes(\'main.channels.voice\') }">\n <a href="javascript:;">\n <i class="icon-earphones-alt"></i>\n <span class="title">{{ \'APPLICATION_VOICE\' | translate}}</span>\n <span class="arrow" data-ng-class="{ open: $state.includes(\'main.channels.voice\') }"></span>\n </a>\n\n <ul class="sub-menu">\n <li data-ng-if="::(Auth.isAdmin())" data-ng-class="{active: $state.includes(\'main.channels.voice.queues\')}">\n <a href="/channels/voice/queues/list">\n <i class="icon-docs"></i>\n <span class="title">{{\'APPLICATION_QUEUES\' | translate}}</span>\n </a>\n </li>\n <li data-ng-if="::(Auth.isAdmin() || userModules[21])">\n <a href="javascript:;">\n <i class="icon-directions"></i>\n <span class="title"> {{ \'APPLICATION_ROUTES\' | translate}} </span>\n <span class="arrow" data-ng-class="{ open: $state.includes(\'main.channels.voice.routes\') }"></span>\n <ul class="sub-menu">\n <li data-ng-class="{active: $state.includes(\'main.channels.voice.routes.inbound\')}">\n <a href="/channels/voice/routes/inbound/list">\n <i class="icon-call-in"></i>\n <span class="title"> {{\'APPLICATION_INBOUND\' | translate}} </span>\n </a>\n </li>\n <li data-ng-class="{active: $state.includes(\'main.channels.voice.routes.outbound\')}">\n <a href="/channels/voice/routes/outbound/list">\n <i class="icon-call-out"></i>\n <span class="title"> {{\'APPLICATION_OUTBOUND\' | translate}} </span>\n </a>\n </li>\n <li data-ng-class="{active: $state.includes(\'main.channels.voice.routes.internal\')}">\n <a href="/channels/voice/routes/internal/list">\n <i class="icon-reload"></i>\n <span class="title"> {{\'APPLICATION_INTERNALS\' | translate}} </span>\n </a>\n </li>\n </ul>\n </a>\n </li>\n <li data-ng-if="::(Auth.isAdmin() || userModules[22])" data-ng-class="{active: $state.includes(\'main.channels.voice.contexts\')}">\n <a href="/channels/voice/contexts/list">\n <i class="icon-docs"></i>\n <span class="title"> {{\'APPLICATION_CONTEXTS\' | translate}} </span>\n </a>\n </li>\n <li data-ng-if="::(Auth.isAdmin() || userModules[23])" data-ng-class="{active: $state.includes(\'main.channels.voice.voicemails\')}">\n <a href="/channels/voice/voicemails/list">\n <i class="icon-envelope-letter"></i>\n <span class="title"> {{\'APPLICATION_VOICEMAILS\' | translate}} </span>\n </a>\n </li>\n <li data-ng-if="::(Auth.isAdmin() || userModules[24])" data-ng-class="{active: $state.includes(\'main.channels.voice.mohs\')}">\n <a href="/channels/voice/mohs/list">\n <i class="icon-music-tone"></i>\n <span class="title"> {{\'APPLICATION_MOH\' | translate}} </span>\n </a>\n </li>\n <!-- START RECORDING CASE -->\n <li data-ng-if="::(Auth.isAdmin() || Auth.isAgent() || userModules[25])" data-ng-class="{active: $state.includes(\'main.channels.voice.recordings\')}">\n <a href="/channels/voice/recordings/list">\n <i class="icon-control-play"></i>\n <span class="title">{{\'APPLICATION_RECORDINGS\' | translate}}</span>\n </a>\n </li>\n <!-- END RECORDING CASE -->\n <!-- START REALTIME CASE -->\n <li data-ng-if="::(Auth.isAdmin() || userModules[26])" data-ng-class="{active: $state.includes(\'main.channels.voice.realtime\')}">\n <a href="/channels/voice/realtime/view/agents">\n <i class="icon-energy"></i>\n <span class="title">{{\'APPLICATION_REALTIME\' | translate}}</span>\n </a>\n </li>\n <!-- END REALTIME CASE -->\n <!-- START CHANSPY CASE -->\n <li data-ng-if="::(Auth.isAdmin() || userModules[27])" data-ng-class="{active: $state.includes(\'main.channels.voice.chanspy\')}">\n <a href="/channels/voice/chanspy/list">\n <i class="fa fa-user-secret"></i>\n <span class="title" >{{\'APPLICATION_CHANSPY\' | translate}}</span>\n <!-- <span data-ng-if="$state.includes(\'main.chanspy\')" class="selected"></span> -->\n </a>\n </li>\n <!-- END CHANSPY CASE -->\n <!-- START CHANSPY CASE -->\n <li data-ng-if="::(Auth.isAdmin() || userModules[28])" data-ng-class="{active: $state.includes(\'main.channels.voice.dispositions\')}">\n <a href="/channels/voice/dispositions/list">\n <i class="icon-target"></i>\n <span class="title" >{{\'APPLICATION_DISPOSITIONS\' | translate}}</span>\n </a>\n </li>\n <!-- END CHANSPY CASE -->\n </ul>\n </li>\n <!-- END VOICE CASE -->\n\n <!-- START CHAT CASE -->\n <li data-ng-if="::(Auth.isAdmin() || Auth.isAgent() || userModules[8])" data-ng-class="{active: $state.includes(\'main.channels.chat\')}">\n <a href="javascript:;" data-ng-class="{\'disabled-link\':!license.chat}">\n <i class="icon-bubble"></i>\n <span class="title disable-target">{{\'APPLICATION_CHAT\' | translate}}</span>\n <span class="arrow" data-ng-class="{open: $state.includes(\'main.channels.chat\')}"></span>\n </a>\n <ul class="sub-menu" data-ng-if="license.chat">\n <li data-ng-if="::(Auth.isAdmin() || userModules[29])" data-ng-class="{active: $state.includes(\'main.channels.chat.websites\')}">\n <a href="/channels/chat/websites/list">\n <i class="icon-globe"></i>\n <span class="title"> {{\'APPLICATION_WEB_SITES\' | translate}} </span>\n </a>\n </li>\n <li data-ng-if="::(Auth.isAdmin() || userModules[30])" data-ng-class="{active: $state.includes(\'main.channels.chat.queues\')}">\n <a href="/channels/chat/queues/list">\n <i class="icon-docs"></i>\n <span class="title"> {{\'APPLICATION_QUEUES\' | translate}} </span>\n </a>\n </li>\n <li data-ng-if="::(Auth.isAdmin() || Auth.isAgent() || userModules[31])" data-ng-class="{active: $state.includes(\'main.channels.chat.room\')}">\n <a href="/channels/chat/room/internal/list">\n <i class="fa fa-users"></i>\n <span class="title"> {{\'APPLICATION_INTERACTIONS\' | translate}} </span>\n </a>\n </li>\n <!-- <li data-ng-if="::(Auth.isAdmin() || userModules[8])" data-ng-class="{active: $state.includes(\'main.channels.chat.online\')}">\n <a href="/channels/chat/online/list">\n <i class="icon-login"></i>\n <span class="title"> {{\'APPLICATION_ONLINE_MESSAGES\' | translate}} </span>\n </a>\n </li> -->\n <li data-ng-if="::(Auth.isAdmin() || userModules[32])" data-ng-class="{active: $state.includes(\'main.channels.chat.offline\')}">\n <a href="/channels/chat/offline/list">\n <i class="icon-logout"></i>\n <span class="title"> {{\'APPLICATION_OFFLINE_MESSAGES\' | translate}} </span>\n </a>\n </li>\n <li data-ng-if="::(Auth.isAdmin() || userModules[33])" data-ng-class="{active: $state.includes(\'main.channels.chat.realtime\')}">\n <a href="/channels/chat/realtime/view/agents">\n <i class="icon-energy"></i>\n <span class="title">{{\'APPLICATION_REALTIME\' | translate}}</span>\n </a>\n </li>\n </ul>\n </li>\n <!-- END CHAT CASE -->\n\n <!-- START MAIL CASE -->\n <li data-ng-if="::(Auth.isAdmin() || Auth.isAgent() || userModules[9])" data-ng-class="{active: $state.includes(\'main.channels.mail\')}" >\n <a href="javascript:;" data-ng-class="{\'disabled-link\':!license.mail}">\n <i class="icon-envelope"></i>\n <span class="title disable-target">{{\'APPLICATION_MAIL\' | translate}}</span>\n <span class="arrow" data-ng-class="{ open: $state.includes(\'main.channels.mail\') }"></span>\n </a>\n\n <ul class="sub-menu" data-ng-if="license.mail">\n <li data-ng-if="::(Auth.isAdmin() || userModules[34])" data-ng-class="{active: $state.includes(\'main.channels.mail.accounts\') || $state.includes(\'main.channels.mail.account\')}">\n <a href="/channels/mail/accounts/list">\n <i class="icon-notebook"></i>\n <span class="title"> {{\'APPLICATION_ACCOUNTS\' | translate}} </span>\n </a>\n </li>\n <li data-ng-if="::(Auth.isAdmin() || userModules[35])" data-ng-class="{active: $state.includes(\'main.channels.mail.queues\') || $state.includes(\'main.channels.mail.queue\')}">\n <a href="/channels/mail/queues/list">\n <i class="icon-docs"></i>\n <span class="title"> {{\'APPLICATION_QUEUES\' | translate}} </span>\n </a>\n </li>\n <li data-ng-if="::(Auth.isAdmin() || Auth.isAgent() || userModules[36])" data-ng-class="{active: $state.includes(\'main.channels.mail.inbox\')}">\n <a href="/channels/mail/inbox/view">\n <i class="icon-note"></i>\n <span class="title"> {{\'APPLICATION_INBOX\' | translate}} </span>\n </a>\n </li>\n <!-- START REALTIME CASE -->\n <li data-ng-if="::(Auth.isAdmin() || userModules[37])" data-ng-class="{active: $state.includes(\'main.channels.mail.realtime\')}">\n <a href="/channels/mail/realtime/view/agents">\n <i class="icon-energy"></i>\n <span class="title">{{\'APPLICATION_REALTIME\' | translate}}</span>\n </a>\n </li>\n <!-- END REALTIME CASE -->\n </ul>\n </li>\n <!-- END MAIL CASE -->\n\n <!-- START FAX CASE -->\n <li data-ng-if="::(Auth.isAdmin() || Auth.isAgent() || userModules[10])" data-ng-class="{active: $state.includes(\'main.channels.fax\')}">\n <a href="javascript:;" data-ng-class="{\'disabled-link\':!license.fax}">\n <i class="fa fa-fax"></i>\n <span class="title disable-target"> {{ \'APPLICATION_FAX\' | translate}}</span>\n <span class="arrow" data-ng-class="{ open: $state.includes(\'main.channels.fax\') }"></span>\n </a>\n <ul class="sub-menu" data-ng-if="license.fax">\n <li data-ng-if="::(Auth.isAdmin() || userModules[38])" data-ng-class="{active: $state.includes(\'main.channels.fax.accounts\')}">\n <a href="/channels/fax/accounts/list">\n <i class="icon-notebook"></i>\n <span class="title"> {{ \'APPLICATION_ACCOUNTS\' | translate}} </span>\n </a>\n </li>\n <li data-ng-if="::(Auth.isAdmin() || userModules[39])" data-ng-class="{active: $state.includes(\'main.channels.fax.queues\')}">\n <a href="/channels/fax/queues/list">\n <i class="icon-docs"></i>\n <span class="title"> {{ \'APPLICATION_QUEUES\' | translate }} </span>\n </a>\n </li>\n <li data-ng-if="::(Auth.isAdmin() || Auth.isAgent() || userModules[40])" data-ng-class="{active: $state.includes(\'main.channels.fax.inbox\')}">\n <a href="/channels/fax/inbox/view">\n <i class="icon-note"></i>\n <span class="title"> {{ \'APPLICATION_INBOX\' | translate }} </span>\n </a>\n </li>\n <!-- START REALTIME CASE -->\n <li data-ng-if="::(Auth.isAdmin() || userModules[41])" data-ng-class="{active: $state.includes(\'main.channels.fax.realtime\')}">\n <a href="/channels/fax/realtime/view/agents">\n <i class="icon-energy"></i>\n <span class="title">{{\'APPLICATION_REALTIME\' | translate}}</span>\n </a>\n </li>\n <!-- END REALTIME CASE -->\n </ul>\n </li>\n <!-- END FAX CASE -->\n\n <!-- START SMS CASE -->\n <li data-ng-if="::(Auth.isAdmin() || Auth.isAgent() || userModules[11])" data-ng-class="{active: $state.includes(\'main.channels.sms\')}">\n <a href="javascript:;" data-ng-class="{\'disabled-link\':!license.messaging}">\n <i class="glyphicon glyphicon-comment"></i>\n <span class="title disable-target">{{\'APPLICATION_SMS\' | translate}}</span>\n <span class="arrow" data-ng-class="{ open: $state.includes(\'main.channels.sms\') }"></span>\n </a>\n\n <ul class="sub-menu" data-ng-if="license.messaging">\n <li data-ng-if="::(Auth.isAdmin() || userModules[42])" data-ng-class="{active: $state.includes(\'main.channels.sms.accounts\') || $state.includes(\'main.channels.sms.account\')}">\n <a href="/channels/sms/accounts/list">\n <i class="icon-notebook"></i>\n <span class="title"> {{\'APPLICATION_ACCOUNTS\' | translate}} </span>\n </a>\n </li>\n <li data-ng-if="::(Auth.isAdmin() || userModules[43])" data-ng-class="{active: $state.includes(\'main.channels.sms.queues\') || $state.includes(\'main.channels.sms.queue\')}">\n <a href="/channels/sms/queues/list">\n <i class="icon-docs"></i>\n <span class="title"> {{\'APPLICATION_QUEUES\' | translate}} </span>\n </a>\n </li>\n <li data-ng-if="::(Auth.isAdmin() || Auth.isAgent() || userModules[44])" data-ng-class="{active: $state.includes(\'main.channels.sms.inbox\')}">\n <a href="/channels/sms/inbox/view">\n <i class="icon-note"></i>\n <span class="title"> {{\'APPLICATION_INBOX\' | translate}} </span>\n </a>\n </li>\n <!-- START REALTIME CASE -->\n <li data-ng-if="::(Auth.isAdmin() || userModules[45])" data-ng-class="{active: $state.includes(\'main.channels.sms.realtime\')}">\n <a href="/channels/sms/realtime/view/agents">\n <i class="icon-energy"></i>\n <span class="title">{{\'APPLICATION_REALTIME\' | translate}}</span>\n </a>\n </li>\n <!-- END REALTIME CASE -->\n </ul>\n </li>\n\n <!-- END SMS CASE -->\n\n <!-- START OPENCHANNEL CASE -->\n <li data-ng-if="::(Auth.isAdmin() || Auth.isAgent()|| userModules[20])" data-ng-class="{active: $state.includes(\'main.channels.openchannel\')}">\n <a href="javascript:;" data-ng-class="{\'disabled-link\':!license.openchannel}" >\n <i class="icon-globe"></i>\n <span class="title disable-target">{{\'APPLICATION_OPEN_CHANNEL\' | translate}}</span>\n <span class="arrow" data-ng-class="{ open: $state.includes(\'main.channels.openchannel\') }"></span>\n </a>\n <ul class="sub-menu" data-ng-if="license.openchannel" >\n <li data-ng-if="::(Auth.isAdmin()|| userModules[46])" data-ng-class="{active: $state.includes(\'main.channels.openchannel.accounts\') || $state.includes(\'main.channels.openchannel.account\')}">\n <a href="/channels/openchannel/accounts/list">\n <i class="icon-notebook"></i>\n <span class="title"> {{\'APPLICATION_ACCOUNTS\' | translate}} </span>\n </a>\n </li>\n <li data-ng-if="::(Auth.isAdmin()|| userModules[47])" data-ng-class="{active: $state.includes(\'main.channels.openchannel.queues\') || $state.includes(\'main.channels.openchannel.queue\')}">\n <a href="/channels/openchannel/queues/list">\n <i class="icon-docs"></i>\n <span class="title"> {{\'APPLICATION_QUEUES\' | translate}} </span>\n </a>\n </li>\n <li data-ng-if="::(Auth.isAdmin() || Auth.isAgent()|| userModules[48])" data-ng-class="{active: $state.includes(\'main.channels.openchannel.inbox\')}">\n <a href="/channels/openchannel/inbox/view">\n <i class="icon-note"></i>\n <span class="title"> {{\'APPLICATION_INBOX\' | translate}} </span>\n </a>\n </li>\n <!-- START REALTIME CASE -->\n <li data-ng-if="::(Auth.isAdmin() || userModules[49])" data-ng-class="{active: $state.includes(\'main.channels.openchannel.realtime\')}">\n <a href="/channels/openchannel/realtime/view/agents">\n <i class="icon-energy"></i>\n <span class="title">{{\'APPLICATION_REALTIME\' | translate}}</span>\n </a>\n </li>\n <!-- END REALTIME CASE -->\n </ul>\n </li>\n\n <!-- END OPENCHANNEL CASE -->\n <!-- START REALTIME CASE -->\n <li data-ng-if="::(Auth.isAdmin() || userModules[12])" data-ng-class="{active: $state.includes(\'main.channels.realtime\')}">\n <a href="/channels/realtime/view/agents">\n <i class="icon-energy"></i>\n <span class="title">{{\'APPLICATION_REALTIME\' | translate}}</span>\n </a>\n </li>\n <!-- END REALTIME CASE -->\n </ul>\n </li>\n <!-- END CHANNEL LIST CASE -->\n\n <!-- START TOOLS LIST CASE -->\n <li data-ng-if="::(Auth.isAdmin() || userModules[13])" data-ng-class="{active: $state.includes(\'main.tools\') && !$state.is(\'main.tools.yourdashboards.show\')}">\n <a href="javascript:;">\n <i class="icon-wrench"></i>\n <span class="title" >{{\'APPLICATION_TOOLS\' | translate}}</span>\n <span class="arrow" data-ng-class="{ open: $state.includes(\'main.tools\') && !$state.is(\'main.tools.yourdashboards.show\')}"></span>\n </a>\n <ul class="sub-menu">\n <li data-ng-class="{active: $state.includes(\'main.tools.triggers\')}" data-ng-if="::(Auth.isAdmin() || userModules[50])">\n <a href="/tools/triggers/list">\n <i class="icon-bulb"></i>\n <span class="title"> {{\'APPLICATION_TRIGGERS\' | translate}} </span>\n </a>\n </li>\n <li data-ng-class="{active: $state.includes(\'main.tools.automations\')}" data-ng-if="::(Auth.isAdmin() || userModules[51])">\n <a href="/tools/automations/list">\n <i class="icon-settings"></i>\n <span class="title"> {{\'APPLICATION_AUTOMATIONS\' | translate}} </span>\n </a>\n </li>\n <li data-ng-class="{active: $state.includes(\'main.tools.trunks\')}" data-ng-if="::(Auth.isAdmin() || userModules[52])">\n <a href="/tools/trunks/list">\n <i class="icon-link"></i>\n <span class="title"> {{\'APPLICATION_TRUNKS\' | translate}} </span>\n </a>\n </li>\n <li data-ng-class="{active: $state.includes(\'main.tools.intervals\')}" data-ng-if="::(Auth.isAdmin() || userModules[53])">\n <a href="/tools/intervals/list">\n <i class="icon-clock"></i>\n <span class="title"> {{\'APPLICATION_INTERVALS\' | translate}} </span>\n </a>\n </li>\n <li data-ng-class="{active: $state.includes(\'main.tools.variables\')}" data-ng-if="::(Auth.isAdmin() || userModules[54])">\n <a href="/tools/variables/list">\n <i class="fa fa-eye"></i>\n <span class="title" >{{\'APPLICATION_VARIABLES\' | translate}} </span>\n </a>\n </li>\n <li data-ng-class="{active: $state.includes(\'main.tools.tags\')}" data-ng-if="::(Auth.isAdmin() || userModules[55])">\n <a href="/tools/tags/list">\n <i class="icon-tag"></i>\n <span class="title" >{{\'APPLICATION_TAGS\' | translate}} </span>\n </a>\n </li>\n <!-- START TEMPLATE CASE -->\n <li data-ng-class="{active: $state.includes(\'main.tools.templates\')}" data-ng-if="::(Auth.isAdmin() || userModules[56])">\n <a href="/tools/templates/list">\n <i class="icon-docs"></i>\n <span class="title"> {{\'APPLICATION_TEMPLATES\' | translate}} </span>\n </a>\n </li>\n <!-- END TEMPLATE CASE -->\n\n <!-- START PAUSE CASE -->\n <li data-ng-class="{active: $state.includes(\'main.tools.pauses\')}" data-ng-if="::(Auth.isAdmin() || userModules[57])">\n <a href="/tools/pauses/list">\n <i class="icon-control-pause"></i>\n <span class="title"> {{\'APPLICATION_PAUSES\' | translate}} </span>\n </a>\n </li>\n <!-- END PAUSE CASE -->\n\n <!-- START ANSWER CASE -->\n <li data-ng-class="{active: $state.includes(\'main.tools.answers\')}" data-ng-if="::(Auth.isAdmin() || userModules[58])">\n <a href="/tools/answers/list">\n <i class="icon-magic-wand"></i>\n <span class="title"> {{\'APPLICATION_CANNED_ANSWERS\' | translate}} </span>\n </a>\n </li>\n <!-- END ANSWER CASE -->\n\n <!-- START DASHBOARD MANAGER CASE -->\n <li data-ng-class="{active: $state.includes(\'main.tools.yourdashboards\') && !$state.is(\'main.tools.yourdashboards.show\')}" data-ng-if="::(Auth.isAdmin() || userModules[59])">\n <a href="/tools/yourdashboards/list">\n <i class="fa fa-tachometer"></i>\n <span class="title"> {{\'APPLICATION_DASHBOARDS_MANAGER\' | translate}} </span>\n </a>\n </li>\n <!-- END DASHBOARD MANAGER CASE -->\n\n <!-- START SOUND CASE -->\n <li data-ng-class="{active: $state.includes(\'main.tools.sounds\')}" data-ng-if="::(Auth.isAdmin() || userModules[60])">\n <a href="/tools/sounds/list">\n <i class="icon-music-tone-alt"></i>\n <span class="title" >{{\'APPLICATION_SOUNDS\' | translate}}</span>\n <!-- <span data-ng-if="$state.includes(\'main.sounds\')" class="selected"></span> -->\n </a>\n </li>\n <!-- END SOUND CASE -->\n\n <!-- START SCHEDULE CASE -->\n <li data-ng-class="{active: $state.includes(\'main.tools.scheduler\')}" data-ng-if="::(Auth.isAdmin() || userModules[61])">\n <a href="/tools/scheduler/list">\n <i class="icon-calendar"></i>\n <span class="title" >{{\'APPLICATION_SCHEDULER\' | translate}}</span>\n <!-- <span data-ng-if="$state.includes(\'main.sounds\')" class="selected"></span> -->\n </a>\n </li>\n <!-- END SCHEDULE CASE -->\n </ul>\n </li>\n <!-- END TOOLS LIST CASE -->\n\n <!-- START CALLYSQUARE CASE -->\n <li data-ng-if="::(Auth.isAdmin() || userModules[14])" data-ng-class="{active: $state.includes(\'main.square\')}">\n <a href="javascript:;">\n <i class="fa fa-superscript"></i>\n <span class="title" >Cally ²</span>\n <span class="arrow"></span>\n </a>\n <ul class="sub-menu">\n <li data-ng-class="{active: $state.includes(\'main.square.projects\')}">\n <a href="/square/projects/list">\n <i class="fa fa-slack"></i>\n <span class="title" >{{\'APPLICATION_PROJECTS\' | translate}} </span>\n </a>\n </li>\n <li data-ng-class="{active: $state.includes(\'main.square.odbc\')}">\n <a href="/square/odbc/list">\n <i class="fa fa-database"></i>\n <span class="title" >{{\'APPLICATION_ODBC\' | translate}} </span>\n </a>\n </li>\n <li data-ng-class="{active: $state.includes(\'main.square.recordings\')}">\n <a href="/square/recordings/list">\n <i class="icon-microphone"></i>\n <span class="title" >{{\'APPLICATION_RECORDINGS\' | translate}} </span>\n </a>\n </li>\n <li data-ng-class="{active: $state.includes(\'main.square.realtime.view.general\')}">\n <a href="/square/realtime/view/general">\n <i class="icon-energy"></i>\n <span class="title" >{{\'APPLICATION_REALTIME\' | translate}} </span>\n </a>\n </li>\n </ul>\n </li>\n <!-- END CALLYSQUARE CASE -->\n <!-- START JSCRIPTY LIST -->\n <li data-ng-show="::(Auth.isAdmin() || Auth.isAgent() || userModules[15])" data-ng-class="{active: $state.includes(\'main.jscripty\')}">\n <a href="javascript:;" data-ng-class="{\'disabled-link\':!license.jscripty}" >\n <i class="icon-note"></i>\n <span class="title disable-target" >{{\'APPLICATION_JSCRIPTY\' | translate}} </span>\n <span class="arrow"></span>\n </a>\n <ul class="sub-menu" data-ng-if="license.jscripty">\n <!-- -->\n <!-- START PROJECTS CASE -->\n <li data-ng-show="Auth.isAdmin() || Auth.isAgent() || userModules[15]" data-ng-class="{active: $state.includes(\'main.jscripty.projects\')}">\n <a href="/jscripty/projects/list">\n <i class="fa fa-slack"></i>\n <span class="title" >{{\'APPLICATION_PROJECTS\' | translate}} </span>\n </a>\n </li>\n <!-- END PROJECTS CASE -->\n </ul>\n </li>\n <!-- END JSCRIPTY LIST -->\n\n <!-- START MOTION DIALER LIST CASE-->\n <li data-ng-if="::(Auth.isAdmin() || userModules[16])" data-ng-class="{active: $state.includes(\'main.motiondialer\')}">\n <a href="javascript:;" data-ng-class="{\'disabled-link\':!license.dialer}">\n <i class="icon-control-forward"></i>\n <span class="title disable-target" >{{\'APPLICATION_MOTION_DIALER\' | translate}} </span>\n <span class="arrow"></span>\n </a>\n <ul class="sub-menu" data-ng-if="license.dialer">\n <li data-ng-class="{active: $state.includes(\'main.motiondialer.lists\')}">\n <a href="/motiondialer/lists/list">\n <i class="icon-docs"></i>\n <span class="title" >{{\'APPLICATION_LISTS\' | translate}} </span>\n </a>\n </li>\n <li data-ng-class="{active: $state.includes(\'main.motiondialer.blacklist\')}">\n <a href="/motiondialer/blacklist/list">\n <i class="icon-doc"></i>\n <span class="title" >{{\'APPLICATION_BLACKLIST\' | translate}} </span>\n </a>\n </li>\n <li data-ng-class="{active: $state.includes(\'main.motiondialer.processes\')}">\n <a href="/motiondialer/processes/list">\n <i class="icon-settings"></i>\n <span class="title" >{{\'APPLICATION_PROCESSES\' | translate}} </span>\n </a>\n </li>\n <li data-ng-class="{active: $state.includes(\'main.motiondialer.info\')}">\n <a href="/motiondialer/info/view/about">\n <i class="icon-info"></i>\n <span class="title" >{{\'APPLICATION_INFO\' | translate}} </span>\n </a>\n </li>\n </ul>\n </li>\n <!-- END MOTION DIALER LIST CASE-->\n\n <!-- START ANALYTIC LIST CASE -->\n <li data-ng-if="::(Auth.isAdmin() || userModules[17])" data-ng-class="{active: $state.includes(\'main.analytics.reports\')\n || $state.includes(\'main.analytics.extracted\')\n || $state.includes(\'main.analytics.metrics\')}" data-ng-if="::(Auth.isAdmin())">\n <a href="javascript:;">\n <i class="icon-calculator"></i>\n <span class="title" >{{\'APPLICATION_ANALYTICS\' | translate}}</span>\n <span class="arrow" data-ng-class="{ open: $state.includes(\'main.analytics.reports\')\n || $state.includes(\'main.analytics.extracted\')\n || $state.includes(\'main.analytics.metrics\') }"></span>\n </a>\n <ul class="sub-menu">\n <!-- START REPORT CASE -->\n <li data-ng-class="{active: $state.includes(\'main.analytics.reports\')}">\n <a href="/analytics/reports/list">\n <i class="icon-book-open"></i>\n <span class="title" >{{\'APPLICATION_REPORTS\' | translate}}</span>\n <span data-ng-if="$state.includes(\'main.analytics.reports\')" class="selected"></span>\n </a>\n </li>\n <!-- END REPORT CASE -->\n <!-- START EXTRA REPORT CASE -->\n <li data-ng-class="{active: $state.includes(\'main.analytics.extracted\')}">\n <a href="/analytics/extracted/list">\n <i class="fa fa-file-pdf-o"></i>\n <span class="title" >{{\'APPLICATION_EXTRACTED_REPORTS\' | translate}}</span>\n <span data-ng-if="$state.includes(\'main.analytics.extracted\')" class="selected"></span>\n </a>\n </li>\n <!-- END EXTRA REPORT CASE -->\n <!-- START METRICS CASE -->\n <li data-ng-class="{active: $state.includes(\'main.analytics.metrics\')}">\n <a href="/analytics/metrics/list">\n <i class="icon-calculator"></i>\n <span class="title" >{{\'APPLICATION_METRICS\' | translate}}</span>\n <span data-ng-if="$state.includes(\'main.metrics.reports\')" class="selected"></span>\n </a>\n </li>\n <!-- END METRICS CASE -->\n </ul>\n </li>\n <!-- END ANALYTIC LIST CASE -->\n\n <!-- START SETTINGS LIST -->\n <li data-ng-if="::(Auth.isAdmin() || userModules[18])" data-ng-class="{active: $state.includes(\'main.setting\')}">\n <a href="javascript:;">\n <i class="icon-settings"></i>\n <span class="title" >{{\'APPLICATION_SETTINGS\' | translate}}</span>\n <span class="arrow"></span>\n </a>\n <ul class="sub-menu">\n <!-- START GENERAL CASE -->\n <li data-ng-class="{active: $state.includes(\'main.setting.general\')}">\n <a href="/setting/general/view/main">\n <i class="icon-settings"></i>\n <span class="title"> {{\'APPLICATION_GENERAL\' | translate}} </span>\n </a>\n </li>\n <!-- END GENERAL CASE -->\n\n <!-- START UPDATES CASE -->\n <li data-ng-class="{active: $state.includes(\'main.setting.updates\')}">\n <a href="{{license.update ? \'/setting/updates/list\' : \'javascript:;\'}}" data-ng-class="{\'disabled-link\':!license.update}">\n <i class="icon-cloud-download"></i>\n <span class="title disable-target" >{{\'APPLICATION_UPDATES\' | translate}}</span>\n <!-- <span data-ng-if="$state.includes(\'main.updates\')" class="selected"></span> -->\n </a>\n </li>\n <!-- END UPDATES CASE -->\n\n <!-- START SMTP CASE -->\n <li data-ng-class="{active: $state.includes(\'main.setting.smtp\')}">\n <a href="/setting/smtp/view">\n <i class="icon-envelope"></i>\n <span class="title">SMTP</span>\n <!-- <span data-ng-if="$state.includes(\'main.smtp\')" class="selected"></span> -->\n </a>\n </li>\n <!-- END SMTP CASE -->\n\n <!-- START LICENSE CASE -->\n <li data-ng-class="{active: $state.includes(\'main.setting.license\')}">\n <a href="/setting/license/view">\n <i class="icon-info"></i>\n <span class="title"> {{\'APPLICATION_LICENSE\' | translate}} </span>\n </a>\n </li>\n <!-- END LICENSE CASE -->\n\n <!-- START NETWORK CASE -->\n <li data-ng-class="{active: $state.includes(\'main.setting.network\')}">\n <a href="/setting/network/view/localnet">\n <i class="icon-globe"></i>\n <span class="title"> {{\'APPLICATION_NETWORK\' | translate}} </span>\n </a>\n </li>\n <!-- END NETWORK CASE -->\n\n <!-- START SYSTEM CASE -->\n <li data-ng-class="{active: $state.includes(\'main.setting.system\')}">\n <a href="/setting/system/view/general">\n <i class="icon-pie-chart"></i>\n <span class="title"> {{\'APPLICATION_SYSTEM\' | translate}} </span>\n </a>\n </li>\n <!-- END SYSTEM CASE -->\n\n <!-- START CUSTOMIZATION CASE -->\n <li data-ng-class="{active: $state.includes(\'main.setting.customization\')}">\n <a href="/setting/customization/view/general">\n <i class="icon-equalizer"></i>\n <span class="title"> {{\'APPLICATION_CUSTOMIZATION\' | translate}} </span>\n </a>\n </li>\n <!-- END CUSTOMIZATION CASE -->\n </ul>\n </li>\n <!-- END SETTINGS LIST -->\n\n <!-- START INTEGRATION CASE -->\n <li data-ng-if=" (Auth.isAdmin() || Auth.isAgent() || userModules[19]) && integration.active" data-ng-repeat="integration in integrations" data-ng-class="{active: $state.includes(\'main.{{integration.state}}\')}">\n <a href="/{{integration.state}}/list" ng-switch on="integration.state" data-ng-if="integration.state !== \'iframe\' && (Auth.isAdmin() || userModules[19])">\n <i ng-switch-when="zendesk" class="icon-heart"></i>\n <i ng-switch-when="salesforce" class="fa fa-cloud"></i>\n <i ng-switch-default class="icon-handbag"></i>\n <span class="title" >{{integration.name}}</span>\n <span data-ng-if="$state.includes(\'main.{{integration.state}}\')" class="selected"></span>\n </a>\n <a href="/{{integration.state}}/view" data-ng-if="integration.state === \'iframe\'">\n <i class="fa fa-chrome"></i>\n <span class="title" data-ng-if="Auth.isAdmin() || userModules[19]">{{integration.name}}</span>\n <span class="title" data-ng-if="Auth.isAgent()">{{integration.title || integration.name}}</span>\n <span data-ng-if="$state.includes(\'main.{{integration.state}}\')" class="selected"></span>\n </a>\n </li>\n\n <li data-ng-if="::(Auth.isAdmin())" data-ng-class="{active: $state.is(\'main.market\')}">\n <a href="/market">\n <i class="icon-handbag"></i>\n <span class="title" translate>Market Place</span>\n <span data-ng-if="$state.includes(\'main.market\')" class="selected"></span>\n </a>\n </li>\n <!-- END INTEGRATIONS CASE -->\n <li>\n <a href="javascript:;" data-ng-click="activeTour.main = true" data-ng-if="::(!Auth.isAgent())">\n <i class="icon-location-pin"></i>\n <span class="title">{{\'APPLICATION_TAKE_A_TOUR\' | translate}}</span>\n </a>\n </li>\n <li>\n <a href="javascript:;" data-ng-click="about()">\n <i class="icon-info"></i>\n <span class="title">{{\'APPLICATION_ABOUT\' | translate}}</span>\n </a>\n </li>\n\n</ul>\n<!-- END SIDEBAR MENU -->\n</div>\n'); +}]); \ No newline at end of file diff --git a/public/assets/plugins/jscripty/js/Actions.js b/public/assets/plugins/jscripty/js/Actions.js index aeaa420..67e33c5 100644 --- a/public/assets/plugins/jscripty/js/Actions.js +++ b/public/assets/plugins/jscripty/js/Actions.js @@ -1,634 +1 @@ -'use strict'; -/** - * $Id: Actions.js,v 1.7 2013-02-14 07:48:01 gaudenz Exp $ - * Copyright (c) 2006-2012, JGraph Ltd - */ -/** - * Constructs the actions object for the given UI. - */ -function Actions(editorUi) { - this.editorUi = editorUi; - this.actions = new Object(); - this.init(); -}; - -/** - * Adds the default actions. - */ -Actions.prototype.init = function() { - var ui = this.editorUi; - var editor = ui.editor; - var graph = editor.graph; - - // File actions - this.addAction('new', function() { - ui.showDialog(new NewDialog(ui).container, 300, 180, true, true); - }); - this.addAction('open', function() { - ui.showDialog(new OpenDialog(ui).container, 300, 180, true, true); - }); - this.addAction('save', function() { - ui.saveFile(false); - }, null, null, 'Ctrl+S'); - this.addAction('saveAs', function() { - ui.saveFile(true); - }, null, null, 'Ctrl+Shift-S'); - this.addAction('publish', function() { - ui.publishFile(false); - }, null, null, 'Ctrl+Shift+P'); - this.addAction('variable', function() { - ui.showDialog(new VariableDialog(ui).container, 300, 180, true, true); - }); - this.addAction('import', function() { - ui.showDialog(new ImportDialog(ui).container, 300, 200, true, true); - }); - this.addAction('export', function() { - ui.showDialog(new ExportDialog(ui).container, 300, 200, true, true); - }, null, null, 'Ctrl+E'); - this.put('editFile', new Action(mxResources.get('edit'), mxUtils.bind(this, - function() { - this.editorUi.showDialog(new EditFileDialog(ui).container, 620, 420, - true, true); - }))); - this.addAction('rename', function() { - ui.showDialog(new RenameDialog(ui).container, 300, 180, true, true); - }); - this.addAction('print', function() { - mxUtils.printScreen(graph); - }, null, 'sprite-print', 'Ctrl+P'); - this.addAction('preview', function() { - mxUtils.show(graph, null, 10, 10); - }); - - // Edit actions - this.addAction('undo', function() { - editor.undoManager.undo(); - }, null, 'sprite-undo', 'Ctrl+Z'); - this.addAction('redo', function() { - editor.undoManager.redo(); - }, null, 'sprite-redo', 'Ctrl+Y'); - this.addAction('cut', function() { - mxClipboard.cut(graph); - }, null, 'sprite-cut', 'Ctrl+X'); - this.addAction('copy', function() { - mxClipboard.copy(graph); - }, null, 'sprite-copy', 'Ctrl+C'); - this.addAction('paste', function() { - mxClipboard.paste(graph); - }, false, 'sprite-paste', 'Ctrl+V'); - this.addAction('delete', function() { - graph.removeCells(); - }, null, null, 'Delete'); - this.addAction('duplicate', function() { - var s = graph.gridSize; - graph.setSelectionCells(graph.moveCells(graph.getSelectionCells(), s, s, - true)); - }, null, null, 'Ctrl+D'); - this.addAction('selectVertices', function() { - graph.selectVertices(); - }, null, null, 'Ctrl+Shift+V'); - this.addAction('selectEdges', function() { - graph.selectEdges(); - }, null, null, 'Ctrl+Shift+E'); - this.addAction('selectAll', function() { - graph.selectAll(); - }, null, null, 'Ctrl+A'); - - // Navigation actions - this.addAction('home', function() { - graph.home(); - }, null, null, 'Home'); - this.addAction('exitGroup', function() { - graph.exitGroup(); - }, null, null, 'Page Up'); - this.addAction('enterGroup', function() { - graph.enterGroup(); - }, null, null, 'Page Down'); - this.addAction('expand', function() { - graph.foldCells(false); - }, null, null, 'Enter'); - this.addAction('collapse', function() { - graph.foldCells(true); - }, null, null, 'Backspace'); - - // Arrange actions - this.addAction('toFront', function() { - graph.orderCells(false); - }, null, null, 'Ctrl+F'); - this.addAction('toBack', function() { - graph.orderCells(true); - }, null, null, 'Ctrl+B'); - this.addAction('group', function() { - graph.setSelectionCell(graph.groupCells(null, 0)); - }, null, null, 'Ctrl+G'); - this.addAction('ungroup', function() { - graph.setSelectionCells(graph.ungroupCells()); - }, null, null, 'Ctrl+U'); - this.addAction('removeFromGroup', function() { - graph.removeCellsFromParent(); - }); - this.addAction('editLink', function() { - var cell = graph.getSelectionCell(); - var link = graph.getLinkForCell(cell); - - if (link == null) { - link = ''; - } - - link = mxUtils.prompt(mxResources.get('enterValue'), link); - - if (link != null) { - graph.setLinkForCell(cell, link); - } - }); - this.addAction('openLink', function() { - var cell = graph.getSelectionCell(); - var link = graph.getLinkForCell(cell); - - if (link != null) { - window.open(link); - } - }); - this.addAction('autosize', function() { - var cells = graph.getSelectionCells(); - - if (cells != null) { - graph.getModel().beginUpdate(); - try { - for (var i = 0; i < cells.length; i++) { - var cell = cells[i]; - - if (graph.getModel().getChildCount(cell)) { - graph.updateGroupBounds([cell], 20); - } else { - graph.updateCellSize(cell); - } - } - } finally { - graph.getModel().endUpdate(); - } - } - }); - this.addAction('wordWrap', function() { - var state = graph.getView().getState(graph.getSelectionCell()); - var value = 'wrap'; - - if (state != null && state.style[mxConstants.STYLE_WHITE_SPACE] == 'wrap') { - value = null; - } - - graph.setCellStyles(mxConstants.STYLE_WHITE_SPACE, value); - }); - this.addAction('rotation', function() { - var value = '0'; - var state = graph.getView().getState(graph.getSelectionCell()); - - if (state != null) { - value = state.style[mxConstants.STYLE_ROTATION] || value; - } - - value = mxUtils.prompt(mxResources.get('enterValue') + ' (' + - mxResources.get('rotation') + ' 0-360)', value); - - if (value != null) { - graph.setCellStyles(mxConstants.STYLE_ROTATION, value); - } - }); - this.addAction('tilt', function() { - var cells = graph.getSelectionCells(); - - if (cells != null) { - graph.getModel().beginUpdate(); - try { - for (var i = 0; i < cells.length; i++) { - var cell = cells[i]; - - if (graph.getModel().isVertex(cell) && graph.getModel().getChildCount( - cell) == 0) { - var geo = graph.getCellGeometry(cell); - - if (geo != null) { - // Rotates the size and position in the geometry - geo = geo.clone(); - geo.x += geo.width / 2 - geo.height / 2; - geo.y += geo.height / 2 - geo.width / 2; - var tmp = geo.width; - geo.width = geo.height; - geo.height = tmp; - graph.getModel().setGeometry(cell, geo); - - // Reads the current direction and advances by 90 degrees - var state = graph.view.getState(cell); - - if (state != null) { - var dir = state.style[mxConstants.STYLE_DIRECTION] || 'east' /*default*/ ; - - if (dir == 'east') { - dir = 'south'; - } else if (dir == 'south') { - dir = 'west'; - } else if (dir == 'west') { - dir = 'north'; - } else if (dir == 'north') { - dir = 'east'; - } - - graph.setCellStyles(mxConstants.STYLE_DIRECTION, dir, [cell]); - } - } - } - } - } finally { - graph.getModel().endUpdate(); - } - } - }, null, null, 'Ctrl+R'); - - // View actions - this.addAction('actualSize', function() { - graph.zoomTo(1); - }); - this.addAction('zoomIn', function() { - graph.zoomIn(); - }, null, null, 'Add'); - this.addAction('zoomOut', function() { - graph.zoomOut(); - }, null, null, 'Subtract'); - this.addAction('fitWindow', function() { - graph.fit(); - }); - - this.addAction('fitPage', mxUtils.bind(this, function() { - if (!graph.pageVisible) { - this.get('pageView').funct(); - } - - var fmt = graph.pageFormat; - var ps = graph.pageScale; - var cw = graph.container.clientWidth - 20; - var ch = graph.container.clientHeight - 20; - - var scale = Math.floor(100 * Math.min(cw / fmt.width / ps, ch / fmt.height / - ps)) / 100; - graph.zoomTo(scale); - - graph.container.scrollLeft = Math.round(graph.view.translate.x * scale - - Math.max(10, (graph.container.clientWidth - fmt.width * ps * scale) / 2) - ); - graph.container.scrollTop = Math.round(graph.view.translate.y * scale - - Math.max(10, (graph.container.clientHeight - fmt.height * ps * scale) / - 2)); - })); - this.addAction('fitPageWidth', mxUtils.bind(this, function() { - if (!graph.pageVisible) { - this.get('pageView').funct(); - } - - var fmt = graph.pageFormat; - var ps = graph.pageScale; - var cw = graph.container.clientWidth - 20; - - var scale = Math.floor(100 * cw / fmt.width / ps) / 100; - graph.zoomTo(scale); - - graph.container.scrollLeft = Math.round(graph.view.translate.x * scale - - Math.max(10, (graph.container.clientWidth - fmt.width * ps * scale) / 2) - ); - graph.container.scrollTop = Math.round(graph.view.translate.y * scale - - Math.max(10, (graph.container.clientHeight - fmt.height * ps * scale) / - 2)); - })); - this.put('customZoom', new Action(mxResources.get('custom'), function() { - var value = mxUtils.prompt(mxResources.get('enterValue') + ' (%)', - parseInt(graph.getView().getScale() * 100)); - - if (value != null && value.length > 0 && !isNaN(parseInt(value))) { - graph.zoomTo(parseInt(value) / 100); - } - })); - - // Option actions - var action = null; - action = this.addAction('grid', function() { - graph.setGridEnabled(!graph.isGridEnabled()); - editor.updateGraphComponents(); - }, null, null, 'Ctrl+Shift+G'); - action.setToggleAction(true); - action.setSelectedCallback(function() { - return graph.isGridEnabled(); - }); - action = this.addAction('guides', function() { - graph.graphHandler.guidesEnabled = !graph.graphHandler.guidesEnabled; - }); - action.setToggleAction(true); - action.setSelectedCallback(function() { - return graph.graphHandler.guidesEnabled; - }); - action = this.addAction('tooltips', function() { - graph.tooltipHandler.setEnabled(!graph.tooltipHandler.isEnabled()); - }); - action.setToggleAction(true); - action.setSelectedCallback(function() { - return graph.tooltipHandler.isEnabled(); - }); - action = this.addAction('navigation', function() { - graph.foldingEnabled = !graph.foldingEnabled; - graph.view.revalidate(); - }); - action.setToggleAction(true); - action.setSelectedCallback(function() { - return graph.foldingEnabled; - }); - action = this.addAction('scrollbars', function() { - graph.scrollbars = !graph.scrollbars; - editor.updateGraphComponents(); - - if (!graph.scrollbars) { - var t = graph.view.translate; - graph.view.setTranslate(t.x - graph.container.scrollLeft / graph.view.scale, - t.y - graph.container.scrollTop / graph.view.scale); - graph.container.scrollLeft = 0; - graph.container.scrollTop = 0; - graph.sizeDidChange(); - } else { - var dx = graph.view.translate.x; - var dy = graph.view.translate.y; - - graph.view.translate.x = 0; - graph.view.translate.y = 0; - graph.sizeDidChange(); - graph.container.scrollLeft -= Math.round(dx * graph.view.scale); - graph.container.scrollTop -= Math.round(dy * graph.view.scale); - } - }, !mxClient.IS_TOUCH); - action.setToggleAction(true); - action.setSelectedCallback(function() { - return graph.container.style.overflow == 'auto'; - }); - action = this.addAction('pageView', mxUtils.bind(this, function() { - graph.pageVisible = !graph.pageVisible; - graph.pageBreaksVisible = graph.pageVisible; - graph.preferPageSize = graph.pageBreaksVisible; - graph.view.validate(); - graph.sizeDidChange(); - - editor.updateGraphComponents(); - editor.outline.update(); - - if (mxUtils.hasScrollbars(graph.container)) { - if (graph.pageVisible) { - graph.container.scrollLeft -= 20; - graph.container.scrollTop -= 20; - } else { - graph.container.scrollLeft += 20; - graph.container.scrollTop += 20; - } - } - })); - action.setToggleAction(true); - action.setSelectedCallback(function() { - return graph.pageVisible; - }); - action = this.addAction('connect', function() { - graph.setConnectable(!graph.connectionHandler.isEnabled()); - }, null, null, 'Ctrl+Q'); - action.setToggleAction(true); - action.setSelectedCallback(function() { - return graph.connectionHandler.isEnabled(); - }); - action = this.addAction('copyConnect', function() { - graph.connectionHandler.setCreateTarget(!graph.connectionHandler.isCreateTarget()); - }); - action.setToggleAction(true); - action.setSelectedCallback(function() { - return graph.connectionHandler.isCreateTarget(); - }); - - // Help actions - this.addAction('help', function() { - var ext = ''; - - if (mxResources.isLanguageSupported(mxClient.language)) { - ext = '_' + mxClient.language; - } - - window.open(RESOURCES_PATH + '/help' + ext + '.html'); - }); - this.put('about', new Action(mxResources.get('about') + ' Cally Square', - function() { - ui.showDialog(new AboutDialog(ui).container, 320, 280, true, true); - }, null, null, 'F1')); - - // Font style actions - var toggleFontStyle = mxUtils.bind(this, function(key, style) { - this.addAction(key, function() { - graph.toggleCellStyleFlags(mxConstants.STYLE_FONTSTYLE, style); - }); - }); - - toggleFontStyle('bold', mxConstants.FONT_BOLD); - toggleFontStyle('italic', mxConstants.FONT_ITALIC); - toggleFontStyle('underline', mxConstants.FONT_UNDERLINE); - - // Format actions - this.addAction('shadow', function() { - graph.toggleCellStyles(mxConstants.STYLE_SHADOW); - }); - this.addAction('dashed', function() { - graph.toggleCellStyles(mxConstants.STYLE_DASHED); - }); - this.addAction('rounded', function() { - graph.toggleCellStyles(mxConstants.STYLE_ROUNDED); - }); - this.addAction('curved', function() { - graph.toggleCellStyles(mxConstants.STYLE_CURVED); - }); - this.addAction('style', function() { - var cells = graph.getSelectionCells(); - - if (cells != null && cells.length > 0) { - var model = graph.getModel(); - var style = mxUtils.prompt(mxResources.get('enterValue') + ' (' + - mxResources.get('style') + ')', - model.getStyle(cells[0]) || ''); - - if (style != null) { - graph.setCellStyle(style, cells); - } - } - }); - this.addAction('setAsDefaultEdge', function() { - graph.setDefaultEdge(graph.getSelectionCell()); - }); - this.addAction('addWaypoint', function() { - var cell = graph.getSelectionCell(); - - if (cell != null && graph.getModel().isEdge(cell)) { - var handler = editor.graph.selectionCellsHandler.getHandler(cell); - - if (handler instanceof mxEdgeHandler) { - var t = graph.view.translate; - var s = graph.view.scale; - var dx = t.x; - var dy = t.y; - - var parent = graph.getModel().getParent(cell); - var pgeo = graph.getCellGeometry(parent); - - if (graph.getModel().isVertex(parent) && pgeo != null) { - dx += pgeo.x; - dy += pgeo.y; - } - - handler.addPointAt(handler.state, graph.panningHandler.triggerX / s - dx, - graph.panningHandler.triggerY / s - dy); - } - } - }); - this.addAction('removeWaypoint', function() { - // TODO: Action should run with "this" set to action - var rmWaypointAction = ui.actions.get('removeWaypoint'); - - if (rmWaypointAction.handler != null) { - // NOTE: Popupevent handled and action updated in Menus.createPopupMenu - rmWaypointAction.handler.removePoint(rmWaypointAction.handler.state, - rmWaypointAction.index); - } - }); - this.addAction('image', function() { - function updateImage(value, w, h) { - var select = null; - var cells = graph.getSelectionCells(); - - graph.getModel().beginUpdate(); - try { - // Inserts new cell if no cell is selected - if (cells.length == 0) { - var gs = graph.getGridSize(); - cells = [graph.insertVertex(graph.getDefaultParent(), null, '', gs, gs, - w, h)]; - select = cells; - } - - graph.setCellStyles(mxConstants.STYLE_IMAGE, value, cells); - graph.setCellStyles(mxConstants.STYLE_SHAPE, 'image', cells); - - if (graph.getSelectionCount() == 1) { - if (w != null && h != null) { - var cell = cells[0]; - var geo = graph.getModel().getGeometry(cell); - - if (geo != null) { - geo = geo.clone(); - geo.width = w; - geo.height = h; - graph.getModel().setGeometry(cell, geo); - } - } - } - } finally { - graph.getModel().endUpdate(); - } - - if (select != null) { - graph.setSelectionCells(select); - graph.scrollCellToVisible(select[0]); - } - }; - - var value = ''; - var state = graph.getView().getState(graph.getSelectionCell()); - - if (state != null) { - value = state.style[mxConstants.STYLE_IMAGE] || value; - } - - value = mxUtils.prompt(mxResources.get('enterValue') + ' (' + mxResources.get( - 'url') + ')', value); - - if (value != null) { - if (value.length > 0) { - var img = new Image(); - - img.onload = function() { - updateImage(value, img.width, img.height); - }; - img.onerror = function() { - mxUtils.alert(mxResources.get('fileNotFound')); - }; - - img.src = value; - } - } - }); -}; - -/** - * Registers the given action under the given name. - */ -Actions.prototype.addAction = function(key, funct, enabled, iconCls, shortcut) { - return this.put(key, new Action(mxResources.get(key), funct, enabled, iconCls, - shortcut)); -}; - -/** - * Registers the given action under the given name. - */ -Actions.prototype.put = function(name, action) { - this.actions[name] = action; - - return action; -}; - -/** - * Returns the action for the given name or null if no such action exists. - */ -Actions.prototype.get = function(name) { - return this.actions[name]; -}; - -/** - * Constructs a new action for the given parameters. - */ -function Action(label, funct, enabled, iconCls, shortcut) { - mxEventSource.call(this); - this.label = label; - this.funct = funct; - this.enabled = (enabled != null) ? enabled : true; - this.iconCls = iconCls; - this.shortcut = shortcut; -}; - -// Action inherits from mxEventSource -mxUtils.extend(Action, mxEventSource); - -/** - * Sets the enabled state of the action and fires a stateChanged event. - */ -Action.prototype.setEnabled = function(value) { - if (this.enabled != value) { - this.enabled = value; - this.fireEvent(new mxEventObject('stateChanged')); - } -}; - -/** - * Sets the enabled state of the action and fires a stateChanged event. - */ -Action.prototype.setToggleAction = function(value) { - this.toggleAction = value; -}; - -/** - * Sets the enabled state of the action and fires a stateChanged event. - */ -Action.prototype.setSelectedCallback = function(funct) { - this.selectedCallback = funct; -}; - -/** - * Sets the enabled state of the action and fires a stateChanged event. - */ -Action.prototype.isSelected = function() { - return this.selectedCallback(); -}; +var _0x7635=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x64\x69\x74\x6F\x72\x55\x69","\x61\x63\x74\x69\x6F\x6E\x73","\x69\x6E\x69\x74","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x65\x64\x69\x74\x6F\x72","\x67\x72\x61\x70\x68","\x6E\x65\x77","\x63\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x73\x68\x6F\x77\x44\x69\x61\x6C\x6F\x67","\x61\x64\x64\x41\x63\x74\x69\x6F\x6E","\x6F\x70\x65\x6E","\x73\x61\x76\x65","\x73\x61\x76\x65\x46\x69\x6C\x65","\x43\x74\x72\x6C\x2B\x53","\x73\x61\x76\x65\x41\x73","\x43\x74\x72\x6C\x2B\x53\x68\x69\x66\x74\x2D\x53","\x70\x75\x62\x6C\x69\x73\x68","\x70\x75\x62\x6C\x69\x73\x68\x46\x69\x6C\x65","\x43\x74\x72\x6C\x2B\x53\x68\x69\x66\x74\x2B\x50","\x76\x61\x72\x69\x61\x62\x6C\x65","\x69\x6D\x70\x6F\x72\x74","\x65\x78\x70\x6F\x72\x74","\x43\x74\x72\x6C\x2B\x45","\x65\x64\x69\x74\x46\x69\x6C\x65","\x65\x64\x69\x74","\x67\x65\x74","\x62\x69\x6E\x64","\x70\x75\x74","\x72\x65\x6E\x61\x6D\x65","\x70\x72\x69\x6E\x74","\x70\x72\x69\x6E\x74\x53\x63\x72\x65\x65\x6E","\x73\x70\x72\x69\x74\x65\x2D\x70\x72\x69\x6E\x74","\x43\x74\x72\x6C\x2B\x50","\x70\x72\x65\x76\x69\x65\x77","\x73\x68\x6F\x77","\x75\x6E\x64\x6F","\x75\x6E\x64\x6F\x4D\x61\x6E\x61\x67\x65\x72","\x73\x70\x72\x69\x74\x65\x2D\x75\x6E\x64\x6F","\x43\x74\x72\x6C\x2B\x5A","\x72\x65\x64\x6F","\x73\x70\x72\x69\x74\x65\x2D\x72\x65\x64\x6F","\x43\x74\x72\x6C\x2B\x59","\x63\x75\x74","\x73\x70\x72\x69\x74\x65\x2D\x63\x75\x74","\x43\x74\x72\x6C\x2B\x58","\x63\x6F\x70\x79","\x73\x70\x72\x69\x74\x65\x2D\x63\x6F\x70\x79","\x43\x74\x72\x6C\x2B\x43","\x70\x61\x73\x74\x65","\x73\x70\x72\x69\x74\x65\x2D\x70\x61\x73\x74\x65","\x43\x74\x72\x6C\x2B\x56","\x64\x65\x6C\x65\x74\x65","\x72\x65\x6D\x6F\x76\x65\x43\x65\x6C\x6C\x73","\x44\x65\x6C\x65\x74\x65","\x64\x75\x70\x6C\x69\x63\x61\x74\x65","\x67\x72\x69\x64\x53\x69\x7A\x65","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73","\x6D\x6F\x76\x65\x43\x65\x6C\x6C\x73","\x73\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73","\x43\x74\x72\x6C\x2B\x44","\x73\x65\x6C\x65\x63\x74\x56\x65\x72\x74\x69\x63\x65\x73","\x43\x74\x72\x6C\x2B\x53\x68\x69\x66\x74\x2B\x56","\x73\x65\x6C\x65\x63\x74\x45\x64\x67\x65\x73","\x43\x74\x72\x6C\x2B\x53\x68\x69\x66\x74\x2B\x45","\x73\x65\x6C\x65\x63\x74\x41\x6C\x6C","\x43\x74\x72\x6C\x2B\x41","\x68\x6F\x6D\x65","\x48\x6F\x6D\x65","\x65\x78\x69\x74\x47\x72\x6F\x75\x70","\x50\x61\x67\x65\x20\x55\x70","\x65\x6E\x74\x65\x72\x47\x72\x6F\x75\x70","\x50\x61\x67\x65\x20\x44\x6F\x77\x6E","\x65\x78\x70\x61\x6E\x64","\x66\x6F\x6C\x64\x43\x65\x6C\x6C\x73","\x45\x6E\x74\x65\x72","\x63\x6F\x6C\x6C\x61\x70\x73\x65","\x42\x61\x63\x6B\x73\x70\x61\x63\x65","\x74\x6F\x46\x72\x6F\x6E\x74","\x6F\x72\x64\x65\x72\x43\x65\x6C\x6C\x73","\x43\x74\x72\x6C\x2B\x46","\x74\x6F\x42\x61\x63\x6B","\x43\x74\x72\x6C\x2B\x42","\x67\x72\x6F\x75\x70","\x67\x72\x6F\x75\x70\x43\x65\x6C\x6C\x73","\x73\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C","\x43\x74\x72\x6C\x2B\x47","\x75\x6E\x67\x72\x6F\x75\x70","\x75\x6E\x67\x72\x6F\x75\x70\x43\x65\x6C\x6C\x73","\x43\x74\x72\x6C\x2B\x55","\x72\x65\x6D\x6F\x76\x65\x46\x72\x6F\x6D\x47\x72\x6F\x75\x70","\x72\x65\x6D\x6F\x76\x65\x43\x65\x6C\x6C\x73\x46\x72\x6F\x6D\x50\x61\x72\x65\x6E\x74","\x65\x64\x69\x74\x4C\x69\x6E\x6B","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C","\x67\x65\x74\x4C\x69\x6E\x6B\x46\x6F\x72\x43\x65\x6C\x6C","","\x65\x6E\x74\x65\x72\x56\x61\x6C\x75\x65","\x70\x72\x6F\x6D\x70\x74","\x73\x65\x74\x4C\x69\x6E\x6B\x46\x6F\x72\x43\x65\x6C\x6C","\x6F\x70\x65\x6E\x4C\x69\x6E\x6B","\x61\x75\x74\x6F\x73\x69\x7A\x65","\x62\x65\x67\x69\x6E\x55\x70\x64\x61\x74\x65","\x67\x65\x74\x4D\x6F\x64\x65\x6C","\x6C\x65\x6E\x67\x74\x68","\x67\x65\x74\x43\x68\x69\x6C\x64\x43\x6F\x75\x6E\x74","\x75\x70\x64\x61\x74\x65\x47\x72\x6F\x75\x70\x42\x6F\x75\x6E\x64\x73","\x75\x70\x64\x61\x74\x65\x43\x65\x6C\x6C\x53\x69\x7A\x65","\x65\x6E\x64\x55\x70\x64\x61\x74\x65","\x77\x6F\x72\x64\x57\x72\x61\x70","\x67\x65\x74\x53\x74\x61\x74\x65","\x67\x65\x74\x56\x69\x65\x77","\x77\x72\x61\x70","\x53\x54\x59\x4C\x45\x5F\x57\x48\x49\x54\x45\x5F\x53\x50\x41\x43\x45","\x73\x74\x79\x6C\x65","\x73\x65\x74\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65\x73","\x72\x6F\x74\x61\x74\x69\x6F\x6E","\x30","\x53\x54\x59\x4C\x45\x5F\x52\x4F\x54\x41\x54\x49\x4F\x4E","\x20\x28","\x20\x30\x2D\x33\x36\x30\x29","\x74\x69\x6C\x74","\x69\x73\x56\x65\x72\x74\x65\x78","\x67\x65\x74\x43\x65\x6C\x6C\x47\x65\x6F\x6D\x65\x74\x72\x79","\x63\x6C\x6F\x6E\x65","\x78","\x77\x69\x64\x74\x68","\x68\x65\x69\x67\x68\x74","\x79","\x73\x65\x74\x47\x65\x6F\x6D\x65\x74\x72\x79","\x76\x69\x65\x77","\x53\x54\x59\x4C\x45\x5F\x44\x49\x52\x45\x43\x54\x49\x4F\x4E","\x65\x61\x73\x74","\x73\x6F\x75\x74\x68","\x77\x65\x73\x74","\x6E\x6F\x72\x74\x68","\x43\x74\x72\x6C\x2B\x52","\x61\x63\x74\x75\x61\x6C\x53\x69\x7A\x65","\x7A\x6F\x6F\x6D\x54\x6F","\x7A\x6F\x6F\x6D\x49\x6E","\x41\x64\x64","\x7A\x6F\x6F\x6D\x4F\x75\x74","\x53\x75\x62\x74\x72\x61\x63\x74","\x66\x69\x74\x57\x69\x6E\x64\x6F\x77","\x66\x69\x74","\x66\x69\x74\x50\x61\x67\x65","\x70\x61\x67\x65\x56\x69\x73\x69\x62\x6C\x65","\x66\x75\x6E\x63\x74","\x70\x61\x67\x65\x56\x69\x65\x77","\x70\x61\x67\x65\x46\x6F\x72\x6D\x61\x74","\x70\x61\x67\x65\x53\x63\x61\x6C\x65","\x63\x6C\x69\x65\x6E\x74\x57\x69\x64\x74\x68","\x63\x6C\x69\x65\x6E\x74\x48\x65\x69\x67\x68\x74","\x6D\x69\x6E","\x66\x6C\x6F\x6F\x72","\x73\x63\x72\x6F\x6C\x6C\x4C\x65\x66\x74","\x74\x72\x61\x6E\x73\x6C\x61\x74\x65","\x6D\x61\x78","\x72\x6F\x75\x6E\x64","\x73\x63\x72\x6F\x6C\x6C\x54\x6F\x70","\x66\x69\x74\x50\x61\x67\x65\x57\x69\x64\x74\x68","\x63\x75\x73\x74\x6F\x6D\x5A\x6F\x6F\x6D","\x63\x75\x73\x74\x6F\x6D","\x20\x28\x25\x29","\x67\x65\x74\x53\x63\x61\x6C\x65","\x67\x72\x69\x64","\x69\x73\x47\x72\x69\x64\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x47\x72\x69\x64\x45\x6E\x61\x62\x6C\x65\x64","\x75\x70\x64\x61\x74\x65\x47\x72\x61\x70\x68\x43\x6F\x6D\x70\x6F\x6E\x65\x6E\x74\x73","\x43\x74\x72\x6C\x2B\x53\x68\x69\x66\x74\x2B\x47","\x73\x65\x74\x54\x6F\x67\x67\x6C\x65\x41\x63\x74\x69\x6F\x6E","\x73\x65\x74\x53\x65\x6C\x65\x63\x74\x65\x64\x43\x61\x6C\x6C\x62\x61\x63\x6B","\x67\x75\x69\x64\x65\x73","\x67\x75\x69\x64\x65\x73\x45\x6E\x61\x62\x6C\x65\x64","\x67\x72\x61\x70\x68\x48\x61\x6E\x64\x6C\x65\x72","\x74\x6F\x6F\x6C\x74\x69\x70\x73","\x69\x73\x45\x6E\x61\x62\x6C\x65\x64","\x74\x6F\x6F\x6C\x74\x69\x70\x48\x61\x6E\x64\x6C\x65\x72","\x73\x65\x74\x45\x6E\x61\x62\x6C\x65\x64","\x6E\x61\x76\x69\x67\x61\x74\x69\x6F\x6E","\x66\x6F\x6C\x64\x69\x6E\x67\x45\x6E\x61\x62\x6C\x65\x64","\x72\x65\x76\x61\x6C\x69\x64\x61\x74\x65","\x73\x63\x72\x6F\x6C\x6C\x62\x61\x72\x73","\x73\x63\x61\x6C\x65","\x73\x65\x74\x54\x72\x61\x6E\x73\x6C\x61\x74\x65","\x73\x69\x7A\x65\x44\x69\x64\x43\x68\x61\x6E\x67\x65","\x6F\x76\x65\x72\x66\x6C\x6F\x77","\x61\x75\x74\x6F","\x70\x61\x67\x65\x42\x72\x65\x61\x6B\x73\x56\x69\x73\x69\x62\x6C\x65","\x70\x72\x65\x66\x65\x72\x50\x61\x67\x65\x53\x69\x7A\x65","\x76\x61\x6C\x69\x64\x61\x74\x65","\x75\x70\x64\x61\x74\x65","\x6F\x75\x74\x6C\x69\x6E\x65","\x68\x61\x73\x53\x63\x72\x6F\x6C\x6C\x62\x61\x72\x73","\x63\x6F\x6E\x6E\x65\x63\x74","\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x48\x61\x6E\x64\x6C\x65\x72","\x73\x65\x74\x43\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65","\x43\x74\x72\x6C\x2B\x51","\x63\x6F\x70\x79\x43\x6F\x6E\x6E\x65\x63\x74","\x69\x73\x43\x72\x65\x61\x74\x65\x54\x61\x72\x67\x65\x74","\x73\x65\x74\x43\x72\x65\x61\x74\x65\x54\x61\x72\x67\x65\x74","\x68\x65\x6C\x70","\x6C\x61\x6E\x67\x75\x61\x67\x65","\x69\x73\x4C\x61\x6E\x67\x75\x61\x67\x65\x53\x75\x70\x70\x6F\x72\x74\x65\x64","\x5F","\x2F\x68\x65\x6C\x70","\x2E\x68\x74\x6D\x6C","\x61\x62\x6F\x75\x74","\x20\x43\x61\x6C\x6C\x79\x20\x53\x71\x75\x61\x72\x65","\x46\x31","\x74\x6F\x67\x67\x6C\x65\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65\x46\x6C\x61\x67\x73","\x62\x6F\x6C\x64","\x69\x74\x61\x6C\x69\x63","\x75\x6E\x64\x65\x72\x6C\x69\x6E\x65","\x73\x68\x61\x64\x6F\x77","\x74\x6F\x67\x67\x6C\x65\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65\x73","\x64\x61\x73\x68\x65\x64","\x72\x6F\x75\x6E\x64\x65\x64","\x63\x75\x72\x76\x65\x64","\x29","\x67\x65\x74\x53\x74\x79\x6C\x65","\x73\x65\x74\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65","\x73\x65\x74\x41\x73\x44\x65\x66\x61\x75\x6C\x74\x45\x64\x67\x65","\x73\x65\x74\x44\x65\x66\x61\x75\x6C\x74\x45\x64\x67\x65","\x61\x64\x64\x57\x61\x79\x70\x6F\x69\x6E\x74","\x69\x73\x45\x64\x67\x65","\x67\x65\x74\x48\x61\x6E\x64\x6C\x65\x72","\x73\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73\x48\x61\x6E\x64\x6C\x65\x72","\x67\x65\x74\x50\x61\x72\x65\x6E\x74","\x73\x74\x61\x74\x65","\x74\x72\x69\x67\x67\x65\x72\x58","\x70\x61\x6E\x6E\x69\x6E\x67\x48\x61\x6E\x64\x6C\x65\x72","\x74\x72\x69\x67\x67\x65\x72\x59","\x61\x64\x64\x50\x6F\x69\x6E\x74\x41\x74","\x72\x65\x6D\x6F\x76\x65\x57\x61\x79\x70\x6F\x69\x6E\x74","\x68\x61\x6E\x64\x6C\x65\x72","\x69\x6E\x64\x65\x78","\x72\x65\x6D\x6F\x76\x65\x50\x6F\x69\x6E\x74","\x69\x6D\x61\x67\x65","\x67\x65\x74\x47\x72\x69\x64\x53\x69\x7A\x65","\x67\x65\x74\x44\x65\x66\x61\x75\x6C\x74\x50\x61\x72\x65\x6E\x74","\x69\x6E\x73\x65\x72\x74\x56\x65\x72\x74\x65\x78","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x6F\x75\x6E\x74","\x67\x65\x74\x47\x65\x6F\x6D\x65\x74\x72\x79","\x73\x63\x72\x6F\x6C\x6C\x43\x65\x6C\x6C\x54\x6F\x56\x69\x73\x69\x62\x6C\x65","\x53\x54\x59\x4C\x45\x5F\x49\x4D\x41\x47\x45","\x75\x72\x6C","\x6F\x6E\x6C\x6F\x61\x64","\x6F\x6E\x65\x72\x72\x6F\x72","\x66\x69\x6C\x65\x4E\x6F\x74\x46\x6F\x75\x6E\x64","\x61\x6C\x65\x72\x74","\x73\x72\x63","\x63\x61\x6C\x6C","\x6C\x61\x62\x65\x6C","\x65\x6E\x61\x62\x6C\x65\x64","\x69\x63\x6F\x6E\x43\x6C\x73","\x73\x68\x6F\x72\x74\x63\x75\x74","\x65\x78\x74\x65\x6E\x64","\x73\x74\x61\x74\x65\x43\x68\x61\x6E\x67\x65\x64","\x66\x69\x72\x65\x45\x76\x65\x6E\x74","\x74\x6F\x67\x67\x6C\x65\x41\x63\x74\x69\x6F\x6E","\x73\x65\x6C\x65\x63\x74\x65\x64\x43\x61\x6C\x6C\x62\x61\x63\x6B","\x69\x73\x53\x65\x6C\x65\x63\x74\x65\x64"];_0x7635[0];function Actions(_0x50cbx2){this[_0x7635[1]]= _0x50cbx2;this[_0x7635[2]]= new Object();this[_0x7635[3]]()}Actions[_0x7635[4]][_0x7635[3]]= function(){var _0x50cbx3=this[_0x7635[1]];var _0x50cbx4=_0x50cbx3[_0x7635[5]];var _0x50cbx5=_0x50cbx4[_0x7635[6]];this[_0x7635[10]](_0x7635[7],function(){_0x50cbx3[_0x7635[9]]( new NewDialog(_0x50cbx3)[_0x7635[8]],300,180,true,true)});this[_0x7635[10]](_0x7635[11],function(){_0x50cbx3[_0x7635[9]]( new OpenDialog(_0x50cbx3)[_0x7635[8]],300,180,true,true)});this[_0x7635[10]](_0x7635[12],function(){_0x50cbx3[_0x7635[13]](false)},null,null,_0x7635[14]);this[_0x7635[10]](_0x7635[15],function(){_0x50cbx3[_0x7635[13]](true)},null,null,_0x7635[16]);this[_0x7635[10]](_0x7635[17],function(){_0x50cbx3[_0x7635[18]](false)},null,null,_0x7635[19]);this[_0x7635[10]](_0x7635[20],function(){_0x50cbx3[_0x7635[9]]( new VariableDialog(_0x50cbx3)[_0x7635[8]],300,180,true,true)});this[_0x7635[10]](_0x7635[21],function(){_0x50cbx3[_0x7635[9]]( new ImportDialog(_0x50cbx3)[_0x7635[8]],300,200,true,true)});this[_0x7635[10]](_0x7635[22],function(){_0x50cbx3[_0x7635[9]]( new ExportDialog(_0x50cbx3)[_0x7635[8]],300,200,true,true)},null,null,_0x7635[23]);this[_0x7635[28]](_0x7635[24], new Action(mxResources[_0x7635[26]](_0x7635[25]),mxUtils[_0x7635[27]](this,function(){this[_0x7635[1]][_0x7635[9]]( new EditFileDialog(_0x50cbx3)[_0x7635[8]],620,420,true,true)})));this[_0x7635[10]](_0x7635[29],function(){_0x50cbx3[_0x7635[9]]( new RenameDialog(_0x50cbx3)[_0x7635[8]],300,180,true,true)});this[_0x7635[10]](_0x7635[30],function(){mxUtils[_0x7635[31]](_0x50cbx5)},null,_0x7635[32],_0x7635[33]);this[_0x7635[10]](_0x7635[34],function(){mxUtils[_0x7635[35]](_0x50cbx5,null,10,10)});this[_0x7635[10]](_0x7635[36],function(){_0x50cbx4[_0x7635[37]][_0x7635[36]]()},null,_0x7635[38],_0x7635[39]);this[_0x7635[10]](_0x7635[40],function(){_0x50cbx4[_0x7635[37]][_0x7635[40]]()},null,_0x7635[41],_0x7635[42]);this[_0x7635[10]](_0x7635[43],function(){mxClipboard[_0x7635[43]](_0x50cbx5)},null,_0x7635[44],_0x7635[45]);this[_0x7635[10]](_0x7635[46],function(){mxClipboard[_0x7635[46]](_0x50cbx5)},null,_0x7635[47],_0x7635[48]);this[_0x7635[10]](_0x7635[49],function(){mxClipboard[_0x7635[49]](_0x50cbx5)},false,_0x7635[50],_0x7635[51]);this[_0x7635[10]](_0x7635[52],function(){_0x50cbx5[_0x7635[53]]()},null,null,_0x7635[54]);this[_0x7635[10]](_0x7635[55],function(){var _0x50cbx6=_0x50cbx5[_0x7635[56]];_0x50cbx5[_0x7635[59]](_0x50cbx5[_0x7635[58]](_0x50cbx5[_0x7635[57]](),_0x50cbx6,_0x50cbx6,true))},null,null,_0x7635[60]);this[_0x7635[10]](_0x7635[61],function(){_0x50cbx5[_0x7635[61]]()},null,null,_0x7635[62]);this[_0x7635[10]](_0x7635[63],function(){_0x50cbx5[_0x7635[63]]()},null,null,_0x7635[64]);this[_0x7635[10]](_0x7635[65],function(){_0x50cbx5[_0x7635[65]]()},null,null,_0x7635[66]);this[_0x7635[10]](_0x7635[67],function(){_0x50cbx5[_0x7635[67]]()},null,null,_0x7635[68]);this[_0x7635[10]](_0x7635[69],function(){_0x50cbx5[_0x7635[69]]()},null,null,_0x7635[70]);this[_0x7635[10]](_0x7635[71],function(){_0x50cbx5[_0x7635[71]]()},null,null,_0x7635[72]);this[_0x7635[10]](_0x7635[73],function(){_0x50cbx5[_0x7635[74]](false)},null,null,_0x7635[75]);this[_0x7635[10]](_0x7635[76],function(){_0x50cbx5[_0x7635[74]](true)},null,null,_0x7635[77]);this[_0x7635[10]](_0x7635[78],function(){_0x50cbx5[_0x7635[79]](false)},null,null,_0x7635[80]);this[_0x7635[10]](_0x7635[81],function(){_0x50cbx5[_0x7635[79]](true)},null,null,_0x7635[82]);this[_0x7635[10]](_0x7635[83],function(){_0x50cbx5[_0x7635[85]](_0x50cbx5[_0x7635[84]](null,0))},null,null,_0x7635[86]);this[_0x7635[10]](_0x7635[87],function(){_0x50cbx5[_0x7635[59]](_0x50cbx5[_0x7635[88]]())},null,null,_0x7635[89]);this[_0x7635[10]](_0x7635[90],function(){_0x50cbx5[_0x7635[91]]()});this[_0x7635[10]](_0x7635[92],function(){var _0x50cbx7=_0x50cbx5[_0x7635[93]]();var _0x50cbx8=_0x50cbx5[_0x7635[94]](_0x50cbx7);if(_0x50cbx8== null){_0x50cbx8= _0x7635[95]};_0x50cbx8= mxUtils[_0x7635[97]](mxResources[_0x7635[26]](_0x7635[96]),_0x50cbx8);if(_0x50cbx8!= null){_0x50cbx5[_0x7635[98]](_0x50cbx7,_0x50cbx8)}});this[_0x7635[10]](_0x7635[99],function(){var _0x50cbx7=_0x50cbx5[_0x7635[93]]();var _0x50cbx8=_0x50cbx5[_0x7635[94]](_0x50cbx7);if(_0x50cbx8!= null){window[_0x7635[11]](_0x50cbx8)}});this[_0x7635[10]](_0x7635[100],function(){var _0x50cbx9=_0x50cbx5[_0x7635[57]]();if(_0x50cbx9!= null){_0x50cbx5[_0x7635[102]]()[_0x7635[101]]();try{for(var _0x50cbxa=0;_0x50cbxa< _0x50cbx9[_0x7635[103]];_0x50cbxa++){var _0x50cbx7=_0x50cbx9[_0x50cbxa];if(_0x50cbx5[_0x7635[102]]()[_0x7635[104]](_0x50cbx7)){_0x50cbx5[_0x7635[105]]([_0x50cbx7],20)}else {_0x50cbx5[_0x7635[106]](_0x50cbx7)}}}finally{_0x50cbx5[_0x7635[102]]()[_0x7635[107]]()}}});this[_0x7635[10]](_0x7635[108],function(){var _0x50cbxb=_0x50cbx5[_0x7635[110]]()[_0x7635[109]](_0x50cbx5[_0x7635[93]]());var _0x50cbxc=_0x7635[111];if(_0x50cbxb!= null&& _0x50cbxb[_0x7635[113]][mxConstants[_0x7635[112]]]== _0x7635[111]){_0x50cbxc= null};_0x50cbx5[_0x7635[114]](mxConstants.STYLE_WHITE_SPACE,_0x50cbxc)});this[_0x7635[10]](_0x7635[115],function(){var _0x50cbxc=_0x7635[116];var _0x50cbxb=_0x50cbx5[_0x7635[110]]()[_0x7635[109]](_0x50cbx5[_0x7635[93]]());if(_0x50cbxb!= null){_0x50cbxc= _0x50cbxb[_0x7635[113]][mxConstants[_0x7635[117]]]|| _0x50cbxc};_0x50cbxc= mxUtils[_0x7635[97]](mxResources[_0x7635[26]](_0x7635[96])+ _0x7635[118]+ mxResources[_0x7635[26]](_0x7635[115])+ _0x7635[119],_0x50cbxc);if(_0x50cbxc!= null){_0x50cbx5[_0x7635[114]](mxConstants.STYLE_ROTATION,_0x50cbxc)}});this[_0x7635[10]](_0x7635[120],function(){var _0x50cbx9=_0x50cbx5[_0x7635[57]]();if(_0x50cbx9!= null){_0x50cbx5[_0x7635[102]]()[_0x7635[101]]();try{for(var _0x50cbxa=0;_0x50cbxa< _0x50cbx9[_0x7635[103]];_0x50cbxa++){var _0x50cbx7=_0x50cbx9[_0x50cbxa];if(_0x50cbx5[_0x7635[102]]()[_0x7635[121]](_0x50cbx7)&& _0x50cbx5[_0x7635[102]]()[_0x7635[104]](_0x50cbx7)== 0){var _0x50cbxd=_0x50cbx5[_0x7635[122]](_0x50cbx7);if(_0x50cbxd!= null){_0x50cbxd= _0x50cbxd[_0x7635[123]]();_0x50cbxd[_0x7635[124]]+= _0x50cbxd[_0x7635[125]]/ 2- _0x50cbxd[_0x7635[126]]/ 2;_0x50cbxd[_0x7635[127]]+= _0x50cbxd[_0x7635[126]]/ 2- _0x50cbxd[_0x7635[125]]/ 2;var _0x50cbxe=_0x50cbxd[_0x7635[125]];_0x50cbxd[_0x7635[125]]= _0x50cbxd[_0x7635[126]];_0x50cbxd[_0x7635[126]]= _0x50cbxe;_0x50cbx5[_0x7635[102]]()[_0x7635[128]](_0x50cbx7,_0x50cbxd);var _0x50cbxb=_0x50cbx5[_0x7635[129]][_0x7635[109]](_0x50cbx7);if(_0x50cbxb!= null){var _0x50cbxf=_0x50cbxb[_0x7635[113]][mxConstants[_0x7635[130]]]|| _0x7635[131];if(_0x50cbxf== _0x7635[131]){_0x50cbxf= _0x7635[132]}else {if(_0x50cbxf== _0x7635[132]){_0x50cbxf= _0x7635[133]}else {if(_0x50cbxf== _0x7635[133]){_0x50cbxf= _0x7635[134]}else {if(_0x50cbxf== _0x7635[134]){_0x50cbxf= _0x7635[131]}}}};_0x50cbx5[_0x7635[114]](mxConstants.STYLE_DIRECTION,_0x50cbxf,[_0x50cbx7])}}}}}finally{_0x50cbx5[_0x7635[102]]()[_0x7635[107]]()}}},null,null,_0x7635[135]);this[_0x7635[10]](_0x7635[136],function(){_0x50cbx5[_0x7635[137]](1)});this[_0x7635[10]](_0x7635[138],function(){_0x50cbx5[_0x7635[138]]()},null,null,_0x7635[139]);this[_0x7635[10]](_0x7635[140],function(){_0x50cbx5[_0x7635[140]]()},null,null,_0x7635[141]);this[_0x7635[10]](_0x7635[142],function(){_0x50cbx5[_0x7635[143]]()});this[_0x7635[10]](_0x7635[144],mxUtils[_0x7635[27]](this,function(){if(!_0x50cbx5[_0x7635[145]]){this[_0x7635[26]](_0x7635[147])[_0x7635[146]]()};var _0x50cbx10=_0x50cbx5[_0x7635[148]];var _0x50cbx11=_0x50cbx5[_0x7635[149]];var _0x50cbx12=_0x50cbx5[_0x7635[8]][_0x7635[150]]- 20;var _0x50cbx13=_0x50cbx5[_0x7635[8]][_0x7635[151]]- 20;var _0x50cbx14=Math[_0x7635[153]](100* Math[_0x7635[152]](_0x50cbx12/ _0x50cbx10[_0x7635[125]]/ _0x50cbx11,_0x50cbx13/ _0x50cbx10[_0x7635[126]]/ _0x50cbx11))/ 100;_0x50cbx5[_0x7635[137]](_0x50cbx14);_0x50cbx5[_0x7635[8]][_0x7635[154]]= Math[_0x7635[157]](_0x50cbx5[_0x7635[129]][_0x7635[155]][_0x7635[124]]* _0x50cbx14- Math[_0x7635[156]](10,(_0x50cbx5[_0x7635[8]][_0x7635[150]]- _0x50cbx10[_0x7635[125]]* _0x50cbx11* _0x50cbx14)/ 2));_0x50cbx5[_0x7635[8]][_0x7635[158]]= Math[_0x7635[157]](_0x50cbx5[_0x7635[129]][_0x7635[155]][_0x7635[127]]* _0x50cbx14- Math[_0x7635[156]](10,(_0x50cbx5[_0x7635[8]][_0x7635[151]]- _0x50cbx10[_0x7635[126]]* _0x50cbx11* _0x50cbx14)/ 2))}));this[_0x7635[10]](_0x7635[159],mxUtils[_0x7635[27]](this,function(){if(!_0x50cbx5[_0x7635[145]]){this[_0x7635[26]](_0x7635[147])[_0x7635[146]]()};var _0x50cbx10=_0x50cbx5[_0x7635[148]];var _0x50cbx11=_0x50cbx5[_0x7635[149]];var _0x50cbx12=_0x50cbx5[_0x7635[8]][_0x7635[150]]- 20;var _0x50cbx14=Math[_0x7635[153]](100* _0x50cbx12/ _0x50cbx10[_0x7635[125]]/ _0x50cbx11)/ 100;_0x50cbx5[_0x7635[137]](_0x50cbx14);_0x50cbx5[_0x7635[8]][_0x7635[154]]= Math[_0x7635[157]](_0x50cbx5[_0x7635[129]][_0x7635[155]][_0x7635[124]]* _0x50cbx14- Math[_0x7635[156]](10,(_0x50cbx5[_0x7635[8]][_0x7635[150]]- _0x50cbx10[_0x7635[125]]* _0x50cbx11* _0x50cbx14)/ 2));_0x50cbx5[_0x7635[8]][_0x7635[158]]= Math[_0x7635[157]](_0x50cbx5[_0x7635[129]][_0x7635[155]][_0x7635[127]]* _0x50cbx14- Math[_0x7635[156]](10,(_0x50cbx5[_0x7635[8]][_0x7635[151]]- _0x50cbx10[_0x7635[126]]* _0x50cbx11* _0x50cbx14)/ 2))}));this[_0x7635[28]](_0x7635[160], new Action(mxResources[_0x7635[26]](_0x7635[161]),function(){var _0x50cbxc=mxUtils[_0x7635[97]](mxResources[_0x7635[26]](_0x7635[96])+ _0x7635[162],parseInt(_0x50cbx5[_0x7635[110]]()[_0x7635[163]]()* 100));if(_0x50cbxc!= null&& _0x50cbxc[_0x7635[103]]> 0&& !isNaN(parseInt(_0x50cbxc))){_0x50cbx5[_0x7635[137]](parseInt(_0x50cbxc)/ 100)}}));var _0x50cbx15=null;_0x50cbx15= this[_0x7635[10]](_0x7635[164],function(){_0x50cbx5[_0x7635[166]](!_0x50cbx5[_0x7635[165]]());_0x50cbx4[_0x7635[167]]()},null,null,_0x7635[168]);_0x50cbx15[_0x7635[169]](true);_0x50cbx15[_0x7635[170]](function(){return _0x50cbx5[_0x7635[165]]()});_0x50cbx15= this[_0x7635[10]](_0x7635[171],function(){_0x50cbx5[_0x7635[173]][_0x7635[172]]= !_0x50cbx5[_0x7635[173]][_0x7635[172]]});_0x50cbx15[_0x7635[169]](true);_0x50cbx15[_0x7635[170]](function(){return _0x50cbx5[_0x7635[173]][_0x7635[172]]});_0x50cbx15= this[_0x7635[10]](_0x7635[174],function(){_0x50cbx5[_0x7635[176]][_0x7635[177]](!_0x50cbx5[_0x7635[176]][_0x7635[175]]())});_0x50cbx15[_0x7635[169]](true);_0x50cbx15[_0x7635[170]](function(){return _0x50cbx5[_0x7635[176]][_0x7635[175]]()});_0x50cbx15= this[_0x7635[10]](_0x7635[178],function(){_0x50cbx5[_0x7635[179]]= !_0x50cbx5[_0x7635[179]];_0x50cbx5[_0x7635[129]][_0x7635[180]]()});_0x50cbx15[_0x7635[169]](true);_0x50cbx15[_0x7635[170]](function(){return _0x50cbx5[_0x7635[179]]});_0x50cbx15= this[_0x7635[10]](_0x7635[181],function(){_0x50cbx5[_0x7635[181]]= !_0x50cbx5[_0x7635[181]];_0x50cbx4[_0x7635[167]]();if(!_0x50cbx5[_0x7635[181]]){var _0x50cbx16=_0x50cbx5[_0x7635[129]][_0x7635[155]];_0x50cbx5[_0x7635[129]][_0x7635[183]](_0x50cbx16[_0x7635[124]]- _0x50cbx5[_0x7635[8]][_0x7635[154]]/ _0x50cbx5[_0x7635[129]][_0x7635[182]],_0x50cbx16[_0x7635[127]]- _0x50cbx5[_0x7635[8]][_0x7635[158]]/ _0x50cbx5[_0x7635[129]][_0x7635[182]]);_0x50cbx5[_0x7635[8]][_0x7635[154]]= 0;_0x50cbx5[_0x7635[8]][_0x7635[158]]= 0;_0x50cbx5[_0x7635[184]]()}else {var _0x50cbx17=_0x50cbx5[_0x7635[129]][_0x7635[155]][_0x7635[124]];var _0x50cbx18=_0x50cbx5[_0x7635[129]][_0x7635[155]][_0x7635[127]];_0x50cbx5[_0x7635[129]][_0x7635[155]][_0x7635[124]]= 0;_0x50cbx5[_0x7635[129]][_0x7635[155]][_0x7635[127]]= 0;_0x50cbx5[_0x7635[184]]();_0x50cbx5[_0x7635[8]][_0x7635[154]]-= Math[_0x7635[157]](_0x50cbx17* _0x50cbx5[_0x7635[129]][_0x7635[182]]);_0x50cbx5[_0x7635[8]][_0x7635[158]]-= Math[_0x7635[157]](_0x50cbx18* _0x50cbx5[_0x7635[129]][_0x7635[182]])}},!mxClient.IS_TOUCH);_0x50cbx15[_0x7635[169]](true);_0x50cbx15[_0x7635[170]](function(){return _0x50cbx5[_0x7635[8]][_0x7635[113]][_0x7635[185]]== _0x7635[186]});_0x50cbx15= this[_0x7635[10]](_0x7635[147],mxUtils[_0x7635[27]](this,function(){_0x50cbx5[_0x7635[145]]= !_0x50cbx5[_0x7635[145]];_0x50cbx5[_0x7635[187]]= _0x50cbx5[_0x7635[145]];_0x50cbx5[_0x7635[188]]= _0x50cbx5[_0x7635[187]];_0x50cbx5[_0x7635[129]][_0x7635[189]]();_0x50cbx5[_0x7635[184]]();_0x50cbx4[_0x7635[167]]();_0x50cbx4[_0x7635[191]][_0x7635[190]]();if(mxUtils[_0x7635[192]](_0x50cbx5[_0x7635[8]])){if(_0x50cbx5[_0x7635[145]]){_0x50cbx5[_0x7635[8]][_0x7635[154]]-= 20;_0x50cbx5[_0x7635[8]][_0x7635[158]]-= 20}else {_0x50cbx5[_0x7635[8]][_0x7635[154]]+= 20;_0x50cbx5[_0x7635[8]][_0x7635[158]]+= 20}}}));_0x50cbx15[_0x7635[169]](true);_0x50cbx15[_0x7635[170]](function(){return _0x50cbx5[_0x7635[145]]});_0x50cbx15= this[_0x7635[10]](_0x7635[193],function(){_0x50cbx5[_0x7635[195]](!_0x50cbx5[_0x7635[194]][_0x7635[175]]())},null,null,_0x7635[196]);_0x50cbx15[_0x7635[169]](true);_0x50cbx15[_0x7635[170]](function(){return _0x50cbx5[_0x7635[194]][_0x7635[175]]()});_0x50cbx15= this[_0x7635[10]](_0x7635[197],function(){_0x50cbx5[_0x7635[194]][_0x7635[199]](!_0x50cbx5[_0x7635[194]][_0x7635[198]]())});_0x50cbx15[_0x7635[169]](true);_0x50cbx15[_0x7635[170]](function(){return _0x50cbx5[_0x7635[194]][_0x7635[198]]()});this[_0x7635[10]](_0x7635[200],function(){var _0x50cbx19=_0x7635[95];if(mxResources[_0x7635[202]](mxClient[_0x7635[201]])){_0x50cbx19= _0x7635[203]+ mxClient[_0x7635[201]]};window[_0x7635[11]](RESOURCES_PATH+ _0x7635[204]+ _0x50cbx19+ _0x7635[205])});this[_0x7635[28]](_0x7635[206], new Action(mxResources[_0x7635[26]](_0x7635[206])+ _0x7635[207],function(){_0x50cbx3[_0x7635[9]]( new AboutDialog(_0x50cbx3)[_0x7635[8]],320,280,true,true)},null,null,_0x7635[208]));var _0x50cbx1a=mxUtils[_0x7635[27]](this,function(_0x50cbx1b,_0x50cbx1c){this[_0x7635[10]](_0x50cbx1b,function(){_0x50cbx5[_0x7635[209]](mxConstants.STYLE_FONTSTYLE,_0x50cbx1c)})});_0x50cbx1a(_0x7635[210],mxConstants.FONT_BOLD);_0x50cbx1a(_0x7635[211],mxConstants.FONT_ITALIC);_0x50cbx1a(_0x7635[212],mxConstants.FONT_UNDERLINE);this[_0x7635[10]](_0x7635[213],function(){_0x50cbx5[_0x7635[214]](mxConstants.STYLE_SHADOW)});this[_0x7635[10]](_0x7635[215],function(){_0x50cbx5[_0x7635[214]](mxConstants.STYLE_DASHED)});this[_0x7635[10]](_0x7635[216],function(){_0x50cbx5[_0x7635[214]](mxConstants.STYLE_ROUNDED)});this[_0x7635[10]](_0x7635[217],function(){_0x50cbx5[_0x7635[214]](mxConstants.STYLE_CURVED)});this[_0x7635[10]](_0x7635[113],function(){var _0x50cbx9=_0x50cbx5[_0x7635[57]]();if(_0x50cbx9!= null&& _0x50cbx9[_0x7635[103]]> 0){var _0x50cbx1d=_0x50cbx5[_0x7635[102]]();var _0x50cbx1c=mxUtils[_0x7635[97]](mxResources[_0x7635[26]](_0x7635[96])+ _0x7635[118]+ mxResources[_0x7635[26]](_0x7635[113])+ _0x7635[218],_0x50cbx1d[_0x7635[219]](_0x50cbx9[0])|| _0x7635[95]);if(_0x50cbx1c!= null){_0x50cbx5[_0x7635[220]](_0x50cbx1c,_0x50cbx9)}}});this[_0x7635[10]](_0x7635[221],function(){_0x50cbx5[_0x7635[222]](_0x50cbx5[_0x7635[93]]())});this[_0x7635[10]](_0x7635[223],function(){var _0x50cbx7=_0x50cbx5[_0x7635[93]]();if(_0x50cbx7!= null&& _0x50cbx5[_0x7635[102]]()[_0x7635[224]](_0x50cbx7)){var _0x50cbx1e=_0x50cbx4[_0x7635[6]][_0x7635[226]][_0x7635[225]](_0x50cbx7);if(_0x50cbx1e instanceof mxEdgeHandler){var _0x50cbx16=_0x50cbx5[_0x7635[129]][_0x7635[155]];var _0x50cbx6=_0x50cbx5[_0x7635[129]][_0x7635[182]];var _0x50cbx17=_0x50cbx16[_0x7635[124]];var _0x50cbx18=_0x50cbx16[_0x7635[127]];var _0x50cbx1f=_0x50cbx5[_0x7635[102]]()[_0x7635[227]](_0x50cbx7);var _0x50cbx20=_0x50cbx5[_0x7635[122]](_0x50cbx1f);if(_0x50cbx5[_0x7635[102]]()[_0x7635[121]](_0x50cbx1f)&& _0x50cbx20!= null){_0x50cbx17+= _0x50cbx20[_0x7635[124]];_0x50cbx18+= _0x50cbx20[_0x7635[127]]};_0x50cbx1e[_0x7635[232]](_0x50cbx1e[_0x7635[228]],_0x50cbx5[_0x7635[230]][_0x7635[229]]/ _0x50cbx6- _0x50cbx17,_0x50cbx5[_0x7635[230]][_0x7635[231]]/ _0x50cbx6- _0x50cbx18)}}});this[_0x7635[10]](_0x7635[233],function(){var _0x50cbx21=_0x50cbx3[_0x7635[2]][_0x7635[26]](_0x7635[233]);if(_0x50cbx21[_0x7635[234]]!= null){_0x50cbx21[_0x7635[234]][_0x7635[236]](_0x50cbx21[_0x7635[234]][_0x7635[228]],_0x50cbx21[_0x7635[235]])}});this[_0x7635[10]](_0x7635[237],function(){function _0x50cbx22(_0x50cbxc,_0x50cbx23,_0x50cbx24){var _0x50cbx25=null;var _0x50cbx9=_0x50cbx5[_0x7635[57]]();_0x50cbx5[_0x7635[102]]()[_0x7635[101]]();try{if(_0x50cbx9[_0x7635[103]]== 0){var _0x50cbx26=_0x50cbx5[_0x7635[238]]();_0x50cbx9= [_0x50cbx5[_0x7635[240]](_0x50cbx5[_0x7635[239]](),null,_0x7635[95],_0x50cbx26,_0x50cbx26,_0x50cbx23,_0x50cbx24)];_0x50cbx25= _0x50cbx9};_0x50cbx5[_0x7635[114]](mxConstants.STYLE_IMAGE,_0x50cbxc,_0x50cbx9);_0x50cbx5[_0x7635[114]](mxConstants.STYLE_SHAPE,_0x7635[237],_0x50cbx9);if(_0x50cbx5[_0x7635[241]]()== 1){if(_0x50cbx23!= null&& _0x50cbx24!= null){var _0x50cbx7=_0x50cbx9[0];var _0x50cbxd=_0x50cbx5[_0x7635[102]]()[_0x7635[242]](_0x50cbx7);if(_0x50cbxd!= null){_0x50cbxd= _0x50cbxd[_0x7635[123]]();_0x50cbxd[_0x7635[125]]= _0x50cbx23;_0x50cbxd[_0x7635[126]]= _0x50cbx24;_0x50cbx5[_0x7635[102]]()[_0x7635[128]](_0x50cbx7,_0x50cbxd)}}}}finally{_0x50cbx5[_0x7635[102]]()[_0x7635[107]]()};if(_0x50cbx25!= null){_0x50cbx5[_0x7635[59]](_0x50cbx25);_0x50cbx5[_0x7635[243]](_0x50cbx25[0])}}var _0x50cbxc=_0x7635[95];var _0x50cbxb=_0x50cbx5[_0x7635[110]]()[_0x7635[109]](_0x50cbx5[_0x7635[93]]());if(_0x50cbxb!= null){_0x50cbxc= _0x50cbxb[_0x7635[113]][mxConstants[_0x7635[244]]]|| _0x50cbxc};_0x50cbxc= mxUtils[_0x7635[97]](mxResources[_0x7635[26]](_0x7635[96])+ _0x7635[118]+ mxResources[_0x7635[26]](_0x7635[245])+ _0x7635[218],_0x50cbxc);if(_0x50cbxc!= null){if(_0x50cbxc[_0x7635[103]]> 0){var _0x50cbx27= new Image();_0x50cbx27[_0x7635[246]]= function(){_0x50cbx22(_0x50cbxc,_0x50cbx27[_0x7635[125]],_0x50cbx27[_0x7635[126]])};_0x50cbx27[_0x7635[247]]= function(){mxUtils[_0x7635[249]](mxResources[_0x7635[26]](_0x7635[248]))};_0x50cbx27[_0x7635[250]]= _0x50cbxc}}})};Actions[_0x7635[4]][_0x7635[10]]= function(_0x50cbx1b,_0x50cbx28,_0x50cbx29,_0x50cbx2a,_0x50cbx2b){return this[_0x7635[28]](_0x50cbx1b, new Action(mxResources[_0x7635[26]](_0x50cbx1b),_0x50cbx28,_0x50cbx29,_0x50cbx2a,_0x50cbx2b))};Actions[_0x7635[4]][_0x7635[28]]= function(_0x50cbx2c,_0x50cbx15){this[_0x7635[2]][_0x50cbx2c]= _0x50cbx15;return _0x50cbx15};Actions[_0x7635[4]][_0x7635[26]]= function(_0x50cbx2c){return this[_0x7635[2]][_0x50cbx2c]};function Action(_0x50cbx2e,_0x50cbx28,_0x50cbx29,_0x50cbx2a,_0x50cbx2b){mxEventSource[_0x7635[251]](this);this[_0x7635[252]]= _0x50cbx2e;this[_0x7635[146]]= _0x50cbx28;this[_0x7635[253]]= (_0x50cbx29!= null)?_0x50cbx29:true;this[_0x7635[254]]= _0x50cbx2a;this[_0x7635[255]]= _0x50cbx2b}mxUtils[_0x7635[256]](Action,mxEventSource);Action[_0x7635[4]][_0x7635[177]]= function(_0x50cbxc){if(this[_0x7635[253]]!= _0x50cbxc){this[_0x7635[253]]= _0x50cbxc;this[_0x7635[258]]( new mxEventObject(_0x7635[257]))}};Action[_0x7635[4]][_0x7635[169]]= function(_0x50cbxc){this[_0x7635[259]]= _0x50cbxc};Action[_0x7635[4]][_0x7635[170]]= function(_0x50cbx28){this[_0x7635[260]]= _0x50cbx28};Action[_0x7635[4]][_0x7635[261]]= function(){return this[_0x7635[260]]()} \ No newline at end of file diff --git a/public/assets/plugins/jscripty/js/Dialogs.js b/public/assets/plugins/jscripty/js/Dialogs.js index 791874e..2cd4c52 100644 --- a/public/assets/plugins/jscripty/js/Dialogs.js +++ b/public/assets/plugins/jscripty/js/Dialogs.js @@ -1,1194 +1 @@ -'use strict'; -/** - * $Id: Dialogs.js,v 1.5 2013-01-29 17:23:31 gaudenz Exp $ - * Copyright (c) 2006-2012, JGraph Ltd - */ -/** - * Constructs a new dialog. - */ - -function createCheckbox(value) { - var input = document.createElement('input'); - input.setAttribute('type', 'checkbox'); - if (value) { - input.setAttribute('checked', true); - } - return input; -} - -function createDropdownFromApi(path, value, option_name, option_value, editorUi, - keys, pattern) { - var req = new XMLHttpRequest(); - req.open('GET', path, false); // `false` makes the request synchronous - req.setRequestHeader('Authorization', 'Bearer ' + editorUi.editor.data.token); - req.send(null); - var res = []; - if (req.status === 200) { - res = JSON.parse(req.response); - } - var input = document.createElement('select'); - var option = document.createElement('option'); - option.text = '-- None --'; - option.value = '-1'; - input.appendChild(option); - res.rows.forEach(function(elem) { - option = document.createElement('option'); - option.text = elem[option_name]; - if (keys && pattern) { - keys.forEach(function(key) { - pattern = pattern.replace('%' + key + '%', elem[key]); - }); - option.value = pattern; - option.selected = (pattern == value); - } else { - option.value = elem[option_value]; - option.selected = (elem[option_value] == value); - } - input.appendChild(option); - }); - input.className = 'form-control select2'; - - return input; -} - -function createGroupedDropdownFromApi(path, value, option_name, option_value, editorUi, paginated, associationField) { - var req = new XMLHttpRequest(); - req.open('GET', path, false); // `false` makes the request synchronous - req.setRequestHeader('Authorization', 'Bearer ' + editorUi.editor.data.token); - req.send(null); - var res = []; - if (req.status === 200) { - res = JSON.parse(req.response); - } - var input = document.createElement('select'); - var option = document.createElement('option'); - option.text = '-- None --'; - option.value = '0'; - input.appendChild(option); - var selectValues = paginated ? res.rows : res; - var mainFilter = {}; - var groupFilter = {}; - mainFilter[associationField] = null; - var mainValues = _.filter(selectValues, mainFilter); - var groupValues = {}; - mainValues.forEach(function(elem) { - option = document.createElement('option'); - option.className = 'select-group-father'; - option.text = elem[option_name].toUpperCase(); - option.value = elem[option_value]; - option.selected = (elem[option_value] == value); - input.appendChild(option); - groupFilter[associationField] = elem[option_value]; - groupValues = _.filter(selectValues, groupFilter); - groupValues.forEach(function(elem) { - option = document.createElement('option'); - option.className = 'select-group-son'; - option.text = '-' + _.capitalize(elem[option_name]); - option.value = elem[option_value]; - option.selected = (elem[option_value] == value); - input.appendChild(option); - }); - }) - input.className = 'form-control select2'; - - return input; -} - -function createDropdownFromArray(array, value) { - var input = document.createElement('select'); - - for (var item in array) { - var option = document.createElement('option'); - option.text = array[item]; - option.value = item; - if (value > 0 || value != '') - option.selected = (value === item) ? true : false; - - input.appendChild(option); - } - - input.className = 'form-control select2'; - - return input; -} - -function Dialog(editorUi, elt, w, h, modal, closable, onClose) { - var dx = 0; - - if (mxClient.IS_IE && document.documentMode != 9) { - dx = 60; - } - - w += dx; - h += dx; - - var left = Math.max(0, Math.round((document.body.scrollWidth - w) / 2)); - var top = Math.max(0, Math.round((Math.max(document.body.scrollHeight, - document.documentElement.scrollHeight) - h) / 3)); - - var div = editorUi.createDiv('geDialog'); - div.className = 'modal fade in center'; - div.style.display = 'block'; - div.style.paddingRight = '12px'; - // div.style.width = w + 'px'; - // div.style.height = h + 'px'; - // div.style.left = left + 'px'; - // div.style.top = top + 'px'; - - var divModalDialog = editorUi.createDiv('geModalDialog'); - divModalDialog.className = 'modal-dialog'; - divModalDialog.appendChild(elt); - div.appendChild(divModalDialog); - - if (this.bg == null) { - this.bg = editorUi.createDiv('background'); - this.bg.className = 'modal-backdrop fade in'; - - if (mxClient.IS_QUIRKS) { - new mxDivResizer(this.bg); - } - } - - if (modal) { - document.body.appendChild(this.bg); - } - - document.body.appendChild(div); - - this.onDialogClose = onClose; - this.container = div; -}; - -/** - * Removes the dialog from the DOM. - */ -Dialog.prototype.close = function() { - if (this.onDialogClose != null) { - this.onDialogClose(); - this.onDialogClose = null; - } - - this.container.parentNode.removeChild(this.container); - this.bg.parentNode.removeChild(this.bg); -}; - -/** - * Constructs a new open dialog. - */ -function ImportDialog(editorUi) { - - var content = editorUi.createDiv('modal-content'); - var header = editorUi.createDiv('modal-header'); - var body = editorUi.createDiv('modal-body'); - var footer = editorUi.createDiv('modal-footer'); - - //--- START HEADER - var title = editorUi.createHeader('h4'); - mxUtils.write(title, mxResources.get('import') + ' XML'); - - var x = mxUtils.button('', function() { - editorUi.hideDialog(); - }); - x.className = 'close'; - - header.appendChild(x); - header.appendChild(title); - //--- END HEADER - - //--- START BODY - var row = editorUi.createDiv('row'); - var col1 = editorUi.createDiv('col-md-12'); - - var textarea = document.createElement('textarea'); - textarea.style.width = '100%'; - textarea.style.height = '374px'; - - var input = document.createElement('input'); - input.type = 'file'; - input.setAttribute('accept', 'text/xml'); - - input.addEventListener('change', function readSingleFile(evt) { - //Retrieve the first (and only!) File from the FileList object - var f = evt.target.files[0]; - console.log(f); - if (f) { - if (f.type === 'text/xml') { - var r = new FileReader(); - r.onload = function(e) { - var contents = e.target.result; - mxUtils.write(textarea, contents); - }; - r.readAsText(f); - } else { - alert('Failed to load format file'); - } - } else { - alert('Failed to load file'); - } - }, false); - - col1.appendChild(input); - col1.appendChild(textarea); - - row.appendChild(col1); - body.appendChild(row); - //--- END BODY - - //--- START FOOTER - var save = mxUtils.button(mxResources.get('import'), mxUtils.bind(this, - function(data) { - var doc = mxUtils.parseXml(textarea.value); - editorUi.editor.setGraphXml(doc.documentElement); - editorUi.hideDialog(); - })); - save.className = 'btn blue'; - - var close = mxUtils.button(mxResources.get('cancel'), function() { - editorUi.hideDialog(); - }); - close.className = 'btn default'; - - footer.appendChild(save); - footer.appendChild(close); - //--- END FOOTER - - //--- START CONTENT - content.appendChild(header); - content.appendChild(body); - content.appendChild(footer); - //--- END CONTENT - - this.container = content; - -}; - -/** - * Constructs a new about dialog. - */ -function AboutDialog(editorUi) { - var content = editorUi.createDiv('modal-content'); - var header = editorUi.createDiv('modal-header'); - var body = editorUi.createDiv('modal-body'); - var footer = editorUi.createDiv('modal-footer'); - - //--- START HEADER - var title = editorUi.createHeader('h4'); - mxUtils.write(title, mxResources.get('about') + ' Cally Square'); - - var x = mxUtils.button('', function() { - editorUi.hideDialog(); - }); - x.className = 'close'; - - header.appendChild(x); - header.appendChild(title); - //--- END HEADER - - //--- START BODY - var img = document.createElement('img'); - img.style.border = '0px'; - img.setAttribute('width', '176'); - img.setAttribute('width', '151'); - img.setAttribute('src', IMAGE_PATH + '/logo.png'); - body.appendChild(img); - mxUtils.br(body); - mxUtils.write(body, 'Powered by Xenialab ' + mxClient.VERSION); - mxUtils.br(body); - var link = document.createElement('a'); - link.setAttribute('href', 'http://www.callysquare.com/'); - link.setAttribute('target', '_blank'); - mxUtils.write(link, 'www.callysquare.com'); - body.appendChild(link); - mxUtils.br(body); - mxUtils.br(body); - //--- END BODY - - var close = mxUtils.button(mxResources.get('close'), function() { - editorUi.hideDialog(); - }); - close.className = 'btn default'; - - footer.appendChild(close); - //--- END FOOTER - - //--- START CONTENT - content.appendChild(header); - content.appendChild(body); - content.appendChild(footer); - //--- END CONTENT - - this.container = content; -}; - -/** - * Constructs a new save dialog. - */ -function SaveDialog(editorUi) { - - var content = editorUi.createDiv('modal-content'); - var header = editorUi.createDiv('modal-header'); - var body = editorUi.createDiv('modal-body'); - var footer = editorUi.createDiv('modal-footer'); - - //--- START HEADER - var title = editorUi.createHeader('h4'); - mxUtils.write(title, mxResources.get('saveAs')); - - var x = mxUtils.button('', function() { - editorUi.hideDialog(); - }); - x.className = 'close'; - - header.appendChild(x); - header.appendChild(title); - //--- END HEADER - - //--- START BODY - var name = 'name'; - var id = '_' + name; - var value = editorUi.editor.getOrCreateFilename(); - - var row = editorUi.createDiv('row'); - var col1 = editorUi.createDiv('col-md-4'); - var col2 = editorUi.createDiv('col-md-8'); - - var label = document.createElement('label'); - label.className = 'control-label pull-right'; - mxUtils.write(label, mxResources.get(name)); - col1.appendChild(label); - - var select = document.createElement('input'); - select.setAttribute('value', value + '_copy'); - select.setAttribute('id', id) - select.className = 'form-control'; - col2.appendChild(select); - - row.appendChild(col1); - row.appendChild(col2); - body.appendChild(row); - //--- END BODY - - //--- START FOOTER - var save = mxUtils.button(mxResources.get('save'), function() { - editorUi.saveAs(select.value); - editorUi.hideDialog(); - }); - save.className = 'btn blue'; - - var close = mxUtils.button(mxResources.get('cancel'), function() { - editorUi.hideDialog(); - }); - close.className = 'btn default'; - - footer.appendChild(save); - footer.appendChild(close); - //--- END FOOTER - - //--- START CONTENT - content.appendChild(header); - content.appendChild(body); - content.appendChild(footer); - //--- END CONTENT - - this.container = content; - //nameInput.setAttribute('value', editorUi.editor.getOrCreateFilename()); -}; - -/** - * Constructs a new save dialog. - */ -function NewDialog(editorUi) { - - var content = editorUi.createDiv('modal-content'); - var header = editorUi.createDiv('modal-header'); - var body = editorUi.createDiv('modal-body'); - var footer = editorUi.createDiv('modal-footer'); - - //--- START HEADER - var title = editorUi.createHeader('h4'); - mxUtils.write(title, mxResources.get('new')); - - var x = mxUtils.button('', function() { - editorUi.hideDialog(); - }); - x.className = 'close'; - - header.appendChild(x); - header.appendChild(title); - //--- END HEADER - - //--- START BODY - var name = 'name'; - var id = '_' + name; - var value = editorUi.editor.getOrCreateFilename(); - - var row = editorUi.createDiv('row'); - var col1 = editorUi.createDiv('col-md-4'); - var col2 = editorUi.createDiv('col-md-8'); - - var label = document.createElement('label'); - label.className = 'control-label pull-right'; - mxUtils.write(label, mxResources.get(name)); - col1.appendChild(label); - - var select = document.createElement('input'); - select.setAttribute('value', value + '_new'); - select.setAttribute('id', id) - select.className = 'form-control'; - col2.appendChild(select); - - row.appendChild(col1); - row.appendChild(col2); - body.appendChild(row); - //--- END BODY - - //--- START FOOTER - var save = mxUtils.button(mxResources.get('new'), function() { - editorUi.new(select.value); - editorUi.hideDialog(); - }); - save.className = 'btn blue'; - - var close = mxUtils.button(mxResources.get('cancel'), function() { - editorUi.hideDialog(); - }); - close.className = 'btn default'; - - footer.appendChild(save); - footer.appendChild(close); - //--- END FOOTER - - //--- START CONTENT - content.appendChild(header); - content.appendChild(body); - content.appendChild(footer); - //--- END CONTENT - - this.container = content; - //nameInput.setAttribute('value', editorUi.editor.getOrCreateFilename()); -}; - -/** - * Constructs a new save dialog. - */ -function VariableDialog(editorUi) { - - var content = editorUi.createDiv('modal-content'); - var header = editorUi.createDiv('modal-header'); - var body = editorUi.createDiv('modal-body'); - var footer = editorUi.createDiv('modal-footer'); - - //--- START HEADER - var title = editorUi.createHeader('h4'); - mxUtils.write(title, mxResources.get('variable')); - - var x = mxUtils.button('', function() { - editorUi.hideDialog(); - }); - x.className = 'close'; - - header.appendChild(x); - header.appendChild(title); - //--- END HEADER - - //--- START BODY - var name = 'name'; - var id = '_' + name; - var value = editorUi.editor.getOrCreateFilename(); - - var row = editorUi.createDiv('row'); - var col1 = editorUi.createDiv('col-md-4'); - var col2 = editorUi.createDiv('col-md-8'); - - var label = document.createElement('label'); - label.className = 'control-label pull-right'; - mxUtils.write(label, mxResources.get(name)); - col1.appendChild(label); - - var select = document.createElement('input'); - select.setAttribute('value', 'variable name'); - select.setAttribute('id', id) - select.className = 'form-control'; - col2.appendChild(select); - - row.appendChild(col1); - row.appendChild(col2); - body.appendChild(row); - //--- END BODY - - //--- START FOOTER - var save = mxUtils.button(mxResources.get('new'), function() { - editorUi.variable(select.value); - editorUi.hideDialog(); - }); - save.className = 'btn blue'; - - var close = mxUtils.button(mxResources.get('cancel'), function() { - editorUi.hideDialog(); - }); - close.className = 'btn default'; - - footer.appendChild(save); - footer.appendChild(close); - //--- END FOOTER - - //--- START CONTENT - content.appendChild(header); - content.appendChild(body); - content.appendChild(footer); - //--- END CONTENT - - this.container = content; - //nameInput.setAttribute('value', editorUi.editor.getOrCreateFilename()); -}; - -/** - * Constructs a new save dialog. - */ -function OpenDialog(editorUi) { - - var content = editorUi.createDiv('modal-content'); - var header = editorUi.createDiv('modal-header'); - var body = editorUi.createDiv('modal-body'); - var footer = editorUi.createDiv('modal-footer'); - - //--- START HEADER - var title = editorUi.createHeader('h4'); - mxUtils.write(title, mxResources.get('open')); - - var x = mxUtils.button('', function() { - editorUi.hideDialog(); - }); - x.className = 'close'; - - header.appendChild(x); - header.appendChild(title); - //--- END HEADER - - //--- START BODY - var row = editorUi.createDiv('row'); - var col1 = editorUi.createDiv('col-md-4'); - var col2 = editorUi.createDiv('col-md-8'); - - var label = document.createElement('label'); - label.className = 'control-label pull-right'; - mxUtils.write(label, mxResources.get('name')); - col1.appendChild(label); - - var req = new XMLHttpRequest(); - req.open('GET', '/api/jscripty/projects', false); // `false` makes the request synchronous - req.setRequestHeader('Authorization', 'Bearer ' + editorUi.editor.data.token); - req.send(null); - var res = []; - if (req.status === 200) { - res = JSON.parse(req.response).rows; - } - - var select = document.createElement('select'); - - for (var j = 0; j < res.length; j++) { - var option = document.createElement('option'); - option.text = res[j].name; - option.value = res[j].id; - select.appendChild(option); - } - select.className = 'form-control'; - col2.appendChild(select); - - row.appendChild(col1); - row.appendChild(col2); - body.appendChild(row); - //--- END BODY - - //--- START FOOTER - var save = mxUtils.button(mxResources.get('open'), function() { - console.log(select); - console.log(select.value); - window.open('jscripty/projects/view/' + select.value, '_blank'); - editorUi.hideDialog(); - }); - save.className = 'btn blue'; - - var close = mxUtils.button(mxResources.get('cancel'), function() { - editorUi.hideDialog(); - }); - close.className = 'btn default'; - - footer.appendChild(save); - footer.appendChild(close); - //--- END FOOTER - - //--- START CONTENT - content.appendChild(header); - content.appendChild(body); - content.appendChild(footer); - //--- END CONTENT - - this.container = content; - //nameInput.setAttribute('value', editorUi.editor.getOrCreateFilename()); -}; - -/** - * Constructs a new rename dialog. - */ -function RenameDialog(editorUi) { - - var content = editorUi.createDiv('modal-content'); - var header = editorUi.createDiv('modal-header'); - var body = editorUi.createDiv('modal-body'); - var footer = editorUi.createDiv('modal-footer'); - - //--- START HEADER - var title = editorUi.createHeader('h4'); - mxUtils.write(title, mxResources.get('rename')); - - var x = mxUtils.button('', function() { - editorUi.hideDialog(); - }); - x.className = 'close'; - - header.appendChild(x); - header.appendChild(title); - //--- END HEADER - - //--- START BODY - var row = editorUi.createDiv('row'); - var col1 = editorUi.createDiv('col-md-4'); - var col2 = editorUi.createDiv('col-md-8'); - - var label = document.createElement('label'); - label.className = 'control-label pull-right'; - mxUtils.write(label, mxResources.get('name')); - col1.appendChild(label); - var name = editorUi.editor.filename; - var input = document.createElement('input'); - input.setAttribute('value', name); - input.className = 'form-control'; - - col2.appendChild(input); - - row.appendChild(col1); - row.appendChild(col2); - body.appendChild(row); - //--- END BODY - - //--- START FOOTER - var save = mxUtils.button(mxResources.get('save'), function() { - var req = new XMLHttpRequest(); - - req.open("PUT", SAVE_URL + editorUi.editor.data.id, true); - req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); - req.setRequestHeader('Authorization', 'Bearer ' + editorUi.editor.data.token); - req.send('name=' + input.value); - - req.onload = function(e) { - if (req.status === 200) { - editorUi.editor.setStatus('Project successfully renamed'); - editorUi.editor.filename = input.value; - - } else { - editorUi.editor.setStatus(JSON.parse(req.response).errors[0].message) - } - } - req.onerror = function(e) { - mxUtils.alert(req.statusText); - }; - editorUi.hideDialog(); - }); - save.className = 'btn blue'; - - var close = mxUtils.button(mxResources.get('cancel'), function() { - editorUi.hideDialog(); - }); - close.className = 'btn default'; - - footer.appendChild(save); - footer.appendChild(close); - //--- END FOOTER - - //--- START CONTENT - content.appendChild(header); - content.appendChild(body); - content.appendChild(footer); - //--- END CONTENT - - this.container = content; - //nameInput.setAttribute('value', editorUi.editor.getOrCreateFilename()); -}; -/** - * Constructs a new edit file dialog. - */ -function EditFileDialog(editorUi) { - - var content = editorUi.createDiv('modal-content'); - var header = editorUi.createDiv('modal-header'); - var body = editorUi.createDiv('modal-body'); - var footer = editorUi.createDiv('modal-footer'); - - //--- START HEADER - var title = editorUi.createHeader('h4'); - mxUtils.write(title, mxResources.get('edit')); - - var x = mxUtils.button('', function() { - editorUi.hideDialog(); - }); - x.className = 'close'; - - header.appendChild(x); - header.appendChild(title); - //--- END HEADER - - //--- START BODY - var row = editorUi.createDiv('row'); - var col1 = editorUi.createDiv('col-md-12'); - - var textarea = document.createElement('textarea'); - textarea.style.width = '100%'; - textarea.style.height = '374px'; - textarea.value = mxUtils.getPrettyXml(editorUi.editor.getGraphXml()); - - // Enables dropping files - if (fileSupport) { - function handleDrop(evt) { - evt.stopPropagation(); - evt.preventDefault(); - - if (evt.dataTransfer.files.length > 0) { - var file = evt.dataTransfer.files[0]; - - var reader = new FileReader(); - reader.onload = function(e) { - textarea.value = e.target.result; - }; - reader.readAsText(file); - } - }; - - function handleDragOver(evt) { - evt.stopPropagation(); - evt.preventDefault(); - }; - - // Setup the dnd listeners. - textarea.addEventListener('dragover', handleDragOver, false); - textarea.addEventListener('drop', handleDrop, false); - } - col1.appendChild(textarea); - - row.appendChild(col1); - body.appendChild(row); - //--- END BODY - - //--- START FOOTER - var save = mxUtils.button(mxResources.get('save'), function() { - var doc = mxUtils.parseXml(textarea.value); - editorUi.editor.setGraphXml(doc.documentElement); - editorUi.hideDialog(); - }); - save.className = 'btn blue'; - - var close = mxUtils.button(mxResources.get('cancel'), function() { - editorUi.hideDialog(); - }); - close.className = 'btn default'; - - footer.appendChild(save); - footer.appendChild(close); - //--- END FOOTER - - //--- START CONTENT - content.appendChild(header); - content.appendChild(body); - content.appendChild(footer); - //--- END CONTENT - - this.container = content; -}; - -/** - * Constructs a new export dialog. - */ -function ExportDialog(editorUi) { - var content = editorUi.createDiv('modal-content'); - var header = editorUi.createDiv('modal-header'); - var body = editorUi.createDiv('modal-body form'); - var footer = editorUi.createDiv('modal-footer'); - - //--- START HEADER - var title = editorUi.createHeader('h4'); - mxUtils.write(title, mxResources.get('export') + ' XML'); - - var x = mxUtils.button('', function() { - editorUi.hideDialog(); - }); - x.className = 'close'; - - header.appendChild(x); - header.appendChild(title); - //--- END HEADER - - //--- START BODY - var form = editorUi.createDiv('form-horizontal form-row-seperated'); - var group = editorUi.createDiv('form-group last'); - - var label = document.createElement('label'); - label.className = 'col-sm-4 control-label'; - mxUtils.write(label, mxResources.get('filename')); - - var input = document.createElement('input'); - input.setAttribute('value', editorUi.editor.getOrCreateFilename()); - input.className = 'form-control'; - - var div = editorUi.createDiv('col-sm-8'); - div.appendChild(input); - - group.appendChild(label); - group.appendChild(div); - form.appendChild(group); - - body.appendChild(form); - //--- END BODY - - //--- START FOOTER - var save = mxUtils.button(mxResources.get('export'), mxUtils.bind(this, - function(data) { - editorUi.save(false); - - var xml = encodeURIComponent(mxUtils.getXml(editorUi.editor.getGraphXml())); - new mxXmlRequest(SAVE_URL + editorUi.editor.data.id + '/download', - 'filename=' + input.value, 'GET').simulate(document, "_blank"); - editorUi.hideDialog(); - })); - save.className = 'btn blue'; - - var close = mxUtils.button(mxResources.get('cancel'), function() { - editorUi.hideDialog(); - }); - close.className = 'btn default'; - - footer.appendChild(save); - footer.appendChild(close); - //--- END FOOTER - - //--- START CONTENT - content.appendChild(header); - content.appendChild(body); - content.appendChild(footer); - //--- END CONTENT - - this.container = content; -}; - -/** - * Giuseppe Careri - * Constructs a new general dialog. - */ - -function GeneralDialog(editorUi, cell) { - var graph = editorUi.editor.graph; - - var content = editorUi.createDiv('modal-content'); - var header = editorUi.createDiv('modal-header'); - var body = editorUi.createDiv('modal-body form modal-body-scroll'); - var footer = editorUi.createDiv('modal-footer'); - //--- START HEADER - var title = editorUi.createHeader('h4'); - mxUtils.write(title, mxResources.get('edit') + ' ' + mxResources.get(cell.value - .nodeName)); - - var x = mxUtils.button('', function() { - editorUi.hideDialog(); - }); - x.className = 'close'; - - header.appendChild(x); - header.appendChild(title); - //--- END HEADER - - //--- START BODY - var inputGroup = editorUi.createDiv('form-horizontal form-row-seperated'); - inputGroup.setAttribute('id', 'inputGroup'); - var length = cell.value.attributes.length; - var form = editorUi.createDiv('form-horizontal form-row-seperated'); - - for (var i = 0; i < length; i++) { - var name = cell.value.attributes[i].name; - var id = '_' + name; - var value = cell.value.attributes[i].value; - console.log(name); - var group = editorUi.createDiv((i == length - 1) ? 'form-group last' : - 'form-group'); - - var label = document.createElement('label'); - label.className = 'col-sm-4 control-label'; - mxUtils.write(label, mxResources.get(name)); - group.appendChild(label); - - var input; - - switch (name) { - case 'id': - input = document.createElement('input'); - value = cell.id; - input.setAttribute('value', value); - input.setAttribute('disabled', true) - input.className = 'form-control'; - break; - case 'state': - input = document.createElement('input'); - input.setAttribute('type', 'button') - input.onclick = function() { - if (this.value == 'ON') { - this.setAttribute('value', 'OFF'); - this.className = 'btn btn-danger btn-md'; - } else { - this.className = 'btn btn-success btn-md'; - this.setAttribute('value', 'ON'); - } - - }; - input.setAttribute('value', value); - input.className = (value == 'ON' ? 'btn btn-success btn-md' : 'btn btn-danger btn-md'); - - break; - case 'text': - input = document.createElement('textarea'); - input.innerHTML = value; - input.className = 'form-control'; - break; - case 'Body': - input = document.createElement('textarea'); - input.innerHTML = value; - input.className = 'form-control'; - break; - case 'question': - input = document.createElement('textarea'); - input.innerHTML = value; - input.className = 'form-control'; - - break; - case 'other': - input = document.createElement('input'); - input.setAttribute('value', value); - input.setAttribute('placeholder', 'Insert label for "Other" answer option'); - input.className = 'form-control'; - break; - // case 'addtext': - // var input = document.createElement('input'); - // input.setAttribute('type', 'checkbox'); - // console.log('value', value); - // if (value == 'true') { - // input.setAttribute('checked', true); - // - // } else { - // input.removeAttribute("checked"); - // - // } - // // input.value = input.checked; - // - // input.onclick = function() { - // this.value = this.checked; - // - // console.log(input); - // if (this.checked) { - // console.log(this.checked); - // var rowdiv = editorUi.createDiv('form-group'); - // rowdiv.setAttribute('id', 'rowdiv'); - // var col1 = editorUi.createDiv('col-md-4'); - // var col2 = editorUi.createDiv('col-md-8'); - // var label = document.createElement('label'); - // // input.setAttribute('placeholder', 'Insert label'); - // label.className = 'pull-right control-label'; - // mxUtils.write(label, 'Texarea Label'); - // col1.appendChild(label); - // var input = document.createElement('input'); - // // input.setAttribute('placeholder', 'Insert label'); - // // input.value = inputValue; - // input.className = 'form-control'; - // col2.appendChild(input); - // rowdiv.appendChild(col1); - // rowdiv.appendChild(col2); - // inputGroup.appendChild(rowdiv); - // body.appendChild(inputGroup); - // } else { - // console.log(this.checked); - // document.getElementById('inputGroup').removeChild(document.getElementById('rowdiv')); - // } - // }; - // - // - // input.className = 'btn green'; - // break; - case 'account_id': - input = createDropdownFromApi('/api/sms/accounts', value, 'name', 'id', - editorUi); - break; - case 'sms_text': - input = document.createElement('textarea'); - input.innerHTML = value; - input.className = 'form-control'; - input.setAttribute('maxlength', "160"); - - break; - case 'add': - var input = mxUtils.button('+', function() { - var rowdiv = createDynamicInput(null, null, editorUi); - inputGroup.appendChild(rowdiv); - body.appendChild(inputGroup); - }) - - input.className = 'btn green'; - break; - default: - input = document.createElement('input'); - input.setAttribute('value', value); - input.className = 'form-control'; - break; - } - - input.setAttribute('id', id) - var div = editorUi.createDiv('col-sm-8'); - div.appendChild(input); - // Help - if (mxResources.get('help_' + name)) { - var help = editorUi.createDiv('p'); - help.className = 'help-block'; - mxUtils.write(help, mxResources.get('help_' + name)); - div.appendChild(help); - } - - group.appendChild(div); - form.appendChild(group); - } - body.appendChild(form); - // console.log(cell); - if (cell.value.nodeName == 'input') { - - if (cell.children) { - for (var j = 0; j < cell.children.length; j++) { - var selectValue = ''; - var inputValue = ''; - _.forEach(cell.children[j].value.attributes, function(element) { - // console.log(element); - if (element.name == 'type') { - selectValue = element.value; - - } else if (element.name == 'label') { - inputValue = element.value; - - } - }) - var rowdiv = createDynamicInput(selectValue, inputValue, editorUi); - inputGroup.appendChild(rowdiv); - - } - } - - } - body.appendChild(inputGroup); - - //--- END BODY - - //--- START FOOTER - var save = mxUtils.button(mxResources.get('save'), mxUtils.bind(this, - function(data) { - for (var i = 0; i < cell.value.attributes.length; i++) { - var id = '_' + cell.value.attributes[i].name; - var name = cell.value.attributes[i].name; - console.log(name); - - cell.setAttribute(name, document.getElementById(id).value); - console.log(document.getElementById(id).value); - - - }; - - if (cell.value.nodeName == 'input') { - if (graph.model.getChildCount(cell)) { - cell.children = []; - } - if (document.getElementById('inputGroup')) { - var inputGroup = document.getElementById('inputGroup').children; - for (var j = 0; j < inputGroup.length; j++) { - - var divSelect = inputGroup[j].children[1]; - var divInput = inputGroup[j].children[0]; - var doc = mxUtils.createXmlDocument(); - var node = doc.createElement('inputGroup'); - node.setAttribute('type', inputGroup[j].getElementsByTagName('select')[0].value); - node.setAttribute('label', inputGroup[j].getElementsByTagName('input')[0].value); - var cells = new mxCell(node); - graph.model.add(cell, cells); - } - } - } - - graph.refresh(cell); - editorUi.hideDialog(); - })); - save.className = 'btn blue'; - - var close = mxUtils.button(mxResources.get('cancel'), function() { - editorUi.hideDialog(); - }); - close.className = 'btn default'; - - footer.appendChild(save); - footer.appendChild(close); - //--- END FOOTER - - //--- START CONTENT - content.appendChild(header); - content.appendChild(body); - content.appendChild(footer); - //--- END CONTENT - - this.container = content; -}; - - - -function createDynamicInput(selectValue, inputValue, editorUi) { - - var rowdiv = editorUi.createDiv('form-group'); - var col1 = editorUi.createDiv('col-md-5'); - var col2 = editorUi.createDiv('col-md-5'); - var col3 = editorUi.createDiv('col-md-2'); - - var input = document.createElement('input'); - input.setAttribute('placeholder', 'Insert label'); - input.value = inputValue; - input.className = 'form-control'; - col1.appendChild(input); - - var select = document.createElement('select'); - var option = document.createElement('option'); - option.text = '-- None --'; - option.value = ''; - select.appendChild(option); - - var selectValues = ['text', 'number', 'textarea', 'checkbox']; - selectValues.forEach(function(elem) { - option = document.createElement('option'); - option.text = elem; - option.value = elem; - option.selected = (elem == selectValue); - select.appendChild(option); - }) - select.className = 'form-control'; - col2.appendChild(select); - var button = mxUtils.button('x', function() { - var buttonParent = button.parentElement; - var divParent = buttonParent.parentElement; - document.getElementById('inputGroup').removeChild(divParent); - }) - - button.className = 'btn red'; - col3.appendChild(button); - rowdiv.appendChild(col1); - rowdiv.appendChild(col2); - rowdiv.appendChild(col3); - return rowdiv; - - -} +var _0xa97b=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x69\x6E\x70\x75\x74","\x63\x72\x65\x61\x74\x65\x45\x6C\x65\x6D\x65\x6E\x74","\x74\x79\x70\x65","\x63\x68\x65\x63\x6B\x62\x6F\x78","\x73\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x63\x68\x65\x63\x6B\x65\x64","\x47\x45\x54","\x6F\x70\x65\x6E","\x41\x75\x74\x68\x6F\x72\x69\x7A\x61\x74\x69\x6F\x6E","\x42\x65\x61\x72\x65\x72\x20","\x74\x6F\x6B\x65\x6E","\x64\x61\x74\x61","\x65\x64\x69\x74\x6F\x72","\x73\x65\x74\x52\x65\x71\x75\x65\x73\x74\x48\x65\x61\x64\x65\x72","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x72\x65\x73\x70\x6F\x6E\x73\x65","\x70\x61\x72\x73\x65","\x73\x65\x6C\x65\x63\x74","\x6F\x70\x74\x69\x6F\x6E","\x74\x65\x78\x74","\x2D\x2D\x20\x4E\x6F\x6E\x65\x20\x2D\x2D","\x76\x61\x6C\x75\x65","\x2D\x31","\x61\x70\x70\x65\x6E\x64\x43\x68\x69\x6C\x64","\x25","\x72\x65\x70\x6C\x61\x63\x65","\x66\x6F\x72\x45\x61\x63\x68","\x73\x65\x6C\x65\x63\x74\x65\x64","\x72\x6F\x77\x73","\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65","\x66\x6F\x72\x6D\x2D\x63\x6F\x6E\x74\x72\x6F\x6C\x20\x73\x65\x6C\x65\x63\x74\x32","\x30","\x66\x69\x6C\x74\x65\x72","\x73\x65\x6C\x65\x63\x74\x2D\x67\x72\x6F\x75\x70\x2D\x66\x61\x74\x68\x65\x72","\x74\x6F\x55\x70\x70\x65\x72\x43\x61\x73\x65","\x73\x65\x6C\x65\x63\x74\x2D\x67\x72\x6F\x75\x70\x2D\x73\x6F\x6E","\x2D","\x63\x61\x70\x69\x74\x61\x6C\x69\x7A\x65","","\x49\x53\x5F\x49\x45","\x64\x6F\x63\x75\x6D\x65\x6E\x74\x4D\x6F\x64\x65","\x73\x63\x72\x6F\x6C\x6C\x57\x69\x64\x74\x68","\x62\x6F\x64\x79","\x72\x6F\x75\x6E\x64","\x6D\x61\x78","\x73\x63\x72\x6F\x6C\x6C\x48\x65\x69\x67\x68\x74","\x64\x6F\x63\x75\x6D\x65\x6E\x74\x45\x6C\x65\x6D\x65\x6E\x74","\x67\x65\x44\x69\x61\x6C\x6F\x67","\x63\x72\x65\x61\x74\x65\x44\x69\x76","\x6D\x6F\x64\x61\x6C\x20\x66\x61\x64\x65\x20\x69\x6E\x20\x63\x65\x6E\x74\x65\x72","\x64\x69\x73\x70\x6C\x61\x79","\x73\x74\x79\x6C\x65","\x62\x6C\x6F\x63\x6B","\x70\x61\x64\x64\x69\x6E\x67\x52\x69\x67\x68\x74","\x31\x32\x70\x78","\x67\x65\x4D\x6F\x64\x61\x6C\x44\x69\x61\x6C\x6F\x67","\x6D\x6F\x64\x61\x6C\x2D\x64\x69\x61\x6C\x6F\x67","\x62\x67","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64","\x6D\x6F\x64\x61\x6C\x2D\x62\x61\x63\x6B\x64\x72\x6F\x70\x20\x66\x61\x64\x65\x20\x69\x6E","\x49\x53\x5F\x51\x55\x49\x52\x4B\x53","\x6F\x6E\x44\x69\x61\x6C\x6F\x67\x43\x6C\x6F\x73\x65","\x63\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x63\x6C\x6F\x73\x65","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x72\x65\x6D\x6F\x76\x65\x43\x68\x69\x6C\x64","\x70\x61\x72\x65\x6E\x74\x4E\x6F\x64\x65","\x6D\x6F\x64\x61\x6C\x2D\x63\x6F\x6E\x74\x65\x6E\x74","\x6D\x6F\x64\x61\x6C\x2D\x68\x65\x61\x64\x65\x72","\x6D\x6F\x64\x61\x6C\x2D\x62\x6F\x64\x79","\x6D\x6F\x64\x61\x6C\x2D\x66\x6F\x6F\x74\x65\x72","\x68\x34","\x63\x72\x65\x61\x74\x65\x48\x65\x61\x64\x65\x72","\x69\x6D\x70\x6F\x72\x74","\x67\x65\x74","\x20\x58\x4D\x4C","\x77\x72\x69\x74\x65","\x68\x69\x64\x65\x44\x69\x61\x6C\x6F\x67","\x62\x75\x74\x74\x6F\x6E","\x72\x6F\x77","\x63\x6F\x6C\x2D\x6D\x64\x2D\x31\x32","\x74\x65\x78\x74\x61\x72\x65\x61","\x77\x69\x64\x74\x68","\x31\x30\x30\x25","\x68\x65\x69\x67\x68\x74","\x33\x37\x34\x70\x78","\x66\x69\x6C\x65","\x61\x63\x63\x65\x70\x74","\x74\x65\x78\x74\x2F\x78\x6D\x6C","\x63\x68\x61\x6E\x67\x65","\x66\x69\x6C\x65\x73","\x74\x61\x72\x67\x65\x74","\x6C\x6F\x67","\x6F\x6E\x6C\x6F\x61\x64","\x72\x65\x73\x75\x6C\x74","\x72\x65\x61\x64\x41\x73\x54\x65\x78\x74","\x46\x61\x69\x6C\x65\x64\x20\x74\x6F\x20\x6C\x6F\x61\x64\x20\x66\x6F\x72\x6D\x61\x74\x20\x66\x69\x6C\x65","\x46\x61\x69\x6C\x65\x64\x20\x74\x6F\x20\x6C\x6F\x61\x64\x20\x66\x69\x6C\x65","\x61\x64\x64\x45\x76\x65\x6E\x74\x4C\x69\x73\x74\x65\x6E\x65\x72","\x70\x61\x72\x73\x65\x58\x6D\x6C","\x73\x65\x74\x47\x72\x61\x70\x68\x58\x6D\x6C","\x62\x69\x6E\x64","\x62\x74\x6E\x20\x62\x6C\x75\x65","\x63\x61\x6E\x63\x65\x6C","\x62\x74\x6E\x20\x64\x65\x66\x61\x75\x6C\x74","\x61\x62\x6F\x75\x74","\x20\x43\x61\x6C\x6C\x79\x20\x53\x71\x75\x61\x72\x65","\x69\x6D\x67","\x62\x6F\x72\x64\x65\x72","\x30\x70\x78","\x31\x37\x36","\x31\x35\x31","\x73\x72\x63","\x2F\x6C\x6F\x67\x6F\x2E\x70\x6E\x67","\x62\x72","\x50\x6F\x77\x65\x72\x65\x64\x20\x62\x79\x20\x58\x65\x6E\x69\x61\x6C\x61\x62\x20","\x56\x45\x52\x53\x49\x4F\x4E","\x61","\x68\x72\x65\x66","\x68\x74\x74\x70\x3A\x2F\x2F\x77\x77\x77\x2E\x63\x61\x6C\x6C\x79\x73\x71\x75\x61\x72\x65\x2E\x63\x6F\x6D\x2F","\x5F\x62\x6C\x61\x6E\x6B","\x77\x77\x77\x2E\x63\x61\x6C\x6C\x79\x73\x71\x75\x61\x72\x65\x2E\x63\x6F\x6D","\x73\x61\x76\x65\x41\x73","\x6E\x61\x6D\x65","\x5F","\x67\x65\x74\x4F\x72\x43\x72\x65\x61\x74\x65\x46\x69\x6C\x65\x6E\x61\x6D\x65","\x63\x6F\x6C\x2D\x6D\x64\x2D\x34","\x63\x6F\x6C\x2D\x6D\x64\x2D\x38","\x6C\x61\x62\x65\x6C","\x63\x6F\x6E\x74\x72\x6F\x6C\x2D\x6C\x61\x62\x65\x6C\x20\x70\x75\x6C\x6C\x2D\x72\x69\x67\x68\x74","\x5F\x63\x6F\x70\x79","\x69\x64","\x66\x6F\x72\x6D\x2D\x63\x6F\x6E\x74\x72\x6F\x6C","\x73\x61\x76\x65","\x6E\x65\x77","\x5F\x6E\x65\x77","\x76\x61\x72\x69\x61\x62\x6C\x65","\x76\x61\x72\x69\x61\x62\x6C\x65\x20\x6E\x61\x6D\x65","\x2F\x61\x70\x69\x2F\x6A\x73\x63\x72\x69\x70\x74\x79\x2F\x70\x72\x6F\x6A\x65\x63\x74\x73","\x6C\x65\x6E\x67\x74\x68","\x6A\x73\x63\x72\x69\x70\x74\x79\x2F\x70\x72\x6F\x6A\x65\x63\x74\x73\x2F\x76\x69\x65\x77\x2F","\x72\x65\x6E\x61\x6D\x65","\x66\x69\x6C\x65\x6E\x61\x6D\x65","\x50\x55\x54","\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65","\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x2F\x78\x2D\x77\x77\x77\x2D\x66\x6F\x72\x6D\x2D\x75\x72\x6C\x65\x6E\x63\x6F\x64\x65\x64","\x6E\x61\x6D\x65\x3D","\x50\x72\x6F\x6A\x65\x63\x74\x20\x73\x75\x63\x63\x65\x73\x73\x66\x75\x6C\x6C\x79\x20\x72\x65\x6E\x61\x6D\x65\x64","\x73\x65\x74\x53\x74\x61\x74\x75\x73","\x6D\x65\x73\x73\x61\x67\x65","\x65\x72\x72\x6F\x72\x73","\x6F\x6E\x65\x72\x72\x6F\x72","\x73\x74\x61\x74\x75\x73\x54\x65\x78\x74","\x61\x6C\x65\x72\x74","\x65\x64\x69\x74","\x67\x65\x74\x47\x72\x61\x70\x68\x58\x6D\x6C","\x67\x65\x74\x50\x72\x65\x74\x74\x79\x58\x6D\x6C","\x73\x74\x6F\x70\x50\x72\x6F\x70\x61\x67\x61\x74\x69\x6F\x6E","\x70\x72\x65\x76\x65\x6E\x74\x44\x65\x66\x61\x75\x6C\x74","\x64\x61\x74\x61\x54\x72\x61\x6E\x73\x66\x65\x72","\x64\x72\x61\x67\x6F\x76\x65\x72","\x64\x72\x6F\x70","\x6D\x6F\x64\x61\x6C\x2D\x62\x6F\x64\x79\x20\x66\x6F\x72\x6D","\x65\x78\x70\x6F\x72\x74","\x66\x6F\x72\x6D\x2D\x68\x6F\x72\x69\x7A\x6F\x6E\x74\x61\x6C\x20\x66\x6F\x72\x6D\x2D\x72\x6F\x77\x2D\x73\x65\x70\x65\x72\x61\x74\x65\x64","\x66\x6F\x72\x6D\x2D\x67\x72\x6F\x75\x70\x20\x6C\x61\x73\x74","\x63\x6F\x6C\x2D\x73\x6D\x2D\x34\x20\x63\x6F\x6E\x74\x72\x6F\x6C\x2D\x6C\x61\x62\x65\x6C","\x63\x6F\x6C\x2D\x73\x6D\x2D\x38","\x67\x65\x74\x58\x6D\x6C","\x73\x69\x6D\x75\x6C\x61\x74\x65","\x2F\x64\x6F\x77\x6E\x6C\x6F\x61\x64","\x66\x69\x6C\x65\x6E\x61\x6D\x65\x3D","\x67\x72\x61\x70\x68","\x6D\x6F\x64\x61\x6C\x2D\x62\x6F\x64\x79\x20\x66\x6F\x72\x6D\x20\x6D\x6F\x64\x61\x6C\x2D\x62\x6F\x64\x79\x2D\x73\x63\x72\x6F\x6C\x6C","\x20","\x6E\x6F\x64\x65\x4E\x61\x6D\x65","\x69\x6E\x70\x75\x74\x47\x72\x6F\x75\x70","\x61\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x66\x6F\x72\x6D\x2D\x67\x72\x6F\x75\x70","\x64\x69\x73\x61\x62\x6C\x65\x64","\x6F\x6E\x63\x6C\x69\x63\x6B","\x4F\x4E","\x4F\x46\x46","\x62\x74\x6E\x20\x62\x74\x6E\x2D\x64\x61\x6E\x67\x65\x72\x20\x62\x74\x6E\x2D\x6D\x64","\x62\x74\x6E\x20\x62\x74\x6E\x2D\x73\x75\x63\x63\x65\x73\x73\x20\x62\x74\x6E\x2D\x6D\x64","\x73\x74\x61\x74\x65","\x69\x6E\x6E\x65\x72\x48\x54\x4D\x4C","\x42\x6F\x64\x79","\x71\x75\x65\x73\x74\x69\x6F\x6E","\x70\x6C\x61\x63\x65\x68\x6F\x6C\x64\x65\x72","\x49\x6E\x73\x65\x72\x74\x20\x6C\x61\x62\x65\x6C\x20\x66\x6F\x72\x20\x22\x4F\x74\x68\x65\x72\x22\x20\x61\x6E\x73\x77\x65\x72\x20\x6F\x70\x74\x69\x6F\x6E","\x6F\x74\x68\x65\x72","\x2F\x61\x70\x69\x2F\x73\x6D\x73\x2F\x61\x63\x63\x6F\x75\x6E\x74\x73","\x61\x63\x63\x6F\x75\x6E\x74\x5F\x69\x64","\x6D\x61\x78\x6C\x65\x6E\x67\x74\x68","\x31\x36\x30","\x73\x6D\x73\x5F\x74\x65\x78\x74","\x2B","\x62\x74\x6E\x20\x67\x72\x65\x65\x6E","\x61\x64\x64","\x68\x65\x6C\x70\x5F","\x70","\x68\x65\x6C\x70\x2D\x62\x6C\x6F\x63\x6B","\x63\x68\x69\x6C\x64\x72\x65\x6E","\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74\x42\x79\x49\x64","\x67\x65\x74\x43\x68\x69\x6C\x64\x43\x6F\x75\x6E\x74","\x6D\x6F\x64\x65\x6C","\x63\x72\x65\x61\x74\x65\x58\x6D\x6C\x44\x6F\x63\x75\x6D\x65\x6E\x74","\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74\x73\x42\x79\x54\x61\x67\x4E\x61\x6D\x65","\x72\x65\x66\x72\x65\x73\x68","\x63\x6F\x6C\x2D\x6D\x64\x2D\x35","\x63\x6F\x6C\x2D\x6D\x64\x2D\x32","\x49\x6E\x73\x65\x72\x74\x20\x6C\x61\x62\x65\x6C","\x6E\x75\x6D\x62\x65\x72","\x78","\x70\x61\x72\x65\x6E\x74\x45\x6C\x65\x6D\x65\x6E\x74","\x62\x74\x6E\x20\x72\x65\x64"];_0xa97b[0];function createCheckbox(_0x9d0ax2){var _0x9d0ax3=document[_0xa97b[2]](_0xa97b[1]);_0x9d0ax3[_0xa97b[5]](_0xa97b[3],_0xa97b[4]);if(_0x9d0ax2){_0x9d0ax3[_0xa97b[5]](_0xa97b[6],true)};return _0x9d0ax3}function createDropdownFromApi(_0x9d0ax5,_0x9d0ax2,_0x9d0ax6,_0x9d0ax7,_0x9d0ax8,_0x9d0ax9,_0x9d0axa){var _0x9d0axb= new XMLHttpRequest();_0x9d0axb[_0xa97b[8]](_0xa97b[7],_0x9d0ax5,false);_0x9d0axb[_0xa97b[14]](_0xa97b[9],_0xa97b[10]+ _0x9d0ax8[_0xa97b[13]][_0xa97b[12]][_0xa97b[11]]);_0x9d0axb[_0xa97b[15]](null);var _0x9d0axc=[];if(_0x9d0axb[_0xa97b[16]]=== 200){_0x9d0axc= JSON[_0xa97b[18]](_0x9d0axb[_0xa97b[17]])};var _0x9d0ax3=document[_0xa97b[2]](_0xa97b[19]);var _0x9d0axd=document[_0xa97b[2]](_0xa97b[20]);_0x9d0axd[_0xa97b[21]]= _0xa97b[22];_0x9d0axd[_0xa97b[23]]= _0xa97b[24];_0x9d0ax3[_0xa97b[25]](_0x9d0axd);_0x9d0axc[_0xa97b[30]][_0xa97b[28]](function(_0x9d0axe){_0x9d0axd= document[_0xa97b[2]](_0xa97b[20]);_0x9d0axd[_0xa97b[21]]= _0x9d0axe[_0x9d0ax6];if(_0x9d0ax9&& _0x9d0axa){_0x9d0ax9[_0xa97b[28]](function(_0x9d0axf){_0x9d0axa= _0x9d0axa[_0xa97b[27]](_0xa97b[26]+ _0x9d0axf+ _0xa97b[26],_0x9d0axe[_0x9d0axf])});_0x9d0axd[_0xa97b[23]]= _0x9d0axa;_0x9d0axd[_0xa97b[29]]= (_0x9d0axa== _0x9d0ax2)}else {_0x9d0axd[_0xa97b[23]]= _0x9d0axe[_0x9d0ax7];_0x9d0axd[_0xa97b[29]]= (_0x9d0axe[_0x9d0ax7]== _0x9d0ax2)};_0x9d0ax3[_0xa97b[25]](_0x9d0axd)});_0x9d0ax3[_0xa97b[31]]= _0xa97b[32];return _0x9d0ax3}function createGroupedDropdownFromApi(_0x9d0ax5,_0x9d0ax2,_0x9d0ax6,_0x9d0ax7,_0x9d0ax8,_0x9d0ax11,_0x9d0ax12){var _0x9d0axb= new XMLHttpRequest();_0x9d0axb[_0xa97b[8]](_0xa97b[7],_0x9d0ax5,false);_0x9d0axb[_0xa97b[14]](_0xa97b[9],_0xa97b[10]+ _0x9d0ax8[_0xa97b[13]][_0xa97b[12]][_0xa97b[11]]);_0x9d0axb[_0xa97b[15]](null);var _0x9d0axc=[];if(_0x9d0axb[_0xa97b[16]]=== 200){_0x9d0axc= JSON[_0xa97b[18]](_0x9d0axb[_0xa97b[17]])};var _0x9d0ax3=document[_0xa97b[2]](_0xa97b[19]);var _0x9d0axd=document[_0xa97b[2]](_0xa97b[20]);_0x9d0axd[_0xa97b[21]]= _0xa97b[22];_0x9d0axd[_0xa97b[23]]= _0xa97b[33];_0x9d0ax3[_0xa97b[25]](_0x9d0axd);var _0x9d0ax13=_0x9d0ax11?_0x9d0axc[_0xa97b[30]]:_0x9d0axc;var _0x9d0ax14={};var _0x9d0ax15={};_0x9d0ax14[_0x9d0ax12]= null;var _0x9d0ax16=_[_0xa97b[34]](_0x9d0ax13,_0x9d0ax14);var _0x9d0ax17={};_0x9d0ax16[_0xa97b[28]](function(_0x9d0axe){_0x9d0axd= document[_0xa97b[2]](_0xa97b[20]);_0x9d0axd[_0xa97b[31]]= _0xa97b[35];_0x9d0axd[_0xa97b[21]]= _0x9d0axe[_0x9d0ax6][_0xa97b[36]]();_0x9d0axd[_0xa97b[23]]= _0x9d0axe[_0x9d0ax7];_0x9d0axd[_0xa97b[29]]= (_0x9d0axe[_0x9d0ax7]== _0x9d0ax2);_0x9d0ax3[_0xa97b[25]](_0x9d0axd);_0x9d0ax15[_0x9d0ax12]= _0x9d0axe[_0x9d0ax7];_0x9d0ax17= _[_0xa97b[34]](_0x9d0ax13,_0x9d0ax15);_0x9d0ax17[_0xa97b[28]](function(_0x9d0axe){_0x9d0axd= document[_0xa97b[2]](_0xa97b[20]);_0x9d0axd[_0xa97b[31]]= _0xa97b[37];_0x9d0axd[_0xa97b[21]]= _0xa97b[38]+ _[_0xa97b[39]](_0x9d0axe[_0x9d0ax6]);_0x9d0axd[_0xa97b[23]]= _0x9d0axe[_0x9d0ax7];_0x9d0axd[_0xa97b[29]]= (_0x9d0axe[_0x9d0ax7]== _0x9d0ax2);_0x9d0ax3[_0xa97b[25]](_0x9d0axd)})});_0x9d0ax3[_0xa97b[31]]= _0xa97b[32];return _0x9d0ax3}function createDropdownFromArray(_0x9d0ax19,_0x9d0ax2){var _0x9d0ax3=document[_0xa97b[2]](_0xa97b[19]);for(var _0x9d0ax1a in _0x9d0ax19){var _0x9d0axd=document[_0xa97b[2]](_0xa97b[20]);_0x9d0axd[_0xa97b[21]]= _0x9d0ax19[_0x9d0ax1a];_0x9d0axd[_0xa97b[23]]= _0x9d0ax1a;if(_0x9d0ax2> 0|| _0x9d0ax2!= _0xa97b[40]){_0x9d0axd[_0xa97b[29]]= (_0x9d0ax2=== _0x9d0ax1a)?true:false};_0x9d0ax3[_0xa97b[25]](_0x9d0axd)};_0x9d0ax3[_0xa97b[31]]= _0xa97b[32];return _0x9d0ax3}function Dialog(_0x9d0ax8,_0x9d0ax1c,_0x9d0ax1d,_0x9d0ax1e,_0x9d0ax1f,_0x9d0ax20,_0x9d0ax21){var _0x9d0ax22=0;if(mxClient[_0xa97b[41]]&& document[_0xa97b[42]]!= 9){_0x9d0ax22= 60};_0x9d0ax1d+= _0x9d0ax22;_0x9d0ax1e+= _0x9d0ax22;var _0x9d0ax23=Math[_0xa97b[46]](0,Math[_0xa97b[45]]((document[_0xa97b[44]][_0xa97b[43]]- _0x9d0ax1d)/ 2));var _0x9d0ax24=Math[_0xa97b[46]](0,Math[_0xa97b[45]]((Math[_0xa97b[46]](document[_0xa97b[44]][_0xa97b[47]],document[_0xa97b[48]][_0xa97b[47]])- _0x9d0ax1e)/ 3));var _0x9d0ax25=_0x9d0ax8[_0xa97b[50]](_0xa97b[49]);_0x9d0ax25[_0xa97b[31]]= _0xa97b[51];_0x9d0ax25[_0xa97b[53]][_0xa97b[52]]= _0xa97b[54];_0x9d0ax25[_0xa97b[53]][_0xa97b[55]]= _0xa97b[56];var _0x9d0ax26=_0x9d0ax8[_0xa97b[50]](_0xa97b[57]);_0x9d0ax26[_0xa97b[31]]= _0xa97b[58];_0x9d0ax26[_0xa97b[25]](_0x9d0ax1c);_0x9d0ax25[_0xa97b[25]](_0x9d0ax26);if(this[_0xa97b[59]]== null){this[_0xa97b[59]]= _0x9d0ax8[_0xa97b[50]](_0xa97b[60]);this[_0xa97b[59]][_0xa97b[31]]= _0xa97b[61];if(mxClient[_0xa97b[62]]){ new mxDivResizer(this[_0xa97b[59]])}};if(_0x9d0ax1f){document[_0xa97b[44]][_0xa97b[25]](this[_0xa97b[59]])};document[_0xa97b[44]][_0xa97b[25]](_0x9d0ax25);this[_0xa97b[63]]= _0x9d0ax21;this[_0xa97b[64]]= _0x9d0ax25}Dialog[_0xa97b[66]][_0xa97b[65]]= function(){if(this[_0xa97b[63]]!= null){this[_0xa97b[63]]();this[_0xa97b[63]]= null};this[_0xa97b[64]][_0xa97b[68]][_0xa97b[67]](this[_0xa97b[64]]);this[_0xa97b[59]][_0xa97b[68]][_0xa97b[67]](this[_0xa97b[59]])};function ImportDialog(_0x9d0ax8){var _0x9d0ax28=_0x9d0ax8[_0xa97b[50]](_0xa97b[69]);var _0x9d0ax29=_0x9d0ax8[_0xa97b[50]](_0xa97b[70]);var _0x9d0ax2a=_0x9d0ax8[_0xa97b[50]](_0xa97b[71]);var _0x9d0ax2b=_0x9d0ax8[_0xa97b[50]](_0xa97b[72]);var _0x9d0ax2c=_0x9d0ax8[_0xa97b[74]](_0xa97b[73]);mxUtils[_0xa97b[78]](_0x9d0ax2c,mxResources[_0xa97b[76]](_0xa97b[75])+ _0xa97b[77]);var _0x9d0ax2d=mxUtils[_0xa97b[80]](_0xa97b[40],function(){_0x9d0ax8[_0xa97b[79]]()});_0x9d0ax2d[_0xa97b[31]]= _0xa97b[65];_0x9d0ax29[_0xa97b[25]](_0x9d0ax2d);_0x9d0ax29[_0xa97b[25]](_0x9d0ax2c);var _0x9d0ax2e=_0x9d0ax8[_0xa97b[50]](_0xa97b[81]);var _0x9d0ax2f=_0x9d0ax8[_0xa97b[50]](_0xa97b[82]);var _0x9d0ax30=document[_0xa97b[2]](_0xa97b[83]);_0x9d0ax30[_0xa97b[53]][_0xa97b[84]]= _0xa97b[85];_0x9d0ax30[_0xa97b[53]][_0xa97b[86]]= _0xa97b[87];var _0x9d0ax3=document[_0xa97b[2]](_0xa97b[1]);_0x9d0ax3[_0xa97b[3]]= _0xa97b[88];_0x9d0ax3[_0xa97b[5]](_0xa97b[89],_0xa97b[90]);_0x9d0ax3[_0xa97b[100]](_0xa97b[91],function _0x9d0ax31(_0x9d0ax32){var _0x9d0ax33=_0x9d0ax32[_0xa97b[93]][_0xa97b[92]][0];console[_0xa97b[94]](_0x9d0ax33);if(_0x9d0ax33){if(_0x9d0ax33[_0xa97b[3]]=== _0xa97b[90]){var _0x9d0ax34= new FileReader();_0x9d0ax34[_0xa97b[95]]= function(_0x9d0ax35){var _0x9d0ax36=_0x9d0ax35[_0xa97b[93]][_0xa97b[96]];mxUtils[_0xa97b[78]](_0x9d0ax30,_0x9d0ax36)};_0x9d0ax34[_0xa97b[97]](_0x9d0ax33)}else {alert(_0xa97b[98])}}else {alert(_0xa97b[99])}},false);_0x9d0ax2f[_0xa97b[25]](_0x9d0ax3);_0x9d0ax2f[_0xa97b[25]](_0x9d0ax30);_0x9d0ax2e[_0xa97b[25]](_0x9d0ax2f);_0x9d0ax2a[_0xa97b[25]](_0x9d0ax2e);var _0x9d0ax37=mxUtils[_0xa97b[80]](mxResources[_0xa97b[76]](_0xa97b[75]),mxUtils[_0xa97b[103]](this,function(_0x9d0ax38){var _0x9d0ax39=mxUtils[_0xa97b[101]](_0x9d0ax30[_0xa97b[23]]);_0x9d0ax8[_0xa97b[13]][_0xa97b[102]](_0x9d0ax39[_0xa97b[48]]);_0x9d0ax8[_0xa97b[79]]()}));_0x9d0ax37[_0xa97b[31]]= _0xa97b[104];var _0x9d0ax3a=mxUtils[_0xa97b[80]](mxResources[_0xa97b[76]](_0xa97b[105]),function(){_0x9d0ax8[_0xa97b[79]]()});_0x9d0ax3a[_0xa97b[31]]= _0xa97b[106];_0x9d0ax2b[_0xa97b[25]](_0x9d0ax37);_0x9d0ax2b[_0xa97b[25]](_0x9d0ax3a);_0x9d0ax28[_0xa97b[25]](_0x9d0ax29);_0x9d0ax28[_0xa97b[25]](_0x9d0ax2a);_0x9d0ax28[_0xa97b[25]](_0x9d0ax2b);this[_0xa97b[64]]= _0x9d0ax28}function AboutDialog(_0x9d0ax8){var _0x9d0ax28=_0x9d0ax8[_0xa97b[50]](_0xa97b[69]);var _0x9d0ax29=_0x9d0ax8[_0xa97b[50]](_0xa97b[70]);var _0x9d0ax2a=_0x9d0ax8[_0xa97b[50]](_0xa97b[71]);var _0x9d0ax2b=_0x9d0ax8[_0xa97b[50]](_0xa97b[72]);var _0x9d0ax2c=_0x9d0ax8[_0xa97b[74]](_0xa97b[73]);mxUtils[_0xa97b[78]](_0x9d0ax2c,mxResources[_0xa97b[76]](_0xa97b[107])+ _0xa97b[108]);var _0x9d0ax2d=mxUtils[_0xa97b[80]](_0xa97b[40],function(){_0x9d0ax8[_0xa97b[79]]()});_0x9d0ax2d[_0xa97b[31]]= _0xa97b[65];_0x9d0ax29[_0xa97b[25]](_0x9d0ax2d);_0x9d0ax29[_0xa97b[25]](_0x9d0ax2c);var _0x9d0ax3c=document[_0xa97b[2]](_0xa97b[109]);_0x9d0ax3c[_0xa97b[53]][_0xa97b[110]]= _0xa97b[111];_0x9d0ax3c[_0xa97b[5]](_0xa97b[84],_0xa97b[112]);_0x9d0ax3c[_0xa97b[5]](_0xa97b[84],_0xa97b[113]);_0x9d0ax3c[_0xa97b[5]](_0xa97b[114],IMAGE_PATH+ _0xa97b[115]);_0x9d0ax2a[_0xa97b[25]](_0x9d0ax3c);mxUtils[_0xa97b[116]](_0x9d0ax2a);mxUtils[_0xa97b[78]](_0x9d0ax2a,_0xa97b[117]+ mxClient[_0xa97b[118]]);mxUtils[_0xa97b[116]](_0x9d0ax2a);var _0x9d0ax3d=document[_0xa97b[2]](_0xa97b[119]);_0x9d0ax3d[_0xa97b[5]](_0xa97b[120],_0xa97b[121]);_0x9d0ax3d[_0xa97b[5]](_0xa97b[93],_0xa97b[122]);mxUtils[_0xa97b[78]](_0x9d0ax3d,_0xa97b[123]);_0x9d0ax2a[_0xa97b[25]](_0x9d0ax3d);mxUtils[_0xa97b[116]](_0x9d0ax2a);mxUtils[_0xa97b[116]](_0x9d0ax2a);var _0x9d0ax3a=mxUtils[_0xa97b[80]](mxResources[_0xa97b[76]](_0xa97b[65]),function(){_0x9d0ax8[_0xa97b[79]]()});_0x9d0ax3a[_0xa97b[31]]= _0xa97b[106];_0x9d0ax2b[_0xa97b[25]](_0x9d0ax3a);_0x9d0ax28[_0xa97b[25]](_0x9d0ax29);_0x9d0ax28[_0xa97b[25]](_0x9d0ax2a);_0x9d0ax28[_0xa97b[25]](_0x9d0ax2b);this[_0xa97b[64]]= _0x9d0ax28}function SaveDialog(_0x9d0ax8){var _0x9d0ax28=_0x9d0ax8[_0xa97b[50]](_0xa97b[69]);var _0x9d0ax29=_0x9d0ax8[_0xa97b[50]](_0xa97b[70]);var _0x9d0ax2a=_0x9d0ax8[_0xa97b[50]](_0xa97b[71]);var _0x9d0ax2b=_0x9d0ax8[_0xa97b[50]](_0xa97b[72]);var _0x9d0ax2c=_0x9d0ax8[_0xa97b[74]](_0xa97b[73]);mxUtils[_0xa97b[78]](_0x9d0ax2c,mxResources[_0xa97b[76]](_0xa97b[124]));var _0x9d0ax2d=mxUtils[_0xa97b[80]](_0xa97b[40],function(){_0x9d0ax8[_0xa97b[79]]()});_0x9d0ax2d[_0xa97b[31]]= _0xa97b[65];_0x9d0ax29[_0xa97b[25]](_0x9d0ax2d);_0x9d0ax29[_0xa97b[25]](_0x9d0ax2c);var _0x9d0ax3f=_0xa97b[125];var _0x9d0ax40=_0xa97b[126]+ _0x9d0ax3f;var _0x9d0ax2=_0x9d0ax8[_0xa97b[13]][_0xa97b[127]]();var _0x9d0ax2e=_0x9d0ax8[_0xa97b[50]](_0xa97b[81]);var _0x9d0ax2f=_0x9d0ax8[_0xa97b[50]](_0xa97b[128]);var _0x9d0ax41=_0x9d0ax8[_0xa97b[50]](_0xa97b[129]);var _0x9d0ax42=document[_0xa97b[2]](_0xa97b[130]);_0x9d0ax42[_0xa97b[31]]= _0xa97b[131];mxUtils[_0xa97b[78]](_0x9d0ax42,mxResources[_0xa97b[76]](_0x9d0ax3f));_0x9d0ax2f[_0xa97b[25]](_0x9d0ax42);var _0x9d0ax43=document[_0xa97b[2]](_0xa97b[1]);_0x9d0ax43[_0xa97b[5]](_0xa97b[23],_0x9d0ax2+ _0xa97b[132]);_0x9d0ax43[_0xa97b[5]](_0xa97b[133],_0x9d0ax40);_0x9d0ax43[_0xa97b[31]]= _0xa97b[134];_0x9d0ax41[_0xa97b[25]](_0x9d0ax43);_0x9d0ax2e[_0xa97b[25]](_0x9d0ax2f);_0x9d0ax2e[_0xa97b[25]](_0x9d0ax41);_0x9d0ax2a[_0xa97b[25]](_0x9d0ax2e);var _0x9d0ax37=mxUtils[_0xa97b[80]](mxResources[_0xa97b[76]](_0xa97b[135]),function(){_0x9d0ax8[_0xa97b[124]](_0x9d0ax43[_0xa97b[23]]);_0x9d0ax8[_0xa97b[79]]()});_0x9d0ax37[_0xa97b[31]]= _0xa97b[104];var _0x9d0ax3a=mxUtils[_0xa97b[80]](mxResources[_0xa97b[76]](_0xa97b[105]),function(){_0x9d0ax8[_0xa97b[79]]()});_0x9d0ax3a[_0xa97b[31]]= _0xa97b[106];_0x9d0ax2b[_0xa97b[25]](_0x9d0ax37);_0x9d0ax2b[_0xa97b[25]](_0x9d0ax3a);_0x9d0ax28[_0xa97b[25]](_0x9d0ax29);_0x9d0ax28[_0xa97b[25]](_0x9d0ax2a);_0x9d0ax28[_0xa97b[25]](_0x9d0ax2b);this[_0xa97b[64]]= _0x9d0ax28}function NewDialog(_0x9d0ax8){var _0x9d0ax28=_0x9d0ax8[_0xa97b[50]](_0xa97b[69]);var _0x9d0ax29=_0x9d0ax8[_0xa97b[50]](_0xa97b[70]);var _0x9d0ax2a=_0x9d0ax8[_0xa97b[50]](_0xa97b[71]);var _0x9d0ax2b=_0x9d0ax8[_0xa97b[50]](_0xa97b[72]);var _0x9d0ax2c=_0x9d0ax8[_0xa97b[74]](_0xa97b[73]);mxUtils[_0xa97b[78]](_0x9d0ax2c,mxResources[_0xa97b[76]](_0xa97b[136]));var _0x9d0ax2d=mxUtils[_0xa97b[80]](_0xa97b[40],function(){_0x9d0ax8[_0xa97b[79]]()});_0x9d0ax2d[_0xa97b[31]]= _0xa97b[65];_0x9d0ax29[_0xa97b[25]](_0x9d0ax2d);_0x9d0ax29[_0xa97b[25]](_0x9d0ax2c);var _0x9d0ax3f=_0xa97b[125];var _0x9d0ax40=_0xa97b[126]+ _0x9d0ax3f;var _0x9d0ax2=_0x9d0ax8[_0xa97b[13]][_0xa97b[127]]();var _0x9d0ax2e=_0x9d0ax8[_0xa97b[50]](_0xa97b[81]);var _0x9d0ax2f=_0x9d0ax8[_0xa97b[50]](_0xa97b[128]);var _0x9d0ax41=_0x9d0ax8[_0xa97b[50]](_0xa97b[129]);var _0x9d0ax42=document[_0xa97b[2]](_0xa97b[130]);_0x9d0ax42[_0xa97b[31]]= _0xa97b[131];mxUtils[_0xa97b[78]](_0x9d0ax42,mxResources[_0xa97b[76]](_0x9d0ax3f));_0x9d0ax2f[_0xa97b[25]](_0x9d0ax42);var _0x9d0ax43=document[_0xa97b[2]](_0xa97b[1]);_0x9d0ax43[_0xa97b[5]](_0xa97b[23],_0x9d0ax2+ _0xa97b[137]);_0x9d0ax43[_0xa97b[5]](_0xa97b[133],_0x9d0ax40);_0x9d0ax43[_0xa97b[31]]= _0xa97b[134];_0x9d0ax41[_0xa97b[25]](_0x9d0ax43);_0x9d0ax2e[_0xa97b[25]](_0x9d0ax2f);_0x9d0ax2e[_0xa97b[25]](_0x9d0ax41);_0x9d0ax2a[_0xa97b[25]](_0x9d0ax2e);var _0x9d0ax37=mxUtils[_0xa97b[80]](mxResources[_0xa97b[76]](_0xa97b[136]),function(){_0x9d0ax8[_0xa97b[136]](_0x9d0ax43[_0xa97b[23]]);_0x9d0ax8[_0xa97b[79]]()});_0x9d0ax37[_0xa97b[31]]= _0xa97b[104];var _0x9d0ax3a=mxUtils[_0xa97b[80]](mxResources[_0xa97b[76]](_0xa97b[105]),function(){_0x9d0ax8[_0xa97b[79]]()});_0x9d0ax3a[_0xa97b[31]]= _0xa97b[106];_0x9d0ax2b[_0xa97b[25]](_0x9d0ax37);_0x9d0ax2b[_0xa97b[25]](_0x9d0ax3a);_0x9d0ax28[_0xa97b[25]](_0x9d0ax29);_0x9d0ax28[_0xa97b[25]](_0x9d0ax2a);_0x9d0ax28[_0xa97b[25]](_0x9d0ax2b);this[_0xa97b[64]]= _0x9d0ax28}function VariableDialog(_0x9d0ax8){var _0x9d0ax28=_0x9d0ax8[_0xa97b[50]](_0xa97b[69]);var _0x9d0ax29=_0x9d0ax8[_0xa97b[50]](_0xa97b[70]);var _0x9d0ax2a=_0x9d0ax8[_0xa97b[50]](_0xa97b[71]);var _0x9d0ax2b=_0x9d0ax8[_0xa97b[50]](_0xa97b[72]);var _0x9d0ax2c=_0x9d0ax8[_0xa97b[74]](_0xa97b[73]);mxUtils[_0xa97b[78]](_0x9d0ax2c,mxResources[_0xa97b[76]](_0xa97b[138]));var _0x9d0ax2d=mxUtils[_0xa97b[80]](_0xa97b[40],function(){_0x9d0ax8[_0xa97b[79]]()});_0x9d0ax2d[_0xa97b[31]]= _0xa97b[65];_0x9d0ax29[_0xa97b[25]](_0x9d0ax2d);_0x9d0ax29[_0xa97b[25]](_0x9d0ax2c);var _0x9d0ax3f=_0xa97b[125];var _0x9d0ax40=_0xa97b[126]+ _0x9d0ax3f;var _0x9d0ax2=_0x9d0ax8[_0xa97b[13]][_0xa97b[127]]();var _0x9d0ax2e=_0x9d0ax8[_0xa97b[50]](_0xa97b[81]);var _0x9d0ax2f=_0x9d0ax8[_0xa97b[50]](_0xa97b[128]);var _0x9d0ax41=_0x9d0ax8[_0xa97b[50]](_0xa97b[129]);var _0x9d0ax42=document[_0xa97b[2]](_0xa97b[130]);_0x9d0ax42[_0xa97b[31]]= _0xa97b[131];mxUtils[_0xa97b[78]](_0x9d0ax42,mxResources[_0xa97b[76]](_0x9d0ax3f));_0x9d0ax2f[_0xa97b[25]](_0x9d0ax42);var _0x9d0ax43=document[_0xa97b[2]](_0xa97b[1]);_0x9d0ax43[_0xa97b[5]](_0xa97b[23],_0xa97b[139]);_0x9d0ax43[_0xa97b[5]](_0xa97b[133],_0x9d0ax40);_0x9d0ax43[_0xa97b[31]]= _0xa97b[134];_0x9d0ax41[_0xa97b[25]](_0x9d0ax43);_0x9d0ax2e[_0xa97b[25]](_0x9d0ax2f);_0x9d0ax2e[_0xa97b[25]](_0x9d0ax41);_0x9d0ax2a[_0xa97b[25]](_0x9d0ax2e);var _0x9d0ax37=mxUtils[_0xa97b[80]](mxResources[_0xa97b[76]](_0xa97b[136]),function(){_0x9d0ax8[_0xa97b[138]](_0x9d0ax43[_0xa97b[23]]);_0x9d0ax8[_0xa97b[79]]()});_0x9d0ax37[_0xa97b[31]]= _0xa97b[104];var _0x9d0ax3a=mxUtils[_0xa97b[80]](mxResources[_0xa97b[76]](_0xa97b[105]),function(){_0x9d0ax8[_0xa97b[79]]()});_0x9d0ax3a[_0xa97b[31]]= _0xa97b[106];_0x9d0ax2b[_0xa97b[25]](_0x9d0ax37);_0x9d0ax2b[_0xa97b[25]](_0x9d0ax3a);_0x9d0ax28[_0xa97b[25]](_0x9d0ax29);_0x9d0ax28[_0xa97b[25]](_0x9d0ax2a);_0x9d0ax28[_0xa97b[25]](_0x9d0ax2b);this[_0xa97b[64]]= _0x9d0ax28}function OpenDialog(_0x9d0ax8){var _0x9d0ax28=_0x9d0ax8[_0xa97b[50]](_0xa97b[69]);var _0x9d0ax29=_0x9d0ax8[_0xa97b[50]](_0xa97b[70]);var _0x9d0ax2a=_0x9d0ax8[_0xa97b[50]](_0xa97b[71]);var _0x9d0ax2b=_0x9d0ax8[_0xa97b[50]](_0xa97b[72]);var _0x9d0ax2c=_0x9d0ax8[_0xa97b[74]](_0xa97b[73]);mxUtils[_0xa97b[78]](_0x9d0ax2c,mxResources[_0xa97b[76]](_0xa97b[8]));var _0x9d0ax2d=mxUtils[_0xa97b[80]](_0xa97b[40],function(){_0x9d0ax8[_0xa97b[79]]()});_0x9d0ax2d[_0xa97b[31]]= _0xa97b[65];_0x9d0ax29[_0xa97b[25]](_0x9d0ax2d);_0x9d0ax29[_0xa97b[25]](_0x9d0ax2c);var _0x9d0ax2e=_0x9d0ax8[_0xa97b[50]](_0xa97b[81]);var _0x9d0ax2f=_0x9d0ax8[_0xa97b[50]](_0xa97b[128]);var _0x9d0ax41=_0x9d0ax8[_0xa97b[50]](_0xa97b[129]);var _0x9d0ax42=document[_0xa97b[2]](_0xa97b[130]);_0x9d0ax42[_0xa97b[31]]= _0xa97b[131];mxUtils[_0xa97b[78]](_0x9d0ax42,mxResources[_0xa97b[76]](_0xa97b[125]));_0x9d0ax2f[_0xa97b[25]](_0x9d0ax42);var _0x9d0axb= new XMLHttpRequest();_0x9d0axb[_0xa97b[8]](_0xa97b[7],_0xa97b[140],false);_0x9d0axb[_0xa97b[14]](_0xa97b[9],_0xa97b[10]+ _0x9d0ax8[_0xa97b[13]][_0xa97b[12]][_0xa97b[11]]);_0x9d0axb[_0xa97b[15]](null);var _0x9d0axc=[];if(_0x9d0axb[_0xa97b[16]]=== 200){_0x9d0axc= JSON[_0xa97b[18]](_0x9d0axb[_0xa97b[17]])[_0xa97b[30]]};var _0x9d0ax43=document[_0xa97b[2]](_0xa97b[19]);for(var _0x9d0ax47=0;_0x9d0ax47< _0x9d0axc[_0xa97b[141]];_0x9d0ax47++){var _0x9d0axd=document[_0xa97b[2]](_0xa97b[20]);_0x9d0axd[_0xa97b[21]]= _0x9d0axc[_0x9d0ax47][_0xa97b[125]];_0x9d0axd[_0xa97b[23]]= _0x9d0axc[_0x9d0ax47][_0xa97b[133]];_0x9d0ax43[_0xa97b[25]](_0x9d0axd)};_0x9d0ax43[_0xa97b[31]]= _0xa97b[134];_0x9d0ax41[_0xa97b[25]](_0x9d0ax43);_0x9d0ax2e[_0xa97b[25]](_0x9d0ax2f);_0x9d0ax2e[_0xa97b[25]](_0x9d0ax41);_0x9d0ax2a[_0xa97b[25]](_0x9d0ax2e);var _0x9d0ax37=mxUtils[_0xa97b[80]](mxResources[_0xa97b[76]](_0xa97b[8]),function(){console[_0xa97b[94]](_0x9d0ax43);console[_0xa97b[94]](_0x9d0ax43[_0xa97b[23]]);window[_0xa97b[8]](_0xa97b[142]+ _0x9d0ax43[_0xa97b[23]],_0xa97b[122]);_0x9d0ax8[_0xa97b[79]]()});_0x9d0ax37[_0xa97b[31]]= _0xa97b[104];var _0x9d0ax3a=mxUtils[_0xa97b[80]](mxResources[_0xa97b[76]](_0xa97b[105]),function(){_0x9d0ax8[_0xa97b[79]]()});_0x9d0ax3a[_0xa97b[31]]= _0xa97b[106];_0x9d0ax2b[_0xa97b[25]](_0x9d0ax37);_0x9d0ax2b[_0xa97b[25]](_0x9d0ax3a);_0x9d0ax28[_0xa97b[25]](_0x9d0ax29);_0x9d0ax28[_0xa97b[25]](_0x9d0ax2a);_0x9d0ax28[_0xa97b[25]](_0x9d0ax2b);this[_0xa97b[64]]= _0x9d0ax28}function RenameDialog(_0x9d0ax8){var _0x9d0ax28=_0x9d0ax8[_0xa97b[50]](_0xa97b[69]);var _0x9d0ax29=_0x9d0ax8[_0xa97b[50]](_0xa97b[70]);var _0x9d0ax2a=_0x9d0ax8[_0xa97b[50]](_0xa97b[71]);var _0x9d0ax2b=_0x9d0ax8[_0xa97b[50]](_0xa97b[72]);var _0x9d0ax2c=_0x9d0ax8[_0xa97b[74]](_0xa97b[73]);mxUtils[_0xa97b[78]](_0x9d0ax2c,mxResources[_0xa97b[76]](_0xa97b[143]));var _0x9d0ax2d=mxUtils[_0xa97b[80]](_0xa97b[40],function(){_0x9d0ax8[_0xa97b[79]]()});_0x9d0ax2d[_0xa97b[31]]= _0xa97b[65];_0x9d0ax29[_0xa97b[25]](_0x9d0ax2d);_0x9d0ax29[_0xa97b[25]](_0x9d0ax2c);var _0x9d0ax2e=_0x9d0ax8[_0xa97b[50]](_0xa97b[81]);var _0x9d0ax2f=_0x9d0ax8[_0xa97b[50]](_0xa97b[128]);var _0x9d0ax41=_0x9d0ax8[_0xa97b[50]](_0xa97b[129]);var _0x9d0ax42=document[_0xa97b[2]](_0xa97b[130]);_0x9d0ax42[_0xa97b[31]]= _0xa97b[131];mxUtils[_0xa97b[78]](_0x9d0ax42,mxResources[_0xa97b[76]](_0xa97b[125]));_0x9d0ax2f[_0xa97b[25]](_0x9d0ax42);var _0x9d0ax3f=_0x9d0ax8[_0xa97b[13]][_0xa97b[144]];var _0x9d0ax3=document[_0xa97b[2]](_0xa97b[1]);_0x9d0ax3[_0xa97b[5]](_0xa97b[23],_0x9d0ax3f);_0x9d0ax3[_0xa97b[31]]= _0xa97b[134];_0x9d0ax41[_0xa97b[25]](_0x9d0ax3);_0x9d0ax2e[_0xa97b[25]](_0x9d0ax2f);_0x9d0ax2e[_0xa97b[25]](_0x9d0ax41);_0x9d0ax2a[_0xa97b[25]](_0x9d0ax2e);var _0x9d0ax37=mxUtils[_0xa97b[80]](mxResources[_0xa97b[76]](_0xa97b[135]),function(){var _0x9d0axb= new XMLHttpRequest();_0x9d0axb[_0xa97b[8]](_0xa97b[145],SAVE_URL+ _0x9d0ax8[_0xa97b[13]][_0xa97b[12]][_0xa97b[133]],true);_0x9d0axb[_0xa97b[14]](_0xa97b[146],_0xa97b[147]);_0x9d0axb[_0xa97b[14]](_0xa97b[9],_0xa97b[10]+ _0x9d0ax8[_0xa97b[13]][_0xa97b[12]][_0xa97b[11]]);_0x9d0axb[_0xa97b[15]](_0xa97b[148]+ _0x9d0ax3[_0xa97b[23]]);_0x9d0axb[_0xa97b[95]]= function(_0x9d0ax35){if(_0x9d0axb[_0xa97b[16]]=== 200){_0x9d0ax8[_0xa97b[13]][_0xa97b[150]](_0xa97b[149]);_0x9d0ax8[_0xa97b[13]][_0xa97b[144]]= _0x9d0ax3[_0xa97b[23]]}else {_0x9d0ax8[_0xa97b[13]][_0xa97b[150]](JSON[_0xa97b[18]](_0x9d0axb[_0xa97b[17]])[_0xa97b[152]][0][_0xa97b[151]])}};_0x9d0axb[_0xa97b[153]]= function(_0x9d0ax35){mxUtils[_0xa97b[155]](_0x9d0axb[_0xa97b[154]])};_0x9d0ax8[_0xa97b[79]]()});_0x9d0ax37[_0xa97b[31]]= _0xa97b[104];var _0x9d0ax3a=mxUtils[_0xa97b[80]](mxResources[_0xa97b[76]](_0xa97b[105]),function(){_0x9d0ax8[_0xa97b[79]]()});_0x9d0ax3a[_0xa97b[31]]= _0xa97b[106];_0x9d0ax2b[_0xa97b[25]](_0x9d0ax37);_0x9d0ax2b[_0xa97b[25]](_0x9d0ax3a);_0x9d0ax28[_0xa97b[25]](_0x9d0ax29);_0x9d0ax28[_0xa97b[25]](_0x9d0ax2a);_0x9d0ax28[_0xa97b[25]](_0x9d0ax2b);this[_0xa97b[64]]= _0x9d0ax28}function EditFileDialog(_0x9d0ax8){var _0x9d0ax28=_0x9d0ax8[_0xa97b[50]](_0xa97b[69]);var _0x9d0ax29=_0x9d0ax8[_0xa97b[50]](_0xa97b[70]);var _0x9d0ax2a=_0x9d0ax8[_0xa97b[50]](_0xa97b[71]);var _0x9d0ax2b=_0x9d0ax8[_0xa97b[50]](_0xa97b[72]);var _0x9d0ax2c=_0x9d0ax8[_0xa97b[74]](_0xa97b[73]);mxUtils[_0xa97b[78]](_0x9d0ax2c,mxResources[_0xa97b[76]](_0xa97b[156]));var _0x9d0ax2d=mxUtils[_0xa97b[80]](_0xa97b[40],function(){_0x9d0ax8[_0xa97b[79]]()});_0x9d0ax2d[_0xa97b[31]]= _0xa97b[65];_0x9d0ax29[_0xa97b[25]](_0x9d0ax2d);_0x9d0ax29[_0xa97b[25]](_0x9d0ax2c);var _0x9d0ax2e=_0x9d0ax8[_0xa97b[50]](_0xa97b[81]);var _0x9d0ax2f=_0x9d0ax8[_0xa97b[50]](_0xa97b[82]);var _0x9d0ax30=document[_0xa97b[2]](_0xa97b[83]);_0x9d0ax30[_0xa97b[53]][_0xa97b[84]]= _0xa97b[85];_0x9d0ax30[_0xa97b[53]][_0xa97b[86]]= _0xa97b[87];_0x9d0ax30[_0xa97b[23]]= mxUtils[_0xa97b[158]](_0x9d0ax8[_0xa97b[13]][_0xa97b[157]]());if(fileSupport){function _0x9d0ax4a(_0x9d0ax32){_0x9d0ax32[_0xa97b[159]]();_0x9d0ax32[_0xa97b[160]]();if(_0x9d0ax32[_0xa97b[161]][_0xa97b[92]][_0xa97b[141]]> 0){var _0x9d0ax4b=_0x9d0ax32[_0xa97b[161]][_0xa97b[92]][0];var _0x9d0ax4c= new FileReader();_0x9d0ax4c[_0xa97b[95]]= function(_0x9d0ax35){_0x9d0ax30[_0xa97b[23]]= _0x9d0ax35[_0xa97b[93]][_0xa97b[96]]};_0x9d0ax4c[_0xa97b[97]](_0x9d0ax4b)}}function _0x9d0ax4d(_0x9d0ax32){_0x9d0ax32[_0xa97b[159]]();_0x9d0ax32[_0xa97b[160]]()}_0x9d0ax30[_0xa97b[100]](_0xa97b[162],_0x9d0ax4d,false);_0x9d0ax30[_0xa97b[100]](_0xa97b[163],_0x9d0ax4a,false)};_0x9d0ax2f[_0xa97b[25]](_0x9d0ax30);_0x9d0ax2e[_0xa97b[25]](_0x9d0ax2f);_0x9d0ax2a[_0xa97b[25]](_0x9d0ax2e);var _0x9d0ax37=mxUtils[_0xa97b[80]](mxResources[_0xa97b[76]](_0xa97b[135]),function(){var _0x9d0ax39=mxUtils[_0xa97b[101]](_0x9d0ax30[_0xa97b[23]]);_0x9d0ax8[_0xa97b[13]][_0xa97b[102]](_0x9d0ax39[_0xa97b[48]]);_0x9d0ax8[_0xa97b[79]]()});_0x9d0ax37[_0xa97b[31]]= _0xa97b[104];var _0x9d0ax3a=mxUtils[_0xa97b[80]](mxResources[_0xa97b[76]](_0xa97b[105]),function(){_0x9d0ax8[_0xa97b[79]]()});_0x9d0ax3a[_0xa97b[31]]= _0xa97b[106];_0x9d0ax2b[_0xa97b[25]](_0x9d0ax37);_0x9d0ax2b[_0xa97b[25]](_0x9d0ax3a);_0x9d0ax28[_0xa97b[25]](_0x9d0ax29);_0x9d0ax28[_0xa97b[25]](_0x9d0ax2a);_0x9d0ax28[_0xa97b[25]](_0x9d0ax2b);this[_0xa97b[64]]= _0x9d0ax28}function ExportDialog(_0x9d0ax8){var _0x9d0ax28=_0x9d0ax8[_0xa97b[50]](_0xa97b[69]);var _0x9d0ax29=_0x9d0ax8[_0xa97b[50]](_0xa97b[70]);var _0x9d0ax2a=_0x9d0ax8[_0xa97b[50]](_0xa97b[164]);var _0x9d0ax2b=_0x9d0ax8[_0xa97b[50]](_0xa97b[72]);var _0x9d0ax2c=_0x9d0ax8[_0xa97b[74]](_0xa97b[73]);mxUtils[_0xa97b[78]](_0x9d0ax2c,mxResources[_0xa97b[76]](_0xa97b[165])+ _0xa97b[77]);var _0x9d0ax2d=mxUtils[_0xa97b[80]](_0xa97b[40],function(){_0x9d0ax8[_0xa97b[79]]()});_0x9d0ax2d[_0xa97b[31]]= _0xa97b[65];_0x9d0ax29[_0xa97b[25]](_0x9d0ax2d);_0x9d0ax29[_0xa97b[25]](_0x9d0ax2c);var _0x9d0ax4f=_0x9d0ax8[_0xa97b[50]](_0xa97b[166]);var _0x9d0ax50=_0x9d0ax8[_0xa97b[50]](_0xa97b[167]);var _0x9d0ax42=document[_0xa97b[2]](_0xa97b[130]);_0x9d0ax42[_0xa97b[31]]= _0xa97b[168];mxUtils[_0xa97b[78]](_0x9d0ax42,mxResources[_0xa97b[76]](_0xa97b[144]));var _0x9d0ax3=document[_0xa97b[2]](_0xa97b[1]);_0x9d0ax3[_0xa97b[5]](_0xa97b[23],_0x9d0ax8[_0xa97b[13]][_0xa97b[127]]());_0x9d0ax3[_0xa97b[31]]= _0xa97b[134];var _0x9d0ax25=_0x9d0ax8[_0xa97b[50]](_0xa97b[169]);_0x9d0ax25[_0xa97b[25]](_0x9d0ax3);_0x9d0ax50[_0xa97b[25]](_0x9d0ax42);_0x9d0ax50[_0xa97b[25]](_0x9d0ax25);_0x9d0ax4f[_0xa97b[25]](_0x9d0ax50);_0x9d0ax2a[_0xa97b[25]](_0x9d0ax4f);var _0x9d0ax37=mxUtils[_0xa97b[80]](mxResources[_0xa97b[76]](_0xa97b[165]),mxUtils[_0xa97b[103]](this,function(_0x9d0ax38){_0x9d0ax8[_0xa97b[135]](false);var _0x9d0ax51=encodeURIComponent(mxUtils[_0xa97b[170]](_0x9d0ax8[_0xa97b[13]][_0xa97b[157]]())); new mxXmlRequest(SAVE_URL+ _0x9d0ax8[_0xa97b[13]][_0xa97b[12]][_0xa97b[133]]+ _0xa97b[172],_0xa97b[173]+ _0x9d0ax3[_0xa97b[23]],_0xa97b[7])[_0xa97b[171]](document,_0xa97b[122]);_0x9d0ax8[_0xa97b[79]]()}));_0x9d0ax37[_0xa97b[31]]= _0xa97b[104];var _0x9d0ax3a=mxUtils[_0xa97b[80]](mxResources[_0xa97b[76]](_0xa97b[105]),function(){_0x9d0ax8[_0xa97b[79]]()});_0x9d0ax3a[_0xa97b[31]]= _0xa97b[106];_0x9d0ax2b[_0xa97b[25]](_0x9d0ax37);_0x9d0ax2b[_0xa97b[25]](_0x9d0ax3a);_0x9d0ax28[_0xa97b[25]](_0x9d0ax29);_0x9d0ax28[_0xa97b[25]](_0x9d0ax2a);_0x9d0ax28[_0xa97b[25]](_0x9d0ax2b);this[_0xa97b[64]]= _0x9d0ax28}function GeneralDialog(_0x9d0ax8,_0x9d0ax53){var _0x9d0ax54=_0x9d0ax8[_0xa97b[13]][_0xa97b[174]];var _0x9d0ax28=_0x9d0ax8[_0xa97b[50]](_0xa97b[69]);var _0x9d0ax29=_0x9d0ax8[_0xa97b[50]](_0xa97b[70]);var _0x9d0ax2a=_0x9d0ax8[_0xa97b[50]](_0xa97b[175]);var _0x9d0ax2b=_0x9d0ax8[_0xa97b[50]](_0xa97b[72]);var _0x9d0ax2c=_0x9d0ax8[_0xa97b[74]](_0xa97b[73]);mxUtils[_0xa97b[78]](_0x9d0ax2c,mxResources[_0xa97b[76]](_0xa97b[156])+ _0xa97b[176]+ mxResources[_0xa97b[76]](_0x9d0ax53[_0xa97b[23]][_0xa97b[177]]));var _0x9d0ax2d=mxUtils[_0xa97b[80]](_0xa97b[40],function(){_0x9d0ax8[_0xa97b[79]]()});_0x9d0ax2d[_0xa97b[31]]= _0xa97b[65];_0x9d0ax29[_0xa97b[25]](_0x9d0ax2d);_0x9d0ax29[_0xa97b[25]](_0x9d0ax2c);var _0x9d0ax55=_0x9d0ax8[_0xa97b[50]](_0xa97b[166]);_0x9d0ax55[_0xa97b[5]](_0xa97b[133],_0xa97b[178]);var _0x9d0ax56=_0x9d0ax53[_0xa97b[23]][_0xa97b[179]][_0xa97b[141]];var _0x9d0ax4f=_0x9d0ax8[_0xa97b[50]](_0xa97b[166]);for(var _0x9d0ax57=0;_0x9d0ax57< _0x9d0ax56;_0x9d0ax57++){var _0x9d0ax3f=_0x9d0ax53[_0xa97b[23]][_0xa97b[179]][_0x9d0ax57][_0xa97b[125]];var _0x9d0ax40=_0xa97b[126]+ _0x9d0ax3f;var _0x9d0ax2=_0x9d0ax53[_0xa97b[23]][_0xa97b[179]][_0x9d0ax57][_0xa97b[23]];console[_0xa97b[94]](_0x9d0ax3f);var _0x9d0ax50=_0x9d0ax8[_0xa97b[50]]((_0x9d0ax57== _0x9d0ax56- 1)?_0xa97b[167]:_0xa97b[180]);var _0x9d0ax42=document[_0xa97b[2]](_0xa97b[130]);_0x9d0ax42[_0xa97b[31]]= _0xa97b[168];mxUtils[_0xa97b[78]](_0x9d0ax42,mxResources[_0xa97b[76]](_0x9d0ax3f));_0x9d0ax50[_0xa97b[25]](_0x9d0ax42);var _0x9d0ax3;switch(_0x9d0ax3f){case _0xa97b[133]:_0x9d0ax3= document[_0xa97b[2]](_0xa97b[1]);_0x9d0ax2= _0x9d0ax53[_0xa97b[133]];_0x9d0ax3[_0xa97b[5]](_0xa97b[23],_0x9d0ax2);_0x9d0ax3[_0xa97b[5]](_0xa97b[181],true);_0x9d0ax3[_0xa97b[31]]= _0xa97b[134];break;case _0xa97b[187]:_0x9d0ax3= document[_0xa97b[2]](_0xa97b[1]);_0x9d0ax3[_0xa97b[5]](_0xa97b[3],_0xa97b[80]);_0x9d0ax3[_0xa97b[182]]= function(){if(this[_0xa97b[23]]== _0xa97b[183]){this[_0xa97b[5]](_0xa97b[23],_0xa97b[184]);this[_0xa97b[31]]= _0xa97b[185]}else {this[_0xa97b[31]]= _0xa97b[186];this[_0xa97b[5]](_0xa97b[23],_0xa97b[183])}};_0x9d0ax3[_0xa97b[5]](_0xa97b[23],_0x9d0ax2);_0x9d0ax3[_0xa97b[31]]= (_0x9d0ax2== _0xa97b[183]?_0xa97b[186]:_0xa97b[185]);break;case _0xa97b[21]:_0x9d0ax3= document[_0xa97b[2]](_0xa97b[83]);_0x9d0ax3[_0xa97b[188]]= _0x9d0ax2;_0x9d0ax3[_0xa97b[31]]= _0xa97b[134];break;case _0xa97b[189]:_0x9d0ax3= document[_0xa97b[2]](_0xa97b[83]);_0x9d0ax3[_0xa97b[188]]= _0x9d0ax2;_0x9d0ax3[_0xa97b[31]]= _0xa97b[134];break;case _0xa97b[190]:_0x9d0ax3= document[_0xa97b[2]](_0xa97b[83]);_0x9d0ax3[_0xa97b[188]]= _0x9d0ax2;_0x9d0ax3[_0xa97b[31]]= _0xa97b[134];break;case _0xa97b[193]:_0x9d0ax3= document[_0xa97b[2]](_0xa97b[1]);_0x9d0ax3[_0xa97b[5]](_0xa97b[23],_0x9d0ax2);_0x9d0ax3[_0xa97b[5]](_0xa97b[191],_0xa97b[192]);_0x9d0ax3[_0xa97b[31]]= _0xa97b[134];break;case _0xa97b[195]:_0x9d0ax3= createDropdownFromApi(_0xa97b[194],_0x9d0ax2,_0xa97b[125],_0xa97b[133],_0x9d0ax8);break;case _0xa97b[198]:_0x9d0ax3= document[_0xa97b[2]](_0xa97b[83]);_0x9d0ax3[_0xa97b[188]]= _0x9d0ax2;_0x9d0ax3[_0xa97b[31]]= _0xa97b[134];_0x9d0ax3[_0xa97b[5]](_0xa97b[196],_0xa97b[197]);break;case _0xa97b[201]:var _0x9d0ax3=mxUtils[_0xa97b[80]](_0xa97b[199],function(){var _0x9d0ax58=createDynamicInput(null,null,_0x9d0ax8);_0x9d0ax55[_0xa97b[25]](_0x9d0ax58);_0x9d0ax2a[_0xa97b[25]](_0x9d0ax55)});_0x9d0ax3[_0xa97b[31]]= _0xa97b[200];break;default:_0x9d0ax3= document[_0xa97b[2]](_0xa97b[1]);_0x9d0ax3[_0xa97b[5]](_0xa97b[23],_0x9d0ax2);_0x9d0ax3[_0xa97b[31]]= _0xa97b[134];break};_0x9d0ax3[_0xa97b[5]](_0xa97b[133],_0x9d0ax40);var _0x9d0ax25=_0x9d0ax8[_0xa97b[50]](_0xa97b[169]);_0x9d0ax25[_0xa97b[25]](_0x9d0ax3);if(mxResources[_0xa97b[76]](_0xa97b[202]+ _0x9d0ax3f)){var _0x9d0ax59=_0x9d0ax8[_0xa97b[50]](_0xa97b[203]);_0x9d0ax59[_0xa97b[31]]= _0xa97b[204];mxUtils[_0xa97b[78]](_0x9d0ax59,mxResources[_0xa97b[76]](_0xa97b[202]+ _0x9d0ax3f));_0x9d0ax25[_0xa97b[25]](_0x9d0ax59)};_0x9d0ax50[_0xa97b[25]](_0x9d0ax25);_0x9d0ax4f[_0xa97b[25]](_0x9d0ax50)};_0x9d0ax2a[_0xa97b[25]](_0x9d0ax4f);if(_0x9d0ax53[_0xa97b[23]][_0xa97b[177]]== _0xa97b[1]){if(_0x9d0ax53[_0xa97b[205]]){for(var _0x9d0ax47=0;_0x9d0ax47< _0x9d0ax53[_0xa97b[205]][_0xa97b[141]];_0x9d0ax47++){var _0x9d0ax5a=_0xa97b[40];var _0x9d0ax5b=_0xa97b[40];_[_0xa97b[28]](_0x9d0ax53[_0xa97b[205]][_0x9d0ax47][_0xa97b[23]][_0xa97b[179]],function(_0x9d0ax5c){if(_0x9d0ax5c[_0xa97b[125]]== _0xa97b[3]){_0x9d0ax5a= _0x9d0ax5c[_0xa97b[23]]}else {if(_0x9d0ax5c[_0xa97b[125]]== _0xa97b[130]){_0x9d0ax5b= _0x9d0ax5c[_0xa97b[23]]}}});var _0x9d0ax58=createDynamicInput(_0x9d0ax5a,_0x9d0ax5b,_0x9d0ax8);_0x9d0ax55[_0xa97b[25]](_0x9d0ax58)}}};_0x9d0ax2a[_0xa97b[25]](_0x9d0ax55);var _0x9d0ax37=mxUtils[_0xa97b[80]](mxResources[_0xa97b[76]](_0xa97b[135]),mxUtils[_0xa97b[103]](this,function(_0x9d0ax38){for(var _0x9d0ax57=0;_0x9d0ax57< _0x9d0ax53[_0xa97b[23]][_0xa97b[179]][_0xa97b[141]];_0x9d0ax57++){var _0x9d0ax40=_0xa97b[126]+ _0x9d0ax53[_0xa97b[23]][_0xa97b[179]][_0x9d0ax57][_0xa97b[125]];var _0x9d0ax3f=_0x9d0ax53[_0xa97b[23]][_0xa97b[179]][_0x9d0ax57][_0xa97b[125]];console[_0xa97b[94]](_0x9d0ax3f);_0x9d0ax53[_0xa97b[5]](_0x9d0ax3f,document[_0xa97b[206]](_0x9d0ax40)[_0xa97b[23]]);console[_0xa97b[94]](document[_0xa97b[206]](_0x9d0ax40)[_0xa97b[23]])};if(_0x9d0ax53[_0xa97b[23]][_0xa97b[177]]== _0xa97b[1]){if(_0x9d0ax54[_0xa97b[208]][_0xa97b[207]](_0x9d0ax53)){_0x9d0ax53[_0xa97b[205]]= []};if(document[_0xa97b[206]](_0xa97b[178])){var _0x9d0ax55=document[_0xa97b[206]](_0xa97b[178])[_0xa97b[205]];for(var _0x9d0ax47=0;_0x9d0ax47< _0x9d0ax55[_0xa97b[141]];_0x9d0ax47++){var _0x9d0ax5d=_0x9d0ax55[_0x9d0ax47][_0xa97b[205]][1];var _0x9d0ax5e=_0x9d0ax55[_0x9d0ax47][_0xa97b[205]][0];var _0x9d0ax39=mxUtils[_0xa97b[209]]();var _0x9d0ax5f=_0x9d0ax39[_0xa97b[2]](_0xa97b[178]);_0x9d0ax5f[_0xa97b[5]](_0xa97b[3],_0x9d0ax55[_0x9d0ax47][_0xa97b[210]](_0xa97b[19])[0][_0xa97b[23]]);_0x9d0ax5f[_0xa97b[5]](_0xa97b[130],_0x9d0ax55[_0x9d0ax47][_0xa97b[210]](_0xa97b[1])[0][_0xa97b[23]]);var _0x9d0ax60= new mxCell(_0x9d0ax5f);_0x9d0ax54[_0xa97b[208]][_0xa97b[201]](_0x9d0ax53,_0x9d0ax60)}}};_0x9d0ax54[_0xa97b[211]](_0x9d0ax53);_0x9d0ax8[_0xa97b[79]]()}));_0x9d0ax37[_0xa97b[31]]= _0xa97b[104];var _0x9d0ax3a=mxUtils[_0xa97b[80]](mxResources[_0xa97b[76]](_0xa97b[105]),function(){_0x9d0ax8[_0xa97b[79]]()});_0x9d0ax3a[_0xa97b[31]]= _0xa97b[106];_0x9d0ax2b[_0xa97b[25]](_0x9d0ax37);_0x9d0ax2b[_0xa97b[25]](_0x9d0ax3a);_0x9d0ax28[_0xa97b[25]](_0x9d0ax29);_0x9d0ax28[_0xa97b[25]](_0x9d0ax2a);_0x9d0ax28[_0xa97b[25]](_0x9d0ax2b);this[_0xa97b[64]]= _0x9d0ax28}function createDynamicInput(_0x9d0ax5a,_0x9d0ax5b,_0x9d0ax8){var _0x9d0ax58=_0x9d0ax8[_0xa97b[50]](_0xa97b[180]);var _0x9d0ax2f=_0x9d0ax8[_0xa97b[50]](_0xa97b[212]);var _0x9d0ax41=_0x9d0ax8[_0xa97b[50]](_0xa97b[212]);var _0x9d0ax62=_0x9d0ax8[_0xa97b[50]](_0xa97b[213]);var _0x9d0ax3=document[_0xa97b[2]](_0xa97b[1]);_0x9d0ax3[_0xa97b[5]](_0xa97b[191],_0xa97b[214]);_0x9d0ax3[_0xa97b[23]]= _0x9d0ax5b;_0x9d0ax3[_0xa97b[31]]= _0xa97b[134];_0x9d0ax2f[_0xa97b[25]](_0x9d0ax3);var _0x9d0ax43=document[_0xa97b[2]](_0xa97b[19]);var _0x9d0axd=document[_0xa97b[2]](_0xa97b[20]);_0x9d0axd[_0xa97b[21]]= _0xa97b[22];_0x9d0axd[_0xa97b[23]]= _0xa97b[40];_0x9d0ax43[_0xa97b[25]](_0x9d0axd);var _0x9d0ax13=[_0xa97b[21],_0xa97b[215],_0xa97b[83],_0xa97b[4]];_0x9d0ax13[_0xa97b[28]](function(_0x9d0axe){_0x9d0axd= document[_0xa97b[2]](_0xa97b[20]);_0x9d0axd[_0xa97b[21]]= _0x9d0axe;_0x9d0axd[_0xa97b[23]]= _0x9d0axe;_0x9d0axd[_0xa97b[29]]= (_0x9d0axe== _0x9d0ax5a);_0x9d0ax43[_0xa97b[25]](_0x9d0axd)});_0x9d0ax43[_0xa97b[31]]= _0xa97b[134];_0x9d0ax41[_0xa97b[25]](_0x9d0ax43);var _0x9d0ax63=mxUtils[_0xa97b[80]](_0xa97b[216],function(){var _0x9d0ax64=_0x9d0ax63[_0xa97b[217]];var _0x9d0ax65=_0x9d0ax64[_0xa97b[217]];document[_0xa97b[206]](_0xa97b[178])[_0xa97b[67]](_0x9d0ax65)});_0x9d0ax63[_0xa97b[31]]= _0xa97b[218];_0x9d0ax62[_0xa97b[25]](_0x9d0ax63);_0x9d0ax58[_0xa97b[25]](_0x9d0ax2f);_0x9d0ax58[_0xa97b[25]](_0x9d0ax41);_0x9d0ax58[_0xa97b[25]](_0x9d0ax62);return _0x9d0ax58} \ No newline at end of file diff --git a/public/assets/plugins/jscripty/js/Editor.js b/public/assets/plugins/jscripty/js/Editor.js index 9858989..f935892 100644 --- a/public/assets/plugins/jscripty/js/Editor.js +++ b/public/assets/plugins/jscripty/js/Editor.js @@ -1,888 +1 @@ -/** - * $Id: Editor.js,v 1.14 2013/03/06 17:57:10 boris Exp $ - * Copyright (c) 2006-2012, JGraph Ltd - */ -// Specifies if local storage should be used (eg. on the iPad which has no filesystem) -var useLocalStorage = (mxClient.IS_TOUCH || urlParams['storage'] == 'local') && typeof(localStorage) != 'undefined'; -var fileSupport = window.File != null && window.FileReader != null && window.FileList != null; - -// Specifies if connector should be shown on selected cells -var touchStyle = mxClient.IS_TOUCH || urlParams['touch'] == '1'; - -// Counts open editor tabs (must be global for cross-window access) -var counter = 0; - -// Cross-domain window access is not allowed in FF, so if we -// were opened from another domain then this will fail. -try { - var op = window; - - while (op.opener != null && !isNaN(op.opener.counter)) { - op = op.opener; - } - - // Increments the counter in the first opener in the chain - if (op != null) { - op.counter++; - counter = op.counter; - } -} catch (e) { - // ignore -} - -/** - * Editor constructor executed on page load. - */ -Editor = function() { - mxEventSource.call(this); - this.init(); - this.initStencilRegistry(); - this.graph = new Graph(); - this.outline = new mxOutline(this.graph); - this.outline.updateOnPan = true; - this.undoManager = this.createUndoManager(); - this.status = ''; - - // Contains the name which was used for the last save. Default value is null. - this.filename = null; - - this.getOrCreateFilename = function() { - return this.filename || mxResources.get('drawing', [counter]) + '.xml'; - }; - - this.getFilename = function() { - return this.filename; - }; - - // Sets the status and fires a statusChanged event - this.setStatus = function(value) { - this.status = value; - this.fireEvent(new mxEventObject('statusChanged')); - }; - - // Returns the current status - this.getStatus = function() { - return this.status; - }; - - // Contains the current modified state of the diagram. This is false for - // new diagrams and after the diagram was saved. - this.modified = false; - - // Updates modified state if graph changes - this.graphChangeListener = function() { - this.modified = true; - }; - this.graph.getModel().addListener(mxEvent.CHANGE, mxUtils.bind(this, function() { - this.graphChangeListener.apply(this, arguments); - })); - - // Installs dialog if browser window is closed without saving - // This must be disabled during save and image export - window.onbeforeunload = mxUtils.bind(this, function() { - if (this.modified) { - return mxResources.get('allChangesLost'); - } - }); - - // Sets persistent graph state defaults - this.graph.resetViewOnRootChange = false; - this.graph.scrollbars = true; - this.graph.background = null; -}; - -// Editor inherits from mxEventSource -mxUtils.extend(Editor, mxEventSource); - -/** - * Specifies the image URL to be used for the grid. - */ -Editor.prototype.gridImage = IMAGE_PATH + '/grid.gif'; - -/** - * Specifies the image URL to be used for the transparent background. - */ -Editor.prototype.transparentImage = IMAGE_PATH + '/transparent.gif'; - -/** - * Sets the XML node for the current diagram. - */ -Editor.prototype.setGraphXml = function(node) { - var dec = new mxCodec(node.ownerDocument); - - if (node.nodeName == 'mxGraphModel') { - this.graph.view.scale = 1; - this.graph.gridEnabled = node.getAttribute('grid') != '0'; - this.graph.graphHandler.guidesEnabled = node.getAttribute('guides') != '0'; - this.graph.setTooltips(node.getAttribute('tooltips') != '0'); - this.graph.setConnectable(node.getAttribute('connect') != '0'); - this.graph.foldingEnabled = node.getAttribute('fold') != '0'; - this.graph.scrollbars = node.getAttribute('scrollbars') != '0'; - - if (!this.graph.scrollbars) { - this.graph.container.scrollLeft = 0; - this.graph.container.scrollTop = 0; - this.graph.view.translate.x = Number(node.getAttribute('dx') || 0); - this.graph.view.translate.y = Number(node.getAttribute('dy') || 0); - } - - this.graph.pageVisible = node.getAttribute('page') == '1'; - this.graph.pageBreaksVisible = this.graph.pageVisible; - this.graph.preferPageSize = this.graph.pageBreaksVisible; - - // Loads the persistent state settings - var ps = node.getAttribute('pageScale'); - - if (ps != null) { - this.graph.pageScale = ps; - } else { - this.graph.pageScale = 1.5; - } - - var pw = node.getAttribute('pageWidth'); - var ph = node.getAttribute('pageHeight'); - - if (pw != null && ph != null) { - this.graph.pageFormat = new mxRectangle(0, 0, parseFloat(pw), parseFloat(ph)); - this.outline.outline.pageFormat = this.graph.pageFormat; - } - - // Loads the persistent state settings - var bg = node.getAttribute('background'); - - if (bg != null && bg.length > 0) { - this.graph.background = bg; - } - - dec.decode(node, this.graph.getModel()); - this.updateGraphComponents(); - } -}; - -/** - * Returns the XML node that represents the current diagram. - */ -Editor.prototype.getGraphXml = function() { - var enc = new mxCodec(mxUtils.createXmlDocument()); - var node = enc.encode(this.graph.getModel()); - - if (this.graph.view.translate.x != 0 || this.graph.view.translate.y != 0) { - node.setAttribute('dx', Math.round(this.graph.view.translate.x * 100) / 100); - node.setAttribute('dy', Math.round(this.graph.view.translate.y * 100) / 100); - } - - node.setAttribute('grid', (this.graph.isGridEnabled()) ? '1' : '0'); - node.setAttribute('guides', (this.graph.graphHandler.guidesEnabled) ? '1' : '0'); - node.setAttribute('guides', (this.graph.graphHandler.guidesEnabled) ? '1' : '0'); - node.setAttribute('tooltips', (this.graph.tooltipHandler.isEnabled()) ? '1' : '0'); - node.setAttribute('connect', (this.graph.connectionHandler.isEnabled()) ? '1' : '0'); - node.setAttribute('fold', (this.graph.foldingEnabled) ? '1' : '0'); - node.setAttribute('page', (this.graph.pageVisible) ? '1' : '0'); - node.setAttribute('pageScale', this.graph.pageScale); - node.setAttribute('pageWidth', this.graph.pageFormat.width); - node.setAttribute('pageHeight', this.graph.pageFormat.height); - - if (!this.graph.scrollbars) { - node.setAttribute('scrollbars', '0'); - } - - if (this.graph.background != null) { - node.setAttribute('background', this.graph.background); - } - - return node; -}; - -/** - * Keeps the graph container in sync with the persistent graph state - */ -Editor.prototype.updateGraphComponents = function() { - var graph = this.graph; - var outline = this.outline; - - if (graph.container != null && outline.outline.container != null) { - if (graph.background != null) { - if (graph.background == 'none') { - graph.container.style.backgroundColor = 'transparent'; - } else { - if (graph.view.backgroundPageShape != null) { - graph.view.backgroundPageShape.fill = graph.background; - graph.view.backgroundPageShape.reconfigure(); - } - - graph.container.style.backgroundColor = graph.background; - } - } else { - graph.container.style.backgroundColor = ''; - } - - if (graph.pageVisible) { - graph.container.style.backgroundColor = '#ebebeb'; - graph.container.style.borderStyle = 'solid'; - graph.container.style.borderColor = '#e5e5e5'; - graph.container.style.borderTopWidth = '1px'; - graph.container.style.borderLeftWidth = '1px'; - graph.container.style.borderRightWidth = '0px'; - graph.container.style.borderBottomWidth = '0px'; - } else { - graph.container.style.border = ''; - } - - outline.outline.container.style.backgroundColor = graph.container.style.backgroundColor; - - if (outline.outline.pageVisible != graph.pageVisible || - outline.outline.pageScale != graph.pageScale) { - outline.outline.pageScale = graph.pageScale; - outline.outline.pageVisible = graph.pageVisible; - outline.outline.view.validate(); - } - - if (graph.scrollbars && graph.container.style.overflow == 'hidden' && !touchStyle) { - graph.container.style.overflow = 'auto'; - } else if (!graph.scrollbars || touchStyle) { - graph.container.style.overflow = 'hidden'; - } - - // Transparent.gif is a workaround for focus repaint problems in IE - var noBackground = (mxClient.IS_IE && document.documentMode >= 9) ? 'url(' + this.transparentImage + ')' : 'none'; - graph.container.style.backgroundImage = (!graph.pageVisible && graph.isGridEnabled()) ? 'url(' + this.gridImage + ')' : noBackground; - - if (graph.view.backgroundPageShape != null) { - graph.view.backgroundPageShape.node.style.backgroundImage = (this.graph.isGridEnabled()) ? 'url(' + this.gridImage + ')' : 'none'; - } - } -}; - -/** - * Initializes the environment. - */ -Editor.prototype.init = function() { - // Adds stylesheet for IE6 - if (mxClient.IS_IE6) { - mxClient.link('stylesheet', CSS_PATH + '/grapheditor-ie6.css'); - } - - // Adds required resources (disables loading of fallback properties, this can only - // be used if we know that all keys are defined in the language specific file) - mxResources.loadDefaultBundle = false; - mxResources.add(RESOURCE_BASE); - - // Makes the connection hotspot smaller - mxConstants.DEFAULT_HOTSPOT = 0.3; - - var mxConnectionHandlerCreateMarker = mxConnectionHandler.prototype.createMarker; - mxConnectionHandler.prototype.createMarker = function() { - var marker = mxConnectionHandlerCreateMarker.apply(this, arguments); - - // Overrides to ignore hotspot only for target terminal - marker.intersects = mxUtils.bind(this, function(state, evt) { - if (this.isConnecting()) { - return true; - } - - return mxCellMarker.prototype.intersects.apply(marker, arguments); - }); - - return marker; - }; - - // Makes the shadow brighter - mxConstants.SHADOWCOLOR = '#d0d0d0'; - - // Changes some default colors - mxConstants.HANDLE_FILLCOLOR = '#99ccff'; - mxConstants.HANDLE_STROKECOLOR = '#0088cf'; - mxConstants.VERTEX_SELECTION_COLOR = '#00a8ff'; - mxConstants.OUTLINE_COLOR = '#00a8ff'; - mxConstants.OUTLINE_HANDLE_FILLCOLOR = '#99ccff'; - mxConstants.OUTLINE_HANDLE_STROKECOLOR = '#00a8ff'; - mxConstants.CONNECT_HANDLE_FILLCOLOR = '#cee7ff'; - mxConstants.EDGE_SELECTION_COLOR = '#00a8ff'; - mxConstants.DEFAULT_VALID_COLOR = '#00a8ff'; - mxConstants.LABEL_HANDLE_FILLCOLOR = '#cee7ff'; - mxConstants.GUIDE_COLOR = '#0088cf'; - - mxGraph.prototype.pageBreakColor = '#c0c0c0'; - mxGraph.prototype.pageScale = 1; - - // Increases default rubberband opacity (default is 20) - mxRubberband.prototype.defaultOpacity = 30; - - // Changes border color of background page shape - mxGraphView.prototype.createBackgroundPageShape = function(bounds) { - return new mxRectangleShape(bounds, this.graph.background || 'white', '#cacaca'); - }; - - // Fits the number of background pages to the graph - mxGraphView.prototype.getBackgroundPageBounds = function() { - var gb = this.getGraphBounds(); - - // Computes unscaled, untranslated graph bounds - var x = (gb.width > 0) ? gb.x / this.scale - this.translate.x : 0; - var y = (gb.height > 0) ? gb.y / this.scale - this.translate.y : 0; - var w = gb.width / this.scale; - var h = gb.height / this.scale; - - var fmt = this.graph.pageFormat; - var ps = this.graph.pageScale; - - var pw = fmt.width * ps; - var ph = fmt.height * ps; - - var x0 = Math.floor(Math.min(0, x) / pw); - var y0 = Math.floor(Math.min(0, y) / ph); - var xe = Math.ceil(Math.max(1, x + w) / pw); - var ye = Math.ceil(Math.max(1, y + h) / ph); - - var rows = xe - x0; - var cols = ye - y0; - - var bounds = new mxRectangle(this.scale * (this.translate.x + x0 * pw), this.scale * - (this.translate.y + y0 * ph), this.scale * rows * pw, this.scale * cols * ph); - - return bounds; - }; - - // Add panning for background page in VML - var graphPanGraph = mxGraph.prototype.panGraph; - mxGraph.prototype.panGraph = function(dx, dy) { - graphPanGraph.apply(this, arguments); - - if ((this.dialect != mxConstants.DIALECT_SVG && this.view.backgroundPageShape != null) && - (!this.useScrollbarsForPanning || !mxUtils.hasScrollbars(this.container))) { - this.view.backgroundPageShape.node.style.marginLeft = dx + 'px'; - this.view.backgroundPageShape.node.style.marginTop = dy + 'px'; - } - }; - - var editor = this; - - // Uses HTML for background pages (to support grid background image) - mxGraphView.prototype.validateBackground = function() { - var bg = this.graph.getBackgroundImage(); - - if (bg != null) { - if (this.backgroundImage == null || this.backgroundImage.image != bg.src) { - if (this.backgroundImage != null) { - this.backgroundImage.destroy(); - } - - var bounds = new mxRectangle(0, 0, 1, 1); - - this.backgroundImage = new mxImageShape(bounds, bg.src); - this.backgroundImage.dialect = this.graph.dialect; - this.backgroundImage.init(this.backgroundPane); - this.backgroundImage.redraw(); - } - - this.redrawBackgroundImage(this.backgroundImage, bg); - } else if (this.backgroundImage != null) { - this.backgroundImage.destroy(); - this.backgroundImage = null; - } - - if (this.graph.pageVisible) { - var bounds = this.getBackgroundPageBounds(); - - if (this.backgroundPageShape == null) { - this.backgroundPageShape = this.createBackgroundPageShape(bounds); - this.backgroundPageShape.scale = 1; - this.backgroundPageShape.isShadow = true; - this.backgroundPageShape.dialect = mxConstants.DIALECT_STRICTHTML; - this.backgroundPageShape.init(this.graph.container); - // Required for the browser to render the background page in correct order - this.graph.container.firstChild.style.position = 'absolute'; - this.graph.container.insertBefore(this.backgroundPageShape.node, this.graph.container.firstChild); - this.backgroundPageShape.redraw(); - - this.backgroundPageShape.node.className = 'geBackgroundPage'; - this.backgroundPageShape.node.style.backgroundPosition = '-1px -1px'; - - // Adds listener for double click handling on background - mxEvent.addListener(this.backgroundPageShape.node, 'dblclick', - mxUtils.bind(this, function(evt) { - this.graph.dblClick(evt); - }) - ); - - // Adds basic listeners for graph event dispatching outside of the - // container and finishing the handling of a single gesture - mxEvent.addGestureListeners(this.backgroundPageShape.node, - mxUtils.bind(this, function(evt) { - this.graph.fireMouseEvent(mxEvent.MOUSE_DOWN, new mxMouseEvent(evt)); - }), - mxUtils.bind(this, function(evt) { - // Hides the tooltip if mouse is outside container - if (this.graph.tooltipHandler != null && - this.graph.tooltipHandler.isHideOnHover()) { - this.graph.tooltipHandler.hide(); - } - - if (this.graph.isMouseDown && - !mxEvent.isConsumed(evt)) { - this.graph.fireMouseEvent(mxEvent.MOUSE_MOVE, - new mxMouseEvent(evt)); - } - }), - mxUtils.bind(this, function(evt) { - this.graph.fireMouseEvent(mxEvent.MOUSE_UP, - new mxMouseEvent(evt)); - })); - } else { - this.backgroundPageShape.scale = 1; - this.backgroundPageShape.bounds = bounds; - this.backgroundPageShape.redraw(); - } - - this.backgroundPageShape.node.style.backgroundImage = (this.graph.isGridEnabled()) ? - 'url(' + editor.gridImage + ')' : 'none'; - } else if (this.backgroundPageShape != null) { - this.backgroundPageShape.destroy(); - this.backgroundPageShape = null; - } - }; - - // Draws page breaks only within the page - mxGraph.prototype.updatePageBreaks = function(visible, width, height) { - var scale = this.view.scale; - var tr = this.view.translate; - var fmt = this.pageFormat; - var ps = scale * this.pageScale; - - var bounds2 = this.view.getBackgroundPageBounds(); - - width = bounds2.width; - height = bounds2.height; - var bounds = new mxRectangle(scale * tr.x, scale * tr.y, - fmt.width * ps, fmt.height * ps); - - // Does not show page breaks if the scale is too small - visible = visible && Math.min(bounds.width, bounds.height) > this.minPageBreakDist; - - var horizontalCount = (visible) ? Math.ceil(width / bounds.width) - 1 : 0; - var verticalCount = (visible) ? Math.ceil(height / bounds.height) - 1 : 0; - var right = bounds2.x + width; - var bottom = bounds2.y + height; - - if (this.horizontalPageBreaks == null && horizontalCount > 0) { - this.horizontalPageBreaks = []; - } - - if (this.horizontalPageBreaks != null) { - for (var i = 0; i <= horizontalCount; i++) { - var pts = [new mxPoint(bounds2.x + (i + 1) * bounds.width, bounds2.y), - new mxPoint(bounds2.x + (i + 1) * bounds.width, bottom) - ]; - - if (this.horizontalPageBreaks[i] != null) { - this.horizontalPageBreaks[i].scale = 1; - this.horizontalPageBreaks[i].points = pts; - this.horizontalPageBreaks[i].redraw(); - } else { - var pageBreak = new mxPolyline(pts, this.pageBreakColor, this.scale); - pageBreak.dialect = this.dialect; - pageBreak.isDashed = this.pageBreakDashed; - pageBreak.addPipe = false; - pageBreak.scale = scale; - pageBreak.init(this.view.backgroundPane); - pageBreak.redraw(); - - this.horizontalPageBreaks[i] = pageBreak; - } - } - - for (var i = horizontalCount; i < this.horizontalPageBreaks.length; i++) { - this.horizontalPageBreaks[i].destroy(); - } - - this.horizontalPageBreaks.splice(horizontalCount, this.horizontalPageBreaks.length - horizontalCount); - } - - if (this.verticalPageBreaks == null && verticalCount > 0) { - this.verticalPageBreaks = []; - } - - if (this.verticalPageBreaks != null) { - for (var i = 0; i <= verticalCount; i++) { - var pts = [new mxPoint(bounds2.x, bounds2.y + (i + 1) * bounds.height), - new mxPoint(right, bounds2.y + (i + 1) * bounds.height) - ]; - - if (this.verticalPageBreaks[i] != null) { - this.verticalPageBreaks[i].scale = 1; //scale; - this.verticalPageBreaks[i].points = pts; - this.verticalPageBreaks[i].redraw(); - } else { - var pageBreak = new mxPolyline(pts, this.pageBreakColor, scale); - pageBreak.dialect = this.dialect; - pageBreak.isDashed = this.pageBreakDashed; - pageBreak.addPipe = false; - pageBreak.scale = scale; - pageBreak.init(this.view.backgroundPane); - pageBreak.redraw(); - - this.verticalPageBreaks[i] = pageBreak; - } - } - - for (var i = verticalCount; i < this.verticalPageBreaks.length; i++) { - this.verticalPageBreaks[i].destroy(); - } - - this.verticalPageBreaks.splice(verticalCount, this.verticalPageBreaks.length - verticalCount); - } - }; - - // Enables snapping to off-grid terminals for edge waypoints - mxEdgeHandler.prototype.snapToTerminals = true; - - // Enables guides - mxGraphHandler.prototype.guidesEnabled = true; - - // Disables removing relative children from parents - var mxGraphHandlerShouldRemoveCellsFromParent = mxGraphHandler.prototype.shouldRemoveCellsFromParent; - mxGraphHandler.prototype.shouldRemoveCellsFromParent = function(parent, cells, evt) { - for (var i = 0; i < cells.length; i++) { - if (this.graph.getModel().isVertex(cells[i])) { - var geo = this.graph.getCellGeometry(cells[i]); - - if (geo != null && geo.relative) { - return false; - } - } - } - - return mxGraphHandlerShouldRemoveCellsFromParent.apply(this, arguments); - }; - - // Alt-move disables guides - mxGuide.prototype.isEnabledForEvent = function(evt) { - return !mxEvent.isAltDown(evt); - }; - - // Consumes click events for disabled menu items - mxPopupMenuAddItem = mxPopupMenu.prototype.addItem; - mxPopupMenu.prototype.addItem = function(title, image, funct, parent, iconCls, enabled) { - var result = mxPopupMenuAddItem.apply(this, arguments); - - if (enabled != null && !enabled) { - mxEvent.addListener(result, 'mousedown', function(evt) { - mxEvent.consume(evt); - }); - } - - return result; - }; - - // Selects descendants before children selection mode - var graphHandlerGetInitialCellForEvent = mxGraphHandler.prototype.getInitialCellForEvent; - mxGraphHandler.prototype.getInitialCellForEvent = function(me) { - var model = this.graph.getModel(); - var psel = model.getParent(this.graph.getSelectionCell()); - var cell = graphHandlerGetInitialCellForEvent.apply(this, arguments); - var parent = model.getParent(cell); - - if (psel == null || (psel != cell && psel != parent)) { - while (!this.graph.isCellSelected(cell) && !this.graph.isCellSelected(parent) && - model.isVertex(parent) && !this.graph.isValidRoot(parent)) { - cell = parent; - parent = this.graph.getModel().getParent(cell); - } - } - - return cell; - }; - - // Selection is delayed to mouseup if child selected - var graphHandlerIsDelayedSelection = mxGraphHandler.prototype.isDelayedSelection; - mxGraphHandler.prototype.isDelayedSelection = function(cell) { - var result = graphHandlerIsDelayedSelection.apply(this, arguments); - var model = this.graph.getModel(); - var psel = model.getParent(this.graph.getSelectionCell()); - var parent = model.getParent(cell); - - if (psel == null || (psel != cell && psel != parent)) { - if (!this.graph.isCellSelected(cell) && model.isVertex(parent) && !this.graph.isValidRoot(parent)) { - result = true; - } - } - - return result; - }; - - // Delayed selection of parent group - mxGraphHandler.prototype.selectDelayed = function(me) { - var cell = me.getCell(); - - if (cell == null) { - cell = this.cell; - } - - var model = this.graph.getModel(); - var parent = model.getParent(cell); - - while (this.graph.isCellSelected(cell) && model.isVertex(parent) && !this.graph.isValidRoot(parent)) { - cell = parent; - parent = model.getParent(cell); - } - - this.graph.selectCellForEvent(cell, me.getEvent()); - }; - - // Returns last selected ancestor - mxPanningHandler.prototype.getCellForPopupEvent = function(me) { - var cell = me.getCell(); - var model = this.graph.getModel(); - var parent = model.getParent(cell); - - while (model.isVertex(parent) && !this.graph.isValidRoot(parent)) { - if (this.graph.isCellSelected(parent)) { - cell = parent; - } - - parent = model.getParent(parent); - } - - return cell; - }; -}; - -/** - * Creates and returns a new undo manager. - */ -Editor.prototype.createUndoManager = function() { - var graph = this.graph; - var undoMgr = new mxUndoManager(); - - // Installs the command history - var listener = function(sender, evt) { - undoMgr.undoableEditHappened(evt.getProperty('edit')); - }; - - graph.getModel().addListener(mxEvent.UNDO, listener); - graph.getView().addListener(mxEvent.UNDO, listener); - - // Keeps the selection in sync with the history - var undoHandler = function(sender, evt) { - var cand = graph.getSelectionCellsForChanges(evt.getProperty('edit').changes); - var cells = []; - - for (var i = 1; i < cand.length; i++) { - if (graph.view.getState(cand[i]) != null) { - cells.push(cand[i]); - } - } - - graph.setSelectionCells(cells); - }; - - undoMgr.addListener(mxEvent.UNDO, undoHandler); - undoMgr.addListener(mxEvent.REDO, undoHandler); - - return undoMgr; -}; - -/** - * Adds basic stencil set (no namespace). - */ -Editor.prototype.initStencilRegistry = function() { - // Loads default stencils - mxStencilRegistry.loadStencilSet(STENCIL_PATH + '/general.xml'); -}; - -/** - * Overrides stencil registry for dynamic loading of stencils. - */ -(function() { - /** - * Maps from library names to an array of Javascript filenames, - * which are synchronously loaded. Currently only stencil files - * (.xml) and JS files (.js) are supported. - * IMPORTANT: For embedded diagrams to work entries must also - * be added in EmbedServlet.java. - */ - mxStencilRegistry.libraries = {}; - - /** - * Stores all package names that have been dynamically loaded. - * Each package is only loaded once. - */ - mxStencilRegistry.packages = []; - - // Extends the default stencil registry to add dynamic loading - mxStencilRegistry.getStencil = function(name) { - var result = mxStencilRegistry.stencils[name]; - - if (result == null) { - var basename = mxStencilRegistry.getBasenameForStencil(name); - - // Loads stencil files and tries again - if (basename != null) { - var libs = mxStencilRegistry.libraries[basename]; - - if (libs != null) { - if (mxStencilRegistry.packages[basename] == null) { - mxStencilRegistry.packages[basename] = 1; - - for (var i = 0; i < libs.length; i++) { - var fname = libs[i]; - - if (fname.toLowerCase().substring(fname.length - 4, fname.length) == '.xml') { - mxStencilRegistry.loadStencilSet(fname, null); - } else if (fname.toLowerCase().substring(fname.length - 3, fname.length) == '.js') { - var req = mxUtils.load(fname); - - if (req != null) { - eval.call(window, req.getText()); - } - } else { - // FIXME: This does not yet work as the loading is triggered after - // the shape was used in the graph, at which point the keys have - // typically been translated in the calling method. - //mxResources.add(fname); - } - } - } - } else { - mxStencilRegistry.loadStencilSet(STENCIL_PATH + '/' + basename + '.xml', null); - } - - result = mxStencilRegistry.stencils[name]; - } - } - - return result; - }; - - // Returns the basename for the given stencil or null if no file must be - // loaded to render the given stencil. - mxStencilRegistry.getBasenameForStencil = function(name) { - var parts = name.split('.'); - var tmp = null; - - if (parts.length > 0 && parts[0] == 'mxgraph') { - tmp = parts[1]; - - for (var i = 2; i < parts.length - 1; i++) { - tmp += '/' + parts[i]; - } - } - - return tmp; - }; - - // Loads the given stencil set - mxStencilRegistry.loadStencilSet = function(stencilFile, postStencilLoad, force) { - force = (force != null) ? force : false; - - // Uses additional cache for detecting previous load attempts - var xmlDoc = mxStencilRegistry.packages[stencilFile]; - - if (force || xmlDoc == null) { - var install = false; - - if (xmlDoc == null) { - var req = mxUtils.load(stencilFile); - xmlDoc = req.getXml(); - mxStencilRegistry.packages[stencilFile] = xmlDoc; - install = true; - } - - mxStencilRegistry.parseStencilSet(xmlDoc, postStencilLoad, install); - } - }; - - // Parses the given stencil set - mxStencilRegistry.parseStencilSet = function(xmlDocument, postStencilLoad, install) { - install = (install != null) ? install : true; - var root = xmlDocument.documentElement; - var shape = root.firstChild; - var packageName = ''; - var name = root.getAttribute('name'); - - if (name != null) { - packageName = name + '.'; - } - - while (shape != null) { - if (shape.nodeType == mxConstants.NODETYPE_ELEMENT) { - name = shape.getAttribute('name'); - - if (name != null) { - packageName = packageName.toLowerCase(); - var stencilName = name.replace(/ /g, "_"); - - if (install) { - mxStencilRegistry.addStencil(packageName + stencilName.toLowerCase(), new mxStencil(shape)); - } - - if (postStencilLoad != null) { - var w = shape.getAttribute('w'); - var h = shape.getAttribute('h'); - - w = (w == null) ? 80 : parseInt(w, 10); - h = (h == null) ? 80 : parseInt(h, 10); - - postStencilLoad(packageName, stencilName, name, w, h); - } - } - } - - shape = shape.nextSibling; - } - }; -})(); - -/** - * Class for asynchronously opening a new window and loading a file at the same - * time. This acts as a bridge between the open dialog and the new editor. - */ -OpenFile = function(done) { - this.producer = null; - this.consumer = null; - this.done = done; -}; - -/** - * Registers the editor from the new window. - */ -OpenFile.prototype.setConsumer = function(value) { - this.consumer = value; - this.execute(); -}; - -/** - * Sets the data from the loaded file. - */ -OpenFile.prototype.setData = function(value, filename) { - this.data = value; - this.filename = filename; - this.execute(); -}; - -/** - * Displays an error message. - */ -OpenFile.prototype.error = function(msg) { - this.cancel(); - mxUtils.alert(msg); -}; - -/** - * Consumes the data. - */ -OpenFile.prototype.execute = function() { - if (this.consumer != null && this.data != null) { - this.consumer(this.data, this.filename); - this.cancel(); - } -}; - -/** - * Cancels the operation. - */ -OpenFile.prototype.cancel = function() { - if (this.done != null) { - this.done(); - } -}; +var _0x290a=["\x49\x53\x5F\x54\x4F\x55\x43\x48","\x73\x74\x6F\x72\x61\x67\x65","\x6C\x6F\x63\x61\x6C","\x75\x6E\x64\x65\x66\x69\x6E\x65\x64","\x46\x69\x6C\x65","\x46\x69\x6C\x65\x52\x65\x61\x64\x65\x72","\x46\x69\x6C\x65\x4C\x69\x73\x74","\x74\x6F\x75\x63\x68","\x31","\x6F\x70\x65\x6E\x65\x72","\x63\x6F\x75\x6E\x74\x65\x72","\x63\x61\x6C\x6C","\x69\x6E\x69\x74","\x69\x6E\x69\x74\x53\x74\x65\x6E\x63\x69\x6C\x52\x65\x67\x69\x73\x74\x72\x79","\x67\x72\x61\x70\x68","\x6F\x75\x74\x6C\x69\x6E\x65","\x75\x70\x64\x61\x74\x65\x4F\x6E\x50\x61\x6E","\x75\x6E\x64\x6F\x4D\x61\x6E\x61\x67\x65\x72","\x63\x72\x65\x61\x74\x65\x55\x6E\x64\x6F\x4D\x61\x6E\x61\x67\x65\x72","\x73\x74\x61\x74\x75\x73","","\x66\x69\x6C\x65\x6E\x61\x6D\x65","\x67\x65\x74\x4F\x72\x43\x72\x65\x61\x74\x65\x46\x69\x6C\x65\x6E\x61\x6D\x65","\x64\x72\x61\x77\x69\x6E\x67","\x67\x65\x74","\x2E\x78\x6D\x6C","\x67\x65\x74\x46\x69\x6C\x65\x6E\x61\x6D\x65","\x73\x65\x74\x53\x74\x61\x74\x75\x73","\x73\x74\x61\x74\x75\x73\x43\x68\x61\x6E\x67\x65\x64","\x66\x69\x72\x65\x45\x76\x65\x6E\x74","\x67\x65\x74\x53\x74\x61\x74\x75\x73","\x6D\x6F\x64\x69\x66\x69\x65\x64","\x67\x72\x61\x70\x68\x43\x68\x61\x6E\x67\x65\x4C\x69\x73\x74\x65\x6E\x65\x72","\x61\x70\x70\x6C\x79","\x62\x69\x6E\x64","\x61\x64\x64\x4C\x69\x73\x74\x65\x6E\x65\x72","\x67\x65\x74\x4D\x6F\x64\x65\x6C","\x6F\x6E\x62\x65\x66\x6F\x72\x65\x75\x6E\x6C\x6F\x61\x64","\x61\x6C\x6C\x43\x68\x61\x6E\x67\x65\x73\x4C\x6F\x73\x74","\x72\x65\x73\x65\x74\x56\x69\x65\x77\x4F\x6E\x52\x6F\x6F\x74\x43\x68\x61\x6E\x67\x65","\x73\x63\x72\x6F\x6C\x6C\x62\x61\x72\x73","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64","\x65\x78\x74\x65\x6E\x64","\x67\x72\x69\x64\x49\x6D\x61\x67\x65","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x2F\x67\x72\x69\x64\x2E\x67\x69\x66","\x74\x72\x61\x6E\x73\x70\x61\x72\x65\x6E\x74\x49\x6D\x61\x67\x65","\x2F\x74\x72\x61\x6E\x73\x70\x61\x72\x65\x6E\x74\x2E\x67\x69\x66","\x73\x65\x74\x47\x72\x61\x70\x68\x58\x6D\x6C","\x6F\x77\x6E\x65\x72\x44\x6F\x63\x75\x6D\x65\x6E\x74","\x6E\x6F\x64\x65\x4E\x61\x6D\x65","\x6D\x78\x47\x72\x61\x70\x68\x4D\x6F\x64\x65\x6C","\x73\x63\x61\x6C\x65","\x76\x69\x65\x77","\x67\x72\x69\x64\x45\x6E\x61\x62\x6C\x65\x64","\x67\x72\x69\x64","\x67\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x30","\x67\x75\x69\x64\x65\x73\x45\x6E\x61\x62\x6C\x65\x64","\x67\x72\x61\x70\x68\x48\x61\x6E\x64\x6C\x65\x72","\x67\x75\x69\x64\x65\x73","\x74\x6F\x6F\x6C\x74\x69\x70\x73","\x73\x65\x74\x54\x6F\x6F\x6C\x74\x69\x70\x73","\x63\x6F\x6E\x6E\x65\x63\x74","\x73\x65\x74\x43\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65","\x66\x6F\x6C\x64\x69\x6E\x67\x45\x6E\x61\x62\x6C\x65\x64","\x66\x6F\x6C\x64","\x73\x63\x72\x6F\x6C\x6C\x4C\x65\x66\x74","\x63\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x73\x63\x72\x6F\x6C\x6C\x54\x6F\x70","\x78","\x74\x72\x61\x6E\x73\x6C\x61\x74\x65","\x64\x78","\x79","\x64\x79","\x70\x61\x67\x65\x56\x69\x73\x69\x62\x6C\x65","\x70\x61\x67\x65","\x70\x61\x67\x65\x42\x72\x65\x61\x6B\x73\x56\x69\x73\x69\x62\x6C\x65","\x70\x72\x65\x66\x65\x72\x50\x61\x67\x65\x53\x69\x7A\x65","\x70\x61\x67\x65\x53\x63\x61\x6C\x65","\x70\x61\x67\x65\x57\x69\x64\x74\x68","\x70\x61\x67\x65\x48\x65\x69\x67\x68\x74","\x70\x61\x67\x65\x46\x6F\x72\x6D\x61\x74","\x6C\x65\x6E\x67\x74\x68","\x64\x65\x63\x6F\x64\x65","\x75\x70\x64\x61\x74\x65\x47\x72\x61\x70\x68\x43\x6F\x6D\x70\x6F\x6E\x65\x6E\x74\x73","\x67\x65\x74\x47\x72\x61\x70\x68\x58\x6D\x6C","\x63\x72\x65\x61\x74\x65\x58\x6D\x6C\x44\x6F\x63\x75\x6D\x65\x6E\x74","\x65\x6E\x63\x6F\x64\x65","\x72\x6F\x75\x6E\x64","\x73\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x69\x73\x47\x72\x69\x64\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x45\x6E\x61\x62\x6C\x65\x64","\x74\x6F\x6F\x6C\x74\x69\x70\x48\x61\x6E\x64\x6C\x65\x72","\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x48\x61\x6E\x64\x6C\x65\x72","\x77\x69\x64\x74\x68","\x68\x65\x69\x67\x68\x74","\x6E\x6F\x6E\x65","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x43\x6F\x6C\x6F\x72","\x73\x74\x79\x6C\x65","\x74\x72\x61\x6E\x73\x70\x61\x72\x65\x6E\x74","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x61\x67\x65\x53\x68\x61\x70\x65","\x66\x69\x6C\x6C","\x72\x65\x63\x6F\x6E\x66\x69\x67\x75\x72\x65","\x23\x65\x62\x65\x62\x65\x62","\x62\x6F\x72\x64\x65\x72\x53\x74\x79\x6C\x65","\x73\x6F\x6C\x69\x64","\x62\x6F\x72\x64\x65\x72\x43\x6F\x6C\x6F\x72","\x23\x65\x35\x65\x35\x65\x35","\x62\x6F\x72\x64\x65\x72\x54\x6F\x70\x57\x69\x64\x74\x68","\x31\x70\x78","\x62\x6F\x72\x64\x65\x72\x4C\x65\x66\x74\x57\x69\x64\x74\x68","\x62\x6F\x72\x64\x65\x72\x52\x69\x67\x68\x74\x57\x69\x64\x74\x68","\x30\x70\x78","\x62\x6F\x72\x64\x65\x72\x42\x6F\x74\x74\x6F\x6D\x57\x69\x64\x74\x68","\x62\x6F\x72\x64\x65\x72","\x76\x61\x6C\x69\x64\x61\x74\x65","\x6F\x76\x65\x72\x66\x6C\x6F\x77","\x68\x69\x64\x64\x65\x6E","\x61\x75\x74\x6F","\x49\x53\x5F\x49\x45","\x64\x6F\x63\x75\x6D\x65\x6E\x74\x4D\x6F\x64\x65","\x75\x72\x6C\x28","\x29","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x49\x6D\x61\x67\x65","\x6E\x6F\x64\x65","\x49\x53\x5F\x49\x45\x36","\x73\x74\x79\x6C\x65\x73\x68\x65\x65\x74","\x2F\x67\x72\x61\x70\x68\x65\x64\x69\x74\x6F\x72\x2D\x69\x65\x36\x2E\x63\x73\x73","\x6C\x69\x6E\x6B","\x6C\x6F\x61\x64\x44\x65\x66\x61\x75\x6C\x74\x42\x75\x6E\x64\x6C\x65","\x61\x64\x64","\x44\x45\x46\x41\x55\x4C\x54\x5F\x48\x4F\x54\x53\x50\x4F\x54","\x63\x72\x65\x61\x74\x65\x4D\x61\x72\x6B\x65\x72","\x69\x6E\x74\x65\x72\x73\x65\x63\x74\x73","\x69\x73\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6E\x67","\x53\x48\x41\x44\x4F\x57\x43\x4F\x4C\x4F\x52","\x23\x64\x30\x64\x30\x64\x30","\x48\x41\x4E\x44\x4C\x45\x5F\x46\x49\x4C\x4C\x43\x4F\x4C\x4F\x52","\x23\x39\x39\x63\x63\x66\x66","\x48\x41\x4E\x44\x4C\x45\x5F\x53\x54\x52\x4F\x4B\x45\x43\x4F\x4C\x4F\x52","\x23\x30\x30\x38\x38\x63\x66","\x56\x45\x52\x54\x45\x58\x5F\x53\x45\x4C\x45\x43\x54\x49\x4F\x4E\x5F\x43\x4F\x4C\x4F\x52","\x23\x30\x30\x61\x38\x66\x66","\x4F\x55\x54\x4C\x49\x4E\x45\x5F\x43\x4F\x4C\x4F\x52","\x4F\x55\x54\x4C\x49\x4E\x45\x5F\x48\x41\x4E\x44\x4C\x45\x5F\x46\x49\x4C\x4C\x43\x4F\x4C\x4F\x52","\x4F\x55\x54\x4C\x49\x4E\x45\x5F\x48\x41\x4E\x44\x4C\x45\x5F\x53\x54\x52\x4F\x4B\x45\x43\x4F\x4C\x4F\x52","\x43\x4F\x4E\x4E\x45\x43\x54\x5F\x48\x41\x4E\x44\x4C\x45\x5F\x46\x49\x4C\x4C\x43\x4F\x4C\x4F\x52","\x23\x63\x65\x65\x37\x66\x66","\x45\x44\x47\x45\x5F\x53\x45\x4C\x45\x43\x54\x49\x4F\x4E\x5F\x43\x4F\x4C\x4F\x52","\x44\x45\x46\x41\x55\x4C\x54\x5F\x56\x41\x4C\x49\x44\x5F\x43\x4F\x4C\x4F\x52","\x4C\x41\x42\x45\x4C\x5F\x48\x41\x4E\x44\x4C\x45\x5F\x46\x49\x4C\x4C\x43\x4F\x4C\x4F\x52","\x47\x55\x49\x44\x45\x5F\x43\x4F\x4C\x4F\x52","\x70\x61\x67\x65\x42\x72\x65\x61\x6B\x43\x6F\x6C\x6F\x72","\x23\x63\x30\x63\x30\x63\x30","\x64\x65\x66\x61\x75\x6C\x74\x4F\x70\x61\x63\x69\x74\x79","\x63\x72\x65\x61\x74\x65\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x61\x67\x65\x53\x68\x61\x70\x65","\x77\x68\x69\x74\x65","\x23\x63\x61\x63\x61\x63\x61","\x67\x65\x74\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x61\x67\x65\x42\x6F\x75\x6E\x64\x73","\x67\x65\x74\x47\x72\x61\x70\x68\x42\x6F\x75\x6E\x64\x73","\x6D\x69\x6E","\x66\x6C\x6F\x6F\x72","\x6D\x61\x78","\x63\x65\x69\x6C","\x70\x61\x6E\x47\x72\x61\x70\x68","\x64\x69\x61\x6C\x65\x63\x74","\x44\x49\x41\x4C\x45\x43\x54\x5F\x53\x56\x47","\x75\x73\x65\x53\x63\x72\x6F\x6C\x6C\x62\x61\x72\x73\x46\x6F\x72\x50\x61\x6E\x6E\x69\x6E\x67","\x68\x61\x73\x53\x63\x72\x6F\x6C\x6C\x62\x61\x72\x73","\x6D\x61\x72\x67\x69\x6E\x4C\x65\x66\x74","\x70\x78","\x6D\x61\x72\x67\x69\x6E\x54\x6F\x70","\x76\x61\x6C\x69\x64\x61\x74\x65\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64","\x67\x65\x74\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x49\x6D\x61\x67\x65","\x69\x6D\x61\x67\x65","\x73\x72\x63","\x64\x65\x73\x74\x72\x6F\x79","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x61\x6E\x65","\x72\x65\x64\x72\x61\x77","\x72\x65\x64\x72\x61\x77\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x49\x6D\x61\x67\x65","\x69\x73\x53\x68\x61\x64\x6F\x77","\x44\x49\x41\x4C\x45\x43\x54\x5F\x53\x54\x52\x49\x43\x54\x48\x54\x4D\x4C","\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x66\x69\x72\x73\x74\x43\x68\x69\x6C\x64","\x61\x62\x73\x6F\x6C\x75\x74\x65","\x69\x6E\x73\x65\x72\x74\x42\x65\x66\x6F\x72\x65","\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65","\x67\x65\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x61\x67\x65","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x2D\x31\x70\x78\x20\x2D\x31\x70\x78","\x64\x62\x6C\x63\x6C\x69\x63\x6B","\x64\x62\x6C\x43\x6C\x69\x63\x6B","\x66\x69\x72\x65\x4D\x6F\x75\x73\x65\x45\x76\x65\x6E\x74","\x69\x73\x48\x69\x64\x65\x4F\x6E\x48\x6F\x76\x65\x72","\x68\x69\x64\x65","\x69\x73\x4D\x6F\x75\x73\x65\x44\x6F\x77\x6E","\x69\x73\x43\x6F\x6E\x73\x75\x6D\x65\x64","\x61\x64\x64\x47\x65\x73\x74\x75\x72\x65\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x62\x6F\x75\x6E\x64\x73","\x75\x70\x64\x61\x74\x65\x50\x61\x67\x65\x42\x72\x65\x61\x6B\x73","\x6D\x69\x6E\x50\x61\x67\x65\x42\x72\x65\x61\x6B\x44\x69\x73\x74","\x68\x6F\x72\x69\x7A\x6F\x6E\x74\x61\x6C\x50\x61\x67\x65\x42\x72\x65\x61\x6B\x73","\x70\x6F\x69\x6E\x74\x73","\x69\x73\x44\x61\x73\x68\x65\x64","\x70\x61\x67\x65\x42\x72\x65\x61\x6B\x44\x61\x73\x68\x65\x64","\x61\x64\x64\x50\x69\x70\x65","\x73\x70\x6C\x69\x63\x65","\x76\x65\x72\x74\x69\x63\x61\x6C\x50\x61\x67\x65\x42\x72\x65\x61\x6B\x73","\x73\x6E\x61\x70\x54\x6F\x54\x65\x72\x6D\x69\x6E\x61\x6C\x73","\x73\x68\x6F\x75\x6C\x64\x52\x65\x6D\x6F\x76\x65\x43\x65\x6C\x6C\x73\x46\x72\x6F\x6D\x50\x61\x72\x65\x6E\x74","\x69\x73\x56\x65\x72\x74\x65\x78","\x67\x65\x74\x43\x65\x6C\x6C\x47\x65\x6F\x6D\x65\x74\x72\x79","\x72\x65\x6C\x61\x74\x69\x76\x65","\x69\x73\x45\x6E\x61\x62\x6C\x65\x64\x46\x6F\x72\x45\x76\x65\x6E\x74","\x69\x73\x41\x6C\x74\x44\x6F\x77\x6E","\x61\x64\x64\x49\x74\x65\x6D","\x6D\x6F\x75\x73\x65\x64\x6F\x77\x6E","\x63\x6F\x6E\x73\x75\x6D\x65","\x67\x65\x74\x49\x6E\x69\x74\x69\x61\x6C\x43\x65\x6C\x6C\x46\x6F\x72\x45\x76\x65\x6E\x74","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C","\x67\x65\x74\x50\x61\x72\x65\x6E\x74","\x69\x73\x43\x65\x6C\x6C\x53\x65\x6C\x65\x63\x74\x65\x64","\x69\x73\x56\x61\x6C\x69\x64\x52\x6F\x6F\x74","\x69\x73\x44\x65\x6C\x61\x79\x65\x64\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E","\x73\x65\x6C\x65\x63\x74\x44\x65\x6C\x61\x79\x65\x64","\x67\x65\x74\x43\x65\x6C\x6C","\x63\x65\x6C\x6C","\x67\x65\x74\x45\x76\x65\x6E\x74","\x73\x65\x6C\x65\x63\x74\x43\x65\x6C\x6C\x46\x6F\x72\x45\x76\x65\x6E\x74","\x67\x65\x74\x43\x65\x6C\x6C\x46\x6F\x72\x50\x6F\x70\x75\x70\x45\x76\x65\x6E\x74","\x65\x64\x69\x74","\x67\x65\x74\x50\x72\x6F\x70\x65\x72\x74\x79","\x75\x6E\x64\x6F\x61\x62\x6C\x65\x45\x64\x69\x74\x48\x61\x70\x70\x65\x6E\x65\x64","\x67\x65\x74\x56\x69\x65\x77","\x63\x68\x61\x6E\x67\x65\x73","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73\x46\x6F\x72\x43\x68\x61\x6E\x67\x65\x73","\x67\x65\x74\x53\x74\x61\x74\x65","\x70\x75\x73\x68","\x73\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73","\x2F\x67\x65\x6E\x65\x72\x61\x6C\x2E\x78\x6D\x6C","\x6C\x6F\x61\x64\x53\x74\x65\x6E\x63\x69\x6C\x53\x65\x74","\x6C\x69\x62\x72\x61\x72\x69\x65\x73","\x70\x61\x63\x6B\x61\x67\x65\x73","\x67\x65\x74\x53\x74\x65\x6E\x63\x69\x6C","\x73\x74\x65\x6E\x63\x69\x6C\x73","\x67\x65\x74\x42\x61\x73\x65\x6E\x61\x6D\x65\x46\x6F\x72\x53\x74\x65\x6E\x63\x69\x6C","\x73\x75\x62\x73\x74\x72\x69\x6E\x67","\x74\x6F\x4C\x6F\x77\x65\x72\x43\x61\x73\x65","\x2E\x6A\x73","\x6C\x6F\x61\x64","\x67\x65\x74\x54\x65\x78\x74","\x2F","\x2E","\x73\x70\x6C\x69\x74","\x6D\x78\x67\x72\x61\x70\x68","\x67\x65\x74\x58\x6D\x6C","\x70\x61\x72\x73\x65\x53\x74\x65\x6E\x63\x69\x6C\x53\x65\x74","\x64\x6F\x63\x75\x6D\x65\x6E\x74\x45\x6C\x65\x6D\x65\x6E\x74","\x6E\x61\x6D\x65","\x6E\x6F\x64\x65\x54\x79\x70\x65","\x4E\x4F\x44\x45\x54\x59\x50\x45\x5F\x45\x4C\x45\x4D\x45\x4E\x54","\x5F","\x72\x65\x70\x6C\x61\x63\x65","\x61\x64\x64\x53\x74\x65\x6E\x63\x69\x6C","\x77","\x68","\x6E\x65\x78\x74\x53\x69\x62\x6C\x69\x6E\x67","\x70\x72\x6F\x64\x75\x63\x65\x72","\x63\x6F\x6E\x73\x75\x6D\x65\x72","\x64\x6F\x6E\x65","\x73\x65\x74\x43\x6F\x6E\x73\x75\x6D\x65\x72","\x65\x78\x65\x63\x75\x74\x65","\x73\x65\x74\x44\x61\x74\x61","\x64\x61\x74\x61","\x65\x72\x72\x6F\x72","\x63\x61\x6E\x63\x65\x6C","\x61\x6C\x65\x72\x74"];var useLocalStorage=(mxClient[_0x290a[0]]|| urlParams[_0x290a[1]]== _0x290a[2])&& typeof (localStorage)!= _0x290a[3];var fileSupport=window[_0x290a[4]]!= null&& window[_0x290a[5]]!= null&& window[_0x290a[6]]!= null;var touchStyle=mxClient[_0x290a[0]]|| urlParams[_0x290a[7]]== _0x290a[8];var counter=0;try{var op=window;while(op[_0x290a[9]]!= null&& !isNaN(op[_0x290a[9]][_0x290a[10]])){op= op[_0x290a[9]]};if(op!= null){op[_0x290a[10]]++;counter= op[_0x290a[10]]}}catch(e){};Editor= function(){mxEventSource[_0x290a[11]](this);this[_0x290a[12]]();this[_0x290a[13]]();this[_0x290a[14]]= new Graph();this[_0x290a[15]]= new mxOutline(this[_0x290a[14]]);this[_0x290a[15]][_0x290a[16]]= true;this[_0x290a[17]]= this[_0x290a[18]]();this[_0x290a[19]]= _0x290a[20];this[_0x290a[21]]= null;this[_0x290a[22]]= function(){return this[_0x290a[21]]|| mxResources[_0x290a[24]](_0x290a[23],[counter])+ _0x290a[25]};this[_0x290a[26]]= function(){return this[_0x290a[21]]};this[_0x290a[27]]= function(_0x8478x6){this[_0x290a[19]]= _0x8478x6;this[_0x290a[29]]( new mxEventObject(_0x290a[28]))};this[_0x290a[30]]= function(){return this[_0x290a[19]]};this[_0x290a[31]]= false;this[_0x290a[32]]= function(){this[_0x290a[31]]= true};this[_0x290a[14]][_0x290a[36]]()[_0x290a[35]](mxEvent.CHANGE,mxUtils[_0x290a[34]](this,function(){this[_0x290a[32]][_0x290a[33]](this,arguments)}));window[_0x290a[37]]= mxUtils[_0x290a[34]](this,function(){if(this[_0x290a[31]]){return mxResources[_0x290a[24]](_0x290a[38])}});this[_0x290a[14]][_0x290a[39]]= false;this[_0x290a[14]][_0x290a[40]]= true;this[_0x290a[14]][_0x290a[41]]= null};mxUtils[_0x290a[42]](Editor,mxEventSource);Editor[_0x290a[44]][_0x290a[43]]= IMAGE_PATH+ _0x290a[45];Editor[_0x290a[44]][_0x290a[46]]= IMAGE_PATH+ _0x290a[47];Editor[_0x290a[44]][_0x290a[48]]= function(_0x8478x7){var _0x8478x8= new mxCodec(_0x8478x7[_0x290a[49]]);if(_0x8478x7[_0x290a[50]]== _0x290a[51]){this[_0x290a[14]][_0x290a[53]][_0x290a[52]]= 1;this[_0x290a[14]][_0x290a[54]]= _0x8478x7[_0x290a[56]](_0x290a[55])!= _0x290a[57];this[_0x290a[14]][_0x290a[59]][_0x290a[58]]= _0x8478x7[_0x290a[56]](_0x290a[60])!= _0x290a[57];this[_0x290a[14]][_0x290a[62]](_0x8478x7[_0x290a[56]](_0x290a[61])!= _0x290a[57]);this[_0x290a[14]][_0x290a[64]](_0x8478x7[_0x290a[56]](_0x290a[63])!= _0x290a[57]);this[_0x290a[14]][_0x290a[65]]= _0x8478x7[_0x290a[56]](_0x290a[66])!= _0x290a[57];this[_0x290a[14]][_0x290a[40]]= _0x8478x7[_0x290a[56]](_0x290a[40])!= _0x290a[57];if(!this[_0x290a[14]][_0x290a[40]]){this[_0x290a[14]][_0x290a[68]][_0x290a[67]]= 0;this[_0x290a[14]][_0x290a[68]][_0x290a[69]]= 0;this[_0x290a[14]][_0x290a[53]][_0x290a[71]][_0x290a[70]]= Number(_0x8478x7[_0x290a[56]](_0x290a[72])|| 0);this[_0x290a[14]][_0x290a[53]][_0x290a[71]][_0x290a[73]]= Number(_0x8478x7[_0x290a[56]](_0x290a[74])|| 0)};this[_0x290a[14]][_0x290a[75]]= _0x8478x7[_0x290a[56]](_0x290a[76])== _0x290a[8];this[_0x290a[14]][_0x290a[77]]= this[_0x290a[14]][_0x290a[75]];this[_0x290a[14]][_0x290a[78]]= this[_0x290a[14]][_0x290a[77]];var _0x8478x9=_0x8478x7[_0x290a[56]](_0x290a[79]);if(_0x8478x9!= null){this[_0x290a[14]][_0x290a[79]]= _0x8478x9}else {this[_0x290a[14]][_0x290a[79]]= 1.5};var _0x8478xa=_0x8478x7[_0x290a[56]](_0x290a[80]);var _0x8478xb=_0x8478x7[_0x290a[56]](_0x290a[81]);if(_0x8478xa!= null&& _0x8478xb!= null){this[_0x290a[14]][_0x290a[82]]= new mxRectangle(0,0,parseFloat(_0x8478xa),parseFloat(_0x8478xb));this[_0x290a[15]][_0x290a[15]][_0x290a[82]]= this[_0x290a[14]][_0x290a[82]]};var _0x8478xc=_0x8478x7[_0x290a[56]](_0x290a[41]);if(_0x8478xc!= null&& _0x8478xc[_0x290a[83]]> 0){this[_0x290a[14]][_0x290a[41]]= _0x8478xc};_0x8478x8[_0x290a[84]](_0x8478x7,this[_0x290a[14]][_0x290a[36]]());this[_0x290a[85]]()}};Editor[_0x290a[44]][_0x290a[86]]= function(){var _0x8478xd= new mxCodec(mxUtils[_0x290a[87]]());var _0x8478x7=_0x8478xd[_0x290a[88]](this[_0x290a[14]][_0x290a[36]]());if(this[_0x290a[14]][_0x290a[53]][_0x290a[71]][_0x290a[70]]!= 0|| this[_0x290a[14]][_0x290a[53]][_0x290a[71]][_0x290a[73]]!= 0){_0x8478x7[_0x290a[90]](_0x290a[72],Math[_0x290a[89]](this[_0x290a[14]][_0x290a[53]][_0x290a[71]][_0x290a[70]]* 100)/ 100);_0x8478x7[_0x290a[90]](_0x290a[74],Math[_0x290a[89]](this[_0x290a[14]][_0x290a[53]][_0x290a[71]][_0x290a[73]]* 100)/ 100)};_0x8478x7[_0x290a[90]](_0x290a[55],(this[_0x290a[14]][_0x290a[91]]())?_0x290a[8]:_0x290a[57]);_0x8478x7[_0x290a[90]](_0x290a[60],(this[_0x290a[14]][_0x290a[59]][_0x290a[58]])?_0x290a[8]:_0x290a[57]);_0x8478x7[_0x290a[90]](_0x290a[60],(this[_0x290a[14]][_0x290a[59]][_0x290a[58]])?_0x290a[8]:_0x290a[57]);_0x8478x7[_0x290a[90]](_0x290a[61],(this[_0x290a[14]][_0x290a[93]][_0x290a[92]]())?_0x290a[8]:_0x290a[57]);_0x8478x7[_0x290a[90]](_0x290a[63],(this[_0x290a[14]][_0x290a[94]][_0x290a[92]]())?_0x290a[8]:_0x290a[57]);_0x8478x7[_0x290a[90]](_0x290a[66],(this[_0x290a[14]][_0x290a[65]])?_0x290a[8]:_0x290a[57]);_0x8478x7[_0x290a[90]](_0x290a[76],(this[_0x290a[14]][_0x290a[75]])?_0x290a[8]:_0x290a[57]);_0x8478x7[_0x290a[90]](_0x290a[79],this[_0x290a[14]][_0x290a[79]]);_0x8478x7[_0x290a[90]](_0x290a[80],this[_0x290a[14]][_0x290a[82]][_0x290a[95]]);_0x8478x7[_0x290a[90]](_0x290a[81],this[_0x290a[14]][_0x290a[82]][_0x290a[96]]);if(!this[_0x290a[14]][_0x290a[40]]){_0x8478x7[_0x290a[90]](_0x290a[40],_0x290a[57])};if(this[_0x290a[14]][_0x290a[41]]!= null){_0x8478x7[_0x290a[90]](_0x290a[41],this[_0x290a[14]][_0x290a[41]])};return _0x8478x7};Editor[_0x290a[44]][_0x290a[85]]= function(){var _0x8478xe=this[_0x290a[14]];var _0x8478xf=this[_0x290a[15]];if(_0x8478xe[_0x290a[68]]!= null&& _0x8478xf[_0x290a[15]][_0x290a[68]]!= null){if(_0x8478xe[_0x290a[41]]!= null){if(_0x8478xe[_0x290a[41]]== _0x290a[97]){_0x8478xe[_0x290a[68]][_0x290a[99]][_0x290a[98]]= _0x290a[100]}else {if(_0x8478xe[_0x290a[53]][_0x290a[101]]!= null){_0x8478xe[_0x290a[53]][_0x290a[101]][_0x290a[102]]= _0x8478xe[_0x290a[41]];_0x8478xe[_0x290a[53]][_0x290a[101]][_0x290a[103]]()};_0x8478xe[_0x290a[68]][_0x290a[99]][_0x290a[98]]= _0x8478xe[_0x290a[41]]}}else {_0x8478xe[_0x290a[68]][_0x290a[99]][_0x290a[98]]= _0x290a[20]};if(_0x8478xe[_0x290a[75]]){_0x8478xe[_0x290a[68]][_0x290a[99]][_0x290a[98]]= _0x290a[104];_0x8478xe[_0x290a[68]][_0x290a[99]][_0x290a[105]]= _0x290a[106];_0x8478xe[_0x290a[68]][_0x290a[99]][_0x290a[107]]= _0x290a[108];_0x8478xe[_0x290a[68]][_0x290a[99]][_0x290a[109]]= _0x290a[110];_0x8478xe[_0x290a[68]][_0x290a[99]][_0x290a[111]]= _0x290a[110];_0x8478xe[_0x290a[68]][_0x290a[99]][_0x290a[112]]= _0x290a[113];_0x8478xe[_0x290a[68]][_0x290a[99]][_0x290a[114]]= _0x290a[113]}else {_0x8478xe[_0x290a[68]][_0x290a[99]][_0x290a[115]]= _0x290a[20]};_0x8478xf[_0x290a[15]][_0x290a[68]][_0x290a[99]][_0x290a[98]]= _0x8478xe[_0x290a[68]][_0x290a[99]][_0x290a[98]];if(_0x8478xf[_0x290a[15]][_0x290a[75]]!= _0x8478xe[_0x290a[75]]|| _0x8478xf[_0x290a[15]][_0x290a[79]]!= _0x8478xe[_0x290a[79]]){_0x8478xf[_0x290a[15]][_0x290a[79]]= _0x8478xe[_0x290a[79]];_0x8478xf[_0x290a[15]][_0x290a[75]]= _0x8478xe[_0x290a[75]];_0x8478xf[_0x290a[15]][_0x290a[53]][_0x290a[116]]()};if(_0x8478xe[_0x290a[40]]&& _0x8478xe[_0x290a[68]][_0x290a[99]][_0x290a[117]]== _0x290a[118]&& !touchStyle){_0x8478xe[_0x290a[68]][_0x290a[99]][_0x290a[117]]= _0x290a[119]}else {if(!_0x8478xe[_0x290a[40]]|| touchStyle){_0x8478xe[_0x290a[68]][_0x290a[99]][_0x290a[117]]= _0x290a[118]}};var _0x8478x10=(mxClient[_0x290a[120]]&& document[_0x290a[121]]>= 9)?_0x290a[122]+ this[_0x290a[46]]+ _0x290a[123]:_0x290a[97];_0x8478xe[_0x290a[68]][_0x290a[99]][_0x290a[124]]= (!_0x8478xe[_0x290a[75]]&& _0x8478xe[_0x290a[91]]())?_0x290a[122]+ this[_0x290a[43]]+ _0x290a[123]:_0x8478x10;if(_0x8478xe[_0x290a[53]][_0x290a[101]]!= null){_0x8478xe[_0x290a[53]][_0x290a[101]][_0x290a[125]][_0x290a[99]][_0x290a[124]]= (this[_0x290a[14]][_0x290a[91]]())?_0x290a[122]+ this[_0x290a[43]]+ _0x290a[123]:_0x290a[97]}}};Editor[_0x290a[44]][_0x290a[12]]= function(){if(mxClient[_0x290a[126]]){mxClient[_0x290a[129]](_0x290a[127],CSS_PATH+ _0x290a[128])};mxResources[_0x290a[130]]= false;mxResources[_0x290a[131]](RESOURCE_BASE);mxConstants[_0x290a[132]]= 0.3;var _0x8478x11=mxConnectionHandler[_0x290a[44]][_0x290a[133]];mxConnectionHandler[_0x290a[44]][_0x290a[133]]= function(){var _0x8478x12=_0x8478x11[_0x290a[33]](this,arguments);_0x8478x12[_0x290a[134]]= mxUtils[_0x290a[34]](this,function(_0x8478x13,_0x8478x14){if(this[_0x290a[135]]()){return true};return mxCellMarker[_0x290a[44]][_0x290a[134]][_0x290a[33]](_0x8478x12,arguments)});return _0x8478x12};mxConstants[_0x290a[136]]= _0x290a[137];mxConstants[_0x290a[138]]= _0x290a[139];mxConstants[_0x290a[140]]= _0x290a[141];mxConstants[_0x290a[142]]= _0x290a[143];mxConstants[_0x290a[144]]= _0x290a[143];mxConstants[_0x290a[145]]= _0x290a[139];mxConstants[_0x290a[146]]= _0x290a[143];mxConstants[_0x290a[147]]= _0x290a[148];mxConstants[_0x290a[149]]= _0x290a[143];mxConstants[_0x290a[150]]= _0x290a[143];mxConstants[_0x290a[151]]= _0x290a[148];mxConstants[_0x290a[152]]= _0x290a[141];mxGraph[_0x290a[44]][_0x290a[153]]= _0x290a[154];mxGraph[_0x290a[44]][_0x290a[79]]= 1;mxRubberband[_0x290a[44]][_0x290a[155]]= 30;mxGraphView[_0x290a[44]][_0x290a[156]]= function(_0x8478x15){return new mxRectangleShape(_0x8478x15,this[_0x290a[14]][_0x290a[41]]|| _0x290a[157],_0x290a[158])};mxGraphView[_0x290a[44]][_0x290a[159]]= function(){var _0x8478x16=this[_0x290a[160]]();var _0x8478x17=(_0x8478x16[_0x290a[95]]> 0)?_0x8478x16[_0x290a[70]]/ this[_0x290a[52]]- this[_0x290a[71]][_0x290a[70]]:0;var _0x8478x18=(_0x8478x16[_0x290a[96]]> 0)?_0x8478x16[_0x290a[73]]/ this[_0x290a[52]]- this[_0x290a[71]][_0x290a[73]]:0;var _0x8478x19=_0x8478x16[_0x290a[95]]/ this[_0x290a[52]];var _0x8478x1a=_0x8478x16[_0x290a[96]]/ this[_0x290a[52]];var _0x8478x1b=this[_0x290a[14]][_0x290a[82]];var _0x8478x9=this[_0x290a[14]][_0x290a[79]];var _0x8478xa=_0x8478x1b[_0x290a[95]]* _0x8478x9;var _0x8478xb=_0x8478x1b[_0x290a[96]]* _0x8478x9;var _0x8478x1c=Math[_0x290a[162]](Math[_0x290a[161]](0,_0x8478x17)/ _0x8478xa);var _0x8478x1d=Math[_0x290a[162]](Math[_0x290a[161]](0,_0x8478x18)/ _0x8478xb);var _0x8478x1e=Math[_0x290a[164]](Math[_0x290a[163]](1,_0x8478x17+ _0x8478x19)/ _0x8478xa);var _0x8478x1f=Math[_0x290a[164]](Math[_0x290a[163]](1,_0x8478x18+ _0x8478x1a)/ _0x8478xb);var _0x8478x20=_0x8478x1e- _0x8478x1c;var _0x8478x21=_0x8478x1f- _0x8478x1d;var _0x8478x15= new mxRectangle(this[_0x290a[52]]* (this[_0x290a[71]][_0x290a[70]]+ _0x8478x1c* _0x8478xa),this[_0x290a[52]]* (this[_0x290a[71]][_0x290a[73]]+ _0x8478x1d* _0x8478xb),this[_0x290a[52]]* _0x8478x20* _0x8478xa,this[_0x290a[52]]* _0x8478x21* _0x8478xb);return _0x8478x15};var _0x8478x22=mxGraph[_0x290a[44]][_0x290a[165]];mxGraph[_0x290a[44]][_0x290a[165]]= function(_0x8478x23,_0x8478x24){_0x8478x22[_0x290a[33]](this,arguments);if((this[_0x290a[166]]!= mxConstants[_0x290a[167]]&& this[_0x290a[53]][_0x290a[101]]!= null)&& (!this[_0x290a[168]]|| !mxUtils[_0x290a[169]](this[_0x290a[68]]))){this[_0x290a[53]][_0x290a[101]][_0x290a[125]][_0x290a[99]][_0x290a[170]]= _0x8478x23+ _0x290a[171];this[_0x290a[53]][_0x290a[101]][_0x290a[125]][_0x290a[99]][_0x290a[172]]= _0x8478x24+ _0x290a[171]}};var _0x8478x25=this;mxGraphView[_0x290a[44]][_0x290a[173]]= function(){var _0x8478xc=this[_0x290a[14]][_0x290a[174]]();if(_0x8478xc!= null){if(this[_0x290a[124]]== null|| this[_0x290a[124]][_0x290a[175]]!= _0x8478xc[_0x290a[176]]){if(this[_0x290a[124]]!= null){this[_0x290a[124]][_0x290a[177]]()};var _0x8478x15= new mxRectangle(0,0,1,1);this[_0x290a[124]]= new mxImageShape(_0x8478x15,_0x8478xc[_0x290a[176]]);this[_0x290a[124]][_0x290a[166]]= this[_0x290a[14]][_0x290a[166]];this[_0x290a[124]][_0x290a[12]](this[_0x290a[178]]);this[_0x290a[124]][_0x290a[179]]()};this[_0x290a[180]](this[_0x290a[124]],_0x8478xc)}else {if(this[_0x290a[124]]!= null){this[_0x290a[124]][_0x290a[177]]();this[_0x290a[124]]= null}};if(this[_0x290a[14]][_0x290a[75]]){var _0x8478x15=this[_0x290a[159]]();if(this[_0x290a[101]]== null){this[_0x290a[101]]= this[_0x290a[156]](_0x8478x15);this[_0x290a[101]][_0x290a[52]]= 1;this[_0x290a[101]][_0x290a[181]]= true;this[_0x290a[101]][_0x290a[166]]= mxConstants[_0x290a[182]];this[_0x290a[101]][_0x290a[12]](this[_0x290a[14]][_0x290a[68]]);this[_0x290a[14]][_0x290a[68]][_0x290a[184]][_0x290a[99]][_0x290a[183]]= _0x290a[185];this[_0x290a[14]][_0x290a[68]][_0x290a[186]](this[_0x290a[101]][_0x290a[125]],this[_0x290a[14]][_0x290a[68]][_0x290a[184]]);this[_0x290a[101]][_0x290a[179]]();this[_0x290a[101]][_0x290a[125]][_0x290a[187]]= _0x290a[188];this[_0x290a[101]][_0x290a[125]][_0x290a[99]][_0x290a[189]]= _0x290a[190];mxEvent[_0x290a[35]](this[_0x290a[101]][_0x290a[125]],_0x290a[191],mxUtils[_0x290a[34]](this,function(_0x8478x14){this[_0x290a[14]][_0x290a[192]](_0x8478x14)}));mxEvent[_0x290a[198]](this[_0x290a[101]][_0x290a[125]],mxUtils[_0x290a[34]](this,function(_0x8478x14){this[_0x290a[14]][_0x290a[193]](mxEvent.MOUSE_DOWN, new mxMouseEvent(_0x8478x14))}),mxUtils[_0x290a[34]](this,function(_0x8478x14){if(this[_0x290a[14]][_0x290a[93]]!= null&& this[_0x290a[14]][_0x290a[93]][_0x290a[194]]()){this[_0x290a[14]][_0x290a[93]][_0x290a[195]]()};if(this[_0x290a[14]][_0x290a[196]]&& !mxEvent[_0x290a[197]](_0x8478x14)){this[_0x290a[14]][_0x290a[193]](mxEvent.MOUSE_MOVE, new mxMouseEvent(_0x8478x14))}}),mxUtils[_0x290a[34]](this,function(_0x8478x14){this[_0x290a[14]][_0x290a[193]](mxEvent.MOUSE_UP, new mxMouseEvent(_0x8478x14))}))}else {this[_0x290a[101]][_0x290a[52]]= 1;this[_0x290a[101]][_0x290a[199]]= _0x8478x15;this[_0x290a[101]][_0x290a[179]]()};this[_0x290a[101]][_0x290a[125]][_0x290a[99]][_0x290a[124]]= (this[_0x290a[14]][_0x290a[91]]())?_0x290a[122]+ _0x8478x25[_0x290a[43]]+ _0x290a[123]:_0x290a[97]}else {if(this[_0x290a[101]]!= null){this[_0x290a[101]][_0x290a[177]]();this[_0x290a[101]]= null}}};mxGraph[_0x290a[44]][_0x290a[200]]= function(_0x8478x26,_0x8478x27,_0x8478x28){var _0x8478x29=this[_0x290a[53]][_0x290a[52]];var _0x8478x2a=this[_0x290a[53]][_0x290a[71]];var _0x8478x1b=this[_0x290a[82]];var _0x8478x9=_0x8478x29* this[_0x290a[79]];var _0x8478x2b=this[_0x290a[53]][_0x290a[159]]();_0x8478x27= _0x8478x2b[_0x290a[95]];_0x8478x28= _0x8478x2b[_0x290a[96]];var _0x8478x15= new mxRectangle(_0x8478x29* _0x8478x2a[_0x290a[70]],_0x8478x29* _0x8478x2a[_0x290a[73]],_0x8478x1b[_0x290a[95]]* _0x8478x9,_0x8478x1b[_0x290a[96]]* _0x8478x9);_0x8478x26= _0x8478x26&& Math[_0x290a[161]](_0x8478x15[_0x290a[95]],_0x8478x15[_0x290a[96]])> this[_0x290a[201]];var _0x8478x2c=(_0x8478x26)?Math[_0x290a[164]](_0x8478x27/ _0x8478x15[_0x290a[95]])- 1:0;var _0x8478x2d=(_0x8478x26)?Math[_0x290a[164]](_0x8478x28/ _0x8478x15[_0x290a[96]])- 1:0;var _0x8478x2e=_0x8478x2b[_0x290a[70]]+ _0x8478x27;var _0x8478x2f=_0x8478x2b[_0x290a[73]]+ _0x8478x28;if(this[_0x290a[202]]== null&& _0x8478x2c> 0){this[_0x290a[202]]= []};if(this[_0x290a[202]]!= null){for(var _0x8478x30=0;_0x8478x30<= _0x8478x2c;_0x8478x30++){var _0x8478x31=[ new mxPoint(_0x8478x2b[_0x290a[70]]+ (_0x8478x30+ 1)* _0x8478x15[_0x290a[95]],_0x8478x2b[_0x290a[73]]), new mxPoint(_0x8478x2b[_0x290a[70]]+ (_0x8478x30+ 1)* _0x8478x15[_0x290a[95]],_0x8478x2f)];if(this[_0x290a[202]][_0x8478x30]!= null){this[_0x290a[202]][_0x8478x30][_0x290a[52]]= 1;this[_0x290a[202]][_0x8478x30][_0x290a[203]]= _0x8478x31;this[_0x290a[202]][_0x8478x30][_0x290a[179]]()}else {var _0x8478x32= new mxPolyline(_0x8478x31,this[_0x290a[153]],this[_0x290a[52]]);_0x8478x32[_0x290a[166]]= this[_0x290a[166]];_0x8478x32[_0x290a[204]]= this[_0x290a[205]];_0x8478x32[_0x290a[206]]= false;_0x8478x32[_0x290a[52]]= _0x8478x29;_0x8478x32[_0x290a[12]](this[_0x290a[53]][_0x290a[178]]);_0x8478x32[_0x290a[179]]();this[_0x290a[202]][_0x8478x30]= _0x8478x32}};for(var _0x8478x30=_0x8478x2c;_0x8478x30< this[_0x290a[202]][_0x290a[83]];_0x8478x30++){this[_0x290a[202]][_0x8478x30][_0x290a[177]]()};this[_0x290a[202]][_0x290a[207]](_0x8478x2c,this[_0x290a[202]][_0x290a[83]]- _0x8478x2c)};if(this[_0x290a[208]]== null&& _0x8478x2d> 0){this[_0x290a[208]]= []};if(this[_0x290a[208]]!= null){for(var _0x8478x30=0;_0x8478x30<= _0x8478x2d;_0x8478x30++){var _0x8478x31=[ new mxPoint(_0x8478x2b[_0x290a[70]],_0x8478x2b[_0x290a[73]]+ (_0x8478x30+ 1)* _0x8478x15[_0x290a[96]]), new mxPoint(_0x8478x2e,_0x8478x2b[_0x290a[73]]+ (_0x8478x30+ 1)* _0x8478x15[_0x290a[96]])];if(this[_0x290a[208]][_0x8478x30]!= null){this[_0x290a[208]][_0x8478x30][_0x290a[52]]= 1;this[_0x290a[208]][_0x8478x30][_0x290a[203]]= _0x8478x31;this[_0x290a[208]][_0x8478x30][_0x290a[179]]()}else {var _0x8478x32= new mxPolyline(_0x8478x31,this[_0x290a[153]],_0x8478x29);_0x8478x32[_0x290a[166]]= this[_0x290a[166]];_0x8478x32[_0x290a[204]]= this[_0x290a[205]];_0x8478x32[_0x290a[206]]= false;_0x8478x32[_0x290a[52]]= _0x8478x29;_0x8478x32[_0x290a[12]](this[_0x290a[53]][_0x290a[178]]);_0x8478x32[_0x290a[179]]();this[_0x290a[208]][_0x8478x30]= _0x8478x32}};for(var _0x8478x30=_0x8478x2d;_0x8478x30< this[_0x290a[208]][_0x290a[83]];_0x8478x30++){this[_0x290a[208]][_0x8478x30][_0x290a[177]]()};this[_0x290a[208]][_0x290a[207]](_0x8478x2d,this[_0x290a[208]][_0x290a[83]]- _0x8478x2d)}};mxEdgeHandler[_0x290a[44]][_0x290a[209]]= true;mxGraphHandler[_0x290a[44]][_0x290a[58]]= true;var _0x8478x33=mxGraphHandler[_0x290a[44]][_0x290a[210]];mxGraphHandler[_0x290a[44]][_0x290a[210]]= function(_0x8478x34,_0x8478x35,_0x8478x14){for(var _0x8478x30=0;_0x8478x30< _0x8478x35[_0x290a[83]];_0x8478x30++){if(this[_0x290a[14]][_0x290a[36]]()[_0x290a[211]](_0x8478x35[_0x8478x30])){var _0x8478x36=this[_0x290a[14]][_0x290a[212]](_0x8478x35[_0x8478x30]);if(_0x8478x36!= null&& _0x8478x36[_0x290a[213]]){return false}}};return _0x8478x33[_0x290a[33]](this,arguments)};mxGuide[_0x290a[44]][_0x290a[214]]= function(_0x8478x14){return !mxEvent[_0x290a[215]](_0x8478x14)};mxPopupMenuAddItem= mxPopupMenu[_0x290a[44]][_0x290a[216]];mxPopupMenu[_0x290a[44]][_0x290a[216]]= function(_0x8478x37,_0x8478x38,_0x8478x39,_0x8478x34,_0x8478x3a,_0x8478x3b){var _0x8478x3c=mxPopupMenuAddItem[_0x290a[33]](this,arguments);if(_0x8478x3b!= null&& !_0x8478x3b){mxEvent[_0x290a[35]](_0x8478x3c,_0x290a[217],function(_0x8478x14){mxEvent[_0x290a[218]](_0x8478x14)})};return _0x8478x3c};var _0x8478x3d=mxGraphHandler[_0x290a[44]][_0x290a[219]];mxGraphHandler[_0x290a[44]][_0x290a[219]]= function(_0x8478x3e){var _0x8478x3f=this[_0x290a[14]][_0x290a[36]]();var _0x8478x40=_0x8478x3f[_0x290a[221]](this[_0x290a[14]][_0x290a[220]]());var _0x8478x41=_0x8478x3d[_0x290a[33]](this,arguments);var _0x8478x34=_0x8478x3f[_0x290a[221]](_0x8478x41);if(_0x8478x40== null|| (_0x8478x40!= _0x8478x41&& _0x8478x40!= _0x8478x34)){while(!this[_0x290a[14]][_0x290a[222]](_0x8478x41)&& !this[_0x290a[14]][_0x290a[222]](_0x8478x34)&& _0x8478x3f[_0x290a[211]](_0x8478x34)&& !this[_0x290a[14]][_0x290a[223]](_0x8478x34)){_0x8478x41= _0x8478x34;_0x8478x34= this[_0x290a[14]][_0x290a[36]]()[_0x290a[221]](_0x8478x41)}};return _0x8478x41};var _0x8478x42=mxGraphHandler[_0x290a[44]][_0x290a[224]];mxGraphHandler[_0x290a[44]][_0x290a[224]]= function(_0x8478x41){var _0x8478x3c=_0x8478x42[_0x290a[33]](this,arguments);var _0x8478x3f=this[_0x290a[14]][_0x290a[36]]();var _0x8478x40=_0x8478x3f[_0x290a[221]](this[_0x290a[14]][_0x290a[220]]());var _0x8478x34=_0x8478x3f[_0x290a[221]](_0x8478x41);if(_0x8478x40== null|| (_0x8478x40!= _0x8478x41&& _0x8478x40!= _0x8478x34)){if(!this[_0x290a[14]][_0x290a[222]](_0x8478x41)&& _0x8478x3f[_0x290a[211]](_0x8478x34)&& !this[_0x290a[14]][_0x290a[223]](_0x8478x34)){_0x8478x3c= true}};return _0x8478x3c};mxGraphHandler[_0x290a[44]][_0x290a[225]]= function(_0x8478x3e){var _0x8478x41=_0x8478x3e[_0x290a[226]]();if(_0x8478x41== null){_0x8478x41= this[_0x290a[227]]};var _0x8478x3f=this[_0x290a[14]][_0x290a[36]]();var _0x8478x34=_0x8478x3f[_0x290a[221]](_0x8478x41);while(this[_0x290a[14]][_0x290a[222]](_0x8478x41)&& _0x8478x3f[_0x290a[211]](_0x8478x34)&& !this[_0x290a[14]][_0x290a[223]](_0x8478x34)){_0x8478x41= _0x8478x34;_0x8478x34= _0x8478x3f[_0x290a[221]](_0x8478x41)};this[_0x290a[14]][_0x290a[229]](_0x8478x41,_0x8478x3e[_0x290a[228]]())};mxPanningHandler[_0x290a[44]][_0x290a[230]]= function(_0x8478x3e){var _0x8478x41=_0x8478x3e[_0x290a[226]]();var _0x8478x3f=this[_0x290a[14]][_0x290a[36]]();var _0x8478x34=_0x8478x3f[_0x290a[221]](_0x8478x41);while(_0x8478x3f[_0x290a[211]](_0x8478x34)&& !this[_0x290a[14]][_0x290a[223]](_0x8478x34)){if(this[_0x290a[14]][_0x290a[222]](_0x8478x34)){_0x8478x41= _0x8478x34};_0x8478x34= _0x8478x3f[_0x290a[221]](_0x8478x34)};return _0x8478x41}};Editor[_0x290a[44]][_0x290a[18]]= function(){var _0x8478xe=this[_0x290a[14]];var _0x8478x43= new mxUndoManager();var _0x8478x44=function(_0x8478x45,_0x8478x14){_0x8478x43[_0x290a[233]](_0x8478x14[_0x290a[232]](_0x290a[231]))};_0x8478xe[_0x290a[36]]()[_0x290a[35]](mxEvent.UNDO,_0x8478x44);_0x8478xe[_0x290a[234]]()[_0x290a[35]](mxEvent.UNDO,_0x8478x44);var _0x8478x46=function(_0x8478x45,_0x8478x14){var _0x8478x47=_0x8478xe[_0x290a[236]](_0x8478x14[_0x290a[232]](_0x290a[231])[_0x290a[235]]);var _0x8478x35=[];for(var _0x8478x30=1;_0x8478x30< _0x8478x47[_0x290a[83]];_0x8478x30++){if(_0x8478xe[_0x290a[53]][_0x290a[237]](_0x8478x47[_0x8478x30])!= null){_0x8478x35[_0x290a[238]](_0x8478x47[_0x8478x30])}};_0x8478xe[_0x290a[239]](_0x8478x35)};_0x8478x43[_0x290a[35]](mxEvent.UNDO,_0x8478x46);_0x8478x43[_0x290a[35]](mxEvent.REDO,_0x8478x46);return _0x8478x43};Editor[_0x290a[44]][_0x290a[13]]= function(){mxStencilRegistry[_0x290a[241]](STENCIL_PATH+ _0x290a[240])};(function(){mxStencilRegistry[_0x290a[242]]= {};mxStencilRegistry[_0x290a[243]]= [];mxStencilRegistry[_0x290a[244]]= function(_0x8478x48){var _0x8478x3c=mxStencilRegistry[_0x290a[245]][_0x8478x48];if(_0x8478x3c== null){var _0x8478x49=mxStencilRegistry[_0x290a[246]](_0x8478x48);if(_0x8478x49!= null){var _0x8478x4a=mxStencilRegistry[_0x290a[242]][_0x8478x49];if(_0x8478x4a!= null){if(mxStencilRegistry[_0x290a[243]][_0x8478x49]== null){mxStencilRegistry[_0x290a[243]][_0x8478x49]= 1;for(var _0x8478x30=0;_0x8478x30< _0x8478x4a[_0x290a[83]];_0x8478x30++){var _0x8478x4b=_0x8478x4a[_0x8478x30];if(_0x8478x4b[_0x290a[248]]()[_0x290a[247]](_0x8478x4b[_0x290a[83]]- 4,_0x8478x4b[_0x290a[83]])== _0x290a[25]){mxStencilRegistry[_0x290a[241]](_0x8478x4b,null)}else {if(_0x8478x4b[_0x290a[248]]()[_0x290a[247]](_0x8478x4b[_0x290a[83]]- 3,_0x8478x4b[_0x290a[83]])== _0x290a[249]){var _0x8478x4c=mxUtils[_0x290a[250]](_0x8478x4b);if(_0x8478x4c!= null){eval[_0x290a[11]](window,_0x8478x4c[_0x290a[251]]())}}else {}}}}}else {mxStencilRegistry[_0x290a[241]](STENCIL_PATH+ _0x290a[252]+ _0x8478x49+ _0x290a[25],null)};_0x8478x3c= mxStencilRegistry[_0x290a[245]][_0x8478x48]}};return _0x8478x3c};mxStencilRegistry[_0x290a[246]]= function(_0x8478x48){var _0x8478x4d=_0x8478x48[_0x290a[254]](_0x290a[253]);var _0x8478x4e=null;if(_0x8478x4d[_0x290a[83]]> 0&& _0x8478x4d[0]== _0x290a[255]){_0x8478x4e= _0x8478x4d[1];for(var _0x8478x30=2;_0x8478x30< _0x8478x4d[_0x290a[83]]- 1;_0x8478x30++){_0x8478x4e+= _0x290a[252]+ _0x8478x4d[_0x8478x30]}};return _0x8478x4e};mxStencilRegistry[_0x290a[241]]= function(_0x8478x4f,_0x8478x50,_0x8478x51){_0x8478x51= (_0x8478x51!= null)?_0x8478x51:false;var _0x8478x52=mxStencilRegistry[_0x290a[243]][_0x8478x4f];if(_0x8478x51|| _0x8478x52== null){var _0x8478x53=false;if(_0x8478x52== null){var _0x8478x4c=mxUtils[_0x290a[250]](_0x8478x4f);_0x8478x52= _0x8478x4c[_0x290a[256]]();mxStencilRegistry[_0x290a[243]][_0x8478x4f]= _0x8478x52;_0x8478x53= true};mxStencilRegistry[_0x290a[257]](_0x8478x52,_0x8478x50,_0x8478x53)}};mxStencilRegistry[_0x290a[257]]= function(_0x8478x54,_0x8478x50,_0x8478x53){_0x8478x53= (_0x8478x53!= null)?_0x8478x53:true;var _0x8478x55=_0x8478x54[_0x290a[258]];var _0x8478x56=_0x8478x55[_0x290a[184]];var _0x8478x57=_0x290a[20];var _0x8478x48=_0x8478x55[_0x290a[56]](_0x290a[259]);if(_0x8478x48!= null){_0x8478x57= _0x8478x48+ _0x290a[253]};while(_0x8478x56!= null){if(_0x8478x56[_0x290a[260]]== mxConstants[_0x290a[261]]){_0x8478x48= _0x8478x56[_0x290a[56]](_0x290a[259]);if(_0x8478x48!= null){_0x8478x57= _0x8478x57[_0x290a[248]]();var _0x8478x58=_0x8478x48[_0x290a[263]](/ /g,_0x290a[262]);if(_0x8478x53){mxStencilRegistry[_0x290a[264]](_0x8478x57+ _0x8478x58[_0x290a[248]](), new mxStencil(_0x8478x56))};if(_0x8478x50!= null){var _0x8478x19=_0x8478x56[_0x290a[56]](_0x290a[265]);var _0x8478x1a=_0x8478x56[_0x290a[56]](_0x290a[266]);_0x8478x19= (_0x8478x19== null)?80:parseInt(_0x8478x19,10);_0x8478x1a= (_0x8478x1a== null)?80:parseInt(_0x8478x1a,10);_0x8478x50(_0x8478x57,_0x8478x58,_0x8478x48,_0x8478x19,_0x8478x1a)}}};_0x8478x56= _0x8478x56[_0x290a[267]]}}})();OpenFile= function(_0x8478x59){this[_0x290a[268]]= null;this[_0x290a[269]]= null;this[_0x290a[270]]= _0x8478x59};OpenFile[_0x290a[44]][_0x290a[271]]= function(_0x8478x6){this[_0x290a[269]]= _0x8478x6;this[_0x290a[272]]()};OpenFile[_0x290a[44]][_0x290a[273]]= function(_0x8478x6,_0x8478x5a){this[_0x290a[274]]= _0x8478x6;this[_0x290a[21]]= _0x8478x5a;this[_0x290a[272]]()};OpenFile[_0x290a[44]][_0x290a[275]]= function(_0x8478x5b){this[_0x290a[276]]();mxUtils[_0x290a[277]](_0x8478x5b)};OpenFile[_0x290a[44]][_0x290a[272]]= function(){if(this[_0x290a[269]]!= null&& this[_0x290a[274]]!= null){this[_0x290a[269]](this[_0x290a[274]],this[_0x290a[21]]);this[_0x290a[276]]()}};OpenFile[_0x290a[44]][_0x290a[276]]= function(){if(this[_0x290a[270]]!= null){this[_0x290a[270]]()}} \ No newline at end of file diff --git a/public/assets/plugins/jscripty/js/EditorUi.js b/public/assets/plugins/jscripty/js/EditorUi.js index 8d5d72b..3c98f01 100644 --- a/public/assets/plugins/jscripty/js/EditorUi.js +++ b/public/assets/plugins/jscripty/js/EditorUi.js @@ -1,1345 +1 @@ -/** - * $Id: EditorUi.js,v 1.21 2013/03/14 20:46:36 david Exp $ - * Copyright (c) 2006-2012, JGraph Ltd - */ -/** - * Constructs a new graph editor - */ -EditorUi = function(editor, container) { - this.editor = editor || new Editor(); - this.container = container || document.getElementById('geEditor'); - var graph = editor.graph; - var self = this; - - // Disables scrollbars - this.container.style.overflow = 'hidden'; - - // Pre-fetches submenu image - new Image().src = mxPopupMenu.prototype.submenuImage; - - // Pre-fetches connect image - if (mxConnectionHandler.prototype.connectImage != null) { - new Image().src = mxConnectionHandler.prototype.connectImage.src; - } - - // Creates the user interface - this.actions = new Actions(this); - this.menus = new Menus(this); - this.createDivs(); - this.refresh(); - this.createUi(); - - // Disables HTML and text selection - var textEditing = mxUtils.bind(this, function(evt) { - if (evt == null) { - evt = window.event; - } - - if (this.isSelectionAllowed(evt)) { - return true; - } - - return graph.isEditing(); - }); - - // Disables text selection while not editing and no dialog visible - if (this.container == document.body) { - this.menubarContainer.onselectstart = textEditing; - this.menubarContainer.onmousedown = textEditing; - this.toolbarContainer.onselectstart = textEditing; - this.toolbarContainer.onmousedown = textEditing; - this.diagramContainer.onselectstart = textEditing; - this.diagramContainer.onmousedown = textEditing; - this.sidebarContainer.onselectstart = textEditing; - this.sidebarContainer.onmousedown = textEditing; - this.footerContainer.onselectstart = textEditing; - this.footerContainer.onmousedown = textEditing; - } - - // And uses built-in context menu while editing - if (mxClient.IS_IE && (typeof(document.documentMode) === 'undefined' || - document.documentMode < 9)) { - mxEvent.addListener(this.diagramContainer, 'contextmenu', textEditing); - mxEvent.addListener(this.sidebarContainer, 'contextmenu', textEditing); - } else { - // Allows browser context menu outside of diagram and sidebar - this.diagramContainer.oncontextmenu = textEditing; - this.sidebarContainer.oncontextmenu = textEditing; - } - - // Contains the main graph instance inside the given panel - graph.init(this.diagramContainer); - graph.refresh(); - - // Enables scrollbars and sets cursor style for the container - graph.container.setAttribute('tabindex', '0'); - // graph.container.style.overflow = (touchStyle) ? 'hidden' : 'auto'; - graph.container.style.cursor = 'default'; - graph.container.style.backgroundImage = 'url(' + editor.gridImage + ')'; - graph.container.style.backgroundPosition = '-1px -1px'; - graph.container.focus(); - - // Keeps graph container focused on mouse down - var graphFireMouseEvent = graph.fireMouseEvent; - graph.fireMouseEvent = function(evtName, me, sender) { - if (evtName == mxEvent.MOUSE_DOWN) { - this.container.focus(); - } - - graphFireMouseEvent.apply(this, arguments); - }; - - // Giuseppe Careri - // Defines invalid connections along with the error messages that they produce. - - this.createMultiplicities(graph.multiplicities, ['start', 'end', 'input', - 'question', 'email' - ], [ - [1, 1], - [0, 0], - [1, 1], - [1, 'n'], - [1, 'n'] - ], [ - [0, 0], - [1, 'n'], - [1, 'n'], - [1, 'n'], - [1, 'n'] - - ]); - - - // Giuseppe Careri - // Processes a doubleclick on an optional cell and fires a <dblclick> event. - // The event is fired initially. - // If the graph is enabled and the event has not been consumed, then <edit> is called with the given cell. - // The event is ignored if no cell was specified. - graph.dblClick = function(evt, cell) { - var edges = ['question']; - var mxe = new mxEventObject(mxEvent.DOUBLE_CLICK, 'event', evt, 'cell', - cell); - this.fireEvent(mxe); - - if (this.isEnabled() && !mxEvent.isConsumed(evt) && !mxe.isConsumed()) { - // Override dblClick Vertices and Edges - if (this.getModel().isEdge(cell)) { - if (edges.indexOf(cell.source.value.tagName) >= 0) - this.startEditingAtCell(cell); - } else if (this.getModel().isVertex(cell)) { - console.log(self); - console.log(cell); - self.showDialog(new GeneralDialog(self, cell).container, 320, 280, true, - true); - } - mxe.consume(); - } - } - - // Configures automatic expand on mouseover - graph.panningHandler.autoExpand = true; - - // Installs context menu - graph.panningHandler.factoryMethod = mxUtils.bind(this, function(menu, cell, - evt) { - this.menus.createPopupMenu(menu, cell, evt); - }); - - // Initializes the outline - editor.outline.init(this.outlineContainer); - - // Hides context menu - mxEvent.addGestureListeners(document, mxUtils.bind(this, function(evt) { - graph.panningHandler.hideMenu(); - })); - - // Adds gesture handling (pinch to zoom) - if (mxClient.IS_TOUCH) { - mxEvent.addListener(graph.container, 'gesturechange', - mxUtils.bind(this, function(evt) { - graph.view.getDrawPane().setAttribute('transform', 'scale(' + evt.scale + - ')'); - graph.view.getOverlayPane().style.visibility = 'hidden'; - }) - ); - - mxEvent.addListener(graph.container, 'gestureend', - mxUtils.bind(this, function(evt) { - graph.view.getDrawPane().removeAttribute('transform'); - graph.zoomToCenter = true; - graph.zoom(evt.scale); - graph.view.getOverlayPane().style.visibility = 'visible'; - }) - ); - } - - // Create handler for key events - var keyHandler = this.createKeyHandler(editor); - - // Getter for key handler - this.getKeyHandler = function() { - return keyHandler; - }; - - // Updates the editor UI after the window has been resized - mxEvent.addListener(window, 'resize', mxUtils.bind(this, function() { - this.refresh(); - graph.sizeDidChange(); - this.editor.outline.update(false); - this.editor.outline.outline.sizeDidChange(); - })); - - // Updates action and menu states - this.init(); - this.open(); -}; - -/** - * Specifies the size of the split bar. - */ -EditorUi.prototype.splitSize = (mxClient.IS_TOUCH) ? 16 : 8; - -/** - * Specifies the height of the menubar. Default is 34. - */ -EditorUi.prototype.menubarHeight = 33; - -/** - * Specifies the height of the toolbar. Default is 36. - */ -EditorUi.prototype.toolbarHeight = 36; - -/** - * Specifies the height of the footer. Default is 28. - */ -EditorUi.prototype.footerHeight = 28; - -/** - * Specifies the position of the horizontal split bar. Default is 212. - */ -EditorUi.prototype.hsplitPosition = 204; - -/** - * Specifies the position of the vertical split bar. Default is 190. - */ -EditorUi.prototype.vsplitPosition = 190; - -/** - * Installs the listeners to update the action states. - */ -EditorUi.prototype.init = function() { - // Updates action states - this.addUndoListener(); - this.addSelectionListener(); - - // Overrides clipboard to update paste action state - var paste = this.actions.get('paste'); - - var updatePaste = function() { - paste.setEnabled(!mxClipboard.isEmpty()); - }; - - var mxClipboardCut = mxClipboard.cut; - mxClipboard.cut = function() { - mxClipboardCut.apply(this, arguments); - updatePaste(); - }; - - var mxClipboardCopy = mxClipboard.copy; - mxClipboard.copy = function() { - mxClipboardCopy.apply(this, arguments); - updatePaste(); - }; -}; - -/** - * Hook for allowing selection and context menu for certain events. - */ -EditorUi.prototype.isSelectionAllowed = function(evt) { - return false; -}; - -/** - * Opens the current diagram via the window.opener if one exists. - */ -EditorUi.prototype.open = function() { - // Cross-domain window access is not allowed in FF, so if we - // were opened from another domain then this will fail. - try { - if (window.opener != null && window.opener.openFile != null) { - window.opener.openFile.setConsumer(mxUtils.bind(this, function(xml, - filename) { - try { - var doc = mxUtils.parseXml(xml); - this.editor.setGraphXml(doc.documentElement); - this.editor.modified = false; - this.editor.undoManager.clear(); - - if (filename != null) { - this.editor.filename = filename; - } - } catch (e) { - mxUtils.alert(mxResources.get('invalidOrMissingFile') + ': ' + e.message); - } - })); - } - } catch (e) { - // ignore - } -}; - -/** - * Giuseppe Careri - * Opens the current diagram via string. - */ -EditorUi.prototype.openString = function(xml, filename, data) { - try { - var doc = mxUtils.parseXml(xml); - this.editor.setGraphXml(doc.documentElement); - this.editor.modified = false; - this.editor.undoManager.clear(); - - if (filename != null) { - this.editor.filename = filename; - } - - if (data != null) { - this.editor.data = data; - } - } catch (e) { - mxUtils.alert(mxResources.get('invalidOrMissingFile') + ': ' + e.message); - } -}; - -/** - * Saves As the current graph under the given project name. - */ -EditorUi.prototype.new = function(name) { - var editor = this.editor; - - if (name != null) { - var xml = mxUtils.getPrettyXml(this.editor.getGraphXml()); - try { - if (useLocalStorage) { - if (localStorage.getItem(name) != null && - !mxUtils.confirm(mxResources.get('replace', [name]))) { - return; - } - - localStorage.setItem(name, xml); - this.editor.setStatus(mxResources.get('saved') + ' ' + new Date()); - } else { - console.log(xml.length); - console.log(MAX_REQUEST_SIZE); - if (xml.length < MAX_REQUEST_SIZE) { - xml = encodeURIComponent(xml); - name = encodeURIComponent(name); - - var xhr = new XMLHttpRequest(); - xhr.open("POST", SAVE_URL, true); - xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); - xhr.setRequestHeader('Authorization', 'Bearer ' + editor.data.token); - xhr.onload = function(e) { - if (xhr.readyState === 4) { - if (xhr.status === 201) { - editor.setStatus('Project ' + JSON.parse(xhr.response).name + - ' is opening in new window!'); - setTimeout(function() { - window.open('jscripty/projects/view/' + JSON.parse(xhr.response).id, - '_blank'); - }, 1500); - } else { - try { - var response = JSON.parse(xhr.response); - editor.setStatus('Error creating project: ' + response.errors[0].message); - } catch (e) { - editor.setStatus('Error creating project' + ' (' + xhr.status + ' ' + xhr.statusText + ')'); - } - } - } - }; - xhr.onerror = function(e) { - mxUtils.alert(xhr.statusText); - }; - xhr.send('description=project_new&name=' + name); - } else { - mxUtils.alert(mxResources.get('drawingTooLarge')); - mxUtils.popup(xml); - - return; - } - } - - this.editor.filename = name; - this.editor.modified = false; - } catch (e) { - this.editor.setStatus('Error creating project'); - } - } else { - this.editor.setStatus('Error creating project'); - } -}; - - -/** - * Saves the current graph under the given project name. - */ -EditorUi.prototype.save = function(name) { - var editor = this.editor; - - if (name != null) { - var xml = mxUtils.getPrettyXml(this.editor.getGraphXml()); - try { - if (useLocalStorage) { - if (localStorage.getItem(name) != null && - !mxUtils.confirm(mxResources.get('replace', [name]))) { - return; - } - - localStorage.setItem(name, xml); - this.editor.setStatus(mxResources.get('saved') + ' ' + new Date()); - } else { - console.log(xml.length); - console.log(MAX_REQUEST_SIZE); - if (xml.length < MAX_REQUEST_SIZE) { - xml = encodeURIComponent(xml); - - var xhr = new XMLHttpRequest(); - xhr.open("PUT", SAVE_URL + this.editor.data.id, true); - xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); - xhr.setRequestHeader('Authorization', 'Bearer ' + editor.data.token); - xhr.onload = function(e) { - if (xhr.readyState === 4) { - if (xhr.status === 200) { - editor.setStatus('Updated at ' + JSON.parse(xhr.response).updatedAt + - ' (' + xhr.status + ' ' + xhr.statusText + ')'); - } else { - try { - var response = JSON.parse(xhr.response); - editor.setStatus('Error saving project: ' + response.errors[0].message); - } catch (e) { - editor.setStatus('Error saving project' + ' (' + xhr.status + ' ' + xhr.statusText + ')'); - } - } - } - }; - xhr.onerror = function(e) { - mxUtils.alert(xhr.statusText); - }; - xhr.send('draft=' + xml); - } else { - mxUtils.alert(mxResources.get('drawingTooLarge')); - mxUtils.popup(xml); - - return; - } - } - - this.editor.filename = name; - this.editor.modified = false; - } catch (e) { - this.editor.setStatus('Error saving file'); - } - } else { - this.editor.setStatus('Error saving file'); - } -}; - -/** - * Saves As the current graph under the given project name. - */ -EditorUi.prototype.saveAs = function(name) { - var editor = this.editor; - console.log(name); - if (name != null) { - var xml = mxUtils.getPrettyXml(this.editor.getGraphXml()); - try { - if (useLocalStorage) { - if (localStorage.getItem(name) != null && - !mxUtils.confirm(mxResources.get('replace', [name]))) { - return; - } - - localStorage.setItem(name, xml); - this.editor.setStatus(mxResources.get('saved') + ' ' + new Date()); - } else { - console.log(xml.length); - console.log(MAX_REQUEST_SIZE); - if (xml.length < MAX_REQUEST_SIZE) { - xml = encodeURIComponent(xml); - name = encodeURIComponent(name); - - var xhr = new XMLHttpRequest(); - xhr.open("POST", SAVE_URL, true); - xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); - xhr.setRequestHeader('Authorization', 'Bearer ' + editor.data.token); - xhr.onload = function(e) { - if (xhr.readyState === 4) { - if (xhr.status === 201) { - editor.setStatus('Project ' + JSON.parse(xhr.response).name + - ' is opening in new window!'); - setTimeout(function() { - window.open('jscripty/project/' + JSON.parse(xhr.response).id, - '_blank'); - }, 1500); - } else { - try { - var response = JSON.parse(xhr.response); - editor.setStatus('Error cloning project: ' + response.errors[0].message); - } catch (e) { - editor.setStatus('Error cloning project' + ' (' + xhr.status + ' ' + xhr.statusText + ')'); - } - } - } - }; - xhr.onerror = function(e) { - mxUtils.alert(xhr.statusText); - }; - xhr.send('description=project_cloned&name=' + name + - '&draft=' + xml + '&production=' + xml); - } else { - mxUtils.alert(mxResources.get('drawingTooLarge')); - mxUtils.popup(xml); - - return; - } - } - - this.editor.filename = name; - this.editor.modified = false; - } catch (e) { - this.editor.setStatus('Error saving file'); - } - } else { - this.editor.setStatus('Error saving file'); - } -}; - -/** - * Plush the current graph under the given project name. - */ -EditorUi.prototype.validate = function(a, b) { - var graph = this.editor.graph; - a = null != a ? a : graph.model.getRoot(); - b = null != b ? b : {}; - for (var c = !0, d = graph.model.getChildCount(a), e = 0; e < d; e++) { - var f = graph.model.getChildAt(a, e), - g = b; - graph.isValidRoot(f) && (g = {}); - g = this.validate(f, g); - null != g ? graph.setCellWarning(f, g.replace(/\n/g, "\x3cbr\x3e")) : graph.setCellWarning(f, null); - c = c && null == g - } - d = ""; - if (graph.model.isVertex(a)) { - switch (a.value.nodeName) { - case 'question': - d = (a.value.getAttribute('question') !== "") ? "" : - 'Question can not be empty' + "\n"; - d += (a.value.getAttribute('label') !== "") ? "" : 'Label can not be empty' + "\n"; - - break; - case 'input': - d = (a.value.getAttribute('question') !== "") ? "" : 'Question can not be empty' + "\n"; - d += (a.value.getAttribute('label') !== "") ? "" : 'Label can not be empty' + "\n"; - - break; - case 'start': - d = this.validateBlock('start') ? '' : "Only one Start block is allowed" + "\n"; - d += (a.value.getAttribute('label') !== "") ? "" : 'Label can not be empty' + "\n"; - - break; - } - } - - if (graph.model.isEdge(a)) { - var z = graph.model.getCell(a.source.getId()); - switch (z.value.nodeName) { - case 'question': - // var patt = /^[a-zA-Z0-9][a-zA-Z0-9\s]*$/; - var str = String(a.getValue()); - console.log(str); - if (str === 'null' || str === 'undefined') { - d = "Value can not be empty" + "\n"; - } else { - var result = str.split(","); - result.forEach(function(entry, key) { - d = d + ((entry.trim() !== "") ? "" : 'Value' + (key + 1) + ' can not be empty' + "\n"); - }); - } - // console.log(a.getValue()); - // if ((str == 'undefined') || (str == 'null')) { - // str = ' '; - // } - // d = ((a.getValue() !== "") && (a.getValue() !== 'undefined') && (a.getValue() !== null)) ? '' : "Value can not be empty" + "\n"; - // d = d + ((patt.test(str.trim())) ? "" : 'Value can not be empty' + "\n"); - // - // res.forEach(function(entry) { - // d = d + ((patt.test(entry.trim())) ? "" : 'Can not be empty' + "\n"); - // }); - break; - - } - } - - graph.isCellCollapsed(a) && !c && (d += (mxResources.get(graph.containsValidationErrorsResource) || graph.containsValidationErrorsResource) + "\n"); - d = graph.model.isEdge(a) ? d + (graph.getEdgeValidationError(a, graph.model.getTerminal(a, !0), graph.model.getTerminal(a, !1)) || "") : d + (graph.getCellValidationError(a) || ""); - e = graph.validateCell(a, b); - null != e && (d += e); - null == graph.model.getParent(a) && graph.view.validate(); - return 0 < d.length || !c ? d : null -} - -EditorUi.prototype.validateBlock = function(blockName) { - var graph = this.editor.graph; - var parent = graph.getDefaultParent(); - var count = 0; - // var model = graph.getModel(); - //We can also use model.getChildren(parent) - parent.children.forEach(function(n) { - if (graph.model.isVertex(n) && n.value.nodeName == blockName) { - count++; - } - }); - return count > 1 ? false : true; -} - -EditorUi.prototype.publish = function(name) { - - var editor = this.editor; - - if (name != null) { - - var response = this.validate(); - if (response === null) { - var xml = mxUtils.getPrettyXml(this.editor.getGraphXml()); - try { - if (useLocalStorage) { - if (localStorage.getItem(name) != null && - !mxUtils.confirm(mxResources.get('replace', [name]))) { - return; - } - - localStorage.setItem(name, xml); - this.editor.setStatus(mxResources.get('saved') + ' ' + new Date()); - } else { - console.log(xml.length); - console.log(MAX_REQUEST_SIZE); - if (xml.length < MAX_REQUEST_SIZE) { - xml = encodeURIComponent(xml); - - var xhr = new XMLHttpRequest(); - xhr.open("PUT", SAVE_URL + this.editor.data.id, true); - xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); - xhr.setRequestHeader('Authorization', 'Bearer ' + editor.data.token); - xhr.onload = function(e) { - if (xhr.readyState === 4) { - if (xhr.status === 200) { - editor.setStatus('Published at ' + JSON.parse(xhr.response).updatedAt + - ' (' + xhr.status + ' ' + xhr.statusText + ')'); - } else { - try { - var response = JSON.parse(xhr.response); - editor.setStatus('Error publishing project: ' + response.errors[0].message); - } catch (e) { - editor.setStatus('Error publishing project' + ' (' + xhr.status + ' ' + xhr.statusText + ')'); - } - } - } - }; - xhr.onerror = function(e) { - mxUtils.alert(xhr.statusText); - }; - xhr.send('draft=' + xml + '&production=' + xml); - } else { - mxUtils.alert(mxResources.get('drawingTooLarge')); - mxUtils.popup(xml); - - return; - } - } - - this.editor.filename = name; - this.editor.modified = false; - } catch (e) { - this.editor.setStatus('Error publishing file'); - } - } else { - editor.setStatus('Error publishing project: '); - } - } else { - this.editor.setStatus('Error publishing file'); - } - // } - - - -}; - -/** - * Create variable - */ -EditorUi.prototype.variable = function(name) { - var editor = this.editor; - - if (name != null) { - try { - - var xhr = new XMLHttpRequest(); - xhr.open("POST", VARIABLE_URL, true); - xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); - xhr.setRequestHeader('Authorization', 'Bearer ' + editor.data.token); - xhr.onload = function(e) { - if (xhr.readyState === 4) { - if (xhr.status === 201) { - editor.setStatus('Variable created at ' + JSON.parse(xhr.response).createdAt + - ' (' + xhr.status + ' ' + xhr.statusText + ')'); - } else { - try { - var response = JSON.parse(xhr.response); - editor.setStatus('Error creating variable: ' + response.errors[0].message); - } catch (e) { - editor.setStatus('Error creating variable' + ' (' + xhr.status + ' ' + xhr.statusText + ')'); - } - } - } - }; - xhr.onerror = function(e) { - mxUtils.alert(xhr.statusText); - }; - xhr.send('name=' + name); - } catch (e) { - this.editor.setStatus('Error creating variable'); - } - } else { - this.editor.setStatus('Error creating variable'); - } -}; - -/** - * Returns the URL for a copy of this editor with no state. - */ -EditorUi.prototype.getUrl = function(pathname) { - var href = (pathname != null) ? pathname : window.location.pathname; - var parms = (href.indexOf('?') > 0) ? 1 : 0; - - // Removes template URL parameter for new blank diagram - for (var key in urlParams) { - if (parms == 0) { - href += '?'; - } else { - href += '&'; - } - - href += key + '=' + urlParams[key]; - parms++; - } - - return href; -}; - -/** - * Updates the states of the given undo/redo items. - */ -EditorUi.prototype.addUndoListener = function() { - var undo = this.actions.get('undo'); - var redo = this.actions.get('redo'); - - var undoMgr = this.editor.undoManager; - - var undoListener = function() { - undo.setEnabled(undoMgr.canUndo()); - redo.setEnabled(undoMgr.canRedo()); - }; - - undoMgr.addListener(mxEvent.ADD, undoListener); - undoMgr.addListener(mxEvent.UNDO, undoListener); - undoMgr.addListener(mxEvent.REDO, undoListener); - undoMgr.addListener(mxEvent.CLEAR, undoListener); - - // Updates the button states once - undoListener(); -}; - -/** - * Updates the states of the given toolbar items based on the selection. - */ -EditorUi.prototype.addSelectionListener = function() { - var selectionListener = mxUtils.bind(this, function() { - var graph = this.editor.graph; - var selected = !graph.isSelectionEmpty(); - var vertexSelected = false; - var edgeSelected = false; - - var cells = graph.getSelectionCells(); - - if (cells != null) { - for (var i = 0; i < cells.length; i++) { - var cell = cells[i]; - - if (graph.getModel().isEdge(cell)) { - edgeSelected = true; - } - - if (graph.getModel().isVertex(cell)) { - vertexSelected = true; - } - - if (edgeSelected && vertexSelected) { - break; - } - } - } - - // Updates action states - var actions = ['cut', 'copy', 'delete', 'duplicate', 'bold', 'italic', - 'style', 'underline', 'toFront', 'toBack', 'dashed', 'rounded', - 'shadow', - 'tilt', 'autosize' - ]; - - for (var i = 0; i < actions.length; i++) { - this.actions.get(actions[i]).setEnabled(selected); - } - - this.actions.get('curved').setEnabled(edgeSelected); - this.actions.get('rotation').setEnabled(vertexSelected); - this.actions.get('wordWrap').setEnabled(vertexSelected); - this.actions.get('group').setEnabled(graph.getSelectionCount() > 1); - this.actions.get('ungroup').setEnabled(graph.getSelectionCount() == 1 && - graph.getModel().getChildCount(graph.getSelectionCell()) > 0); - var oneVertexSelected = vertexSelected && graph.getSelectionCount() == 1; - this.actions.get('removeFromGroup').setEnabled(oneVertexSelected && - graph.getModel().isVertex(graph.getModel().getParent(graph.getSelectionCell())) - ); - - // Updates menu states - var menus = ['fontFamily', 'fontSize', 'alignment', 'position', 'text', - 'format', - 'arrange', 'linewidth', 'spacing' - ]; - - for (var i = 0; i < menus.length; i++) { - this.menus.get(menus[i]).setEnabled(selected); - } - - menus = ['line', 'lineend', 'linestart']; - - for (var i = 0; i < menus.length; i++) { - this.menus.get(menus[i]).setEnabled(edgeSelected); - } - - this.actions.get('setAsDefaultEdge').setEnabled(edgeSelected); - - this.menus.get('align').setEnabled(graph.getSelectionCount() > 1); - this.menus.get('direction').setEnabled(vertexSelected || (edgeSelected && - graph.isLoop(graph.view.getState(graph.getSelectionCell())))); - this.menus.get('navigation').setEnabled(graph.foldingEnabled && ((graph.view - .currentRoot != null) || - (graph.getSelectionCount() == 1 && graph.isValidRoot(graph.getSelectionCell())) - )); - this.actions.get('home').setEnabled(graph.view.currentRoot != null); - this.actions.get('exitGroup').setEnabled(graph.view.currentRoot != null); - var groupEnabled = graph.getSelectionCount() == 1 && graph.isValidRoot( - graph.getSelectionCell()); - this.actions.get('enterGroup').setEnabled(groupEnabled); - this.actions.get('expand').setEnabled(groupEnabled); - this.actions.get('collapse').setEnabled(groupEnabled); - this.actions.get('editLink').setEnabled(graph.getSelectionCount() == 1); - this.actions.get('openLink').setEnabled(graph.getSelectionCount() == 1 && - graph.getLinkForCell(graph.getSelectionCell()) != null); - }); - - this.editor.graph.getSelectionModel().addListener(mxEvent.CHANGE, - selectionListener); - selectionListener(); -}; - -/** - * Refreshes the viewport. - */ -EditorUi.prototype.refresh = function() { - var quirks = mxClient.IS_IE && (document.documentMode == null || document.documentMode == - 5); - var w = this.container.clientWidth; - var h = this.container.clientHeight; - - if (this.container == document.body) { - w = document.body.clientWidth || document.documentElement.clientWidth; - h = (quirks) ? document.body.clientHeight || document.documentElement.clientHeight : - document.documentElement.clientHeight; - } - - var effHsplitPosition = Math.max(0, Math.min(this.hsplitPosition, w - this.splitSize - - 20)); - var effVsplitPosition = Math.max(0, Math.min(this.vsplitPosition, h - this.menubarHeight - - this.toolbarHeight - this.footerHeight - this.splitSize - 1)); - - this.menubarContainer.style.height = this.menubarHeight + 'px'; - this.toolbarContainer.style.top = this.menubarHeight + 'px'; - this.toolbarContainer.style.height = this.toolbarHeight + 'px'; - - var tmp = this.menubarHeight + this.toolbarHeight; - - if (!mxClient.IS_QUIRKS) { - tmp += 1; - } - - this.sidebarContainer.style.top = tmp + 'px'; - this.sidebarContainer.style.width = effHsplitPosition + 'px'; - this.outlineContainer.style.width = effHsplitPosition + 'px'; - this.outlineContainer.style.height = effVsplitPosition + 'px'; - this.outlineContainer.style.bottom = this.footerHeight + 'px'; - this.diagramContainer.style.left = (effHsplitPosition + this.splitSize) + - 'px'; - this.diagramContainer.style.top = this.sidebarContainer.style.top; - this.footerContainer.style.height = this.footerHeight + 'px'; - this.footerContainer.style.display = 'none'; - this.hsplit.style.top = this.sidebarContainer.style.top; - this.hsplit.style.bottom = this.outlineContainer.style.bottom; - this.hsplit.style.left = effHsplitPosition + 'px'; - this.vsplit.style.width = this.sidebarContainer.style.width; - this.vsplit.style.bottom = (effVsplitPosition + this.footerHeight) + 'px'; - - if (quirks) { - this.menubarContainer.style.width = w + 'px'; - this.toolbarContainer.style.width = this.menubarContainer.style.width; - var sidebarHeight = (h - effVsplitPosition - this.splitSize - this.footerHeight - - this.menubarHeight - this.toolbarHeight); - this.sidebarContainer.style.height = sidebarHeight + 'px'; - this.diagramContainer.style.width = (w - effHsplitPosition - this.splitSize) + - 'px'; - var diagramHeight = (h - this.footerHeight - this.menubarHeight - this.toolbarHeight); - this.diagramContainer.style.height = diagramHeight + 'px'; - this.footerContainer.style.width = this.menubarContainer.style.width; - this.hsplit.style.height = diagramHeight + 'px'; - } else { - this.sidebarContainer.style.bottom = (effVsplitPosition + this.splitSize + - this.footerHeight) + 'px'; - this.diagramContainer.style.bottom = this.outlineContainer.style.bottom; - } -}; - -/** - * Creates the required containers. - */ -EditorUi.prototype.createDivs = function() { - this.menubarContainer = this.createDiv('geMenubarContainer'); - this.toolbarContainer = this.createDiv('geToolbarContainer'); - this.sidebarContainer = this.createDiv('geSidebarContainer'); - this.outlineContainer = this.createDiv('geOutlineContainer'); - this.diagramContainer = this.createDiv('geDiagramContainer'); - this.footerContainer = this.createDiv('geFooterContainer'); - this.hsplit = this.createDiv('geHsplit'); - this.vsplit = this.createDiv('geVsplit'); - - // Sets static style for containers - this.menubarContainer.style.top = '0px'; - this.menubarContainer.style.left = '0px'; - this.menubarContainer.style.right = '0px'; - this.toolbarContainer.style.left = '0px'; - this.toolbarContainer.style.right = '0px'; - this.sidebarContainer.style.left = '0px'; - this.outlineContainer.style.left = '0px'; - this.diagramContainer.style.right = '0px'; - this.footerContainer.style.left = '0px'; - this.footerContainer.style.right = '0px'; - this.footerContainer.style.bottom = '0px'; - this.vsplit.style.left = '0px'; - this.vsplit.style.height = this.splitSize + 'px'; - this.hsplit.style.width = this.splitSize + 'px'; -}; - -/** - * Creates the required containers. - */ -EditorUi.prototype.createUi = function() { - // Creates menubar - this.menubar = this.menus.createMenubar(this.createDiv('geMenubar')); - this.menubarContainer.appendChild(this.menubar.container); - - // Creates toolbar - this.toolbar = this.createToolbar(this.createDiv('geToolbar')); - this.toolbarContainer.appendChild(this.toolbar.container); - - // Creates the sidebar - this.sidebar = this.createSidebar(this.sidebarContainer); - - // Creates the footer - this.footerContainer.appendChild(this.createFooter()); - - // Adds status bar in menubar - this.statusContainer = this.createStatusContainer(); - - // Connects the status bar to the editor status - this.editor.addListener('statusChanged', mxUtils.bind(this, function() { - this.setStatusText(this.editor.getStatus()); - })); - - this.setStatusText(this.editor.getStatus()); - this.menubar.container.appendChild(this.statusContainer); - - // Inserts into DOM - this.container.appendChild(this.menubarContainer); - this.container.appendChild(this.toolbarContainer); - this.container.appendChild(this.sidebarContainer); - this.container.appendChild(this.outlineContainer); - this.container.appendChild(this.diagramContainer); - this.container.appendChild(this.footerContainer); - this.container.appendChild(this.hsplit); - this.container.appendChild(this.vsplit); - - // HSplit - this.addSplitHandler(this.hsplit, true, 0, mxUtils.bind(this, function( - value) { - this.hsplitPosition = value; - this.refresh(); - this.editor.graph.sizeDidChange(); - this.editor.outline.update(false); - this.editor.outline.outline.sizeDidChange(); - })); - - // VSplit - this.addSplitHandler(this.vsplit, false, this.footerHeight, mxUtils.bind( - this, - function(value) { - this.vsplitPosition = value; - this.refresh(); - this.editor.outline.update(false); - this.editor.outline.outline.sizeDidChange(); - })); -}; - -/** - * Creates a new toolbar for the given container. - */ -EditorUi.prototype.createStatusContainer = function() { - var container = document.createElement('a'); - container.className = 'geItem geStatus'; - - return container; -}; - -/** - * Creates a new toolbar for the given container. - */ -EditorUi.prototype.createStatusContainer = function() { - var container = document.createElement('a'); - container.className = 'geItem geStatus'; - - return container; -}; - -/** - * Creates a new toolbar for the given container. - */ -EditorUi.prototype.setStatusText = function(value) { - this.statusContainer.innerHTML = value; -}; - -/** - * Creates a new toolbar for the given container. - */ -EditorUi.prototype.createToolbar = function(container) { - return new Toolbar(this, container); -}; - -/** - * Creates a new sidebar for the given container. - */ -EditorUi.prototype.createSidebar = function(container) { - return new Sidebar(this, container); -}; - -/** - * Creates and returns a new footer. - */ -EditorUi.prototype.createFooter = function() { - return this.createDiv('geFooter'); -}; - -/** - * Creates the actual toolbar for the toolbar container. - */ -EditorUi.prototype.createDiv = function(classname) { - var elt = document.createElement('div'); - elt.className = classname; - - return elt; -}; - -/** - * Creates the custom header. - */ -EditorUi.prototype.createHeader = function(classname) { - var elt = document.createElement(classname); - return elt; -}; - -/** - * Creates the custom header. - */ -EditorUi.prototype.createForm = function(classname) { - var elt = document.createElement('form'); - elt.className = classname; - - return elt; -}; - -/** - * Updates the states of the given undo/redo items. - */ -EditorUi.prototype.addSplitHandler = function(elt, horizontal, dx, onChange) { - var start = null; - var initial = null; - - function getValue() { - return parseInt(((horizontal) ? elt.style.left : elt.style.bottom)); - }; - - function moveHandler(evt) { - if (start != null) { - var pt = new mxPoint(mxEvent.getClientX(evt), mxEvent.getClientY(evt)); - onChange(Math.max(0, initial + ((horizontal) ? (pt.x - start.x) : (start.y - - pt.y)) - dx)); - mxEvent.consume(evt); - } - }; - - function dropHandler(evt) { - moveHandler(evt); - start = null; - initial = null; - }; - - mxEvent.addGestureListeners(elt, function(evt) { - start = new mxPoint(mxEvent.getClientX(evt), mxEvent.getClientY(evt)); - initial = getValue(); - mxEvent.consume(evt); - }); - - mxEvent.addListener(document, 'mousemove', moveHandler); - mxEvent.addListener(document, 'touchmove', moveHandler); - mxEvent.addListener(document, 'mouseup', dropHandler); - mxEvent.addListener(document, 'touchend', dropHandler); -}; - -/** - * Displays a print dialog. - */ -EditorUi.prototype.showDialog = function(elt, w, h, modal, closable, onClose) { - this.hideDialog(); - this.dialog = new Dialog(this, elt, w, (mxClient.IS_VML) ? h - 12 : h, - modal, - closable, onClose); -}; - -/** - * Displays a print dialog. - */ -EditorUi.prototype.hideDialog = function() { - if (this.dialog != null) { - this.dialog.close(); - this.dialog = null; - this.editor.graph.container.focus(); - } -}; - -/** - * Adds the label menu items to the given menu and parent. - */ -EditorUi.prototype.saveFile = function(forceDialog) { - if (!forceDialog && this.editor.filename != null) { - this.save(this.editor.getOrCreateFilename()); - } else { - this.showDialog(new SaveDialog(this).container, 300, 100, true, true); - } -}; - -/** - * Adds the label menu items to the given menu and parent. - */ -EditorUi.prototype.publishFile = function(forceDialog) { - if (!forceDialog && this.editor.filename != null) { - this.publish(this.editor.getOrCreateFilename()); - } else { - //this.showDialog(new SaveDialog(this).container, 300, 100, true, true); - } -}; - -/** - * Executes the given layout. - */ -EditorUi.prototype.executeLayout = function(layout, animate, ignoreChildCount) { - var graph = this.editor.graph; - var cell = graph.getSelectionCell(); - - // Allow global overridding of animation - animate = this.animate != null ? this.animate : animate; - - graph.getModel().beginUpdate(); - try { - layout.execute(graph.getDefaultParent(), cell); - } catch (e) { - throw e; - } finally { - // Animates the changes in the graph model except - // for Camino, where animation is too slow - if (animate && navigator.userAgent.indexOf('Camino') < 0) { - // New API for animating graph layout results asynchronously - var morph = new mxMorphing(graph); - morph.addListener(mxEvent.DONE, mxUtils.bind(this, function() { - graph.getModel().endUpdate(); - })); - - morph.startAnimation(); - } else { - graph.getModel().endUpdate(); - } - } -}; - -/** - * Creates the keyboard event handler for the current graph and history. - */ -EditorUi.prototype.createKeyHandler = function(editor) { - var graph = this.editor.graph; - var keyHandler = new mxKeyHandler(graph); - - // Routes command-key to control-key on Mac - keyHandler.isControlDown = function(evt) { - return mxEvent.isControlDown(evt) || (mxClient.IS_MAC && evt.metaKey); - }; - - // Helper function to move cells with the cursor keys - function nudge(keyCode) { - if (!graph.isSelectionEmpty()) { - var dx = 0; - var dy = 0; - - if (keyCode == 37) { - dx = -1; - } else if (keyCode == 38) { - dy = -1; - } else if (keyCode == 39) { - dx = 1; - } else if (keyCode == 40) { - dy = 1; - } - - graph.moveCells(graph.getSelectionCells(), dx, dy); - graph.scrollCellToVisible(graph.getSelectionCell()); - } - }; - - // Binds keystrokes to actions - var bindAction = mxUtils.bind(this, function(code, control, key, shift) { - var action = this.actions.get(key); - - if (action != null) { - var f = function() { - if (action.enabled) { - action.funct(); - } - }; - - if (control) { - if (shift) { - keyHandler.bindControlShiftKey(code, f); - } else { - keyHandler.bindControlKey(code, f); - } - } else { - if (shift) { - keyHandler.bindShiftKey(code, f); - } else { - keyHandler.bindKey(code, f); - } - } - } - }); - - var ui = this; - var keyHandleEscape = keyHandler.escape; - keyHandler.escape = function(evt) { - ui.hideDialog(); - keyHandleEscape.apply(this, arguments); - }; - - // Ignores enter keystroke. Remove this line if you want the - // enter keystroke to stop editing. - keyHandler.enter = function() {}; - keyHandler.bindKey(8, function() { - graph.foldCells(true); - }); // Backspace - keyHandler.bindKey(13, function() { - graph.foldCells(false); - }); // Enter - keyHandler.bindKey(33, function() { - graph.exitGroup(); - }); // Page Up - keyHandler.bindKey(34, function() { - graph.enterGroup(); - }); // Page Down - keyHandler.bindKey(36, function() { - graph.home(); - }); // Home - keyHandler.bindKey(35, function() { - graph.refresh(); - }); // End - keyHandler.bindKey(37, function() { - nudge(37); - }); // Left arrow - keyHandler.bindKey(38, function() { - nudge(38); - }); // Up arrow - keyHandler.bindKey(39, function() { - nudge(39); - }); // Right arrow - keyHandler.bindKey(40, function() { - nudge(40); - }); // Down arrow - keyHandler.bindKey(113, function() { - graph.startEditingAtCell(); - }); - bindAction(46, false, 'delete'); // Delete - bindAction(82, true, 'tilt'); // Ctrl+R - bindAction(83, true, 'save'); // Ctrl+S - bindAction(83, true, 'saveAs', true); // Ctrl+Shift+S - bindAction(107, false, 'zoomIn'); // Add - bindAction(109, false, 'zoomOut'); // Subtract - bindAction(65, true, 'selectAll'); // Ctrl+A - bindAction(86, true, 'selectVertices', true); // Ctrl+Shift+V - bindAction(69, true, 'selectEdges', true); // Ctrl+Shift+E - bindAction(69, true, 'export'); // Ctrl+Shift+E - bindAction(66, true, 'toBack'); // Ctrl+B - bindAction(70, true, 'toFront'); // Ctrl+F - bindAction(68, true, 'duplicate'); // Ctrl+D - bindAction(90, true, 'undo'); // Ctrl+Z - bindAction(89, true, 'redo'); // Ctrl+Y - bindAction(88, true, 'cut'); // Ctrl+X - bindAction(67, true, 'copy'); // Ctrl+C - bindAction(81, true, 'connect'); // Ctrl+Q - bindAction(86, true, 'paste'); // Ctrl+V - bindAction(71, true, 'group'); // Ctrl+G - bindAction(71, true, 'grid', true); // Ctrl+Shift+G - bindAction(85, true, 'ungroup'); // Ctrl+U - bindAction(112, false, 'about'); // F1 - bindAction(80, true, 'publish', true); // Ctrl+Shift+P - - return keyHandler; -}; - -/** - * Giuseppe Careri - * Creates a new toolbar for the given container. - */ -EditorUi.prototype.createMultiplicities = function(graph, cells, source, - target) { - for (var i = 0; i < cells.length; i++) { - graph.push(new mxMultiplicity(true, cells[i], null, null, source[i][0], - source[i][1], null, mxResources.get(cells[i]) + ' must have ' + source[i][0] + ' outgoing edge.', null)); - graph.push(new mxMultiplicity(false, cells[i], null, null, target[i][0], - target[i][1], null, mxResources.get(cells[i]) + ' must have ' + target[i][0] + ' incoming edge.', null)); - }; -}; +var _0x74c6=["\x65\x64\x69\x74\x6F\x72","\x63\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x67\x65\x45\x64\x69\x74\x6F\x72","\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74\x42\x79\x49\x64","\x67\x72\x61\x70\x68","\x6F\x76\x65\x72\x66\x6C\x6F\x77","\x73\x74\x79\x6C\x65","\x68\x69\x64\x64\x65\x6E","\x73\x72\x63","\x73\x75\x62\x6D\x65\x6E\x75\x49\x6D\x61\x67\x65","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x63\x6F\x6E\x6E\x65\x63\x74\x49\x6D\x61\x67\x65","\x61\x63\x74\x69\x6F\x6E\x73","\x6D\x65\x6E\x75\x73","\x63\x72\x65\x61\x74\x65\x44\x69\x76\x73","\x72\x65\x66\x72\x65\x73\x68","\x63\x72\x65\x61\x74\x65\x55\x69","\x65\x76\x65\x6E\x74","\x69\x73\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x41\x6C\x6C\x6F\x77\x65\x64","\x69\x73\x45\x64\x69\x74\x69\x6E\x67","\x62\x69\x6E\x64","\x62\x6F\x64\x79","\x6F\x6E\x73\x65\x6C\x65\x63\x74\x73\x74\x61\x72\x74","\x6D\x65\x6E\x75\x62\x61\x72\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x6F\x6E\x6D\x6F\x75\x73\x65\x64\x6F\x77\x6E","\x74\x6F\x6F\x6C\x62\x61\x72\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x64\x69\x61\x67\x72\x61\x6D\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x73\x69\x64\x65\x62\x61\x72\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x66\x6F\x6F\x74\x65\x72\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x49\x53\x5F\x49\x45","\x64\x6F\x63\x75\x6D\x65\x6E\x74\x4D\x6F\x64\x65","\x75\x6E\x64\x65\x66\x69\x6E\x65\x64","\x63\x6F\x6E\x74\x65\x78\x74\x6D\x65\x6E\x75","\x61\x64\x64\x4C\x69\x73\x74\x65\x6E\x65\x72","\x6F\x6E\x63\x6F\x6E\x74\x65\x78\x74\x6D\x65\x6E\x75","\x69\x6E\x69\x74","\x74\x61\x62\x69\x6E\x64\x65\x78","\x30","\x73\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x63\x75\x72\x73\x6F\x72","\x64\x65\x66\x61\x75\x6C\x74","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x49\x6D\x61\x67\x65","\x75\x72\x6C\x28","\x67\x72\x69\x64\x49\x6D\x61\x67\x65","\x29","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x2D\x31\x70\x78\x20\x2D\x31\x70\x78","\x66\x6F\x63\x75\x73","\x66\x69\x72\x65\x4D\x6F\x75\x73\x65\x45\x76\x65\x6E\x74","\x4D\x4F\x55\x53\x45\x5F\x44\x4F\x57\x4E","\x61\x70\x70\x6C\x79","\x6D\x75\x6C\x74\x69\x70\x6C\x69\x63\x69\x74\x69\x65\x73","\x73\x74\x61\x72\x74","\x65\x6E\x64","\x69\x6E\x70\x75\x74","\x71\x75\x65\x73\x74\x69\x6F\x6E","\x65\x6D\x61\x69\x6C","\x6E","\x63\x72\x65\x61\x74\x65\x4D\x75\x6C\x74\x69\x70\x6C\x69\x63\x69\x74\x69\x65\x73","\x64\x62\x6C\x43\x6C\x69\x63\x6B","\x63\x65\x6C\x6C","\x66\x69\x72\x65\x45\x76\x65\x6E\x74","\x69\x73\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x43\x6F\x6E\x73\x75\x6D\x65\x64","\x69\x73\x45\x64\x67\x65","\x67\x65\x74\x4D\x6F\x64\x65\x6C","\x74\x61\x67\x4E\x61\x6D\x65","\x76\x61\x6C\x75\x65","\x73\x6F\x75\x72\x63\x65","\x69\x6E\x64\x65\x78\x4F\x66","\x73\x74\x61\x72\x74\x45\x64\x69\x74\x69\x6E\x67\x41\x74\x43\x65\x6C\x6C","\x69\x73\x56\x65\x72\x74\x65\x78","\x6C\x6F\x67","\x73\x68\x6F\x77\x44\x69\x61\x6C\x6F\x67","\x63\x6F\x6E\x73\x75\x6D\x65","\x61\x75\x74\x6F\x45\x78\x70\x61\x6E\x64","\x70\x61\x6E\x6E\x69\x6E\x67\x48\x61\x6E\x64\x6C\x65\x72","\x66\x61\x63\x74\x6F\x72\x79\x4D\x65\x74\x68\x6F\x64","\x63\x72\x65\x61\x74\x65\x50\x6F\x70\x75\x70\x4D\x65\x6E\x75","\x6F\x75\x74\x6C\x69\x6E\x65\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x6F\x75\x74\x6C\x69\x6E\x65","\x68\x69\x64\x65\x4D\x65\x6E\x75","\x61\x64\x64\x47\x65\x73\x74\x75\x72\x65\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x49\x53\x5F\x54\x4F\x55\x43\x48","\x67\x65\x73\x74\x75\x72\x65\x63\x68\x61\x6E\x67\x65","\x74\x72\x61\x6E\x73\x66\x6F\x72\x6D","\x73\x63\x61\x6C\x65\x28","\x73\x63\x61\x6C\x65","\x67\x65\x74\x44\x72\x61\x77\x50\x61\x6E\x65","\x76\x69\x65\x77","\x76\x69\x73\x69\x62\x69\x6C\x69\x74\x79","\x67\x65\x74\x4F\x76\x65\x72\x6C\x61\x79\x50\x61\x6E\x65","\x67\x65\x73\x74\x75\x72\x65\x65\x6E\x64","\x72\x65\x6D\x6F\x76\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x7A\x6F\x6F\x6D\x54\x6F\x43\x65\x6E\x74\x65\x72","\x7A\x6F\x6F\x6D","\x76\x69\x73\x69\x62\x6C\x65","\x63\x72\x65\x61\x74\x65\x4B\x65\x79\x48\x61\x6E\x64\x6C\x65\x72","\x67\x65\x74\x4B\x65\x79\x48\x61\x6E\x64\x6C\x65\x72","\x72\x65\x73\x69\x7A\x65","\x73\x69\x7A\x65\x44\x69\x64\x43\x68\x61\x6E\x67\x65","\x75\x70\x64\x61\x74\x65","\x6F\x70\x65\x6E","\x73\x70\x6C\x69\x74\x53\x69\x7A\x65","\x6D\x65\x6E\x75\x62\x61\x72\x48\x65\x69\x67\x68\x74","\x74\x6F\x6F\x6C\x62\x61\x72\x48\x65\x69\x67\x68\x74","\x66\x6F\x6F\x74\x65\x72\x48\x65\x69\x67\x68\x74","\x68\x73\x70\x6C\x69\x74\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x76\x73\x70\x6C\x69\x74\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x61\x64\x64\x55\x6E\x64\x6F\x4C\x69\x73\x74\x65\x6E\x65\x72","\x61\x64\x64\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x4C\x69\x73\x74\x65\x6E\x65\x72","\x70\x61\x73\x74\x65","\x67\x65\x74","\x69\x73\x45\x6D\x70\x74\x79","\x73\x65\x74\x45\x6E\x61\x62\x6C\x65\x64","\x63\x75\x74","\x63\x6F\x70\x79","\x6F\x70\x65\x6E\x65\x72","\x6F\x70\x65\x6E\x46\x69\x6C\x65","\x70\x61\x72\x73\x65\x58\x6D\x6C","\x64\x6F\x63\x75\x6D\x65\x6E\x74\x45\x6C\x65\x6D\x65\x6E\x74","\x73\x65\x74\x47\x72\x61\x70\x68\x58\x6D\x6C","\x6D\x6F\x64\x69\x66\x69\x65\x64","\x63\x6C\x65\x61\x72","\x75\x6E\x64\x6F\x4D\x61\x6E\x61\x67\x65\x72","\x66\x69\x6C\x65\x6E\x61\x6D\x65","\x69\x6E\x76\x61\x6C\x69\x64\x4F\x72\x4D\x69\x73\x73\x69\x6E\x67\x46\x69\x6C\x65","\x3A\x20","\x6D\x65\x73\x73\x61\x67\x65","\x61\x6C\x65\x72\x74","\x73\x65\x74\x43\x6F\x6E\x73\x75\x6D\x65\x72","\x6F\x70\x65\x6E\x53\x74\x72\x69\x6E\x67","\x64\x61\x74\x61","\x6E\x65\x77","\x67\x65\x74\x47\x72\x61\x70\x68\x58\x6D\x6C","\x67\x65\x74\x50\x72\x65\x74\x74\x79\x58\x6D\x6C","\x67\x65\x74\x49\x74\x65\x6D","\x72\x65\x70\x6C\x61\x63\x65","\x63\x6F\x6E\x66\x69\x72\x6D","\x73\x65\x74\x49\x74\x65\x6D","\x73\x61\x76\x65\x64","\x20","\x73\x65\x74\x53\x74\x61\x74\x75\x73","\x6C\x65\x6E\x67\x74\x68","\x50\x4F\x53\x54","\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65","\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x2F\x78\x2D\x77\x77\x77\x2D\x66\x6F\x72\x6D\x2D\x75\x72\x6C\x65\x6E\x63\x6F\x64\x65\x64","\x73\x65\x74\x52\x65\x71\x75\x65\x73\x74\x48\x65\x61\x64\x65\x72","\x41\x75\x74\x68\x6F\x72\x69\x7A\x61\x74\x69\x6F\x6E","\x42\x65\x61\x72\x65\x72\x20","\x74\x6F\x6B\x65\x6E","\x6F\x6E\x6C\x6F\x61\x64","\x72\x65\x61\x64\x79\x53\x74\x61\x74\x65","\x73\x74\x61\x74\x75\x73","\x50\x72\x6F\x6A\x65\x63\x74\x20","\x6E\x61\x6D\x65","\x72\x65\x73\x70\x6F\x6E\x73\x65","\x70\x61\x72\x73\x65","\x20\x69\x73\x20\x6F\x70\x65\x6E\x69\x6E\x67\x20\x69\x6E\x20\x6E\x65\x77\x20\x77\x69\x6E\x64\x6F\x77\x21","\x6A\x73\x63\x72\x69\x70\x74\x79\x2F\x70\x72\x6F\x6A\x65\x63\x74\x73\x2F\x76\x69\x65\x77\x2F","\x69\x64","\x5F\x62\x6C\x61\x6E\x6B","\x45\x72\x72\x6F\x72\x20\x63\x72\x65\x61\x74\x69\x6E\x67\x20\x70\x72\x6F\x6A\x65\x63\x74\x3A\x20","\x65\x72\x72\x6F\x72\x73","\x45\x72\x72\x6F\x72\x20\x63\x72\x65\x61\x74\x69\x6E\x67\x20\x70\x72\x6F\x6A\x65\x63\x74","\x20\x28","\x73\x74\x61\x74\x75\x73\x54\x65\x78\x74","\x6F\x6E\x65\x72\x72\x6F\x72","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x3D\x70\x72\x6F\x6A\x65\x63\x74\x5F\x6E\x65\x77\x26\x6E\x61\x6D\x65\x3D","\x73\x65\x6E\x64","\x64\x72\x61\x77\x69\x6E\x67\x54\x6F\x6F\x4C\x61\x72\x67\x65","\x70\x6F\x70\x75\x70","\x73\x61\x76\x65","\x50\x55\x54","\x55\x70\x64\x61\x74\x65\x64\x20\x61\x74\x20","\x75\x70\x64\x61\x74\x65\x64\x41\x74","\x45\x72\x72\x6F\x72\x20\x73\x61\x76\x69\x6E\x67\x20\x70\x72\x6F\x6A\x65\x63\x74\x3A\x20","\x45\x72\x72\x6F\x72\x20\x73\x61\x76\x69\x6E\x67\x20\x70\x72\x6F\x6A\x65\x63\x74","\x64\x72\x61\x66\x74\x3D","\x45\x72\x72\x6F\x72\x20\x73\x61\x76\x69\x6E\x67\x20\x66\x69\x6C\x65","\x73\x61\x76\x65\x41\x73","\x6A\x73\x63\x72\x69\x70\x74\x79\x2F\x70\x72\x6F\x6A\x65\x63\x74\x2F","\x45\x72\x72\x6F\x72\x20\x63\x6C\x6F\x6E\x69\x6E\x67\x20\x70\x72\x6F\x6A\x65\x63\x74\x3A\x20","\x45\x72\x72\x6F\x72\x20\x63\x6C\x6F\x6E\x69\x6E\x67\x20\x70\x72\x6F\x6A\x65\x63\x74","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x3D\x70\x72\x6F\x6A\x65\x63\x74\x5F\x63\x6C\x6F\x6E\x65\x64\x26\x6E\x61\x6D\x65\x3D","\x26\x64\x72\x61\x66\x74\x3D","\x26\x70\x72\x6F\x64\x75\x63\x74\x69\x6F\x6E\x3D","\x76\x61\x6C\x69\x64\x61\x74\x65","\x67\x65\x74\x52\x6F\x6F\x74","\x6D\x6F\x64\x65\x6C","\x67\x65\x74\x43\x68\x69\x6C\x64\x43\x6F\x75\x6E\x74","\x67\x65\x74\x43\x68\x69\x6C\x64\x41\x74","\x69\x73\x56\x61\x6C\x69\x64\x52\x6F\x6F\x74","\x3C\x62\x72\x3E","\x73\x65\x74\x43\x65\x6C\x6C\x57\x61\x72\x6E\x69\x6E\x67","","\x67\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x51\x75\x65\x73\x74\x69\x6F\x6E\x20\x63\x61\x6E\x20\x6E\x6F\x74\x20\x62\x65\x20\x65\x6D\x70\x74\x79","\x0A","\x6C\x61\x62\x65\x6C","\x4C\x61\x62\x65\x6C\x20\x63\x61\x6E\x20\x6E\x6F\x74\x20\x62\x65\x20\x65\x6D\x70\x74\x79","\x76\x61\x6C\x69\x64\x61\x74\x65\x42\x6C\x6F\x63\x6B","\x4F\x6E\x6C\x79\x20\x6F\x6E\x65\x20\x53\x74\x61\x72\x74\x20\x62\x6C\x6F\x63\x6B\x20\x69\x73\x20\x61\x6C\x6C\x6F\x77\x65\x64","\x6E\x6F\x64\x65\x4E\x61\x6D\x65","\x67\x65\x74\x49\x64","\x67\x65\x74\x43\x65\x6C\x6C","\x67\x65\x74\x56\x61\x6C\x75\x65","\x6E\x75\x6C\x6C","\x56\x61\x6C\x75\x65\x20\x63\x61\x6E\x20\x6E\x6F\x74\x20\x62\x65\x20\x65\x6D\x70\x74\x79","\x2C","\x73\x70\x6C\x69\x74","\x74\x72\x69\x6D","\x56\x61\x6C\x75\x65","\x20\x63\x61\x6E\x20\x6E\x6F\x74\x20\x62\x65\x20\x65\x6D\x70\x74\x79","\x66\x6F\x72\x45\x61\x63\x68","\x69\x73\x43\x65\x6C\x6C\x43\x6F\x6C\x6C\x61\x70\x73\x65\x64","\x63\x6F\x6E\x74\x61\x69\x6E\x73\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E\x45\x72\x72\x6F\x72\x73\x52\x65\x73\x6F\x75\x72\x63\x65","\x67\x65\x74\x54\x65\x72\x6D\x69\x6E\x61\x6C","\x67\x65\x74\x45\x64\x67\x65\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E\x45\x72\x72\x6F\x72","\x67\x65\x74\x43\x65\x6C\x6C\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E\x45\x72\x72\x6F\x72","\x76\x61\x6C\x69\x64\x61\x74\x65\x43\x65\x6C\x6C","\x67\x65\x74\x50\x61\x72\x65\x6E\x74","\x67\x65\x74\x44\x65\x66\x61\x75\x6C\x74\x50\x61\x72\x65\x6E\x74","\x63\x68\x69\x6C\x64\x72\x65\x6E","\x70\x75\x62\x6C\x69\x73\x68","\x50\x75\x62\x6C\x69\x73\x68\x65\x64\x20\x61\x74\x20","\x45\x72\x72\x6F\x72\x20\x70\x75\x62\x6C\x69\x73\x68\x69\x6E\x67\x20\x70\x72\x6F\x6A\x65\x63\x74\x3A\x20","\x45\x72\x72\x6F\x72\x20\x70\x75\x62\x6C\x69\x73\x68\x69\x6E\x67\x20\x70\x72\x6F\x6A\x65\x63\x74","\x45\x72\x72\x6F\x72\x20\x70\x75\x62\x6C\x69\x73\x68\x69\x6E\x67\x20\x66\x69\x6C\x65","\x76\x61\x72\x69\x61\x62\x6C\x65","\x56\x61\x72\x69\x61\x62\x6C\x65\x20\x63\x72\x65\x61\x74\x65\x64\x20\x61\x74\x20","\x63\x72\x65\x61\x74\x65\x64\x41\x74","\x45\x72\x72\x6F\x72\x20\x63\x72\x65\x61\x74\x69\x6E\x67\x20\x76\x61\x72\x69\x61\x62\x6C\x65\x3A\x20","\x45\x72\x72\x6F\x72\x20\x63\x72\x65\x61\x74\x69\x6E\x67\x20\x76\x61\x72\x69\x61\x62\x6C\x65","\x6E\x61\x6D\x65\x3D","\x67\x65\x74\x55\x72\x6C","\x70\x61\x74\x68\x6E\x61\x6D\x65","\x6C\x6F\x63\x61\x74\x69\x6F\x6E","\x3F","\x26","\x3D","\x75\x6E\x64\x6F","\x72\x65\x64\x6F","\x63\x61\x6E\x55\x6E\x64\x6F","\x63\x61\x6E\x52\x65\x64\x6F","\x69\x73\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x45\x6D\x70\x74\x79","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73","\x64\x65\x6C\x65\x74\x65","\x64\x75\x70\x6C\x69\x63\x61\x74\x65","\x62\x6F\x6C\x64","\x69\x74\x61\x6C\x69\x63","\x75\x6E\x64\x65\x72\x6C\x69\x6E\x65","\x74\x6F\x46\x72\x6F\x6E\x74","\x74\x6F\x42\x61\x63\x6B","\x64\x61\x73\x68\x65\x64","\x72\x6F\x75\x6E\x64\x65\x64","\x73\x68\x61\x64\x6F\x77","\x74\x69\x6C\x74","\x61\x75\x74\x6F\x73\x69\x7A\x65","\x63\x75\x72\x76\x65\x64","\x72\x6F\x74\x61\x74\x69\x6F\x6E","\x77\x6F\x72\x64\x57\x72\x61\x70","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x6F\x75\x6E\x74","\x67\x72\x6F\x75\x70","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C","\x75\x6E\x67\x72\x6F\x75\x70","\x72\x65\x6D\x6F\x76\x65\x46\x72\x6F\x6D\x47\x72\x6F\x75\x70","\x66\x6F\x6E\x74\x46\x61\x6D\x69\x6C\x79","\x66\x6F\x6E\x74\x53\x69\x7A\x65","\x61\x6C\x69\x67\x6E\x6D\x65\x6E\x74","\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x74\x65\x78\x74","\x66\x6F\x72\x6D\x61\x74","\x61\x72\x72\x61\x6E\x67\x65","\x6C\x69\x6E\x65\x77\x69\x64\x74\x68","\x73\x70\x61\x63\x69\x6E\x67","\x6C\x69\x6E\x65","\x6C\x69\x6E\x65\x65\x6E\x64","\x6C\x69\x6E\x65\x73\x74\x61\x72\x74","\x73\x65\x74\x41\x73\x44\x65\x66\x61\x75\x6C\x74\x45\x64\x67\x65","\x61\x6C\x69\x67\x6E","\x67\x65\x74\x53\x74\x61\x74\x65","\x69\x73\x4C\x6F\x6F\x70","\x64\x69\x72\x65\x63\x74\x69\x6F\x6E","\x66\x6F\x6C\x64\x69\x6E\x67\x45\x6E\x61\x62\x6C\x65\x64","\x63\x75\x72\x72\x65\x6E\x74\x52\x6F\x6F\x74","\x6E\x61\x76\x69\x67\x61\x74\x69\x6F\x6E","\x68\x6F\x6D\x65","\x65\x78\x69\x74\x47\x72\x6F\x75\x70","\x65\x6E\x74\x65\x72\x47\x72\x6F\x75\x70","\x65\x78\x70\x61\x6E\x64","\x63\x6F\x6C\x6C\x61\x70\x73\x65","\x65\x64\x69\x74\x4C\x69\x6E\x6B","\x67\x65\x74\x4C\x69\x6E\x6B\x46\x6F\x72\x43\x65\x6C\x6C","\x6F\x70\x65\x6E\x4C\x69\x6E\x6B","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x4D\x6F\x64\x65\x6C","\x63\x6C\x69\x65\x6E\x74\x57\x69\x64\x74\x68","\x63\x6C\x69\x65\x6E\x74\x48\x65\x69\x67\x68\x74","\x6D\x69\x6E","\x6D\x61\x78","\x68\x65\x69\x67\x68\x74","\x70\x78","\x74\x6F\x70","\x49\x53\x5F\x51\x55\x49\x52\x4B\x53","\x77\x69\x64\x74\x68","\x62\x6F\x74\x74\x6F\x6D","\x6C\x65\x66\x74","\x64\x69\x73\x70\x6C\x61\x79","\x6E\x6F\x6E\x65","\x68\x73\x70\x6C\x69\x74","\x76\x73\x70\x6C\x69\x74","\x67\x65\x4D\x65\x6E\x75\x62\x61\x72\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x63\x72\x65\x61\x74\x65\x44\x69\x76","\x67\x65\x54\x6F\x6F\x6C\x62\x61\x72\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x67\x65\x53\x69\x64\x65\x62\x61\x72\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x67\x65\x4F\x75\x74\x6C\x69\x6E\x65\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x67\x65\x44\x69\x61\x67\x72\x61\x6D\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x67\x65\x46\x6F\x6F\x74\x65\x72\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x67\x65\x48\x73\x70\x6C\x69\x74","\x67\x65\x56\x73\x70\x6C\x69\x74","\x30\x70\x78","\x72\x69\x67\x68\x74","\x6D\x65\x6E\x75\x62\x61\x72","\x67\x65\x4D\x65\x6E\x75\x62\x61\x72","\x63\x72\x65\x61\x74\x65\x4D\x65\x6E\x75\x62\x61\x72","\x61\x70\x70\x65\x6E\x64\x43\x68\x69\x6C\x64","\x74\x6F\x6F\x6C\x62\x61\x72","\x67\x65\x54\x6F\x6F\x6C\x62\x61\x72","\x63\x72\x65\x61\x74\x65\x54\x6F\x6F\x6C\x62\x61\x72","\x73\x69\x64\x65\x62\x61\x72","\x63\x72\x65\x61\x74\x65\x53\x69\x64\x65\x62\x61\x72","\x63\x72\x65\x61\x74\x65\x46\x6F\x6F\x74\x65\x72","\x73\x74\x61\x74\x75\x73\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x63\x72\x65\x61\x74\x65\x53\x74\x61\x74\x75\x73\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x73\x74\x61\x74\x75\x73\x43\x68\x61\x6E\x67\x65\x64","\x67\x65\x74\x53\x74\x61\x74\x75\x73","\x73\x65\x74\x53\x74\x61\x74\x75\x73\x54\x65\x78\x74","\x61\x64\x64\x53\x70\x6C\x69\x74\x48\x61\x6E\x64\x6C\x65\x72","\x61","\x63\x72\x65\x61\x74\x65\x45\x6C\x65\x6D\x65\x6E\x74","\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65","\x67\x65\x49\x74\x65\x6D\x20\x67\x65\x53\x74\x61\x74\x75\x73","\x69\x6E\x6E\x65\x72\x48\x54\x4D\x4C","\x67\x65\x46\x6F\x6F\x74\x65\x72","\x64\x69\x76","\x63\x72\x65\x61\x74\x65\x48\x65\x61\x64\x65\x72","\x63\x72\x65\x61\x74\x65\x46\x6F\x72\x6D","\x66\x6F\x72\x6D","\x67\x65\x74\x43\x6C\x69\x65\x6E\x74\x58","\x67\x65\x74\x43\x6C\x69\x65\x6E\x74\x59","\x78","\x79","\x6D\x6F\x75\x73\x65\x6D\x6F\x76\x65","\x74\x6F\x75\x63\x68\x6D\x6F\x76\x65","\x6D\x6F\x75\x73\x65\x75\x70","\x74\x6F\x75\x63\x68\x65\x6E\x64","\x68\x69\x64\x65\x44\x69\x61\x6C\x6F\x67","\x64\x69\x61\x6C\x6F\x67","\x49\x53\x5F\x56\x4D\x4C","\x63\x6C\x6F\x73\x65","\x73\x61\x76\x65\x46\x69\x6C\x65","\x67\x65\x74\x4F\x72\x43\x72\x65\x61\x74\x65\x46\x69\x6C\x65\x6E\x61\x6D\x65","\x70\x75\x62\x6C\x69\x73\x68\x46\x69\x6C\x65","\x65\x78\x65\x63\x75\x74\x65\x4C\x61\x79\x6F\x75\x74","\x61\x6E\x69\x6D\x61\x74\x65","\x62\x65\x67\x69\x6E\x55\x70\x64\x61\x74\x65","\x65\x78\x65\x63\x75\x74\x65","\x43\x61\x6D\x69\x6E\x6F","\x75\x73\x65\x72\x41\x67\x65\x6E\x74","\x65\x6E\x64\x55\x70\x64\x61\x74\x65","\x73\x74\x61\x72\x74\x41\x6E\x69\x6D\x61\x74\x69\x6F\x6E","\x69\x73\x43\x6F\x6E\x74\x72\x6F\x6C\x44\x6F\x77\x6E","\x49\x53\x5F\x4D\x41\x43","\x6D\x65\x74\x61\x4B\x65\x79","\x6D\x6F\x76\x65\x43\x65\x6C\x6C\x73","\x73\x63\x72\x6F\x6C\x6C\x43\x65\x6C\x6C\x54\x6F\x56\x69\x73\x69\x62\x6C\x65","\x65\x6E\x61\x62\x6C\x65\x64","\x66\x75\x6E\x63\x74","\x62\x69\x6E\x64\x43\x6F\x6E\x74\x72\x6F\x6C\x53\x68\x69\x66\x74\x4B\x65\x79","\x62\x69\x6E\x64\x43\x6F\x6E\x74\x72\x6F\x6C\x4B\x65\x79","\x62\x69\x6E\x64\x53\x68\x69\x66\x74\x4B\x65\x79","\x62\x69\x6E\x64\x4B\x65\x79","\x65\x73\x63\x61\x70\x65","\x65\x6E\x74\x65\x72","\x66\x6F\x6C\x64\x43\x65\x6C\x6C\x73","\x7A\x6F\x6F\x6D\x49\x6E","\x7A\x6F\x6F\x6D\x4F\x75\x74","\x73\x65\x6C\x65\x63\x74\x41\x6C\x6C","\x73\x65\x6C\x65\x63\x74\x56\x65\x72\x74\x69\x63\x65\x73","\x73\x65\x6C\x65\x63\x74\x45\x64\x67\x65\x73","\x65\x78\x70\x6F\x72\x74","\x63\x6F\x6E\x6E\x65\x63\x74","\x67\x72\x69\x64","\x61\x62\x6F\x75\x74","\x20\x6D\x75\x73\x74\x20\x68\x61\x76\x65\x20","\x20\x6F\x75\x74\x67\x6F\x69\x6E\x67\x20\x65\x64\x67\x65\x2E","\x70\x75\x73\x68","\x20\x69\x6E\x63\x6F\x6D\x69\x6E\x67\x20\x65\x64\x67\x65\x2E"];EditorUi= function(_0xb12dx1,_0xb12dx2){this[_0x74c6[0]]= _0xb12dx1|| new Editor();this[_0x74c6[1]]= _0xb12dx2|| document[_0x74c6[3]](_0x74c6[2]);var _0xb12dx3=_0xb12dx1[_0x74c6[4]];var _0xb12dx4=this;this[_0x74c6[1]][_0x74c6[6]][_0x74c6[5]]= _0x74c6[7]; new Image()[_0x74c6[8]]= mxPopupMenu[_0x74c6[10]][_0x74c6[9]];if(mxConnectionHandler[_0x74c6[10]][_0x74c6[11]]!= null){ new Image()[_0x74c6[8]]= mxConnectionHandler[_0x74c6[10]][_0x74c6[11]][_0x74c6[8]]};this[_0x74c6[12]]= new Actions(this);this[_0x74c6[13]]= new Menus(this);this[_0x74c6[14]]();this[_0x74c6[15]]();this[_0x74c6[16]]();var _0xb12dx5=mxUtils[_0x74c6[20]](this,function(_0xb12dx6){if(_0xb12dx6== null){_0xb12dx6= window[_0x74c6[17]]};if(this[_0x74c6[18]](_0xb12dx6)){return true};return _0xb12dx3[_0x74c6[19]]()});if(this[_0x74c6[1]]== document[_0x74c6[21]]){this[_0x74c6[23]][_0x74c6[22]]= _0xb12dx5;this[_0x74c6[23]][_0x74c6[24]]= _0xb12dx5;this[_0x74c6[25]][_0x74c6[22]]= _0xb12dx5;this[_0x74c6[25]][_0x74c6[24]]= _0xb12dx5;this[_0x74c6[26]][_0x74c6[22]]= _0xb12dx5;this[_0x74c6[26]][_0x74c6[24]]= _0xb12dx5;this[_0x74c6[27]][_0x74c6[22]]= _0xb12dx5;this[_0x74c6[27]][_0x74c6[24]]= _0xb12dx5;this[_0x74c6[28]][_0x74c6[22]]= _0xb12dx5;this[_0x74c6[28]][_0x74c6[24]]= _0xb12dx5};if(mxClient[_0x74c6[29]]&& ( typeof (document[_0x74c6[30]])=== _0x74c6[31]|| document[_0x74c6[30]]< 9)){mxEvent[_0x74c6[33]](this[_0x74c6[26]],_0x74c6[32],_0xb12dx5);mxEvent[_0x74c6[33]](this[_0x74c6[27]],_0x74c6[32],_0xb12dx5)}else {this[_0x74c6[26]][_0x74c6[34]]= _0xb12dx5;this[_0x74c6[27]][_0x74c6[34]]= _0xb12dx5};_0xb12dx3[_0x74c6[35]](this[_0x74c6[26]]);_0xb12dx3[_0x74c6[15]]();_0xb12dx3[_0x74c6[1]][_0x74c6[38]](_0x74c6[36],_0x74c6[37]);_0xb12dx3[_0x74c6[1]][_0x74c6[6]][_0x74c6[39]]= _0x74c6[40];_0xb12dx3[_0x74c6[1]][_0x74c6[6]][_0x74c6[41]]= _0x74c6[42]+ _0xb12dx1[_0x74c6[43]]+ _0x74c6[44];_0xb12dx3[_0x74c6[1]][_0x74c6[6]][_0x74c6[45]]= _0x74c6[46];_0xb12dx3[_0x74c6[1]][_0x74c6[47]]();var _0xb12dx7=_0xb12dx3[_0x74c6[48]];_0xb12dx3[_0x74c6[48]]= function(_0xb12dx8,_0xb12dx9,_0xb12dxa){if(_0xb12dx8== mxEvent[_0x74c6[49]]){this[_0x74c6[1]][_0x74c6[47]]()};_0xb12dx7[_0x74c6[50]](this,arguments)};this[_0x74c6[58]](_0xb12dx3[_0x74c6[51]],[_0x74c6[52],_0x74c6[53],_0x74c6[54],_0x74c6[55],_0x74c6[56]],[[1,1],[0,0],[1,1],[1,_0x74c6[57]],[1,_0x74c6[57]]],[[0,0],[1,_0x74c6[57]],[1,_0x74c6[57]],[1,_0x74c6[57]],[1,_0x74c6[57]]]);_0xb12dx3[_0x74c6[59]]= function(_0xb12dx6,_0xb12dxb){var _0xb12dxc=[_0x74c6[55]];var _0xb12dxd= new mxEventObject(mxEvent.DOUBLE_CLICK,_0x74c6[17],_0xb12dx6,_0x74c6[60],_0xb12dxb);this[_0x74c6[61]](_0xb12dxd);if(this[_0x74c6[62]]()&& !mxEvent[_0x74c6[63]](_0xb12dx6)&& !_0xb12dxd[_0x74c6[63]]()){if(this[_0x74c6[65]]()[_0x74c6[64]](_0xb12dxb)){if(_0xb12dxc[_0x74c6[69]](_0xb12dxb[_0x74c6[68]][_0x74c6[67]][_0x74c6[66]])>= 0){this[_0x74c6[70]](_0xb12dxb)}}else {if(this[_0x74c6[65]]()[_0x74c6[71]](_0xb12dxb)){console[_0x74c6[72]](_0xb12dx4);console[_0x74c6[72]](_0xb12dxb);_0xb12dx4[_0x74c6[73]]( new GeneralDialog(_0xb12dx4,_0xb12dxb)[_0x74c6[1]],320,280,true,true)}};_0xb12dxd[_0x74c6[74]]()}};_0xb12dx3[_0x74c6[76]][_0x74c6[75]]= true;_0xb12dx3[_0x74c6[76]][_0x74c6[77]]= mxUtils[_0x74c6[20]](this,function(_0xb12dxe,_0xb12dxb,_0xb12dx6){this[_0x74c6[13]][_0x74c6[78]](_0xb12dxe,_0xb12dxb,_0xb12dx6)});_0xb12dx1[_0x74c6[80]][_0x74c6[35]](this[_0x74c6[79]]);mxEvent[_0x74c6[82]](document,mxUtils[_0x74c6[20]](this,function(_0xb12dx6){_0xb12dx3[_0x74c6[76]][_0x74c6[81]]()}));if(mxClient[_0x74c6[83]]){mxEvent[_0x74c6[33]](_0xb12dx3[_0x74c6[1]],_0x74c6[84],mxUtils[_0x74c6[20]](this,function(_0xb12dx6){_0xb12dx3[_0x74c6[89]][_0x74c6[88]]()[_0x74c6[38]](_0x74c6[85],_0x74c6[86]+ _0xb12dx6[_0x74c6[87]]+ _0x74c6[44]);_0xb12dx3[_0x74c6[89]][_0x74c6[91]]()[_0x74c6[6]][_0x74c6[90]]= _0x74c6[7]}));mxEvent[_0x74c6[33]](_0xb12dx3[_0x74c6[1]],_0x74c6[92],mxUtils[_0x74c6[20]](this,function(_0xb12dx6){_0xb12dx3[_0x74c6[89]][_0x74c6[88]]()[_0x74c6[93]](_0x74c6[85]);_0xb12dx3[_0x74c6[94]]= true;_0xb12dx3[_0x74c6[95]](_0xb12dx6[_0x74c6[87]]);_0xb12dx3[_0x74c6[89]][_0x74c6[91]]()[_0x74c6[6]][_0x74c6[90]]= _0x74c6[96]}))};var _0xb12dxf=this[_0x74c6[97]](_0xb12dx1);this[_0x74c6[98]]= function(){return _0xb12dxf};mxEvent[_0x74c6[33]](window,_0x74c6[99],mxUtils[_0x74c6[20]](this,function(){this[_0x74c6[15]]();_0xb12dx3[_0x74c6[100]]();this[_0x74c6[0]][_0x74c6[80]][_0x74c6[101]](false);this[_0x74c6[0]][_0x74c6[80]][_0x74c6[80]][_0x74c6[100]]()}));this[_0x74c6[35]]();this[_0x74c6[102]]()};EditorUi[_0x74c6[10]][_0x74c6[103]]= (mxClient[_0x74c6[83]])?16:8;EditorUi[_0x74c6[10]][_0x74c6[104]]= 33;EditorUi[_0x74c6[10]][_0x74c6[105]]= 36;EditorUi[_0x74c6[10]][_0x74c6[106]]= 28;EditorUi[_0x74c6[10]][_0x74c6[107]]= 204;EditorUi[_0x74c6[10]][_0x74c6[108]]= 190;EditorUi[_0x74c6[10]][_0x74c6[35]]= function(){this[_0x74c6[109]]();this[_0x74c6[110]]();var _0xb12dx10=this[_0x74c6[12]][_0x74c6[112]](_0x74c6[111]);var _0xb12dx11=function(){_0xb12dx10[_0x74c6[114]](!mxClipboard[_0x74c6[113]]())};var _0xb12dx12=mxClipboard[_0x74c6[115]];mxClipboard[_0x74c6[115]]= function(){_0xb12dx12[_0x74c6[50]](this,arguments);_0xb12dx11()};var _0xb12dx13=mxClipboard[_0x74c6[116]];mxClipboard[_0x74c6[116]]= function(){_0xb12dx13[_0x74c6[50]](this,arguments);_0xb12dx11()}};EditorUi[_0x74c6[10]][_0x74c6[18]]= function(_0xb12dx6){return false};EditorUi[_0x74c6[10]][_0x74c6[102]]= function(){try{if(window[_0x74c6[117]]!= null&& window[_0x74c6[117]][_0x74c6[118]]!= null){window[_0x74c6[117]][_0x74c6[118]][_0x74c6[130]](mxUtils[_0x74c6[20]](this,function(_0xb12dx14,_0xb12dx15){try{var _0xb12dx16=mxUtils[_0x74c6[119]](_0xb12dx14);this[_0x74c6[0]][_0x74c6[121]](_0xb12dx16[_0x74c6[120]]);this[_0x74c6[0]][_0x74c6[122]]= false;this[_0x74c6[0]][_0x74c6[124]][_0x74c6[123]]();if(_0xb12dx15!= null){this[_0x74c6[0]][_0x74c6[125]]= _0xb12dx15}}catch(e){mxUtils[_0x74c6[129]](mxResources[_0x74c6[112]](_0x74c6[126])+ _0x74c6[127]+ e[_0x74c6[128]])}}))}}catch(e){}};EditorUi[_0x74c6[10]][_0x74c6[131]]= function(_0xb12dx14,_0xb12dx15,_0xb12dx17){try{var _0xb12dx16=mxUtils[_0x74c6[119]](_0xb12dx14);this[_0x74c6[0]][_0x74c6[121]](_0xb12dx16[_0x74c6[120]]);this[_0x74c6[0]][_0x74c6[122]]= false;this[_0x74c6[0]][_0x74c6[124]][_0x74c6[123]]();if(_0xb12dx15!= null){this[_0x74c6[0]][_0x74c6[125]]= _0xb12dx15};if(_0xb12dx17!= null){this[_0x74c6[0]][_0x74c6[132]]= _0xb12dx17}}catch(e){mxUtils[_0x74c6[129]](mxResources[_0x74c6[112]](_0x74c6[126])+ _0x74c6[127]+ e[_0x74c6[128]])}};EditorUi[_0x74c6[10]][_0x74c6[133]]= function(_0xb12dx18){var _0xb12dx1=this[_0x74c6[0]];if(_0xb12dx18!= null){var _0xb12dx14=mxUtils[_0x74c6[135]](this[_0x74c6[0]][_0x74c6[134]]());try{if(useLocalStorage){if(localStorage[_0x74c6[136]](_0xb12dx18)!= null&& !mxUtils[_0x74c6[138]](mxResources[_0x74c6[112]](_0x74c6[137],[_0xb12dx18]))){return};localStorage[_0x74c6[139]](_0xb12dx18,_0xb12dx14);this[_0x74c6[0]][_0x74c6[142]](mxResources[_0x74c6[112]](_0x74c6[140])+ _0x74c6[141]+ new Date())}else {console[_0x74c6[72]](_0xb12dx14[_0x74c6[143]]);console[_0x74c6[72]](MAX_REQUEST_SIZE);if(_0xb12dx14[_0x74c6[143]]< MAX_REQUEST_SIZE){_0xb12dx14= encodeURIComponent(_0xb12dx14);_0xb12dx18= encodeURIComponent(_0xb12dx18);var _0xb12dx19= new XMLHttpRequest();_0xb12dx19[_0x74c6[102]](_0x74c6[144],SAVE_URL,true);_0xb12dx19[_0x74c6[147]](_0x74c6[145],_0x74c6[146]);_0xb12dx19[_0x74c6[147]](_0x74c6[148],_0x74c6[149]+ _0xb12dx1[_0x74c6[132]][_0x74c6[150]]);_0xb12dx19[_0x74c6[151]]= function(_0xb12dx1a){if(_0xb12dx19[_0x74c6[152]]=== 4){if(_0xb12dx19[_0x74c6[153]]=== 201){_0xb12dx1[_0x74c6[142]](_0x74c6[154]+ JSON[_0x74c6[157]](_0xb12dx19[_0x74c6[156]])[_0x74c6[155]]+ _0x74c6[158]);setTimeout(function(){window[_0x74c6[102]](_0x74c6[159]+ JSON[_0x74c6[157]](_0xb12dx19[_0x74c6[156]])[_0x74c6[160]],_0x74c6[161])},1500)}else {try{var _0xb12dx1b=JSON[_0x74c6[157]](_0xb12dx19[_0x74c6[156]]);_0xb12dx1[_0x74c6[142]](_0x74c6[162]+ _0xb12dx1b[_0x74c6[163]][0][_0x74c6[128]])}catch(_0xb12dx1a){_0xb12dx1[_0x74c6[142]](_0x74c6[164]+ _0x74c6[165]+ _0xb12dx19[_0x74c6[153]]+ _0x74c6[141]+ _0xb12dx19[_0x74c6[166]]+ _0x74c6[44])}}}};_0xb12dx19[_0x74c6[167]]= function(_0xb12dx1a){mxUtils[_0x74c6[129]](_0xb12dx19[_0x74c6[166]])};_0xb12dx19[_0x74c6[169]](_0x74c6[168]+ _0xb12dx18)}else {mxUtils[_0x74c6[129]](mxResources[_0x74c6[112]](_0x74c6[170]));mxUtils[_0x74c6[171]](_0xb12dx14);return}};this[_0x74c6[0]][_0x74c6[125]]= _0xb12dx18;this[_0x74c6[0]][_0x74c6[122]]= false}catch(e){this[_0x74c6[0]][_0x74c6[142]](_0x74c6[164])}}else {this[_0x74c6[0]][_0x74c6[142]](_0x74c6[164])}};EditorUi[_0x74c6[10]][_0x74c6[172]]= function(_0xb12dx18){var _0xb12dx1=this[_0x74c6[0]];if(_0xb12dx18!= null){var _0xb12dx14=mxUtils[_0x74c6[135]](this[_0x74c6[0]][_0x74c6[134]]());try{if(useLocalStorage){if(localStorage[_0x74c6[136]](_0xb12dx18)!= null&& !mxUtils[_0x74c6[138]](mxResources[_0x74c6[112]](_0x74c6[137],[_0xb12dx18]))){return};localStorage[_0x74c6[139]](_0xb12dx18,_0xb12dx14);this[_0x74c6[0]][_0x74c6[142]](mxResources[_0x74c6[112]](_0x74c6[140])+ _0x74c6[141]+ new Date())}else {console[_0x74c6[72]](_0xb12dx14[_0x74c6[143]]);console[_0x74c6[72]](MAX_REQUEST_SIZE);if(_0xb12dx14[_0x74c6[143]]< MAX_REQUEST_SIZE){_0xb12dx14= encodeURIComponent(_0xb12dx14);var _0xb12dx19= new XMLHttpRequest();_0xb12dx19[_0x74c6[102]](_0x74c6[173],SAVE_URL+ this[_0x74c6[0]][_0x74c6[132]][_0x74c6[160]],true);_0xb12dx19[_0x74c6[147]](_0x74c6[145],_0x74c6[146]);_0xb12dx19[_0x74c6[147]](_0x74c6[148],_0x74c6[149]+ _0xb12dx1[_0x74c6[132]][_0x74c6[150]]);_0xb12dx19[_0x74c6[151]]= function(_0xb12dx1a){if(_0xb12dx19[_0x74c6[152]]=== 4){if(_0xb12dx19[_0x74c6[153]]=== 200){_0xb12dx1[_0x74c6[142]](_0x74c6[174]+ JSON[_0x74c6[157]](_0xb12dx19[_0x74c6[156]])[_0x74c6[175]]+ _0x74c6[165]+ _0xb12dx19[_0x74c6[153]]+ _0x74c6[141]+ _0xb12dx19[_0x74c6[166]]+ _0x74c6[44])}else {try{var _0xb12dx1b=JSON[_0x74c6[157]](_0xb12dx19[_0x74c6[156]]);_0xb12dx1[_0x74c6[142]](_0x74c6[176]+ _0xb12dx1b[_0x74c6[163]][0][_0x74c6[128]])}catch(_0xb12dx1a){_0xb12dx1[_0x74c6[142]](_0x74c6[177]+ _0x74c6[165]+ _0xb12dx19[_0x74c6[153]]+ _0x74c6[141]+ _0xb12dx19[_0x74c6[166]]+ _0x74c6[44])}}}};_0xb12dx19[_0x74c6[167]]= function(_0xb12dx1a){mxUtils[_0x74c6[129]](_0xb12dx19[_0x74c6[166]])};_0xb12dx19[_0x74c6[169]](_0x74c6[178]+ _0xb12dx14)}else {mxUtils[_0x74c6[129]](mxResources[_0x74c6[112]](_0x74c6[170]));mxUtils[_0x74c6[171]](_0xb12dx14);return}};this[_0x74c6[0]][_0x74c6[125]]= _0xb12dx18;this[_0x74c6[0]][_0x74c6[122]]= false}catch(e){this[_0x74c6[0]][_0x74c6[142]](_0x74c6[179])}}else {this[_0x74c6[0]][_0x74c6[142]](_0x74c6[179])}};EditorUi[_0x74c6[10]][_0x74c6[180]]= function(_0xb12dx18){var _0xb12dx1=this[_0x74c6[0]];console[_0x74c6[72]](_0xb12dx18);if(_0xb12dx18!= null){var _0xb12dx14=mxUtils[_0x74c6[135]](this[_0x74c6[0]][_0x74c6[134]]());try{if(useLocalStorage){if(localStorage[_0x74c6[136]](_0xb12dx18)!= null&& !mxUtils[_0x74c6[138]](mxResources[_0x74c6[112]](_0x74c6[137],[_0xb12dx18]))){return};localStorage[_0x74c6[139]](_0xb12dx18,_0xb12dx14);this[_0x74c6[0]][_0x74c6[142]](mxResources[_0x74c6[112]](_0x74c6[140])+ _0x74c6[141]+ new Date())}else {console[_0x74c6[72]](_0xb12dx14[_0x74c6[143]]);console[_0x74c6[72]](MAX_REQUEST_SIZE);if(_0xb12dx14[_0x74c6[143]]< MAX_REQUEST_SIZE){_0xb12dx14= encodeURIComponent(_0xb12dx14);_0xb12dx18= encodeURIComponent(_0xb12dx18);var _0xb12dx19= new XMLHttpRequest();_0xb12dx19[_0x74c6[102]](_0x74c6[144],SAVE_URL,true);_0xb12dx19[_0x74c6[147]](_0x74c6[145],_0x74c6[146]);_0xb12dx19[_0x74c6[147]](_0x74c6[148],_0x74c6[149]+ _0xb12dx1[_0x74c6[132]][_0x74c6[150]]);_0xb12dx19[_0x74c6[151]]= function(_0xb12dx1a){if(_0xb12dx19[_0x74c6[152]]=== 4){if(_0xb12dx19[_0x74c6[153]]=== 201){_0xb12dx1[_0x74c6[142]](_0x74c6[154]+ JSON[_0x74c6[157]](_0xb12dx19[_0x74c6[156]])[_0x74c6[155]]+ _0x74c6[158]);setTimeout(function(){window[_0x74c6[102]](_0x74c6[181]+ JSON[_0x74c6[157]](_0xb12dx19[_0x74c6[156]])[_0x74c6[160]],_0x74c6[161])},1500)}else {try{var _0xb12dx1b=JSON[_0x74c6[157]](_0xb12dx19[_0x74c6[156]]);_0xb12dx1[_0x74c6[142]](_0x74c6[182]+ _0xb12dx1b[_0x74c6[163]][0][_0x74c6[128]])}catch(_0xb12dx1a){_0xb12dx1[_0x74c6[142]](_0x74c6[183]+ _0x74c6[165]+ _0xb12dx19[_0x74c6[153]]+ _0x74c6[141]+ _0xb12dx19[_0x74c6[166]]+ _0x74c6[44])}}}};_0xb12dx19[_0x74c6[167]]= function(_0xb12dx1a){mxUtils[_0x74c6[129]](_0xb12dx19[_0x74c6[166]])};_0xb12dx19[_0x74c6[169]](_0x74c6[184]+ _0xb12dx18+ _0x74c6[185]+ _0xb12dx14+ _0x74c6[186]+ _0xb12dx14)}else {mxUtils[_0x74c6[129]](mxResources[_0x74c6[112]](_0x74c6[170]));mxUtils[_0x74c6[171]](_0xb12dx14);return}};this[_0x74c6[0]][_0x74c6[125]]= _0xb12dx18;this[_0x74c6[0]][_0x74c6[122]]= false}catch(e){this[_0x74c6[0]][_0x74c6[142]](_0x74c6[179])}}else {this[_0x74c6[0]][_0x74c6[142]](_0x74c6[179])}};EditorUi[_0x74c6[10]][_0x74c6[187]]= function(_0xb12dx1c,_0xb12dx1d){var _0xb12dx3=this[_0x74c6[0]][_0x74c6[4]];_0xb12dx1c= null!= _0xb12dx1c?_0xb12dx1c:_0xb12dx3[_0x74c6[189]][_0x74c6[188]]();_0xb12dx1d= null!= _0xb12dx1d?_0xb12dx1d:{};for(var _0xb12dx1e=!0,_0xb12dx1f=_0xb12dx3[_0x74c6[189]][_0x74c6[190]](_0xb12dx1c),_0xb12dx1a=0;_0xb12dx1a< _0xb12dx1f;_0xb12dx1a++){var _0xb12dx20=_0xb12dx3[_0x74c6[189]][_0x74c6[191]](_0xb12dx1c,_0xb12dx1a),_0xb12dx21=_0xb12dx1d;_0xb12dx3[_0x74c6[192]](_0xb12dx20)&& (_0xb12dx21= {});_0xb12dx21= this[_0x74c6[187]](_0xb12dx20,_0xb12dx21);null!= _0xb12dx21?_0xb12dx3[_0x74c6[194]](_0xb12dx20,_0xb12dx21[_0x74c6[137]](/\n/g,_0x74c6[193])):_0xb12dx3[_0x74c6[194]](_0xb12dx20,null);_0xb12dx1e= _0xb12dx1e&& null== _0xb12dx21};_0xb12dx1f= _0x74c6[195];if(_0xb12dx3[_0x74c6[189]][_0x74c6[71]](_0xb12dx1c)){switch(_0xb12dx1c[_0x74c6[67]][_0x74c6[203]]){case _0x74c6[55]:_0xb12dx1f= (_0xb12dx1c[_0x74c6[67]][_0x74c6[196]](_0x74c6[55])!== _0x74c6[195])?_0x74c6[195]:_0x74c6[197]+ _0x74c6[198];_0xb12dx1f+= (_0xb12dx1c[_0x74c6[67]][_0x74c6[196]](_0x74c6[199])!== _0x74c6[195])?_0x74c6[195]:_0x74c6[200]+ _0x74c6[198];break;case _0x74c6[54]:_0xb12dx1f= (_0xb12dx1c[_0x74c6[67]][_0x74c6[196]](_0x74c6[55])!== _0x74c6[195])?_0x74c6[195]:_0x74c6[197]+ _0x74c6[198];_0xb12dx1f+= (_0xb12dx1c[_0x74c6[67]][_0x74c6[196]](_0x74c6[199])!== _0x74c6[195])?_0x74c6[195]:_0x74c6[200]+ _0x74c6[198];break;case _0x74c6[52]:_0xb12dx1f= this[_0x74c6[201]](_0x74c6[52])?_0x74c6[195]:_0x74c6[202]+ _0x74c6[198];_0xb12dx1f+= (_0xb12dx1c[_0x74c6[67]][_0x74c6[196]](_0x74c6[199])!== _0x74c6[195])?_0x74c6[195]:_0x74c6[200]+ _0x74c6[198];break}};if(_0xb12dx3[_0x74c6[189]][_0x74c6[64]](_0xb12dx1c)){var _0xb12dx22=_0xb12dx3[_0x74c6[189]][_0x74c6[205]](_0xb12dx1c[_0x74c6[68]][_0x74c6[204]]());switch(_0xb12dx22[_0x74c6[67]][_0x74c6[203]]){case _0x74c6[55]:var _0xb12dx23=String(_0xb12dx1c[_0x74c6[206]]());console[_0x74c6[72]](_0xb12dx23);if(_0xb12dx23=== _0x74c6[207]|| _0xb12dx23=== _0x74c6[31]){_0xb12dx1f= _0x74c6[208]+ _0x74c6[198]}else {var _0xb12dx24=_0xb12dx23[_0x74c6[210]](_0x74c6[209]);_0xb12dx24[_0x74c6[214]](function(_0xb12dx25,_0xb12dx26){_0xb12dx1f= _0xb12dx1f+ ((_0xb12dx25[_0x74c6[211]]()!== _0x74c6[195])?_0x74c6[195]:_0x74c6[212]+ (_0xb12dx26+ 1)+ _0x74c6[213]+ _0x74c6[198])})};break}};_0xb12dx3[_0x74c6[215]](_0xb12dx1c)&& !_0xb12dx1e&& (_0xb12dx1f+= (mxResources[_0x74c6[112]](_0xb12dx3[_0x74c6[216]])|| _0xb12dx3[_0x74c6[216]])+ _0x74c6[198]);_0xb12dx1f= _0xb12dx3[_0x74c6[189]][_0x74c6[64]](_0xb12dx1c)?_0xb12dx1f+ (_0xb12dx3[_0x74c6[218]](_0xb12dx1c,_0xb12dx3[_0x74c6[189]][_0x74c6[217]](_0xb12dx1c,!0),_0xb12dx3[_0x74c6[189]][_0x74c6[217]](_0xb12dx1c,!1))|| _0x74c6[195]):_0xb12dx1f+ (_0xb12dx3[_0x74c6[219]](_0xb12dx1c)|| _0x74c6[195]);_0xb12dx1a= _0xb12dx3[_0x74c6[220]](_0xb12dx1c,_0xb12dx1d);null!= _0xb12dx1a&& (_0xb12dx1f+= _0xb12dx1a);null== _0xb12dx3[_0x74c6[189]][_0x74c6[221]](_0xb12dx1c)&& _0xb12dx3[_0x74c6[89]][_0x74c6[187]]();return 0< _0xb12dx1f[_0x74c6[143]]|| !_0xb12dx1e?_0xb12dx1f:null};EditorUi[_0x74c6[10]][_0x74c6[201]]= function(_0xb12dx27){var _0xb12dx3=this[_0x74c6[0]][_0x74c6[4]];var _0xb12dx28=_0xb12dx3[_0x74c6[222]]();var _0xb12dx29=0;_0xb12dx28[_0x74c6[223]][_0x74c6[214]](function(_0xb12dx2a){if(_0xb12dx3[_0x74c6[189]][_0x74c6[71]](_0xb12dx2a)&& _0xb12dx2a[_0x74c6[67]][_0x74c6[203]]== _0xb12dx27){_0xb12dx29++}});return _0xb12dx29> 1?false:true};EditorUi[_0x74c6[10]][_0x74c6[224]]= function(_0xb12dx18){var _0xb12dx1=this[_0x74c6[0]];if(_0xb12dx18!= null){var _0xb12dx1b=this[_0x74c6[187]]();if(_0xb12dx1b=== null){var _0xb12dx14=mxUtils[_0x74c6[135]](this[_0x74c6[0]][_0x74c6[134]]());try{if(useLocalStorage){if(localStorage[_0x74c6[136]](_0xb12dx18)!= null&& !mxUtils[_0x74c6[138]](mxResources[_0x74c6[112]](_0x74c6[137],[_0xb12dx18]))){return};localStorage[_0x74c6[139]](_0xb12dx18,_0xb12dx14);this[_0x74c6[0]][_0x74c6[142]](mxResources[_0x74c6[112]](_0x74c6[140])+ _0x74c6[141]+ new Date())}else {console[_0x74c6[72]](_0xb12dx14[_0x74c6[143]]);console[_0x74c6[72]](MAX_REQUEST_SIZE);if(_0xb12dx14[_0x74c6[143]]< MAX_REQUEST_SIZE){_0xb12dx14= encodeURIComponent(_0xb12dx14);var _0xb12dx19= new XMLHttpRequest();_0xb12dx19[_0x74c6[102]](_0x74c6[173],SAVE_URL+ this[_0x74c6[0]][_0x74c6[132]][_0x74c6[160]],true);_0xb12dx19[_0x74c6[147]](_0x74c6[145],_0x74c6[146]);_0xb12dx19[_0x74c6[147]](_0x74c6[148],_0x74c6[149]+ _0xb12dx1[_0x74c6[132]][_0x74c6[150]]);_0xb12dx19[_0x74c6[151]]= function(_0xb12dx1a){if(_0xb12dx19[_0x74c6[152]]=== 4){if(_0xb12dx19[_0x74c6[153]]=== 200){_0xb12dx1[_0x74c6[142]](_0x74c6[225]+ JSON[_0x74c6[157]](_0xb12dx19[_0x74c6[156]])[_0x74c6[175]]+ _0x74c6[165]+ _0xb12dx19[_0x74c6[153]]+ _0x74c6[141]+ _0xb12dx19[_0x74c6[166]]+ _0x74c6[44])}else {try{var _0xb12dx1b=JSON[_0x74c6[157]](_0xb12dx19[_0x74c6[156]]);_0xb12dx1[_0x74c6[142]](_0x74c6[226]+ _0xb12dx1b[_0x74c6[163]][0][_0x74c6[128]])}catch(_0xb12dx1a){_0xb12dx1[_0x74c6[142]](_0x74c6[227]+ _0x74c6[165]+ _0xb12dx19[_0x74c6[153]]+ _0x74c6[141]+ _0xb12dx19[_0x74c6[166]]+ _0x74c6[44])}}}};_0xb12dx19[_0x74c6[167]]= function(_0xb12dx1a){mxUtils[_0x74c6[129]](_0xb12dx19[_0x74c6[166]])};_0xb12dx19[_0x74c6[169]](_0x74c6[178]+ _0xb12dx14+ _0x74c6[186]+ _0xb12dx14)}else {mxUtils[_0x74c6[129]](mxResources[_0x74c6[112]](_0x74c6[170]));mxUtils[_0x74c6[171]](_0xb12dx14);return}};this[_0x74c6[0]][_0x74c6[125]]= _0xb12dx18;this[_0x74c6[0]][_0x74c6[122]]= false}catch(e){this[_0x74c6[0]][_0x74c6[142]](_0x74c6[228])}}else {_0xb12dx1[_0x74c6[142]](_0x74c6[226])}}else {this[_0x74c6[0]][_0x74c6[142]](_0x74c6[228])}};EditorUi[_0x74c6[10]][_0x74c6[229]]= function(_0xb12dx18){var _0xb12dx1=this[_0x74c6[0]];if(_0xb12dx18!= null){try{var _0xb12dx19= new XMLHttpRequest();_0xb12dx19[_0x74c6[102]](_0x74c6[144],VARIABLE_URL,true);_0xb12dx19[_0x74c6[147]](_0x74c6[145],_0x74c6[146]);_0xb12dx19[_0x74c6[147]](_0x74c6[148],_0x74c6[149]+ _0xb12dx1[_0x74c6[132]][_0x74c6[150]]);_0xb12dx19[_0x74c6[151]]= function(_0xb12dx1a){if(_0xb12dx19[_0x74c6[152]]=== 4){if(_0xb12dx19[_0x74c6[153]]=== 201){_0xb12dx1[_0x74c6[142]](_0x74c6[230]+ JSON[_0x74c6[157]](_0xb12dx19[_0x74c6[156]])[_0x74c6[231]]+ _0x74c6[165]+ _0xb12dx19[_0x74c6[153]]+ _0x74c6[141]+ _0xb12dx19[_0x74c6[166]]+ _0x74c6[44])}else {try{var _0xb12dx1b=JSON[_0x74c6[157]](_0xb12dx19[_0x74c6[156]]);_0xb12dx1[_0x74c6[142]](_0x74c6[232]+ _0xb12dx1b[_0x74c6[163]][0][_0x74c6[128]])}catch(_0xb12dx1a){_0xb12dx1[_0x74c6[142]](_0x74c6[233]+ _0x74c6[165]+ _0xb12dx19[_0x74c6[153]]+ _0x74c6[141]+ _0xb12dx19[_0x74c6[166]]+ _0x74c6[44])}}}};_0xb12dx19[_0x74c6[167]]= function(_0xb12dx1a){mxUtils[_0x74c6[129]](_0xb12dx19[_0x74c6[166]])};_0xb12dx19[_0x74c6[169]](_0x74c6[234]+ _0xb12dx18)}catch(e){this[_0x74c6[0]][_0x74c6[142]](_0x74c6[233])}}else {this[_0x74c6[0]][_0x74c6[142]](_0x74c6[233])}};EditorUi[_0x74c6[10]][_0x74c6[235]]= function(_0xb12dx2b){var _0xb12dx2c=(_0xb12dx2b!= null)?_0xb12dx2b:window[_0x74c6[237]][_0x74c6[236]];var _0xb12dx2d=(_0xb12dx2c[_0x74c6[69]](_0x74c6[238])> 0)?1:0;for(var _0xb12dx26 in urlParams){if(_0xb12dx2d== 0){_0xb12dx2c+= _0x74c6[238]}else {_0xb12dx2c+= _0x74c6[239]};_0xb12dx2c+= _0xb12dx26+ _0x74c6[240]+ urlParams[_0xb12dx26];_0xb12dx2d++};return _0xb12dx2c};EditorUi[_0x74c6[10]][_0x74c6[109]]= function(){var _0xb12dx2e=this[_0x74c6[12]][_0x74c6[112]](_0x74c6[241]);var _0xb12dx2f=this[_0x74c6[12]][_0x74c6[112]](_0x74c6[242]);var _0xb12dx30=this[_0x74c6[0]][_0x74c6[124]];var _0xb12dx31=function(){_0xb12dx2e[_0x74c6[114]](_0xb12dx30[_0x74c6[243]]());_0xb12dx2f[_0x74c6[114]](_0xb12dx30[_0x74c6[244]]())};_0xb12dx30[_0x74c6[33]](mxEvent.ADD,_0xb12dx31);_0xb12dx30[_0x74c6[33]](mxEvent.UNDO,_0xb12dx31);_0xb12dx30[_0x74c6[33]](mxEvent.REDO,_0xb12dx31);_0xb12dx30[_0x74c6[33]](mxEvent.CLEAR,_0xb12dx31);_0xb12dx31()};EditorUi[_0x74c6[10]][_0x74c6[110]]= function(){var _0xb12dx32=mxUtils[_0x74c6[20]](this,function(){var _0xb12dx3=this[_0x74c6[0]][_0x74c6[4]];var _0xb12dx33=!_0xb12dx3[_0x74c6[245]]();var _0xb12dx34=false;var _0xb12dx35=false;var _0xb12dx36=_0xb12dx3[_0x74c6[246]]();if(_0xb12dx36!= null){for(var _0xb12dx37=0;_0xb12dx37< _0xb12dx36[_0x74c6[143]];_0xb12dx37++){var _0xb12dxb=_0xb12dx36[_0xb12dx37];if(_0xb12dx3[_0x74c6[65]]()[_0x74c6[64]](_0xb12dxb)){_0xb12dx35= true};if(_0xb12dx3[_0x74c6[65]]()[_0x74c6[71]](_0xb12dxb)){_0xb12dx34= true};if(_0xb12dx35&& _0xb12dx34){break}}};var _0xb12dx38=[_0x74c6[115],_0x74c6[116],_0x74c6[247],_0x74c6[248],_0x74c6[249],_0x74c6[250],_0x74c6[6],_0x74c6[251],_0x74c6[252],_0x74c6[253],_0x74c6[254],_0x74c6[255],_0x74c6[256],_0x74c6[257],_0x74c6[258]];for(var _0xb12dx37=0;_0xb12dx37< _0xb12dx38[_0x74c6[143]];_0xb12dx37++){this[_0x74c6[12]][_0x74c6[112]](_0xb12dx38[_0xb12dx37])[_0x74c6[114]](_0xb12dx33)};this[_0x74c6[12]][_0x74c6[112]](_0x74c6[259])[_0x74c6[114]](_0xb12dx35);this[_0x74c6[12]][_0x74c6[112]](_0x74c6[260])[_0x74c6[114]](_0xb12dx34);this[_0x74c6[12]][_0x74c6[112]](_0x74c6[261])[_0x74c6[114]](_0xb12dx34);this[_0x74c6[12]][_0x74c6[112]](_0x74c6[263])[_0x74c6[114]](_0xb12dx3[_0x74c6[262]]()> 1);this[_0x74c6[12]][_0x74c6[112]](_0x74c6[265])[_0x74c6[114]](_0xb12dx3[_0x74c6[262]]()== 1&& _0xb12dx3[_0x74c6[65]]()[_0x74c6[190]](_0xb12dx3[_0x74c6[264]]())> 0);var _0xb12dx39=_0xb12dx34&& _0xb12dx3[_0x74c6[262]]()== 1;this[_0x74c6[12]][_0x74c6[112]](_0x74c6[266])[_0x74c6[114]](_0xb12dx39&& _0xb12dx3[_0x74c6[65]]()[_0x74c6[71]](_0xb12dx3[_0x74c6[65]]()[_0x74c6[221]](_0xb12dx3[_0x74c6[264]]())));var _0xb12dx3a=[_0x74c6[267],_0x74c6[268],_0x74c6[269],_0x74c6[270],_0x74c6[271],_0x74c6[272],_0x74c6[273],_0x74c6[274],_0x74c6[275]];for(var _0xb12dx37=0;_0xb12dx37< _0xb12dx3a[_0x74c6[143]];_0xb12dx37++){this[_0x74c6[13]][_0x74c6[112]](_0xb12dx3a[_0xb12dx37])[_0x74c6[114]](_0xb12dx33)};_0xb12dx3a= [_0x74c6[276],_0x74c6[277],_0x74c6[278]];for(var _0xb12dx37=0;_0xb12dx37< _0xb12dx3a[_0x74c6[143]];_0xb12dx37++){this[_0x74c6[13]][_0x74c6[112]](_0xb12dx3a[_0xb12dx37])[_0x74c6[114]](_0xb12dx35)};this[_0x74c6[12]][_0x74c6[112]](_0x74c6[279])[_0x74c6[114]](_0xb12dx35);this[_0x74c6[13]][_0x74c6[112]](_0x74c6[280])[_0x74c6[114]](_0xb12dx3[_0x74c6[262]]()> 1);this[_0x74c6[13]][_0x74c6[112]](_0x74c6[283])[_0x74c6[114]](_0xb12dx34|| (_0xb12dx35&& _0xb12dx3[_0x74c6[282]](_0xb12dx3[_0x74c6[89]][_0x74c6[281]](_0xb12dx3[_0x74c6[264]]()))));this[_0x74c6[13]][_0x74c6[112]](_0x74c6[286])[_0x74c6[114]](_0xb12dx3[_0x74c6[284]]&& ((_0xb12dx3[_0x74c6[89]][_0x74c6[285]]!= null)|| (_0xb12dx3[_0x74c6[262]]()== 1&& _0xb12dx3[_0x74c6[192]](_0xb12dx3[_0x74c6[264]]()))));this[_0x74c6[12]][_0x74c6[112]](_0x74c6[287])[_0x74c6[114]](_0xb12dx3[_0x74c6[89]][_0x74c6[285]]!= null);this[_0x74c6[12]][_0x74c6[112]](_0x74c6[288])[_0x74c6[114]](_0xb12dx3[_0x74c6[89]][_0x74c6[285]]!= null);var _0xb12dx3b=_0xb12dx3[_0x74c6[262]]()== 1&& _0xb12dx3[_0x74c6[192]](_0xb12dx3[_0x74c6[264]]());this[_0x74c6[12]][_0x74c6[112]](_0x74c6[289])[_0x74c6[114]](_0xb12dx3b);this[_0x74c6[12]][_0x74c6[112]](_0x74c6[290])[_0x74c6[114]](_0xb12dx3b);this[_0x74c6[12]][_0x74c6[112]](_0x74c6[291])[_0x74c6[114]](_0xb12dx3b);this[_0x74c6[12]][_0x74c6[112]](_0x74c6[292])[_0x74c6[114]](_0xb12dx3[_0x74c6[262]]()== 1);this[_0x74c6[12]][_0x74c6[112]](_0x74c6[294])[_0x74c6[114]](_0xb12dx3[_0x74c6[262]]()== 1&& _0xb12dx3[_0x74c6[293]](_0xb12dx3[_0x74c6[264]]())!= null)});this[_0x74c6[0]][_0x74c6[4]][_0x74c6[295]]()[_0x74c6[33]](mxEvent.CHANGE,_0xb12dx32);_0xb12dx32()};EditorUi[_0x74c6[10]][_0x74c6[15]]= function(){var _0xb12dx3c=mxClient[_0x74c6[29]]&& (document[_0x74c6[30]]== null|| document[_0x74c6[30]]== 5);var _0xb12dx3d=this[_0x74c6[1]][_0x74c6[296]];var _0xb12dx3e=this[_0x74c6[1]][_0x74c6[297]];if(this[_0x74c6[1]]== document[_0x74c6[21]]){_0xb12dx3d= document[_0x74c6[21]][_0x74c6[296]]|| document[_0x74c6[120]][_0x74c6[296]];_0xb12dx3e= (_0xb12dx3c)?document[_0x74c6[21]][_0x74c6[297]]|| document[_0x74c6[120]][_0x74c6[297]]:document[_0x74c6[120]][_0x74c6[297]]};var _0xb12dx3f=Math[_0x74c6[299]](0,Math[_0x74c6[298]](this[_0x74c6[107]],_0xb12dx3d- this[_0x74c6[103]]- 20));var _0xb12dx40=Math[_0x74c6[299]](0,Math[_0x74c6[298]](this[_0x74c6[108]],_0xb12dx3e- this[_0x74c6[104]]- this[_0x74c6[105]]- this[_0x74c6[106]]- this[_0x74c6[103]]- 1));this[_0x74c6[23]][_0x74c6[6]][_0x74c6[300]]= this[_0x74c6[104]]+ _0x74c6[301];this[_0x74c6[25]][_0x74c6[6]][_0x74c6[302]]= this[_0x74c6[104]]+ _0x74c6[301];this[_0x74c6[25]][_0x74c6[6]][_0x74c6[300]]= this[_0x74c6[105]]+ _0x74c6[301];var _0xb12dx41=this[_0x74c6[104]]+ this[_0x74c6[105]];if(!mxClient[_0x74c6[303]]){_0xb12dx41+= 1};this[_0x74c6[27]][_0x74c6[6]][_0x74c6[302]]= _0xb12dx41+ _0x74c6[301];this[_0x74c6[27]][_0x74c6[6]][_0x74c6[304]]= _0xb12dx3f+ _0x74c6[301];this[_0x74c6[79]][_0x74c6[6]][_0x74c6[304]]= _0xb12dx3f+ _0x74c6[301];this[_0x74c6[79]][_0x74c6[6]][_0x74c6[300]]= _0xb12dx40+ _0x74c6[301];this[_0x74c6[79]][_0x74c6[6]][_0x74c6[305]]= this[_0x74c6[106]]+ _0x74c6[301];this[_0x74c6[26]][_0x74c6[6]][_0x74c6[306]]= (_0xb12dx3f+ this[_0x74c6[103]])+ _0x74c6[301];this[_0x74c6[26]][_0x74c6[6]][_0x74c6[302]]= this[_0x74c6[27]][_0x74c6[6]][_0x74c6[302]];this[_0x74c6[28]][_0x74c6[6]][_0x74c6[300]]= this[_0x74c6[106]]+ _0x74c6[301];this[_0x74c6[28]][_0x74c6[6]][_0x74c6[307]]= _0x74c6[308];this[_0x74c6[309]][_0x74c6[6]][_0x74c6[302]]= this[_0x74c6[27]][_0x74c6[6]][_0x74c6[302]];this[_0x74c6[309]][_0x74c6[6]][_0x74c6[305]]= this[_0x74c6[79]][_0x74c6[6]][_0x74c6[305]];this[_0x74c6[309]][_0x74c6[6]][_0x74c6[306]]= _0xb12dx3f+ _0x74c6[301];this[_0x74c6[310]][_0x74c6[6]][_0x74c6[304]]= this[_0x74c6[27]][_0x74c6[6]][_0x74c6[304]];this[_0x74c6[310]][_0x74c6[6]][_0x74c6[305]]= (_0xb12dx40+ this[_0x74c6[106]])+ _0x74c6[301];if(_0xb12dx3c){this[_0x74c6[23]][_0x74c6[6]][_0x74c6[304]]= _0xb12dx3d+ _0x74c6[301];this[_0x74c6[25]][_0x74c6[6]][_0x74c6[304]]= this[_0x74c6[23]][_0x74c6[6]][_0x74c6[304]];var _0xb12dx42=(_0xb12dx3e- _0xb12dx40- this[_0x74c6[103]]- this[_0x74c6[106]]- this[_0x74c6[104]]- this[_0x74c6[105]]);this[_0x74c6[27]][_0x74c6[6]][_0x74c6[300]]= _0xb12dx42+ _0x74c6[301];this[_0x74c6[26]][_0x74c6[6]][_0x74c6[304]]= (_0xb12dx3d- _0xb12dx3f- this[_0x74c6[103]])+ _0x74c6[301];var _0xb12dx43=(_0xb12dx3e- this[_0x74c6[106]]- this[_0x74c6[104]]- this[_0x74c6[105]]);this[_0x74c6[26]][_0x74c6[6]][_0x74c6[300]]= _0xb12dx43+ _0x74c6[301];this[_0x74c6[28]][_0x74c6[6]][_0x74c6[304]]= this[_0x74c6[23]][_0x74c6[6]][_0x74c6[304]];this[_0x74c6[309]][_0x74c6[6]][_0x74c6[300]]= _0xb12dx43+ _0x74c6[301]}else {this[_0x74c6[27]][_0x74c6[6]][_0x74c6[305]]= (_0xb12dx40+ this[_0x74c6[103]]+ this[_0x74c6[106]])+ _0x74c6[301];this[_0x74c6[26]][_0x74c6[6]][_0x74c6[305]]= this[_0x74c6[79]][_0x74c6[6]][_0x74c6[305]]}};EditorUi[_0x74c6[10]][_0x74c6[14]]= function(){this[_0x74c6[23]]= this[_0x74c6[312]](_0x74c6[311]);this[_0x74c6[25]]= this[_0x74c6[312]](_0x74c6[313]);this[_0x74c6[27]]= this[_0x74c6[312]](_0x74c6[314]);this[_0x74c6[79]]= this[_0x74c6[312]](_0x74c6[315]);this[_0x74c6[26]]= this[_0x74c6[312]](_0x74c6[316]);this[_0x74c6[28]]= this[_0x74c6[312]](_0x74c6[317]);this[_0x74c6[309]]= this[_0x74c6[312]](_0x74c6[318]);this[_0x74c6[310]]= this[_0x74c6[312]](_0x74c6[319]);this[_0x74c6[23]][_0x74c6[6]][_0x74c6[302]]= _0x74c6[320];this[_0x74c6[23]][_0x74c6[6]][_0x74c6[306]]= _0x74c6[320];this[_0x74c6[23]][_0x74c6[6]][_0x74c6[321]]= _0x74c6[320];this[_0x74c6[25]][_0x74c6[6]][_0x74c6[306]]= _0x74c6[320];this[_0x74c6[25]][_0x74c6[6]][_0x74c6[321]]= _0x74c6[320];this[_0x74c6[27]][_0x74c6[6]][_0x74c6[306]]= _0x74c6[320];this[_0x74c6[79]][_0x74c6[6]][_0x74c6[306]]= _0x74c6[320];this[_0x74c6[26]][_0x74c6[6]][_0x74c6[321]]= _0x74c6[320];this[_0x74c6[28]][_0x74c6[6]][_0x74c6[306]]= _0x74c6[320];this[_0x74c6[28]][_0x74c6[6]][_0x74c6[321]]= _0x74c6[320];this[_0x74c6[28]][_0x74c6[6]][_0x74c6[305]]= _0x74c6[320];this[_0x74c6[310]][_0x74c6[6]][_0x74c6[306]]= _0x74c6[320];this[_0x74c6[310]][_0x74c6[6]][_0x74c6[300]]= this[_0x74c6[103]]+ _0x74c6[301];this[_0x74c6[309]][_0x74c6[6]][_0x74c6[304]]= this[_0x74c6[103]]+ _0x74c6[301]};EditorUi[_0x74c6[10]][_0x74c6[16]]= function(){this[_0x74c6[322]]= this[_0x74c6[13]][_0x74c6[324]](this[_0x74c6[312]](_0x74c6[323]));this[_0x74c6[23]][_0x74c6[325]](this[_0x74c6[322]][_0x74c6[1]]);this[_0x74c6[326]]= this[_0x74c6[328]](this[_0x74c6[312]](_0x74c6[327]));this[_0x74c6[25]][_0x74c6[325]](this[_0x74c6[326]][_0x74c6[1]]);this[_0x74c6[329]]= this[_0x74c6[330]](this[_0x74c6[27]]);this[_0x74c6[28]][_0x74c6[325]](this[_0x74c6[331]]());this[_0x74c6[332]]= this[_0x74c6[333]]();this[_0x74c6[0]][_0x74c6[33]](_0x74c6[334],mxUtils[_0x74c6[20]](this,function(){this[_0x74c6[336]](this[_0x74c6[0]][_0x74c6[335]]())}));this[_0x74c6[336]](this[_0x74c6[0]][_0x74c6[335]]());this[_0x74c6[322]][_0x74c6[1]][_0x74c6[325]](this[_0x74c6[332]]);this[_0x74c6[1]][_0x74c6[325]](this[_0x74c6[23]]);this[_0x74c6[1]][_0x74c6[325]](this[_0x74c6[25]]);this[_0x74c6[1]][_0x74c6[325]](this[_0x74c6[27]]);this[_0x74c6[1]][_0x74c6[325]](this[_0x74c6[79]]);this[_0x74c6[1]][_0x74c6[325]](this[_0x74c6[26]]);this[_0x74c6[1]][_0x74c6[325]](this[_0x74c6[28]]);this[_0x74c6[1]][_0x74c6[325]](this[_0x74c6[309]]);this[_0x74c6[1]][_0x74c6[325]](this[_0x74c6[310]]);this[_0x74c6[337]](this[_0x74c6[309]],true,0,mxUtils[_0x74c6[20]](this,function(_0xb12dx44){this[_0x74c6[107]]= _0xb12dx44;this[_0x74c6[15]]();this[_0x74c6[0]][_0x74c6[4]][_0x74c6[100]]();this[_0x74c6[0]][_0x74c6[80]][_0x74c6[101]](false);this[_0x74c6[0]][_0x74c6[80]][_0x74c6[80]][_0x74c6[100]]()}));this[_0x74c6[337]](this[_0x74c6[310]],false,this[_0x74c6[106]],mxUtils[_0x74c6[20]](this,function(_0xb12dx44){this[_0x74c6[108]]= _0xb12dx44;this[_0x74c6[15]]();this[_0x74c6[0]][_0x74c6[80]][_0x74c6[101]](false);this[_0x74c6[0]][_0x74c6[80]][_0x74c6[80]][_0x74c6[100]]()}))};EditorUi[_0x74c6[10]][_0x74c6[333]]= function(){var _0xb12dx2=document[_0x74c6[339]](_0x74c6[338]);_0xb12dx2[_0x74c6[340]]= _0x74c6[341];return _0xb12dx2};EditorUi[_0x74c6[10]][_0x74c6[333]]= function(){var _0xb12dx2=document[_0x74c6[339]](_0x74c6[338]);_0xb12dx2[_0x74c6[340]]= _0x74c6[341];return _0xb12dx2};EditorUi[_0x74c6[10]][_0x74c6[336]]= function(_0xb12dx44){this[_0x74c6[332]][_0x74c6[342]]= _0xb12dx44};EditorUi[_0x74c6[10]][_0x74c6[328]]= function(_0xb12dx2){return new Toolbar(this,_0xb12dx2)};EditorUi[_0x74c6[10]][_0x74c6[330]]= function(_0xb12dx2){return new Sidebar(this,_0xb12dx2)};EditorUi[_0x74c6[10]][_0x74c6[331]]= function(){return this[_0x74c6[312]](_0x74c6[343])};EditorUi[_0x74c6[10]][_0x74c6[312]]= function(_0xb12dx45){var _0xb12dx46=document[_0x74c6[339]](_0x74c6[344]);_0xb12dx46[_0x74c6[340]]= _0xb12dx45;return _0xb12dx46};EditorUi[_0x74c6[10]][_0x74c6[345]]= function(_0xb12dx45){var _0xb12dx46=document[_0x74c6[339]](_0xb12dx45);return _0xb12dx46};EditorUi[_0x74c6[10]][_0x74c6[346]]= function(_0xb12dx45){var _0xb12dx46=document[_0x74c6[339]](_0x74c6[347]);_0xb12dx46[_0x74c6[340]]= _0xb12dx45;return _0xb12dx46};EditorUi[_0x74c6[10]][_0x74c6[337]]= function(_0xb12dx46,_0xb12dx47,_0xb12dx48,_0xb12dx49){var _0xb12dx4a=null;var _0xb12dx4b=null;function _0xb12dx4c(){return parseInt(((_0xb12dx47)?_0xb12dx46[_0x74c6[6]][_0x74c6[306]]:_0xb12dx46[_0x74c6[6]][_0x74c6[305]]))}function _0xb12dx4d(_0xb12dx6){if(_0xb12dx4a!= null){var _0xb12dx4e= new mxPoint(mxEvent[_0x74c6[348]](_0xb12dx6),mxEvent[_0x74c6[349]](_0xb12dx6));_0xb12dx49(Math[_0x74c6[299]](0,_0xb12dx4b+ ((_0xb12dx47)?(_0xb12dx4e[_0x74c6[350]]- _0xb12dx4a[_0x74c6[350]]):(_0xb12dx4a[_0x74c6[351]]- _0xb12dx4e[_0x74c6[351]]))- _0xb12dx48));mxEvent[_0x74c6[74]](_0xb12dx6)}}function _0xb12dx4f(_0xb12dx6){_0xb12dx4d(_0xb12dx6);_0xb12dx4a= null;_0xb12dx4b= null}mxEvent[_0x74c6[82]](_0xb12dx46,function(_0xb12dx6){_0xb12dx4a= new mxPoint(mxEvent[_0x74c6[348]](_0xb12dx6),mxEvent[_0x74c6[349]](_0xb12dx6));_0xb12dx4b= _0xb12dx4c();mxEvent[_0x74c6[74]](_0xb12dx6)});mxEvent[_0x74c6[33]](document,_0x74c6[352],_0xb12dx4d);mxEvent[_0x74c6[33]](document,_0x74c6[353],_0xb12dx4d);mxEvent[_0x74c6[33]](document,_0x74c6[354],_0xb12dx4f);mxEvent[_0x74c6[33]](document,_0x74c6[355],_0xb12dx4f)};EditorUi[_0x74c6[10]][_0x74c6[73]]= function(_0xb12dx46,_0xb12dx3d,_0xb12dx3e,_0xb12dx50,_0xb12dx51,_0xb12dx52){this[_0x74c6[356]]();this[_0x74c6[357]]= new Dialog(this,_0xb12dx46,_0xb12dx3d,(mxClient[_0x74c6[358]])?_0xb12dx3e- 12:_0xb12dx3e,_0xb12dx50,_0xb12dx51,_0xb12dx52)};EditorUi[_0x74c6[10]][_0x74c6[356]]= function(){if(this[_0x74c6[357]]!= null){this[_0x74c6[357]][_0x74c6[359]]();this[_0x74c6[357]]= null;this[_0x74c6[0]][_0x74c6[4]][_0x74c6[1]][_0x74c6[47]]()}};EditorUi[_0x74c6[10]][_0x74c6[360]]= function(_0xb12dx53){if(!_0xb12dx53&& this[_0x74c6[0]][_0x74c6[125]]!= null){this[_0x74c6[172]](this[_0x74c6[0]][_0x74c6[361]]())}else {this[_0x74c6[73]]( new SaveDialog(this)[_0x74c6[1]],300,100,true,true)}};EditorUi[_0x74c6[10]][_0x74c6[362]]= function(_0xb12dx53){if(!_0xb12dx53&& this[_0x74c6[0]][_0x74c6[125]]!= null){this[_0x74c6[224]](this[_0x74c6[0]][_0x74c6[361]]())}else {}};EditorUi[_0x74c6[10]][_0x74c6[363]]= function(_0xb12dx54,_0xb12dx55,_0xb12dx56){var _0xb12dx3=this[_0x74c6[0]][_0x74c6[4]];var _0xb12dxb=_0xb12dx3[_0x74c6[264]]();_0xb12dx55= this[_0x74c6[364]]!= null?this[_0x74c6[364]]:_0xb12dx55;_0xb12dx3[_0x74c6[65]]()[_0x74c6[365]]();try{_0xb12dx54[_0x74c6[366]](_0xb12dx3[_0x74c6[222]](),_0xb12dxb)}catch(e){throw e}finally{if(_0xb12dx55&& navigator[_0x74c6[368]][_0x74c6[69]](_0x74c6[367])< 0){var _0xb12dx57= new mxMorphing(_0xb12dx3);_0xb12dx57[_0x74c6[33]](mxEvent.DONE,mxUtils[_0x74c6[20]](this,function(){_0xb12dx3[_0x74c6[65]]()[_0x74c6[369]]()}));_0xb12dx57[_0x74c6[370]]()}else {_0xb12dx3[_0x74c6[65]]()[_0x74c6[369]]()}}};EditorUi[_0x74c6[10]][_0x74c6[97]]= function(_0xb12dx1){var _0xb12dx3=this[_0x74c6[0]][_0x74c6[4]];var _0xb12dxf= new mxKeyHandler(_0xb12dx3);_0xb12dxf[_0x74c6[371]]= function(_0xb12dx6){return mxEvent[_0x74c6[371]](_0xb12dx6)|| (mxClient[_0x74c6[372]]&& _0xb12dx6[_0x74c6[373]])};function _0xb12dx58(_0xb12dx59){if(!_0xb12dx3[_0x74c6[245]]()){var _0xb12dx48=0;var _0xb12dx5a=0;if(_0xb12dx59== 37){_0xb12dx48= -1}else {if(_0xb12dx59== 38){_0xb12dx5a= -1}else {if(_0xb12dx59== 39){_0xb12dx48= 1}else {if(_0xb12dx59== 40){_0xb12dx5a= 1}}}};_0xb12dx3[_0x74c6[374]](_0xb12dx3[_0x74c6[246]](),_0xb12dx48,_0xb12dx5a);_0xb12dx3[_0x74c6[375]](_0xb12dx3[_0x74c6[264]]())}}var _0xb12dx5b=mxUtils[_0x74c6[20]](this,function(_0xb12dx5c,_0xb12dx5d,_0xb12dx26,_0xb12dx5e){var _0xb12dx5f=this[_0x74c6[12]][_0x74c6[112]](_0xb12dx26);if(_0xb12dx5f!= null){var _0xb12dx20=function(){if(_0xb12dx5f[_0x74c6[376]]){_0xb12dx5f[_0x74c6[377]]()}};if(_0xb12dx5d){if(_0xb12dx5e){_0xb12dxf[_0x74c6[378]](_0xb12dx5c,_0xb12dx20)}else {_0xb12dxf[_0x74c6[379]](_0xb12dx5c,_0xb12dx20)}}else {if(_0xb12dx5e){_0xb12dxf[_0x74c6[380]](_0xb12dx5c,_0xb12dx20)}else {_0xb12dxf[_0x74c6[381]](_0xb12dx5c,_0xb12dx20)}}}});var _0xb12dx60=this;var _0xb12dx61=_0xb12dxf[_0x74c6[382]];_0xb12dxf[_0x74c6[382]]= function(_0xb12dx6){_0xb12dx60[_0x74c6[356]]();_0xb12dx61[_0x74c6[50]](this,arguments)};_0xb12dxf[_0x74c6[383]]= function(){};_0xb12dxf[_0x74c6[381]](8,function(){_0xb12dx3[_0x74c6[384]](true)});_0xb12dxf[_0x74c6[381]](13,function(){_0xb12dx3[_0x74c6[384]](false)});_0xb12dxf[_0x74c6[381]](33,function(){_0xb12dx3[_0x74c6[288]]()});_0xb12dxf[_0x74c6[381]](34,function(){_0xb12dx3[_0x74c6[289]]()});_0xb12dxf[_0x74c6[381]](36,function(){_0xb12dx3[_0x74c6[287]]()});_0xb12dxf[_0x74c6[381]](35,function(){_0xb12dx3[_0x74c6[15]]()});_0xb12dxf[_0x74c6[381]](37,function(){_0xb12dx58(37)});_0xb12dxf[_0x74c6[381]](38,function(){_0xb12dx58(38)});_0xb12dxf[_0x74c6[381]](39,function(){_0xb12dx58(39)});_0xb12dxf[_0x74c6[381]](40,function(){_0xb12dx58(40)});_0xb12dxf[_0x74c6[381]](113,function(){_0xb12dx3[_0x74c6[70]]()});_0xb12dx5b(46,false,_0x74c6[247]);_0xb12dx5b(82,true,_0x74c6[257]);_0xb12dx5b(83,true,_0x74c6[172]);_0xb12dx5b(83,true,_0x74c6[180],true);_0xb12dx5b(107,false,_0x74c6[385]);_0xb12dx5b(109,false,_0x74c6[386]);_0xb12dx5b(65,true,_0x74c6[387]);_0xb12dx5b(86,true,_0x74c6[388],true);_0xb12dx5b(69,true,_0x74c6[389],true);_0xb12dx5b(69,true,_0x74c6[390]);_0xb12dx5b(66,true,_0x74c6[253]);_0xb12dx5b(70,true,_0x74c6[252]);_0xb12dx5b(68,true,_0x74c6[248]);_0xb12dx5b(90,true,_0x74c6[241]);_0xb12dx5b(89,true,_0x74c6[242]);_0xb12dx5b(88,true,_0x74c6[115]);_0xb12dx5b(67,true,_0x74c6[116]);_0xb12dx5b(81,true,_0x74c6[391]);_0xb12dx5b(86,true,_0x74c6[111]);_0xb12dx5b(71,true,_0x74c6[263]);_0xb12dx5b(71,true,_0x74c6[392],true);_0xb12dx5b(85,true,_0x74c6[265]);_0xb12dx5b(112,false,_0x74c6[393]);_0xb12dx5b(80,true,_0x74c6[224],true);return _0xb12dxf};EditorUi[_0x74c6[10]][_0x74c6[58]]= function(_0xb12dx3,_0xb12dx36,_0xb12dx62,_0xb12dx63){for(var _0xb12dx37=0;_0xb12dx37< _0xb12dx36[_0x74c6[143]];_0xb12dx37++){_0xb12dx3[_0x74c6[396]]( new mxMultiplicity(true,_0xb12dx36[_0xb12dx37],null,null,_0xb12dx62[_0xb12dx37][0],_0xb12dx62[_0xb12dx37][1],null,mxResources[_0x74c6[112]](_0xb12dx36[_0xb12dx37])+ _0x74c6[394]+ _0xb12dx62[_0xb12dx37][0]+ _0x74c6[395],null));_0xb12dx3[_0x74c6[396]]( new mxMultiplicity(false,_0xb12dx36[_0xb12dx37],null,null,_0xb12dx63[_0xb12dx37][0],_0xb12dx63[_0xb12dx37][1],null,mxResources[_0x74c6[112]](_0xb12dx36[_0xb12dx37])+ _0x74c6[394]+ _0xb12dx63[_0xb12dx37][0]+ _0x74c6[397],null))}} \ No newline at end of file diff --git a/public/assets/plugins/jscripty/js/Graph.js b/public/assets/plugins/jscripty/js/Graph.js index dda2a33..5626052 100644 --- a/public/assets/plugins/jscripty/js/Graph.js +++ b/public/assets/plugins/jscripty/js/Graph.js @@ -1,644 +1 @@ -/** - * $Id: Graph.js,v 1.14 2013-02-16 10:19:54 gaudenz Exp $ - * Copyright (c) 2006-2012, JGraph Ltd - */ -/** - * Constructs a new graph instance. Note that the constructor does not take a - * container because the graph instance is needed for creating the UI, which - * in turn will create the container for the graph. Hence, the container is - * assigned later in EditorUi. - */ -Graph = function(container, model, renderHint, stylesheet) { - mxGraph.call(this, container, model, renderHint, stylesheet); - - this.setConnectable(true); - this.setDropEnabled(false); - this.setPanning(true); - this.setTooltips(!mxClient.IS_TOUCH); - this.setAllowLoops(false); - this.setMultigraph(false); - this.allowAutoPanning = true; - this.resetEdgesOnConnect = false; - this.constrainChildren = false; - - // Centers the port icon on the target port - this.connectionHandler.targetConnectImage = true; - - // Does not allow dangling edges - this.setAllowDanglingEdges(false); - - // Enables cloning of connection sources - this.connectionHandler.setCreateTarget(false); - - // Disables built-in connection starts - this.connectionHandler.isValidSource = function() { - return mxConnectionHandler.prototype.isValidSource.apply(this, arguments) && urlParams['connect'] != '2'; - }; - - // Sets the style to be used when an elbow edge is double clicked - this.alternateEdgeStyle = 'vertical'; - - if (stylesheet == null) { - this.loadStylesheet(); - } - - // Creates rubberband selection - var rubberband = new mxRubberband(this); - - this.getRubberband = function() { - return rubberband; - }; - - // Shows hand cursor while panning - this.panningHandler.addListener(mxEvent.PAN_START, mxUtils.bind(this, function() { - this.container.style.cursor = 'pointer'; - })); - - this.panningHandler.addListener(mxEvent.PAN_END, mxUtils.bind(this, function() { - this.container.style.cursor = 'default'; - })); - - // Adds support for HTML labels via style. Note: Currently, only the Java - // backend supports HTML labels but CSS support is limited to the following: - // http://docs.oracle.com/javase/6/docs/api/index.html?javax/swing/text/html/CSS.html - this.isHtmlLabel = function(cell) { - var state = this.view.getState(cell); - var style = (state != null) ? state.style : this.getCellStyle(cell); - - return style['html'] == '1' || style['whiteSpace'] == 'wrap'; - }; - - // HTML entities are displayed as plain text in wrapped plain text labels - this.cellRenderer.getLabelValue = function(state) { - var result = mxCellRenderer.prototype.getLabelValue.apply(this, arguments); - - if (state.style['whiteSpace'] == 'wrap' && state.style['html'] != 1) { - result = mxUtils.htmlEntities(result, false); - } - - return result; - }; - - // Unlocks all cells - this.isCellLocked = function(cell) { - return false; - }; - - // Tap and hold brings up context menu. - // Tolerance slightly below graph tolerance is better. - this.connectionHandler.tapAndHoldTolerance = 16; - - // Tap and hold on background starts rubberband on cell starts connecting - var connectionHandlerTapAndHold = this.connectionHandler.tapAndHold; - this.connectionHandler.tapAndHold = function(me, state) { - if (state == null) { - if (!this.graph.panningHandler.active) { - rubberband.start(me.getGraphX(), me.getGraphY()); - this.graph.panningHandler.panningTrigger = false; - } - } else if (tapAndHoldStartsConnection) { - connectionHandlerTapAndHold.apply(this, arguments); - } else if (this.graph.isCellSelected(state.cell) && this.graph.getSelectionCount() > 1) { - this.graph.removeSelectionCell(state.cell); - } - }; - - if (touchStyle) { - this.initTouch(); - } -}; - -// Graph inherits from mxGraph -mxUtils.extend(Graph, mxGraph); - -/** - * Allows to all values in fit. - */ -Graph.prototype.minFitScale = null; - -/** - * Allows to all values in fit. - */ -Graph.prototype.maxFitScale = null; - -/** - * Loads the stylesheet for this graph. - */ -Graph.prototype.loadStylesheet = function() { - var node = mxUtils.load(STYLE_PATH + '/default.xml').getDocumentElement(); - var dec = new mxCodec(node.ownerDocument); - dec.decode(node, this.getStylesheet()); -}; - -/** - * Inverts the elbow edge style without removing existing styles. - */ -Graph.prototype.flipEdge = function(edge) { - if (edge != null) { - var state = this.view.getState(edge); - var style = (state != null) ? state.style : this.getCellStyle(edge); - - if (style != null) { - var elbow = mxUtils.getValue(style, mxConstants.STYLE_ELBOW, - mxConstants.ELBOW_HORIZONTAL); - var value = (elbow == mxConstants.ELBOW_HORIZONTAL) ? - mxConstants.ELBOW_VERTICAL : mxConstants.ELBOW_HORIZONTAL; - this.setCellStyles(mxConstants.STYLE_ELBOW, value, [edge]); - } - } -}; - -/** - * Sets the default edge for future connections. - */ -Graph.prototype.setDefaultEdge = function(cell) { - if (cell != null && this.getModel().isEdge(cell)) { - // Take a snapshot of the cell at the moment of calling - var proto = this.getModel().cloneCells([cell])[0]; - - // Delete existing points - if (proto.geometry != null) { - proto.geometry.points = null; - } - - // Delete entry-/exitXY styles - var style = proto.getStyle(); - style = mxUtils.setStyle(style, mxConstants.STYLE_ENTRY_X, null); - style = mxUtils.setStyle(style, mxConstants.STYLE_ENTRY_Y, null); - style = mxUtils.setStyle(style, mxConstants.STYLE_EXIT_X, null); - style = mxUtils.setStyle(style, mxConstants.STYLE_EXIT_Y, null); - proto.setStyle(style); - - // Uses edge template for connect preview - this.connectionHandler.createEdgeState = function(me) { - return this.graph.view.createState(proto); - }; - - // Creates new connections from edge template - this.connectionHandler.factoryMethod = function() { - return this.graph.cloneCells([proto])[0]; - }; - } -}; - -/** - * Disables folding for non-swimlanes. - */ -Graph.prototype.isCellFoldable = function(cell) { - return this.foldingEnabled && this.isSwimlane(cell); -}; - -/** - * Disables drill-down for non-swimlanes. - */ -Graph.prototype.isValidRoot = function(cell) { - return this.isSwimlane(cell); -}; - -/** - * Overrides createGroupCell to set the group style for new groups to 'group'. - */ -Graph.prototype.createGroupCell = function() { - var group = mxGraph.prototype.createGroupCell.apply(this, arguments); - group.setStyle('group'); - - return group; -}; - -/** - * Giuseppe Careri - * Overrides tooltips to show position and size - */ -Graph.prototype.getTooltipForCell = function(cell) { - var tip = ''; - - if (this.getModel().isVertex(cell)) { - // var geo = this.getCellGeometry(cell); - - // var f2 = function(x) - // { - // return Math.round(parseFloat(x) * 100) / 100; - // }; - - // if (geo != null) - // { - // if (tip == null) - // { - // tip = ''; - // } - // else if (tip.length > 0) - // { - // tip += '\n'; - // } - - // tip += 'X: ' + f2(geo.x) + '\nY: ' + f2(geo.y) + '\nW: ' + f2(geo.width) + '\nH: ' + f2(geo.height); - // } - - tip += mxResources.get('description_' + cell.value.nodeName) || ''; - } else if (this.getModel().isEdge(cell)) { - tip = mxGraph.prototype.getTooltipForCell.apply(this, arguments); - } - - return tip; -}; - -/** - * Giuseppe Careri - * Returns the label for the given cell. - */ -Graph.prototype.convertValueToString = function(cell) { - if (cell.value != null && typeof(cell.value) == 'object') { - return cell.value.getAttribute('label'); - } - - return mxGraph.prototype.convertValueToString.apply(this, arguments); -}; - -/** - * Giuseppe Careri - * Handles label changes for XML user objects. - */ -Graph.prototype.cellLabelChanged = function(cell, value, autoSize) { - if (cell.value != null && typeof(cell.value) == 'object') { - var tmp = cell.value.cloneNode(true); - tmp.setAttribute('label', value); - value = tmp; - } - - mxGraph.prototype.cellLabelChanged.apply(this, arguments); -}; - -/** - * Sets the link for the given cell. - */ -Graph.prototype.setLinkForCell = function(cell, link) { - var value = null; - - if (cell.value != null && typeof(cell.value) == 'object') { - value = cell.value.cloneNode(true); - } else { - var doc = mxUtils.createXmlDocument(); - - value = doc.createElement('UserObject'); - value.setAttribute('label', cell.value); - } - - if (link != null && link.length > 0) { - value.setAttribute('link', link); - } else { - value.removeAttribute('link'); - } - - this.model.setValue(cell, value); -}; - -/** - * Returns the link for the given cell. - */ -Graph.prototype.getLinkForCell = function(cell) { - if (cell.value != null && typeof(cell.value) == 'object') { - return cell.value.getAttribute('link'); - } - - return null; -}; - -/** - * Customized graph for touch devices. - */ -Graph.prototype.initTouch = function() { - // Disables new connections via "hotspot" - this.connectionHandler.marker.isEnabled = function() { - return this.graph.connectionHandler.first != null; - }; - - // Hides menu when editing starts - this.addListener(mxEvent.START_EDITING, function(sender, evt) { - this.panningHandler.hideMenu(); - }); - - // Context menu for touchstyle - var showMenu = false; - var menuCell = null; - - // Checks if native hit detection did not return anything and does custom - // hit detection for edges to take into account the tolerance - this.updateMouseEvent = function(me) { - mxGraph.prototype.updateMouseEvent.apply(this, arguments); - - if (me.getState() == null) { - var cell = this.getCellAt(me.graphX, me.graphY); - - if (this.getModel().isEdge(cell)) { - me.state = this.view.getState(cell); - - if (me.state != null && me.state.shape != null) { - this.container.style.cursor = me.state.shape.node.style.cursor; - } - } - } - - if (me.getState() == null) { - this.container.style.cursor = 'default'; - } - }; - - // Handles popup menu on touch devices (tap selected cell) - this.fireMouseEvent = function(evtName, me, sender) { - if (evtName == mxEvent.MOUSE_DOWN) { - if (!this.panningHandler.isMenuShowing()) { - menuCell = me.getCell(); - showMenu = (menuCell != null) ? this.isCellSelected(menuCell) : this.isSelectionEmpty(); - } else { - showMenu = false; - menuCell = null; - } - } else if (evtName == mxEvent.MOUSE_UP) { - if (showMenu && !this.isEditing()) { - if (!this.panningHandler.isMenuShowing()) { - var x = mxEvent.getClientX(me.getEvent()); - var y = mxEvent.getClientY(me.getEvent()); - - this.panningHandler.popup(x + 16, y, menuCell, me.getEvent()); - } - - showMenu = false; - menuCell = null; - me.consume(); - - return; - } - - showMenu = false; - menuCell = null; - } - - mxGraph.prototype.fireMouseEvent.apply(this, arguments); - - if (evtName == mxEvent.MOUSE_MOVE && me.isConsumed()) { - showMenu = false; - menuCell = null; - } - }; -}; - -/** - * Implements touch devices. - */ -(function() { - // Enables rotation handle - mxVertexHandler.prototype.rotationEnabled = true; - - // Matches label positions of mxGraph 1.x - mxText.prototype.baseSpacingTop = 5; - mxText.prototype.baseSpacingBottom = 1; - - // Touch-specific static overrides - if (touchStyle) { - // Sets constants for touch style - mxConstants.HANDLE_SIZE = 16; - mxConstants.LABEL_HANDLE_SIZE = 7; - - // Larger tolerance and grid for real touch devices - if (mxClient.IS_TOUCH) { - mxVertexHandler.prototype.tolerance = 4; - mxEdgeHandler.prototype.tolerance = 6; - Graph.prototype.tolerance = 14; - Graph.prototype.gridSize = 20; - - // One finger pans (no rubberband selection) must start regardless of mouse button - mxPanningHandler.prototype.selectOnPopup = false; - mxPanningHandler.prototype.useLeftButtonForPanning = true; - mxPanningHandler.prototype.isPanningTrigger = function(me) { - var evt = me.getEvent(); - - return (this.useLeftButtonForPanning && (this.ignoreCell || me.getState() == null) - /* && - mxEvent.isLeftMouseButton(evt)*/ - ) || (mxEvent.isControlDown(evt) && - mxEvent.isShiftDown(evt)) || (this.usePopupTrigger && - mxEvent.isPopupTrigger(evt)); - }; - } - - // Don't clear selection if multiple cells selected - var graphHandlerMouseDown = mxGraphHandler.prototype.mouseDown; - mxGraphHandler.prototype.mouseDown = function(sender, me) { - graphHandlerMouseDown.apply(this, arguments); - - if (this.graph.isCellSelected(me.getCell()) && this.graph.getSelectionCount() > 1) { - this.delayedSelection = false; - } - }; - - // Changes order of panninghandler - Graph.prototype.createHandlers = function(container) { - this.tooltipHandler = new mxTooltipHandler(this); - this.tooltipHandler.setEnabled(false); - // Selection cells first - this.selectionCellsHandler = new mxSelectionCellsHandler(this); - this.panningHandler = new mxPanningHandler(this); - this.panningHandler.panningEnabled = false; - this.connectionHandler = new mxConnectionHandler(this); - this.connectionHandler.setEnabled(false); - this.graphHandler = new mxGraphHandler(this); - }; - - // On connect the target is selected and we clone the cell of the preview edge for insert - mxConnectionHandler.prototype.selectCells = function(edge, target) { - if (touchStyle && target != null) { - this.graph.setSelectionCell(target); - } else { - this.graph.setSelectionCell(edge); - } - }; - - // Overrides double click handling to use the tolerance - // FIXME: Double click on edges in iPad needs focus on textarea - var graphDblClick = mxGraph.prototype.dblClick; - Graph.prototype.dblClick = function(evt, cell) { - if (cell == null) { - var pt = mxUtils.convertPoint(this.container, - mxEvent.getClientX(evt), mxEvent.getClientY(evt)); - cell = this.getCellAt(pt.x, pt.y); - } - - graphDblClick.call(this, evt, cell); - }; - - // Rounded edge and vertex handles - var touchHandle = new mxImage(IMAGE_PATH + '/touch-handle.png', 16, 16); - mxVertexHandler.prototype.handleImage = touchHandle; - mxEdgeHandler.prototype.handleImage = touchHandle; - mxOutline.prototype.sizerImage = touchHandle; - - // Pre-fetches touch handle - new Image().src = touchHandle.src; - - // Adds connect icon to selected vertices - var connectorSrc = IMAGE_PATH + '/touch-connector.png'; - - var vertexHandlerInit = mxVertexHandler.prototype.init; - mxVertexHandler.prototype.init = function() { - vertexHandlerInit.apply(this, arguments); - - // Only show connector image on one cell and do not show on containers - if (showConnectorImg && this.graph.connectionHandler.isEnabled() && - this.graph.isCellConnectable(this.state.cell) && - !this.graph.isValidRoot(this.state.cell) && - this.graph.getSelectionCount() == 1) { - this.connectorImg = mxUtils.createImage(connectorSrc); - this.connectorImg.style.cursor = 'pointer'; - this.connectorImg.style.width = '29px'; - this.connectorImg.style.height = '29px'; - this.connectorImg.style.position = 'absolute'; - - if (!mxClient.IS_TOUCH) { - this.connectorImg.setAttribute('title', mxResources.get('connect')); - mxEvent.redirectMouseEvents(this.connectorImg, this.graph, this.state); - } - - // Adds 2px tolerance - this.connectorImg.style.padding = '2px'; - - // Starts connecting on touch/mouse down - mxEvent.addGestureListeners(this.connectorImg, - mxUtils.bind(this, function(evt) { - this.graph.panningHandler.hideMenu(); - var pt = mxUtils.convertPoint(this.graph.container, - mxEvent.getClientX(evt), mxEvent.getClientY(evt)); - this.graph.connectionHandler.start(this.state, pt.x, pt.y); - this.graph.isMouseDown = true; - mxEvent.consume(evt); - }) - ); - - this.graph.container.appendChild(this.connectorImg); - } - - this.redrawTools(); - }; - - var vertexHandlerRedraw = mxVertexHandler.prototype.redraw; - mxVertexHandler.prototype.redraw = function() { - vertexHandlerRedraw.apply(this); - this.redrawTools(); - }; - - mxVertexHandler.prototype.redrawTools = function() { - if (this.state != null && this.connectorImg != null) { - // Top right for single-sizer - if (mxVertexHandler.prototype.singleSizer) { - this.connectorImg.style.left = (this.state.x + this.state.width - this.connectorImg.offsetWidth / 2) + 'px'; - this.connectorImg.style.top = (this.state.y - this.connectorImg.offsetHeight / 2) + 'px'; - } else { - this.connectorImg.style.left = (this.state.x + this.state.width + mxConstants.HANDLE_SIZE / 2 + 4 /* - 2 padding*/ ) + 'px'; - this.connectorImg.style.top = (this.state.y + (this.state.height - this.connectorImg.offsetHeight) / 2) + 'px'; - } - } - }; - - var vertexHandlerDestroy = mxVertexHandler.prototype.destroy; - mxVertexHandler.prototype.destroy = function(sender, me) { - vertexHandlerDestroy.apply(this, arguments); - - if (this.connectorImg != null) { - this.connectorImg.parentNode.removeChild(this.connectorImg); - this.connectorImg = null; - } - }; - - // Pre-fetches touch connector - new Image().src = connectorSrc; - } else { - var img = new mxImage(IMAGE_PATH + '/connector.png', 15, 15); - mxConnectionHandler.prototype.connectImage = img; - - // Pre-fetches img - new Image().src = img.src; - - if (urlParams['connect'] == '2') // not touchStyle - { - var img = new mxImage(IMAGE_PATH + '/connector.png', 15, 15); - - var vertexHandlerInit = mxVertexHandler.prototype.init; - mxVertexHandler.prototype.init = function() { - vertexHandlerInit.apply(this, arguments); - - // Only show connector image on one cell and do not show on containers - if (showConnectorImg && this.graph.connectionHandler.isEnabled() && - this.graph.isCellConnectable(this.state.cell) && - !this.graph.isValidRoot(this.state.cell) && - this.graph.getSelectionCount() == 1) { - // Workaround for event redirection via image tag in quirks and IE8 - if (mxClient.IS_IE && !mxClient.IS_SVG) { - this.connectorImg = document.createElement('div'); - this.connectorImg.style.backgroundImage = 'url(' + img.src + ')'; - this.connectorImg.style.backgroundPosition = 'center'; - this.connectorImg.style.backgroundRepeat = 'no-repeat'; - this.connectorImg.style.width = (img.width + 4) + 'px'; - this.connectorImg.style.height = (img.height + 4) + 'px'; - this.connectorImg.style.display = (mxClient.IS_QUIRKS) ? 'inline' : 'inline-block'; - } else { - this.connectorImg = mxUtils.createImage(img.src); - this.connectorImg.style.width = img.width + 'px'; - this.connectorImg.style.height = img.height + 'px'; - } - - this.connectorImg.style.cursor = 'pointer'; - this.connectorImg.style.position = 'absolute'; - this.connectorImg.setAttribute('title', mxResources.get('connect')); - mxEvent.redirectMouseEvents(this.connectorImg, this.graph, this.state); - - // Adds 2px tolerance - this.connectorImg.style.padding = '2px'; - - // Starts connecting on touch/mouse down - mxEvent.addListener(this.connectorImg, 'mousedown', - mxUtils.bind(this, function(evt) { - this.graph.panningHandler.hideMenu(); - var pt = mxUtils.convertPoint(this.graph.container, - mxEvent.getClientX(evt), mxEvent.getClientY(evt)); - this.graph.connectionHandler.start(this.state, pt.x, pt.y); - this.graph.isMouseDown = true; - mxEvent.consume(evt); - }) - ); - - this.graph.container.appendChild(this.connectorImg); - } - - this.redrawTools(); - }; - - var vertexHandlerRedraw = mxVertexHandler.prototype.redraw; - mxVertexHandler.prototype.redraw = function() { - vertexHandlerRedraw.apply(this); - this.redrawTools(); - }; - - mxVertexHandler.prototype.redrawTools = function() { - if (this.state != null && this.connectorImg != null) { - // Top right for single-sizer - if (mxVertexHandler.prototype.singleSizer) { - this.connectorImg.style.left = (this.state.x + this.state.width - this.connectorImg.offsetWidth / 2) + 'px'; - this.connectorImg.style.top = (this.state.y - this.connectorImg.offsetHeight / 2) + 'px'; - } else { - this.connectorImg.style.left = (this.state.x + this.state.width + mxConstants.HANDLE_SIZE / 2 + 2 /* - 2 padding*/ ) + 'px'; - this.connectorImg.style.top = (this.state.y + (this.state.height - this.connectorImg.offsetHeight) / 2) + 'px'; - } - } - }; - - var vertexHandlerDestroy = mxVertexHandler.prototype.destroy; - mxVertexHandler.prototype.destroy = function(sender, me) { - vertexHandlerDestroy.apply(this, arguments); - - if (this.connectorImg != null) { - this.connectorImg.parentNode.removeChild(this.connectorImg); - this.connectorImg = null; - } - }; - } - } -})(); +var _0x31e9=["\x63\x61\x6C\x6C","\x73\x65\x74\x43\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65","\x73\x65\x74\x44\x72\x6F\x70\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x50\x61\x6E\x6E\x69\x6E\x67","\x73\x65\x74\x54\x6F\x6F\x6C\x74\x69\x70\x73","\x73\x65\x74\x41\x6C\x6C\x6F\x77\x4C\x6F\x6F\x70\x73","\x73\x65\x74\x4D\x75\x6C\x74\x69\x67\x72\x61\x70\x68","\x61\x6C\x6C\x6F\x77\x41\x75\x74\x6F\x50\x61\x6E\x6E\x69\x6E\x67","\x72\x65\x73\x65\x74\x45\x64\x67\x65\x73\x4F\x6E\x43\x6F\x6E\x6E\x65\x63\x74","\x63\x6F\x6E\x73\x74\x72\x61\x69\x6E\x43\x68\x69\x6C\x64\x72\x65\x6E","\x74\x61\x72\x67\x65\x74\x43\x6F\x6E\x6E\x65\x63\x74\x49\x6D\x61\x67\x65","\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x48\x61\x6E\x64\x6C\x65\x72","\x73\x65\x74\x41\x6C\x6C\x6F\x77\x44\x61\x6E\x67\x6C\x69\x6E\x67\x45\x64\x67\x65\x73","\x73\x65\x74\x43\x72\x65\x61\x74\x65\x54\x61\x72\x67\x65\x74","\x69\x73\x56\x61\x6C\x69\x64\x53\x6F\x75\x72\x63\x65","\x61\x70\x70\x6C\x79","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x63\x6F\x6E\x6E\x65\x63\x74","\x32","\x61\x6C\x74\x65\x72\x6E\x61\x74\x65\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x76\x65\x72\x74\x69\x63\x61\x6C","\x6C\x6F\x61\x64\x53\x74\x79\x6C\x65\x73\x68\x65\x65\x74","\x67\x65\x74\x52\x75\x62\x62\x65\x72\x62\x61\x6E\x64","\x63\x75\x72\x73\x6F\x72","\x73\x74\x79\x6C\x65","\x63\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x70\x6F\x69\x6E\x74\x65\x72","\x62\x69\x6E\x64","\x61\x64\x64\x4C\x69\x73\x74\x65\x6E\x65\x72","\x70\x61\x6E\x6E\x69\x6E\x67\x48\x61\x6E\x64\x6C\x65\x72","\x64\x65\x66\x61\x75\x6C\x74","\x69\x73\x48\x74\x6D\x6C\x4C\x61\x62\x65\x6C","\x67\x65\x74\x53\x74\x61\x74\x65","\x76\x69\x65\x77","\x67\x65\x74\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65","\x68\x74\x6D\x6C","\x31","\x77\x68\x69\x74\x65\x53\x70\x61\x63\x65","\x77\x72\x61\x70","\x67\x65\x74\x4C\x61\x62\x65\x6C\x56\x61\x6C\x75\x65","\x63\x65\x6C\x6C\x52\x65\x6E\x64\x65\x72\x65\x72","\x68\x74\x6D\x6C\x45\x6E\x74\x69\x74\x69\x65\x73","\x69\x73\x43\x65\x6C\x6C\x4C\x6F\x63\x6B\x65\x64","\x74\x61\x70\x41\x6E\x64\x48\x6F\x6C\x64\x54\x6F\x6C\x65\x72\x61\x6E\x63\x65","\x74\x61\x70\x41\x6E\x64\x48\x6F\x6C\x64","\x61\x63\x74\x69\x76\x65","\x67\x72\x61\x70\x68","\x67\x65\x74\x47\x72\x61\x70\x68\x58","\x67\x65\x74\x47\x72\x61\x70\x68\x59","\x73\x74\x61\x72\x74","\x70\x61\x6E\x6E\x69\x6E\x67\x54\x72\x69\x67\x67\x65\x72","\x63\x65\x6C\x6C","\x69\x73\x43\x65\x6C\x6C\x53\x65\x6C\x65\x63\x74\x65\x64","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x6F\x75\x6E\x74","\x72\x65\x6D\x6F\x76\x65\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C","\x69\x6E\x69\x74\x54\x6F\x75\x63\x68","\x65\x78\x74\x65\x6E\x64","\x6D\x69\x6E\x46\x69\x74\x53\x63\x61\x6C\x65","\x6D\x61\x78\x46\x69\x74\x53\x63\x61\x6C\x65","\x67\x65\x74\x44\x6F\x63\x75\x6D\x65\x6E\x74\x45\x6C\x65\x6D\x65\x6E\x74","\x2F\x64\x65\x66\x61\x75\x6C\x74\x2E\x78\x6D\x6C","\x6C\x6F\x61\x64","\x6F\x77\x6E\x65\x72\x44\x6F\x63\x75\x6D\x65\x6E\x74","\x67\x65\x74\x53\x74\x79\x6C\x65\x73\x68\x65\x65\x74","\x64\x65\x63\x6F\x64\x65","\x66\x6C\x69\x70\x45\x64\x67\x65","\x67\x65\x74\x56\x61\x6C\x75\x65","\x45\x4C\x42\x4F\x57\x5F\x48\x4F\x52\x49\x5A\x4F\x4E\x54\x41\x4C","\x45\x4C\x42\x4F\x57\x5F\x56\x45\x52\x54\x49\x43\x41\x4C","\x73\x65\x74\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65\x73","\x73\x65\x74\x44\x65\x66\x61\x75\x6C\x74\x45\x64\x67\x65","\x69\x73\x45\x64\x67\x65","\x67\x65\x74\x4D\x6F\x64\x65\x6C","\x63\x6C\x6F\x6E\x65\x43\x65\x6C\x6C\x73","\x67\x65\x6F\x6D\x65\x74\x72\x79","\x70\x6F\x69\x6E\x74\x73","\x67\x65\x74\x53\x74\x79\x6C\x65","\x73\x65\x74\x53\x74\x79\x6C\x65","\x63\x72\x65\x61\x74\x65\x45\x64\x67\x65\x53\x74\x61\x74\x65","\x63\x72\x65\x61\x74\x65\x53\x74\x61\x74\x65","\x66\x61\x63\x74\x6F\x72\x79\x4D\x65\x74\x68\x6F\x64","\x69\x73\x43\x65\x6C\x6C\x46\x6F\x6C\x64\x61\x62\x6C\x65","\x66\x6F\x6C\x64\x69\x6E\x67\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x53\x77\x69\x6D\x6C\x61\x6E\x65","\x69\x73\x56\x61\x6C\x69\x64\x52\x6F\x6F\x74","\x63\x72\x65\x61\x74\x65\x47\x72\x6F\x75\x70\x43\x65\x6C\x6C","\x67\x72\x6F\x75\x70","\x67\x65\x74\x54\x6F\x6F\x6C\x74\x69\x70\x46\x6F\x72\x43\x65\x6C\x6C","","\x69\x73\x56\x65\x72\x74\x65\x78","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x5F","\x6E\x6F\x64\x65\x4E\x61\x6D\x65","\x76\x61\x6C\x75\x65","\x67\x65\x74","\x63\x6F\x6E\x76\x65\x72\x74\x56\x61\x6C\x75\x65\x54\x6F\x53\x74\x72\x69\x6E\x67","\x6F\x62\x6A\x65\x63\x74","\x6C\x61\x62\x65\x6C","\x67\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x63\x65\x6C\x6C\x4C\x61\x62\x65\x6C\x43\x68\x61\x6E\x67\x65\x64","\x63\x6C\x6F\x6E\x65\x4E\x6F\x64\x65","\x73\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x73\x65\x74\x4C\x69\x6E\x6B\x46\x6F\x72\x43\x65\x6C\x6C","\x63\x72\x65\x61\x74\x65\x58\x6D\x6C\x44\x6F\x63\x75\x6D\x65\x6E\x74","\x55\x73\x65\x72\x4F\x62\x6A\x65\x63\x74","\x63\x72\x65\x61\x74\x65\x45\x6C\x65\x6D\x65\x6E\x74","\x6C\x65\x6E\x67\x74\x68","\x6C\x69\x6E\x6B","\x72\x65\x6D\x6F\x76\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x73\x65\x74\x56\x61\x6C\x75\x65","\x6D\x6F\x64\x65\x6C","\x67\x65\x74\x4C\x69\x6E\x6B\x46\x6F\x72\x43\x65\x6C\x6C","\x69\x73\x45\x6E\x61\x62\x6C\x65\x64","\x6D\x61\x72\x6B\x65\x72","\x66\x69\x72\x73\x74","\x68\x69\x64\x65\x4D\x65\x6E\x75","\x75\x70\x64\x61\x74\x65\x4D\x6F\x75\x73\x65\x45\x76\x65\x6E\x74","\x67\x72\x61\x70\x68\x58","\x67\x72\x61\x70\x68\x59","\x67\x65\x74\x43\x65\x6C\x6C\x41\x74","\x73\x74\x61\x74\x65","\x73\x68\x61\x70\x65","\x6E\x6F\x64\x65","\x66\x69\x72\x65\x4D\x6F\x75\x73\x65\x45\x76\x65\x6E\x74","\x4D\x4F\x55\x53\x45\x5F\x44\x4F\x57\x4E","\x69\x73\x4D\x65\x6E\x75\x53\x68\x6F\x77\x69\x6E\x67","\x67\x65\x74\x43\x65\x6C\x6C","\x69\x73\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x45\x6D\x70\x74\x79","\x4D\x4F\x55\x53\x45\x5F\x55\x50","\x69\x73\x45\x64\x69\x74\x69\x6E\x67","\x67\x65\x74\x45\x76\x65\x6E\x74","\x67\x65\x74\x43\x6C\x69\x65\x6E\x74\x58","\x67\x65\x74\x43\x6C\x69\x65\x6E\x74\x59","\x70\x6F\x70\x75\x70","\x63\x6F\x6E\x73\x75\x6D\x65","\x4D\x4F\x55\x53\x45\x5F\x4D\x4F\x56\x45","\x69\x73\x43\x6F\x6E\x73\x75\x6D\x65\x64","\x72\x6F\x74\x61\x74\x69\x6F\x6E\x45\x6E\x61\x62\x6C\x65\x64","\x62\x61\x73\x65\x53\x70\x61\x63\x69\x6E\x67\x54\x6F\x70","\x62\x61\x73\x65\x53\x70\x61\x63\x69\x6E\x67\x42\x6F\x74\x74\x6F\x6D","\x48\x41\x4E\x44\x4C\x45\x5F\x53\x49\x5A\x45","\x4C\x41\x42\x45\x4C\x5F\x48\x41\x4E\x44\x4C\x45\x5F\x53\x49\x5A\x45","\x49\x53\x5F\x54\x4F\x55\x43\x48","\x74\x6F\x6C\x65\x72\x61\x6E\x63\x65","\x67\x72\x69\x64\x53\x69\x7A\x65","\x73\x65\x6C\x65\x63\x74\x4F\x6E\x50\x6F\x70\x75\x70","\x75\x73\x65\x4C\x65\x66\x74\x42\x75\x74\x74\x6F\x6E\x46\x6F\x72\x50\x61\x6E\x6E\x69\x6E\x67","\x69\x73\x50\x61\x6E\x6E\x69\x6E\x67\x54\x72\x69\x67\x67\x65\x72","\x69\x67\x6E\x6F\x72\x65\x43\x65\x6C\x6C","\x69\x73\x43\x6F\x6E\x74\x72\x6F\x6C\x44\x6F\x77\x6E","\x69\x73\x53\x68\x69\x66\x74\x44\x6F\x77\x6E","\x75\x73\x65\x50\x6F\x70\x75\x70\x54\x72\x69\x67\x67\x65\x72","\x69\x73\x50\x6F\x70\x75\x70\x54\x72\x69\x67\x67\x65\x72","\x6D\x6F\x75\x73\x65\x44\x6F\x77\x6E","\x64\x65\x6C\x61\x79\x65\x64\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E","\x63\x72\x65\x61\x74\x65\x48\x61\x6E\x64\x6C\x65\x72\x73","\x74\x6F\x6F\x6C\x74\x69\x70\x48\x61\x6E\x64\x6C\x65\x72","\x73\x65\x74\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73\x48\x61\x6E\x64\x6C\x65\x72","\x70\x61\x6E\x6E\x69\x6E\x67\x45\x6E\x61\x62\x6C\x65\x64","\x67\x72\x61\x70\x68\x48\x61\x6E\x64\x6C\x65\x72","\x73\x65\x6C\x65\x63\x74\x43\x65\x6C\x6C\x73","\x73\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C","\x64\x62\x6C\x43\x6C\x69\x63\x6B","\x63\x6F\x6E\x76\x65\x72\x74\x50\x6F\x69\x6E\x74","\x78","\x79","\x2F\x74\x6F\x75\x63\x68\x2D\x68\x61\x6E\x64\x6C\x65\x2E\x70\x6E\x67","\x68\x61\x6E\x64\x6C\x65\x49\x6D\x61\x67\x65","\x73\x69\x7A\x65\x72\x49\x6D\x61\x67\x65","\x73\x72\x63","\x2F\x74\x6F\x75\x63\x68\x2D\x63\x6F\x6E\x6E\x65\x63\x74\x6F\x72\x2E\x70\x6E\x67","\x69\x6E\x69\x74","\x69\x73\x43\x65\x6C\x6C\x43\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65","\x63\x6F\x6E\x6E\x65\x63\x74\x6F\x72\x49\x6D\x67","\x63\x72\x65\x61\x74\x65\x49\x6D\x61\x67\x65","\x77\x69\x64\x74\x68","\x32\x39\x70\x78","\x68\x65\x69\x67\x68\x74","\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x61\x62\x73\x6F\x6C\x75\x74\x65","\x74\x69\x74\x6C\x65","\x72\x65\x64\x69\x72\x65\x63\x74\x4D\x6F\x75\x73\x65\x45\x76\x65\x6E\x74\x73","\x70\x61\x64\x64\x69\x6E\x67","\x32\x70\x78","\x69\x73\x4D\x6F\x75\x73\x65\x44\x6F\x77\x6E","\x61\x64\x64\x47\x65\x73\x74\x75\x72\x65\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x61\x70\x70\x65\x6E\x64\x43\x68\x69\x6C\x64","\x72\x65\x64\x72\x61\x77\x54\x6F\x6F\x6C\x73","\x72\x65\x64\x72\x61\x77","\x73\x69\x6E\x67\x6C\x65\x53\x69\x7A\x65\x72","\x6C\x65\x66\x74","\x6F\x66\x66\x73\x65\x74\x57\x69\x64\x74\x68","\x70\x78","\x74\x6F\x70","\x6F\x66\x66\x73\x65\x74\x48\x65\x69\x67\x68\x74","\x64\x65\x73\x74\x72\x6F\x79","\x72\x65\x6D\x6F\x76\x65\x43\x68\x69\x6C\x64","\x70\x61\x72\x65\x6E\x74\x4E\x6F\x64\x65","\x2F\x63\x6F\x6E\x6E\x65\x63\x74\x6F\x72\x2E\x70\x6E\x67","\x63\x6F\x6E\x6E\x65\x63\x74\x49\x6D\x61\x67\x65","\x49\x53\x5F\x49\x45","\x49\x53\x5F\x53\x56\x47","\x64\x69\x76","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x49\x6D\x61\x67\x65","\x75\x72\x6C\x28","\x29","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x63\x65\x6E\x74\x65\x72","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x52\x65\x70\x65\x61\x74","\x6E\x6F\x2D\x72\x65\x70\x65\x61\x74","\x64\x69\x73\x70\x6C\x61\x79","\x49\x53\x5F\x51\x55\x49\x52\x4B\x53","\x69\x6E\x6C\x69\x6E\x65","\x69\x6E\x6C\x69\x6E\x65\x2D\x62\x6C\x6F\x63\x6B","\x6D\x6F\x75\x73\x65\x64\x6F\x77\x6E"];Graph= function(_0xd562x1,_0xd562x2,_0xd562x3,_0xd562x4){mxGraph[_0x31e9[0]](this,_0xd562x1,_0xd562x2,_0xd562x3,_0xd562x4);this[_0x31e9[1]](true);this[_0x31e9[2]](false);this[_0x31e9[3]](true);this[_0x31e9[4]](!mxClient.IS_TOUCH);this[_0x31e9[5]](false);this[_0x31e9[6]](false);this[_0x31e9[7]]= true;this[_0x31e9[8]]= false;this[_0x31e9[9]]= false;this[_0x31e9[11]][_0x31e9[10]]= true;this[_0x31e9[12]](false);this[_0x31e9[11]][_0x31e9[13]](false);this[_0x31e9[11]][_0x31e9[14]]= function(){return mxConnectionHandler[_0x31e9[16]][_0x31e9[14]][_0x31e9[15]](this,arguments)&& urlParams[_0x31e9[17]]!= _0x31e9[18]};this[_0x31e9[19]]= _0x31e9[20];if(_0xd562x4== null){this[_0x31e9[21]]()};var _0xd562x5= new mxRubberband(this);this[_0x31e9[22]]= function(){return _0xd562x5};this[_0x31e9[29]][_0x31e9[28]](mxEvent.PAN_START,mxUtils[_0x31e9[27]](this,function(){this[_0x31e9[25]][_0x31e9[24]][_0x31e9[23]]= _0x31e9[26]}));this[_0x31e9[29]][_0x31e9[28]](mxEvent.PAN_END,mxUtils[_0x31e9[27]](this,function(){this[_0x31e9[25]][_0x31e9[24]][_0x31e9[23]]= _0x31e9[30]}));this[_0x31e9[31]]= function(_0xd562x6){var _0xd562x7=this[_0x31e9[33]][_0x31e9[32]](_0xd562x6);var _0xd562x8=(_0xd562x7!= null)?_0xd562x7[_0x31e9[24]]:this[_0x31e9[34]](_0xd562x6);return _0xd562x8[_0x31e9[35]]== _0x31e9[36]|| _0xd562x8[_0x31e9[37]]== _0x31e9[38]};this[_0x31e9[40]][_0x31e9[39]]= function(_0xd562x7){var _0xd562x9=mxCellRenderer[_0x31e9[16]][_0x31e9[39]][_0x31e9[15]](this,arguments);if(_0xd562x7[_0x31e9[24]][_0x31e9[37]]== _0x31e9[38]&& _0xd562x7[_0x31e9[24]][_0x31e9[35]]!= 1){_0xd562x9= mxUtils[_0x31e9[41]](_0xd562x9,false)};return _0xd562x9};this[_0x31e9[42]]= function(_0xd562x6){return false};this[_0x31e9[11]][_0x31e9[43]]= 16;var _0xd562xa=this[_0x31e9[11]][_0x31e9[44]];this[_0x31e9[11]][_0x31e9[44]]= function(_0xd562xb,_0xd562x7){if(_0xd562x7== null){if(!this[_0x31e9[46]][_0x31e9[29]][_0x31e9[45]]){_0xd562x5[_0x31e9[49]](_0xd562xb[_0x31e9[47]](),_0xd562xb[_0x31e9[48]]());this[_0x31e9[46]][_0x31e9[29]][_0x31e9[50]]= false}}else {if(tapAndHoldStartsConnection){_0xd562xa[_0x31e9[15]](this,arguments)}else {if(this[_0x31e9[46]][_0x31e9[52]](_0xd562x7[_0x31e9[51]])&& this[_0x31e9[46]][_0x31e9[53]]()> 1){this[_0x31e9[46]][_0x31e9[54]](_0xd562x7[_0x31e9[51]])}}}};if(touchStyle){this[_0x31e9[55]]()}};mxUtils[_0x31e9[56]](Graph,mxGraph);Graph[_0x31e9[16]][_0x31e9[57]]= null;Graph[_0x31e9[16]][_0x31e9[58]]= null;Graph[_0x31e9[16]][_0x31e9[21]]= function(){var _0xd562xc=mxUtils[_0x31e9[61]](STYLE_PATH+ _0x31e9[60])[_0x31e9[59]]();var _0xd562xd= new mxCodec(_0xd562xc[_0x31e9[62]]);_0xd562xd[_0x31e9[64]](_0xd562xc,this[_0x31e9[63]]())};Graph[_0x31e9[16]][_0x31e9[65]]= function(_0xd562xe){if(_0xd562xe!= null){var _0xd562x7=this[_0x31e9[33]][_0x31e9[32]](_0xd562xe);var _0xd562x8=(_0xd562x7!= null)?_0xd562x7[_0x31e9[24]]:this[_0x31e9[34]](_0xd562xe);if(_0xd562x8!= null){var _0xd562xf=mxUtils[_0x31e9[66]](_0xd562x8,mxConstants.STYLE_ELBOW,mxConstants.ELBOW_HORIZONTAL);var _0xd562x10=(_0xd562xf== mxConstants[_0x31e9[67]])?mxConstants[_0x31e9[68]]:mxConstants[_0x31e9[67]];this[_0x31e9[69]](mxConstants.STYLE_ELBOW,_0xd562x10,[_0xd562xe])}}};Graph[_0x31e9[16]][_0x31e9[70]]= function(_0xd562x6){if(_0xd562x6!= null&& this[_0x31e9[72]]()[_0x31e9[71]](_0xd562x6)){var _0xd562x11=this[_0x31e9[72]]()[_0x31e9[73]]([_0xd562x6])[0];if(_0xd562x11[_0x31e9[74]]!= null){_0xd562x11[_0x31e9[74]][_0x31e9[75]]= null};var _0xd562x8=_0xd562x11[_0x31e9[76]]();_0xd562x8= mxUtils[_0x31e9[77]](_0xd562x8,mxConstants.STYLE_ENTRY_X,null);_0xd562x8= mxUtils[_0x31e9[77]](_0xd562x8,mxConstants.STYLE_ENTRY_Y,null);_0xd562x8= mxUtils[_0x31e9[77]](_0xd562x8,mxConstants.STYLE_EXIT_X,null);_0xd562x8= mxUtils[_0x31e9[77]](_0xd562x8,mxConstants.STYLE_EXIT_Y,null);_0xd562x11[_0x31e9[77]](_0xd562x8);this[_0x31e9[11]][_0x31e9[78]]= function(_0xd562xb){return this[_0x31e9[46]][_0x31e9[33]][_0x31e9[79]](_0xd562x11)};this[_0x31e9[11]][_0x31e9[80]]= function(){return this[_0x31e9[46]][_0x31e9[73]]([_0xd562x11])[0]}}};Graph[_0x31e9[16]][_0x31e9[81]]= function(_0xd562x6){return this[_0x31e9[82]]&& this[_0x31e9[83]](_0xd562x6)};Graph[_0x31e9[16]][_0x31e9[84]]= function(_0xd562x6){return this[_0x31e9[83]](_0xd562x6)};Graph[_0x31e9[16]][_0x31e9[85]]= function(){var _0xd562x12=mxGraph[_0x31e9[16]][_0x31e9[85]][_0x31e9[15]](this,arguments);_0xd562x12[_0x31e9[77]](_0x31e9[86]);return _0xd562x12};Graph[_0x31e9[16]][_0x31e9[87]]= function(_0xd562x6){var _0xd562x13=_0x31e9[88];if(this[_0x31e9[72]]()[_0x31e9[89]](_0xd562x6)){_0xd562x13+= mxResources[_0x31e9[93]](_0x31e9[90]+ _0xd562x6[_0x31e9[92]][_0x31e9[91]])|| _0x31e9[88]}else {if(this[_0x31e9[72]]()[_0x31e9[71]](_0xd562x6)){_0xd562x13= mxGraph[_0x31e9[16]][_0x31e9[87]][_0x31e9[15]](this,arguments)}};return _0xd562x13};Graph[_0x31e9[16]][_0x31e9[94]]= function(_0xd562x6){if(_0xd562x6[_0x31e9[92]]!= null&& typeof (_0xd562x6[_0x31e9[92]])== _0x31e9[95]){return _0xd562x6[_0x31e9[92]][_0x31e9[97]](_0x31e9[96])};return mxGraph[_0x31e9[16]][_0x31e9[94]][_0x31e9[15]](this,arguments)};Graph[_0x31e9[16]][_0x31e9[98]]= function(_0xd562x6,_0xd562x10,_0xd562x14){if(_0xd562x6[_0x31e9[92]]!= null&& typeof (_0xd562x6[_0x31e9[92]])== _0x31e9[95]){var _0xd562x15=_0xd562x6[_0x31e9[92]][_0x31e9[99]](true);_0xd562x15[_0x31e9[100]](_0x31e9[96],_0xd562x10);_0xd562x10= _0xd562x15};mxGraph[_0x31e9[16]][_0x31e9[98]][_0x31e9[15]](this,arguments)};Graph[_0x31e9[16]][_0x31e9[101]]= function(_0xd562x6,_0xd562x16){var _0xd562x10=null;if(_0xd562x6[_0x31e9[92]]!= null&& typeof (_0xd562x6[_0x31e9[92]])== _0x31e9[95]){_0xd562x10= _0xd562x6[_0x31e9[92]][_0x31e9[99]](true)}else {var _0xd562x17=mxUtils[_0x31e9[102]]();_0xd562x10= _0xd562x17[_0x31e9[104]](_0x31e9[103]);_0xd562x10[_0x31e9[100]](_0x31e9[96],_0xd562x6[_0x31e9[92]])};if(_0xd562x16!= null&& _0xd562x16[_0x31e9[105]]> 0){_0xd562x10[_0x31e9[100]](_0x31e9[106],_0xd562x16)}else {_0xd562x10[_0x31e9[107]](_0x31e9[106])};this[_0x31e9[109]][_0x31e9[108]](_0xd562x6,_0xd562x10)};Graph[_0x31e9[16]][_0x31e9[110]]= function(_0xd562x6){if(_0xd562x6[_0x31e9[92]]!= null&& typeof (_0xd562x6[_0x31e9[92]])== _0x31e9[95]){return _0xd562x6[_0x31e9[92]][_0x31e9[97]](_0x31e9[106])};return null};Graph[_0x31e9[16]][_0x31e9[55]]= function(){this[_0x31e9[11]][_0x31e9[112]][_0x31e9[111]]= function(){return this[_0x31e9[46]][_0x31e9[11]][_0x31e9[113]]!= null};this[_0x31e9[28]](mxEvent.START_EDITING,function(_0xd562x18,_0xd562x19){this[_0x31e9[29]][_0x31e9[114]]()});var _0xd562x1a=false;var _0xd562x1b=null;this[_0x31e9[115]]= function(_0xd562xb){mxGraph[_0x31e9[16]][_0x31e9[115]][_0x31e9[15]](this,arguments);if(_0xd562xb[_0x31e9[32]]()== null){var _0xd562x6=this[_0x31e9[118]](_0xd562xb[_0x31e9[116]],_0xd562xb[_0x31e9[117]]);if(this[_0x31e9[72]]()[_0x31e9[71]](_0xd562x6)){_0xd562xb[_0x31e9[119]]= this[_0x31e9[33]][_0x31e9[32]](_0xd562x6);if(_0xd562xb[_0x31e9[119]]!= null&& _0xd562xb[_0x31e9[119]][_0x31e9[120]]!= null){this[_0x31e9[25]][_0x31e9[24]][_0x31e9[23]]= _0xd562xb[_0x31e9[119]][_0x31e9[120]][_0x31e9[121]][_0x31e9[24]][_0x31e9[23]]}}};if(_0xd562xb[_0x31e9[32]]()== null){this[_0x31e9[25]][_0x31e9[24]][_0x31e9[23]]= _0x31e9[30]}};this[_0x31e9[122]]= function(_0xd562x1c,_0xd562xb,_0xd562x18){if(_0xd562x1c== mxEvent[_0x31e9[123]]){if(!this[_0x31e9[29]][_0x31e9[124]]()){_0xd562x1b= _0xd562xb[_0x31e9[125]]();_0xd562x1a= (_0xd562x1b!= null)?this[_0x31e9[52]](_0xd562x1b):this[_0x31e9[126]]()}else {_0xd562x1a= false;_0xd562x1b= null}}else {if(_0xd562x1c== mxEvent[_0x31e9[127]]){if(_0xd562x1a&& !this[_0x31e9[128]]()){if(!this[_0x31e9[29]][_0x31e9[124]]()){var _0xd562x1d=mxEvent[_0x31e9[130]](_0xd562xb[_0x31e9[129]]());var _0xd562x1e=mxEvent[_0x31e9[131]](_0xd562xb[_0x31e9[129]]());this[_0x31e9[29]][_0x31e9[132]](_0xd562x1d+ 16,_0xd562x1e,_0xd562x1b,_0xd562xb[_0x31e9[129]]())};_0xd562x1a= false;_0xd562x1b= null;_0xd562xb[_0x31e9[133]]();return};_0xd562x1a= false;_0xd562x1b= null}};mxGraph[_0x31e9[16]][_0x31e9[122]][_0x31e9[15]](this,arguments);if(_0xd562x1c== mxEvent[_0x31e9[134]]&& _0xd562xb[_0x31e9[135]]()){_0xd562x1a= false;_0xd562x1b= null}}};(function(){mxVertexHandler[_0x31e9[16]][_0x31e9[136]]= true;mxText[_0x31e9[16]][_0x31e9[137]]= 5;mxText[_0x31e9[16]][_0x31e9[138]]= 1;if(touchStyle){mxConstants[_0x31e9[139]]= 16;mxConstants[_0x31e9[140]]= 7;if(mxClient[_0x31e9[141]]){mxVertexHandler[_0x31e9[16]][_0x31e9[142]]= 4;mxEdgeHandler[_0x31e9[16]][_0x31e9[142]]= 6;Graph[_0x31e9[16]][_0x31e9[142]]= 14;Graph[_0x31e9[16]][_0x31e9[143]]= 20;mxPanningHandler[_0x31e9[16]][_0x31e9[144]]= false;mxPanningHandler[_0x31e9[16]][_0x31e9[145]]= true;mxPanningHandler[_0x31e9[16]][_0x31e9[146]]= function(_0xd562xb){var _0xd562x19=_0xd562xb[_0x31e9[129]]();return (this[_0x31e9[145]]&& (this[_0x31e9[147]]|| _0xd562xb[_0x31e9[32]]()== null))|| (mxEvent[_0x31e9[148]](_0xd562x19)&& mxEvent[_0x31e9[149]](_0xd562x19))|| (this[_0x31e9[150]]&& mxEvent[_0x31e9[151]](_0xd562x19))}};var _0xd562x1f=mxGraphHandler[_0x31e9[16]][_0x31e9[152]];mxGraphHandler[_0x31e9[16]][_0x31e9[152]]= function(_0xd562x18,_0xd562xb){_0xd562x1f[_0x31e9[15]](this,arguments);if(this[_0x31e9[46]][_0x31e9[52]](_0xd562xb[_0x31e9[125]]())&& this[_0x31e9[46]][_0x31e9[53]]()> 1){this[_0x31e9[153]]= false}};Graph[_0x31e9[16]][_0x31e9[154]]= function(_0xd562x1){this[_0x31e9[155]]= new mxTooltipHandler(this);this[_0x31e9[155]][_0x31e9[156]](false);this[_0x31e9[157]]= new mxSelectionCellsHandler(this);this[_0x31e9[29]]= new mxPanningHandler(this);this[_0x31e9[29]][_0x31e9[158]]= false;this[_0x31e9[11]]= new mxConnectionHandler(this);this[_0x31e9[11]][_0x31e9[156]](false);this[_0x31e9[159]]= new mxGraphHandler(this)};mxConnectionHandler[_0x31e9[16]][_0x31e9[160]]= function(_0xd562xe,_0xd562x20){if(touchStyle&& _0xd562x20!= null){this[_0x31e9[46]][_0x31e9[161]](_0xd562x20)}else {this[_0x31e9[46]][_0x31e9[161]](_0xd562xe)}};var _0xd562x21=mxGraph[_0x31e9[16]][_0x31e9[162]];Graph[_0x31e9[16]][_0x31e9[162]]= function(_0xd562x19,_0xd562x6){if(_0xd562x6== null){var _0xd562x22=mxUtils[_0x31e9[163]](this[_0x31e9[25]],mxEvent[_0x31e9[130]](_0xd562x19),mxEvent[_0x31e9[131]](_0xd562x19));_0xd562x6= this[_0x31e9[118]](_0xd562x22[_0x31e9[164]],_0xd562x22[_0x31e9[165]])};_0xd562x21[_0x31e9[0]](this,_0xd562x19,_0xd562x6)};var _0xd562x23= new mxImage(IMAGE_PATH+ _0x31e9[166],16,16);mxVertexHandler[_0x31e9[16]][_0x31e9[167]]= _0xd562x23;mxEdgeHandler[_0x31e9[16]][_0x31e9[167]]= _0xd562x23;mxOutline[_0x31e9[16]][_0x31e9[168]]= _0xd562x23; new Image()[_0x31e9[169]]= _0xd562x23[_0x31e9[169]];var _0xd562x24=IMAGE_PATH+ _0x31e9[170];var _0xd562x25=mxVertexHandler[_0x31e9[16]][_0x31e9[171]];mxVertexHandler[_0x31e9[16]][_0x31e9[171]]= function(){_0xd562x25[_0x31e9[15]](this,arguments);if(showConnectorImg&& this[_0x31e9[46]][_0x31e9[11]][_0x31e9[111]]()&& this[_0x31e9[46]][_0x31e9[172]](this[_0x31e9[119]][_0x31e9[51]])&& !this[_0x31e9[46]][_0x31e9[84]](this[_0x31e9[119]][_0x31e9[51]])&& this[_0x31e9[46]][_0x31e9[53]]()== 1){this[_0x31e9[173]]= mxUtils[_0x31e9[174]](_0xd562x24);this[_0x31e9[173]][_0x31e9[24]][_0x31e9[23]]= _0x31e9[26];this[_0x31e9[173]][_0x31e9[24]][_0x31e9[175]]= _0x31e9[176];this[_0x31e9[173]][_0x31e9[24]][_0x31e9[177]]= _0x31e9[176];this[_0x31e9[173]][_0x31e9[24]][_0x31e9[178]]= _0x31e9[179];if(!mxClient[_0x31e9[141]]){this[_0x31e9[173]][_0x31e9[100]](_0x31e9[180],mxResources[_0x31e9[93]](_0x31e9[17]));mxEvent[_0x31e9[181]](this[_0x31e9[173]],this[_0x31e9[46]],this[_0x31e9[119]])};this[_0x31e9[173]][_0x31e9[24]][_0x31e9[182]]= _0x31e9[183];mxEvent[_0x31e9[185]](this[_0x31e9[173]],mxUtils[_0x31e9[27]](this,function(_0xd562x19){this[_0x31e9[46]][_0x31e9[29]][_0x31e9[114]]();var _0xd562x22=mxUtils[_0x31e9[163]](this[_0x31e9[46]][_0x31e9[25]],mxEvent[_0x31e9[130]](_0xd562x19),mxEvent[_0x31e9[131]](_0xd562x19));this[_0x31e9[46]][_0x31e9[11]][_0x31e9[49]](this[_0x31e9[119]],_0xd562x22[_0x31e9[164]],_0xd562x22[_0x31e9[165]]);this[_0x31e9[46]][_0x31e9[184]]= true;mxEvent[_0x31e9[133]](_0xd562x19)}));this[_0x31e9[46]][_0x31e9[25]][_0x31e9[186]](this[_0x31e9[173]])};this[_0x31e9[187]]()};var _0xd562x26=mxVertexHandler[_0x31e9[16]][_0x31e9[188]];mxVertexHandler[_0x31e9[16]][_0x31e9[188]]= function(){_0xd562x26[_0x31e9[15]](this);this[_0x31e9[187]]()};mxVertexHandler[_0x31e9[16]][_0x31e9[187]]= function(){if(this[_0x31e9[119]]!= null&& this[_0x31e9[173]]!= null){if(mxVertexHandler[_0x31e9[16]][_0x31e9[189]]){this[_0x31e9[173]][_0x31e9[24]][_0x31e9[190]]= (this[_0x31e9[119]][_0x31e9[164]]+ this[_0x31e9[119]][_0x31e9[175]]- this[_0x31e9[173]][_0x31e9[191]]/ 2)+ _0x31e9[192];this[_0x31e9[173]][_0x31e9[24]][_0x31e9[193]]= (this[_0x31e9[119]][_0x31e9[165]]- this[_0x31e9[173]][_0x31e9[194]]/ 2)+ _0x31e9[192]}else {this[_0x31e9[173]][_0x31e9[24]][_0x31e9[190]]= (this[_0x31e9[119]][_0x31e9[164]]+ this[_0x31e9[119]][_0x31e9[175]]+ mxConstants[_0x31e9[139]]/ 2+ 4)+ _0x31e9[192];this[_0x31e9[173]][_0x31e9[24]][_0x31e9[193]]= (this[_0x31e9[119]][_0x31e9[165]]+ (this[_0x31e9[119]][_0x31e9[177]]- this[_0x31e9[173]][_0x31e9[194]])/ 2)+ _0x31e9[192]}}};var _0xd562x27=mxVertexHandler[_0x31e9[16]][_0x31e9[195]];mxVertexHandler[_0x31e9[16]][_0x31e9[195]]= function(_0xd562x18,_0xd562xb){_0xd562x27[_0x31e9[15]](this,arguments);if(this[_0x31e9[173]]!= null){this[_0x31e9[173]][_0x31e9[197]][_0x31e9[196]](this[_0x31e9[173]]);this[_0x31e9[173]]= null}}; new Image()[_0x31e9[169]]= _0xd562x24}else {var _0xd562x28= new mxImage(IMAGE_PATH+ _0x31e9[198],15,15);mxConnectionHandler[_0x31e9[16]][_0x31e9[199]]= _0xd562x28; new Image()[_0x31e9[169]]= _0xd562x28[_0x31e9[169]];if(urlParams[_0x31e9[17]]== _0x31e9[18]){var _0xd562x28= new mxImage(IMAGE_PATH+ _0x31e9[198],15,15);var _0xd562x25=mxVertexHandler[_0x31e9[16]][_0x31e9[171]];mxVertexHandler[_0x31e9[16]][_0x31e9[171]]= function(){_0xd562x25[_0x31e9[15]](this,arguments);if(showConnectorImg&& this[_0x31e9[46]][_0x31e9[11]][_0x31e9[111]]()&& this[_0x31e9[46]][_0x31e9[172]](this[_0x31e9[119]][_0x31e9[51]])&& !this[_0x31e9[46]][_0x31e9[84]](this[_0x31e9[119]][_0x31e9[51]])&& this[_0x31e9[46]][_0x31e9[53]]()== 1){if(mxClient[_0x31e9[200]]&& !mxClient[_0x31e9[201]]){this[_0x31e9[173]]= document[_0x31e9[104]](_0x31e9[202]);this[_0x31e9[173]][_0x31e9[24]][_0x31e9[203]]= _0x31e9[204]+ _0xd562x28[_0x31e9[169]]+ _0x31e9[205];this[_0x31e9[173]][_0x31e9[24]][_0x31e9[206]]= _0x31e9[207];this[_0x31e9[173]][_0x31e9[24]][_0x31e9[208]]= _0x31e9[209];this[_0x31e9[173]][_0x31e9[24]][_0x31e9[175]]= (_0xd562x28[_0x31e9[175]]+ 4)+ _0x31e9[192];this[_0x31e9[173]][_0x31e9[24]][_0x31e9[177]]= (_0xd562x28[_0x31e9[177]]+ 4)+ _0x31e9[192];this[_0x31e9[173]][_0x31e9[24]][_0x31e9[210]]= (mxClient[_0x31e9[211]])?_0x31e9[212]:_0x31e9[213]}else {this[_0x31e9[173]]= mxUtils[_0x31e9[174]](_0xd562x28[_0x31e9[169]]);this[_0x31e9[173]][_0x31e9[24]][_0x31e9[175]]= _0xd562x28[_0x31e9[175]]+ _0x31e9[192];this[_0x31e9[173]][_0x31e9[24]][_0x31e9[177]]= _0xd562x28[_0x31e9[177]]+ _0x31e9[192]};this[_0x31e9[173]][_0x31e9[24]][_0x31e9[23]]= _0x31e9[26];this[_0x31e9[173]][_0x31e9[24]][_0x31e9[178]]= _0x31e9[179];this[_0x31e9[173]][_0x31e9[100]](_0x31e9[180],mxResources[_0x31e9[93]](_0x31e9[17]));mxEvent[_0x31e9[181]](this[_0x31e9[173]],this[_0x31e9[46]],this[_0x31e9[119]]);this[_0x31e9[173]][_0x31e9[24]][_0x31e9[182]]= _0x31e9[183];mxEvent[_0x31e9[28]](this[_0x31e9[173]],_0x31e9[214],mxUtils[_0x31e9[27]](this,function(_0xd562x19){this[_0x31e9[46]][_0x31e9[29]][_0x31e9[114]]();var _0xd562x22=mxUtils[_0x31e9[163]](this[_0x31e9[46]][_0x31e9[25]],mxEvent[_0x31e9[130]](_0xd562x19),mxEvent[_0x31e9[131]](_0xd562x19));this[_0x31e9[46]][_0x31e9[11]][_0x31e9[49]](this[_0x31e9[119]],_0xd562x22[_0x31e9[164]],_0xd562x22[_0x31e9[165]]);this[_0x31e9[46]][_0x31e9[184]]= true;mxEvent[_0x31e9[133]](_0xd562x19)}));this[_0x31e9[46]][_0x31e9[25]][_0x31e9[186]](this[_0x31e9[173]])};this[_0x31e9[187]]()};var _0xd562x26=mxVertexHandler[_0x31e9[16]][_0x31e9[188]];mxVertexHandler[_0x31e9[16]][_0x31e9[188]]= function(){_0xd562x26[_0x31e9[15]](this);this[_0x31e9[187]]()};mxVertexHandler[_0x31e9[16]][_0x31e9[187]]= function(){if(this[_0x31e9[119]]!= null&& this[_0x31e9[173]]!= null){if(mxVertexHandler[_0x31e9[16]][_0x31e9[189]]){this[_0x31e9[173]][_0x31e9[24]][_0x31e9[190]]= (this[_0x31e9[119]][_0x31e9[164]]+ this[_0x31e9[119]][_0x31e9[175]]- this[_0x31e9[173]][_0x31e9[191]]/ 2)+ _0x31e9[192];this[_0x31e9[173]][_0x31e9[24]][_0x31e9[193]]= (this[_0x31e9[119]][_0x31e9[165]]- this[_0x31e9[173]][_0x31e9[194]]/ 2)+ _0x31e9[192]}else {this[_0x31e9[173]][_0x31e9[24]][_0x31e9[190]]= (this[_0x31e9[119]][_0x31e9[164]]+ this[_0x31e9[119]][_0x31e9[175]]+ mxConstants[_0x31e9[139]]/ 2+ 2)+ _0x31e9[192];this[_0x31e9[173]][_0x31e9[24]][_0x31e9[193]]= (this[_0x31e9[119]][_0x31e9[165]]+ (this[_0x31e9[119]][_0x31e9[177]]- this[_0x31e9[173]][_0x31e9[194]])/ 2)+ _0x31e9[192]}}};var _0xd562x27=mxVertexHandler[_0x31e9[16]][_0x31e9[195]];mxVertexHandler[_0x31e9[16]][_0x31e9[195]]= function(_0xd562x18,_0xd562xb){_0xd562x27[_0x31e9[15]](this,arguments);if(this[_0x31e9[173]]!= null){this[_0x31e9[173]][_0x31e9[197]][_0x31e9[196]](this[_0x31e9[173]]);this[_0x31e9[173]]= null}}}}})() \ No newline at end of file diff --git a/public/assets/plugins/jscripty/js/Menus.js b/public/assets/plugins/jscripty/js/Menus.js index 7d33b9e..55b47c7 100644 --- a/public/assets/plugins/jscripty/js/Menus.js +++ b/public/assets/plugins/jscripty/js/Menus.js @@ -1,716 +1 @@ -/** - * $Id: Menus.js,v 1.13 2013-02-20 16:21:29 gaudenz Exp $ - * Copyright (c) 2006-2012, JGraph Ltd - */ -/** - * Constructs a new graph editor - */ -Menus = function(editorUi) { - this.editorUi = editorUi; - this.menus = new Object(); - this.init(); - - // Pre-fetches checkmark image - new Image().src = IMAGE_PATH + '/checkmark.gif'; -}; - -/** - * Adds the label menu items to the given menu and parent. - */ -Menus.prototype.init = function() { - var graph = this.editorUi.editor.graph; - - this.put('fontFamily', new Menu(mxUtils.bind(this, function(menu, parent) { - var fonts = ['Helvetica', 'Verdana', 'Times New Roman', 'Garamond', - 'Comic Sans MS', - 'Courier New', 'Georgia', 'Lucida Console', 'Tahoma' - ]; - - for (var i = 0; i < fonts.length; i++) { - var tr = this.styleChange(menu, fonts[i], [mxConstants.STYLE_FONTFAMILY], [ - fonts[i] - ], null, parent); - tr.firstChild.nextSibling.style.fontFamily = fonts[i]; - } - - menu.addSeparator(parent); - this.promptChange(menu, mxResources.get('custom'), '', mxConstants.DEFAULT_FONTFAMILY, - mxConstants.STYLE_FONTFAMILY, parent); - }))); - this.put('fontSize', new Menu(mxUtils.bind(this, function(menu, parent) { - var sizes = [6, 8, 9, 10, 11, 12, 14, 18, 24, 36, 48, 72]; - - for (var i = 0; i < sizes.length; i++) { - this.styleChange(menu, sizes[i], [mxConstants.STYLE_FONTSIZE], [sizes[i]], - null, parent); - } - - menu.addSeparator(parent); - this.promptChange(menu, mxResources.get('custom'), '(pt)', '12', - mxConstants.STYLE_FONTSIZE, parent); - }))); - this.put('linewidth', new Menu(mxUtils.bind(this, function(menu, parent) { - var sizes = [1, 2, 3, 4, 8, 12, 16, 24]; - - for (var i = 0; i < sizes.length; i++) { - this.styleChange(menu, sizes[i] + 'px', [mxConstants.STYLE_STROKEWIDTH], [ - sizes[i] - ], null, parent); - } - - menu.addSeparator(parent); - this.promptChange(menu, mxResources.get('custom'), '(px)', '1', - mxConstants.STYLE_STROKEWIDTH, parent); - }))); - this.put('line', new Menu(mxUtils.bind(this, function(menu, parent) { - this.styleChange(menu, mxResources.get('straight'), [mxConstants.STYLE_EDGE], [ - null - ], null, parent); - this.styleChange(menu, mxResources.get('entityRelation'), [mxConstants.STYLE_EDGE], [ - 'entityRelationEdgeStyle' - ], null, parent); - menu.addSeparator(parent); - this.styleChange(menu, mxResources.get('horizontal'), [mxConstants.STYLE_EDGE, - mxConstants.STYLE_ELBOW - ], ['elbowEdgeStyle', 'horizontal'], null, parent); - this.styleChange(menu, mxResources.get('vertical'), [mxConstants.STYLE_EDGE, - mxConstants.STYLE_ELBOW - ], ['elbowEdgeStyle', 'vertical'], null, parent); - menu.addSeparator(parent); - this.styleChange(menu, mxResources.get('manual'), [mxConstants.STYLE_EDGE], [ - 'segmentEdgeStyle' - ], null, parent); - this.styleChange(menu, mxResources.get('automatic'), [mxConstants.STYLE_EDGE], [ - 'orthogonalEdgeStyle' - ], null, parent); - }))); - this.put('lineend', new Menu(mxUtils.bind(this, function(menu, parent) { - this.styleChange(menu, mxResources.get('classic'), [mxConstants.STYLE_ENDARROW], [ - mxConstants.ARROW_CLASSIC - ], null, parent); - this.styleChange(menu, mxResources.get('openArrow'), [mxConstants.STYLE_ENDARROW], [ - mxConstants.ARROW_OPEN - ], null, parent); - this.styleChange(menu, mxResources.get('block'), [mxConstants.STYLE_ENDARROW], [ - mxConstants.ARROW_BLOCK - ], null, parent); - menu.addSeparator(parent); - this.styleChange(menu, mxResources.get('oval'), [mxConstants.STYLE_ENDARROW], [ - mxConstants.ARROW_OVAL - ], null, parent); - this.styleChange(menu, mxResources.get('diamond'), [mxConstants.STYLE_ENDARROW], [ - mxConstants.ARROW_DIAMOND - ], null, parent); - this.styleChange(menu, mxResources.get('diamondThin'), [mxConstants.STYLE_ENDARROW], [ - mxConstants.ARROW_DIAMOND_THIN - ], null, parent); - menu.addSeparator(parent); - this.styleChange(menu, mxResources.get('none'), [mxConstants.STYLE_ENDARROW], [ - mxConstants.NONE - ], null, parent); - menu.addSeparator(parent); - menu.addItem(mxResources.get('transparent'), null, function() { - graph.toggleCellStyles('endFill', true); - }, parent, null, true); - menu.addSeparator(parent); - this.promptChange(menu, mxResources.get('size'), '(px)', mxConstants.DEFAULT_MARKERSIZE, - mxConstants.STYLE_ENDSIZE, parent); - }))); - this.put('linestart', new Menu(mxUtils.bind(this, function(menu, parent) { - this.styleChange(menu, mxResources.get('classic'), [mxConstants.STYLE_STARTARROW], [ - mxConstants.ARROW_CLASSIC - ], null, parent); - this.styleChange(menu, mxResources.get('openArrow'), [mxConstants.STYLE_STARTARROW], [ - mxConstants.ARROW_OPEN - ], null, parent); - this.styleChange(menu, mxResources.get('block'), [mxConstants.STYLE_STARTARROW], [ - mxConstants.ARROW_BLOCK - ], null, parent); - menu.addSeparator(parent); - this.styleChange(menu, mxResources.get('oval'), [mxConstants.STYLE_STARTARROW], [ - mxConstants.ARROW_OVAL - ], null, parent); - this.styleChange(menu, mxResources.get('diamond'), [mxConstants.STYLE_STARTARROW], [ - mxConstants.ARROW_DIAMOND - ], null, parent); - this.styleChange(menu, mxResources.get('diamondThin'), [mxConstants.STYLE_STARTARROW], [ - mxConstants.ARROW_DIAMOND_THIN - ], null, parent); - menu.addSeparator(parent); - this.styleChange(menu, mxResources.get('none'), [mxConstants.STYLE_STARTARROW], [ - mxConstants.NONE - ], null, parent); - menu.addSeparator(parent); - menu.addItem(mxResources.get('transparent'), null, function() { - graph.toggleCellStyles('startFill', true); - }, parent, null, true); - menu.addSeparator(parent); - this.promptChange(menu, mxResources.get('size'), '(px)', mxConstants.DEFAULT_MARKERSIZE, - mxConstants.STYLE_STARTSIZE, parent); - }))); - this.put('spacing', new Menu(mxUtils.bind(this, function(menu, parent) { - // Uses shadow action and line menu to analyze selection - var vertexSelected = this.editorUi.actions.get('shadow').enabled; - var edgeSelected = this.get('line').enabled; - - if (vertexSelected || menu.showDisabled) { - this.promptChange(menu, mxResources.get('top'), '(px)', '0', - mxConstants.STYLE_SPACING_TOP, parent, vertexSelected); - this.promptChange(menu, mxResources.get('right'), '(px)', '0', - mxConstants.STYLE_SPACING_RIGHT, parent, vertexSelected); - this.promptChange(menu, mxResources.get('bottom'), '(px)', '0', - mxConstants.STYLE_SPACING_BOTTOM, parent, vertexSelected); - this.promptChange(menu, mxResources.get('left'), '(px)', '0', - mxConstants.STYLE_SPACING_LEFT, parent, vertexSelected); - menu.addSeparator(parent); - this.promptChange(menu, mxResources.get('global'), '(px)', '0', - mxConstants.STYLE_SPACING, parent, vertexSelected); - this.promptChange(menu, mxResources.get('perimeter'), '(px)', '0', - mxConstants.STYLE_PERIMETER_SPACING, parent, vertexSelected); - } - - if (edgeSelected || menu.showDisabled) { - menu.addSeparator(parent); - this.promptChange(menu, mxResources.get('sourceSpacing'), '(px)', '0', - mxConstants.STYLE_SOURCE_PERIMETER_SPACING, parent, edgeSelected); - this.promptChange(menu, mxResources.get('targetSpacing'), '(px)', '0', - mxConstants.STYLE_TARGET_PERIMETER_SPACING, parent, edgeSelected); - } - }))); - this.put('format', new Menu(mxUtils.bind(this, function(menu, parent) { - this.addMenuItem(menu, 'style', parent); - }))); - this.put('text', new Menu(mxUtils.bind(this, function(menu, parent) { - var enabled = this.get('text').enabled; - menu.addSeparator(parent); - this.addSubmenu('fontFamily', menu, parent); - this.addSubmenu('fontSize', menu, parent); - this.addMenuItems(menu, ['-', 'bold', 'italic', 'underline', '-'], - parent); - this.addSubmenu('alignment', menu, parent); - this.addMenuItem(menu, 'wordWrap', parent); - menu.addSeparator(parent); - this.promptChange(menu, mxResources.get('textOpacity'), '(%)', '100', - mxConstants.STYLE_TEXT_OPACITY, parent, enabled); - menu.addItem(mxResources.get('hide'), null, function() { - graph.toggleCellStyles(mxConstants.STYLE_NOLABEL, false); - }, parent, null, enabled); - }))); - this.put('alignment', new Menu(mxUtils.bind(this, function(menu, parent) { - this.styleChange(menu, mxResources.get('leftAlign'), [mxConstants.STYLE_ALIGN], [ - mxConstants.ALIGN_LEFT - ], null, parent); - this.styleChange(menu, mxResources.get('center'), [mxConstants.STYLE_ALIGN], [ - mxConstants.ALIGN_CENTER - ], null, parent); - this.styleChange(menu, mxResources.get('rightAlign'), [mxConstants.STYLE_ALIGN], [ - mxConstants.ALIGN_RIGHT - ], null, parent); - menu.addSeparator(parent); - this.styleChange(menu, mxResources.get('topAlign'), [mxConstants.STYLE_VERTICAL_ALIGN], [ - mxConstants.ALIGN_TOP - ], null, parent); - this.styleChange(menu, mxResources.get('middle'), [mxConstants.STYLE_VERTICAL_ALIGN], [ - mxConstants.ALIGN_MIDDLE - ], null, parent); - this.styleChange(menu, mxResources.get('bottomAlign'), [mxConstants.STYLE_VERTICAL_ALIGN], [ - mxConstants.ALIGN_BOTTOM - ], null, parent); - menu.addSeparator(parent); - this.addSubmenu('position', menu, parent); - this.addSubmenu('spacing', menu, parent); - menu.addSeparator(parent); - var enabled = this.get('text').enabled; - menu.addItem(mxResources.get('vertical'), null, function() { - graph.toggleCellStyles(mxConstants.STYLE_HORIZONTAL, true); - }, parent, null, enabled); - }))); - this.put('position', new Menu(mxUtils.bind(this, function(menu, parent) { - this.styleChange(menu, mxResources.get('left'), [mxConstants.STYLE_LABEL_POSITION, - mxConstants.STYLE_ALIGN - ], [mxConstants.ALIGN_LEFT, mxConstants.ALIGN_RIGHT], null, parent); - this.styleChange(menu, mxResources.get('center'), [mxConstants.STYLE_LABEL_POSITION, - mxConstants.STYLE_ALIGN - ], [mxConstants.ALIGN_CENTER, mxConstants.ALIGN_CENTER], null, parent); - this.styleChange(menu, mxResources.get('right'), [mxConstants.STYLE_LABEL_POSITION, - mxConstants.STYLE_ALIGN - ], [mxConstants.ALIGN_RIGHT, mxConstants.ALIGN_LEFT], null, parent); - menu.addSeparator(parent); - this.styleChange(menu, mxResources.get('top'), [mxConstants.STYLE_VERTICAL_LABEL_POSITION, - mxConstants.STYLE_VERTICAL_ALIGN - ], [mxConstants.ALIGN_TOP, mxConstants.ALIGN_BOTTOM], null, parent); - this.styleChange(menu, mxResources.get('middle'), [mxConstants.STYLE_VERTICAL_LABEL_POSITION, - mxConstants.STYLE_VERTICAL_ALIGN - ], [mxConstants.ALIGN_MIDDLE, mxConstants.ALIGN_MIDDLE], null, parent); - this.styleChange(menu, mxResources.get('bottom'), [mxConstants.STYLE_VERTICAL_LABEL_POSITION, - mxConstants.STYLE_VERTICAL_ALIGN - ], [mxConstants.ALIGN_BOTTOM, mxConstants.ALIGN_TOP], null, parent); - }))); - this.put('direction', new Menu(mxUtils.bind(this, function(menu, parent) { - menu.addItem(mxResources.get('flipH'), null, function() { - graph.toggleCellStyles(mxConstants.STYLE_FLIPH, false); - }, parent); - menu.addItem(mxResources.get('flipV'), null, function() { - graph.toggleCellStyles(mxConstants.STYLE_FLIPV, false); - }, parent); - this.addMenuItems(menu, ['-', 'tilt', 'rotation'], parent); - }))); - this.put('align', new Menu(mxUtils.bind(this, function(menu, parent) { - menu.addItem(mxResources.get('leftAlign'), null, function() { - graph.alignCells(mxConstants.ALIGN_LEFT); - }, parent); - menu.addItem(mxResources.get('center'), null, function() { - graph.alignCells(mxConstants.ALIGN_CENTER); - }, parent); - menu.addItem(mxResources.get('rightAlign'), null, function() { - graph.alignCells(mxConstants.ALIGN_RIGHT); - }, parent); - menu.addSeparator(parent); - menu.addItem(mxResources.get('topAlign'), null, function() { - graph.alignCells(mxConstants.ALIGN_TOP); - }, parent); - menu.addItem(mxResources.get('middle'), null, function() { - graph.alignCells(mxConstants.ALIGN_MIDDLE); - }, parent); - menu.addItem(mxResources.get('bottomAlign'), null, function() { - graph.alignCells(mxConstants.ALIGN_BOTTOM); - }, parent); - }))); - this.put('layout', new Menu(mxUtils.bind(this, function(menu, parent) { - // menu.addItem(mxResources.get('horizontalTree'), null, mxUtils.bind(this, function() - // { - // if (!graph.isSelectionEmpty()) - // { - // var layout = new mxCompactTreeLayout(graph, true); - // layout.edgeRouting = false; - // layout.levelDistance = 30; - // this.editorUi.executeLayout(layout, true, true); - // } - // }), parent); - // menu.addItem(mxResources.get('verticalTree'), null, mxUtils.bind(this, function() - // { - // if (!graph.isSelectionEmpty()) - // { - // var layout = new mxCompactTreeLayout(graph, false); - // layout.edgeRouting = false; - // layout.levelDistance = 30; - // this.editorUi.executeLayout(layout, true, true); - // } - // }), parent); - // menu.addSeparator(parent); - menu.addItem(mxResources.get('horizontalFlow'), null, mxUtils.bind(this, - function() { - var layout = new mxHierarchicalLayout(graph, mxConstants.DIRECTION_WEST); - this.editorUi.executeLayout(layout, true, true); - }), parent); - menu.addItem(mxResources.get('verticalFlow'), null, mxUtils.bind(this, - function() { - var layout = new mxHierarchicalLayout(graph, mxConstants.DIRECTION_NORTH); - this.editorUi.executeLayout(layout, true, true); - }), parent); - //menu.addSeparator(parent); - // menu.addItem(mxResources.get('organic'), null, mxUtils.bind(this, function() - // { - // var layout = new mxFastOrganicLayout(graph); - // this.editorUi.executeLayout(layout, true, true); - // }), parent); - // menu.addItem(mxResources.get('circle'), null, mxUtils.bind(this, function() - // { - // var layout = new mxCircleLayout(graph); - // this.editorUi.executeLayout(layout, true, true, graph.getSelectionCells()); - // }), parent); - }))); - this.put('navigation', new Menu(mxUtils.bind(this, function(menu, parent) { - this.addMenuItems(menu, ['home', '-', 'exitGroup', 'enterGroup', '-', - 'expand', 'collapse' - ], parent); - }))); - this.put('arrange', new Menu(mxUtils.bind(this, function(menu, parent) { - this.addMenuItems(menu, ['toFront', 'toBack', '-'], parent); - //this.addSubmenu('direction', menu, parent); - this.addSubmenu('layout', menu, parent); - //this.addSubmenu('align', menu, parent); - menu.addSeparator(parent); - //this.addSubmenu('navigation', menu, parent); - this.addMenuItems(menu, ['-', 'group', 'ungroup', 'removeFromGroup'], - parent); - //this.addMenuItems(menu, ['-', 'group', 'ungroup', 'removeFromGroup', '-', 'autosize'], parent); - }))); - this.put('view', new Menu(mxUtils.bind(this, function(menu, parent) { - this.addMenuItems(menu, ['actualSize'], parent); - menu.addSeparator(); - var scales = [0.25, 0.5, 0.75, 1, 2, 4]; - - for (var i = 0; i < scales.length; i++) { - (function(scale) { - menu.addItem((scale * 100) + '%', null, function() { - graph.zoomTo(scale); - }, parent); - })(scales[i]); - } - - this.addMenuItems(menu, ['-', 'zoomIn', 'zoomOut', '-', 'fitWindow', - 'customZoom', '-', 'fitPage', 'fitPageWidth' - ], parent); - }))); - this.put('file', new Menu(mxUtils.bind(this, function(menu, parent) { - this.addMenuItems(menu, ['new', 'open', '-', 'save', 'saveAs', 'publish', - '-', 'variable', '-', 'import', 'export', '-', 'editFile', 'rename', '-', - 'print' - ], parent); - }))); - this.put('edit', new Menu(mxUtils.bind(this, function(menu, parent) { - this.addMenuItems(menu, ['undo', 'redo', '-', 'cut', 'copy', 'paste', - 'delete', '-', 'duplicate', '-', - 'selectVertices', 'selectEdges', 'selectAll' - ]); - }))); - this.put('help', new Menu(mxUtils.bind(this, function(menu, parent) { - this.addMenuItems(menu, ['help', '-', 'about']); - }))); -}; - -/** - * Adds the label menu items to the given menu and parent. - */ -Menus.prototype.put = function(name, menu) { - this.menus[name] = menu; -}; - -/** - * Adds the label menu items to the given menu and parent. - */ -Menus.prototype.get = function(name) { - return this.menus[name]; -}; - -/** - * Adds the given submenu. - */ -Menus.prototype.addSubmenu = function(name, menu, parent) { - var enabled = this.get(name).enabled; - - if (menu.showDisabled || enabled) { - var submenu = menu.addItem(mxResources.get(name), null, null, parent, null, - enabled); - this.addMenu(name, menu, submenu); - } -}; - -/** - * Adds the label menu items to the given menu and parent. - */ -Menus.prototype.addMenu = function(name, popupMenu, parent) { - var menu = this.get(name); - - if (menu != null && (popupMenu.showDisabled || menu.enabled)) { - this.get(name).execute(popupMenu, parent); - } -}; - -/** - * Adds a style change item to the given menu. - */ -Menus.prototype.styleChange = function(menu, label, keys, values, sprite, - parent) { - return menu.addItem(label, null, mxUtils.bind(this, function() { - var graph = this.editorUi.editor.graph; - - graph.getModel().beginUpdate(); - try { - for (var i = 0; i < keys.length; i++) { - graph.setCellStyles(keys[i], values[i]); - } - } finally { - graph.getModel().endUpdate(); - } - }), parent, sprite); -}; - -/** - * Adds a style change item with a prompt to the given menu. - */ -Menus.prototype.promptChange = function(menu, label, hint, defaultValue, key, - parent, enabled) { - return menu.addItem(label, null, mxUtils.bind(this, function() { - var graph = this.editorUi.editor.graph; - var value = defaultValue; - var state = graph.getView().getState(graph.getSelectionCell()); - - if (state != null) { - value = state.style[key] || value; - } - - value = mxUtils.prompt(mxResources.get('enterValue') + ((hint.length > 0) ? - (' ' + hint) : ''), value); - - if (value != null && value.length > 0) { - graph.setCellStyles(key, value); - } - }), parent, null, enabled); -}; - -/** - * Creates the keyboard event handler for the current graph and history. - */ -Menus.prototype.addMenuItem = function(menu, key, parent) { - var action = this.editorUi.actions.get(key); - - if (action != null && (menu.showDisabled || action.enabled)) { - var item = menu.addItem(action.label, null, action.funct, parent, null, - action.enabled); - - // Adds checkmark image - if (action.toggleAction && action.isSelected()) { - this.addCheckmark(item); - } - - this.addShortcut(item, action); - - return item; - } - - return null; -}; - -/** - * Adds a checkmark to the given menuitem. - */ -Menus.prototype.addShortcut = function(item, action) { - if (action.shortcut != null) { - var td = item.firstChild.nextSibling.nextSibling; - var span = document.createElement('span'); - span.style.color = 'gray'; - mxUtils.write(span, action.shortcut); - td.appendChild(span); - } -}; - -/** - * Adds a checkmark to the given menuitem. - */ -Menus.prototype.addCheckmark = function(item) { - var td = item.firstChild.nextSibling; - td.style.backgroundImage = 'url(' + IMAGE_PATH + '/checkmark.gif)'; - td.style.backgroundRepeat = 'no-repeat'; - td.style.backgroundPosition = '2px 50%'; -}; - -/** - * Creates the keyboard event handler for the current graph and history. - */ -Menus.prototype.addMenuItems = function(menu, keys, parent) { - for (var i = 0; i < keys.length; i++) { - if (keys[i] == '-') { - menu.addSeparator(parent); - } else { - this.addMenuItem(menu, keys[i], parent); - } - } -}; - -/** - * Creates the keyboard event handler for the current graph and history. - */ -Menus.prototype.createPopupMenu = function(menu, cell, evt) { - var graph = this.editorUi.editor.graph; - menu.smartSeparators = true; - - if (graph.isSelectionEmpty()) { - this.addMenuItems(menu, ['undo', 'redo', '-', 'paste', '-']); - } else { - this.addMenuItems(menu, ['delete', '-', 'cut', 'copy', '-', 'duplicate']); - - if (graph.getSelectionCount() == 1 && graph.getModel().isEdge(graph.getSelectionCell())) { - this.addMenuItems(menu, ['setAsDefaultEdge']); - } - - menu.addSeparator(); - } - - if (graph.getSelectionCount() > 0) { - this.addMenuItems(menu, ['toFront', 'toBack', '-']); - - if (graph.getModel().isEdge(graph.getSelectionCell())) { - var isWaypoint = false; - var cell = graph.getSelectionCell(); - - if (cell != null && graph.getModel().isEdge(cell)) { - var handler = graph.selectionCellsHandler.getHandler(cell); - - if (handler instanceof mxEdgeHandler && handler.bends != null && handler.bends - .length > 2) { - var index = handler.getHandleForEvent(new mxMouseEvent(evt)); - - // Configures removeWaypoint action before execution - var rmWaypointAction = this.editorUi.actions.get('removeWaypoint'); - rmWaypointAction.handler = handler; - rmWaypointAction.index = index; - - isWaypoint = index > 0 && index < handler.bends.length; - } - } - - this.addMenuItems(menu, ['-', (isWaypoint) ? 'removeWaypoint' : - 'addWaypoint' - ]); - } else if (graph.getSelectionCount() > 1) { - menu.addSeparator(); - this.addMenuItems(menu, ['group']); - } - - menu.addSeparator(); - - if (graph.getSelectionCount() == 1) { - var link = graph.getLinkForCell(graph.getSelectionCell()); - - if (link != null) { - this.addMenuItems(menu, ['openLink']); - } - } - } else { - this.addMenuItems(menu, ['-', 'selectVertices', 'selectEdges', '-', - 'selectAll' - ]); - } -}; - -/** - * Creates the keyboard event handler for the current graph and history. - */ -Menus.prototype.createMenubar = function(container) { - var menubar = new Menubar(this.editorUi, container); - // var menus = ['file', 'edit', 'view', 'format', 'text', 'arrange', - // 'help' - // ]; - var menus = ['file', 'edit', 'view', 'format', 'text', 'arrange']; - for (var i = 0; i < menus.length; i++) { - menubar.addMenu(mxResources.get(menus[i]), this.get(menus[i]).funct); - } - - return menubar; -}; - -/** - * Construcs a new menubar for the given editor. - */ -function Menubar(editorUi, container) { - this.editorUi = editorUi; - this.container = container; - - // Global handler to hide the current menu - mxEvent.addGestureListeners(document, mxUtils.bind(this, function(evt) { - this.hideMenu(); - })); -}; - -/** - * Adds the menubar elements. - */ -Menubar.prototype.hideMenu = function() { - if (this.currentMenu != null) { - this.currentMenu.hideMenu(); - } -}; - -/** - * Adds a submenu to this menubar. - */ -Menubar.prototype.addMenu = function(label, funct) { - var elt = document.createElement('a'); - elt.setAttribute('href', 'javascript:void(0);'); - elt.className = 'geItem'; - mxUtils.write(elt, label); - - this.addMenuHandler(elt, funct); - this.container.appendChild(elt); - - return elt; -}; - -/** - * Adds a handler for showing a menu in the given element. - */ -Menubar.prototype.addMenuHandler = function(elt, funct) { - if (funct != null) { - var show = true; - - var clickHandler = mxUtils.bind(this, function(evt) { - if (show && elt.enabled == null || elt.enabled) { - this.editorUi.editor.graph.panningHandler.hideMenu(); - var menu = new mxPopupMenu(funct); - menu.div.className += ' geMenubarMenu'; - menu.smartSeparators = true; - menu.showDisabled = true; - menu.autoExpand = true; - - // Disables autoexpand and destroys menu when hidden - menu.hideMenu = mxUtils.bind(this, function() { - mxPopupMenu.prototype.hideMenu.apply(menu, arguments); - menu.destroy(); - this.currentMenu = null; - this.currentElt = null; - }); - - // Added width of the page-sidebar - var x = elt.offsetLeft + document.getElementById('page-sidebar').offsetWidth + - 22; - // Added static height of the page-navbar - var y = elt.offsetTop + elt.offsetHeight + 140; - - menu.popup(x, y, null, evt); - - //menu.popup(elt.offsetLeft + 4, elt.offsetTop + elt.offsetHeight + 4, null, evt); - this.currentMenu = menu; - this.currentElt = elt; - } - - show = true; - mxEvent.consume(evt); - }); - - // Shows menu automatically while in expanded state - mxEvent.addListener(elt, 'mousemove', mxUtils.bind(this, function(evt) { - if (this.currentMenu != null && this.currentElt != elt) { - this.hideMenu(); - clickHandler(evt); - } - })); - - // Hides menu if already showing - mxEvent.addListener(elt, 'mousedown', mxUtils.bind(this, function() { - show = this.currentElt != elt; - })); - - mxEvent.addListener(elt, 'click', clickHandler); - } -}; - -/** - * Constructs a new action for the given parameters. - */ -function Menu(funct, enabled) { - mxEventSource.call(this); - this.funct = funct; - this.enabled = (enabled != null) ? enabled : true; -}; - -// Menu inherits from mxEventSource -mxUtils.extend(Menu, mxEventSource); - -/** - * Sets the enabled state of the action and fires a stateChanged event. - */ -Menu.prototype.setEnabled = function(value) { - if (this.enabled != value) { - this.enabled = value; - this.fireEvent(new mxEventObject('stateChanged')); - } -}; - -/** - * Sets the enabled state of the action and fires a stateChanged event. - */ -Menu.prototype.execute = function(menu, parent) { - this.funct(menu, parent); -}; +var _0xe8e0=["\x65\x64\x69\x74\x6F\x72\x55\x69","\x6D\x65\x6E\x75\x73","\x69\x6E\x69\x74","\x73\x72\x63","\x2F\x63\x68\x65\x63\x6B\x6D\x61\x72\x6B\x2E\x67\x69\x66","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x67\x72\x61\x70\x68","\x65\x64\x69\x74\x6F\x72","\x66\x6F\x6E\x74\x46\x61\x6D\x69\x6C\x79","\x48\x65\x6C\x76\x65\x74\x69\x63\x61","\x56\x65\x72\x64\x61\x6E\x61","\x54\x69\x6D\x65\x73\x20\x4E\x65\x77\x20\x52\x6F\x6D\x61\x6E","\x47\x61\x72\x61\x6D\x6F\x6E\x64","\x43\x6F\x6D\x69\x63\x20\x53\x61\x6E\x73\x20\x4D\x53","\x43\x6F\x75\x72\x69\x65\x72\x20\x4E\x65\x77","\x47\x65\x6F\x72\x67\x69\x61","\x4C\x75\x63\x69\x64\x61\x20\x43\x6F\x6E\x73\x6F\x6C\x65","\x54\x61\x68\x6F\x6D\x61","\x6C\x65\x6E\x67\x74\x68","\x53\x54\x59\x4C\x45\x5F\x46\x4F\x4E\x54\x46\x41\x4D\x49\x4C\x59","\x73\x74\x79\x6C\x65\x43\x68\x61\x6E\x67\x65","\x73\x74\x79\x6C\x65","\x6E\x65\x78\x74\x53\x69\x62\x6C\x69\x6E\x67","\x66\x69\x72\x73\x74\x43\x68\x69\x6C\x64","\x61\x64\x64\x53\x65\x70\x61\x72\x61\x74\x6F\x72","\x63\x75\x73\x74\x6F\x6D","\x67\x65\x74","","\x70\x72\x6F\x6D\x70\x74\x43\x68\x61\x6E\x67\x65","\x62\x69\x6E\x64","\x70\x75\x74","\x66\x6F\x6E\x74\x53\x69\x7A\x65","\x53\x54\x59\x4C\x45\x5F\x46\x4F\x4E\x54\x53\x49\x5A\x45","\x28\x70\x74\x29","\x31\x32","\x6C\x69\x6E\x65\x77\x69\x64\x74\x68","\x70\x78","\x53\x54\x59\x4C\x45\x5F\x53\x54\x52\x4F\x4B\x45\x57\x49\x44\x54\x48","\x28\x70\x78\x29","\x31","\x6C\x69\x6E\x65","\x73\x74\x72\x61\x69\x67\x68\x74","\x53\x54\x59\x4C\x45\x5F\x45\x44\x47\x45","\x65\x6E\x74\x69\x74\x79\x52\x65\x6C\x61\x74\x69\x6F\x6E","\x65\x6E\x74\x69\x74\x79\x52\x65\x6C\x61\x74\x69\x6F\x6E\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x68\x6F\x72\x69\x7A\x6F\x6E\x74\x61\x6C","\x53\x54\x59\x4C\x45\x5F\x45\x4C\x42\x4F\x57","\x65\x6C\x62\x6F\x77\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x76\x65\x72\x74\x69\x63\x61\x6C","\x6D\x61\x6E\x75\x61\x6C","\x73\x65\x67\x6D\x65\x6E\x74\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x61\x75\x74\x6F\x6D\x61\x74\x69\x63","\x6F\x72\x74\x68\x6F\x67\x6F\x6E\x61\x6C\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x6C\x69\x6E\x65\x65\x6E\x64","\x63\x6C\x61\x73\x73\x69\x63","\x53\x54\x59\x4C\x45\x5F\x45\x4E\x44\x41\x52\x52\x4F\x57","\x41\x52\x52\x4F\x57\x5F\x43\x4C\x41\x53\x53\x49\x43","\x6F\x70\x65\x6E\x41\x72\x72\x6F\x77","\x41\x52\x52\x4F\x57\x5F\x4F\x50\x45\x4E","\x62\x6C\x6F\x63\x6B","\x41\x52\x52\x4F\x57\x5F\x42\x4C\x4F\x43\x4B","\x6F\x76\x61\x6C","\x41\x52\x52\x4F\x57\x5F\x4F\x56\x41\x4C","\x64\x69\x61\x6D\x6F\x6E\x64","\x41\x52\x52\x4F\x57\x5F\x44\x49\x41\x4D\x4F\x4E\x44","\x64\x69\x61\x6D\x6F\x6E\x64\x54\x68\x69\x6E","\x41\x52\x52\x4F\x57\x5F\x44\x49\x41\x4D\x4F\x4E\x44\x5F\x54\x48\x49\x4E","\x6E\x6F\x6E\x65","\x4E\x4F\x4E\x45","\x74\x72\x61\x6E\x73\x70\x61\x72\x65\x6E\x74","\x65\x6E\x64\x46\x69\x6C\x6C","\x74\x6F\x67\x67\x6C\x65\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65\x73","\x61\x64\x64\x49\x74\x65\x6D","\x73\x69\x7A\x65","\x6C\x69\x6E\x65\x73\x74\x61\x72\x74","\x53\x54\x59\x4C\x45\x5F\x53\x54\x41\x52\x54\x41\x52\x52\x4F\x57","\x73\x74\x61\x72\x74\x46\x69\x6C\x6C","\x73\x70\x61\x63\x69\x6E\x67","\x65\x6E\x61\x62\x6C\x65\x64","\x73\x68\x61\x64\x6F\x77","\x61\x63\x74\x69\x6F\x6E\x73","\x73\x68\x6F\x77\x44\x69\x73\x61\x62\x6C\x65\x64","\x74\x6F\x70","\x30","\x72\x69\x67\x68\x74","\x62\x6F\x74\x74\x6F\x6D","\x6C\x65\x66\x74","\x67\x6C\x6F\x62\x61\x6C","\x70\x65\x72\x69\x6D\x65\x74\x65\x72","\x73\x6F\x75\x72\x63\x65\x53\x70\x61\x63\x69\x6E\x67","\x74\x61\x72\x67\x65\x74\x53\x70\x61\x63\x69\x6E\x67","\x66\x6F\x72\x6D\x61\x74","\x61\x64\x64\x4D\x65\x6E\x75\x49\x74\x65\x6D","\x74\x65\x78\x74","\x61\x64\x64\x53\x75\x62\x6D\x65\x6E\x75","\x2D","\x62\x6F\x6C\x64","\x69\x74\x61\x6C\x69\x63","\x75\x6E\x64\x65\x72\x6C\x69\x6E\x65","\x61\x64\x64\x4D\x65\x6E\x75\x49\x74\x65\x6D\x73","\x61\x6C\x69\x67\x6E\x6D\x65\x6E\x74","\x77\x6F\x72\x64\x57\x72\x61\x70","\x74\x65\x78\x74\x4F\x70\x61\x63\x69\x74\x79","\x28\x25\x29","\x31\x30\x30","\x68\x69\x64\x65","\x6C\x65\x66\x74\x41\x6C\x69\x67\x6E","\x53\x54\x59\x4C\x45\x5F\x41\x4C\x49\x47\x4E","\x41\x4C\x49\x47\x4E\x5F\x4C\x45\x46\x54","\x63\x65\x6E\x74\x65\x72","\x41\x4C\x49\x47\x4E\x5F\x43\x45\x4E\x54\x45\x52","\x72\x69\x67\x68\x74\x41\x6C\x69\x67\x6E","\x41\x4C\x49\x47\x4E\x5F\x52\x49\x47\x48\x54","\x74\x6F\x70\x41\x6C\x69\x67\x6E","\x53\x54\x59\x4C\x45\x5F\x56\x45\x52\x54\x49\x43\x41\x4C\x5F\x41\x4C\x49\x47\x4E","\x41\x4C\x49\x47\x4E\x5F\x54\x4F\x50","\x6D\x69\x64\x64\x6C\x65","\x41\x4C\x49\x47\x4E\x5F\x4D\x49\x44\x44\x4C\x45","\x62\x6F\x74\x74\x6F\x6D\x41\x6C\x69\x67\x6E","\x41\x4C\x49\x47\x4E\x5F\x42\x4F\x54\x54\x4F\x4D","\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x53\x54\x59\x4C\x45\x5F\x4C\x41\x42\x45\x4C\x5F\x50\x4F\x53\x49\x54\x49\x4F\x4E","\x53\x54\x59\x4C\x45\x5F\x56\x45\x52\x54\x49\x43\x41\x4C\x5F\x4C\x41\x42\x45\x4C\x5F\x50\x4F\x53\x49\x54\x49\x4F\x4E","\x64\x69\x72\x65\x63\x74\x69\x6F\x6E","\x66\x6C\x69\x70\x48","\x66\x6C\x69\x70\x56","\x74\x69\x6C\x74","\x72\x6F\x74\x61\x74\x69\x6F\x6E","\x61\x6C\x69\x67\x6E","\x61\x6C\x69\x67\x6E\x43\x65\x6C\x6C\x73","\x6C\x61\x79\x6F\x75\x74","\x68\x6F\x72\x69\x7A\x6F\x6E\x74\x61\x6C\x46\x6C\x6F\x77","\x65\x78\x65\x63\x75\x74\x65\x4C\x61\x79\x6F\x75\x74","\x76\x65\x72\x74\x69\x63\x61\x6C\x46\x6C\x6F\x77","\x6E\x61\x76\x69\x67\x61\x74\x69\x6F\x6E","\x68\x6F\x6D\x65","\x65\x78\x69\x74\x47\x72\x6F\x75\x70","\x65\x6E\x74\x65\x72\x47\x72\x6F\x75\x70","\x65\x78\x70\x61\x6E\x64","\x63\x6F\x6C\x6C\x61\x70\x73\x65","\x61\x72\x72\x61\x6E\x67\x65","\x74\x6F\x46\x72\x6F\x6E\x74","\x74\x6F\x42\x61\x63\x6B","\x67\x72\x6F\x75\x70","\x75\x6E\x67\x72\x6F\x75\x70","\x72\x65\x6D\x6F\x76\x65\x46\x72\x6F\x6D\x47\x72\x6F\x75\x70","\x76\x69\x65\x77","\x61\x63\x74\x75\x61\x6C\x53\x69\x7A\x65","\x25","\x7A\x6F\x6F\x6D\x54\x6F","\x7A\x6F\x6F\x6D\x49\x6E","\x7A\x6F\x6F\x6D\x4F\x75\x74","\x66\x69\x74\x57\x69\x6E\x64\x6F\x77","\x63\x75\x73\x74\x6F\x6D\x5A\x6F\x6F\x6D","\x66\x69\x74\x50\x61\x67\x65","\x66\x69\x74\x50\x61\x67\x65\x57\x69\x64\x74\x68","\x66\x69\x6C\x65","\x6E\x65\x77","\x6F\x70\x65\x6E","\x73\x61\x76\x65","\x73\x61\x76\x65\x41\x73","\x70\x75\x62\x6C\x69\x73\x68","\x76\x61\x72\x69\x61\x62\x6C\x65","\x69\x6D\x70\x6F\x72\x74","\x65\x78\x70\x6F\x72\x74","\x65\x64\x69\x74\x46\x69\x6C\x65","\x72\x65\x6E\x61\x6D\x65","\x70\x72\x69\x6E\x74","\x65\x64\x69\x74","\x75\x6E\x64\x6F","\x72\x65\x64\x6F","\x63\x75\x74","\x63\x6F\x70\x79","\x70\x61\x73\x74\x65","\x64\x65\x6C\x65\x74\x65","\x64\x75\x70\x6C\x69\x63\x61\x74\x65","\x73\x65\x6C\x65\x63\x74\x56\x65\x72\x74\x69\x63\x65\x73","\x73\x65\x6C\x65\x63\x74\x45\x64\x67\x65\x73","\x73\x65\x6C\x65\x63\x74\x41\x6C\x6C","\x68\x65\x6C\x70","\x61\x62\x6F\x75\x74","\x61\x64\x64\x4D\x65\x6E\x75","\x65\x78\x65\x63\x75\x74\x65","\x62\x65\x67\x69\x6E\x55\x70\x64\x61\x74\x65","\x67\x65\x74\x4D\x6F\x64\x65\x6C","\x73\x65\x74\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65\x73","\x65\x6E\x64\x55\x70\x64\x61\x74\x65","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C","\x67\x65\x74\x53\x74\x61\x74\x65","\x67\x65\x74\x56\x69\x65\x77","\x65\x6E\x74\x65\x72\x56\x61\x6C\x75\x65","\x20","\x70\x72\x6F\x6D\x70\x74","\x6C\x61\x62\x65\x6C","\x66\x75\x6E\x63\x74","\x74\x6F\x67\x67\x6C\x65\x41\x63\x74\x69\x6F\x6E","\x69\x73\x53\x65\x6C\x65\x63\x74\x65\x64","\x61\x64\x64\x43\x68\x65\x63\x6B\x6D\x61\x72\x6B","\x61\x64\x64\x53\x68\x6F\x72\x74\x63\x75\x74","\x73\x68\x6F\x72\x74\x63\x75\x74","\x73\x70\x61\x6E","\x63\x72\x65\x61\x74\x65\x45\x6C\x65\x6D\x65\x6E\x74","\x63\x6F\x6C\x6F\x72","\x67\x72\x61\x79","\x77\x72\x69\x74\x65","\x61\x70\x70\x65\x6E\x64\x43\x68\x69\x6C\x64","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x49\x6D\x61\x67\x65","\x75\x72\x6C\x28","\x2F\x63\x68\x65\x63\x6B\x6D\x61\x72\x6B\x2E\x67\x69\x66\x29","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x52\x65\x70\x65\x61\x74","\x6E\x6F\x2D\x72\x65\x70\x65\x61\x74","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x32\x70\x78\x20\x35\x30\x25","\x63\x72\x65\x61\x74\x65\x50\x6F\x70\x75\x70\x4D\x65\x6E\x75","\x73\x6D\x61\x72\x74\x53\x65\x70\x61\x72\x61\x74\x6F\x72\x73","\x69\x73\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x45\x6D\x70\x74\x79","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x6F\x75\x6E\x74","\x69\x73\x45\x64\x67\x65","\x73\x65\x74\x41\x73\x44\x65\x66\x61\x75\x6C\x74\x45\x64\x67\x65","\x67\x65\x74\x48\x61\x6E\x64\x6C\x65\x72","\x73\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73\x48\x61\x6E\x64\x6C\x65\x72","\x62\x65\x6E\x64\x73","\x67\x65\x74\x48\x61\x6E\x64\x6C\x65\x46\x6F\x72\x45\x76\x65\x6E\x74","\x72\x65\x6D\x6F\x76\x65\x57\x61\x79\x70\x6F\x69\x6E\x74","\x68\x61\x6E\x64\x6C\x65\x72","\x69\x6E\x64\x65\x78","\x61\x64\x64\x57\x61\x79\x70\x6F\x69\x6E\x74","\x67\x65\x74\x4C\x69\x6E\x6B\x46\x6F\x72\x43\x65\x6C\x6C","\x6F\x70\x65\x6E\x4C\x69\x6E\x6B","\x63\x72\x65\x61\x74\x65\x4D\x65\x6E\x75\x62\x61\x72","\x63\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x68\x69\x64\x65\x4D\x65\x6E\x75","\x61\x64\x64\x47\x65\x73\x74\x75\x72\x65\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x63\x75\x72\x72\x65\x6E\x74\x4D\x65\x6E\x75","\x61","\x68\x72\x65\x66","\x6A\x61\x76\x61\x73\x63\x72\x69\x70\x74\x3A\x76\x6F\x69\x64\x28\x30\x29\x3B","\x73\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65","\x67\x65\x49\x74\x65\x6D","\x61\x64\x64\x4D\x65\x6E\x75\x48\x61\x6E\x64\x6C\x65\x72","\x70\x61\x6E\x6E\x69\x6E\x67\x48\x61\x6E\x64\x6C\x65\x72","\x64\x69\x76","\x20\x67\x65\x4D\x65\x6E\x75\x62\x61\x72\x4D\x65\x6E\x75","\x61\x75\x74\x6F\x45\x78\x70\x61\x6E\x64","\x61\x70\x70\x6C\x79","\x64\x65\x73\x74\x72\x6F\x79","\x63\x75\x72\x72\x65\x6E\x74\x45\x6C\x74","\x6F\x66\x66\x73\x65\x74\x4C\x65\x66\x74","\x6F\x66\x66\x73\x65\x74\x57\x69\x64\x74\x68","\x70\x61\x67\x65\x2D\x73\x69\x64\x65\x62\x61\x72","\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74\x42\x79\x49\x64","\x6F\x66\x66\x73\x65\x74\x54\x6F\x70","\x6F\x66\x66\x73\x65\x74\x48\x65\x69\x67\x68\x74","\x70\x6F\x70\x75\x70","\x63\x6F\x6E\x73\x75\x6D\x65","\x6D\x6F\x75\x73\x65\x6D\x6F\x76\x65","\x61\x64\x64\x4C\x69\x73\x74\x65\x6E\x65\x72","\x6D\x6F\x75\x73\x65\x64\x6F\x77\x6E","\x63\x6C\x69\x63\x6B","\x63\x61\x6C\x6C","\x65\x78\x74\x65\x6E\x64","\x73\x65\x74\x45\x6E\x61\x62\x6C\x65\x64","\x73\x74\x61\x74\x65\x43\x68\x61\x6E\x67\x65\x64","\x66\x69\x72\x65\x45\x76\x65\x6E\x74"];Menus= function(_0xeee1x1){this[_0xe8e0[0]]= _0xeee1x1;this[_0xe8e0[1]]= new Object();this[_0xe8e0[2]](); new Image()[_0xe8e0[3]]= IMAGE_PATH+ _0xe8e0[4]};Menus[_0xe8e0[5]][_0xe8e0[2]]= function(){var _0xeee1x2=this[_0xe8e0[0]][_0xe8e0[7]][_0xe8e0[6]];this[_0xe8e0[30]](_0xe8e0[8], new Menu(mxUtils[_0xe8e0[29]](this,function(_0xeee1x3,_0xeee1x4){var _0xeee1x5=[_0xe8e0[9],_0xe8e0[10],_0xe8e0[11],_0xe8e0[12],_0xe8e0[13],_0xe8e0[14],_0xe8e0[15],_0xe8e0[16],_0xe8e0[17]];for(var _0xeee1x6=0;_0xeee1x6< _0xeee1x5[_0xe8e0[18]];_0xeee1x6++){var _0xeee1x7=this[_0xe8e0[20]](_0xeee1x3,_0xeee1x5[_0xeee1x6],[mxConstants[_0xe8e0[19]]],[_0xeee1x5[_0xeee1x6]],null,_0xeee1x4);_0xeee1x7[_0xe8e0[23]][_0xe8e0[22]][_0xe8e0[21]][_0xe8e0[8]]= _0xeee1x5[_0xeee1x6]};_0xeee1x3[_0xe8e0[24]](_0xeee1x4);this[_0xe8e0[28]](_0xeee1x3,mxResources[_0xe8e0[26]](_0xe8e0[25]),_0xe8e0[27],mxConstants.DEFAULT_FONTFAMILY,mxConstants.STYLE_FONTFAMILY,_0xeee1x4)})));this[_0xe8e0[30]](_0xe8e0[31], new Menu(mxUtils[_0xe8e0[29]](this,function(_0xeee1x3,_0xeee1x4){var _0xeee1x8=[6,8,9,10,11,12,14,18,24,36,48,72];for(var _0xeee1x6=0;_0xeee1x6< _0xeee1x8[_0xe8e0[18]];_0xeee1x6++){this[_0xe8e0[20]](_0xeee1x3,_0xeee1x8[_0xeee1x6],[mxConstants[_0xe8e0[32]]],[_0xeee1x8[_0xeee1x6]],null,_0xeee1x4)};_0xeee1x3[_0xe8e0[24]](_0xeee1x4);this[_0xe8e0[28]](_0xeee1x3,mxResources[_0xe8e0[26]](_0xe8e0[25]),_0xe8e0[33],_0xe8e0[34],mxConstants.STYLE_FONTSIZE,_0xeee1x4)})));this[_0xe8e0[30]](_0xe8e0[35], new Menu(mxUtils[_0xe8e0[29]](this,function(_0xeee1x3,_0xeee1x4){var _0xeee1x8=[1,2,3,4,8,12,16,24];for(var _0xeee1x6=0;_0xeee1x6< _0xeee1x8[_0xe8e0[18]];_0xeee1x6++){this[_0xe8e0[20]](_0xeee1x3,_0xeee1x8[_0xeee1x6]+ _0xe8e0[36],[mxConstants[_0xe8e0[37]]],[_0xeee1x8[_0xeee1x6]],null,_0xeee1x4)};_0xeee1x3[_0xe8e0[24]](_0xeee1x4);this[_0xe8e0[28]](_0xeee1x3,mxResources[_0xe8e0[26]](_0xe8e0[25]),_0xe8e0[38],_0xe8e0[39],mxConstants.STYLE_STROKEWIDTH,_0xeee1x4)})));this[_0xe8e0[30]](_0xe8e0[40], new Menu(mxUtils[_0xe8e0[29]](this,function(_0xeee1x3,_0xeee1x4){this[_0xe8e0[20]](_0xeee1x3,mxResources[_0xe8e0[26]](_0xe8e0[41]),[mxConstants[_0xe8e0[42]]],[null],null,_0xeee1x4);this[_0xe8e0[20]](_0xeee1x3,mxResources[_0xe8e0[26]](_0xe8e0[43]),[mxConstants[_0xe8e0[42]]],[_0xe8e0[44]],null,_0xeee1x4);_0xeee1x3[_0xe8e0[24]](_0xeee1x4);this[_0xe8e0[20]](_0xeee1x3,mxResources[_0xe8e0[26]](_0xe8e0[45]),[mxConstants[_0xe8e0[42]],mxConstants[_0xe8e0[46]]],[_0xe8e0[47],_0xe8e0[45]],null,_0xeee1x4);this[_0xe8e0[20]](_0xeee1x3,mxResources[_0xe8e0[26]](_0xe8e0[48]),[mxConstants[_0xe8e0[42]],mxConstants[_0xe8e0[46]]],[_0xe8e0[47],_0xe8e0[48]],null,_0xeee1x4);_0xeee1x3[_0xe8e0[24]](_0xeee1x4);this[_0xe8e0[20]](_0xeee1x3,mxResources[_0xe8e0[26]](_0xe8e0[49]),[mxConstants[_0xe8e0[42]]],[_0xe8e0[50]],null,_0xeee1x4);this[_0xe8e0[20]](_0xeee1x3,mxResources[_0xe8e0[26]](_0xe8e0[51]),[mxConstants[_0xe8e0[42]]],[_0xe8e0[52]],null,_0xeee1x4)})));this[_0xe8e0[30]](_0xe8e0[53], new Menu(mxUtils[_0xe8e0[29]](this,function(_0xeee1x3,_0xeee1x4){this[_0xe8e0[20]](_0xeee1x3,mxResources[_0xe8e0[26]](_0xe8e0[54]),[mxConstants[_0xe8e0[55]]],[mxConstants[_0xe8e0[56]]],null,_0xeee1x4);this[_0xe8e0[20]](_0xeee1x3,mxResources[_0xe8e0[26]](_0xe8e0[57]),[mxConstants[_0xe8e0[55]]],[mxConstants[_0xe8e0[58]]],null,_0xeee1x4);this[_0xe8e0[20]](_0xeee1x3,mxResources[_0xe8e0[26]](_0xe8e0[59]),[mxConstants[_0xe8e0[55]]],[mxConstants[_0xe8e0[60]]],null,_0xeee1x4);_0xeee1x3[_0xe8e0[24]](_0xeee1x4);this[_0xe8e0[20]](_0xeee1x3,mxResources[_0xe8e0[26]](_0xe8e0[61]),[mxConstants[_0xe8e0[55]]],[mxConstants[_0xe8e0[62]]],null,_0xeee1x4);this[_0xe8e0[20]](_0xeee1x3,mxResources[_0xe8e0[26]](_0xe8e0[63]),[mxConstants[_0xe8e0[55]]],[mxConstants[_0xe8e0[64]]],null,_0xeee1x4);this[_0xe8e0[20]](_0xeee1x3,mxResources[_0xe8e0[26]](_0xe8e0[65]),[mxConstants[_0xe8e0[55]]],[mxConstants[_0xe8e0[66]]],null,_0xeee1x4);_0xeee1x3[_0xe8e0[24]](_0xeee1x4);this[_0xe8e0[20]](_0xeee1x3,mxResources[_0xe8e0[26]](_0xe8e0[67]),[mxConstants[_0xe8e0[55]]],[mxConstants[_0xe8e0[68]]],null,_0xeee1x4);_0xeee1x3[_0xe8e0[24]](_0xeee1x4);_0xeee1x3[_0xe8e0[72]](mxResources[_0xe8e0[26]](_0xe8e0[69]),null,function(){_0xeee1x2[_0xe8e0[71]](_0xe8e0[70],true)},_0xeee1x4,null,true);_0xeee1x3[_0xe8e0[24]](_0xeee1x4);this[_0xe8e0[28]](_0xeee1x3,mxResources[_0xe8e0[26]](_0xe8e0[73]),_0xe8e0[38],mxConstants.DEFAULT_MARKERSIZE,mxConstants.STYLE_ENDSIZE,_0xeee1x4)})));this[_0xe8e0[30]](_0xe8e0[74], new Menu(mxUtils[_0xe8e0[29]](this,function(_0xeee1x3,_0xeee1x4){this[_0xe8e0[20]](_0xeee1x3,mxResources[_0xe8e0[26]](_0xe8e0[54]),[mxConstants[_0xe8e0[75]]],[mxConstants[_0xe8e0[56]]],null,_0xeee1x4);this[_0xe8e0[20]](_0xeee1x3,mxResources[_0xe8e0[26]](_0xe8e0[57]),[mxConstants[_0xe8e0[75]]],[mxConstants[_0xe8e0[58]]],null,_0xeee1x4);this[_0xe8e0[20]](_0xeee1x3,mxResources[_0xe8e0[26]](_0xe8e0[59]),[mxConstants[_0xe8e0[75]]],[mxConstants[_0xe8e0[60]]],null,_0xeee1x4);_0xeee1x3[_0xe8e0[24]](_0xeee1x4);this[_0xe8e0[20]](_0xeee1x3,mxResources[_0xe8e0[26]](_0xe8e0[61]),[mxConstants[_0xe8e0[75]]],[mxConstants[_0xe8e0[62]]],null,_0xeee1x4);this[_0xe8e0[20]](_0xeee1x3,mxResources[_0xe8e0[26]](_0xe8e0[63]),[mxConstants[_0xe8e0[75]]],[mxConstants[_0xe8e0[64]]],null,_0xeee1x4);this[_0xe8e0[20]](_0xeee1x3,mxResources[_0xe8e0[26]](_0xe8e0[65]),[mxConstants[_0xe8e0[75]]],[mxConstants[_0xe8e0[66]]],null,_0xeee1x4);_0xeee1x3[_0xe8e0[24]](_0xeee1x4);this[_0xe8e0[20]](_0xeee1x3,mxResources[_0xe8e0[26]](_0xe8e0[67]),[mxConstants[_0xe8e0[75]]],[mxConstants[_0xe8e0[68]]],null,_0xeee1x4);_0xeee1x3[_0xe8e0[24]](_0xeee1x4);_0xeee1x3[_0xe8e0[72]](mxResources[_0xe8e0[26]](_0xe8e0[69]),null,function(){_0xeee1x2[_0xe8e0[71]](_0xe8e0[76],true)},_0xeee1x4,null,true);_0xeee1x3[_0xe8e0[24]](_0xeee1x4);this[_0xe8e0[28]](_0xeee1x3,mxResources[_0xe8e0[26]](_0xe8e0[73]),_0xe8e0[38],mxConstants.DEFAULT_MARKERSIZE,mxConstants.STYLE_STARTSIZE,_0xeee1x4)})));this[_0xe8e0[30]](_0xe8e0[77], new Menu(mxUtils[_0xe8e0[29]](this,function(_0xeee1x3,_0xeee1x4){var _0xeee1x9=this[_0xe8e0[0]][_0xe8e0[80]][_0xe8e0[26]](_0xe8e0[79])[_0xe8e0[78]];var _0xeee1xa=this[_0xe8e0[26]](_0xe8e0[40])[_0xe8e0[78]];if(_0xeee1x9|| _0xeee1x3[_0xe8e0[81]]){this[_0xe8e0[28]](_0xeee1x3,mxResources[_0xe8e0[26]](_0xe8e0[82]),_0xe8e0[38],_0xe8e0[83],mxConstants.STYLE_SPACING_TOP,_0xeee1x4,_0xeee1x9);this[_0xe8e0[28]](_0xeee1x3,mxResources[_0xe8e0[26]](_0xe8e0[84]),_0xe8e0[38],_0xe8e0[83],mxConstants.STYLE_SPACING_RIGHT,_0xeee1x4,_0xeee1x9);this[_0xe8e0[28]](_0xeee1x3,mxResources[_0xe8e0[26]](_0xe8e0[85]),_0xe8e0[38],_0xe8e0[83],mxConstants.STYLE_SPACING_BOTTOM,_0xeee1x4,_0xeee1x9);this[_0xe8e0[28]](_0xeee1x3,mxResources[_0xe8e0[26]](_0xe8e0[86]),_0xe8e0[38],_0xe8e0[83],mxConstants.STYLE_SPACING_LEFT,_0xeee1x4,_0xeee1x9);_0xeee1x3[_0xe8e0[24]](_0xeee1x4);this[_0xe8e0[28]](_0xeee1x3,mxResources[_0xe8e0[26]](_0xe8e0[87]),_0xe8e0[38],_0xe8e0[83],mxConstants.STYLE_SPACING,_0xeee1x4,_0xeee1x9);this[_0xe8e0[28]](_0xeee1x3,mxResources[_0xe8e0[26]](_0xe8e0[88]),_0xe8e0[38],_0xe8e0[83],mxConstants.STYLE_PERIMETER_SPACING,_0xeee1x4,_0xeee1x9)};if(_0xeee1xa|| _0xeee1x3[_0xe8e0[81]]){_0xeee1x3[_0xe8e0[24]](_0xeee1x4);this[_0xe8e0[28]](_0xeee1x3,mxResources[_0xe8e0[26]](_0xe8e0[89]),_0xe8e0[38],_0xe8e0[83],mxConstants.STYLE_SOURCE_PERIMETER_SPACING,_0xeee1x4,_0xeee1xa);this[_0xe8e0[28]](_0xeee1x3,mxResources[_0xe8e0[26]](_0xe8e0[90]),_0xe8e0[38],_0xe8e0[83],mxConstants.STYLE_TARGET_PERIMETER_SPACING,_0xeee1x4,_0xeee1xa)}})));this[_0xe8e0[30]](_0xe8e0[91], new Menu(mxUtils[_0xe8e0[29]](this,function(_0xeee1x3,_0xeee1x4){this[_0xe8e0[92]](_0xeee1x3,_0xe8e0[21],_0xeee1x4)})));this[_0xe8e0[30]](_0xe8e0[93], new Menu(mxUtils[_0xe8e0[29]](this,function(_0xeee1x3,_0xeee1x4){var _0xeee1xb=this[_0xe8e0[26]](_0xe8e0[93])[_0xe8e0[78]];_0xeee1x3[_0xe8e0[24]](_0xeee1x4);this[_0xe8e0[94]](_0xe8e0[8],_0xeee1x3,_0xeee1x4);this[_0xe8e0[94]](_0xe8e0[31],_0xeee1x3,_0xeee1x4);this[_0xe8e0[99]](_0xeee1x3,[_0xe8e0[95],_0xe8e0[96],_0xe8e0[97],_0xe8e0[98],_0xe8e0[95]],_0xeee1x4);this[_0xe8e0[94]](_0xe8e0[100],_0xeee1x3,_0xeee1x4);this[_0xe8e0[92]](_0xeee1x3,_0xe8e0[101],_0xeee1x4);_0xeee1x3[_0xe8e0[24]](_0xeee1x4);this[_0xe8e0[28]](_0xeee1x3,mxResources[_0xe8e0[26]](_0xe8e0[102]),_0xe8e0[103],_0xe8e0[104],mxConstants.STYLE_TEXT_OPACITY,_0xeee1x4,_0xeee1xb);_0xeee1x3[_0xe8e0[72]](mxResources[_0xe8e0[26]](_0xe8e0[105]),null,function(){_0xeee1x2[_0xe8e0[71]](mxConstants.STYLE_NOLABEL,false)},_0xeee1x4,null,_0xeee1xb)})));this[_0xe8e0[30]](_0xe8e0[100], new Menu(mxUtils[_0xe8e0[29]](this,function(_0xeee1x3,_0xeee1x4){this[_0xe8e0[20]](_0xeee1x3,mxResources[_0xe8e0[26]](_0xe8e0[106]),[mxConstants[_0xe8e0[107]]],[mxConstants[_0xe8e0[108]]],null,_0xeee1x4);this[_0xe8e0[20]](_0xeee1x3,mxResources[_0xe8e0[26]](_0xe8e0[109]),[mxConstants[_0xe8e0[107]]],[mxConstants[_0xe8e0[110]]],null,_0xeee1x4);this[_0xe8e0[20]](_0xeee1x3,mxResources[_0xe8e0[26]](_0xe8e0[111]),[mxConstants[_0xe8e0[107]]],[mxConstants[_0xe8e0[112]]],null,_0xeee1x4);_0xeee1x3[_0xe8e0[24]](_0xeee1x4);this[_0xe8e0[20]](_0xeee1x3,mxResources[_0xe8e0[26]](_0xe8e0[113]),[mxConstants[_0xe8e0[114]]],[mxConstants[_0xe8e0[115]]],null,_0xeee1x4);this[_0xe8e0[20]](_0xeee1x3,mxResources[_0xe8e0[26]](_0xe8e0[116]),[mxConstants[_0xe8e0[114]]],[mxConstants[_0xe8e0[117]]],null,_0xeee1x4);this[_0xe8e0[20]](_0xeee1x3,mxResources[_0xe8e0[26]](_0xe8e0[118]),[mxConstants[_0xe8e0[114]]],[mxConstants[_0xe8e0[119]]],null,_0xeee1x4);_0xeee1x3[_0xe8e0[24]](_0xeee1x4);this[_0xe8e0[94]](_0xe8e0[120],_0xeee1x3,_0xeee1x4);this[_0xe8e0[94]](_0xe8e0[77],_0xeee1x3,_0xeee1x4);_0xeee1x3[_0xe8e0[24]](_0xeee1x4);var _0xeee1xb=this[_0xe8e0[26]](_0xe8e0[93])[_0xe8e0[78]];_0xeee1x3[_0xe8e0[72]](mxResources[_0xe8e0[26]](_0xe8e0[48]),null,function(){_0xeee1x2[_0xe8e0[71]](mxConstants.STYLE_HORIZONTAL,true)},_0xeee1x4,null,_0xeee1xb)})));this[_0xe8e0[30]](_0xe8e0[120], new Menu(mxUtils[_0xe8e0[29]](this,function(_0xeee1x3,_0xeee1x4){this[_0xe8e0[20]](_0xeee1x3,mxResources[_0xe8e0[26]](_0xe8e0[86]),[mxConstants[_0xe8e0[121]],mxConstants[_0xe8e0[107]]],[mxConstants[_0xe8e0[108]],mxConstants[_0xe8e0[112]]],null,_0xeee1x4);this[_0xe8e0[20]](_0xeee1x3,mxResources[_0xe8e0[26]](_0xe8e0[109]),[mxConstants[_0xe8e0[121]],mxConstants[_0xe8e0[107]]],[mxConstants[_0xe8e0[110]],mxConstants[_0xe8e0[110]]],null,_0xeee1x4);this[_0xe8e0[20]](_0xeee1x3,mxResources[_0xe8e0[26]](_0xe8e0[84]),[mxConstants[_0xe8e0[121]],mxConstants[_0xe8e0[107]]],[mxConstants[_0xe8e0[112]],mxConstants[_0xe8e0[108]]],null,_0xeee1x4);_0xeee1x3[_0xe8e0[24]](_0xeee1x4);this[_0xe8e0[20]](_0xeee1x3,mxResources[_0xe8e0[26]](_0xe8e0[82]),[mxConstants[_0xe8e0[122]],mxConstants[_0xe8e0[114]]],[mxConstants[_0xe8e0[115]],mxConstants[_0xe8e0[119]]],null,_0xeee1x4);this[_0xe8e0[20]](_0xeee1x3,mxResources[_0xe8e0[26]](_0xe8e0[116]),[mxConstants[_0xe8e0[122]],mxConstants[_0xe8e0[114]]],[mxConstants[_0xe8e0[117]],mxConstants[_0xe8e0[117]]],null,_0xeee1x4);this[_0xe8e0[20]](_0xeee1x3,mxResources[_0xe8e0[26]](_0xe8e0[85]),[mxConstants[_0xe8e0[122]],mxConstants[_0xe8e0[114]]],[mxConstants[_0xe8e0[119]],mxConstants[_0xe8e0[115]]],null,_0xeee1x4)})));this[_0xe8e0[30]](_0xe8e0[123], new Menu(mxUtils[_0xe8e0[29]](this,function(_0xeee1x3,_0xeee1x4){_0xeee1x3[_0xe8e0[72]](mxResources[_0xe8e0[26]](_0xe8e0[124]),null,function(){_0xeee1x2[_0xe8e0[71]](mxConstants.STYLE_FLIPH,false)},_0xeee1x4);_0xeee1x3[_0xe8e0[72]](mxResources[_0xe8e0[26]](_0xe8e0[125]),null,function(){_0xeee1x2[_0xe8e0[71]](mxConstants.STYLE_FLIPV,false)},_0xeee1x4);this[_0xe8e0[99]](_0xeee1x3,[_0xe8e0[95],_0xe8e0[126],_0xe8e0[127]],_0xeee1x4)})));this[_0xe8e0[30]](_0xe8e0[128], new Menu(mxUtils[_0xe8e0[29]](this,function(_0xeee1x3,_0xeee1x4){_0xeee1x3[_0xe8e0[72]](mxResources[_0xe8e0[26]](_0xe8e0[106]),null,function(){_0xeee1x2[_0xe8e0[129]](mxConstants.ALIGN_LEFT)},_0xeee1x4);_0xeee1x3[_0xe8e0[72]](mxResources[_0xe8e0[26]](_0xe8e0[109]),null,function(){_0xeee1x2[_0xe8e0[129]](mxConstants.ALIGN_CENTER)},_0xeee1x4);_0xeee1x3[_0xe8e0[72]](mxResources[_0xe8e0[26]](_0xe8e0[111]),null,function(){_0xeee1x2[_0xe8e0[129]](mxConstants.ALIGN_RIGHT)},_0xeee1x4);_0xeee1x3[_0xe8e0[24]](_0xeee1x4);_0xeee1x3[_0xe8e0[72]](mxResources[_0xe8e0[26]](_0xe8e0[113]),null,function(){_0xeee1x2[_0xe8e0[129]](mxConstants.ALIGN_TOP)},_0xeee1x4);_0xeee1x3[_0xe8e0[72]](mxResources[_0xe8e0[26]](_0xe8e0[116]),null,function(){_0xeee1x2[_0xe8e0[129]](mxConstants.ALIGN_MIDDLE)},_0xeee1x4);_0xeee1x3[_0xe8e0[72]](mxResources[_0xe8e0[26]](_0xe8e0[118]),null,function(){_0xeee1x2[_0xe8e0[129]](mxConstants.ALIGN_BOTTOM)},_0xeee1x4)})));this[_0xe8e0[30]](_0xe8e0[130], new Menu(mxUtils[_0xe8e0[29]](this,function(_0xeee1x3,_0xeee1x4){_0xeee1x3[_0xe8e0[72]](mxResources[_0xe8e0[26]](_0xe8e0[131]),null,mxUtils[_0xe8e0[29]](this,function(){var _0xeee1xc= new mxHierarchicalLayout(_0xeee1x2,mxConstants.DIRECTION_WEST);this[_0xe8e0[0]][_0xe8e0[132]](_0xeee1xc,true,true)}),_0xeee1x4);_0xeee1x3[_0xe8e0[72]](mxResources[_0xe8e0[26]](_0xe8e0[133]),null,mxUtils[_0xe8e0[29]](this,function(){var _0xeee1xc= new mxHierarchicalLayout(_0xeee1x2,mxConstants.DIRECTION_NORTH);this[_0xe8e0[0]][_0xe8e0[132]](_0xeee1xc,true,true)}),_0xeee1x4)})));this[_0xe8e0[30]](_0xe8e0[134], new Menu(mxUtils[_0xe8e0[29]](this,function(_0xeee1x3,_0xeee1x4){this[_0xe8e0[99]](_0xeee1x3,[_0xe8e0[135],_0xe8e0[95],_0xe8e0[136],_0xe8e0[137],_0xe8e0[95],_0xe8e0[138],_0xe8e0[139]],_0xeee1x4)})));this[_0xe8e0[30]](_0xe8e0[140], new Menu(mxUtils[_0xe8e0[29]](this,function(_0xeee1x3,_0xeee1x4){this[_0xe8e0[99]](_0xeee1x3,[_0xe8e0[141],_0xe8e0[142],_0xe8e0[95]],_0xeee1x4);this[_0xe8e0[94]](_0xe8e0[130],_0xeee1x3,_0xeee1x4);_0xeee1x3[_0xe8e0[24]](_0xeee1x4);this[_0xe8e0[99]](_0xeee1x3,[_0xe8e0[95],_0xe8e0[143],_0xe8e0[144],_0xe8e0[145]],_0xeee1x4)})));this[_0xe8e0[30]](_0xe8e0[146], new Menu(mxUtils[_0xe8e0[29]](this,function(_0xeee1x3,_0xeee1x4){this[_0xe8e0[99]](_0xeee1x3,[_0xe8e0[147]],_0xeee1x4);_0xeee1x3[_0xe8e0[24]]();var _0xeee1xd=[0.25,0.5,0.75,1,2,4];for(var _0xeee1x6=0;_0xeee1x6< _0xeee1xd[_0xe8e0[18]];_0xeee1x6++){(function(_0xeee1xe){_0xeee1x3[_0xe8e0[72]]((_0xeee1xe* 100)+ _0xe8e0[148],null,function(){_0xeee1x2[_0xe8e0[149]](_0xeee1xe)},_0xeee1x4)})(_0xeee1xd[_0xeee1x6])};this[_0xe8e0[99]](_0xeee1x3,[_0xe8e0[95],_0xe8e0[150],_0xe8e0[151],_0xe8e0[95],_0xe8e0[152],_0xe8e0[153],_0xe8e0[95],_0xe8e0[154],_0xe8e0[155]],_0xeee1x4)})));this[_0xe8e0[30]](_0xe8e0[156], new Menu(mxUtils[_0xe8e0[29]](this,function(_0xeee1x3,_0xeee1x4){this[_0xe8e0[99]](_0xeee1x3,[_0xe8e0[157],_0xe8e0[158],_0xe8e0[95],_0xe8e0[159],_0xe8e0[160],_0xe8e0[161],_0xe8e0[95],_0xe8e0[162],_0xe8e0[95],_0xe8e0[163],_0xe8e0[164],_0xe8e0[95],_0xe8e0[165],_0xe8e0[166],_0xe8e0[95],_0xe8e0[167]],_0xeee1x4)})));this[_0xe8e0[30]](_0xe8e0[168], new Menu(mxUtils[_0xe8e0[29]](this,function(_0xeee1x3,_0xeee1x4){this[_0xe8e0[99]](_0xeee1x3,[_0xe8e0[169],_0xe8e0[170],_0xe8e0[95],_0xe8e0[171],_0xe8e0[172],_0xe8e0[173],_0xe8e0[174],_0xe8e0[95],_0xe8e0[175],_0xe8e0[95],_0xe8e0[176],_0xe8e0[177],_0xe8e0[178]])})));this[_0xe8e0[30]](_0xe8e0[179], new Menu(mxUtils[_0xe8e0[29]](this,function(_0xeee1x3,_0xeee1x4){this[_0xe8e0[99]](_0xeee1x3,[_0xe8e0[179],_0xe8e0[95],_0xe8e0[180]])})))};Menus[_0xe8e0[5]][_0xe8e0[30]]= function(_0xeee1xf,_0xeee1x3){this[_0xe8e0[1]][_0xeee1xf]= _0xeee1x3};Menus[_0xe8e0[5]][_0xe8e0[26]]= function(_0xeee1xf){return this[_0xe8e0[1]][_0xeee1xf]};Menus[_0xe8e0[5]][_0xe8e0[94]]= function(_0xeee1xf,_0xeee1x3,_0xeee1x4){var _0xeee1xb=this[_0xe8e0[26]](_0xeee1xf)[_0xe8e0[78]];if(_0xeee1x3[_0xe8e0[81]]|| _0xeee1xb){var _0xeee1x10=_0xeee1x3[_0xe8e0[72]](mxResources[_0xe8e0[26]](_0xeee1xf),null,null,_0xeee1x4,null,_0xeee1xb);this[_0xe8e0[181]](_0xeee1xf,_0xeee1x3,_0xeee1x10)}};Menus[_0xe8e0[5]][_0xe8e0[181]]= function(_0xeee1xf,_0xeee1x11,_0xeee1x4){var _0xeee1x3=this[_0xe8e0[26]](_0xeee1xf);if(_0xeee1x3!= null&& (_0xeee1x11[_0xe8e0[81]]|| _0xeee1x3[_0xe8e0[78]])){this[_0xe8e0[26]](_0xeee1xf)[_0xe8e0[182]](_0xeee1x11,_0xeee1x4)}};Menus[_0xe8e0[5]][_0xe8e0[20]]= function(_0xeee1x3,_0xeee1x12,_0xeee1x13,_0xeee1x14,_0xeee1x15,_0xeee1x4){return _0xeee1x3[_0xe8e0[72]](_0xeee1x12,null,mxUtils[_0xe8e0[29]](this,function(){var _0xeee1x2=this[_0xe8e0[0]][_0xe8e0[7]][_0xe8e0[6]];_0xeee1x2[_0xe8e0[184]]()[_0xe8e0[183]]();try{for(var _0xeee1x6=0;_0xeee1x6< _0xeee1x13[_0xe8e0[18]];_0xeee1x6++){_0xeee1x2[_0xe8e0[185]](_0xeee1x13[_0xeee1x6],_0xeee1x14[_0xeee1x6])}}finally{_0xeee1x2[_0xe8e0[184]]()[_0xe8e0[186]]()}}),_0xeee1x4,_0xeee1x15)};Menus[_0xe8e0[5]][_0xe8e0[28]]= function(_0xeee1x3,_0xeee1x12,_0xeee1x16,_0xeee1x17,_0xeee1x18,_0xeee1x4,_0xeee1xb){return _0xeee1x3[_0xe8e0[72]](_0xeee1x12,null,mxUtils[_0xe8e0[29]](this,function(){var _0xeee1x2=this[_0xe8e0[0]][_0xe8e0[7]][_0xe8e0[6]];var _0xeee1x19=_0xeee1x17;var _0xeee1x1a=_0xeee1x2[_0xe8e0[189]]()[_0xe8e0[188]](_0xeee1x2[_0xe8e0[187]]());if(_0xeee1x1a!= null){_0xeee1x19= _0xeee1x1a[_0xe8e0[21]][_0xeee1x18]|| _0xeee1x19};_0xeee1x19= mxUtils[_0xe8e0[192]](mxResources[_0xe8e0[26]](_0xe8e0[190])+ ((_0xeee1x16[_0xe8e0[18]]> 0)?(_0xe8e0[191]+ _0xeee1x16):_0xe8e0[27]),_0xeee1x19);if(_0xeee1x19!= null&& _0xeee1x19[_0xe8e0[18]]> 0){_0xeee1x2[_0xe8e0[185]](_0xeee1x18,_0xeee1x19)}}),_0xeee1x4,null,_0xeee1xb)};Menus[_0xe8e0[5]][_0xe8e0[92]]= function(_0xeee1x3,_0xeee1x18,_0xeee1x4){var _0xeee1x1b=this[_0xe8e0[0]][_0xe8e0[80]][_0xe8e0[26]](_0xeee1x18);if(_0xeee1x1b!= null&& (_0xeee1x3[_0xe8e0[81]]|| _0xeee1x1b[_0xe8e0[78]])){var _0xeee1x1c=_0xeee1x3[_0xe8e0[72]](_0xeee1x1b[_0xe8e0[193]],null,_0xeee1x1b[_0xe8e0[194]],_0xeee1x4,null,_0xeee1x1b[_0xe8e0[78]]);if(_0xeee1x1b[_0xe8e0[195]]&& _0xeee1x1b[_0xe8e0[196]]()){this[_0xe8e0[197]](_0xeee1x1c)};this[_0xe8e0[198]](_0xeee1x1c,_0xeee1x1b);return _0xeee1x1c};return null};Menus[_0xe8e0[5]][_0xe8e0[198]]= function(_0xeee1x1c,_0xeee1x1b){if(_0xeee1x1b[_0xe8e0[199]]!= null){var _0xeee1x1d=_0xeee1x1c[_0xe8e0[23]][_0xe8e0[22]][_0xe8e0[22]];var _0xeee1x1e=document[_0xe8e0[201]](_0xe8e0[200]);_0xeee1x1e[_0xe8e0[21]][_0xe8e0[202]]= _0xe8e0[203];mxUtils[_0xe8e0[204]](_0xeee1x1e,_0xeee1x1b[_0xe8e0[199]]);_0xeee1x1d[_0xe8e0[205]](_0xeee1x1e)}};Menus[_0xe8e0[5]][_0xe8e0[197]]= function(_0xeee1x1c){var _0xeee1x1d=_0xeee1x1c[_0xe8e0[23]][_0xe8e0[22]];_0xeee1x1d[_0xe8e0[21]][_0xe8e0[206]]= _0xe8e0[207]+ IMAGE_PATH+ _0xe8e0[208];_0xeee1x1d[_0xe8e0[21]][_0xe8e0[209]]= _0xe8e0[210];_0xeee1x1d[_0xe8e0[21]][_0xe8e0[211]]= _0xe8e0[212]};Menus[_0xe8e0[5]][_0xe8e0[99]]= function(_0xeee1x3,_0xeee1x13,_0xeee1x4){for(var _0xeee1x6=0;_0xeee1x6< _0xeee1x13[_0xe8e0[18]];_0xeee1x6++){if(_0xeee1x13[_0xeee1x6]== _0xe8e0[95]){_0xeee1x3[_0xe8e0[24]](_0xeee1x4)}else {this[_0xe8e0[92]](_0xeee1x3,_0xeee1x13[_0xeee1x6],_0xeee1x4)}}};Menus[_0xe8e0[5]][_0xe8e0[213]]= function(_0xeee1x3,_0xeee1x1f,_0xeee1x20){var _0xeee1x2=this[_0xe8e0[0]][_0xe8e0[7]][_0xe8e0[6]];_0xeee1x3[_0xe8e0[214]]= true;if(_0xeee1x2[_0xe8e0[215]]()){this[_0xe8e0[99]](_0xeee1x3,[_0xe8e0[169],_0xe8e0[170],_0xe8e0[95],_0xe8e0[173],_0xe8e0[95]])}else {this[_0xe8e0[99]](_0xeee1x3,[_0xe8e0[174],_0xe8e0[95],_0xe8e0[171],_0xe8e0[172],_0xe8e0[95],_0xe8e0[175]]);if(_0xeee1x2[_0xe8e0[216]]()== 1&& _0xeee1x2[_0xe8e0[184]]()[_0xe8e0[217]](_0xeee1x2[_0xe8e0[187]]())){this[_0xe8e0[99]](_0xeee1x3,[_0xe8e0[218]])};_0xeee1x3[_0xe8e0[24]]()};if(_0xeee1x2[_0xe8e0[216]]()> 0){this[_0xe8e0[99]](_0xeee1x3,[_0xe8e0[141],_0xe8e0[142],_0xe8e0[95]]);if(_0xeee1x2[_0xe8e0[184]]()[_0xe8e0[217]](_0xeee1x2[_0xe8e0[187]]())){var _0xeee1x21=false;var _0xeee1x1f=_0xeee1x2[_0xe8e0[187]]();if(_0xeee1x1f!= null&& _0xeee1x2[_0xe8e0[184]]()[_0xe8e0[217]](_0xeee1x1f)){var _0xeee1x22=_0xeee1x2[_0xe8e0[220]][_0xe8e0[219]](_0xeee1x1f);if(_0xeee1x22 instanceof mxEdgeHandler&& _0xeee1x22[_0xe8e0[221]]!= null&& _0xeee1x22[_0xe8e0[221]][_0xe8e0[18]]> 2){var _0xeee1x23=_0xeee1x22[_0xe8e0[222]]( new mxMouseEvent(_0xeee1x20));var _0xeee1x24=this[_0xe8e0[0]][_0xe8e0[80]][_0xe8e0[26]](_0xe8e0[223]);_0xeee1x24[_0xe8e0[224]]= _0xeee1x22;_0xeee1x24[_0xe8e0[225]]= _0xeee1x23;_0xeee1x21= _0xeee1x23> 0&& _0xeee1x23< _0xeee1x22[_0xe8e0[221]][_0xe8e0[18]]}};this[_0xe8e0[99]](_0xeee1x3,[_0xe8e0[95],(_0xeee1x21)?_0xe8e0[223]:_0xe8e0[226]])}else {if(_0xeee1x2[_0xe8e0[216]]()> 1){_0xeee1x3[_0xe8e0[24]]();this[_0xe8e0[99]](_0xeee1x3,[_0xe8e0[143]])}};_0xeee1x3[_0xe8e0[24]]();if(_0xeee1x2[_0xe8e0[216]]()== 1){var _0xeee1x25=_0xeee1x2[_0xe8e0[227]](_0xeee1x2[_0xe8e0[187]]());if(_0xeee1x25!= null){this[_0xe8e0[99]](_0xeee1x3,[_0xe8e0[228]])}}}else {this[_0xe8e0[99]](_0xeee1x3,[_0xe8e0[95],_0xe8e0[176],_0xe8e0[177],_0xe8e0[95],_0xe8e0[178]])}};Menus[_0xe8e0[5]][_0xe8e0[229]]= function(_0xeee1x26){var _0xeee1x27= new Menubar(this[_0xe8e0[0]],_0xeee1x26);var _0xeee1x28=[_0xe8e0[156],_0xe8e0[168],_0xe8e0[146],_0xe8e0[91],_0xe8e0[93],_0xe8e0[140]];for(var _0xeee1x6=0;_0xeee1x6< _0xeee1x28[_0xe8e0[18]];_0xeee1x6++){_0xeee1x27[_0xe8e0[181]](mxResources[_0xe8e0[26]](_0xeee1x28[_0xeee1x6]),this[_0xe8e0[26]](_0xeee1x28[_0xeee1x6])[_0xe8e0[194]])};return _0xeee1x27};function Menubar(_0xeee1x1,_0xeee1x26){this[_0xe8e0[0]]= _0xeee1x1;this[_0xe8e0[230]]= _0xeee1x26;mxEvent[_0xe8e0[232]](document,mxUtils[_0xe8e0[29]](this,function(_0xeee1x20){this[_0xe8e0[231]]()}))}Menubar[_0xe8e0[5]][_0xe8e0[231]]= function(){if(this[_0xe8e0[233]]!= null){this[_0xe8e0[233]][_0xe8e0[231]]()}};Menubar[_0xe8e0[5]][_0xe8e0[181]]= function(_0xeee1x12,_0xeee1x2a){var _0xeee1x2b=document[_0xe8e0[201]](_0xe8e0[234]);_0xeee1x2b[_0xe8e0[237]](_0xe8e0[235],_0xe8e0[236]);_0xeee1x2b[_0xe8e0[238]]= _0xe8e0[239];mxUtils[_0xe8e0[204]](_0xeee1x2b,_0xeee1x12);this[_0xe8e0[240]](_0xeee1x2b,_0xeee1x2a);this[_0xe8e0[230]][_0xe8e0[205]](_0xeee1x2b);return _0xeee1x2b};Menubar[_0xe8e0[5]][_0xe8e0[240]]= function(_0xeee1x2b,_0xeee1x2a){if(_0xeee1x2a!= null){var _0xeee1x2c=true;var _0xeee1x2d=mxUtils[_0xe8e0[29]](this,function(_0xeee1x20){if(_0xeee1x2c&& _0xeee1x2b[_0xe8e0[78]]== null|| _0xeee1x2b[_0xe8e0[78]]){this[_0xe8e0[0]][_0xe8e0[7]][_0xe8e0[6]][_0xe8e0[241]][_0xe8e0[231]]();var _0xeee1x3= new mxPopupMenu(_0xeee1x2a);_0xeee1x3[_0xe8e0[242]][_0xe8e0[238]]+= _0xe8e0[243];_0xeee1x3[_0xe8e0[214]]= true;_0xeee1x3[_0xe8e0[81]]= true;_0xeee1x3[_0xe8e0[244]]= true;_0xeee1x3[_0xe8e0[231]]= mxUtils[_0xe8e0[29]](this,function(){mxPopupMenu[_0xe8e0[5]][_0xe8e0[231]][_0xe8e0[245]](_0xeee1x3,arguments);_0xeee1x3[_0xe8e0[246]]();this[_0xe8e0[233]]= null;this[_0xe8e0[247]]= null});var _0xeee1x2e=_0xeee1x2b[_0xe8e0[248]]+ document[_0xe8e0[251]](_0xe8e0[250])[_0xe8e0[249]]+ 22;var _0xeee1x2f=_0xeee1x2b[_0xe8e0[252]]+ _0xeee1x2b[_0xe8e0[253]]+ 140;_0xeee1x3[_0xe8e0[254]](_0xeee1x2e,_0xeee1x2f,null,_0xeee1x20);this[_0xe8e0[233]]= _0xeee1x3;this[_0xe8e0[247]]= _0xeee1x2b};_0xeee1x2c= true;mxEvent[_0xe8e0[255]](_0xeee1x20)});mxEvent[_0xe8e0[257]](_0xeee1x2b,_0xe8e0[256],mxUtils[_0xe8e0[29]](this,function(_0xeee1x20){if(this[_0xe8e0[233]]!= null&& this[_0xe8e0[247]]!= _0xeee1x2b){this[_0xe8e0[231]]();_0xeee1x2d(_0xeee1x20)}}));mxEvent[_0xe8e0[257]](_0xeee1x2b,_0xe8e0[258],mxUtils[_0xe8e0[29]](this,function(){_0xeee1x2c= this[_0xe8e0[247]]!= _0xeee1x2b}));mxEvent[_0xe8e0[257]](_0xeee1x2b,_0xe8e0[259],_0xeee1x2d)}};function Menu(_0xeee1x2a,_0xeee1xb){mxEventSource[_0xe8e0[260]](this);this[_0xe8e0[194]]= _0xeee1x2a;this[_0xe8e0[78]]= (_0xeee1xb!= null)?_0xeee1xb:true}mxUtils[_0xe8e0[261]](Menu,mxEventSource);Menu[_0xe8e0[5]][_0xe8e0[262]]= function(_0xeee1x19){if(this[_0xe8e0[78]]!= _0xeee1x19){this[_0xe8e0[78]]= _0xeee1x19;this[_0xe8e0[264]]( new mxEventObject(_0xe8e0[263]))}};Menu[_0xe8e0[5]][_0xe8e0[182]]= function(_0xeee1x3,_0xeee1x4){this[_0xe8e0[194]](_0xeee1x3,_0xeee1x4)} \ No newline at end of file diff --git a/public/assets/plugins/jscripty/js/Shapes.js b/public/assets/plugins/jscripty/js/Shapes.js index 42e13ca..3db09d0 100644 --- a/public/assets/plugins/jscripty/js/Shapes.js +++ b/public/assets/plugins/jscripty/js/Shapes.js @@ -1,1234 +1 @@ -/** - * $Id: Shapes.js,v 1.13 2013-02-02 06:44:30 gaudenz Exp $ - * Copyright (c) 2006-2012, JGraph Ltd - */ - -/** - * Registers shapes. - */ -(function() -{ - // Cube Shape, supports size style - function CubeShape() { }; - CubeShape.prototype = new mxCylinder(); - CubeShape.prototype.constructor = CubeShape; - CubeShape.prototype.size = 20; - CubeShape.prototype.redrawPath = function(path, x, y, w, h, isForeground) - { - var s = Math.min(w, Math.min(h, mxUtils.getValue(this.style, 'size', this.size))); - - if (isForeground) - { - path.moveTo(s, h); - path.lineTo(s, s); - path.lineTo(0, 0); - path.moveTo(s, s); - path.lineTo(w, s); - path.end(); - } - else - { - path.moveTo(0, 0); - path.lineTo(w - s, 0); - path.lineTo(w, s); - path.lineTo(w, h); - path.lineTo(s, h); - path.lineTo(0, h - s); - path.lineTo(0, 0); - path.close(); - path.end(); - } - }; - - mxCellRenderer.prototype.defaultShapes['cube'] = CubeShape; - - // Note Shape, supports size style - function NoteShape() { }; - NoteShape.prototype = new mxCylinder(); - NoteShape.prototype.constructor = NoteShape; - NoteShape.prototype.size = 30; - NoteShape.prototype.redrawPath = function(path, x, y, w, h, isForeground) - { - var s = Math.min(w, Math.min(h, mxUtils.getValue(this.style, 'size', this.size))); - - if (isForeground) - { - path.moveTo(w - s, 0); - path.lineTo(w - s, s); - path.lineTo(w, s); - path.end(); - } - else - { - path.moveTo(0, 0); - path.lineTo(w - s, 0); - path.lineTo(w, s); - path.lineTo(w, h); - path.lineTo(0, h); - path.lineTo(0, 0); - path.close(); - path.end(); - } - }; - - mxCellRenderer.prototype.defaultShapes['note'] = NoteShape; - - // Folder Shape, supports tabWidth, tabHeight styles - function FolderShape() { }; - FolderShape.prototype = new mxCylinder(); - FolderShape.prototype.constructor = FolderShape; - FolderShape.prototype.tabWidth = 60; - FolderShape.prototype.tabHeight = 20; - FolderShape.prototype.tabPosition = 'right'; - FolderShape.prototype.redrawPath = function(path, x, y, w, h, isForeground) - { - var tw = mxUtils.getValue(this.style, 'tabWidth', this.tabWidth); - var th = mxUtils.getValue(this.style, 'tabHeight', this.tabHeight); - var tp = mxUtils.getValue(this.style, 'tabPosition', this.tabPosition); - var dx = Math.min(w, tw); - var dy = Math.min(h, th); - - if (isForeground) - { - if (tp == 'left') - { - path.moveTo(0, dy); - path.lineTo(dx, dy); - } - // Right is default - else - { - path.moveTo(w - dx, dy); - path.lineTo(w, dy); - } - - path.end(); - } - else - { - if (tp == 'left') - { - path.moveTo(0, 0); - path.lineTo(dx, 0); - path.lineTo(dx, dy); - path.lineTo(w, dy); - } - // Right is default - else - { - path.moveTo(0, dy); - path.lineTo(w - dx, dy); - path.lineTo(w - dx, 0); - path.lineTo(w, 0); - } - - path.lineTo(w, h); - path.lineTo(0, h); - path.lineTo(0, dy); - path.close(); - path.end(); - } - }; - - mxCellRenderer.prototype.defaultShapes['folder'] = FolderShape; - - // Card Shape, supports size style - function CardShape() { }; - CardShape.prototype = new mxCylinder(); - CardShape.prototype.constructor = CardShape; - CardShape.prototype.size = 30; - CardShape.prototype.redrawPath = function(path, x, y, w, h, isForeground) - { - var s = Math.min(w, Math.min(h, mxUtils.getValue(this.style, 'size', this.size))); - - if (!isForeground) - { - path.moveTo(s, 0); - path.lineTo(w, 0); - path.lineTo(w, h); - path.lineTo(0, h); - path.lineTo(0, s); - path.lineTo(s, 0); - path.close(); - path.end(); - } - }; - - mxCellRenderer.prototype.defaultShapes['card'] = CardShape; - - // Tape Shape, supports size style - function TapeShape() { }; - TapeShape.prototype = new mxCylinder(); - TapeShape.prototype.constructor = TapeShape; - TapeShape.prototype.size = 0.4; - TapeShape.prototype.redrawPath = function(path, x, y, w, h, isForeground) - { - var s = mxUtils.getValue(this.style, 'size', this.size); - var dy = h * s; - var fy = 1.4; - - if (!isForeground) - { - path.moveTo(0, dy / 2); - path.quadTo(w / 4, dy * fy, w / 2, dy / 2); - path.quadTo(w * 3 / 4, dy * (1 - fy), w, dy / 2); - path.lineTo(w, h - dy / 2); - path.quadTo(w * 3 / 4, h - dy * fy, w / 2, h - dy / 2); - path.quadTo(w / 4, h - dy * (1 - fy), 0, h - dy / 2); - path.lineTo(0, dy / 2); - path.close(); - path.end(); - } - }; - - mxCellRenderer.prototype.defaultShapes['tape'] = TapeShape; - - // Tape Shape, supports size style - function StepShape() { }; - StepShape.prototype = new mxCylinder(); - StepShape.prototype.constructor = StepShape; - StepShape.prototype.size = 0.2; - StepShape.prototype.redrawPath = function(path, x, y, w, h, isForeground) - { - var s = w * mxUtils.getValue(this.style, 'size', this.size); - - if (!isForeground) - { - path.moveTo(0, 0); - path.lineTo(w - s, 0); - path.lineTo(w, h / 2); - path.lineTo(w - s, h); - path.lineTo(0, h); - path.lineTo(s, h / 2); - path.close(); - path.end(); - } - }; - - mxCellRenderer.prototype.defaultShapes['step'] = StepShape; - - // Plus Shape - function PlusShape() - { - mxRectangleShape.call(this); - }; - mxUtils.extend(PlusShape, mxRectangleShape); - PlusShape.prototype.isHtmlAllowed = function() - { - return false; - }; - PlusShape.prototype.paintForeground = function(c, x, y, w, h) - { - var border = Math.min(w / 5, h / 5) + 1; - - c.begin(); - c.moveTo(x + w / 2, y + border); - c.lineTo(x + w / 2, y + h - border); - c.moveTo(x + border, y + h / 2); - c.lineTo(x + w - border, y + h / 2); - c.end(); - c.stroke(); - mxRectangleShape.prototype.paintForeground.apply(this, arguments); - }; - - mxCellRenderer.prototype.defaultShapes['plus'] = PlusShape; - - // CompositeShape - function ExtendedShape() - { - mxRectangleShape.call(this); - }; - mxUtils.extend(ExtendedShape, mxRectangleShape); - ExtendedShape.prototype.isHtmlAllowed = function() - { - return false; - }; - ExtendedShape.prototype.paintForeground = function(c, x, y, w, h) - { - if (this.style != null) - { - if (this.style['double'] == 1) - { - var inset = Math.max(2, this.strokewidth + 1); - - mxRectangleShape.prototype.paintBackground.call(this, c, x + inset, y + inset, w - 2 * inset, h - 2 * inset); - mxRectangleShape.prototype.paintForeground.apply(this, arguments); - - x += inset; - y += inset; - w -= 2 * inset; - h -= 2 * inset; - } - - c.setDashed(false); - - // Draws the symbols defined in the style. The symbols are - // numbered from 1...n. Possible postfixes are align, - // verticalAlign, spacing, arcSpacing, width, height - var counter = 0; - var shape = null; - - do - { - shape = mxCellRenderer.prototype.defaultShapes[this.style['symbol' + counter]]; - - if (shape != null) - { - var align = this.style['symbol' + counter + 'Align']; - var valign = this.style['symbol' + counter + 'VerticalAlign']; - var width = this.style['symbol' + counter + 'Width']; - var height = this.style['symbol' + counter + 'Height']; - var spacing = this.style['symbol' + counter + 'Spacing'] || 0; - var arcspacing = this.style['symbol' + counter + 'ArcSpacing']; - - if (arcspacing != null) - { - spacing += this.getArcSize(w + this.strokewidth, h + this.strokewidth) * arcspacing; - } - - var x2 = x; - var y2 = y; - - if (align == mxConstants.ALIGN_CENTER) - { - x2 += (w - width) / 2; - } - else if (align == mxConstants.ALIGN_RIGHT) - { - x2 += w - width - spacing; - } - else - { - x2 += spacing; - } - - if (valign == mxConstants.ALIGN_MIDDLE) - { - y2 += (h - height) / 2; - } - else if (valign == mxConstants.ALIGN_BOTTOM) - { - y2 += h - height - spacing; - } - else - { - y2 += spacing; - } - - c.save(); - - // Small hack to pass style along into subshape - var tmp = new shape(); - // TODO: Clone style and override settings (eg. strokewidth) - tmp.style = this.style; - shape.prototype.paintVertexShape.call(tmp, c, x2, y2, width, height); - c.restore(); - } - - counter++; - } - while (shape != null); - } - }; - - mxCellRenderer.prototype.defaultShapes['ext'] = ExtendedShape; - - // Tape Shape, supports size style - function MessageShape() { }; - MessageShape.prototype = new mxCylinder(); - MessageShape.prototype.constructor = MessageShape; - MessageShape.prototype.redrawPath = function(path, x, y, w, h, isForeground) - { - if (isForeground) - { - path.moveTo(0, 0); - path.lineTo(w / 2, h / 2); - path.lineTo(w, 0); - path.end(); - } - else - { - path.moveTo(0, 0); - path.lineTo(w, 0); - path.lineTo(w, h); - path.lineTo(0, h); - path.close(); - } - }; - - mxCellRenderer.prototype.defaultShapes['message'] = MessageShape; - - // New Actor Shape - function UmlActorShape() { }; - UmlActorShape.prototype = new mxCylinder(); - UmlActorShape.prototype.constructor = UmlActorShape; - UmlActorShape.prototype.addPipe = true; - UmlActorShape.prototype.redrawPath = function(path, x, y, w, h, isForeground) - { - var width = w / 3; - var height = h / 4; - - if (!isForeground) - { - path.moveTo(w / 2, height); - path.curveTo(w / 2 - width, height, w / 2 - width, 0, w / 2, 0); - path.curveTo(w / 2 + width, 0, w / 2 + width, height, w / 2, height); - path.close(); - - path.moveTo(w / 2, height); - path.lineTo(w / 2, 2 * h / 3); - - // Arms - path.moveTo(w / 2, h / 3); - path.lineTo(0, h / 3); - path.moveTo(w / 2, h / 3); - path.lineTo(w, h / 3); - - // Legs - path.moveTo(w / 2, 2 * h / 3); - path.lineTo(0, h); - path.moveTo(w / 2, 2 * h / 3); - path.lineTo(w, h); - path.end(); - } - }; - - // Replaces existing actor shape - mxCellRenderer.prototype.defaultShapes['umlActor'] = UmlActorShape; - - // New Actor Shape - function LollipopShape() { }; - LollipopShape.prototype = new mxCylinder(); - LollipopShape.prototype.constructor = LollipopShape; - LollipopShape.prototype.size = 10; - LollipopShape.prototype.addPipe = true; - LollipopShape.prototype.redrawPath = function(path, x, y, w, h, isForeground) - { - var ss = mxUtils.getValue(this.style, 'size', this.size); - var width = ss * 2 / 3; - var height = ss; - - if (!isForeground) - { - path.moveTo(w / 2, height); - path.curveTo(w / 2 - width, height, w / 2 - width, 0, w / 2, 0); - path.curveTo(w / 2 + width, 0, w / 2 + width, height, w / 2, height); - path.close(); - - path.moveTo(w / 2, height); - path.lineTo(w / 2, h); - path.end(); - } - }; - - // Replaces existing actor shape - mxCellRenderer.prototype.defaultShapes['lollipop'] = LollipopShape; - - // Folder Shape, supports tabWidth, tabHeight styles - function ComponentShape() { }; - ComponentShape.prototype = new mxCylinder(); - ComponentShape.prototype.constructor = ComponentShape; - ComponentShape.prototype.jettyWidth = 32; - ComponentShape.prototype.jettyHeight = 12; - ComponentShape.prototype.redrawPath = function(path, x, y, w, h, isForeground) - { - var dx = mxUtils.getValue(this.style, 'jettyWidth', this.jettyWidth); - var dy = mxUtils.getValue(this.style, 'jettyHeight', this.jettyHeight); - var x0 = dx / 2; - var x1 = x0 + dx / 2; - var y0 = 0.3 * h - dy / 2; - var y1 = 0.7 * h - dy / 2; - - if (isForeground) - { - path.moveTo(x0, y0); - path.lineTo(x1, y0); - path.lineTo(x1, y0 + dy); - path.lineTo(x0, y0 + dy); - path.moveTo(x0, y1); - path.lineTo(x1, y1); - path.lineTo(x1, y1 + dy); - path.lineTo(x0, y1 + dy); - path.end(); - } - else - { - path.moveTo(x0, 0); - path.lineTo(w, 0); - path.lineTo(w, h); - path.lineTo(x0, h); - path.lineTo(x0, y1 + dy); - path.lineTo(0, y1 + dy); - path.lineTo(0, y1); - path.lineTo(x0, y1); - path.lineTo(x0, y0 + dy); - path.lineTo(0, y0 + dy); - path.lineTo(0, y0); - path.lineTo(x0, y0); - path.close(); - path.end(); - } - }; - - mxCellRenderer.prototype.defaultShapes['component'] = ComponentShape; - - // State Shapes derives from double ellipse - function StateShape() { }; - StateShape.prototype = new mxDoubleEllipse(); - StateShape.prototype.constructor = StateShape; - StateShape.prototype.outerStroke = true; - StateShape.prototype.paintVertexShape = function(c, x, y, w, h) - { - var inset = Math.min(4, Math.min(w / 5, h / 5)); - - if (w > 0 && h > 0) - { - c.ellipse(x + inset, y + inset, w - 2 * inset, h - 2 * inset); - c.fillAndStroke(); - } - - c.setShadow(false); - - if (this.outerStroke) - { - c.ellipse(x, y, w, h); - c.stroke(); - } - }; - - mxCellRenderer.prototype.defaultShapes['endState'] = StateShape; - - function StartStateShape() { }; - StartStateShape.prototype = new StateShape(); - StartStateShape.prototype.constructor = StartStateShape; - StartStateShape.prototype.outerStroke = false; - - mxCellRenderer.prototype.defaultShapes['startState'] = StartStateShape; - - // Image export for state shapes - var imageExportInitShapes = mxImageExport.prototype.initShapes; - mxImageExport.prototype.initShapes = function() - { - imageExportInitShapes.apply(this, arguments); - - function createStateShape(outerStroke) - { - return { - drawShape: function(canvas, state, bounds, background) - { - var x = bounds.x; - var y = bounds.y; - var w = bounds.width; - var h = bounds.height; - - if (background) - { - var inset = Math.min(4, Math.min(w / 5, h / 5)); - x += inset; - y += inset; - w -= 2 * inset; - h -= 2 * inset; - - if (w > 0 && h > 0) - { - canvas.ellipse(x, y, w, h); - } - - return true; - } - else - { - canvas.fillAndStroke(); - - if (outerStroke) - { - canvas.ellipse(x, y, w, h); - canvas.stroke(); - } - } - } - }; - }; - - this.shapes['endState'] = createStateShape(true); - this.shapes['startState'] = createStateShape(false); - }; - - // Defines custom edge shape - function LinkShape() - { - mxArrow.call(this); - }; - mxUtils.extend(LinkShape, mxArrow); - LinkShape.prototype.paintEdgeShape = function(c, pts) - { - var width = 10; - - // Base vector (between end points) - var p0 = pts[0]; - var pe = pts[pts.length - 1]; - - var dx = pe.x - p0.x; - var dy = pe.y - p0.y; - var dist = Math.sqrt(dx * dx + dy * dy); - var length = dist; - - // Computes the norm and the inverse norm - var nx = dx / dist; - var ny = dy / dist; - var basex = length * nx; - var basey = length * ny; - var floorx = width * ny/3; - var floory = -width * nx/3; - - // Computes points - var p0x = p0.x - floorx / 2; - var p0y = p0.y - floory / 2; - var p1x = p0x + floorx; - var p1y = p0y + floory; - var p2x = p1x + basex; - var p2y = p1y + basey; - var p3x = p2x + floorx; - var p3y = p2y + floory; - // p4 not necessary - var p5x = p3x - 3 * floorx; - var p5y = p3y - 3 * floory; - - c.begin(); - c.moveTo(p1x, p1y); - c.lineTo(p2x, p2y); - c.moveTo(p5x + floorx, p5y + floory); - c.lineTo(p0x, p0y); - c.stroke(); - }; - - // Registers the link shape - mxCellRenderer.prototype.defaultShapes['link'] = LinkShape; - - // Registers and defines the custom marker - mxMarker.addMarker('dash', function(canvas, shape, type, pe, unitX, unitY, size, source, sw, filled) - { - var nx = unitX * (size + sw + 1); - var ny = unitY * (size + sw + 1); - - return function() - { - canvas.begin(); - canvas.moveTo(pe.x - nx / 2 - ny / 2, pe.y - ny / 2 + nx / 2); - canvas.lineTo(pe.x + ny / 2 - 3 * nx / 2, pe.y - 3 * ny / 2 - nx / 2); - canvas.stroke(); - }; - }); - - // Implements custom handlers - var SPECIAL_HANDLE_INDEX = -99; - - // Handlers are only added if mxVertexHandler is defined (ie. not in embedded graph) - if (typeof(mxVertexHandler) != 'undefined') - { - function mxExtVertexHandler(state) - { - mxVertexHandler.call(this, state); - }; - - mxUtils.extend(mxExtVertexHandler, mxVertexHandler); - - mxExtVertexHandler.prototype.useGridForSpecialHandle = false; - - mxExtVertexHandler.prototype.init = function() - { - this.horizontal = mxUtils.getValue(this.state.style, mxConstants.STYLE_HORIZONTAL, true); - var graph = this.state.view.graph; - - if (this.handleImage != null) - { - var bounds = new mxRectangle(0, 0, this.handleImage.width, this.handleImage.height); - this.specialHandle = new mxImageShape(bounds, this.handleImage.src); - } - else - { - var size = 10; - var bounds = new mxRectangle(0, 0, size, size); - this.specialHandle = new mxRhombus(bounds, mxConstants.HANDLE_FILLCOLOR, mxConstants.HANDLE_STROKECOLOR); - } - - this.specialHandle.dialect = (graph.dialect != mxConstants.DIALECT_SVG) ? - mxConstants.DIALECT_VML : mxConstants.DIALECT_SVG; - this.specialHandle.init(graph.getView().getOverlayPane()); - this.specialHandle.node.style.cursor = this.getSpecialHandleCursor(); - - mxEvent.redirectMouseEvents(this.specialHandle.node, graph, this.state); - mxVertexHandler.prototype.init.apply(this, arguments); - }; - - mxExtVertexHandler.prototype.getSpecialHandleCursor = function() - { - return 'default'; - }; - - mxExtVertexHandler.prototype.redraw = function() - { - mxVertexHandler.prototype.redraw.apply(this, arguments); - - var size = this.specialHandle.bounds.width; - this.specialHandle.bounds = this.getSpecialHandleBounds(size); - this.specialHandle.redraw(); - }; - - mxExtVertexHandler.prototype.destroy = function() - { - mxVertexHandler.prototype.destroy.apply(this, arguments); - - if (this.specialHandle != null) - { - this.specialHandle.destroy(); - this.specialHandle = null; - } - }; - - mxExtVertexHandler.prototype.getHandleForEvent = function(me) - { - if (me.isSource(this.specialHandle)) - { - return SPECIAL_HANDLE_INDEX; - } - - return mxVertexHandler.prototype.getHandleForEvent.apply(this, arguments); - }; - - mxExtVertexHandler.prototype.mouseMove = function(sender, me) - { - if (!me.isConsumed() && this.index == SPECIAL_HANDLE_INDEX) - { - var point = new mxPoint(me.getGraphX(), me.getGraphY()); - this.constrainPoint(point); - var gridEnabled = this.graph.isGridEnabledEvent(me.getEvent()); - var scale = this.graph.getView().scale; - - if (gridEnabled && this.useGridForSpecialHandle) - { - point.x = this.graph.snap(point.x / scale) * scale; - point.y = this.graph.snap(point.y / scale) * scale; - } - - this.updateStyle(point); - this.moveSizerTo(this.specialHandle, point.x, point.y); - this.state.view.graph.cellRenderer.redraw(this.state, true); - me.consume(); - } - else - { - mxVertexHandler.prototype.mouseMove.apply(this, arguments); - } - }; - - mxExtVertexHandler.prototype.mouseUp = function(sender, me) - { - if (!me.isConsumed() && this.index == SPECIAL_HANDLE_INDEX) - { - this.applyStyle(); - this.reset(); - me.consume(); - } - else - { - mxVertexHandler.prototype.mouseUp.apply(this, arguments); - } - }; - - mxExtVertexHandler.prototype.getSpecialHandleBounds = function(size) - { - var rotation = this.state.shape.getShapeRotation(); - var alpha = mxUtils.toRadians(rotation); - var cos = Math.cos(alpha); - var sin = Math.sin(alpha); - - var bounds = new mxRectangle(this.state.x, this.state.y, this.state.width, this.state.height); - - if (this.state.shape.isPaintBoundsInverted()) - { - var t = (bounds.width - bounds.height) / 2; - bounds.x += t; - bounds.y -= t; - var tmp = bounds.width; - bounds.width = bounds.height; - bounds.height = tmp; - } - - var pt = this.getSpecialHandlePoint(bounds); - - if (this.state.shape.flipH) - { - pt.x = 2 * bounds.x + bounds.width - pt.x; - } - - if (this.state.shape.flipV) - { - pt.y = 2 * bounds.y + bounds.height - pt.y; - } - - pt = mxUtils.getRotatedPoint(pt, cos, sin, - new mxPoint(this.state.getCenterX(), this.state.getCenterY())); - - return new mxRectangle(pt.x - size / 2, pt.y - size / 2, size, size); - }; - - mxExtVertexHandler.prototype.getSpecialHandlePoint = function(bounds) - { - // Hook for subclassers - return null; - }; - - mxExtVertexHandler.prototype.updateStyle = function(point) - { - // Hook for subclassers - }; - - mxExtVertexHandler.prototype.constrainPoint = function(point) - { - point.x = Math.max(this.state.x, Math.min(this.state.x + this.state.width, point.x)); - point.y = Math.max(this.state.y, Math.min(this.state.y + this.state.height, point.y)); - }; - - mxExtVertexHandler.prototype.applyStyle = function() - { - // Hook for subclassers - }; - - // Folder Handler - function mxFolderHandler(state) - { - mxExtVertexHandler.call(this, state); - }; - - mxUtils.extend(mxFolderHandler, mxExtVertexHandler); - - mxFolderHandler.prototype.getSpecialHandlePoint = function(bounds) - { - var scale = this.graph.getView().scale; - var tw = Math.min(bounds.width, mxUtils.getValue(this.state.style, 'tabWidth', 60) * scale); - var th = Math.min(bounds.height, mxUtils.getValue(this.state.style, 'tabHeight', 20) * scale); - - var tp = mxUtils.getValue(this.state.style, 'tabPosition', 'right'); - var x = (tp == 'left') ? bounds.x + tw : bounds.x + bounds.width - tw; - - return new mxPoint(x, bounds.y + th); - }; - - mxFolderHandler.prototype.updateStyle = function(point) - { - var rotation = this.state.shape.getShapeRotation(); - var alpha = mxUtils.toRadians(rotation); - var cos = Math.cos(-alpha); - var sin = Math.sin(-alpha); - - var bounds = new mxRectangle(this.state.x, this.state.y, this.state.width, this.state.height); - - if (this.state.shape.isPaintBoundsInverted()) - { - var t = (bounds.width - bounds.height) / 2; - bounds.x += t; - bounds.y -= t; - var tmp = bounds.width; - bounds.width = bounds.height; - bounds.height = tmp; - } - - var pt = new mxPoint(point.x, point.y); - pt = mxUtils.getRotatedPoint(pt, cos, sin, - new mxPoint(this.state.getCenterX(), this.state.getCenterY())); - - if (this.state.shape.flipH) - { - pt.x = 2 * bounds.x + bounds.width - pt.x; - } - - if (this.state.shape.flipV) - { - pt.y = 2 * bounds.y + bounds.height - pt.y; - } - - var result = this.updateStyleUnrotated(pt, bounds); - - // Modifies point to use rotated coordinates of return value - if (result != null) - { - if (this.state.shape.flipH) - { - result.x = 2 * bounds.x + bounds.width - result.x; - } - - if (this.state.shape.flipV) - { - result.y = 2 * bounds.y + bounds.height - result.y; - } - - cos = Math.cos(alpha); - sin = Math.sin(alpha); - result = mxUtils.getRotatedPoint(result, cos, sin, - new mxPoint(this.state.getCenterX(), this.state.getCenterY())); - point.x = result.x; - point.y = result.y; - } - }; - - mxFolderHandler.prototype.updateStyleUnrotated = function(pt, bounds) - { - var tp = mxUtils.getValue(this.state.style, 'tabPosition', 'right'); - var tw = (tp == 'left') ? pt.x - bounds.x : bounds.x + bounds.width - pt.x; - var th = pt.y - bounds.y; - - var scale = this.graph.getView().scale; - this.state.style['tabWidth'] = Math.round(Math.max(1, tw) / scale); - this.state.style['tabHeight'] = Math.round(Math.max(1, th) / scale); - }; - - mxFolderHandler.prototype.applyStyle = function() - { - var model = this.graph.getModel(); - model.beginUpdate(); - try - { - this.state.view.graph.setCellStyles('tabWidth', this.state.style['tabWidth'], [this.state.cell]); - this.state.view.graph.setCellStyles('tabHeight', this.state.style['tabHeight'], [this.state.cell]); - } - finally - { - model.endUpdate(); - } - }; - - // Swimlane Handler - function mxSwimlaneHandler(state) - { - mxFolderHandler.call(this, state); - }; - - mxUtils.extend(mxSwimlaneHandler, mxFolderHandler); - - mxSwimlaneHandler.prototype.getSpecialHandlePoint = function(bounds) - { - var scale = this.graph.getView().scale; - var startSize = mxUtils.getValue(this.state.style, mxConstants.STYLE_STARTSIZE, mxConstants.DEFAULT_STARTSIZE); - - return new mxPoint(bounds.x + bounds.width / 2, bounds.y + Math.min(bounds.height, startSize * scale)); - }; - - mxSwimlaneHandler.prototype.updateStyleUnrotated = function(point, bounds) - { - point.x = bounds.x + bounds.width / 2; - startSize = point.y - bounds.y; - var scale = this.graph.getView().scale; - this.state.style['startSize'] = Math.round(Math.max(1, startSize) / scale); - - return point; - }; - - mxSwimlaneHandler.prototype.applyStyle = function() - { - this.state.view.graph.setCellStyles('startSize', this.state.style['startSize'], [this.state.cell]); - }; - - // Cube Handler - function mxCubeHandler(state) - { - mxFolderHandler.call(this, state); - }; - - mxUtils.extend(mxCubeHandler, mxFolderHandler); - - mxCubeHandler.prototype.defaultValue = 20; - - mxCubeHandler.prototype.scaleFactor = 1; - - mxCubeHandler.prototype.getSpecialHandlePoint = function(bounds) - { - var scale = this.graph.getView().scale; - var sz = Math.min(bounds.width, Math.min(bounds.height, - mxUtils.getValue(this.state.style, 'size', this.defaultValue) * scale / this.scaleFactor)); - - return new mxPoint(bounds.x + sz, bounds.y + sz); - }; - - mxCubeHandler.prototype.updateStyleUnrotated = function(pt, bounds) - { - var size = Math.max(0, Math.min(Math.min(bounds.width / this.scaleFactor, pt.x - bounds.x), - Math.min(bounds.height / this.scaleFactor, pt.y - bounds.y))); - var scale = this.graph.getView().scale; - this.state.style['size'] = Math.round(Math.max(1, size) / scale) * this.scaleFactor; - - // Stays on the diagonal - return new mxPoint(bounds.x + size, bounds.y + size); - }; - - mxCubeHandler.prototype.applyStyle = function() - { - this.state.view.graph.setCellStyles('size', this.state.style['size'], [this.state.cell]); - }; - - // Card Handler - function mxCardHandler(state) - { - mxCubeHandler.call(this, state); - }; - - mxUtils.extend(mxCardHandler, mxCubeHandler); - - mxCardHandler.prototype.defaultValue = 30; - - mxCardHandler.prototype.scaleFactor = 2; - - // Note Handler - function mxNoteHandler(state) - { - mxCubeHandler.call(this, state); - }; - - mxUtils.extend(mxNoteHandler, mxCubeHandler); - - mxNoteHandler.prototype.defaultValue = 30; - - mxNoteHandler.prototype.scaleFactor = 1; - - mxNoteHandler.prototype.getSpecialHandlePoint = function(bounds) - { - var scale = this.graph.getView().scale; - var sz = Math.min(bounds.width, Math.min(bounds.height, - mxUtils.getValue(this.state.style, 'size', this.defaultValue) * scale / this.scaleFactor)); - - return new mxPoint(bounds.x + bounds.width - sz, bounds.y + sz); - }; - - mxNoteHandler.prototype.updateStyleUnrotated = function(pt, bounds) - { - var size = Math.max(0, Math.min(Math.min(bounds.width / this.scaleFactor, pt.x - bounds.x + bounds.width), - Math.min(bounds.height / this.scaleFactor, pt.y - bounds.y))); - var scale = this.graph.getView().scale; - this.state.style['size'] = Math.round(Math.max(1, size) / scale) * this.scaleFactor; - - // Stays on the diagonal - return new mxPoint(bounds.x + bounds.width - size, bounds.y + size); - }; - - // Step Handler - function mxStepHandler(state) - { - mxCubeHandler.call(this, state); - }; - - mxUtils.extend(mxStepHandler, mxCubeHandler); - - mxStepHandler.prototype.defaultValue = 0.2; - - mxStepHandler.prototype.scaleFactor = 1; - - mxStepHandler.prototype.getSpecialHandlePoint = function(bounds) - { - var sz = mxUtils.getValue(this.state.style, 'size', this.defaultValue); - - return new mxPoint(bounds.x + bounds.width * sz, bounds.y + bounds.height / 2); - }; - - mxStepHandler.prototype.updateStyleUnrotated = function(pt, bounds) - { - var size = Math.min(1, (pt.x - bounds.x) / bounds.width); - this.state.style['size'] = size; - - return new mxPoint(bounds.x + size * bounds.width, bounds.y + bounds.height / 2); - }; - - // Tape Handler - function mxTapeHandler(state) - { - mxCubeHandler.call(this, state); - }; - - mxUtils.extend(mxTapeHandler, mxCubeHandler); - - mxTapeHandler.prototype.defaultValue = 0.4; - - mxTapeHandler.prototype.scaleFactor = 1; - - mxTapeHandler.prototype.getSpecialHandlePoint = function(bounds) - { - var sz = mxUtils.getValue(this.state.style, 'size', this.defaultValue); - - return new mxPoint(bounds.x + bounds.width / 2, bounds.y + sz * bounds.height / 2); - }; - - mxTapeHandler.prototype.updateStyleUnrotated = function(pt, bounds) - { - var size = Math.max(0, Math.min(1, ((pt.y - bounds.y) / bounds.height) * 2)); - this.state.style['size'] = size; - - return new mxPoint(bounds.x + bounds.width / 2, bounds.y + size * bounds.height / 2); - }; - - var handlers = {'swimlane': mxSwimlaneHandler, 'folder': mxFolderHandler, 'cube': mxCubeHandler, - 'card': mxCardHandler, 'note': mxNoteHandler, 'step': mxStepHandler, 'tape': mxTapeHandler}; - - var mxGraphCreateHandler = mxGraph.prototype.createHandler; - mxGraph.prototype.createHandler = function(state) - { - if (state != null) - { - var ctor = handlers[state.style['shape']]; - - if (ctor != null) - { - return new ctor(state); - } - } - - return mxGraphCreateHandler.apply(this, arguments); - }; - } - - // Constraints - mxGraph.prototype.getAllConnectionConstraints = function(terminal, source) - { - if (terminal != null && terminal.shape != null) - { - if (terminal.shape.stencil != null) - { - if (terminal.shape.stencil != null) - { - return terminal.shape.stencil.constraints; - } - } - else if (terminal.shape.constraints != null) - { - return terminal.shape.constraints; - } - } - - return null; - }; - - mxRectangleShape.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.25, 0), true), - new mxConnectionConstraint(new mxPoint(0.5, 0), true), - new mxConnectionConstraint(new mxPoint(0.75, 0), true), - new mxConnectionConstraint(new mxPoint(0, 0.25), true), - new mxConnectionConstraint(new mxPoint(0, 0.5), true), - new mxConnectionConstraint(new mxPoint(0, 0.75), true), - new mxConnectionConstraint(new mxPoint(1, 0.25), true), - new mxConnectionConstraint(new mxPoint(1, 0.5), true), - new mxConnectionConstraint(new mxPoint(1, 0.75), true), - new mxConnectionConstraint(new mxPoint(0.25, 1), true), - new mxConnectionConstraint(new mxPoint(0.5, 1), true), - new mxConnectionConstraint(new mxPoint(0.75, 1), true)]; - mxLabel.prototype.constraints = mxRectangleShape.prototype.constraints; - mxImageShape.prototype.constraints = mxRectangleShape.prototype.constraints; - mxSwimlane.prototype.constraints = mxRectangleShape.prototype.constraints; - PlusShape.prototype.constraints = mxRectangleShape.prototype.constraints; - NoteShape.prototype.constraints = mxRectangleShape.prototype.constraints; - CardShape.prototype.constraints = mxRectangleShape.prototype.constraints; - CubeShape.prototype.constraints = mxRectangleShape.prototype.constraints; - FolderShape.prototype.constraints = mxRectangleShape.prototype.constraints; - mxCylinder.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.15, 0.05), false), - new mxConnectionConstraint(new mxPoint(0.5, 0), true), - new mxConnectionConstraint(new mxPoint(0.85, 0.05), false), - new mxConnectionConstraint(new mxPoint(0, 0.3), true), - new mxConnectionConstraint(new mxPoint(0, 0.5), true), - new mxConnectionConstraint(new mxPoint(0, 0.7), true), - new mxConnectionConstraint(new mxPoint(1, 0.3), true), - new mxConnectionConstraint(new mxPoint(1, 0.5), true), - new mxConnectionConstraint(new mxPoint(1, 0.7), true), - new mxConnectionConstraint(new mxPoint(0.15, 0.95), false), - new mxConnectionConstraint(new mxPoint(0.5, 1), true), - new mxConnectionConstraint(new mxPoint(0.85, 0.95), false)]; - UmlActorShape.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.25, 0.1), false), - new mxConnectionConstraint(new mxPoint(0.5, 0), false), - new mxConnectionConstraint(new mxPoint(0.75, 0.1), false), - new mxConnectionConstraint(new mxPoint(0, 1/3), false), - new mxConnectionConstraint(new mxPoint(0, 1), false), - new mxConnectionConstraint(new mxPoint(1, 1/3), false), - new mxConnectionConstraint(new mxPoint(1, 1), false), - new mxConnectionConstraint(new mxPoint(0.5, 0.5), false)]; - ComponentShape.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.25, 0), true), - new mxConnectionConstraint(new mxPoint(0.5, 0), true), - new mxConnectionConstraint(new mxPoint(0.75, 0), true), - new mxConnectionConstraint(new mxPoint(0, 0.3), true), - new mxConnectionConstraint(new mxPoint(0, 0.7), true), - new mxConnectionConstraint(new mxPoint(1, 0.25), true), - new mxConnectionConstraint(new mxPoint(1, 0.5), true), - new mxConnectionConstraint(new mxPoint(1, 0.75), true), - new mxConnectionConstraint(new mxPoint(0.25, 1), true), - new mxConnectionConstraint(new mxPoint(0.5, 1), true), - new mxConnectionConstraint(new mxPoint(0.75, 1), true)]; - mxActor.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.5, 0), true), - new mxConnectionConstraint(new mxPoint(0.25, 0.2), false), - new mxConnectionConstraint(new mxPoint(0.1, 0.5), false), - new mxConnectionConstraint(new mxPoint(0, 0.75), true), - new mxConnectionConstraint(new mxPoint(0.75, 0.25), false), - new mxConnectionConstraint(new mxPoint(0.9, 0.5), false), - new mxConnectionConstraint(new mxPoint(1, 0.75), true), - new mxConnectionConstraint(new mxPoint(0.25, 1), true), - new mxConnectionConstraint(new mxPoint(0.5, 1), true), - new mxConnectionConstraint(new mxPoint(0.75, 1), true)]; - TapeShape.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0, 0.35), false), - new mxConnectionConstraint(new mxPoint(0, 0.5), false), - new mxConnectionConstraint(new mxPoint(0, 0.65), false), - new mxConnectionConstraint(new mxPoint(1, 0.35), false), - new mxConnectionConstraint(new mxPoint(1, 0.5), false), - new mxConnectionConstraint(new mxPoint(1, 0.65), false), - new mxConnectionConstraint(new mxPoint(0.25, 1), false), - new mxConnectionConstraint(new mxPoint(0.75, 0), false)]; - // TODO: Relative ports - StepShape.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.25, 0), true), - new mxConnectionConstraint(new mxPoint(0.5, 0), true), - new mxConnectionConstraint(new mxPoint(0.75, 0), true), - new mxConnectionConstraint(new mxPoint(0.25, 1), true), - new mxConnectionConstraint(new mxPoint(0.5, 1), true), - new mxConnectionConstraint(new mxPoint(0.75, 1), true), - new mxConnectionConstraint(new mxPoint(0.1, 0.25), false), - new mxConnectionConstraint(new mxPoint(0.2, 0.5), false), - new mxConnectionConstraint(new mxPoint(0.1, 0.75), false), - new mxConnectionConstraint(new mxPoint(0.9, 0.25), false), - new mxConnectionConstraint(new mxPoint(1, 0.5), false), - new mxConnectionConstraint(new mxPoint(0.9, 0.75), false)]; - mxLine.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0, 0.5), false), - new mxConnectionConstraint(new mxPoint(0.25, 0.5), false), - new mxConnectionConstraint(new mxPoint(0.75, 0.5), false), - new mxConnectionConstraint(new mxPoint(1, 0.5), false)]; - LollipopShape.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.5, 0), false), - new mxConnectionConstraint(new mxPoint(0.5, 1), false)]; - mxEllipse.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0, 0), true), new mxConnectionConstraint(new mxPoint(1, 0), true), - new mxConnectionConstraint(new mxPoint(0, 1), true), new mxConnectionConstraint(new mxPoint(1, 1), true), - new mxConnectionConstraint(new mxPoint(0.5, 0), true), new mxConnectionConstraint(new mxPoint(0.5, 1), true), - new mxConnectionConstraint(new mxPoint(0, 0.5), true), new mxConnectionConstraint(new mxPoint(1, 0.5))]; - mxDoubleEllipse.prototype.constraints = mxEllipse.prototype.constraints; - mxRhombus.prototype.constraints = mxEllipse.prototype.constraints; - mxTriangle.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0, 0.25), true), - new mxConnectionConstraint(new mxPoint(0, 0.5), true), - new mxConnectionConstraint(new mxPoint(0, 0.75), true), - new mxConnectionConstraint(new mxPoint(0.5, 0), true), - new mxConnectionConstraint(new mxPoint(0.5, 1), true), - new mxConnectionConstraint(new mxPoint(1, 0.5), true)]; - mxHexagon.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.375, 0), true), - new mxConnectionConstraint(new mxPoint(0.5, 0), true), - new mxConnectionConstraint(new mxPoint(0.625, 0), true), - new mxConnectionConstraint(new mxPoint(0.125, 0.25), false), - new mxConnectionConstraint(new mxPoint(0, 0.5), true), - new mxConnectionConstraint(new mxPoint(0.125, 0.75), false), - new mxConnectionConstraint(new mxPoint(0.875, 0.25), false), - new mxConnectionConstraint(new mxPoint(0, 0.5), true), - new mxConnectionConstraint(new mxPoint(1, 0.5), true), - new mxConnectionConstraint(new mxPoint(0.875, 0.75), false), - new mxConnectionConstraint(new mxPoint(0.375, 1), true), - new mxConnectionConstraint(new mxPoint(0.5, 1), true), - new mxConnectionConstraint(new mxPoint(0.625, 1), true)]; - mxCloud.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.25, 0.25), false), - new mxConnectionConstraint(new mxPoint(0.4, 0.1), false), - new mxConnectionConstraint(new mxPoint(0.16, 0.55), false), - new mxConnectionConstraint(new mxPoint(0.07, 0.4), false), - new mxConnectionConstraint(new mxPoint(0.31, 0.8), false), - new mxConnectionConstraint(new mxPoint(0.13, 0.77), false), - new mxConnectionConstraint(new mxPoint(0.8, 0.8), false), - new mxConnectionConstraint(new mxPoint(0.55, 0.95), false), - new mxConnectionConstraint(new mxPoint(0.875, 0.5), false), - new mxConnectionConstraint(new mxPoint(0.96, 0.7), false), - new mxConnectionConstraint(new mxPoint(0.625, 0.2), false), - new mxConnectionConstraint(new mxPoint(0.88, 0.25), false)]; - mxArrow.prototype.constraints = null; -})(); +var _0x961e=["\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x63\x6F\x6E\x73\x74\x72\x75\x63\x74\x6F\x72","\x73\x69\x7A\x65","\x72\x65\x64\x72\x61\x77\x50\x61\x74\x68","\x73\x74\x79\x6C\x65","\x67\x65\x74\x56\x61\x6C\x75\x65","\x6D\x69\x6E","\x6D\x6F\x76\x65\x54\x6F","\x6C\x69\x6E\x65\x54\x6F","\x65\x6E\x64","\x63\x6C\x6F\x73\x65","\x63\x75\x62\x65","\x64\x65\x66\x61\x75\x6C\x74\x53\x68\x61\x70\x65\x73","\x6E\x6F\x74\x65","\x74\x61\x62\x57\x69\x64\x74\x68","\x74\x61\x62\x48\x65\x69\x67\x68\x74","\x74\x61\x62\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x72\x69\x67\x68\x74","\x6C\x65\x66\x74","\x66\x6F\x6C\x64\x65\x72","\x63\x61\x72\x64","\x71\x75\x61\x64\x54\x6F","\x74\x61\x70\x65","\x73\x74\x65\x70","\x63\x61\x6C\x6C","\x65\x78\x74\x65\x6E\x64","\x69\x73\x48\x74\x6D\x6C\x41\x6C\x6C\x6F\x77\x65\x64","\x70\x61\x69\x6E\x74\x46\x6F\x72\x65\x67\x72\x6F\x75\x6E\x64","\x62\x65\x67\x69\x6E","\x73\x74\x72\x6F\x6B\x65","\x61\x70\x70\x6C\x79","\x70\x6C\x75\x73","\x64\x6F\x75\x62\x6C\x65","\x73\x74\x72\x6F\x6B\x65\x77\x69\x64\x74\x68","\x6D\x61\x78","\x70\x61\x69\x6E\x74\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64","\x73\x65\x74\x44\x61\x73\x68\x65\x64","\x73\x79\x6D\x62\x6F\x6C","\x41\x6C\x69\x67\x6E","\x56\x65\x72\x74\x69\x63\x61\x6C\x41\x6C\x69\x67\x6E","\x57\x69\x64\x74\x68","\x48\x65\x69\x67\x68\x74","\x53\x70\x61\x63\x69\x6E\x67","\x41\x72\x63\x53\x70\x61\x63\x69\x6E\x67","\x67\x65\x74\x41\x72\x63\x53\x69\x7A\x65","\x41\x4C\x49\x47\x4E\x5F\x43\x45\x4E\x54\x45\x52","\x41\x4C\x49\x47\x4E\x5F\x52\x49\x47\x48\x54","\x41\x4C\x49\x47\x4E\x5F\x4D\x49\x44\x44\x4C\x45","\x41\x4C\x49\x47\x4E\x5F\x42\x4F\x54\x54\x4F\x4D","\x73\x61\x76\x65","\x70\x61\x69\x6E\x74\x56\x65\x72\x74\x65\x78\x53\x68\x61\x70\x65","\x72\x65\x73\x74\x6F\x72\x65","\x65\x78\x74","\x6D\x65\x73\x73\x61\x67\x65","\x61\x64\x64\x50\x69\x70\x65","\x63\x75\x72\x76\x65\x54\x6F","\x75\x6D\x6C\x41\x63\x74\x6F\x72","\x6C\x6F\x6C\x6C\x69\x70\x6F\x70","\x6A\x65\x74\x74\x79\x57\x69\x64\x74\x68","\x6A\x65\x74\x74\x79\x48\x65\x69\x67\x68\x74","\x63\x6F\x6D\x70\x6F\x6E\x65\x6E\x74","\x6F\x75\x74\x65\x72\x53\x74\x72\x6F\x6B\x65","\x65\x6C\x6C\x69\x70\x73\x65","\x66\x69\x6C\x6C\x41\x6E\x64\x53\x74\x72\x6F\x6B\x65","\x73\x65\x74\x53\x68\x61\x64\x6F\x77","\x65\x6E\x64\x53\x74\x61\x74\x65","\x73\x74\x61\x72\x74\x53\x74\x61\x74\x65","\x69\x6E\x69\x74\x53\x68\x61\x70\x65\x73","\x78","\x79","\x77\x69\x64\x74\x68","\x68\x65\x69\x67\x68\x74","\x73\x68\x61\x70\x65\x73","\x70\x61\x69\x6E\x74\x45\x64\x67\x65\x53\x68\x61\x70\x65","\x6C\x65\x6E\x67\x74\x68","\x73\x71\x72\x74","\x6C\x69\x6E\x6B","\x64\x61\x73\x68","\x61\x64\x64\x4D\x61\x72\x6B\x65\x72","\x75\x6E\x64\x65\x66\x69\x6E\x65\x64","\x75\x73\x65\x47\x72\x69\x64\x46\x6F\x72\x53\x70\x65\x63\x69\x61\x6C\x48\x61\x6E\x64\x6C\x65","\x69\x6E\x69\x74","\x68\x6F\x72\x69\x7A\x6F\x6E\x74\x61\x6C","\x73\x74\x61\x74\x65","\x67\x72\x61\x70\x68","\x76\x69\x65\x77","\x68\x61\x6E\x64\x6C\x65\x49\x6D\x61\x67\x65","\x73\x70\x65\x63\x69\x61\x6C\x48\x61\x6E\x64\x6C\x65","\x73\x72\x63","\x64\x69\x61\x6C\x65\x63\x74","\x44\x49\x41\x4C\x45\x43\x54\x5F\x53\x56\x47","\x44\x49\x41\x4C\x45\x43\x54\x5F\x56\x4D\x4C","\x67\x65\x74\x4F\x76\x65\x72\x6C\x61\x79\x50\x61\x6E\x65","\x67\x65\x74\x56\x69\x65\x77","\x63\x75\x72\x73\x6F\x72","\x6E\x6F\x64\x65","\x67\x65\x74\x53\x70\x65\x63\x69\x61\x6C\x48\x61\x6E\x64\x6C\x65\x43\x75\x72\x73\x6F\x72","\x72\x65\x64\x69\x72\x65\x63\x74\x4D\x6F\x75\x73\x65\x45\x76\x65\x6E\x74\x73","\x64\x65\x66\x61\x75\x6C\x74","\x72\x65\x64\x72\x61\x77","\x62\x6F\x75\x6E\x64\x73","\x67\x65\x74\x53\x70\x65\x63\x69\x61\x6C\x48\x61\x6E\x64\x6C\x65\x42\x6F\x75\x6E\x64\x73","\x64\x65\x73\x74\x72\x6F\x79","\x67\x65\x74\x48\x61\x6E\x64\x6C\x65\x46\x6F\x72\x45\x76\x65\x6E\x74","\x69\x73\x53\x6F\x75\x72\x63\x65","\x6D\x6F\x75\x73\x65\x4D\x6F\x76\x65","\x69\x73\x43\x6F\x6E\x73\x75\x6D\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74\x47\x72\x61\x70\x68\x58","\x67\x65\x74\x47\x72\x61\x70\x68\x59","\x63\x6F\x6E\x73\x74\x72\x61\x69\x6E\x50\x6F\x69\x6E\x74","\x67\x65\x74\x45\x76\x65\x6E\x74","\x69\x73\x47\x72\x69\x64\x45\x6E\x61\x62\x6C\x65\x64\x45\x76\x65\x6E\x74","\x73\x63\x61\x6C\x65","\x73\x6E\x61\x70","\x75\x70\x64\x61\x74\x65\x53\x74\x79\x6C\x65","\x6D\x6F\x76\x65\x53\x69\x7A\x65\x72\x54\x6F","\x63\x65\x6C\x6C\x52\x65\x6E\x64\x65\x72\x65\x72","\x63\x6F\x6E\x73\x75\x6D\x65","\x6D\x6F\x75\x73\x65\x55\x70","\x61\x70\x70\x6C\x79\x53\x74\x79\x6C\x65","\x72\x65\x73\x65\x74","\x67\x65\x74\x53\x68\x61\x70\x65\x52\x6F\x74\x61\x74\x69\x6F\x6E","\x73\x68\x61\x70\x65","\x74\x6F\x52\x61\x64\x69\x61\x6E\x73","\x63\x6F\x73","\x73\x69\x6E","\x69\x73\x50\x61\x69\x6E\x74\x42\x6F\x75\x6E\x64\x73\x49\x6E\x76\x65\x72\x74\x65\x64","\x67\x65\x74\x53\x70\x65\x63\x69\x61\x6C\x48\x61\x6E\x64\x6C\x65\x50\x6F\x69\x6E\x74","\x66\x6C\x69\x70\x48","\x66\x6C\x69\x70\x56","\x67\x65\x74\x43\x65\x6E\x74\x65\x72\x58","\x67\x65\x74\x43\x65\x6E\x74\x65\x72\x59","\x67\x65\x74\x52\x6F\x74\x61\x74\x65\x64\x50\x6F\x69\x6E\x74","\x75\x70\x64\x61\x74\x65\x53\x74\x79\x6C\x65\x55\x6E\x72\x6F\x74\x61\x74\x65\x64","\x72\x6F\x75\x6E\x64","\x67\x65\x74\x4D\x6F\x64\x65\x6C","\x62\x65\x67\x69\x6E\x55\x70\x64\x61\x74\x65","\x63\x65\x6C\x6C","\x73\x65\x74\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65\x73","\x65\x6E\x64\x55\x70\x64\x61\x74\x65","\x73\x74\x61\x72\x74\x53\x69\x7A\x65","\x64\x65\x66\x61\x75\x6C\x74\x56\x61\x6C\x75\x65","\x73\x63\x61\x6C\x65\x46\x61\x63\x74\x6F\x72","\x63\x72\x65\x61\x74\x65\x48\x61\x6E\x64\x6C\x65\x72","\x67\x65\x74\x41\x6C\x6C\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74\x73","\x73\x74\x65\x6E\x63\x69\x6C","\x63\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74\x73"];(function(){function _0x7d89x1(){}_0x7d89x1[_0x961e[0]]= new mxCylinder();_0x7d89x1[_0x961e[0]][_0x961e[1]]= _0x7d89x1;_0x7d89x1[_0x961e[0]][_0x961e[2]]= 20;_0x7d89x1[_0x961e[0]][_0x961e[3]]= function(_0x7d89x2,_0x7d89x3,_0x7d89x4,_0x7d89x5,_0x7d89x6,_0x7d89x7){var _0x7d89x8=Math[_0x961e[6]](_0x7d89x5,Math[_0x961e[6]](_0x7d89x6,mxUtils[_0x961e[5]](this[_0x961e[4]],_0x961e[2],this[_0x961e[2]])));if(_0x7d89x7){_0x7d89x2[_0x961e[7]](_0x7d89x8,_0x7d89x6);_0x7d89x2[_0x961e[8]](_0x7d89x8,_0x7d89x8);_0x7d89x2[_0x961e[8]](0,0);_0x7d89x2[_0x961e[7]](_0x7d89x8,_0x7d89x8);_0x7d89x2[_0x961e[8]](_0x7d89x5,_0x7d89x8);_0x7d89x2[_0x961e[9]]()}else {_0x7d89x2[_0x961e[7]](0,0);_0x7d89x2[_0x961e[8]](_0x7d89x5- _0x7d89x8,0);_0x7d89x2[_0x961e[8]](_0x7d89x5,_0x7d89x8);_0x7d89x2[_0x961e[8]](_0x7d89x5,_0x7d89x6);_0x7d89x2[_0x961e[8]](_0x7d89x8,_0x7d89x6);_0x7d89x2[_0x961e[8]](0,_0x7d89x6- _0x7d89x8);_0x7d89x2[_0x961e[8]](0,0);_0x7d89x2[_0x961e[10]]();_0x7d89x2[_0x961e[9]]()}};mxCellRenderer[_0x961e[0]][_0x961e[12]][_0x961e[11]]= _0x7d89x1;function _0x7d89x9(){}_0x7d89x9[_0x961e[0]]= new mxCylinder();_0x7d89x9[_0x961e[0]][_0x961e[1]]= _0x7d89x9;_0x7d89x9[_0x961e[0]][_0x961e[2]]= 30;_0x7d89x9[_0x961e[0]][_0x961e[3]]= function(_0x7d89x2,_0x7d89x3,_0x7d89x4,_0x7d89x5,_0x7d89x6,_0x7d89x7){var _0x7d89x8=Math[_0x961e[6]](_0x7d89x5,Math[_0x961e[6]](_0x7d89x6,mxUtils[_0x961e[5]](this[_0x961e[4]],_0x961e[2],this[_0x961e[2]])));if(_0x7d89x7){_0x7d89x2[_0x961e[7]](_0x7d89x5- _0x7d89x8,0);_0x7d89x2[_0x961e[8]](_0x7d89x5- _0x7d89x8,_0x7d89x8);_0x7d89x2[_0x961e[8]](_0x7d89x5,_0x7d89x8);_0x7d89x2[_0x961e[9]]()}else {_0x7d89x2[_0x961e[7]](0,0);_0x7d89x2[_0x961e[8]](_0x7d89x5- _0x7d89x8,0);_0x7d89x2[_0x961e[8]](_0x7d89x5,_0x7d89x8);_0x7d89x2[_0x961e[8]](_0x7d89x5,_0x7d89x6);_0x7d89x2[_0x961e[8]](0,_0x7d89x6);_0x7d89x2[_0x961e[8]](0,0);_0x7d89x2[_0x961e[10]]();_0x7d89x2[_0x961e[9]]()}};mxCellRenderer[_0x961e[0]][_0x961e[12]][_0x961e[13]]= _0x7d89x9;function _0x7d89xa(){}_0x7d89xa[_0x961e[0]]= new mxCylinder();_0x7d89xa[_0x961e[0]][_0x961e[1]]= _0x7d89xa;_0x7d89xa[_0x961e[0]][_0x961e[14]]= 60;_0x7d89xa[_0x961e[0]][_0x961e[15]]= 20;_0x7d89xa[_0x961e[0]][_0x961e[16]]= _0x961e[17];_0x7d89xa[_0x961e[0]][_0x961e[3]]= function(_0x7d89x2,_0x7d89x3,_0x7d89x4,_0x7d89x5,_0x7d89x6,_0x7d89x7){var _0x7d89xb=mxUtils[_0x961e[5]](this[_0x961e[4]],_0x961e[14],this[_0x961e[14]]);var _0x7d89xc=mxUtils[_0x961e[5]](this[_0x961e[4]],_0x961e[15],this[_0x961e[15]]);var _0x7d89xd=mxUtils[_0x961e[5]](this[_0x961e[4]],_0x961e[16],this[_0x961e[16]]);var _0x7d89xe=Math[_0x961e[6]](_0x7d89x5,_0x7d89xb);var _0x7d89xf=Math[_0x961e[6]](_0x7d89x6,_0x7d89xc);if(_0x7d89x7){if(_0x7d89xd== _0x961e[18]){_0x7d89x2[_0x961e[7]](0,_0x7d89xf);_0x7d89x2[_0x961e[8]](_0x7d89xe,_0x7d89xf)}else {_0x7d89x2[_0x961e[7]](_0x7d89x5- _0x7d89xe,_0x7d89xf);_0x7d89x2[_0x961e[8]](_0x7d89x5,_0x7d89xf)};_0x7d89x2[_0x961e[9]]()}else {if(_0x7d89xd== _0x961e[18]){_0x7d89x2[_0x961e[7]](0,0);_0x7d89x2[_0x961e[8]](_0x7d89xe,0);_0x7d89x2[_0x961e[8]](_0x7d89xe,_0x7d89xf);_0x7d89x2[_0x961e[8]](_0x7d89x5,_0x7d89xf)}else {_0x7d89x2[_0x961e[7]](0,_0x7d89xf);_0x7d89x2[_0x961e[8]](_0x7d89x5- _0x7d89xe,_0x7d89xf);_0x7d89x2[_0x961e[8]](_0x7d89x5- _0x7d89xe,0);_0x7d89x2[_0x961e[8]](_0x7d89x5,0)};_0x7d89x2[_0x961e[8]](_0x7d89x5,_0x7d89x6);_0x7d89x2[_0x961e[8]](0,_0x7d89x6);_0x7d89x2[_0x961e[8]](0,_0x7d89xf);_0x7d89x2[_0x961e[10]]();_0x7d89x2[_0x961e[9]]()}};mxCellRenderer[_0x961e[0]][_0x961e[12]][_0x961e[19]]= _0x7d89xa;function _0x7d89x10(){}_0x7d89x10[_0x961e[0]]= new mxCylinder();_0x7d89x10[_0x961e[0]][_0x961e[1]]= _0x7d89x10;_0x7d89x10[_0x961e[0]][_0x961e[2]]= 30;_0x7d89x10[_0x961e[0]][_0x961e[3]]= function(_0x7d89x2,_0x7d89x3,_0x7d89x4,_0x7d89x5,_0x7d89x6,_0x7d89x7){var _0x7d89x8=Math[_0x961e[6]](_0x7d89x5,Math[_0x961e[6]](_0x7d89x6,mxUtils[_0x961e[5]](this[_0x961e[4]],_0x961e[2],this[_0x961e[2]])));if(!_0x7d89x7){_0x7d89x2[_0x961e[7]](_0x7d89x8,0);_0x7d89x2[_0x961e[8]](_0x7d89x5,0);_0x7d89x2[_0x961e[8]](_0x7d89x5,_0x7d89x6);_0x7d89x2[_0x961e[8]](0,_0x7d89x6);_0x7d89x2[_0x961e[8]](0,_0x7d89x8);_0x7d89x2[_0x961e[8]](_0x7d89x8,0);_0x7d89x2[_0x961e[10]]();_0x7d89x2[_0x961e[9]]()}};mxCellRenderer[_0x961e[0]][_0x961e[12]][_0x961e[20]]= _0x7d89x10;function _0x7d89x11(){}_0x7d89x11[_0x961e[0]]= new mxCylinder();_0x7d89x11[_0x961e[0]][_0x961e[1]]= _0x7d89x11;_0x7d89x11[_0x961e[0]][_0x961e[2]]= 0.4;_0x7d89x11[_0x961e[0]][_0x961e[3]]= function(_0x7d89x2,_0x7d89x3,_0x7d89x4,_0x7d89x5,_0x7d89x6,_0x7d89x7){var _0x7d89x8=mxUtils[_0x961e[5]](this[_0x961e[4]],_0x961e[2],this[_0x961e[2]]);var _0x7d89xf=_0x7d89x6* _0x7d89x8;var _0x7d89x12=1.4;if(!_0x7d89x7){_0x7d89x2[_0x961e[7]](0,_0x7d89xf/ 2);_0x7d89x2[_0x961e[21]](_0x7d89x5/ 4,_0x7d89xf* _0x7d89x12,_0x7d89x5/ 2,_0x7d89xf/ 2);_0x7d89x2[_0x961e[21]](_0x7d89x5* 3/ 4,_0x7d89xf* (1- _0x7d89x12),_0x7d89x5,_0x7d89xf/ 2);_0x7d89x2[_0x961e[8]](_0x7d89x5,_0x7d89x6- _0x7d89xf/ 2);_0x7d89x2[_0x961e[21]](_0x7d89x5* 3/ 4,_0x7d89x6- _0x7d89xf* _0x7d89x12,_0x7d89x5/ 2,_0x7d89x6- _0x7d89xf/ 2);_0x7d89x2[_0x961e[21]](_0x7d89x5/ 4,_0x7d89x6- _0x7d89xf* (1- _0x7d89x12),0,_0x7d89x6- _0x7d89xf/ 2);_0x7d89x2[_0x961e[8]](0,_0x7d89xf/ 2);_0x7d89x2[_0x961e[10]]();_0x7d89x2[_0x961e[9]]()}};mxCellRenderer[_0x961e[0]][_0x961e[12]][_0x961e[22]]= _0x7d89x11;function _0x7d89x13(){}_0x7d89x13[_0x961e[0]]= new mxCylinder();_0x7d89x13[_0x961e[0]][_0x961e[1]]= _0x7d89x13;_0x7d89x13[_0x961e[0]][_0x961e[2]]= 0.2;_0x7d89x13[_0x961e[0]][_0x961e[3]]= function(_0x7d89x2,_0x7d89x3,_0x7d89x4,_0x7d89x5,_0x7d89x6,_0x7d89x7){var _0x7d89x8=_0x7d89x5* mxUtils[_0x961e[5]](this[_0x961e[4]],_0x961e[2],this[_0x961e[2]]);if(!_0x7d89x7){_0x7d89x2[_0x961e[7]](0,0);_0x7d89x2[_0x961e[8]](_0x7d89x5- _0x7d89x8,0);_0x7d89x2[_0x961e[8]](_0x7d89x5,_0x7d89x6/ 2);_0x7d89x2[_0x961e[8]](_0x7d89x5- _0x7d89x8,_0x7d89x6);_0x7d89x2[_0x961e[8]](0,_0x7d89x6);_0x7d89x2[_0x961e[8]](_0x7d89x8,_0x7d89x6/ 2);_0x7d89x2[_0x961e[10]]();_0x7d89x2[_0x961e[9]]()}};mxCellRenderer[_0x961e[0]][_0x961e[12]][_0x961e[23]]= _0x7d89x13;function _0x7d89x14(){mxRectangleShape[_0x961e[24]](this)}mxUtils[_0x961e[25]](_0x7d89x14,mxRectangleShape);_0x7d89x14[_0x961e[0]][_0x961e[26]]= function(){return false};_0x7d89x14[_0x961e[0]][_0x961e[27]]= function(_0x7d89x15,_0x7d89x3,_0x7d89x4,_0x7d89x5,_0x7d89x6){var _0x7d89x16=Math[_0x961e[6]](_0x7d89x5/ 5,_0x7d89x6/ 5)+ 1;_0x7d89x15[_0x961e[28]]();_0x7d89x15[_0x961e[7]](_0x7d89x3+ _0x7d89x5/ 2,_0x7d89x4+ _0x7d89x16);_0x7d89x15[_0x961e[8]](_0x7d89x3+ _0x7d89x5/ 2,_0x7d89x4+ _0x7d89x6- _0x7d89x16);_0x7d89x15[_0x961e[7]](_0x7d89x3+ _0x7d89x16,_0x7d89x4+ _0x7d89x6/ 2);_0x7d89x15[_0x961e[8]](_0x7d89x3+ _0x7d89x5- _0x7d89x16,_0x7d89x4+ _0x7d89x6/ 2);_0x7d89x15[_0x961e[9]]();_0x7d89x15[_0x961e[29]]();mxRectangleShape[_0x961e[0]][_0x961e[27]][_0x961e[30]](this,arguments)};mxCellRenderer[_0x961e[0]][_0x961e[12]][_0x961e[31]]= _0x7d89x14;function _0x7d89x17(){mxRectangleShape[_0x961e[24]](this)}mxUtils[_0x961e[25]](_0x7d89x17,mxRectangleShape);_0x7d89x17[_0x961e[0]][_0x961e[26]]= function(){return false};_0x7d89x17[_0x961e[0]][_0x961e[27]]= function(_0x7d89x15,_0x7d89x3,_0x7d89x4,_0x7d89x5,_0x7d89x6){if(this[_0x961e[4]]!= null){if(this[_0x961e[4]][_0x961e[32]]== 1){var _0x7d89x18=Math[_0x961e[34]](2,this[_0x961e[33]]+ 1);mxRectangleShape[_0x961e[0]][_0x961e[35]][_0x961e[24]](this,_0x7d89x15,_0x7d89x3+ _0x7d89x18,_0x7d89x4+ _0x7d89x18,_0x7d89x5- 2* _0x7d89x18,_0x7d89x6- 2* _0x7d89x18);mxRectangleShape[_0x961e[0]][_0x961e[27]][_0x961e[30]](this,arguments);_0x7d89x3+= _0x7d89x18;_0x7d89x4+= _0x7d89x18;_0x7d89x5-= 2* _0x7d89x18;_0x7d89x6-= 2* _0x7d89x18};_0x7d89x15[_0x961e[36]](false);var _0x7d89x19=0;var _0x7d89x1a=null;do{_0x7d89x1a= mxCellRenderer[_0x961e[0]][_0x961e[12]][this[_0x961e[4]][_0x961e[37]+ _0x7d89x19]];if(_0x7d89x1a!= null){var _0x7d89x1b=this[_0x961e[4]][_0x961e[37]+ _0x7d89x19+ _0x961e[38]];var _0x7d89x1c=this[_0x961e[4]][_0x961e[37]+ _0x7d89x19+ _0x961e[39]];var _0x7d89x1d=this[_0x961e[4]][_0x961e[37]+ _0x7d89x19+ _0x961e[40]];var _0x7d89x1e=this[_0x961e[4]][_0x961e[37]+ _0x7d89x19+ _0x961e[41]];var _0x7d89x1f=this[_0x961e[4]][_0x961e[37]+ _0x7d89x19+ _0x961e[42]]|| 0;var _0x7d89x20=this[_0x961e[4]][_0x961e[37]+ _0x7d89x19+ _0x961e[43]];if(_0x7d89x20!= null){_0x7d89x1f+= this[_0x961e[44]](_0x7d89x5+ this[_0x961e[33]],_0x7d89x6+ this[_0x961e[33]])* _0x7d89x20};var _0x7d89x21=_0x7d89x3;var _0x7d89x22=_0x7d89x4;if(_0x7d89x1b== mxConstants[_0x961e[45]]){_0x7d89x21+= (_0x7d89x5- _0x7d89x1d)/ 2}else {if(_0x7d89x1b== mxConstants[_0x961e[46]]){_0x7d89x21+= _0x7d89x5- _0x7d89x1d- _0x7d89x1f}else {_0x7d89x21+= _0x7d89x1f}};if(_0x7d89x1c== mxConstants[_0x961e[47]]){_0x7d89x22+= (_0x7d89x6- _0x7d89x1e)/ 2}else {if(_0x7d89x1c== mxConstants[_0x961e[48]]){_0x7d89x22+= _0x7d89x6- _0x7d89x1e- _0x7d89x1f}else {_0x7d89x22+= _0x7d89x1f}};_0x7d89x15[_0x961e[49]]();var _0x7d89x23= new _0x7d89x1a();_0x7d89x23[_0x961e[4]]= this[_0x961e[4]];_0x7d89x1a[_0x961e[0]][_0x961e[50]][_0x961e[24]](_0x7d89x23,_0x7d89x15,_0x7d89x21,_0x7d89x22,_0x7d89x1d,_0x7d89x1e);_0x7d89x15[_0x961e[51]]()};_0x7d89x19++}while(_0x7d89x1a!= null);}};mxCellRenderer[_0x961e[0]][_0x961e[12]][_0x961e[52]]= _0x7d89x17;function _0x7d89x24(){}_0x7d89x24[_0x961e[0]]= new mxCylinder();_0x7d89x24[_0x961e[0]][_0x961e[1]]= _0x7d89x24;_0x7d89x24[_0x961e[0]][_0x961e[3]]= function(_0x7d89x2,_0x7d89x3,_0x7d89x4,_0x7d89x5,_0x7d89x6,_0x7d89x7){if(_0x7d89x7){_0x7d89x2[_0x961e[7]](0,0);_0x7d89x2[_0x961e[8]](_0x7d89x5/ 2,_0x7d89x6/ 2);_0x7d89x2[_0x961e[8]](_0x7d89x5,0);_0x7d89x2[_0x961e[9]]()}else {_0x7d89x2[_0x961e[7]](0,0);_0x7d89x2[_0x961e[8]](_0x7d89x5,0);_0x7d89x2[_0x961e[8]](_0x7d89x5,_0x7d89x6);_0x7d89x2[_0x961e[8]](0,_0x7d89x6);_0x7d89x2[_0x961e[10]]()}};mxCellRenderer[_0x961e[0]][_0x961e[12]][_0x961e[53]]= _0x7d89x24;function _0x7d89x25(){}_0x7d89x25[_0x961e[0]]= new mxCylinder();_0x7d89x25[_0x961e[0]][_0x961e[1]]= _0x7d89x25;_0x7d89x25[_0x961e[0]][_0x961e[54]]= true;_0x7d89x25[_0x961e[0]][_0x961e[3]]= function(_0x7d89x2,_0x7d89x3,_0x7d89x4,_0x7d89x5,_0x7d89x6,_0x7d89x7){var _0x7d89x1d=_0x7d89x5/ 3;var _0x7d89x1e=_0x7d89x6/ 4;if(!_0x7d89x7){_0x7d89x2[_0x961e[7]](_0x7d89x5/ 2,_0x7d89x1e);_0x7d89x2[_0x961e[55]](_0x7d89x5/ 2- _0x7d89x1d,_0x7d89x1e,_0x7d89x5/ 2- _0x7d89x1d,0,_0x7d89x5/ 2,0);_0x7d89x2[_0x961e[55]](_0x7d89x5/ 2+ _0x7d89x1d,0,_0x7d89x5/ 2+ _0x7d89x1d,_0x7d89x1e,_0x7d89x5/ 2,_0x7d89x1e);_0x7d89x2[_0x961e[10]]();_0x7d89x2[_0x961e[7]](_0x7d89x5/ 2,_0x7d89x1e);_0x7d89x2[_0x961e[8]](_0x7d89x5/ 2,2* _0x7d89x6/ 3);_0x7d89x2[_0x961e[7]](_0x7d89x5/ 2,_0x7d89x6/ 3);_0x7d89x2[_0x961e[8]](0,_0x7d89x6/ 3);_0x7d89x2[_0x961e[7]](_0x7d89x5/ 2,_0x7d89x6/ 3);_0x7d89x2[_0x961e[8]](_0x7d89x5,_0x7d89x6/ 3);_0x7d89x2[_0x961e[7]](_0x7d89x5/ 2,2* _0x7d89x6/ 3);_0x7d89x2[_0x961e[8]](0,_0x7d89x6);_0x7d89x2[_0x961e[7]](_0x7d89x5/ 2,2* _0x7d89x6/ 3);_0x7d89x2[_0x961e[8]](_0x7d89x5,_0x7d89x6);_0x7d89x2[_0x961e[9]]()}};mxCellRenderer[_0x961e[0]][_0x961e[12]][_0x961e[56]]= _0x7d89x25;function _0x7d89x26(){}_0x7d89x26[_0x961e[0]]= new mxCylinder();_0x7d89x26[_0x961e[0]][_0x961e[1]]= _0x7d89x26;_0x7d89x26[_0x961e[0]][_0x961e[2]]= 10;_0x7d89x26[_0x961e[0]][_0x961e[54]]= true;_0x7d89x26[_0x961e[0]][_0x961e[3]]= function(_0x7d89x2,_0x7d89x3,_0x7d89x4,_0x7d89x5,_0x7d89x6,_0x7d89x7){var _0x7d89x27=mxUtils[_0x961e[5]](this[_0x961e[4]],_0x961e[2],this[_0x961e[2]]);var _0x7d89x1d=_0x7d89x27* 2/ 3;var _0x7d89x1e=_0x7d89x27;if(!_0x7d89x7){_0x7d89x2[_0x961e[7]](_0x7d89x5/ 2,_0x7d89x1e);_0x7d89x2[_0x961e[55]](_0x7d89x5/ 2- _0x7d89x1d,_0x7d89x1e,_0x7d89x5/ 2- _0x7d89x1d,0,_0x7d89x5/ 2,0);_0x7d89x2[_0x961e[55]](_0x7d89x5/ 2+ _0x7d89x1d,0,_0x7d89x5/ 2+ _0x7d89x1d,_0x7d89x1e,_0x7d89x5/ 2,_0x7d89x1e);_0x7d89x2[_0x961e[10]]();_0x7d89x2[_0x961e[7]](_0x7d89x5/ 2,_0x7d89x1e);_0x7d89x2[_0x961e[8]](_0x7d89x5/ 2,_0x7d89x6);_0x7d89x2[_0x961e[9]]()}};mxCellRenderer[_0x961e[0]][_0x961e[12]][_0x961e[57]]= _0x7d89x26;function _0x7d89x28(){}_0x7d89x28[_0x961e[0]]= new mxCylinder();_0x7d89x28[_0x961e[0]][_0x961e[1]]= _0x7d89x28;_0x7d89x28[_0x961e[0]][_0x961e[58]]= 32;_0x7d89x28[_0x961e[0]][_0x961e[59]]= 12;_0x7d89x28[_0x961e[0]][_0x961e[3]]= function(_0x7d89x2,_0x7d89x3,_0x7d89x4,_0x7d89x5,_0x7d89x6,_0x7d89x7){var _0x7d89xe=mxUtils[_0x961e[5]](this[_0x961e[4]],_0x961e[58],this[_0x961e[58]]);var _0x7d89xf=mxUtils[_0x961e[5]](this[_0x961e[4]],_0x961e[59],this[_0x961e[59]]);var _0x7d89x29=_0x7d89xe/ 2;var _0x7d89x2a=_0x7d89x29+ _0x7d89xe/ 2;var _0x7d89x2b=0.3* _0x7d89x6- _0x7d89xf/ 2;var _0x7d89x2c=0.7* _0x7d89x6- _0x7d89xf/ 2;if(_0x7d89x7){_0x7d89x2[_0x961e[7]](_0x7d89x29,_0x7d89x2b);_0x7d89x2[_0x961e[8]](_0x7d89x2a,_0x7d89x2b);_0x7d89x2[_0x961e[8]](_0x7d89x2a,_0x7d89x2b+ _0x7d89xf);_0x7d89x2[_0x961e[8]](_0x7d89x29,_0x7d89x2b+ _0x7d89xf);_0x7d89x2[_0x961e[7]](_0x7d89x29,_0x7d89x2c);_0x7d89x2[_0x961e[8]](_0x7d89x2a,_0x7d89x2c);_0x7d89x2[_0x961e[8]](_0x7d89x2a,_0x7d89x2c+ _0x7d89xf);_0x7d89x2[_0x961e[8]](_0x7d89x29,_0x7d89x2c+ _0x7d89xf);_0x7d89x2[_0x961e[9]]()}else {_0x7d89x2[_0x961e[7]](_0x7d89x29,0);_0x7d89x2[_0x961e[8]](_0x7d89x5,0);_0x7d89x2[_0x961e[8]](_0x7d89x5,_0x7d89x6);_0x7d89x2[_0x961e[8]](_0x7d89x29,_0x7d89x6);_0x7d89x2[_0x961e[8]](_0x7d89x29,_0x7d89x2c+ _0x7d89xf);_0x7d89x2[_0x961e[8]](0,_0x7d89x2c+ _0x7d89xf);_0x7d89x2[_0x961e[8]](0,_0x7d89x2c);_0x7d89x2[_0x961e[8]](_0x7d89x29,_0x7d89x2c);_0x7d89x2[_0x961e[8]](_0x7d89x29,_0x7d89x2b+ _0x7d89xf);_0x7d89x2[_0x961e[8]](0,_0x7d89x2b+ _0x7d89xf);_0x7d89x2[_0x961e[8]](0,_0x7d89x2b);_0x7d89x2[_0x961e[8]](_0x7d89x29,_0x7d89x2b);_0x7d89x2[_0x961e[10]]();_0x7d89x2[_0x961e[9]]()}};mxCellRenderer[_0x961e[0]][_0x961e[12]][_0x961e[60]]= _0x7d89x28;function _0x7d89x2d(){}_0x7d89x2d[_0x961e[0]]= new mxDoubleEllipse();_0x7d89x2d[_0x961e[0]][_0x961e[1]]= _0x7d89x2d;_0x7d89x2d[_0x961e[0]][_0x961e[61]]= true;_0x7d89x2d[_0x961e[0]][_0x961e[50]]= function(_0x7d89x15,_0x7d89x3,_0x7d89x4,_0x7d89x5,_0x7d89x6){var _0x7d89x18=Math[_0x961e[6]](4,Math[_0x961e[6]](_0x7d89x5/ 5,_0x7d89x6/ 5));if(_0x7d89x5> 0&& _0x7d89x6> 0){_0x7d89x15[_0x961e[62]](_0x7d89x3+ _0x7d89x18,_0x7d89x4+ _0x7d89x18,_0x7d89x5- 2* _0x7d89x18,_0x7d89x6- 2* _0x7d89x18);_0x7d89x15[_0x961e[63]]()};_0x7d89x15[_0x961e[64]](false);if(this[_0x961e[61]]){_0x7d89x15[_0x961e[62]](_0x7d89x3,_0x7d89x4,_0x7d89x5,_0x7d89x6);_0x7d89x15[_0x961e[29]]()}};mxCellRenderer[_0x961e[0]][_0x961e[12]][_0x961e[65]]= _0x7d89x2d;function _0x7d89x2e(){}_0x7d89x2e[_0x961e[0]]= new _0x7d89x2d();_0x7d89x2e[_0x961e[0]][_0x961e[1]]= _0x7d89x2e;_0x7d89x2e[_0x961e[0]][_0x961e[61]]= false;mxCellRenderer[_0x961e[0]][_0x961e[12]][_0x961e[66]]= _0x7d89x2e;var _0x7d89x2f=mxImageExport[_0x961e[0]][_0x961e[67]];mxImageExport[_0x961e[0]][_0x961e[67]]= function(){_0x7d89x2f[_0x961e[30]](this,arguments);function _0x7d89x30(_0x7d89x31){return {drawShape:function(_0x7d89x32,_0x7d89x33,_0x7d89x34,_0x7d89x35){var _0x7d89x3=_0x7d89x34[_0x961e[68]];var _0x7d89x4=_0x7d89x34[_0x961e[69]];var _0x7d89x5=_0x7d89x34[_0x961e[70]];var _0x7d89x6=_0x7d89x34[_0x961e[71]];if(_0x7d89x35){var _0x7d89x18=Math[_0x961e[6]](4,Math[_0x961e[6]](_0x7d89x5/ 5,_0x7d89x6/ 5));_0x7d89x3+= _0x7d89x18;_0x7d89x4+= _0x7d89x18;_0x7d89x5-= 2* _0x7d89x18;_0x7d89x6-= 2* _0x7d89x18;if(_0x7d89x5> 0&& _0x7d89x6> 0){_0x7d89x32[_0x961e[62]](_0x7d89x3,_0x7d89x4,_0x7d89x5,_0x7d89x6)};return true}else {_0x7d89x32[_0x961e[63]]();if(_0x7d89x31){_0x7d89x32[_0x961e[62]](_0x7d89x3,_0x7d89x4,_0x7d89x5,_0x7d89x6);_0x7d89x32[_0x961e[29]]()}}}}}this[_0x961e[72]][_0x961e[65]]= _0x7d89x30(true);this[_0x961e[72]][_0x961e[66]]= _0x7d89x30(false)};function _0x7d89x36(){mxArrow[_0x961e[24]](this)}mxUtils[_0x961e[25]](_0x7d89x36,mxArrow);_0x7d89x36[_0x961e[0]][_0x961e[73]]= function(_0x7d89x15,_0x7d89x37){var _0x7d89x1d=10;var _0x7d89x38=_0x7d89x37[0];var _0x7d89x39=_0x7d89x37[_0x7d89x37[_0x961e[74]]- 1];var _0x7d89xe=_0x7d89x39[_0x961e[68]]- _0x7d89x38[_0x961e[68]];var _0x7d89xf=_0x7d89x39[_0x961e[69]]- _0x7d89x38[_0x961e[69]];var _0x7d89x3a=Math[_0x961e[75]](_0x7d89xe* _0x7d89xe+ _0x7d89xf* _0x7d89xf);var _0x7d89x3b=_0x7d89x3a;var _0x7d89x3c=_0x7d89xe/ _0x7d89x3a;var _0x7d89x3d=_0x7d89xf/ _0x7d89x3a;var _0x7d89x3e=_0x7d89x3b* _0x7d89x3c;var _0x7d89x3f=_0x7d89x3b* _0x7d89x3d;var _0x7d89x40=_0x7d89x1d* _0x7d89x3d/ 3;var _0x7d89x41=-_0x7d89x1d* _0x7d89x3c/ 3;var _0x7d89x42=_0x7d89x38[_0x961e[68]]- _0x7d89x40/ 2;var _0x7d89x43=_0x7d89x38[_0x961e[69]]- _0x7d89x41/ 2;var _0x7d89x44=_0x7d89x42+ _0x7d89x40;var _0x7d89x45=_0x7d89x43+ _0x7d89x41;var _0x7d89x46=_0x7d89x44+ _0x7d89x3e;var _0x7d89x47=_0x7d89x45+ _0x7d89x3f;var _0x7d89x48=_0x7d89x46+ _0x7d89x40;var _0x7d89x49=_0x7d89x47+ _0x7d89x41;var _0x7d89x4a=_0x7d89x48- 3* _0x7d89x40;var _0x7d89x4b=_0x7d89x49- 3* _0x7d89x41;_0x7d89x15[_0x961e[28]]();_0x7d89x15[_0x961e[7]](_0x7d89x44,_0x7d89x45);_0x7d89x15[_0x961e[8]](_0x7d89x46,_0x7d89x47);_0x7d89x15[_0x961e[7]](_0x7d89x4a+ _0x7d89x40,_0x7d89x4b+ _0x7d89x41);_0x7d89x15[_0x961e[8]](_0x7d89x42,_0x7d89x43);_0x7d89x15[_0x961e[29]]()};mxCellRenderer[_0x961e[0]][_0x961e[12]][_0x961e[76]]= _0x7d89x36;mxMarker[_0x961e[78]](_0x961e[77],function(_0x7d89x32,_0x7d89x1a,_0x7d89x4c,_0x7d89x39,_0x7d89x4d,_0x7d89x4e,_0x7d89x4f,_0x7d89x50,_0x7d89x51,_0x7d89x52){var _0x7d89x3c=_0x7d89x4d* (_0x7d89x4f+ _0x7d89x51+ 1);var _0x7d89x3d=_0x7d89x4e* (_0x7d89x4f+ _0x7d89x51+ 1);return function(){_0x7d89x32[_0x961e[28]]();_0x7d89x32[_0x961e[7]](_0x7d89x39[_0x961e[68]]- _0x7d89x3c/ 2- _0x7d89x3d/ 2,_0x7d89x39[_0x961e[69]]- _0x7d89x3d/ 2+ _0x7d89x3c/ 2);_0x7d89x32[_0x961e[8]](_0x7d89x39[_0x961e[68]]+ _0x7d89x3d/ 2- 3* _0x7d89x3c/ 2,_0x7d89x39[_0x961e[69]]- 3* _0x7d89x3d/ 2- _0x7d89x3c/ 2);_0x7d89x32[_0x961e[29]]()}});var _0x7d89x53=-99;if( typeof (mxVertexHandler)!= _0x961e[79]){function _0x7d89x54(_0x7d89x33){mxVertexHandler[_0x961e[24]](this,_0x7d89x33)}mxUtils[_0x961e[25]](_0x7d89x54,mxVertexHandler);_0x7d89x54[_0x961e[0]][_0x961e[80]]= false;_0x7d89x54[_0x961e[0]][_0x961e[81]]= function(){this[_0x961e[82]]= mxUtils[_0x961e[5]](this[_0x961e[83]][_0x961e[4]],mxConstants.STYLE_HORIZONTAL,true);var _0x7d89x55=this[_0x961e[83]][_0x961e[85]][_0x961e[84]];if(this[_0x961e[86]]!= null){var _0x7d89x34= new mxRectangle(0,0,this[_0x961e[86]][_0x961e[70]],this[_0x961e[86]][_0x961e[71]]);this[_0x961e[87]]= new mxImageShape(_0x7d89x34,this[_0x961e[86]][_0x961e[88]])}else {var _0x7d89x4f=10;var _0x7d89x34= new mxRectangle(0,0,_0x7d89x4f,_0x7d89x4f);this[_0x961e[87]]= new mxRhombus(_0x7d89x34,mxConstants.HANDLE_FILLCOLOR,mxConstants.HANDLE_STROKECOLOR)};this[_0x961e[87]][_0x961e[89]]= (_0x7d89x55[_0x961e[89]]!= mxConstants[_0x961e[90]])?mxConstants[_0x961e[91]]:mxConstants[_0x961e[90]];this[_0x961e[87]][_0x961e[81]](_0x7d89x55[_0x961e[93]]()[_0x961e[92]]());this[_0x961e[87]][_0x961e[95]][_0x961e[4]][_0x961e[94]]= this[_0x961e[96]]();mxEvent[_0x961e[97]](this[_0x961e[87]][_0x961e[95]],_0x7d89x55,this[_0x961e[83]]);mxVertexHandler[_0x961e[0]][_0x961e[81]][_0x961e[30]](this,arguments)};_0x7d89x54[_0x961e[0]][_0x961e[96]]= function(){return _0x961e[98]};_0x7d89x54[_0x961e[0]][_0x961e[99]]= function(){mxVertexHandler[_0x961e[0]][_0x961e[99]][_0x961e[30]](this,arguments);var _0x7d89x4f=this[_0x961e[87]][_0x961e[100]][_0x961e[70]];this[_0x961e[87]][_0x961e[100]]= this[_0x961e[101]](_0x7d89x4f);this[_0x961e[87]][_0x961e[99]]()};_0x7d89x54[_0x961e[0]][_0x961e[102]]= function(){mxVertexHandler[_0x961e[0]][_0x961e[102]][_0x961e[30]](this,arguments);if(this[_0x961e[87]]!= null){this[_0x961e[87]][_0x961e[102]]();this[_0x961e[87]]= null}};_0x7d89x54[_0x961e[0]][_0x961e[103]]= function(_0x7d89x56){if(_0x7d89x56[_0x961e[104]](this[_0x961e[87]])){return _0x7d89x53};return mxVertexHandler[_0x961e[0]][_0x961e[103]][_0x961e[30]](this,arguments)};_0x7d89x54[_0x961e[0]][_0x961e[105]]= function(_0x7d89x57,_0x7d89x56){if(!_0x7d89x56[_0x961e[106]]()&& this[_0x961e[107]]== _0x7d89x53){var _0x7d89x58= new mxPoint(_0x7d89x56[_0x961e[108]](),_0x7d89x56[_0x961e[109]]());this[_0x961e[110]](_0x7d89x58);var _0x7d89x59=this[_0x961e[84]][_0x961e[112]](_0x7d89x56[_0x961e[111]]());var _0x7d89x5a=this[_0x961e[84]][_0x961e[93]]()[_0x961e[113]];if(_0x7d89x59&& this[_0x961e[80]]){_0x7d89x58[_0x961e[68]]= this[_0x961e[84]][_0x961e[114]](_0x7d89x58[_0x961e[68]]/ _0x7d89x5a)* _0x7d89x5a;_0x7d89x58[_0x961e[69]]= this[_0x961e[84]][_0x961e[114]](_0x7d89x58[_0x961e[69]]/ _0x7d89x5a)* _0x7d89x5a};this[_0x961e[115]](_0x7d89x58);this[_0x961e[116]](this[_0x961e[87]],_0x7d89x58[_0x961e[68]],_0x7d89x58[_0x961e[69]]);this[_0x961e[83]][_0x961e[85]][_0x961e[84]][_0x961e[117]][_0x961e[99]](this[_0x961e[83]],true);_0x7d89x56[_0x961e[118]]()}else {mxVertexHandler[_0x961e[0]][_0x961e[105]][_0x961e[30]](this,arguments)}};_0x7d89x54[_0x961e[0]][_0x961e[119]]= function(_0x7d89x57,_0x7d89x56){if(!_0x7d89x56[_0x961e[106]]()&& this[_0x961e[107]]== _0x7d89x53){this[_0x961e[120]]();this[_0x961e[121]]();_0x7d89x56[_0x961e[118]]()}else {mxVertexHandler[_0x961e[0]][_0x961e[119]][_0x961e[30]](this,arguments)}};_0x7d89x54[_0x961e[0]][_0x961e[101]]= function(_0x7d89x4f){var _0x7d89x5b=this[_0x961e[83]][_0x961e[123]][_0x961e[122]]();var _0x7d89x5c=mxUtils[_0x961e[124]](_0x7d89x5b);var _0x7d89x5d=Math[_0x961e[125]](_0x7d89x5c);var _0x7d89x5e=Math[_0x961e[126]](_0x7d89x5c);var _0x7d89x34= new mxRectangle(this[_0x961e[83]][_0x961e[68]],this[_0x961e[83]][_0x961e[69]],this[_0x961e[83]][_0x961e[70]],this[_0x961e[83]][_0x961e[71]]);if(this[_0x961e[83]][_0x961e[123]][_0x961e[127]]()){var _0x7d89x5f=(_0x7d89x34[_0x961e[70]]- _0x7d89x34[_0x961e[71]])/ 2;_0x7d89x34[_0x961e[68]]+= _0x7d89x5f;_0x7d89x34[_0x961e[69]]-= _0x7d89x5f;var _0x7d89x23=_0x7d89x34[_0x961e[70]];_0x7d89x34[_0x961e[70]]= _0x7d89x34[_0x961e[71]];_0x7d89x34[_0x961e[71]]= _0x7d89x23};var _0x7d89x60=this[_0x961e[128]](_0x7d89x34);if(this[_0x961e[83]][_0x961e[123]][_0x961e[129]]){_0x7d89x60[_0x961e[68]]= 2* _0x7d89x34[_0x961e[68]]+ _0x7d89x34[_0x961e[70]]- _0x7d89x60[_0x961e[68]]};if(this[_0x961e[83]][_0x961e[123]][_0x961e[130]]){_0x7d89x60[_0x961e[69]]= 2* _0x7d89x34[_0x961e[69]]+ _0x7d89x34[_0x961e[71]]- _0x7d89x60[_0x961e[69]]};_0x7d89x60= mxUtils[_0x961e[133]](_0x7d89x60,_0x7d89x5d,_0x7d89x5e, new mxPoint(this[_0x961e[83]][_0x961e[131]](),this[_0x961e[83]][_0x961e[132]]()));return new mxRectangle(_0x7d89x60[_0x961e[68]]- _0x7d89x4f/ 2,_0x7d89x60[_0x961e[69]]- _0x7d89x4f/ 2,_0x7d89x4f,_0x7d89x4f)};_0x7d89x54[_0x961e[0]][_0x961e[128]]= function(_0x7d89x34){return null};_0x7d89x54[_0x961e[0]][_0x961e[115]]= function(_0x7d89x58){};_0x7d89x54[_0x961e[0]][_0x961e[110]]= function(_0x7d89x58){_0x7d89x58[_0x961e[68]]= Math[_0x961e[34]](this[_0x961e[83]][_0x961e[68]],Math[_0x961e[6]](this[_0x961e[83]][_0x961e[68]]+ this[_0x961e[83]][_0x961e[70]],_0x7d89x58[_0x961e[68]]));_0x7d89x58[_0x961e[69]]= Math[_0x961e[34]](this[_0x961e[83]][_0x961e[69]],Math[_0x961e[6]](this[_0x961e[83]][_0x961e[69]]+ this[_0x961e[83]][_0x961e[71]],_0x7d89x58[_0x961e[69]]))};_0x7d89x54[_0x961e[0]][_0x961e[120]]= function(){};function _0x7d89x61(_0x7d89x33){_0x7d89x54[_0x961e[24]](this,_0x7d89x33)}mxUtils[_0x961e[25]](_0x7d89x61,_0x7d89x54);_0x7d89x61[_0x961e[0]][_0x961e[128]]= function(_0x7d89x34){var _0x7d89x5a=this[_0x961e[84]][_0x961e[93]]()[_0x961e[113]];var _0x7d89xb=Math[_0x961e[6]](_0x7d89x34[_0x961e[70]],mxUtils[_0x961e[5]](this[_0x961e[83]][_0x961e[4]],_0x961e[14],60)* _0x7d89x5a);var _0x7d89xc=Math[_0x961e[6]](_0x7d89x34[_0x961e[71]],mxUtils[_0x961e[5]](this[_0x961e[83]][_0x961e[4]],_0x961e[15],20)* _0x7d89x5a);var _0x7d89xd=mxUtils[_0x961e[5]](this[_0x961e[83]][_0x961e[4]],_0x961e[16],_0x961e[17]);var _0x7d89x3=(_0x7d89xd== _0x961e[18])?_0x7d89x34[_0x961e[68]]+ _0x7d89xb:_0x7d89x34[_0x961e[68]]+ _0x7d89x34[_0x961e[70]]- _0x7d89xb;return new mxPoint(_0x7d89x3,_0x7d89x34[_0x961e[69]]+ _0x7d89xc)};_0x7d89x61[_0x961e[0]][_0x961e[115]]= function(_0x7d89x58){var _0x7d89x5b=this[_0x961e[83]][_0x961e[123]][_0x961e[122]]();var _0x7d89x5c=mxUtils[_0x961e[124]](_0x7d89x5b);var _0x7d89x5d=Math[_0x961e[125]](-_0x7d89x5c);var _0x7d89x5e=Math[_0x961e[126]](-_0x7d89x5c);var _0x7d89x34= new mxRectangle(this[_0x961e[83]][_0x961e[68]],this[_0x961e[83]][_0x961e[69]],this[_0x961e[83]][_0x961e[70]],this[_0x961e[83]][_0x961e[71]]);if(this[_0x961e[83]][_0x961e[123]][_0x961e[127]]()){var _0x7d89x5f=(_0x7d89x34[_0x961e[70]]- _0x7d89x34[_0x961e[71]])/ 2;_0x7d89x34[_0x961e[68]]+= _0x7d89x5f;_0x7d89x34[_0x961e[69]]-= _0x7d89x5f;var _0x7d89x23=_0x7d89x34[_0x961e[70]];_0x7d89x34[_0x961e[70]]= _0x7d89x34[_0x961e[71]];_0x7d89x34[_0x961e[71]]= _0x7d89x23};var _0x7d89x60= new mxPoint(_0x7d89x58[_0x961e[68]],_0x7d89x58[_0x961e[69]]);_0x7d89x60= mxUtils[_0x961e[133]](_0x7d89x60,_0x7d89x5d,_0x7d89x5e, new mxPoint(this[_0x961e[83]][_0x961e[131]](),this[_0x961e[83]][_0x961e[132]]()));if(this[_0x961e[83]][_0x961e[123]][_0x961e[129]]){_0x7d89x60[_0x961e[68]]= 2* _0x7d89x34[_0x961e[68]]+ _0x7d89x34[_0x961e[70]]- _0x7d89x60[_0x961e[68]]};if(this[_0x961e[83]][_0x961e[123]][_0x961e[130]]){_0x7d89x60[_0x961e[69]]= 2* _0x7d89x34[_0x961e[69]]+ _0x7d89x34[_0x961e[71]]- _0x7d89x60[_0x961e[69]]};var _0x7d89x62=this[_0x961e[134]](_0x7d89x60,_0x7d89x34);if(_0x7d89x62!= null){if(this[_0x961e[83]][_0x961e[123]][_0x961e[129]]){_0x7d89x62[_0x961e[68]]= 2* _0x7d89x34[_0x961e[68]]+ _0x7d89x34[_0x961e[70]]- _0x7d89x62[_0x961e[68]]};if(this[_0x961e[83]][_0x961e[123]][_0x961e[130]]){_0x7d89x62[_0x961e[69]]= 2* _0x7d89x34[_0x961e[69]]+ _0x7d89x34[_0x961e[71]]- _0x7d89x62[_0x961e[69]]};_0x7d89x5d= Math[_0x961e[125]](_0x7d89x5c);_0x7d89x5e= Math[_0x961e[126]](_0x7d89x5c);_0x7d89x62= mxUtils[_0x961e[133]](_0x7d89x62,_0x7d89x5d,_0x7d89x5e, new mxPoint(this[_0x961e[83]][_0x961e[131]](),this[_0x961e[83]][_0x961e[132]]()));_0x7d89x58[_0x961e[68]]= _0x7d89x62[_0x961e[68]];_0x7d89x58[_0x961e[69]]= _0x7d89x62[_0x961e[69]]}};_0x7d89x61[_0x961e[0]][_0x961e[134]]= function(_0x7d89x60,_0x7d89x34){var _0x7d89xd=mxUtils[_0x961e[5]](this[_0x961e[83]][_0x961e[4]],_0x961e[16],_0x961e[17]);var _0x7d89xb=(_0x7d89xd== _0x961e[18])?_0x7d89x60[_0x961e[68]]- _0x7d89x34[_0x961e[68]]:_0x7d89x34[_0x961e[68]]+ _0x7d89x34[_0x961e[70]]- _0x7d89x60[_0x961e[68]];var _0x7d89xc=_0x7d89x60[_0x961e[69]]- _0x7d89x34[_0x961e[69]];var _0x7d89x5a=this[_0x961e[84]][_0x961e[93]]()[_0x961e[113]];this[_0x961e[83]][_0x961e[4]][_0x961e[14]]= Math[_0x961e[135]](Math[_0x961e[34]](1,_0x7d89xb)/ _0x7d89x5a);this[_0x961e[83]][_0x961e[4]][_0x961e[15]]= Math[_0x961e[135]](Math[_0x961e[34]](1,_0x7d89xc)/ _0x7d89x5a)};_0x7d89x61[_0x961e[0]][_0x961e[120]]= function(){var _0x7d89x63=this[_0x961e[84]][_0x961e[136]]();_0x7d89x63[_0x961e[137]]();try{this[_0x961e[83]][_0x961e[85]][_0x961e[84]][_0x961e[139]](_0x961e[14],this[_0x961e[83]][_0x961e[4]][_0x961e[14]],[this[_0x961e[83]][_0x961e[138]]]);this[_0x961e[83]][_0x961e[85]][_0x961e[84]][_0x961e[139]](_0x961e[15],this[_0x961e[83]][_0x961e[4]][_0x961e[15]],[this[_0x961e[83]][_0x961e[138]]])}finally{_0x7d89x63[_0x961e[140]]()}};function _0x7d89x64(_0x7d89x33){_0x7d89x61[_0x961e[24]](this,_0x7d89x33)}mxUtils[_0x961e[25]](_0x7d89x64,_0x7d89x61);_0x7d89x64[_0x961e[0]][_0x961e[128]]= function(_0x7d89x34){var _0x7d89x5a=this[_0x961e[84]][_0x961e[93]]()[_0x961e[113]];var _0x7d89x65=mxUtils[_0x961e[5]](this[_0x961e[83]][_0x961e[4]],mxConstants.STYLE_STARTSIZE,mxConstants.DEFAULT_STARTSIZE);return new mxPoint(_0x7d89x34[_0x961e[68]]+ _0x7d89x34[_0x961e[70]]/ 2,_0x7d89x34[_0x961e[69]]+ Math[_0x961e[6]](_0x7d89x34[_0x961e[71]],_0x7d89x65* _0x7d89x5a))};_0x7d89x64[_0x961e[0]][_0x961e[134]]= function(_0x7d89x58,_0x7d89x34){_0x7d89x58[_0x961e[68]]= _0x7d89x34[_0x961e[68]]+ _0x7d89x34[_0x961e[70]]/ 2;startSize= _0x7d89x58[_0x961e[69]]- _0x7d89x34[_0x961e[69]];var _0x7d89x5a=this[_0x961e[84]][_0x961e[93]]()[_0x961e[113]];this[_0x961e[83]][_0x961e[4]][_0x961e[141]]= Math[_0x961e[135]](Math[_0x961e[34]](1,startSize)/ _0x7d89x5a);return _0x7d89x58};_0x7d89x64[_0x961e[0]][_0x961e[120]]= function(){this[_0x961e[83]][_0x961e[85]][_0x961e[84]][_0x961e[139]](_0x961e[141],this[_0x961e[83]][_0x961e[4]][_0x961e[141]],[this[_0x961e[83]][_0x961e[138]]])};function _0x7d89x66(_0x7d89x33){_0x7d89x61[_0x961e[24]](this,_0x7d89x33)}mxUtils[_0x961e[25]](_0x7d89x66,_0x7d89x61);_0x7d89x66[_0x961e[0]][_0x961e[142]]= 20;_0x7d89x66[_0x961e[0]][_0x961e[143]]= 1;_0x7d89x66[_0x961e[0]][_0x961e[128]]= function(_0x7d89x34){var _0x7d89x5a=this[_0x961e[84]][_0x961e[93]]()[_0x961e[113]];var _0x7d89x67=Math[_0x961e[6]](_0x7d89x34[_0x961e[70]],Math[_0x961e[6]](_0x7d89x34[_0x961e[71]],mxUtils[_0x961e[5]](this[_0x961e[83]][_0x961e[4]],_0x961e[2],this[_0x961e[142]])* _0x7d89x5a/ this[_0x961e[143]]));return new mxPoint(_0x7d89x34[_0x961e[68]]+ _0x7d89x67,_0x7d89x34[_0x961e[69]]+ _0x7d89x67)};_0x7d89x66[_0x961e[0]][_0x961e[134]]= function(_0x7d89x60,_0x7d89x34){var _0x7d89x4f=Math[_0x961e[34]](0,Math[_0x961e[6]](Math[_0x961e[6]](_0x7d89x34[_0x961e[70]]/ this[_0x961e[143]],_0x7d89x60[_0x961e[68]]- _0x7d89x34[_0x961e[68]]),Math[_0x961e[6]](_0x7d89x34[_0x961e[71]]/ this[_0x961e[143]],_0x7d89x60[_0x961e[69]]- _0x7d89x34[_0x961e[69]])));var _0x7d89x5a=this[_0x961e[84]][_0x961e[93]]()[_0x961e[113]];this[_0x961e[83]][_0x961e[4]][_0x961e[2]]= Math[_0x961e[135]](Math[_0x961e[34]](1,_0x7d89x4f)/ _0x7d89x5a)* this[_0x961e[143]];return new mxPoint(_0x7d89x34[_0x961e[68]]+ _0x7d89x4f,_0x7d89x34[_0x961e[69]]+ _0x7d89x4f)};_0x7d89x66[_0x961e[0]][_0x961e[120]]= function(){this[_0x961e[83]][_0x961e[85]][_0x961e[84]][_0x961e[139]](_0x961e[2],this[_0x961e[83]][_0x961e[4]][_0x961e[2]],[this[_0x961e[83]][_0x961e[138]]])};function _0x7d89x68(_0x7d89x33){_0x7d89x66[_0x961e[24]](this,_0x7d89x33)}mxUtils[_0x961e[25]](_0x7d89x68,_0x7d89x66);_0x7d89x68[_0x961e[0]][_0x961e[142]]= 30;_0x7d89x68[_0x961e[0]][_0x961e[143]]= 2;function _0x7d89x69(_0x7d89x33){_0x7d89x66[_0x961e[24]](this,_0x7d89x33)}mxUtils[_0x961e[25]](_0x7d89x69,_0x7d89x66);_0x7d89x69[_0x961e[0]][_0x961e[142]]= 30;_0x7d89x69[_0x961e[0]][_0x961e[143]]= 1;_0x7d89x69[_0x961e[0]][_0x961e[128]]= function(_0x7d89x34){var _0x7d89x5a=this[_0x961e[84]][_0x961e[93]]()[_0x961e[113]];var _0x7d89x67=Math[_0x961e[6]](_0x7d89x34[_0x961e[70]],Math[_0x961e[6]](_0x7d89x34[_0x961e[71]],mxUtils[_0x961e[5]](this[_0x961e[83]][_0x961e[4]],_0x961e[2],this[_0x961e[142]])* _0x7d89x5a/ this[_0x961e[143]]));return new mxPoint(_0x7d89x34[_0x961e[68]]+ _0x7d89x34[_0x961e[70]]- _0x7d89x67,_0x7d89x34[_0x961e[69]]+ _0x7d89x67)};_0x7d89x69[_0x961e[0]][_0x961e[134]]= function(_0x7d89x60,_0x7d89x34){var _0x7d89x4f=Math[_0x961e[34]](0,Math[_0x961e[6]](Math[_0x961e[6]](_0x7d89x34[_0x961e[70]]/ this[_0x961e[143]],_0x7d89x60[_0x961e[68]]- _0x7d89x34[_0x961e[68]]+ _0x7d89x34[_0x961e[70]]),Math[_0x961e[6]](_0x7d89x34[_0x961e[71]]/ this[_0x961e[143]],_0x7d89x60[_0x961e[69]]- _0x7d89x34[_0x961e[69]])));var _0x7d89x5a=this[_0x961e[84]][_0x961e[93]]()[_0x961e[113]];this[_0x961e[83]][_0x961e[4]][_0x961e[2]]= Math[_0x961e[135]](Math[_0x961e[34]](1,_0x7d89x4f)/ _0x7d89x5a)* this[_0x961e[143]];return new mxPoint(_0x7d89x34[_0x961e[68]]+ _0x7d89x34[_0x961e[70]]- _0x7d89x4f,_0x7d89x34[_0x961e[69]]+ _0x7d89x4f)};function _0x7d89x6a(_0x7d89x33){_0x7d89x66[_0x961e[24]](this,_0x7d89x33)}mxUtils[_0x961e[25]](_0x7d89x6a,_0x7d89x66);_0x7d89x6a[_0x961e[0]][_0x961e[142]]= 0.2;_0x7d89x6a[_0x961e[0]][_0x961e[143]]= 1;_0x7d89x6a[_0x961e[0]][_0x961e[128]]= function(_0x7d89x34){var _0x7d89x67=mxUtils[_0x961e[5]](this[_0x961e[83]][_0x961e[4]],_0x961e[2],this[_0x961e[142]]);return new mxPoint(_0x7d89x34[_0x961e[68]]+ _0x7d89x34[_0x961e[70]]* _0x7d89x67,_0x7d89x34[_0x961e[69]]+ _0x7d89x34[_0x961e[71]]/ 2)};_0x7d89x6a[_0x961e[0]][_0x961e[134]]= function(_0x7d89x60,_0x7d89x34){var _0x7d89x4f=Math[_0x961e[6]](1,(_0x7d89x60[_0x961e[68]]- _0x7d89x34[_0x961e[68]])/ _0x7d89x34[_0x961e[70]]);this[_0x961e[83]][_0x961e[4]][_0x961e[2]]= _0x7d89x4f;return new mxPoint(_0x7d89x34[_0x961e[68]]+ _0x7d89x4f* _0x7d89x34[_0x961e[70]],_0x7d89x34[_0x961e[69]]+ _0x7d89x34[_0x961e[71]]/ 2)};function _0x7d89x6b(_0x7d89x33){_0x7d89x66[_0x961e[24]](this,_0x7d89x33)}mxUtils[_0x961e[25]](_0x7d89x6b,_0x7d89x66);_0x7d89x6b[_0x961e[0]][_0x961e[142]]= 0.4;_0x7d89x6b[_0x961e[0]][_0x961e[143]]= 1;_0x7d89x6b[_0x961e[0]][_0x961e[128]]= function(_0x7d89x34){var _0x7d89x67=mxUtils[_0x961e[5]](this[_0x961e[83]][_0x961e[4]],_0x961e[2],this[_0x961e[142]]);return new mxPoint(_0x7d89x34[_0x961e[68]]+ _0x7d89x34[_0x961e[70]]/ 2,_0x7d89x34[_0x961e[69]]+ _0x7d89x67* _0x7d89x34[_0x961e[71]]/ 2)};_0x7d89x6b[_0x961e[0]][_0x961e[134]]= function(_0x7d89x60,_0x7d89x34){var _0x7d89x4f=Math[_0x961e[34]](0,Math[_0x961e[6]](1,((_0x7d89x60[_0x961e[69]]- _0x7d89x34[_0x961e[69]])/ _0x7d89x34[_0x961e[71]])* 2));this[_0x961e[83]][_0x961e[4]][_0x961e[2]]= _0x7d89x4f;return new mxPoint(_0x7d89x34[_0x961e[68]]+ _0x7d89x34[_0x961e[70]]/ 2,_0x7d89x34[_0x961e[69]]+ _0x7d89x4f* _0x7d89x34[_0x961e[71]]/ 2)};var _0x7d89x6c={"\x73\x77\x69\x6D\x6C\x61\x6E\x65":_0x7d89x64,"\x66\x6F\x6C\x64\x65\x72":_0x7d89x61,"\x63\x75\x62\x65":_0x7d89x66,"\x63\x61\x72\x64":_0x7d89x68,"\x6E\x6F\x74\x65":_0x7d89x69,"\x73\x74\x65\x70":_0x7d89x6a,"\x74\x61\x70\x65":_0x7d89x6b};var _0x7d89x6d=mxGraph[_0x961e[0]][_0x961e[144]];mxGraph[_0x961e[0]][_0x961e[144]]= function(_0x7d89x33){if(_0x7d89x33!= null){var _0x7d89x6e=_0x7d89x6c[_0x7d89x33[_0x961e[4]][_0x961e[123]]];if(_0x7d89x6e!= null){return new _0x7d89x6e(_0x7d89x33)}};return _0x7d89x6d[_0x961e[30]](this,arguments)}};mxGraph[_0x961e[0]][_0x961e[145]]= function(_0x7d89x6f,_0x7d89x50){if(_0x7d89x6f!= null&& _0x7d89x6f[_0x961e[123]]!= null){if(_0x7d89x6f[_0x961e[123]][_0x961e[146]]!= null){if(_0x7d89x6f[_0x961e[123]][_0x961e[146]]!= null){return _0x7d89x6f[_0x961e[123]][_0x961e[146]][_0x961e[147]]}}else {if(_0x7d89x6f[_0x961e[123]][_0x961e[147]]!= null){return _0x7d89x6f[_0x961e[123]][_0x961e[147]]}}};return null};mxRectangleShape[_0x961e[0]][_0x961e[147]]= [ new mxConnectionConstraint( new mxPoint(0.25,0),true), new mxConnectionConstraint( new mxPoint(0.5,0),true), new mxConnectionConstraint( new mxPoint(0.75,0),true), new mxConnectionConstraint( new mxPoint(0,0.25),true), new mxConnectionConstraint( new mxPoint(0,0.5),true), new mxConnectionConstraint( new mxPoint(0,0.75),true), new mxConnectionConstraint( new mxPoint(1,0.25),true), new mxConnectionConstraint( new mxPoint(1,0.5),true), new mxConnectionConstraint( new mxPoint(1,0.75),true), new mxConnectionConstraint( new mxPoint(0.25,1),true), new mxConnectionConstraint( new mxPoint(0.5,1),true), new mxConnectionConstraint( new mxPoint(0.75,1),true)];mxLabel[_0x961e[0]][_0x961e[147]]= mxRectangleShape[_0x961e[0]][_0x961e[147]];mxImageShape[_0x961e[0]][_0x961e[147]]= mxRectangleShape[_0x961e[0]][_0x961e[147]];mxSwimlane[_0x961e[0]][_0x961e[147]]= mxRectangleShape[_0x961e[0]][_0x961e[147]];_0x7d89x14[_0x961e[0]][_0x961e[147]]= mxRectangleShape[_0x961e[0]][_0x961e[147]];_0x7d89x9[_0x961e[0]][_0x961e[147]]= mxRectangleShape[_0x961e[0]][_0x961e[147]];_0x7d89x10[_0x961e[0]][_0x961e[147]]= mxRectangleShape[_0x961e[0]][_0x961e[147]];_0x7d89x1[_0x961e[0]][_0x961e[147]]= mxRectangleShape[_0x961e[0]][_0x961e[147]];_0x7d89xa[_0x961e[0]][_0x961e[147]]= mxRectangleShape[_0x961e[0]][_0x961e[147]];mxCylinder[_0x961e[0]][_0x961e[147]]= [ new mxConnectionConstraint( new mxPoint(0.15,0.05),false), new mxConnectionConstraint( new mxPoint(0.5,0),true), new mxConnectionConstraint( new mxPoint(0.85,0.05),false), new mxConnectionConstraint( new mxPoint(0,0.3),true), new mxConnectionConstraint( new mxPoint(0,0.5),true), new mxConnectionConstraint( new mxPoint(0,0.7),true), new mxConnectionConstraint( new mxPoint(1,0.3),true), new mxConnectionConstraint( new mxPoint(1,0.5),true), new mxConnectionConstraint( new mxPoint(1,0.7),true), new mxConnectionConstraint( new mxPoint(0.15,0.95),false), new mxConnectionConstraint( new mxPoint(0.5,1),true), new mxConnectionConstraint( new mxPoint(0.85,0.95),false)];_0x7d89x25[_0x961e[0]][_0x961e[147]]= [ new mxConnectionConstraint( new mxPoint(0.25,0.1),false), new mxConnectionConstraint( new mxPoint(0.5,0),false), new mxConnectionConstraint( new mxPoint(0.75,0.1),false), new mxConnectionConstraint( new mxPoint(0,1/ 3),false), new mxConnectionConstraint( new mxPoint(0,1),false), new mxConnectionConstraint( new mxPoint(1,1/ 3),false), new mxConnectionConstraint( new mxPoint(1,1),false), new mxConnectionConstraint( new mxPoint(0.5,0.5),false)];_0x7d89x28[_0x961e[0]][_0x961e[147]]= [ new mxConnectionConstraint( new mxPoint(0.25,0),true), new mxConnectionConstraint( new mxPoint(0.5,0),true), new mxConnectionConstraint( new mxPoint(0.75,0),true), new mxConnectionConstraint( new mxPoint(0,0.3),true), new mxConnectionConstraint( new mxPoint(0,0.7),true), new mxConnectionConstraint( new mxPoint(1,0.25),true), new mxConnectionConstraint( new mxPoint(1,0.5),true), new mxConnectionConstraint( new mxPoint(1,0.75),true), new mxConnectionConstraint( new mxPoint(0.25,1),true), new mxConnectionConstraint( new mxPoint(0.5,1),true), new mxConnectionConstraint( new mxPoint(0.75,1),true)];mxActor[_0x961e[0]][_0x961e[147]]= [ new mxConnectionConstraint( new mxPoint(0.5,0),true), new mxConnectionConstraint( new mxPoint(0.25,0.2),false), new mxConnectionConstraint( new mxPoint(0.1,0.5),false), new mxConnectionConstraint( new mxPoint(0,0.75),true), new mxConnectionConstraint( new mxPoint(0.75,0.25),false), new mxConnectionConstraint( new mxPoint(0.9,0.5),false), new mxConnectionConstraint( new mxPoint(1,0.75),true), new mxConnectionConstraint( new mxPoint(0.25,1),true), new mxConnectionConstraint( new mxPoint(0.5,1),true), new mxConnectionConstraint( new mxPoint(0.75,1),true)];_0x7d89x11[_0x961e[0]][_0x961e[147]]= [ new mxConnectionConstraint( new mxPoint(0,0.35),false), new mxConnectionConstraint( new mxPoint(0,0.5),false), new mxConnectionConstraint( new mxPoint(0,0.65),false), new mxConnectionConstraint( new mxPoint(1,0.35),false), new mxConnectionConstraint( new mxPoint(1,0.5),false), new mxConnectionConstraint( new mxPoint(1,0.65),false), new mxConnectionConstraint( new mxPoint(0.25,1),false), new mxConnectionConstraint( new mxPoint(0.75,0),false)];_0x7d89x13[_0x961e[0]][_0x961e[147]]= [ new mxConnectionConstraint( new mxPoint(0.25,0),true), new mxConnectionConstraint( new mxPoint(0.5,0),true), new mxConnectionConstraint( new mxPoint(0.75,0),true), new mxConnectionConstraint( new mxPoint(0.25,1),true), new mxConnectionConstraint( new mxPoint(0.5,1),true), new mxConnectionConstraint( new mxPoint(0.75,1),true), new mxConnectionConstraint( new mxPoint(0.1,0.25),false), new mxConnectionConstraint( new mxPoint(0.2,0.5),false), new mxConnectionConstraint( new mxPoint(0.1,0.75),false), new mxConnectionConstraint( new mxPoint(0.9,0.25),false), new mxConnectionConstraint( new mxPoint(1,0.5),false), new mxConnectionConstraint( new mxPoint(0.9,0.75),false)];mxLine[_0x961e[0]][_0x961e[147]]= [ new mxConnectionConstraint( new mxPoint(0,0.5),false), new mxConnectionConstraint( new mxPoint(0.25,0.5),false), new mxConnectionConstraint( new mxPoint(0.75,0.5),false), new mxConnectionConstraint( new mxPoint(1,0.5),false)];_0x7d89x26[_0x961e[0]][_0x961e[147]]= [ new mxConnectionConstraint( new mxPoint(0.5,0),false), new mxConnectionConstraint( new mxPoint(0.5,1),false)];mxEllipse[_0x961e[0]][_0x961e[147]]= [ new mxConnectionConstraint( new mxPoint(0,0),true), new mxConnectionConstraint( new mxPoint(1,0),true), new mxConnectionConstraint( new mxPoint(0,1),true), new mxConnectionConstraint( new mxPoint(1,1),true), new mxConnectionConstraint( new mxPoint(0.5,0),true), new mxConnectionConstraint( new mxPoint(0.5,1),true), new mxConnectionConstraint( new mxPoint(0,0.5),true), new mxConnectionConstraint( new mxPoint(1,0.5))];mxDoubleEllipse[_0x961e[0]][_0x961e[147]]= mxEllipse[_0x961e[0]][_0x961e[147]];mxRhombus[_0x961e[0]][_0x961e[147]]= mxEllipse[_0x961e[0]][_0x961e[147]];mxTriangle[_0x961e[0]][_0x961e[147]]= [ new mxConnectionConstraint( new mxPoint(0,0.25),true), new mxConnectionConstraint( new mxPoint(0,0.5),true), new mxConnectionConstraint( new mxPoint(0,0.75),true), new mxConnectionConstraint( new mxPoint(0.5,0),true), new mxConnectionConstraint( new mxPoint(0.5,1),true), new mxConnectionConstraint( new mxPoint(1,0.5),true)];mxHexagon[_0x961e[0]][_0x961e[147]]= [ new mxConnectionConstraint( new mxPoint(0.375,0),true), new mxConnectionConstraint( new mxPoint(0.5,0),true), new mxConnectionConstraint( new mxPoint(0.625,0),true), new mxConnectionConstraint( new mxPoint(0.125,0.25),false), new mxConnectionConstraint( new mxPoint(0,0.5),true), new mxConnectionConstraint( new mxPoint(0.125,0.75),false), new mxConnectionConstraint( new mxPoint(0.875,0.25),false), new mxConnectionConstraint( new mxPoint(0,0.5),true), new mxConnectionConstraint( new mxPoint(1,0.5),true), new mxConnectionConstraint( new mxPoint(0.875,0.75),false), new mxConnectionConstraint( new mxPoint(0.375,1),true), new mxConnectionConstraint( new mxPoint(0.5,1),true), new mxConnectionConstraint( new mxPoint(0.625,1),true)];mxCloud[_0x961e[0]][_0x961e[147]]= [ new mxConnectionConstraint( new mxPoint(0.25,0.25),false), new mxConnectionConstraint( new mxPoint(0.4,0.1),false), new mxConnectionConstraint( new mxPoint(0.16,0.55),false), new mxConnectionConstraint( new mxPoint(0.07,0.4),false), new mxConnectionConstraint( new mxPoint(0.31,0.8),false), new mxConnectionConstraint( new mxPoint(0.13,0.77),false), new mxConnectionConstraint( new mxPoint(0.8,0.8),false), new mxConnectionConstraint( new mxPoint(0.55,0.95),false), new mxConnectionConstraint( new mxPoint(0.875,0.5),false), new mxConnectionConstraint( new mxPoint(0.96,0.7),false), new mxConnectionConstraint( new mxPoint(0.625,0.2),false), new mxConnectionConstraint( new mxPoint(0.88,0.25),false)];mxArrow[_0x961e[0]][_0x961e[147]]= null})() \ No newline at end of file diff --git a/public/assets/plugins/jscripty/js/Sidebar.js b/public/assets/plugins/jscripty/js/Sidebar.js index 8b618e6..7337cb4 100644 --- a/public/assets/plugins/jscripty/js/Sidebar.js +++ b/public/assets/plugins/jscripty/js/Sidebar.js @@ -1,793 +1 @@ -'use strict'; - -/** - * Construcs a new sidebar for the given editor. - */ -function Sidebar(editorUi, container) { - this.editorUi = editorUi; - this.container = container; - this.palettes = new Object(); - this.showTooltips = true; - this.graph = new Graph(document.createElement('div'), null, null, this.editorUi - .editor.graph.getStylesheet()); - this.graph.resetViewOnRootChange = false; - this.graph.foldingEnabled = false; - this.graph.setConnectable(false); - this.graph.autoScroll = false; - this.graph.setTooltips(false); - this.graph.setEnabled(false); - - // Container must be in the DOM for correct HTML rendering - this.graph.container.style.visibility = 'hidden'; - this.graph.container.style.position = 'absolute'; - document.body.appendChild(this.graph.container); - - if (!mxClient.IS_TOUCH) { - mxEvent.addListener(document, 'mouseup', mxUtils.bind(this, function() { - this.showTooltips = true; - })); - - // Enables tooltips after scroll - mxEvent.addListener(container, 'scroll', mxUtils.bind(this, function() { - this.showTooltips = true; - })); - - mxEvent.addListener(document, 'mousedown', mxUtils.bind(this, function() { - this.showTooltips = false; - this.hideTooltip(); - })); - - mxEvent.addListener(document, 'mousemove', mxUtils.bind(this, function(evt) { - var src = mxEvent.getSource(evt); - - while (src != null) { - if (src == this.currentElt) { - return; - } - - src = src.parentNode; - } - - this.hideTooltip(); - })); - - // Handles mouse leaving the window - mxEvent.addListener(document, 'mouseout', mxUtils.bind(this, function(evt) { - if (evt.toElement == null && evt.relatedTarget == null) { - this.hideTooltip(); - } - })); - } - - this.init(); - - // Pre-fetches tooltip image - new Image().src = IMAGE_PATH + '/tooltip.png'; -}; - -/** - * Adds all palettes to the sidebar. - */ -Sidebar.prototype.init = function() { - var dir = STENCIL_PATH; - console.log(dir); - - // this.addImagePalette('entry', mxResources.get('application'), dir + '/', - // '_128x128.png', ['start', 'question', 'input', 'end', 'email'], [mxResources.get('start'), - // mxResources.get('question'), mxResources.get('input'), mxResources.get('end'), mxResources.get('email') - // ]); - this.addImagePalette('entry', mxResources.get('application'), dir + '/', - '_128x128.png', ['start', 'question', 'input', 'end'], [mxResources.get('start'), - mxResources.get('question'), mxResources.get('input'), mxResources.get('end') - ]); - // this.addBpmnPalette(dir, false); - -}; - -/** - * Specifies if tooltips should be visible. Default is true. - */ -Sidebar.prototype.enableTooltips = !mxClient.IS_TOUCH; - -/** - * Specifies the delay for the tooltip. Default is 16 px. - */ -Sidebar.prototype.tooltipBorder = 16; - -/** - * Specifies the delay for the tooltip. Default is 3 px. - */ -Sidebar.prototype.thumbBorder = 3; - -/** - * Specifies the delay for the tooltip. Default is 300 ms. - */ -Sidebar.prototype.tooltipDelay = 300; - -/** - * Specifies if edges should be used as templates if clicked. Default is true. - */ -Sidebar.prototype.installEdges = true; - -/** - * Specifies the URL of the gear image. - */ -Sidebar.prototype.gearImage = STENCIL_PATH + '/clipart/Gear_128x128.png'; - -/** - * Specifies the width of the thumbnails. - */ -Sidebar.prototype.thumbWidth = 34; - -/** - * Specifies the height of the thumbnails. - */ -Sidebar.prototype.thumbHeight = 34; - -/** - * Specifies the padding for the thumbnails. Default is 3. - */ -Sidebar.prototype.thumbPadding = 2; - -/** - * Specifies the size of the sidebar titles. - */ -Sidebar.prototype.sidebarTitleSize = 9; - -/** - * Specifies if titles in the sidebar should be enabled. - */ -Sidebar.prototype.sidebarTitles = false; - -/** - * Specifies if titles in the tooltips should be enabled. - */ -Sidebar.prototype.tooltipTitles = false; - -/** - * Adds all palettes to the sidebar. - */ -Sidebar.prototype.showTooltip = function(elt, cells, title, showLabel) { - if (this.enableTooltips && this.showTooltips) { - if (this.currentElt != elt) { - if (this.thread != null) { - window.clearTimeout(this.thread); - this.thread = null; - } - - var show = mxUtils.bind(this, function() { - // Lazy creation of the DOM nodes and graph instance - if (this.tooltip == null) { - this.tooltip = document.createElement('div'); - this.tooltip.className = 'geSidebarTooltip'; - document.body.appendChild(this.tooltip); - - this.graph2 = new Graph(this.tooltip, null, null, this.editorUi.editor.graph - .getStylesheet()); - this.graph2.view.setTranslate(this.tooltipBorder, this.tooltipBorder); - this.graph2.resetViewOnRootChange = false; - this.graph2.foldingEnabled = false; - this.graph2.autoScroll = false; - this.graph2.setTooltips(false); - this.graph2.setConnectable(false); - this.graph2.setEnabled(false); - - if (!mxClient.IS_SVG) { - this.graph2.view.canvas.style.position = 'relative'; - } - - this.tooltipImage = mxUtils.createImage(IMAGE_PATH + '/tooltip.png'); - this.tooltipImage.style.position = 'absolute'; - this.tooltipImage.style.width = '14px'; - this.tooltipImage.style.height = '27px'; - - document.body.appendChild(this.tooltipImage); - } - - this.tooltip.style.display = 'block'; - this.graph2.labelsVisible = (showLabel == null || showLabel); - this.graph2.model.clear(); - this.graph2.addCells(cells); - - var bounds = this.graph2.getGraphBounds(); - var width = bounds.width + 2 * this.tooltipBorder; - var height = bounds.height + 2 * this.tooltipBorder; - - if (mxClient.IS_QUIRKS) { - width += 4; - height += 4; - this.tooltip.style.overflow = 'hidden'; - } else { - this.tooltip.style.overflow = 'visible'; - } - - this.tooltipImage.style.visibility = 'visible'; - this.tooltip.style.width = width + 'px'; - - // Adds title for entry - if (this.tooltipTitles && title != null && title.length > 0) { - if (this.tooltipTitle == null) { - this.tooltipTitle = document.createElement('div'); - this.tooltipTitle.style.borderTop = '1px solid gray'; - this.tooltipTitle.style.textAlign = 'center'; - this.tooltipTitle.style.width = '100%'; - - // Oversize titles are cut-off currently. Should make tooltip wider later. - this.tooltipTitle.style.overflow = 'hidden'; - - if (mxClient.IS_SVG) { - this.tooltipTitle.style.paddingTop = '2px'; - } else { - this.tooltipTitle.style.position = 'absolute'; - this.tooltipTitle.style.paddingTop = '6px'; - } - - this.tooltip.appendChild(this.tooltipTitle); - } else { - this.tooltipTitle.innerHTML = ''; - } - - this.tooltipTitle.style.display = ''; - mxUtils.write(this.tooltipTitle, title); - - var dy = this.tooltipTitle.offsetHeight + 10; - height += dy; - - if (mxClient.IS_SVG) { - this.tooltipTitle.style.marginTop = (-dy) + 'px'; - } else { - height -= 6; - this.tooltipTitle.style.top = (height - dy) + 'px'; - } - } else if (this.tooltipTitle != null && this.tooltipTitle.parentNode != - null) { - this.tooltipTitle.style.display = 'none'; - } - - this.tooltip.style.height = height + 'px'; - var x0 = -Math.min(0, bounds.x - this.tooltipBorder); - var y0 = -Math.min(0, bounds.y - this.tooltipBorder); - - var left = this.container.clientWidth + this.editorUi.splitSize + 3; - var top = Math.max(0, (this.container.offsetTop + elt.offsetTop - this.container - .scrollTop - height / 2 + 16)); - - if (mxClient.IS_SVG) { - this.graph2.view.canvas.setAttribute('transform', 'translate(' + x0 + - ',' + y0 + ')'); - } else { - this.graph2.view.drawPane.style.left = x0 + 'px'; - this.graph2.view.drawPane.style.top = y0 + 'px'; - } - - // Workaround for ignored position CSS style in IE9 - // (changes to relative without the following line) - // Added width of the page-sidebar - // left += document.getElementById('page-sidebar').offsetWidth; - // Added static height of the page-navbar - top += 90; - - this.tooltip.style.position = 'absolute'; - this.tooltip.style.left = left + 'px'; - this.tooltip.style.top = top + 'px'; - this.tooltipImage.style.left = (left - 13) + 'px'; - this.tooltipImage.style.top = (top + height / 2 - 13) + 'px'; - }); - - if (this.tooltip != null && this.tooltip.style.display != 'none') { - show(); - } else { - this.thread = window.setTimeout(show, this.tooltipDelay); - } - - this.currentElt = elt; - } - } -}; - -/** - * Hides the current tooltip. - */ -Sidebar.prototype.hideTooltip = function() { - if (this.thread != null) { - window.clearTimeout(this.thread); - this.thread = null; - } - - if (this.tooltip != null) { - this.tooltip.style.display = 'none'; - this.tooltipImage.style.visibility = 'hidden'; - this.currentElt = null; - } -}; - -/** - * Creates and returns the given title element. - */ -Sidebar.prototype.createTitle = function(label) { - var elt = document.createElement('a'); - elt.setAttribute('href', 'javascript:void(0);'); - elt.className = 'geTitle'; - mxUtils.write(elt, label); - - return elt; -}; - -/** - * Creates a thumbnail for the given cells. - */ -Sidebar.prototype.createThumb = function(cells, width, height, parent, title, - showLabel) { - this.graph.labelsVisible = (showLabel == null || showLabel); - this.graph.view.scaleAndTranslate(1, 0, 0); - this.graph.addCells(cells); - var bounds = this.graph.getGraphBounds(); - var corr = this.thumbBorder; - var s = Math.min((width - 2) / (bounds.width - bounds.x + corr), (height - 2) / - (bounds.height - bounds.y + corr)); - var x0 = -Math.min(bounds.x, 0); - var y0 = -Math.min(bounds.y, 0); - this.graph.view.scaleAndTranslate(s, x0, y0); - - bounds = this.graph.getGraphBounds(); - var dx = Math.max(0, Math.floor((width - bounds.width - bounds.x) / 2)); - var dy = Math.max(0, Math.floor((height - bounds.height - bounds.y) / 2)); - - var node = null; - - // For supporting HTML labels in IE9 standards mode the container is cloned instead - if (this.graph.dialect == mxConstants.DIALECT_SVG && !mxClient.NO_FO) { - node = this.graph.view.getCanvas().ownerSVGElement.cloneNode(true); - } - // LATER: Check if deep clone can be used for quirks if container in DOM - else { - node = this.graph.container.cloneNode(false); - node.innerHTML = this.graph.container.innerHTML; - } - - this.graph.getModel().clear(); - - // Catch-all event handling - if (mxClient.IS_IE6) { - parent.style.backgroundImage = 'url(' + this.editorUi.editor.transparentImage + - ')'; - } - - var dd = 3; - node.style.position = 'relative'; - node.style.overflow = 'hidden'; - node.style.cursor = 'pointer'; - node.style.left = (dx + dd) + 'px'; - node.style.top = (dy + dd) + 'px'; - node.style.width = width + 'px'; - node.style.height = height + 'px'; - node.style.visibility = ''; - node.style.minWidth = ''; - node.style.minHeight = ''; - - parent.appendChild(node); - - // Adds title for sidebar entries - if (this.sidebarTitles && title != null) { - var border = (mxClient.IS_QUIRKS) ? 2 * this.thumbPadding + 2 : 0; - parent.style.height = (this.thumbHeight + border + this.sidebarTitleSize + 8) + - 'px'; - - var div = document.createElement('div'); - div.style.fontSize = this.sidebarTitleSize + 'px'; - div.style.textAlign = 'center'; - div.style.whiteSpace = 'nowrap'; - - if (mxClient.IS_IE) { - div.style.height = (this.sidebarTitleSize + 12) + 'px'; - } - - div.style.paddingTop = '4px'; - mxUtils.write(div, title); - parent.appendChild(div); - } -}; - -/** - * Creates and returns a new palette item for the given image. - */ -Sidebar.prototype.createItem = function(cells, title, showLabel) { - var elt = document.createElement('a'); - elt.setAttribute('href', 'javascript:void(0);'); - elt.className = 'geItem'; - elt.style.overflow = 'hidden'; - var border = (mxClient.IS_QUIRKS) ? 8 + 2 * this.thumbPadding : 6; - elt.style.width = (this.thumbWidth + border) + 'px'; - elt.style.height = (this.thumbHeight + border) + 'px'; - elt.style.padding = this.thumbPadding + 'px'; - - // Blocks default click action - mxEvent.addListener(elt, 'click', function(evt) { - mxEvent.consume(evt); - }); - - this.createThumb(cells, this.thumbWidth, this.thumbHeight, elt, title, - showLabel); - - return elt; -}; - - -/** - * Creates a drop handler for inserting the given cells. - */ -Sidebar.prototype.createDropHandler = function(cells, allowSplit) { - return function(graph, evt, target, x, y) { - if (graph.isEnabled()) { - cells = graph.getImportableCells(cells); - - if (cells.length > 0) { - var validDropTarget = (target != null) ? - graph.isValidDropTarget(target, cells, evt) : false; - var select = null; - - if (target != null && !validDropTarget) { - target = null; - } - - // Splits the target edge or inserts into target group - if (allowSplit && graph.isSplitEnabled() && graph.isSplitTarget(target, - cells, evt)) { - graph.splitEdge(target, cells, null, x, y); - select = cells; - } else if (cells.length > 0) { - select = graph.importCells(cells, x, y, target); - } - - if (select != null && select.length > 0) { - graph.scrollCellToVisible(select[0]); - graph.setSelectionCells(select); - } - } - } - }; -}; - -/** - * Creates and returns a preview element for the given width and height. - */ -Sidebar.prototype.createDragPreview = function(width, height) { - var elt = document.createElement('div'); - elt.style.border = '1px dashed black'; - elt.style.width = width + 'px'; - elt.style.height = height + 'px'; - - return elt; -}; - -/** - * Creates a drag source for the given element. - */ -Sidebar.prototype.createDragSource = function(elt, dropHandler, preview) { - var dragSource = mxUtils.makeDraggable(elt, this.editorUi.editor.graph, - dropHandler, - preview, 0, 0, this.editorUi.editor.graph.autoscroll, true, true); - - - - // Allows drop into cell only if target is a valid root - dragSource.getDropTarget = function(graph, x, y) { - var target = mxDragSource.prototype.getDropTarget.apply(this, arguments); - if (!graph.isValidRoot(target)) { - target = null; - } - - return target; - }; - - return dragSource; -}; - - - -/** - * Adds a handler for inserting the cell with a single click. - */ -Sidebar.prototype.addClickHandler = function(elt, ds) { - var graph = this.editorUi.editor.graph; - var first = null; - - mxEvent.addGestureListeners(elt, function(evt) { - first = new mxPoint(mxEvent.getClientX(evt), mxEvent.getClientY(evt)); - }); - - var oldMouseUp = ds.mouseUp; - ds.mouseUp = function(evt) { - if (!mxEvent.isPopupTrigger(evt) && this.currentGraph == null && first != - null) { - var tol = graph.tolerance; - - if (Math.abs(first.x - mxEvent.getClientX(evt)) <= tol && - Math.abs(first.y - mxEvent.getClientY(evt)) <= tol) { - var gs = graph.getGridSize(); - ds.drop(graph, evt, null, gs, gs); - } - } - - oldMouseUp.apply(this, arguments); - first = null; - }; -}; - -/** - * Giuseppe Careri - * Create xml document vertex - */ -Sidebar.prototype.createXmlDocument = function(element, label, variables, - values) { - var doc = mxUtils.createXmlDocument(); - var node = doc.createElement(element) - node.setAttribute('label', label); - - variables.forEach(function(variable, index) { - node.setAttribute(variable, values[index] ? values[index] : ''); - }); - - return node; -} - -/** - * Giuseppe Careri - * Creates a drop handler for inserting the given cells. - */ -Sidebar.prototype.createVertexTemplate = function(style, width, height, value, - title, showLabel) { - var variables = []; - var values = []; - - switch (value) { - case 'start': - variables = ['id', 'text', 'state']; - values = ['0', '', "OFF"]; - break; - case 'end': - variables = ['id', 'text']; - values = ['0', '']; - break; - case 'question': - variables = ['id', 'question', 'other']; - values = ['0', '']; - break; - case 'input': - variables = ['id', 'question', 'add']; - values = ['0', '']; - break; - // case 'email': - // variables = ["Host", "Username", "Password", "To", "Subject", "Body"]; - // values = ['']; - // break; - // case 'sms': - // variables = ['account_id', 'to', 'sms_text']; - // values = ['0']; - // break; - - default: - variables = []; - values = []; - break; - } - - var node = this.createXmlDocument(value, title, variables, values); - - //var cells = [new mxCell((value != null) ? value : '', new mxGeometry(0, 0, width, height), style)]; - var cells = [new mxCell(node, new mxGeometry(0, 0, width, height), style)]; - cells[0].vertex = true; - return this.createVertexTemplateFromCells(cells, width, height, title, - showLabel); -}; - - - -/** - * Creates a drop handler for inserting the given cells. - */ -Sidebar.prototype.createVertexTemplateFromCells = function(cells, width, height, - title, showLabel) { - var elt = this.createItem(cells, title, showLabel); - var ds = this.createDragSource(elt, this.createDropHandler(cells, true), this - .createDragPreview(width, height)); - this.addClickHandler(elt, ds); - - // Uses guides for vertices only if enabled in graph - ds.isGuidesEnabled = mxUtils.bind(this, function() { - return this.editorUi.editor.graph.graphHandler.guidesEnabled; - }); - - // Shows a tooltip with the rendered cell - if (!touchStyle) { - mxEvent.addListener(elt, 'mousemove', mxUtils.bind(this, function(evt) { - this.showTooltip(elt, cells, title, showLabel); - })); - } - - return elt; -}; - -/** - * Creates a drop handler for inserting the given cells. - */ -Sidebar.prototype.createEdgeTemplate = function(style, width, height, value, - title, showLabel) { - var cells = [new mxCell((value != null) ? value : '', new mxGeometry(0, 0, - width, height), style)]; - cells[0].geometry.setTerminalPoint(new mxPoint(0, height), true); - cells[0].geometry.setTerminalPoint(new mxPoint(width, 0), false); - cells[0].geometry.relative = true; - cells[0].edge = true; - - return this.createEdgeTemplateFromCells(cells, width, height, title, - showLabel); -}; - -/** - * Creates a drop handler for inserting the given cells. - */ -Sidebar.prototype.createEdgeTemplateFromCells = function(cells, width, height, - title, showLabel) { - var elt = this.createItem(cells, title, showLabel); - this.createDragSource(elt, this.createDropHandler(cells, false), this.createDragPreview( - width, height)); - - // Installs the default edge - var graph = this.editorUi.editor.graph; - mxEvent.addListener(elt, 'click', mxUtils.bind(this, function(evt) { - if (this.installEdges) { - graph.setDefaultEdge(cells[0]); - } - - // Highlights the entry for 200ms - elt.style.backgroundColor = '#ffffff'; - - window.setTimeout(function() { - elt.style.backgroundColor = ''; - }, 300); - - mxEvent.consume(evt); - })); - - // Shows a tooltip with the rendered cell - touchStyle = false; - if (!touchStyle) { - mxEvent.addListener(elt, 'mousemove', mxUtils.bind(this, function(evt) { - this.showTooltip(elt, cells, title, showLabel); - })); - } - - return elt; -}; - -/** - * Adds the given palette. - */ -Sidebar.prototype.addPalette = function(id, title, expanded, onInit) { - var elt = this.createTitle(title); - this.container.appendChild(elt); - - var div = document.createElement('div'); - div.className = 'geSidebar'; - - if (expanded) { - onInit(div); - onInit = null; - } else { - div.style.display = 'none'; - } - - this.addFoldingHandler(elt, div, onInit); - - var outer = document.createElement('div'); - outer.appendChild(div); - this.container.appendChild(outer); - - // Keeps references to the DOM nodes - if (id != null) { - this.palettes[id] = [elt, outer]; - } -}; - -/** - * Create the given title element. - */ -Sidebar.prototype.addFoldingHandler = function(title, content, funct) { - var initialized = false; - - title.style.backgroundImage = (content.style.display == 'none') ? - 'url(' + IMAGE_PATH + '/collapsed.gif)' : 'url(' + IMAGE_PATH + - '/expanded.gif)'; - title.style.backgroundRepeat = 'no-repeat'; - title.style.backgroundPosition = '100% 50%'; - - mxEvent.addListener(title, 'click', function(evt) { - if (content.style.display == 'none') { - if (!initialized) { - initialized = true; - - if (funct != null) { - title.style.cursor = 'wait'; - window.setTimeout(function() { - funct(content); - title.style.cursor = ''; - }, 0); - } - } - - title.style.backgroundImage = 'url(' + IMAGE_PATH + '/expanded.gif)'; - content.style.display = 'block'; - } else { - title.style.backgroundImage = 'url(' + IMAGE_PATH + '/collapsed.gif)'; - content.style.display = 'none'; - } - - mxEvent.consume(evt); - }); -}; - -/** - * Removes the palette for the given ID. - */ -Sidebar.prototype.removePalette = function(id) { - var elts = this.palettes[id]; - - if (elts != null) { - this.palettes[id] = null; - - for (var i = 0; i < elts.length; i++) { - this.container.removeChild(elts[i]); - } - - return true; - } - - return false; -}; - -/** - * Adds the given image palette. - */ -Sidebar.prototype.addImagePalette = function(id, title, prefix, postfix, items, - titles) { - // Giuseppe Careri - // Expanded Sidebar only entry - this.addPalette(id, title, (id === 'entry'), mxUtils.bind(this, function( - content) { - var showTitles = titles != null; - - for (var i = 0; i < items.length; i++) { - var icon = prefix + items[i] + postfix; - content.appendChild(this.createVertexTemplate('image;image=' + icon, 80, - 80, items[i], (showTitles) ? titles[i] : null, showTitles)); - } - })); -}; -// ***********modified*************** -// Sidebar.prototype.addBpmnPalette = function(dir, expand) { -// //Abigael Dawit -// -// var fns = [ -// this.createVertexTemplate( -// 'text;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;overflow=hidden;', -// 40, 20, 'Text', 'Text', null), -// //this.createVertexTemplate('shape=ext;rounded=1;whiteSpace=wrap;dashed=1;dashPattern=1 4;', 120, 80, 'Event\nSub-Process', 'Event Sub-Process', null), -// this.createVertexTemplate('shape=swimlane;whiteSpace=wrap;startSize=60;', -// 120, 160, 'Container', 'Container', null), -// // this.createVertexTemplate('shape=ellipse;', 120, 160, 'Ellips', 'Ellipse', null) -// this.createVertexTemplate( -// 'shape=swimlane;html=1;horizontal=0;swimlaneFillColor=white;swimlaneLine=0;fillColor=none;rounded=1;verticalAlign=middle', -// 300, 120, 'Lane', 'Lane', null) -// -// ] -// -// this.addPalette('utility', 'Utility ', false, mxUtils.bind(this, function( -// content) { -// //var showTitles = titles != null; -// for (var i = 0; i < fns.length; i++) { -// content.appendChild(fns[i]); -// } -// })); -// -// }; +var _0x30a6=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x64\x69\x74\x6F\x72\x55\x69","\x63\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x70\x61\x6C\x65\x74\x74\x65\x73","\x73\x68\x6F\x77\x54\x6F\x6F\x6C\x74\x69\x70\x73","\x67\x72\x61\x70\x68","\x64\x69\x76","\x63\x72\x65\x61\x74\x65\x45\x6C\x65\x6D\x65\x6E\x74","\x67\x65\x74\x53\x74\x79\x6C\x65\x73\x68\x65\x65\x74","\x65\x64\x69\x74\x6F\x72","\x72\x65\x73\x65\x74\x56\x69\x65\x77\x4F\x6E\x52\x6F\x6F\x74\x43\x68\x61\x6E\x67\x65","\x66\x6F\x6C\x64\x69\x6E\x67\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x43\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65","\x61\x75\x74\x6F\x53\x63\x72\x6F\x6C\x6C","\x73\x65\x74\x54\x6F\x6F\x6C\x74\x69\x70\x73","\x73\x65\x74\x45\x6E\x61\x62\x6C\x65\x64","\x76\x69\x73\x69\x62\x69\x6C\x69\x74\x79","\x73\x74\x79\x6C\x65","\x68\x69\x64\x64\x65\x6E","\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x61\x62\x73\x6F\x6C\x75\x74\x65","\x61\x70\x70\x65\x6E\x64\x43\x68\x69\x6C\x64","\x62\x6F\x64\x79","\x49\x53\x5F\x54\x4F\x55\x43\x48","\x6D\x6F\x75\x73\x65\x75\x70","\x62\x69\x6E\x64","\x61\x64\x64\x4C\x69\x73\x74\x65\x6E\x65\x72","\x73\x63\x72\x6F\x6C\x6C","\x6D\x6F\x75\x73\x65\x64\x6F\x77\x6E","\x68\x69\x64\x65\x54\x6F\x6F\x6C\x74\x69\x70","\x6D\x6F\x75\x73\x65\x6D\x6F\x76\x65","\x67\x65\x74\x53\x6F\x75\x72\x63\x65","\x63\x75\x72\x72\x65\x6E\x74\x45\x6C\x74","\x70\x61\x72\x65\x6E\x74\x4E\x6F\x64\x65","\x6D\x6F\x75\x73\x65\x6F\x75\x74","\x74\x6F\x45\x6C\x65\x6D\x65\x6E\x74","\x72\x65\x6C\x61\x74\x65\x64\x54\x61\x72\x67\x65\x74","\x69\x6E\x69\x74","\x73\x72\x63","\x2F\x74\x6F\x6F\x6C\x74\x69\x70\x2E\x70\x6E\x67","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x6C\x6F\x67","\x65\x6E\x74\x72\x79","\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x67\x65\x74","\x2F","\x5F\x31\x32\x38\x78\x31\x32\x38\x2E\x70\x6E\x67","\x73\x74\x61\x72\x74","\x71\x75\x65\x73\x74\x69\x6F\x6E","\x69\x6E\x70\x75\x74","\x65\x6E\x64","\x61\x64\x64\x49\x6D\x61\x67\x65\x50\x61\x6C\x65\x74\x74\x65","\x65\x6E\x61\x62\x6C\x65\x54\x6F\x6F\x6C\x74\x69\x70\x73","\x74\x6F\x6F\x6C\x74\x69\x70\x42\x6F\x72\x64\x65\x72","\x74\x68\x75\x6D\x62\x42\x6F\x72\x64\x65\x72","\x74\x6F\x6F\x6C\x74\x69\x70\x44\x65\x6C\x61\x79","\x69\x6E\x73\x74\x61\x6C\x6C\x45\x64\x67\x65\x73","\x67\x65\x61\x72\x49\x6D\x61\x67\x65","\x2F\x63\x6C\x69\x70\x61\x72\x74\x2F\x47\x65\x61\x72\x5F\x31\x32\x38\x78\x31\x32\x38\x2E\x70\x6E\x67","\x74\x68\x75\x6D\x62\x57\x69\x64\x74\x68","\x74\x68\x75\x6D\x62\x48\x65\x69\x67\x68\x74","\x74\x68\x75\x6D\x62\x50\x61\x64\x64\x69\x6E\x67","\x73\x69\x64\x65\x62\x61\x72\x54\x69\x74\x6C\x65\x53\x69\x7A\x65","\x73\x69\x64\x65\x62\x61\x72\x54\x69\x74\x6C\x65\x73","\x74\x6F\x6F\x6C\x74\x69\x70\x54\x69\x74\x6C\x65\x73","\x73\x68\x6F\x77\x54\x6F\x6F\x6C\x74\x69\x70","\x74\x68\x72\x65\x61\x64","\x63\x6C\x65\x61\x72\x54\x69\x6D\x65\x6F\x75\x74","\x74\x6F\x6F\x6C\x74\x69\x70","\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65","\x67\x65\x53\x69\x64\x65\x62\x61\x72\x54\x6F\x6F\x6C\x74\x69\x70","\x67\x72\x61\x70\x68\x32","\x73\x65\x74\x54\x72\x61\x6E\x73\x6C\x61\x74\x65","\x76\x69\x65\x77","\x49\x53\x5F\x53\x56\x47","\x63\x61\x6E\x76\x61\x73","\x72\x65\x6C\x61\x74\x69\x76\x65","\x74\x6F\x6F\x6C\x74\x69\x70\x49\x6D\x61\x67\x65","\x63\x72\x65\x61\x74\x65\x49\x6D\x61\x67\x65","\x77\x69\x64\x74\x68","\x31\x34\x70\x78","\x68\x65\x69\x67\x68\x74","\x32\x37\x70\x78","\x64\x69\x73\x70\x6C\x61\x79","\x62\x6C\x6F\x63\x6B","\x6C\x61\x62\x65\x6C\x73\x56\x69\x73\x69\x62\x6C\x65","\x63\x6C\x65\x61\x72","\x6D\x6F\x64\x65\x6C","\x61\x64\x64\x43\x65\x6C\x6C\x73","\x67\x65\x74\x47\x72\x61\x70\x68\x42\x6F\x75\x6E\x64\x73","\x49\x53\x5F\x51\x55\x49\x52\x4B\x53","\x6F\x76\x65\x72\x66\x6C\x6F\x77","\x76\x69\x73\x69\x62\x6C\x65","\x70\x78","\x6C\x65\x6E\x67\x74\x68","\x74\x6F\x6F\x6C\x74\x69\x70\x54\x69\x74\x6C\x65","\x62\x6F\x72\x64\x65\x72\x54\x6F\x70","\x31\x70\x78\x20\x73\x6F\x6C\x69\x64\x20\x67\x72\x61\x79","\x74\x65\x78\x74\x41\x6C\x69\x67\x6E","\x63\x65\x6E\x74\x65\x72","\x31\x30\x30\x25","\x70\x61\x64\x64\x69\x6E\x67\x54\x6F\x70","\x32\x70\x78","\x36\x70\x78","\x69\x6E\x6E\x65\x72\x48\x54\x4D\x4C","","\x77\x72\x69\x74\x65","\x6F\x66\x66\x73\x65\x74\x48\x65\x69\x67\x68\x74","\x6D\x61\x72\x67\x69\x6E\x54\x6F\x70","\x74\x6F\x70","\x6E\x6F\x6E\x65","\x78","\x6D\x69\x6E","\x79","\x63\x6C\x69\x65\x6E\x74\x57\x69\x64\x74\x68","\x73\x70\x6C\x69\x74\x53\x69\x7A\x65","\x6F\x66\x66\x73\x65\x74\x54\x6F\x70","\x73\x63\x72\x6F\x6C\x6C\x54\x6F\x70","\x6D\x61\x78","\x74\x72\x61\x6E\x73\x66\x6F\x72\x6D","\x74\x72\x61\x6E\x73\x6C\x61\x74\x65\x28","\x2C","\x29","\x73\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x6C\x65\x66\x74","\x64\x72\x61\x77\x50\x61\x6E\x65","\x73\x65\x74\x54\x69\x6D\x65\x6F\x75\x74","\x63\x72\x65\x61\x74\x65\x54\x69\x74\x6C\x65","\x61","\x68\x72\x65\x66","\x6A\x61\x76\x61\x73\x63\x72\x69\x70\x74\x3A\x76\x6F\x69\x64\x28\x30\x29\x3B","\x67\x65\x54\x69\x74\x6C\x65","\x63\x72\x65\x61\x74\x65\x54\x68\x75\x6D\x62","\x73\x63\x61\x6C\x65\x41\x6E\x64\x54\x72\x61\x6E\x73\x6C\x61\x74\x65","\x66\x6C\x6F\x6F\x72","\x64\x69\x61\x6C\x65\x63\x74","\x44\x49\x41\x4C\x45\x43\x54\x5F\x53\x56\x47","\x4E\x4F\x5F\x46\x4F","\x63\x6C\x6F\x6E\x65\x4E\x6F\x64\x65","\x6F\x77\x6E\x65\x72\x53\x56\x47\x45\x6C\x65\x6D\x65\x6E\x74","\x67\x65\x74\x43\x61\x6E\x76\x61\x73","\x67\x65\x74\x4D\x6F\x64\x65\x6C","\x49\x53\x5F\x49\x45\x36","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x49\x6D\x61\x67\x65","\x75\x72\x6C\x28","\x74\x72\x61\x6E\x73\x70\x61\x72\x65\x6E\x74\x49\x6D\x61\x67\x65","\x63\x75\x72\x73\x6F\x72","\x70\x6F\x69\x6E\x74\x65\x72","\x6D\x69\x6E\x57\x69\x64\x74\x68","\x6D\x69\x6E\x48\x65\x69\x67\x68\x74","\x66\x6F\x6E\x74\x53\x69\x7A\x65","\x77\x68\x69\x74\x65\x53\x70\x61\x63\x65","\x6E\x6F\x77\x72\x61\x70","\x49\x53\x5F\x49\x45","\x34\x70\x78","\x63\x72\x65\x61\x74\x65\x49\x74\x65\x6D","\x67\x65\x49\x74\x65\x6D","\x70\x61\x64\x64\x69\x6E\x67","\x63\x6C\x69\x63\x6B","\x63\x6F\x6E\x73\x75\x6D\x65","\x63\x72\x65\x61\x74\x65\x44\x72\x6F\x70\x48\x61\x6E\x64\x6C\x65\x72","\x69\x73\x45\x6E\x61\x62\x6C\x65\x64","\x67\x65\x74\x49\x6D\x70\x6F\x72\x74\x61\x62\x6C\x65\x43\x65\x6C\x6C\x73","\x69\x73\x56\x61\x6C\x69\x64\x44\x72\x6F\x70\x54\x61\x72\x67\x65\x74","\x69\x73\x53\x70\x6C\x69\x74\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x53\x70\x6C\x69\x74\x54\x61\x72\x67\x65\x74","\x73\x70\x6C\x69\x74\x45\x64\x67\x65","\x69\x6D\x70\x6F\x72\x74\x43\x65\x6C\x6C\x73","\x73\x63\x72\x6F\x6C\x6C\x43\x65\x6C\x6C\x54\x6F\x56\x69\x73\x69\x62\x6C\x65","\x73\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73","\x63\x72\x65\x61\x74\x65\x44\x72\x61\x67\x50\x72\x65\x76\x69\x65\x77","\x62\x6F\x72\x64\x65\x72","\x31\x70\x78\x20\x64\x61\x73\x68\x65\x64\x20\x62\x6C\x61\x63\x6B","\x63\x72\x65\x61\x74\x65\x44\x72\x61\x67\x53\x6F\x75\x72\x63\x65","\x61\x75\x74\x6F\x73\x63\x72\x6F\x6C\x6C","\x6D\x61\x6B\x65\x44\x72\x61\x67\x67\x61\x62\x6C\x65","\x67\x65\x74\x44\x72\x6F\x70\x54\x61\x72\x67\x65\x74","\x61\x70\x70\x6C\x79","\x69\x73\x56\x61\x6C\x69\x64\x52\x6F\x6F\x74","\x61\x64\x64\x43\x6C\x69\x63\x6B\x48\x61\x6E\x64\x6C\x65\x72","\x67\x65\x74\x43\x6C\x69\x65\x6E\x74\x58","\x67\x65\x74\x43\x6C\x69\x65\x6E\x74\x59","\x61\x64\x64\x47\x65\x73\x74\x75\x72\x65\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x6D\x6F\x75\x73\x65\x55\x70","\x69\x73\x50\x6F\x70\x75\x70\x54\x72\x69\x67\x67\x65\x72","\x63\x75\x72\x72\x65\x6E\x74\x47\x72\x61\x70\x68","\x74\x6F\x6C\x65\x72\x61\x6E\x63\x65","\x61\x62\x73","\x67\x65\x74\x47\x72\x69\x64\x53\x69\x7A\x65","\x64\x72\x6F\x70","\x63\x72\x65\x61\x74\x65\x58\x6D\x6C\x44\x6F\x63\x75\x6D\x65\x6E\x74","\x6C\x61\x62\x65\x6C","\x66\x6F\x72\x45\x61\x63\x68","\x63\x72\x65\x61\x74\x65\x56\x65\x72\x74\x65\x78\x54\x65\x6D\x70\x6C\x61\x74\x65","\x69\x64","\x74\x65\x78\x74","\x73\x74\x61\x74\x65","\x30","\x4F\x46\x46","\x6F\x74\x68\x65\x72","\x61\x64\x64","\x76\x65\x72\x74\x65\x78","\x63\x72\x65\x61\x74\x65\x56\x65\x72\x74\x65\x78\x54\x65\x6D\x70\x6C\x61\x74\x65\x46\x72\x6F\x6D\x43\x65\x6C\x6C\x73","\x69\x73\x47\x75\x69\x64\x65\x73\x45\x6E\x61\x62\x6C\x65\x64","\x67\x75\x69\x64\x65\x73\x45\x6E\x61\x62\x6C\x65\x64","\x67\x72\x61\x70\x68\x48\x61\x6E\x64\x6C\x65\x72","\x63\x72\x65\x61\x74\x65\x45\x64\x67\x65\x54\x65\x6D\x70\x6C\x61\x74\x65","\x73\x65\x74\x54\x65\x72\x6D\x69\x6E\x61\x6C\x50\x6F\x69\x6E\x74","\x67\x65\x6F\x6D\x65\x74\x72\x79","\x65\x64\x67\x65","\x63\x72\x65\x61\x74\x65\x45\x64\x67\x65\x54\x65\x6D\x70\x6C\x61\x74\x65\x46\x72\x6F\x6D\x43\x65\x6C\x6C\x73","\x73\x65\x74\x44\x65\x66\x61\x75\x6C\x74\x45\x64\x67\x65","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x43\x6F\x6C\x6F\x72","\x23\x66\x66\x66\x66\x66\x66","\x61\x64\x64\x50\x61\x6C\x65\x74\x74\x65","\x67\x65\x53\x69\x64\x65\x62\x61\x72","\x61\x64\x64\x46\x6F\x6C\x64\x69\x6E\x67\x48\x61\x6E\x64\x6C\x65\x72","\x2F\x63\x6F\x6C\x6C\x61\x70\x73\x65\x64\x2E\x67\x69\x66\x29","\x2F\x65\x78\x70\x61\x6E\x64\x65\x64\x2E\x67\x69\x66\x29","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x52\x65\x70\x65\x61\x74","\x6E\x6F\x2D\x72\x65\x70\x65\x61\x74","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x31\x30\x30\x25\x20\x35\x30\x25","\x77\x61\x69\x74","\x72\x65\x6D\x6F\x76\x65\x50\x61\x6C\x65\x74\x74\x65","\x72\x65\x6D\x6F\x76\x65\x43\x68\x69\x6C\x64","\x69\x6D\x61\x67\x65\x3B\x69\x6D\x61\x67\x65\x3D"];_0x30a6[0];function Sidebar(_0x968cx2,_0x968cx3){this[_0x30a6[1]]= _0x968cx2;this[_0x30a6[2]]= _0x968cx3;this[_0x30a6[3]]= new Object();this[_0x30a6[4]]= true;this[_0x30a6[5]]= new Graph(document[_0x30a6[7]](_0x30a6[6]),null,null,this[_0x30a6[1]][_0x30a6[9]][_0x30a6[5]][_0x30a6[8]]());this[_0x30a6[5]][_0x30a6[10]]= false;this[_0x30a6[5]][_0x30a6[11]]= false;this[_0x30a6[5]][_0x30a6[12]](false);this[_0x30a6[5]][_0x30a6[13]]= false;this[_0x30a6[5]][_0x30a6[14]](false);this[_0x30a6[5]][_0x30a6[15]](false);this[_0x30a6[5]][_0x30a6[2]][_0x30a6[17]][_0x30a6[16]]= _0x30a6[18];this[_0x30a6[5]][_0x30a6[2]][_0x30a6[17]][_0x30a6[19]]= _0x30a6[20];document[_0x30a6[22]][_0x30a6[21]](this[_0x30a6[5]][_0x30a6[2]]);if(!mxClient[_0x30a6[23]]){mxEvent[_0x30a6[26]](document,_0x30a6[24],mxUtils[_0x30a6[25]](this,function(){this[_0x30a6[4]]= true}));mxEvent[_0x30a6[26]](_0x968cx3,_0x30a6[27],mxUtils[_0x30a6[25]](this,function(){this[_0x30a6[4]]= true}));mxEvent[_0x30a6[26]](document,_0x30a6[28],mxUtils[_0x30a6[25]](this,function(){this[_0x30a6[4]]= false;this[_0x30a6[29]]()}));mxEvent[_0x30a6[26]](document,_0x30a6[30],mxUtils[_0x30a6[25]](this,function(_0x968cx4){var _0x968cx5=mxEvent[_0x30a6[31]](_0x968cx4);while(_0x968cx5!= null){if(_0x968cx5== this[_0x30a6[32]]){return};_0x968cx5= _0x968cx5[_0x30a6[33]]};this[_0x30a6[29]]()}));mxEvent[_0x30a6[26]](document,_0x30a6[34],mxUtils[_0x30a6[25]](this,function(_0x968cx4){if(_0x968cx4[_0x30a6[35]]== null&& _0x968cx4[_0x30a6[36]]== null){this[_0x30a6[29]]()}}))};this[_0x30a6[37]](); new Image()[_0x30a6[38]]= IMAGE_PATH+ _0x30a6[39]}Sidebar[_0x30a6[40]][_0x30a6[37]]= function(){var _0x968cx6=STENCIL_PATH;console[_0x30a6[41]](_0x968cx6);this[_0x30a6[51]](_0x30a6[42],mxResources[_0x30a6[44]](_0x30a6[43]),_0x968cx6+ _0x30a6[45],_0x30a6[46],[_0x30a6[47],_0x30a6[48],_0x30a6[49],_0x30a6[50]],[mxResources[_0x30a6[44]](_0x30a6[47]),mxResources[_0x30a6[44]](_0x30a6[48]),mxResources[_0x30a6[44]](_0x30a6[49]),mxResources[_0x30a6[44]](_0x30a6[50])])};Sidebar[_0x30a6[40]][_0x30a6[52]]= !mxClient[_0x30a6[23]];Sidebar[_0x30a6[40]][_0x30a6[53]]= 16;Sidebar[_0x30a6[40]][_0x30a6[54]]= 3;Sidebar[_0x30a6[40]][_0x30a6[55]]= 300;Sidebar[_0x30a6[40]][_0x30a6[56]]= true;Sidebar[_0x30a6[40]][_0x30a6[57]]= STENCIL_PATH+ _0x30a6[58];Sidebar[_0x30a6[40]][_0x30a6[59]]= 34;Sidebar[_0x30a6[40]][_0x30a6[60]]= 34;Sidebar[_0x30a6[40]][_0x30a6[61]]= 2;Sidebar[_0x30a6[40]][_0x30a6[62]]= 9;Sidebar[_0x30a6[40]][_0x30a6[63]]= false;Sidebar[_0x30a6[40]][_0x30a6[64]]= false;Sidebar[_0x30a6[40]][_0x30a6[65]]= function(_0x968cx7,_0x968cx8,_0x968cx9,_0x968cxa){if(this[_0x30a6[52]]&& this[_0x30a6[4]]){if(this[_0x30a6[32]]!= _0x968cx7){if(this[_0x30a6[66]]!= null){window[_0x30a6[67]](this[_0x30a6[66]]);this[_0x30a6[66]]= null};var _0x968cxb=mxUtils[_0x30a6[25]](this,function(){if(this[_0x30a6[68]]== null){this[_0x30a6[68]]= document[_0x30a6[7]](_0x30a6[6]);this[_0x30a6[68]][_0x30a6[69]]= _0x30a6[70];document[_0x30a6[22]][_0x30a6[21]](this[_0x30a6[68]]);this[_0x30a6[71]]= new Graph(this[_0x30a6[68]],null,null,this[_0x30a6[1]][_0x30a6[9]][_0x30a6[5]][_0x30a6[8]]());this[_0x30a6[71]][_0x30a6[73]][_0x30a6[72]](this[_0x30a6[53]],this[_0x30a6[53]]);this[_0x30a6[71]][_0x30a6[10]]= false;this[_0x30a6[71]][_0x30a6[11]]= false;this[_0x30a6[71]][_0x30a6[13]]= false;this[_0x30a6[71]][_0x30a6[14]](false);this[_0x30a6[71]][_0x30a6[12]](false);this[_0x30a6[71]][_0x30a6[15]](false);if(!mxClient[_0x30a6[74]]){this[_0x30a6[71]][_0x30a6[73]][_0x30a6[75]][_0x30a6[17]][_0x30a6[19]]= _0x30a6[76]};this[_0x30a6[77]]= mxUtils[_0x30a6[78]](IMAGE_PATH+ _0x30a6[39]);this[_0x30a6[77]][_0x30a6[17]][_0x30a6[19]]= _0x30a6[20];this[_0x30a6[77]][_0x30a6[17]][_0x30a6[79]]= _0x30a6[80];this[_0x30a6[77]][_0x30a6[17]][_0x30a6[81]]= _0x30a6[82];document[_0x30a6[22]][_0x30a6[21]](this[_0x30a6[77]])};this[_0x30a6[68]][_0x30a6[17]][_0x30a6[83]]= _0x30a6[84];this[_0x30a6[71]][_0x30a6[85]]= (_0x968cxa== null|| _0x968cxa);this[_0x30a6[71]][_0x30a6[87]][_0x30a6[86]]();this[_0x30a6[71]][_0x30a6[88]](_0x968cx8);var _0x968cxc=this[_0x30a6[71]][_0x30a6[89]]();var _0x968cxd=_0x968cxc[_0x30a6[79]]+ 2* this[_0x30a6[53]];var _0x968cxe=_0x968cxc[_0x30a6[81]]+ 2* this[_0x30a6[53]];if(mxClient[_0x30a6[90]]){_0x968cxd+= 4;_0x968cxe+= 4;this[_0x30a6[68]][_0x30a6[17]][_0x30a6[91]]= _0x30a6[18]}else {this[_0x30a6[68]][_0x30a6[17]][_0x30a6[91]]= _0x30a6[92]};this[_0x30a6[77]][_0x30a6[17]][_0x30a6[16]]= _0x30a6[92];this[_0x30a6[68]][_0x30a6[17]][_0x30a6[79]]= _0x968cxd+ _0x30a6[93];if(this[_0x30a6[64]]&& _0x968cx9!= null&& _0x968cx9[_0x30a6[94]]> 0){if(this[_0x30a6[95]]== null){this[_0x30a6[95]]= document[_0x30a6[7]](_0x30a6[6]);this[_0x30a6[95]][_0x30a6[17]][_0x30a6[96]]= _0x30a6[97];this[_0x30a6[95]][_0x30a6[17]][_0x30a6[98]]= _0x30a6[99];this[_0x30a6[95]][_0x30a6[17]][_0x30a6[79]]= _0x30a6[100];this[_0x30a6[95]][_0x30a6[17]][_0x30a6[91]]= _0x30a6[18];if(mxClient[_0x30a6[74]]){this[_0x30a6[95]][_0x30a6[17]][_0x30a6[101]]= _0x30a6[102]}else {this[_0x30a6[95]][_0x30a6[17]][_0x30a6[19]]= _0x30a6[20];this[_0x30a6[95]][_0x30a6[17]][_0x30a6[101]]= _0x30a6[103]};this[_0x30a6[68]][_0x30a6[21]](this[_0x30a6[95]])}else {this[_0x30a6[95]][_0x30a6[104]]= _0x30a6[105]};this[_0x30a6[95]][_0x30a6[17]][_0x30a6[83]]= _0x30a6[105];mxUtils[_0x30a6[106]](this[_0x30a6[95]],_0x968cx9);var _0x968cxf=this[_0x30a6[95]][_0x30a6[107]]+ 10;_0x968cxe+= _0x968cxf;if(mxClient[_0x30a6[74]]){this[_0x30a6[95]][_0x30a6[17]][_0x30a6[108]]= (-_0x968cxf) + _0x30a6[93]}else {_0x968cxe-= 6;this[_0x30a6[95]][_0x30a6[17]][_0x30a6[109]]= (_0x968cxe- _0x968cxf)+ _0x30a6[93]}}else {if(this[_0x30a6[95]]!= null&& this[_0x30a6[95]][_0x30a6[33]]!= null){this[_0x30a6[95]][_0x30a6[17]][_0x30a6[83]]= _0x30a6[110]}};this[_0x30a6[68]][_0x30a6[17]][_0x30a6[81]]= _0x968cxe+ _0x30a6[93];var _0x968cx10=-Math[_0x30a6[112]](0,_0x968cxc[_0x30a6[111]]- this[_0x30a6[53]]);var _0x968cx11=-Math[_0x30a6[112]](0,_0x968cxc[_0x30a6[113]]- this[_0x30a6[53]]);var _0x968cx12=this[_0x30a6[2]][_0x30a6[114]]+ this[_0x30a6[1]][_0x30a6[115]]+ 3;var _0x968cx13=Math[_0x30a6[118]](0,(this[_0x30a6[2]][_0x30a6[116]]+ _0x968cx7[_0x30a6[116]]- this[_0x30a6[2]][_0x30a6[117]]- _0x968cxe/ 2+ 16));if(mxClient[_0x30a6[74]]){this[_0x30a6[71]][_0x30a6[73]][_0x30a6[75]][_0x30a6[123]](_0x30a6[119],_0x30a6[120]+ _0x968cx10+ _0x30a6[121]+ _0x968cx11+ _0x30a6[122])}else {this[_0x30a6[71]][_0x30a6[73]][_0x30a6[125]][_0x30a6[17]][_0x30a6[124]]= _0x968cx10+ _0x30a6[93];this[_0x30a6[71]][_0x30a6[73]][_0x30a6[125]][_0x30a6[17]][_0x30a6[109]]= _0x968cx11+ _0x30a6[93]};_0x968cx13+= 90;this[_0x30a6[68]][_0x30a6[17]][_0x30a6[19]]= _0x30a6[20];this[_0x30a6[68]][_0x30a6[17]][_0x30a6[124]]= _0x968cx12+ _0x30a6[93];this[_0x30a6[68]][_0x30a6[17]][_0x30a6[109]]= _0x968cx13+ _0x30a6[93];this[_0x30a6[77]][_0x30a6[17]][_0x30a6[124]]= (_0x968cx12- 13)+ _0x30a6[93];this[_0x30a6[77]][_0x30a6[17]][_0x30a6[109]]= (_0x968cx13+ _0x968cxe/ 2- 13)+ _0x30a6[93]});if(this[_0x30a6[68]]!= null&& this[_0x30a6[68]][_0x30a6[17]][_0x30a6[83]]!= _0x30a6[110]){_0x968cxb()}else {this[_0x30a6[66]]= window[_0x30a6[126]](_0x968cxb,this[_0x30a6[55]])};this[_0x30a6[32]]= _0x968cx7}}};Sidebar[_0x30a6[40]][_0x30a6[29]]= function(){if(this[_0x30a6[66]]!= null){window[_0x30a6[67]](this[_0x30a6[66]]);this[_0x30a6[66]]= null};if(this[_0x30a6[68]]!= null){this[_0x30a6[68]][_0x30a6[17]][_0x30a6[83]]= _0x30a6[110];this[_0x30a6[77]][_0x30a6[17]][_0x30a6[16]]= _0x30a6[18];this[_0x30a6[32]]= null}};Sidebar[_0x30a6[40]][_0x30a6[127]]= function(_0x968cx14){var _0x968cx7=document[_0x30a6[7]](_0x30a6[128]);_0x968cx7[_0x30a6[123]](_0x30a6[129],_0x30a6[130]);_0x968cx7[_0x30a6[69]]= _0x30a6[131];mxUtils[_0x30a6[106]](_0x968cx7,_0x968cx14);return _0x968cx7};Sidebar[_0x30a6[40]][_0x30a6[132]]= function(_0x968cx8,_0x968cxd,_0x968cxe,_0x968cx15,_0x968cx9,_0x968cxa){this[_0x30a6[5]][_0x30a6[85]]= (_0x968cxa== null|| _0x968cxa);this[_0x30a6[5]][_0x30a6[73]][_0x30a6[133]](1,0,0);this[_0x30a6[5]][_0x30a6[88]](_0x968cx8);var _0x968cxc=this[_0x30a6[5]][_0x30a6[89]]();var _0x968cx16=this[_0x30a6[54]];var _0x968cx17=Math[_0x30a6[112]]((_0x968cxd- 2)/ (_0x968cxc[_0x30a6[79]]- _0x968cxc[_0x30a6[111]]+ _0x968cx16),(_0x968cxe- 2)/ (_0x968cxc[_0x30a6[81]]- _0x968cxc[_0x30a6[113]]+ _0x968cx16));var _0x968cx10=-Math[_0x30a6[112]](_0x968cxc[_0x30a6[111]],0);var _0x968cx11=-Math[_0x30a6[112]](_0x968cxc[_0x30a6[113]],0);this[_0x30a6[5]][_0x30a6[73]][_0x30a6[133]](_0x968cx17,_0x968cx10,_0x968cx11);_0x968cxc= this[_0x30a6[5]][_0x30a6[89]]();var _0x968cx18=Math[_0x30a6[118]](0,Math[_0x30a6[134]]((_0x968cxd- _0x968cxc[_0x30a6[79]]- _0x968cxc[_0x30a6[111]])/ 2));var _0x968cxf=Math[_0x30a6[118]](0,Math[_0x30a6[134]]((_0x968cxe- _0x968cxc[_0x30a6[81]]- _0x968cxc[_0x30a6[113]])/ 2));var _0x968cx19=null;if(this[_0x30a6[5]][_0x30a6[135]]== mxConstants[_0x30a6[136]]&& !mxClient[_0x30a6[137]]){_0x968cx19= this[_0x30a6[5]][_0x30a6[73]][_0x30a6[140]]()[_0x30a6[139]][_0x30a6[138]](true)}else {_0x968cx19= this[_0x30a6[5]][_0x30a6[2]][_0x30a6[138]](false);_0x968cx19[_0x30a6[104]]= this[_0x30a6[5]][_0x30a6[2]][_0x30a6[104]]};this[_0x30a6[5]][_0x30a6[141]]()[_0x30a6[86]]();if(mxClient[_0x30a6[142]]){_0x968cx15[_0x30a6[17]][_0x30a6[143]]= _0x30a6[144]+ this[_0x30a6[1]][_0x30a6[9]][_0x30a6[145]]+ _0x30a6[122]};var _0x968cx1a=3;_0x968cx19[_0x30a6[17]][_0x30a6[19]]= _0x30a6[76];_0x968cx19[_0x30a6[17]][_0x30a6[91]]= _0x30a6[18];_0x968cx19[_0x30a6[17]][_0x30a6[146]]= _0x30a6[147];_0x968cx19[_0x30a6[17]][_0x30a6[124]]= (_0x968cx18+ _0x968cx1a)+ _0x30a6[93];_0x968cx19[_0x30a6[17]][_0x30a6[109]]= (_0x968cxf+ _0x968cx1a)+ _0x30a6[93];_0x968cx19[_0x30a6[17]][_0x30a6[79]]= _0x968cxd+ _0x30a6[93];_0x968cx19[_0x30a6[17]][_0x30a6[81]]= _0x968cxe+ _0x30a6[93];_0x968cx19[_0x30a6[17]][_0x30a6[16]]= _0x30a6[105];_0x968cx19[_0x30a6[17]][_0x30a6[148]]= _0x30a6[105];_0x968cx19[_0x30a6[17]][_0x30a6[149]]= _0x30a6[105];_0x968cx15[_0x30a6[21]](_0x968cx19);if(this[_0x30a6[63]]&& _0x968cx9!= null){var _0x968cx1b=(mxClient[_0x30a6[90]])?2* this[_0x30a6[61]]+ 2:0;_0x968cx15[_0x30a6[17]][_0x30a6[81]]= (this[_0x30a6[60]]+ _0x968cx1b+ this[_0x30a6[62]]+ 8)+ _0x30a6[93];var _0x968cx1c=document[_0x30a6[7]](_0x30a6[6]);_0x968cx1c[_0x30a6[17]][_0x30a6[150]]= this[_0x30a6[62]]+ _0x30a6[93];_0x968cx1c[_0x30a6[17]][_0x30a6[98]]= _0x30a6[99];_0x968cx1c[_0x30a6[17]][_0x30a6[151]]= _0x30a6[152];if(mxClient[_0x30a6[153]]){_0x968cx1c[_0x30a6[17]][_0x30a6[81]]= (this[_0x30a6[62]]+ 12)+ _0x30a6[93]};_0x968cx1c[_0x30a6[17]][_0x30a6[101]]= _0x30a6[154];mxUtils[_0x30a6[106]](_0x968cx1c,_0x968cx9);_0x968cx15[_0x30a6[21]](_0x968cx1c)}};Sidebar[_0x30a6[40]][_0x30a6[155]]= function(_0x968cx8,_0x968cx9,_0x968cxa){var _0x968cx7=document[_0x30a6[7]](_0x30a6[128]);_0x968cx7[_0x30a6[123]](_0x30a6[129],_0x30a6[130]);_0x968cx7[_0x30a6[69]]= _0x30a6[156];_0x968cx7[_0x30a6[17]][_0x30a6[91]]= _0x30a6[18];var _0x968cx1b=(mxClient[_0x30a6[90]])?8+ 2* this[_0x30a6[61]]:6;_0x968cx7[_0x30a6[17]][_0x30a6[79]]= (this[_0x30a6[59]]+ _0x968cx1b)+ _0x30a6[93];_0x968cx7[_0x30a6[17]][_0x30a6[81]]= (this[_0x30a6[60]]+ _0x968cx1b)+ _0x30a6[93];_0x968cx7[_0x30a6[17]][_0x30a6[157]]= this[_0x30a6[61]]+ _0x30a6[93];mxEvent[_0x30a6[26]](_0x968cx7,_0x30a6[158],function(_0x968cx4){mxEvent[_0x30a6[159]](_0x968cx4)});this[_0x30a6[132]](_0x968cx8,this[_0x30a6[59]],this[_0x30a6[60]],_0x968cx7,_0x968cx9,_0x968cxa);return _0x968cx7};Sidebar[_0x30a6[40]][_0x30a6[160]]= function(_0x968cx8,_0x968cx1d){return function(_0x968cx1e,_0x968cx4,_0x968cx1f,_0x968cx20,_0x968cx21){if(_0x968cx1e[_0x30a6[161]]()){_0x968cx8= _0x968cx1e[_0x30a6[162]](_0x968cx8);if(_0x968cx8[_0x30a6[94]]> 0){var _0x968cx22=(_0x968cx1f!= null)?_0x968cx1e[_0x30a6[163]](_0x968cx1f,_0x968cx8,_0x968cx4):false;var _0x968cx23=null;if(_0x968cx1f!= null&& !_0x968cx22){_0x968cx1f= null};if(_0x968cx1d&& _0x968cx1e[_0x30a6[164]]()&& _0x968cx1e[_0x30a6[165]](_0x968cx1f,_0x968cx8,_0x968cx4)){_0x968cx1e[_0x30a6[166]](_0x968cx1f,_0x968cx8,null,_0x968cx20,_0x968cx21);_0x968cx23= _0x968cx8}else {if(_0x968cx8[_0x30a6[94]]> 0){_0x968cx23= _0x968cx1e[_0x30a6[167]](_0x968cx8,_0x968cx20,_0x968cx21,_0x968cx1f)}};if(_0x968cx23!= null&& _0x968cx23[_0x30a6[94]]> 0){_0x968cx1e[_0x30a6[168]](_0x968cx23[0]);_0x968cx1e[_0x30a6[169]](_0x968cx23)}}}}};Sidebar[_0x30a6[40]][_0x30a6[170]]= function(_0x968cxd,_0x968cxe){var _0x968cx7=document[_0x30a6[7]](_0x30a6[6]);_0x968cx7[_0x30a6[17]][_0x30a6[171]]= _0x30a6[172];_0x968cx7[_0x30a6[17]][_0x30a6[79]]= _0x968cxd+ _0x30a6[93];_0x968cx7[_0x30a6[17]][_0x30a6[81]]= _0x968cxe+ _0x30a6[93];return _0x968cx7};Sidebar[_0x30a6[40]][_0x30a6[173]]= function(_0x968cx7,_0x968cx24,_0x968cx25){var _0x968cx26=mxUtils[_0x30a6[175]](_0x968cx7,this[_0x30a6[1]][_0x30a6[9]][_0x30a6[5]],_0x968cx24,_0x968cx25,0,0,this[_0x30a6[1]][_0x30a6[9]][_0x30a6[5]][_0x30a6[174]],true,true);_0x968cx26[_0x30a6[176]]= function(_0x968cx1e,_0x968cx20,_0x968cx21){var _0x968cx1f=mxDragSource[_0x30a6[40]][_0x30a6[176]][_0x30a6[177]](this,arguments);if(!_0x968cx1e[_0x30a6[178]](_0x968cx1f)){_0x968cx1f= null};return _0x968cx1f};return _0x968cx26};Sidebar[_0x30a6[40]][_0x30a6[179]]= function(_0x968cx7,_0x968cx27){var _0x968cx1e=this[_0x30a6[1]][_0x30a6[9]][_0x30a6[5]];var _0x968cx28=null;mxEvent[_0x30a6[182]](_0x968cx7,function(_0x968cx4){_0x968cx28= new mxPoint(mxEvent[_0x30a6[180]](_0x968cx4),mxEvent[_0x30a6[181]](_0x968cx4))});var _0x968cx29=_0x968cx27[_0x30a6[183]];_0x968cx27[_0x30a6[183]]= function(_0x968cx4){if(!mxEvent[_0x30a6[184]](_0x968cx4)&& this[_0x30a6[185]]== null&& _0x968cx28!= null){var _0x968cx2a=_0x968cx1e[_0x30a6[186]];if(Math[_0x30a6[187]](_0x968cx28[_0x30a6[111]]- mxEvent[_0x30a6[180]](_0x968cx4))<= _0x968cx2a&& Math[_0x30a6[187]](_0x968cx28[_0x30a6[113]]- mxEvent[_0x30a6[181]](_0x968cx4))<= _0x968cx2a){var _0x968cx2b=_0x968cx1e[_0x30a6[188]]();_0x968cx27[_0x30a6[189]](_0x968cx1e,_0x968cx4,null,_0x968cx2b,_0x968cx2b)}};_0x968cx29[_0x30a6[177]](this,arguments);_0x968cx28= null}};Sidebar[_0x30a6[40]][_0x30a6[190]]= function(_0x968cx2c,_0x968cx14,_0x968cx2d,_0x968cx2e){var _0x968cx2f=mxUtils[_0x30a6[190]]();var _0x968cx19=_0x968cx2f[_0x30a6[7]](_0x968cx2c);_0x968cx19[_0x30a6[123]](_0x30a6[191],_0x968cx14);_0x968cx2d[_0x30a6[192]](function(_0x968cx30,_0x968cx31){_0x968cx19[_0x30a6[123]](_0x968cx30,_0x968cx2e[_0x968cx31]?_0x968cx2e[_0x968cx31]:_0x30a6[105])});return _0x968cx19};Sidebar[_0x30a6[40]][_0x30a6[193]]= function(_0x968cx32,_0x968cxd,_0x968cxe,_0x968cx33,_0x968cx9,_0x968cxa){var _0x968cx2d=[];var _0x968cx2e=[];switch(_0x968cx33){case _0x30a6[47]:_0x968cx2d= [_0x30a6[194],_0x30a6[195],_0x30a6[196]];_0x968cx2e= [_0x30a6[197],_0x30a6[105],_0x30a6[198]];break;case _0x30a6[50]:_0x968cx2d= [_0x30a6[194],_0x30a6[195]];_0x968cx2e= [_0x30a6[197],_0x30a6[105]];break;case _0x30a6[48]:_0x968cx2d= [_0x30a6[194],_0x30a6[48],_0x30a6[199]];_0x968cx2e= [_0x30a6[197],_0x30a6[105]];break;case _0x30a6[49]:_0x968cx2d= [_0x30a6[194],_0x30a6[48],_0x30a6[200]];_0x968cx2e= [_0x30a6[197],_0x30a6[105]];break;default:_0x968cx2d= [];_0x968cx2e= [];break};var _0x968cx19=this[_0x30a6[190]](_0x968cx33,_0x968cx9,_0x968cx2d,_0x968cx2e);var _0x968cx8=[ new mxCell(_0x968cx19, new mxGeometry(0,0,_0x968cxd,_0x968cxe),_0x968cx32)];_0x968cx8[0][_0x30a6[201]]= true;return this[_0x30a6[202]](_0x968cx8,_0x968cxd,_0x968cxe,_0x968cx9,_0x968cxa)};Sidebar[_0x30a6[40]][_0x30a6[202]]= function(_0x968cx8,_0x968cxd,_0x968cxe,_0x968cx9,_0x968cxa){var _0x968cx7=this[_0x30a6[155]](_0x968cx8,_0x968cx9,_0x968cxa);var _0x968cx27=this[_0x30a6[173]](_0x968cx7,this[_0x30a6[160]](_0x968cx8,true),this[_0x30a6[170]](_0x968cxd,_0x968cxe));this[_0x30a6[179]](_0x968cx7,_0x968cx27);_0x968cx27[_0x30a6[203]]= mxUtils[_0x30a6[25]](this,function(){return this[_0x30a6[1]][_0x30a6[9]][_0x30a6[5]][_0x30a6[205]][_0x30a6[204]]});if(!touchStyle){mxEvent[_0x30a6[26]](_0x968cx7,_0x30a6[30],mxUtils[_0x30a6[25]](this,function(_0x968cx4){this[_0x30a6[65]](_0x968cx7,_0x968cx8,_0x968cx9,_0x968cxa)}))};return _0x968cx7};Sidebar[_0x30a6[40]][_0x30a6[206]]= function(_0x968cx32,_0x968cxd,_0x968cxe,_0x968cx33,_0x968cx9,_0x968cxa){var _0x968cx8=[ new mxCell((_0x968cx33!= null)?_0x968cx33:_0x30a6[105], new mxGeometry(0,0,_0x968cxd,_0x968cxe),_0x968cx32)];_0x968cx8[0][_0x30a6[208]][_0x30a6[207]]( new mxPoint(0,_0x968cxe),true);_0x968cx8[0][_0x30a6[208]][_0x30a6[207]]( new mxPoint(_0x968cxd,0),false);_0x968cx8[0][_0x30a6[208]][_0x30a6[76]]= true;_0x968cx8[0][_0x30a6[209]]= true;return this[_0x30a6[210]](_0x968cx8,_0x968cxd,_0x968cxe,_0x968cx9,_0x968cxa)};Sidebar[_0x30a6[40]][_0x30a6[210]]= function(_0x968cx8,_0x968cxd,_0x968cxe,_0x968cx9,_0x968cxa){var _0x968cx7=this[_0x30a6[155]](_0x968cx8,_0x968cx9,_0x968cxa);this[_0x30a6[173]](_0x968cx7,this[_0x30a6[160]](_0x968cx8,false),this[_0x30a6[170]](_0x968cxd,_0x968cxe));var _0x968cx1e=this[_0x30a6[1]][_0x30a6[9]][_0x30a6[5]];mxEvent[_0x30a6[26]](_0x968cx7,_0x30a6[158],mxUtils[_0x30a6[25]](this,function(_0x968cx4){if(this[_0x30a6[56]]){_0x968cx1e[_0x30a6[211]](_0x968cx8[0])};_0x968cx7[_0x30a6[17]][_0x30a6[212]]= _0x30a6[213];window[_0x30a6[126]](function(){_0x968cx7[_0x30a6[17]][_0x30a6[212]]= _0x30a6[105]},300);mxEvent[_0x30a6[159]](_0x968cx4)}));touchStyle= false;if(!touchStyle){mxEvent[_0x30a6[26]](_0x968cx7,_0x30a6[30],mxUtils[_0x30a6[25]](this,function(_0x968cx4){this[_0x30a6[65]](_0x968cx7,_0x968cx8,_0x968cx9,_0x968cxa)}))};return _0x968cx7};Sidebar[_0x30a6[40]][_0x30a6[214]]= function(_0x968cx34,_0x968cx9,_0x968cx35,_0x968cx36){var _0x968cx7=this[_0x30a6[127]](_0x968cx9);this[_0x30a6[2]][_0x30a6[21]](_0x968cx7);var _0x968cx1c=document[_0x30a6[7]](_0x30a6[6]);_0x968cx1c[_0x30a6[69]]= _0x30a6[215];if(_0x968cx35){_0x968cx36(_0x968cx1c);_0x968cx36= null}else {_0x968cx1c[_0x30a6[17]][_0x30a6[83]]= _0x30a6[110]};this[_0x30a6[216]](_0x968cx7,_0x968cx1c,_0x968cx36);var _0x968cx37=document[_0x30a6[7]](_0x30a6[6]);_0x968cx37[_0x30a6[21]](_0x968cx1c);this[_0x30a6[2]][_0x30a6[21]](_0x968cx37);if(_0x968cx34!= null){this[_0x30a6[3]][_0x968cx34]= [_0x968cx7,_0x968cx37]}};Sidebar[_0x30a6[40]][_0x30a6[216]]= function(_0x968cx9,_0x968cx38,_0x968cx39){var _0x968cx3a=false;_0x968cx9[_0x30a6[17]][_0x30a6[143]]= (_0x968cx38[_0x30a6[17]][_0x30a6[83]]== _0x30a6[110])?_0x30a6[144]+ IMAGE_PATH+ _0x30a6[217]:_0x30a6[144]+ IMAGE_PATH+ _0x30a6[218];_0x968cx9[_0x30a6[17]][_0x30a6[219]]= _0x30a6[220];_0x968cx9[_0x30a6[17]][_0x30a6[221]]= _0x30a6[222];mxEvent[_0x30a6[26]](_0x968cx9,_0x30a6[158],function(_0x968cx4){if(_0x968cx38[_0x30a6[17]][_0x30a6[83]]== _0x30a6[110]){if(!_0x968cx3a){_0x968cx3a= true;if(_0x968cx39!= null){_0x968cx9[_0x30a6[17]][_0x30a6[146]]= _0x30a6[223];window[_0x30a6[126]](function(){_0x968cx39(_0x968cx38);_0x968cx9[_0x30a6[17]][_0x30a6[146]]= _0x30a6[105]},0)}};_0x968cx9[_0x30a6[17]][_0x30a6[143]]= _0x30a6[144]+ IMAGE_PATH+ _0x30a6[218];_0x968cx38[_0x30a6[17]][_0x30a6[83]]= _0x30a6[84]}else {_0x968cx9[_0x30a6[17]][_0x30a6[143]]= _0x30a6[144]+ IMAGE_PATH+ _0x30a6[217];_0x968cx38[_0x30a6[17]][_0x30a6[83]]= _0x30a6[110]};mxEvent[_0x30a6[159]](_0x968cx4)})};Sidebar[_0x30a6[40]][_0x30a6[224]]= function(_0x968cx34){var _0x968cx3b=this[_0x30a6[3]][_0x968cx34];if(_0x968cx3b!= null){this[_0x30a6[3]][_0x968cx34]= null;for(var _0x968cx3c=0;_0x968cx3c< _0x968cx3b[_0x30a6[94]];_0x968cx3c++){this[_0x30a6[2]][_0x30a6[225]](_0x968cx3b[_0x968cx3c])};return true};return false};Sidebar[_0x30a6[40]][_0x30a6[51]]= function(_0x968cx34,_0x968cx9,_0x968cx3d,_0x968cx3e,_0x968cx3f,_0x968cx40){this[_0x30a6[214]](_0x968cx34,_0x968cx9,(_0x968cx34=== _0x30a6[42]),mxUtils[_0x30a6[25]](this,function(_0x968cx38){var _0x968cx41=_0x968cx40!= null;for(var _0x968cx3c=0;_0x968cx3c< _0x968cx3f[_0x30a6[94]];_0x968cx3c++){var _0x968cx42=_0x968cx3d+ _0x968cx3f[_0x968cx3c]+ _0x968cx3e;_0x968cx38[_0x30a6[21]](this[_0x30a6[193]](_0x30a6[226]+ _0x968cx42,80,80,_0x968cx3f[_0x968cx3c],(_0x968cx41)?_0x968cx40[_0x968cx3c]:null,_0x968cx41))}}))} \ No newline at end of file diff --git a/public/assets/plugins/jscripty/js/Toolbar.js b/public/assets/plugins/jscripty/js/Toolbar.js index 7eab562..10a5094 100644 --- a/public/assets/plugins/jscripty/js/Toolbar.js +++ b/public/assets/plugins/jscripty/js/Toolbar.js @@ -1,407 +1 @@ -/** - * $Id: Toolbar.js,v 1.3 2013-02-20 16:21:29 gaudenz Exp $ - * Copyright (c) 2006-2012, JGraph Ltd - */ -/** - * Construcs a new toolbar for the given editor. - */ -function Toolbar(editorUi, container) -{ - this.editorUi = editorUi; - this.container = container; - this.init(); - - // Global handler to hide the current menu - mxEvent.addGestureListeners(document, mxUtils.bind(this, function(evt) - { - this.hideMenu(); - })); -}; - -/** - * Adds the toolbar elements. - */ -Toolbar.prototype.init = function() -{ - this.addItems(['save', 'publish', '-', 'print', 'undo', 'redo', '-', 'copy', 'cut', 'paste', 'delete', '-', 'duplicate', '-', 'actualSize', 'zoomIn', 'zoomOut', '-']); - var fontElt = this.addMenu('Helvetica', mxResources.get('fontFamily'), true, 'fontFamily'); - fontElt.style.whiteSpace = 'nowrap'; - fontElt.style.overflow = 'hidden'; - fontElt.style.width = '70px'; - this.addSeparator(); - var sizeElt = this.addMenu('12', mxResources.get('fontSize'), true, 'fontSize'); - sizeElt.style.whiteSpace = 'nowrap'; - sizeElt.style.overflow = 'hidden'; - sizeElt.style.width = '30px'; - - this.addItems(['-', 'bold', 'italic', 'underline']); - // Giuseppe Careri - // var align = this.addMenuFunction('geSprite-left', mxResources.get('align'), false, mxUtils.bind(this, function(menu) - // { - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ALIGN], [mxConstants.ALIGN_LEFT], 'geIcon geSprite geSprite-left', null).setAttribute('title', mxResources.get('left')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ALIGN], [mxConstants.ALIGN_CENTER], 'geIcon geSprite geSprite-center', null).setAttribute('title', mxResources.get('center')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ALIGN], [mxConstants.ALIGN_RIGHT], 'geIcon geSprite geSprite-right', null).setAttribute('title', mxResources.get('right')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_VERTICAL_ALIGN], [mxConstants.ALIGN_TOP], 'geIcon geSprite geSprite-top', null).setAttribute('title', mxResources.get('top')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_VERTICAL_ALIGN], [mxConstants.ALIGN_MIDDLE], 'geIcon geSprite geSprite-middle', null).setAttribute('title', mxResources.get('middle')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_VERTICAL_ALIGN], [mxConstants.ALIGN_BOTTOM], 'geIcon geSprite geSprite-bottom', null).setAttribute('title', mxResources.get('bottom')); - // })); - // this.addItems(['fontColor', '-']); - // var line = this.addMenuFunction('geSprite-straight', mxResources.get('line'), false, mxUtils.bind(this, function(menu) - // { - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_EDGE], [null], 'geIcon geSprite geSprite-straight', null).setAttribute('title', mxResources.get('straight')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_EDGE], ['entityRelationEdgeStyle'], 'geIcon geSprite geSprite-entity', null).setAttribute('title', mxResources.get('entityRelation')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_EDGE, mxConstants.STYLE_ELBOW], ['elbowEdgeStyle', 'horizontal'], 'geIcon geSprite geSprite-helbow', null).setAttribute('title', mxResources.get('horizontal')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_EDGE, mxConstants.STYLE_ELBOW], ['elbowEdgeStyle', 'vertical'], 'geIcon geSprite geSprite-velbow', null).setAttribute('title', mxResources.get('vertical')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_EDGE], ['segmentEdgeStyle'], 'geIcon geSprite geSprite-segment', null).setAttribute('title', mxResources.get('manual')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_EDGE], ['orthogonalEdgeStyle'], 'geIcon geSprite geSprite-orthogonal', null).setAttribute('title', mxResources.get('automatic')); - // })); - // var linestart = this.addMenuFunction('geSprite-startclassic', mxResources.get('lineend'), false, mxUtils.bind(this, function(menu) - // { - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.NONE, 0], 'geIcon geSprite geSprite-noarrow', null).setAttribute('title', mxResources.get('none')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_CLASSIC, 1], 'geIcon geSprite geSprite-startclassic', null).setAttribute('title', mxResources.get('classic')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_OPEN, 1], 'geIcon geSprite geSprite-startopen', null).setAttribute('title', mxResources.get('openArrow')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_BLOCK, 1], 'geIcon geSprite geSprite-startblock', null).setAttribute('title', mxResources.get('block')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_OVAL, 1], 'geIcon geSprite geSprite-startoval', null).setAttribute('title', mxResources.get('oval')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_DIAMOND, 1], 'geIcon geSprite geSprite-startdiamond', null).setAttribute('title', mxResources.get('diamond')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_DIAMOND_THIN, 1], 'geIcon geSprite geSprite-startthindiamond', null).setAttribute('title', mxResources.get('diamondThin')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_CLASSIC, 0], 'geIcon geSprite geSprite-startclassictrans', null).setAttribute('title', mxResources.get('classic')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_BLOCK, 0], 'geIcon geSprite geSprite-startblocktrans', null).setAttribute('title', mxResources.get('block')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_OVAL, 0], 'geIcon geSprite geSprite-startovaltrans', null).setAttribute('title', mxResources.get('oval')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_DIAMOND, 0], 'geIcon geSprite geSprite-startdiamondtrans', null).setAttribute('title', mxResources.get('diamond')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_DIAMOND_THIN, 0], 'geIcon geSprite geSprite-startthindiamondtrans', null).setAttribute('title', mxResources.get('diamondThin')); - // })); - // var lineend = this.addMenuFunction('geSprite-endclassic', mxResources.get('lineend'), false, mxUtils.bind(this, function(menu) - // { - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.NONE, 0], 'geIcon geSprite geSprite-noarrow', null).setAttribute('title', mxResources.get('none')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_CLASSIC, 1], 'geIcon geSprite geSprite-endclassic', null).setAttribute('title', mxResources.get('classic')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_OPEN, 1], 'geIcon geSprite geSprite-endopen', null).setAttribute('title', mxResources.get('openArrow')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_BLOCK, 1], 'geIcon geSprite geSprite-endblock', null).setAttribute('title', mxResources.get('block')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_OVAL, 1], 'geIcon geSprite geSprite-endoval', null).setAttribute('title', mxResources.get('oval')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_DIAMOND, 1], 'geIcon geSprite geSprite-enddiamond', null).setAttribute('title', mxResources.get('diamond')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_DIAMOND_THIN, 1], 'geIcon geSprite geSprite-endthindiamond', null).setAttribute('title', mxResources.get('diamondThin')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_CLASSIC, 0], 'geIcon geSprite geSprite-endclassictrans', null).setAttribute('title', mxResources.get('classic')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_BLOCK, 0], 'geIcon geSprite geSprite-endblocktrans', null).setAttribute('title', mxResources.get('block')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_OVAL, 0], 'geIcon geSprite geSprite-endovaltrans', null).setAttribute('title', mxResources.get('oval')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_DIAMOND, 0], 'geIcon geSprite geSprite-enddiamondtrans', null).setAttribute('title', mxResources.get('diamond')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_DIAMOND_THIN, 0], 'geIcon geSprite geSprite-endthindiamondtrans', null).setAttribute('title', mxResources.get('diamondThin')); - // })); - // this.addItems(['-', 'strokeColor', 'image', 'fillColor']); - // this.addItem('geSprite-gradientcolor', 'gradientColor').setAttribute('title', mxResources.get('gradient')); - // this.addItems(['shadow']); - - var graph = this.editorUi.editor.graph; - - // Update font size and font family labels - var update = mxUtils.bind(this, function() - { - var ff = 'Helvetica'; - var fs = '12'; - var state = graph.getView().getState(graph.getSelectionCell()); - - if (state != null) - { - ff = state.style[mxConstants.STYLE_FONTFAMILY] || ff; - fs = state.style[mxConstants.STYLE_FONTSIZE] || fs; - - if (ff.length > 10) - { - ff = ff.substring(0, 8) + '...'; - } - - fontElt.innerHTML = ff; - sizeElt.innerHTML = fs; - } - }); - - graph.getSelectionModel().addListener(mxEvent.CHANGE, update); - graph.getModel().addListener(mxEvent.CHANGE, update); - - // Giuseppe Careri - // Updates button states - //this.addEdgeSelectionHandler([line, linestart, lineend]); - //this.addSelectionHandler([align]); -}; - -/** - * Hides the current menu. - */ -Toolbar.prototype.hideMenu = function() -{ - if (this.currentMenu != null) - { - this.currentMenu.hideMenu(); - this.currentMenu.destroy(); - this.currentMenu = null; - } -}; - -/** - * Adds a label to the toolbar. - */ -Toolbar.prototype.addMenu = function(label, tooltip, showLabels, name) -{ - var menu = this.editorUi.menus.get(name); - var elt = this.addMenuFunction(label, tooltip, showLabels, menu.funct); - - menu.addListener('stateChanged', function() - { - elt.setEnabled(menu.enabled); - }); - - return elt; -}; - -/** - * Adds a label to the toolbar. - */ -Toolbar.prototype.addMenuFunction = function(label, tooltip, showLabels, funct) -{ - var elt = (showLabels) ? this.createLabel(label) : this.createButton(label); - this.initElement(elt, tooltip); - this.addMenuHandler(elt, showLabels, funct); - this.container.appendChild(elt); - - return elt; -}; - -/** - * Adds a separator to the separator. - */ -Toolbar.prototype.addSeparator = function() -{ - var elt = document.createElement('div'); - elt.className = 'geSeparator'; - this.container.appendChild(elt); - - return elt; -}; - -/** - * Adds given action item - */ -Toolbar.prototype.addItems = function(keys) -{ - for (var i = 0; i < keys.length; i++) - { - var key = keys[i]; - - if (key == '-') - { - this.addSeparator(); - } - else - { - this.addItem('geSprite-' + key.toLowerCase(), key); - } - } -}; - -/** - * Adds given action item - */ -Toolbar.prototype.addItem = function(sprite, key) -{ - var action = this.editorUi.actions.get(key); - var elt = null; - - if (action != null) - { - elt = this.addButton(sprite, action.label, action.funct); - elt.setEnabled(action.enabled); - - action.addListener('stateChanged', function() - { - elt.setEnabled(action.enabled); - }); - } - - return elt; -}; - -/** - * Adds a button to the toolbar. - */ -Toolbar.prototype.addButton = function(classname, tooltip, funct) -{ - var elt = this.createButton(classname); - - this.initElement(elt, tooltip); - this.addClickHandler(elt, funct); - this.container.appendChild(elt); - - return elt; -}; - -/** - * Updates the states of the given toolbar items based on the selection. - */ -Toolbar.prototype.addSelectionHandler = function(items) -{ - var graph = this.editorUi.editor.graph; - - var selectionListener = function() - { - var selected = !graph.isSelectionEmpty(); - - for (var i = 0; i < items.length; i++) - { - items[i].setEnabled(selected); - } - }; - - graph.getSelectionModel().addListener(mxEvent.CHANGE, selectionListener); - selectionListener(); -}; - -/** - * Updates the states of the given toolbar items based on the selection. - */ -Toolbar.prototype.addEdgeSelectionHandler = function(items) -{ - var graph = this.editorUi.editor.graph; - - var selectionListener = function() - { - var edgeSelected = false; - - if (!graph.isSelectionEmpty()) - { - var cells = graph.getSelectionCells(); - - for (var i = 0; i < cells.length; i++) - { - if (graph.getModel().isEdge(cells[i])) - { - edgeSelected = true; - break; - } - } - } - - for (var i = 0; i < items.length; i++) - { - items[i].setEnabled(edgeSelected); - } - }; - - graph.getSelectionModel().addListener(mxEvent.CHANGE, selectionListener); - selectionListener(); -}; - -/** - * Initializes the given toolbar element. - */ -Toolbar.prototype.initElement = function(elt, tooltip) -{ - elt.setAttribute('tabindex', '0'); - - // Adds tooltip - if (tooltip != null) - { - elt.setAttribute('title', tooltip); - } - - this.addEnabledState(elt); -}; - -/** - * Adds enabled state with setter to DOM node (avoids JS wrapper). - */ -Toolbar.prototype.addEnabledState = function(elt) -{ - var classname = elt.className; - - elt.setEnabled = function(value) - { - elt.enabled = value; - - if (value) - { - elt.className = classname; - } - else - { - elt.className = classname + ' geDisabled'; - } - }; - - elt.setEnabled(true); -}; - -/** - * Adds enabled state with setter to DOM node (avoids JS wrapper). - */ -Toolbar.prototype.addClickHandler = function(elt, funct) -{ - if (funct != null) - { - mxEvent.addListener(elt, 'click', function(evt) - { - if (elt.enabled) - { - funct(evt); - } - - mxEvent.consume(evt); - }); - } -}; - -/** - * Creates and returns a new button. - */ -Toolbar.prototype.createButton = function(classname) -{ - var elt = document.createElement('a'); - elt.setAttribute('href', 'javascript:void(0);'); - elt.className = 'geButton'; - - var inner = document.createElement('div'); - inner.className = 'geSprite ' + classname; - elt.appendChild(inner); - - return elt; -}; - -/** - * Creates and returns a new button. - */ -Toolbar.prototype.createLabel = function(label, tooltip) -{ - var elt = document.createElement('a'); - elt.setAttribute('href', 'javascript:void(0);'); - elt.className = 'geLabel'; - mxUtils.write(elt, label); - - return elt; -}; - -/** - * Adds a handler for showing a menu in the given element. - */ -Toolbar.prototype.addMenuHandler = function(elt, showLabels, funct, showAll) -{ - if (funct != null) - { - var graph = this.editorUi.editor.graph; - var menu = null; - - mxEvent.addListener(elt, 'click', mxUtils.bind(this, function(evt) - { - if (elt.enabled == null || elt.enabled) - { - graph.panningHandler.hideMenu(); - menu = new mxPopupMenu(funct); - menu.div.className += ' geToolbarMenu'; - menu.showDisabled = showAll; - menu.labels = showLabels; - menu.autoExpand = true; - - menu.popup(elt.offsetLeft, elt.offsetTop + elt.offsetHeight + 34, null, evt); - this.currentMenu = menu; - } - - mxEvent.consume(evt); - })); - } -}; +var _0x3a71=["\x65\x64\x69\x74\x6F\x72\x55\x69","\x63\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x69\x6E\x69\x74","\x68\x69\x64\x65\x4D\x65\x6E\x75","\x62\x69\x6E\x64","\x61\x64\x64\x47\x65\x73\x74\x75\x72\x65\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x73\x61\x76\x65","\x70\x75\x62\x6C\x69\x73\x68","\x2D","\x70\x72\x69\x6E\x74","\x75\x6E\x64\x6F","\x72\x65\x64\x6F","\x63\x6F\x70\x79","\x63\x75\x74","\x70\x61\x73\x74\x65","\x64\x65\x6C\x65\x74\x65","\x64\x75\x70\x6C\x69\x63\x61\x74\x65","\x61\x63\x74\x75\x61\x6C\x53\x69\x7A\x65","\x7A\x6F\x6F\x6D\x49\x6E","\x7A\x6F\x6F\x6D\x4F\x75\x74","\x61\x64\x64\x49\x74\x65\x6D\x73","\x48\x65\x6C\x76\x65\x74\x69\x63\x61","\x66\x6F\x6E\x74\x46\x61\x6D\x69\x6C\x79","\x67\x65\x74","\x61\x64\x64\x4D\x65\x6E\x75","\x77\x68\x69\x74\x65\x53\x70\x61\x63\x65","\x73\x74\x79\x6C\x65","\x6E\x6F\x77\x72\x61\x70","\x6F\x76\x65\x72\x66\x6C\x6F\x77","\x68\x69\x64\x64\x65\x6E","\x77\x69\x64\x74\x68","\x37\x30\x70\x78","\x61\x64\x64\x53\x65\x70\x61\x72\x61\x74\x6F\x72","\x31\x32","\x66\x6F\x6E\x74\x53\x69\x7A\x65","\x33\x30\x70\x78","\x62\x6F\x6C\x64","\x69\x74\x61\x6C\x69\x63","\x75\x6E\x64\x65\x72\x6C\x69\x6E\x65","\x67\x72\x61\x70\x68","\x65\x64\x69\x74\x6F\x72","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C","\x67\x65\x74\x53\x74\x61\x74\x65","\x67\x65\x74\x56\x69\x65\x77","\x53\x54\x59\x4C\x45\x5F\x46\x4F\x4E\x54\x46\x41\x4D\x49\x4C\x59","\x53\x54\x59\x4C\x45\x5F\x46\x4F\x4E\x54\x53\x49\x5A\x45","\x6C\x65\x6E\x67\x74\x68","\x73\x75\x62\x73\x74\x72\x69\x6E\x67","\x2E\x2E\x2E","\x69\x6E\x6E\x65\x72\x48\x54\x4D\x4C","\x61\x64\x64\x4C\x69\x73\x74\x65\x6E\x65\x72","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x4D\x6F\x64\x65\x6C","\x67\x65\x74\x4D\x6F\x64\x65\x6C","\x63\x75\x72\x72\x65\x6E\x74\x4D\x65\x6E\x75","\x64\x65\x73\x74\x72\x6F\x79","\x6D\x65\x6E\x75\x73","\x66\x75\x6E\x63\x74","\x61\x64\x64\x4D\x65\x6E\x75\x46\x75\x6E\x63\x74\x69\x6F\x6E","\x73\x74\x61\x74\x65\x43\x68\x61\x6E\x67\x65\x64","\x65\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x45\x6E\x61\x62\x6C\x65\x64","\x63\x72\x65\x61\x74\x65\x4C\x61\x62\x65\x6C","\x63\x72\x65\x61\x74\x65\x42\x75\x74\x74\x6F\x6E","\x69\x6E\x69\x74\x45\x6C\x65\x6D\x65\x6E\x74","\x61\x64\x64\x4D\x65\x6E\x75\x48\x61\x6E\x64\x6C\x65\x72","\x61\x70\x70\x65\x6E\x64\x43\x68\x69\x6C\x64","\x64\x69\x76","\x63\x72\x65\x61\x74\x65\x45\x6C\x65\x6D\x65\x6E\x74","\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65","\x67\x65\x53\x65\x70\x61\x72\x61\x74\x6F\x72","\x67\x65\x53\x70\x72\x69\x74\x65\x2D","\x74\x6F\x4C\x6F\x77\x65\x72\x43\x61\x73\x65","\x61\x64\x64\x49\x74\x65\x6D","\x61\x63\x74\x69\x6F\x6E\x73","\x6C\x61\x62\x65\x6C","\x61\x64\x64\x42\x75\x74\x74\x6F\x6E","\x61\x64\x64\x43\x6C\x69\x63\x6B\x48\x61\x6E\x64\x6C\x65\x72","\x61\x64\x64\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x48\x61\x6E\x64\x6C\x65\x72","\x69\x73\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x45\x6D\x70\x74\x79","\x61\x64\x64\x45\x64\x67\x65\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x48\x61\x6E\x64\x6C\x65\x72","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73","\x69\x73\x45\x64\x67\x65","\x74\x61\x62\x69\x6E\x64\x65\x78","\x30","\x73\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x74\x69\x74\x6C\x65","\x61\x64\x64\x45\x6E\x61\x62\x6C\x65\x64\x53\x74\x61\x74\x65","\x20\x67\x65\x44\x69\x73\x61\x62\x6C\x65\x64","\x63\x6C\x69\x63\x6B","\x63\x6F\x6E\x73\x75\x6D\x65","\x61","\x68\x72\x65\x66","\x6A\x61\x76\x61\x73\x63\x72\x69\x70\x74\x3A\x76\x6F\x69\x64\x28\x30\x29\x3B","\x67\x65\x42\x75\x74\x74\x6F\x6E","\x67\x65\x53\x70\x72\x69\x74\x65\x20","\x67\x65\x4C\x61\x62\x65\x6C","\x77\x72\x69\x74\x65","\x70\x61\x6E\x6E\x69\x6E\x67\x48\x61\x6E\x64\x6C\x65\x72","\x20\x67\x65\x54\x6F\x6F\x6C\x62\x61\x72\x4D\x65\x6E\x75","\x73\x68\x6F\x77\x44\x69\x73\x61\x62\x6C\x65\x64","\x6C\x61\x62\x65\x6C\x73","\x61\x75\x74\x6F\x45\x78\x70\x61\x6E\x64","\x6F\x66\x66\x73\x65\x74\x4C\x65\x66\x74","\x6F\x66\x66\x73\x65\x74\x54\x6F\x70","\x6F\x66\x66\x73\x65\x74\x48\x65\x69\x67\x68\x74","\x70\x6F\x70\x75\x70"];function Toolbar(_0x64dbx2,_0x64dbx3){this[_0x3a71[0]]= _0x64dbx2;this[_0x3a71[1]]= _0x64dbx3;this[_0x3a71[2]]();mxEvent[_0x3a71[5]](document,mxUtils[_0x3a71[4]](this,function(_0x64dbx4){this[_0x3a71[3]]()}))}Toolbar[_0x3a71[6]][_0x3a71[2]]= function(){this[_0x3a71[21]]([_0x3a71[7],_0x3a71[8],_0x3a71[9],_0x3a71[10],_0x3a71[11],_0x3a71[12],_0x3a71[9],_0x3a71[13],_0x3a71[14],_0x3a71[15],_0x3a71[16],_0x3a71[9],_0x3a71[17],_0x3a71[9],_0x3a71[18],_0x3a71[19],_0x3a71[20],_0x3a71[9]]);var _0x64dbx5=this[_0x3a71[25]](_0x3a71[22],mxResources[_0x3a71[24]](_0x3a71[23]),true,_0x3a71[23]);_0x64dbx5[_0x3a71[27]][_0x3a71[26]]= _0x3a71[28];_0x64dbx5[_0x3a71[27]][_0x3a71[29]]= _0x3a71[30];_0x64dbx5[_0x3a71[27]][_0x3a71[31]]= _0x3a71[32];this[_0x3a71[33]]();var _0x64dbx6=this[_0x3a71[25]](_0x3a71[34],mxResources[_0x3a71[24]](_0x3a71[35]),true,_0x3a71[35]);_0x64dbx6[_0x3a71[27]][_0x3a71[26]]= _0x3a71[28];_0x64dbx6[_0x3a71[27]][_0x3a71[29]]= _0x3a71[30];_0x64dbx6[_0x3a71[27]][_0x3a71[31]]= _0x3a71[36];this[_0x3a71[21]]([_0x3a71[9],_0x3a71[37],_0x3a71[38],_0x3a71[39]]);var _0x64dbx7=this[_0x3a71[0]][_0x3a71[41]][_0x3a71[40]];var _0x64dbx8=mxUtils[_0x3a71[4]](this,function(){var _0x64dbx9=_0x3a71[22];var _0x64dbxa=_0x3a71[34];var _0x64dbxb=_0x64dbx7[_0x3a71[44]]()[_0x3a71[43]](_0x64dbx7[_0x3a71[42]]());if(_0x64dbxb!= null){_0x64dbx9= _0x64dbxb[_0x3a71[27]][mxConstants[_0x3a71[45]]]|| _0x64dbx9;_0x64dbxa= _0x64dbxb[_0x3a71[27]][mxConstants[_0x3a71[46]]]|| _0x64dbxa;if(_0x64dbx9[_0x3a71[47]]> 10){_0x64dbx9= _0x64dbx9[_0x3a71[48]](0,8)+ _0x3a71[49]};_0x64dbx5[_0x3a71[50]]= _0x64dbx9;_0x64dbx6[_0x3a71[50]]= _0x64dbxa}});_0x64dbx7[_0x3a71[52]]()[_0x3a71[51]](mxEvent.CHANGE,_0x64dbx8);_0x64dbx7[_0x3a71[53]]()[_0x3a71[51]](mxEvent.CHANGE,_0x64dbx8)};Toolbar[_0x3a71[6]][_0x3a71[3]]= function(){if(this[_0x3a71[54]]!= null){this[_0x3a71[54]][_0x3a71[3]]();this[_0x3a71[54]][_0x3a71[55]]();this[_0x3a71[54]]= null}};Toolbar[_0x3a71[6]][_0x3a71[25]]= function(_0x64dbxc,_0x64dbxd,_0x64dbxe,_0x64dbxf){var _0x64dbx10=this[_0x3a71[0]][_0x3a71[56]][_0x3a71[24]](_0x64dbxf);var _0x64dbx11=this[_0x3a71[58]](_0x64dbxc,_0x64dbxd,_0x64dbxe,_0x64dbx10[_0x3a71[57]]);_0x64dbx10[_0x3a71[51]](_0x3a71[59],function(){_0x64dbx11[_0x3a71[61]](_0x64dbx10[_0x3a71[60]])});return _0x64dbx11};Toolbar[_0x3a71[6]][_0x3a71[58]]= function(_0x64dbxc,_0x64dbxd,_0x64dbxe,_0x64dbx12){var _0x64dbx11=(_0x64dbxe)?this[_0x3a71[62]](_0x64dbxc):this[_0x3a71[63]](_0x64dbxc);this[_0x3a71[64]](_0x64dbx11,_0x64dbxd);this[_0x3a71[65]](_0x64dbx11,_0x64dbxe,_0x64dbx12);this[_0x3a71[1]][_0x3a71[66]](_0x64dbx11);return _0x64dbx11};Toolbar[_0x3a71[6]][_0x3a71[33]]= function(){var _0x64dbx11=document[_0x3a71[68]](_0x3a71[67]);_0x64dbx11[_0x3a71[69]]= _0x3a71[70];this[_0x3a71[1]][_0x3a71[66]](_0x64dbx11);return _0x64dbx11};Toolbar[_0x3a71[6]][_0x3a71[21]]= function(_0x64dbx13){for(var _0x64dbx14=0;_0x64dbx14< _0x64dbx13[_0x3a71[47]];_0x64dbx14++){var _0x64dbx15=_0x64dbx13[_0x64dbx14];if(_0x64dbx15== _0x3a71[9]){this[_0x3a71[33]]()}else {this[_0x3a71[73]](_0x3a71[71]+ _0x64dbx15[_0x3a71[72]](),_0x64dbx15)}}};Toolbar[_0x3a71[6]][_0x3a71[73]]= function(_0x64dbx16,_0x64dbx15){var _0x64dbx17=this[_0x3a71[0]][_0x3a71[74]][_0x3a71[24]](_0x64dbx15);var _0x64dbx11=null;if(_0x64dbx17!= null){_0x64dbx11= this[_0x3a71[76]](_0x64dbx16,_0x64dbx17[_0x3a71[75]],_0x64dbx17[_0x3a71[57]]);_0x64dbx11[_0x3a71[61]](_0x64dbx17[_0x3a71[60]]);_0x64dbx17[_0x3a71[51]](_0x3a71[59],function(){_0x64dbx11[_0x3a71[61]](_0x64dbx17[_0x3a71[60]])})};return _0x64dbx11};Toolbar[_0x3a71[6]][_0x3a71[76]]= function(_0x64dbx18,_0x64dbxd,_0x64dbx12){var _0x64dbx11=this[_0x3a71[63]](_0x64dbx18);this[_0x3a71[64]](_0x64dbx11,_0x64dbxd);this[_0x3a71[77]](_0x64dbx11,_0x64dbx12);this[_0x3a71[1]][_0x3a71[66]](_0x64dbx11);return _0x64dbx11};Toolbar[_0x3a71[6]][_0x3a71[78]]= function(_0x64dbx19){var _0x64dbx7=this[_0x3a71[0]][_0x3a71[41]][_0x3a71[40]];var _0x64dbx1a=function(){var _0x64dbx1b=!_0x64dbx7[_0x3a71[79]]();for(var _0x64dbx14=0;_0x64dbx14< _0x64dbx19[_0x3a71[47]];_0x64dbx14++){_0x64dbx19[_0x64dbx14][_0x3a71[61]](_0x64dbx1b)}};_0x64dbx7[_0x3a71[52]]()[_0x3a71[51]](mxEvent.CHANGE,_0x64dbx1a);_0x64dbx1a()};Toolbar[_0x3a71[6]][_0x3a71[80]]= function(_0x64dbx19){var _0x64dbx7=this[_0x3a71[0]][_0x3a71[41]][_0x3a71[40]];var _0x64dbx1a=function(){var _0x64dbx1c=false;if(!_0x64dbx7[_0x3a71[79]]()){var _0x64dbx1d=_0x64dbx7[_0x3a71[81]]();for(var _0x64dbx14=0;_0x64dbx14< _0x64dbx1d[_0x3a71[47]];_0x64dbx14++){if(_0x64dbx7[_0x3a71[53]]()[_0x3a71[82]](_0x64dbx1d[_0x64dbx14])){_0x64dbx1c= true;break}}};for(var _0x64dbx14=0;_0x64dbx14< _0x64dbx19[_0x3a71[47]];_0x64dbx14++){_0x64dbx19[_0x64dbx14][_0x3a71[61]](_0x64dbx1c)}};_0x64dbx7[_0x3a71[52]]()[_0x3a71[51]](mxEvent.CHANGE,_0x64dbx1a);_0x64dbx1a()};Toolbar[_0x3a71[6]][_0x3a71[64]]= function(_0x64dbx11,_0x64dbxd){_0x64dbx11[_0x3a71[85]](_0x3a71[83],_0x3a71[84]);if(_0x64dbxd!= null){_0x64dbx11[_0x3a71[85]](_0x3a71[86],_0x64dbxd)};this[_0x3a71[87]](_0x64dbx11)};Toolbar[_0x3a71[6]][_0x3a71[87]]= function(_0x64dbx11){var _0x64dbx18=_0x64dbx11[_0x3a71[69]];_0x64dbx11[_0x3a71[61]]= function(_0x64dbx1e){_0x64dbx11[_0x3a71[60]]= _0x64dbx1e;if(_0x64dbx1e){_0x64dbx11[_0x3a71[69]]= _0x64dbx18}else {_0x64dbx11[_0x3a71[69]]= _0x64dbx18+ _0x3a71[88]}};_0x64dbx11[_0x3a71[61]](true)};Toolbar[_0x3a71[6]][_0x3a71[77]]= function(_0x64dbx11,_0x64dbx12){if(_0x64dbx12!= null){mxEvent[_0x3a71[51]](_0x64dbx11,_0x3a71[89],function(_0x64dbx4){if(_0x64dbx11[_0x3a71[60]]){_0x64dbx12(_0x64dbx4)};mxEvent[_0x3a71[90]](_0x64dbx4)})}};Toolbar[_0x3a71[6]][_0x3a71[63]]= function(_0x64dbx18){var _0x64dbx11=document[_0x3a71[68]](_0x3a71[91]);_0x64dbx11[_0x3a71[85]](_0x3a71[92],_0x3a71[93]);_0x64dbx11[_0x3a71[69]]= _0x3a71[94];var _0x64dbx1f=document[_0x3a71[68]](_0x3a71[67]);_0x64dbx1f[_0x3a71[69]]= _0x3a71[95]+ _0x64dbx18;_0x64dbx11[_0x3a71[66]](_0x64dbx1f);return _0x64dbx11};Toolbar[_0x3a71[6]][_0x3a71[62]]= function(_0x64dbxc,_0x64dbxd){var _0x64dbx11=document[_0x3a71[68]](_0x3a71[91]);_0x64dbx11[_0x3a71[85]](_0x3a71[92],_0x3a71[93]);_0x64dbx11[_0x3a71[69]]= _0x3a71[96];mxUtils[_0x3a71[97]](_0x64dbx11,_0x64dbxc);return _0x64dbx11};Toolbar[_0x3a71[6]][_0x3a71[65]]= function(_0x64dbx11,_0x64dbxe,_0x64dbx12,_0x64dbx20){if(_0x64dbx12!= null){var _0x64dbx7=this[_0x3a71[0]][_0x3a71[41]][_0x3a71[40]];var _0x64dbx10=null;mxEvent[_0x3a71[51]](_0x64dbx11,_0x3a71[89],mxUtils[_0x3a71[4]](this,function(_0x64dbx4){if(_0x64dbx11[_0x3a71[60]]== null|| _0x64dbx11[_0x3a71[60]]){_0x64dbx7[_0x3a71[98]][_0x3a71[3]]();_0x64dbx10= new mxPopupMenu(_0x64dbx12);_0x64dbx10[_0x3a71[67]][_0x3a71[69]]+= _0x3a71[99];_0x64dbx10[_0x3a71[100]]= _0x64dbx20;_0x64dbx10[_0x3a71[101]]= _0x64dbxe;_0x64dbx10[_0x3a71[102]]= true;_0x64dbx10[_0x3a71[106]](_0x64dbx11[_0x3a71[103]],_0x64dbx11[_0x3a71[104]]+ _0x64dbx11[_0x3a71[105]]+ 34,null,_0x64dbx4);this[_0x3a71[54]]= _0x64dbx10};mxEvent[_0x3a71[90]](_0x64dbx4)}))}} \ No newline at end of file diff --git a/public/assets/plugins/jscripty/js/custom.js b/public/assets/plugins/jscripty/js/custom.js index a53e30b..ed6daa0 100644 --- a/public/assets/plugins/jscripty/js/custom.js +++ b/public/assets/plugins/jscripty/js/custom.js @@ -1,283 +1 @@ -var urlParams = (function(url) { - var result = new Object(); - var idx = url.lastIndexOf('?'); - - if (idx > 0) { - var params = url.substring(idx + 1).split('&'); - - for (var i = 0; i < params.length; i++) { - idx = params[i].indexOf('='); - - if (idx > 0) { - result[params[i].substring(0, idx)] = params[i].substring(idx + 1); - } - } - } - - return result; -})(window.location.href); - -var t0 = new Date(); - -// Public global variables -var MAX_REQUEST_SIZE = 10485760; -var MAX_WIDTH = 12000; -var MAX_HEIGHT = 12000; - -// CUSTOM_PARAMETERS - URLs for save and export -var EXPORT_URL = 'http://exp.draw.io/ImageExport2/export'; -var SHARE_HOST = 'http://localhost:3000'; - -var SAVE_URL = 'api/jscripty/projects/'; -var VARIABLE_URL = 'api/square/variables/'; - -// Paths and files -var STENCIL_PATH = '/assets/plugins/jscripty/stencils'; -var SHAPES_PATH = '/assets/plugins/mxgraph/shapes'; -var IMAGE_PATH = '/assets/plugins/mxgraph/images'; -// Path for images inside the diagram -//var GRAPH_IMAGE_PATH = 'assets/plugins/mxgraph/img'; -//var ICONFINDER_PATH = 'iconfinder'; -var STYLE_PATH = '/assets/plugins/mxgraph/styles'; -var CSS_PATH = '/assets/plugins/mxgraph/styles'; -var OPEN_FORM = 'api/jscripty/projects/open'; -var TEMPLATE_PATH = '/assets/plugins/jscripty/templates'; - -// Directory for i18 files and basename for main i18n file -var RESOURCES_PATH = '/assets/plugins/jscripty/resources'; -var RESOURCE_BASE = RESOURCES_PATH + '/dia'; - -// Specifies connection mode for touch devices (at least one should be true) -var tapAndHoldStartsConnection = true; -var showConnectorImg = true; - -var mxLoadResources = false; -// var mxLanguage = ''; -console.log('custom', localStorage.getItem("NG_TRANSLATE_LANG_KEY")); -switch (localStorage.getItem("NG_TRANSLATE_LANG_KEY")) { - case 'en_EN': - mxLanguage = 'en'; - break; - case 'it': - mxLanguage = 'it'; - break; - default: - mxLanguage = 'it'; -} -console.log('mxLanguage', mxLanguage); - -var mxLanguages = ['ar', 'bs', 'cs', 'da', 'de', 'el', 'es', 'es-ar', 'fr', - 'hu', 'id', 'it', 'ja', 'ko', 'nl', 'no', 'pl', 'pt-br', 'pt', 'ro', 'ru', - 'sr', 'sv', 'th', 'tr', 'uk', 'zh' -]; -var mxBasePath = 'assets/plugins/mxgraph'; -var geBasePath = 'assets/plugins/mxgraph/js'; - -var ISPEECHLANG = { - usenglishfemale: "US English Female", - usenglishmale: "US English Male", - ukenglishfemale: "UK English Female", - ukenglishmale: "UK English Male", - auenglishfemale: "Australian English", - usspanishfemale: "US Spanish Female", - usspanishmale: "US Spanish Male", - chchinesefemale: "Chinese Female", - chchinesemale: "Chinese Male", - hkchinesefemale: "Hong Kong Cantonese Female", - twchinesefemale: "Taiwan Chinese Female", - jpjapanesefemale: "Japanese Female", - jpjapanesemale: "Japanese Male", - krkoreanfemale: "Korean Female", - krkoreanmale: "Korean Male", - caenglishfemale: "Canadian English Female", - huhungarianfemale: "Hungarian Female", - brportuguesefemale: "Brazilian Portuguese Female", - eurportuguesefemale: "European Portuguese Female", - eurportuguesemale: "European Portuguese Male", - eurspanishfemale: "European Spanish Female", - eurspanishmale: "European Spanish Male", - eurcatalanfemale: "European Catalan Female", - eurczechfemale: "European Czech Female", - eurdanishfemale: "European Danish Female", - eurfinnishfemale: "European Finnish Female", - eurfrenchfemale: "European French Female", - eurfrenchmale: "European French Male", - eurnorwegianfemale: "European Norwegian Female", - eurdutchfemale: "European Dutch Female", - eurpolishfemale: "European Polish Female", - euritalianfemale: "European Italian Female", - eurturkishfemale: "European Turkish Female ", - eurturkishmale: "European Turkish Male", - eurgermanfemale: "European German Female", - eurgermanmale: "European German Male", - rurussianfemale: "Russian Female", - rurussianmale: "Russian Male", - swswedishfemale: "Swedish Female", - cafrenchfemale: "Canadian French Female", - cafrenchmale: "Canadian French Male" -}; - -var ISPEECHASRLANG = { - "en-US": "English (US)", - "en-CA": "English (Canada)", - "en-GB": "English (UK)", - "en-AU": "English (Australia)", - "es-ES": "Spanish (Spain)", - "es-MX": "Spanish (Mexico)", - "it-IT": "Italian (Italy) / Finnish (Finland)", - "fr-FR": "French (France)", - "fr-CA": "French (Canada)", - "pl-PL": "Polish (Poland)", - "pt-PT": "Portuguese (Portugal)", - "ca-ES": "Catalan (Catalan)", - "zh-TW": "Chinese (Taiwan)", - "da-DK": "Danish (Denmark)", - "fr-FR": "German (Germany)", - "ja-JP": "Japanese (Japan)", - "ko-KR": "Korean (Korea)", - "nl-NL": "Dutch (Netherlands)", - "nb-NO": "Norwegian (Norway)", - "pt-BR": "Portuguese (Brazil)", - "ru-RU": "Russian (Russia)", - "sv-SE": "Swedish (Sweden)", - "zh-CN": "Chinese (China)", - "zh-HK": "Chinese (Hong Kong)" -}; - -var ISPEECHASRMODEL = { - 0: "Default", - date: "Date", - usmoney: "US Money", - numbersto9: "Numbers to 9", - numbersto99: "Numbers to 99", - numbersto999: "Numbers to 999", - time: "Time", - phonenumber: "Phone number", - streets: "Streets", - citystate: "US City/States" -}; - -var GOOGLETTSLANG = { - "af": "Afrikaans", - "sq": "Albanian", - "am": "Amharic", - "ar": "Arabic", - "hy": "Armenian", - "az": "Azerbaijani", - "eu": "Basque", - "be": "Belarusian", - "bn": "Bengali", - "bh": "Bihari", - "bs": "Bosnian", - "br": "Breton", - "bg": "Bulgarian", - "km": "Cambodian", - "ca": "Catalan", - "zh-CN": "Chinese (Simplified)", - "zh-TW": "Chinese (Traditional)", - "co": "Corsican", - "hr": "Croatian", - "cs": "Czech", - "da": "Danish", - "nl": "Dutch", - "en": "English", - "eo": "Esperanto", - "et": "Estonian", - "fo": "Faroese", - "tl": "Filipino", - "fi": "Finnish", - "fr": "French", - "fy": "Frisian", - "gl": "Galician", - "ka": "Georgian", - "de": "German", - "el": "Greek", - "gn": "Guarani", - "gu": "Gujarati", - "xx-hacker": "Hacker", - "ha": "Hausa", - "iw": "Hebrew", - "hi": "Hindi", - "hu": "Hungarian", - "is": "Icelandic", - "id": "Indonesian", - "ia": "Interlingua", - "ga": "Irish", - "it": "Italian", - "jw": "Javanese", - "ja": "Japanese", - "kn": "Kannada", - "kk": "Kazakh", - "rw": "Kinyarwanda", - "rn": "Kirundi", - "xx-klingon": "Klingon", - "ku": "Kurdish", - "ko": "Korean", - "ky": "Kyrgyz", - "lo": "Laothian", - "la": "Latin", - "lv": "Latvian", - "ln": "Lingala", - "lt": "Lithuanian", - "mk": "Macedonian", - "mg": "Malagasy", - "ms": "Malay", - "ml": "Malayalam", - "mt": "Maltese", - "mi": "Maori", - "mr": "Marathi", - "mo": "Moldavian", - "mn": "Mongolian", - "sr-ME": "Montenegrin", - "ne": "Nepali", - "no": "Norwegian", - "nn": "Norwegian (Nynorsk)", - "oc": "Occitan", - "or": "Oriya", - "om": "Oromo", - "ps": "Pashto", - "fa": "Persian", - "xx-pirate": "Pirate", - "pl": "Polish", - "pt-BR": "Portuguese (Brazil)", - "pt-PT": "Portuguese (Portugal)", - "pa": "Punjabi", - "qu": "Quechua", - "ro": "Romanian", - "rm": "Romansh", - "ru": "Russian", - "gd": "Scots Gaelic", - "sr": "Serbian", - "sh": "Serbo-Croatian", - "st": "Sesotho", - "sn": "Shona", - "sd": "Sindhi", - "si": "Sinhalese", - "sk": "Slovak", - "sl": "Slovenian", - "so": "Somali", - "es": "Spanish", - "su": "Sundanese", - "sw": "Swahili", - "sv": "Swedish", - "tg": "Tajik", - "ta": "Tamil", - "tt": "Tatar", - "te": "Telugu", - "th": "Thai", - "ti": "Tigrinya", - "to": "Tonga", - "tr": "Turkish", - "tk": "Turkmen", - "tw": "Twi", - "ug": "Uighur", - "uk": "Ukrainian", - "ur": "Urdu", - "uz": "Uzbek", - "vi": "Vietnamese", - "cy": "Welsh", - "xh": "Xhosa", - "yi": "Yiddish", - "yo": "Yoruba", - "zu": "Zulu" -}; +var _0x11c7=["\x68\x72\x65\x66","\x6C\x6F\x63\x61\x74\x69\x6F\x6E","\x3F","\x6C\x61\x73\x74\x49\x6E\x64\x65\x78\x4F\x66","\x26","\x73\x70\x6C\x69\x74","\x73\x75\x62\x73\x74\x72\x69\x6E\x67","\x6C\x65\x6E\x67\x74\x68","\x3D","\x69\x6E\x64\x65\x78\x4F\x66","\x68\x74\x74\x70\x3A\x2F\x2F\x65\x78\x70\x2E\x64\x72\x61\x77\x2E\x69\x6F\x2F\x49\x6D\x61\x67\x65\x45\x78\x70\x6F\x72\x74\x32\x2F\x65\x78\x70\x6F\x72\x74","\x68\x74\x74\x70\x3A\x2F\x2F\x6C\x6F\x63\x61\x6C\x68\x6F\x73\x74\x3A\x33\x30\x30\x30","\x61\x70\x69\x2F\x6A\x73\x63\x72\x69\x70\x74\x79\x2F\x70\x72\x6F\x6A\x65\x63\x74\x73\x2F","\x61\x70\x69\x2F\x73\x71\x75\x61\x72\x65\x2F\x76\x61\x72\x69\x61\x62\x6C\x65\x73\x2F","\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x6A\x73\x63\x72\x69\x70\x74\x79\x2F\x73\x74\x65\x6E\x63\x69\x6C\x73","\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x6D\x78\x67\x72\x61\x70\x68\x2F\x73\x68\x61\x70\x65\x73","\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x6D\x78\x67\x72\x61\x70\x68\x2F\x69\x6D\x61\x67\x65\x73","\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x6D\x78\x67\x72\x61\x70\x68\x2F\x73\x74\x79\x6C\x65\x73","\x61\x70\x69\x2F\x6A\x73\x63\x72\x69\x70\x74\x79\x2F\x70\x72\x6F\x6A\x65\x63\x74\x73\x2F\x6F\x70\x65\x6E","\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x6A\x73\x63\x72\x69\x70\x74\x79\x2F\x74\x65\x6D\x70\x6C\x61\x74\x65\x73","\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x6A\x73\x63\x72\x69\x70\x74\x79\x2F\x72\x65\x73\x6F\x75\x72\x63\x65\x73","\x2F\x64\x69\x61","\x63\x75\x73\x74\x6F\x6D","\x4E\x47\x5F\x54\x52\x41\x4E\x53\x4C\x41\x54\x45\x5F\x4C\x41\x4E\x47\x5F\x4B\x45\x59","\x67\x65\x74\x49\x74\x65\x6D","\x6C\x6F\x67","\x65\x6E","\x65\x6E\x5F\x45\x4E","\x69\x74","\x6D\x78\x4C\x61\x6E\x67\x75\x61\x67\x65","\x61\x72","\x62\x73","\x63\x73","\x64\x61","\x64\x65","\x65\x6C","\x65\x73","\x65\x73\x2D\x61\x72","\x66\x72","\x68\x75","\x69\x64","\x6A\x61","\x6B\x6F","\x6E\x6C","\x6E\x6F","\x70\x6C","\x70\x74\x2D\x62\x72","\x70\x74","\x72\x6F","\x72\x75","\x73\x72","\x73\x76","\x74\x68","\x74\x72","\x75\x6B","\x7A\x68","\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x6D\x78\x67\x72\x61\x70\x68","\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x6D\x78\x67\x72\x61\x70\x68\x2F\x6A\x73","\x55\x53\x20\x45\x6E\x67\x6C\x69\x73\x68\x20\x46\x65\x6D\x61\x6C\x65","\x55\x53\x20\x45\x6E\x67\x6C\x69\x73\x68\x20\x4D\x61\x6C\x65","\x55\x4B\x20\x45\x6E\x67\x6C\x69\x73\x68\x20\x46\x65\x6D\x61\x6C\x65","\x55\x4B\x20\x45\x6E\x67\x6C\x69\x73\x68\x20\x4D\x61\x6C\x65","\x41\x75\x73\x74\x72\x61\x6C\x69\x61\x6E\x20\x45\x6E\x67\x6C\x69\x73\x68","\x55\x53\x20\x53\x70\x61\x6E\x69\x73\x68\x20\x46\x65\x6D\x61\x6C\x65","\x55\x53\x20\x53\x70\x61\x6E\x69\x73\x68\x20\x4D\x61\x6C\x65","\x43\x68\x69\x6E\x65\x73\x65\x20\x46\x65\x6D\x61\x6C\x65","\x43\x68\x69\x6E\x65\x73\x65\x20\x4D\x61\x6C\x65","\x48\x6F\x6E\x67\x20\x4B\x6F\x6E\x67\x20\x43\x61\x6E\x74\x6F\x6E\x65\x73\x65\x20\x46\x65\x6D\x61\x6C\x65","\x54\x61\x69\x77\x61\x6E\x20\x43\x68\x69\x6E\x65\x73\x65\x20\x46\x65\x6D\x61\x6C\x65","\x4A\x61\x70\x61\x6E\x65\x73\x65\x20\x46\x65\x6D\x61\x6C\x65","\x4A\x61\x70\x61\x6E\x65\x73\x65\x20\x4D\x61\x6C\x65","\x4B\x6F\x72\x65\x61\x6E\x20\x46\x65\x6D\x61\x6C\x65","\x4B\x6F\x72\x65\x61\x6E\x20\x4D\x61\x6C\x65","\x43\x61\x6E\x61\x64\x69\x61\x6E\x20\x45\x6E\x67\x6C\x69\x73\x68\x20\x46\x65\x6D\x61\x6C\x65","\x48\x75\x6E\x67\x61\x72\x69\x61\x6E\x20\x46\x65\x6D\x61\x6C\x65","\x42\x72\x61\x7A\x69\x6C\x69\x61\x6E\x20\x50\x6F\x72\x74\x75\x67\x75\x65\x73\x65\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x50\x6F\x72\x74\x75\x67\x75\x65\x73\x65\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x50\x6F\x72\x74\x75\x67\x75\x65\x73\x65\x20\x4D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x53\x70\x61\x6E\x69\x73\x68\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x53\x70\x61\x6E\x69\x73\x68\x20\x4D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x43\x61\x74\x61\x6C\x61\x6E\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x43\x7A\x65\x63\x68\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x44\x61\x6E\x69\x73\x68\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x46\x69\x6E\x6E\x69\x73\x68\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x46\x72\x65\x6E\x63\x68\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x46\x72\x65\x6E\x63\x68\x20\x4D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x4E\x6F\x72\x77\x65\x67\x69\x61\x6E\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x44\x75\x74\x63\x68\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x50\x6F\x6C\x69\x73\x68\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x49\x74\x61\x6C\x69\x61\x6E\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x54\x75\x72\x6B\x69\x73\x68\x20\x46\x65\x6D\x61\x6C\x65\x09","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x54\x75\x72\x6B\x69\x73\x68\x20\x4D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x47\x65\x72\x6D\x61\x6E\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x47\x65\x72\x6D\x61\x6E\x20\x4D\x61\x6C\x65","\x52\x75\x73\x73\x69\x61\x6E\x20\x46\x65\x6D\x61\x6C\x65","\x52\x75\x73\x73\x69\x61\x6E\x20\x4D\x61\x6C\x65","\x53\x77\x65\x64\x69\x73\x68\x20\x46\x65\x6D\x61\x6C\x65","\x43\x61\x6E\x61\x64\x69\x61\x6E\x20\x46\x72\x65\x6E\x63\x68\x20\x46\x65\x6D\x61\x6C\x65","\x43\x61\x6E\x61\x64\x69\x61\x6E\x20\x46\x72\x65\x6E\x63\x68\x20\x4D\x61\x6C\x65","\x45\x6E\x67\x6C\x69\x73\x68\x20\x28\x55\x53\x29","\x45\x6E\x67\x6C\x69\x73\x68\x20\x28\x43\x61\x6E\x61\x64\x61\x29","\x45\x6E\x67\x6C\x69\x73\x68\x20\x28\x55\x4B\x29","\x45\x6E\x67\x6C\x69\x73\x68\x20\x28\x41\x75\x73\x74\x72\x61\x6C\x69\x61\x29","\x53\x70\x61\x6E\x69\x73\x68\x20\x28\x53\x70\x61\x69\x6E\x29","\x53\x70\x61\x6E\x69\x73\x68\x20\x28\x4D\x65\x78\x69\x63\x6F\x29","\x49\x74\x61\x6C\x69\x61\x6E\x20\x28\x49\x74\x61\x6C\x79\x29\x20\x2F\x20\x46\x69\x6E\x6E\x69\x73\x68\x20\x28\x46\x69\x6E\x6C\x61\x6E\x64\x29","\x46\x72\x65\x6E\x63\x68\x20\x28\x46\x72\x61\x6E\x63\x65\x29","\x46\x72\x65\x6E\x63\x68\x20\x28\x43\x61\x6E\x61\x64\x61\x29","\x50\x6F\x6C\x69\x73\x68\x20\x28\x50\x6F\x6C\x61\x6E\x64\x29","\x50\x6F\x72\x74\x75\x67\x75\x65\x73\x65\x20\x28\x50\x6F\x72\x74\x75\x67\x61\x6C\x29","\x43\x61\x74\x61\x6C\x61\x6E\x20\x28\x43\x61\x74\x61\x6C\x61\x6E\x29","\x43\x68\x69\x6E\x65\x73\x65\x20\x28\x54\x61\x69\x77\x61\x6E\x29","\x44\x61\x6E\x69\x73\x68\x20\x28\x44\x65\x6E\x6D\x61\x72\x6B\x29","\x47\x65\x72\x6D\x61\x6E\x20\x28\x47\x65\x72\x6D\x61\x6E\x79\x29","\x4A\x61\x70\x61\x6E\x65\x73\x65\x20\x28\x4A\x61\x70\x61\x6E\x29","\x4B\x6F\x72\x65\x61\x6E\x20\x28\x4B\x6F\x72\x65\x61\x29","\x44\x75\x74\x63\x68\x20\x28\x4E\x65\x74\x68\x65\x72\x6C\x61\x6E\x64\x73\x29","\x4E\x6F\x72\x77\x65\x67\x69\x61\x6E\x20\x28\x4E\x6F\x72\x77\x61\x79\x29","\x50\x6F\x72\x74\x75\x67\x75\x65\x73\x65\x20\x28\x42\x72\x61\x7A\x69\x6C\x29","\x52\x75\x73\x73\x69\x61\x6E\x20\x28\x52\x75\x73\x73\x69\x61\x29","\x53\x77\x65\x64\x69\x73\x68\x20\x28\x53\x77\x65\x64\x65\x6E\x29","\x43\x68\x69\x6E\x65\x73\x65\x20\x28\x43\x68\x69\x6E\x61\x29","\x43\x68\x69\x6E\x65\x73\x65\x20\x28\x48\x6F\x6E\x67\x20\x4B\x6F\x6E\x67\x29","\x44\x65\x66\x61\x75\x6C\x74","\x44\x61\x74\x65","\x55\x53\x20\x4D\x6F\x6E\x65\x79","\x4E\x75\x6D\x62\x65\x72\x73\x20\x74\x6F\x20\x39","\x4E\x75\x6D\x62\x65\x72\x73\x20\x74\x6F\x20\x39\x39","\x4E\x75\x6D\x62\x65\x72\x73\x20\x74\x6F\x20\x39\x39\x39","\x54\x69\x6D\x65","\x50\x68\x6F\x6E\x65\x20\x6E\x75\x6D\x62\x65\x72","\x53\x74\x72\x65\x65\x74\x73","\x55\x53\x20\x43\x69\x74\x79\x2F\x53\x74\x61\x74\x65\x73","\x41\x66\x72\x69\x6B\x61\x61\x6E\x73","\x41\x6C\x62\x61\x6E\x69\x61\x6E","\x41\x6D\x68\x61\x72\x69\x63","\x41\x72\x61\x62\x69\x63","\x41\x72\x6D\x65\x6E\x69\x61\x6E","\x41\x7A\x65\x72\x62\x61\x69\x6A\x61\x6E\x69","\x42\x61\x73\x71\x75\x65","\x42\x65\x6C\x61\x72\x75\x73\x69\x61\x6E","\x42\x65\x6E\x67\x61\x6C\x69","\x42\x69\x68\x61\x72\x69","\x42\x6F\x73\x6E\x69\x61\x6E","\x42\x72\x65\x74\x6F\x6E","\x42\x75\x6C\x67\x61\x72\x69\x61\x6E","\x43\x61\x6D\x62\x6F\x64\x69\x61\x6E","\x43\x61\x74\x61\x6C\x61\x6E","\x43\x68\x69\x6E\x65\x73\x65\x20\x28\x53\x69\x6D\x70\x6C\x69\x66\x69\x65\x64\x29","\x43\x68\x69\x6E\x65\x73\x65\x20\x28\x54\x72\x61\x64\x69\x74\x69\x6F\x6E\x61\x6C\x29","\x43\x6F\x72\x73\x69\x63\x61\x6E","\x43\x72\x6F\x61\x74\x69\x61\x6E","\x43\x7A\x65\x63\x68","\x44\x61\x6E\x69\x73\x68","\x44\x75\x74\x63\x68","\x45\x6E\x67\x6C\x69\x73\x68","\x45\x73\x70\x65\x72\x61\x6E\x74\x6F","\x45\x73\x74\x6F\x6E\x69\x61\x6E","\x46\x61\x72\x6F\x65\x73\x65","\x46\x69\x6C\x69\x70\x69\x6E\x6F","\x46\x69\x6E\x6E\x69\x73\x68","\x46\x72\x65\x6E\x63\x68","\x46\x72\x69\x73\x69\x61\x6E","\x47\x61\x6C\x69\x63\x69\x61\x6E","\x47\x65\x6F\x72\x67\x69\x61\x6E","\x47\x65\x72\x6D\x61\x6E","\x47\x72\x65\x65\x6B","\x47\x75\x61\x72\x61\x6E\x69","\x47\x75\x6A\x61\x72\x61\x74\x69","\x48\x61\x63\x6B\x65\x72","\x48\x61\x75\x73\x61","\x48\x65\x62\x72\x65\x77","\x48\x69\x6E\x64\x69","\x48\x75\x6E\x67\x61\x72\x69\x61\x6E","\x49\x63\x65\x6C\x61\x6E\x64\x69\x63","\x49\x6E\x64\x6F\x6E\x65\x73\x69\x61\x6E","\x49\x6E\x74\x65\x72\x6C\x69\x6E\x67\x75\x61","\x49\x72\x69\x73\x68","\x49\x74\x61\x6C\x69\x61\x6E","\x4A\x61\x76\x61\x6E\x65\x73\x65","\x4A\x61\x70\x61\x6E\x65\x73\x65","\x4B\x61\x6E\x6E\x61\x64\x61","\x4B\x61\x7A\x61\x6B\x68","\x4B\x69\x6E\x79\x61\x72\x77\x61\x6E\x64\x61","\x4B\x69\x72\x75\x6E\x64\x69","\x4B\x6C\x69\x6E\x67\x6F\x6E","\x4B\x75\x72\x64\x69\x73\x68","\x4B\x6F\x72\x65\x61\x6E","\x4B\x79\x72\x67\x79\x7A","\x4C\x61\x6F\x74\x68\x69\x61\x6E","\x4C\x61\x74\x69\x6E","\x4C\x61\x74\x76\x69\x61\x6E","\x4C\x69\x6E\x67\x61\x6C\x61","\x4C\x69\x74\x68\x75\x61\x6E\x69\x61\x6E","\x4D\x61\x63\x65\x64\x6F\x6E\x69\x61\x6E","\x4D\x61\x6C\x61\x67\x61\x73\x79","\x4D\x61\x6C\x61\x79","\x4D\x61\x6C\x61\x79\x61\x6C\x61\x6D","\x4D\x61\x6C\x74\x65\x73\x65","\x4D\x61\x6F\x72\x69","\x4D\x61\x72\x61\x74\x68\x69","\x4D\x6F\x6C\x64\x61\x76\x69\x61\x6E","\x4D\x6F\x6E\x67\x6F\x6C\x69\x61\x6E","\x4D\x6F\x6E\x74\x65\x6E\x65\x67\x72\x69\x6E","\x4E\x65\x70\x61\x6C\x69","\x4E\x6F\x72\x77\x65\x67\x69\x61\x6E","\x4E\x6F\x72\x77\x65\x67\x69\x61\x6E\x20\x28\x4E\x79\x6E\x6F\x72\x73\x6B\x29","\x4F\x63\x63\x69\x74\x61\x6E","\x4F\x72\x69\x79\x61","\x4F\x72\x6F\x6D\x6F","\x50\x61\x73\x68\x74\x6F","\x50\x65\x72\x73\x69\x61\x6E","\x50\x69\x72\x61\x74\x65","\x50\x6F\x6C\x69\x73\x68","\x50\x75\x6E\x6A\x61\x62\x69","\x51\x75\x65\x63\x68\x75\x61","\x52\x6F\x6D\x61\x6E\x69\x61\x6E","\x52\x6F\x6D\x61\x6E\x73\x68","\x52\x75\x73\x73\x69\x61\x6E","\x53\x63\x6F\x74\x73\x20\x47\x61\x65\x6C\x69\x63","\x53\x65\x72\x62\x69\x61\x6E","\x53\x65\x72\x62\x6F\x2D\x43\x72\x6F\x61\x74\x69\x61\x6E","\x53\x65\x73\x6F\x74\x68\x6F","\x53\x68\x6F\x6E\x61","\x53\x69\x6E\x64\x68\x69","\x53\x69\x6E\x68\x61\x6C\x65\x73\x65","\x53\x6C\x6F\x76\x61\x6B","\x53\x6C\x6F\x76\x65\x6E\x69\x61\x6E","\x53\x6F\x6D\x61\x6C\x69","\x53\x70\x61\x6E\x69\x73\x68","\x53\x75\x6E\x64\x61\x6E\x65\x73\x65","\x53\x77\x61\x68\x69\x6C\x69","\x53\x77\x65\x64\x69\x73\x68","\x54\x61\x6A\x69\x6B","\x54\x61\x6D\x69\x6C","\x54\x61\x74\x61\x72","\x54\x65\x6C\x75\x67\x75","\x54\x68\x61\x69","\x54\x69\x67\x72\x69\x6E\x79\x61","\x54\x6F\x6E\x67\x61","\x54\x75\x72\x6B\x69\x73\x68","\x54\x75\x72\x6B\x6D\x65\x6E","\x54\x77\x69","\x55\x69\x67\x68\x75\x72","\x55\x6B\x72\x61\x69\x6E\x69\x61\x6E","\x55\x72\x64\x75","\x55\x7A\x62\x65\x6B","\x56\x69\x65\x74\x6E\x61\x6D\x65\x73\x65","\x57\x65\x6C\x73\x68","\x58\x68\x6F\x73\x61","\x59\x69\x64\x64\x69\x73\x68","\x59\x6F\x72\x75\x62\x61","\x5A\x75\x6C\x75"];var urlParams=(function(_0x8e68x2){var _0x8e68x3= new Object();var _0x8e68x4=_0x8e68x2[_0x11c7[3]](_0x11c7[2]);if(_0x8e68x4> 0){var _0x8e68x5=_0x8e68x2[_0x11c7[6]](_0x8e68x4+ 1)[_0x11c7[5]](_0x11c7[4]);for(var _0x8e68x6=0;_0x8e68x6< _0x8e68x5[_0x11c7[7]];_0x8e68x6++){_0x8e68x4= _0x8e68x5[_0x8e68x6][_0x11c7[9]](_0x11c7[8]);if(_0x8e68x4> 0){_0x8e68x3[_0x8e68x5[_0x8e68x6][_0x11c7[6]](0,_0x8e68x4)]= _0x8e68x5[_0x8e68x6][_0x11c7[6]](_0x8e68x4+ 1)}}};return _0x8e68x3})(window[_0x11c7[1]][_0x11c7[0]]);var t0= new Date();var MAX_REQUEST_SIZE=10485760;var MAX_WIDTH=12000;var MAX_HEIGHT=12000;var EXPORT_URL=_0x11c7[10];var SHARE_HOST=_0x11c7[11];var SAVE_URL=_0x11c7[12];var VARIABLE_URL=_0x11c7[13];var STENCIL_PATH=_0x11c7[14];var SHAPES_PATH=_0x11c7[15];var IMAGE_PATH=_0x11c7[16];var STYLE_PATH=_0x11c7[17];var CSS_PATH=_0x11c7[17];var OPEN_FORM=_0x11c7[18];var TEMPLATE_PATH=_0x11c7[19];var RESOURCES_PATH=_0x11c7[20];var RESOURCE_BASE=RESOURCES_PATH+ _0x11c7[21];var tapAndHoldStartsConnection=true;var showConnectorImg=true;var mxLoadResources=false;console[_0x11c7[25]](_0x11c7[22],localStorage[_0x11c7[24]](_0x11c7[23]));switch(localStorage[_0x11c7[24]](_0x11c7[23])){case _0x11c7[27]:mxLanguage= _0x11c7[26];break;case _0x11c7[28]:mxLanguage= _0x11c7[28];break;default:mxLanguage= _0x11c7[28]};console[_0x11c7[25]](_0x11c7[29],mxLanguage);var mxLanguages=[_0x11c7[30],_0x11c7[31],_0x11c7[32],_0x11c7[33],_0x11c7[34],_0x11c7[35],_0x11c7[36],_0x11c7[37],_0x11c7[38],_0x11c7[39],_0x11c7[40],_0x11c7[28],_0x11c7[41],_0x11c7[42],_0x11c7[43],_0x11c7[44],_0x11c7[45],_0x11c7[46],_0x11c7[47],_0x11c7[48],_0x11c7[49],_0x11c7[50],_0x11c7[51],_0x11c7[52],_0x11c7[53],_0x11c7[54],_0x11c7[55]];var mxBasePath=_0x11c7[56];var geBasePath=_0x11c7[57];var ISPEECHLANG={usenglishfemale:_0x11c7[58],usenglishmale:_0x11c7[59],ukenglishfemale:_0x11c7[60],ukenglishmale:_0x11c7[61],auenglishfemale:_0x11c7[62],usspanishfemale:_0x11c7[63],usspanishmale:_0x11c7[64],chchinesefemale:_0x11c7[65],chchinesemale:_0x11c7[66],hkchinesefemale:_0x11c7[67],twchinesefemale:_0x11c7[68],jpjapanesefemale:_0x11c7[69],jpjapanesemale:_0x11c7[70],krkoreanfemale:_0x11c7[71],krkoreanmale:_0x11c7[72],caenglishfemale:_0x11c7[73],huhungarianfemale:_0x11c7[74],brportuguesefemale:_0x11c7[75],eurportuguesefemale:_0x11c7[76],eurportuguesemale:_0x11c7[77],eurspanishfemale:_0x11c7[78],eurspanishmale:_0x11c7[79],eurcatalanfemale:_0x11c7[80],eurczechfemale:_0x11c7[81],eurdanishfemale:_0x11c7[82],eurfinnishfemale:_0x11c7[83],eurfrenchfemale:_0x11c7[84],eurfrenchmale:_0x11c7[85],eurnorwegianfemale:_0x11c7[86],eurdutchfemale:_0x11c7[87],eurpolishfemale:_0x11c7[88],euritalianfemale:_0x11c7[89],eurturkishfemale:_0x11c7[90],eurturkishmale:_0x11c7[91],eurgermanfemale:_0x11c7[92],eurgermanmale:_0x11c7[93],rurussianfemale:_0x11c7[94],rurussianmale:_0x11c7[95],swswedishfemale:_0x11c7[96],cafrenchfemale:_0x11c7[97],cafrenchmale:_0x11c7[98]};var ISPEECHASRLANG={"\x65\x6E\x2D\x55\x53":_0x11c7[99],"\x65\x6E\x2D\x43\x41":_0x11c7[100],"\x65\x6E\x2D\x47\x42":_0x11c7[101],"\x65\x6E\x2D\x41\x55":_0x11c7[102],"\x65\x73\x2D\x45\x53":_0x11c7[103],"\x65\x73\x2D\x4D\x58":_0x11c7[104],"\x69\x74\x2D\x49\x54":_0x11c7[105],"\x66\x72\x2D\x46\x52":_0x11c7[106],"\x66\x72\x2D\x43\x41":_0x11c7[107],"\x70\x6C\x2D\x50\x4C":_0x11c7[108],"\x70\x74\x2D\x50\x54":_0x11c7[109],"\x63\x61\x2D\x45\x53":_0x11c7[110],"\x7A\x68\x2D\x54\x57":_0x11c7[111],"\x64\x61\x2D\x44\x4B":_0x11c7[112],"\x66\x72\x2D\x46\x52":_0x11c7[113],"\x6A\x61\x2D\x4A\x50":_0x11c7[114],"\x6B\x6F\x2D\x4B\x52":_0x11c7[115],"\x6E\x6C\x2D\x4E\x4C":_0x11c7[116],"\x6E\x62\x2D\x4E\x4F":_0x11c7[117],"\x70\x74\x2D\x42\x52":_0x11c7[118],"\x72\x75\x2D\x52\x55":_0x11c7[119],"\x73\x76\x2D\x53\x45":_0x11c7[120],"\x7A\x68\x2D\x43\x4E":_0x11c7[121],"\x7A\x68\x2D\x48\x4B":_0x11c7[122]};var ISPEECHASRMODEL={0:_0x11c7[123],date:_0x11c7[124],usmoney:_0x11c7[125],numbersto9:_0x11c7[126],numbersto99:_0x11c7[127],numbersto999:_0x11c7[128],time:_0x11c7[129],phonenumber:_0x11c7[130],streets:_0x11c7[131],citystate:_0x11c7[132]};var GOOGLETTSLANG={"\x61\x66":_0x11c7[133],"\x73\x71":_0x11c7[134],"\x61\x6D":_0x11c7[135],"\x61\x72":_0x11c7[136],"\x68\x79":_0x11c7[137],"\x61\x7A":_0x11c7[138],"\x65\x75":_0x11c7[139],"\x62\x65":_0x11c7[140],"\x62\x6E":_0x11c7[141],"\x62\x68":_0x11c7[142],"\x62\x73":_0x11c7[143],"\x62\x72":_0x11c7[144],"\x62\x67":_0x11c7[145],"\x6B\x6D":_0x11c7[146],"\x63\x61":_0x11c7[147],"\x7A\x68\x2D\x43\x4E":_0x11c7[148],"\x7A\x68\x2D\x54\x57":_0x11c7[149],"\x63\x6F":_0x11c7[150],"\x68\x72":_0x11c7[151],"\x63\x73":_0x11c7[152],"\x64\x61":_0x11c7[153],"\x6E\x6C":_0x11c7[154],"\x65\x6E":_0x11c7[155],"\x65\x6F":_0x11c7[156],"\x65\x74":_0x11c7[157],"\x66\x6F":_0x11c7[158],"\x74\x6C":_0x11c7[159],"\x66\x69":_0x11c7[160],"\x66\x72":_0x11c7[161],"\x66\x79":_0x11c7[162],"\x67\x6C":_0x11c7[163],"\x6B\x61":_0x11c7[164],"\x64\x65":_0x11c7[165],"\x65\x6C":_0x11c7[166],"\x67\x6E":_0x11c7[167],"\x67\x75":_0x11c7[168],"\x78\x78\x2D\x68\x61\x63\x6B\x65\x72":_0x11c7[169],"\x68\x61":_0x11c7[170],"\x69\x77":_0x11c7[171],"\x68\x69":_0x11c7[172],"\x68\x75":_0x11c7[173],"\x69\x73":_0x11c7[174],"\x69\x64":_0x11c7[175],"\x69\x61":_0x11c7[176],"\x67\x61":_0x11c7[177],"\x69\x74":_0x11c7[178],"\x6A\x77":_0x11c7[179],"\x6A\x61":_0x11c7[180],"\x6B\x6E":_0x11c7[181],"\x6B\x6B":_0x11c7[182],"\x72\x77":_0x11c7[183],"\x72\x6E":_0x11c7[184],"\x78\x78\x2D\x6B\x6C\x69\x6E\x67\x6F\x6E":_0x11c7[185],"\x6B\x75":_0x11c7[186],"\x6B\x6F":_0x11c7[187],"\x6B\x79":_0x11c7[188],"\x6C\x6F":_0x11c7[189],"\x6C\x61":_0x11c7[190],"\x6C\x76":_0x11c7[191],"\x6C\x6E":_0x11c7[192],"\x6C\x74":_0x11c7[193],"\x6D\x6B":_0x11c7[194],"\x6D\x67":_0x11c7[195],"\x6D\x73":_0x11c7[196],"\x6D\x6C":_0x11c7[197],"\x6D\x74":_0x11c7[198],"\x6D\x69":_0x11c7[199],"\x6D\x72":_0x11c7[200],"\x6D\x6F":_0x11c7[201],"\x6D\x6E":_0x11c7[202],"\x73\x72\x2D\x4D\x45":_0x11c7[203],"\x6E\x65":_0x11c7[204],"\x6E\x6F":_0x11c7[205],"\x6E\x6E":_0x11c7[206],"\x6F\x63":_0x11c7[207],"\x6F\x72":_0x11c7[208],"\x6F\x6D":_0x11c7[209],"\x70\x73":_0x11c7[210],"\x66\x61":_0x11c7[211],"\x78\x78\x2D\x70\x69\x72\x61\x74\x65":_0x11c7[212],"\x70\x6C":_0x11c7[213],"\x70\x74\x2D\x42\x52":_0x11c7[118],"\x70\x74\x2D\x50\x54":_0x11c7[109],"\x70\x61":_0x11c7[214],"\x71\x75":_0x11c7[215],"\x72\x6F":_0x11c7[216],"\x72\x6D":_0x11c7[217],"\x72\x75":_0x11c7[218],"\x67\x64":_0x11c7[219],"\x73\x72":_0x11c7[220],"\x73\x68":_0x11c7[221],"\x73\x74":_0x11c7[222],"\x73\x6E":_0x11c7[223],"\x73\x64":_0x11c7[224],"\x73\x69":_0x11c7[225],"\x73\x6B":_0x11c7[226],"\x73\x6C":_0x11c7[227],"\x73\x6F":_0x11c7[228],"\x65\x73":_0x11c7[229],"\x73\x75":_0x11c7[230],"\x73\x77":_0x11c7[231],"\x73\x76":_0x11c7[232],"\x74\x67":_0x11c7[233],"\x74\x61":_0x11c7[234],"\x74\x74":_0x11c7[235],"\x74\x65":_0x11c7[236],"\x74\x68":_0x11c7[237],"\x74\x69":_0x11c7[238],"\x74\x6F":_0x11c7[239],"\x74\x72":_0x11c7[240],"\x74\x6B":_0x11c7[241],"\x74\x77":_0x11c7[242],"\x75\x67":_0x11c7[243],"\x75\x6B":_0x11c7[244],"\x75\x72":_0x11c7[245],"\x75\x7A":_0x11c7[246],"\x76\x69":_0x11c7[247],"\x63\x79":_0x11c7[248],"\x78\x68":_0x11c7[249],"\x79\x69":_0x11c7[250],"\x79\x6F":_0x11c7[251],"\x7A\x75":_0x11c7[252]} \ No newline at end of file diff --git a/public/assets/plugins/mxgraph/js/mxClient.js b/public/assets/plugins/mxgraph/js/mxClient.js index e795889..f387e43 100644 --- a/public/assets/plugins/mxgraph/js/mxClient.js +++ b/public/assets/plugins/mxgraph/js/mxClient.js @@ -1,18737 +1 @@ -var mxClient = { - VERSION: "2.0.0.0", - IS_IE: 0 <= navigator.userAgent.indexOf("MSIE"), - IS_IE6: 0 <= navigator.userAgent.indexOf("MSIE 6"), - IS_QUIRKS: 0 <= navigator.userAgent.indexOf("MSIE") && (null == document.documentMode || 5 == document.documentMode), - VML_PREFIX: "v", - OFFICE_PREFIX: "o", - IS_NS: 0 <= navigator.userAgent.indexOf("Mozilla/") && 0 > navigator.userAgent.indexOf("MSIE"), - IS_OP: 0 <= navigator.userAgent.indexOf("Opera/"), - IS_OT: 0 > navigator.userAgent.indexOf("Presto/2.4.") && 0 > navigator.userAgent.indexOf("Presto/2.3.") && 0 > navigator.userAgent.indexOf("Presto/2.2.") && - 0 > navigator.userAgent.indexOf("Presto/2.1.") && 0 > navigator.userAgent.indexOf("Presto/2.0.") && 0 > navigator.userAgent.indexOf("Presto/1."), - IS_SF: 0 <= navigator.userAgent.indexOf("AppleWebKit/") && 0 > navigator.userAgent.indexOf("Chrome/"), - IS_GC: 0 <= navigator.userAgent.indexOf("Chrome/"), - IS_MT: 0 <= navigator.userAgent.indexOf("Firefox/") && 0 > navigator.userAgent.indexOf("Firefox/1.") && 0 > navigator.userAgent.indexOf("Firefox/2.") || 0 <= navigator.userAgent.indexOf( - "Iceweasel/") && 0 > navigator.userAgent.indexOf("Iceweasel/1.") && - 0 > navigator.userAgent.indexOf("Iceweasel/2.") || 0 <= navigator.userAgent.indexOf("SeaMonkey/") && 0 > navigator.userAgent.indexOf("SeaMonkey/1.") || 0 <= navigator.userAgent.indexOf( - "Iceape/") && 0 > navigator.userAgent.indexOf("Iceape/1."), - IS_SVG: 0 <= navigator.userAgent.indexOf("Firefox/") || 0 <= navigator.userAgent.indexOf("Iceweasel/") || 0 <= navigator.userAgent.indexOf("Seamonkey/") || 0 <= navigator.userAgent.indexOf( - "Iceape/") || 0 <= navigator.userAgent.indexOf("Galeon/") || 0 <= navigator.userAgent.indexOf("Epiphany/") || 0 <= - navigator.userAgent.indexOf("AppleWebKit/") || 0 <= navigator.userAgent.indexOf("Gecko/") || 0 <= navigator.userAgent.indexOf("Opera/"), - NO_FO: 0 <= navigator.userAgent.indexOf("Firefox/1.") || 0 <= navigator.userAgent.indexOf("Iceweasel/1.") || 0 <= navigator.userAgent.indexOf("Firefox/2.") || 0 <= navigator.userAgent.indexOf( - "Iceweasel/2.") || 0 <= navigator.userAgent.indexOf("SeaMonkey/1.") || 0 <= navigator.userAgent.indexOf("Iceape/1.") || 0 <= navigator.userAgent.indexOf("Camino/1.") || 0 <= navigator.userAgent - .indexOf("Epiphany/2.") || - 0 <= navigator.userAgent.indexOf("Opera/") || 0 <= navigator.userAgent.indexOf("MSIE") || 0 <= navigator.userAgent.indexOf("Mozilla/2."), - IS_VML: "MICROSOFT INTERNET EXPLORER" == navigator.appName.toUpperCase(), - IS_MAC: 0 < navigator.userAgent.toUpperCase().indexOf("MACINTOSH"), - IS_TOUCH: 0 < navigator.userAgent.toUpperCase().indexOf("IPAD") || 0 < navigator.userAgent.toUpperCase().indexOf("IPOD") || 0 < navigator.userAgent.toUpperCase().indexOf("IPHONE") || 0 < - navigator.userAgent.toUpperCase().indexOf("ANDROID"), - IS_LOCAL: 0 > document.location.href.indexOf("http://") && - 0 > document.location.href.indexOf("https://"), - isBrowserSupported: function() { - return mxClient.IS_VML || mxClient.IS_SVG - }, - link: function(a, b, c) { - c = c || document; - if (mxClient.IS_IE6) c.write('\x3clink rel\x3d"' + a + '" href\x3d"' + b + '" charset\x3d"ISO-8859-1" type\x3d"text/css"/\x3e'); - else { - var d = c.createElement("link"); - d.setAttribute("rel", a); - d.setAttribute("href", b); - d.setAttribute("charset", "ISO-8859-1"); - d.setAttribute("type", "text/css"); - c.getElementsByTagName("head")[0].appendChild(d) - } - }, - include: function(a) { - document.write('\x3cscript src\x3d"' + - a + '"\x3e\x3c/script\x3e') - }, - dispose: function() { - for (var a = 0; a < mxEvent.objects.length; a++) null != mxEvent.objects[a].mxListenerList && mxEvent.removeAllListeners(mxEvent.objects[a]) - } -}; -mxClient.IS_OP && mxClient.IS_OT ? mxClient.CSS_PREFIX = "O" : mxClient.IS_SF || mxClient.IS_GC ? mxClient.CSS_PREFIX = "Webkit" : mxClient.IS_MT ? mxClient.CSS_PREFIX = "Moz" : mxClient.IS_IE && 9 <= - document.documentMode && (mxClient.CSS_PREFIX = "ms"); -"undefined" == typeof mxLoadResources && (mxLoadResources = !0); -"undefined" == typeof mxResourceExtension && (mxResourceExtension = ".txt"); -"undefined" == typeof mxLoadStylesheets && (mxLoadStylesheets = !0); -"undefined" != typeof mxBasePath && 0 < mxBasePath.length ? ("/" == mxBasePath.substring(mxBasePath.length - 1) && (mxBasePath = mxBasePath.substring(0, mxBasePath.length - 1)), mxClient.basePath = - mxBasePath) : mxClient.basePath = "."; -"undefined" != typeof mxImageBasePath && 0 < mxImageBasePath.length ? ("/" == mxImageBasePath.substring(mxImageBasePath.length - 1) && (mxImageBasePath = mxImageBasePath.substring(0, mxImageBasePath.length - - 1)), mxClient.imageBasePath = mxImageBasePath) : mxClient.imageBasePath = mxClient.basePath + "/images"; -mxClient.language = "undefined" != typeof mxLanguage ? mxLanguage : mxClient.IS_IE ? navigator.userLanguage : navigator.language; -mxClient.defaultLanguage = "undefined" != typeof mxDefaultLanguage ? mxDefaultLanguage : "en"; -mxLoadStylesheets && mxClient.link("stylesheet", mxClient.basePath + "/css/common.css"); -"undefined" != typeof mxLanguages && (mxClient.languages = mxLanguages); -if (mxClient.IS_IE) { - if (9 <= document.documentMode) mxClient.IS_VML = !1, mxClient.IS_SVG = !0; - else { - 8 == document.documentMode ? (document.namespaces.add(mxClient.VML_PREFIX, "urn:schemas-microsoft-com:vml", "#default#VML"), document.namespaces.add(mxClient.OFFICE_PREFIX, - "urn:schemas-microsoft-com:office:office", "#default#VML")) : (document.namespaces.add(mxClient.VML_PREFIX, "urn:schemas-microsoft-com:vml"), document.namespaces.add(mxClient.OFFICE_PREFIX, - "urn:schemas-microsoft-com:office:office")); - var ss = document.createStyleSheet(); - ss.cssText = "v\\:*{behavior:url(#default#VML)}o\\:*{behavior:url(#default#VML)}"; - mxLoadStylesheets && mxClient.link("stylesheet", mxClient.basePath + "/css/explorer.css") - } - window.attachEvent("onunload", mxClient.dispose) -} -var mxLog = { - consoleName: "Console", - TRACE: !1, - DEBUG: !0, - WARN: !0, - buffer: "", - init: function() { - if (null == mxLog.window && null != document.body) { - var a = mxLog.consoleName + " - mxGraph " + mxClient.VERSION, - b = document.createElement("table"); - b.setAttribute("width", "100%"); - b.setAttribute("height", "100%"); - var c = document.createElement("tbody"), - d = document.createElement("tr"), - e = document.createElement("td"); - e.style.verticalAlign = "top"; - mxLog.textarea = document.createElement("textarea"); - mxLog.textarea.setAttribute("readOnly", "true"); - mxLog.textarea.style.height = "100%"; - mxLog.textarea.style.resize = "none"; - mxLog.textarea.value = mxLog.buffer; - mxLog.textarea.style.width = mxClient.IS_NS && "BackCompat" != document.compatMode ? "99%" : "100%"; - e.appendChild(mxLog.textarea); - d.appendChild(e); - c.appendChild(d); - d = document.createElement("tr"); - mxLog.td = document.createElement("td"); - mxLog.td.style.verticalAlign = "top"; - mxLog.td.setAttribute("height", "30px"); - d.appendChild(mxLog.td); - c.appendChild(d); - b.appendChild(c); - mxLog.addButton("Info", function(a) { - mxLog.info() - }); - mxLog.addButton("DOM", function(a) { - a = mxUtils.getInnerHtml(document.body); - mxLog.debug(a) - }); - mxLog.addButton("Trace", function(a) { - mxLog.TRACE = !mxLog.TRACE; - mxLog.TRACE ? mxLog.debug("Tracing enabled") : mxLog.debug("Tracing disabled") - }); - mxLog.addButton("Copy", function(a) { - try { - mxUtils.copy(mxLog.textarea.value) - } catch (b) { - mxUtils.alert(b) - } - }); - mxLog.addButton("Show", function(a) { - try { - mxUtils.popup(mxLog.textarea.value) - } catch (b) { - mxUtils.alert(b) - } - }); - mxLog.addButton("Clear", function(a) { - mxLog.textarea.value = "" - }); - d = c = 0; - "number" === typeof window.innerWidth ? (c = window.innerHeight, d = window.innerWidth) : (c = document.documentElement.clientHeight || document.body.clientHeight, d = document.body.clientWidth); - mxLog.window = new mxWindow(a, b, Math.max(0, d - 320), Math.max(0, c - 210), 300, 160); - mxLog.window.setMaximizable(!0); - mxLog.window.setScrollable(!1); - mxLog.window.setResizable(!0); - mxLog.window.setClosable(!0); - mxLog.window.destroyOnClose = !1; - if ((mxClient.IS_NS || mxClient.IS_IE) && !mxClient.IS_GC && !mxClient.IS_SF && "BackCompat" != document.compatMode) { - var f = - mxLog.window.getElement(), - a = function(a, b) { - mxLog.textarea.style.height = Math.max(0, f.offsetHeight - 70) + "px" - }; - mxLog.window.addListener(mxEvent.RESIZE_END, a); - mxLog.window.addListener(mxEvent.MAXIMIZE, a); - mxLog.window.addListener(mxEvent.NORMALIZE, a); - mxLog.textarea.style.height = "92px" - } - } - }, - info: function() { - mxLog.writeln(mxUtils.toString(navigator)) - }, - addButton: function(a, b) { - var c = document.createElement("button"); - mxUtils.write(c, a); - mxEvent.addListener(c, "click", b); - mxLog.td.appendChild(c) - }, - isVisible: function() { - return null != - mxLog.window ? mxLog.window.isVisible() : !1 - }, - show: function() { - mxLog.setVisible(!0) - }, - setVisible: function(a) { - null == mxLog.window && mxLog.init(); - null != mxLog.window && mxLog.window.setVisible(a) - }, - enter: function(a) { - if (mxLog.TRACE) return mxLog.writeln("Entering " + a), (new Date).getTime() - }, - leave: function(a, b) { - if (mxLog.TRACE) { - var c = 0 != b ? " (" + ((new Date).getTime() - b) + " ms)" : ""; - mxLog.writeln("Leaving " + a + c) - } - }, - debug: function() { - mxLog.DEBUG && mxLog.writeln.apply(this, arguments) - }, - warn: function() { - mxLog.WARN && mxLog.writeln.apply(this, - arguments) - }, - write: function() { - for (var a = "", b = 0; b < arguments.length; b++) a += arguments[b], b < arguments.length - 1 && (a += " "); - null != mxLog.textarea ? (mxLog.textarea.value += a, 0 <= navigator.userAgent.indexOf("Presto/2.5") && (mxLog.textarea.style.visibility = "hidden", mxLog.textarea.style.visibility = "visible"), - mxLog.textarea.scrollTop = mxLog.textarea.scrollHeight) : mxLog.buffer += a - }, - writeln: function() { - for (var a = "", b = 0; b < arguments.length; b++) a += arguments[b], b < arguments.length - 1 && (a += " "); - mxLog.write(a + "\n") - } - }, - mxObjectIdentity = { - FIELD_NAME: "mxObjectId", - counter: 0, - get: function(a) { - if ("object" == typeof a && null == a[mxObjectIdentity.FIELD_NAME]) { - var b = mxUtils.getFunctionName(a.constructor); - a[mxObjectIdentity.FIELD_NAME] = b + "#" + mxObjectIdentity.counter++ - } - return a[mxObjectIdentity.FIELD_NAME] - }, - clear: function(a) { - "object" == typeof a && delete a[mxObjectIdentity.FIELD_NAME] - } - }; - -function mxDictionary() { - this.clear() -} -mxDictionary.prototype.map = null; -mxDictionary.prototype.clear = function() { - this.map = {} -}; -mxDictionary.prototype.get = function(a) { - a = mxObjectIdentity.get(a); - return this.map[a] -}; -mxDictionary.prototype.put = function(a, b) { - var c = mxObjectIdentity.get(a), - d = this.map[c]; - this.map[c] = b; - return d -}; -mxDictionary.prototype.remove = function(a) { - a = mxObjectIdentity.get(a); - var b = this.map[a]; - delete this.map[a]; - return b -}; -mxDictionary.prototype.getKeys = function() { - var a = [], - b; - for (b in this.map) a.push(b); - return a -}; -mxDictionary.prototype.getValues = function() { - var a = [], - b; - for (b in this.map) a.push(this.map[b]); - return a -}; -mxDictionary.prototype.visit = function(a) { - for (var b in this.map) a(b, this.map[b]) -}; -var mxResources = { - resources: [], - extension: mxResourceExtension, - resourcesEncoded: !1, - loadDefaultBundle: !0, - loadSpecialBundle: !0, - isLanguageSupported: function(a) { - return null != mxClient.languages ? 0 <= mxUtils.indexOf(mxClient.languages, a) : !0 - }, - getDefaultBundle: function(a, b) { - return mxResources.loadDefaultBundle || !mxResources.isLanguageSupported(b) ? a + mxResources.extension : null - }, - getSpecialBundle: function(a, b) { - if (null == mxClient.languages || !this.isLanguageSupported(b)) { - var c = b.indexOf("-"); - 0 < c && (b = b.substring(0, c)) - } - return mxResources.loadSpecialBundle && - mxResources.isLanguageSupported(b) && b != mxClient.defaultLanguage ? a + "_" + b + mxResources.extension : null - }, - add: function(a, b) { - b = null != b ? b : mxClient.language.toLowerCase(); - if (b != mxConstants.NONE) { - var c = mxResources.getDefaultBundle(a, b); - if (null != c) try { - var d = mxUtils.load(c); - d.isReady() && mxResources.parse(d.getText()) - } catch (e) {} - c = mxResources.getSpecialBundle(a, b); - if (null != c) try { - d = mxUtils.load(c), d.isReady() && mxResources.parse(d.getText()) - } catch (f) {} - } - }, - parse: function(a) { - if (null != a) { - a = a.split("\n"); - for (var b = 0; b < - a.length; b++) - if ("#" != a[b].charAt(0)) { - var c = a[b].indexOf("\x3d"); - if (0 < c) { - var d = a[b].substring(0, c), - e = a[b].length; - 13 == a[b].charCodeAt(e - 1) && e--; - c = a[b].substring(c + 1, e); - this.resourcesEncoded ? (c = c.replace(/\\(?=u[a-fA-F\d]{4})/g, "%"), mxResources.resources[d] = unescape(c)) : mxResources.resources[d] = c - } - } - } - }, - get: function(a, b, c) { - a = mxResources.resources[a]; - null == a && (a = c); - if (null != a && null != b) { - c = []; - for (var d = null, e = 0; e < a.length; e++) { - var f = a.charAt(e); - "{" == f ? d = "" : null != d && "}" == f ? (d = parseInt(d) - 1, 0 <= d && d < b.length && - c.push(b[d]), d = null) : null != d ? d += f : c.push(f) - } - a = c.join("") - } - return a - } -}; - -function mxPoint(a, b) { - this.x = null != a ? a : 0; - this.y = null != b ? b : 0 -} -mxPoint.prototype.x = null; -mxPoint.prototype.y = null; -mxPoint.prototype.equals = function(a) { - return a.x == this.x && a.y == this.y -}; -mxPoint.prototype.clone = function() { - return mxUtils.clone(this) -}; - -function mxRectangle(a, b, c, d) { - mxPoint.call(this, a, b); - this.width = null != c ? c : 0; - this.height = null != d ? d : 0 -} -mxRectangle.prototype = new mxPoint; -mxRectangle.prototype.constructor = mxRectangle; -mxRectangle.prototype.width = null; -mxRectangle.prototype.height = null; -mxRectangle.prototype.setRect = function(a, b, c, d) { - this.x = a; - this.y = b; - this.width = c; - this.height = d -}; -mxRectangle.prototype.getCenterX = function() { - return this.x + this.width / 2 -}; -mxRectangle.prototype.getCenterY = function() { - return this.y + this.height / 2 -}; -mxRectangle.prototype.add = function(a) { - if (null != a) { - var b = Math.min(this.x, a.x), - c = Math.min(this.y, a.y), - d = Math.max(this.x + this.width, a.x + a.width); - a = Math.max(this.y + this.height, a.y + a.height); - this.x = b; - this.y = c; - this.width = d - b; - this.height = a - c - } -}; -mxRectangle.prototype.grow = function(a) { - this.x -= a; - this.y -= a; - this.width += 2 * a; - this.height += 2 * a -}; -mxRectangle.prototype.getPoint = function() { - return new mxPoint(this.x, this.y) -}; -mxRectangle.prototype.equals = function(a) { - return a.x == this.x && a.y == this.y && a.width == this.width && a.height == this.height -}; -var mxEffects = { - animateChanges: function(a, b, c) { - var d = 0, - e = function() { - for (var g = !1, h = 0; h < b.length; h++) { - var k = b[h]; - if (k instanceof mxGeometryChange || k instanceof mxTerminalChange || k instanceof mxValueChange || k instanceof mxChildChange || k instanceof mxStyleChange) { - var l = a.getView().getState(k.cell || k.child, !1); - if (null != l) - if (g = !0, k.constructor != mxGeometryChange || a.model.isEdge(k.cell)) mxUtils.setOpacity(l.shape.node, 100 * d / 10); - else { - var m = a.getView().scale, - n = (k.geometry.x - k.previous.x) * m, - p = (k.geometry.y - - k.previous.y) * m, - q = (k.geometry.width - k.previous.width) * m, - m = (k.geometry.height - k.previous.height) * m; - 0 == d ? (l.x -= n, l.y -= p, l.width -= q, l.height -= m) : (l.x += n / 10, l.y += p / 10, l.width += q / 10, l.height += m / 10); - a.cellRenderer.redraw(l); - mxEffects.cascadeOpacity(a, k.cell, 100 * d / 10) - } - } - } - 10 > d && g ? (d++, window.setTimeout(e, f)) : null != c && c() - }, - f = 30; - e() - }, - cascadeOpacity: function(a, b, c) { - for (var d = a.model.getChildCount(b), e = 0; e < d; e++) { - var f = a.model.getChildAt(b, e), - g = a.getView().getState(f); - null != g && (mxUtils.setOpacity(g.shape.node, - c), mxEffects.cascadeOpacity(a, f, c)) - } - b = a.model.getEdges(b); - if (null != b) - for (e = 0; e < b.length; e++) d = a.getView().getState(b[e]), null != d && mxUtils.setOpacity(d.shape.node, c) - }, - fadeOut: function(a, b, c, d, e, f) { - d = d || 40; - e = e || 30; - var g = b || 100; - mxUtils.setOpacity(a, g); - if (f || null == f) { - var h = function() { - g = Math.max(g - d, 0); - mxUtils.setOpacity(a, g); - 0 < g ? window.setTimeout(h, e) : (a.style.visibility = "hidden", c && a.parentNode && a.parentNode.removeChild(a)) - }; - window.setTimeout(h, e) - } else a.style.visibility = "hidden", c && a.parentNode && a.parentNode.removeChild(a) - } - }, - mxUtils = { - errorResource: "none" != mxClient.language ? "error" : "", - closeResource: "none" != mxClient.language ? "close" : "", - errorImage: mxClient.imageBasePath + "/error.gif", - removeCursors: function(a) { - null != a.style && (a.style.cursor = ""); - a = a.childNodes; - if (null != a) - for (var b = a.length, c = 0; c < b; c += 1) mxUtils.removeCursors(a[c]) - }, - getCurrentStyle: function() { - return mxClient.IS_IE ? function(a) { - return null != a ? a.currentStyle : null - } : function(a) { - return null != a ? window.getComputedStyle(a, "") : null - } - }(), - hasScrollbars: function(a) { - a = mxUtils.getCurrentStyle(a); - return null != a && ("scroll" == a.overflow || "auto" == a.overflow) - }, - bind: function(a, b) { - return function() { - return b.apply(a, arguments) - } - }, - eval: function(a) { - var b = null; - if (0 <= a.indexOf("function")) try { - eval("var _mxJavaScriptExpression\x3d" + a), b = _mxJavaScriptExpression, _mxJavaScriptExpression = null - } catch (c) { - mxLog.warn(c.message + " while evaluating " + a) - } else try { - b = eval(a) - } catch (d) { - mxLog.warn(d.message + " while evaluating " + a) - } - return b - }, - findNode: function(a, b, c) { - var d = a.getAttribute(b); - if (null != d && d == c) return a; - for (a = - a.firstChild; null != a;) { - d = mxUtils.findNode(a, b, c); - if (null != d) return d; - a = a.nextSibling - } - return null - }, - findNodeByAttribute: function() { - return 9 <= document.documentMode ? function(a, b, c) { - var d = null; - if (null != a) - if (a.nodeType == mxConstants.NODETYPE_ELEMENT && a.getAttribute(b) == c) d = a; - else - for (a = a.firstChild; null != a && null == d;) d = mxUtils.findNodeByAttribute(a, b, c), a = a.nextSibling; - return d - } : mxClient.IS_IE ? function(a, b, c) { - return null == a ? null : a.ownerDocument.selectSingleNode("//*[@" + b + "\x3d'" + c + "']") - } : function(a, b, c) { - return null == - a ? null : a.ownerDocument.evaluate("//*[@" + b + "\x3d'" + c + "']", a.ownerDocument, null, XPathResult.ANY_TYPE, null).iterateNext() - } - }(), - getFunctionName: function(a) { - var b = null; - if (null != a) - if (null != a.name) b = a.name; - else { - a = a.toString(); - for (b = 9; - " " == a.charAt(b);) b++; - var c = a.indexOf("(", b), - b = a.substring(b, c) - } - return b - }, - indexOf: function(a, b) { - if (null != a && null != b) - for (var c = 0; c < a.length; c++) - if (a[c] == b) return c; - return -1 - }, - remove: function(a, b) { - var c = null; - if ("object" == typeof b) - for (var d = mxUtils.indexOf(b, a); 0 <= d;) b.splice(d, - 1), c = a, d = mxUtils.indexOf(b, a); - for (var e in b) b[e] == a && (delete b[e], c = a); - return c - }, - isNode: function(a, b, c, d) { - return null != a && !isNaN(a.nodeType) && (null == b || a.nodeName.toLowerCase() == b.toLowerCase()) ? null == c || a.getAttribute(c) == d : !1 - }, - getChildNodes: function(a, b) { - b = b || mxConstants.NODETYPE_ELEMENT; - for (var c = [], d = a.firstChild; null != d;) d.nodeType == b && c.push(d), d = d.nextSibling; - return c - }, - createXmlDocument: function() { - var a = null; - document.implementation && document.implementation.createDocument ? a = document.implementation.createDocument("", - "", null) : window.ActiveXObject && (a = new ActiveXObject("Microsoft.XMLDOM")); - return a - }, - parseXml: function() { - return mxClient.IS_IE && ("undefined" === typeof document.documentMode || 9 > document.documentMode) ? function(a) { - var b = mxUtils.createXmlDocument(); - b.async = "false"; - b.loadXML(a); - return b - } : function(a) { - return (new DOMParser).parseFromString(a, "text/xml") - } - }(), - clearSelection: function() { - if (document.selection) return function() { - document.selection.empty() - }; - if (window.getSelection) return function() { - window.getSelection().removeAllRanges() - } - }(), - getPrettyXml: function(a, b, c) { - var d = []; - if (null != a) - if (b = b || " ", c = c || "", a.nodeType == mxConstants.NODETYPE_TEXT) d.push(a.nodeValue); - else { - d.push(c + "\x3c" + a.nodeName); - var e = a.attributes; - if (null != e) - for (var f = 0; f < e.length; f++) { - var g = mxUtils.htmlEntities(e[f].nodeValue); - d.push(" " + e[f].nodeName + '\x3d"' + g + '"') - } - e = a.firstChild; - if (null != e) { - for (d.push("\x3e\n"); null != e;) d.push(mxUtils.getPrettyXml(e, b, c + b)), e = e.nextSibling; - d.push(c + "\x3c/" + a.nodeName + "\x3e\n") - } else d.push("/\x3e\n") - } - return d.join("") - }, - removeWhitespace: function(a, - b) { - for (var c = b ? a.previousSibling : a.nextSibling; null != c && c.nodeType == mxConstants.NODETYPE_TEXT;) { - var d = b ? c.previousSibling : c.nextSibling, - e = mxUtils.getTextContent(c); - 0 == mxUtils.trim(e).length && c.parentNode.removeChild(c); - c = d - } - }, - htmlEntities: function(a, b) { - a = (a || "").replace(/&/g, "\x26amp;"); - a = a.replace(/"/g, "\x26quot;"); - a = a.replace(/\'/g, "\x26#39;"); - a = a.replace(/</g, "\x26lt;"); - a = a.replace(/>/g, "\x26gt;"); - if (null == b || b) a = a.replace(/\n/g, "\x26#xa;"); - return a - }, - isVml: function(a) { - return null != a && "urn:schemas-microsoft-com:vml" == - a.tagUrn - }, - getXml: function(a, b) { - var c = ""; - null != a && (c = a.xml, c = null == c ? a.innerHTML ? a.innerHTML : (new XMLSerializer).serializeToString(a) : c.replace(/\r\n\t[\t]*/g, "").replace(/>\r\n/g, "\x3e").replace(/\r\n/g, "\n")); - return c = c.replace(/\n/g, b || "\x26#xa;") - }, - getTextContent: function(a) { - var b = ""; - null != a && (null != a.firstChild && (a = a.firstChild), b = a.nodeValue || ""); - return b - }, - getInnerHtml: function() { - return mxClient.IS_IE ? function(a) { - return null != a ? a.innerHTML : "" - } : function(a) { - return null != a ? (new XMLSerializer).serializeToString(a) : - "" - } - }(), - getOuterHtml: function() { - return mxClient.IS_IE ? function(a) { - if (null != a) { - if (null != a.outerHTML) return a.outerHTML; - var b = []; - b.push("\x3c" + a.nodeName); - var c = a.attributes; - if (null != c) - for (var d = 0; d < c.length; d++) { - var e = c[d].nodeValue; - null != e && 0 < e.length && (b.push(" "), b.push(c[d].nodeName), b.push('\x3d"'), b.push(e), b.push('"')) - } - 0 == a.innerHTML.length ? b.push("/\x3e") : (b.push("\x3e"), b.push(a.innerHTML), b.push("\x3c/" + a.nodeName + "\x3e")); - return b.join("") - } - return "" - } : function(a) { - return null != a ? (new XMLSerializer).serializeToString(a) : - "" - } - }(), - write: function(a, b) { - var c = a.ownerDocument.createTextNode(b); - null != a && a.appendChild(c); - return c - }, - writeln: function(a, b) { - var c = a.ownerDocument.createTextNode(b); - null != a && (a.appendChild(c), a.appendChild(document.createElement("br"))); - return c - }, - br: function(a, b) { - b = b || 1; - for (var c = null, d = 0; d < b; d++) null != a && (c = a.ownerDocument.createElement("br"), a.appendChild(c)); - return c - }, - button: function(a, b, c) { - c = null != c ? c : document; - c = c.createElement("button"); - mxUtils.write(c, a); - mxEvent.addListener(c, "click", function(a) { - b(a) - }); - return c - }, - para: function(a, b) { - var c = document.createElement("p"); - mxUtils.write(c, b); - null != a && a.appendChild(c); - return c - }, - addTransparentBackgroundFilter: function(a) { - a.style.filter += "progid:DXImageTransform.Microsoft.AlphaImageLoader(src\x3d'" + mxClient.imageBasePath + "/transparent.gif', sizingMethod\x3d'scale')" - }, - linkAction: function(a, b, c, d, e) { - return mxUtils.link(a, b, function() { - c.execute(d) - }, e) - }, - linkInvoke: function(a, b, c, d, e, f) { - return mxUtils.link(a, b, function() { - c[d](e) - }, f) - }, - link: function(a, b, c, d) { - var e = - document.createElement("span"); - e.style.color = "blue"; - e.style.textDecoration = "underline"; - e.style.cursor = "pointer"; - null != d && (e.style.paddingLeft = d + "px"); - mxEvent.addListener(e, "click", c); - mxUtils.write(e, b); - null != a && a.appendChild(e); - return e - }, - fit: function(a) { - var b = parseInt(a.offsetLeft), - c = parseInt(a.offsetWidth), - d = document.body, - e = document.documentElement, - f = (d.scrollLeft || e.scrollLeft) + (d.clientWidth || e.clientWidth); - b + c > f && (a.style.left = Math.max(d.scrollLeft || e.scrollLeft, f - c) + "px"); - b = parseInt(a.offsetTop); - c = parseInt(a.offsetHeight); - f = (d.scrollTop || e.scrollTop) + Math.max(d.clientHeight || 0, e.clientHeight); - b + c > f && (a.style.top = Math.max(d.scrollTop || e.scrollTop, f - c) + "px") - }, - open: function(a) { - if (mxClient.IS_NS) { - try { - netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect") - } catch (b) { - return mxUtils.alert("Permission to read file denied."), "" - } - var c = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile); - c.initWithPath(a); - if (!c.exists()) return mxUtils.alert("File not found."), - ""; - a = Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance(Components.interfaces.nsIFileInputStream); - a.init(c, 1, 4, null); - c = Components.classes["@mozilla.org/scriptableinputstream;1"].createInstance(Components.interfaces.nsIScriptableInputStream); - c.init(a); - return c.read(c.available()) - } - c = (new ActiveXObject("Scripting.FileSystemObject")).OpenTextFile(a, 1); - a = c.readAll(); - c.close(); - return a - }, - save: function(a, b) { - if (mxClient.IS_NS) { - try { - netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect") - } catch (c) { - mxUtils.alert("Permission to write file denied."); - return - } - var d = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile); - d.initWithPath(a); - d.exists() || d.create(0, 420); - var e = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream); - e.init(d, 34, 4, null); - e.write(b, b.length); - e.flush(); - e.close() - } else d = (new ActiveXObject("Scripting.FileSystemObject")).CreateTextFile(a, !0), d.Write(b), d.Close() - }, - saveAs: function(a) { - var b = document.createElement("iframe"); - b.setAttribute("src", ""); - b.style.visibility = "hidden"; - document.body.appendChild(b); - try { - if (mxClient.IS_NS) { - var c = b.contentDocument; - c.open(); - c.write(a); - c.close(); - try { - netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"), b.focus(), saveDocument(c) - } catch (d) { - mxUtils.alert("Permission to save document denied.") - } - } else c = b.contentWindow.document, c.write(a), c.execCommand("SaveAs", !1, document.location) - } finally { - document.body.removeChild(b) - } - }, - copy: function(a) { - if (window.clipboardData) window.clipboardData.setData("Text", - a); - else { - netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); - var b = Components.classes["@mozilla.org/widget/clipboard;1"].createInstance(Components.interfaces.nsIClipboard); - if (b) { - var c = Components.classes["@mozilla.org/widget/transferable;1"].createInstance(Components.interfaces.nsITransferable); - if (c) { - c.addDataFlavor("text/unicode"); - var d = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString); - d.data = a; - c.setTransferData("text/unicode", - d, 2 * a.length); - b.setData(c, null, Components.interfaces.nsIClipboard.kGlobalClipboard) - } - } - } - }, - load: function(a) { - a = new mxXmlRequest(a, null, "GET", !1); - a.send(); - return a - }, - get: function(a, b, c) { - return (new mxXmlRequest(a, null, "GET")).send(b, c) - }, - post: function(a, b, c, d) { - return (new mxXmlRequest(a, b)).send(c, d) - }, - submit: function(a, b, c, d) { - return (new mxXmlRequest(a, b)).simulate(c, d) - }, - loadInto: function(a, b, c) { - mxClient.IS_IE ? b.onreadystatechange = function() { - 4 == b.readyState && c() - } : b.addEventListener("load", c, !1); - b.load(a) - }, - getValue: function(a, b, c) { - a = null != a ? a[b] : null; - null == a && (a = c); - return a - }, - getNumber: function(a, b, c) { - a = null != a ? a[b] : null; - null == a && (a = c || 0); - return Number(a) - }, - getColor: function(a, b, c) { - a = null != a ? a[b] : null; - null == a ? a = c : a == mxConstants.NONE && (a = null); - return a - }, - clone: function(a, b, c) { - c = null != c ? c : !1; - var d = null; - if (null != a && "function" == typeof a.constructor) { - var d = new a.constructor, - e; - for (e in a) - if (e != mxObjectIdentity.FIELD_NAME && (null == b || 0 > mxUtils.indexOf(b, e))) d[e] = !c && "object" == typeof a[e] ? mxUtils.clone(a[e]) : a[e] - } - return d - }, - equalPoints: function(a, b) { - if (null == a && null != b || null != a && null == b || null != a && null != b && a.length != b.length) return !1; - if (null != a && null != b) - for (var c = 0; c < a.length; c++) - if (a[c] == b[c] || null != a[c] && !a[c].equals(b[c])) return !1; - return !0 - }, - equalEntries: function(a, b) { - if (null == a && null != b || null != a && null == b || null != a && null != b && a.length != b.length) return !1; - if (null != a && null != b) - for (var c in a) - if (a[c] != b[c]) return !1; - return !0 - }, - extend: function(a, b) { - var c = function() {}; - c.prototype = b.prototype; - a.prototype = new c; - a.prototype.constructor = - a - }, - toString: function(a) { - var b = "", - c; - for (c in a) try { - if (null == a[c]) b += c + " \x3d [null]\n"; - else if ("function" == typeof a[c]) b += c + " \x3d\x3e [Function]\n"; - else if ("object" == typeof a[c]) var d = mxUtils.getFunctionName(a[c].constructor), - b = b + (c + " \x3d\x3e [" + d + "]\n"); - else b += c + " \x3d " + a[c] + "\n" - } catch (e) { - b += c + "\x3d" + e.message - } - return b - }, - toRadians: function(a) { - return Math.PI * a / 180 - }, - arcToCurves: function(a, b, c, d, e, f, g, h, k) { - h -= a; - k -= b; - if (0 === c || 0 === d) return p; - c = Math.abs(c); - d = Math.abs(d); - var l = -h / 2, - m = -k / 2, - n = Math.cos(e * - Math.PI / 180), - p = Math.sin(e * Math.PI / 180); - e = n * l + p * m; - var l = -1 * p * l + n * m, - m = e * e, - q = l * l, - s = c * c, - r = d * d, - t = m / s + q / r; - 1 < t ? (c *= Math.sqrt(t), d *= Math.sqrt(t), f = 0) : (t = 1, f === g && (t = -1), f = t * Math.sqrt((s * r - s * q - r * m) / (s * q + r * m))); - m = f * c * l / d; - q = -1 * f * d * e / c; - h = n * m - p * q + h / 2; - k = p * m + n * q + k / 2; - s = Math.atan2((l - q) / d, (e - m) / c) - Math.atan2(0, 1); - f = 0 <= s ? s : 2 * Math.PI + s; - s = Math.atan2((-l - q) / d, (-e - m) / c) - Math.atan2((l - q) / d, (e - m) / c); - e = 0 <= s ? s : 2 * Math.PI + s; - 0 == g && 0 < e ? e -= 2 * Math.PI : 0 != g && 0 > e && (e += 2 * Math.PI); - g = 2 * e / Math.PI; - g = Math.ceil(0 > g ? -1 * g : g); - e /= g; - l = 8 / 3 * Math.sin(e / - 4) * Math.sin(e / 4) / Math.sin(e / 2); - m = n * c; - n *= d; - c *= p; - d *= p; - for (var v = Math.cos(f), w = Math.sin(f), q = -l * (m * w + d * v), s = -l * (c * w - n * v), t = r = 0, p = [], u = 0; u < g; ++u) { - f += e; - var v = Math.cos(f), - w = Math.sin(f), - r = m * v - d * w + h, - t = c * v + n * w + k, - y = -l * (m * w + d * v), - v = -l * (c * w - n * v), - w = 6 * u; - p[w] = Number(q + a); - p[w + 1] = Number(s + b); - p[w + 2] = Number(r - y + a); - p[w + 3] = Number(t - v + b); - p[w + 4] = Number(r + a); - p[w + 5] = Number(t + b); - q = r + y; - s = t + v - } - return p - }, - getBoundingBox: function(a, b) { - var c = null; - if (null != a && null != b && 0 != b) { - var d = mxUtils.toRadians(b), - c = Math.cos(d), - e = Math.sin(d), - f = - new mxPoint(a.x + a.width / 2, a.y + a.height / 2), - g = new mxPoint(a.x, a.y), - d = new mxPoint(a.x + a.width, a.y), - h = new mxPoint(d.x, a.y + a.height), - k = new mxPoint(a.x, h.y), - g = mxUtils.getRotatedPoint(g, c, e, f), - d = mxUtils.getRotatedPoint(d, c, e, f), - h = mxUtils.getRotatedPoint(h, c, e, f), - k = mxUtils.getRotatedPoint(k, c, e, f), - c = new mxRectangle(g.x, g.y, 0, 0); - c.add(new mxRectangle(d.x, d.y, 0, 0)); - c.add(new mxRectangle(h.x, h.y, 0, 0)); - c.add(new mxRectangle(k.x, k.y, 0, 0)) - } - return c - }, - getRotatedPoint: function(a, b, c, d) { - d = null != d ? d : new mxPoint; - var e = - a.x - d.x; - a = a.y - d.y; - return new mxPoint(e * b - a * c + d.x, a * b + e * c + d.y) - }, - getPortConstraints: function(a, b, c, d) { - a = mxUtils.getValue(a.style, mxConstants.STYLE_PORT_CONSTRAINT, null); - if (null == a) return d; - d = a.toString(); - a = mxConstants.DIRECTION_MASK_NONE; - 0 <= d.indexOf(mxConstants.DIRECTION_NORTH) && (a |= mxConstants.DIRECTION_MASK_NORTH); - 0 <= d.indexOf(mxConstants.DIRECTION_WEST) && (a |= mxConstants.DIRECTION_MASK_WEST); - 0 <= d.indexOf(mxConstants.DIRECTION_SOUTH) && (a |= mxConstants.DIRECTION_MASK_SOUTH); - 0 <= d.indexOf(mxConstants.DIRECTION_EAST) && - (a |= mxConstants.DIRECTION_MASK_EAST); - return a - }, - reversePortConstraints: function(a) { - var b = 0, - b = (a & mxConstants.DIRECTION_MASK_WEST) << 3, - b = b | (a & mxConstants.DIRECTION_MASK_NORTH) << 1, - b = b | (a & mxConstants.DIRECTION_MASK_SOUTH) >> 1; - return b |= (a & mxConstants.DIRECTION_MASK_EAST) >> 3 - }, - findNearestSegment: function(a, b, c) { - var d = -1; - if (0 < a.absolutePoints.length) - for (var e = a.absolutePoints[0], f = null, g = 1; g < a.absolutePoints.length; g++) { - var h = a.absolutePoints[g], - e = mxUtils.ptSegDistSq(e.x, e.y, h.x, h.y, b, c); - if (null == f || e < f) f = - e, d = g - 1; - e = h - } - return d - }, - rectangleIntersectsSegment: function(a, b, c) { - var d = a.y, - e = a.x, - f = d + a.height, - g = e + a.width; - a = b.x; - var h = c.x; - b.x > c.x && (a = c.x, h = b.x); - h > g && (h = g); - a < e && (a = e); - if (a > h) return !1; - var e = b.y, - g = c.y, - k = c.x - b.x; - 1E-7 < Math.abs(k) && (c = (c.y - b.y) / k, b = b.y - c * b.x, e = c * a + b, g = c * h + b); - e > g && (b = g, g = e, e = b); - g > f && (g = f); - e < d && (e = d); - return e > g ? !1 : !0 - }, - contains: function(a, b, c) { - return a.x <= b && a.x + a.width >= b && a.y <= c && a.y + a.height >= c - }, - intersects: function(a, b) { - var c = a.width, - d = a.height, - e = b.width, - f = b.height; - if (0 >= e || 0 >= f || 0 >= c || - 0 >= d) return !1; - var g = a.x, - h = a.y, - k = b.x, - l = b.y, - e = e + k, - f = f + l, - c = c + g, - d = d + h; - return (e < k || e > g) && (f < l || f > h) && (c < g || c > k) && (d < h || d > l) - }, - intersectsHotspot: function(a, b, c, d, e, f) { - d = null != d ? d : 1; - e = null != e ? e : 0; - f = null != f ? f : 0; - if (0 < d) { - var g = a.getCenterX(), - h = a.getCenterY(), - k = a.width, - l = a.height, - m = mxUtils.getValue(a.style, mxConstants.STYLE_STARTSIZE) * a.view.scale; - 0 < m && (mxUtils.getValue(a.style, mxConstants.STYLE_HORIZONTAL, !0) ? (h = a.y + m / 2, l = m) : (g = a.x + m / 2, k = m)); - k = Math.max(e, k * d); - l = Math.max(e, l * d); - 0 < f && (k = Math.min(k, f), l = Math.min(l, - f)); - d = new mxRectangle(g - k / 2, h - l / 2, k, l); - g = mxUtils.toRadians(mxUtils.getValue(a.style, mxConstants.STYLE_ROTATION) || 0); - 0 != g && (e = Math.cos(-g), f = Math.sin(-g), g = new mxPoint(a.getCenterX(), a.getCenterY()), a = mxUtils.getRotatedPoint(new mxPoint(b, c), e, f, g), b = a.x, c = a.y); - return mxUtils.contains(d, b, c) - } - return !0 - }, - getOffset: function(a, b) { - var c = 0, - d = 0; - if (null != b && b) var e = document.body, - f = document.documentElement, - c = c + (e.scrollLeft || f.scrollLeft), - d = d + (e.scrollTop || f.scrollTop); - for (; a.offsetParent;) c += a.offsetLeft, d += - a.offsetTop, a = a.offsetParent; - return new mxPoint(c, d) - }, - getScrollOrigin: function(a) { - for (var b = document.body, c = document.documentElement, d = new mxPoint(b.scrollLeft || c.scrollLeft, b.scrollTop || c.scrollTop); null != a && a != b && a != c;) !isNaN(a.scrollLeft) && ! - isNaN(a.scrollTop) && (d.x += a.scrollLeft, d.y += a.scrollTop), a = a.parentNode; - return d - }, - convertPoint: function(a, b, c) { - var d = mxUtils.getScrollOrigin(a); - a = mxUtils.getOffset(a); - a.x -= d.x; - a.y -= d.y; - return new mxPoint(b - a.x, c - a.y) - }, - ltrim: function(a, b) { - return a.replace(RegExp("^[" + - (b || "\\s") + "]+", "g"), "") - }, - rtrim: function(a, b) { - return a.replace(RegExp("[" + (b || "\\s") + "]+$", "g"), "") - }, - trim: function(a, b) { - return mxUtils.ltrim(mxUtils.rtrim(a, b), b) - }, - isNumeric: function(a) { - return null != a && (null == a.length || 0 < a.length && 0 > a.indexOf("0x") && 0 > a.indexOf("0X")) && !isNaN(a) - }, - mod: function(a, b) { - return (a % b + b) % b - }, - intersection: function(a, b, c, d, e, f, g, h) { - var k = (h - f) * (c - a) - (g - e) * (d - b); - g = ((g - e) * (b - f) - (h - f) * (a - e)) / k; - e = ((c - a) * (b - f) - (d - b) * (a - e)) / k; - return 0 <= g && 1 >= g && 0 <= e && 1 >= e ? new mxPoint(a + g * (c - a), b + g * - (d - b)) : null - }, - ptSegDistSq: function(a, b, c, d, e, f) { - c -= a; - d -= b; - e -= a; - f -= b; - 0 >= e * c + f * d ? c = 0 : (e = c - e, f = d - f, a = e * c + f * d, c = 0 >= a ? 0 : a * a / (c * c + d * d)); - e = e * e + f * f - c; - 0 > e && (e = 0); - return e - }, - relativeCcw: function(a, b, c, d, e, f) { - c -= a; - d -= b; - e -= a; - f -= b; - a = e * d - f * c; - 0 == a && (a = e * c + f * d, 0 < a && (a = (e - c) * c + (f - d) * d, 0 > a && (a = 0))); - return 0 > a ? -1 : 0 < a ? 1 : 0 - }, - animateChanges: function(a, b) { - mxEffects.animateChanges.apply(this, arguments) - }, - cascadeOpacity: function(a, b, c) { - mxEffects.cascadeOpacity.apply(this, arguments) - }, - fadeOut: function(a, b, c, d, e, f) { - mxEffects.fadeOut.apply(this, - arguments) - }, - setOpacity: function(a, b) { - mxUtils.isVml(a) ? a.style.filter = 100 <= b ? null : "alpha(opacity\x3d" + b / 5 + ")" : mxClient.IS_IE && ("undefined" === typeof document.documentMode || 9 > document.documentMode) ? a.style - .filter = 100 <= b ? null : "alpha(opacity\x3d" + b + ")" : a.style.opacity = b / 100 - }, - createImage: function(a) { - var b = null; - mxClient.IS_IE6 && "CSS1Compat" != document.compatMode ? (b = document.createElement(mxClient.VML_PREFIX + ":image"), b.setAttribute("src", a), b.style.borderStyle = "none") : (b = document.createElement( - "img"), b.setAttribute("src", - a), b.setAttribute("border", "0")); - return b - }, - sortCells: function(a, b) { - b = null != b ? b : !0; - var c = new mxDictionary; - a.sort(function(a, e) { - var f = c.get(a); - null == f && (f = mxCellPath.create(a).split(mxCellPath.PATH_SEPARATOR), c.put(a, f)); - var g = c.get(e); - null == g && (g = mxCellPath.create(e).split(mxCellPath.PATH_SEPARATOR), c.put(e, g)); - f = mxCellPath.compare(f, g); - return 0 == f ? 0 : 0 < f == b ? 1 : -1 - }); - return a - }, - getStylename: function(a) { - return null != a && (a = a.split(";")[0], 0 > a.indexOf("\x3d")) ? a : "" - }, - getStylenames: function(a) { - var b = []; - if (null != - a) { - a = a.split(";"); - for (var c = 0; c < a.length; c++) 0 > a[c].indexOf("\x3d") && b.push(a[c]) - } - return b - }, - indexOfStylename: function(a, b) { - if (null != a && null != b) - for (var c = a.split(";"), d = 0, e = 0; e < c.length; e++) { - if (c[e] == b) return d; - d += c[e].length + 1 - } - return -1 - }, - addStylename: function(a, b) { - 0 > mxUtils.indexOfStylename(a, b) && (null == a ? a = "" : 0 < a.length && ";" != a.charAt(a.length - 1) && (a += ";"), a += b); - return a - }, - removeStylename: function(a, b) { - var c = []; - if (null != a) - for (var d = a.split(";"), e = 0; e < d.length; e++) d[e] != b && c.push(d[e]); - return c.join(";") - }, - removeAllStylenames: function(a) { - var b = []; - if (null != a) { - a = a.split(";"); - for (var c = 0; c < a.length; c++) 0 <= a[c].indexOf("\x3d") && b.push(a[c]) - } - return b.join(";") - }, - setCellStyles: function(a, b, c, d) { - if (null != b && 0 < b.length) { - a.beginUpdate(); - try { - for (var e = 0; e < b.length; e++) - if (null != b[e]) { - var f = mxUtils.setStyle(a.getStyle(b[e]), c, d); - a.setStyle(b[e], f) - } - } finally { - a.endUpdate() - } - } - }, - setStyle: function(a, b, c) { - var d = null != c && ("undefined" == typeof c.length || 0 < c.length); - if (null == a || 0 == a.length) d && (a = b + "\x3d" + c); - else { - var e = a.indexOf(b + - "\x3d"); - 0 > e ? d && (d = ";" == a.charAt(a.length - 1) ? "" : ";", a = a + d + b + "\x3d" + c) : (b = d ? b + "\x3d" + c : "", c = a.indexOf(";", e), d || c++, a = a.substring(0, e) + b + (c > e ? - a.substring(c) : "")) - } - return a - }, - setCellStyleFlags: function(a, b, c, d, e) { - if (null != b && 0 < b.length) { - a.beginUpdate(); - try { - for (var f = 0; f < b.length; f++) - if (null != b[f]) { - var g = mxUtils.setStyleFlag(a.getStyle(b[f]), c, d, e); - a.setStyle(b[f], g) - } - } finally { - a.endUpdate() - } - } - }, - setStyleFlag: function(a, b, c, d) { - if (null == a || 0 == a.length) a = d || null == d ? b + "\x3d" + c : b + "\x3d0"; - else { - var e = a.indexOf(b + - "\x3d"); - if (0 > e) e = ";" == a.charAt(a.length - 1) ? "" : ";", a = d || null == d ? a + e + b + "\x3d" + c : a + e + b + "\x3d0"; - else { - var f = a.indexOf(";", e), - g = "", - g = 0 > f ? a.substring(e + b.length + 1) : a.substring(e + b.length + 1, f), - g = null == d ? parseInt(g) ^ c : d ? parseInt(g) | c : parseInt(g) & ~c; - a = a.substring(0, e) + b + "\x3d" + g + (0 <= f ? a.substring(f) : "") - } - } - return a - }, - getAlignmentAsPoint: function(a, b) { - var c = 0, - d = 0; - a == mxConstants.ALIGN_CENTER ? c = -0.5 : a == mxConstants.ALIGN_RIGHT && (c = -1); - b == mxConstants.ALIGN_MIDDLE ? d = -0.5 : b == mxConstants.ALIGN_BOTTOM && (d = -1); - return new mxPoint(c, - d) - }, - getSizeForString: function(a, b, c) { - b = null != b ? b : mxConstants.DEFAULT_FONTSIZE; - c = null != c ? c : mxConstants.DEFAULT_FONTFAMILY; - var d = document.createElement("div"); - d.style.fontFamily = c; - d.style.fontSize = Math.round(b) + "px"; - d.style.lineHeight = Math.round(b * mxConstants.LINE_HEIGHT) + "px"; - d.style.position = "absolute"; - d.style.whiteSpace = "nowrap"; - d.style.visibility = "hidden"; - d.style.display = mxClient.IS_QUIRKS ? "inline" : "inline-block"; - d.style.zoom = "1"; - d.innerHTML = a; - document.body.appendChild(d); - a = new mxRectangle(0, 0, - d.offsetWidth, d.offsetHeight); - document.body.removeChild(d); - return a - }, - getViewXml: function(a, b, c, d, e) { - d = null != d ? d : 0; - e = null != e ? e : 0; - b = null != b ? b : 1; - null == c && (c = [a.getModel().getRoot()]); - var f = a.getView(), - g = null, - h = f.isEventsEnabled(); - f.setEventsEnabled(!1); - var k = f.drawPane, - l = f.overlayPane; - a.dialect == mxConstants.DIALECT_SVG ? (f.drawPane = document.createElementNS(mxConstants.NS_SVG, "g"), f.canvas.appendChild(f.drawPane), f.overlayPane = document.createElementNS(mxConstants.NS_SVG, - "g")) : (f.drawPane = f.drawPane.cloneNode(!1), - f.canvas.appendChild(f.drawPane), f.overlayPane = f.overlayPane.cloneNode(!1)); - f.canvas.appendChild(f.overlayPane); - var m = f.getTranslate(); - f.translate = new mxPoint(d, e); - b = new mxTemporaryCellStates(a.getView(), b, c); - try { - g = (new mxCodec).encode(a.getView()) - } finally { - b.destroy(), f.translate = m, f.canvas.removeChild(f.drawPane), f.canvas.removeChild(f.overlayPane), f.drawPane = k, f.overlayPane = l, f.setEventsEnabled(h) - } - return g - }, - getScaleForPageCount: function(a, b, c, d) { - if (1 > a) return 1; - c = null != c ? c : mxConstants.PAGE_FORMAT_A4_PORTRAIT; - d = null != d ? d : 0; - var e = c.width - 2 * d; - c = c.height - 2 * d; - d = b.getGraphBounds().clone(); - b = b.getView().getScale(); - d.width /= b; - d.height /= b; - b = d.width; - c = b / d.height / (e / c); - d = Math.sqrt(a); - var f = Math.sqrt(c); - c = d * f; - d /= f; - if (1 > c && d > a) { - var g = d / a; - d = a; - c /= g - } - 1 > d && c > a && (g = c / a, c = a, d /= g); - g = Math.ceil(c) * Math.ceil(d); - for (f = 0; g > a;) { - var g = Math.floor(c) / c, - h = Math.floor(d) / d; - 1 == g && (g = Math.floor(c - 1) / c); - 1 == h && (h = Math.floor(d - 1) / d); - g = g > h ? g : h; - c *= g; - d *= g; - g = Math.ceil(c) * Math.ceil(d); - f++; - if (10 < f) break - } - return 0.99999 * (e * c / b) - }, - show: function(a, - b, c, d) { - c = null != c ? c : 0; - d = null != d ? d : 0; - null == b ? b = window.open().document : b.open(); - var e = a.getGraphBounds(); - c = -e.x + c; - d = -e.y + d; - if (mxClient.IS_IE) { - for (var e = "\x3chtml\x3e\x3chead\x3e", f = document.getElementsByTagName("base"), g = 0; g < f.length; g++) e += f[g].outerHTML; - e += "\x3cstyle\x3e"; - for (g = 0; g < document.styleSheets.length; g++) try { - e += document.styleSheets(g).cssText - } catch (h) {} - e += "\x3c/style\x3e\x3c/head\x3e"; - e += "\x3cbody\x3e"; - e += a.container.innerHTML; - e += "\x3c/body\x3e"; - e += "\x3chtml\x3e"; - b.writeln(e); - b.close(); - a = - b.body.getElementsByTagName("DIV")[0]; - null != a && (a.style.position = "absolute", a.style.left = c + "px", a.style.top = d + "px") - } else { - b.writeln("\x3chtml"); - b.writeln("\x3chead\x3e"); - f = document.getElementsByTagName("base"); - for (g = 0; g < f.length; g++) b.writeln(mxUtils.getOuterHtml(f[g])); - f = document.getElementsByTagName("link"); - for (g = 0; g < f.length; g++) b.writeln(mxUtils.getOuterHtml(f[g])); - f = document.getElementsByTagName("style"); - for (g = 0; g < f.length; g++) b.writeln(mxUtils.getOuterHtml(f[g])); - b.writeln("\x3c/head\x3e"); - b.writeln("\x3c/html\x3e"); - b.close(); - null == b.body && b.documentElement.appendChild(b.createElement("body")); - b.body.style.overflow = "auto"; - for (a = a.container.firstChild; null != a;) g = a.cloneNode(!0), b.body.appendChild(g), a = a.nextSibling; - a = b.getElementsByTagName("g")[0]; - null != a && (a.setAttribute("transform", "translate(" + c + "," + d + ")"), c = a.ownerSVGElement, c.setAttribute("width", e.width + Math.max(e.x, 0) + 3), c.setAttribute("height", e.height + - Math.max(e.y, 0) + 3)) - } - mxUtils.removeCursors(b.body); - return b - }, - printScreen: function(a) { - var b = window.open(); - mxUtils.show(a, b.document); - a = function() { - b.focus(); - b.print(); - b.close() - }; - mxClient.IS_GC ? b.setTimeout(a, 500) : a() - }, - popup: function(a, b) { - if (b) { - var c = document.createElement("div"); - c.style.overflow = "scroll"; - c.style.width = "636px"; - c.style.height = "460px"; - var d = document.createElement("pre"); - d.innerHTML = mxUtils.htmlEntities(a, !1).replace(/\n/g, "\x3cbr\x3e").replace(/ /g, "\x26nbsp;"); - c.appendChild(d); - c = new mxWindow("Popup Window", c, document.body.clientWidth / 2 - 320, (document.body.clientHeight || document.documentElement.clientHeight) / - 2 - 240, 640, 480, !1, !0); - c.setClosable(!0); - c.setVisible(!0) - } else mxClient.IS_NS ? (c = window.open(), c.document.writeln("\x3cpre\x3e" + mxUtils.htmlEntities(a) + "\x3c/pre"), c.document.close()) : (c = window.open(), d = c.document.createElement( - "pre"), d.innerHTML = mxUtils.htmlEntities(a, !1).replace(/\n/g, "\x3cbr\x3e").replace(/ /g, "\x26nbsp;"), c.document.body.appendChild(d)) - }, - alert: function(a) { - alert(a) - }, - prompt: function(a, b) { - return prompt(a, b) - }, - confirm: function(a) { - return confirm(a) - }, - error: function(a, b, c, d) { - var e = document.createElement("div"); - e.style.padding = "20px"; - var f = document.createElement("img"); - f.setAttribute("src", d || mxUtils.errorImage); - f.setAttribute("valign", "bottom"); - f.style.verticalAlign = "middle"; - e.appendChild(f); - e.appendChild(document.createTextNode("\u00a0")); - e.appendChild(document.createTextNode("\u00a0")); - e.appendChild(document.createTextNode("\u00a0")); - mxUtils.write(e, a); - a = document.body.clientWidth; - d = document.body.clientHeight || document.documentElement.clientHeight; - var g = new mxWindow(mxResources.get(mxUtils.errorResource) || - mxUtils.errorResource, e, (a - b) / 2, d / 4, b, null, !1, !0); - c && (mxUtils.br(e), b = document.createElement("p"), c = document.createElement("button"), mxClient.IS_IE ? c.style.cssText = "float:right" : c.setAttribute("style", "float:right"), mxEvent.addListener( - c, "click", - function(a) { - g.destroy() - }), mxUtils.write(c, mxResources.get(mxUtils.closeResource) || mxUtils.closeResource), b.appendChild(c), e.appendChild(b), mxUtils.br(e), g.setClosable(!0)); - g.setVisible(!0); - return g - }, - makeDraggable: function(a, b, c, d, e, f, g, h, k, l) { - a = new mxDragSource(a, - c); - a.dragOffset = new mxPoint(null != e ? e : 0, null != f ? f : mxConstants.TOOLTIP_VERTICAL_OFFSET); - a.autoscroll = g; - a.setGuidesEnabled(!1); - null != k && (a.highlightDropTargets = k); - null != l && (a.getDropTarget = l); - a.getGraphForEvent = function(a) { - return "function" == typeof b ? b(a) : b - }; - null != d && (a.createDragElement = function() { - return d.cloneNode(!0) - }, h && (a.createPreviewElement = function(a) { - var b = d.cloneNode(!0), - c = parseInt(b.style.width), - e = parseInt(b.style.height); - b.style.width = Math.round(c * a.view.scale) + "px"; - b.style.height = Math.round(e * - a.view.scale) + "px"; - return b - })); - return a - } - }, - mxConstants = { - DEFAULT_HOTSPOT: 0.3, - MIN_HOTSPOT_SIZE: 8, - MAX_HOTSPOT_SIZE: 0, - RENDERING_HINT_EXACT: "exact", - RENDERING_HINT_FASTER: "faster", - RENDERING_HINT_FASTEST: "fastest", - DIALECT_SVG: "svg", - DIALECT_VML: "vml", - DIALECT_MIXEDHTML: "mixedHtml", - DIALECT_PREFERHTML: "preferHtml", - DIALECT_STRICTHTML: "strictHtml", - NS_SVG: "http://www.w3.org/2000/svg", - NS_XHTML: "http://www.w3.org/1999/xhtml", - NS_XLINK: "http://www.w3.org/1999/xlink", - SHADOWCOLOR: "gray", - SHADOW_OFFSET_X: 2, - SHADOW_OFFSET_Y: 3, - SHADOW_OPACITY: 1, - NODETYPE_ELEMENT: 1, - NODETYPE_ATTRIBUTE: 2, - NODETYPE_TEXT: 3, - NODETYPE_CDATA: 4, - NODETYPE_ENTITY_REFERENCE: 5, - NODETYPE_ENTITY: 6, - NODETYPE_PROCESSING_INSTRUCTION: 7, - NODETYPE_COMMENT: 8, - NODETYPE_DOCUMENT: 9, - NODETYPE_DOCUMENTTYPE: 10, - NODETYPE_DOCUMENT_FRAGMENT: 11, - NODETYPE_NOTATION: 12, - TOOLTIP_VERTICAL_OFFSET: 16, - DEFAULT_VALID_COLOR: "#00FF00", - DEFAULT_INVALID_COLOR: "#FF0000", - HIGHLIGHT_STROKEWIDTH: 3, - CURSOR_MOVABLE_VERTEX: "move", - CURSOR_MOVABLE_EDGE: "move", - CURSOR_LABEL_HANDLE: "default", - CURSOR_BEND_HANDLE: "pointer", - CURSOR_CONNECT: "pointer", - HIGHLIGHT_COLOR: "#00FF00", - CONNECT_TARGET_COLOR: "#0000FF", - INVALID_CONNECT_TARGET_COLOR: "#FF0000", - DROP_TARGET_COLOR: "#0000FF", - VALID_COLOR: "#00FF00", - INVALID_COLOR: "#FF0000", - EDGE_SELECTION_COLOR: "#00FF00", - VERTEX_SELECTION_COLOR: "#00FF00", - VERTEX_SELECTION_STROKEWIDTH: 1, - EDGE_SELECTION_STROKEWIDTH: 1, - VERTEX_SELECTION_DASHED: !0, - EDGE_SELECTION_DASHED: !0, - GUIDE_COLOR: "#FF0000", - GUIDE_STROKEWIDTH: 1, - OUTLINE_COLOR: "#0099FF", - OUTLINE_STROKEWIDTH: mxClient.IS_IE ? 2 : 3, - HANDLE_SIZE: 7, - LABEL_HANDLE_SIZE: 4, - HANDLE_FILLCOLOR: "#00FF00", - HANDLE_STROKECOLOR: "black", - LABEL_HANDLE_FILLCOLOR: "yellow", - CONNECT_HANDLE_FILLCOLOR: "#0000FF", - LOCKED_HANDLE_FILLCOLOR: "#FF0000", - OUTLINE_HANDLE_FILLCOLOR: "#00FFFF", - OUTLINE_HANDLE_STROKECOLOR: "#0033FF", - DEFAULT_FONTFAMILY: "Arial,Helvetica", - DEFAULT_FONTSIZE: 11, - LINE_HEIGHT: 1.2, - DEFAULT_FONTSTYLE: 0, - DEFAULT_STARTSIZE: 40, - DEFAULT_MARKERSIZE: 6, - DEFAULT_IMAGESIZE: 24, - ENTITY_SEGMENT: 30, - RECTANGLE_ROUNDING_FACTOR: 0.15, - LINE_ARCSIZE: 20, - ARROW_SPACING: 10, - ARROW_WIDTH: 30, - ARROW_SIZE: 30, - PAGE_FORMAT_A4_PORTRAIT: new mxRectangle(0, - 0, 826, 1169), - PAGE_FORMAT_A4_LANDSCAPE: new mxRectangle(0, 0, 1169, 826), - PAGE_FORMAT_LETTER_PORTRAIT: new mxRectangle(0, 0, 850, 1100), - PAGE_FORMAT_LETTER_LANDSCAPE: new mxRectangle(0, 0, 1100, 850), - NONE: "none", - STYLE_PERIMETER: "perimeter", - STYLE_SOURCE_PORT: "sourcePort", - STYLE_TARGET_PORT: "targetPort", - STYLE_PORT_CONSTRAINT: "portConstraint", - STYLE_OPACITY: "opacity", - STYLE_TEXT_OPACITY: "textOpacity", - STYLE_OVERFLOW: "overflow", - STYLE_ORTHOGONAL: "orthogonal", - STYLE_EXIT_X: "exitX", - STYLE_EXIT_Y: "exitY", - STYLE_EXIT_PERIMETER: "exitPerimeter", - STYLE_ENTRY_X: "entryX", - STYLE_ENTRY_Y: "entryY", - STYLE_ENTRY_PERIMETER: "entryPerimeter", - STYLE_WHITE_SPACE: "whiteSpace", - STYLE_ROTATION: "rotation", - STYLE_FILLCOLOR: "fillColor", - STYLE_SWIMLANE_FILLCOLOR: "swimlaneFillColor", - STYLE_GRADIENTCOLOR: "gradientColor", - STYLE_GRADIENT_DIRECTION: "gradientDirection", - STYLE_STROKECOLOR: "strokeColor", - STYLE_SEPARATORCOLOR: "separatorColor", - STYLE_STROKEWIDTH: "strokeWidth", - STYLE_ALIGN: "align", - STYLE_VERTICAL_ALIGN: "verticalAlign", - STYLE_LABEL_POSITION: "labelPosition", - STYLE_VERTICAL_LABEL_POSITION: "verticalLabelPosition", - STYLE_IMAGE_ASPECT: "imageAspect", - STYLE_IMAGE_ALIGN: "imageAlign", - STYLE_IMAGE_VERTICAL_ALIGN: "imageVerticalAlign", - STYLE_GLASS: "glass", - STYLE_IMAGE: "image", - STYLE_IMAGE_WIDTH: "imageWidth", - STYLE_IMAGE_HEIGHT: "imageHeight", - STYLE_IMAGE_BACKGROUND: "imageBackground", - STYLE_IMAGE_BORDER: "imageBorder", - STYLE_FLIPH: "flipH", - STYLE_FLIPV: "flipV", - STYLE_NOLABEL: "noLabel", - STYLE_NOEDGESTYLE: "noEdgeStyle", - STYLE_LABEL_BACKGROUNDCOLOR: "labelBackgroundColor", - STYLE_LABEL_BORDERCOLOR: "labelBorderColor", - STYLE_LABEL_PADDING: "labelPadding", - STYLE_INDICATOR_SHAPE: "indicatorShape", - STYLE_INDICATOR_IMAGE: "indicatorImage", - STYLE_INDICATOR_COLOR: "indicatorColor", - STYLE_INDICATOR_STROKECOLOR: "indicatorStrokeColor", - STYLE_INDICATOR_GRADIENTCOLOR: "indicatorGradientColor", - STYLE_INDICATOR_SPACING: "indicatorSpacing", - STYLE_INDICATOR_WIDTH: "indicatorWidth", - STYLE_INDICATOR_HEIGHT: "indicatorHeight", - STYLE_INDICATOR_DIRECTION: "indicatorDirection", - STYLE_SHADOW: "shadow", - STYLE_SEGMENT: "segment", - STYLE_ENDARROW: "endArrow", - STYLE_STARTARROW: "startArrow", - STYLE_ENDSIZE: "endSize", - STYLE_STARTSIZE: "startSize", - STYLE_SWIMLANE_LINE: "swimlaneLine", - STYLE_ENDFILL: "endFill", - STYLE_STARTFILL: "startFill", - STYLE_DASHED: "dashed", - STYLE_DASH_PATTERN: "dashPattern", - STYLE_ROUNDED: "rounded", - STYLE_CURVED: "curved", - STYLE_ARCSIZE: "arcSize", - STYLE_SMOOTH: "smooth", - STYLE_SOURCE_PERIMETER_SPACING: "sourcePerimeterSpacing", - STYLE_TARGET_PERIMETER_SPACING: "targetPerimeterSpacing", - STYLE_PERIMETER_SPACING: "perimeterSpacing", - STYLE_SPACING: "spacing", - STYLE_SPACING_TOP: "spacingTop", - STYLE_SPACING_LEFT: "spacingLeft", - STYLE_SPACING_BOTTOM: "spacingBottom", - STYLE_SPACING_RIGHT: "spacingRight", - STYLE_HORIZONTAL: "horizontal", - STYLE_DIRECTION: "direction", - STYLE_ELBOW: "elbow", - STYLE_FONTCOLOR: "fontColor", - STYLE_FONTFAMILY: "fontFamily", - STYLE_FONTSIZE: "fontSize", - STYLE_FONTSTYLE: "fontStyle", - STYLE_AUTOSIZE: "autosize", - STYLE_FOLDABLE: "foldable", - STYLE_EDITABLE: "editable", - STYLE_BENDABLE: "bendable", - STYLE_MOVABLE: "movable", - STYLE_RESIZABLE: "resizable", - STYLE_CLONEABLE: "cloneable", - STYLE_DELETABLE: "deletable", - STYLE_SHAPE: "shape", - STYLE_EDGE: "edgeStyle", - STYLE_LOOP: "loopStyle", - STYLE_ROUTING_CENTER_X: "routingCenterX", - STYLE_ROUTING_CENTER_Y: "routingCenterY", - FONT_BOLD: 1, - FONT_ITALIC: 2, - FONT_UNDERLINE: 4, - FONT_SHADOW: 8, - SHAPE_RECTANGLE: "rectangle", - SHAPE_ELLIPSE: "ellipse", - SHAPE_DOUBLE_ELLIPSE: "doubleEllipse", - SHAPE_RHOMBUS: "rhombus", - SHAPE_LINE: "line", - SHAPE_IMAGE: "image", - SHAPE_ARROW: "arrow", - SHAPE_LABEL: "label", - SHAPE_CYLINDER: "cylinder", - SHAPE_SWIMLANE: "swimlane", - SHAPE_CONNECTOR: "connector", - SHAPE_ACTOR: "actor", - SHAPE_CLOUD: "cloud", - SHAPE_TRIANGLE: "triangle", - SHAPE_HEXAGON: "hexagon", - ARROW_CLASSIC: "classic", - ARROW_BLOCK: "block", - ARROW_OPEN: "open", - ARROW_OVAL: "oval", - ARROW_DIAMOND: "diamond", - ARROW_DIAMOND_THIN: "diamondThin", - ALIGN_LEFT: "left", - ALIGN_CENTER: "center", - ALIGN_RIGHT: "right", - ALIGN_TOP: "top", - ALIGN_MIDDLE: "middle", - ALIGN_BOTTOM: "bottom", - DIRECTION_NORTH: "north", - DIRECTION_SOUTH: "south", - DIRECTION_EAST: "east", - DIRECTION_WEST: "west", - DIRECTION_MASK_NONE: 0, - DIRECTION_MASK_WEST: 1, - DIRECTION_MASK_NORTH: 2, - DIRECTION_MASK_SOUTH: 4, - DIRECTION_MASK_EAST: 8, - DIRECTION_MASK_ALL: 15, - ELBOW_VERTICAL: "vertical", - ELBOW_HORIZONTAL: "horizontal", - EDGESTYLE_ELBOW: "elbowEdgeStyle", - EDGESTYLE_ENTITY_RELATION: "entityRelationEdgeStyle", - EDGESTYLE_LOOP: "loopEdgeStyle", - EDGESTYLE_SIDETOSIDE: "sideToSideEdgeStyle", - EDGESTYLE_TOPTOBOTTOM: "topToBottomEdgeStyle", - EDGESTYLE_ORTHOGONAL: "orthogonalEdgeStyle", - EDGESTYLE_SEGMENT: "segmentEdgeStyle", - PERIMETER_ELLIPSE: "ellipsePerimeter", - PERIMETER_RECTANGLE: "rectanglePerimeter", - PERIMETER_RHOMBUS: "rhombusPerimeter", - PERIMETER_TRIANGLE: "trianglePerimeter" - }; - -function mxEventObject(a) { - this.name = a; - this.properties = []; - for (var b = 1; b < arguments.length; b += 2) null != arguments[b + 1] && (this.properties[arguments[b]] = arguments[b + 1]) -} -mxEventObject.prototype.name = null; -mxEventObject.prototype.properties = null; -mxEventObject.prototype.consumed = !1; -mxEventObject.prototype.getName = function() { - return this.name -}; -mxEventObject.prototype.getProperties = function() { - return this.properties -}; -mxEventObject.prototype.getProperty = function(a) { - return this.properties[a] -}; -mxEventObject.prototype.isConsumed = function() { - return this.consumed -}; -mxEventObject.prototype.consume = function() { - this.consumed = !0 -}; - -function mxMouseEvent(a, b) { - this.evt = a; - this.state = b -} -mxMouseEvent.prototype.consumed = !1; -mxMouseEvent.prototype.evt = null; -mxMouseEvent.prototype.graphX = null; -mxMouseEvent.prototype.graphY = null; -mxMouseEvent.prototype.state = null; -mxMouseEvent.prototype.getEvent = function() { - return this.evt -}; -mxMouseEvent.prototype.getSource = function() { - return mxEvent.getSource(this.evt) -}; -mxMouseEvent.prototype.isSource = function(a) { - if (null != a) - for (var b = this.getSource(); null != b;) { - if (b == a.node) return !0; - b = b.parentNode - } - return !1 -}; -mxMouseEvent.prototype.getX = function() { - return mxEvent.getClientX(this.getEvent()) -}; -mxMouseEvent.prototype.getY = function() { - return mxEvent.getClientY(this.getEvent()) -}; -mxMouseEvent.prototype.getGraphX = function() { - return this.graphX -}; -mxMouseEvent.prototype.getGraphY = function() { - return this.graphY -}; -mxMouseEvent.prototype.getState = function() { - return this.state -}; -mxMouseEvent.prototype.getCell = function() { - var a = this.getState(); - return null != a ? a.cell : null -}; -mxMouseEvent.prototype.isPopupTrigger = function() { - return mxEvent.isPopupTrigger(this.getEvent()) -}; -mxMouseEvent.prototype.isConsumed = function() { - return this.consumed -}; -mxMouseEvent.prototype.consume = function(a) { - (null != a ? a : 1) && this.evt.preventDefault && this.evt.preventDefault(); - this.evt.returnValue = !1; - this.consumed = !0 -}; - -function mxEventSource(a) { - this.setEventSource(a) -} -mxEventSource.prototype.eventListeners = null; -mxEventSource.prototype.eventsEnabled = !0; -mxEventSource.prototype.eventSource = null; -mxEventSource.prototype.isEventsEnabled = function() { - return this.eventsEnabled -}; -mxEventSource.prototype.setEventsEnabled = function(a) { - this.eventsEnabled = a -}; -mxEventSource.prototype.getEventSource = function() { - return this.eventSource -}; -mxEventSource.prototype.setEventSource = function(a) { - this.eventSource = a -}; -mxEventSource.prototype.addListener = function(a, b) { - null == this.eventListeners && (this.eventListeners = []); - this.eventListeners.push(a); - this.eventListeners.push(b) -}; -mxEventSource.prototype.removeListener = function(a) { - if (null != this.eventListeners) - for (var b = 0; b < this.eventListeners.length;) this.eventListeners[b + 1] == a ? this.eventListeners.splice(b, 2) : b += 2 -}; -mxEventSource.prototype.fireEvent = function(a, b) { - if (null != this.eventListeners && this.isEventsEnabled()) { - null == a && (a = new mxEventObject); - null == b && (b = this.getEventSource()); - null == b && (b = this); - for (var c = [b, a], d = 0; d < this.eventListeners.length; d += 2) { - var e = this.eventListeners[d]; - (null == e || e == a.getName()) && this.eventListeners[d + 1].apply(this, c) - } - } -}; -var mxEvent = { - objects: [], - addListener: function() { - var a = function(a, c, d) { - null == a.mxListenerList && (a.mxListenerList = [], mxEvent.objects.push(a)); - a.mxListenerList.push({ - name: c, - f: d - }) - }; - return window.addEventListener ? function(b, c, d) { - b.addEventListener(c, d, !1); - a(b, c, d) - } : function(b, c, d) { - b.attachEvent("on" + c, d); - a(b, c, d) - } - }(), - removeListener: function() { - var a = function(a, c, d) { - if (null != a.mxListenerList) { - c = a.mxListenerList.length; - for (var e = 0; e < c; e++) - if (a.mxListenerList[e].f == d) { - a.mxListenerList.splice(e, 1); - break - } - 0 == - a.mxListenerList.length && (a.mxListenerList = null) - } - }; - return window.removeEventListener ? function(b, c, d) { - b.removeEventListener(c, d, !1); - a(b, c, d) - } : function(b, c, d) { - b.detachEvent("on" + c, d); - a(b, c, d) - } - }(), - removeAllListeners: function(a) { - var b = a.mxListenerList; - if (null != b) - for (; 0 < b.length;) { - var c = b[0]; - mxEvent.removeListener(a, c.name, c.f) - } - }, - addGestureListeners: function(a, b, c, d) { - null != b && mxEvent.addListener(a, "mousedown", b); - null != c && mxEvent.addListener(a, "mousemove", c); - null != d && mxEvent.addListener(a, "mouseup", d); - mxClient.IS_TOUCH && (null != b && mxEvent.addListener(a, "touchstart", b), null != c && mxEvent.addListener(a, "touchmove", c), null != d && mxEvent.addListener(a, "touchend", d)) - }, - removeGestureListeners: function(a, b, c, d) { - null != b && mxEvent.removeListener(a, "mousedown", b); - null != c && mxEvent.removeListener(a, "mousemove", c); - null != d && mxEvent.removeListener(a, "mouseup", d); - mxClient.IS_TOUCH && (null != b && mxEvent.removeListener(a, "touchstart", b), null != c && mxEvent.removeListener(a, "touchmove", c), null != d && mxEvent.removeListener(a, "touchend", - d)) - }, - redirectMouseEvents: function(a, b, c, d, e, f, g) { - var h = function(a) { - return "function" == typeof c ? c(a) : c - }; - mxEvent.addGestureListeners(a, function(a) { - null != d ? d(a) : mxEvent.isConsumed(a) || b.fireMouseEvent(mxEvent.MOUSE_DOWN, new mxMouseEvent(a, h(a))) - }, function(a) { - null != e ? e(a) : mxEvent.isConsumed(a) || b.fireMouseEvent(mxEvent.MOUSE_MOVE, new mxMouseEvent(a, h(a))) - }, function(a) { - null != f ? f(a) : mxEvent.isConsumed(a) || b.fireMouseEvent(mxEvent.MOUSE_UP, new mxMouseEvent(a, h(a))) - }); - mxEvent.addListener(a, "dblclick", function(a) { - if (null != - g) g(a); - else if (!mxEvent.isConsumed(a)) { - var c = h(a); - b.dblClick(a, null != c ? c.cell : null) - } - }) - }, - release: function(a) { - if (null != a && (mxEvent.removeAllListeners(a), a = a.childNodes, null != a)) - for (var b = a.length, c = 0; c < b; c += 1) mxEvent.release(a[c]) - }, - addMouseWheelListener: function(a) { - if (null != a) { - var b = function(b) { - null == b && (b = window.event); - var d = 0, - d = mxClient.IS_NS && !mxClient.IS_SF && !mxClient.IS_GC ? -b.detail / 2 : b.wheelDelta / 120; - 0 != d && a(b, 0 < d) - }; - mxClient.IS_NS ? mxEvent.addListener(window, mxClient.IS_SF || mxClient.IS_GC ? "mousewheel" : - "DOMMouseScroll", b) : mxEvent.addListener(document, "mousewheel", b) - } - }, - disableContextMenu: function() { - return mxClient.IS_IE && ("undefined" === typeof document.documentMode || 9 > document.documentMode) ? function(a) { - mxEvent.addListener(a, "contextmenu", function() { - return !1 - }) - } : function(a) { - a.setAttribute("oncontextmenu", "return false;") - } - }(), - getSource: function(a) { - return null != a.srcElement ? a.srcElement : a.target - }, - isConsumed: function(a) { - return null != a.isConsumed && a.isConsumed - }, - isLeftMouseButton: function(a) { - return a.button == - (mxClient.IS_IE && ("undefined" === typeof document.documentMode || 9 > document.documentMode) ? 1 : 0) - }, - isRightMouseButton: function(a) { - return 2 == a.button - }, - isPopupTrigger: function(a) { - return mxEvent.isRightMouseButton(a) || mxEvent.isShiftDown(a) && !mxEvent.isControlDown(a) - }, - isShiftDown: function(a) { - return null != a ? a.shiftKey : !1 - }, - isAltDown: function(a) { - return null != a ? a.altKey : !1 - }, - isControlDown: function(a) { - return null != a ? a.ctrlKey : !1 - }, - isMetaDown: function(a) { - return null != a ? a.metaKey : !1 - }, - getMainEvent: function(a) { - ("touchstart" == - a.type || "touchmove" == a.type) && null != a.touches && null != a.touches[0] ? a = a.touches[0] : "touchend" == a.type && (null != a.changedTouches && null != a.changedTouches[0]) && (a = - a.changedTouches[0]); - return a - }, - getClientX: function(a) { - return mxEvent.getMainEvent(a).clientX - }, - getClientY: function(a) { - return mxEvent.getMainEvent(a).clientY - }, - consume: function(a, b, c) { - c = null != c ? c : !0; - if (null != b ? b : 1) a.preventDefault ? (c && a.stopPropagation(), a.preventDefault()) : c && (a.cancelBubble = !0); - a.isConsumed = !0; - a.returnValue = !1 - }, - LABEL_HANDLE: -1, - ROTATION_HANDLE: -2, - MOUSE_DOWN: "mouseDown", - MOUSE_MOVE: "mouseMove", - MOUSE_UP: "mouseUp", - ACTIVATE: "activate", - RESIZE_START: "resizeStart", - RESIZE: "resize", - RESIZE_END: "resizeEnd", - MOVE_START: "moveStart", - MOVE: "move", - MOVE_END: "moveEnd", - PAN_START: "panStart", - PAN: "pan", - PAN_END: "panEnd", - MINIMIZE: "minimize", - NORMALIZE: "normalize", - MAXIMIZE: "maximize", - HIDE: "hide", - SHOW: "show", - CLOSE: "close", - DESTROY: "destroy", - REFRESH: "refresh", - SIZE: "size", - SELECT: "select", - FIRED: "fired", - GET: "get", - RECEIVE: "receive", - CONNECT: "connect", - DISCONNECT: "disconnect", - SUSPEND: "suspend", - RESUME: "resume", - MARK: "mark", - SESSION: "session", - ROOT: "root", - POST: "post", - OPEN: "open", - SAVE: "save", - BEFORE_ADD_VERTEX: "beforeAddVertex", - ADD_VERTEX: "addVertex", - AFTER_ADD_VERTEX: "afterAddVertex", - DONE: "done", - EXECUTE: "execute", - EXECUTED: "executed", - BEGIN_UPDATE: "beginUpdate", - START_EDIT: "startEdit", - END_UPDATE: "endUpdate", - END_EDIT: "endEdit", - BEFORE_UNDO: "beforeUndo", - UNDO: "undo", - REDO: "redo", - CHANGE: "change", - NOTIFY: "notify", - LAYOUT_CELLS: "layoutCells", - CLICK: "click", - SCALE: "scale", - TRANSLATE: "translate", - SCALE_AND_TRANSLATE: "scaleAndTranslate", - UP: "up", - DOWN: "down", - ADD: "add", - REMOVE: "remove", - CLEAR: "clear", - ADD_CELLS: "addCells", - CELLS_ADDED: "cellsAdded", - MOVE_CELLS: "moveCells", - CELLS_MOVED: "cellsMoved", - RESIZE_CELLS: "resizeCells", - CELLS_RESIZED: "cellsResized", - TOGGLE_CELLS: "toggleCells", - CELLS_TOGGLED: "cellsToggled", - ORDER_CELLS: "orderCells", - CELLS_ORDERED: "cellsOrdered", - REMOVE_CELLS: "removeCells", - CELLS_REMOVED: "cellsRemoved", - GROUP_CELLS: "groupCells", - UNGROUP_CELLS: "ungroupCells", - REMOVE_CELLS_FROM_PARENT: "removeCellsFromParent", - FOLD_CELLS: "foldCells", - CELLS_FOLDED: "cellsFolded", - ALIGN_CELLS: "alignCells", - LABEL_CHANGED: "labelChanged", - CONNECT_CELL: "connectCell", - CELL_CONNECTED: "cellConnected", - SPLIT_EDGE: "splitEdge", - FLIP_EDGE: "flipEdge", - START_EDITING: "startEditing", - ADD_OVERLAY: "addOverlay", - REMOVE_OVERLAY: "removeOverlay", - UPDATE_CELL_SIZE: "updateCellSize", - ESCAPE: "escape", - CLICK: "click", - DOUBLE_CLICK: "doubleClick", - START: "start", - RESET: "reset" -}; - -function mxXmlRequest(a, b, c, d, e, f) { - this.url = a; - this.params = b; - this.method = c || "POST"; - this.async = null != d ? d : !0; - this.username = e; - this.password = f -} -mxXmlRequest.prototype.url = null; -mxXmlRequest.prototype.params = null; -mxXmlRequest.prototype.method = null; -mxXmlRequest.prototype.async = null; -mxXmlRequest.prototype.binary = !1; -mxXmlRequest.prototype.username = null; -mxXmlRequest.prototype.password = null; -mxXmlRequest.prototype.request = null; -mxXmlRequest.prototype.isBinary = function() { - return this.binary -}; -mxXmlRequest.prototype.setBinary = function(a) { - this.binary = a -}; -mxXmlRequest.prototype.getText = function() { - return this.request.responseText -}; -mxXmlRequest.prototype.isReady = function() { - return 4 == this.request.readyState -}; -mxXmlRequest.prototype.getDocumentElement = function() { - var a = this.getXml(); - return null != a ? a.documentElement : null -}; -mxXmlRequest.prototype.getXml = function() { - var a = this.request.responseXML; - if (9 <= document.documentMode || null == a || null == a.documentElement) a = mxUtils.parseXml(this.request.responseText); - return a -}; -mxXmlRequest.prototype.getText = function() { - return this.request.responseText -}; -mxXmlRequest.prototype.getStatus = function() { - return this.request.status -}; -mxXmlRequest.prototype.create = function() { - if (window.XMLHttpRequest) return function() { - var a = new XMLHttpRequest; - this.isBinary() && a.overrideMimeType && a.overrideMimeType("text/plain; charset\x3dx-user-defined"); - return a - }; - if ("undefined" != typeof ActiveXObject) return function() { - return new ActiveXObject("Microsoft.XMLHTTP") - } -}(); -mxXmlRequest.prototype.send = function(a, b) { - this.request = this.create(); - null != this.request && (null != a && (this.request.onreadystatechange = mxUtils.bind(this, function() { - this.isReady() && (a(this), this.onreadystatechaange = null) - })), this.request.open(this.method, this.url, this.async, this.username, this.password), this.setRequestHeaders(this.request, this.params), this.request.send(this.params)) -}; -mxXmlRequest.prototype.setRequestHeaders = function(a, b) { - null != b && a.setRequestHeader("Content-Type", "application/x-www-form-urlencoded") -}; -mxXmlRequest.prototype.simulate = function(a, b) { - a = a || document; - var c = null; - a == document && (c = window.onbeforeunload, window.onbeforeunload = null); - var d = a.createElement("form"); - d.setAttribute("method", this.method); - d.setAttribute("action", this.url); - null != b && d.setAttribute("target", b); - d.style.display = "none"; - d.style.visibility = "hidden"; - for (var e = 0 < this.params.indexOf("\x26") ? this.params.split("\x26") : this.params.split(), f = 0; f < e.length; f++) { - var g = e[f].indexOf("\x3d"); - if (0 < g) { - var h = e[f].substring(0, g), - k = e[f].substring(g + - 1), - g = a.createElement("textarea"); - g.setAttribute("name", h); - k = k.replace(/\n/g, "\x26#xa;"); - h = a.createTextNode(k); - g.appendChild(h); - d.appendChild(g) - } - } - a.body.appendChild(d); - d.submit(); - a.body.removeChild(d); - null != c && (window.onbeforeunload = c) -}; -var mxClipboard = { - STEPSIZE: 10, - insertCount: 1, - cells: null, - isEmpty: function() { - return null == mxClipboard.cells - }, - cut: function(a, b) { - b = mxClipboard.copy(a, b); - mxClipboard.insertCount = 0; - mxClipboard.removeCells(a, b); - return b - }, - removeCells: function(a, b) { - a.removeCells(b) - }, - copy: function(a, b) { - b = b || a.getSelectionCells(); - var c = a.getExportableCells(b); - mxClipboard.insertCount = 1; - mxClipboard.cells = a.cloneCells(c); - return c - }, - paste: function(a) { - if (null != mxClipboard.cells) { - var b = a.getImportableCells(mxClipboard.cells), - c = mxClipboard.insertCount * - mxClipboard.STEPSIZE, - d = a.getDefaultParent(), - b = a.importCells(b, c, c, d); - mxClipboard.insertCount++; - a.setSelectionCells(b) - } - } -}; - -function mxWindow(a, b, c, d, e, f, g, h, k, l) { - null != b && (g = null != g ? g : !0, this.content = b, this.init(c, d, e, f, l), this.installMaximizeHandler(), this.installMinimizeHandler(), this.installCloseHandler(), this.setMinimizable(g), - this.setTitle(a), (null == h || h) && this.installMoveHandler(), null != k && null != k.parentNode ? k.parentNode.replaceChild(this.div, k) : document.body.appendChild(this.div)) -} -mxWindow.prototype = new mxEventSource; -mxWindow.prototype.constructor = mxWindow; -mxWindow.prototype.closeImage = mxClient.imageBasePath + "/close.gif"; -mxWindow.prototype.minimizeImage = mxClient.imageBasePath + "/minimize.gif"; -mxWindow.prototype.normalizeImage = mxClient.imageBasePath + "/normalize.gif"; -mxWindow.prototype.maximizeImage = mxClient.imageBasePath + "/maximize.gif"; -mxWindow.prototype.resizeImage = mxClient.imageBasePath + "/resize.gif"; -mxWindow.prototype.visible = !1; -mxWindow.prototype.content = !1; -mxWindow.prototype.minimumSize = new mxRectangle(0, 0, 50, 40); -mxWindow.prototype.title = !1; -mxWindow.prototype.content = !1; -mxWindow.prototype.destroyOnClose = !0; -mxWindow.prototype.init = function(a, b, c, d, e) { - e = null != e ? e : "mxWindow"; - this.div = document.createElement("div"); - this.div.className = e; - this.div.style.left = a + "px"; - this.div.style.top = b + "px"; - this.table = document.createElement("table"); - this.table.className = e; - null != c && (mxClient.IS_IE || (this.div.style.width = c + "px"), this.table.style.width = c + "px"); - null != d && (mxClient.IS_IE || (this.div.style.height = d + "px"), this.table.style.height = d + "px"); - a = document.createElement("tbody"); - b = document.createElement("tr"); - this.title = document.createElement("td"); - this.title.className = e + "Title"; - b.appendChild(this.title); - a.appendChild(b); - b = document.createElement("tr"); - this.td = document.createElement("td"); - this.td.className = e + "Pane"; - this.contentWrapper = document.createElement("div"); - this.contentWrapper.className = e + "Pane"; - this.contentWrapper.style.width = "100%"; - this.contentWrapper.appendChild(this.content); - if (mxClient.IS_IE || "DIV" != this.content.nodeName.toUpperCase()) this.contentWrapper.style.height = "100%"; - this.td.appendChild(this.contentWrapper); - b.appendChild(this.td); - a.appendChild(b); - this.table.appendChild(a); - this.div.appendChild(this.table); - e = mxUtils.bind(this, function(a) { - this.activate() - }); - mxEvent.addListener(this.title, "mousedown", e); - mxEvent.addListener(this.table, "mousedown", e); - mxClient.IS_TOUCH && (mxEvent.addListener(this.title, "touchstart", e), mxEvent.addListener(this.table, "touchstart", e)); - this.hide() -}; -mxWindow.prototype.setTitle = function(a) { - for (var b = this.title.firstChild; null != b;) { - var c = b.nextSibling; - b.nodeType == mxConstants.NODETYPE_TEXT && b.parentNode.removeChild(b); - b = c - } - mxUtils.write(this.title, a || "") -}; -mxWindow.prototype.setScrollable = function(a) { - 0 > navigator.userAgent.indexOf("Presto/2.5") && (this.contentWrapper.style.overflow = a ? "auto" : "hidden") -}; -mxWindow.prototype.activate = function() { - if (mxWindow.activeWindow != this) { - var a = mxUtils.getCurrentStyle(this.getElement()), - a = null != a ? a.zIndex : 3; - if (mxWindow.activeWindow) { - var b = mxWindow.activeWindow.getElement(); - null != b && null != b.style && (b.style.zIndex = a) - } - b = mxWindow.activeWindow; - this.getElement().style.zIndex = parseInt(a) + 1; - mxWindow.activeWindow = this; - this.fireEvent(new mxEventObject(mxEvent.ACTIVATE, "previousWindow", b)) - } -}; -mxWindow.prototype.getElement = function() { - return this.div -}; -mxWindow.prototype.fit = function() { - mxUtils.fit(this.div) -}; -mxWindow.prototype.isResizable = function() { - return null != this.resize ? "none" != this.resize.style.display : !1 -}; -mxWindow.prototype.setResizable = function(a) { - a ? null == this.resize ? (this.resize = document.createElement("img"), this.resize.style.position = "absolute", this.resize.style.bottom = "2px", this.resize.style.right = "2px", this.resize.setAttribute( - "src", mxClient.imageBasePath + "/resize.gif"), this.resize.style.cursor = "nw-resize", mxEvent.addGestureListeners(this.resize, mxUtils.bind(this, function(a) { - this.activate(); - var c = mxEvent.getClientX(a), - d = mxEvent.getClientY(a), - e = this.div.offsetWidth, - f = this.div.offsetHeight, - g = mxUtils.bind(this, - function(a) { - var b = mxEvent.getClientX(a) - c, - g = mxEvent.getClientY(a) - d; - this.setSize(e + b, f + g); - this.fireEvent(new mxEventObject(mxEvent.RESIZE, "event", a)); - mxEvent.consume(a) - }), - h = mxUtils.bind(this, function(a) { - mxEvent.removeGestureListeners(document, null, g, h); - this.fireEvent(new mxEventObject(mxEvent.RESIZE_END, "event", a)); - mxEvent.consume(a) - }); - mxEvent.addGestureListeners(document, null, g, h); - this.fireEvent(new mxEventObject(mxEvent.RESIZE_START, "event", a)); - mxEvent.consume(a) - }), null, null), this.div.appendChild(this.resize)) : - this.resize.style.display = "inline" : null != this.resize && (this.resize.style.display = "none") -}; -mxWindow.prototype.setSize = function(a, b) { - a = Math.max(this.minimumSize.width, a); - b = Math.max(this.minimumSize.height, b); - mxClient.IS_IE || (this.div.style.width = a + "px", this.div.style.height = b + "px"); - this.table.style.width = a + "px"; - this.table.style.height = b + "px"; - mxClient.IS_IE || (this.contentWrapper.style.height = this.div.offsetHeight - this.title.offsetHeight - 2 + "px") -}; -mxWindow.prototype.setMinimizable = function(a) { - this.minimize.style.display = a ? "" : "none" -}; -mxWindow.prototype.getMinimumSize = function() { - return new mxRectangle(0, 0, 0, this.title.offsetHeight) -}; -mxWindow.prototype.installMinimizeHandler = function() { - this.minimize = document.createElement("img"); - this.minimize.setAttribute("src", this.minimizeImage); - this.minimize.setAttribute("align", "right"); - this.minimize.setAttribute("title", "Minimize"); - this.minimize.style.cursor = "pointer"; - this.minimize.style.marginRight = "1px"; - this.minimize.style.display = "none"; - this.title.appendChild(this.minimize); - var a = !1, - b = null, - c = null, - d = mxUtils.bind(this, function(d) { - this.activate(); - if (a) a = !1, this.minimize.setAttribute("src", - this.minimizeImage), this.minimize.setAttribute("title", "Minimize"), this.contentWrapper.style.display = "", this.maximize.style.display = b, mxClient.IS_IE || (this.div.style.height = - c), this.table.style.height = c, null != this.resize && (this.resize.style.visibility = ""), this.fireEvent(new mxEventObject(mxEvent.NORMALIZE, "event", d)); - else { - a = !0; - this.minimize.setAttribute("src", this.normalizeImage); - this.minimize.setAttribute("title", "Normalize"); - this.contentWrapper.style.display = "none"; - b = this.maximize.style.display; - this.maximize.style.display = "none"; - c = this.table.style.height; - var f = this.getMinimumSize(); - 0 < f.height && (mxClient.IS_IE || (this.div.style.height = f.height + "px"), this.table.style.height = f.height + "px"); - 0 < f.width && (mxClient.IS_IE || (this.div.style.width = f.width + "px"), this.table.style.width = f.width + "px"); - null != this.resize && (this.resize.style.visibility = "hidden"); - this.fireEvent(new mxEventObject(mxEvent.MINIMIZE, "event", d)) - } - mxEvent.consume(d) - }); - mxEvent.addListener(this.minimize, "mousedown", d); - mxClient.IS_TOUCH && - mxEvent.addListener(this.minimize, "touchstart", d) -}; -mxWindow.prototype.setMaximizable = function(a) { - this.maximize.style.display = a ? "" : "none" -}; -mxWindow.prototype.installMaximizeHandler = function() { - this.maximize = document.createElement("img"); - this.maximize.setAttribute("src", this.maximizeImage); - this.maximize.setAttribute("align", "right"); - this.maximize.setAttribute("title", "Maximize"); - this.maximize.style.cursor = "default"; - this.maximize.style.marginLeft = "1px"; - this.maximize.style.cursor = "pointer"; - this.maximize.style.display = "none"; - this.title.appendChild(this.maximize); - var a = !1, - b = null, - c = null, - d = null, - e = null, - f = mxUtils.bind(this, function(f) { - this.activate(); - if ("none" != this.maximize.style.display) { - if (a) { - a = !1; - this.maximize.setAttribute("src", this.maximizeImage); - this.maximize.setAttribute("title", "Maximize"); - this.contentWrapper.style.display = ""; - this.minimize.style.visibility = ""; - this.div.style.left = b + "px"; - this.div.style.top = c + "px"; - if (!mxClient.IS_IE && (this.div.style.height = d, this.div.style.width = e, h = mxUtils.getCurrentStyle(this.contentWrapper), "auto" == h.overflow || null != this.resize)) this.contentWrapper - .style.height = this.div.offsetHeight - this.title.offsetHeight - - 2 + "px"; - this.table.style.height = d; - this.table.style.width = e; - null != this.resize && (this.resize.style.visibility = ""); - this.fireEvent(new mxEventObject(mxEvent.NORMALIZE, "event", f)) - } else { - a = !0; - this.maximize.setAttribute("src", this.normalizeImage); - this.maximize.setAttribute("title", "Normalize"); - this.contentWrapper.style.display = ""; - this.minimize.style.visibility = "hidden"; - b = parseInt(this.div.style.left); - c = parseInt(this.div.style.top); - d = this.table.style.height; - e = this.table.style.width; - this.div.style.left = "0px"; - this.div.style.top = "0px"; - mxClient.IS_IE || (this.div.style.height = document.body.clientHeight - 2 + "px", this.div.style.width = document.body.clientWidth - 2 + "px"); - this.table.style.width = document.body.clientWidth - 2 + "px"; - this.table.style.height = document.body.clientHeight - 2 + "px"; - null != this.resize && (this.resize.style.visibility = "hidden"); - if (!mxClient.IS_IE) { - var h = mxUtils.getCurrentStyle(this.contentWrapper); - if ("auto" == h.overflow || null != this.resize) this.contentWrapper.style.height = this.div.offsetHeight - this.title.offsetHeight - - 2 + "px" - } - this.fireEvent(new mxEventObject(mxEvent.MAXIMIZE, "event", f)) - } - mxEvent.consume(f) - } - }); - mxEvent.addGestureListeners(this.maximize, f); - mxEvent.addListener(this.title, "dblclick", f) -}; -mxWindow.prototype.installMoveHandler = function() { - this.title.style.cursor = "move"; - mxEvent.addGestureListeners(this.title, mxUtils.bind(this, function(a) { - var b = mxEvent.getClientX(a), - c = mxEvent.getClientY(a), - d = this.getX(), - e = this.getY(), - f = mxUtils.bind(this, function(a) { - var f = mxEvent.getClientX(a) - b, - g = mxEvent.getClientY(a) - c; - this.setLocation(d + f, e + g); - this.fireEvent(new mxEventObject(mxEvent.MOVE, "event", a)); - mxEvent.consume(a) - }), - g = mxUtils.bind(this, function(a) { - mxEvent.removeGestureListeners(document, null, f, - g); - this.fireEvent(new mxEventObject(mxEvent.MOVE_END, "event", a)); - mxEvent.consume(a) - }); - mxEvent.addGestureListeners(document, null, f, g); - this.fireEvent(new mxEventObject(mxEvent.MOVE_START, "event", a)); - mxEvent.consume(a) - })) -}; -mxWindow.prototype.setLocation = function(a, b) { - this.div.style.left = a + "px"; - this.div.style.top = b + "px" -}; -mxWindow.prototype.getX = function() { - return parseInt(this.div.style.left) -}; -mxWindow.prototype.getY = function() { - return parseInt(this.div.style.top) -}; -mxWindow.prototype.installCloseHandler = function() { - this.closeImg = document.createElement("img"); - this.closeImg.setAttribute("src", this.closeImage); - this.closeImg.setAttribute("align", "right"); - this.closeImg.setAttribute("title", "Close"); - this.closeImg.style.marginLeft = "2px"; - this.closeImg.style.cursor = "pointer"; - this.closeImg.style.display = "none"; - this.title.insertBefore(this.closeImg, this.title.firstChild); - mxEvent.addGestureListeners(this.closeImg, mxUtils.bind(this, function(a) { - this.fireEvent(new mxEventObject(mxEvent.CLOSE, - "event", a)); - this.destroyOnClose ? this.destroy() : this.setVisible(!1); - mxEvent.consume(a) - })) -}; -mxWindow.prototype.setImage = function(a) { - this.image = document.createElement("img"); - this.image.setAttribute("src", a); - this.image.setAttribute("align", "left"); - this.image.style.marginRight = "4px"; - this.image.style.marginLeft = "0px"; - this.image.style.marginTop = "-2px"; - this.title.insertBefore(this.image, this.title.firstChild) -}; -mxWindow.prototype.setClosable = function(a) { - this.closeImg.style.display = a ? "" : "none" -}; -mxWindow.prototype.isVisible = function() { - return null != this.div ? "hidden" != this.div.style.visibility : !1 -}; -mxWindow.prototype.setVisible = function(a) { - null != this.div && this.isVisible() != a && (a ? this.show() : this.hide()) -}; -mxWindow.prototype.show = function() { - this.div.style.visibility = ""; - this.activate(); - var a = mxUtils.getCurrentStyle(this.contentWrapper); - if (!mxClient.IS_IE && ("auto" == a.overflow || null != this.resize)) this.contentWrapper.style.height = this.div.offsetHeight - this.title.offsetHeight - 2 + "px"; - this.fireEvent(new mxEventObject(mxEvent.SHOW)) -}; -mxWindow.prototype.hide = function() { - this.div.style.visibility = "hidden"; - this.fireEvent(new mxEventObject(mxEvent.HIDE)) -}; -mxWindow.prototype.destroy = function() { - this.fireEvent(new mxEventObject(mxEvent.DESTROY)); - null != this.div && (mxEvent.release(this.div), this.div.parentNode.removeChild(this.div), this.div = null); - this.contentWrapper = this.content = this.title = null -}; - -function mxForm(a) { - this.table = document.createElement("table"); - this.table.className = a; - this.body = document.createElement("tbody"); - this.table.appendChild(this.body) -} -mxForm.prototype.table = null; -mxForm.prototype.body = !1; -mxForm.prototype.getTable = function() { - return this.table -}; -mxForm.prototype.addButtons = function(a, b) { - var c = document.createElement("tr"), - d = document.createElement("td"); - c.appendChild(d); - var d = document.createElement("td"), - e = document.createElement("button"); - mxUtils.write(e, mxResources.get("ok") || "OK"); - d.appendChild(e); - mxEvent.addListener(e, "click", function() { - a() - }); - e = document.createElement("button"); - mxUtils.write(e, mxResources.get("cancel") || "Cancel"); - d.appendChild(e); - mxEvent.addListener(e, "click", function() { - b() - }); - c.appendChild(d); - this.body.appendChild(c) -}; -mxForm.prototype.addText = function(a, b) { - var c = document.createElement("input"); - c.setAttribute("type", "text"); - c.value = b; - return this.addField(a, c) -}; -mxForm.prototype.addCheckbox = function(a, b) { - var c = document.createElement("input"); - c.setAttribute("type", "checkbox"); - this.addField(a, c); - b && (c.checked = !0); - return c -}; -mxForm.prototype.addTextarea = function(a, b, c) { - var d = document.createElement("textarea"); - mxClient.IS_NS && c--; - d.setAttribute("rows", c || 2); - d.value = b; - return this.addField(a, d) -}; -mxForm.prototype.addCombo = function(a, b, c) { - var d = document.createElement("select"); - null != c && d.setAttribute("size", c); - b && d.setAttribute("multiple", "true"); - return this.addField(a, d) -}; -mxForm.prototype.addOption = function(a, b, c, d) { - var e = document.createElement("option"); - mxUtils.writeln(e, b); - e.setAttribute("value", c); - d && e.setAttribute("selected", d); - a.appendChild(e) -}; -mxForm.prototype.addField = function(a, b) { - var c = document.createElement("tr"), - d = document.createElement("td"); - mxUtils.write(d, a); - c.appendChild(d); - d = document.createElement("td"); - d.appendChild(b); - c.appendChild(d); - this.body.appendChild(c); - return b -}; - -function mxImage(a, b, c) { - this.src = a; - this.width = b; - this.height = c -} -mxImage.prototype.src = null; -mxImage.prototype.width = null; -mxImage.prototype.height = null; - -function mxDivResizer(a, b) { - if ("div" == a.nodeName.toLowerCase()) { - null == b && (b = window); - this.div = a; - var c = mxUtils.getCurrentStyle(a); - null != c && (this.resizeWidth = "auto" == c.width, this.resizeHeight = "auto" == c.height); - mxEvent.addListener(b, "resize", mxUtils.bind(this, function(a) { - this.handlingResize || (this.handlingResize = !0, this.resize(), this.handlingResize = !1) - })); - this.resize() - } -} -mxDivResizer.prototype.resizeWidth = !0; -mxDivResizer.prototype.resizeHeight = !0; -mxDivResizer.prototype.handlingResize = !1; -mxDivResizer.prototype.resize = function() { - var a = this.getDocumentWidth(), - b = this.getDocumentHeight(), - c = parseInt(this.div.style.left), - d = parseInt(this.div.style.right), - e = parseInt(this.div.style.top), - f = parseInt(this.div.style.bottom); - this.resizeWidth && (!isNaN(c) && !isNaN(d) && 0 <= c && 0 <= d && 0 < a - d - c) && (this.div.style.width = a - d - c + "px"); - this.resizeHeight && (!isNaN(e) && !isNaN(f) && 0 <= e && 0 <= f && 0 < b - e - f) && (this.div.style.height = b - e - f + "px") -}; -mxDivResizer.prototype.getDocumentWidth = function() { - return document.body.clientWidth -}; -mxDivResizer.prototype.getDocumentHeight = function() { - return document.body.clientHeight -}; - -function mxDragSource(a, b) { - this.element = a; - this.dropHandler = b; - mxEvent.addGestureListeners(a, mxUtils.bind(this, this.mouseDown)) -} -mxDragSource.prototype.element = null; -mxDragSource.prototype.dropHandler = null; -mxDragSource.prototype.dragOffset = null; -mxDragSource.prototype.dragElement = null; -mxDragSource.prototype.previewElement = null; -mxDragSource.prototype.enabled = !0; -mxDragSource.prototype.currentGraph = null; -mxDragSource.prototype.currentDropTarget = null; -mxDragSource.prototype.currentPoint = null; -mxDragSource.prototype.currentGuide = null; -mxDragSource.prototype.currentHighlight = null; -mxDragSource.prototype.autoscroll = !0; -mxDragSource.prototype.guidesEnabled = !0; -mxDragSource.prototype.gridEnabled = !0; -mxDragSource.prototype.highlightDropTargets = !0; -mxDragSource.prototype.dragElementZIndex = 100; -mxDragSource.prototype.dragElementOpacity = 70; -mxDragSource.prototype.isEnabled = function() { - return this.enabled -}; -mxDragSource.prototype.setEnabled = function(a) { - this.enabled = a -}; -mxDragSource.prototype.isGuidesEnabled = function() { - return this.guidesEnabled -}; -mxDragSource.prototype.setGuidesEnabled = function(a) { - this.guidesEnabled = a -}; -mxDragSource.prototype.isGridEnabled = function() { - return this.gridEnabled -}; -mxDragSource.prototype.setGridEnabled = function(a) { - this.gridEnabled = a -}; -mxDragSource.prototype.getGraphForEvent = function(a) { - return null -}; -mxDragSource.prototype.getDropTarget = function(a, b, c) { - return a.getCellAt(b, c) -}; -mxDragSource.prototype.createDragElement = function(a) { - return this.element.cloneNode(!0) -}; -mxDragSource.prototype.createPreviewElement = function(a) { - return null -}; -mxDragSource.prototype.mouseDown = function(a) { - this.enabled && (!mxEvent.isConsumed(a) && null == this.mouseMoveHandler) && (this.startDrag(a), this.mouseMoveHandler = mxUtils.bind(this, this.mouseMove), this.mouseUpHandler = mxUtils.bind( - this, this.mouseUp), mxEvent.addGestureListeners(document, null, this.mouseMoveHandler, this.mouseUpHandler), mxEvent.consume(a, !0, !1)) -}; -mxDragSource.prototype.startDrag = function(a) { - this.dragElement = this.createDragElement(a); - this.dragElement.style.position = "absolute"; - this.dragElement.style.zIndex = this.dragElementZIndex; - mxUtils.setOpacity(this.dragElement, this.dragElementOpacity) -}; -mxDragSource.prototype.stopDrag = function(a) { - null != this.dragElement && (null != this.dragElement.parentNode && this.dragElement.parentNode.removeChild(this.dragElement), this.dragElement = null) -}; -mxDragSource.prototype.graphContainsEvent = function(a, b) { - var c = mxEvent.getClientX(b), - d = mxEvent.getClientY(b), - e = mxUtils.getOffset(a.container), - f = mxUtils.getScrollOrigin(); - return c >= e.x - f.x && d >= e.y - f.y && c <= e.x - f.x + a.container.offsetWidth && d <= e.y - f.y + a.container.offsetHeight -}; -mxDragSource.prototype.mouseMove = function(a) { - var b = this.getGraphForEvent(a); - null != b && !this.graphContainsEvent(b, a) && (b = null); - b != this.currentGraph && (null != this.currentGraph && this.dragExit(this.currentGraph), this.currentGraph = b, null != this.currentGraph && this.dragEnter(this.currentGraph)); - null != this.currentGraph && this.dragOver(this.currentGraph, a); - if (null != this.dragElement && (null == this.previewElement || "visible" != this.previewElement.style.visibility)) { - var b = mxEvent.getClientX(a), - c = mxEvent.getClientY(a); - null == this.dragElement.parentNode && document.body.appendChild(this.dragElement); - this.dragElement.style.visibility = "visible"; - null != this.dragOffset && (b += this.dragOffset.x, c += this.dragOffset.y); - b += document.body.scrollLeft || document.documentElement.scrollLeft; - c += document.body.scrollTop || document.documentElement.scrollTop; - this.dragElement.style.left = b + "px"; - this.dragElement.style.top = c + "px" - } else null != this.dragElement && (this.dragElement.style.visibility = "hidden"); - mxEvent.consume(a) -}; -mxDragSource.prototype.mouseUp = function(a) { - if (null != this.currentGraph) { - if (null != this.currentPoint && (null == this.previewElement || "hidden" != this.previewElement.style.visibility)) { - var b = this.currentGraph.view.scale, - c = this.currentGraph.view.translate; - this.drop(this.currentGraph, a, this.currentDropTarget, this.currentPoint.x / b - c.x, this.currentPoint.y / b - c.y) - } - this.dragExit(this.currentGraph) - } - this.stopDrag(a); - mxEvent.removeGestureListeners(document, null, this.mouseMoveHandler, this.mouseUpHandler); - this.currentGraph = - this.mouseUpHandler = this.mouseMoveHandler = null; - mxEvent.consume(a) -}; -mxDragSource.prototype.dragEnter = function(a) { - a.isMouseDown = !0; - this.previewElement = this.createPreviewElement(a); - this.isGuidesEnabled() && null != this.previewElement && (this.currentGuide = new mxGuide(a, a.graphHandler.getGuideStates())); - this.highlightDropTargets && (this.currentHighlight = new mxCellHighlight(a, mxConstants.DROP_TARGET_COLOR)) -}; -mxDragSource.prototype.dragExit = function(a) { - this.currentPoint = this.currentDropTarget = null; - a.isMouseDown = !1; - null != this.previewElement && (null != this.previewElement.parentNode && this.previewElement.parentNode.removeChild(this.previewElement), this.previewElement = null); - null != this.currentGuide && (this.currentGuide.destroy(), this.currentGuide = null); - null != this.currentHighlight && (this.currentHighlight.destroy(), this.currentHighlight = null) -}; -mxDragSource.prototype.dragOver = function(a, b) { - var c = mxUtils.getOffset(a.container), - d = mxUtils.getScrollOrigin(a.container), - e = mxEvent.getClientX(b) - c.x + d.x, - c = mxEvent.getClientY(b) - c.y + d.y; - a.autoScroll && (null == this.autoscroll || this.autoscroll) && a.scrollPointToVisible(e, c, a.autoExtend); - null != this.currentHighlight && a.isDropEnabled() && (this.currentDropTarget = this.getDropTarget(a, e, c), d = a.getView().getState(this.currentDropTarget), this.currentHighlight.highlight(d)); - if (null != this.previewElement) { - null == this.previewElement.parentNode && - (a.container.appendChild(this.previewElement), this.previewElement.style.zIndex = "3", this.previewElement.style.position = "absolute"); - var d = this.isGridEnabled() && a.isGridEnabledEvent(b), - f = !0; - if (null != this.currentGuide && this.currentGuide.isEnabledForEvent(b)) var f = parseInt(this.previewElement.style.width), - g = parseInt(this.previewElement.style.height), - f = new mxRectangle(0, 0, f, g), - c = new mxPoint(e, c), - c = this.currentGuide.move(f, c, d), - f = !1, - e = c.x, - c = c.y; - else if (d) var d = a.view.scale, - g = a.view.translate, - h = a.gridSize / - 2, - e = (a.snap(e / d - g.x - h) + g.x) * d, - c = (a.snap(c / d - g.y - h) + g.y) * d; - null != this.currentGuide && f && this.currentGuide.hide(); - null != this.previewOffset && (e += this.previewOffset.x, c += this.previewOffset.y); - this.previewElement.style.left = Math.round(e) + "px"; - this.previewElement.style.top = Math.round(c) + "px"; - this.previewElement.style.visibility = "visible" - } - this.currentPoint = new mxPoint(e, c) -}; -mxDragSource.prototype.drop = function(a, b, c, d, e) { - this.dropHandler(a, b, c, d, e); - a.container.focus() -}; - -function mxToolbar(a) { - this.container = a -} -mxToolbar.prototype = new mxEventSource; -mxToolbar.prototype.constructor = mxToolbar; -mxToolbar.prototype.container = null; -mxToolbar.prototype.enabled = !0; -mxToolbar.prototype.noReset = !1; -mxToolbar.prototype.updateDefaultMode = !0; -mxToolbar.prototype.addItem = function(a, b, c, d, e, f) { - var g = document.createElement(null != b ? "img" : "button"), - h = e || (null != f ? "mxToolbarMode" : "mxToolbarItem"); - g.className = h; - g.setAttribute("src", b); - null != a && (null != b ? g.setAttribute("title", a) : mxUtils.write(g, a)); - this.container.appendChild(g); - null != c && (mxEvent.addListener(g, "click", c), mxClient.IS_TOUCH && mxEvent.addListener(g, "touchend", c)); - a = mxUtils.bind(this, function(a) { - null != d ? g.setAttribute("src", b) : g.style.backgroundColor = "" - }); - mxEvent.addGestureListeners(g, - mxUtils.bind(this, function(a) { - null != d ? g.setAttribute("src", d) : g.style.backgroundColor = "gray"; - if (null != f) { - null == this.menu && (this.menu = new mxPopupMenu, this.menu.init()); - var b = this.currentImg; - this.menu.isMenuShowing() && this.menu.hideMenu(); - b != g && (this.currentImg = g, this.menu.factoryMethod = f, b = new mxPoint(g.offsetLeft, g.offsetTop + g.offsetHeight), this.menu.popup(b.x, b.y, null, a), this.menu.isMenuShowing() && - (g.className = h + "Selected", this.menu.hideMenu = function() { - mxPopupMenu.prototype.hideMenu.apply(this); - g.className = h; - this.currentImg = null - })) - } - }), null, a); - mxEvent.addListener(g, "mouseout", a); - return g -}; -mxToolbar.prototype.addCombo = function(a) { - var b = document.createElement("div"); - b.style.display = "inline"; - b.className = "mxToolbarComboContainer"; - var c = document.createElement("select"); - c.className = a || "mxToolbarCombo"; - b.appendChild(c); - this.container.appendChild(b); - return c -}; -mxToolbar.prototype.addActionCombo = function(a, b) { - var c = document.createElement("select"); - c.className = b || "mxToolbarCombo"; - this.addOption(c, a, null); - mxEvent.addListener(c, "change", function(a) { - var b = c.options[c.selectedIndex]; - c.selectedIndex = 0; - null != b.funct && b.funct(a) - }); - this.container.appendChild(c); - return c -}; -mxToolbar.prototype.addOption = function(a, b, c) { - var d = document.createElement("option"); - mxUtils.writeln(d, b); - "function" == typeof c ? d.funct = c : d.setAttribute("value", c); - a.appendChild(d); - return d -}; -mxToolbar.prototype.addSwitchMode = function(a, b, c, d, e) { - var f = document.createElement("img"); - f.initialClassName = e || "mxToolbarMode"; - f.className = f.initialClassName; - f.setAttribute("src", b); - f.altIcon = d; - null != a && f.setAttribute("title", a); - mxEvent.addListener(f, "click", mxUtils.bind(this, function(a) { - a = this.selectedMode.altIcon; - null != a ? (this.selectedMode.altIcon = this.selectedMode.getAttribute("src"), this.selectedMode.setAttribute("src", a)) : this.selectedMode.className = this.selectedMode.initialClassName; - this.updateDefaultMode && - (this.defaultMode = f); - this.selectedMode = f; - a = f.altIcon; - null != a ? (f.altIcon = f.getAttribute("src"), f.setAttribute("src", a)) : f.className = f.initialClassName + "Selected"; - this.fireEvent(new mxEventObject(mxEvent.SELECT)); - c() - })); - this.container.appendChild(f); - null == this.defaultMode && (this.defaultMode = f, this.selectMode(f), c()); - return f -}; -mxToolbar.prototype.addMode = function(a, b, c, d, e, f) { - f = null != f ? f : !0; - var g = document.createElement(null != b ? "img" : "button"); - g.initialClassName = e || "mxToolbarMode"; - g.className = g.initialClassName; - g.setAttribute("src", b); - g.altIcon = d; - null != a && g.setAttribute("title", a); - this.enabled && f && (mxEvent.addListener(g, "click", mxUtils.bind(this, function(a) { - this.selectMode(g, c); - this.noReset = !1 - })), mxEvent.addListener(g, "dblclick", mxUtils.bind(this, function(a) { - this.selectMode(g, c); - this.noReset = !0 - })), null == this.defaultMode && - (this.defaultMode = g, this.defaultFunction = c, this.selectMode(g, c))); - this.container.appendChild(g); - return g -}; -mxToolbar.prototype.selectMode = function(a, b) { - if (this.selectedMode != a) { - if (null != this.selectedMode) { - var c = this.selectedMode.altIcon; - null != c ? (this.selectedMode.altIcon = this.selectedMode.getAttribute("src"), this.selectedMode.setAttribute("src", c)) : this.selectedMode.className = this.selectedMode.initialClassName - } - this.selectedMode = a; - c = this.selectedMode.altIcon; - null != c ? (this.selectedMode.altIcon = this.selectedMode.getAttribute("src"), this.selectedMode.setAttribute("src", c)) : this.selectedMode.className = this.selectedMode.initialClassName + - "Selected"; - this.fireEvent(new mxEventObject(mxEvent.SELECT, "function", b)) - } -}; -mxToolbar.prototype.resetMode = function(a) { - (a || !this.noReset) && this.selectedMode != this.defaultMode && this.selectMode(this.defaultMode, this.defaultFunction) -}; -mxToolbar.prototype.addSeparator = function(a) { - return this.addItem(null, a, null) -}; -mxToolbar.prototype.addBreak = function() { - mxUtils.br(this.container) -}; -mxToolbar.prototype.addLine = function() { - var a = document.createElement("hr"); - a.style.marginRight = "6px"; - a.setAttribute("size", "1"); - this.container.appendChild(a) -}; -mxToolbar.prototype.destroy = function() { - mxEvent.release(this.container); - this.selectedMode = this.defaultFunction = this.defaultMode = this.container = null; - null != this.menu && this.menu.destroy() -}; - -function mxSession(a, b, c, d) { - this.model = a; - this.urlInit = b; - this.urlPoll = c; - this.urlNotify = d; - null != a && (this.codec = new mxCodec, this.codec.lookup = function(b) { - return a.getCell(b) - }); - a.addListener(mxEvent.NOTIFY, mxUtils.bind(this, function(a, b) { - var c = b.getProperty("edit"); - (null != c && this.debug || this.connected && !this.suspended) && this.notify("\x3cedit\x3e" + this.encodeChanges(c.changes, c.undone) + "\x3c/edit\x3e") - })) -} -mxSession.prototype = new mxEventSource; -mxSession.prototype.constructor = mxSession; -mxSession.prototype.model = null; -mxSession.prototype.urlInit = null; -mxSession.prototype.urlPoll = null; -mxSession.prototype.urlNotify = null; -mxSession.prototype.codec = null; -mxSession.prototype.linefeed = "\x26#xa;"; -mxSession.prototype.escapePostData = !0; -mxSession.prototype.significantRemoteChanges = !0; -mxSession.prototype.sent = 0; -mxSession.prototype.received = 0; -mxSession.prototype.debug = !1; -mxSession.prototype.connected = !1; -mxSession.prototype.suspended = !1; -mxSession.prototype.polling = !1; -mxSession.prototype.start = function() { - this.debug ? (this.connected = !0, this.fireEvent(new mxEventObject(mxEvent.CONNECT))) : this.connected || this.get(this.urlInit, mxUtils.bind(this, function(a) { - this.connected = !0; - this.fireEvent(new mxEventObject(mxEvent.CONNECT)); - this.poll() - })) -}; -mxSession.prototype.suspend = function() { - this.connected && !this.suspended && (this.suspended = !0, this.fireEvent(new mxEventObject(mxEvent.SUSPEND))) -}; -mxSession.prototype.resume = function(a, b, c) { - this.connected && this.suspended && (this.suspended = !1, this.fireEvent(new mxEventObject(mxEvent.RESUME)), this.polling || this.poll()) -}; -mxSession.prototype.stop = function(a) { - this.connected && (this.connected = !1); - this.fireEvent(new mxEventObject(mxEvent.DISCONNECT, "reason", a)) -}; -mxSession.prototype.poll = function() { - this.connected && !this.suspended && null != this.urlPoll ? (this.polling = !0, this.get(this.urlPoll, mxUtils.bind(this, function() { - this.poll() - }))) : this.polling = !1 -}; -mxSession.prototype.notify = function(a, b, c) { - null != a && 0 < a.length && (null != this.urlNotify && (this.debug ? (mxLog.show(), mxLog.debug("mxSession.notify: " + this.urlNotify + " xml\x3d" + a)) : (a = "\x3cmessage\x3e\x3cdelta\x3e" + a + - "\x3c/delta\x3e\x3c/message\x3e", this.escapePostData && (a = encodeURIComponent(a)), mxUtils.post(this.urlNotify, "xml\x3d" + a, b, c))), this.sent += a.length, this.fireEvent(new mxEventObject( - mxEvent.NOTIFY, "url", this.urlNotify, "xml", a))) -}; -mxSession.prototype.get = function(a, b, c) { - if ("undefined" != typeof mxUtils) { - var d = mxUtils.bind(this, function(a) { - null != c ? c(a) : this.stop(a) - }); - mxUtils.get(a, mxUtils.bind(this, function(c) { - if ("undefined" != typeof mxUtils) - if (c.isReady() && 404 != c.getStatus()) { - if (this.received += c.getText().length, this.fireEvent(new mxEventObject(mxEvent.GET, "url", a, "request", c)), this.isValidResponse(c)) { - if (0 < c.getText().length) { - var f = c.getDocumentElement(); - null == f ? d("Invalid response: " + c.getText()) : this.receive(f) - } - null != b && b(c) - } - } else d("Response not ready") - }), - function(a) { - d("Transmission error") - }) - } -}; -mxSession.prototype.isValidResponse = function(a) { - return 0 > a.getText().indexOf("\x3c?php") -}; -mxSession.prototype.encodeChanges = function(a, b) { - for (var c = "", d = b ? -1 : 1, e = b ? a.length - 1 : 0; 0 <= e && e < a.length; e += d) var f = this.codec.encode(a[e]), - c = c + mxUtils.getXml(f, this.linefeed); - return c -}; -mxSession.prototype.receive = function(a) { - if (null != a && a.nodeType == mxConstants.NODETYPE_ELEMENT) { - var b = a.getAttribute("namespace"); - null != b && (this.model.prefix = b + "-"); - for (b = a.firstChild; null != b;) { - var c = b.nodeName.toLowerCase(); - "state" == c ? this.processState(b) : "delta" == c && this.processDelta(b); - b = b.nextSibling - } - this.fireEvent(new mxEventObject(mxEvent.RECEIVE, "node", a)) - } -}; -mxSession.prototype.processState = function(a) { - (new mxCodec(a.ownerDocument)).decode(a.firstChild, this.model) -}; -mxSession.prototype.processDelta = function(a) { - for (a = a.firstChild; null != a;) "edit" == a.nodeName && this.processEdit(a), a = a.nextSibling -}; -mxSession.prototype.processEdit = function(a) { - a = this.decodeChanges(a); - if (0 < a.length) { - var b = this.createUndoableEdit(a); - this.model.fireEvent(new mxEventObject(mxEvent.CHANGE, "edit", b, "changes", a)); - this.model.fireEvent(new mxEventObject(mxEvent.UNDO, "edit", b)); - this.fireEvent(new mxEventObject(mxEvent.FIRED, "edit", b)) - } -}; -mxSession.prototype.createUndoableEdit = function(a) { - var b = new mxUndoableEdit(this.model, this.significantRemoteChanges); - b.changes = a; - b.notify = function() { - b.source.fireEvent(new mxEventObject(mxEvent.CHANGE, "edit", b, "changes", b.changes)); - b.source.fireEvent(new mxEventObject(mxEvent.NOTIFY, "edit", b, "changes", b.changes)) - }; - return b -}; -mxSession.prototype.decodeChanges = function(a) { - this.codec.document = a.ownerDocument; - var b = []; - for (a = a.firstChild; null != a;) { - var c = this.decodeChange(a); - null != c && b.push(c); - a = a.nextSibling - } - return b -}; -mxSession.prototype.decodeChange = function(a) { - var b = null; - a.nodeType == mxConstants.NODETYPE_ELEMENT && (b = "mxRootChange" == a.nodeName ? (new mxCodec(a.ownerDocument)).decode(a) : this.codec.decode(a), null != b && (b.model = this.model, b.execute(), - "mxChildChange" == a.nodeName && null == b.parent && this.cellRemoved(b.child))); - return b -}; -mxSession.prototype.cellRemoved = function(a, b) { - this.codec.putObject(a.getId(), a); - for (var c = this.model.getChildCount(a), d = 0; d < c; d++) this.cellRemoved(this.model.getChildAt(a, d)) -}; - -function mxUndoableEdit(a, b) { - this.source = a; - this.changes = []; - this.significant = null != b ? b : !0 -} -mxUndoableEdit.prototype.source = null; -mxUndoableEdit.prototype.changes = null; -mxUndoableEdit.prototype.significant = null; -mxUndoableEdit.prototype.undone = !1; -mxUndoableEdit.prototype.redone = !1; -mxUndoableEdit.prototype.isEmpty = function() { - return 0 == this.changes.length -}; -mxUndoableEdit.prototype.isSignificant = function() { - return this.significant -}; -mxUndoableEdit.prototype.add = function(a) { - this.changes.push(a) -}; -mxUndoableEdit.prototype.notify = function() {}; -mxUndoableEdit.prototype.die = function() {}; -mxUndoableEdit.prototype.undo = function() { - if (!this.undone) { - this.source.fireEvent(new mxEventObject(mxEvent.START_EDIT)); - for (var a = this.changes.length - 1; 0 <= a; a--) { - var b = this.changes[a]; - null != b.execute ? b.execute() : null != b.undo && b.undo(); - this.source.fireEvent(new mxEventObject(mxEvent.EXECUTED, "change", b)) - } - this.undone = !0; - this.redone = !1; - this.source.fireEvent(new mxEventObject(mxEvent.END_EDIT)) - } - this.notify() -}; -mxUndoableEdit.prototype.redo = function() { - if (!this.redone) { - this.source.fireEvent(new mxEventObject(mxEvent.START_EDIT)); - for (var a = this.changes.length, b = 0; b < a; b++) { - var c = this.changes[b]; - null != c.execute ? c.execute() : null != c.redo && c.redo(); - this.source.fireEvent(new mxEventObject(mxEvent.EXECUTED, "change", c)) - } - this.undone = !1; - this.redone = !0; - this.source.fireEvent(new mxEventObject(mxEvent.END_EDIT)) - } - this.notify() -}; - -function mxUndoManager(a) { - this.size = null != a ? a : 100; - this.clear() -} -mxUndoManager.prototype = new mxEventSource; -mxUndoManager.prototype.constructor = mxUndoManager; -mxUndoManager.prototype.size = null; -mxUndoManager.prototype.history = null; -mxUndoManager.prototype.indexOfNextAdd = 0; -mxUndoManager.prototype.isEmpty = function() { - return 0 == this.history.length -}; -mxUndoManager.prototype.clear = function() { - this.history = []; - this.indexOfNextAdd = 0; - this.fireEvent(new mxEventObject(mxEvent.CLEAR)) -}; -mxUndoManager.prototype.canUndo = function() { - return 0 < this.indexOfNextAdd -}; -mxUndoManager.prototype.undo = function() { - for (; 0 < this.indexOfNextAdd;) { - var a = this.history[--this.indexOfNextAdd]; - a.undo(); - if (a.isSignificant()) { - this.fireEvent(new mxEventObject(mxEvent.UNDO, "edit", a)); - break - } - } -}; -mxUndoManager.prototype.canRedo = function() { - return this.indexOfNextAdd < this.history.length -}; -mxUndoManager.prototype.redo = function() { - for (var a = this.history.length; this.indexOfNextAdd < a;) { - var b = this.history[this.indexOfNextAdd++]; - b.redo(); - if (b.isSignificant()) { - this.fireEvent(new mxEventObject(mxEvent.REDO, "edit", b)); - break - } - } -}; -mxUndoManager.prototype.undoableEditHappened = function(a) { - this.trim(); - 0 < this.size && this.size == this.history.length && this.history.shift(); - this.history.push(a); - this.indexOfNextAdd = this.history.length; - this.fireEvent(new mxEventObject(mxEvent.ADD, "edit", a)) -}; -mxUndoManager.prototype.trim = function() { - if (this.history.length > this.indexOfNextAdd) - for (var a = this.history.splice(this.indexOfNextAdd, this.history.length - this.indexOfNextAdd), b = 0; b < a.length; b++) a[b].die() -}; -var mxUrlConverter = function(a) { - var b = !0, - c = null, - d = null; - return { - isEnabled: function() { - return b - }, - setEnabled: function(a) { - b = a - }, - getBaseUrl: function() { - return c - }, - setBaseUrl: function(a) { - c = a - }, - getBaseDomain: function() { - return c - }, - setBaseDomain: function(a) { - c = a - }, - isRelativeUrl: function(a) { - return "http://" != a.substring(0, 7) && "https://" != a.substring(0, 8) && "data:image" != a.substring(0, 10) - }, - convert: function(a) { - if (b && this.isRelativeUrl(a)) { - if (null == c) { - d = location.protocol + "//" + location.host; - c = d + location.pathname; - var f = c.lastIndexOf("/"); - 0 < f && (c = c.substring(0, f + 1)) - } - a = "/" == a.charAt(0) ? d + a : c + a - } - return a - } - } -}; - -function mxPanningManager(a) { - this.thread = null; - this.active = !1; - this.dy = this.dx = this.t0y = this.t0x = this.tdy = this.tdx = 0; - this.scrollbars = !1; - this.scrollTop = this.scrollLeft = 0; - this.mouseListener = { - mouseDown: function(a, b) {}, - mouseMove: function(a, b) {}, - mouseUp: mxUtils.bind(this, function(a, b) { - this.active && this.stop() - }) - }; - a.addMouseListener(this.mouseListener); - mxEvent.addListener(document, "mouseup", mxUtils.bind(this, function() { - this.active && this.stop() - })); - var b = mxUtils.bind(this, function() { - this.scrollbars = mxUtils.hasScrollbars(a.container); - this.scrollLeft = a.container.scrollLeft; - this.scrollTop = a.container.scrollTop; - return window.setInterval(mxUtils.bind(this, function() { - this.tdx -= this.dx; - this.tdy -= this.dy; - if (this.scrollbars) { - var b = -a.container.scrollLeft - Math.ceil(this.dx), - d = -a.container.scrollTop - Math.ceil(this.dy); - a.panGraph(b, d); - a.panDx = this.scrollLeft - a.container.scrollLeft; - a.panDy = this.scrollTop - a.container.scrollTop; - a.fireEvent(new mxEventObject(mxEvent.PAN)) - } else a.panGraph(this.getDx(), this.getDy()) - }), this.delay) - }); - this.isActive = - function() { - return active - }; - this.getDx = function() { - return Math.round(this.tdx) - }; - this.getDy = function() { - return Math.round(this.tdy) - }; - this.start = function() { - this.t0x = a.view.translate.x; - this.t0y = a.view.translate.y; - this.active = !0 - }; - this.panTo = function(c, d, e, f) { - this.active || this.start(); - this.scrollLeft = a.container.scrollLeft; - this.scrollTop = a.container.scrollTop; - f = null != f ? f : 0; - var g = a.container; - this.dx = c + (null != e ? e : 0) - g.scrollLeft - g.clientWidth; - 0 > this.dx && Math.abs(this.dx) < this.border ? this.dx = this.border + this.dx : - this.dx = this.handleMouseOut ? Math.max(this.dx, 0) : 0; - 0 == this.dx && (this.dx = c - g.scrollLeft, this.dx = 0 < this.dx && this.dx < this.border ? this.dx - this.border : this.handleMouseOut ? Math.min(0, this.dx) : 0); - this.dy = d + f - g.scrollTop - g.clientHeight; - 0 > this.dy && Math.abs(this.dy) < this.border ? this.dy = this.border + this.dy : this.dy = this.handleMouseOut ? Math.max(this.dy, 0) : 0; - 0 == this.dy && (this.dy = d - g.scrollTop, this.dy = 0 < this.dy && this.dy < this.border ? this.dy - this.border : this.handleMouseOut ? Math.min(0, this.dy) : 0); - 0 != this.dx || 0 != this.dy ? - (this.dx *= this.damper, this.dy *= this.damper, null == this.thread && (this.thread = b())) : null != this.thread && (window.clearInterval(this.thread), this.thread = null) - }; - this.stop = function() { - if (this.active) - if (this.active = !1, null != this.thread && (window.clearInterval(this.thread), this.thread = null), this.tdy = this.tdx = 0, this.scrollbars) a.panDx = 0, a.panDy = 0, a.fireEvent(new mxEventObject( - mxEvent.PAN)); - else { - var b = a.panDx, - d = a.panDy; - if (0 != b || 0 != d) a.panGraph(0, 0), a.view.setTranslate(this.t0x + b / a.view.scale, this.t0y + d / a.view.scale) - } - }; - this.destroy = function() { - a.removeMouseListener(this.mouseListener) - } -} -mxPanningManager.prototype.damper = 1 / 6; -mxPanningManager.prototype.delay = 10; -mxPanningManager.prototype.handleMouseOut = !0; -mxPanningManager.prototype.border = 0; - -function mxPopupMenu(a) { - this.factoryMethod = a; - null != a && this.init() -} -mxPopupMenu.prototype = new mxEventSource; -mxPopupMenu.prototype.constructor = mxPopupMenu; -mxPopupMenu.prototype.submenuImage = mxClient.imageBasePath + "/submenu.gif"; -mxPopupMenu.prototype.zIndex = 10006; -mxPopupMenu.prototype.factoryMethod = null; -mxPopupMenu.prototype.useLeftButtonForPopup = !1; -mxPopupMenu.prototype.enabled = !0; -mxPopupMenu.prototype.itemCount = 0; -mxPopupMenu.prototype.autoExpand = !1; -mxPopupMenu.prototype.smartSeparators = !1; -mxPopupMenu.prototype.labels = !0; -mxPopupMenu.prototype.init = function() { - this.table = document.createElement("table"); - this.table.className = "mxPopupMenu"; - this.tbody = document.createElement("tbody"); - this.table.appendChild(this.tbody); - this.div = document.createElement("div"); - this.div.className = "mxPopupMenu"; - this.div.style.display = "inline"; - this.div.style.zIndex = this.zIndex; - this.div.appendChild(this.table); - mxEvent.disableContextMenu(this.div) -}; -mxPopupMenu.prototype.isEnabled = function() { - return this.enabled -}; -mxPopupMenu.prototype.setEnabled = function(a) { - this.enabled = a -}; -mxPopupMenu.prototype.isPopupTrigger = function(a) { - return a.isPopupTrigger() || this.useLeftButtonForPopup && mxEvent.isLeftMouseButton(a.getEvent()) -}; -mxPopupMenu.prototype.addItem = function(a, b, c, d, e, f) { - d = d || this; - this.itemCount++; - d.willAddSeparator && (d.containsItems && this.addSeparator(d, !0), d.willAddSeparator = !1); - d.containsItems = !0; - var g = document.createElement("tr"); - g.className = "mxPopupMenuItem"; - var h = document.createElement("td"); - h.className = "mxPopupMenuIcon"; - null != b ? (e = document.createElement("img"), e.src = b, h.appendChild(e)) : null != e && (b = document.createElement("div"), b.className = e, h.appendChild(b)); - g.appendChild(h); - this.labels && (h = document.createElement("td"), - h.className = "mxPopupMenuItem" + (null != f && !f ? " disabled" : ""), mxUtils.write(h, a), h.align = "left", g.appendChild(h), a = document.createElement("td"), a.className = - "mxPopupMenuItem" + (null != f && !f ? " disabled" : ""), a.style.paddingRight = "6px", a.style.textAlign = "right", g.appendChild(a), null == d.div && this.createSubmenu(d)); - d.tbody.appendChild(g); - if (null == f || f) mxEvent.addGestureListeners(g, mxUtils.bind(this, function(a) { - this.eventReceiver = g; - d.activeRow != g && d.activeRow != d && (null != d.activeRow && null != d.activeRow.div.parentNode && - this.hideSubmenu(d), null != g.div && (this.showSubmenu(d, g), d.activeRow = g)); - mxEvent.consume(a) - }), mxUtils.bind(this, function(a) { - d.activeRow != g && d.activeRow != d && (null != d.activeRow && null != d.activeRow.div.parentNode && this.hideSubmenu(d), this.autoExpand && null != g.div && (this.showSubmenu(d, g), d.activeRow = - g)); - g.className = "mxPopupMenuItemHover" - }), mxUtils.bind(this, function(a) { - this.eventReceiver == g && (d.activeRow != g && this.hideMenu(), null != c && c(a)); - this.eventReceiver = null; - mxEvent.consume(a) - })), mxEvent.addListener(g, - "mouseout", mxUtils.bind(this, function(a) { - g.className = "mxPopupMenuItem" - })); - return g -}; -mxPopupMenu.prototype.createSubmenu = function(a) { - a.table = document.createElement("table"); - a.table.className = "mxPopupMenu"; - a.tbody = document.createElement("tbody"); - a.table.appendChild(a.tbody); - a.div = document.createElement("div"); - a.div.className = "mxPopupMenu"; - a.div.style.position = "absolute"; - a.div.style.display = "inline"; - a.div.style.zIndex = this.zIndex; - a.div.appendChild(a.table); - var b = document.createElement("img"); - b.setAttribute("src", this.submenuImage); - td = a.firstChild.nextSibling.nextSibling; - td.appendChild(b) -}; -mxPopupMenu.prototype.showSubmenu = function(a, b) { - if (null != b.div) { - b.div.style.left = a.div.offsetLeft + b.offsetLeft + b.offsetWidth - 1 + "px"; - b.div.style.top = a.div.offsetTop + b.offsetTop + "px"; - document.body.appendChild(b.div); - var c = parseInt(b.div.offsetLeft), - d = parseInt(b.div.offsetWidth), - e = document.body, - f = document.documentElement; - if (c + d > (e.scrollLeft || f.scrollLeft) + (e.clientWidth || f.clientWidth)) b.div.style.left = a.div.offsetLeft - d + (mxClient.IS_IE ? 6 : -6) + "px"; - mxUtils.fit(b.div) - } -}; -mxPopupMenu.prototype.addSeparator = function(a, b) { - a = a || this; - if (this.smartSeparators && !b) a.willAddSeparator = !0; - else if (null != a.tbody) { - a.willAddSeparator = !1; - var c = document.createElement("tr"), - d = document.createElement("td"); - d.className = "mxPopupMenuIcon"; - d.style.padding = "0 0 0 0px"; - c.appendChild(d); - d = document.createElement("td"); - d.style.padding = "0 0 0 0px"; - d.setAttribute("colSpan", "2"); - var e = document.createElement("hr"); - e.setAttribute("size", "1"); - d.appendChild(e); - c.appendChild(d); - a.tbody.appendChild(c) - } -}; -mxPopupMenu.prototype.popup = function(a, b, c, d) { - if (null != this.div && null != this.tbody && null != this.factoryMethod) { - this.div.style.left = a + "px"; - for (this.div.style.top = b + "px"; null != this.tbody.firstChild;) mxEvent.release(this.tbody.firstChild), this.tbody.removeChild(this.tbody.firstChild); - this.itemCount = 0; - this.factoryMethod(this, c, d); - 0 < this.itemCount && (this.showMenu(), this.fireEvent(new mxEventObject(mxEvent.SHOW))) - } -}; -mxPopupMenu.prototype.isMenuShowing = function() { - return null != this.div && this.div.parentNode == document.body -}; -mxPopupMenu.prototype.showMenu = function() { - 9 <= document.documentMode && (this.div.style.filter = "none"); - document.body.appendChild(this.div); - mxUtils.fit(this.div) -}; -mxPopupMenu.prototype.hideMenu = function() { - null != this.div && (null != this.div.parentNode && this.div.parentNode.removeChild(this.div), this.hideSubmenu(this), this.containsItems = !1) -}; -mxPopupMenu.prototype.hideSubmenu = function(a) { - null != a.activeRow && (this.hideSubmenu(a.activeRow), null != a.activeRow.div.parentNode && a.activeRow.div.parentNode.removeChild(a.activeRow.div), a.activeRow = null) -}; -mxPopupMenu.prototype.destroy = function() { - null != this.div && (mxEvent.release(this.div), null != this.div.parentNode && this.div.parentNode.removeChild(this.div), this.div = null) -}; - -function mxAutoSaveManager(a) { - this.changeHandler = mxUtils.bind(this, function(a, c) { - this.isEnabled() && this.graphModelChanged(c.getProperty("edit").changes) - }); - this.setGraph(a) -} -mxAutoSaveManager.prototype = new mxEventSource; -mxAutoSaveManager.prototype.constructor = mxAutoSaveManager; -mxAutoSaveManager.prototype.graph = null; -mxAutoSaveManager.prototype.autoSaveDelay = 10; -mxAutoSaveManager.prototype.autoSaveThrottle = 2; -mxAutoSaveManager.prototype.autoSaveThreshold = 5; -mxAutoSaveManager.prototype.ignoredChanges = 0; -mxAutoSaveManager.prototype.lastSnapshot = 0; -mxAutoSaveManager.prototype.enabled = !0; -mxAutoSaveManager.prototype.changeHandler = null; -mxAutoSaveManager.prototype.isEnabled = function() { - return this.enabled -}; -mxAutoSaveManager.prototype.setEnabled = function(a) { - this.enabled = a -}; -mxAutoSaveManager.prototype.setGraph = function(a) { - null != this.graph && this.graph.getModel().removeListener(this.changeHandler); - this.graph = a; - null != this.graph && this.graph.getModel().addListener(mxEvent.CHANGE, this.changeHandler) -}; -mxAutoSaveManager.prototype.save = function() {}; -mxAutoSaveManager.prototype.graphModelChanged = function(a) { - a = ((new Date).getTime() - this.lastSnapshot) / 1E3; - a > this.autoSaveDelay || this.ignoredChanges >= this.autoSaveThreshold && a > this.autoSaveThrottle ? (this.save(), this.reset()) : this.ignoredChanges++ -}; -mxAutoSaveManager.prototype.reset = function() { - this.lastSnapshot = (new Date).getTime(); - this.ignoredChanges = 0 -}; -mxAutoSaveManager.prototype.destroy = function() { - this.setGraph(null) -}; - -function mxAnimation(a) { - this.delay = null != a ? a : 20 -} -mxAnimation.prototype = new mxEventSource; -mxAnimation.prototype.constructor = mxAnimation; -mxAnimation.prototype.delay = null; -mxAnimation.prototype.thread = null; -mxAnimation.prototype.startAnimation = function() { - null == this.thread && (this.thread = window.setInterval(mxUtils.bind(this, this.updateAnimation), this.delay)) -}; -mxAnimation.prototype.updateAnimation = function() { - this.fireEvent(new mxEventObject(mxEvent.EXECUTE)) -}; -mxAnimation.prototype.stopAnimation = function() { - null != this.thread && (window.clearInterval(this.thread), this.thread = null, this.fireEvent(new mxEventObject(mxEvent.DONE))) -}; - -function mxMorphing(a, b, c, d) { - mxAnimation.call(this, d); - this.graph = a; - this.steps = null != b ? b : 6; - this.ease = null != c ? c : 1.5 -} -mxMorphing.prototype = new mxAnimation; -mxMorphing.prototype.constructor = mxMorphing; -mxMorphing.prototype.graph = null; -mxMorphing.prototype.steps = null; -mxMorphing.prototype.step = 0; -mxMorphing.prototype.ease = null; -mxMorphing.prototype.cells = null; -mxMorphing.prototype.updateAnimation = function() { - var a = new mxCellStatePreview(this.graph); - if (null != this.cells) - for (var b = 0; b < this.cells.length; b++) this.animateCell(cells[b], a, !1); - else this.animateCell(this.graph.getModel().getRoot(), a, !0); - this.show(a); - (a.isEmpty() || this.step++ >= this.steps) && this.stopAnimation() -}; -mxMorphing.prototype.show = function(a) { - a.show() -}; -mxMorphing.prototype.animateCell = function(a, b, c) { - var d = this.graph.getView().getState(a), - e = null; - if (null != d && (e = this.getDelta(d), this.graph.getModel().isVertex(a) && (0 != e.x || 0 != e.y))) { - var f = this.graph.view.getTranslate(), - g = this.graph.view.getScale(); - e.x += f.x * g; - e.y += f.y * g; - b.moveState(d, -e.x / this.ease, -e.y / this.ease) - } - if (c && !this.stopRecursion(d, e)) { - d = this.graph.getModel().getChildCount(a); - for (e = 0; e < d; e++) this.animateCell(this.graph.getModel().getChildAt(a, e), b, c) - } -}; -mxMorphing.prototype.stopRecursion = function(a, b) { - return null != b && (0 != b.x || 0 != b.y) -}; -mxMorphing.prototype.getDelta = function(a) { - var b = this.getOriginForCell(a.cell), - c = this.graph.getView().getTranslate(), - d = this.graph.getView().getScale(); - a = new mxPoint(a.x / d - c.x, a.y / d - c.y); - return new mxPoint((b.x - a.x) * d, (b.y - a.y) * d) -}; -mxMorphing.prototype.getOriginForCell = function(a) { - var b = null; - null != a && (b = this.getOriginForCell(this.graph.getModel().getParent(a)), a = this.graph.getCellGeometry(a), null != a && (b.x += a.x, b.y += a.y)); - null == b && (b = this.graph.view.getTranslate(), b = new mxPoint(-b.x, -b.y)); - return b -}; - -function mxImageBundle(a) { - this.images = []; - this.alt = null != a ? a : !1 -} -mxImageBundle.prototype.images = null; -mxImageBundle.prototype.images = null; -mxImageBundle.prototype.putImage = function(a, b, c) { - this.images[a] = { - value: b, - fallback: c - } -}; -mxImageBundle.prototype.getImage = function(a) { - var b = null; - null != a && (a = this.images[a], null != a && (b = this.alt ? a.fallback : a.value)); - return b -}; - -function mxImageExport() {} -mxImageExport.prototype.includeOverlays = !1; -mxImageExport.prototype.drawState = function(a, b) { - null != a && (this.visitStatesRecursive(a, b, this.drawCellState), this.includeOverlays && this.visitStatesRecursive(a, b, this.drawOverlays)) -}; -mxImageExport.prototype.visitStatesRecursive = function(a, b, c) { - if (null != a) { - c(a, b); - for (var d = a.view.graph, e = d.model.getChildCount(a.cell), f = 0; f < e; f++) { - var g = d.view.getState(d.model.getChildAt(a.cell, f)); - this.visitStatesRecursive(g, b, c) - } - } -}; -mxImageExport.prototype.drawCellState = function(a, b) { - a.shape instanceof mxShape && (b.save(), a.shape.paint(b), b.restore()); - null != a.text && (b.save(), a.text.paint(b), b.restore()) -}; -mxImageExport.prototype.drawOverlays = function(a, b) { - null != a.overlays && a.overlays.visit(function(a, d) { - d instanceof mxShape && d.paint(b) - }) -}; - -function mxAbstractCanvas2D() { - this.converter = this.createUrlConverter(); - this.reset() -} -mxAbstractCanvas2D.prototype.state = null; -mxAbstractCanvas2D.prototype.states = null; -mxAbstractCanvas2D.prototype.path = null; -mxAbstractCanvas2D.prototype.rotateHtml = !0; -mxAbstractCanvas2D.prototype.lastX = 0; -mxAbstractCanvas2D.prototype.lastY = 0; -mxAbstractCanvas2D.prototype.moveOp = "M"; -mxAbstractCanvas2D.prototype.lineOp = "L"; -mxAbstractCanvas2D.prototype.quadOp = "Q"; -mxAbstractCanvas2D.prototype.curveOp = "C"; -mxAbstractCanvas2D.prototype.closeOp = "Z"; -mxAbstractCanvas2D.prototype.pointerEvents = !1; -mxAbstractCanvas2D.prototype.createUrlConverter = function() { - return new mxUrlConverter -}; -mxAbstractCanvas2D.prototype.reset = function() { - this.state = this.createState(); - this.states = [] -}; -mxAbstractCanvas2D.prototype.createState = function() { - return { - dx: 0, - dy: 0, - scale: 1, - alpha: 1, - fillColor: null, - fillAlpha: 1, - gradientColor: null, - gradientAlpha: 1, - gradientDirection: null, - strokeColor: null, - strokeWidth: 1, - dashed: !1, - dashPattern: "3 3", - lineCap: "flat", - lineJoin: "miter", - miterLimit: 10, - fontColor: "#000000", - fontBackgroundColor: null, - fontBorderColor: null, - fontSize: mxConstants.DEFAULT_FONTSIZE, - fontFamily: mxConstants.DEFAULT_FONTFAMILY, - fontStyle: 0, - shadow: !1, - shadowColor: mxConstants.SHADOWCOLOR, - shadowAlpha: mxConstants.SHADOW_OPACITY, - shadowDx: mxConstants.SHADOW_OFFSET_X, - shadowDy: mxConstants.SHADOW_OFFSET_Y, - rotation: 0, - rotationCx: 0, - rotationCy: 0 - } -}; -mxAbstractCanvas2D.prototype.format = function(a) { - return Math.round(parseFloat(a)) -}; -mxAbstractCanvas2D.prototype.addOp = function() { - if (null != this.path && (this.path.push(arguments[0]), 2 < arguments.length)) - for (var a = this.state, b = 2; b < arguments.length; b += 2) this.lastX = arguments[b - 1], this.lastY = arguments[b], this.path.push(this.format((this.lastX + a.dx) * a.scale)), this.path.push( - this.format((this.lastY + a.dy) * a.scale)) -}; -mxAbstractCanvas2D.prototype.rotatePoint = function(a, b, c, d, e) { - c *= Math.PI / 180; - return mxUtils.getRotatedPoint(new mxPoint(a, b), Math.cos(c), Math.sin(c), new mxPoint(d, e)) -}; -mxAbstractCanvas2D.prototype.save = function() { - this.states.push(this.state); - this.state = mxUtils.clone(this.state) -}; -mxAbstractCanvas2D.prototype.restore = function() { - this.state = this.states.pop() -}; -mxAbstractCanvas2D.prototype.scale = function(a) { - this.state.scale *= a; - this.state.strokeWidth *= a -}; -mxAbstractCanvas2D.prototype.translate = function(a, b) { - this.state.dx += a; - this.state.dy += b -}; -mxAbstractCanvas2D.prototype.setAlpha = function(a) { - this.state.alpha = a -}; -mxAbstractCanvas2D.prototype.setFillColor = function(a) { - a == mxConstants.NONE && (a = null); - this.state.fillColor = a; - this.state.gradientColor = null -}; -mxAbstractCanvas2D.prototype.setGradient = function(a, b, c, d, e, f, g, h, k) { - c = this.state; - c.fillColor = a; - c.fillAlpha = null != h ? h : 1; - c.gradientColor = b; - c.gradientAlpha = null != k ? k : 1; - c.gradientDirection = g -}; -mxAbstractCanvas2D.prototype.setStrokeColor = function(a) { - a == mxConstants.NONE && (a = null); - this.state.strokeColor = a -}; -mxAbstractCanvas2D.prototype.setStrokeWidth = function(a) { - this.state.strokeWidth = a -}; -mxAbstractCanvas2D.prototype.setDashed = function(a) { - this.state.dashed = a -}; -mxAbstractCanvas2D.prototype.setDashPattern = function(a) { - this.state.dashPattern = a -}; -mxAbstractCanvas2D.prototype.setLineCap = function(a) { - this.state.lineCap = a -}; -mxAbstractCanvas2D.prototype.setLineJoin = function(a) { - this.state.lineJoin = a -}; -mxAbstractCanvas2D.prototype.setMiterLimit = function(a) { - this.state.miterLimit = a -}; -mxAbstractCanvas2D.prototype.setFontColor = function(a) { - a == mxConstants.NONE && (a = null); - this.state.fontColor = a -}; -mxAbstractCanvas2D.prototype.setFontBackgroundColor = function(a) { - a == mxConstants.NONE && (a = null); - this.state.fontBackgroundColor = a -}; -mxAbstractCanvas2D.prototype.setFontBorderColor = function(a) { - a == mxConstants.NONE && (a = null); - this.state.fontBorderColor = a -}; -mxAbstractCanvas2D.prototype.setFontSize = function(a) { - this.state.fontSize = a -}; -mxAbstractCanvas2D.prototype.setFontFamily = function(a) { - this.state.fontFamily = a -}; -mxAbstractCanvas2D.prototype.setFontStyle = function(a) { - null == a && (a = 0); - this.state.fontStyle = a -}; -mxAbstractCanvas2D.prototype.setShadow = function(a) { - this.state.shadow = a -}; -mxAbstractCanvas2D.prototype.setShadowColor = function(a) { - a == mxConstants.NONE && (a = null); - this.state.shadowColor = a -}; -mxAbstractCanvas2D.prototype.setShadowAlpha = function(a) { - this.state.shadowAlpha = a -}; -mxAbstractCanvas2D.prototype.setShadowOffset = function(a, b) { - this.state.shadowDx = a; - this.state.shadowDy = b -}; -mxAbstractCanvas2D.prototype.begin = function() { - this.lastY = this.lastX = 0; - this.path = [] -}; -mxAbstractCanvas2D.prototype.moveTo = function(a, b) { - this.addOp(this.moveOp, a, b) -}; -mxAbstractCanvas2D.prototype.lineTo = function(a, b) { - this.addOp(this.lineOp, a, b) -}; -mxAbstractCanvas2D.prototype.quadTo = function(a, b, c, d) { - this.addOp(this.quadOp, a, b, c, d) -}; -mxAbstractCanvas2D.prototype.curveTo = function(a, b, c, d, e, f) { - this.addOp(this.curveOp, a, b, c, d, e, f) -}; -mxAbstractCanvas2D.prototype.arcTo = function(a, b, c, d, e, f, g) { - a = mxUtils.arcToCurves(this.lastX, this.lastY, a, b, c, d, e, f, g); - for (b = 0; b < a.length; b += 6) this.curveTo(a[b], a[b + 1], a[b + 2], a[b + 3], a[b + 4], a[b + 5]) -}; -mxAbstractCanvas2D.prototype.close = function(a, b, c, d, e, f) { - this.addOp(this.closeOp) -}; -mxAbstractCanvas2D.prototype.end = function() {}; - -function mxXmlCanvas2D(a) { - mxAbstractCanvas2D.call(this); - this.root = a; - this.writeDefaults() -} -mxUtils.extend(mxXmlCanvas2D, mxAbstractCanvas2D); -mxXmlCanvas2D.prototype.textEnabled = !0; -mxXmlCanvas2D.prototype.compressed = !0; -mxXmlCanvas2D.prototype.writeDefaults = function() { - var a; - a = this.createElement("fontfamily"); - a.setAttribute("family", mxConstants.DEFAULT_FONTFAMILY); - this.root.appendChild(a); - a = this.createElement("fontsize"); - a.setAttribute("size", mxConstants.DEFAULT_FONTSIZE); - this.root.appendChild(a); - a = this.createElement("shadowcolor"); - a.setAttribute("color", mxConstants.SHADOWCOLOR); - this.root.appendChild(a); - a = this.createElement("shadowalpha"); - a.setAttribute("alpha", mxConstants.SHADOW_OPACITY); - this.root.appendChild(a); - a = this.createElement("shadowoffset"); - a.setAttribute("dx", mxConstants.SHADOW_OFFSET_X); - a.setAttribute("dy", mxConstants.SHADOW_OFFSET_Y); - this.root.appendChild(a) -}; -mxXmlCanvas2D.prototype.format = function(a) { - return parseFloat(parseFloat(a).toFixed(2)) -}; -mxXmlCanvas2D.prototype.createElement = function(a) { - return this.root.ownerDocument.createElement(a) -}; -mxXmlCanvas2D.prototype.save = function() { - this.compressed && mxAbstractCanvas2D.prototype.save.apply(this, arguments); - this.root.appendChild(this.createElement("save")) -}; -mxXmlCanvas2D.prototype.restore = function() { - this.compressed && mxAbstractCanvas2D.prototype.restore.apply(this, arguments); - this.root.appendChild(this.createElement("restore")) -}; -mxXmlCanvas2D.prototype.scale = function(a) { - if (this.compressed) { - if (this.state.scale == a) return; - mxAbstractCanvas2D.prototype.setAlpha.apply(this, arguments) - } - var b = this.createElement("scale"); - b.setAttribute("scale", a); - this.root.appendChild(b) -}; -mxXmlCanvas2D.prototype.translate = function(a, b) { - var c = this.createElement("translate"); - c.setAttribute("dx", this.format(a)); - c.setAttribute("dy", this.format(b)); - this.root.appendChild(c) -}; -mxXmlCanvas2D.prototype.rotate = function(a, b, c, d, e) { - var f = this.createElement("rotate"); - if (0 != a || b || c) f.setAttribute("theta", this.format(a)), f.setAttribute("flipH", b ? "1" : "0"), f.setAttribute("flipV", c ? "1" : "0"), f.setAttribute("cx", this.format(d)), f.setAttribute( - "cy", this.format(e)), this.root.appendChild(f) -}; -mxXmlCanvas2D.prototype.setAlpha = function(a) { - if (this.compressed) { - if (this.state.alpha == a) return; - mxAbstractCanvas2D.prototype.setAlpha.apply(this, arguments) - } - var b = this.createElement("alpha"); - b.setAttribute("alpha", this.format(a)); - this.root.appendChild(b) -}; -mxXmlCanvas2D.prototype.setFillColor = function(a) { - a == mxConstants.NONE && (a = null); - if (this.compressed) { - if (this.state.fillColor == a) return; - mxAbstractCanvas2D.prototype.setFillColor.apply(this, arguments) - } - var b = this.createElement("fillcolor"); - b.setAttribute("color", null != a ? a : mxConstants.NONE); - this.root.appendChild(b) -}; -mxXmlCanvas2D.prototype.setGradient = function(a, b, c, d, e, f, g, h, k) { - if (null != a && null != b) { - mxAbstractCanvas2D.prototype.setGradient.apply(this, arguments); - var l = this.createElement("gradient"); - l.setAttribute("c1", a); - l.setAttribute("c2", b); - l.setAttribute("x", this.format(c)); - l.setAttribute("y", this.format(d)); - l.setAttribute("w", this.format(e)); - l.setAttribute("h", this.format(f)); - null != g && l.setAttribute("direction", g); - null != h && l.setAttribute("alpha1", h); - null != k && l.setAttribute("alpha2", k); - this.root.appendChild(l) - } -}; -mxXmlCanvas2D.prototype.setStrokeColor = function(a) { - a == mxConstants.NONE && (a = null); - if (this.compressed) { - if (this.state.strokeColor == a) return; - mxAbstractCanvas2D.prototype.setStrokeColor.apply(this, arguments) - } - var b = this.createElement("strokecolor"); - b.setAttribute("color", null != a ? a : mxConstants.NONE); - this.root.appendChild(b) -}; -mxXmlCanvas2D.prototype.setStrokeWidth = function(a) { - if (this.compressed) { - if (this.state.strokeWidth == a) return; - mxAbstractCanvas2D.prototype.setStrokeWidth.apply(this, arguments) - } - var b = this.createElement("strokewidth"); - b.setAttribute("width", this.format(a)); - this.root.appendChild(b) -}; -mxXmlCanvas2D.prototype.setDashed = function(a) { - if (this.compressed) { - if (this.state.dashed == a) return; - mxAbstractCanvas2D.prototype.setDashed.apply(this, arguments) - } - var b = this.createElement("dashed"); - b.setAttribute("dashed", a ? "1" : "0"); - this.root.appendChild(b) -}; -mxXmlCanvas2D.prototype.setDashPattern = function(a) { - if (this.compressed) { - if (this.state.dashPattern == a) return; - mxAbstractCanvas2D.prototype.setDashPattern.apply(this, arguments) - } - var b = this.createElement("dashpattern"); - b.setAttribute("pattern", a); - this.root.appendChild(b) -}; -mxXmlCanvas2D.prototype.setLineCap = function(a) { - if (this.compressed) { - if (this.state.lineCap == a) return; - mxAbstractCanvas2D.prototype.setLineCap.apply(this, arguments) - } - var b = this.createElement("linecap"); - b.setAttribute("cap", a); - this.root.appendChild(b) -}; -mxXmlCanvas2D.prototype.setLineJoin = function(a) { - if (this.compressed) { - if (this.state.lineJoin == a) return; - mxAbstractCanvas2D.prototype.setLineJoin.apply(this, arguments) - } - var b = this.createElement("linejoin"); - b.setAttribute("join", a); - this.root.appendChild(b) -}; -mxXmlCanvas2D.prototype.setMiterLimit = function(a) { - if (this.compressed) { - if (this.state.miterLimit == a) return; - mxAbstractCanvas2D.prototype.setMiterLimit.apply(this, arguments) - } - var b = this.createElement("miterlimit"); - b.setAttribute("limit", a); - this.root.appendChild(b) -}; -mxXmlCanvas2D.prototype.setFontColor = function(a) { - if (this.textEnabled) { - a == mxConstants.NONE && (a = null); - if (this.compressed) { - if (this.state.fontColor == a) return; - mxAbstractCanvas2D.prototype.setFontColor.apply(this, arguments) - } - var b = this.createElement("fontcolor"); - b.setAttribute("color", null != a ? a : mxConstants.NONE); - this.root.appendChild(b) - } -}; -mxXmlCanvas2D.prototype.setFontBackgroundColor = function(a) { - if (this.textEnabled) { - a == mxConstants.NONE && (a = null); - if (this.compressed) { - if (this.state.fontBackgroundColor == a) return; - mxAbstractCanvas2D.prototype.setFontBackgroundColor.apply(this, arguments) - } - var b = this.createElement("fontbackgroundcolor"); - b.setAttribute("color", null != a ? a : mxConstants.NONE); - this.root.appendChild(b) - } -}; -mxXmlCanvas2D.prototype.setFontBorderColor = function(a) { - if (this.textEnabled) { - a == mxConstants.NONE && (a = null); - if (this.compressed) { - if (this.state.fontBorderColor == a) return; - mxAbstractCanvas2D.prototype.setFontBorderColor.apply(this, arguments) - } - var b = this.createElement("fontbordercolor"); - b.setAttribute("color", null != a ? a : mxConstants.NONE); - this.root.appendChild(b) - } -}; -mxXmlCanvas2D.prototype.setFontSize = function(a) { - if (this.textEnabled) { - if (this.compressed) { - if (this.state.fontSize == a) return; - mxAbstractCanvas2D.prototype.setFontSize.apply(this, arguments) - } - var b = this.createElement("fontsize"); - b.setAttribute("size", a); - this.root.appendChild(b) - } -}; -mxXmlCanvas2D.prototype.setFontFamily = function(a) { - if (this.textEnabled) { - if (this.compressed) { - if (this.state.fontFamily == a) return; - mxAbstractCanvas2D.prototype.setFontFamily.apply(this, arguments) - } - var b = this.createElement("fontfamily"); - b.setAttribute("family", a); - this.root.appendChild(b) - } -}; -mxXmlCanvas2D.prototype.setFontStyle = function(a) { - if (this.textEnabled) { - null == a && (a = 0); - if (this.compressed) { - if (this.state.fontStyle == a) return; - mxAbstractCanvas2D.prototype.setFontStyle.apply(this, arguments) - } - var b = this.createElement("fontstyle"); - b.setAttribute("style", a); - this.root.appendChild(b) - } -}; -mxXmlCanvas2D.prototype.setShadow = function(a) { - if (this.compressed) { - if (this.state.shadow == a) return; - mxAbstractCanvas2D.prototype.setShadow.apply(this, arguments) - } - var b = this.createElement("shadow"); - b.setAttribute("enabled", a ? "1" : "0"); - this.root.appendChild(b) -}; -mxXmlCanvas2D.prototype.setShadowColor = function(a) { - if (this.compressed) { - a == mxConstants.NONE && (a = null); - if (this.state.shadowColor == a) return; - mxAbstractCanvas2D.prototype.setShadowColor.apply(this, arguments) - } - var b = this.createElement("shadowcolor"); - b.setAttribute("color", null != a ? a : mxConstants.NONE); - this.root.appendChild(b) -}; -mxXmlCanvas2D.prototype.setShadowAlpha = function(a) { - if (this.compressed) { - if (this.state.shadowAlpha == a) return; - mxAbstractCanvas2D.prototype.setShadowAlpha.apply(this, arguments) - } - var b = this.createElement("shadowalpha"); - b.setAttribute("alpha", a); - this.root.appendChild(b) -}; -mxXmlCanvas2D.prototype.setShadowOffset = function(a, b) { - if (this.compressed) { - if (this.state.shadowDx == a && this.state.shadowDy == b) return; - mxAbstractCanvas2D.prototype.setShadowOffset.apply(this, arguments) - } - var c = this.createElement("shadowoffset"); - c.setAttribute("dx", a); - c.setAttribute("dy", b); - this.root.appendChild(c) -}; -mxXmlCanvas2D.prototype.rect = function(a, b, c, d) { - var e = this.createElement("rect"); - e.setAttribute("x", this.format(a)); - e.setAttribute("y", this.format(b)); - e.setAttribute("w", this.format(c)); - e.setAttribute("h", this.format(d)); - this.root.appendChild(e) -}; -mxXmlCanvas2D.prototype.roundrect = function(a, b, c, d, e, f) { - var g = this.createElement("roundrect"); - g.setAttribute("x", this.format(a)); - g.setAttribute("y", this.format(b)); - g.setAttribute("w", this.format(c)); - g.setAttribute("h", this.format(d)); - g.setAttribute("dx", this.format(e)); - g.setAttribute("dy", this.format(f)); - this.root.appendChild(g) -}; -mxXmlCanvas2D.prototype.ellipse = function(a, b, c, d) { - var e = this.createElement("ellipse"); - e.setAttribute("x", this.format(a)); - e.setAttribute("y", this.format(b)); - e.setAttribute("w", this.format(c)); - e.setAttribute("h", this.format(d)); - this.root.appendChild(e) -}; -mxXmlCanvas2D.prototype.image = function(a, b, c, d, e, f, g, h) { - e = this.converter.convert(e); - var k = this.createElement("image"); - k.setAttribute("x", this.format(a)); - k.setAttribute("y", this.format(b)); - k.setAttribute("w", this.format(c)); - k.setAttribute("h", this.format(d)); - k.setAttribute("src", e); - k.setAttribute("aspect", f ? "1" : "0"); - k.setAttribute("flipH", g ? "1" : "0"); - k.setAttribute("flipV", h ? "1" : "0"); - this.root.appendChild(k) -}; -mxXmlCanvas2D.prototype.begin = function() { - this.root.appendChild(this.createElement("begin")); - this.lastY = this.lastX = 0 -}; -mxXmlCanvas2D.prototype.moveTo = function(a, b) { - var c = this.createElement("move"); - c.setAttribute("x", this.format(a)); - c.setAttribute("y", this.format(b)); - this.root.appendChild(c); - this.lastX = a; - this.lastY = b -}; -mxXmlCanvas2D.prototype.lineTo = function(a, b) { - var c = this.createElement("line"); - c.setAttribute("x", this.format(a)); - c.setAttribute("y", this.format(b)); - this.root.appendChild(c); - this.lastX = a; - this.lastY = b -}; -mxXmlCanvas2D.prototype.quadTo = function(a, b, c, d) { - var e = this.createElement("quad"); - e.setAttribute("x1", this.format(a)); - e.setAttribute("y1", this.format(b)); - e.setAttribute("x2", this.format(c)); - e.setAttribute("y2", this.format(d)); - this.root.appendChild(e); - this.lastX = c; - this.lastY = d -}; -mxXmlCanvas2D.prototype.curveTo = function(a, b, c, d, e, f) { - var g = this.createElement("curve"); - g.setAttribute("x1", this.format(a)); - g.setAttribute("y1", this.format(b)); - g.setAttribute("x2", this.format(c)); - g.setAttribute("y2", this.format(d)); - g.setAttribute("x3", this.format(e)); - g.setAttribute("y3", this.format(f)); - this.root.appendChild(g); - this.lastX = e; - this.lastY = f -}; -mxXmlCanvas2D.prototype.close = function() { - this.root.appendChild(this.createElement("close")) -}; -mxXmlCanvas2D.prototype.text = function(a, b, c, d, e, f, g, h, k, l, m, n) { - if (this.textEnabled && null != e) { - mxUtils.isNode(e) && (e = mxUtils.getOuterHtml(e)); - var p = this.createElement("text"); - p.setAttribute("x", this.format(a)); - p.setAttribute("y", this.format(b)); - p.setAttribute("w", this.format(c)); - p.setAttribute("h", this.format(d)); - p.setAttribute("str", e); - null != f && p.setAttribute("align", f); - null != g && p.setAttribute("valign", g); - p.setAttribute("wrap", h ? "1" : "0"); - null == k && (k = ""); - p.setAttribute("format", k); - null != l && p.setAttribute("fill", - l ? "1" : "0"); - null != m && p.setAttribute("clip", m ? "1" : "0"); - null != n && p.setAttribute("rotation", n); - this.root.appendChild(p) - } -}; -mxXmlCanvas2D.prototype.stroke = function() { - this.root.appendChild(this.createElement("stroke")) -}; -mxXmlCanvas2D.prototype.fill = function() { - this.root.appendChild(this.createElement("fill")) -}; -mxXmlCanvas2D.prototype.fillAndStroke = function() { - this.root.appendChild(this.createElement("fillstroke")) -}; - -function mxSvgCanvas2D(a, b) { - mxAbstractCanvas2D.call(this); - this.root = a; - this.gradients = []; - this.defs = null; - this.styleEnabled = null != b ? b : !1; - var c = null; - if (a.ownerDocument != document) - for (c = a; null != c && "svg" != c.nodeName;) c = c.parentNode; - null != c && (0 < c.getElementsByTagName("defs").length && (this.defs = c.getElementsByTagName("defs")[0]), null == this.defs && (this.defs = this.createElement("defs"), null != c.firstChild ? c.insertBefore( - this.defs, c.firstChild) : c.appendChild(this.defs)), this.styleEnabled && this.defs.appendChild(this.createStyle())) -} -mxUtils.extend(mxSvgCanvas2D, mxAbstractCanvas2D); -mxSvgCanvas2D.prototype.node = null; -mxSvgCanvas2D.prototype.matchHtmlAlignment = !0; -mxSvgCanvas2D.prototype.textEnabled = !0; -mxSvgCanvas2D.prototype.foEnabled = !0; -mxSvgCanvas2D.prototype.strokeTolerance = 0; -mxSvgCanvas2D.prototype.refCount = 0; -mxSvgCanvas2D.prototype.blockImagePointerEvents = !1; -mxSvgCanvas2D.prototype.reset = function() { - mxAbstractCanvas2D.prototype.reset.apply(this, arguments); - this.gradients = [] -}; -mxSvgCanvas2D.prototype.createStyle = function(a) { - a = this.createElement("style"); - a.setAttribute("type", "text/css"); - mxUtils.write(a, "svg{font-family:" + mxConstants.DEFAULT_FONTFAMILY + ";font-size:" + mxConstants.DEFAULT_FONTSIZE + ";fill:none;stroke-miterlimit:10}"); - return a -}; -mxSvgCanvas2D.prototype.createElement = function(a, b) { - if (null != this.root.ownerDocument.createElementNS) return this.root.ownerDocument.createElementNS(b || mxConstants.NS_SVG, a); - var c = this.root.ownerDocument.createElement(a); - null != b && c.setAttribute("xmlns", b); - return c -}; -mxSvgCanvas2D.prototype.createGradientId = function(a, b, c, d, e) { - "#" == a.charAt(0) && (a = a.substring(1)); - "#" == b.charAt(0) && (b = b.substring(1)); - a = a.toLowerCase() + "-" + c; - b = b.toLowerCase() + "-" + d; - c = null; - null == e || e == mxConstants.DIRECTION_SOUTH ? c = "s" : e == mxConstants.DIRECTION_EAST ? c = "e" : (d = a, a = b, b = d, e == mxConstants.DIRECTION_NORTH ? c = "s" : e == mxConstants.DIRECTION_WEST && - (c = "e")); - return "mx-gradient-" + a + "-" + b + "-" + c -}; -mxSvgCanvas2D.prototype.getSvgGradient = function(a, b, c, d, e) { - var f = this.createGradientId(a, b, c, d, e), - g = this.gradients[f]; - if (null == g) { - var h = this.root.ownerSVGElement, - k = 0, - l = f + "-" + k; - if (null != h) - for (g = h.ownerDocument.getElementById(l); null != g && g.ownerSVGElement != h;) l = f + "-" + k++, g = h.ownerDocument.getElementById(l); - else l = "id" + ++this.refCount; - null == g && (g = this.createSvgGradient(a, b, c, d, e), g.setAttribute("id", l), null != this.defs ? this.defs.appendChild(g) : h.appendChild(g)); - this.gradients[f] = g - } - return g.getAttribute("id") -}; -mxSvgCanvas2D.prototype.createSvgGradient = function(a, b, c, d, e) { - var f = this.createElement("linearGradient"); - f.setAttribute("x1", "0%"); - f.setAttribute("y1", "0%"); - f.setAttribute("x2", "0%"); - f.setAttribute("y2", "0%"); - null == e || e == mxConstants.DIRECTION_SOUTH ? f.setAttribute("y2", "100%") : e == mxConstants.DIRECTION_EAST ? f.setAttribute("x2", "100%") : e == mxConstants.DIRECTION_NORTH ? f.setAttribute( - "y1", "100%") : e == mxConstants.DIRECTION_WEST && f.setAttribute("x1", "100%"); - c = 1 > c ? ";stop-opacity:" + c : ""; - e = this.createElement("stop"); - e.setAttribute("offset", "0%"); - e.setAttribute("style", "stop-color:" + a + c); - f.appendChild(e); - c = 1 > d ? ";stop-opacity:" + d : ""; - e = this.createElement("stop"); - e.setAttribute("offset", "100%"); - e.setAttribute("style", "stop-color:" + b + c); - f.appendChild(e); - return f -}; -mxSvgCanvas2D.prototype.addNode = function(a, b) { - var c = this.node, - d = this.state; - if (null != c) { - if ("path" == c.nodeName) - if (null != this.path && 0 < this.path.length) c.setAttribute("d", this.path.join(" ")); - else return; - a && null != d.fillColor ? this.updateFill() : this.styleEnabled || ("ellipse" == c.nodeName && mxClient.IS_NS && !mxClient.IS_GC && !mxClient.IS_SF ? c.setAttribute("fill", "transparent") : c.setAttribute( - "fill", "none"), a = !1); - b && null != d.strokeColor ? this.updateStroke() : this.styleEnabled || c.setAttribute("stroke", "none"); - null != - d.transform && 0 < d.transform.length && c.setAttribute("transform", d.transform); - d.shadow && this.root.appendChild(this.createShadow(c)); - 0 < this.strokeTolerance && !a && this.root.appendChild(this.createTolerance(c)); - this.pointerEvents && ("path" != c.nodeName || this.path[this.path.length - 1] == this.closeOp) && c.setAttribute("pointer-events", "all"); - this.root.appendChild(c) - } -}; -mxSvgCanvas2D.prototype.updateFill = function() { - var a = this.state; - 1 > a.alpha && this.node.setAttribute("fill-opacity", a.alpha); - null != a.fillColor && (null != a.gradientColor ? (a = this.getSvgGradient(a.fillColor, a.gradientColor, a.fillAlpha, a.gradientAlpha, a.gradientDirection), this.node.setAttribute("fill", "url(#" + - a + ")")) : this.node.setAttribute("fill", a.fillColor.toLowerCase())) -}; -mxSvgCanvas2D.prototype.updateStroke = function() { - var a = this.state; - this.node.setAttribute("stroke", a.strokeColor.toLowerCase()); - 1 > a.alpha && this.node.setAttribute("stroke-opacity", a.alpha); - var b = Math.max(1, this.format(a.strokeWidth * a.scale)); - 1 != b && this.node.setAttribute("stroke-width", b); - "path" == this.node.nodeName && this.updateStrokeAttributes(); - a.dashed && this.node.setAttribute("stroke-dasharray", this.createDashPattern(b)) -}; -mxSvgCanvas2D.prototype.updateStrokeAttributes = function() { - var a = this.state; - null != a.lineJoin && "miter" != a.lineJoin && this.node.setAttribute("stroke-linejoin", a.lineJoin); - if (null != a.lineCap) { - var b = a.lineCap; - "flat" == b && (b = "butt"); - "butt" != b && this.node.setAttribute("stroke-linecap", b) - } - null != a.miterLimit && (!this.styleEnabled || 10 != a.miterLimit) && this.node.setAttribute("stroke-miterlimit", a.miterLimit) -}; -mxSvgCanvas2D.prototype.createDashPattern = function(a) { - var b = this.state.dashPattern.split(" "), - c = []; - if (0 < b.length) - for (var d = 0; d < b.length; d++) c[d] = Number(b[d]) * a; - return c.join(" ") -}; -mxSvgCanvas2D.prototype.createTolerance = function(a) { - a = a.cloneNode(!0); - var b = parseFloat(a.getAttribute("stroke-width") || 1) + this.strokeTolerance; - a.setAttribute("pointer-events", "stroke"); - a.setAttribute("visibility", "hidden"); - a.removeAttribute("stroke-dasharray"); - a.setAttribute("stroke-width", b); - a.setAttribute("fill", "none"); - a.setAttribute("stroke", mxClient.IS_OP ? "none" : "white"); - return a -}; -mxSvgCanvas2D.prototype.createShadow = function(a) { - a = a.cloneNode(!0); - var b = this.state; - "none" != a.getAttribute("fill") && a.setAttribute("fill", b.shadowColor); - "none" != a.getAttribute("stroke") && a.setAttribute("stroke", b.shadowColor); - a.setAttribute("transform", "translate(" + this.format(b.shadowDx * b.scale) + "," + this.format(b.shadowDy * b.scale) + ")" + (b.transform || "")); - a.setAttribute("opacity", b.shadowAlpha); - return a -}; -mxSvgCanvas2D.prototype.rotate = function(a, b, c, d, e) { - if (0 != a || b || c) { - var f = this.state; - d += f.dx; - e += f.dy; - d *= f.scale; - e *= f.scale; - f.transform = f.transform || ""; - if (b && c) a += 180; - else if (b ^ c) { - var g = b ? d : 0, - h = b ? -1 : 1, - k = c ? e : 0, - l = c ? -1 : 1; - f.transform += "translate(" + this.format(g) + "," + this.format(k) + ")scale(" + this.format(h) + "," + this.format(l) + ")translate(" + this.format(-g) + "," + this.format(-k) + ")" - } - if (b ? !c : c) a *= -1; - 0 != a && (f.transform += "rotate(" + this.format(a) + "," + this.format(d) + "," + this.format(e) + ")"); - f.rotation += a; - f.rotationCx = - d; - f.rotationCy = e - } -}; -mxSvgCanvas2D.prototype.begin = function() { - mxAbstractCanvas2D.prototype.begin.apply(this, arguments); - this.node = this.createElement("path") -}; -mxSvgCanvas2D.prototype.rect = function(a, b, c, d) { - var e = this.state, - f = this.createElement("rect"); - f.setAttribute("x", this.format((a + e.dx) * e.scale)); - f.setAttribute("y", this.format((b + e.dy) * e.scale)); - f.setAttribute("width", this.format(c * e.scale)); - f.setAttribute("height", this.format(d * e.scale)); - this.node = f -}; -mxSvgCanvas2D.prototype.roundrect = function(a, b, c, d, e, f) { - this.rect(a, b, c, d); - 0 < e && this.node.setAttribute("rx", this.format(e * this.state.scale)); - 0 < f && this.node.setAttribute("ry", this.format(f * this.state.scale)) -}; -mxSvgCanvas2D.prototype.ellipse = function(a, b, c, d) { - var e = this.state, - f = this.createElement("ellipse"); - f.setAttribute("cx", Math.round((a + c / 2 + e.dx) * e.scale)); - f.setAttribute("cy", Math.round((b + d / 2 + e.dy) * e.scale)); - f.setAttribute("rx", c / 2 * e.scale); - f.setAttribute("ry", d / 2 * e.scale); - this.node = f -}; -mxSvgCanvas2D.prototype.image = function(a, b, c, d, e, f, g, h) { - e = this.converter.convert(e); - f = null != f ? f : !0; - g = null != g ? g : !1; - h = null != h ? h : !1; - var k = this.state; - a += k.dx; - b += k.dy; - var l = this.createElement("image"); - l.setAttribute("x", this.format(a * k.scale)); - l.setAttribute("y", this.format(b * k.scale)); - l.setAttribute("width", this.format(c * k.scale)); - l.setAttribute("height", this.format(d * k.scale)); - null == l.setAttributeNS ? l.setAttribute("xlink:href", e) : l.setAttributeNS(mxConstants.NS_XLINK, "href", e); - f || l.setAttribute("preserveAspectRatio", - "none"); - 1 > k.alpha && l.setAttribute("opacity", k.alpha); - e = this.state.transform || ""; - if (g || h) { - var m = f = 1, - n = 0, - p = 0; - g && (f = -1, n = -c - 2 * a); - h && (m = -1, p = -d - 2 * b); - e += "scale(" + f + "," + m + ")translate(" + n + "," + p + ")" - } - 0 < e.length && l.setAttribute("transform", e); - this.root.appendChild(l); - this.blockImagePointerEvents && (l.setAttribute("style", "pointer-events:none"), l = this.createElement("rect"), l.setAttribute("visibility", "hidden"), l.setAttribute("pointer-events", "fill"), - l.setAttribute("x", this.format(a * k.scale)), l.setAttribute("y", - this.format(b * k.scale)), l.setAttribute("width", this.format(c * k.scale)), l.setAttribute("height", this.format(d * k.scale)), this.root.appendChild(l)) -}; -mxSvgCanvas2D.prototype.createDiv = function(a, b, c, d, e) { - c = this.state; - d = "display:inline-block;font-size:" + Math.round(c.fontSize) + "px;font-family:" + c.fontFamily + ";color:" + c.fontColor + ";line-height:" + Math.round(c.fontSize * mxConstants.LINE_HEIGHT) + - "px;" + d; - (c.fontStyle & mxConstants.FONT_BOLD) == mxConstants.FONT_BOLD && (d += "font-weight:bold;"); - (c.fontStyle & mxConstants.FONT_ITALIC) == mxConstants.FONT_ITALIC && (d += "font-style:italic;"); - (c.fontStyle & mxConstants.FONT_UNDERLINE) == mxConstants.FONT_UNDERLINE && (d += "font-decoration:underline;"); - b == mxConstants.ALIGN_CENTER ? d += "text-align:center;" : b == mxConstants.ALIGN_RIGHT && (d += "text-align:right;"); - b = ""; - null != c.fontBackgroundColor && (b += "background-color:" + c.fontBackgroundColor + ";"); - null != c.fontBorderColor && (b += "border:1px solid " + c.fontBorderColor + ";"); - mxUtils.isNode(a) || (c = document.createElement("textarea"), c.innerHTML = a.replace(/</g, "\x26amp;lt;").replace(/>/g, "\x26amp;gt;").replace(/</g, "\x26lt;").replace(/>/g, "\x26gt;"), a = - c.value, e ? d += b : 0 < b.length && (a = '\x3cdiv xmlns\x3d"http://www.w3.org/1999/xhtml" style\x3d"display:inline-block;' + - b + '"\x3e' + a + "\x3c/div\x3e")); - if (!mxClient.IS_IE && document.createElementNS) return e = document.createElementNS("http://www.w3.org/1999/xhtml", "div"), e.setAttribute("style", d), mxUtils.isNode(a) ? this.root.ownerDocument != - document ? e.appendChild(a.cloneNode(!0)) : e.appendChild(a) : e.innerHTML = a, e; - mxUtils.isNode(a) && this.root.ownerDocument != document && (a = a.outerHTML); - a = a.replace(/<br>/g, "\x3cbr /\x3e").replace(/<hr>/g, "\x3chr /\x3e"); - return mxUtils.parseXml('\x3cdiv xmlns\x3d"http://www.w3.org/1999/xhtml" style\x3d"' + - d + '"\x3e' + a + "\x3c/div\x3e").documentElement -}; -mxSvgCanvas2D.prototype.text = function(a, b, c, d, e, f, g, h, k, l, m, n) { - if (this.textEnabled && null != e) { - n = null != n ? n : 0; - var p = this.state; - a += p.dx; - b += p.dy; - if (this.foEnabled && "html" == k) { - var q = "vertical-align:top;"; - m ? (q += "overflow:hidden;", 0 < d && (q += "max-height:" + Math.round(d) + "px;"), 0 < c && (q += "width:" + Math.round(c) + "px;")) : l && (q += "width:" + Math.round(c) + "px;", 0 < d && - (q += "max-height:" + Math.round(d) + "px;")); - h ? (!m && 0 < c && (q += "width:" + Math.round(c) + "px;"), q += "white-space:normal;") : q += "white-space:nowrap;"; - h = this.createElement("g"); - 1 > p.alpha && h.setAttribute("opacity", p.alpha); - k = this.createElement("foreignObject"); - k.setAttribute("pointer-events", "all"); - q = this.createDiv(e, f, g, q, l); - if (null != q) { - h.appendChild(k); - this.root.appendChild(h); - var s = 0; - if (mxClient.IS_IE && !mxClient.IS_SVG) { - var r = document.createElement("div"); - r.style.cssText = q.getAttribute("style"); - r.style.display = mxClient.IS_QUIRKS ? "inline" : "inline-block"; - r.style.visibility = "hidden"; - r.innerHTML = mxUtils.isNode(e) ? e.outerHTML : e; - document.body.appendChild(r); - s = r.offsetWidth; - d = mxClient.IS_QUIRKS && 0 < d && m ? Math.min(d, r.offsetHeight + 2) : r.offsetHeight; - r.parentNode.removeChild(r); - k.appendChild(q) - } else this.root.ownerDocument != document ? (q.style.visibility = "hidden", document.body.appendChild(q), s = q.offsetWidth, d = q.offsetHeight, k.appendChild(q), q.style.visibility = "") : - (k.appendChild(q), s = q.offsetWidth, d = q.offsetHeight); - c = l ? Math.max(c, s) : s; - 1 > p.alpha && h.setAttribute("opacity", p.alpha); - l = e = 0; - f == mxConstants.ALIGN_CENTER ? e -= c / 2 : f == mxConstants.ALIGN_RIGHT && (e -= c); - a += e; - g == mxConstants.ALIGN_MIDDLE ? - l -= d / 2 : g == mxConstants.ALIGN_BOTTOM && (l -= d); - b += l; - f = 1 != p.scale ? "scale(" + p.scale + ")" : ""; - 0 != p.rotation && this.rotateHtml ? (f += "rotate(" + p.rotation + "," + c / 2 + "," + d / 2 + ")", b = this.rotatePoint((a + c / 2) * p.scale, (b + d / 2) * p.scale, p.rotation, p.rotationCx, - p.rotationCy), a = b.x - c * p.scale / 2, b = b.y - d * p.scale / 2) : (a *= p.scale, b *= p.scale); - 0 != n && (f += "rotate(" + n + "," + -e + "," + -l + ")"); - h.setAttribute("transform", "translate(" + Math.round(a) + "," + Math.round(b) + ")" + f); - k.setAttribute("width", Math.round(Math.max(1, c))); - k.setAttribute("height", - Math.round(Math.max(1, d))) - } - } else this.plainText(a, b, c, d, e, f, g, h, l, m, n) - } -}; -mxSvgCanvas2D.prototype.createClip = function(a, b, c, d) { - a = Math.round(a); - b = Math.round(b); - c = Math.round(c); - d = Math.round(d); - for (var e = "mx-clip-" + a + "-" + b + "-" + c + "-" + d, f = 0, g = e + "-" + f; null != document.getElementById(g);) g = e + "-" + ++f; - clip = this.createElement("clipPath"); - clip.setAttribute("id", g); - e = this.createElement("rect"); - e.setAttribute("x", a); - e.setAttribute("y", b); - e.setAttribute("width", c); - e.setAttribute("height", d); - clip.appendChild(e); - return clip -}; -mxSvgCanvas2D.prototype.plainText = function(a, b, c, d, e, f, g, h, k, l, m) { - m = null != m ? m : 0; - h = this.state; - var n = Math.round(h.fontSize), - p = this.createElement("g"), - q = h.transform || ""; - 0 != m && (q += "rotate(" + m + "," + this.format(a * h.scale) + "," + this.format(b * h.scale) + ")"); - if (l && 0 < c && 0 < d) { - var s = a; - m = b; - f == mxConstants.ALIGN_CENTER ? s -= c / 2 : f == mxConstants.ALIGN_RIGHT && (s -= c); - g == mxConstants.ALIGN_MIDDLE ? m -= d / 2 : g == mxConstants.ALIGN_BOTTOM && (m -= d); - m = this.createClip(s * h.scale - 2, m * h.scale - 2, c * h.scale + 4, d * h.scale + 4); - null != this.defs ? this.defs.appendChild(m) : - this.root.appendChild(m); - p.setAttribute("clip-path", "url(#" + m.getAttribute("id") + ")") - } - this.updateFont(p, f); - m = f == mxConstants.ALIGN_RIGHT ? "end" : f == mxConstants.ALIGN_CENTER ? "middle" : "start"; - "start" != m && p.setAttribute("text-anchor", m); - (!this.styleEnabled || n != mxConstants.DEFAULT_FONTSIZE) && p.setAttribute("font-size", Math.round(n * h.scale) + "px"); - 0 < q.length && p.setAttribute("transform", q); - 1 > h.alpha && p.setAttribute("opacity", h.alpha); - var q = e.split("\n"), - s = Math.round(n * mxConstants.LINE_HEIGHT), - r = n + (q.length - - 1) * s; - m = b + n - 1; - g == mxConstants.ALIGN_MIDDLE ? (d = (this.matchHtmlAlignment && l && 0 < d ? Math.min(r, d) : r) / 2, m -= d + 1) : g == mxConstants.ALIGN_BOTTOM && (d = this.matchHtmlAlignment && l && 0 < d ? - Math.min(r, d) : r, m -= d + 2); - for (d = 0; d < q.length; d++) 0 < q[d].length && 0 < mxUtils.trim(q[d]).length && (l = this.createElement("text"), l.setAttribute("x", this.format(a * h.scale)), l.setAttribute("y", this.format( - m * h.scale)), mxUtils.write(l, q[d]), p.appendChild(l)), m += s; - this.root.appendChild(p); - this.addTextBackground(p, e, a, b, c, r, f, g, k) -}; -mxSvgCanvas2D.prototype.updateFont = function(a) { - var b = this.state; - a.setAttribute("fill", b.fontColor); - (!this.styleEnabled || b.fontFamily != mxConstants.DEFAULT_FONTFAMILY) && a.setAttribute("font-family", b.fontFamily); - (b.fontStyle & mxConstants.FONT_BOLD) == mxConstants.FONT_BOLD && a.setAttribute("font-weight", "bold"); - (b.fontStyle & mxConstants.FONT_ITALIC) == mxConstants.FONT_ITALIC && a.setAttribute("font-style", "italic"); - (b.fontStyle & mxConstants.FONT_UNDERLINE) == mxConstants.FONT_UNDERLINE && a.setAttribute("text-decoration", - "underline") -}; -mxSvgCanvas2D.prototype.addTextBackground = function(a, b, c, d, e, f, g, h, k) { - var l = this.state; - if (null != l.fontBackgroundColor || null != l.fontBorderColor) { - var m = null; - k ? (g == mxConstants.ALIGN_CENTER ? c -= e / 2 : g == mxConstants.ALIGN_RIGHT && (c -= e), h == mxConstants.ALIGN_MIDDLE ? d -= f / 2 : h == mxConstants.ALIGN_BOTTOM && (d -= f), m = new mxRectangle( - (c + 1) * l.scale, d * l.scale, (e - 2) * l.scale, (f + 2) * l.scale)) : null != a.getBBox && this.root.ownerDocument == document ? (m = a.getBBox(), b = mxClient.IS_IE && mxClient.IS_SVG, - m = new mxRectangle(m.x, m.y + (b ? 0 : - 1), m.width, m.height + (b ? 1 : 0))) : (m = document.createElement("div"), m.style.lineHeight = Math.round(l.fontSize * mxConstants.LINE_HEIGHT) + "px", m.style.fontSize = Math.round(l.fontSize) + - "px", m.style.fontFamily = l.fontFamily, m.style.whiteSpace = "nowrap", m.style.position = "absolute", m.style.visibility = "hidden", m.style.display = mxClient.IS_QUIRKS ? "inline" : - "inline-block", m.style.zoom = "1", (l.fontStyle & mxConstants.FONT_BOLD) == mxConstants.FONT_BOLD && (m.style.fontWeight = "bold"), (l.fontStyle & mxConstants.FONT_ITALIC) == mxConstants.FONT_ITALIC && - (m.style.fontStyle = "italic"), b = mxUtils.htmlEntities(b, !1), m.innerHTML = b.replace(/\n/g, "\x3cbr/\x3e"), document.body.appendChild(m), e = m.offsetWidth, f = m.offsetHeight, m.parentNode - .removeChild(m), g == mxConstants.ALIGN_CENTER ? c -= e / 2 : g == mxConstants.ALIGN_RIGHT && (c -= e), h == mxConstants.ALIGN_MIDDLE ? d -= f / 2 : h == mxConstants.ALIGN_BOTTOM && (d -= f), - m = new mxRectangle((c + 1) * l.scale, (d + 2) * l.scale, e * l.scale, (f + 1) * l.scale)); - null != m && (b = this.createElement("rect"), b.setAttribute("fill", l.fontBackgroundColor || "none"), b.setAttribute("stroke", - l.fontBorderColor || "none"), b.setAttribute("x", Math.floor(m.x - 1)), b.setAttribute("y", Math.floor(m.y - 1)), b.setAttribute("width", Math.ceil(m.width + 2)), b.setAttribute("height", - Math.ceil(m.height)), l = null != l.fontBorderColor ? Math.max(1, this.format(l.scale)) : 0, b.setAttribute("stroke-width", l), this.root.ownerDocument == document && 1 == mxUtils.mod(l, - 2) && b.setAttribute("transform", "translate(0.5, 0.5)"), a.insertBefore(b, a.firstChild)) - } -}; -mxSvgCanvas2D.prototype.stroke = function() { - this.addNode(!1, !0) -}; -mxSvgCanvas2D.prototype.fill = function() { - this.addNode(!0, !1) -}; -mxSvgCanvas2D.prototype.fillAndStroke = function() { - this.addNode(!0, !0) -}; -var mxVmlCanvas2D = function(a) { - mxAbstractCanvas2D.call(this); - this.root = a -}; -mxUtils.extend(mxVmlCanvas2D, mxAbstractCanvas2D); -mxVmlCanvas2D.prototype.node = null; -mxVmlCanvas2D.prototype.textEnabled = !0; -mxVmlCanvas2D.prototype.moveOp = "m"; -mxVmlCanvas2D.prototype.lineOp = "l"; -mxVmlCanvas2D.prototype.curveOp = "c"; -mxVmlCanvas2D.prototype.closeOp = "x"; -mxVmlCanvas2D.prototype.rotatedHtmlBackground = ""; -mxVmlCanvas2D.prototype.vmlScale = 1; -mxVmlCanvas2D.prototype.addNode = function(a, b) { - var c = this.node, - d = this.state; - if (null != c) { - if ("shape" == c.nodeName) - if (null != this.path && 0 < this.path.length) c.path = this.path.join(" ") + " e", c.style.width = this.root.style.width, c.style.height = this.root.style.height, c.coordsize = parseInt(c.style - .width) + " " + parseInt(c.style.height); - else return; - c.strokeweight = this.format(Math.max(1, d.strokeWidth * d.scale / this.vmlScale)) + "px"; - d.shadow && this.root.appendChild(this.createShadow(c, a && null != d.fillColor, b && null != d.strokeColor)); - b && null != d.strokeColor ? (c.stroked = "true", c.strokecolor = d.strokeColor) : c.stroked = "false"; - c.appendChild(this.createStroke()); - a && null != d.fillColor ? c.appendChild(this.createFill()) : this.pointerEvents && ("shape" != c.nodeName || this.path[this.path.length - 1] == this.closeOp) ? c.appendChild(this.createTransparentFill()) : - c.filled = "false"; - this.root.appendChild(c) - } -}; -mxVmlCanvas2D.prototype.createTransparentFill = function() { - var a = document.createElement(mxClient.VML_PREFIX + ":fill"); - a.src = mxClient.imageBasePath + "/transparent.gif"; - a.type = "tile"; - return a -}; -mxVmlCanvas2D.prototype.createFill = function() { - var a = this.state, - b = document.createElement(mxClient.VML_PREFIX + ":fill"); - b.color = a.fillColor; - if (null != a.gradientColor) { - b.type = "gradient"; - b.method = "none"; - b.color2 = a.gradientColor; - var c = 180 - a.rotation, - c = a.gradientDirection == mxConstants.DIRECTION_WEST ? c - (90 + ("x" == this.root.style.flip ? 180 : 0)) : a.gradientDirection == mxConstants.DIRECTION_EAST ? c + (90 + ("x" == this.root.style - .flip ? 180 : 0)) : a.gradientDirection == mxConstants.DIRECTION_NORTH ? c - (180 + ("y" == this.root.style.flip ? - -180 : 0)) : c + ("y" == this.root.style.flip ? -180 : 0); - if ("x" == this.root.style.flip || "y" == this.root.style.flip) c *= -1; - b.angle = mxUtils.mod(c, 360); - b.opacity = 100 * a.alpha * a.fillAlpha + "%"; - b.setAttribute(mxClient.OFFICE_PREFIX + ":opacity2", 100 * a.alpha * a.gradientAlpha + "%") - } else 1 > a.alpha && (b.opacity = 100 * a.alpha + "%"); - return b -}; -mxVmlCanvas2D.prototype.createStroke = function() { - var a = this.state, - b = document.createElement(mxClient.VML_PREFIX + ":stroke"); - b.endcap = a.lineCap || "flat"; - b.joinstyle = a.lineJoin || "miter"; - b.miterlimit = a.miterLimit || "10"; - 1 > a.alpha && (b.opacity = 100 * a.alpha + "%"); - a.dashed && (b.dashstyle = this.getVmlDashStyle()); - return b -}; -mxVmlCanvas2D.prototype.getVmlDashStyle = function() { - var a = "dash"; - if (null != this.state.dashPattern) { - var b = this.state.dashPattern.split(" "); - 0 < b.length && 1 == b[0] && (a = "0 2") - } - return a -}; -mxVmlCanvas2D.prototype.createShadow = function(a, b, c) { - var d = this.state, - e = -d.rotation * (Math.PI / 180), - f = Math.cos(e), - e = Math.sin(e), - g = d.shadowDx * d.scale, - h = d.shadowDy * d.scale; - "x" == this.root.style.flip ? g *= -1 : "y" == this.root.style.flip && (h *= -1); - var k = a.cloneNode(!0); - k.style.marginLeft = Math.round(g * f - h * e) + "px"; - k.style.marginTop = Math.round(g * e + h * f) + "px"; - 8 == document.documentMode && (k.strokeweight = a.strokeweight, "shape" == a.nodeName && (k.path = this.path.join(" ") + " e", k.style.width = this.root.style.width, k.style.height = - this.root.style.height, k.coordsize = parseInt(a.style.width) + " " + parseInt(a.style.height))); - c ? (k.strokecolor = d.shadowColor, k.appendChild(this.createShadowStroke())) : k.stroked = "false"; - b ? k.appendChild(this.createShadowFill()) : k.filled = "false"; - return k -}; -mxVmlCanvas2D.prototype.createShadowFill = function() { - var a = document.createElement(mxClient.VML_PREFIX + ":fill"); - a.color = this.state.shadowColor; - a.opacity = 100 * this.state.alpha * this.state.shadowAlpha + "%"; - return a -}; -mxVmlCanvas2D.prototype.createShadowStroke = function() { - var a = this.createStroke(); - a.opacity = 100 * this.state.alpha * this.state.shadowAlpha + "%"; - return a -}; -mxVmlCanvas2D.prototype.rotate = function(a, b, c, d, e) { - b && c ? a += 180 : b ? this.root.style.flip = "x" : c && (this.root.style.flip = "y"); - if (b ? !c : c) a *= -1; - this.root.style.rotation = a; - this.state.rotation += a; - this.state.rotationCx = d; - this.state.rotationCy = e -}; -mxVmlCanvas2D.prototype.begin = function() { - mxAbstractCanvas2D.prototype.begin.apply(this, arguments); - this.node = document.createElement(mxClient.VML_PREFIX + ":shape"); - this.node.style.position = "absolute" -}; -mxVmlCanvas2D.prototype.quadTo = function(a, b, c, d) { - var e = this.state, - f = (this.lastX + e.dx) * e.scale, - g = (this.lastY + e.dy) * e.scale; - a = (a + e.dx) * e.scale; - b = (b + e.dy) * e.scale; - c = (c + e.dx) * e.scale; - d = (d + e.dy) * e.scale; - var g = g + 2 / 3 * (b - g), - h = c + 2 / 3 * (a - c); - b = d + 2 / 3 * (b - d); - this.path.push("c " + this.format(f + 2 / 3 * (a - f)) + " " + this.format(g) + " " + this.format(h) + " " + this.format(b) + " " + this.format(c) + " " + this.format(d)); - this.lastX = c / e.scale - e.dx; - this.lastY = d / e.scale - e.dy -}; -mxVmlCanvas2D.prototype.createRect = function(a, b, c, d, e) { - var f = this.state; - a = document.createElement(a); - a.style.position = "absolute"; - a.style.left = this.format((b + f.dx) * f.scale) + "px"; - a.style.top = this.format((c + f.dy) * f.scale) + "px"; - a.style.width = this.format(d * f.scale) + "px"; - a.style.height = this.format(e * f.scale) + "px"; - return a -}; -mxVmlCanvas2D.prototype.rect = function(a, b, c, d) { - this.node = this.createRect(mxClient.VML_PREFIX + ":rect", a, b, c, d) -}; -mxVmlCanvas2D.prototype.roundrect = function(a, b, c, d, e, f) { - this.node = this.createRect(mxClient.VML_PREFIX + ":roundrect", a, b, c, d); - this.node.setAttribute("arcsize", Math.max(100 * e / c, 100 * f / d) + "%") -}; -mxVmlCanvas2D.prototype.ellipse = function(a, b, c, d) { - this.node = this.createRect(mxClient.VML_PREFIX + ":oval", a, b, c, d) -}; -mxVmlCanvas2D.prototype.image = function(a, b, c, d, e, f, g, h) { - var k = null; - f ? (k = this.createRect(mxClient.VML_PREFIX + ":rect", a, b, c, d), k.stroked = "false", a = document.createElement(mxClient.VML_PREFIX + ":fill"), a.aspect = f ? "atmost" : "ignore", a.rotate = - "true", a.type = "frame", a.src = e, k.appendChild(a)) : (k = this.createRect(mxClient.VML_PREFIX + ":image", a, b, c, d), k.src = e); - g && h ? k.style.rotation = "180" : g ? k.style.flip = "x" : h && (k.style.flip = "y"); - 1 > this.state.alpha && (k.style.filter += "alpha(opacity\x3d" + 100 * this.state.alpha + ")"); - this.root.appendChild(k) -}; -mxVmlCanvas2D.prototype.createDiv = function(a, b, c, d) { - c = document.createElement("div"); - var e = this.state, - f = ""; - null != e.fontBackgroundColor && (f += "background-color:" + e.fontBackgroundColor + ";"); - null != e.fontBorderColor && (f += "border:1px solid " + e.fontBorderColor + ";"); - mxUtils.isNode(a) ? c.appendChild(a) : 0 < f.length && !d ? (d = document.createElement("div"), d.style.cssText = f, d.style.display = mxClient.IS_QUIRKS ? "inline" : "inline-block", d.style.zoom = - "1", d.innerHTML = a, c.appendChild(d)) : (c.style.cssText = f, c.innerHTML = a); - a = c.style; - a.fontSize = Math.round(e.fontSize / this.vmlScale) + "px"; - a.fontFamily = e.fontFamily; - a.color = e.fontColor; - a.verticalAlign = "top"; - a.textAlign = b || "left"; - a.lineHeight = Math.round(e.fontSize * mxConstants.LINE_HEIGHT / this.vmlScale) + "px"; - (e.fontStyle & mxConstants.FONT_BOLD) == mxConstants.FONT_BOLD && (a.fontWeight = "bold"); - (e.fontStyle & mxConstants.FONT_ITALIC) == mxConstants.FONT_ITALIC && (a.fontStyle = "italic"); - (e.fontStyle & mxConstants.FONT_UNDERLINE) == mxConstants.FONT_UNDERLINE && (a.fontDecoration = "underline"); - return c -}; -mxVmlCanvas2D.prototype.text = function(a, b, c, d, e, f, g, h, k, l, m, n) { - if (this.textEnabled && null != e) { - var p = this.state; - if ("html" == k) { - null != p.rotation && (b = this.rotatePoint(a, b, p.rotation, p.rotationCx, p.rotationCy), a = b.x, b = b.y); - 8 == document.documentMode ? (a += p.dx, b += p.dy) : (a *= p.scale, b *= p.scale); - k = 8 == document.documentMode ? document.createElement(mxClient.VML_PREFIX + ":group") : document.createElement("div"); - k.style.position = "absolute"; - k.style.display = "inline"; - k.style.left = this.format(a) + "px"; - k.style.top = this.format(b) + - "px"; - k.style.zoom = p.scale; - var q = document.createElement("div"); - q.style.position = "relative"; - q.style.display = "inline"; - var s = mxUtils.getAlignmentAsPoint(f, g), - r = s.x, - s = s.y; - e = this.createDiv(e, f, g, l); - f = document.createElement("div"); - h ? (!m && 0 < c && (e.style.width = Math.round(c) + "px"), e.style.whiteSpace = "normal") : e.style.whiteSpace = "nowrap"; - h = p.rotation + (n || 0); - this.rotateHtml && 0 != h ? (f.style.display = "inline", f.style.zoom = "1", f.appendChild(e), 8 == document.documentMode && "DIV" != this.root.nodeName ? (q.appendChild(f), k.appendChild(q)) : - k.appendChild(f)) : 8 == document.documentMode ? (q.appendChild(e), k.appendChild(q)) : (e.style.display = "inline", k.appendChild(e)); - "DIV" != this.root.nodeName ? (n = document.createElement(mxClient.VML_PREFIX + ":rect"), n.stroked = "false", n.filled = "false", n.appendChild(k), this.root.appendChild(n)) : this.root.appendChild( - k); - m ? (e.style.overflow = "hidden", 0 < c && (e.style.width = Math.round(c) + "px"), 0 < d && 8 == document.documentMode && (e.style.maxHeight = Math.round(d) + "px")) : l && (e.style.width = c + - "px", 0 < d && (e.style.maxHeight = Math.round(d) + - "px")); - if (this.rotateHtml && 0 != h) { - c = h * (Math.PI / 180); - h = parseFloat(parseFloat(Math.cos(c)).toFixed(8)); - n = parseFloat(parseFloat(Math.sin(-c)).toFixed(8)); - c %= 2 * Math.PI; - 0 > c && (c += 2 * Math.PI); - c %= Math.PI; - c > Math.PI / 2 && (c = Math.PI - c); - g = Math.cos(c); - var t = Math.sin(c); - 8 == document.documentMode && (e.style.display = "inline-block", f.style.display = "inline-block", q.style.display = "inline-block"); - e.style.visibility = "hidden"; - document.body.appendChild(e); - c = e.offsetWidth; - q = e.offsetHeight; - if (mxClient.IS_QUIRKS && (m || l) && q > d) q = - d, e.style.height = q + "px"; - d = q; - m = (d - d * g + c * -t) / 2 - n * c * (r + 0.5) + h * d * (s + 0.5); - l = (c - c * g + d * -t) / 2 + h * c * (r + 0.5) + n * d * (s + 0.5); - "group" == k.nodeName && "DIV" == this.root.nodeName ? (r = document.createElement("div"), r.style.display = "inline-block", r.style.position = "absolute", r.style.left = this.format(a + (l - - c / 2) * p.scale) + "px", r.style.top = this.format(b + (m - d / 2) * p.scale) + "px", k.parentNode.appendChild(r), r.appendChild(k)) : (p = 8 == document.documentMode ? 1 : p.scale, k.style - .left = this.format(a + (l - c / 2) * p) + "px", k.style.top = this.format(b + (m - - d / 2) * p) + "px"); - f.style.filter = "progid:DXImageTransform.Microsoft.Matrix(M11\x3d" + h + ", M12\x3d" + n + ", M21\x3d" + -n + ", M22\x3d" + h + ", sizingMethod\x3d'auto expand')"; - f.style.backgroundColor = this.rotatedHtmlBackground; - 1 > this.state.alpha && (f.style.filter += "alpha(opacity\x3d" + 100 * this.state.alpha + ")"); - e.style.visibility = ""; - f.appendChild(e) - } else 8 != document.documentMode ? (e.style.verticalAlign = "top", 1 > this.state.alpha && (k.style.filter = "alpha(opacity\x3d" + 100 * this.state.alpha + ")"), p = e.parentNode, e.style.visibility = - "hidden", document.body.appendChild(e), c = e.offsetWidth, q = e.offsetHeight, mxClient.IS_QUIRKS && (m && q > d) && (q = d, e.style.height = q + "px"), d = q, e.style.visibility = "", p.appendChild( - e), k.style.left = this.format(a + c * r * this.state.scale) + "px", k.style.top = this.format(b + d * s * this.state.scale) + "px") : (1 > this.state.alpha && (e.style.filter = - "alpha(opacity\x3d" + 100 * this.state.alpha + ")"), q.style.left = 100 * r + "%", q.style.top = 100 * s + "%") - } else this.plainText(a, b, c, d, mxUtils.htmlEntities(e, !1), f, g, h, k, l, m, n) - } -}; -mxVmlCanvas2D.prototype.plainText = function(a, b, c, d, e, f, g, h, k, l, m, n) { - d = this.state; - a = (a + d.dx) * d.scale; - b = (b + d.dy) * d.scale; - c = document.createElement(mxClient.VML_PREFIX + ":shape"); - c.style.width = "1px"; - c.style.height = "1px"; - c.stroked = "false"; - l = document.createElement(mxClient.VML_PREFIX + ":fill"); - l.color = d.fontColor; - l.opacity = 100 * d.alpha + "%"; - c.appendChild(l); - l = document.createElement(mxClient.VML_PREFIX + ":path"); - l.textpathok = "true"; - l.v = "m " + this.format(0) + " " + this.format(0) + " l " + this.format(1) + " " + this.format(0); - c.appendChild(l); - l = document.createElement(mxClient.VML_PREFIX + ":textpath"); - l.style.cssText = "v-text-align:" + f; - l.style.align = f; - l.style.fontFamily = d.fontFamily; - l.string = e; - l.on = "true"; - f = Math.round(d.fontSize * d.scale / this.vmlScale); - l.style.fontSize = f + "px"; - (d.fontStyle & mxConstants.FONT_BOLD) == mxConstants.FONT_BOLD && (l.style.fontWeight = "bold"); - (d.fontStyle & mxConstants.FONT_ITALIC) == mxConstants.FONT_ITALIC && (l.style.fontStyle = "italic"); - (d.fontStyle & mxConstants.FONT_UNDERLINE) == mxConstants.FONT_UNDERLINE && - (l.style.textDecoration = "underline"); - e = e.split("\n"); - d = f + (e.length - 1) * f * mxConstants.LINE_HEIGHT; - f = e = 0; - g == mxConstants.ALIGN_BOTTOM ? f = -d / 2 : g != mxConstants.ALIGN_MIDDLE && (f = d / 2); - null != n && (c.style.rotation = n, g = n * (Math.PI / 180), e = Math.sin(g) * f, f *= Math.cos(g)); - c.appendChild(l); - c.style.left = this.format(a - e) + "px"; - c.style.top = this.format(b + f) + "px"; - this.root.appendChild(c) -}; -mxVmlCanvas2D.prototype.stroke = function() { - this.addNode(!1, !0) -}; -mxVmlCanvas2D.prototype.fill = function() { - this.addNode(!0, !1) -}; -mxVmlCanvas2D.prototype.fillAndStroke = function() { - this.addNode(!0, !0) -}; - -function mxGuide(a, b) { - this.graph = a; - this.setStates(b) -} -mxGuide.prototype.graph = null; -mxGuide.prototype.states = null; -mxGuide.prototype.horizontal = !0; -mxGuide.prototype.vertical = !0; -mxGuide.prototype.guideX = null; -mxGuide.prototype.guideY = null; -mxGuide.prototype.setStates = function(a) { - this.states = a -}; -mxGuide.prototype.isEnabledForEvent = function(a) { - return !0 -}; -mxGuide.prototype.getGuideTolerance = function() { - return this.graph.gridSize * this.graph.view.scale / 2 -}; -mxGuide.prototype.createGuideShape = function(a) { - a = new mxPolyline([], mxConstants.GUIDE_COLOR, mxConstants.GUIDE_STROKEWIDTH); - a.isDashed = !0; - return a -}; -mxGuide.prototype.move = function(a, b, c) { - if (null != this.states && (this.horizontal || this.vertical) && null != a && null != b) { - var d = this.graph.getView().translate, - e = this.graph.getView().scale, - f = b.x, - g = b.y, - h = !1, - k = !1, - l = this.getGuideTolerance(), - m = l, - n = l, - l = a.clone(); - l.x += b.x; - l.y += b.y; - var p = l.x, - q = l.x + l.width, - s = l.getCenterX(), - r = l.y, - t = l.y + l.height, - v = l.getCenterY(); - b = function(b) { - b += this.graph.panDx; - var c = !1; - Math.abs(b - s) < m ? (f = b - a.getCenterX(), m = Math.abs(b - s), c = !0) : Math.abs(b - p) < m ? (f = b - a.x, m = Math.abs(b - p), c = !0) : Math.abs(b - - q) < m && (f = b - a.x - a.width, m = Math.abs(b - q), c = !0); - if (c) { - null == this.guideX && (this.guideX = this.createGuideShape(!0), this.guideX.dialect = this.graph.dialect != mxConstants.DIALECT_SVG ? mxConstants.DIALECT_VML : mxConstants.DIALECT_SVG, - this.guideX.pointerEvents = !1, this.guideX.init(this.graph.getView().getOverlayPane())); - var d = this.graph.container; - b -= this.graph.panDx; - this.guideX.points = [new mxPoint(b, -this.graph.panDy), new mxPoint(b, d.scrollHeight - 3 - this.graph.panDy)] - } - h = h || c - }; - for (var l = function(b) { - b += this.graph.panDy; - var c = !1; - Math.abs(b - v) < n ? (g = b - a.getCenterY(), n = Math.abs(b - v), c = !0) : Math.abs(b - r) < n ? (g = b - a.y, n = Math.abs(b - r), c = !0) : Math.abs(b - t) < n && (g = b - a.y - a.height, - n = Math.abs(b - t), c = !0); - if (c) { - null == this.guideY && (this.guideY = this.createGuideShape(!1), this.guideY.dialect = this.graph.dialect != mxConstants.DIALECT_SVG ? mxConstants.DIALECT_VML : mxConstants.DIALECT_SVG, - this.guideY.pointerEvents = !1, this.guideY.init(this.graph.getView().getOverlayPane())); - var d = this.graph.container; - b -= this.graph.panDy; - this.guideY.points = [new mxPoint(-this.graph.panDx, - b), new mxPoint(d.scrollWidth - 3 - this.graph.panDx, b)] - } - k = k || c - }, w = 0; w < this.states.length; w++) { - var u = this.states[w]; - null != u && (this.horizontal && (b.call(this, u.getCenterX()), b.call(this, u.x), b.call(this, u.x + u.width)), this.vertical && (l.call(this, u.getCenterY()), l.call(this, u.y), l.call(this, - u.y + u.height))) - }!h && null != this.guideX ? this.guideX.node.style.visibility = "hidden" : null != this.guideX && (this.guideX.node.style.visibility = "visible", this.guideX.redraw()); - !k && null != this.guideY ? this.guideY.node.style.visibility = - "hidden" : null != this.guideY && (this.guideY.node.style.visibility = "visible", this.guideY.redraw()); - c && (h || (c = a.x - (this.graph.snap(a.x / e - d.x) + d.x) * e, f = this.graph.snap(f / e) * e - c), k || (d = a.y - (this.graph.snap(a.y / e - d.y) + d.y) * e, g = this.graph.snap(g / e) * e - - d)); - b = new mxPoint(f, g) - } - return b -}; -mxGuide.prototype.hide = function() { - null != this.guideX && (this.guideX.node.style.visibility = "hidden"); - null != this.guideY && (this.guideY.node.style.visibility = "hidden") -}; -mxGuide.prototype.destroy = function() { - null != this.guideX && (this.guideX.destroy(), this.guideX = null); - null != this.guideY && (this.guideY.destroy(), this.guideY = null) -}; - -function mxStencil(a) { - this.desc = a; - this.parseDescription(); - this.parseConstraints() -} -mxStencil.defaultLocalized = !1; -mxStencil.prototype.desc = null; -mxStencil.prototype.constraints = null; -mxStencil.prototype.aspect = null; -mxStencil.prototype.w0 = null; -mxStencil.prototype.h0 = null; -mxStencil.prototype.bgNode = null; -mxStencil.prototype.fgNode = null; -mxStencil.prototype.strokewidth = null; -mxStencil.prototype.parseDescription = function() { - this.fgNode = this.desc.getElementsByTagName("foreground")[0]; - this.bgNode = this.desc.getElementsByTagName("background")[0]; - this.w0 = Number(this.desc.getAttribute("w") || 100); - this.h0 = Number(this.desc.getAttribute("h") || 100); - var a = this.desc.getAttribute("aspect"); - this.aspect = null != a ? a : "variable"; - a = this.desc.getAttribute("strokewidth"); - this.strokewidth = null != a ? a : "1" -}; -mxStencil.prototype.parseConstraints = function() { - var a = this.desc.getElementsByTagName("connections")[0]; - if (null != a && (a = mxUtils.getChildNodes(a), null != a && 0 < a.length)) { - this.constraints = []; - for (var b = 0; b < a.length; b++) this.constraints.push(this.parseConstraint(a[b])) - } -}; -mxStencil.prototype.parseConstraint = function(a) { - var b = Number(a.getAttribute("x")), - c = Number(a.getAttribute("y")); - a = "1" == a.getAttribute("perimeter"); - return new mxConnectionConstraint(new mxPoint(b, c), a) -}; -mxStencil.prototype.evaluateTextAttribute = function(a, b, c) { - b = this.evaluateAttribute(a, b, c); - a = a.getAttribute("localized"); - if (mxStencil.defaultLocalized && null == a || "1" == a) b = mxResources.get(b); - return b -}; -mxStencil.prototype.evaluateAttribute = function(a, b, c) { - b = a.getAttribute(b); - null == b && (a = mxUtils.getTextContent(a), null != a && (a = mxUtils.eval(a), "function" == typeof a && (b = a(c)))); - return b -}; -mxStencil.prototype.drawShape = function(a, b, c, d, e, f) { - this.drawChildren(a, b, c, d, e, f, this.bgNode, !1); - this.drawChildren(a, b, c, d, e, f, this.fgNode, !0) -}; -mxStencil.prototype.drawChildren = function(a, b, c, d, e, f, g, h) { - if (null != g) { - var k = mxUtils.getValue(b.style, mxConstants.STYLE_DIRECTION, null); - c = this.computeAspect(b.style, c, d, e, f, k); - d = Math.min(c.width, c.height); - d = "inherit" == this.strokewidth ? Number(mxUtils.getNumber(b.style, mxConstants.STYLE_STROKEWIDTH, 1)) : Number(this.strokewidth) * d; - a.setStrokeWidth(d); - for (g = g.firstChild; null != g;) g.nodeType == mxConstants.NODETYPE_ELEMENT && this.drawNode(a, b, g, c, h), g = g.nextSibling - } -}; -mxStencil.prototype.computeAspect = function(a, b, c, d, e, f) { - a = b; - b = d / this.w0; - var g = e / this.h0; - if (f = "north" == f || "south" == f) { - g = d / this.h0; - b = e / this.w0; - var h = (d - e) / 2; - a += h; - c -= h - } - "fixed" == this.aspect && (b = g = Math.min(b, g), f ? (a += (e - this.w0 * b) / 2, c += (d - this.h0 * g) / 2) : (a += (d - this.w0 * b) / 2, c += (e - this.h0 * g) / 2)); - return new mxRectangle(a, c, b, g) -}; -mxStencil.prototype.drawNode = function(a, b, c, d, e) { - var f = c.nodeName, - g = d.x, - h = d.y, - k = d.width, - l = d.height, - m = Math.min(k, l); - if ("save" == f) a.save(); - else if ("restore" == f) a.restore(); - else if ("path" == f) { - a.begin(); - for (c = c.firstChild; null != c;) c.nodeType == mxConstants.NODETYPE_ELEMENT && this.drawNode(a, b, c, d, e), c = c.nextSibling - } else if ("close" == f) a.close(); - else if ("move" == f) a.moveTo(g + Number(c.getAttribute("x")) * k, h + Number(c.getAttribute("y")) * l); - else if ("line" == f) a.lineTo(g + Number(c.getAttribute("x")) * k, h + Number(c.getAttribute("y")) * - l); - else if ("quad" == f) a.quadTo(g + Number(c.getAttribute("x1")) * k, h + Number(c.getAttribute("y1")) * l, g + Number(c.getAttribute("x2")) * k, h + Number(c.getAttribute("y2")) * l); - else if ("curve" == f) a.curveTo(g + Number(c.getAttribute("x1")) * k, h + Number(c.getAttribute("y1")) * l, g + Number(c.getAttribute("x2")) * k, h + Number(c.getAttribute("y2")) * l, g + Number( - c.getAttribute("x3")) * k, h + Number(c.getAttribute("y3")) * l); - else if ("arc" == f) a.arcTo(Number(c.getAttribute("rx")) * k, Number(c.getAttribute("ry")) * l, Number(c.getAttribute("x-axis-rotation")), - Number(c.getAttribute("large-arc-flag")), Number(c.getAttribute("sweep-flag")), g + Number(c.getAttribute("x")) * k, h + Number(c.getAttribute("y")) * l); - else if ("rect" == f) a.rect(g + Number(c.getAttribute("x")) * k, h + Number(c.getAttribute("y")) * l, Number(c.getAttribute("w")) * k, Number(c.getAttribute("h")) * l); - else if ("roundrect" == f) b = c.getAttribute("arcsize"), 0 == b && (b = 100 * mxConstants.RECTANGLE_ROUNDING_FACTOR), m = Number(c.getAttribute("w")) * k, d = Number(c.getAttribute("h")) * l, b = - Number(b) / 100, b = Math.min(m * b, d * b), a.roundrect(g + - Number(c.getAttribute("x")) * k, h + Number(c.getAttribute("y")) * l, m, d, b, b); - else if ("ellipse" == f) a.ellipse(g + Number(c.getAttribute("x")) * k, h + Number(c.getAttribute("y")) * l, Number(c.getAttribute("w")) * k, Number(c.getAttribute("h")) * l); - else if ("image" == f) b = this.evaluateAttribute(c, "src", b), a.image(g + Number(c.getAttribute("x")) * k, h + Number(c.getAttribute("y")) * l, Number(c.getAttribute("w")) * k, Number(c.getAttribute( - "h")) * l, b, !1, "1" == c.getAttribute("flipH"), "1" == c.getAttribute("flipV")); - else if ("text" == f) { - m = this.evaluateTextAttribute(c, - "str", b); - d = "1" == c.getAttribute("vertical") ? -90 : 0; - if ("0" == c.getAttribute("align-shape")) { - var n = b.rotation, - p = 1 == mxUtils.getValue(b.style, mxConstants.STYLE_FLIPH, 0); - b = 1 == mxUtils.getValue(b.style, mxConstants.STYLE_FLIPV, 0); - d = p && b ? d - n : p || b ? d + n : d - n - } - d -= c.getAttribute("rotation"); - a.text(g + Number(c.getAttribute("x")) * k, h + Number(c.getAttribute("y")) * l, 0, 0, m, c.getAttribute("align") || "left", c.getAttribute("valign") || "top", !1, "", !1, !1, d) - } else if ("include-shape" == f) n = mxStencilRegistry.getStencil(c.getAttribute("name")), - null != n && (g += Number(c.getAttribute("x")) * k, h += Number(c.getAttribute("y")) * l, m = Number(c.getAttribute("w")) * k, d = Number(c.getAttribute("h")) * l, n.drawShape(a, b, g, h, m, d)); - else if ("fillstroke" == f) a.fillAndStroke(); - else if ("fill" == f) a.fill(); - else if ("stroke" == f) a.stroke(); - else if ("strokewidth" == f) a.setStrokeWidth(Number(c.getAttribute("width")) * m); - else if ("dashed" == f) a.setDashed("1" == c.getAttribute("dashed")); - else if ("dashpattern" == f) { - if (c = c.getAttribute("pattern"), null != c) { - c = c.split(" "); - k = []; - for (l = 0; l < - c.length; l++) 0 < c[l].length && k.push(Number(c[l]) * m); - c = k.join(" "); - a.setDashPattern(c) - } - } else "strokecolor" == f ? a.setStrokeColor(c.getAttribute("color")) : "linecap" == f ? a.setLineCap(c.getAttribute("cap")) : "linejoin" == f ? a.setLineJoin(c.getAttribute("join")) : - "miterlimit" == f ? a.setMiterLimit(Number(c.getAttribute("limit"))) : "fillcolor" == f ? a.setFillColor(c.getAttribute("color")) : "alpha" == f ? a.setAlpha(c.getAttribute("alpha")) : - "fontcolor" == f ? a.setFontColor(c.getAttribute("color")) : "fontstyle" == f ? a.setFontStyle(c.getAttribute("style")) : - "fontfamily" == f ? a.setFontFamily(c.getAttribute("family")) : "fontsize" == f && a.setFontSize(Number(c.getAttribute("size")) * m); - e && ("fillstroke" == f || "fill" == f || "stroke" == f) && a.setShadow(!1) -}; - -function mxShape(a) { - this.stencil = a; - this.strokewidth = 1; - this.rotation = 0; - this.opacity = 100; - this.flipV = this.flipH = !1 -} -mxShape.prototype.dialect = null; -mxShape.prototype.scale = 1; -mxShape.prototype.bounds = null; -mxShape.prototype.points = null; -mxShape.prototype.node = null; -mxShape.prototype.style = null; -mxShape.prototype.style = null; -mxShape.prototype.boundingBox = null; -mxShape.prototype.stencil = null; -mxShape.prototype.svgStrokeTolerance = 6; -mxShape.prototype.pointerEvents = !0; -mxShape.prototype.stencilPointerEvents = !1; -mxShape.prototype.vmlScale = 1; -mxShape.prototype.init = function(a) { - null == this.node && (this.node = this.create(a), null != a && a.appendChild(this.node)) -}; -mxShape.prototype.isParseVml = function() { - return !0 -}; -mxShape.prototype.isHtmlAllowed = function() { - return !1 -}; -mxShape.prototype.getSvgScreenOffset = function() { - return 1 == mxUtils.mod(Math.max(1, Math.round(this.strokewidth * this.scale)), 2) ? 0.5 : 0 -}; -mxShape.prototype.create = function(a) { - var b = null; - return b = null != a.ownerSVGElement ? this.createSvg(a) : 8 == document.documentMode || this.dialect == mxConstants.DIALECT_SVG || this.dialect != mxConstants.DIALECT_VML && this.isHtmlAllowed() ? - this.createHtml(a) : this.createVml(a) -}; -mxShape.prototype.createSvg = function() { - return document.createElementNS(mxConstants.NS_SVG, "g") -}; -mxShape.prototype.createVml = function() { - var a = document.createElement(mxClient.VML_PREFIX + ":group"); - a.style.position = "absolute"; - return a -}; -mxShape.prototype.createHtml = function() { - var a = document.createElement("div"); - a.style.position = "absolute"; - return a -}; -mxShape.prototype.reconfigure = function() { - this.redraw() -}; -mxShape.prototype.redraw = function() { - this.updateBoundsFromPoints(); - this.checkBounds() ? (this.node.style.visibility = "", "DIV" == this.node.nodeName && this.isHtmlAllowed() ? this.redrawHtmlShape() : this.redrawShape(), this.updateBoundingBox()) : (this.node.style - .visibility = "hidden", this.boundingBox = null) -}; -mxShape.prototype.updateBoundsFromPoints = function() { - var a = this.points; - if (null != a && 0 < a.length && null != a[0]) { - this.bounds = new mxRectangle(Number(a[0].x), Number(a[0].y), 1, 1); - for (var b = 1; b < this.points.length; b++) null != a[b] && this.bounds.add(new mxRectangle(Number(a[b].x), Number(a[b].y), 1, 1)) - } -}; -mxShape.prototype.checkBounds = function() { - return null != this.bounds && !isNaN(this.bounds.x) && !isNaN(this.bounds.y) && !isNaN(this.bounds.width) && !isNaN(this.bounds.height) && 0 < this.bounds.width && 0 < this.bounds.height -}; -mxShape.prototype.createVmlGroup = function() { - var a = document.createElement(mxClient.VML_PREFIX + ":group"); - a.style.position = "absolute"; - a.style.width = this.node.style.width; - a.style.height = this.node.style.height; - return a -}; -mxShape.prototype.redrawShape = function() { - var a = this.createCanvas(); - for (a.pointerEvents = this.pointerEvents; this.node.hasChildNodes();) this.node.removeChild(this.node.lastChild); - this.paint(a); - this.node != a.root && this.node.insertAdjacentHTML("beforeend", a.root.outerHTML); - "DIV" == this.node.nodeName && 8 == document.documentMode && (this.node.style.filter = "", (null == this.stencil || !this.stencilPointerEvents) && mxUtils.addTransparentBackgroundFilter(this.node)); - this.destroyCanvas(a) -}; -mxShape.prototype.createCanvas = function() { - var a = null, - b = null; - if (null != this.node.ownerSVGElement) a = new mxSvgCanvas2D(this.node, !1), a.strokeTolerance = this.svgStrokeTolerance, a.blockImagePointerEvents = mxClient.IS_NS && !mxClient.IS_SF && ! - mxClient.IS_GC, b = this.getSvgScreenOffset(), 0 != b ? this.node.setAttribute("transform", "translate(" + b + "," + b + ")") : this.node.removeAttribute("transform"); - else { - this.updateVmlContainer(); - var c = Math.max(1, Math.round(this.bounds.width)), - d = Math.max(1, Math.round(this.bounds.height)), - b = 8 == document.documentMode && this.isParseVml() ? this.createVmlGroup() : this.node, - a = new mxVmlCanvas2D(b, !1); - "" != b.tagUrn && (b.coordsize = c * this.vmlScale + "," + d * this.vmlScale, a.scale(this.vmlScale), a.vmlScale = this.vmlScale); - b = this.scale; - a.translate(-Math.round(this.bounds.x / b), -Math.round(this.bounds.y / b)) - } - return a -}; -mxShape.prototype.updateVmlContainer = function() { - this.node.style.left = Math.round(this.bounds.x) + "px"; - this.node.style.top = Math.round(this.bounds.y) + "px"; - var a = Math.max(1, Math.round(this.bounds.width)), - b = Math.max(1, Math.round(this.bounds.height)); - this.node.style.width = a + "px"; - this.node.style.height = b + "px"; - this.node.style.overflow = "visible" -}; -mxShape.prototype.destroyCanvas = function(a) { - if (a instanceof mxSvgCanvas2D) { - for (var b in a.gradients) { - var c = a.gradients[b]; - c.mxRefCount = (c.mxRefCount || 0) + 1 - } - this.releaseSvgGradients(this.oldGradients); - this.oldGradients = a.gradients - } -}; -mxShape.prototype.paint = function(a) { - var b = this.scale, - c = this.bounds.x / b, - d = this.bounds.y / b, - e = this.bounds.width / b, - f = this.bounds.height / b; - if (this.isPaintBoundsInverted()) var g = (e - f) / 2, - c = c + g, - d = d - g, - g = e, - e = f, - f = g; - this.updateTransform(a, c, d, e, f); - this.configureCanvas(a, c, d, e, f); - if (null != this.stencil) this.paintStencilShape(a, c, d, e, f); - else if (a.setStrokeWidth(this.strokewidth), null != this.points) { - c = []; - for (d = 0; d < this.points.length; d++) c.push(new mxPoint(this.points[d].x / b, this.points[d].y / b)); - this.paintEdgeShape(a, - c) - } else this.paintVertexShape(a, c, d, e, f) -}; -mxShape.prototype.configureCanvas = function(a, b, c, d, e) { - var f = null; - null != this.style && (f = this.style.dashPattern); - a.setAlpha(this.opacity / 100); - null != this.isShadow && a.setShadow(this.isShadow); - null != this.isDashed && a.setDashed(this.isDashed); - null != f && a.setDashPattern(f); - null != this.gradient ? (b = this.getGradientBounds(a, b, c, d, e), a.setGradient(this.fill, this.gradient, b.x, b.y, b.width, b.height, this.gradientDirection)) : a.setFillColor(this.fill); - a.setStrokeColor(this.stroke) -}; -mxShape.prototype.getGradientBounds = function(a, b, c, d, e) { - return new mxRectangle(b, c, d, e) -}; -mxShape.prototype.updateTransform = function(a, b, c, d, e) { - a.scale(this.scale); - a.rotate(this.getShapeRotation(), this.flipH, this.flipV, b + d / 2, c + e / 2) -}; -mxShape.prototype.paintStencilShape = function(a, b, c, d, e) { - this.stencilPointerEvents && (this.dialect == mxConstants.DIALECT_SVG ? this.addTransparentBackgroundRectangle(this.node, b, c, d, e) : 8 != document.documentMode && this.setTransparentBackgroundImage( - this.node)); - this.stencil.drawShape(a, this, b, c, d, e) -}; -mxShape.prototype.paintVertexShape = function(a, b, c, d, e) { - this.paintBackground(a, b, c, d, e); - a.setShadow(!1); - this.paintForeground(a, b, c, d, e) -}; -mxShape.prototype.paintBackground = function(a, b, c, d, e) {}; -mxShape.prototype.paintForeground = function(a, b, c, d, e) {}; -mxShape.prototype.paintEdgeShape = function(a, b) {}; -mxShape.prototype.getArcSize = function(a, b) { - var c = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE, 100 * mxConstants.RECTANGLE_ROUNDING_FACTOR) / 100; - return Math.min(a * c, b * c) -}; -mxShape.prototype.paintGlassEffect = function(a, b, c, d, e, f) { - var g = Math.ceil(this.strokewidth / 2); - a.setGradient("#ffffff", "#ffffff", b, c, d, 0.6 * e, "south", 0.9, 0.1); - a.begin(); - f += 2 * g; - this.isRounded ? (a.moveTo(b - g + f, c - g), a.quadTo(b - g, c - g, b - g, c - g + f), a.lineTo(b - g, c + 0.4 * e), a.quadTo(b + 0.5 * d, c + 0.7 * e, b + d + g, c + 0.4 * e), a.lineTo(b + d + - g, c - g + f), a.quadTo(b + d + g, c - g, b + d + g - f, c - g)) : (a.moveTo(b - g, c - g), a.lineTo(b - g, c + 0.4 * e), a.quadTo(b + 0.5 * d, c + 0.7 * e, b + d + g, c + 0.4 * e), a.lineTo( - b + d + g, c - g)); - a.close(); - a.fill() -}; -mxShape.prototype.apply = function(a) { - this.state = a; - this.style = a.style; - if (null != this.style) { - this.fill = mxUtils.getValue(this.style, mxConstants.STYLE_FILLCOLOR, this.fill); - this.gradient = mxUtils.getValue(this.style, mxConstants.STYLE_GRADIENTCOLOR, this.gradient); - this.gradientDirection = mxUtils.getValue(this.style, mxConstants.STYLE_GRADIENT_DIRECTION, this.gradientDirection); - this.opacity = mxUtils.getValue(this.style, mxConstants.STYLE_OPACITY, this.opacity); - this.stroke = mxUtils.getValue(this.style, mxConstants.STYLE_STROKECOLOR, - this.stroke); - this.strokewidth = mxUtils.getNumber(this.style, mxConstants.STYLE_STROKEWIDTH, this.strokewidth); - this.spacing = mxUtils.getValue(this.style, mxConstants.STYLE_SPACING, this.spacing); - this.startSize = mxUtils.getNumber(this.style, mxConstants.STYLE_STARTSIZE, this.startSize); - this.endSize = mxUtils.getNumber(this.style, mxConstants.STYLE_ENDSIZE, this.endSize); - this.startArrow = mxUtils.getValue(this.style, mxConstants.STYLE_STARTARROW, this.startArrow); - this.endArrow = mxUtils.getValue(this.style, mxConstants.STYLE_ENDARROW, - this.endArrow); - this.rotation = mxUtils.getValue(this.style, mxConstants.STYLE_ROTATION, this.rotation); - this.direction = mxUtils.getValue(this.style, mxConstants.STYLE_DIRECTION, this.direction); - this.flipH = 1 == mxUtils.getValue(this.style, mxConstants.STYLE_FLIPH, 0); - this.flipV = 1 == mxUtils.getValue(this.style, mxConstants.STYLE_FLIPV, 0); - null != this.stencil && (this.flipH = 1 == mxUtils.getValue(this.style, "stencilFlipH", 0) || this.flipH, this.flipV = 1 == mxUtils.getValue(this.style, "stencilFlipV", 0) || this.flipV); - if ("north" == - this.direction || "south" == this.direction) a = this.flipH, this.flipH = this.flipV, this.flipV = a; - this.isShadow = 1 == mxUtils.getValue(this.style, mxConstants.STYLE_SHADOW, this.isShadow); - this.isDashed = 1 == mxUtils.getValue(this.style, mxConstants.STYLE_DASHED, this.isDashed); - this.isRounded = 1 == mxUtils.getValue(this.style, mxConstants.STYLE_ROUNDED, this.isRounded); - this.glass = 1 == mxUtils.getValue(this.style, mxConstants.STYLE_GLASS, this.glass); - "none" == this.fill && (this.fill = null); - "none" == this.gradient && (this.gradient = null); - "none" == this.stroke && (this.stroke = null) - } -}; -mxShape.prototype.setCursor = function(a) { - null == a && (a = ""); - this.cursor = a; - null != this.node && (this.node.style.cursor = a) -}; -mxShape.prototype.getCursor = function() { - return this.cursor -}; -mxShape.prototype.updateBoundingBox = function() { - if (null != this.bounds) { - var a = this.createBoundingBox(); - if (null != a) { - this.augmentBoundingBox(a); - var b = this.getShapeRotation(); - 0 != b && (a = mxUtils.getBoundingBox(a, b)); - a.x = Math.floor(a.x); - a.y = Math.floor(a.y); - a.width = Math.ceil(a.width); - a.height = Math.ceil(a.height) - } - this.boundingBox = a - } -}; -mxShape.prototype.createBoundingBox = function() { - var a = this.bounds.clone(); - if (this.isPaintBoundsInverted()) { - var b = (a.width - a.height) / 2; - a.x += b; - a.y -= b; - b = a.width; - a.width = a.height; - a.height = b - } - return a -}; -mxShape.prototype.augmentBoundingBox = function(a) { - this.isShadow && (a.width += Math.ceil(mxConstants.SHADOW_OFFSET_X * this.scale), a.height += Math.ceil(mxConstants.SHADOW_OFFSET_Y * this.scale)); - var b = Math.ceil(this.strokewidth * this.scale); - a.grow(Math.ceil(b / 2)) -}; -mxShape.prototype.isPaintBoundsInverted = function() { - return null == this.stencil && ("north" == this.direction || "south" == this.direction) -}; -mxShape.prototype.getRotation = function() { - return null != this.rotation ? this.rotation : 0 -}; -mxShape.prototype.getTextRotation = function() { - var a = this.getRotation(); - 1 != mxUtils.getValue(this.style, mxConstants.STYLE_HORIZONTAL, 1) && (a += mxText.prototype.verticalTextRotation); - return a -}; -mxShape.prototype.getShapeRotation = function() { - var a = this.getRotation(); - null != this.direction && ("north" == this.direction ? a += 270 : "west" == this.direction ? a += 180 : "south" == this.direction && (a += 90)); - return a -}; -mxShape.prototype.addTransparentBackgroundRectangle = function(a, b, c, d, e) { - a = document.createElementNS(mxConstants.NS_SVG, "rect"); - a.setAttribute("x", b); - a.setAttribute("y", c); - a.setAttribute("width", d); - a.setAttribute("height", e); - a.setAttribute("fill", "none"); - a.setAttribute("stroke", "none"); - a.setAttribute("pointer-events", "all"); - this.node.appendChild(a) -}; -mxShape.prototype.setTransparentBackgroundImage = function(a) { - a.style.backgroundImage = "url('" + mxClient.imageBasePath + "/transparent.gif')" -}; -mxShape.prototype.releaseSvgGradients = function(a) { - if (null != a) - for (var b in a) { - var c = a[b]; - c.mxRefCount = (c.mxRefCount || 0) - 1; - 0 == c.mxRefCount && null != c.parentNode && c.parentNode.removeChild(c) - } -}; -mxShape.prototype.destroy = function() { - null != this.node && (mxEvent.release(this.node), null != this.node.parentNode && this.node.parentNode.removeChild(this.node), this.node = null); - this.releaseSvgGradients(this.oldGradients); - this.oldGradients = null -}; -var mxStencilRegistry = { - stencils: [], - addStencil: function(a, b) { - mxStencilRegistry.stencils[a] = b - }, - getStencil: function(a) { - return mxStencilRegistry.stencils[a] - } - }, - mxMarker = { - markers: [], - addMarker: function(a, b) { - mxMarker.markers[a] = b - }, - createMarker: function(a, b, c, d, e, f, g, h, k, l) { - var m = mxMarker.markers[c]; - return null != m ? m(a, b, c, d, e, f, g, h, k, l) : null - } - }; -(function() { - function a(a, b, e, f, g, h, k, l, m, n) { - b = 1.118 * g * m; - l = 1.118 * h * m; - g *= k + m; - h *= k + m; - var p = f.clone(); - p.x -= b; - p.y -= l; - k = e != mxConstants.ARROW_CLASSIC ? 1 : 0.75; - f.x += -g * k - b; - f.y += -h * k - l; - return function() { - a.begin(); - a.moveTo(p.x, p.y); - a.lineTo(p.x - g - h / 2, p.y - h + g / 2); - e == mxConstants.ARROW_CLASSIC && a.lineTo(p.x - 3 * g / 4, p.y - 3 * h / 4); - a.lineTo(p.x + h / 2 - g, p.y - h - g / 2); - a.close(); - n ? a.fillAndStroke() : a.stroke() - } - } - - function b(a, b, e, f, g, h, k, l, m, n) { - l = e == mxConstants.ARROW_DIAMOND ? 0.7071 : 0.9862; - b = g * m * l; - l *= h * m; - g *= k + m; - h *= k + m; - var p = f.clone(); - p.x -= b; - p.y -= l; - f.x += -g - b; - f.y += -h - l; - var q = e == mxConstants.ARROW_DIAMOND ? 2 : 3.4; - return function() { - a.begin(); - a.moveTo(p.x, p.y); - a.lineTo(p.x - g / 2 - h / q, p.y + g / q - h / 2); - a.lineTo(p.x - g, p.y - h); - a.lineTo(p.x - g / 2 + h / q, p.y - h / 2 - g / q); - a.close(); - n ? a.fillAndStroke() : a.stroke() - } - } - mxMarker.addMarker("classic", a); - mxMarker.addMarker("block", a); - mxMarker.addMarker("open", function(a, b, e, f, g, h, k, l, m, n) { - b = 1.118 * g * m; - e = 1.118 * h * m; - g *= k + m; - h *= k + m; - var p = f.clone(); - p.x -= b; - p.y -= e; - f.x += 2 * -b; - f.y += 2 * -e; - return function() { - a.begin(); - a.moveTo(p.x - g - - h / 2, p.y - h + g / 2); - a.lineTo(p.x, p.y); - a.lineTo(p.x + h / 2 - g, p.y - h - g / 2); - a.stroke() - } - }); - mxMarker.addMarker("oval", function(a, b, e, f, g, h, k, l, m, n) { - var p = k / 2, - q = f.clone(); - f.x -= g * p; - f.y -= h * p; - return function() { - a.ellipse(q.x - p, q.y - p, k, k); - n ? a.fillAndStroke() : a.stroke() - } - }); - mxMarker.addMarker("diamond", b); - mxMarker.addMarker("diamondThin", b) -})(); - -function mxActor(a, b, c, d) { - mxShape.call(this); - this.bounds = a; - this.fill = b; - this.stroke = c; - this.strokewidth = null != d ? d : 1 -} -mxUtils.extend(mxActor, mxShape); -mxActor.prototype.paintVertexShape = function(a, b, c, d, e) { - a.translate(b, c); - a.begin(); - this.redrawPath(a, b, c, d, e); - a.fillAndStroke() -}; -mxActor.prototype.redrawPath = function(a, b, c, d, e) { - b = d / 3; - a.moveTo(0, e); - a.curveTo(0, 3 * e / 5, 0, 2 * e / 5, d / 2, 2 * e / 5); - a.curveTo(d / 2 - b, 2 * e / 5, d / 2 - b, 0, d / 2, 0); - a.curveTo(d / 2 + b, 0, d / 2 + b, 2 * e / 5, d / 2, 2 * e / 5); - a.curveTo(d, 2 * e / 5, d, 3 * e / 5, d, e); - a.close() -}; - -function mxCloud(a, b, c, d) { - mxActor.call(this); - this.bounds = a; - this.fill = b; - this.stroke = c; - this.strokewidth = null != d ? d : 1 -} -mxUtils.extend(mxCloud, mxActor); -mxCloud.prototype.redrawPath = function(a, b, c, d, e) { - a.moveTo(0.25 * d, 0.25 * e); - a.curveTo(0.05 * d, 0.25 * e, 0, 0.5 * e, 0.16 * d, 0.55 * e); - a.curveTo(0, 0.66 * e, 0.18 * d, 0.9 * e, 0.31 * d, 0.8 * e); - a.curveTo(0.4 * d, e, 0.7 * d, e, 0.8 * d, 0.8 * e); - a.curveTo(d, 0.8 * e, d, 0.6 * e, 0.875 * d, 0.5 * e); - a.curveTo(d, 0.3 * e, 0.8 * d, 0.1 * e, 0.625 * d, 0.2 * e); - a.curveTo(0.5 * d, 0.05 * e, 0.3 * d, 0.05 * e, 0.25 * d, 0.25 * e); - a.close() -}; - -function mxRectangleShape(a, b, c, d) { - mxShape.call(this); - this.bounds = a; - this.fill = b; - this.stroke = c; - this.strokewidth = null != d ? d : 1 -} -mxUtils.extend(mxRectangleShape, mxShape); -mxRectangleShape.prototype.isHtmlAllowed = function() { - return !this.isRounded && !this.glass && 0 == this.rotation -}; -mxRectangleShape.prototype.paintBackground = function(a, b, c, d, e) { - if (this.isRounded) { - var f = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE, 100 * mxConstants.RECTANGLE_ROUNDING_FACTOR) / 100, - f = Math.min(d * f, e * f); - a.roundrect(b, c, d, e, f, f) - } else a.rect(b, c, d, e); - a.fillAndStroke() -}; -mxRectangleShape.prototype.paintForeground = function(a, b, c, d, e) { - this.glass && this.paintGlassEffect(a, b, c, d, e, this.getArcSize(d + this.strokewidth, e + this.strokewidth)) -}; -mxRectangleShape.prototype.redrawHtmlShape = function() { - this.updateHtmlBounds(this.node); - this.updateHtmlFilters(this.node); - this.updateHtmlColors(this.node) -}; -mxRectangleShape.prototype.updateHtmlBounds = function(a) { - var b = 9 <= document.documentMode ? 0 : Math.ceil(this.strokewidth * this.scale); - a.style.borderWidth = Math.max(1, b) + "px"; - a.style.overflow = "hidden"; - a.style.left = Math.round(this.bounds.x - b / 2) + "px"; - a.style.top = Math.round(this.bounds.y - b / 2) + "px"; - "CSS1Compat" == document.compatMode && (b = -b); - a.style.width = Math.round(Math.max(0, this.bounds.width + b)) + "px"; - a.style.height = Math.round(Math.max(0, this.bounds.height + b)) + "px" -}; -mxRectangleShape.prototype.updateHtmlColors = function(a) { - var b = this.stroke; - null != b && b != mxConstants.NONE ? (a.style.borderColor = b, this.isDashed ? a.style.borderStyle = "dashed" : 0 < this.strokewidth && (a.style.borderStyle = "solid"), a.style.borderWidth = Math - .max(1, Math.ceil(this.strokewidth * this.scale)) + "px") : a.style.borderWidth = "0px"; - b = this.fill; - null != b && b != mxConstants.NONE ? (a.style.backgroundColor = b, a.style.backgroundImage = "none") : this.pointerEvents ? a.style.backgroundColor = "transparent" : 8 == document.documentMode ? - mxUtils.addTransparentBackgroundFilter(a) : this.setTransparentBackgroundImage(a) -}; -mxRectangleShape.prototype.updateHtmlFilters = function(a) { - var b = ""; - 100 > this.opacity && (b += "alpha(opacity\x3d" + this.opacity + ")"); - this.isShadow && (b += "progid:DXImageTransform.Microsoft.dropShadow (OffX\x3d'" + Math.round(mxConstants.SHADOW_OFFSET_X * this.scale) + "', OffY\x3d'" + Math.round(mxConstants.SHADOW_OFFSET_Y * - this.scale) + "', Color\x3d'" + mxConstants.SHADOWCOLOR + "')"); - if (this.gradient) { - var c = this.fill, - d = this.gradient, - e = "0", - f = { - east: 0, - south: 1, - west: 2, - north: 3 - }, - g = null != this.direction ? f[this.direction] : 0; - null != - this.gradientDirection && (g = mxUtils.mod(g + f[this.gradientDirection] - 1, 4)); - 1 == g ? (e = "1", f = c, c = d, d = f) : 2 == g ? (f = c, c = d, d = f) : 3 == g && (e = "1"); - b += "progid:DXImageTransform.Microsoft.gradient(startColorStr\x3d'" + c + "', endColorStr\x3d'" + d + "', gradientType\x3d'" + e + "')" - } - a.style.filter = b -}; - -function mxEllipse(a, b, c, d) { - mxShape.call(this); - this.bounds = a; - this.fill = b; - this.stroke = c; - this.strokewidth = null != d ? d : 1 -} -mxUtils.extend(mxEllipse, mxShape); -mxEllipse.prototype.paintVertexShape = function(a, b, c, d, e) { - a.ellipse(b, c, d, e); - a.fillAndStroke() -}; - -function mxDoubleEllipse(a, b, c, d) { - mxShape.call(this); - this.bounds = a; - this.fill = b; - this.stroke = c; - this.strokewidth = null != d ? d : 1 -} -mxUtils.extend(mxDoubleEllipse, mxShape); -mxDoubleEllipse.prototype.vmlScale = 10; -mxDoubleEllipse.prototype.paintBackground = function(a, b, c, d, e) { - a.ellipse(b, c, d, e); - a.fillAndStroke() -}; -mxDoubleEllipse.prototype.paintForeground = function(a, b, c, d, e) { - var f = Math.min(4, Math.min(d / 5, e / 5)); - d -= 2 * f; - e -= 2 * f; - 0 < d && 0 < e && a.ellipse(b + f, c + f, d, e); - a.stroke() -}; - -function mxRhombus(a, b, c, d) { - mxShape.call(this); - this.bounds = a; - this.fill = b; - this.stroke = c; - this.strokewidth = null != d ? d : 1 -} -mxUtils.extend(mxRhombus, mxShape); -mxRhombus.prototype.paintVertexShape = function(a, b, c, d, e) { - var f = d / 2, - g = e / 2; - a.begin(); - a.moveTo(b + f, c); - a.lineTo(b + d, c + g); - a.lineTo(b + f, c + e); - a.lineTo(b, c + g); - a.close(); - a.fillAndStroke() -}; - -function mxPolyline(a, b, c) { - mxShape.call(this); - this.points = a; - this.stroke = b; - this.strokewidth = null != c ? c : 1 -} -mxUtils.extend(mxPolyline, mxShape); -mxPolyline.prototype.getRotation = function() { - return 0 -}; -mxPolyline.prototype.paintEdgeShape = function(a, b) { - this.paintLine(a, b, this.isRounded) -}; -mxPolyline.prototype.paintLine = function(a, b, c) { - var d = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE, mxConstants.LINE_ARCSIZE) / 2, - e = b[0], - f = b[b.length - 1]; - a.begin(); - a.moveTo(e.x, e.y); - for (var g = 1; g < b.length - 1; g++) { - var h = b[g], - k = e.x - h.x, - e = e.y - h.y; - if (c && g < b.length - 1 && (0 != k || 0 != e)) { - var l = Math.sqrt(k * k + e * e), - k = k * Math.min(d, l / 2) / l, - e = e * Math.min(d, l / 2) / l; - a.lineTo(h.x + k, h.y + e); - e = b[g + 1]; - k = e.x - h.x; - e = e.y - h.y; - l = Math.max(1, Math.sqrt(k * k + e * e)); - k = k * Math.min(d, l / 2) / l; - e = e * Math.min(d, l / 2) / l; - k = h.x + k; - e = h.y + e; - a.quadTo(h.x, - h.y, k, e); - h = new mxPoint(k, e) - } else a.lineTo(h.x, h.y); - e = h - } - a.lineTo(f.x, f.y); - a.stroke() -}; - -function mxArrow(a, b, c, d, e, f, g) { - mxShape.call(this); - this.points = a; - this.fill = b; - this.stroke = c; - this.strokewidth = null != d ? d : 1; - this.arrowWidth = null != e ? e : mxConstants.ARROW_WIDTH; - this.spacing = null != f ? f : mxConstants.ARROW_SPACING; - this.endSize = null != g ? g : mxConstants.ARROW_SIZE -} -mxUtils.extend(mxArrow, mxShape); -mxArrow.prototype.paintEdgeShape = function(a, b) { - var c = mxConstants.ARROW_SPACING, - d = mxConstants.ARROW_WIDTH, - e = mxConstants.ARROW_SIZE, - f = b[0], - g = b[b.length - 1], - h = g.x - f.x, - k = g.y - f.y, - l = Math.sqrt(h * h + k * k), - m = l - 2 * c - e, - h = h / l, - k = k / l, - l = d * k / 3, - d = -d * h / 3, - e = f.x - l / 2 + c * h, - f = f.y - d / 2 + c * k, - n = e + l, - p = f + d, - q = n + m * h, - m = p + m * k, - s = q + l, - r = m + d, - t = s - 3 * l, - v = r - 3 * d; - a.begin(); - a.moveTo(e, f); - a.lineTo(n, p); - a.lineTo(q, m); - a.lineTo(s, r); - a.lineTo(g.x - c * h, g.y - c * k); - a.lineTo(t, v); - a.lineTo(t + l, v + d); - a.close(); - a.fillAndStroke() -}; - -function mxText(a, b, c, d, e, f, g, h, k, l, m, n, p, q, s, r, t, v, w, u) { - mxShape.call(this); - this.value = a; - this.bounds = b; - this.color = null != e ? e : "black"; - this.align = null != c ? c : ""; - this.valign = null != d ? d : ""; - this.family = null != f ? f : mxConstants.DEFAULT_FONTFAMILY; - this.size = null != g ? g : mxConstants.DEFAULT_FONTSIZE; - this.fontStyle = null != h ? h : mxConstants.DEFAULT_FONTSTYLE; - this.spacing = parseInt(k || 2); - this.spacingTop = this.spacing + parseInt(l || 0); - this.spacingRight = this.spacing + parseInt(m || 0); - this.spacingBottom = this.spacing + parseInt(n || 0); - this.spacingLeft = this.spacing + parseInt(p || 0); - this.horizontal = null != q ? q : !0; - this.background = s; - this.border = r; - this.wrap = null != t ? t : !1; - this.clipped = null != v ? v : !1; - this.overflow = null != w ? w : "visible"; - this.labelPadding = null != u ? u : 0; - this.rotation = 0 -} -mxUtils.extend(mxText, mxShape); -mxText.prototype.baseSpacingTop = 0; -mxText.prototype.baseSpacingBottom = 0; -mxText.prototype.baseSpacingLeft = 0; -mxText.prototype.baseSpacingRight = 0; -mxText.prototype.replaceLinefeeds = !0; -mxText.prototype.verticalTextRotation = -90; -mxText.prototype.ignoreClippedStringSize = !0; -mxText.prototype.ignoreStringSize = !1; -mxText.prototype.isParseVml = function() { - return !1 -}; -mxText.prototype.isHtmlAllowed = function() { - return 8 != document.documentMode -}; -mxText.prototype.getSvgScreenOffset = function() { - return 0 -}; -mxText.prototype.checkBounds = function() { - return null != this.bounds && !isNaN(this.bounds.x) && !isNaN(this.bounds.y) && !isNaN(this.bounds.width) && !isNaN(this.bounds.height) -}; -mxText.prototype.updateBoundingBox = function() { - var a = this.node; - 8 == document.documentMode && null != a.firstChild && (a = a.firstChild, null != a.firstChild && (a = a.firstChild)); - this.boundingBox = this.bounds.clone(); - var b = this.getTextRotation(); - if (!this.ignoreStringSize && null != a && "fill" != this.overflow && (!this.clipped || !this.ignoreClippedStringSize)) { - var c = null, - d = null; - if (null != a.ownerSVGElement) - if (null != a.firstChild && null != a.firstChild.firstChild && "foreignObject" == a.firstChild.firstChild.nodeName) a = a.firstChild.firstChild, - c = this.wrap ? this.bounds.width : parseInt(a.getAttribute("width")) * this.scale, d = parseInt(a.getAttribute("height")) * this.scale; - else { - b = a.getBBox(); - if (0 == b.width && 0 == b.height) return; - this.boundingBox = new mxRectangle(b.x, b.y, b.width, b.height); - b = 0 - } else d = this.state.view.textDiv, null != this.offsetWidth && null != this.offsetHeight ? (c = this.wrap ? this.bounds.width : this.offsetWidth * this.scale, d = this.offsetHeight * this.scale) : - null != d ? (this.updateFont(d), this.updateSize(d), mxUtils.isNode(this.value) ? d.innerHTML = this.value.outerHTML : - (c = this.replaceLinefeeds ? this.value.replace(/\n/g, "\x3cbr/\x3e") : this.value, d.innerHTML = c), c = this.wrap ? this.bounds.width : d.offsetWidth * this.scale, d = d.offsetHeight * - this.scale) : (c = this.wrap ? this.bounds.width : a.offsetWidth * this.scale, d = a.offsetHeight * this.scale); - null != c && null != d && (this.boundingBox = new mxRectangle(this.bounds.x + this.margin.x * c, this.bounds.y + this.margin.y * d, c, d)) - } else this.boundingBox.x += this.margin.x * this.boundingBox.width, this.boundingBox.y += this.margin.y * this.boundingBox.height; - null != - this.boundingBox && (0 != b && (b = mxUtils.getBoundingBox(this.boundingBox, b), this.boundingBox.x = b.x, this.boundingBox.y = b.y, mxClient.IS_QUIRKS || (this.boundingBox.width = b.width, - this.boundingBox.height = b.height)), this.boundingBox.x = Math.floor(this.boundingBox.x), this.boundingBox.y = Math.floor(this.boundingBox.y), this.boundingBox.width = Math.ceil(this.boundingBox - .width), this.boundingBox.height = Math.ceil(this.boundingBox.height)) -}; -mxText.prototype.getShapeRotation = function() { - return 0 -}; -mxText.prototype.getTextRotation = function() { - return null != this.state && null != this.state.shape ? this.state.shape.getTextRotation() : 0 -}; -mxText.prototype.isPaintBoundsInverted = function() { - return !this.horizontal && null != this.state && this.state.view.graph.model.isVertex(this.state.cell) -}; -mxText.prototype.configureCanvas = function(a, b, c, d, e) { - mxShape.prototype.configureCanvas.apply(this, arguments); - a.setFontColor(this.color); - a.setFontBackgroundColor(this.background); - a.setFontBorderColor(this.border); - a.setFontFamily(this.family); - a.setFontSize(this.size); - a.setFontStyle(this.fontStyle) -}; -mxText.prototype.updateVmlContainer = function() { - this.node.style.left = Math.round(this.bounds.x) + "px"; - this.node.style.top = Math.round(this.bounds.y) + "px"; - this.node.style.width = "1px"; - this.node.style.height = "1px"; - this.node.style.overflow = "visible" -}; -mxText.prototype.paint = function(a) { - var b = this.scale, - c = this.bounds.x / b, - d = this.bounds.y / b, - e = this.bounds.width / b, - b = this.bounds.height / b; - this.updateTransform(a, c, d, e, b); - this.configureCanvas(a, c, d, e, b); - var f = mxUtils.isNode(this.value) || this.dialect == mxConstants.DIALECT_STRICTHTML, - g = f || a instanceof mxVmlCanvas2D ? "html" : "", - h = this.value; - !f && "html" == g && (h = mxUtils.htmlEntities(h, !1)); - h = !mxUtils.isNode(this.value) && this.replaceLinefeeds && "html" == g ? h.replace(/\n/g, "\x3cbr/\x3e") : h; - a.text(c, d, e, b, h, this.align, - this.valign, this.wrap, g, "fill" == this.overflow, this.clipped, this.getTextRotation()) -}; -mxText.prototype.redrawHtmlShape = function() { - var a = this.node.style; - a.opacity = 1 > this.opacity ? this.opacity : ""; - a.overflow = ""; - a.width = ""; - a.height = ""; - this.updateFont(this.node); - this.updateSize(this.node); - this.updateValue(); - this.offsetHeight = this.offsetWidth = null; - null != mxClient.CSS_PREFIX ? this.updateHtmlTransform() : this.updateHtmlFilter() -}; -mxText.prototype.updateHtmlTransform = function() { - var a = this.getTextRotation(), - b = this.node.style, - c = this.margin.x, - d = this.margin.y; - 0 != a ? (b[mxClient.CSS_PREFIX + "TransformOrigin"] = 100 * -c + "% " + 100 * -d + "%", b[mxClient.CSS_PREFIX + "Transform"] = "translate(" + 100 * c + "%," + 100 * d + "%)scale(" + this.scale + - ") rotate(" + a + "deg)") : (b[mxClient.CSS_PREFIX + "TransformOrigin"] = "0% 0%", b[mxClient.CSS_PREFIX + "Transform"] = "scale(" + this.scale + ")translate(" + 100 * c + "%," + 100 * d + - "%)"); - b.left = Math.round(this.bounds.x) + "px"; - b.top = Math.round(this.bounds.y) + - "px" -}; -mxText.prototype.updateHtmlFilter = function() { - var a = this.node.style, - b = this.margin.x, - c = this.margin.y, - d = this.scale; - a.filter = ""; - var e = 0, - f = 0, - g = null != this.state ? this.state.view.textDiv : null; - if (null != g) { - g.style.overflow = ""; - g.style.height = ""; - g.style.width = ""; - this.updateFont(g); - this.updateSize(g); - if (mxUtils.isNode(this.value)) g.innerHTML = this.value.outerHTML; - else { - var h = this.value; - this.dialect != mxConstants.DIALECT_STRICTHTML && (h = mxUtils.htmlEntities(h, !1)); - h = this.replaceLinefeeds ? h.replace(/\n/g, "\x3cbr/\x3e") : h; - g.innerHTML = h - } - e = g.offsetWidth + 2; - f = g.offsetHeight + 2 - } else e = this.node.offsetWidth, f = this.node.offsetHeight + 1; - this.offsetWidth = e; - this.offsetHeight = f; - g = this.bounds.width / d; - h = this.bounds.height / d; - mxClient.IS_QUIRKS && (this.clipped || "fill" == this.overflow) && 0 < h ? (h = Math.min(h, f), a.height = Math.round(h + 1) + "px") : h = f; - "fill" != this.overflow && (mxClient.IS_QUIRKS && (this.clipped || this.wrap) && 0 < g ? (g = Math.min(g, e), a.width = Math.round(g) + "px") : g = e); - var h = h * d, - g = g * d, - e = this.getTextRotation() * (Math.PI / 180), - f = parseFloat(parseFloat(Math.cos(e)).toFixed(8)), - k = parseFloat(parseFloat(Math.sin(-e)).toFixed(8)), - e = e % (2 * Math.PI); - 0 > e && (e += 2 * Math.PI); - e %= Math.PI; - e > Math.PI / 2 && (e = Math.PI - e); - var l = Math.cos(e), - m = Math.sin(-e), - b = g * -(b + 0.5), - c = h * -(c + 0.5), - n = (h - h * l + g * m) / 2 + k * b - f * c; - 0 != e && (a.filter = "progid:DXImageTransform.Microsoft.Matrix(M11\x3d" + f + ", M12\x3d" + k + ", M21\x3d" + -k + ", M22\x3d" + f + ", sizingMethod\x3d'auto expand')"); - a.zoom = d; - a.left = Math.round(this.bounds.x + ((g - g * l + h * m) / 2 - f * b - k * c) - g / 2) + "px"; - a.top = Math.round(this.bounds.y + n - h / 2) + "px" -}; -mxText.prototype.updateValue = function() { - if (mxUtils.isNode(this.value)) this.node.innerHTML = "", this.node.appendChild(this.value); - else { - var a = this.value; - this.dialect != mxConstants.DIALECT_STRICTHTML && (a = mxUtils.htmlEntities(a, !1)); - var a = this.replaceLinefeeds ? a.replace(/\n/g, "\x3cbr/\x3e") : a, - b = null != this.background && this.background != mxConstants.NONE ? this.background : null, - c = null != this.border && this.border != mxConstants.NONE ? this.border : null; - if (null != b || null != c) - if ("fill" == this.overflow) null != b && (this.node.style.backgroundColor = - b), null != c && (this.node.style.border = "1px solid " + c); - else { - var d = ""; - null != b && (d += "background-color:" + b + ";"); - null != c && (d += "border:1px solid " + c + ";"); - a = '\x3cdiv style\x3d"zoom:1;' + d + "display:inline-block;_display:inline;padding-bottom:1px;padding-right:1px;line-height:" + this.node.style.lineHeight + '"\x3e' + a + "\x3c/div\x3e"; - this.node.style.lineHeight = "" - } - this.node.innerHTML = a - } -}; -mxText.prototype.updateFont = function(a) { - a = a.style; - a.lineHeight = Math.round(this.size * mxConstants.LINE_HEIGHT) + "px"; - a.fontSize = Math.round(this.size) + "px"; - a.fontFamily = this.family; - a.verticalAlign = "top"; - a.color = this.color; - a.fontWeight = (this.fontStyle & mxConstants.FONT_BOLD) == mxConstants.FONT_BOLD ? "bold" : ""; - a.fontStyle = (this.fontStyle & mxConstants.FONT_ITALIC) == mxConstants.FONT_ITALIC ? "italic" : ""; - a.fontDecoration = (this.fontStyle & mxConstants.FONT_UNDERLINE) == mxConstants.FONT_UNDERLINE ? "underline" : ""; - a.textAlign = - this.align == mxConstants.ALIGN_CENTER ? "center" : this.align == mxConstants.ALIGN_RIGHT ? "right" : "left" -}; -mxText.prototype.updateSize = function(a) { - var b = Math.round(this.bounds.width / this.scale), - c = Math.round(this.bounds.height / this.scale); - a = a.style; - this.clipped ? (a.overflow = "hidden", 0 < c && (a.maxHeight = c + "px"), 0 < b && (a.width = b + "px")) : "fill" == this.overflow && (a.width = b + "px", 0 < c && (a.maxHeight = c + "px")); - this.wrap ? (!this.clipped && 0 < b && (a.width = b + "px"), a.whiteSpace = "normal") : a.whiteSpace = "nowrap" -}; -mxText.prototype.updateMargin = function() { - this.margin = mxUtils.getAlignmentAsPoint(this.align, this.valign) -}; -mxText.prototype.getSpacing = function() { - var a = 0, - b = 0, - a = this.align == mxConstants.ALIGN_CENTER ? (this.spacingLeft - this.spacingRight) / 2 : this.align == mxConstants.ALIGN_RIGHT ? -this.spacingRight - this.baseSpacingRight : this.spacingLeft + - this.baseSpacingLeft, - b = this.valign == mxConstants.ALIGN_MIDDLE ? (this.spacingTop - this.spacingBottom) / 2 : this.valign == mxConstants.ALIGN_BOTTOM ? -this.spacingBottom - this.baseSpacingBottom : this.spacingTop + - this.baseSpacingTop; - return new mxPoint(a, b) -}; - -function mxTriangle() { - mxActor.call(this) -} -mxUtils.extend(mxTriangle, mxActor); -mxTriangle.prototype.redrawPath = function(a, b, c, d, e) { - a.moveTo(0, 0); - a.lineTo(d, 0.5 * e); - a.lineTo(0, e); - a.close() -}; - -function mxHexagon() { - mxActor.call(this) -} -mxUtils.extend(mxHexagon, mxActor); -mxHexagon.prototype.redrawPath = function(a, b, c, d, e) { - a.moveTo(0.25 * d, 0); - a.lineTo(0.75 * d, 0); - a.lineTo(d, 0.5 * e); - a.lineTo(0.75 * d, e); - a.lineTo(0.25 * d, e); - a.lineTo(0, 0.5 * e); - a.close() -}; - -function mxLine(a, b, c) { - mxShape.call(this); - this.bounds = a; - this.stroke = b; - this.strokewidth = null != c ? c : 1 -} -mxUtils.extend(mxLine, mxShape); -mxLine.prototype.paintVertexShape = function(a, b, c, d, e) { - c += e / 2; - a.begin(); - a.moveTo(b, c); - a.lineTo(b + d, c); - a.stroke() -}; - -function mxImageShape(a, b, c, d, e) { - mxShape.call(this); - this.bounds = a; - this.image = b; - this.fill = c; - this.stroke = d; - this.strokewidth = null != e ? e : 1; - this.shadow = !1 -} -mxUtils.extend(mxImageShape, mxRectangleShape); -mxImageShape.prototype.preserveImageAspect = !0; -mxImageShape.prototype.getSvgScreenOffset = function() { - return !mxClient.IS_IE ? 0.5 : 0 -}; -mxImageShape.prototype.apply = function(a) { - mxShape.prototype.apply.apply(this, arguments); - this.gradient = this.stroke = this.fill = null; - null != this.style && (this.fill = mxUtils.getValue(this.style, mxConstants.STYLE_IMAGE_BACKGROUND), this.stroke = mxUtils.getValue(this.style, mxConstants.STYLE_IMAGE_BORDER), this.preserveImageAspect = - 1 == mxUtils.getNumber(this.style, mxConstants.STYLE_IMAGE_ASPECT, 1), this.flipH = this.flipH || 1 == mxUtils.getValue(this.style, "imageFlipH", 0), this.flipV = this.flipV || 1 == mxUtils.getValue( - this.style, - "imageFlipV", 0)) -}; -mxImageShape.prototype.isHtmlAllowed = function() { - return !this.preserveImageAspect -}; -mxImageShape.prototype.createHtml = function() { - var a = document.createElement("div"); - a.style.position = "absolute"; - return a -}; -mxImageShape.prototype.paintVertexShape = function(a, b, c, d, e) { - if (null != this.image) { - var f = mxUtils.getValue(this.style, mxConstants.STYLE_IMAGE_BACKGROUND, null), - g = mxUtils.getValue(this.style, mxConstants.STYLE_IMAGE_BORDER, null); - if (null != f || null != g) a.setFillColor(f), a.setStrokeColor(g), a.rect(b, c, d, e), a.fillAndStroke(); - a.image(b, c, d, e, this.image, this.preserveImageAspect, !1, !1) - } else mxRectangleShape.prototype.paintBackground.apply(this, arguments) -}; -mxImageShape.prototype.redrawHtmlShape = function() { - this.node.style.left = Math.round(this.bounds.x) + "px"; - this.node.style.top = Math.round(this.bounds.y) + "px"; - this.node.style.width = Math.max(0, Math.round(this.bounds.width)) + "px"; - this.node.style.height = Math.max(0, Math.round(this.bounds.height)) + "px"; - this.node.style.backgroundColor = this.fill || ""; - this.node.style.borderColor = this.stroke || ""; - this.node.innerHTML = ""; - if (null != this.image) { - var a = document.createElement(mxClient.IS_IE6 || null == mxClient.CSS_PREFIX && 0 != - this.rotation ? mxClient.VML_PREFIX + ":image" : "img"); - a.style.position = "absolute"; - a.src = this.image; - var b = 100 > this.opacity ? "alpha(opacity\x3d" + this.opacity + ")" : ""; - this.node.style.filter = b; - this.flipH && this.flipV ? b += "progid:DXImageTransform.Microsoft.BasicImage(rotation\x3d2)" : this.flipH ? b += "progid:DXImageTransform.Microsoft.BasicImage(mirror\x3d1)" : this.flipV && (b += - "progid:DXImageTransform.Microsoft.BasicImage(rotation\x3d2, mirror\x3d1)"); - a.style.filter != b && (a.style.filter = b); - "image" == a.nodeName ? a.style.rotation = - this.rotation : a.style[mxClient.CSS_PREFIX + "Transform"] = "rotate(" + this.rotation + "deg)"; - a.style.width = this.node.style.width; - a.style.height = this.node.style.height; - this.node.style.backgroundImage = ""; - this.node.appendChild(a) - } else this.setTransparentBackgroundImage(this.node) -}; - -function mxLabel(a, b, c, d) { - mxRectangleShape.call(this, a, b, c, d) -} -mxUtils.extend(mxLabel, mxRectangleShape); -mxLabel.prototype.imageSize = mxConstants.DEFAULT_IMAGESIZE; -mxLabel.prototype.spacing = 2; -mxLabel.prototype.indicatorSize = 10; -mxLabel.prototype.indicatorSpacing = 2; -mxLabel.prototype.init = function(a) { - mxShape.prototype.init.apply(this, arguments); - null != this.indicatorColor && null != this.indicatorShape && (this.indicator = new this.indicatorShape, this.indicator.dialect = this.dialect, this.indicator.bounds = this.bounds, this.indicator - .fill = this.indicatorColor, this.indicator.stroke = this.indicatorColor, this.indicator.gradient = this.indicatorGradientColor, this.indicator.direction = this.indicatorDirection, this.indicator - .init(this.node)) -}; -mxLabel.prototype.redraw = function() { - null != this.indicator && (this.indicator.fill = this.indicatorColor, this.indicator.stroke = this.indicatorColor, this.indicator.gradient = this.indicatorGradientColor, this.indicator.direction = - this.indicatorDirection); - mxShape.prototype.redraw.apply(this, arguments) -}; -mxLabel.prototype.isHtmlAllowed = function() { - return mxRectangleShape.prototype.isHtmlAllowed.apply(this, arguments) && null == this.indicatorColor && null == this.indicatorShape -}; -mxLabel.prototype.paintForeground = function(a, b, c, d, e) { - this.paintImage(a, b, c, d, e); - this.paintIndicator(a, b, c, d, e); - mxRectangleShape.prototype.paintForeground.apply(this, arguments) -}; -mxLabel.prototype.paintImage = function(a, b, c, d, e) { - null != this.image && (b = this.getImageBounds(b, c, d, e), a.image(b.x, b.y, b.width, b.height, this.image, !1, !1, !1)) -}; -mxLabel.prototype.getImageBounds = function(a, b, c, d) { - var e = mxUtils.getValue(this.style, mxConstants.STYLE_IMAGE_ALIGN, mxConstants.ALIGN_LEFT), - f = mxUtils.getValue(this.style, mxConstants.STYLE_IMAGE_VERTICAL_ALIGN, mxConstants.ALIGN_MIDDLE), - g = mxUtils.getNumber(this.style, mxConstants.STYLE_IMAGE_WIDTH, mxConstants.DEFAULT_IMAGESIZE), - h = mxUtils.getNumber(this.style, mxConstants.STYLE_IMAGE_HEIGHT, mxConstants.DEFAULT_IMAGESIZE), - k = mxUtils.getNumber(this.style, mxConstants.STYLE_SPACING, this.spacing) + 5; - a = e == mxConstants.ALIGN_CENTER ? - a + (c - g) / 2 : e == mxConstants.ALIGN_RIGHT ? a + (c - g - k) : a + k; - b = f == mxConstants.ALIGN_TOP ? b + k : f == mxConstants.ALIGN_BOTTOM ? b + (d - h - k) : b + (d - h) / 2; - return new mxRectangle(a, b, g, h) -}; -mxLabel.prototype.paintIndicator = function(a, b, c, d, e) { - null != this.indicator ? (this.indicator.bounds = this.getIndicatorBounds(b, c, d, e), this.indicator.paint(a)) : null != this.indicatorImage && (b = this.getIndicatorBounds(b, c, d, e), a.image( - b.x, b.y, b.width, b.height, this.indicatorImage, !1, !1, !1)) -}; -mxLabel.prototype.getIndicatorBounds = function(a, b, c, d) { - var e = mxUtils.getValue(this.style, mxConstants.STYLE_IMAGE_ALIGN, mxConstants.ALIGN_LEFT), - f = mxUtils.getValue(this.style, mxConstants.STYLE_IMAGE_VERTICAL_ALIGN, mxConstants.ALIGN_MIDDLE), - g = mxUtils.getNumber(this.style, mxConstants.STYLE_INDICATOR_WIDTH, this.indicatorSize), - h = mxUtils.getNumber(this.style, mxConstants.STYLE_INDICATOR_HEIGHT, this.indicatorSize), - k = this.spacing + 5; - a = e == mxConstants.ALIGN_RIGHT ? a + (c - g - k) : e == mxConstants.ALIGN_CENTER ? a + (c - g) / - 2 : a + k; - b = f == mxConstants.ALIGN_BOTTOM ? b + (d - h - k) : f == mxConstants.ALIGN_TOP ? b + k : b + (d - h) / 2; - return new mxRectangle(a, b, g, h) -}; -mxLabel.prototype.redrawHtmlShape = function() { - for (mxRectangleShape.prototype.redrawHtmlShape.apply(this, arguments); this.node.hasChildNodes();) this.node.removeChild(this.node.lastChild); - if (null != this.image) { - var a = document.createElement("img"); - a.style.position = "relative"; - a.setAttribute("border", "0"); - var b = this.getImageBounds(this.bounds.x, this.bounds.y, this.bounds.width, this.bounds.height); - b.x -= this.bounds.x; - b.y -= this.bounds.y; - a.style.left = Math.round(b.x) + "px"; - a.style.top = Math.round(b.y) + "px"; - a.style.width = - Math.round(b.width) + "px"; - a.style.height = Math.round(b.height) + "px"; - a.src = this.image; - this.node.appendChild(a) - } -}; - -function mxCylinder(a, b, c, d) { - mxShape.call(this); - this.bounds = a; - this.fill = b; - this.stroke = c; - this.strokewidth = null != d ? d : 1 -} -mxUtils.extend(mxCylinder, mxShape); -mxCylinder.prototype.maxHeight = 40; -mxCylinder.prototype.svgStrokeTolerance = 0; -mxCylinder.prototype.paintVertexShape = function(a, b, c, d, e) { - a.translate(b, c); - a.begin(); - this.redrawPath(a, b, c, d, e, !1); - a.fillAndStroke(); - a.setShadow(!1); - a.begin(); - this.redrawPath(a, b, c, d, e, !0); - a.stroke() -}; -mxCylinder.prototype.redrawPath = function(a, b, c, d, e, f) { - b = Math.min(this.maxHeight, Math.round(e / 5)); - if (f && null != this.fill || !f && null == this.fill) a.moveTo(0, b), a.curveTo(0, 2 * b, d, 2 * b, d, b), f || (a.stroke(), a.begin()); - f || (a.moveTo(0, b), a.curveTo(0, -b / 3, d, -b / 3, d, b), a.lineTo(d, e - b), a.curveTo(d, e + b / 3, 0, e + b / 3, 0, e - b), a.close()) -}; - -function mxConnector(a, b, c) { - mxPolyline.call(this, a, b, c) -} -mxUtils.extend(mxConnector, mxPolyline); -mxConnector.prototype.paintEdgeShape = function(a, b) { - var c = this.createMarker(a, b, !0), - d = this.createMarker(a, b, !1); - null == this.style || 1 != this.style[mxConstants.STYLE_CURVED] ? this.paintLine(a, b, this.isRounded) : this.paintCurvedLine(a, b); - a.setFillColor(this.stroke); - a.setShadow(!1); - a.setDashed(!1); - null != c && c(); - null != d && d() -}; -mxConnector.prototype.paintCurvedLine = function(a, b) { - a.begin(); - var c = b[0], - d = b.length; - a.moveTo(c.x, c.y); - for (c = 1; c < d - 2; c++) { - var e = b[c], - f = b[c + 1]; - a.quadTo(e.x, e.y, (e.x + f.x) / 2, (e.y + f.y) / 2) - } - e = b[d - 2]; - f = b[d - 1]; - a.quadTo(e.x, e.y, f.x, f.y); - a.stroke() -}; -mxConnector.prototype.createMarker = function(a, b, c) { - var d = b.length, - e = c ? b[1] : b[d - 2]; - b = c ? b[0] : b[d - 1]; - var d = b.x - e.x, - f = b.y - e.y, - g = Math.max(1, Math.sqrt(d * d + f * f)), - e = d / g, - d = f / g, - f = mxUtils.getNumber(this.style, c ? mxConstants.STYLE_STARTSIZE : mxConstants.STYLE_ENDSIZE, mxConstants.DEFAULT_MARKERSIZE), - g = mxUtils.getValue(this.style, c ? mxConstants.STYLE_STARTARROW : mxConstants.STYLE_ENDARROW); - return mxMarker.createMarker(a, this, g, b, e, d, f, c, this.strokewidth, 0 != this.style[c ? mxConstants.STYLE_STARTFILL : mxConstants.STYLE_ENDFILL]) -}; -mxConnector.prototype.augmentBoundingBox = function(a) { - mxShape.prototype.augmentBoundingBox.apply(this, arguments); - var b = 0; - mxUtils.getValue(this.style, mxConstants.STYLE_STARTARROW, mxConstants.NONE) != mxConstants.NONE && (b = mxUtils.getNumber(this.style, mxConstants.STYLE_STARTSIZE, mxConstants.DEFAULT_MARKERSIZE) + - 1); - mxUtils.getValue(this.style, mxConstants.STYLE_ENDARROW, mxConstants.NONE) != mxConstants.NONE && (b = Math.max(b, mxUtils.getNumber(this.style, mxConstants.STYLE_ENDSIZE, mxConstants.DEFAULT_MARKERSIZE)) + - 1); - a.grow(Math.ceil(b * this.scale)) -}; - -function mxSwimlane(a, b, c, d) { - mxShape.call(this); - this.bounds = a; - this.fill = b; - this.stroke = c; - this.strokewidth = null != d ? d : 1 -} -mxUtils.extend(mxSwimlane, mxShape); -mxSwimlane.prototype.imageSize = 16; -mxSwimlane.prototype.getGradientBounds = function(a, b, c, d, e) { - a = Math.min(e, mxUtils.getValue(this.style, mxConstants.STYLE_STARTSIZE, mxConstants.DEFAULT_STARTSIZE)); - return new mxRectangle(b, c, d, a) -}; -mxSwimlane.prototype.getRotation = function() { - var a = mxShape.prototype.getRotation.apply(this, arguments); - 1 != mxUtils.getValue(this.style, mxConstants.STYLE_HORIZONTAL, 1) && (a += mxText.prototype.verticalTextRotation); - return a -}; -mxSwimlane.prototype.getTextRotation = function() { - return this.getRotation() -}; -mxSwimlane.prototype.isPaintBoundsInverted = function() { - return mxShape.prototype.isPaintBoundsInverted.apply(this, arguments) || 1 != mxUtils.getValue(this.style, mxConstants.STYLE_HORIZONTAL, 1) -}; -mxSwimlane.prototype.getArcSize = function(a, b, c) { - a = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE, 100 * mxConstants.RECTANGLE_ROUNDING_FACTOR) / 100; - return 3 * c * a -}; -mxSwimlane.prototype.paintVertexShape = function(a, b, c, d, e) { - var f = Math.min(e, mxUtils.getValue(this.style, mxConstants.STYLE_STARTSIZE, mxConstants.DEFAULT_STARTSIZE)), - g = mxUtils.getValue(this.style, mxConstants.STYLE_SWIMLANE_FILLCOLOR, mxConstants.NONE), - h = 1 == mxUtils.getValue(this.style, mxConstants.STYLE_SWIMLANE_LINE, 1), - k = 0; - a.translate(b, c); - this.isRounded ? (k = this.getArcSize(d, e, f), this.paintRoundedSwimlane(a, b, c, d, e, f, k, g, h)) : this.paintSwimlane(a, b, c, d, e, f, g, h); - g = mxUtils.getValue(this.style, mxConstants.STYLE_SEPARATORCOLOR, - mxConstants.NONE); - this.paintSeparator(a, d, f, e, g); - null != this.image && (e = this.getImageBounds(b, f, d, e), a.image(e.x - b, e.y - c, e.width, e.height, this.image, !1, !1, !1)); - this.glass && (a.setShadow(!1), this.paintGlassEffect(a, 0, 0, d, f, k)) -}; -mxSwimlane.prototype.paintSwimlane = function(a, b, c, d, e, f, g, h) { - g != mxConstants.NONE && (a.save(), a.setFillColor(g), a.rect(0, 0, d, e), a.fillAndStroke(), a.restore(), a.setShadow(!1)); - a.begin(); - a.moveTo(0, f); - a.lineTo(0, 0); - a.lineTo(d, 0); - a.lineTo(d, f); - h && a.close(); - a.fillAndStroke(); - f < e && g == mxConstants.NONE && (a.pointerEvents = !1, a.begin(), a.moveTo(0, f), a.lineTo(0, e), a.lineTo(d, e), a.lineTo(d, f), a.stroke()) -}; -mxSwimlane.prototype.paintRoundedSwimlane = function(a, b, c, d, e, f, g, h, k) { - h != mxConstants.NONE && (a.save(), a.setFillColor(h), a.roundrect(0, 0, d, e, g, g), a.fillAndStroke(), a.restore(), a.setShadow(!1)); - a.begin(); - a.moveTo(d, f); - a.lineTo(d, g); - a.quadTo(d, 0, d - Math.min(d / 2, g), 0); - a.lineTo(Math.min(d / 2, g), 0); - a.quadTo(0, 0, 0, g); - a.lineTo(0, f); - k && a.close(); - a.fillAndStroke(); - f < e && h == mxConstants.NONE && (a.pointerEvents = !1, a.begin(), a.moveTo(0, f), a.lineTo(0, e - g), a.quadTo(0, e, Math.min(d / 2, g), e), a.lineTo(d - Math.min(d / 2, g), e), - a.quadTo(d, e, d, e - g), a.lineTo(d, f), a.stroke()) -}; -mxSwimlane.prototype.paintSeparator = function(a, b, c, d, e) { - e != mxConstants.NONE && (a.setStrokeColor(e), a.setDashed(!0), a.begin(), a.moveTo(b, c), a.lineTo(b, d), a.stroke(), a.setDashed(!1)) -}; -mxSwimlane.prototype.getImageBounds = function(a, b, c, d) { - return new mxRectangle(a + c - this.imageSize, b, this.imageSize, this.imageSize) -}; - -function mxGraphLayout(a) { - this.graph = a -} -mxGraphLayout.prototype.graph = null; -mxGraphLayout.prototype.useBoundingBox = !0; -mxGraphLayout.prototype.parent = null; -mxGraphLayout.prototype.moveCell = function(a, b, c) {}; -mxGraphLayout.prototype.execute = function(a) {}; -mxGraphLayout.prototype.getGraph = function() { - return this.graph -}; -mxGraphLayout.prototype.getConstraint = function(a, b, c, d) { - c = this.graph.view.getState(b); - b = null != c ? c.style : this.graph.getCellStyle(b); - return null != b ? b[a] : null -}; -mxGraphLayout.traverse = function(a, b, c, d, e) { - if (null != c && null != a) { - b = null != b ? b : !0; - e = e || []; - var f = mxCellPath.create(a); - if (null == e[f] && (e[f] = a, d = c(a, d), null == d || d)) - if (d = this.graph.model.getEdgeCount(a), 0 < d) - for (f = 0; f < d; f++) { - var g = this.graph.model.getEdgeAt(a, f), - h = this.graph.model.getTerminal(g, !0) == a; - if (!b || h) h = this.graph.view.getVisibleTerminal(g, !h), this.traverse(h, b, c, g, e) - } - } -}; -mxGraphLayout.prototype.isVertexMovable = function(a) { - return this.graph.isCellMovable(a) -}; -mxGraphLayout.prototype.isVertexIgnored = function(a) { - return !this.graph.getModel().isVertex(a) || !this.graph.isCellVisible(a) -}; -mxGraphLayout.prototype.isEdgeIgnored = function(a) { - var b = this.graph.getModel(); - return !b.isEdge(a) || !this.graph.isCellVisible(a) || null == b.getTerminal(a, !0) || null == b.getTerminal(a, !1) -}; -mxGraphLayout.prototype.setEdgeStyleEnabled = function(a, b) { - this.graph.setCellStyles(mxConstants.STYLE_NOEDGESTYLE, b ? "0" : "1", [a]) -}; -mxGraphLayout.prototype.setOrthogonalEdge = function(a, b) { - this.graph.setCellStyles(mxConstants.STYLE_ORTHOGONAL, b ? "1" : "0", [a]) -}; -mxGraphLayout.prototype.getParentOffset = function(a) { - var b = new mxPoint; - if (null != a && a != this.parent) { - var c = this.graph.getModel(); - if (c.isAncestor(this.parent, a)) - for (var d = c.getGeometry(a); a != this.parent;) b.x += d.x, b.y += d.y, a = c.getParent(a), d = c.getGeometry(a) - } - return b -}; -mxGraphLayout.prototype.setEdgePoints = function(a, b) { - if (null != a) { - var c = this.graph.model, - d = c.getGeometry(a); - null == d ? (d = new mxGeometry, d.setRelative(!0)) : d = d.clone(); - if (null != this.parent && null != b) - for (var e = c.getParent(a), e = this.getParentOffset(e), f = 0; f < b.length; f++) b[f].x -= e.x, b[f].y -= e.y; - d.points = b; - c.setGeometry(a, d) - } -}; -mxGraphLayout.prototype.setVertexLocation = function(a, b, c) { - var d = this.graph.getModel(), - e = d.getGeometry(a), - f = null; - if (null != e) { - f = new mxRectangle(b, c, e.width, e.height); - if (this.useBoundingBox) { - var g = this.graph.getView().getState(a); - if (null != g && null != g.text && null != g.text.boundingBox) { - var h = this.graph.getView().scale, - k = g.text.boundingBox; - g.text.boundingBox.x < g.x && (b += (g.x - k.x) / h, f.width = k.width); - g.text.boundingBox.y < g.y && (c += (g.y - k.y) / h, f.height = k.height) - } - } - null != this.parent && (g = d.getParent(a), null != g && g != - this.parent && (g = this.getParentOffset(g), b -= g.x, c -= g.y)); - if (e.x != b || e.y != c) e = e.clone(), e.x = b, e.y = c, d.setGeometry(a, e) - } - return f -}; -mxGraphLayout.prototype.getVertexBounds = function(a) { - var b = this.graph.getModel().getGeometry(a); - if (this.useBoundingBox) { - var c = this.graph.getView().getState(a); - if (null != c && null != c.text && null != c.text.boundingBox) var d = this.graph.getView().scale, - e = c.text.boundingBox, - f = Math.max(c.x - e.x, 0) / d, - g = Math.max(c.y - e.y, 0) / d, - h = Math.max(e.x + e.width - (c.x + c.width), 0) / d, - c = Math.max(e.y + e.height - (c.y + c.height), 0) / d, - b = new mxRectangle(b.x - f, b.y - g, b.width + f + h, b.height + g + c) - } - null != this.parent && (a = this.graph.getModel().getParent(a), - b = b.clone(), null != a && a != this.parent && (a = this.getParentOffset(a), b.x += a.x, b.y += a.y)); - return new mxRectangle(b.x, b.y, b.width, b.height) -}; -mxGraphLayout.prototype.arrangeGroups = function(a, b) { - this.graph.getModel().beginUpdate(); - try { - for (var c = a.length - 1; 0 <= c; c--) { - var d = a[c], - e = this.graph.getChildVertices(d), - f = this.graph.getBoundingBoxFromGeometry(e), - g = this.graph.getCellGeometry(d), - h = 0, - k = 0; - if (this.graph.isSwimlane(d)) var l = this.graph.getStartSize(d), - h = l.width, - k = l.height; - null != f && null != g && (g = g.clone(), g.x = g.x + f.x - b - h, g.y = g.y + f.y - b - k, g.width = f.width + 2 * b + h, g.height = f.height + 2 * b + k, this.graph.getModel().setGeometry(d, - g), this.graph.moveCells(e, - b + h - f.x, b + k - f.y)) - } - } finally { - this.graph.getModel().endUpdate() - } -}; - -function mxStackLayout(a, b, c, d, e, f) { - mxGraphLayout.call(this, a); - this.horizontal = null != b ? b : !0; - this.spacing = null != c ? c : 0; - this.x0 = null != d ? d : 0; - this.y0 = null != e ? e : 0; - this.border = null != f ? f : 0 -} -mxStackLayout.prototype = new mxGraphLayout; -mxStackLayout.prototype.constructor = mxStackLayout; -mxStackLayout.prototype.horizontal = null; -mxStackLayout.prototype.spacing = null; -mxStackLayout.prototype.x0 = null; -mxStackLayout.prototype.y0 = null; -mxStackLayout.prototype.border = 0; -mxStackLayout.prototype.keepFirstLocation = !1; -mxStackLayout.prototype.fill = !1; -mxStackLayout.prototype.resizeParent = !1; -mxStackLayout.prototype.resizeLast = !1; -mxStackLayout.prototype.wrap = null; -mxStackLayout.prototype.isHorizontal = function() { - return this.horizontal -}; -mxStackLayout.prototype.moveCell = function(a, b, c) { - var d = this.graph.getModel(), - e = d.getParent(a), - f = this.isHorizontal(); - if (null != a && null != e) { - var g = 0, - h = 0, - k = d.getChildCount(e); - b = f ? b : c; - g = this.graph.getView().getState(e); - null != g && (b -= f ? g.x : g.y); - for (g = 0; g < k; g++) - if (c = d.getChildAt(e, g), c != a && (c = d.getGeometry(c), null != c)) { - c = f ? c.x + c.width / 2 : c.y + c.height / 2; - if (h < b && c > b) break; - h = c - } - f = e.getIndex(a); - f = Math.max(0, g - (g > f ? 1 : 0)); - d.add(e, a, f) - } -}; -mxStackLayout.prototype.getParentSize = function(a) { - var b = this.graph.getModel(), - c = b.getGeometry(a); - if (null != this.graph.container && (null == c && b.isLayer(a) || a == this.graph.getView().currentRoot)) c = new mxRectangle(0, 0, this.graph.container.offsetWidth - 1, this.graph.container.offsetHeight - - 1); - return c -}; -mxStackLayout.prototype.execute = function(a) { - if (null != a) { - var b = this.isHorizontal(), - c = this.graph.getModel(), - d = this.getParentSize(a), - e = 0; - null != d && (e = b ? d.height : d.width); - var e = e - (2 * this.spacing + 2 * this.border), - f = this.x0 + this.border, - g = this.y0 + this.border; - if (this.graph.isSwimlane(a)) { - var h = this.graph.getCellStyle(a), - k = mxUtils.getValue(h, mxConstants.STYLE_STARTSIZE, mxConstants.DEFAULT_STARTSIZE), - h = mxUtils.getValue(h, mxConstants.STYLE_HORIZONTAL, !0); - b == h && (e -= k); - b ? g += k : f += k - } - c.beginUpdate(); - try { - for (var k = 0, - h = null, l = c.getChildCount(a), m = 0; m < l; m++) { - var n = c.getChildAt(a, m); - if (!this.isVertexIgnored(n) && this.isVertexMovable(n)) { - var p = c.getGeometry(n); - if (null != p) { - p = p.clone(); - if (null != this.wrap && null != h && (b && h.x + h.width + p.width + 2 * this.spacing > this.wrap || !b && h.y + h.height + p.height + 2 * this.spacing > this.wrap)) h = null, b ? g += - k + this.spacing : f += k + this.spacing, k = 0; - k = Math.max(k, b ? p.height : p.width); - null != h ? b ? p.x = h.x + h.width + this.spacing : p.y = h.y + h.height + this.spacing : this.keepFirstLocation || (b ? p.x = f : p.y = g); - b ? p.y = g : p.x = f; - this.fill && 0 < e && (b ? p.height = e : p.width = e); - c.setGeometry(n, p); - h = p - } - } - } - this.resizeParent && null != d && null != h && !this.graph.isCellCollapsed(a) ? (d = d.clone(), b ? d.width = h.x + h.width + this.spacing : d.height = h.y + h.height + this.spacing, c.setGeometry( - a, d)) : this.resizeLast && (null != d && null != h) && (b ? h.width = d.width - h.x - this.spacing : h.height = d.height - h.y - this.spacing) - } finally { - c.endUpdate() - } - } -}; - -function mxPartitionLayout(a, b, c, d) { - mxGraphLayout.call(this, a); - this.horizontal = null != b ? b : !0; - this.spacing = c || 0; - this.border = d || 0 -} -mxPartitionLayout.prototype = new mxGraphLayout; -mxPartitionLayout.prototype.constructor = mxPartitionLayout; -mxPartitionLayout.prototype.horizontal = null; -mxPartitionLayout.prototype.spacing = null; -mxPartitionLayout.prototype.border = null; -mxPartitionLayout.prototype.resizeVertices = !0; -mxPartitionLayout.prototype.isHorizontal = function() { - return this.horizontal -}; -mxPartitionLayout.prototype.moveCell = function(a, b, c) { - c = this.graph.getModel(); - var d = c.getParent(a); - if (null != a && null != d) { - for (var e = 0, f = 0, g = c.getChildCount(d), e = 0; e < g; e++) { - var h = c.getChildAt(d, e), - h = this.getVertexBounds(h); - if (null != h) { - h = h.x + h.width / 2; - if (f < b && h > b) break; - f = h - } - } - b = d.getIndex(a); - b = Math.max(0, e - (e > b ? 1 : 0)); - c.add(d, a, b) - } -}; -mxPartitionLayout.prototype.execute = function(a) { - var b = this.isHorizontal(), - c = this.graph.getModel(), - d = c.getGeometry(a); - if (null != this.graph.container && (null == d && c.isLayer(a) || a == this.graph.getView().currentRoot)) d = new mxRectangle(0, 0, this.graph.container.offsetWidth - 1, this.graph.container.offsetHeight - - 1); - if (null != d) { - for (var e = [], f = c.getChildCount(a), g = 0; g < f; g++) { - var h = c.getChildAt(a, g); - !this.isVertexIgnored(h) && this.isVertexMovable(h) && e.push(h) - } - f = e.length; - if (0 < f) { - var k = this.border, - l = this.border, - m = b ? - d.height : d.width, - m = m - 2 * this.border; - a = this.graph.isSwimlane(a) ? this.graph.getStartSize(a) : new mxRectangle; - m -= b ? a.height : a.width; - k += a.width; - l += a.height; - a = this.border + (f - 1) * this.spacing; - d = b ? (d.width - k - a) / f : (d.height - l - a) / f; - if (0 < d) { - c.beginUpdate(); - try { - for (g = 0; g < f; g++) { - var h = e[g], - n = c.getGeometry(h); - null != n && (n = n.clone(), n.x = k, n.y = l, b ? (this.resizeVertices && (n.width = d, n.height = m), k += d + this.spacing) : (this.resizeVertices && (n.height = d, n.width = m), l += - d + this.spacing), c.setGeometry(h, n)) - } - } finally { - c.endUpdate() - } - } - } - } -}; - -function mxCompactTreeLayout(a, b, c) { - mxGraphLayout.call(this, a); - this.horizontal = null != b ? b : !0; - this.invert = null != c ? c : !1 -} -mxCompactTreeLayout.prototype = new mxGraphLayout; -mxCompactTreeLayout.prototype.constructor = mxCompactTreeLayout; -mxCompactTreeLayout.prototype.horizontal = null; -mxCompactTreeLayout.prototype.invert = null; -mxCompactTreeLayout.prototype.resizeParent = !0; -mxCompactTreeLayout.prototype.groupPadding = 10; -mxCompactTreeLayout.prototype.parentsChanged = null; -mxCompactTreeLayout.prototype.moveTree = !1; -mxCompactTreeLayout.prototype.levelDistance = 10; -mxCompactTreeLayout.prototype.nodeDistance = 20; -mxCompactTreeLayout.prototype.resetEdges = !0; -mxCompactTreeLayout.prototype.prefHozEdgeSep = 5; -mxCompactTreeLayout.prototype.prefVertEdgeOff = 4; -mxCompactTreeLayout.prototype.minEdgeJetty = 8; -mxCompactTreeLayout.prototype.channelBuffer = 4; -mxCompactTreeLayout.prototype.edgeRouting = !0; -mxCompactTreeLayout.prototype.isVertexIgnored = function(a) { - return mxGraphLayout.prototype.isVertexIgnored.apply(this, arguments) || 0 == this.graph.getConnections(a).length -}; -mxCompactTreeLayout.prototype.isHorizontal = function() { - return this.horizontal -}; -mxCompactTreeLayout.prototype.execute = function(a, b) { - this.parent = a; - var c = this.graph.getModel(); - if (null == b) - if (0 < this.graph.getEdges(a, c.getParent(a), this.invert, !this.invert, !1).length) b = a; - else { - var d = this.graph.findTreeRoots(a, !0, this.invert); - if (0 < d.length) - for (var e = 0; e < d.length; e++) - if (!this.isVertexIgnored(d[e]) && 0 < this.graph.getEdges(d[e], null, this.invert, !this.invert, !1).length) { - b = d[e]; - break - } - } - if (null != b) { - this.parentsChanged = this.resizeParent ? {} : null; - c.beginUpdate(); - try { - var f = this.dfs(b, a); - if (null != - f) { - this.layout(f); - var g = this.graph.gridSize, - d = g; - if (!this.moveTree) { - var h = this.getVertexBounds(b); - null != h && (g = h.x, d = h.y) - } - h = null; - h = this.isHorizontal() ? this.horizontalLayout(f, g, d) : this.verticalLayout(f, null, g, d); - if (null != h) { - var k = e = 0; - 0 > h.x && (e = Math.abs(g - h.x)); - 0 > h.y && (k = Math.abs(d - h.y)); - (0 != e || 0 != k) && this.moveNode(f, e, k); - this.resizeParent && this.adjustParents(); - this.edgeRouting && this.localEdgeProcessing(f) - } - } - } finally { - c.endUpdate() - } - } -}; -mxCompactTreeLayout.prototype.moveNode = function(a, b, c) { - a.x += b; - a.y += c; - this.apply(a); - for (a = a.child; null != a;) this.moveNode(a, b, c), a = a.next -}; -mxCompactTreeLayout.prototype.dfs = function(a, b, c) { - c = null != c ? c : []; - var d = mxCellPath.create(a), - e = null; - if (null != a && null == c[d] && !this.isVertexIgnored(a)) { - c[d] = a; - var e = this.createNode(a), - d = this.graph.getModel(), - f = null; - a = this.graph.getEdges(a, b, this.invert, !this.invert, !1, !0); - for (var g = this.graph.getView(), h = 0; h < a.length; h++) { - var k = a[h]; - if (!this.isEdgeIgnored(k)) { - this.resetEdges && this.setEdgePoints(k, null); - this.edgeRouting && (this.setEdgeStyleEnabled(k, !1), this.setEdgePoints(k, null)); - var l = g.getState(k), - k = null != l ? l.getVisibleTerminal(this.invert) : g.getVisibleTerminal(k, this.invert), - l = this.dfs(k, b, c); - null != l && null != d.getGeometry(k) && (null == f ? e.child = l : f.next = l, f = l) - } - } - } - return e -}; -mxCompactTreeLayout.prototype.layout = function(a) { - if (null != a) { - for (var b = a.child; null != b;) this.layout(b), b = b.next; - null != a.child ? this.attachParent(a, this.join(a)) : this.layoutLeaf(a) - } -}; -mxCompactTreeLayout.prototype.horizontalLayout = function(a, b, c, d) { - a.x += b + a.offsetX; - a.y += c + a.offsetY; - d = this.apply(a, d); - b = a.child; - if (null != b) { - d = this.horizontalLayout(b, a.x, a.y, d); - c = a.y + b.offsetY; - for (var e = b.next; null != e;) d = this.horizontalLayout(e, a.x + b.offsetX, c, d), c += e.offsetY, e = e.next - } - return d -}; -mxCompactTreeLayout.prototype.verticalLayout = function(a, b, c, d, e) { - a.x += c + a.offsetY; - a.y += d + a.offsetX; - e = this.apply(a, e); - b = a.child; - if (null != b) { - e = this.verticalLayout(b, a, a.x, a.y, e); - c = a.x + b.offsetY; - for (d = b.next; null != d;) e = this.verticalLayout(d, a, c, a.y + b.offsetX, e), c += d.offsetY, d = d.next - } - return e -}; -mxCompactTreeLayout.prototype.attachParent = function(a, b) { - var c = this.nodeDistance + this.levelDistance, - d = (b - a.width) / 2 - this.nodeDistance, - e = d + a.width + 2 * this.nodeDistance - b; - a.child.offsetX = c + a.height; - a.child.offsetY = e; - a.contour.upperHead = this.createLine(a.height, 0, this.createLine(c, e, a.contour.upperHead)); - a.contour.lowerHead = this.createLine(a.height, 0, this.createLine(c, d, a.contour.lowerHead)) -}; -mxCompactTreeLayout.prototype.layoutLeaf = function(a) { - var b = 2 * this.nodeDistance; - a.contour.upperTail = this.createLine(a.height + b, 0); - a.contour.upperHead = a.contour.upperTail; - a.contour.lowerTail = this.createLine(0, -a.width - b); - a.contour.lowerHead = this.createLine(a.height + b, 0, a.contour.lowerTail) -}; -mxCompactTreeLayout.prototype.join = function(a) { - var b = 2 * this.nodeDistance, - c = a.child; - a.contour = c.contour; - for (var d = c.width + b, e = d, c = c.next; null != c;) { - var f = this.merge(a.contour, c.contour); - c.offsetY = f + d; - c.offsetX = 0; - d = c.width + b; - e += f + d; - c = c.next - } - return e -}; -mxCompactTreeLayout.prototype.merge = function(a, b) { - for (var c = 0, d = 0, e = 0, f = a.lowerHead, g = b.upperHead; null != g && null != f;) { - var h = this.offset(c, d, g.dx, g.dy, f.dx, f.dy), - d = d + h, - e = e + h; - c + g.dx <= f.dx ? (c += g.dx, d += g.dy, g = g.next) : (c -= f.dx, d -= f.dy, f = f.next) - } - null != g ? (c = this.bridge(a.upperTail, 0, 0, g, c, d), a.upperTail = null != c.next ? b.upperTail : c, a.lowerTail = b.lowerTail) : (c = this.bridge(b.lowerTail, c, d, f, 0, 0), null == c.next && - (a.lowerTail = c)); - a.lowerHead = b.lowerHead; - return e -}; -mxCompactTreeLayout.prototype.offset = function(a, b, c, d, e, f) { - var g = 0; - if (e <= a || 0 >= a + c) return 0; - g = 0 < e * d - c * f ? 0 > a ? a * d / c - b : 0 < a ? a * f / e - b : -b : e < a + c ? f - (b + (e - a) * d / c) : e > a + c ? (c + a) * f / e - (b + d) : f - (b + d); - return 0 < g ? g : 0 -}; -mxCompactTreeLayout.prototype.bridge = function(a, b, c, d, e, f) { - b = e + d.dx - b; - e = e = 0; - 0 == d.dx ? e = d.dy : (e = b * d.dy, e /= d.dx); - b = this.createLine(b, e, d.next); - a.next = this.createLine(0, f + d.dy - e - c, b); - return b -}; -mxCompactTreeLayout.prototype.createNode = function(a) { - var b = {}; - b.cell = a; - b.x = 0; - b.y = 0; - b.width = 0; - b.height = 0; - a = this.getVertexBounds(a); - null != a && (this.isHorizontal() ? (b.width = a.height, b.height = a.width) : (b.width = a.width, b.height = a.height)); - b.offsetX = 0; - b.offsetY = 0; - b.contour = {}; - return b -}; -mxCompactTreeLayout.prototype.apply = function(a, b) { - var c = this.graph.getModel(), - d = a.cell, - e = c.getGeometry(d); - null != d && null != e && (this.isVertexMovable(d) && (e = this.setVertexLocation(d, a.x, a.y), this.resizeParent && (c = c.getParent(d), d = mxCellPath.create(c), null == this.parentsChanged[d] && - (this.parentsChanged[d] = c))), b = null == b ? new mxRectangle(e.x, e.y, e.width, e.height) : new mxRectangle(Math.min(b.x, e.x), Math.min(b.y, e.y), Math.max(b.x + b.width, e.x + e.width), - Math.max(b.y + b.height, e.y + e.height))); - return b -}; -mxCompactTreeLayout.prototype.createLine = function(a, b, c) { - var d = {}; - d.dx = a; - d.dy = b; - d.next = c; - return d -}; -mxCompactTreeLayout.prototype.adjustParents = function() { - var a = [], - b; - for (b in this.parentsChanged) a.push(this.parentsChanged[b]); - this.arrangeGroups(mxUtils.sortCells(a, !0), this.groupPadding) -}; -mxCompactTreeLayout.prototype.localEdgeProcessing = function(a) { - this.processNodeOutgoing(a); - for (a = a.child; null != a;) this.localEdgeProcessing(a), a = a.next -}; -mxCompactTreeLayout.prototype.processNodeOutgoing = function(a) { - for (var b = a.child, c = a.cell, d = 0, e = []; null != b;) { - d++; - var f = b.x; - this.horizontal && (f = b.y); - e.push(new WeightedCellSorter(b, f)); - b = b.next - } - e.sort(WeightedCellSorter.prototype.compare); - var f = a.width, - g = (d + 1) * this.prefHozEdgeSep; - f > g + 2 * this.prefHozEdgeSep && (f -= 2 * this.prefHozEdgeSep); - a = f / d; - b = a / 2; - f > g + 2 * this.prefHozEdgeSep && (b += this.prefHozEdgeSep); - for (var f = this.minEdgeJetty - this.prefVertEdgeOff, g = 0, h = this.getVertexBounds(c), k = 0; k < e.length; k++) { - for (var l = - e[k].cell.cell, m = this.getVertexBounds(l), l = this.graph.getEdgesBetween(c, l, !1), n = [], p = 0, q = 0, s = 0; s < l.length; s++) this.horizontal ? (p = h.x + h.width, q = h.y + b, n.push( - new mxPoint(p, q)), p = h.x + h.width + f, n.push(new mxPoint(p, q)), q = m.y + m.height / 2) : (p = h.x + b, q = h.y + h.height, n.push(new mxPoint(p, q)), q = h.y + h.height + f, n.push( - new mxPoint(p, q)), p = m.x + m.width / 2), n.push(new mxPoint(p, q)), this.setEdgePoints(l[s], n); - k < d / 2 ? f += this.prefVertEdgeOff : k > d / 2 && (f -= this.prefVertEdgeOff); - b += a; - g = Math.max(g, f) - } -}; - -function WeightedCellSorter(a, b) { - this.cell = a; - this.weightedValue = b -} -WeightedCellSorter.prototype.weightedValue = 0; -WeightedCellSorter.prototype.nudge = !1; -WeightedCellSorter.prototype.visited = !1; -WeightedCellSorter.prototype.rankIndex = null; -WeightedCellSorter.prototype.cell = null; -WeightedCellSorter.prototype.compare = function(a, b) { - return null != a && null != b ? b.weightedValue > a.weightedValue ? 1 : b.weightedValue < a.weightedValue ? -1 : b.nudge ? 1 : -1 : 0 -}; - -function mxFastOrganicLayout(a) { - mxGraphLayout.call(this, a) -} -mxFastOrganicLayout.prototype = new mxGraphLayout; -mxFastOrganicLayout.prototype.constructor = mxFastOrganicLayout; -mxFastOrganicLayout.prototype.useInputOrigin = !0; -mxFastOrganicLayout.prototype.resetEdges = !0; -mxFastOrganicLayout.prototype.disableEdgeStyle = !0; -mxFastOrganicLayout.prototype.forceConstant = 50; -mxFastOrganicLayout.prototype.forceConstantSquared = 0; -mxFastOrganicLayout.prototype.minDistanceLimit = 2; -mxFastOrganicLayout.prototype.maxDistanceLimit = 500; -mxFastOrganicLayout.prototype.minDistanceLimitSquared = 4; -mxFastOrganicLayout.prototype.initialTemp = 200; -mxFastOrganicLayout.prototype.temperature = 0; -mxFastOrganicLayout.prototype.maxIterations = 0; -mxFastOrganicLayout.prototype.iteration = 0; -mxFastOrganicLayout.prototype.allowedToRun = !0; -mxFastOrganicLayout.prototype.isVertexIgnored = function(a) { - return mxGraphLayout.prototype.isVertexIgnored.apply(this, arguments) || 0 == this.graph.getConnections(a).length -}; -mxFastOrganicLayout.prototype.execute = function(a) { - var b = this.graph.getModel(); - this.vertexArray = []; - for (var c = this.graph.getChildVertices(a), d = 0; d < c.length; d++) this.isVertexIgnored(c[d]) || this.vertexArray.push(c[d]); - var e = this.useInputOrigin ? this.graph.view.getBounds(this.vertexArray) : null, - f = this.vertexArray.length; - this.indices = []; - this.dispX = []; - this.dispY = []; - this.cellLocation = []; - this.isMoveable = []; - this.neighbours = []; - this.radius = []; - this.radiusSquared = []; - 0.0010 > this.forceConstant && (this.forceConstant = - 0.0010); - this.forceConstantSquared = this.forceConstant * this.forceConstant; - for (d = 0; d < this.vertexArray.length; d++) { - var g = this.vertexArray[d]; - this.cellLocation[d] = []; - var h = mxCellPath.create(g); - this.indices[h] = d; - var k = this.getVertexBounds(g), - l = k.width, - m = k.height, - n = k.x, - p = k.y; - this.cellLocation[d][0] = n + l / 2; - this.cellLocation[d][1] = p + m / 2; - this.radius[d] = Math.min(l, m); - this.radiusSquared[d] = this.radius[d] * this.radius[d] - } - b.beginUpdate(); - try { - for (d = 0; d < f; d++) { - this.dispX[d] = 0; - this.dispY[d] = 0; - this.isMoveable[d] = this.isVertexMovable(this.vertexArray[d]); - var q = this.graph.getConnections(this.vertexArray[d], a), - c = this.graph.getOpposites(q, this.vertexArray[d]); - this.neighbours[d] = []; - for (l = 0; l < c.length; l++) { - this.resetEdges && this.graph.resetEdge(q[l]); - this.disableEdgeStyle && this.setEdgeStyleEnabled(q[l], !1); - var h = mxCellPath.create(c[l]), - s = this.indices[h]; - this.neighbours[d][l] = null != s ? s : d - } - } - this.temperature = this.initialTemp; - 0 == this.maxIterations && (this.maxIterations = 20 * Math.sqrt(f)); - for (this.iteration = 0; this.iteration < this.maxIterations; this.iteration++) { - if (!this.allowedToRun) return; - this.calcRepulsion(); - this.calcAttraction(); - this.calcPositions(); - this.reduceTemperature() - } - a = c = null; - for (d = 0; d < this.vertexArray.length; d++) g = this.vertexArray[d], this.isVertexMovable(g) && (k = this.getVertexBounds(g), null != k && (this.cellLocation[d][0] -= k.width / 2, this.cellLocation[ - d][1] -= k.height / 2, n = this.graph.snap(this.cellLocation[d][0]), p = this.graph.snap(this.cellLocation[d][1]), this.setVertexLocation(g, n, p), c = null == c ? n : Math.min(c, n), a = - null == a ? p : Math.min(a, p))); - d = -(c || 0) + 1; - g = -(a || 0) + 1; - null != e && (d += e.x, - g += e.y); - this.graph.moveCells(this.vertexArray, d, g) - } finally { - b.endUpdate() - } -}; -mxFastOrganicLayout.prototype.calcPositions = function() { - for (var a = 0; a < this.vertexArray.length; a++) - if (this.isMoveable[a]) { - var b = Math.sqrt(this.dispX[a] * this.dispX[a] + this.dispY[a] * this.dispY[a]); - 0.0010 > b && (b = 0.0010); - var c = this.dispX[a] / b * Math.min(b, this.temperature), - b = this.dispY[a] / b * Math.min(b, this.temperature); - this.dispX[a] = 0; - this.dispY[a] = 0; - this.cellLocation[a][0] += c; - this.cellLocation[a][1] += b - } -}; -mxFastOrganicLayout.prototype.calcAttraction = function() { - for (var a = 0; a < this.vertexArray.length; a++) - for (var b = 0; b < this.neighbours[a].length; b++) { - var c = this.neighbours[a][b]; - if (a != c && this.isMoveable[a] && this.isMoveable[c]) { - var d = this.cellLocation[a][0] - this.cellLocation[c][0], - e = this.cellLocation[a][1] - this.cellLocation[c][1], - f = d * d + e * e - this.radiusSquared[a] - this.radiusSquared[c]; - f < this.minDistanceLimitSquared && (f = this.minDistanceLimitSquared); - var g = Math.sqrt(f), - f = f / this.forceConstant, - d = d / g * f, - e = e / g * f; - this.dispX[a] -= d; - this.dispY[a] -= e; - this.dispX[c] += d; - this.dispY[c] += e - } - } -}; -mxFastOrganicLayout.prototype.calcRepulsion = function() { - for (var a = this.vertexArray.length, b = 0; b < a; b++) - for (var c = b; c < a; c++) { - if (!this.allowedToRun) return; - if (c != b && this.isMoveable[b] && this.isMoveable[c]) { - var d = this.cellLocation[b][0] - this.cellLocation[c][0], - e = this.cellLocation[b][1] - this.cellLocation[c][1]; - 0 == d && (d = 0.01 + Math.random()); - 0 == e && (e = 0.01 + Math.random()); - var f = Math.sqrt(d * d + e * e), - g = f - this.radius[b] - this.radius[c]; - g > this.maxDistanceLimit || (g < this.minDistanceLimit && (g = this.minDistanceLimit), g = this.forceConstantSquared / - g, d = d / f * g, e = e / f * g, this.dispX[b] += d, this.dispY[b] += e, this.dispX[c] -= d, this.dispY[c] -= e) - } - } -}; -mxFastOrganicLayout.prototype.reduceTemperature = function() { - this.temperature = this.initialTemp * (1 - this.iteration / this.maxIterations) -}; - -function mxCircleLayout(a, b) { - mxGraphLayout.call(this, a); - this.radius = null != b ? b : 100 -} -mxCircleLayout.prototype = new mxGraphLayout; -mxCircleLayout.prototype.constructor = mxCircleLayout; -mxCircleLayout.prototype.radius = null; -mxCircleLayout.prototype.moveCircle = !1; -mxCircleLayout.prototype.x0 = 0; -mxCircleLayout.prototype.y0 = 0; -mxCircleLayout.prototype.resetEdges = !0; -mxCircleLayout.prototype.disableEdgeStyle = !0; -mxCircleLayout.prototype.execute = function(a) { - var b = this.graph.getModel(); - b.beginUpdate(); - try { - for (var c = 0, d = null, e = null, f = [], g = b.getChildCount(a), h = 0; h < g; h++) { - var k = b.getChildAt(a, h); - if (this.isVertexIgnored(k)) this.isEdgeIgnored(k) || (this.resetEdges && this.graph.resetEdge(k), this.disableEdgeStyle && this.setEdgeStyleEnabled(k, !1)); - else { - f.push(k); - var l = this.getVertexBounds(k), - d = null == d ? l.y : Math.min(d, l.y), - e = null == e ? l.x : Math.min(e, l.x), - c = Math.max(c, Math.max(l.width, l.height)) - } - } - var m = this.getRadius(f.length, - c); - this.moveCircle && (e = this.x0, d = this.y0); - this.circle(f, m, e, d) - } finally { - b.endUpdate() - } -}; -mxCircleLayout.prototype.getRadius = function(a, b) { - return Math.max(a * b / Math.PI, this.radius) -}; -mxCircleLayout.prototype.circle = function(a, b, c, d) { - for (var e = a.length, f = 2 * Math.PI / e, g = 0; g < e; g++) this.isVertexMovable(a[g]) && this.setVertexLocation(a[g], c + b + b * Math.sin(g * f), d + b + b * Math.cos(g * f)) -}; - -function mxParallelEdgeLayout(a) { - mxGraphLayout.call(this, a) -} -mxParallelEdgeLayout.prototype = new mxGraphLayout; -mxParallelEdgeLayout.prototype.constructor = mxParallelEdgeLayout; -mxParallelEdgeLayout.prototype.spacing = 20; -mxParallelEdgeLayout.prototype.execute = function(a) { - a = this.findParallels(a); - this.graph.model.beginUpdate(); - try { - for (var b in a) { - var c = a[b]; - 1 < c.length && this.layout(c) - } - } finally { - this.graph.model.endUpdate() - } -}; -mxParallelEdgeLayout.prototype.findParallels = function(a) { - for (var b = this.graph.getModel(), c = [], d = b.getChildCount(a), e = 0; e < d; e++) { - var f = b.getChildAt(a, e); - if (!this.isEdgeIgnored(f)) { - var g = this.getEdgeId(f); - null != g && (null == c[g] && (c[g] = []), c[g].push(f)) - } - } - return c -}; -mxParallelEdgeLayout.prototype.getEdgeId = function(a) { - var b = this.graph.getView(), - c = b.getState(a), - d = null != c ? c.getVisibleTerminal(!0) : b.getVisibleTerminal(a, !0); - a = null != c ? c.getVisibleTerminal(!1) : b.getVisibleTerminal(a, !1); - return null != d && null != a ? (d = mxCellPath.create(d), a = mxCellPath.create(a), d > a ? a + "-" + d : d + "-" + a) : null -}; -mxParallelEdgeLayout.prototype.layout = function(a) { - var b = a[0], - c = this.graph.getModel(), - d = c.getGeometry(c.getTerminal(b, !0)), - e = c.getGeometry(c.getTerminal(b, !1)); - if (d == e) - for (var b = d.x + d.width + this.spacing, c = d.y + d.height / 2, f = 0; f < a.length; f++) this.route(a[f], b, c), b += this.spacing; - else if (null != d && null != e) - for (var b = d.x + d.width / 2, c = d.y + d.height / 2, f = e.x + e.width / 2 - b, g = e.y + e.height / 2 - c, e = Math.sqrt(f * f + g * g), d = g * this.spacing / e, e = f * this.spacing / e, - b = b + f / 2 + d * (a.length - 1) / 2, c = c + g / 2 - e * (a.length - 1) / 2, f = 0; f < a.length; f++) this.route(a[f], - b, c), b -= d, c += e -}; -mxParallelEdgeLayout.prototype.route = function(a, b, c) { - this.graph.isCellMovable(a) && this.setEdgePoints(a, [new mxPoint(b, c)]) -}; - -function mxCompositeLayout(a, b, c) { - mxGraphLayout.call(this, a); - this.layouts = b; - this.master = c -} -mxCompositeLayout.prototype = new mxGraphLayout; -mxCompositeLayout.prototype.constructor = mxCompositeLayout; -mxCompositeLayout.prototype.layouts = null; -mxCompositeLayout.prototype.master = null; -mxCompositeLayout.prototype.moveCell = function(a, b, c) { - null != this.master ? this.master.move.apply(this.master, arguments) : this.layouts[0].move.apply(this.layouts[0], arguments) -}; -mxCompositeLayout.prototype.execute = function(a) { - var b = this.graph.getModel(); - b.beginUpdate(); - try { - for (var c = 0; c < this.layouts.length; c++) this.layouts[c].execute.apply(this.layouts[c], arguments) - } finally { - b.endUpdate() - } -}; - -function mxEdgeLabelLayout(a, b) { - mxGraphLayout.call(this, a) -} -mxEdgeLabelLayout.prototype = new mxGraphLayout; -mxEdgeLabelLayout.prototype.constructor = mxEdgeLabelLayout; -mxEdgeLabelLayout.prototype.execute = function(a) { - for (var b = this.graph.view, c = this.graph.getModel(), d = [], e = [], f = c.getChildCount(a), g = 0; g < f; g++) { - var h = c.getChildAt(a, g), - k = b.getState(h); - null != k && (this.isVertexIgnored(h) ? this.isEdgeIgnored(h) || d.push(k) : e.push(k)) - } - this.placeLabels(e, d) -}; -mxEdgeLabelLayout.prototype.placeLabels = function(a, b) { - var c = this.graph.getModel(); - c.beginUpdate(); - try { - for (var d = 0; d < b.length; d++) { - var e = b[d]; - if (null != e && null != e.text && null != e.text.boundingBox) - for (var f = 0; f < a.length; f++) { - var g = a[f]; - null != g && this.avoid(e, g) - } - } - } finally { - c.endUpdate() - } -}; -mxEdgeLabelLayout.prototype.avoid = function(a, b) { - var c = this.graph.getModel(), - d = a.text.boundingBox; - if (mxUtils.intersects(d, b)) { - var e = -d.y - d.height + b.y, - f = -d.y + b.y + b.height, - e = Math.abs(e) < Math.abs(f) ? e : f, - f = -d.x - d.width + b.x, - d = -d.x + b.x + b.width, - d = Math.abs(f) < Math.abs(d) ? f : d; - Math.abs(d) < Math.abs(e) ? e = 0 : d = 0; - f = c.getGeometry(a.cell); - null != f && (f = f.clone(), null != f.offset ? (f.offset.x += d, f.offset.y += e) : f.offset = new mxPoint(d, e), c.setGeometry(a.cell, f)) - } -}; - -function mxGraphAbstractHierarchyCell() { - this.x = []; - this.y = []; - this.temp = [] -} -mxGraphAbstractHierarchyCell.prototype.maxRank = -1; -mxGraphAbstractHierarchyCell.prototype.minRank = -1; -mxGraphAbstractHierarchyCell.prototype.x = null; -mxGraphAbstractHierarchyCell.prototype.y = null; -mxGraphAbstractHierarchyCell.prototype.width = 0; -mxGraphAbstractHierarchyCell.prototype.height = 0; -mxGraphAbstractHierarchyCell.prototype.nextLayerConnectedCells = null; -mxGraphAbstractHierarchyCell.prototype.previousLayerConnectedCells = null; -mxGraphAbstractHierarchyCell.prototype.temp = null; -mxGraphAbstractHierarchyCell.prototype.getNextLayerConnectedCells = function(a) { - return null -}; -mxGraphAbstractHierarchyCell.prototype.getPreviousLayerConnectedCells = function(a) { - return null -}; -mxGraphAbstractHierarchyCell.prototype.isEdge = function() { - return !1 -}; -mxGraphAbstractHierarchyCell.prototype.isVertex = function() { - return !1 -}; -mxGraphAbstractHierarchyCell.prototype.getGeneralPurposeVariable = function(a) { - return null -}; -mxGraphAbstractHierarchyCell.prototype.setGeneralPurposeVariable = function(a, b) { - return null -}; -mxGraphAbstractHierarchyCell.prototype.setX = function(a, b) { - this.isVertex() ? this.x[0] = b : this.isEdge() && (this.x[a - this.minRank - 1] = b) -}; -mxGraphAbstractHierarchyCell.prototype.getX = function(a) { - return this.isVertex() ? this.x[0] : this.isEdge() ? this.x[a - this.minRank - 1] : 0 -}; -mxGraphAbstractHierarchyCell.prototype.setY = function(a, b) { - this.isVertex() ? this.y[0] = b : this.isEdge() && (this.y[a - this.minRank - 1] = b) -}; - -function mxGraphHierarchyNode(a) { - mxGraphAbstractHierarchyCell.apply(this, arguments); - this.cell = a -} -mxGraphHierarchyNode.prototype = new mxGraphAbstractHierarchyCell; -mxGraphHierarchyNode.prototype.constructor = mxGraphHierarchyNode; -mxGraphHierarchyNode.prototype.cell = null; -mxGraphHierarchyNode.prototype.connectsAsTarget = []; -mxGraphHierarchyNode.prototype.connectsAsSource = []; -mxGraphHierarchyNode.prototype.hashCode = !1; -mxGraphHierarchyNode.prototype.getRankValue = function(a) { - return this.maxRank -}; -mxGraphHierarchyNode.prototype.getNextLayerConnectedCells = function(a) { - if (null == this.nextLayerConnectedCells) { - this.nextLayerConnectedCells = []; - this.nextLayerConnectedCells[0] = []; - for (var b = 0; b < this.connectsAsTarget.length; b++) { - var c = this.connectsAsTarget[b]; - 1 == c.maxRank || c.maxRank == a + 1 ? this.nextLayerConnectedCells[0].push(c.source) : this.nextLayerConnectedCells[0].push(c) - } - } - return this.nextLayerConnectedCells[0] -}; -mxGraphHierarchyNode.prototype.getPreviousLayerConnectedCells = function(a) { - if (null == this.previousLayerConnectedCells) { - this.previousLayerConnectedCells = []; - this.previousLayerConnectedCells[0] = []; - for (var b = 0; b < this.connectsAsSource.length; b++) { - var c = this.connectsAsSource[b]; - 1 == c.minRank || c.minRank == a - 1 ? this.previousLayerConnectedCells[0].push(c.target) : this.previousLayerConnectedCells[0].push(c) - } - } - return this.previousLayerConnectedCells[0] -}; -mxGraphHierarchyNode.prototype.isVertex = function() { - return !0 -}; -mxGraphHierarchyNode.prototype.getGeneralPurposeVariable = function(a) { - return this.temp[0] -}; -mxGraphHierarchyNode.prototype.setGeneralPurposeVariable = function(a, b) { - this.temp[0] = b -}; -mxGraphHierarchyNode.prototype.isAncestor = function(a) { - if (null != a && null != this.hashCode && null != a.hashCode && this.hashCode.length < a.hashCode.length) { - if (this.hashCode == a.hashCode) return !0; - if (null == this.hashCode || null == this.hashCode) return !1; - for (var b = 0; b < this.hashCode.length; b++) - if (this.hashCode[b] != a.hashCode[b]) return !1; - return !0 - } - return !1 -}; -mxGraphHierarchyNode.prototype.getCoreCell = function() { - return this.cell -}; - -function mxGraphHierarchyEdge(a) { - mxGraphAbstractHierarchyCell.apply(this, arguments); - this.edges = a -} -mxGraphHierarchyEdge.prototype = new mxGraphAbstractHierarchyCell; -mxGraphHierarchyEdge.prototype.constructor = mxGraphHierarchyEdge; -mxGraphHierarchyEdge.prototype.edges = null; -mxGraphHierarchyEdge.prototype.source = null; -mxGraphHierarchyEdge.prototype.target = null; -mxGraphHierarchyEdge.prototype.isReversed = !1; -mxGraphHierarchyEdge.prototype.invert = function(a) { - a = this.source; - this.source = this.target; - this.target = a; - this.isReversed = !this.isReversed -}; -mxGraphHierarchyEdge.prototype.getNextLayerConnectedCells = function(a) { - if (null == this.nextLayerConnectedCells) { - this.nextLayerConnectedCells = []; - for (var b = 0; b < this.temp.length; b++) this.nextLayerConnectedCells[b] = [], b == this.temp.length - 1 ? this.nextLayerConnectedCells[b].push(this.source) : this.nextLayerConnectedCells[b].push( - this) - } - return this.nextLayerConnectedCells[a - this.minRank - 1] -}; -mxGraphHierarchyEdge.prototype.getPreviousLayerConnectedCells = function(a) { - if (null == this.previousLayerConnectedCells) { - this.previousLayerConnectedCells = []; - for (var b = 0; b < this.temp.length; b++) this.previousLayerConnectedCells[b] = [], 0 == b ? this.previousLayerConnectedCells[b].push(this.target) : this.previousLayerConnectedCells[b].push( - this) - } - return this.previousLayerConnectedCells[a - this.minRank - 1] -}; -mxGraphHierarchyEdge.prototype.isEdge = function() { - return !0 -}; -mxGraphHierarchyEdge.prototype.getGeneralPurposeVariable = function(a) { - return this.temp[a - this.minRank - 1] -}; -mxGraphHierarchyEdge.prototype.setGeneralPurposeVariable = function(a, b) { - this.temp[a - this.minRank - 1] = b -}; -mxGraphHierarchyEdge.prototype.getCoreCell = function() { - return null != this.edges && 0 < this.edges.length ? this.edges[0] : null -}; - -function mxGraphHierarchyModel(a, b, c, d, e) { - a.getGraph(); - this.tightenToSource = e; - this.roots = c; - this.parent = d; - this.vertexMapper = {}; - this.edgeMapper = {}; - this.maxRank = 0; - c = []; - null == b && (b = this.graph.getChildVertices(d)); - this.maxRank = this.SOURCESCANSTARTRANK; - this.createInternalCells(a, b, c); - for (d = 0; d < b.length; d++) { - e = c[d].connectsAsSource; - for (var f = 0; f < e.length; f++) { - var g = e[f], - h = g.edges; - if (null != h && 0 < h.length) { - var h = h[0], - k = a.getVisibleTerminal(h, !1), - k = mxCellPath.create(k), - k = this.vertexMapper[k]; - c[d] == k && (k = a.getVisibleTerminal(h, !0), k = mxCellPath.create(k), k = this.vertexMapper[k]); - null != k && c[d] != k && (g.target = k, 0 == k.connectsAsTarget.length && (k.connectsAsTarget = []), 0 > mxUtils.indexOf(k.connectsAsTarget, g) && k.connectsAsTarget.push(g)) - } - } - c[d].temp[0] = 1 - } -} -mxGraphHierarchyModel.prototype.maxRank = null; -mxGraphHierarchyModel.prototype.vertexMapper = null; -mxGraphHierarchyModel.prototype.edgeMapper = null; -mxGraphHierarchyModel.prototype.ranks = null; -mxGraphHierarchyModel.prototype.roots = null; -mxGraphHierarchyModel.prototype.parent = null; -mxGraphHierarchyModel.prototype.dfsCount = 0; -mxGraphHierarchyModel.prototype.SOURCESCANSTARTRANK = 1E8; -mxGraphHierarchyModel.prototype.tightenToSource = !1; -mxGraphHierarchyModel.prototype.createInternalCells = function(a, b, c) { - for (var d = a.getGraph(), e = 0; e < b.length; e++) { - c[e] = new mxGraphHierarchyNode(b[e]); - var f = mxCellPath.create(b[e]); - this.vertexMapper[f] = c[e]; - f = a.getEdges(b[e]); - c[e].connectsAsSource = []; - for (var g = 0; g < f.length; g++) { - var h = a.getVisibleTerminal(f[g], !1); - if (h != b[e] && h != b[e] && a.graph.model.isVertex(h) && !a.isVertexIgnored(h)) { - var k = a.getEdgesBetween(b[e], h, !1), - l = a.getEdgesBetween(b[e], h, !0), - h = mxCellPath.create(k[0]); - if (null != k && 0 < k.length && null == - this.edgeMapper[h] && 2 * l.length >= k.length) { - for (var l = new mxGraphHierarchyEdge(k), m = 0; m < k.length; m++) { - var n = k[m], - h = mxCellPath.create(n); - this.edgeMapper[h] = l; - d.resetEdge(n); - a.disableEdgeStyle && (a.setEdgeStyleEnabled(n, !1), a.setOrthogonalEdge(n, !0)) - } - l.source = c[e]; - 0 > mxUtils.indexOf(c[e].connectsAsSource, l) && c[e].connectsAsSource.push(l) - } - } - } - c[e].temp[0] = 0 - } -}; -mxGraphHierarchyModel.prototype.initialRank = function() { - var a = []; - if (null != this.roots) - for (var b = 0; b < this.roots.length; b++) { - var c = mxCellPath.create(this.roots[b]), - c = this.vertexMapper[c]; - null != c && a.push(c) - } - for (var d in this.vertexMapper) c = this.vertexMapper[d], c.temp[0] = -1; - for (var e = a.slice(); 0 < a.length;) { - var c = a[0], - f, g; - f = c.connectsAsTarget; - g = c.connectsAsSource; - for (var h = !0, k = this.SOURCESCANSTARTRANK, b = 0; b < f.length; b++) { - var l = f[b]; - if (5270620 == l.temp[0]) l = l.source, k = Math.min(k, l.temp[0] - 1); - else { - h = !1; - break - } - } - if (h) { - c.temp[0] = - k; - this.maxRank = Math.min(this.maxRank, k); - if (null != g) - for (b = 0; b < g.length; b++) l = g[b], l.temp[0] = 5270620, l = l.target, -1 == l.temp[0] && (a.push(l), l.temp[0] = -2); - a.shift() - } else if (b = a.shift(), a.push(c), b == c && 1 == a.length) break - } - for (d in this.vertexMapper) c = this.vertexMapper[d], c.temp[0] -= this.maxRank; - for (b = 0; b < e.length; b++) { - c = e[b]; - a = 0; - f = c.connectsAsSource; - for (d = 0; d < f.length; d++) l = f[d], l = l.target, c.temp[0] = Math.max(a, l.temp[0] + 1), a = c.temp[0] - } - this.maxRank = this.SOURCESCANSTARTRANK - this.maxRank -}; -mxGraphHierarchyModel.prototype.fixRanks = function() { - var a = []; - this.ranks = []; - for (var b = 0; b < this.maxRank + 1; b++) a[b] = [], this.ranks[b] = a[b]; - var c = null; - if (null != this.roots) - for (var d = this.roots, c = [], b = 0; b < d.length; b++) { - var e = mxCellPath.create(d[b]); - c[b] = this.vertexMapper[e] - } - this.visit(function(b, c, d, e, l) { - 0 == l && (0 > c.maxRank && 0 > c.minRank) && (a[c.temp[0]].push(c), c.maxRank = c.temp[0], c.minRank = c.temp[0], c.temp[0] = a[c.maxRank].length - 1); - if (null != b && null != d && 1 < b.maxRank - c.maxRank) { - d.maxRank = b.maxRank; - d.minRank = - c.maxRank; - d.temp = []; - d.x = []; - d.y = []; - for (b = d.minRank + 1; b < d.maxRank; b++) a[b].push(d), d.setGeneralPurposeVariable(b, a[b].length - 1) - } - }, c, !1, null) -}; -mxGraphHierarchyModel.prototype.visit = function(a, b, c, d) { - if (null != b) { - for (var e = 0; e < b.length; e++) { - var f = b[e]; - null != f && (null == d && (d = {}), c ? (f.hashCode = [], f.hashCode[0] = this.dfsCount, f.hashCode[1] = e, this.extendedDfs(null, f, null, a, d, f.hashCode, e, 0)) : this.dfs(null, f, null, - a, d, 0)) - } - this.dfsCount++ - } -}; -mxGraphHierarchyModel.prototype.dfs = function(a, b, c, d, e, f) { - if (null != b) { - var g = mxCellPath.create(b.cell); - if (null == e[g]) { - e[g] = b; - d(a, b, c, f, 0); - a = b.connectsAsSource.slice(); - for (c = 0; c < a.length; c++) g = a[c], this.dfs(b, g.target, g, d, e, f + 1) - } else d(a, b, c, f, 1) - } -}; -mxGraphHierarchyModel.prototype.extendedDfs = function(a, b, c, d, e, f, g, h) { - if (null != b) { - if (null != a && (null == b.hashCode || b.hashCode[0] != a.hashCode[0])) f = a.hashCode.length + 1, b.hashCode = a.hashCode.slice(), b.hashCode[f - 1] = g; - g = mxCellPath.create(b.cell); - if (null == e[g]) { - e[g] = b; - d(a, b, c, h, 0); - a = b.connectsAsSource.slice(); - for (c = 0; c < a.length; c++) g = a[c], this.extendedDfs(b, g.target, g, d, e, b.hashCode, c, h + 1) - } else d(a, b, c, h, 1) - } -}; - -function mxHierarchicalLayoutStage() {} -mxHierarchicalLayoutStage.prototype.execute = function(a) {}; - -function mxMedianHybridCrossingReduction(a) { - this.layout = a -} -mxMedianHybridCrossingReduction.prototype = new mxHierarchicalLayoutStage; -mxMedianHybridCrossingReduction.prototype.constructor = mxMedianHybridCrossingReduction; -mxMedianHybridCrossingReduction.prototype.layout = null; -mxMedianHybridCrossingReduction.prototype.maxIterations = 24; -mxMedianHybridCrossingReduction.prototype.nestedBestRanks = null; -mxMedianHybridCrossingReduction.prototype.currentBestCrossings = 0; -mxMedianHybridCrossingReduction.prototype.iterationsWithoutImprovement = 0; -mxMedianHybridCrossingReduction.prototype.maxNoImprovementIterations = 2; -mxMedianHybridCrossingReduction.prototype.execute = function(a) { - a = this.layout.getModel(); - this.nestedBestRanks = []; - for (var b = 0; b < a.ranks.length; b++) this.nestedBestRanks[b] = a.ranks[b].slice(); - for (var c = 0, d = this.calculateCrossings(a), b = 0; b < this.maxIterations && c < this.maxNoImprovementIterations; b++) { - this.weightedMedian(b, a); - this.transpose(b, a); - var e = this.calculateCrossings(a); - if (e < d) { - d = e; - for (e = c = 0; e < this.nestedBestRanks.length; e++) - for (var f = a.ranks[e], g = 0; g < f.length; g++) { - var h = f[g]; - this.nestedBestRanks[e][h.getGeneralPurposeVariable(e)] = - h - } - } else { - c++; - for (e = 0; e < this.nestedBestRanks.length; e++) { - f = a.ranks[e]; - for (g = 0; g < f.length; g++) h = f[g], h.setGeneralPurposeVariable(e, g) - } - } - if (0 == d) break - } - c = []; - d = []; - for (b = 0; b < a.maxRank + 1; b++) d[b] = [], c[b] = d[b]; - for (b = 0; b < this.nestedBestRanks.length; b++) - for (e = 0; e < this.nestedBestRanks[b].length; e++) d[b].push(this.nestedBestRanks[b][e]); - a.ranks = c -}; -mxMedianHybridCrossingReduction.prototype.calculateCrossings = function(a) { - for (var b = a.ranks.length, c = 0, d = 1; d < b; d++) c += this.calculateRankCrossing(d, a); - return c -}; -mxMedianHybridCrossingReduction.prototype.calculateRankCrossing = function(a, b) { - for (var c = 0, d = b.ranks[a], e = d.length, f = b.ranks[a - 1].length, g = [], h = 0; h < e; h++) g[h] = []; - for (h = 0; h < d.length; h++) - for (var k = d[h], l = k.getGeneralPurposeVariable(a), m = k.getPreviousLayerConnectedCells(a), k = 0; k < m.length; k++) { - var n = m[k].getGeneralPurposeVariable(a - 1); - g[l][n] = 201207 - } - for (h = 0; h < e; h++) - for (k = 0; k < f; k++) - if (201207 == g[h][k]) { - for (d = h + 1; d < e; d++) - for (l = 0; l < k; l++) 201207 == g[d][l] && c++; - for (d = 0; d < h; d++) - for (l = k + 1; l < f; l++) 201207 == g[d][l] && - c++ - } - return c / 2 -}; -mxMedianHybridCrossingReduction.prototype.transpose = function(a, b) { - for (var c = !0, d = 0; c && 10 > d++;) - for (var e = 1 == a % 2 && 1 == d % 2, c = !1, f = 0; f < b.ranks.length; f++) { - for (var g = b.ranks[f], h = [], k = 0; k < g.length; k++) { - var l = g[k], - m = l.getGeneralPurposeVariable(f); - 0 > m && (m = k); - h[m] = l - } - for (var n = m = l = null, p = null, q = null, s = null, r = null, t = null, v = null, w = null, k = 0; k < g.length - 1; k++) { - if (0 == k) { - for (var v = h[k], l = v.getNextLayerConnectedCells(f), m = v.getPreviousLayerConnectedCells(f), q = [], s = [], u = 0; u < l.length; u++) q[u] = l[u].getGeneralPurposeVariable(f + 1); - for (u = 0; u < m.length; u++) s[u] = m[u].getGeneralPurposeVariable(f - 1) - } else l = n, m = p, q = r, s = t, v = w; - w = h[k + 1]; - n = w.getNextLayerConnectedCells(f); - p = w.getPreviousLayerConnectedCells(f); - r = []; - t = []; - for (u = 0; u < n.length; u++) r[u] = n[u].getGeneralPurposeVariable(f + 1); - for (u = 0; u < p.length; u++) t[u] = p[u].getGeneralPurposeVariable(f - 1); - for (var y = 0, z = 0, u = 0; u < q.length; u++) - for (var x = 0; x < r.length; x++) q[u] > r[x] && y++, q[u] < r[x] && z++; - for (u = 0; u < s.length; u++) - for (x = 0; x < t.length; x++) s[u] > t[x] && y++, s[u] < t[x] && z++; - if (z < y || z == y && e) n = v.getGeneralPurposeVariable(f), - v.setGeneralPurposeVariable(f, w.getGeneralPurposeVariable(f)), w.setGeneralPurposeVariable(f, n), n = l, p = m, r = q, t = s, w = v, e || (c = !0) - } - } -}; -mxMedianHybridCrossingReduction.prototype.weightedMedian = function(a, b) { - var c = 0 == a % 2; - if (c) - for (var d = b.maxRank - 1; 0 <= d; d--) this.medianRank(d, c); - else - for (d = 1; d < b.maxRank; d++) this.medianRank(d, c) -}; -mxMedianHybridCrossingReduction.prototype.medianRank = function(a, b) { - for (var c = this.nestedBestRanks[a].length, d = [], e = [], f = 0; f < c; f++) { - var g = this.nestedBestRanks[a][f], - h = new MedianCellSorter; - h.cell = g; - var k; - k = b ? g.getNextLayerConnectedCells(a) : g.getPreviousLayerConnectedCells(a); - var l; - l = b ? a + 1 : a - 1; - null != k && 0 != k.length ? (h.medianValue = this.medianValue(k, l), d.push(h)) : e[g.getGeneralPurposeVariable(a)] = !0 - } - d.sort(MedianCellSorter.prototype.compare); - for (f = 0; f < c; f++) null == e[f] && (g = d.shift().cell, g.setGeneralPurposeVariable(a, - f)) -}; -mxMedianHybridCrossingReduction.prototype.medianValue = function(a, b) { - for (var c = [], d = 0, e = 0; e < a.length; e++) { - var f = a[e]; - c[d++] = f.getGeneralPurposeVariable(b) - } - c.sort(function(a, b) { - return a - b - }); - if (1 == d % 2) return c[Math.floor(d / 2)]; - if (2 == d) return (c[0] + c[1]) / 2; - e = d / 2; - f = c[e - 1] - c[0]; - d = c[d - 1] - c[e]; - return (c[e - 1] * d + c[e] * f) / (f + d) -}; - -function MedianCellSorter() {} -MedianCellSorter.prototype.medianValue = 0; -MedianCellSorter.prototype.cell = !1; -MedianCellSorter.prototype.compare = function(a, b) { - return null != a && null != b ? b.medianValue > a.medianValue ? -1 : b.medianValue < a.medianValue ? 1 : 0 : 0 -}; - -function mxMinimumCycleRemover(a) { - this.layout = a -} -mxMinimumCycleRemover.prototype = new mxHierarchicalLayoutStage; -mxMinimumCycleRemover.prototype.constructor = mxMinimumCycleRemover; -mxMinimumCycleRemover.prototype.layout = null; -mxMinimumCycleRemover.prototype.execute = function(a) { - var b = this.layout.getModel(), - c = {}, - d = mxUtils.clone(b.vertexMapper, null, !0), - e = null; - if (null != b.roots) { - var f = b.roots, - e = []; - for (a = 0; a < f.length; a++) { - var g = mxCellPath.create(f[a]); - e[a] = b.vertexMapper[g] - } - } - b.visit(function(a, b, e, f, g) { - b.isAncestor(a) && (e.invert(), mxUtils.remove(e, a.connectsAsSource), a.connectsAsTarget.push(e), mxUtils.remove(e, b.connectsAsTarget), b.connectsAsSource.push(e)); - a = mxCellPath.create(b.cell); - c[a] = b; - delete d[a] - }, e, !0, null); - e = null; - 0 < - d.lenth && (e = mxUtils.clone(d, null, !0)); - a = mxUtils.clone(c, null, !0); - b.visit(function(a, b, e, f, g) { - b.isAncestor(a) && (e.invert(), mxUtils.remove(e, a.connectsAsSource), b.connectsAsSource.push(e), a.connectsAsTarget.push(e), mxUtils.remove(e, b.connectsAsTarget)); - a = mxCellPath.create(b.cell); - c[a] = b; - delete d[a] - }, d, !0, a); - f = this.layout.getGraph(); - if (null != e && 0 < e.length) { - b = b.roots; - for (a = 0; a < e.length; a++) g = e[a].cell, 0 == f.getIncomingEdges(g).length && b.push(g) - } -}; - -function mxCoordinateAssignment(a, b, c, d, e, f) { - this.layout = a; - this.intraCellSpacing = b; - this.interRankCellSpacing = c; - this.orientation = d; - this.initialX = e; - this.parallelEdgeSpacing = f -} -var mxHierarchicalEdgeStyle = { - ORTHOGONAL: 1, - POLYLINE: 2, - STRAIGHT: 3, - CURVE: 4 -}; -mxCoordinateAssignment.prototype = new mxHierarchicalLayoutStage; -mxCoordinateAssignment.prototype.constructor = mxCoordinateAssignment; -mxCoordinateAssignment.prototype.layout = null; -mxCoordinateAssignment.prototype.intraCellSpacing = 30; -mxCoordinateAssignment.prototype.interRankCellSpacing = 100; -mxCoordinateAssignment.prototype.parallelEdgeSpacing = 10; -mxCoordinateAssignment.prototype.maxIterations = 8; -mxCoordinateAssignment.prototype.prefHozEdgeSep = 5; -mxCoordinateAssignment.prototype.prefVertEdgeOff = 2; -mxCoordinateAssignment.prototype.minEdgeJetty = 12; -mxCoordinateAssignment.prototype.channelBuffer = 4; -mxCoordinateAssignment.prototype.jettyPositions = null; -mxCoordinateAssignment.prototype.orientation = mxConstants.DIRECTION_NORTH; -mxCoordinateAssignment.prototype.initialX = null; -mxCoordinateAssignment.prototype.limitX = null; -mxCoordinateAssignment.prototype.currentXDelta = null; -mxCoordinateAssignment.prototype.widestRank = null; -mxCoordinateAssignment.prototype.rankTopY = null; -mxCoordinateAssignment.prototype.rankBottomY = null; -mxCoordinateAssignment.prototype.widestRankValue = null; -mxCoordinateAssignment.prototype.rankWidths = null; -mxCoordinateAssignment.prototype.rankY = null; -mxCoordinateAssignment.prototype.fineTuning = !0; -mxCoordinateAssignment.prototype.edgeStyle = mxHierarchicalEdgeStyle.POLYLINE; -mxCoordinateAssignment.prototype.nextLayerConnectedCache = null; -mxCoordinateAssignment.prototype.previousLayerConnectedCache = null; -mxCoordinateAssignment.prototype.groupPadding = 10; -mxCoordinateAssignment.prototype.printStatus = function() { - var a = this.layout.getModel(); - mxLog.show(); - mxLog.writeln("\x3d\x3d\x3d\x3d\x3d\x3dCoord assignment debug\x3d\x3d\x3d\x3d\x3d\x3d\x3d"); - for (var b = 0; b < a.ranks.length; b++) { - mxLog.write("Rank ", b, " : "); - for (var c = a.ranks[b], d = 0; d < c.length; d++) mxLog.write(c[d].getGeneralPurposeVariable(b), " "); - mxLog.writeln() - } - mxLog.writeln("\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d") -}; -mxCoordinateAssignment.prototype.execute = function(a) { - this.jettyPositions = []; - a = this.layout.getModel(); - this.currentXDelta = 0; - this.initialCoords(this.layout.getGraph(), a); - this.fineTuning && this.minNode(a); - var b = 1E8; - if (this.fineTuning) - for (var c = 0; c < this.maxIterations; c++) { - 0 != c && (this.medianPos(c, a), this.minNode(a)); - if (this.currentXDelta < b) { - for (var d = 0; d < a.ranks.length; d++) - for (var e = a.ranks[d], f = 0; f < e.length; f++) { - var g = e[f]; - g.setX(d, g.getGeneralPurposeVariable(d)) - } - b = this.currentXDelta - } else - for (d = 0; d < a.ranks.length; d++) { - e = - a.ranks[d]; - for (f = 0; f < e.length; f++) g = e[f], g.setGeneralPurposeVariable(d, g.getX(d)) - } - this.minPath(this.layout.getGraph(), a); - this.currentXDelta = 0 - } - this.setCellLocations(this.layout.getGraph(), a) -}; -mxCoordinateAssignment.prototype.minNode = function(a) { - for (var b = [], c = [], d = [], e = 0; e <= a.maxRank; e++) { - d[e] = a.ranks[e]; - for (var f = 0; f < d[e].length; f++) { - var g = d[e][f], - h = new WeightedCellSorter(g, e); - h.rankIndex = f; - h.visited = !0; - b.push(h); - g = mxCellPath.create(g.getCoreCell()); - c[g] = h - } - } - a = 10 * b.length; - for (f = 0; 0 < b.length && f <= a;) { - var h = b.shift(), - e = h.cell, - k = h.weightedValue, - l = parseInt(h.rankIndex), - g = e.getNextLayerConnectedCells(k), - m = e.getPreviousLayerConnectedCells(k), - n = g.length, - p = m.length, - q = this.medianXValue(g, k + 1), - s = - this.medianXValue(m, k - 1), - r = n + p, - t = e.getGeneralPurposeVariable(k), - v = t; - 0 < r && (v = (q * n + s * p) / r); - n = !1; - v < t - 1 ? 0 == l ? (e.setGeneralPurposeVariable(k, v), n = !0) : (l = d[k][l - 1], t = l.getGeneralPurposeVariable(k), t = t + l.width / 2 + this.intraCellSpacing + e.width / 2, t < v ? (e.setGeneralPurposeVariable( - k, v), n = !0) : t < e.getGeneralPurposeVariable(k) - 1 && (e.setGeneralPurposeVariable(k, t), n = !0)) : v > t + 1 && (l == d[k].length - 1 ? (e.setGeneralPurposeVariable(k, v), n = !0) : - (l = d[k][l + 1], t = l.getGeneralPurposeVariable(k), t = t - l.width / 2 - this.intraCellSpacing - - e.width / 2, t > v ? (e.setGeneralPurposeVariable(k, v), n = !0) : t > e.getGeneralPurposeVariable(k) + 1 && (e.setGeneralPurposeVariable(k, t), n = !0))); - if (n) { - for (e = 0; e < g.length; e++) k = g[e], k = mxCellPath.create(k.getCoreCell()), k = c[k], null != k && !1 == k.visited && (k.visited = !0, b.push(k)); - for (e = 0; e < m.length; e++) k = m[e], k = mxCellPath.create(k.getCoreCell()), k = c[k], null != k && !1 == k.visited && (k.visited = !0, b.push(k)) - } - h.visited = !1; - f++ - } -}; -mxCoordinateAssignment.prototype.medianPos = function(a, b) { - if (0 == a % 2) - for (var c = b.maxRank; 0 < c; c--) this.rankMedianPosition(c - 1, b, c); - else - for (c = 0; c < b.maxRank - 1; c++) this.rankMedianPosition(c + 1, b, c) -}; -mxCoordinateAssignment.prototype.rankMedianPosition = function(a, b, c) { - b = b.ranks[a]; - for (var d = [], e = [], f = 0; f < b.length; f++) { - var g = b[f]; - d[f] = new WeightedCellSorter; - d[f].cell = g; - d[f].rankIndex = f; - var h = mxCellPath.create(g.getCoreCell()); - e[h] = d[f]; - var k = null, - k = c < a ? g.getPreviousLayerConnectedCells(a) : g.getNextLayerConnectedCells(a); - d[f].weightedValue = this.calculatedWeightedValue(g, k) - } - d.sort(WeightedCellSorter.prototype.compare); - for (f = 0; f < d.length; f++) { - h = 0; - g = d[f].cell; - h = 0; - k = c < a ? g.getPreviousLayerConnectedCells(a).slice() : - g.getNextLayerConnectedCells(a).slice(); - null != k && (h = k.length, h = 0 < h ? this.medianXValue(k, c) : g.getGeneralPurposeVariable(a)); - for (var l = 0, k = -1E8, m = d[f].rankIndex - 1; 0 <= m;) { - var n = mxCellPath.create(b[m].getCoreCell()), - n = e[n]; - if (null != n) { - var p = n.cell; - n.visited ? (k = p.getGeneralPurposeVariable(a) + p.width / 2 + this.intraCellSpacing + l + g.width / 2, m = -1) : (l += p.width + this.intraCellSpacing, m--) - } - } - l = 0; - p = 1E8; - for (m = d[f].rankIndex + 1; m < d.length;) - if (n = mxCellPath.create(b[m].getCoreCell()), n = e[n], null != n) { - var q = n.cell; - n.visited ? - (p = q.getGeneralPurposeVariable(a) - q.width / 2 - this.intraCellSpacing - l - g.width / 2, m = d.length) : (l += q.width + this.intraCellSpacing, m++) - } - h >= k && h <= p ? g.setGeneralPurposeVariable(a, h) : h < k ? (g.setGeneralPurposeVariable(a, k), this.currentXDelta += k - h) : h > p && (g.setGeneralPurposeVariable(a, p), this.currentXDelta += - h - p); - d[f].visited = !0 - } -}; -mxCoordinateAssignment.prototype.calculatedWeightedValue = function(a, b) { - for (var c = 0, d = 0; d < b.length; d++) { - var e = b[d]; - a.isVertex() && e.isVertex() ? c++ : c = a.isEdge() && e.isEdge() ? c + 8 : c + 2 - } - return c -}; -mxCoordinateAssignment.prototype.medianXValue = function(a, b) { - if (0 == a.length) return 0; - for (var c = [], d = 0; d < a.length; d++) c[d] = a[d].getGeneralPurposeVariable(b); - c.sort(function(a, b) { - return a - b - }); - if (1 == a.length % 2) return c[Math.floor(a.length / 2)]; - d = a.length / 2; - return (c[d - 1] + c[d]) / 2 -}; -mxCoordinateAssignment.prototype.initialCoords = function(a, b) { - this.calculateWidestRank(a, b); - for (var c = this.widestRank; 0 <= c; c--) c < b.maxRank && this.rankCoordinates(c, a, b); - for (c = this.widestRank + 1; c <= b.maxRank; c++) 0 < c && this.rankCoordinates(c, a, b) -}; -mxCoordinateAssignment.prototype.rankCoordinates = function(a, b, c) { - b = c.ranks[a]; - c = 0; - for (var d = this.initialX + (this.widestRankValue - this.rankWidths[a]) / 2, e = !1, f = 0; f < b.length; f++) { - var g = b[f]; - if (g.isVertex()) { - var h = this.layout.getVertexBounds(g.cell); - null != h ? this.orientation == mxConstants.DIRECTION_NORTH || this.orientation == mxConstants.DIRECTION_SOUTH ? (g.width = h.width, g.height = h.height) : (g.width = h.height, g.height = h.width) : - e = !0; - c = Math.max(c, g.height) - } else g.isEdge() && (h = 1, null != g.edges ? h = g.edges.length : mxLog.warn("edge.edges is null"), - g.width = (h - 1) * this.parallelEdgeSpacing); - d += g.width / 2; - g.setX(a, d); - g.setGeneralPurposeVariable(a, d); - d += g.width / 2; - d += this.intraCellSpacing - }!0 == e && mxLog.warn("At least one cell has no bounds") -}; -mxCoordinateAssignment.prototype.calculateWidestRank = function(a, b) { - var c = -this.interRankCellSpacing, - d = 0; - this.rankWidths = []; - this.rankY = []; - for (var e = b.maxRank; 0 <= e; e--) { - for (var f = 0, g = b.ranks[e], h = this.initialX, k = !1, l = 0; l < g.length; l++) { - var m = g[l]; - if (m.isVertex()) { - var n = this.layout.getVertexBounds(m.cell); - null != n ? this.orientation == mxConstants.DIRECTION_NORTH || this.orientation == mxConstants.DIRECTION_SOUTH ? (m.width = n.width, m.height = n.height) : (m.width = n.height, m.height = n - .width) : k = !0; - f = Math.max(f, m.height) - } else m.isEdge() && - (n = 1, null != m.edges ? n = m.edges.length : mxLog.warn("edge.edges is null"), m.width = (n - 1) * this.parallelEdgeSpacing); - h += m.width / 2; - m.setX(e, h); - m.setGeneralPurposeVariable(e, h); - h += m.width / 2; - h += this.intraCellSpacing; - h > this.widestRankValue && (this.widestRankValue = h, this.widestRank = e); - this.rankWidths[e] = h - }!0 == k && mxLog.warn("At least one cell has no bounds"); - this.rankY[e] = c; - h = f / 2 + d / 2 + this.interRankCellSpacing; - d = f; - c = this.orientation == mxConstants.DIRECTION_NORTH || this.orientation == mxConstants.DIRECTION_WEST ? c + h : c - - h; - for (l = 0; l < g.length; l++) g[l].setY(e, c) - } -}; -mxCoordinateAssignment.prototype.minPath = function(a, b) { - var c = b.edgeMapper, - d; - for (d in c) { - var e = c[d]; - if (!(1 > e.maxRank - e.minRank - 1)) { - for (var f = e.getGeneralPurposeVariable(e.minRank + 1), g = !0, h = 0, k = e.minRank + 2; k < e.maxRank; k++) { - var l = e.getGeneralPurposeVariable(k); - f != l ? (g = !1, f = l) : h++ - } - if (!g) { - for (var g = f = 0, l = [], m = [], n = e.getGeneralPurposeVariable(e.minRank + 1), k = e.minRank + 1; k < e.maxRank - 1; k++) { - var p = e.getX(k + 1); - n == p ? (l[k - e.minRank - 1] = n, f++) : this.repositionValid(b, e, k + 1, n) ? (l[k - e.minRank - 1] = n, f++) : n = l[k - e.minRank - - 1] = p - } - n = e.getX(k); - for (k = e.maxRank - 1; k > e.minRank + 1; k--) p = e.getX(k - 1), n == p ? (m[k - e.minRank - 2] = n, g++) : this.repositionValid(b, e, k - 1, n) ? (m[k - e.minRank - 2] = n, g++) : (m[k - - e.minRank - 2] = e.getX(k - 1), n = p); - if (g > h || f > h) - if (g >= f) - for (k = e.maxRank - 2; k > e.minRank; k--) e.setX(k, m[k - e.minRank - 1]); - else if (f > g) - for (k = e.minRank + 2; k < e.maxRank; k++) e.setX(k, l[k - e.minRank - 2]) - } - } - } -}; -mxCoordinateAssignment.prototype.repositionValid = function(a, b, c, d) { - a = a.ranks[c]; - for (var e = -1, f = 0; f < a.length; f++) - if (b == a[f]) { - e = f; - break - } - if (0 > e) return !1; - f = b.getGeneralPurposeVariable(c); - if (d < f) { - if (0 == e) return !0; - a = a[e - 1]; - c = a.getGeneralPurposeVariable(c); - c = c + a.width / 2 + this.intraCellSpacing + b.width / 2; - if (!(c <= d)) return !1 - } else if (d > f) { - if (e == a.length - 1) return !0; - a = a[e + 1]; - c = a.getGeneralPurposeVariable(c); - c = c - a.width / 2 - this.intraCellSpacing - b.width / 2; - if (!(c >= d)) return !1 - } - return !0 -}; -mxCoordinateAssignment.prototype.setCellLocations = function(a, b) { - this.rankTopY = []; - this.rankBottomY = []; - for (var c = 0; c < b.ranks.length; c++) this.rankTopY[c] = Number.MAX_VALUE, this.rankBottomY[c] = 0; - c = null; - this.layout.resizeParent && (c = {}); - var d = b.edgeMapper, - e = b.vertexMapper, - f; - for (f in e) { - var g = e[f]; - this.setVertexLocation(g); - if (this.layout.resizeParent) { - var g = a.model.getParent(g.cell), - h = mxCellPath.create(g); - null == c[h] && (c[h] = g) - } - } - this.layout.resizeParent && null != c && this.adjustParents(c); - (this.edgeStyle == mxHierarchicalEdgeStyle.ORTHOGONAL || - this.edgeStyle == mxHierarchicalEdgeStyle.POLYLINE || this.edgeStyle == mxHierarchicalEdgeStyle.CURVE) && this.localEdgeProcessing(b); - for (f in d) this.setEdgePosition(d[f]) -}; -mxCoordinateAssignment.prototype.adjustParents = function(a) { - var b = [], - c; - for (c in a) b.push(a[c]); - this.layout.arrangeGroups(mxUtils.sortCells(b, !0), this.groupPadding) -}; -mxCoordinateAssignment.prototype.localEdgeProcessing = function(a) { - for (var b = 0; b < a.ranks.length; b++) - for (var c = a.ranks[b], d = 0; d < c.length; d++) { - var e = c[d]; - if (e.isVertex()) - for (var f = e.getPreviousLayerConnectedCells(b), g = b - 1, h = 0; 2 > h; h++) { - if (-1 < g && g < a.ranks.length && null != f && 0 < f.length) { - for (var k = [], l = 0; l < f.length; l++) { - var m = new WeightedCellSorter(f[l], f[l].getX(g)); - k.push(m) - } - k.sort(WeightedCellSorter.prototype.compare); - for (var m = e.x[0] - e.width / 2, n = m + e.width, p = f = 0, g = [], l = 0; l < k.length; l++) { - var q = k[l].cell, - s; - if (q.isVertex()) { - s = 0 == h ? e.connectsAsSource : e.connectsAsTarget; - for (var r = 0; r < s.length; r++) - if (s[r].source == q || s[r].target == q) f += s[r].edges.length, p++, g.push(s[r]) - } else f += q.edges.length, p++, g.push(q) - } - e.width > (f + 1) * this.prefHozEdgeSep + 2 * this.prefHozEdgeSep && (m += this.prefHozEdgeSep, n -= this.prefHozEdgeSep); - k = (n - m) / f; - m += k / 2; - n = this.minEdgeJetty - this.prefVertEdgeOff; - for (l = p = 0; l < g.length; l++) { - q = g[l].edges.length; - r = mxCellPath.create(g[l].edges[0]); - s = this.jettyPositions[r]; - null == s && (s = [], this.jettyPositions[r] = - s); - l < f / 2 ? n += this.prefVertEdgeOff : l > f / 2 && (n -= this.prefVertEdgeOff); - for (r = 0; r < q; r++) s[4 * r + 2 * h] = m, m += k, s[4 * r + 2 * h + 1] = n; - p = Math.max(p, n) - } - } - f = e.getNextLayerConnectedCells(b); - g = b + 1 - } - } -}; -mxCoordinateAssignment.prototype.setEdgePosition = function(a) { - var b = 0; - if (101207 != a.temp[0]) { - var c = a.maxRank, - d = a.minRank; - c == d && (c = a.source.maxRank, d = a.target.minRank); - for (var e = 0, f = mxCellPath.create(a.edges[0]), f = this.jettyPositions[f], g = a.isReversed ? a.target.cell : a.source.cell, h = this.layout.graph, k = 0; k < a.edges.length; k++) { - var l = a.edges[k], - m = this.layout.getVisibleTerminal(l, !0), - n = h.model.getTerminal(l, !0), - p = [], - q = a.isReversed; - m != g && (q = !q); - if (null != f) { - var s = q ? 2 : 0, - r = q ? this.rankTopY[d] : this.rankBottomY[c], - t = f[4 * e + 1 + s]; - q && (t = -t); - r += t; - s = f[4 * e + s]; - n = h.model.getTerminal(l, !0); - this.layout.isPort(n) && h.model.getParent(n) == m && (s = h.view.getState(n), s = null != s ? s.x : m.geometry.x + a.source.width * n.geometry.x); - this.orientation == mxConstants.DIRECTION_NORTH || this.orientation == mxConstants.DIRECTION_SOUTH ? (p.push(new mxPoint(s, r)), this.edgeStyle == mxHierarchicalEdgeStyle.CURVE && p.push( - new mxPoint(s, r + t))) : (p.push(new mxPoint(r, s)), this.edgeStyle == mxHierarchicalEdgeStyle.CURVE && p.push(new mxPoint(r + t, s))) - } - s = a.x.length - - 1; - r = t = -1; - m = a.maxRank - 1; - q && (s = 0, t = a.x.length, r = 1, m = a.minRank + 1); - for (; a.maxRank != a.minRank && s != t; s += r) { - var n = a.x[s] + b, - v = (this.rankTopY[m] + this.rankBottomY[m + 1]) / 2, - w = (this.rankTopY[m - 1] + this.rankBottomY[m]) / 2; - if (q) var u = v, - v = w, - w = u; - this.orientation == mxConstants.DIRECTION_NORTH || this.orientation == mxConstants.DIRECTION_SOUTH ? (p.push(new mxPoint(n, v)), p.push(new mxPoint(n, w))) : (p.push(new mxPoint(v, n)), p.push( - new mxPoint(w, n))); - this.limitX = Math.max(this.limitX, n); - m += r - } - null != f && (s = q ? 2 : 0, r = q ? this.rankBottomY[c] : - this.rankTopY[d], t = f[4 * e + 3 - s], q && (t = -t), r -= t, s = f[4 * e + 2 - s], q = h.model.getTerminal(l, !1), m = this.layout.getVisibleTerminal(l, !1), this.layout.isPort(q) && h.model - .getParent(q) == m && (s = h.view.getState(q), s = null != s ? s.x : m.geometry.x + a.target.width * q.geometry.x), this.orientation == mxConstants.DIRECTION_NORTH || this.orientation == - mxConstants.DIRECTION_SOUTH ? (this.edgeStyle == mxHierarchicalEdgeStyle.CURVE && p.push(new mxPoint(s, r - t)), p.push(new mxPoint(s, r))) : (this.edgeStyle == mxHierarchicalEdgeStyle.CURVE && - p.push(new mxPoint(r - - t, s)), p.push(new mxPoint(r, s)))); - a.isReversed && this.processReversedEdge(a, l); - this.layout.setEdgePoints(l, p); - b = 0 == b ? this.parallelEdgeSpacing : 0 < b ? -b : -b + this.parallelEdgeSpacing; - e++ - } - a.temp[0] = 101207 - } -}; -mxCoordinateAssignment.prototype.setVertexLocation = function(a) { - var b = a.cell, - c = a.x[0] - a.width / 2, - d = a.y[0] - a.height / 2; - this.rankTopY[a.minRank] = Math.min(this.rankTopY[a.minRank], d); - this.rankBottomY[a.minRank] = Math.max(this.rankBottomY[a.minRank], d + a.height); - this.orientation == mxConstants.DIRECTION_NORTH || this.orientation == mxConstants.DIRECTION_SOUTH ? this.layout.setVertexLocation(b, c, d) : this.layout.setVertexLocation(b, d, c); - this.limitX = Math.max(this.limitX, c + a.width) -}; -mxCoordinateAssignment.prototype.processReversedEdge = function(a, b) {}; - -function WeightedCellSorter(a, b) { - this.cell = a; - this.weightedValue = b -} -WeightedCellSorter.prototype.weightedValue = 0; -WeightedCellSorter.prototype.nudge = !1; -WeightedCellSorter.prototype.visited = !1; -WeightedCellSorter.prototype.rankIndex = null; -WeightedCellSorter.prototype.cell = null; -WeightedCellSorter.prototype.compare = function(a, b) { - return null != a && null != b ? b.weightedValue > a.weightedValue ? -1 : b.weightedValue < a.weightedValue ? 1 : b.nudge ? -1 : 1 : 0 -}; - -function mxHierarchicalLayout(a, b, c) { - mxGraphLayout.call(this, a); - this.orientation = null != b ? b : mxConstants.DIRECTION_NORTH; - this.deterministic = null != c ? c : !0 -} -mxHierarchicalLayout.prototype = new mxGraphLayout; -mxHierarchicalLayout.prototype.constructor = mxHierarchicalLayout; -mxHierarchicalLayout.prototype.roots = null; -mxHierarchicalLayout.prototype.resizeParent = !1; -mxHierarchicalLayout.prototype.moveParent = !1; -mxHierarchicalLayout.prototype.parentBorder = 0; -mxHierarchicalLayout.prototype.intraCellSpacing = 30; -mxHierarchicalLayout.prototype.interRankCellSpacing = 100; -mxHierarchicalLayout.prototype.interHierarchySpacing = 60; -mxHierarchicalLayout.prototype.parallelEdgeSpacing = 10; -mxHierarchicalLayout.prototype.orientation = mxConstants.DIRECTION_NORTH; -mxHierarchicalLayout.prototype.fineTuning = !0; -mxHierarchicalLayout.prototype.tightenToSource = !0; -mxHierarchicalLayout.prototype.disableEdgeStyle = !0; -mxHierarchicalLayout.prototype.traverseAncestors = !0; -mxHierarchicalLayout.prototype.model = null; -mxHierarchicalLayout.prototype.edgesCache = null; -mxHierarchicalLayout.prototype.getModel = function() { - return this.model -}; -mxHierarchicalLayout.prototype.execute = function(a, b) { - this.parent = a; - var c = this.graph.model; - this.edgesCache = {}; - if (!(null == b && null == a)) { - if (null != b && null != a) { - for (var d = [], e = 0; e < b.length; e++) c.isAncestor(a, b[e]) && d.push(b[e]); - this.roots = d - } else this.roots = b; - c.beginUpdate(); - try { - this.run(a), this.resizeParent && !this.graph.isCellCollapsed(a) && this.graph.updateGroupBounds([a], this.parentBorder, this.moveParent) - } finally { - c.endUpdate() - } - } -}; -mxHierarchicalLayout.prototype.findRoots = function(a, b) { - var c = []; - if (null != a && null != b) { - var d = this.graph.model, - e = null, - f = -1E5, - g; - for (g in b) { - var h = b[g]; - if (d.isVertex(h) && this.graph.isCellVisible(h)) { - for (var k = this.getEdges(h), l = 0, m = 0, n = 0; n < k.length; n++) this.getVisibleTerminal(k[n], !0) == h ? l++ : m++; - 0 == m && 0 < l && c.push(h); - k = l - m; - k > f && (f = k, e = h) - } - } - 0 == c.length && null != e && c.push(e) - } - return c -}; -mxHierarchicalLayout.prototype.getEdges = function(a) { - var b = mxCellPath.create(a); - if (null != this.edgesCache[b]) return this.edgesCache[b]; - for (var c = this.graph.model, d = [], e = this.graph.isCellCollapsed(a), f = c.getChildCount(a), g = 0; g < f; g++) { - var h = c.getChildAt(a, g); - if (this.isPort(h)) d = d.concat(c.getEdges(h, !0, !0)); - else if (e || !this.graph.isCellVisible(h)) d = d.concat(c.getEdges(h, !0, !0)) - } - d = d.concat(c.getEdges(a, !0, !0)); - c = []; - for (g = 0; g < d.length; g++) e = this.getVisibleTerminal(d[g], !0), f = this.getVisibleTerminal(d[g], !1), (e == f || e != f && (f == a && (null == this.parent || this.graph.isValidAncestor(e, - this.parent, this.traverseAncestors)) || e == a && (null == this.parent || this.graph.isValidAncestor(f, this.parent, this.traverseAncestors)))) && c.push(d[g]); - return this.edgesCache[b] = c -}; -mxHierarchicalLayout.prototype.getVisibleTerminal = function(a, b) { - var c = this.graph.view.getState(a), - c = null != c ? c.getVisibleTerminal(b) : this.graph.view.getVisibleTerminal(a, b); - this.isPort(c) && (c = this.graph.model.getParent(c)); - return c -}; -mxHierarchicalLayout.prototype.run = function(a) { - var b = [], - c = []; - if (null == this.roots && null != a) { - var d = {}; - this.filterDescendants(a, d); - this.roots = []; - var e = !0, - f; - for (f in d) - if (null != d[f]) { - e = !1; - break - } - for (; !e;) { - for (var g = this.findRoots(a, d), e = 0; e < g.length; e++) { - var h = []; - b.push(h); - this.traverse(g[e], !0, null, c, h, b, d) - } - for (e = 0; e < g.length; e++) this.roots.push(g[e]); - e = !0; - for (f in d) - if (null != d[f]) { - e = !1; - break - } - } - } else - for (e = 0; e < roots.length; e++) h = [], b.push(h), traverse(roots.get(e), !0, null, c, h, b, null); - for (e = c = 0; e < b.length; e++) { - h = - b[e]; - d = []; - for (f in h) d.push(h[f]); - this.model = new mxGraphHierarchyModel(this, d, this.roots, a, this.tightenToSource); - this.cycleStage(a); - this.layeringStage(); - this.crossingStage(a); - c = this.placementStage(c, a) - } -}; -mxHierarchicalLayout.prototype.filterDescendants = function(a, b) { - var c = this.graph.model; - c.isVertex(a) && (a != this.parent && this.graph.isCellVisible(a)) && (b[mxCellPath.create(a)] = a); - if (this.traverseAncestors || a == this.parent && this.graph.isCellVisible(a)) - for (var d = c.getChildCount(a), e = 0; e < d; e++) { - var f = c.getChildAt(a, e); - this.isPort(f) || this.filterDescendants(f, b) - } -}; -mxHierarchicalLayout.prototype.isPort = function(a) { - return a.geometry.relative ? !0 : !1 -}; -mxHierarchicalLayout.prototype.getEdgesBetween = function(a, b, c) { - c = null != c ? c : !1; - for (var d = this.getEdges(a), e = [], f = 0; f < d.length; f++) { - var g = this.getVisibleTerminal(d[f], !0), - h = this.getVisibleTerminal(d[f], !1); - (g == a && h == b || !c && g == b && h == a) && e.push(d[f]) - } - return e -}; -mxHierarchicalLayout.prototype.traverse = function(a, b, c, d, e, f, g) { - if (null != a && null != d) { - var h = mxCellPath.create(a); - if (null == d[h] && (null == g || null != g[h])) { - null == e[h] && (e[h] = a); - null == d[h] && (d[h] = a); - delete g[h]; - var k = this.getEdges(a); - for (c = 0; c < k.length; c++) - if (h = this.getVisibleTerminal(k[c], !0) == a, !b || h) h = this.getVisibleTerminal(k[c], !h), e = this.traverse(h, b, k[c], d, e, f, g) - } else if (null == e[h]) - for (c = 0; c < f.length; c++) - if (a = f[c], null != a[h]) { - for (k in e) a[k] = e[k]; - f.pop(); - return a - } - } - return e -}; -mxHierarchicalLayout.prototype.cycleStage = function(a) { - (new mxMinimumCycleRemover(this)).execute(a) -}; -mxHierarchicalLayout.prototype.layeringStage = function() { - this.model.initialRank(); - this.model.fixRanks() -}; -mxHierarchicalLayout.prototype.crossingStage = function(a) { - (new mxMedianHybridCrossingReduction(this)).execute(a) -}; -mxHierarchicalLayout.prototype.placementStage = function(a, b) { - var c = new mxCoordinateAssignment(this, this.intraCellSpacing, this.interRankCellSpacing, this.orientation, a, this.parallelEdgeSpacing); - c.fineTuning = this.fineTuning; - c.execute(b); - return c.limitX + this.interHierarchySpacing -}; - -function mxGraphModel(a) { - this.currentEdit = this.createUndoableEdit(); - null != a ? this.setRoot(a) : this.clear() -} -mxGraphModel.prototype = new mxEventSource; -mxGraphModel.prototype.constructor = mxGraphModel; -mxGraphModel.prototype.root = null; -mxGraphModel.prototype.cells = null; -mxGraphModel.prototype.maintainEdgeParent = !0; -mxGraphModel.prototype.createIds = !0; -mxGraphModel.prototype.prefix = ""; -mxGraphModel.prototype.postfix = ""; -mxGraphModel.prototype.nextId = 0; -mxGraphModel.prototype.currentEdit = null; -mxGraphModel.prototype.updateLevel = 0; -mxGraphModel.prototype.endingUpdate = !1; -mxGraphModel.prototype.clear = function() { - this.setRoot(this.createRoot()) -}; -mxGraphModel.prototype.isCreateIds = function() { - return this.createIds -}; -mxGraphModel.prototype.setCreateIds = function(a) { - this.createIds = a -}; -mxGraphModel.prototype.createRoot = function() { - var a = new mxCell; - a.insert(new mxCell); - return a -}; -mxGraphModel.prototype.getCell = function(a) { - return null != this.cells ? this.cells[a] : null -}; -mxGraphModel.prototype.filterCells = function(a, b) { - var c = null; - if (null != a) - for (var c = [], d = 0; d < a.length; d++) b(a[d]) && c.push(a[d]); - return c -}; -mxGraphModel.prototype.getDescendants = function(a) { - return this.filterDescendants(null, a) -}; -mxGraphModel.prototype.filterDescendants = function(a, b) { - var c = []; - b = b || this.getRoot(); - (null == a || a(b)) && c.push(b); - for (var d = this.getChildCount(b), e = 0; e < d; e++) var f = this.getChildAt(b, e), - c = c.concat(this.filterDescendants(a, f)); - return c -}; -mxGraphModel.prototype.getRoot = function(a) { - var b = a || this.root; - if (null != a) - for (; null != a;) b = a, a = this.getParent(a); - return b -}; -mxGraphModel.prototype.setRoot = function(a) { - this.execute(new mxRootChange(this, a)); - return a -}; -mxGraphModel.prototype.rootChanged = function(a) { - var b = this.root; - this.root = a; - this.nextId = 0; - this.cells = null; - this.cellAdded(a); - return b -}; -mxGraphModel.prototype.isRoot = function(a) { - return null != a && this.root == a -}; -mxGraphModel.prototype.isLayer = function(a) { - return this.isRoot(this.getParent(a)) -}; -mxGraphModel.prototype.isAncestor = function(a, b) { - for (; null != b && b != a;) b = this.getParent(b); - return b == a -}; -mxGraphModel.prototype.contains = function(a) { - return this.isAncestor(this.root, a) -}; -mxGraphModel.prototype.getParent = function(a) { - return null != a ? a.getParent() : null -}; -mxGraphModel.prototype.add = function(a, b, c) { - if (b != a && null != a && null != b) { - null == c && (c = this.getChildCount(a)); - var d = a != this.getParent(b); - this.execute(new mxChildChange(this, a, b, c)); - this.maintainEdgeParent && d && this.updateEdgeParents(b) - } - return b -}; -mxGraphModel.prototype.cellAdded = function(a) { - if (null != a) { - null == a.getId() && this.createIds && a.setId(this.createId(a)); - if (null != a.getId()) { - var b = this.getCell(a.getId()); - if (b != a) { - for (; null != b;) a.setId(this.createId(a)), b = this.getCell(a.getId()); - null == this.cells && (this.cells = {}); - this.cells[a.getId()] = a - } - } - mxUtils.isNumeric(a.getId()) && (this.nextId = Math.max(this.nextId, a.getId())); - for (var b = this.getChildCount(a), c = 0; c < b; c++) this.cellAdded(this.getChildAt(a, c)) - } -}; -mxGraphModel.prototype.createId = function(a) { - a = this.nextId; - this.nextId++; - return this.prefix + a + this.postfix -}; -mxGraphModel.prototype.updateEdgeParents = function(a, b) { - b = b || this.getRoot(a); - for (var c = this.getChildCount(a), d = 0; d < c; d++) { - var e = this.getChildAt(a, d); - this.updateEdgeParents(e, b) - } - e = this.getEdgeCount(a); - c = []; - for (d = 0; d < e; d++) c.push(this.getEdgeAt(a, d)); - for (d = 0; d < c.length; d++) e = c[d], this.isAncestor(b, e) && this.updateEdgeParent(e, b) -}; -mxGraphModel.prototype.updateEdgeParent = function(a, b) { - for (var c = this.getTerminal(a, !0), d = this.getTerminal(a, !1), e = null; null != c && !this.isEdge(c) && null != c.geometry && c.geometry.relative;) c = this.getParent(c); - for (; null != d && !this.isEdge(d) && null != d.geometry && d.geometry.relative;) d = this.getParent(d); - if (this.isAncestor(b, c) && this.isAncestor(b, d) && (e = c == d ? this.getParent(c) : this.getNearestCommonAncestor(c, d), null != e && (this.getParent(e) != this.root || this.isAncestor(e, a)) && - this.getParent(a) != e)) { - c = this.getGeometry(a); - if (null != c) { - var f = this.getOrigin(this.getParent(a)), - g = this.getOrigin(e), - d = g.x - f.x, - f = g.y - f.y, - c = c.clone(); - c.translate(-d, -f); - this.setGeometry(a, c) - } - this.add(e, a, this.getChildCount(e)) - } -}; -mxGraphModel.prototype.getOrigin = function(a) { - var b = null; - null != a ? (b = this.getOrigin(this.getParent(a)), this.isEdge(a) || (a = this.getGeometry(a), null != a && (b.x += a.x, b.y += a.y))) : b = new mxPoint; - return b -}; -mxGraphModel.prototype.getNearestCommonAncestor = function(a, b) { - if (null != a && null != b) { - var c = mxCellPath.create(b); - if (null != c && 0 < c.length) { - var d = a, - e = mxCellPath.create(d); - if (c.length < e.length) var d = b, - f = e, - e = c, - c = f; - for (; null != d;) { - f = this.getParent(d); - if (0 == c.indexOf(e + mxCellPath.PATH_SEPARATOR) && null != f) return d; - e = mxCellPath.getParentPath(e); - d = f - } - } - } - return null -}; -mxGraphModel.prototype.remove = function(a) { - a == this.root ? this.setRoot(null) : null != this.getParent(a) && this.execute(new mxChildChange(this, null, a)); - return a -}; -mxGraphModel.prototype.cellRemoved = function(a) { - if (null != a && null != this.cells) { - for (var b = this.getChildCount(a) - 1; 0 <= b; b--) this.cellRemoved(this.getChildAt(a, b)); - null != this.cells && null != a.getId() && delete this.cells[a.getId()] - } -}; -mxGraphModel.prototype.parentForCellChanged = function(a, b, c) { - var d = this.getParent(a); - null != b ? (b != d || d.getIndex(a) != c) && b.insert(a, c) : null != d && (c = d.getIndex(a), d.remove(c)); - !this.contains(d) && null != b ? this.cellAdded(a) : null == b && this.cellRemoved(a); - return d -}; -mxGraphModel.prototype.getChildCount = function(a) { - return null != a ? a.getChildCount() : 0 -}; -mxGraphModel.prototype.getChildAt = function(a, b) { - return null != a ? a.getChildAt(b) : null -}; -mxGraphModel.prototype.getChildren = function(a) { - return null != a ? a.children : null -}; -mxGraphModel.prototype.getChildVertices = function(a) { - return this.getChildCells(a, !0, !1) -}; -mxGraphModel.prototype.getChildEdges = function(a) { - return this.getChildCells(a, !1, !0) -}; -mxGraphModel.prototype.getChildCells = function(a, b, c) { - b = null != b ? b : !1; - c = null != c ? c : !1; - for (var d = this.getChildCount(a), e = [], f = 0; f < d; f++) { - var g = this.getChildAt(a, f); - (!c && !b || c && this.isEdge(g) || b && this.isVertex(g)) && e.push(g) - } - return e -}; -mxGraphModel.prototype.getTerminal = function(a, b) { - return null != a ? a.getTerminal(b) : null -}; -mxGraphModel.prototype.setTerminal = function(a, b, c) { - var d = b != this.getTerminal(a, c); - this.execute(new mxTerminalChange(this, a, b, c)); - this.maintainEdgeParent && d && this.updateEdgeParent(a, this.getRoot()); - return b -}; -mxGraphModel.prototype.setTerminals = function(a, b, c) { - this.beginUpdate(); - try { - this.setTerminal(a, b, !0), this.setTerminal(a, c, !1) - } finally { - this.endUpdate() - } -}; -mxGraphModel.prototype.terminalForCellChanged = function(a, b, c) { - var d = this.getTerminal(a, c); - null != b ? b.insertEdge(a, c) : null != d && d.removeEdge(a, c); - return d -}; -mxGraphModel.prototype.getEdgeCount = function(a) { - return null != a ? a.getEdgeCount() : 0 -}; -mxGraphModel.prototype.getEdgeAt = function(a, b) { - return null != a ? a.getEdgeAt(b) : null -}; -mxGraphModel.prototype.getDirectedEdgeCount = function(a, b, c) { - for (var d = 0, e = this.getEdgeCount(a), f = 0; f < e; f++) { - var g = this.getEdgeAt(a, f); - g != c && this.getTerminal(g, b) == a && d++ - } - return d -}; -mxGraphModel.prototype.getConnections = function(a) { - return this.getEdges(a, !0, !0, !1) -}; -mxGraphModel.prototype.getIncomingEdges = function(a) { - return this.getEdges(a, !0, !1, !1) -}; -mxGraphModel.prototype.getOutgoingEdges = function(a) { - return this.getEdges(a, !1, !0, !1) -}; -mxGraphModel.prototype.getEdges = function(a, b, c, d) { - b = null != b ? b : !0; - c = null != c ? c : !0; - d = null != d ? d : !0; - for (var e = this.getEdgeCount(a), f = [], g = 0; g < e; g++) { - var h = this.getEdgeAt(a, g), - k = this.getTerminal(h, !0), - l = this.getTerminal(h, !1); - (d && k == l || k != l && (b && l == a || c && k == a)) && f.push(h) - } - return f -}; -mxGraphModel.prototype.getEdgesBetween = function(a, b, c) { - c = null != c ? c : !1; - var d = this.getEdgeCount(a), - e = this.getEdgeCount(b), - f = a, - g = d; - e < d && (g = e, f = b); - d = []; - for (e = 0; e < g; e++) { - var h = this.getEdgeAt(f, e), - k = this.getTerminal(h, !0), - l = this.getTerminal(h, !1), - m = l == a && k == b; - (k == a && l == b || !c && m) && d.push(h) - } - return d -}; -mxGraphModel.prototype.getOpposites = function(a, b, c, d) { - c = null != c ? c : !0; - d = null != d ? d : !0; - var e = []; - if (null != a) - for (var f = 0; f < a.length; f++) { - var g = this.getTerminal(a[f], !0), - h = this.getTerminal(a[f], !1); - g == b && null != h && h != b && d ? e.push(h) : h == b && (null != g && g != b && c) && e.push(g) - } - return e -}; -mxGraphModel.prototype.getTopmostCells = function(a) { - for (var b = [], c = 0; c < a.length; c++) { - for (var d = a[c], e = !0, f = this.getParent(d); null != f;) { - if (0 <= mxUtils.indexOf(a, f)) { - e = !1; - break - } - f = this.getParent(f) - } - e && b.push(d) - } - return b -}; -mxGraphModel.prototype.isVertex = function(a) { - return null != a ? a.isVertex() : !1 -}; -mxGraphModel.prototype.isEdge = function(a) { - return null != a ? a.isEdge() : !1 -}; -mxGraphModel.prototype.isConnectable = function(a) { - return null != a ? a.isConnectable() : !1 -}; -mxGraphModel.prototype.getValue = function(a) { - return null != a ? a.getValue() : null -}; -mxGraphModel.prototype.setValue = function(a, b) { - this.execute(new mxValueChange(this, a, b)); - return b -}; -mxGraphModel.prototype.valueForCellChanged = function(a, b) { - return a.valueChanged(b) -}; -mxGraphModel.prototype.getGeometry = function(a, b) { - return null != a ? a.getGeometry() : null -}; -mxGraphModel.prototype.setGeometry = function(a, b) { - b != this.getGeometry(a) && this.execute(new mxGeometryChange(this, a, b)); - return b -}; -mxGraphModel.prototype.geometryForCellChanged = function(a, b) { - var c = this.getGeometry(a); - a.setGeometry(b); - return c -}; -mxGraphModel.prototype.getStyle = function(a) { - return null != a ? a.getStyle() : null -}; -mxGraphModel.prototype.setStyle = function(a, b) { - b != this.getStyle(a) && this.execute(new mxStyleChange(this, a, b)); - return b -}; -mxGraphModel.prototype.styleForCellChanged = function(a, b) { - var c = this.getStyle(a); - a.setStyle(b); - return c -}; -mxGraphModel.prototype.isCollapsed = function(a) { - return null != a ? a.isCollapsed() : !1 -}; -mxGraphModel.prototype.setCollapsed = function(a, b) { - b != this.isCollapsed(a) && this.execute(new mxCollapseChange(this, a, b)); - return b -}; -mxGraphModel.prototype.collapsedStateForCellChanged = function(a, b) { - var c = this.isCollapsed(a); - a.setCollapsed(b); - return c -}; -mxGraphModel.prototype.isVisible = function(a) { - return null != a ? a.isVisible() : !1 -}; -mxGraphModel.prototype.setVisible = function(a, b) { - b != this.isVisible(a) && this.execute(new mxVisibleChange(this, a, b)); - return b -}; -mxGraphModel.prototype.visibleStateForCellChanged = function(a, b) { - var c = this.isVisible(a); - a.setVisible(b); - return c -}; -mxGraphModel.prototype.execute = function(a) { - a.execute(); - this.beginUpdate(); - this.currentEdit.add(a); - this.fireEvent(new mxEventObject(mxEvent.EXECUTE, "change", a)); - this.fireEvent(new mxEventObject(mxEvent.EXECUTED, "change", a)); - this.endUpdate() -}; -mxGraphModel.prototype.beginUpdate = function() { - this.updateLevel++; - this.fireEvent(new mxEventObject(mxEvent.BEGIN_UPDATE)); - 1 == this.updateLevel && this.fireEvent(new mxEventObject(mxEvent.START_EDIT)) -}; -mxGraphModel.prototype.endUpdate = function() { - this.updateLevel--; - 0 == this.updateLevel && this.fireEvent(new mxEventObject(mxEvent.END_EDIT)); - if (!this.endingUpdate) { - this.endingUpdate = 0 == this.updateLevel; - this.fireEvent(new mxEventObject(mxEvent.END_UPDATE, "edit", this.currentEdit)); - try { - if (this.endingUpdate && !this.currentEdit.isEmpty()) { - this.fireEvent(new mxEventObject(mxEvent.BEFORE_UNDO, "edit", this.currentEdit)); - var a = this.currentEdit; - this.currentEdit = this.createUndoableEdit(); - a.notify(); - this.fireEvent(new mxEventObject(mxEvent.UNDO, - "edit", a)) - } - } finally { - this.endingUpdate = !1 - } - } -}; -mxGraphModel.prototype.createUndoableEdit = function() { - var a = new mxUndoableEdit(this, !0); - a.notify = function() { - a.source.fireEvent(new mxEventObject(mxEvent.CHANGE, "edit", a, "changes", a.changes)); - a.source.fireEvent(new mxEventObject(mxEvent.NOTIFY, "edit", a, "changes", a.changes)) - }; - return a -}; -mxGraphModel.prototype.mergeChildren = function(a, b, c) { - c = null != c ? c : !0; - this.beginUpdate(); - try { - var d = {}; - this.mergeChildrenImpl(a, b, c, d); - for (var e in d) { - var f = d[e], - g = this.getTerminal(f, !0); - null != g && (g = d[mxCellPath.create(g)], this.setTerminal(f, g, !0)); - g = this.getTerminal(f, !1); - null != g && (g = d[mxCellPath.create(g)], this.setTerminal(f, g, !1)) - } - } finally { - this.endUpdate() - } -}; -mxGraphModel.prototype.mergeChildrenImpl = function(a, b, c, d) { - this.beginUpdate(); - try { - for (var e = a.getChildCount(), f = 0; f < e; f++) { - var g = a.getChildAt(f); - if ("function" == typeof g.getId) { - var h = g.getId(), - k = null != h && (!this.isEdge(g) || !c) ? this.getCell(h) : null; - if (null == k) { - var l = g.clone(); - l.setId(h); - l.setTerminal(g.getTerminal(!0), !0); - l.setTerminal(g.getTerminal(!1), !1); - k = b.insert(l); - this.cellAdded(k) - } - d[mxCellPath.create(g)] = k; - this.mergeChildrenImpl(g, k, c, d) - } - } - } finally { - this.endUpdate() - } -}; -mxGraphModel.prototype.getParents = function(a) { - var b = []; - if (null != a) - for (var c = {}, d = 0; d < a.length; d++) { - var e = this.getParent(a[d]); - if (null != e) { - var f = mxCellPath.create(e); - null == c[f] && (c[f] = e, b.push(e)) - } - } - return b -}; -mxGraphModel.prototype.cloneCell = function(a) { - return null != a ? this.cloneCells([a], !0)[0] : null -}; -mxGraphModel.prototype.cloneCells = function(a, b) { - for (var c = {}, d = [], e = 0; e < a.length; e++) null != a[e] ? d.push(this.cloneCellImpl(a[e], c, b)) : d.push(null); - for (e = 0; e < d.length; e++) null != d[e] && this.restoreClone(d[e], a[e], c); - return d -}; -mxGraphModel.prototype.cloneCellImpl = function(a, b, c) { - var d = this.cellCloned(a); - b[mxObjectIdentity.get(a)] = d; - if (c) { - c = this.getChildCount(a); - for (var e = 0; e < c; e++) { - var f = this.cloneCellImpl(this.getChildAt(a, e), b, !0); - d.insert(f) - } - } - return d -}; -mxGraphModel.prototype.cellCloned = function(a) { - return a.clone() -}; -mxGraphModel.prototype.restoreClone = function(a, b, c) { - var d = this.getTerminal(b, !0); - null != d && (d = c[mxObjectIdentity.get(d)], null != d && d.insertEdge(a, !0)); - d = this.getTerminal(b, !1); - null != d && (d = c[mxObjectIdentity.get(d)], null != d && d.insertEdge(a, !1)); - for (var d = this.getChildCount(a), e = 0; e < d; e++) this.restoreClone(this.getChildAt(a, e), this.getChildAt(b, e), c) -}; - -function mxRootChange(a, b) { - this.model = a; - this.previous = this.root = b -} -mxRootChange.prototype.execute = function() { - this.root = this.previous; - this.previous = this.model.rootChanged(this.previous) -}; - -function mxChildChange(a, b, c, d) { - this.model = a; - this.previous = this.parent = b; - this.child = c; - this.previousIndex = this.index = d -} -mxChildChange.prototype.execute = function() { - var a = this.model.getParent(this.child), - b = null != a ? a.getIndex(this.child) : 0; - null == this.previous && this.connect(this.child, !1); - a = this.model.parentForCellChanged(this.child, this.previous, this.previousIndex); - null != this.previous && this.connect(this.child, !0); - this.parent = this.previous; - this.previous = a; - this.index = this.previousIndex; - this.previousIndex = b -}; -mxChildChange.prototype.connect = function(a, b) { - b = null != b ? b : !0; - var c = a.getTerminal(!0), - d = a.getTerminal(!1); - null != c && (b ? this.model.terminalForCellChanged(a, c, !0) : this.model.terminalForCellChanged(a, null, !0)); - null != d && (b ? this.model.terminalForCellChanged(a, d, !1) : this.model.terminalForCellChanged(a, null, !1)); - a.setTerminal(c, !0); - a.setTerminal(d, !1); - c = this.model.getChildCount(a); - for (d = 0; d < c; d++) this.connect(this.model.getChildAt(a, d), b) -}; - -function mxTerminalChange(a, b, c, d) { - this.model = a; - this.cell = b; - this.previous = this.terminal = c; - this.source = d -} -mxTerminalChange.prototype.execute = function() { - this.terminal = this.previous; - this.previous = this.model.terminalForCellChanged(this.cell, this.previous, this.source) -}; - -function mxValueChange(a, b, c) { - this.model = a; - this.cell = b; - this.previous = this.value = c -} -mxValueChange.prototype.execute = function() { - this.value = this.previous; - this.previous = this.model.valueForCellChanged(this.cell, this.previous) -}; - -function mxStyleChange(a, b, c) { - this.model = a; - this.cell = b; - this.previous = this.style = c -} -mxStyleChange.prototype.execute = function() { - this.style = this.previous; - this.previous = this.model.styleForCellChanged(this.cell, this.previous) -}; - -function mxGeometryChange(a, b, c) { - this.model = a; - this.cell = b; - this.previous = this.geometry = c -} -mxGeometryChange.prototype.execute = function() { - this.geometry = this.previous; - this.previous = this.model.geometryForCellChanged(this.cell, this.previous) -}; - -function mxCollapseChange(a, b, c) { - this.model = a; - this.cell = b; - this.previous = this.collapsed = c -} -mxCollapseChange.prototype.execute = function() { - this.collapsed = this.previous; - this.previous = this.model.collapsedStateForCellChanged(this.cell, this.previous) -}; - -function mxVisibleChange(a, b, c) { - this.model = a; - this.cell = b; - this.previous = this.visible = c -} -mxVisibleChange.prototype.execute = function() { - this.visible = this.previous; - this.previous = this.model.visibleStateForCellChanged(this.cell, this.previous) -}; - -function mxCellAttributeChange(a, b, c) { - this.cell = a; - this.attribute = b; - this.previous = this.value = c -} -mxCellAttributeChange.prototype.execute = function() { - var a = this.cell.getAttribute(this.attribute); - null == this.previous ? this.cell.value.removeAttribute(this.attribute) : this.cell.setAttribute(this.attribute, this.previous); - this.previous = a -}; - -function mxCell(a, b, c) { - this.value = a; - this.setGeometry(b); - this.setStyle(c); - if (null != this.onInit) this.onInit() -} -mxCell.prototype.id = null; -mxCell.prototype.value = null; -mxCell.prototype.geometry = null; -mxCell.prototype.style = null; -mxCell.prototype.vertex = !1; -mxCell.prototype.edge = !1; -mxCell.prototype.connectable = !0; -mxCell.prototype.visible = !0; -mxCell.prototype.collapsed = !1; -mxCell.prototype.parent = null; -mxCell.prototype.source = null; -mxCell.prototype.target = null; -mxCell.prototype.children = null; -mxCell.prototype.edges = null; -mxCell.prototype.mxTransient = "id value parent source target children edges".split(" "); -mxCell.prototype.getId = function() { - return this.id -}; -mxCell.prototype.setId = function(a) { - this.id = a -}; -mxCell.prototype.getValue = function() { - return this.value -}; -mxCell.prototype.setValue = function(a) { - this.value = a -}; -mxCell.prototype.valueChanged = function(a) { - var b = this.getValue(); - this.setValue(a); - return b -}; -mxCell.prototype.getGeometry = function() { - return this.geometry -}; -mxCell.prototype.setGeometry = function(a) { - this.geometry = a -}; -mxCell.prototype.getStyle = function() { - return this.style -}; -mxCell.prototype.setStyle = function(a) { - this.style = a -}; -mxCell.prototype.isVertex = function() { - return this.vertex -}; -mxCell.prototype.setVertex = function(a) { - this.vertex = a -}; -mxCell.prototype.isEdge = function() { - return this.edge -}; -mxCell.prototype.setEdge = function(a) { - this.edge = a -}; -mxCell.prototype.isConnectable = function() { - return this.connectable -}; -mxCell.prototype.setConnectable = function(a) { - this.connectable = a -}; -mxCell.prototype.isVisible = function() { - return this.visible -}; -mxCell.prototype.setVisible = function(a) { - this.visible = a -}; -mxCell.prototype.isCollapsed = function() { - return this.collapsed -}; -mxCell.prototype.setCollapsed = function(a) { - this.collapsed = a -}; -mxCell.prototype.getParent = function() { - return this.parent -}; -mxCell.prototype.setParent = function(a) { - this.parent = a -}; -mxCell.prototype.getTerminal = function(a) { - return a ? this.source : this.target -}; -mxCell.prototype.setTerminal = function(a, b) { - b ? this.source = a : this.target = a; - return a -}; -mxCell.prototype.getChildCount = function() { - return null == this.children ? 0 : this.children.length -}; -mxCell.prototype.getIndex = function(a) { - return mxUtils.indexOf(this.children, a) -}; -mxCell.prototype.getChildAt = function(a) { - return null == this.children ? null : this.children[a] -}; -mxCell.prototype.insert = function(a, b) { - null != a && (null == b && (b = this.getChildCount(), a.getParent() == this && b--), a.removeFromParent(), a.setParent(this), null == this.children ? (this.children = [], this.children.push(a)) : - this.children.splice(b, 0, a)); - return a -}; -mxCell.prototype.remove = function(a) { - var b = null; - null != this.children && 0 <= a && (b = this.getChildAt(a), null != b && (this.children.splice(a, 1), b.setParent(null))); - return b -}; -mxCell.prototype.removeFromParent = function() { - if (null != this.parent) { - var a = this.parent.getIndex(this); - this.parent.remove(a) - } -}; -mxCell.prototype.getEdgeCount = function() { - return null == this.edges ? 0 : this.edges.length -}; -mxCell.prototype.getEdgeIndex = function(a) { - return mxUtils.indexOf(this.edges, a) -}; -mxCell.prototype.getEdgeAt = function(a) { - return null == this.edges ? null : this.edges[a] -}; -mxCell.prototype.insertEdge = function(a, b) { - if (null != a && (a.removeFromTerminal(b), a.setTerminal(this, b), null == this.edges || a.getTerminal(!b) != this || 0 > mxUtils.indexOf(this.edges, a))) null == this.edges && (this.edges = []), - this.edges.push(a); - return a -}; -mxCell.prototype.removeEdge = function(a, b) { - if (null != a) { - if (a.getTerminal(!b) != this && null != this.edges) { - var c = this.getEdgeIndex(a); - 0 <= c && this.edges.splice(c, 1) - } - a.setTerminal(null, b) - } - return a -}; -mxCell.prototype.removeFromTerminal = function(a) { - var b = this.getTerminal(a); - null != b && b.removeEdge(this, a) -}; -mxCell.prototype.getAttribute = function(a, b) { - var c = this.getValue(); - return (null != c && c.nodeType == mxConstants.NODETYPE_ELEMENT ? c.getAttribute(a) : null) || b -}; -mxCell.prototype.setAttribute = function(a, b) { - var c = this.getValue(); - null != c && c.nodeType == mxConstants.NODETYPE_ELEMENT && c.setAttribute(a, b) -}; -mxCell.prototype.clone = function() { - var a = mxUtils.clone(this, this.mxTransient); - a.setValue(this.cloneValue()); - return a -}; -mxCell.prototype.cloneValue = function() { - var a = this.getValue(); - null != a && ("function" == typeof a.clone ? a = a.clone() : isNaN(a.nodeType) || (a = a.cloneNode(!0))); - return a -}; - -function mxGeometry(a, b, c, d) { - mxRectangle.call(this, a, b, c, d) -} -mxGeometry.prototype = new mxRectangle; -mxGeometry.prototype.constructor = mxGeometry; -mxGeometry.prototype.TRANSLATE_CONTROL_POINTS = !0; -mxGeometry.prototype.alternateBounds = null; -mxGeometry.prototype.sourcePoint = null; -mxGeometry.prototype.targetPoint = null; -mxGeometry.prototype.points = null; -mxGeometry.prototype.offset = null; -mxGeometry.prototype.relative = !1; -mxGeometry.prototype.swap = function() { - if (null != this.alternateBounds) { - var a = new mxRectangle(this.x, this.y, this.width, this.height); - this.x = this.alternateBounds.x; - this.y = this.alternateBounds.y; - this.width = this.alternateBounds.width; - this.height = this.alternateBounds.height; - this.alternateBounds = a - } -}; -mxGeometry.prototype.getTerminalPoint = function(a) { - return a ? this.sourcePoint : this.targetPoint -}; -mxGeometry.prototype.setTerminalPoint = function(a, b) { - b ? this.sourcePoint = a : this.targetPoint = a; - return a -}; -mxGeometry.prototype.translate = function(a, b) { - this.clone(); - this.relative || (this.x += a, this.y += b); - null != this.sourcePoint && (this.sourcePoint.x += a, this.sourcePoint.y += b); - null != this.targetPoint && (this.targetPoint.x += a, this.targetPoint.y += b); - if (this.TRANSLATE_CONTROL_POINTS && null != this.points) - for (var c = this.points.length, d = 0; d < c; d++) { - var e = this.points[d]; - null != e && (e.x += a, e.y += b) - } -}; -var mxCellPath = { - PATH_SEPARATOR: ".", - create: function(a) { - var b = ""; - if (null != a) - for (var c = a.getParent(); null != c;) b = c.getIndex(a) + mxCellPath.PATH_SEPARATOR + b, a = c, c = a.getParent(); - a = b.length; - 1 < a && (b = b.substring(0, a - 1)); - return b - }, - getParentPath: function(a) { - if (null != a) { - var b = a.lastIndexOf(mxCellPath.PATH_SEPARATOR); - if (0 <= b) return a.substring(0, b); - if (0 < a.length) return "" - } - return null - }, - resolve: function(a, b) { - var c = a; - if (null != b) - for (var d = b.split(mxCellPath.PATH_SEPARATOR), e = 0; e < d.length; e++) c = c.getChildAt(parseInt(d[e])); - return c - }, - compare: function(a, b) { - for (var c = Math.min(a.length, b.length), d = 0, e = 0; e < c; e++) - if (a[e] != b[e]) { - 0 == a[e].length || 0 == b[e].length ? d = a[e] == b[e] ? 0 : a[e] > b[e] ? 1 : -1 : (c = parseInt(a[e]), e = parseInt(b[e]), d = c == e ? 0 : c > e ? 1 : -1); - break - } - 0 == d && (c = a.length, e = b.length, c != e && (d = c > e ? 1 : -1)); - return d - } - }, - mxPerimeter = { - RectanglePerimeter: function(a, b, c, d) { - b = a.getCenterX(); - var e = a.getCenterY(), - f = Math.atan2(c.y - e, c.x - b), - g = new mxPoint(0, 0), - h = Math.PI, - k = Math.PI / 2 - f, - l = Math.atan2(a.height, a.width); - f < -h + l || f > h - l ? (g.x = a.x, g.y = e - a.width * - Math.tan(f) / 2) : f < -l ? (g.y = a.y, g.x = b - a.height * Math.tan(k) / 2) : f < l ? (g.x = a.x + a.width, g.y = e + a.width * Math.tan(f) / 2) : (g.y = a.y + a.height, g.x = b + a.height * - Math.tan(k) / 2); - d && (c.x >= a.x && c.x <= a.x + a.width ? g.x = c.x : c.y >= a.y && c.y <= a.y + a.height && (g.y = c.y), c.x < a.x ? g.x = a.x : c.x > a.x + a.width && (g.x = a.x + a.width), c.y < a.y ? g.y = - a.y : c.y > a.y + a.height && (g.y = a.y + a.height)); - return g - }, - EllipsePerimeter: function(a, b, c, d) { - var e = a.x, - f = a.y, - g = a.width / 2, - h = a.height / 2, - k = e + g, - l = f + h; - b = c.x; - c = c.y; - var m = parseInt(b - k), - n = parseInt(c - l); - if (0 == m && 0 != n) return new mxPoint(k, - l + h * n / Math.abs(n)); - if (0 == m && 0 == n) return new mxPoint(b, c); - if (d) { - if (c >= f && c <= f + a.height) return a = c - l, a = Math.sqrt(g * g * (1 - a * a / (h * h))) || 0, b <= e && (a = -a), new mxPoint(k + a, c); - if (b >= e && b <= e + a.width) return a = b - k, a = Math.sqrt(h * h * (1 - a * a / (g * g))) || 0, c <= f && (a = -a), new mxPoint(b, l + a) - } - e = n / m; - l -= e * k; - f = g * g * e * e + h * h; - a = -2 * k * f; - h = Math.sqrt(a * a - 4 * f * (g * g * e * e * k * k + h * h * k * k - g * g * h * h)); - g = (-a + h) / (2 * f); - h = (-a - h) / (2 * f); - k = e * g + l; - l = e * h + l; - e = Math.sqrt(Math.pow(g - b, 2) + Math.pow(k - c, 2)); - b = Math.sqrt(Math.pow(h - b, 2) + Math.pow(l - c, 2)); - f = c = 0; - e < b ? (c = - g, f = k) : (c = h, f = l); - return new mxPoint(c, f) - }, - RhombusPerimeter: function(a, b, c, d) { - b = a.x; - var e = a.y, - f = a.width; - a = a.height; - var g = b + f / 2, - h = e + a / 2, - k = c.x; - c = c.y; - if (g == k) return h > c ? new mxPoint(g, e) : new mxPoint(g, e + a); - if (h == c) return g > k ? new mxPoint(b, h) : new mxPoint(b + f, h); - var l = g, - m = h; - d && (k >= b && k <= b + f ? l = k : c >= e && c <= e + a && (m = c)); - return k < g ? c < h ? mxUtils.intersection(k, c, l, m, g, e, b, h) : mxUtils.intersection(k, c, l, m, g, e + a, b, h) : c < h ? mxUtils.intersection(k, c, l, m, g, e, b + f, h) : mxUtils.intersection( - k, c, l, m, g, e + a, b + f, h) - }, - TrianglePerimeter: function(a, - b, c, d) { - b = null != b ? b.style[mxConstants.STYLE_DIRECTION] : null; - var e = b == mxConstants.DIRECTION_NORTH || b == mxConstants.DIRECTION_SOUTH, - f = a.x, - g = a.y, - h = a.width; - a = a.height; - var k = f + h / 2, - l = g + a / 2, - m = new mxPoint(f, g), - n = new mxPoint(f + h, l), - p = new mxPoint(f, g + a); - b == mxConstants.DIRECTION_NORTH ? (m = p, n = new mxPoint(k, g), p = new mxPoint(f + h, g + a)) : b == mxConstants.DIRECTION_SOUTH ? (n = new mxPoint(k, g + a), p = new mxPoint(f + h, g)) : - b == mxConstants.DIRECTION_WEST && (m = new mxPoint(f + h, g), n = new mxPoint(f, l), p = new mxPoint(f + h, g + a)); - var q = c.x - - k, - s = c.y - l, - q = e ? Math.atan2(q, s) : Math.atan2(s, q), - r = e ? Math.atan2(h, a) : Math.atan2(a, h), - s = !1, - s = b == mxConstants.DIRECTION_NORTH || b == mxConstants.DIRECTION_WEST ? q > -r && q < r : q < -Math.PI + r || q > Math.PI - r, - r = null; - s ? r = d && (e && c.x >= m.x && c.x <= p.x || !e && c.y >= m.y && c.y <= p.y) ? e ? new mxPoint(c.x, m.y) : new mxPoint(m.x, c.y) : b == mxConstants.DIRECTION_NORTH ? new mxPoint(f + h / 2 + - a * Math.tan(q) / 2, g + a) : b == mxConstants.DIRECTION_SOUTH ? new mxPoint(f + h / 2 - a * Math.tan(q) / 2, g) : b == mxConstants.DIRECTION_WEST ? new mxPoint(f + h, g + a / 2 + h * - Math.tan(q) / 2) : new mxPoint(f, - g + a / 2 - h * Math.tan(q) / 2) : (d && (d = new mxPoint(k, l), c.y >= g && c.y <= g + a ? (d.x = e ? k : b == mxConstants.DIRECTION_WEST ? f + h : f, d.y = c.y) : c.x >= f && c.x <= f + - h && (d.x = c.x, d.y = !e ? l : b == mxConstants.DIRECTION_NORTH ? g + a : g), k = d.x, l = d.y), r = e && c.x <= f + h / 2 || !e && c.y <= g + a / 2 ? mxUtils.intersection(c.x, c.y, k, - l, m.x, m.y, n.x, n.y) : mxUtils.intersection(c.x, c.y, k, l, n.x, n.y, p.x, p.y)); - null == r && (r = new mxPoint(k, l)); - return r - } - }; - -function mxPrintPreview(a, b, c, d, e, f, g, h, k) { - this.graph = a; - this.scale = null != b ? b : 1 / a.pageScale; - this.border = null != d ? d : 0; - this.pageFormat = null != c ? c : a.pageFormat; - this.title = null != h ? h : "Printer-friendly version"; - this.x0 = null != e ? e : 0; - this.y0 = null != f ? f : 0; - this.borderColor = g; - this.pageSelector = null != k ? k : !0 -} -mxPrintPreview.prototype.graph = null; -mxPrintPreview.prototype.pageFormat = null; -mxPrintPreview.prototype.scale = null; -mxPrintPreview.prototype.border = 0; -mxPrintPreview.prototype.x0 = 0; -mxPrintPreview.prototype.y0 = 0; -mxPrintPreview.prototype.autoOrigin = !0; -mxPrintPreview.prototype.printOverlays = !1; -mxPrintPreview.prototype.borderColor = null; -mxPrintPreview.prototype.title = null; -mxPrintPreview.prototype.pageSelector = null; -mxPrintPreview.prototype.wnd = null; -mxPrintPreview.prototype.pageCount = 0; -mxPrintPreview.prototype.getWindow = function() { - return this.wnd -}; -mxPrintPreview.prototype.getDoctype = function() { - var a = ""; - 8 == document.documentMode && (a = '\x3cmeta http-equiv\x3d"X-UA-Compatible" content\x3d"IE\x3d8"\x3e'); - return a -}; -mxPrintPreview.prototype.open = function(a) { - var b = this.graph.cellRenderer.initializeOverlay, - c = null; - try { - this.printOverlays && (this.graph.cellRenderer.initializeOverlay = function(a, b) { - b.init(a.view.getDrawPane()) - }); - if (null == this.wnd) { - this.wnd = window.open(); - var d = this.wnd.document, - e = this.getDoctype(); - null != e && 0 < e.length && d.writeln(e); - d.writeln("\x3chtml\x3e"); - d.writeln("\x3chead\x3e"); - this.writeHead(d, a); - d.writeln("\x3c/head\x3e"); - d.writeln('\x3cbody class\x3d"mxPage"\x3e'); - mxClient.link("stylesheet", mxClient.basePath + - "/css/common.css", d); - mxClient.IS_VML && (d.namespaces.add("v", "urn:schemas-microsoft-com:vml"), d.namespaces.add("o", "urn:schemas-microsoft-com:office:office"), d.createStyleSheet().cssText = - "v\\:*{behavior:url(#default#VML)}o\\:*{behavior:url(#default#VML)}", mxClient.link("stylesheet", mxClient.basePath + "/css/explorer.css", d)); - var f = this.graph.getGraphBounds().clone(), - g = this.graph.getView().getScale(), - h = g / this.scale, - k = this.graph.getView().getTranslate(); - this.autoOrigin || (this.x0 = -k.x * this.scale, this.y0 = -k.y * this.scale, f.width += f.x, f.height += f.y, f.x = 0, this.border = f.y = 0); - f.width /= h; - f.height /= h; - var l = this.pageFormat.width - 2 * this.border, - m = this.pageFormat.height - 2 * this.border, - n = Math.max(1, Math.ceil((f.width + this.x0) / l)), - p = Math.max(1, Math.ceil((f.height + this.y0) / m)); - this.pageCount = n * p; - var q = mxUtils.bind(this, function() { - if (this.pageSelector && (1 < p || 1 < n)) { - var a = this.createPageSelector(p, n); - d.body.appendChild(a); - if (mxClient.IS_IE) { - a.style.position = "absolute"; - var b = function() { - a.style.top = d.body.scrollTop + - 10 + "px" - }; - mxEvent.addListener(this.wnd, "scroll", function(a) { - b() - }); - mxEvent.addListener(this.wnd, "resize", function(a) { - b() - }) - } - } - }); - a = function(a, b) { - null != this.borderColor && (a.style.borderColor = this.borderColor, a.style.borderStyle = "solid", a.style.borderWidth = "1px"); - a.style.background = "white"; - b && (a.style.pageBreakAfter = "always"); - mxClient.IS_IE ? (d.writeln(a.outerHTML), a.parentNode.removeChild(a)) : (a.parentNode.removeChild(a), d.body.appendChild(a)); - if (b) { - var c = d.createElement("hr"); - c.className = "mxPageBreak"; - d.body.appendChild(c) - } - }; - var s = this.getCoverPages(this.pageFormat.width, this.pageFormat.height); - if (null != s) - for (var r = 0; r < s.length; r++) a(s[r], !0); - for (var t = this.getAppendices(this.pageFormat.width, this.pageFormat.height), r = 0; r < p; r++) - for (var v = r * m / this.scale - this.y0 / this.scale + (f.y - k.y * g) / g, s = 0; s < n; s++) { - if (null == this.wnd) return null; - var w = s * l / this.scale - this.x0 / this.scale + (f.x - k.x * g) / g, - u = r * n + s + 1, - c = this.renderPage(this.pageFormat.width, this.pageFormat.height, mxUtils.bind(this, function(a) { - this.addGraphFragment(-w, -v, this.scale, u, a) - })); - c.setAttribute("id", "mxPage-" + u); - a(c, null != t || r < p - 1 || s < n - 1) - } - if (null != t) - for (r = 0; r < t.length; r++) a(t[r], r < t.length); - d.writeln("\x3c/body\x3e"); - d.writeln("\x3c/html\x3e"); - d.close(); - q(); - mxEvent.release(d.body) - } - this.wnd.focus() - } catch (y) { - null != c && null != c.parentNode && c.parentNode.removeChild(c) - } finally { - this.graph.cellRenderer.initializeOverlay = b - } - return this.wnd -}; -mxPrintPreview.prototype.writeHead = function(a, b) { - null != this.title && a.writeln("\x3ctitle\x3e" + this.title + "\x3c/title\x3e"); - a.writeln('\x3cstyle type\x3d"text/css"\x3e'); - a.writeln("@media print {"); - a.writeln(" table.mxPageSelector { display: none; }"); - a.writeln(" hr.mxPageBreak { display: none; }"); - a.writeln("}"); - a.writeln("@media screen {"); - a.writeln(" table.mxPageSelector { position: fixed; right: 10px; top: 10px;font-family: Arial; font-size:10pt; border: solid 1px darkgray;background: white; border-collapse:collapse; }"); - a.writeln(" table.mxPageSelector td { border: solid 1px gray; padding:4px; }"); - a.writeln(" body.mxPage { background: gray; }"); - a.writeln("}"); - null != b && a.writeln(b); - a.writeln("\x3c/style\x3e") -}; -mxPrintPreview.prototype.createPageSelector = function(a, b) { - var c = this.wnd.document, - d = c.createElement("table"); - d.className = "mxPageSelector"; - d.setAttribute("border", "0"); - for (var e = c.createElement("tbody"), f = 0; f < a; f++) { - for (var g = c.createElement("tr"), h = 0; h < b; h++) { - var k = f * b + h + 1, - l = c.createElement("td"); - if (!mxClient.IS_NS || mxClient.IS_SF || mxClient.IS_GC) { - var m = c.createElement("a"); - m.setAttribute("href", "#mxPage-" + k); - mxUtils.write(m, k, c); - l.appendChild(m) - } else mxUtils.write(l, k, c); - g.appendChild(l) - } - e.appendChild(g) - } - d.appendChild(e); - return d -}; -mxPrintPreview.prototype.renderPage = function(a, b, c) { - var d = document.createElement("div"); - try { - d.style.width = a + "px"; - d.style.height = b + "px"; - d.style.overflow = "hidden"; - d.style.pageBreakInside = "avoid"; - d.style.position = "relative"; - var e = document.createElement("div"); - e.style.top = this.border + "px"; - e.style.left = this.border + "px"; - e.style.width = a - 2 * this.border + "px"; - e.style.height = b - 2 * this.border + "px"; - e.style.overflow = "hidden"; - this.graph.dialect == mxConstants.DIALECT_VML && (e.style.position = "absolute"); - d.appendChild(e); - document.body.appendChild(d); - c(e) - } catch (f) { - throw d.parentNode.removeChild(d), f; - } - return d -}; -mxPrintPreview.prototype.addGraphFragment = function(a, b, c, d, e) { - d = this.graph.getView(); - var f = this.graph.container; - this.graph.container = e; - var g = d.getCanvas(), - h = d.getBackgroundPane(), - k = d.getDrawPane(), - l = d.getOverlayPane(); - this.graph.dialect == mxConstants.DIALECT_SVG ? d.createSvg() : this.graph.dialect == mxConstants.DIALECT_VML ? d.createVml() : d.createHtml(); - var m = d.isEventsEnabled(); - d.setEventsEnabled(!1); - var n = this.graph.isEnabled(); - this.graph.setEnabled(!1); - var p = d.getTranslate(); - d.translate = new mxPoint(a, - b); - a = null; - try { - var q = [this.graph.getModel().getRoot()]; - a = new mxTemporaryCellStates(d, c, q) - } finally { - if (mxClient.IS_IE) d.overlayPane.innerHTML = ""; - else - for (c = e.firstChild; null != c;) q = c.nextSibling, b = c.nodeName.toLowerCase(), "svg" == b ? (c.setAttribute("width", parseInt(e.style.width)), c.setAttribute("height", parseInt(e.style.height))) : - "default" != c.style.cursor && "table" != b && c.parentNode.removeChild(c), c = q; - d.overlayPane.parentNode.removeChild(d.overlayPane); - this.graph.setEnabled(n); - this.graph.container = f; - d.canvas = - g; - d.backgroundPane = h; - d.drawPane = k; - d.overlayPane = l; - d.translate = p; - a.destroy(); - d.setEventsEnabled(m) - } -}; -mxPrintPreview.prototype.getCoverPages = function() { - return null -}; -mxPrintPreview.prototype.getAppendices = function() { - return null -}; -mxPrintPreview.prototype.print = function() { - var a = this.open(); - null != a && a.print() -}; -mxPrintPreview.prototype.close = function() { - null != this.wnd && (this.wnd.close(), this.wnd = null) -}; - -function mxStylesheet() { - this.styles = {}; - this.putDefaultVertexStyle(this.createDefaultVertexStyle()); - this.putDefaultEdgeStyle(this.createDefaultEdgeStyle()) -} -mxStylesheet.prototype.createDefaultVertexStyle = function() { - var a = {}; - a[mxConstants.STYLE_SHAPE] = mxConstants.SHAPE_RECTANGLE; - a[mxConstants.STYLE_PERIMETER] = mxPerimeter.RectanglePerimeter; - a[mxConstants.STYLE_VERTICAL_ALIGN] = mxConstants.ALIGN_MIDDLE; - a[mxConstants.STYLE_ALIGN] = mxConstants.ALIGN_CENTER; - a[mxConstants.STYLE_FILLCOLOR] = "#C3D9FF"; - a[mxConstants.STYLE_STROKECOLOR] = "#6482B9"; - a[mxConstants.STYLE_FONTCOLOR] = "#774400"; - return a -}; -mxStylesheet.prototype.createDefaultEdgeStyle = function() { - var a = {}; - a[mxConstants.STYLE_SHAPE] = mxConstants.SHAPE_CONNECTOR; - a[mxConstants.STYLE_ENDARROW] = mxConstants.ARROW_CLASSIC; - a[mxConstants.STYLE_VERTICAL_ALIGN] = mxConstants.ALIGN_MIDDLE; - a[mxConstants.STYLE_ALIGN] = mxConstants.ALIGN_CENTER; - a[mxConstants.STYLE_STROKECOLOR] = "#6482B9"; - a[mxConstants.STYLE_FONTCOLOR] = "#446299"; - return a -}; -mxStylesheet.prototype.putDefaultVertexStyle = function(a) { - this.putCellStyle("defaultVertex", a) -}; -mxStylesheet.prototype.putDefaultEdgeStyle = function(a) { - this.putCellStyle("defaultEdge", a) -}; -mxStylesheet.prototype.getDefaultVertexStyle = function() { - return this.styles.defaultVertex -}; -mxStylesheet.prototype.getDefaultEdgeStyle = function() { - return this.styles.defaultEdge -}; -mxStylesheet.prototype.putCellStyle = function(a, b) { - this.styles[a] = b -}; -mxStylesheet.prototype.getCellStyle = function(a, b) { - var c = b; - if (null != a && 0 < a.length) - for (var d = a.split(";"), c = null != c && ";" != a.charAt(0) ? mxUtils.clone(c) : {}, e = 0; e < d.length; e++) { - var f = d[e], - g = f.indexOf("\x3d"); - if (0 <= g) { - var h = f.substring(0, g), - f = f.substring(g + 1); - f == mxConstants.NONE ? delete c[h] : mxUtils.isNumeric(f) ? c[h] = parseFloat(f) : c[h] = f - } else if (f = this.styles[f], null != f) - for (h in f) c[h] = f[h] - } - return c -}; - -function mxCellState(a, b, c) { - this.view = a; - this.cell = b; - this.style = c; - this.origin = new mxPoint; - this.absoluteOffset = new mxPoint -} -mxCellState.prototype = new mxRectangle; -mxCellState.prototype.constructor = mxCellState; -mxCellState.prototype.view = null; -mxCellState.prototype.cell = null; -mxCellState.prototype.style = null; -mxCellState.prototype.invalid = !0; -mxCellState.prototype.invalidOrder = !1; -mxCellState.prototype.orderChanged = !1; -mxCellState.prototype.origin = null; -mxCellState.prototype.absolutePoints = null; -mxCellState.prototype.absoluteOffset = null; -mxCellState.prototype.visibleSourceState = null; -mxCellState.prototype.visibleTargetState = null; -mxCellState.prototype.terminalDistance = 0; -mxCellState.prototype.length = 0; -mxCellState.prototype.segments = null; -mxCellState.prototype.shape = null; -mxCellState.prototype.text = null; -mxCellState.prototype.getPerimeterBounds = function(a, b) { - a = a || 0; - b = null != b ? b : new mxRectangle(this.x, this.y, this.width, this.height); - if (null != this.shape && null != this.shape.stencil) { - var c = this.shape.stencil.computeAspect(this.style, b.x, b.y, b.width, b.height); - b.x = c.x; - b.y = c.y; - b.width = this.shape.stencil.w0 * c.width; - b.height = this.shape.stencil.h0 * c.height - } - 0 != a && b.grow(a); - return b -}; -mxCellState.prototype.setAbsoluteTerminalPoint = function(a, b) { - b ? (null == this.absolutePoints && (this.absolutePoints = []), 0 == this.absolutePoints.length ? this.absolutePoints.push(a) : this.absolutePoints[0] = a) : null == this.absolutePoints ? (this.absolutePoints = [], - this.absolutePoints.push(null), this.absolutePoints.push(a)) : 1 == this.absolutePoints.length ? this.absolutePoints.push(a) : this.absolutePoints[this.absolutePoints.length - 1] = a -}; -mxCellState.prototype.setCursor = function(a) { - null != this.shape && this.shape.setCursor(a); - null != this.text && this.text.setCursor(a) -}; -mxCellState.prototype.getVisibleTerminal = function(a) { - a = this.getVisibleTerminalState(a); - return null != a ? a.cell : null -}; -mxCellState.prototype.getVisibleTerminalState = function(a) { - return a ? this.visibleSourceState : this.visibleTargetState -}; -mxCellState.prototype.setVisibleTerminalState = function(a, b) { - b ? this.visibleSourceState = a : this.visibleTargetState = a -}; -mxCellState.prototype.destroy = function() { - this.view.graph.cellRenderer.destroy(this) -}; -mxCellState.prototype.clone = function() { - var a = new mxCellState(this.view, this.cell, this.style); - if (null != this.absolutePoints) { - a.absolutePoints = []; - for (var b = 0; b < this.absolutePoints.length; b++) a.absolutePoints[b] = this.absolutePoints[b].clone() - } - null != this.origin && (a.origin = this.origin.clone()); - null != this.absoluteOffset && (a.absoluteOffset = this.absoluteOffset.clone()); - null != this.boundingBox && (a.boundingBox = this.boundingBox.clone()); - a.terminalDistance = this.terminalDistance; - a.segments = this.segments; - a.length = - this.length; - a.x = this.x; - a.y = this.y; - a.width = this.width; - a.height = this.height; - return a -}; - -function mxGraphSelectionModel(a) { - this.graph = a; - this.cells = [] -} -mxGraphSelectionModel.prototype = new mxEventSource; -mxGraphSelectionModel.prototype.constructor = mxGraphSelectionModel; -mxGraphSelectionModel.prototype.doneResource = "none" != mxClient.language ? "done" : ""; -mxGraphSelectionModel.prototype.updatingSelectionResource = "none" != mxClient.language ? "updatingSelection" : ""; -mxGraphSelectionModel.prototype.graph = null; -mxGraphSelectionModel.prototype.singleSelection = !1; -mxGraphSelectionModel.prototype.isSingleSelection = function() { - return this.singleSelection -}; -mxGraphSelectionModel.prototype.setSingleSelection = function(a) { - this.singleSelection = a -}; -mxGraphSelectionModel.prototype.isSelected = function(a) { - return null != a ? 0 <= mxUtils.indexOf(this.cells, a) : !1 -}; -mxGraphSelectionModel.prototype.isEmpty = function() { - return 0 == this.cells.length -}; -mxGraphSelectionModel.prototype.clear = function() { - this.changeSelection(null, this.cells) -}; -mxGraphSelectionModel.prototype.setCell = function(a) { - null != a && this.setCells([a]) -}; -mxGraphSelectionModel.prototype.setCells = function(a) { - if (null != a) { - this.singleSelection && (a = [this.getFirstSelectableCell(a)]); - for (var b = [], c = 0; c < a.length; c++) this.graph.isCellSelectable(a[c]) && b.push(a[c]); - this.changeSelection(b, this.cells) - } -}; -mxGraphSelectionModel.prototype.getFirstSelectableCell = function(a) { - if (null != a) - for (var b = 0; b < a.length; b++) - if (this.graph.isCellSelectable(a[b])) return a[b]; - return null -}; -mxGraphSelectionModel.prototype.addCell = function(a) { - null != a && this.addCells([a]) -}; -mxGraphSelectionModel.prototype.addCells = function(a) { - if (null != a) { - var b = null; - this.singleSelection && (b = this.cells, a = [this.getFirstSelectableCell(a)]); - for (var c = [], d = 0; d < a.length; d++) !this.isSelected(a[d]) && this.graph.isCellSelectable(a[d]) && c.push(a[d]); - this.changeSelection(c, b) - } -}; -mxGraphSelectionModel.prototype.removeCell = function(a) { - null != a && this.removeCells([a]) -}; -mxGraphSelectionModel.prototype.removeCells = function(a) { - if (null != a) { - for (var b = [], c = 0; c < a.length; c++) this.isSelected(a[c]) && b.push(a[c]); - this.changeSelection(null, b) - } -}; -mxGraphSelectionModel.prototype.changeSelection = function(a, b) { - if (null != a && 0 < a.length && null != a[0] || null != b && 0 < b.length && null != b[0]) { - var c = new mxSelectionChange(this, a, b); - c.execute(); - var d = new mxUndoableEdit(this, !1); - d.add(c); - this.fireEvent(new mxEventObject(mxEvent.UNDO, "edit", d)) - } -}; -mxGraphSelectionModel.prototype.cellAdded = function(a) { - null != a && !this.isSelected(a) && this.cells.push(a) -}; -mxGraphSelectionModel.prototype.cellRemoved = function(a) { - null != a && (a = mxUtils.indexOf(this.cells, a), 0 <= a && this.cells.splice(a, 1)) -}; - -function mxSelectionChange(a, b, c) { - this.selectionModel = a; - this.added = null != b ? b.slice() : null; - this.removed = null != c ? c.slice() : null -} -mxSelectionChange.prototype.execute = function() { - var a = mxLog.enter("mxSelectionChange.execute"); - window.status = mxResources.get(this.selectionModel.updatingSelectionResource) || this.selectionModel.updatingSelectionResource; - if (null != this.removed) - for (var b = 0; b < this.removed.length; b++) this.selectionModel.cellRemoved(this.removed[b]); - if (null != this.added) - for (b = 0; b < this.added.length; b++) this.selectionModel.cellAdded(this.added[b]); - b = this.added; - this.added = this.removed; - this.removed = b; - window.status = mxResources.get(this.selectionModel.doneResource) || - this.selectionModel.doneResource; - mxLog.leave("mxSelectionChange.execute", a); - this.selectionModel.fireEvent(new mxEventObject(mxEvent.CHANGE, "added", this.added, "removed", this.removed)) -}; - -function mxCellEditor(a) { - this.graph = a -} -mxCellEditor.prototype.graph = null; -mxCellEditor.prototype.textarea = null; -mxCellEditor.prototype.editingCell = null; -mxCellEditor.prototype.trigger = null; -mxCellEditor.prototype.modified = !1; -mxCellEditor.prototype.autoSize = !0; -mxCellEditor.prototype.emptyLabelText = ""; -mxCellEditor.prototype.textNode = ""; -mxCellEditor.prototype.init = function() { - this.textarea = document.createElement("textarea"); - this.textarea.className = "mxCellEditor"; - this.textarea.style.position = "absolute"; - this.textarea.style.overflow = "visible"; - this.textarea.setAttribute("cols", "20"); - this.textarea.setAttribute("rows", "4"); - mxClient.IS_NS && (this.textarea.style.resize = "none"); - mxEvent.addListener(this.textarea, "blur", mxUtils.bind(this, function(a) { - this.focusLost() - })); - mxEvent.addListener(this.textarea, "keydown", mxUtils.bind(this, function(a) { - mxEvent.isConsumed(a) || - (113 == a.keyCode || this.graph.isEnterStopsCellEditing() && 13 == a.keyCode && !mxEvent.isControlDown(a) && !mxEvent.isShiftDown(a) ? (this.graph.stopEditing(!1), mxEvent.consume(a)) : - 27 == a.keyCode ? (this.graph.stopEditing(!0), mxEvent.consume(a)) : (this.clearOnChange && (this.clearOnChange = !1, this.textarea.value = ""), this.setModified(!0))) - })); - mxEvent.addListener(this.textarea, "keypress", mxUtils.bind(this, function(a) { - this.autoSize && !mxEvent.isConsumed(a) && setTimeout(mxUtils.bind(this, function() { - this.resize() - }), 0) - })) -}; -mxCellEditor.prototype.resize = function() { - if (null != this.textDiv) { - var a = this.graph.getView().getState(this.editingCell), - b = this.graph.isLabelClipped(a.cell), - c = this.graph.isWrapping(a.cell); - if (this.graph.getModel().isEdge(a.cell)) this.bounds.x = a.absoluteOffset.x, this.bounds.y = a.absoluteOffset.y, this.bounds.width = 0, this.bounds.height = 0; - else if (null != this.bounds) { - this.bounds.x = a.x; - this.bounds.y = a.y; - this.bounds.width = a.width; - this.bounds.height = a.height; - var d = mxUtils.getValue(a.style, mxConstants.STYLE_LABEL_POSITION, - mxConstants.ALIGN_CENTER); - d == mxConstants.ALIGN_LEFT ? this.bounds.x -= a.width : d == mxConstants.ALIGN_RIGHT && (this.bounds.x += a.width); - d = mxUtils.getValue(a.style, mxConstants.STYLE_VERTICAL_LABEL_POSITION, mxConstants.ALIGN_MIDDLE); - d == mxConstants.ALIGN_TOP ? this.bounds.y -= a.height : d == mxConstants.ALIGN_BOTTOM && (this.bounds.y += a.height) - } - d = this.textarea.value; - if ("\n" == d.charAt(d.length - 1) || "" == d) d += "\x26nbsp;"; - d = mxUtils.htmlEntities(d, !1); - c ? (this.textDiv.style.whiteSpace = "normal", this.textDiv.style.width = this.bounds.width + - "px") : d = d.replace(/ /g, "\x26nbsp;"); - d = d.replace(/\n/g, "\x3cbr/\x3e"); - this.textDiv.innerHTML = d; - var d = this.textDiv.offsetWidth + 30, - e = this.textDiv.offsetHeight + 16, - d = Math.max(d, 40), - e = Math.max(e, 20); - b && (d = Math.min(this.bounds.width - 4, d), e = Math.min(this.bounds.height, e)); - var f = null != a.text ? a.text.margin : null; - null == f && (f = mxUtils.getValue(a.style, mxConstants.STYLE_ALIGN, mxConstants.ALIGN_CENTER), a = mxUtils.getValue(a.style, mxConstants.STYLE_VERTICAL_ALIGN, mxConstants.ALIGN_MIDDLE), f = - mxUtils.getAlignmentAsPoint(f, - a)); - if (null != f) { - if (b || !c) this.textarea.style.left = Math.max(0, Math.round(this.bounds.x - f.x * this.bounds.width + f.x * d) - 3) + "px"; - this.textarea.style.top = Math.max(0, Math.round(this.bounds.y - f.y * this.bounds.height + f.y * e) + 4) + "px" - } - if (b || !c) this.textarea.style.width = d + "px"; - this.textarea.style.height = e + "px" - } -}; -mxCellEditor.prototype.isModified = function() { - return this.modified -}; -mxCellEditor.prototype.setModified = function(a) { - this.modified = a -}; -mxCellEditor.prototype.focusLost = function() { - this.stopEditing(!this.graph.isInvokesStopCellEditing()) -}; -mxCellEditor.prototype.startEditing = function(a, b) { - null == this.textarea && this.init(); - this.stopEditing(!0); - var c = this.graph.getView().getState(a); - if (null != c) { - this.editingCell = a; - this.trigger = b; - this.textNode = null; - null != c.text && this.isHideLabel(c) && (this.textNode = c.text.node, this.textNode.style.visibility = "hidden"); - var d = this.graph.getView().scale, - d = mxUtils.getValue(c.style, mxConstants.STYLE_FONTSIZE, mxConstants.DEFAULT_FONTSIZE) * d, - e = mxUtils.getValue(c.style, mxConstants.STYLE_FONTFAMILY, mxConstants.DEFAULT_FONTFAMILY), - f = mxUtils.getValue(c.style, mxConstants.STYLE_FONTCOLOR, "black"), - g = mxUtils.getValue(c.style, mxConstants.STYLE_ALIGN, mxConstants.ALIGN_LEFT), - h = (mxUtils.getValue(c.style, mxConstants.STYLE_FONTSTYLE, 0) & mxConstants.FONT_BOLD) == mxConstants.FONT_BOLD, - k = (mxUtils.getValue(c.style, mxConstants.STYLE_FONTSTYLE, 0) & mxConstants.FONT_ITALIC) == mxConstants.FONT_ITALIC, - l = (mxUtils.getValue(c.style, mxConstants.STYLE_FONTSTYLE, 0) & mxConstants.FONT_UNDERLINE) == mxConstants.FONT_UNDERLINE; - this.textarea.style.fontSize = Math.round(d) + - "px"; - this.textarea.style.lineHeight = Math.round(d * mxConstants.LINE_HEIGHT) + "px"; - this.textarea.style.fontFamily = e; - this.textarea.style.textAlign = g; - this.textarea.style.color = f; - this.textarea.style.fontWeight = h ? "bold" : "normal"; - this.textarea.style.fontStyle = k ? "italic" : ""; - this.textarea.style.textDecoration = l ? "underline" : ""; - this.textarea.style.overflow = "auto"; - this.textarea.style.outline = "none"; - this.bounds = d = this.getEditorBounds(c); - this.textarea.style.left = d.x + "px"; - this.textarea.style.top = d.y + "px"; - this.textarea.style.width = - d.width + "px"; - this.textarea.style.height = d.height + "px"; - this.textarea.style.zIndex = 5; - c = this.getInitialValue(c, b); - null == c || 0 == c.length ? (c = this.getEmptyLabelText(), this.clearOnChange = !0) : this.clearOnChange = !1; - this.setModified(!1); - this.textarea.value = c; - this.graph.container.appendChild(this.textarea); - "none" != this.textarea.style.display && (this.autoSize && (this.textDiv = this.createTextDiv(), document.body.appendChild(this.textDiv), this.resize()), this.textarea.focus(), this.textarea.select()) - } -}; -mxCellEditor.prototype.createTextDiv = function() { - var a = document.createElement("div"), - b = a.style; - b.position = "absolute"; - b.whiteSpace = "nowrap"; - b.visibility = "hidden"; - b.display = mxClient.IS_QUIRKS ? "inline" : "inline-block"; - b.zoom = "1"; - b.verticalAlign = "top"; - b.lineHeight = this.textarea.style.lineHeight; - b.fontSize = this.textarea.style.fontSize; - b.fontFamily = this.textarea.style.fontFamily; - b.fontWeight = this.textarea.style.fontWeight; - b.textAlign = this.textarea.style.textAlign; - b.fontStyle = this.textarea.style.fontStyle; - b.textDecoration = this.textarea.style.textDecoration; - return a -}; -mxCellEditor.prototype.stopEditing = function(a) { - null != this.editingCell && (null != this.textNode && (this.textNode.style.visibility = "visible", this.textNode = null), !a && this.isModified() && this.graph.labelChanged(this.editingCell, this - .getCurrentValue(), this.trigger), null != this.textDiv && (document.body.removeChild(this.textDiv), this.textDiv = null), this.bounds = this.trigger = this.editingCell = null, this.textarea - .blur(), this.textarea.parentNode.removeChild(this.textarea)) -}; -mxCellEditor.prototype.getInitialValue = function(a, b) { - return this.graph.getEditingValue(a.cell, b) -}; -mxCellEditor.prototype.getCurrentValue = function() { - return this.textarea.value.replace(/\r/g, "") -}; -mxCellEditor.prototype.isHideLabel = function(a) { - return !0 -}; -mxCellEditor.prototype.getMinimumSize = function(a) { - var b = this.graph.getView().scale; - return new mxRectangle(0, 0, null == a.text ? 30 : a.text.size * b + 20, "left" == this.textarea.style.textAlign ? 120 : 40) -}; -mxCellEditor.prototype.getEditorBounds = function(a) { - var b = this.graph.getModel().isEdge(a.cell), - c = this.graph.getView().scale, - d = this.getMinimumSize(a), - e = d.width, - d = d.height, - f = parseInt(a.style[mxConstants.STYLE_SPACING] || 2) * c, - g = parseInt(a.style[mxConstants.STYLE_SPACING_TOP] || 0) * c + f, - h = parseInt(a.style[mxConstants.STYLE_SPACING_RIGHT] || 0) * c + f, - k = parseInt(a.style[mxConstants.STYLE_SPACING_BOTTOM] || 0) * c + f, - c = parseInt(a.style[mxConstants.STYLE_SPACING_LEFT] || 0) * c + f, - h = new mxRectangle(a.x, a.y, Math.max(e, a.width - - c - h), Math.max(d, a.height - g - k)); - b ? (h.x = a.absoluteOffset.x, h.y = a.absoluteOffset.y, null != a.text && null != a.text.boundingBox && (0 < a.text.boundingBox.x && (h.x = a.text.boundingBox.x), 0 < a.text.boundingBox.y && (h.y = - a.text.boundingBox.y))) : null != a.text && null != a.text.boundingBox && (h.x = Math.min(h.x, a.text.boundingBox.x), h.y = Math.min(h.y, a.text.boundingBox.y)); - h.x += c; - h.y += g; - null != a.text && null != a.text.boundingBox && (b ? (h.width = Math.max(e, a.text.boundingBox.width), h.height = Math.max(d, a.text.boundingBox.height)) : (h.width = - Math.max(h.width, a.text.boundingBox.width), h.height = Math.max(h.height, a.text.boundingBox.height))); - this.graph.getModel().isVertex(a.cell) && (b = mxUtils.getValue(a.style, mxConstants.STYLE_LABEL_POSITION, mxConstants.ALIGN_CENTER), b == mxConstants.ALIGN_LEFT ? h.x -= a.width : b == - mxConstants.ALIGN_RIGHT && (h.x += a.width), b = mxUtils.getValue(a.style, mxConstants.STYLE_VERTICAL_LABEL_POSITION, mxConstants.ALIGN_MIDDLE), b == mxConstants.ALIGN_TOP ? h.y -= a.height : - b == mxConstants.ALIGN_BOTTOM && (h.y += a.height)); - return h -}; -mxCellEditor.prototype.getEmptyLabelText = function(a) { - return this.emptyLabelText -}; -mxCellEditor.prototype.getEditingCell = function() { - return this.editingCell -}; -mxCellEditor.prototype.destroy = function() { - null != this.textarea && (mxEvent.release(this.textarea), null != this.textarea.parentNode && this.textarea.parentNode.removeChild(this.textarea), this.textarea = null) -}; - -function mxCellRenderer() {} -mxCellRenderer.prototype.defaultEdgeShape = mxConnector; -mxCellRenderer.prototype.defaultVertexShape = mxRectangleShape; -mxCellRenderer.prototype.defaultTextShape = mxText; -mxCellRenderer.prototype.legacyControlPosition = !0; -mxCellRenderer.prototype.defaultShapes = {}; -mxCellRenderer.registerShape = function(a, b) { - mxCellRenderer.prototype.defaultShapes[a] = b -}; -mxCellRenderer.registerShape(mxConstants.SHAPE_RECTANGLE, mxRectangleShape); -mxCellRenderer.registerShape(mxConstants.SHAPE_ELLIPSE, mxEllipse); -mxCellRenderer.registerShape(mxConstants.SHAPE_RHOMBUS, mxRhombus); -mxCellRenderer.registerShape(mxConstants.SHAPE_CYLINDER, mxCylinder); -mxCellRenderer.registerShape(mxConstants.SHAPE_CONNECTOR, mxConnector); -mxCellRenderer.registerShape(mxConstants.SHAPE_ACTOR, mxActor); -mxCellRenderer.registerShape(mxConstants.SHAPE_TRIANGLE, mxTriangle); -mxCellRenderer.registerShape(mxConstants.SHAPE_HEXAGON, mxHexagon); -mxCellRenderer.registerShape(mxConstants.SHAPE_CLOUD, mxCloud); -mxCellRenderer.registerShape(mxConstants.SHAPE_LINE, mxLine); -mxCellRenderer.registerShape(mxConstants.SHAPE_ARROW, mxArrow); -mxCellRenderer.registerShape(mxConstants.SHAPE_DOUBLE_ELLIPSE, mxDoubleEllipse); -mxCellRenderer.registerShape(mxConstants.SHAPE_SWIMLANE, mxSwimlane); -mxCellRenderer.registerShape(mxConstants.SHAPE_IMAGE, mxImageShape); -mxCellRenderer.registerShape(mxConstants.SHAPE_LABEL, mxLabel); -mxCellRenderer.prototype.initialize = function(a, b) { - var c = a.view.graph.getModel(); - if (null != a.view.graph.container && null == a.shape && a.cell != a.view.currentRoot && (c.isVertex(a.cell) || c.isEdge(a.cell))) - if (this.createShape(a), null != a.shape && (null == b || b)) this.initializeShape(a), a.view.graph.ordered || c.isEdge(a.cell) ? a.invalidOrder = !0 : a.view.graph.keepEdgesInForeground && - null != this.firstEdge && (this.firstEdge.parentNode == a.shape.node.parentNode ? this.insertState(a, this.firstEdge) : this.firstEdge = null), a.shape.scale = - a.view.scale, this.createCellOverlays(a), this.installListeners(a) -}; -mxCellRenderer.prototype.initializeShape = function(a) { - a.shape.init(a.view.getDrawPane()) -}; -mxCellRenderer.prototype.getPreviousStateInContainer = function(a, b) { - for (var c = null, d = a.view.graph, e = d.getModel(), f = a.cell, g = e.getParent(f); null != g && null == c;) c = this.findPreviousStateInContainer(d, g, f, b), f = g, g = e.getParent(f); - return c -}; -mxCellRenderer.prototype.findPreviousStateInContainer = function(a, b, c, d) { - var e = null, - f = a.getModel(); - for (c = null != c ? b.getIndex(c) - 1 : f.getChildCount(b) - 1; 0 <= c && null == e; c--) e = this.findPreviousStateInContainer(a, f.getChildAt(b, c), null, d); - if (null == e && (e = a.view.getState(b), null != e && (null == e.shape || null == e.shape.node || e.shape.node.parentNode != d))) e = null; - return e -}; -mxCellRenderer.prototype.order = function(a) { - var b = a.shape.node.parentNode, - c = this.getPreviousStateInContainer(a, b), - d = b.firstChild; - null != c && (d = c.shape.node, null != c.text && (null != c.text.node && c.text.node.parentNode == b) && (d = c.text.node), d = d.nextSibling); - this.insertState(a, d) -}; -mxCellRenderer.prototype.orderEdge = function(a) { - var b = a.view, - c = b.graph.getModel(); - if (b.graph.keepEdgesInForeground) { - if (null == this.firstEdge || null == this.firstEdge.parentNode || this.firstEdge.parentNode != a.shape.node.parentNode) this.firstEdge = a.shape.node - } else if (b.graph.keepEdgesInBackground) { - var d = a.shape.node, - e = d.parentNode, - c = c.getParent(a.cell), - b = b.getState(c), - e = null != b && null != b.shape && null != b.shape.node ? b.shape.node.nextSibling : e.firstChild; - null != e && e != d && this.insertState(a, e) - } -}; -mxCellRenderer.prototype.insertState = function(a, b) { - a.shape.node.parentNode.insertBefore(a.shape.node, b); - null != a.text && (null != a.text.node && a.text.node.parentNode == a.shape.node.parentNode) && a.shape.node.parentNode.insertBefore(a.text.node, a.shape.node.nextSibling) -}; -mxCellRenderer.prototype.createShape = function(a) { - if (null != a.style) { - var b = mxStencilRegistry.getStencil(a.style[mxConstants.STYLE_SHAPE]); - null != b ? a.shape = new mxShape(b) : (b = this.getShapeConstructor(a), a.shape = new b); - a.shape.points = a.absolutePoints; - a.shape.bounds = new mxRectangle(a.x, a.y, a.width, a.height); - a.shape.dialect = a.view.graph.dialect; - this.configureShape(a) - } -}; -mxCellRenderer.prototype.getShape = function(a) { - return null != a ? mxCellRenderer.prototype.defaultShapes[a] : null -}; -mxCellRenderer.prototype.getShapeConstructor = function(a) { - var b = this.getShape(a.style[mxConstants.STYLE_SHAPE]); - null == b && (b = a.view.graph.getModel().isEdge(a.cell) ? this.defaultEdgeShape : this.defaultVertexShape); - return b -}; -mxCellRenderer.prototype.configureShape = function(a) { - a.shape.apply(a); - a.shape.image = a.view.graph.getImage(a); - a.shape.indicatorShape = this.getShape(a.view.graph.getIndicatorShape(a)); - a.shape.indicatorColor = a.view.graph.getIndicatorColor(a); - a.shape.indicatorGradientColor = a.view.graph.getIndicatorGradientColor(a); - a.shape.indicatorDirection = a.style[mxConstants.STYLE_INDICATOR_DIRECTION]; - a.shape.indicatorImage = a.view.graph.getIndicatorImage(a); - this.postConfigureShape(a) -}; -mxCellRenderer.prototype.postConfigureShape = function(a) { - null != a.shape && (this.resolveColor(a, "indicatorColor", mxConstants.STYLE_FILLCOLOR), this.resolveColor(a, "indicatorGradientColor", mxConstants.STYLE_GRADIENTCOLOR), this.resolveColor(a, - "fill", mxConstants.STYLE_FILLCOLOR), this.resolveColor(a, "stroke", mxConstants.STYLE_STROKECOLOR), this.resolveColor(a, "gradient", mxConstants.STYLE_GRADIENTCOLOR)) -}; -mxCellRenderer.prototype.resolveColor = function(a, b, c) { - var d = a.shape[b], - e = a.view.graph, - f = null; - "inherit" == d ? f = e.model.getParent(a.cell) : "swimlane" == d ? (f = null != e.model.getTerminal(a.cell, !1) ? e.model.getTerminal(a.cell, !1) : a.cell, f = e.getSwimlane(f), c = e.swimlaneIndicatorColorAttribute) : - "indicated" == d && (a.shape[b] = a.shape.indicatorColor); - null != f && (d = e.getView().getState(f), a.shape[b] = null, null != d && (a.shape[b] = null != d.shape && "indicatorColor" != b ? d.shape[b] : d.style[c])) -}; -mxCellRenderer.prototype.getLabelValue = function(a) { - return a.view.graph.getLabel(a.cell) -}; -mxCellRenderer.prototype.createLabel = function(a, b) { - var c = a.view.graph; - c.getModel().isEdge(a.cell); - if (0 < a.style[mxConstants.STYLE_FONTSIZE] || null == a.style[mxConstants.STYLE_FONTSIZE]) { - var d = c.isHtmlLabel(a.cell) || null != b && mxUtils.isNode(b); - a.text = new this.defaultTextShape(b, new mxRectangle, a.style[mxConstants.STYLE_ALIGN] || mxConstants.ALIGN_CENTER, c.getVerticalAlign(a), a.style[mxConstants.STYLE_FONTCOLOR], a.style[ - mxConstants.STYLE_FONTFAMILY], a.style[mxConstants.STYLE_FONTSIZE], a.style[mxConstants.STYLE_FONTSTYLE], - a.style[mxConstants.STYLE_SPACING], a.style[mxConstants.STYLE_SPACING_TOP], a.style[mxConstants.STYLE_SPACING_RIGHT], a.style[mxConstants.STYLE_SPACING_BOTTOM], a.style[mxConstants.STYLE_SPACING_LEFT], - a.style[mxConstants.STYLE_HORIZONTAL], a.style[mxConstants.STYLE_LABEL_BACKGROUNDCOLOR], a.style[mxConstants.STYLE_LABEL_BORDERCOLOR], c.isWrapping(a.cell) && c.isHtmlLabel(a.cell), c.isLabelClipped( - a.cell), a.style[mxConstants.STYLE_OVERFLOW], a.style[mxConstants.STYLE_LABEL_PADDING]); - a.text.opacity = mxUtils.getValue(a.style, - mxConstants.STYLE_TEXT_OPACITY, 100); - a.text.dialect = d ? mxConstants.DIALECT_STRICTHTML : a.view.graph.dialect; - a.text.state = a; - this.initializeLabel(a); - var e = !1, - f = function(b) { - var d = a; - if (mxClient.IS_TOUCH || e) d = mxEvent.getClientX(b), b = mxEvent.getClientY(b), b = mxUtils.convertPoint(c.container, d, b), d = c.view.getState(c.getCellAt(b.x, b.y)); - return d - }; - mxEvent.addGestureListeners(a.text.node, mxUtils.bind(this, function(b) { - this.isLabelEvent(a, b) && (c.fireMouseEvent(mxEvent.MOUSE_DOWN, new mxMouseEvent(b, a)), e = c.dialect != - mxConstants.DIALECT_SVG && "IMG" == mxEvent.getSource(b).nodeName) - }), mxUtils.bind(this, function(b) { - this.isLabelEvent(a, b) && c.fireMouseEvent(mxEvent.MOUSE_MOVE, new mxMouseEvent(b, f(b))) - }), mxUtils.bind(this, function(b) { - this.isLabelEvent(a, b) && (c.fireMouseEvent(mxEvent.MOUSE_UP, new mxMouseEvent(b, f(b))), e = !1) - })); - mxEvent.addListener(a.text.node, "dblclick", mxUtils.bind(this, function(b) { - this.isLabelEvent(a, b) && (c.dblClick(b, a.cell), mxEvent.consume(b)) - })) - } -}; -mxCellRenderer.prototype.initializeLabel = function(a) { - var b = a.view.graph; - a.text.dialect != mxConstants.DIALECT_SVG && (mxClient.IS_SVG && mxClient.NO_FO ? a.text.init(b.container) : mxUtils.isVml(a.view.getDrawPane()) && (null != a.shape.label ? a.text.init(a.shape.label) : - a.text.init(a.shape.node))); - null == a.text.node && (a.text.init(a.view.getDrawPane()), null != a.shape && null != a.text && a.shape.node.parentNode.insertBefore(a.text.node, a.shape.node.nextSibling)) -}; -mxCellRenderer.prototype.createCellOverlays = function(a) { - var b = a.view.graph.getCellOverlays(a.cell), - c = null; - if (null != b) - for (var c = new mxDictionary, d = 0; d < b.length; d++) { - var e = null != a.overlays ? a.overlays.remove(b[d]) : null; - null == e && (e = new mxImageShape(new mxRectangle, b[d].image.src), e.dialect = a.view.graph.dialect, e.preserveImageAspect = !1, e.overlay = b[d], this.initializeOverlay(a, e), this.installCellOverlayListeners( - a, b[d], e), null != b[d].cursor && (e.node.style.cursor = b[d].cursor)); - c.put(b[d], e) - } - null != a.overlays && - a.overlays.visit(function(a, b) { - b.destroy() - }); - a.overlays = c -}; -mxCellRenderer.prototype.initializeOverlay = function(a, b) { - b.init(a.view.getOverlayPane()) -}; -mxCellRenderer.prototype.installCellOverlayListeners = function(a, b, c) { - var d = a.view.graph; - mxEvent.addListener(c.node, "click", function(c) { - d.isEditing() && d.stopEditing(!d.isInvokesStopCellEditing()); - b.fireEvent(new mxEventObject(mxEvent.CLICK, "event", c, "cell", a.cell)) - }); - mxEvent.addGestureListeners(c.node, function(a) { - mxEvent.consume(a) - }, function(b) { - d.fireMouseEvent(mxEvent.MOUSE_MOVE, new mxMouseEvent(b, a)) - }); - mxClient.IS_TOUCH && mxEvent.addListener(c.node, "touchend", function(c) { - b.fireEvent(new mxEventObject(mxEvent.CLICK, - "event", c, "cell", a.cell)) - }) -}; -mxCellRenderer.prototype.createControl = function(a) { - var b = a.view.graph, - c = b.getFoldingImage(a); - if (b.foldingEnabled && null != c) { - if (null == a.control) { - var d = new mxRectangle(0, 0, c.width, c.height); - a.control = new mxImageShape(d, c.src); - a.control.preserveImageAspect = !1; - a.control.dialect = b.dialect; - this.initControl(a, a.control, !0, function(c) { - if (b.isEnabled()) { - var d = !b.isCellCollapsed(a.cell); - b.foldCells(d, !1, [a.cell]); - mxEvent.consume(c) - } - }) - } - } else null != a.control && (a.control.destroy(), a.control = null) -}; -mxCellRenderer.prototype.initControl = function(a, b, c, d) { - var e = a.view.graph; - e.isHtmlLabel(a.cell) && mxClient.NO_FO && e.dialect == mxConstants.DIALECT_SVG ? (b.dialect = mxConstants.DIALECT_PREFERHTML, b.init(e.container), b.node.style.zIndex = 1) : b.init(a.view.getOverlayPane()); - b = b.innerNode || b.node; - d && (e.isEnabled() && (b.style.cursor = "pointer"), mxEvent.addListener(b, "click", d)); - c && mxEvent.addGestureListeners(b, function(b) { - e.fireMouseEvent(mxEvent.MOUSE_DOWN, new mxMouseEvent(b, a)); - mxEvent.consume(b) - }, function(b) { - e.fireMouseEvent(mxEvent.MOUSE_MOVE, - new mxMouseEvent(b, a)) - }); - return b -}; -mxCellRenderer.prototype.isShapeEvent = function(a, b) { - return !0 -}; -mxCellRenderer.prototype.isLabelEvent = function(a, b) { - return !0 -}; -mxCellRenderer.prototype.installListeners = function(a) { - var b = a.view.graph, - c = function(c) { - var d = a; - if (b.dialect != mxConstants.DIALECT_SVG && "IMG" == mxEvent.getSource(c).nodeName || mxClient.IS_TOUCH) d = mxEvent.getClientX(c), c = mxEvent.getClientY(c), c = mxUtils.convertPoint(b.container, - d, c), d = b.view.getState(b.getCellAt(c.x, c.y)); - return d - }, - d = !1; - mxEvent.addListener(a.shape.node, "gesturestart", mxUtils.bind(this, function(a) { - b.lastTouchTime = 0; - d = !0; - mxEvent.consume(a) - })); - mxEvent.addGestureListeners(a.shape.node, mxUtils.bind(this, - function(c) { - this.isShapeEvent(a, c) && !d ? b.fireMouseEvent(mxEvent.MOUSE_DOWN, new mxMouseEvent(c, null != a.shape && mxEvent.getSource(c) == a.shape.content ? null : a)) : d && mxEvent.consume(c) - }), mxUtils.bind(this, function(e) { - this.isShapeEvent(a, e) && !d ? b.fireMouseEvent(mxEvent.MOUSE_MOVE, new mxMouseEvent(e, null != a.shape && mxEvent.getSource(e) == a.shape.content ? null : c(e))) : d && mxEvent.consume( - e) - }), mxUtils.bind(this, function(e) { - this.isShapeEvent(a, e) && !d ? b.fireMouseEvent(mxEvent.MOUSE_UP, new mxMouseEvent(e, null != a.shape && - mxEvent.getSource(e) == a.shape.content ? null : c(e))) : d && mxEvent.consume(e) - })); - var e = mxClient.IS_TOUCH ? "gestureend" : "dblclick"; - mxEvent.addListener(a.shape.node, e, mxUtils.bind(this, function(c) { - d = !1; - "gestureend" == e ? (b.lastTouchTime = 0, b.gestureEnabled && (b.handleGesture(a, c), mxEvent.consume(c))) : this.isShapeEvent(a, c) && (b.dblClick(c, null != a.shape && mxEvent.getSource( - c) == a.shape.content ? null : a.cell), mxEvent.consume(c)) - })) -}; -mxCellRenderer.prototype.redrawLabel = function(a, b) { - var c = this.getLabelValue(a); - if (null == a.text && null != c && (mxUtils.isNode(c) || 0 < c.length)) this.createLabel(a, c); - else if (null != a.text && (null == c || 0 == c.length)) a.text.destroy(), a.text = null; - if (null != a.text) { - var d = a.view.graph, - e = d.isWrapping(a.cell), - d = d.isLabelClipped(a.cell), - f = this.getLabelBounds(a); - if (b || a.text.value != c || a.text.isWrapping != e || a.text.isClipping != d || a.text.scale != a.view.scale || !a.text.bounds.equals(f)) a.text.value = c, a.text.bounds = f, a.text.scale = - this.getTextScale(a), a.text.isWrapping = e, a.text.isClipping = d, a.text.redraw() - } -}; -mxCellRenderer.prototype.getTextScale = function(a) { - return a.view.scale -}; -mxCellRenderer.prototype.getLabelBounds = function(a) { - var b = a.view.graph, - c = a.view.scale, - d = b.getModel().isEdge(a.cell), - e = new mxRectangle(a.absoluteOffset.x, a.absoluteOffset.y); - a.text.updateMargin(); - d ? (d = a.text.getSpacing(), e.x += d.x * c, e.y += d.y * c, b = b.getCellGeometry(a.cell), null != b && (e.width = Math.max(0, a.text.margin.x * b.width * c - a.text.spacingLeft * c - a.text.spacingRight * - c), e.height = Math.max(0, a.text.margin.y * b.height * c - a.text.spacingTop * c - a.text.spacingBottom * c))) : (a.text.isPaintBoundsInverted() && (d = e.x, - e.x = e.y, e.y = d), e.x += a.x, e.y += a.y, e.width = Math.max(1, a.width), e.height = Math.max(1, a.height), b.isSwimlane(a.cell) && (b = b.getStartSize(a.cell), 0 < b.width ? (d = Math.min( - e.width, b.width * c), a.shape.flipH && (e.x += e.width - d), e.width = d) : 0 < b.height && (d = Math.min(e.height, b.height * c), a.shape.flipV && (e.y += e.height - d), e.height = d)), - this.rotateLabelBounds(a, e)); - return e -}; -mxCellRenderer.prototype.rotateLabelBounds = function(a, b) { - if (a.text.isPaintBoundsInverted()) { - var c = (a.width - a.height) / 2; - b.x += c; - b.y -= c; - c = b.width; - b.width = b.height; - b.height = c - } - b.x -= a.text.margin.x * b.width; - b.y -= a.text.margin.y * b.height; - if ("fill" != a.style[mxConstants.STYLE_OVERFLOW]) { - var c = a.view.scale, - d = a.text.getSpacing(); - b.x += d.x * c; - b.y += d.y * c; - b.width = Math.max(0, b.width - a.text.spacingLeft * c - a.text.spacingRight * c); - b.height = Math.max(0, b.height - a.text.spacingTop * c - a.text.spacingBottom * c) - } - var e = a.text.getTextRotation(); - if (0 != e && (null != a && a.view.graph.model.isVertex(a.cell)) && (c = a.getCenterX(), d = a.getCenterY(), b.x != c || b.y != d)) e *= Math.PI / 180, pt = mxUtils.getRotatedPoint(new mxPoint(b.x, - b.y), Math.cos(e), Math.sin(e), new mxPoint(c, d)), b.x = pt.x, b.y = pt.y -}; -mxCellRenderer.prototype.redrawCellOverlays = function(a, b) { - this.createCellOverlays(a); - if (null != a.overlays) { - var c = mxUtils.mod(mxUtils.getValue(a.style, mxConstants.STYLE_ROTATION, 0), 90), - d = mxUtils.toRadians(c), - e = Math.cos(d), - f = Math.sin(d); - a.overlays.visit(function(d, h) { - var k = h.overlay.getBounds(a); - if (!a.view.graph.getModel().isEdge(a.cell) && null != a.shape && 0 != c) { - var l = k.getCenterX(), - m = k.getCenterY(), - m = mxUtils.getRotatedPoint(new mxPoint(l, m), e, f, new mxPoint(a.getCenterX(), a.getCenterY())), - l = m.x, - m = m.y; - k.x = - Math.round(l - k.width / 2); - k.y = Math.round(m - k.height / 2) - } - if (b || null == h.bounds || h.scale != a.view.scale || !h.bounds.equals(k)) h.bounds = k, h.scale = a.view.scale, h.redraw() - }) - } -}; -mxCellRenderer.prototype.redrawControl = function(a, b) { - if (null != a.control) { - var c = this.getControlBounds(a), - d = this.legacyControlPosition ? mxUtils.getValue(a.style, mxConstants.STYLE_ROTATION, 0) : a.shape.getTextRotation(), - e = a.view.scale; - if (b || a.control.scale != e || !a.control.bounds.equals(c) || a.control.rotation != d) a.control.rotation = d, a.control.bounds = c, a.control.scale = e, a.control.redraw() - } -}; -mxCellRenderer.prototype.getControlBounds = function(a) { - if (null != a.control) { - var b = a.control.scale, - c = a.control.bounds.width / b, - b = a.control.bounds.height / b, - d = a.view.scale, - e = a.getCenterX(), - f = a.getCenterY(); - if (!a.view.graph.getModel().isEdge(a.cell) && (e = a.x + c * d, f = a.y + b * d, null != a.shape)) { - var g = a.shape.getShapeRotation(); - if (this.legacyControlPosition) g = mxUtils.getValue(a.style, mxConstants.STYLE_ROTATION, 0); - else if (a.shape.isPaintBoundsInverted()) var h = (a.width - a.height) / 2, - e = e + h, - f = f - h; - 0 != g && (h = mxUtils.toRadians(g), - g = Math.cos(h), h = Math.sin(h), f = mxUtils.getRotatedPoint(new mxPoint(e, f), g, h, new mxPoint(a.getCenterX(), a.getCenterY())), e = f.x, f = f.y) - } - return a.view.graph.getModel().isEdge(a.cell), new mxRectangle(Math.round(e - c / 2 * d), Math.round(f - b / 2 * d), Math.round(c * d), Math.round(b * d)) - } - return null -}; -mxCellRenderer.prototype.redraw = function(a, b, c) { - if (null != a.shape) { - var d = !1; - a.view.graph.getModel().isEdge(a.cell); - reconfigure = null != b ? b : !1; - this.createControl(a); - if (a.orderChanged || a.invalidOrder) a.view.graph.ordered ? this.order(a) : this.orderEdge(a); - if (a.orderChanged || !mxUtils.equalEntries(a.shape.style, a.style)) this.configureShape(a), b = !0; - delete a.invalidOrder; - delete a.orderChanged; - if (b || null == a.shape.bounds || a.shape.scale != a.view.scale || !a.shape.bounds.equals(a) || !mxUtils.equalPoints(a.shape.points, - a.absolutePoints)) d = !0, a.shape.points = null != a.absolutePoints ? a.absolutePoints.slice() : null, a.shape.bounds = new mxRectangle(a.x, a.y, a.width, a.height), a.shape.scale = a.view - .scale, null == c || c ? a.shape.redraw() : a.shape.updateBoundingBox(); - if (null == c || c) this.redrawLabel(a, d), this.redrawCellOverlays(a, d), this.redrawControl(a, d) - } -}; -mxCellRenderer.prototype.destroy = function(a) { - null != a.shape && (null != a.text && (a.text.destroy(), a.text = null), null != a.overlays && (a.overlays.visit(function(a, c) { - c.destroy() - }), a.overlays = null), null != a.control && (a.control.destroy(), a.control = null), a.shape.destroy(), a.shape = null) -}; -var mxEdgeStyle = { - EntityRelation: function(a, b, c, d, e) { - var f = a.view, - g = f.graph; - d = mxUtils.getValue(a.style, mxConstants.STYLE_SEGMENT, mxConstants.ENTITY_SEGMENT) * f.scale; - var h = a.absolutePoints, - k = h[0], - l = h[h.length - 1], - h = !1; - if (null != k) b = new mxCellState, b.x = k.x, b.y = k.y; - else if (null != b) { - var m = mxUtils.getPortConstraints(b, a, !0, mxConstants.DIRECTION_MASK_NONE); - m != mxConstants.DIRECTION_MASK_NONE ? h = m == mxConstants.DIRECTION_MASK_WEST : (k = g.getCellGeometry(b.cell), k.relative ? h = 0.5 >= k.x : null != c && (h = c.x + c.width < b.x)) - } else return; - k = !0; - null != l ? (c = new mxCellState, c.x = l.x, c.y = l.y) : null != c && (m = mxUtils.getPortConstraints(c, a, !1, mxConstants.DIRECTION_MASK_NONE), m != mxConstants.DIRECTION_MASK_NONE ? k = m == - mxConstants.DIRECTION_MASK_WEST : (a = g.getCellGeometry(c.cell), a.relative ? k = 0.5 >= a.x : null != b && (k = b.x + b.width < c.x))); - null != b && null != c && (a = h ? b.x : b.x + b.width, b = f.getRoutingCenterY(b), g = k ? c.x : c.x + c.width, c = f.getRoutingCenterY(c), f = new mxPoint(a + (h ? -d : d), b), l = new mxPoint( - g + (k ? -d : d), c), h == k ? (d = h ? Math.min(a, g) - d : Math.max(a, g) + d, e.push(new mxPoint(d, - b)), e.push(new mxPoint(d, c))) : (f.x < l.x == h ? (d = b + (c - b) / 2, e.push(f), e.push(new mxPoint(f.x, d)), e.push(new mxPoint(l.x, d))) : e.push(f), e.push(l))) - }, - Loop: function(a, b, c, d, e) { - if (null != b) { - c = a.view; - var f = c.graph; - d = null != d && 0 < d.length ? d[0] : null; - null != d && (d = c.transformControlPoint(a, d), mxUtils.contains(b, d.x, d.y) && (d = null)); - var g = 0, - h = 0, - k = 0, - l = 0, - f = mxUtils.getValue(a.style, mxConstants.STYLE_SEGMENT, f.gridSize) * c.scale; - a = mxUtils.getValue(a.style, mxConstants.STYLE_DIRECTION, mxConstants.DIRECTION_WEST); - a == mxConstants.DIRECTION_NORTH || - a == mxConstants.DIRECTION_SOUTH ? (g = c.getRoutingCenterX(b), h = f) : (k = c.getRoutingCenterY(b), l = f); - null == d || d.x < b.x || d.x > b.x + b.width ? null != d ? (g = d.x, l = Math.max(Math.abs(k - d.y), l)) : a == mxConstants.DIRECTION_NORTH ? k = b.y - 2 * h : a == mxConstants.DIRECTION_SOUTH ? - k = b.y + b.height + 2 * h : g = a == mxConstants.DIRECTION_EAST ? b.x - 2 * l : b.x + b.width + 2 * l : null != d && (g = c.getRoutingCenterX(b), h = Math.max(Math.abs(g - d.x), l), k = - d.y, l = 0); - e.push(new mxPoint(g - h, k - l)); - e.push(new mxPoint(g + h, k + l)) - } - }, - ElbowConnector: function(a, b, c, d, e) { - var f = null != - d && 0 < d.length ? d[0] : null, - g = !1, - h = !1; - if (null != b && null != c) - if (null != f) var k = Math.min(b.x, c.x), - l = Math.max(b.x + b.width, c.x + c.width), - h = Math.min(b.y, c.y), - m = Math.max(b.y + b.height, c.y + c.height), - f = a.view.transformControlPoint(a, f), - g = f.y < h || f.y > m, - h = f.x < k || f.x > l; - else k = Math.max(b.x, c.x), l = Math.min(b.x + b.width, c.x + c.width), g = k == l, g || (h = Math.max(b.y, c.y), m = Math.min(b.y + b.height, c.y + c.height), h = h == m); - !h && (g || a.style[mxConstants.STYLE_ELBOW] == mxConstants.ELBOW_VERTICAL) ? mxEdgeStyle.TopToBottom(a, b, c, d, e) : mxEdgeStyle.SideToSide(a, - b, c, d, e) - }, - SideToSide: function(a, b, c, d, e) { - var f = a.view; - d = null != d && 0 < d.length ? d[0] : null; - var g = a.absolutePoints, - h = g[0], - g = g[g.length - 1]; - null != d && (d = f.transformControlPoint(a, d)); - null != h && (b = new mxCellState, b.x = h.x, b.y = h.y); - null != g && (c = new mxCellState, c.x = g.x, c.y = g.y); - null != b && null != c && (a = Math.max(b.x, c.x), h = Math.min(b.x + b.width, c.x + c.width), a = null != d ? d.x : h + (a - h) / 2, h = f.getRoutingCenterY(b), f = f.getRoutingCenterY(c), - null != d && (d.y >= b.y && d.y <= b.y + b.height && (h = d.y), d.y >= c.y && d.y <= c.y + c.height && (f = d.y)), !mxUtils.contains(c, - a, h) && !mxUtils.contains(b, a, h) && e.push(new mxPoint(a, h)), !mxUtils.contains(c, a, f) && !mxUtils.contains(b, a, f) && e.push(new mxPoint(a, f)), 1 == e.length && (null != d ? ! - mxUtils.contains(c, a, d.y) && !mxUtils.contains(b, a, d.y) && e.push(new mxPoint(a, d.y)) : (f = Math.max(b.y, c.y), b = Math.min(b.y + b.height, c.y + c.height), e.push(new mxPoint(a, - f + (b - f) / 2))))) - }, - TopToBottom: function(a, b, c, d, e) { - var f = a.view; - d = null != d && 0 < d.length ? d[0] : null; - var g = a.absolutePoints, - h = g[0], - g = g[g.length - 1]; - null != d && (d = f.transformControlPoint(a, d)); - null != - h && (b = new mxCellState, b.x = h.x, b.y = h.y); - null != g && (c = new mxCellState, c.x = g.x, c.y = g.y); - null != b && null != c && (h = Math.max(b.y, c.y), g = Math.min(b.y + b.height, c.y + c.height), a = f.getRoutingCenterX(b), null != d && (d.x >= b.x && d.x <= b.x + b.width) && (a = d.x), h = - null != d ? d.y : g + (h - g) / 2, !mxUtils.contains(c, a, h) && !mxUtils.contains(b, a, h) && e.push(new mxPoint(a, h)), a = null != d && d.x >= c.x && d.x <= c.x + c.width ? d.x : f.getRoutingCenterX( - c), !mxUtils.contains(c, a, h) && !mxUtils.contains(b, a, h) && e.push(new mxPoint(a, h)), 1 == e.length && (null != d && 1 == - e.length ? !mxUtils.contains(c, d.x, h) && !mxUtils.contains(b, d.x, h) && e.push(new mxPoint(d.x, h)) : (f = Math.max(b.x, c.x), b = Math.min(b.x + b.width, c.x + c.width), e.push(new mxPoint( - f + (b - f) / 2, h))))) - }, - SegmentConnector: function(a, b, c, d, e) { - var f = a.absolutePoints, - g = !0, - h = null, - k = f[0]; - null == k && null != b ? k = new mxPoint(a.view.getRoutingCenterX(b), a.view.getRoutingCenterY(b)) : null != k && (k = k.clone()); - var l = f.length - 1; - if (null != d && 0 < d.length) { - for (var h = a.view.transformControlPoint(a, d[0]), m = b, n = f[0], p = !1, q = !1, p = h, s = d.length, r = - 0; 2 > r; r++) { - var t = null != n && n.x == p.x, - v = null != n && n.y == p.y, - w = null != m && p.y >= m.y && p.y <= m.y + m.height, - m = null != m && p.x >= m.x && p.x <= m.x + m.width, - p = v || null == n && w, - q = t || null == n && m; - if (null != n && !v && !t && (w || m)) { - g = w ? !1 : !0; - break - } - if (q || p) { - g = p; - 1 == r && (g = 0 == d.length % 2 ? p : q); - break - } - m = c; - n = f[l]; - p = a.view.transformControlPoint(a, d[s - 1]) - } - g && (null != f[0] && f[0].y != h.y || null == f[0] && null != b && (h.y < b.y || h.y > b.y + b.height)) ? e.push(new mxPoint(k.x, h.y)) : !g && (null != f[0] && f[0].x != h.x || null == f[ - 0] && null != b && (h.x < b.x || h.x > b.x + b.width)) && e.push(new mxPoint(h.x, - k.y)); - g ? k.y = h.y : k.x = h.x; - for (r = 0; r < d.length; r++) g = !g, h = a.view.transformControlPoint(a, d[r]), g ? k.y = h.y : k.x = h.x, e.push(k.clone()) - } else h = k, g = !0; - k = f[l]; - null == k && null != c && (k = new mxPoint(a.view.getRoutingCenterX(c), a.view.getRoutingCenterY(c))); - g && (null != f[l] && f[l].y != h.y || null == f[l] && null != c && (h.y < c.y || h.y > c.y + c.height)) ? e.push(new mxPoint(k.x, h.y)) : !g && (null != f[l] && f[l].x != h.x || null == f[l] && - null != c && (h.x < c.x || h.x > c.x + c.width)) && e.push(new mxPoint(h.x, k.y)); - if (null == f[0] && null != b) - for (; 1 < e.length && mxUtils.contains(b, - e[1].x, e[1].y);) e = e.splice(1, 1); - if (null == f[l] && null != c) - for (; 1 < e.length && mxUtils.contains(c, e[e.length - 1].x, e[e.length - 1].y);) e = e.splice(e.length - 1, 1) - }, - orthBuffer: 10, - dirVectors: [ - [-1, 0], - [0, -1], - [1, 0], - [0, 1], - [-1, 0], - [0, -1], - [1, 0] - ], - wayPoints1: [ - [0, 0], - [0, 0], - [0, 0], - [0, 0], - [0, 0], - [0, 0], - [0, 0], - [0, 0], - [0, 0], - [0, 0], - [0, 0], - [0, 0] - ], - routePatterns: [ - [ - [513, 2308, 2081, 2562], - [513, 1090, 514, 2184, 2114, 2561], - [513, 1090, 514, 2564, 2184, 2562], - [513, 2308, 2561, 1090, 514, 2568, 2308] - ], - [ - [514, 1057, 513, 2308, 2081, 2562], - [514, 2184, 2114, 2561], - [514, 2184, - 2562, 1057, 513, 2564, 2184 - ], - [514, 1057, 513, 2568, 2308, 2561] - ], - [ - [1090, 514, 1057, 513, 2308, 2081, 2562], - [2114, 2561], - [1090, 2562, 1057, 513, 2564, 2184], - [1090, 514, 1057, 513, 2308, 2561, 2568] - ], - [ - [2081, 2562], - [1057, 513, 1090, 514, 2184, 2114, 2561], - [1057, 513, 1090, 514, 2184, 2562, 2564], - [1057, 2561, 1090, 514, 2568, 2308] - ] - ], - inlineRoutePatterns: [ - [null, [2114, 2568], null, null], - [null, [514, 2081, 2114, 2568], null, null], - [null, [2114, 2561], null, null], - [ - [2081, 2562], - [1057, 2114, 2568], - [2184, 2562], null - ] - ], - vertexSeperations: [], - limits: [ - [0, 0, 0, 0, 0, 0, 0, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0] - ], - LEFT_MASK: 32, - TOP_MASK: 64, - RIGHT_MASK: 128, - BOTTOM_MASK: 256, - LEFT: 1, - TOP: 2, - RIGHT: 4, - BOTTOM: 8, - SIDE_MASK: 480, - CENTER_MASK: 512, - SOURCE_MASK: 1024, - TARGET_MASK: 2048, - VERTEX_MASK: 3072, - OrthConnector: function(a, b, c, d, e) { - var f = a.view.graph, - g = null == b ? !1 : f.getModel().isEdge(b.cell), - f = null == c ? !1 : f.getModel().isEdge(c.cell); - if (null != d && 0 < d.length || g || f) mxEdgeStyle.SegmentConnector(a, b, c, d, e); - else { - d = a.absolutePoints; - var h = d[0], - k = d[d.length - 1]; - d = null != b ? b.x : h.x; - var g = null != b ? b.y : h.y, - l = null != b ? b.width : - 1, - m = null != b ? b.height : 1, - n = null != c ? c.x : k.x, - p = null != c ? c.y : k.y, - q = null != c ? c.width : 1, - s = null != c ? c.height : 1, - f = a.view.scale * mxEdgeStyle.orthBuffer, - r = [mxConstants.DIRECTION_MASK_ALL, mxConstants.DIRECTION_MASK_ALL]; - null != b && (r[0] = mxUtils.getPortConstraints(b, a, !0, mxConstants.DIRECTION_MASK_ALL)); - null != c && (r[1] = mxUtils.getPortConstraints(c, a, !1, mxConstants.DIRECTION_MASK_ALL)); - a = [0, 0]; - d = [ - [d, g, l, m], - [n, p, q, s] - ]; - for (l = 0; 2 > l; l++) mxEdgeStyle.limits[l][1] = d[l][0] - f, mxEdgeStyle.limits[l][2] = d[l][1] - f, mxEdgeStyle.limits[l][4] = - d[l][0] + d[l][2] + f, mxEdgeStyle.limits[l][8] = d[l][1] + d[l][3] + f; - l = d[0][0] + d[0][2] / 2 - (d[1][0] + d[1][2] / 2); - m = d[0][1] + d[0][3] / 2 - (d[1][1] + d[1][3] / 2); - g = 0; - 0 > l ? g = 0 > m ? 2 : 1 : 0 >= m && (g = 3, 0 == l && (g = 2)); - m = null; - null != b && (m = h); - b = [ - [0.5, 0.5], - [0.5, 0.5] - ]; - for (l = 0; 2 > l; l++) null != m && (b[l][0] = (m.x - d[l][0]) / d[l][2], 0.01 > b[l][0] ? a[l] = mxConstants.DIRECTION_MASK_WEST : 0.99 < b[l][0] && (a[l] = mxConstants.DIRECTION_MASK_EAST), - b[l][1] = (m.y - d[l][1]) / d[l][3], 0.01 > b[l][1] ? a[l] = mxConstants.DIRECTION_MASK_NORTH : 0.99 < b[l][1] && (a[l] = mxConstants.DIRECTION_MASK_SOUTH)), - m = null, null != c && (m = k); - l = d[0][1] - (d[1][1] + d[1][3]); - m = d[0][0] - (d[1][0] + d[1][2]); - n = d[1][1] - (d[0][1] + d[0][3]); - p = d[1][0] - (d[0][0] + d[0][2]); - mxEdgeStyle.vertexSeperations[1] = Math.max(m - 2 * f, 0); - mxEdgeStyle.vertexSeperations[2] = Math.max(l - 2 * f, 0); - mxEdgeStyle.vertexSeperations[4] = Math.max(n - 2 * f, 0); - mxEdgeStyle.vertexSeperations[3] = Math.max(p - 2 * f, 0); - c = []; - h = []; - k = []; - h[0] = m >= p ? mxConstants.DIRECTION_MASK_WEST : mxConstants.DIRECTION_MASK_EAST; - k[0] = l >= n ? mxConstants.DIRECTION_MASK_NORTH : mxConstants.DIRECTION_MASK_SOUTH; - h[1] = mxUtils.reversePortConstraints(h[0]); - k[1] = mxUtils.reversePortConstraints(k[0]); - m = m >= p ? m : p; - n = l >= n ? l : n; - p = [ - [0, 0], - [0, 0] - ]; - q = !1; - for (l = 0; 2 > l; l++) 0 == a[l] && (0 == (h[l] & r[l]) && (h[l] = mxUtils.reversePortConstraints(h[l])), 0 == (k[l] & r[l]) && (k[l] = mxUtils.reversePortConstraints(k[l])), p[l][0] = k[l], - p[l][1] = h[l]); - n > 2 * f && m > 2 * f && (0 < (h[0] & r[0]) && 0 < (k[1] & r[1]) ? (p[0][0] = h[0], p[0][1] = k[0], p[1][0] = k[1], p[1][1] = h[1], q = !0) : 0 < (k[0] & r[0]) && 0 < (h[1] & r[1]) && (p[0] - [0] = k[0], p[0][1] = h[0], p[1][0] = h[1], p[1][1] = k[1], q = !0)); - n > 2 * f && !q && - (p[0][0] = k[0], p[0][1] = h[0], p[1][0] = k[1], p[1][1] = h[1], q = !0); - m > 2 * f && !q && (p[0][0] = h[0], p[0][1] = k[0], p[1][0] = h[1], p[1][1] = k[1]); - for (l = 0; 2 > l; l++) - if (0 == a[l] && (0 == (p[l][0] & r[l]) && (p[l][0] = p[l][1]), c[l] = p[l][0] & r[l], c[l] |= (p[l][1] & r[l]) << 8, c[l] |= (p[1 - l][l] & r[l]) << 16, c[l] |= (p[1 - l][1 - l] & r[l]) << - 24, 0 == (c[l] & 15) && (c[l] <<= 8), 0 == (c[l] & 3840) && (c[l] = c[l] & 15 | c[l] >> 8), 0 == (c[l] & 983040) && (c[l] = c[l] & 65535 | (c[l] & 251658240) >> 8), a[l] = c[l] & 15, - r[l] == mxConstants.DIRECTION_MASK_WEST || r[l] == mxConstants.DIRECTION_MASK_NORTH || r[l] == - mxConstants.DIRECTION_MASK_EAST || r[l] == mxConstants.DIRECTION_MASK_SOUTH)) a[l] = r[l]; - l = a[0] == mxConstants.DIRECTION_MASK_EAST ? 3 : a[0]; - r = a[1] == mxConstants.DIRECTION_MASK_EAST ? 3 : a[1]; - l -= g; - r -= g; - 1 > l && (l += 4); - 1 > r && (r += 4); - r = mxEdgeStyle.routePatterns[l - 1][r - 1]; - mxEdgeStyle.wayPoints1[0][0] = d[0][0]; - mxEdgeStyle.wayPoints1[0][1] = d[0][1]; - switch (a[0]) { - case mxConstants.DIRECTION_MASK_WEST: - mxEdgeStyle.wayPoints1[0][0] -= f; - mxEdgeStyle.wayPoints1[0][1] += b[0][1] * d[0][3]; - break; - case mxConstants.DIRECTION_MASK_SOUTH: - mxEdgeStyle.wayPoints1[0][0] += - b[0][0] * d[0][2]; - mxEdgeStyle.wayPoints1[0][1] += d[0][3] + f; - break; - case mxConstants.DIRECTION_MASK_EAST: - mxEdgeStyle.wayPoints1[0][0] += d[0][2] + f; - mxEdgeStyle.wayPoints1[0][1] += b[0][1] * d[0][3]; - break; - case mxConstants.DIRECTION_MASK_NORTH: - mxEdgeStyle.wayPoints1[0][0] += b[0][0] * d[0][2], mxEdgeStyle.wayPoints1[0][1] -= f - } - f = 0; - h = c = 0 < (a[0] & (mxConstants.DIRECTION_MASK_EAST | mxConstants.DIRECTION_MASK_WEST)) ? 0 : 1; - for (l = k = 0; l < r.length; l++) { - k = r[l] & 15; - s = k == mxConstants.DIRECTION_MASK_EAST ? 3 : k; - s += g; - 4 < s && (s -= 4); - m = mxEdgeStyle.dirVectors[s - - 1]; - k = 0 < s % 2 ? 0 : 1; - k != c && (f++, mxEdgeStyle.wayPoints1[f][0] = mxEdgeStyle.wayPoints1[f - 1][0], mxEdgeStyle.wayPoints1[f][1] = mxEdgeStyle.wayPoints1[f - 1][1]); - var t = 0 < (r[l] & mxEdgeStyle.TARGET_MASK), - q = 0 < (r[l] & mxEdgeStyle.SOURCE_MASK), - n = (r[l] & mxEdgeStyle.SIDE_MASK) >> 5, - n = n << g; - 15 < n && (n >>= 4); - p = 0 < (r[l] & mxEdgeStyle.CENTER_MASK); - (q || t) && 9 > n ? (s = 0, q = q ? 0 : 1, s = p && 0 == k ? d[q][0] + b[q][0] * d[q][2] : p ? d[q][1] + b[q][1] * d[q][3] : mxEdgeStyle.limits[q][n], 0 == k ? (n = (s - mxEdgeStyle.wayPoints1[ - f][0]) * m[0], 0 < n && (mxEdgeStyle.wayPoints1[f][0] += - m[0] * n)) : (n = (s - mxEdgeStyle.wayPoints1[f][1]) * m[1], 0 < n && (mxEdgeStyle.wayPoints1[f][1] += m[1] * n))) : p && (mxEdgeStyle.wayPoints1[f][0] += m[0] * Math.abs(mxEdgeStyle.vertexSeperations[ - s] / 2), mxEdgeStyle.wayPoints1[f][1] += m[1] * Math.abs(mxEdgeStyle.vertexSeperations[s] / 2)); - 0 < f && mxEdgeStyle.wayPoints1[f][k] == mxEdgeStyle.wayPoints1[f - 1][k] ? f-- : c = k - } - for (l = 0; l <= f && !(l == f && ((0 < (a[1] & (mxConstants.DIRECTION_MASK_EAST | mxConstants.DIRECTION_MASK_WEST)) ? 0 : 1) == h ? 0 : 1) != (f + 1) % 2); l++) e.push(new mxPoint( - mxEdgeStyle.wayPoints1[l][0], - mxEdgeStyle.wayPoints1[l][1])) - } - }, - getRoutePattern: function(a, b, c, d) { - var e = a[0] == mxConstants.DIRECTION_MASK_EAST ? 3 : a[0]; - a = a[1] == mxConstants.DIRECTION_MASK_EAST ? 3 : a[1]; - e -= b; - a -= b; - 1 > e && (e += 4); - 1 > a && (a += 4); - b = routePatterns[e - 1][a - 1]; - if (0 == c || 0 == d) null != inlineRoutePatterns[e - 1][a - 1] && (b = inlineRoutePatterns[e - 1][a - 1]); - return b - } - }, - mxStyleRegistry = { - values: [], - putValue: function(a, b) { - mxStyleRegistry.values[a] = b - }, - getValue: function(a) { - return mxStyleRegistry.values[a] - }, - getName: function(a) { - for (var b in mxStyleRegistry.values) - if (mxStyleRegistry.values[b] == - a) return b; - return null - } - }; -mxStyleRegistry.putValue(mxConstants.EDGESTYLE_ELBOW, mxEdgeStyle.ElbowConnector); -mxStyleRegistry.putValue(mxConstants.EDGESTYLE_ENTITY_RELATION, mxEdgeStyle.EntityRelation); -mxStyleRegistry.putValue(mxConstants.EDGESTYLE_LOOP, mxEdgeStyle.Loop); -mxStyleRegistry.putValue(mxConstants.EDGESTYLE_SIDETOSIDE, mxEdgeStyle.SideToSide); -mxStyleRegistry.putValue(mxConstants.EDGESTYLE_TOPTOBOTTOM, mxEdgeStyle.TopToBottom); -mxStyleRegistry.putValue(mxConstants.EDGESTYLE_ORTHOGONAL, mxEdgeStyle.OrthConnector); -mxStyleRegistry.putValue(mxConstants.EDGESTYLE_SEGMENT, mxEdgeStyle.SegmentConnector); -mxStyleRegistry.putValue(mxConstants.PERIMETER_ELLIPSE, mxPerimeter.EllipsePerimeter); -mxStyleRegistry.putValue(mxConstants.PERIMETER_RECTANGLE, mxPerimeter.RectanglePerimeter); -mxStyleRegistry.putValue(mxConstants.PERIMETER_RHOMBUS, mxPerimeter.RhombusPerimeter); -mxStyleRegistry.putValue(mxConstants.PERIMETER_TRIANGLE, mxPerimeter.TrianglePerimeter); - -function mxGraphView(a) { - this.graph = a; - this.translate = new mxPoint; - this.graphBounds = new mxRectangle; - this.states = new mxDictionary -} -mxGraphView.prototype = new mxEventSource; -mxGraphView.prototype.constructor = mxGraphView; -mxGraphView.prototype.EMPTY_POINT = new mxPoint; -mxGraphView.prototype.doneResource = "none" != mxClient.language ? "done" : ""; -mxGraphView.prototype.updatingDocumentResource = "none" != mxClient.language ? "updatingDocument" : ""; -mxGraphView.prototype.allowEval = !1; -mxGraphView.prototype.captureDocumentGesture = !0; -mxGraphView.prototype.optimizeVmlReflows = !0; -mxGraphView.prototype.rendering = !0; -mxGraphView.prototype.graph = null; -mxGraphView.prototype.currentRoot = null; -mxGraphView.prototype.graphBounds = null; -mxGraphView.prototype.scale = 1; -mxGraphView.prototype.translate = null; -mxGraphView.prototype.updateStyle = !1; -mxGraphView.prototype.getGraphBounds = function() { - return this.graphBounds -}; -mxGraphView.prototype.setGraphBounds = function(a) { - this.graphBounds = a -}; -mxGraphView.prototype.getBounds = function(a) { - var b = null; - if (null != a && 0 < a.length) - for (var c = this.graph.getModel(), d = 0; d < a.length; d++) - if (c.isVertex(a[d]) || c.isEdge(a[d])) { - var e = this.getState(a[d]); - null != e && (null == b ? b = new mxRectangle(e.x, e.y, e.width, e.height) : b.add(e)) - } - return b -}; -mxGraphView.prototype.setCurrentRoot = function(a) { - if (this.currentRoot != a) { - var b = new mxCurrentRootChange(this, a); - b.execute(); - var c = new mxUndoableEdit(this, !1); - c.add(b); - this.fireEvent(new mxEventObject(mxEvent.UNDO, "edit", c)); - this.graph.sizeDidChange() - } - return a -}; -mxGraphView.prototype.scaleAndTranslate = function(a, b, c) { - var d = this.scale, - e = new mxPoint(this.translate.x, this.translate.y); - if (this.scale != a || this.translate.x != b || this.translate.y != c) this.scale = a, this.translate.x = b, this.translate.y = c, this.isEventsEnabled() && (this.revalidate(), this.graph.sizeDidChange()); - this.fireEvent(new mxEventObject(mxEvent.SCALE_AND_TRANSLATE, "scale", a, "previousScale", d, "translate", this.translate, "previousTranslate", e)) -}; -mxGraphView.prototype.getScale = function() { - return this.scale -}; -mxGraphView.prototype.setScale = function(a) { - var b = this.scale; - this.scale != a && (this.scale = a, this.isEventsEnabled() && (this.revalidate(), this.graph.sizeDidChange())); - this.fireEvent(new mxEventObject(mxEvent.SCALE, "scale", a, "previousScale", b)) -}; -mxGraphView.prototype.getTranslate = function() { - return this.translate -}; -mxGraphView.prototype.setTranslate = function(a, b) { - var c = new mxPoint(this.translate.x, this.translate.y); - if (this.translate.x != a || this.translate.y != b) this.translate.x = a, this.translate.y = b, this.isEventsEnabled() && (this.revalidate(), this.graph.sizeDidChange()); - this.fireEvent(new mxEventObject(mxEvent.TRANSLATE, "translate", this.translate, "previousTranslate", c)) -}; -mxGraphView.prototype.refresh = function() { - null != this.currentRoot && this.clear(); - this.revalidate() -}; -mxGraphView.prototype.revalidate = function() { - this.invalidate(); - this.validate() -}; -mxGraphView.prototype.clear = function(a, b, c) { - var d = this.graph.getModel(); - a = a || d.getRoot(); - b = null != b ? b : !1; - c = null != c ? c : !0; - this.removeState(a); - if (c && (b || a != this.currentRoot)) { - c = d.getChildCount(a); - for (var e = 0; e < c; e++) this.clear(d.getChildAt(a, e), b) - } else this.invalidate(a) -}; -mxGraphView.prototype.invalidate = function(a, b, c, d) { - var e = this.graph.getModel(); - a = a || e.getRoot(); - b = null != b ? b : !0; - c = null != c ? c : !0; - d = null != d ? d : !1; - var f = this.getState(a); - null != f && (f.invalid = !0, d && (f.orderChanged = !0)); - if (b) - for (var g = e.getChildCount(a), f = 0; f < g; f++) { - var h = e.getChildAt(a, f); - this.invalidate(h, b, c, d) - } - if (c) { - d = e.getEdgeCount(a); - for (f = 0; f < d; f++) this.invalidate(e.getEdgeAt(a, f), b, c) - } -}; -mxGraphView.prototype.validate = function(a) { - var b = mxLog.enter("mxGraphView.validate"); - window.status = mxResources.get(this.updatingDocumentResource) || this.updatingDocumentResource; - var c = null; - if (this.optimizeVmlReflows && null != this.canvas && null == this.textDiv && (8 == document.documentMode || mxClient.IS_QUIRKS)) { - c = this.canvas.style.display; - this.canvas.style.display = "none"; - var d = document.createElement("div"); - d.style.position = "absolute"; - d.style.whiteSpace = "nowrap"; - d.style.visibility = "hidden"; - d.style.display = mxClient.IS_QUIRKS ? - "inline" : "inline-block"; - d.style.zoom = "1"; - document.body.appendChild(d); - this.textDiv = d - } - a = a || (null != this.currentRoot ? this.currentRoot : this.graph.getModel().getRoot()); - this.validateBounds(null, a); - a = this.validatePoints(null, a); - null == a && (a = new mxRectangle); - this.setGraphBounds(a); - this.validateBackground(); - null != c && (this.canvas.style.display = c, document.body.removeChild(this.textDiv), this.textDiv = null); - window.status = mxResources.get(this.doneResource) || this.doneResource; - mxLog.leave("mxGraphView.validate", b) -}; -mxGraphView.prototype.createBackgroundPageShape = function(a) { - return new mxRectangleShape(a, "white", "black") -}; -mxGraphView.prototype.validateBackground = function() { - var a = this.graph.getBackgroundImage(); - if (null != a) { - if (null == this.backgroundImage || this.backgroundImage.image != a.src) { - null != this.backgroundImage && this.backgroundImage.destroy(); - var b = new mxRectangle(0, 0, 1, 1); - this.backgroundImage = new mxImageShape(b, a.src); - this.backgroundImage.dialect = this.graph.dialect; - this.backgroundImage.init(this.backgroundPane); - this.backgroundImage.redraw() - } - this.redrawBackgroundImage(this.backgroundImage, a) - } else null != this.backgroundImage && - (this.backgroundImage.destroy(), this.backgroundImage = null); - this.graph.pageVisible ? (b = this.getBackgroundPageBounds(), null == this.backgroundPageShape ? (this.backgroundPageShape = this.createBackgroundPageShape(b), this.backgroundPageShape.scale = - this.scale, this.backgroundPageShape.isShadow = !0, this.backgroundPageShape.dialect = this.graph.dialect, this.backgroundPageShape.init(this.backgroundPane), this.backgroundPageShape.redraw(), - mxEvent.addListener(this.backgroundPageShape.node, "dblclick", mxUtils.bind(this, - function(a) { - this.graph.dblClick(a) - })), mxEvent.addGestureListeners(this.backgroundPageShape.node, mxUtils.bind(this, function(a) { - this.graph.fireMouseEvent(mxEvent.MOUSE_DOWN, new mxMouseEvent(a)) - }), mxUtils.bind(this, function(a) { - null != this.graph.tooltipHandler && this.graph.tooltipHandler.isHideOnHover() && this.graph.tooltipHandler.hide(); - this.graph.isMouseDown && !mxEvent.isConsumed(a) && this.graph.fireMouseEvent(mxEvent.MOUSE_MOVE, new mxMouseEvent(a)) - }), mxUtils.bind(this, function(a) { - this.graph.fireMouseEvent(mxEvent.MOUSE_UP, - new mxMouseEvent(a)) - }))) : (this.backgroundPageShape.scale = this.scale, this.backgroundPageShape.bounds = b, this.backgroundPageShape.redraw())) : null != this.backgroundPageShape && (this.backgroundPageShape.destroy(), - this.backgroundPageShape = null) -}; -mxGraphView.prototype.getBackgroundPageBounds = function() { - var a = this.graph.pageFormat, - b = this.scale * this.graph.pageScale; - return new mxRectangle(this.scale * this.translate.x, this.scale * this.translate.y, a.width * b, a.height * b) -}; -mxGraphView.prototype.redrawBackgroundImage = function(a, b) { - a.scale = this.scale; - a.bounds.x = this.scale * this.translate.x; - a.bounds.y = this.scale * this.translate.y; - a.bounds.width = this.scale * b.width; - a.bounds.height = this.scale * b.height; - a.redraw() -}; -mxGraphView.prototype.validateBounds = function(a, b) { - var c = this.graph.getModel(), - d = this.getState(b, !0); - if (null != d && d.invalid) { - if (this.graph.isCellVisible(b)) { - if (b != this.currentRoot && null != a) { - d.absoluteOffset.x = 0; - d.absoluteOffset.y = 0; - d.origin.x = a.origin.x; - d.origin.y = a.origin.y; - var e = this.graph.getCellGeometry(b); - if (null != e) { - if (!c.isEdge(b)) { - var f = e.offset || this.EMPTY_POINT; - e.relative ? (d.origin.x += e.x * a.width / this.scale + f.x, d.origin.y += e.y * a.height / this.scale + f.y) : (d.absoluteOffset.x = this.scale * f.x, d.absoluteOffset.y = - this.scale * f.y, d.origin.x += e.x, d.origin.y += e.y) - } - d.x = this.scale * (this.translate.x + d.origin.x); - d.y = this.scale * (this.translate.y + d.origin.y); - d.width = this.scale * e.width; - d.height = this.scale * e.height; - if (c.isVertex(b)) { - if (e.relative && (f = mxUtils.toRadians(a.style[mxConstants.STYLE_ROTATION] || "0"), 0 != f)) { - var e = Math.cos(f), - f = Math.sin(f), - g = new mxPoint(d.getCenterX(), d.getCenterY()), - h = new mxPoint(a.getCenterX(), a.getCenterY()), - e = mxUtils.getRotatedPoint(g, e, f, h); - d.x = e.x - d.width / 2; - d.y = e.y - d.height / 2 - } - this.updateVertexLabelOffset(d) - } - } - } - } else this.removeState(b); - f = this.graph.getChildOffsetForCell(b); - null != f && (d.origin.x += f.x, d.origin.y += f.y) - } - if (null != d && (!this.graph.isCellCollapsed(b) || b == this.currentRoot)) { - e = c.getChildCount(b); - for (f = 0; f < e; f++) g = c.getChildAt(b, f), this.validateBounds(d, g) - } -}; -mxGraphView.prototype.updateVertexLabelOffset = function(a) { - var b = mxUtils.getValue(a.style, mxConstants.STYLE_LABEL_POSITION, mxConstants.ALIGN_CENTER); - b == mxConstants.ALIGN_LEFT ? a.absoluteOffset.x -= a.width : b == mxConstants.ALIGN_RIGHT && (a.absoluteOffset.x += a.width); - b = mxUtils.getValue(a.style, mxConstants.STYLE_VERTICAL_LABEL_POSITION, mxConstants.ALIGN_MIDDLE); - b == mxConstants.ALIGN_TOP ? a.absoluteOffset.y -= a.height : b == mxConstants.ALIGN_BOTTOM && (a.absoluteOffset.y += a.height) -}; -mxGraphView.prototype.validatePoints = function(a, b) { - var c = this.graph.getModel(), - d = this.getState(b), - e = null; - if (null != d) { - if (d.invalid) { - var f = this.graph.getCellGeometry(b); - if (null != f && c.isEdge(b)) { - var g = this.getState(this.getVisibleTerminal(b, !0)); - d.setVisibleTerminalState(g, !0); - if (null != g && c.isEdge(g.cell) && !c.isAncestor(g.cell, b)) { - var h = this.getState(c.getParent(g.cell)); - this.validatePoints(h, g.cell) - } - var k = this.getState(this.getVisibleTerminal(b, !1)); - d.setVisibleTerminalState(k, !1); - null != k && (c.isEdge(k.cell) && - !c.isAncestor(k.cell, b)) && (h = this.getState(c.getParent(k.cell)), this.validatePoints(h, k.cell)); - this.updateFixedTerminalPoints(d, g, k); - this.updatePoints(d, f.points, g, k); - this.updateFloatingTerminalPoints(d, g, k); - this.updateEdgeBounds(d); - this.updateEdgeLabelOffset(d) - } else null != f && (f.relative && null != a && c.isEdge(a.cell)) && (f = this.getPoint(a, f), null != f && (d.x = f.x, d.y = f.y, f.x = f.x / this.scale - this.translate.x, f.y = f.y / this.scale - - this.translate.y, d.origin = f, this.childMoved(a, d))); - d.invalid = !1; - b != this.currentRoot && - this.graph.cellRenderer.redraw(d, !1, this.isRendering()) - } - if (c.isEdge(b) || c.isVertex(b)) null != d.shape && null != d.shape.boundingBox && (e = d.shape.boundingBox.clone()), null != d.text && !this.graph.isLabelClipped(d.cell) && null != d.text.boundingBox && - (null != e ? e.add(d.text.boundingBox) : e = d.text.boundingBox.clone()) - } - if (null != d && (!this.graph.isCellCollapsed(b) || b == this.currentRoot)) { - f = c.getChildCount(b); - for (g = 0; g < f; g++) h = c.getChildAt(b, g), h = this.validatePoints(d, h), null != h && (null == e ? e = h : e.add(h)) - } - return e -}; -mxGraphView.prototype.childMoved = function(a, b) { - var c = b.cell; - if (!this.graph.isCellCollapsed(c) || c == this.currentRoot) - for (var d = this.graph.getModel(), e = d.getChildCount(c), f = 0; f < e; f++) this.validateBounds(b, d.getChildAt(c, f)) -}; -mxGraphView.prototype.updateFixedTerminalPoints = function(a, b, c) { - this.updateFixedTerminalPoint(a, b, !0, this.graph.getConnectionConstraint(a, b, !0)); - this.updateFixedTerminalPoint(a, c, !1, this.graph.getConnectionConstraint(a, c, !1)) -}; -mxGraphView.prototype.updateFixedTerminalPoint = function(a, b, c, d) { - var e = null; - null != d && (e = this.graph.getConnectionPoint(b, d)); - if (null == e && null == b) { - b = this.scale; - d = this.translate; - var f = a.origin, - e = this.graph.getCellGeometry(a.cell).getTerminalPoint(c); - null != e && (e = new mxPoint(b * (d.x + e.x + f.x), b * (d.y + e.y + f.y))) - } - a.setAbsoluteTerminalPoint(e, c) -}; -mxGraphView.prototype.updatePoints = function(a, b, c, d) { - if (null != a) { - var e = []; - e.push(a.absolutePoints[0]); - var f = this.getEdgeStyle(a, b, c, d); - if (null != f) c = this.getTerminalPort(a, c, !0), d = this.getTerminalPort(a, d, !1), f(a, c, d, b, e); - else if (null != b) - for (f = 0; f < b.length; f++) null != b[f] && (d = mxUtils.clone(b[f]), e.push(this.transformControlPoint(a, d))); - b = a.absolutePoints; - e.push(b[b.length - 1]); - a.absolutePoints = e - } -}; -mxGraphView.prototype.transformControlPoint = function(a, b) { - var c = a.origin; - return new mxPoint(this.scale * (b.x + this.translate.x + c.x), this.scale * (b.y + this.translate.y + c.y)) -}; -mxGraphView.prototype.getEdgeStyle = function(a, b, c, d) { - a = null != c && c == d ? mxUtils.getValue(a.style, mxConstants.STYLE_LOOP, this.graph.defaultLoopStyle) : !mxUtils.getValue(a.style, mxConstants.STYLE_NOEDGESTYLE, !1) ? a.style[mxConstants.STYLE_EDGE] : - null; - "string" == typeof a && (b = mxStyleRegistry.getValue(a), null == b && this.isAllowEval() && (b = mxUtils.eval(a)), a = b); - return "function" == typeof a ? a : null -}; -mxGraphView.prototype.updateFloatingTerminalPoints = function(a, b, c) { - var d = a.absolutePoints, - e = d[0]; - null == d[d.length - 1] && null != c && this.updateFloatingTerminalPoint(a, c, b, !1); - null == e && null != b && this.updateFloatingTerminalPoint(a, b, c, !0) -}; -mxGraphView.prototype.updateFloatingTerminalPoint = function(a, b, c, d) { - b = this.getTerminalPort(a, b, d); - var e = this.getNextPoint(a, c, d), - f = this.graph.isOrthogonal(a); - c = mxUtils.toRadians(Number(b.style[mxConstants.STYLE_ROTATION] || "0")); - var g = new mxPoint(b.getCenterX(), b.getCenterY()); - if (0 != c) var h = Math.cos(-c), - k = Math.sin(-c), - e = mxUtils.getRotatedPoint(e, h, k, g); - h = parseFloat(a.style[mxConstants.STYLE_PERIMETER_SPACING] || 0); - h += parseFloat(a.style[d ? mxConstants.STYLE_SOURCE_PERIMETER_SPACING : mxConstants.STYLE_TARGET_PERIMETER_SPACING] || - 0); - b = this.getPerimeterPoint(b, e, 0 == c && f, h); - 0 != c && (h = Math.cos(c), k = Math.sin(c), b = mxUtils.getRotatedPoint(b, h, k, g)); - a.setAbsoluteTerminalPoint(b, d) -}; -mxGraphView.prototype.getTerminalPort = function(a, b, c) { - a = mxUtils.getValue(a.style, c ? mxConstants.STYLE_SOURCE_PORT : mxConstants.STYLE_TARGET_PORT); - null != a && (a = this.getState(this.graph.getModel().getCell(a)), null != a && (b = a)); - return b -}; -mxGraphView.prototype.getPerimeterPoint = function(a, b, c, d) { - var e = null; - if (null != a) { - var f = this.getPerimeterFunction(a); - if (null != f && null != b && (d = this.getPerimeterBounds(a, d), 0 < d.width || 0 < d.height)) e = f(d, a, b, c); - null == e && (e = this.getPoint(a)) - } - return e -}; -mxGraphView.prototype.getRoutingCenterX = function(a) { - var b = null != a.style ? parseFloat(a.style[mxConstants.STYLE_ROUTING_CENTER_X]) || 0 : 0; - return a.getCenterX() + b * a.width -}; -mxGraphView.prototype.getRoutingCenterY = function(a) { - var b = null != a.style ? parseFloat(a.style[mxConstants.STYLE_ROUTING_CENTER_Y]) || 0 : 0; - return a.getCenterY() + b * a.height -}; -mxGraphView.prototype.getPerimeterBounds = function(a, b) { - b = null != b ? b : 0; - null != a && (b += parseFloat(a.style[mxConstants.STYLE_PERIMETER_SPACING] || 0)); - return a.getPerimeterBounds(b * this.scale) -}; -mxGraphView.prototype.getPerimeterFunction = function(a) { - a = a.style[mxConstants.STYLE_PERIMETER]; - if ("string" == typeof a) { - var b = mxStyleRegistry.getValue(a); - null == b && this.isAllowEval() && (b = mxUtils.eval(a)); - a = b - } - return "function" == typeof a ? a : null -}; -mxGraphView.prototype.getNextPoint = function(a, b, c) { - a = a.absolutePoints; - var d = null; - if (null != a && (c || 2 < a.length || null == b)) d = a.length, d = a[c ? Math.min(1, d - 1) : Math.max(0, d - 2)]; - null == d && null != b && (d = new mxPoint(b.getCenterX(), b.getCenterY())); - return d -}; -mxGraphView.prototype.getVisibleTerminal = function(a, b) { - for (var c = this.graph.getModel(), d = c.getTerminal(a, b), e = d; null != d && d != this.currentRoot;) { - if (!this.graph.isCellVisible(e) || this.graph.isCellCollapsed(d)) e = d; - d = c.getParent(d) - } - c.getParent(e) == c.getRoot() && (e = null); - return e -}; -mxGraphView.prototype.updateEdgeBounds = function(a) { - var b = a.absolutePoints; - a.length = 0; - if (null != b && 0 < b.length) { - var c = b[0], - d = b[b.length - 1]; - if (null == c || null == d) a.cell != this.currentRoot && this.clear(a.cell, !0); - else { - if (c.x != d.x || c.y != d.y) { - var e = d.x - c.x, - f = d.y - c.y; - a.terminalDistance = Math.sqrt(e * e + f * f) - } else a.terminalDistance = 0; - var d = 0, - g = [], - f = c; - if (null != f) { - for (var c = f.x, h = f.y, k = c, l = h, m = 1; m < b.length; m++) { - var n = b[m]; - null != n && (e = f.x - n.x, f = f.y - n.y, e = Math.sqrt(e * e + f * f), g.push(e), d += e, f = n, c = Math.min(f.x, c), h = Math.min(f.y, - h), k = Math.max(f.x, k), l = Math.max(f.y, l)) - } - a.length = d; - a.segments = g; - a.x = c; - a.y = h; - a.width = Math.max(1, k - c); - a.height = Math.max(1, l - h) - } - } - } -}; -mxGraphView.prototype.getPoint = function(a, b) { - var c = a.getCenterX(), - d = a.getCenterY(); - if (null != a.segments && (null == b || b.relative)) { - for (var e = a.absolutePoints.length, f = ((null != b ? b.x / 2 : 0) + 0.5) * a.length, g = a.segments[0], h = 0, k = 1; f > h + g && k < e - 1;) h += g, g = a.segments[k++]; - e = 0 == g ? 0 : (f - h) / g; - f = a.absolutePoints[k - 1]; - k = a.absolutePoints[k]; - if (null != f && null != k) { - h = c = d = 0; - if (null != b) { - var d = b.y, - l = b.offset; - null != l && (c = l.x, h = l.y) - } - l = k.x - f.x; - k = k.y - f.y; - c = f.x + l * e + ((0 == g ? 0 : k / g) * d + c) * this.scale; - d = f.y + k * e - ((0 == g ? 0 : l / g) * d - h) * this.scale - } - } else null != - b && (l = b.offset, null != l && (c += l.x, d += l.y)); - return new mxPoint(c, d) -}; -mxGraphView.prototype.getRelativePoint = function(a, b, c) { - var d = this.graph.getModel().getGeometry(a.cell); - if (null != d) { - var e = a.absolutePoints.length; - if (d.relative && 1 < e) { - for (var d = a.length, f = a.segments, g = a.absolutePoints[0], h = a.absolutePoints[1], k = mxUtils.ptSegDistSq(g.x, g.y, h.x, h.y, b, c), l = 0, m = 0, n = 0, p = 2; p < e; p++) m += f[p - - 2], h = a.absolutePoints[p], g = mxUtils.ptSegDistSq(g.x, g.y, h.x, h.y, b, c), g <= k && (k = g, l = p - 1, n = m), g = h; - e = f[l]; - g = a.absolutePoints[l]; - h = a.absolutePoints[l + 1]; - k = h.x; - f = h.y; - a = g.x - k; - l = g.y - f; - k = b - k; - f = c - f; - k = a - k; - f = l - f; - f = k * a + f * l; - a = Math.sqrt(0 >= f ? 0 : f * f / (a * a + l * l)); - a > e && (a = e); - e = Math.sqrt(mxUtils.ptSegDistSq(g.x, g.y, h.x, h.y, b, c)); - 1 == mxUtils.relativeCcw(g.x, g.y, h.x, h.y, b, c) && (e = -e); - return new mxPoint(-2 * ((d / 2 - n - a) / d), e / this.scale) - } - } - return new mxPoint -}; -mxGraphView.prototype.updateEdgeLabelOffset = function(a) { - var b = a.absolutePoints; - a.absoluteOffset.x = a.getCenterX(); - a.absoluteOffset.y = a.getCenterY(); - if (null != b && 0 < b.length && null != a.segments) { - var c = this.graph.getCellGeometry(a.cell); - if (c.relative) { - var d = this.getPoint(a, c); - null != d && (a.absoluteOffset = d) - } else { - var d = b[0], - e = b[b.length - 1]; - if (null != d && null != e) { - var b = e.x - d.x, - f = e.y - d.y, - g = e = 0, - c = c.offset; - null != c && (e = c.x, g = c.y); - c = d.y + f / 2 + g * this.scale; - a.absoluteOffset.x = d.x + b / 2 + e * this.scale; - a.absoluteOffset.y = c - } - } - } -}; -mxGraphView.prototype.getState = function(a, b) { - b = b || !1; - var c = null; - null != a && (c = this.states.get(a), this.graph.isCellVisible(a) && (null == c && b && this.graph.isCellVisible(a) ? (c = this.createState(a), this.states.put(a, c)) : b && (null != c && this.updateStyle) && - (c.style = this.graph.getCellStyle(a)))); - return c -}; -mxGraphView.prototype.isRendering = function() { - return this.rendering -}; -mxGraphView.prototype.setRendering = function(a) { - this.rendering = a -}; -mxGraphView.prototype.isAllowEval = function() { - return this.allowEval -}; -mxGraphView.prototype.setAllowEval = function(a) { - this.allowEval = a -}; -mxGraphView.prototype.getStates = function() { - return this.states -}; -mxGraphView.prototype.setStates = function(a) { - this.states = a -}; -mxGraphView.prototype.getCellStates = function(a) { - if (null == a) return this.states; - for (var b = [], c = 0; c < a.length; c++) { - var d = this.getState(a[c]); - null != d && b.push(d) - } - return b -}; -mxGraphView.prototype.removeState = function(a) { - var b = null; - null != a && (b = this.states.remove(a), null != b && (this.graph.cellRenderer.destroy(b), b.destroy())); - return b -}; -mxGraphView.prototype.createState = function(a) { - var b = this.graph.getCellStyle(a); - a = new mxCellState(this, a, b); - this.graph.cellRenderer.initialize(a, this.isRendering()); - return a -}; -mxGraphView.prototype.getCanvas = function() { - return this.canvas -}; -mxGraphView.prototype.getBackgroundPane = function() { - return this.backgroundPane -}; -mxGraphView.prototype.getDrawPane = function() { - return this.drawPane -}; -mxGraphView.prototype.getOverlayPane = function() { - return this.overlayPane -}; -mxGraphView.prototype.isContainerEvent = function(a) { - a = mxEvent.getSource(a); - return a == this.graph.container || a.parentNode == this.backgroundPane || null != a.parentNode && a.parentNode.parentNode == this.backgroundPane || a == this.canvas.parentNode || a == this.canvas || - a == this.backgroundPane || a == this.drawPane || a == this.overlayPane -}; -mxGraphView.prototype.isScrollEvent = function(a) { - var b = mxUtils.getOffset(this.graph.container); - a = new mxPoint(a.clientX - b.x, a.clientY - b.y); - var b = this.graph.container.offsetWidth, - c = this.graph.container.clientWidth; - if (b > c && a.x > c + 2 && a.x <= b) return !0; - b = this.graph.container.offsetHeight; - c = this.graph.container.clientHeight; - return b > c && a.y > c + 2 && a.y <= b ? !0 : !1 -}; -mxGraphView.prototype.init = function() { - this.installListeners(); - var a = this.graph; - a.dialect == mxConstants.DIALECT_SVG ? this.createSvg() : a.dialect == mxConstants.DIALECT_VML ? this.createVml() : this.createHtml() -}; -mxGraphView.prototype.installListeners = function() { - var a = this.graph, - b = a.container; - if (null != b) { - mxEvent.addGestureListeners(b, mxUtils.bind(this, function(b) { - mxClient.IS_TOUCH && a.isEditing() && a.stopEditing(!a.isInvokesStopCellEditing()); - this.isContainerEvent(b) && (!mxClient.IS_IE && !mxClient.IS_GC && !mxClient.IS_OP && !mxClient.IS_SF || !this.isScrollEvent(b)) && a.fireMouseEvent(mxEvent.MOUSE_DOWN, new mxMouseEvent( - b)) - }), mxUtils.bind(this, function(b) { - this.isContainerEvent(b) && a.fireMouseEvent(mxEvent.MOUSE_MOVE, - new mxMouseEvent(b)) - }), mxUtils.bind(this, function(b) { - this.isContainerEvent(b) && a.fireMouseEvent(mxEvent.MOUSE_UP, new mxMouseEvent(b)) - })); - mxEvent.addListener(b, "dblclick", mxUtils.bind(this, function(b) { - a.dblClick(b) - })); - var c = function(c) { - var e = null; - mxClient.IS_TOUCH && (e = mxEvent.getClientX(c), c = mxEvent.getClientY(c), c = mxUtils.convertPoint(b, e, c), e = a.view.getState(a.getCellAt(c.x, c.y))); - return e - }; - a.addMouseListener({ - mouseDown: function(b, c) { - a.panningHandler.hideMenu() - }, - mouseMove: function() {}, - mouseUp: function() {} - }); - this.moveHandler = mxUtils.bind(this, function(b) { - null != a.tooltipHandler && a.tooltipHandler.isHideOnHover() && a.tooltipHandler.hide(); - this.captureDocumentGesture && (a.isMouseDown && !mxEvent.isConsumed(b)) && a.fireMouseEvent(mxEvent.MOUSE_MOVE, new mxMouseEvent(b, c(b))) - }); - this.endHandler = mxUtils.bind(this, function(b) { - this.captureDocumentGesture && a.fireMouseEvent(mxEvent.MOUSE_UP, new mxMouseEvent(b)) - }); - mxEvent.addGestureListeners(document, null, this.moveHandler, this.endHandler) - } -}; -mxGraphView.prototype.createHtml = function() { - var a = this.graph.container; - null != a && (this.canvas = this.createHtmlPane("100%", "100%"), this.backgroundPane = this.createHtmlPane("1px", "1px"), this.drawPane = this.createHtmlPane("1px", "1px"), this.overlayPane = - this.createHtmlPane("1px", "1px"), this.canvas.appendChild(this.backgroundPane), this.canvas.appendChild(this.drawPane), this.canvas.appendChild(this.overlayPane), a.appendChild(this.canvas), - mxClient.IS_QUIRKS && (a = mxUtils.bind(this, function(a) { - a = this.getGraphBounds(); - this.updateHtmlCanvasSize(a.x + a.width + this.graph.border, a.y + a.height + this.graph.border) - }), mxEvent.addListener(window, "resize", a))) -}; -mxGraphView.prototype.updateHtmlCanvasSize = function(a, b) { - if (null != this.graph.container) { - var c = this.graph.container.offsetHeight; - this.canvas.style.width = this.graph.container.offsetWidth < a ? a + "px" : "100%"; - this.canvas.style.height = c < b ? b + "px" : "100%" - } -}; -mxGraphView.prototype.createHtmlPane = function(a, b) { - var c = document.createElement("DIV"); - null != a && null != b ? (c.style.position = "absolute", c.style.left = "0px", c.style.top = "0px", c.style.width = a, c.style.height = b) : c.style.position = "relative"; - return c -}; -mxGraphView.prototype.createVml = function() { - var a = this.graph.container; - if (null != a) { - var b = a.offsetWidth, - c = a.offsetHeight; - this.canvas = this.createVmlPane(b, c); - this.backgroundPane = this.createVmlPane(b, c); - this.drawPane = this.createVmlPane(b, c); - this.overlayPane = this.createVmlPane(b, c); - this.canvas.appendChild(this.backgroundPane); - this.canvas.appendChild(this.drawPane); - this.canvas.appendChild(this.overlayPane); - a.appendChild(this.canvas) - } -}; -mxGraphView.prototype.createVmlPane = function(a, b) { - var c = document.createElement(mxClient.VML_PREFIX + ":group"); - c.style.position = "absolute"; - c.style.left = "0px"; - c.style.top = "0px"; - c.style.width = a + "px"; - c.style.height = b + "px"; - c.setAttribute("coordsize", a + "," + b); - c.setAttribute("coordorigin", "0,0"); - return c -}; -mxGraphView.prototype.createSvg = function() { - var a = this.graph.container; - this.canvas = document.createElementNS(mxConstants.NS_SVG, "g"); - this.backgroundPane = document.createElementNS(mxConstants.NS_SVG, "g"); - this.canvas.appendChild(this.backgroundPane); - this.drawPane = document.createElementNS(mxConstants.NS_SVG, "g"); - this.canvas.appendChild(this.drawPane); - this.overlayPane = document.createElementNS(mxConstants.NS_SVG, "g"); - this.canvas.appendChild(this.overlayPane); - var b = document.createElementNS(mxConstants.NS_SVG, - "svg"); - b.style.width = "100%"; - b.style.height = "100%"; - b.style.display = "block"; - b.appendChild(this.canvas); - null != a && (a.appendChild(b), "static" == mxUtils.getCurrentStyle(a).position && (a.style.position = "relative")) -}; -mxGraphView.prototype.destroy = function() { - var a = null != this.canvas ? this.canvas.ownerSVGElement : null; - null == a && (a = this.canvas); - null != a && null != a.parentNode && (this.clear(this.currentRoot, !0), mxEvent.removeGestureListeners(document, null, this.moveHandler, this.endHandler), mxEvent.release(this.graph.container), a - .parentNode.removeChild(a), this.overlayPane = this.drawPane = this.backgroundPane = this.canvas = this.endHandler = this.moveHandler = null) -}; - -function mxCurrentRootChange(a, b) { - this.view = a; - this.previous = this.root = b; - this.isUp = null == b; - if (!this.isUp) - for (var c = this.view.currentRoot, d = this.view.graph.getModel(); null != c;) { - if (c == b) { - this.isUp = !0; - break - } - c = d.getParent(c) - } -} -mxCurrentRootChange.prototype.execute = function() { - var a = this.view.currentRoot; - this.view.currentRoot = this.previous; - this.previous = a; - a = this.view.graph.getTranslateForRoot(this.view.currentRoot); - null != a && (this.view.translate = new mxPoint(-a.x, -a.y)); - this.view.fireEvent(new mxEventObject(this.isUp ? mxEvent.UP : mxEvent.DOWN, "root", this.view.currentRoot, "previous", this.previous)); - this.isUp ? (this.view.clear(this.view.currentRoot, !0), this.view.validate()) : this.view.refresh(); - this.isUp = !this.isUp -}; - -function mxGraph(a, b, c, d) { - this.mouseListeners = null; - this.renderHint = c; - this.dialect = mxClient.IS_SVG ? mxConstants.DIALECT_SVG : c == mxConstants.RENDERING_HINT_EXACT && mxClient.IS_VML ? mxConstants.DIALECT_VML : c == mxConstants.RENDERING_HINT_FASTEST ? mxConstants - .DIALECT_STRICTHTML : c == mxConstants.RENDERING_HINT_FASTER ? mxConstants.DIALECT_PREFERHTML : mxConstants.DIALECT_MIXEDHTML; - this.model = null != b ? b : new mxGraphModel; - this.multiplicities = []; - this.imageBundles = []; - this.cellRenderer = this.createCellRenderer(); - this.setSelectionModel(this.createSelectionModel()); - this.setStylesheet(null != d ? d : this.createStylesheet()); - this.view = this.createGraphView(); - this.graphModelChangeListener = mxUtils.bind(this, function(a, b) { - this.graphModelChanged(b.getProperty("edit").changes) - }); - this.model.addListener(mxEvent.CHANGE, this.graphModelChangeListener); - this.createHandlers(); - null != a && this.init(a); - this.view.revalidate() -} -mxLoadResources && mxResources.add(mxClient.basePath + "/resources/graph"); -mxGraph.prototype = new mxEventSource; -mxGraph.prototype.constructor = mxGraph; -mxGraph.prototype.EMPTY_ARRAY = []; -mxGraph.prototype.mouseListeners = null; -mxGraph.prototype.isMouseDown = !1; -mxGraph.prototype.model = null; -mxGraph.prototype.view = null; -mxGraph.prototype.stylesheet = null; -mxGraph.prototype.selectionModel = null; -mxGraph.prototype.cellEditor = null; -mxGraph.prototype.cellRenderer = null; -mxGraph.prototype.multiplicities = null; -mxGraph.prototype.renderHint = null; -mxGraph.prototype.dialect = null; -mxGraph.prototype.gridSize = 10; -mxGraph.prototype.gridEnabled = !0; -mxGraph.prototype.portsEnabled = !0; -mxGraph.prototype.doubleTapEnabled = !0; -mxGraph.prototype.doubleTapTimeout = 700; -mxGraph.prototype.doubleTapTolerance = 25; -mxGraph.prototype.lastTouchY = 0; -mxGraph.prototype.lastTouchY = 0; -mxGraph.prototype.lastTouchTime = 0; -mxGraph.prototype.gestureEnabled = !0; -mxGraph.prototype.tolerance = 4; -mxGraph.prototype.defaultOverlap = 0.5; -mxGraph.prototype.defaultParent = null; -mxGraph.prototype.alternateEdgeStyle = null; -mxGraph.prototype.backgroundImage = null; -mxGraph.prototype.pageVisible = !1; -mxGraph.prototype.pageBreaksVisible = !1; -mxGraph.prototype.pageBreakColor = "gray"; -mxGraph.prototype.pageBreakDashed = !0; -mxGraph.prototype.minPageBreakDist = 20; -mxGraph.prototype.preferPageSize = !1; -mxGraph.prototype.pageFormat = mxConstants.PAGE_FORMAT_A4_PORTRAIT; -mxGraph.prototype.pageScale = 1.5; -mxGraph.prototype.enabled = !0; -mxGraph.prototype.escapeEnabled = !0; -mxGraph.prototype.invokesStopCellEditing = !0; -mxGraph.prototype.enterStopsCellEditing = !1; -mxGraph.prototype.useScrollbarsForPanning = !0; -mxGraph.prototype.exportEnabled = !0; -mxGraph.prototype.importEnabled = !0; -mxGraph.prototype.cellsLocked = !1; -mxGraph.prototype.cellsCloneable = !0; -mxGraph.prototype.foldingEnabled = !0; -mxGraph.prototype.cellsEditable = !0; -mxGraph.prototype.cellsDeletable = !0; -mxGraph.prototype.cellsMovable = !0; -mxGraph.prototype.edgeLabelsMovable = !0; -mxGraph.prototype.vertexLabelsMovable = !1; -mxGraph.prototype.dropEnabled = !1; -mxGraph.prototype.splitEnabled = !0; -mxGraph.prototype.cellsResizable = !0; -mxGraph.prototype.cellsBendable = !0; -mxGraph.prototype.cellsSelectable = !0; -mxGraph.prototype.cellsDisconnectable = !0; -mxGraph.prototype.autoSizeCells = !1; -mxGraph.prototype.autoScroll = !0; -mxGraph.prototype.timerAutoScroll = !1; -mxGraph.prototype.allowAutoPanning = !1; -mxGraph.prototype.ignoreScrollbars = !1; -mxGraph.prototype.autoExtend = !0; -mxGraph.prototype.maximumGraphBounds = null; -mxGraph.prototype.minimumGraphSize = null; -mxGraph.prototype.minimumContainerSize = null; -mxGraph.prototype.maximumContainerSize = null; -mxGraph.prototype.resizeContainer = !1; -mxGraph.prototype.border = 0; -mxGraph.prototype.ordered = !0; -mxGraph.prototype.keepEdgesInForeground = !1; -mxGraph.prototype.keepEdgesInBackground = !0; -mxGraph.prototype.allowNegativeCoordinates = !0; -mxGraph.prototype.constrainChildren = !0; -mxGraph.prototype.extendParents = !0; -mxGraph.prototype.extendParentsOnAdd = !0; -mxGraph.prototype.collapseToPreferredSize = !0; -mxGraph.prototype.zoomFactor = 1.2; -mxGraph.prototype.keepSelectionVisibleOnZoom = !1; -mxGraph.prototype.centerZoom = !0; -mxGraph.prototype.resetViewOnRootChange = !0; -mxGraph.prototype.resetEdgesOnResize = !1; -mxGraph.prototype.resetEdgesOnMove = !1; -mxGraph.prototype.resetEdgesOnConnect = !0; -mxGraph.prototype.allowLoops = !1; -mxGraph.prototype.defaultLoopStyle = mxEdgeStyle.Loop; -mxGraph.prototype.multigraph = !0; -mxGraph.prototype.connectableEdges = !1; -mxGraph.prototype.allowDanglingEdges = !0; -mxGraph.prototype.cloneInvalidEdges = !1; -mxGraph.prototype.disconnectOnMove = !0; -mxGraph.prototype.labelsVisible = !0; -mxGraph.prototype.htmlLabels = !1; -mxGraph.prototype.swimlaneSelectionEnabled = !0; -mxGraph.prototype.swimlaneNesting = !0; -mxGraph.prototype.swimlaneIndicatorColorAttribute = mxConstants.STYLE_FILLCOLOR; -mxGraph.prototype.imageBundles = null; -mxGraph.prototype.minFitScale = 0.1; -mxGraph.prototype.maxFitScale = 8; -mxGraph.prototype.panDx = 0; -mxGraph.prototype.panDy = 0; -mxGraph.prototype.collapsedImage = new mxImage(mxClient.imageBasePath + "/collapsed.gif", 9, 9); -mxGraph.prototype.expandedImage = new mxImage(mxClient.imageBasePath + "/expanded.gif", 9, 9); -// mxGraph.prototype.warningImage = new mxImage(mxClient.imageBasePath + "/warning" + (mxClient.IS_MAC ? ".png" : ".gif"), 16, 16); -mxGraph.prototype.warningImage = new mxImage("/assets/plugins/mxgraph/images/warning.gif", 16, 16); - - -mxGraph.prototype.alreadyConnectedResource = "none" != mxClient.language ? "alreadyConnected" : ""; -mxGraph.prototype.containsValidationErrorsResource = "none" != mxClient.language ? "containsValidationErrors" : ""; -mxGraph.prototype.collapseExpandResource = "none" != mxClient.language ? "collapse-expand" : ""; -mxGraph.prototype.init = function(a) { - this.container = a; - this.cellEditor = this.createCellEditor(); - this.view.init(); - this.sizeDidChange(); - mxClient.IS_IE && (mxEvent.addListener(window, "unload", mxUtils.bind(this, function() { - this.destroy() - })), mxEvent.addListener(a, "selectstart", mxUtils.bind(this, function() { - return this.isEditing() - }))); - 8 == document.documentMode && a.insertAdjacentHTML("beforeend", '\x3cv:group style\x3d"DISPLAY: none;"\x3e\x3c/v:group\x3e') -}; -mxGraph.prototype.createHandlers = function(a) { - this.tooltipHandler = new mxTooltipHandler(this); - this.tooltipHandler.setEnabled(!1); - this.panningHandler = new mxPanningHandler(this); - this.panningHandler.panningEnabled = !1; - this.selectionCellsHandler = new mxSelectionCellsHandler(this); - this.connectionHandler = new mxConnectionHandler(this); - this.connectionHandler.setEnabled(!1); - this.graphHandler = new mxGraphHandler(this) -}; -mxGraph.prototype.createSelectionModel = function() { - return new mxGraphSelectionModel(this) -}; -mxGraph.prototype.createStylesheet = function() { - return new mxStylesheet -}; -mxGraph.prototype.createGraphView = function() { - return new mxGraphView(this) -}; -mxGraph.prototype.createCellRenderer = function() { - return new mxCellRenderer -}; -mxGraph.prototype.createCellEditor = function() { - return new mxCellEditor(this) -}; -mxGraph.prototype.getModel = function() { - return this.model -}; -mxGraph.prototype.getView = function() { - return this.view -}; -mxGraph.prototype.getStylesheet = function() { - return this.stylesheet -}; -mxGraph.prototype.setStylesheet = function(a) { - this.stylesheet = a -}; -mxGraph.prototype.getSelectionModel = function() { - return this.selectionModel -}; -mxGraph.prototype.setSelectionModel = function(a) { - this.selectionModel = a -}; -mxGraph.prototype.getSelectionCellsForChanges = function(a) { - for (var b = [], c = 0; c < a.length; c++) { - var d = a[c]; - if (d.constructor != mxRootChange) { - var e = null; - d instanceof mxChildChange && null == d.previous ? e = d.child : null != d.cell && d.cell instanceof mxCell && (e = d.cell); - null != e && 0 > mxUtils.indexOf(b, e) && b.push(e) - } - } - return this.getModel().getTopmostCells(b) -}; -mxGraph.prototype.graphModelChanged = function(a) { - for (var b = 0; b < a.length; b++) this.processChange(a[b]); - this.removeSelectionCells(this.getRemovedCellsForChanges(a)); - this.view.validate(); - this.sizeDidChange() -}; -mxGraph.prototype.getRemovedCellsForChanges = function(a) { - for (var b = [], c = 0; c < a.length; c++) { - var d = a[c]; - if (d instanceof mxRootChange) break; - else d instanceof mxChildChange ? null != d.previous && null == d.parent && (b = b.concat(this.model.getDescendants(d.child))) : d instanceof mxVisibleChange && (b = b.concat(this.model.getDescendants( - d.cell))) - } - return b -}; -mxGraph.prototype.processChange = function(a) { - if (a instanceof mxRootChange) this.clearSelection(), this.removeStateForCell(a.previous), this.resetViewOnRootChange && (this.view.scale = 1, this.view.translate.x = 0, this.view.translate.y = 0), - this.fireEvent(new mxEventObject(mxEvent.ROOT)); - else if (a instanceof mxChildChange) { - var b = this.model.getParent(a.child); - null != b ? this.view.invalidate(a.child, !0, !1, null != a.previous) : (this.removeStateForCell(a.child), this.view.currentRoot == a.child && this.home()); - b != a.previous && - (null != b && this.view.invalidate(b, !1, !1), null != a.previous && this.view.invalidate(a.previous, !1, !1)) - } else a instanceof mxTerminalChange || a instanceof mxGeometryChange ? this.view.invalidate(a.cell) : a instanceof mxValueChange ? this.view.invalidate(a.cell, !1, !1) : a instanceof mxStyleChange ? - (this.view.invalidate(a.cell, !0, !0, !1), this.view.removeState(a.cell)) : null != a.cell && a.cell instanceof mxCell && this.removeStateForCell(a.cell) -}; -mxGraph.prototype.removeStateForCell = function(a) { - for (var b = this.model.getChildCount(a), c = 0; c < b; c++) this.removeStateForCell(this.model.getChildAt(a, c)); - this.view.removeState(a) -}; -mxGraph.prototype.addCellOverlay = function(a, b) { - null == a.overlays && (a.overlays = []); - a.overlays.push(b); - var c = this.view.getState(a); - null != c && this.cellRenderer.redraw(c); - this.fireEvent(new mxEventObject(mxEvent.ADD_OVERLAY, "cell", a, "overlay", b)); - return b -}; -mxGraph.prototype.getCellOverlays = function(a) { - return a.overlays -}; -mxGraph.prototype.removeCellOverlay = function(a, b) { - if (null == b) this.removeCellOverlays(a); - else { - var c = mxUtils.indexOf(a.overlays, b); - 0 <= c ? (a.overlays.splice(c, 1), 0 == a.overlays.length && (a.overlays = null), c = this.view.getState(a), null != c && this.cellRenderer.redraw(c), this.fireEvent(new mxEventObject(mxEvent.REMOVE_OVERLAY, - "cell", a, "overlay", b))) : b = null - } - return b -}; -mxGraph.prototype.removeCellOverlays = function(a) { - var b = a.overlays; - if (null != b) { - a.overlays = null; - var c = this.view.getState(a); - null != c && this.cellRenderer.redraw(c); - for (c = 0; c < b.length; c++) this.fireEvent(new mxEventObject(mxEvent.REMOVE_OVERLAY, "cell", a, "overlay", b[c])) - } - return b -}; -mxGraph.prototype.clearCellOverlays = function(a) { - a = null != a ? a : this.model.getRoot(); - this.removeCellOverlays(a); - for (var b = this.model.getChildCount(a), c = 0; c < b; c++) { - var d = this.model.getChildAt(a, c); - this.clearCellOverlays(d) - } -}; -mxGraph.prototype.setCellWarning = function(a, b, c, d) { - if (null != b && 0 < b.length) return c = null != c ? c : this.warningImage, b = new mxCellOverlay(c, "\x3cfont color\x3dred\x3e" + b + "\x3c/font\x3e"), d && b.addListener(mxEvent.CLICK, mxUtils - .bind(this, function(b, c) { - this.isEnabled() && this.setSelectionCell(a) - })), this.addCellOverlay(a, b); - this.removeCellOverlays(a); - return null -}; -mxGraph.prototype.startEditing = function(a) { - this.startEditingAtCell(null, a) -}; -mxGraph.prototype.startEditingAtCell = function(a, b) { - null == a && (a = this.getSelectionCell(), null != a && !this.isCellEditable(a) && (a = null)); - null != a && (this.fireEvent(new mxEventObject(mxEvent.START_EDITING, "cell", a, "event", b)), this.cellEditor.startEditing(a, b)) -}; -mxGraph.prototype.getEditingValue = function(a, b) { - return this.convertValueToString(a) -}; -mxGraph.prototype.stopEditing = function(a) { - this.cellEditor.stopEditing(a) -}; -mxGraph.prototype.labelChanged = function(a, b, c) { - this.model.beginUpdate(); - try { - this.cellLabelChanged(a, b, this.isAutoSizeCell(a)), this.fireEvent(new mxEventObject(mxEvent.LABEL_CHANGED, "cell", a, "value", b, "event", c)) - } finally { - this.model.endUpdate() - } - return a -}; -mxGraph.prototype.cellLabelChanged = function(a, b, c) { - this.model.beginUpdate(); - try { - this.model.setValue(a, b), c && this.cellSizeUpdated(a, !1) - } finally { - this.model.endUpdate() - } -}; -mxGraph.prototype.escape = function(a) { - this.stopEditing(!0); - this.connectionHandler.reset(); - this.graphHandler.reset(); - a = this.getSelectionCells(); - for (var b = 0; b < a.length; b++) { - var c = this.view.getState(a[b]); - null != c && null != c.handler && c.handler.reset() - } -}; -mxGraph.prototype.click = function(a) { - var b = a.getEvent(), - c = a.getCell(), - d = new mxEventObject(mxEvent.CLICK, "event", b, "cell", c); - a.isConsumed() && d.consume(); - this.fireEvent(d); - this.isEnabled() && (!mxEvent.isConsumed(b) && !d.isConsumed()) && (null != c ? this.selectCellForEvent(c, b) : (c = null, this.isSwimlaneSelectionEnabled() && (c = this.getSwimlaneAt(a.getGraphX(), - a.getGraphY())), null != c ? this.selectCellForEvent(c, b) : this.isToggleEvent(b) || this.clearSelection())) -}; -mxGraph.prototype.dblClick = function(a, b) { - var c = new mxEventObject(mxEvent.DOUBLE_CLICK, "event", a, "cell", b); - this.fireEvent(c); - this.isEnabled() && (!mxEvent.isConsumed(a) && !c.isConsumed() && null != b && this.isCellEditable(b)) && this.startEditingAtCell(b, a) -}; -mxGraph.prototype.scrollPointToVisible = function(a, b, c, d) { - if (!this.timerAutoScroll && (this.ignoreScrollbars || mxUtils.hasScrollbars(this.container))) { - var e = this.container; - d = null != d ? d : 20; - if (a >= e.scrollLeft && b >= e.scrollTop && a <= e.scrollLeft + e.clientWidth && b <= e.scrollTop + e.clientHeight) { - var f = e.scrollLeft + e.clientWidth - a; - if (f < d) { - if (a = e.scrollLeft, e.scrollLeft += d - f, c && a == e.scrollLeft) { - if (this.dialect == mxConstants.DIALECT_SVG) { - a = this.view.getDrawPane().ownerSVGElement; - var g = this.container.scrollWidth + d - f - } else g = - Math.max(e.clientWidth, e.scrollWidth) + d - f, a = this.view.getCanvas(); - a.style.width = g + "px"; - e.scrollLeft += d - f - } - } else f = a - e.scrollLeft, f < d && (e.scrollLeft -= d - f); - f = e.scrollTop + e.clientHeight - b; - f < d ? (a = e.scrollTop, e.scrollTop += d - f, a == e.scrollTop && c && (this.dialect == mxConstants.DIALECT_SVG ? (a = this.view.getDrawPane().ownerSVGElement, b = this.container.scrollHeight + - d - f) : (b = Math.max(e.clientHeight, e.scrollHeight) + d - f, a = this.view.getCanvas()), a.style.height = b + "px", e.scrollTop += d - f)) : (f = b - e.scrollTop, f < d && (e.scrollTop -= - d - f)) - } - } else this.allowAutoPanning && !this.panningHandler.active && (null == this.panningManager && (this.panningManager = this.createPanningManager()), this.panningManager.panTo(a + this.panDx, b + - this.panDy)) -}; -mxGraph.prototype.createPanningManager = function() { - return new mxPanningManager(this) -}; -mxGraph.prototype.getBorderSizes = function() { - function a(a) { - var b = 0, - b = "thin" == a ? 2 : "medium" == a ? 4 : "thick" == a ? 6 : parseInt(a); - isNaN(b) && (b = 0); - return b - } - var b = mxUtils.getCurrentStyle(this.container), - c = new mxRectangle; - c.x = a(b.borderLeftWidth) + parseInt(b.paddingLeft || 0); - c.y = a(b.borderTopWidth) + parseInt(b.paddingTop || 0); - c.width = a(b.borderRightWidth) + parseInt(b.paddingRight || 0); - c.height = a(b.borderBottomWidth) + parseInt(b.paddingBottom || 0); - return c -}; -mxGraph.prototype.getPreferredPageSize = function(a, b, c) { - a = this.view.scale; - var d = this.view.translate, - e = this.pageFormat, - f = a * this.pageScale, - e = new mxRectangle(0, 0, e.width * f, e.height * f); - b = this.pageBreaksVisible ? Math.ceil(b / e.width) : 1; - c = this.pageBreaksVisible ? Math.ceil(c / e.height) : 1; - return new mxRectangle(0, 0, b * e.width + 2 + d.x / a, c * e.height + 2 + d.y / a) -}; -mxGraph.prototype.sizeDidChange = function() { - var a = this.getGraphBounds(); - if (null != this.container) { - var b = this.getBorder(), - c = Math.max(0, a.x + a.width + 1 + b), - b = Math.max(0, a.y + a.height + 1 + b); - null != this.minimumContainerSize && (c = Math.max(c, this.minimumContainerSize.width), b = Math.max(b, this.minimumContainerSize.height)); - this.resizeContainer && this.doResizeContainer(c, b); - if (this.preferPageSize || !mxClient.IS_IE && this.pageVisible) { - var d = this.getPreferredPageSize(a, c, b); - null != d && (c = d.width, b = d.height) - } - null != this.minimumGraphSize && - (c = Math.max(c, this.minimumGraphSize.width * this.view.scale), b = Math.max(b, this.minimumGraphSize.height * this.view.scale)); - c = Math.ceil(c - 1); - b = Math.ceil(b - 1); - this.dialect == mxConstants.DIALECT_SVG ? (d = this.view.getDrawPane().ownerSVGElement, d.style.minWidth = Math.max(1, c) + "px", d.style.minHeight = Math.max(1, b) + "px", d.style.width = - "100%", d.style.height = "100%") : mxClient.IS_QUIRKS ? this.view.updateHtmlCanvasSize(Math.max(1, c), Math.max(1, b)) : (this.view.canvas.style.minWidth = Math.max(1, c) + "px", this.view.canvas - .style.minHeight = - Math.max(1, b) + "px"); - this.updatePageBreaks(this.pageBreaksVisible, c - 1, b - 1) - } - this.fireEvent(new mxEventObject(mxEvent.SIZE, "bounds", a)) -}; -mxGraph.prototype.doResizeContainer = function(a, b) { - if (mxClient.IS_IE) - if (mxClient.IS_QUIRKS) { - var c = this.getBorderSizes(); - a += Math.max(2, c.x + c.width + 1); - b += Math.max(2, c.y + c.height + 1) - } else 9 <= document.documentMode ? (a += 3, b += 5) : (a += 1, b += 1); - else b += 1; - null != this.maximumContainerSize && (a = Math.min(this.maximumContainerSize.width, a), b = Math.min(this.maximumContainerSize.height, b)); - this.container.style.width = Math.ceil(a) + "px"; - this.container.style.height = Math.ceil(b) + "px" -}; -mxGraph.prototype.updatePageBreaks = function(a, b, c) { - var d = this.view.scale, - e = this.view.translate, - f = this.pageFormat, - g = d * this.pageScale, - e = new mxRectangle(d * e.x, d * e.y, f.width * g, f.height * g); - a = a && Math.min(e.width, e.height) > this.minPageBreakDist; - e.x = mxUtils.mod(e.x, e.width); - e.y = mxUtils.mod(e.y, e.height); - f = a ? Math.ceil((b - e.x) / e.width) : 0; - a = a ? Math.ceil((c - e.y) / e.height) : 0; - null == this.horizontalPageBreaks && 0 < f && (this.horizontalPageBreaks = []); - if (null != this.horizontalPageBreaks) { - for (g = 0; g <= f; g++) { - var h = [new mxPoint(e.x + - g * e.width, 1), new mxPoint(e.x + g * e.width, c)]; - null != this.horizontalPageBreaks[g] ? (this.horizontalPageBreaks[g].scale = 1, this.horizontalPageBreaks[g].points = h, this.horizontalPageBreaks[g].redraw()) : (h = new mxPolyline(h, this.pageBreakColor, - this.scale), h.dialect = this.dialect, h.isDashed = this.pageBreakDashed, h.scale = d, h.init(this.view.backgroundPane), h.redraw(), this.horizontalPageBreaks[g] = h) - } - for (g = f; g < this.horizontalPageBreaks.length; g++) this.horizontalPageBreaks[g].destroy(); - this.horizontalPageBreaks.splice(f, - this.horizontalPageBreaks.length - f) - } - null == this.verticalPageBreaks && 0 < a && (this.verticalPageBreaks = []); - if (null != this.verticalPageBreaks) { - for (g = 0; g <= a; g++) h = [new mxPoint(1, e.y + g * e.height), new mxPoint(b, e.y + g * e.height)], null != this.verticalPageBreaks[g] ? (this.verticalPageBreaks[g].scale = 1, this.verticalPageBreaks[ - g].points = h, this.verticalPageBreaks[g].redraw()) : (h = new mxPolyline(h, this.pageBreakColor, d), h.dialect = this.dialect, h.isDashed = this.pageBreakDashed, h.scale = d, h.init(this.view - .backgroundPane), h.redraw(), - this.verticalPageBreaks[g] = h); - for (g = a; g < this.verticalPageBreaks.length; g++) this.verticalPageBreaks[g].destroy(); - this.verticalPageBreaks.splice(a, this.verticalPageBreaks.length - a) - } -}; -mxGraph.prototype.getCellStyle = function(a) { - var b = this.model.getStyle(a), - c = null, - c = this.model.isEdge(a) ? this.stylesheet.getDefaultEdgeStyle() : this.stylesheet.getDefaultVertexStyle(); - null != b && (c = this.postProcessCellStyle(this.stylesheet.getCellStyle(b, c))); - null == c && (c = mxGraph.prototype.EMPTY_ARRAY); - return c -}; -mxGraph.prototype.postProcessCellStyle = function(a) { - if (null != a) { - var b = a[mxConstants.STYLE_IMAGE], - c = this.getImageFromBundles(b); - null != c ? a[mxConstants.STYLE_IMAGE] = c : c = b; - null != c && "data:image/" == c.substring(0, 11) && (b = c.indexOf(","), 0 < b && (c = c.substring(0, b) + ";base64," + c.substring(b + 1)), a[mxConstants.STYLE_IMAGE] = c) - } - return a -}; -mxGraph.prototype.setCellStyle = function(a, b) { - b = b || this.getSelectionCells(); - if (null != b) { - this.model.beginUpdate(); - try { - for (var c = 0; c < b.length; c++) this.model.setStyle(b[c], a) - } finally { - this.model.endUpdate() - } - } -}; -mxGraph.prototype.toggleCellStyle = function(a, b, c) { - c = c || this.getSelectionCell(); - this.toggleCellStyles(a, b, [c]) -}; -mxGraph.prototype.toggleCellStyles = function(a, b, c) { - b = null != b ? b : !1; - c = c || this.getSelectionCells(); - if (null != c && 0 < c.length) { - var d = this.view.getState(c[0]), - d = null != d ? d.style : this.getCellStyle(c[0]); - null != d && (b = mxUtils.getValue(d, a, b) ? 0 : 1, this.setCellStyles(a, b, c)) - } -}; -mxGraph.prototype.setCellStyles = function(a, b, c) { - c = c || this.getSelectionCells(); - mxUtils.setCellStyles(this.model, c, a, b) -}; -mxGraph.prototype.toggleCellStyleFlags = function(a, b, c) { - this.setCellStyleFlags(a, b, null, c) -}; -mxGraph.prototype.setCellStyleFlags = function(a, b, c, d) { - d = d || this.getSelectionCells(); - if (null != d && 0 < d.length) { - if (null == c) { - var e = this.view.getState(d[0]), - e = null != e ? e.style : this.getCellStyle(d[0]); - null != e && (c = (parseInt(e[a] || 0) & b) != b) - } - mxUtils.setCellStyleFlags(this.model, d, a, b, c) - } -}; -mxGraph.prototype.alignCells = function(a, b, c) { - null == b && (b = this.getSelectionCells()); - if (null != b && 1 < b.length) { - if (null == c) - for (var d = 0; d < b.length; d++) { - var e = this.getCellGeometry(b[d]); - if (null != e && !this.model.isEdge(b[d])) - if (null == c) - if (a == mxConstants.ALIGN_CENTER) { - c = e.x + e.width / 2; - break - } else if (a == mxConstants.ALIGN_RIGHT) c = e.x + e.width; - else if (a == mxConstants.ALIGN_TOP) c = e.y; - else if (a == mxConstants.ALIGN_MIDDLE) { - c = e.y + e.height / 2; - break - } else c = a == mxConstants.ALIGN_BOTTOM ? e.y + e.height : e.x; - else c = a == mxConstants.ALIGN_RIGHT ? - Math.max(c, e.x + e.width) : a == mxConstants.ALIGN_TOP ? Math.min(c, e.y) : a == mxConstants.ALIGN_BOTTOM ? Math.max(c, e.y + e.height) : Math.min(c, e.x) - } - if (null != c) { - this.model.beginUpdate(); - try { - for (d = 0; d < b.length; d++) e = this.getCellGeometry(b[d]), null != e && !this.model.isEdge(b[d]) && (e = e.clone(), a == mxConstants.ALIGN_CENTER ? e.x = c - e.width / 2 : a == - mxConstants.ALIGN_RIGHT ? e.x = c - e.width : a == mxConstants.ALIGN_TOP ? e.y = c : a == mxConstants.ALIGN_MIDDLE ? e.y = c - e.height / 2 : a == mxConstants.ALIGN_BOTTOM ? e.y = c - e - .height : e.x = c, this.model.setGeometry(b[d], - e)); - this.fireEvent(new mxEventObject(mxEvent.ALIGN_CELLS, "align", a, "cells", b)) - } finally { - this.model.endUpdate() - } - } - } - return b -}; -mxGraph.prototype.flipEdge = function(a) { - if (null != a && null != this.alternateEdgeStyle) { - this.model.beginUpdate(); - try { - var b = this.model.getStyle(a); - null == b || 0 == b.length ? this.model.setStyle(a, this.alternateEdgeStyle) : this.model.setStyle(a, null); - this.resetEdge(a); - this.fireEvent(new mxEventObject(mxEvent.FLIP_EDGE, "edge", a)) - } finally { - this.model.endUpdate() - } - } - return a -}; -mxGraph.prototype.addImageBundle = function(a) { - this.imageBundles.push(a) -}; -mxGraph.prototype.removeImageBundle = function(a) { - for (var b = [], c = 0; c < this.imageBundles.length; c++) this.imageBundles[c] != a && b.push(this.imageBundles[c]); - this.imageBundles = b -}; -mxGraph.prototype.getImageFromBundles = function(a) { - if (null != a) - for (var b = 0; b < this.imageBundles.length; b++) { - var c = this.imageBundles[b].getImage(a); - if (null != c) return c - } - return null -}; -mxGraph.prototype.orderCells = function(a, b) { - null == b && (b = mxUtils.sortCells(this.getSelectionCells(), !0)); - this.model.beginUpdate(); - try { - this.cellsOrdered(b, a), this.fireEvent(new mxEventObject(mxEvent.ORDER_CELLS, "back", a, "cells", b)) - } finally { - this.model.endUpdate() - } - return b -}; -mxGraph.prototype.cellsOrdered = function(a, b) { - if (null != a) { - this.model.beginUpdate(); - try { - for (var c = 0; c < a.length; c++) { - var d = this.model.getParent(a[c]); - b ? this.model.add(d, a[c], c) : this.model.add(d, a[c], this.model.getChildCount(d) - 1) - } - this.fireEvent(new mxEventObject(mxEvent.CELLS_ORDERED, "back", b, "cells", a)) - } finally { - this.model.endUpdate() - } - } -}; -mxGraph.prototype.groupCells = function(a, b, c) { - null == c && (c = mxUtils.sortCells(this.getSelectionCells(), !0)); - c = this.getCellsForGroup(c); - null == a && (a = this.createGroupCell(c)); - var d = this.getBoundsForGroup(a, c, b); - if (0 < c.length && null != d) { - var e = this.model.getParent(a); - null == e && (e = this.model.getParent(c[0])); - this.model.beginUpdate(); - try { - null == this.getCellGeometry(a) && this.model.setGeometry(a, new mxGeometry); - var f = this.model.getChildCount(e); - this.cellsAdded([a], e, f, null, null, !1); - f = this.model.getChildCount(a); - this.cellsAdded(c, a, f, null, null, !1, !1); - this.cellsMoved(c, -d.x, -d.y, !1, !0); - this.cellsResized([a], [d]); - this.fireEvent(new mxEventObject(mxEvent.GROUP_CELLS, "group", a, "border", b, "cells", c)) - } finally { - this.model.endUpdate() - } - } - return a -}; -mxGraph.prototype.getCellsForGroup = function(a) { - var b = []; - if (null != a && 0 < a.length) { - var c = this.model.getParent(a[0]); - b.push(a[0]); - for (var d = 1; d < a.length; d++) this.model.getParent(a[d]) == c && b.push(a[d]) - } - return b -}; -mxGraph.prototype.getBoundsForGroup = function(a, b, c) { - b = this.getBoundingBoxFromGeometry(b); - null != b && (this.isSwimlane(a) && (a = this.getStartSize(a), b.x -= a.width, b.y -= a.height, b.width += a.width, b.height += a.height), b.x -= c, b.y -= c, b.width += 2 * c, b.height += 2 * c); - return b -}; -mxGraph.prototype.createGroupCell = function(a) { - a = new mxCell(""); - a.setVertex(!0); - a.setConnectable(!1); - return a -}; -mxGraph.prototype.ungroupCells = function(a) { - var b = []; - if (null == a) { - a = this.getSelectionCells(); - for (var c = [], d = 0; d < a.length; d++) 0 < this.model.getChildCount(a[d]) && c.push(a[d]); - a = c - } - if (null != a && 0 < a.length) { - this.model.beginUpdate(); - try { - for (d = 0; d < a.length; d++) { - var e = this.model.getChildren(a[d]); - if (null != e && 0 < e.length) { - var e = e.slice(), - f = this.model.getParent(a[d]), - g = this.model.getChildCount(f); - this.cellsAdded(e, f, g, null, null, !0); - b = b.concat(e) - } - } - this.cellsRemoved(this.addAllEdges(a)); - this.fireEvent(new mxEventObject(mxEvent.UNGROUP_CELLS, - "cells", a)) - } finally { - this.model.endUpdate() - } - } - return b -}; -mxGraph.prototype.removeCellsFromParent = function(a) { - null == a && (a = this.getSelectionCells()); - this.model.beginUpdate(); - try { - var b = this.getDefaultParent(), - c = this.model.getChildCount(b); - this.cellsAdded(a, b, c, null, null, !0); - this.fireEvent(new mxEventObject(mxEvent.REMOVE_CELLS_FROM_PARENT, "cells", a)) - } finally { - this.model.endUpdate() - } - return a -}; -mxGraph.prototype.updateGroupBounds = function(a, b, c) { - null == a && (a = this.getSelectionCells()); - b = null != b ? b : 0; - c = null != c ? c : !1; - this.model.beginUpdate(); - try { - for (var d = 0; d < a.length; d++) { - var e = this.getCellGeometry(a[d]); - if (null != e) { - var f = this.getChildCells(a[d]); - if (null != f && 0 < f.length) { - var g = this.getBoundingBoxFromGeometry(f); - if (0 < g.width && 0 < g.height) { - var h = this.isSwimlane(a[d]) ? this.getStartSize(a[d]) : new mxRectangle, - e = e.clone(); - c && (e.x += g.x - h.width - b, e.y += g.y - h.height - b); - e.width = g.width + h.width + 2 * b; - e.height = - g.height + h.height + 2 * b; - this.model.setGeometry(a[d], e); - this.moveCells(f, -g.x + h.width + b, -g.y + h.height + b) - } - } - } - } - } finally { - this.model.endUpdate() - } - return a -}; -mxGraph.prototype.cloneCells = function(a, b) { - b = null != b ? b : !0; - var c = null; - if (null != a) { - for (var d = {}, c = [], e = 0; e < a.length; e++) { - var f = mxCellPath.create(a[e]); - d[f] = a[e]; - c.push(a[e]) - } - if (0 < c.length) - for (var f = this.view.scale, g = this.view.translate, c = this.model.cloneCells(a, !0), e = 0; e < a.length; e++) - if (!b && this.model.isEdge(c[e]) && null != this.getEdgeValidationError(c[e], this.model.getTerminal(c[e], !0), this.model.getTerminal(c[e], !1))) c[e] = null; - else { - var h = this.model.getGeometry(c[e]); - if (null != h) { - var k = this.view.getState(a[e]), - l = this.view.getState(this.model.getParent(a[e])); - if (null != k && null != l) { - var m = l.origin.x, - l = l.origin.y; - if (this.model.isEdge(c[e])) { - for (var k = k.absolutePoints, n = this.model.getTerminal(a[e], !0), p = mxCellPath.create(n); null != n && null == d[p];) n = this.model.getParent(n), p = mxCellPath.create(n); - null == n && h.setTerminalPoint(new mxPoint(k[0].x / f - g.x, k[0].y / f - g.y), !0); - n = this.model.getTerminal(a[e], !1); - for (p = mxCellPath.create(n); null != n && null == d[p];) n = this.model.getParent(n), p = mxCellPath.create(n); - null == n && (n = k.length - - 1, h.setTerminalPoint(new mxPoint(k[n].x / f - g.x, k[n].y / f - g.y), !1)); - h = h.points; - if (null != h) - for (k = 0; k < h.length; k++) h[k].x += m, h[k].y += l - } else h.x += m, h.y += l - } - } - } else c = [] - } - return c -}; -mxGraph.prototype.insertVertex = function(a, b, c, d, e, f, g, h, k) { - b = this.createVertex(a, b, c, d, e, f, g, h, k); - return this.addCell(b, a) -}; -mxGraph.prototype.createVertex = function(a, b, c, d, e, f, g, h, k) { - a = new mxGeometry(d, e, f, g); - a.relative = null != k ? k : !1; - c = new mxCell(c, a, h); - c.setId(b); - c.setVertex(!0); - c.setConnectable(!0); - return c -}; -mxGraph.prototype.insertEdge = function(a, b, c, d, e, f) { - b = this.createEdge(a, b, c, d, e, f); - return this.addEdge(b, a, d, e) -}; -mxGraph.prototype.createEdge = function(a, b, c, d, e, f) { - a = new mxCell(c, new mxGeometry, f); - a.setId(b); - a.setEdge(!0); - a.geometry.relative = !0; - return a -}; -mxGraph.prototype.addEdge = function(a, b, c, d, e) { - return this.addCell(a, b, e, c, d) -}; -mxGraph.prototype.addCell = function(a, b, c, d, e) { - return this.addCells([a], b, c, d, e)[0] -}; -mxGraph.prototype.addCells = function(a, b, c, d, e) { - null == b && (b = this.getDefaultParent()); - null == c && (c = this.model.getChildCount(b)); - this.model.beginUpdate(); - try { - this.cellsAdded(a, b, c, d, e, !1, !0), this.fireEvent(new mxEventObject(mxEvent.ADD_CELLS, "cells", a, "parent", b, "index", c, "source", d, "target", e)) - } finally { - this.model.endUpdate() - } - return a -}; -mxGraph.prototype.cellsAdded = function(a, b, c, d, e, f, g) { - if (null != a && null != b && null != c) { - this.model.beginUpdate(); - try { - for (var h = f ? this.view.getState(b) : null, k = null != h ? h.origin : null, l = new mxPoint(0, 0), h = 0; h < a.length; h++) - if (null == a[h]) c--; - else { - var m = this.model.getParent(a[h]); - if (null != k && a[h] != b && b != m) { - var n = this.view.getState(m), - p = null != n ? n.origin : l, - q = this.model.getGeometry(a[h]); - if (null != q) { - var s = p.x - k.x, - r = p.y - k.y, - q = q.clone(); - q.translate(s, r); - !q.relative && (this.model.isVertex(a[h]) && !this.isAllowNegativeCoordinates()) && - (q.x = Math.max(0, q.x), q.y = Math.max(0, q.y)); - this.model.setGeometry(a[h], q) - } - } - b == m && c + h > this.model.getChildCount(b) && c--; - this.model.add(b, a[h], c + h); - this.isExtendParentsOnAdd() && this.isExtendParent(a[h]) && this.extendParent(a[h]); - (null == g || g) && this.constrainChild(a[h]); - null != d && this.cellConnected(a[h], d, !0); - null != e && this.cellConnected(a[h], e, !1) - } - this.fireEvent(new mxEventObject(mxEvent.CELLS_ADDED, "cells", a, "parent", b, "index", c, "source", d, "target", e, "absolute", f)) - } finally { - this.model.endUpdate() - } - } -}; -mxGraph.prototype.removeCells = function(a, b) { - b = null != b ? b : !0; - null == a && (a = this.getDeletableCells(this.getSelectionCells())); - b && (a = this.getDeletableCells(this.addAllEdges(a))); - this.model.beginUpdate(); - try { - this.cellsRemoved(a), this.fireEvent(new mxEventObject(mxEvent.REMOVE_CELLS, "cells", a, "includeEdges", b)) - } finally { - this.model.endUpdate() - } - return a -}; -mxGraph.prototype.cellsRemoved = function(a) { - if (null != a && 0 < a.length) { - var b = this.view.scale, - c = this.view.translate; - this.model.beginUpdate(); - try { - for (var d = {}, e = 0; e < a.length; e++) { - var f = mxCellPath.create(a[e]); - d[f] = a[e] - } - for (e = 0; e < a.length; e++) { - for (var g = this.getConnections(a[e]), h = 0; h < g.length; h++) - if (f = mxCellPath.create(g[h]), null == d[f]) { - var k = this.model.getGeometry(g[h]); - if (null != k) { - var l = this.view.getState(g[h]); - if (null != l) { - var k = k.clone(), - m = l.getVisibleTerminal(!0) == a[e], - n = l.absolutePoints, - p = m ? 0 : n.length - - 1; - k.setTerminalPoint(new mxPoint(n[p].x / b - c.x, n[p].y / b - c.y), m); - this.model.setTerminal(g[h], null, m); - this.model.setGeometry(g[h], k) - } - } - } - this.model.remove(a[e]) - } - this.fireEvent(new mxEventObject(mxEvent.CELLS_REMOVED, "cells", a)) - } finally { - this.model.endUpdate() - } - } -}; -mxGraph.prototype.splitEdge = function(a, b, c, d, e) { - d = d || 0; - e = e || 0; - null == c && (c = this.cloneCells([a])[0]); - var f = this.model.getParent(a), - g = this.model.getTerminal(a, !0); - this.model.beginUpdate(); - try { - this.cellsMoved(b, d, e, !1, !1), this.cellsAdded(b, f, this.model.getChildCount(f), null, null, !0), this.cellsAdded([c], f, this.model.getChildCount(f), g, b[0], !1), this.cellConnected(a, b[ - 0], !0), this.fireEvent(new mxEventObject(mxEvent.SPLIT_EDGE, "edge", a, "cells", b, "newEdge", c, "dx", d, "dy", e)) - } finally { - this.model.endUpdate() - } - return c -}; -mxGraph.prototype.toggleCells = function(a, b, c) { - null == b && (b = this.getSelectionCells()); - c && (b = this.addAllEdges(b)); - this.model.beginUpdate(); - try { - this.cellsToggled(b, a), this.fireEvent(new mxEventObject(mxEvent.TOGGLE_CELLS, "show", a, "cells", b, "includeEdges", c)) - } finally { - this.model.endUpdate() - } - return b -}; -mxGraph.prototype.cellsToggled = function(a, b) { - if (null != a && 0 < a.length) { - this.model.beginUpdate(); - try { - for (var c = 0; c < a.length; c++) this.model.setVisible(a[c], b) - } finally { - this.model.endUpdate() - } - } -}; -mxGraph.prototype.foldCells = function(a, b, c, d) { - b = null != b ? b : !1; - null == c && (c = this.getFoldableCells(this.getSelectionCells(), a)); - this.stopEditing(!1); - this.model.beginUpdate(); - try { - this.cellsFolded(c, a, b, d), this.fireEvent(new mxEventObject(mxEvent.FOLD_CELLS, "collapse", a, "recurse", b, "cells", c)) - } finally { - this.model.endUpdate() - } - return c -}; -mxGraph.prototype.cellsFolded = function(a, b, c, d) { - if (null != a && 0 < a.length) { - this.model.beginUpdate(); - try { - for (var e = 0; e < a.length; e++) - if ((!d || this.isCellFoldable(a[e], b)) && b != this.isCellCollapsed(a[e])) - if (this.model.setCollapsed(a[e], b), this.swapBounds(a[e], b), this.isExtendParent(a[e]) && this.extendParent(a[e]), c) { - var f = this.model.getChildren(a[e]); - this.foldCells(f, b, c) - } - this.fireEvent(new mxEventObject(mxEvent.CELLS_FOLDED, "cells", a, "collapse", b, "recurse", c)) - } finally { - this.model.endUpdate() - } - } -}; -mxGraph.prototype.swapBounds = function(a, b) { - if (null != a) { - var c = this.model.getGeometry(a); - null != c && (c = c.clone(), this.updateAlternateBounds(a, c, b), c.swap(), this.model.setGeometry(a, c)) - } -}; -mxGraph.prototype.updateAlternateBounds = function(a, b, c) { - if (null != a && null != b) { - c = this.view.getState(a); - c = null != c ? c.style : this.getCellStyle(a); - if (null == b.alternateBounds) { - var d = b; - this.collapseToPreferredSize && (a = this.getPreferredSizeForCell(a), null != a && (d = a, a = mxUtils.getValue(c, mxConstants.STYLE_STARTSIZE), 0 < a && (d.height = Math.max(d.height, a)))); - b.alternateBounds = new mxRectangle(0, 0, d.width, d.height) - } - if (null != b.alternateBounds) { - b.alternateBounds.x = b.x; - b.alternateBounds.y = b.y; - var e = mxUtils.toRadians(c[mxConstants.STYLE_ROTATION] || - "0"); - 0 != e && (a = b.alternateBounds.getCenterX() - b.getCenterX(), c = b.alternateBounds.getCenterY() - b.getCenterY(), d = Math.cos(e), e = Math.sin(e), b.alternateBounds.x += d * a - e * c - a, - b.alternateBounds.y += e * a + d * c - c) - } - } -}; -mxGraph.prototype.addAllEdges = function(a) { - var b = a.slice(); - return b = b.concat(this.getAllEdges(a)) -}; -mxGraph.prototype.getAllEdges = function(a) { - var b = []; - if (null != a) - for (var c = 0; c < a.length; c++) { - for (var d = this.model.getEdgeCount(a[c]), e = 0; e < d; e++) b.push(this.model.getEdgeAt(a[c], e)); - d = this.model.getChildren(a[c]); - b = b.concat(this.getAllEdges(d)) - } - return b -}; -mxGraph.prototype.updateCellSize = function(a, b) { - b = null != b ? b : !1; - this.model.beginUpdate(); - try { - this.cellSizeUpdated(a, b), this.fireEvent(new mxEventObject(mxEvent.UPDATE_CELL_SIZE, "cell", a, "ignoreChildren", b)) - } finally { - this.model.endUpdate() - } - return a -}; -mxGraph.prototype.cellSizeUpdated = function(a, b) { - if (null != a) { - this.model.beginUpdate(); - try { - var c = this.getPreferredSizeForCell(a), - d = this.model.getGeometry(a); - if (null != c && null != d) { - var e = this.isCellCollapsed(a), - d = d.clone(); - if (this.isSwimlane(a)) { - var f = this.view.getState(a), - g = null != f ? f.style : this.getCellStyle(a), - h = this.model.getStyle(a); - null == h && (h = ""); - mxUtils.getValue(g, mxConstants.STYLE_HORIZONTAL, !0) ? (h = mxUtils.setStyle(h, mxConstants.STYLE_STARTSIZE, c.height + 8), e && (d.height = c.height + 8), d.width = c.width) : - (h = mxUtils.setStyle(h, mxConstants.STYLE_STARTSIZE, c.width + 8), e && (d.width = c.width + 8), d.height = c.height); - this.model.setStyle(a, h) - } else d.width = c.width, d.height = c.height; - if (!b && !e) { - var k = this.view.getBounds(this.model.getChildren(a)); - if (null != k) { - var l = this.view.translate, - m = this.view.scale, - n = (k.y + k.height) / m - d.y - l.y; - d.width = Math.max(d.width, (k.x + k.width) / m - d.x - l.x); - d.height = Math.max(d.height, n) - } - } - this.cellsResized([a], [d]) - } - } finally { - this.model.endUpdate() - } - } -}; -mxGraph.prototype.getPreferredSizeForCell = function(a) { - var b = null; - if (null != a) { - var c = this.view.getState(a), - d = null != c ? c.style : this.getCellStyle(a); - if (null != d && !this.model.isEdge(a)) { - var e = d[mxConstants.STYLE_FONTSIZE] || mxConstants.DEFAULT_FONTSIZE, - f = 0, - b = 0; - if ((null != this.getImage(c) || null != d[mxConstants.STYLE_IMAGE]) && d[mxConstants.STYLE_SHAPE] == mxConstants.SHAPE_LABEL) d[mxConstants.STYLE_VERTICAL_ALIGN] == mxConstants.ALIGN_MIDDLE && - (f += parseFloat(d[mxConstants.STYLE_IMAGE_WIDTH]) || mxLabel.prototype.imageSize), - d[mxConstants.STYLE_ALIGN] != mxConstants.ALIGN_CENTER && (b += parseFloat(d[mxConstants.STYLE_IMAGE_HEIGHT]) || mxLabel.prototype.imageSize); - f += 2 * (d[mxConstants.STYLE_SPACING] || 0); - f += d[mxConstants.STYLE_SPACING_LEFT] || 0; - f += d[mxConstants.STYLE_SPACING_RIGHT] || 0; - b += 2 * (d[mxConstants.STYLE_SPACING] || 0); - b += d[mxConstants.STYLE_SPACING_TOP] || 0; - b += d[mxConstants.STYLE_SPACING_BOTTOM] || 0; - c = this.getFoldingImage(c); - null != c && (f += c.width + 8); - c = this.getLabel(a); - null != c && 0 < c.length ? (this.isHtmlLabel(a) || (c = c.replace(/\n/g, - "\x3cbr\x3e")), e = mxUtils.getSizeForString(c, e, d[mxConstants.STYLE_FONTFAMILY]), a = e.width + f, b = e.height + b, mxUtils.getValue(d, mxConstants.STYLE_HORIZONTAL, !0) || (d = b, - b = a, a = d), this.gridEnabled && (a = this.snap(a + this.gridSize / 2), b = this.snap(b + this.gridSize / 2)), b = new mxRectangle(0, 0, a, b)) : (d = 4 * this.gridSize, b = new mxRectangle( - 0, 0, d, d)) - } - } - return b -}; -mxGraph.prototype.handleGesture = function(a, b) { - if (0.2 < Math.abs(1 - b.scale)) { - var c = this.view.scale, - d = this.view.translate, - e = a.width * b.scale, - f = a.height * b.scale, - g = a.y - (f - a.height) / 2, - c = new mxRectangle(this.snap((a.x - (e - a.width) / 2) / c) - d.x, this.snap(g / c) - d.y, this.snap(e / c), this.snap(f / c)); - this.resizeCell(a.cell, c) - } -}; -mxGraph.prototype.resizeCell = function(a, b) { - return this.resizeCells([a], [b])[0] -}; -mxGraph.prototype.resizeCells = function(a, b) { - this.model.beginUpdate(); - try { - this.cellsResized(a, b), this.fireEvent(new mxEventObject(mxEvent.RESIZE_CELLS, "cells", a, "bounds", b)) - } finally { - this.model.endUpdate() - } - return a -}; -mxGraph.prototype.cellsResized = function(a, b) { - if (null != a && null != b && a.length == b.length) { - this.model.beginUpdate(); - try { - for (var c = 0; c < a.length; c++) { - var d = b[c], - e = this.model.getGeometry(a[c]); - if (null != e && (e.x != d.x || e.y != d.y || e.width != d.width || e.height != d.height)) { - e = e.clone(); - if (e.relative) { - var f = e.offset; - null != f && (f.x += d.x - e.x, f.y += d.y - e.y) - } else e.x = d.x, e.y = d.y; - e.width = d.width; - e.height = d.height; - !e.relative && (this.model.isVertex(a[c]) && !this.isAllowNegativeCoordinates()) && (e.x = Math.max(0, e.x), e.y = Math.max(0, - e.y)); - this.model.setGeometry(a[c], e); - this.isExtendParent(a[c]) && this.extendParent(a[c]) - } - } - this.resetEdgesOnResize && this.resetEdges(a); - this.fireEvent(new mxEventObject(mxEvent.CELLS_RESIZED, "cells", a, "bounds", b)) - } finally { - this.model.endUpdate() - } - } -}; -mxGraph.prototype.extendParent = function(a) { - if (null != a) { - var b = this.model.getParent(a), - c = this.model.getGeometry(b); - if (null != b && (null != c && !this.isCellCollapsed(b)) && (a = this.model.getGeometry(a), null != a && (c.width < a.x + a.width || c.height < a.y + a.height))) c = c.clone(), c.width = Math.max( - c.width, a.x + a.width), c.height = Math.max(c.height, a.y + a.height), this.cellsResized([b], [c]) - } -}; -mxGraph.prototype.importCells = function(a, b, c, d, e) { - return this.moveCells(a, b, c, !0, d, e) -}; -mxGraph.prototype.moveCells = function(a, b, c, d, e, f) { - b = null != b ? b : 0; - c = null != c ? c : 0; - d = null != d ? d : !1; - if (null != a && (0 != b || 0 != c || d || null != e)) { - this.model.beginUpdate(); - try { - d && (a = this.cloneCells(a, this.isCloneInvalidEdges()), null == e && (e = this.getDefaultParent())); - var g = this.isAllowNegativeCoordinates(); - null != e && this.setAllowNegativeCoordinates(!0); - this.cellsMoved(a, b, c, !d && this.isDisconnectOnMove() && this.isAllowDanglingEdges(), null == e); - this.setAllowNegativeCoordinates(g); - if (null != e) { - var h = this.model.getChildCount(e); - this.cellsAdded(a, e, h, null, null, !0) - } - this.fireEvent(new mxEventObject(mxEvent.MOVE_CELLS, "cells", a, "dx", b, "dy", c, "clone", d, "target", e, "event", f)) - } finally { - this.model.endUpdate() - } - } - return a -}; -mxGraph.prototype.cellsMoved = function(a, b, c, d, e) { - if (null != a && (0 != b || 0 != c)) { - this.model.beginUpdate(); - try { - d && this.disconnectGraph(a); - for (var f = 0; f < a.length; f++) this.translateCell(a[f], b, c), e && this.constrainChild(a[f]); - this.resetEdgesOnMove && this.resetEdges(a); - this.fireEvent(new mxEventObject(mxEvent.CELLS_MOVED, "cells", a, "dx", c, "dy", c, "disconnect", d)) - } finally { - this.model.endUpdate() - } - } -}; -mxGraph.prototype.translateCell = function(a, b, c) { - var d = this.model.getGeometry(a); - null != d && (d = d.clone(), d.translate(b, c), !d.relative && (this.model.isVertex(a) && !this.isAllowNegativeCoordinates()) && (d.x = Math.max(0, d.x), d.y = Math.max(0, d.y)), d.relative && ! - this.model.isEdge(a) && (null == d.offset ? d.offset = new mxPoint(b, c) : (d.offset.x += b, d.offset.y += c)), this.model.setGeometry(a, d)) -}; -mxGraph.prototype.getCellContainmentArea = function(a) { - if (null != a && !this.model.isEdge(a)) { - var b = this.model.getParent(a); - if (b == this.getDefaultParent() || b == this.getCurrentRoot()) return this.getMaximumGraphBounds(); - if (null != b && b != this.getDefaultParent()) { - var c = this.model.getGeometry(b); - if (null != c) { - var d = a = 0, - e = c.width, - c = c.height; - this.isSwimlane(b) && (b = this.getStartSize(b), a = b.width, e -= b.width, d = b.height, c -= b.height); - return new mxRectangle(a, d, e, c) - } - } - } - return null -}; -mxGraph.prototype.getMaximumGraphBounds = function() { - return this.maximumGraphBounds -}; -mxGraph.prototype.constrainChild = function(a) { - if (null != a) { - var b = this.model.getGeometry(a), - c = this.isConstrainChild(a) ? this.getCellContainmentArea(a) : this.getMaximumGraphBounds(); - if (null != b && null != c && !b.relative && (b.x < c.x || b.y < c.y || c.width < b.x + b.width || c.height < b.y + b.height)) a = this.getOverlap(a), 0 < c.width && (b.x = Math.min(b.x, c.x + - c.width - (1 - a) * b.width)), 0 < c.height && (b.y = Math.min(b.y, c.y + c.height - (1 - a) * b.height)), b.x = Math.max(b.x, c.x - b.width * a), b.y = Math.max(b.y, c.y - b.height * a) - } -}; -mxGraph.prototype.resetEdges = function(a) { - if (null != a) { - for (var b = {}, c = 0; c < a.length; c++) { - var d = mxCellPath.create(a[c]); - b[d] = a[c] - } - this.model.beginUpdate(); - try { - for (c = 0; c < a.length; c++) { - var e = this.model.getEdges(a[c]); - if (null != e) - for (d = 0; d < e.length; d++) { - var f = this.view.getState(e[d]), - g = null != f ? f.getVisibleTerminal(!0) : this.view.getVisibleTerminal(e[d], !0), - h = null != f ? f.getVisibleTerminal(!1) : this.view.getVisibleTerminal(e[d], !1), - k = mxCellPath.create(g), - l = mxCellPath.create(h); - (null == b[k] || null == b[l]) && this.resetEdge(e[d]) - } - this.resetEdges(this.model.getChildren(a[c])) - } - } finally { - this.model.endUpdate() - } - } -}; -mxGraph.prototype.resetEdge = function(a) { - var b = this.model.getGeometry(a); - null != b && (null != b.points && 0 < b.points.length) && (b = b.clone(), b.points = [], this.model.setGeometry(a, b)); - return a -}; -mxGraph.prototype.getAllConnectionConstraints = function(a, b) { - return null != a && null != a.shape && null != a.shape.stencil ? a.shape.stencil.constraints : null -}; -mxGraph.prototype.getConnectionConstraint = function(a, b, c) { - b = null; - var d = a.style[c ? mxConstants.STYLE_EXIT_X : mxConstants.STYLE_ENTRY_X]; - if (null != d) { - var e = a.style[c ? mxConstants.STYLE_EXIT_Y : mxConstants.STYLE_ENTRY_Y]; - null != e && (b = new mxPoint(parseFloat(d), parseFloat(e))) - } - d = !1; - null != b && (d = mxUtils.getValue(a.style, c ? mxConstants.STYLE_EXIT_PERIMETER : mxConstants.STYLE_ENTRY_PERIMETER, !0)); - return new mxConnectionConstraint(b, d) -}; -mxGraph.prototype.setConnectionConstraint = function(a, b, c, d) { - if (null != d) { - this.model.beginUpdate(); - try { - null == d || null == d.point ? (this.setCellStyles(c ? mxConstants.STYLE_EXIT_X : mxConstants.STYLE_ENTRY_X, null, [a]), this.setCellStyles(c ? mxConstants.STYLE_EXIT_Y : mxConstants.STYLE_ENTRY_Y, - null, [a]), this.setCellStyles(c ? mxConstants.STYLE_EXIT_PERIMETER : mxConstants.STYLE_ENTRY_PERIMETER, null, [a])) : null != d.point && (this.setCellStyles(c ? mxConstants.STYLE_EXIT_X : - mxConstants.STYLE_ENTRY_X, d.point.x, [a]), this.setCellStyles(c ? - mxConstants.STYLE_EXIT_Y : mxConstants.STYLE_ENTRY_Y, d.point.y, [a]), d.perimeter ? this.setCellStyles(c ? mxConstants.STYLE_EXIT_PERIMETER : mxConstants.STYLE_ENTRY_PERIMETER, null, [ - a - ]) : this.setCellStyles(c ? mxConstants.STYLE_EXIT_PERIMETER : mxConstants.STYLE_ENTRY_PERIMETER, "0", [a])) - } finally { - this.model.endUpdate() - } - } -}; -mxGraph.prototype.getConnectionPoint = function(a, b) { - var c = null; - if (null != a) { - var d = this.view.getPerimeterBounds(a), - e = new mxPoint(d.getCenterX(), d.getCenterY()), - f = a.style[mxConstants.STYLE_DIRECTION], - g = 0; - if (null != f && ("north" == f ? g += 270 : "west" == f ? g += 180 : "south" == f && (g += 90), "north" == f || "south" == f)) { - d.x += d.width / 2 - d.height / 2; - d.y += d.height / 2 - d.width / 2; - var h = d.width; - d.width = d.height; - d.height = h - } - if (null != b.point) { - var k = c = 1, - l = 0, - m = 0; - if (this.getModel().isVertex(a.cell)) { - var n = a.style[mxConstants.STYLE_FLIPH], - p = - a.style[mxConstants.STYLE_FLIPV]; - null != a.shape.stencil && (n = 1 == mxUtils.getValue(a.style, "stencilFlipH", 0) || n, p = 1 == mxUtils.getValue(a.style, "stencilFlipV", 0) || p); - if ("north" == f || "south" == f) h = n, n = p, p = h; - n && (c = -1, l = -d.width); - p && (k = -1, m = -d.height) - } - c = new mxPoint(d.x + b.point.x * d.width * c - l, d.y + b.point.y * d.height * k - m) - } - f = a.style[mxConstants.STYLE_ROTATION] || 0; - b.perimeter ? (0 != g && null != c && (h = d = 0, 90 == g ? h = 1 : 180 == g ? d = -1 : 270 == f && (h = -1), c = mxUtils.getRotatedPoint(c, d, h, e)), null != c && b.perimeter && (c = this.view - .getPerimeterPoint(a, - c, !1))) : f += g; - 0 != f && null != c && (g = mxUtils.toRadians(f), d = Math.cos(g), h = Math.sin(g), c = mxUtils.getRotatedPoint(c, d, h, e)) - } - return c -}; -mxGraph.prototype.connectCell = function(a, b, c, d) { - this.model.beginUpdate(); - try { - var e = this.model.getTerminal(a, c); - this.cellConnected(a, b, c, d); - this.fireEvent(new mxEventObject(mxEvent.CONNECT_CELL, "edge", a, "terminal", b, "source", c, "previous", e)) - } finally { - this.model.endUpdate() - } - return a -}; -mxGraph.prototype.cellConnected = function(a, b, c, d) { - if (null != a) { - this.model.beginUpdate(); - try { - var e = this.model.getTerminal(a, c); - this.setConnectionConstraint(a, b, c, d); - this.isPortsEnabled() && (d = null, this.isPort(b) && (d = b.getId(), b = this.getTerminalForPort(b, c)), this.setCellStyles(c ? mxConstants.STYLE_SOURCE_PORT : mxConstants.STYLE_TARGET_PORT, - d, [a])); - this.model.setTerminal(a, b, c); - this.resetEdgesOnConnect && this.resetEdge(a); - this.fireEvent(new mxEventObject(mxEvent.CELL_CONNECTED, "edge", a, "terminal", b, "source", - c, "previous", e)) - } finally { - this.model.endUpdate() - } - } -}; -mxGraph.prototype.disconnectGraph = function(a) { - if (null != a) { - this.model.beginUpdate(); - try { - for (var b = this.view.scale, c = this.view.translate, d = {}, e = 0; e < a.length; e++) { - var f = mxCellPath.create(a[e]); - d[f] = a[e] - } - for (e = 0; e < a.length; e++) - if (this.model.isEdge(a[e])) { - var g = this.model.getGeometry(a[e]); - if (null != g) { - var h = this.view.getState(a[e]), - k = this.view.getState(this.model.getParent(a[e])); - if (null != h && null != k) { - var g = g.clone(), - l = -k.origin.x, - m = -k.origin.y, - n = h.absolutePoints, - p = this.model.getTerminal(a[e], !0); - if (null != - p && this.isCellDisconnectable(a[e], p, !0)) { - for (var q = mxCellPath.create(p); null != p && null == d[q];) p = this.model.getParent(p), q = mxCellPath.create(p); - null == p && (g.setTerminalPoint(new mxPoint(n[0].x / b - c.x + l, n[0].y / b - c.y + m), !0), this.model.setTerminal(a[e], null, !0)) - } - var s = this.model.getTerminal(a[e], !1); - if (null != s && this.isCellDisconnectable(a[e], s, !1)) { - for (var r = mxCellPath.create(s); null != s && null == d[r];) s = this.model.getParent(s), r = mxCellPath.create(s); - if (null == s) { - var t = n.length - 1; - g.setTerminalPoint(new mxPoint(n[t].x / - b - c.x + l, n[t].y / b - c.y + m), !1); - this.model.setTerminal(a[e], null, !1) - } - } - this.model.setGeometry(a[e], g) - } - } - } - } finally { - this.model.endUpdate() - } - } -}; -mxGraph.prototype.getCurrentRoot = function() { - return this.view.currentRoot -}; -mxGraph.prototype.getTranslateForRoot = function(a) { - return null -}; -mxGraph.prototype.isPort = function(a) { - return !1 -}; -mxGraph.prototype.getTerminalForPort = function(a, b) { - return this.model.getParent(a) -}; -mxGraph.prototype.getChildOffsetForCell = function(a) { - return null -}; -mxGraph.prototype.enterGroup = function(a) { - a = a || this.getSelectionCell(); - null != a && this.isValidRoot(a) && (this.view.setCurrentRoot(a), this.clearSelection()) -}; -mxGraph.prototype.exitGroup = function() { - var a = this.model.getRoot(), - b = this.getCurrentRoot(); - if (null != b) { - for (var c = this.model.getParent(b); c != a && !this.isValidRoot(c) && this.model.getParent(c) != a;) c = this.model.getParent(c); - c == a || this.model.getParent(c) == a ? this.view.setCurrentRoot(null) : this.view.setCurrentRoot(c); - null != this.view.getState(b) && this.setSelectionCell(b) - } -}; -mxGraph.prototype.home = function() { - var a = this.getCurrentRoot(); - null != a && (this.view.setCurrentRoot(null), null != this.view.getState(a) && this.setSelectionCell(a)) -}; -mxGraph.prototype.isValidRoot = function(a) { - return null != a -}; -mxGraph.prototype.getGraphBounds = function() { - return this.view.getGraphBounds() -}; -mxGraph.prototype.getCellBounds = function(a, b, c) { - var d = [a]; - b && (d = d.concat(this.model.getEdges(a))); - d = this.view.getBounds(d); - if (c) { - c = this.model.getChildCount(a); - for (var e = 0; e < c; e++) { - var f = this.getCellBounds(this.model.getChildAt(a, e), b, !0); - null != d ? d.add(f) : d = f - } - } - return d -}; -mxGraph.prototype.getBoundingBoxFromGeometry = function(a, b) { - b = null != b ? b : !1; - var c = null; - if (null != a) - for (var d = 0; d < a.length; d++) - if (b || this.model.isVertex(a[d])) { - var e = this.getCellGeometry(a[d]); - if (null != e) { - var f = e.points; - if (null != f && 0 < f.length) { - for (var g = new mxRectangle(f[0].x, f[0].y, 0, 0), h = function(a) { - null != a && g.add(new mxRectangle(a.x, a.y, 0, 0)) - }, k = 1; k < f.length; k++) h(f[k]); - h(e.getTerminalPoint(!0)); - h(e.getTerminalPoint(!1)) - } - null == c ? c = new mxRectangle(e.x, e.y, e.width, e.height) : c.add(e) - } - } - return c -}; -mxGraph.prototype.refresh = function(a) { - this.view.clear(a, null == a); - this.view.validate(); - this.sizeDidChange(); - this.fireEvent(new mxEventObject(mxEvent.REFRESH)) -}; -mxGraph.prototype.snap = function(a) { - this.gridEnabled && (a = Math.round(a / this.gridSize) * this.gridSize); - return a -}; -mxGraph.prototype.panGraph = function(a, b) { - if (this.useScrollbarsForPanning && mxUtils.hasScrollbars(this.container)) this.container.scrollLeft = -a, this.container.scrollTop = -b; - else { - var c = this.view.getCanvas(); - if (this.dialect == mxConstants.DIALECT_SVG) - if (0 == a && 0 == b) { - if (mxClient.IS_IE ? c.setAttribute("transform", "translate(" + a + "," + b + ")") : c.removeAttribute("transform"), null != this.shiftPreview1) { - for (var d = this.shiftPreview1.firstChild; null != d;) { - var e = d.nextSibling; - this.container.appendChild(d); - d = e - } - this.shiftPreview1.parentNode.removeChild(this.shiftPreview1); - this.shiftPreview1 = null; - this.container.appendChild(c.parentNode); - for (d = this.shiftPreview2.firstChild; null != d;) e = d.nextSibling, this.container.appendChild(d), d = e; - this.shiftPreview2.parentNode.removeChild(this.shiftPreview2); - this.shiftPreview2 = null - } - } else { - c.setAttribute("transform", "translate(" + a + "," + b + ")"); - if (null == this.shiftPreview1) { - this.shiftPreview1 = document.createElement("div"); - this.shiftPreview1.style.position = "absolute"; - this.shiftPreview1.style.overflow = "visible"; - this.shiftPreview2 = document.createElement("div"); - this.shiftPreview2.style.position = "absolute"; - this.shiftPreview2.style.overflow = "visible"; - for (var f = this.shiftPreview1, d = this.container.firstChild; null != d;) e = d.nextSibling, d != c.parentNode ? f.appendChild(d) : f = this.shiftPreview2, d = e; - this.container.insertBefore(this.shiftPreview1, c.parentNode); - this.container.appendChild(this.shiftPreview2) - } - this.shiftPreview1.style.left = a + "px"; - this.shiftPreview1.style.top = b + "px"; - this.shiftPreview2.style.left = a + "px"; - this.shiftPreview2.style.top = b + "px" - } else c.style.left = - a + "px", c.style.top = b + "px"; - this.panDx = a; - this.panDy = b; - this.fireEvent(new mxEventObject(mxEvent.PAN)) - } -}; -mxGraph.prototype.zoomIn = function() { - this.zoom(this.zoomFactor) -}; -mxGraph.prototype.zoomOut = function() { - this.zoom(1 / this.zoomFactor) -}; -mxGraph.prototype.zoomActual = function() { - 1 == this.view.scale ? this.view.setTranslate(0, 0) : (this.view.translate.x = 0, this.view.translate.y = 0, this.view.setScale(1)) -}; -mxGraph.prototype.zoomTo = function(a, b) { - this.zoom(a / this.view.scale, b) -}; -mxGraph.prototype.zoom = function(a, b) { - b = null != b ? b : this.centerZoom; - var c = this.view.scale * a, - d = this.view.getState(this.getSelectionCell()); - if (this.keepSelectionVisibleOnZoom && null != d) d = new mxRectangle(d.x * a, d.y * a, d.width * a, d.height * a), this.view.scale = c, this.scrollRectToVisible(d) || (this.view.revalidate(), - this.view.setScale(c)); - else if (b && !mxUtils.hasScrollbars(this.container)) { - var d = this.container.offsetWidth, - e = this.container.offsetHeight; - if (1 < a) var f = (a - 1) / (2 * c), - d = d * -f, - e = e * -f; - else f = (1 / a - 1) / (2 * this.view.scale), - d *= f, e *= f; - this.view.scaleAndTranslate(c, this.view.translate.x + d, this.view.translate.y + e) - } else this.view.setScale(c), mxUtils.hasScrollbars(this.container) && (e = d = 0, b && (d = this.container.offsetWidth * (a - 1) / 2, e = this.container.offsetHeight * (a - 1) / 2), this.container - .scrollLeft = Math.round(this.container.scrollLeft * a + d), this.container.scrollTop = Math.round(this.container.scrollTop * a + e)) -}; -mxGraph.prototype.zoomToRect = function(a) { - var b = this.container.clientWidth / a.width / (this.container.clientHeight / a.height); - a.x = Math.max(0, a.x); - a.y = Math.max(0, a.y); - var c = Math.min(this.container.scrollWidth, a.x + a.width), - d = Math.min(this.container.scrollHeight, a.y + a.height); - a.width = c - a.x; - a.height = d - a.y; - 1 > b ? (b = a.height / b, c = (b - a.height) / 2, a.height = b, b = Math.min(a.y, c), a.y -= b, d = Math.min(this.container.scrollHeight, a.y + a.height), a.height = d - a.y) : (b *= a.width, c = - (b - a.width) / 2, a.width = b, b = Math.min(a.x, c), a.x -= b, - c = Math.min(this.container.scrollWidth, a.x + a.width), a.width = c - a.x); - b = this.container.clientWidth / a.width; - c = this.view.scale * b; - mxUtils.hasScrollbars(this.container) ? (this.view.setScale(c), this.container.scrollLeft = Math.round(a.x * b), this.container.scrollTop = Math.round(a.y * b)) : this.view.scaleAndTranslate(c, - this.view.translate.x - a.x / this.view.scale, this.view.translate.y - a.y / this.view.scale) -}; -mxGraph.prototype.fit = function(a, b) { - if (null != this.container) { - a = null != a ? a : 0; - b = null != b ? b : !1; - var c = this.container.clientWidth, - d = this.container.clientHeight, - e = this.view.getGraphBounds(); - b && (null != e.x && null != e.y) && (e.width += e.x, e.height += e.y, e.x = 0, e.y = 0); - var f = this.view.scale, - g = e.width / f, - h = e.height / f; - null != this.backgroundImage && (g = Math.max(g, this.backgroundImage.width - e.x / f), h = Math.max(h, this.backgroundImage.height - e.y / f)); - var k = b ? a : 2 * a, - c = Math.floor(100 * Math.min(c / (g + k), d / (h + k))) / 100; - null != this.minFitScale && - (c = Math.max(c, this.minFitScale)); - null != this.maxFitScale && (c = Math.min(c, this.maxFitScale)); - b ? this.view.scale != c && this.view.setScale(c) : mxUtils.hasScrollbars(this.container) ? (this.view.setScale(c), null != e.x && (this.container.scrollLeft = Math.round(e.x / f) * c - a - - Math.max(0, (this.container.clientWidth - g * c) / 2)), null != e.y && (this.container.scrollTop = Math.round(e.y / f) * c - a - Math.max(0, (this.container.clientHeight - h * c) / 2))) : - this.view.scaleAndTranslate(c, null != e.x ? Math.floor(this.view.translate.x - e.x / f + a + 1) : a, null != - e.y ? Math.floor(this.view.translate.y - e.y / f + a + 1) : a) - } - return this.view.scale -}; -mxGraph.prototype.scrollCellToVisible = function(a, b) { - var c = -this.view.translate.x, - d = -this.view.translate.y, - e = this.view.getState(a); - null != e && (c = new mxRectangle(c + e.x, d + e.y, e.width, e.height), b && null != this.container && (d = this.container.clientWidth, e = this.container.clientHeight, c.x = c.getCenterX() - d / - 2, c.width = d, c.y = c.getCenterY() - e / 2, c.height = e), this.scrollRectToVisible(c) && this.view.setTranslate(this.view.translate.x, this.view.translate.y)) -}; -mxGraph.prototype.scrollRectToVisible = function(a) { - var b = !1; - if (null != a) { - var c = this.container.offsetWidth, - d = this.container.offsetHeight, - e = Math.min(c, a.width), - f = Math.min(d, a.height); - if (mxUtils.hasScrollbars(this.container)) { - c = this.container; - a.x += this.view.translate.x; - a.y += this.view.translate.y; - var g = c.scrollLeft - a.x, - d = Math.max(g - c.scrollLeft, 0); - 0 < g ? c.scrollLeft -= g + 2 : (g = a.x + e - c.scrollLeft - c.clientWidth, 0 < g && (c.scrollLeft += g + 2)); - e = c.scrollTop - a.y; - g = Math.max(0, e - c.scrollTop); - 0 < e ? c.scrollTop -= e + 2 : (e = a.y + - f - c.scrollTop - c.clientHeight, 0 < e && (c.scrollTop += e + 2)); - !this.useScrollbarsForPanning && (0 != d || 0 != g) && this.view.setTranslate(d, g) - } else { - var g = -this.view.translate.x, - h = -this.view.translate.y, - k = this.view.scale; - a.x + e > g + c && (this.view.translate.x -= (a.x + e - c - g) / k, b = !0); - a.y + f > h + d && (this.view.translate.y -= (a.y + f - d - h) / k, b = !0); - a.x < g && (this.view.translate.x += (g - a.x) / k, b = !0); - a.y < h && (this.view.translate.y += (h - a.y) / k, b = !0); - b && (this.view.refresh(), null != this.selectionCellsHandler && this.selectionCellsHandler.refresh()) - } - } - return b -}; -mxGraph.prototype.getCellGeometry = function(a) { - return this.model.getGeometry(a) -}; -mxGraph.prototype.isCellVisible = function(a) { - return this.model.isVisible(a) -}; -mxGraph.prototype.isCellCollapsed = function(a) { - return this.model.isCollapsed(a) -}; -mxGraph.prototype.isCellConnectable = function(a) { - return this.model.isConnectable(a) -}; -mxGraph.prototype.isOrthogonal = function(a) { - var b = a.style[mxConstants.STYLE_ORTHOGONAL]; - if (null != b) return b; - a = this.view.getEdgeStyle(a); - return a == mxEdgeStyle.SegmentConnector || a == mxEdgeStyle.ElbowConnector || a == mxEdgeStyle.SideToSide || a == mxEdgeStyle.TopToBottom || a == mxEdgeStyle.EntityRelation || a == mxEdgeStyle.OrthConnector -}; -mxGraph.prototype.isLoop = function(a) { - var b = a.getVisibleTerminalState(!0); - a = a.getVisibleTerminalState(!1); - return null != b && b == a -}; -mxGraph.prototype.isCloneEvent = function(a) { - return mxEvent.isControlDown(a) -}; -mxGraph.prototype.isToggleEvent = function(a) { - return mxClient.IS_MAC ? mxEvent.isMetaDown(a) : mxEvent.isControlDown(a) -}; -mxGraph.prototype.isGridEnabledEvent = function(a) { - return null != a && !mxEvent.isAltDown(a) -}; -mxGraph.prototype.isConstrainedEvent = function(a) { - return mxEvent.isShiftDown(a) -}; -mxGraph.prototype.isForceMarqueeEvent = function(a) { - return mxEvent.isAltDown(a) -}; -mxGraph.prototype.validationAlert = function(a) { - mxUtils.alert(a) -}; -mxGraph.prototype.isEdgeValid = function(a, b, c) { - return null == this.getEdgeValidationError(a, b, c) -}; -mxGraph.prototype.getEdgeValidationError = function(a, b, c) { - if (null != a && !this.isAllowDanglingEdges() && (null == b || null == c)) return ""; - if (null != a && null == this.model.getTerminal(a, !0) && null == this.model.getTerminal(a, !1)) return null; - if (!this.allowLoops && b == c && null != b || !this.isValidConnection(b, c)) return ""; - if (null != b && null != c) { - var d = ""; - if (!this.multigraph) { - var e = this.model.getEdgesBetween(b, c, !0); - if (1 < e.length || 1 == e.length && e[0] != a) d += (mxResources.get(this.alreadyConnectedResource) || this.alreadyConnectedResource) + - "\n" - } - var e = this.model.getDirectedEdgeCount(b, !0, a), - f = this.model.getDirectedEdgeCount(c, !1, a); - if (null != this.multiplicities) - for (var g = 0; g < this.multiplicities.length; g++) { - var h = this.multiplicities[g].check(this, a, b, c, e, f); - null != h && (d += h) - } - h = this.validateEdge(a, b, c); - null != h && (d += h); - return 0 < d.length ? d : null - } - return this.allowDanglingEdges ? null : "" -}; -mxGraph.prototype.validateEdge = function(a, b, c) { - return null -}; -mxGraph.prototype.validateGraph = function(a, b) { - a = null != a ? a : this.model.getRoot(); - b = null != b ? b : {}; - for (var c = !0, d = this.model.getChildCount(a), e = 0; e < d; e++) { - var f = this.model.getChildAt(a, e), - g = b; - this.isValidRoot(f) && (g = {}); - g = this.validateGraph(f, g); - null != g ? this.setCellWarning(f, g.replace(/\n/g, "\x3cbr\x3e")) : this.setCellWarning(f, null); - c = c && null == g - } - d = ""; - this.isCellCollapsed(a) && !c && (d += (mxResources.get(this.containsValidationErrorsResource) || this.containsValidationErrorsResource) + "\n"); - d = this.model.isEdge(a) ? - d + (this.getEdgeValidationError(a, this.model.getTerminal(a, !0), this.model.getTerminal(a, !1)) || "") : d + (this.getCellValidationError(a) || ""); - e = this.validateCell(a, b); - null != e && (d += e); - null == this.model.getParent(a) && this.view.validate(); - return 0 < d.length || !c ? d : null -}; -mxGraph.prototype.getCellValidationError = function(a) { - var b = this.model.getDirectedEdgeCount(a, !0), - c = this.model.getDirectedEdgeCount(a, !1); - a = this.model.getValue(a); - var d = ""; - if (null != this.multiplicities) - for (var e = 0; e < this.multiplicities.length; e++) { - var f = this.multiplicities[e]; - if (f.source && mxUtils.isNode(a, f.type, f.attr, f.value) && (0 == f.max && 0 < b || 1 == f.min && 0 == b || 1 == f.max && 1 < b)) d += f.countError + "\n"; - else if (!f.source && mxUtils.isNode(a, f.type, f.attr, f.value) && (0 == f.max && 0 < c || 1 == f.min && 0 == c || 1 == f.max && 1 < - c)) d += f.countError + "\n" - } - return 0 < d.length ? d : null -}; -mxGraph.prototype.validateCell = function(a, b) { - return null -}; -mxGraph.prototype.getBackgroundImage = function() { - return this.backgroundImage -}; -mxGraph.prototype.setBackgroundImage = function(a) { - this.backgroundImage = a -}; -mxGraph.prototype.getFoldingImage = function(a) { - if (null != a && this.foldingEnabled && !this.getModel().isEdge(a.cell)) { - var b = this.isCellCollapsed(a.cell); - if (this.isCellFoldable(a.cell, !b)) return b ? this.collapsedImage : this.expandedImage - } - return null -}; -mxGraph.prototype.convertValueToString = function(a) { - a = this.model.getValue(a); - if (null != a) { - if (mxUtils.isNode(a)) return a.nodeName; - if ("function" == typeof a.toString) return a.toString() - } - return "" -}; -mxGraph.prototype.getLabel = function(a) { - var b = ""; - if (this.labelsVisible && null != a) { - var c = this.view.getState(a), - c = null != c ? c.style : this.getCellStyle(a); - mxUtils.getValue(c, mxConstants.STYLE_NOLABEL, !1) || (b = this.convertValueToString(a)) - } - return b -}; -mxGraph.prototype.isHtmlLabel = function(a) { - return this.isHtmlLabels() -}; -mxGraph.prototype.isHtmlLabels = function() { - return this.htmlLabels -}; -mxGraph.prototype.setHtmlLabels = function(a) { - this.htmlLabels = a -}; -mxGraph.prototype.isWrapping = function(a) { - var b = this.view.getState(a); - a = null != b ? b.style : this.getCellStyle(a); - return null != a ? "wrap" == a[mxConstants.STYLE_WHITE_SPACE] : !1 -}; -mxGraph.prototype.isLabelClipped = function(a) { - var b = this.view.getState(a); - a = null != b ? b.style : this.getCellStyle(a); - return null != a ? "hidden" == a[mxConstants.STYLE_OVERFLOW] : !1 -}; -mxGraph.prototype.getTooltip = function(a, b, c, d) { - var e = null; - if (null != a) { - if (null != a.control && (b == a.control.node || b.parentNode == a.control.node)) e = this.collapseExpandResource, e = mxResources.get(e) || e; - null == e && null != a.overlays && a.overlays.visit(function(a, c) { - if (null == e && (b == c.node || b.parentNode == c.node)) e = c.overlay.toString() - }); - null == e && (c = this.selectionCellsHandler.getHandler(a.cell), null != c && "function" == typeof c.getTooltipForNode && (e = c.getTooltipForNode(b))); - null == e && (e = this.getTooltipForCell(a.cell)) - } - return e -}; -mxGraph.prototype.getTooltipForCell = function(a) { - var b = null; - return b = null != a && null != a.getTooltip ? a.getTooltip() : this.convertValueToString(a) -}; -mxGraph.prototype.getCursorForCell = function(a) { - return null -}; -mxGraph.prototype.getStartSize = function(a) { - var b = new mxRectangle, - c = this.view.getState(a); - a = null != c ? c.style : this.getCellStyle(a); - null != a && (c = parseInt(mxUtils.getValue(a, mxConstants.STYLE_STARTSIZE, mxConstants.DEFAULT_STARTSIZE)), mxUtils.getValue(a, mxConstants.STYLE_HORIZONTAL, !0) ? b.height = c : b.width = c); - return b -}; -mxGraph.prototype.getImage = function(a) { - return null != a && null != a.style ? a.style[mxConstants.STYLE_IMAGE] : null -}; -mxGraph.prototype.getVerticalAlign = function(a) { - return null != a && null != a.style ? a.style[mxConstants.STYLE_VERTICAL_ALIGN] || mxConstants.ALIGN_MIDDLE : null -}; -mxGraph.prototype.getIndicatorColor = function(a) { - return null != a && null != a.style ? a.style[mxConstants.STYLE_INDICATOR_COLOR] : null -}; -mxGraph.prototype.getIndicatorGradientColor = function(a) { - return null != a && null != a.style ? a.style[mxConstants.STYLE_INDICATOR_GRADIENTCOLOR] : null -}; -mxGraph.prototype.getIndicatorShape = function(a) { - return null != a && null != a.style ? a.style[mxConstants.STYLE_INDICATOR_SHAPE] : null -}; -mxGraph.prototype.getIndicatorImage = function(a) { - return null != a && null != a.style ? a.style[mxConstants.STYLE_INDICATOR_IMAGE] : null -}; -mxGraph.prototype.getBorder = function() { - return this.border -}; -mxGraph.prototype.setBorder = function(a) { - this.border = a -}; -mxGraph.prototype.isSwimlane = function(a) { - if (null != a && this.model.getParent(a) != this.model.getRoot()) { - var b = this.view.getState(a), - b = null != b ? b.style : this.getCellStyle(a); - if (null != b && !this.model.isEdge(a)) return b[mxConstants.STYLE_SHAPE] == mxConstants.SHAPE_SWIMLANE - } - return !1 -}; -mxGraph.prototype.isResizeContainer = function() { - return this.resizeContainer -}; -mxGraph.prototype.setResizeContainer = function(a) { - this.resizeContainer = a -}; -mxGraph.prototype.isEnabled = function() { - return this.enabled -}; -mxGraph.prototype.setEnabled = function(a) { - this.enabled = a -}; -mxGraph.prototype.isEscapeEnabled = function() { - return this.escapeEnabled -}; -mxGraph.prototype.setEscapeEnabled = function(a) { - this.escapeEnabled = a -}; -mxGraph.prototype.isInvokesStopCellEditing = function() { - return this.invokesStopCellEditing -}; -mxGraph.prototype.setInvokesStopCellEditing = function(a) { - this.invokesStopCellEditing = a -}; -mxGraph.prototype.isEnterStopsCellEditing = function() { - return this.enterStopsCellEditing -}; -mxGraph.prototype.setEnterStopsCellEditing = function(a) { - this.enterStopsCellEditing = a -}; -mxGraph.prototype.isCellLocked = function(a) { - var b = this.model.getGeometry(a); - return this.isCellsLocked() || null != b && this.model.isVertex(a) && b.relative -}; -mxGraph.prototype.isCellsLocked = function() { - return this.cellsLocked -}; -mxGraph.prototype.setCellsLocked = function(a) { - this.cellsLocked = a -}; -mxGraph.prototype.getCloneableCells = function(a) { - return this.model.filterCells(a, mxUtils.bind(this, function(a) { - return this.isCellCloneable(a) - })) -}; -mxGraph.prototype.isCellCloneable = function(a) { - var b = this.view.getState(a); - a = null != b ? b.style : this.getCellStyle(a); - return this.isCellsCloneable() && 0 != a[mxConstants.STYLE_CLONEABLE] -}; -mxGraph.prototype.isCellsCloneable = function() { - return this.cellsCloneable -}; -mxGraph.prototype.setCellsCloneable = function(a) { - this.cellsCloneable = a -}; -mxGraph.prototype.getExportableCells = function(a) { - return this.model.filterCells(a, mxUtils.bind(this, function(a) { - return this.canExportCell(a) - })) -}; -mxGraph.prototype.canExportCell = function(a) { - return this.exportEnabled -}; -mxGraph.prototype.getImportableCells = function(a) { - return this.model.filterCells(a, mxUtils.bind(this, function(a) { - return this.canImportCell(a) - })) -}; -mxGraph.prototype.canImportCell = function(a) { - return this.importEnabled -}; -mxGraph.prototype.isCellSelectable = function(a) { - return this.isCellsSelectable() -}; -mxGraph.prototype.isCellsSelectable = function() { - return this.cellsSelectable -}; -mxGraph.prototype.setCellsSelectable = function(a) { - this.cellsSelectable = a -}; -mxGraph.prototype.getDeletableCells = function(a) { - return this.model.filterCells(a, mxUtils.bind(this, function(a) { - return this.isCellDeletable(a) - })) -}; -mxGraph.prototype.isCellDeletable = function(a) { - var b = this.view.getState(a); - a = null != b ? b.style : this.getCellStyle(a); - return this.isCellsDeletable() && 0 != a[mxConstants.STYLE_DELETABLE] -}; -mxGraph.prototype.isCellsDeletable = function() { - return this.cellsDeletable -}; -mxGraph.prototype.setCellsDeletable = function(a) { - this.cellsDeletable = a -}; -mxGraph.prototype.isLabelMovable = function(a) { - return !this.isCellLocked(a) && (this.model.isEdge(a) && this.edgeLabelsMovable || this.model.isVertex(a) && this.vertexLabelsMovable) -}; -mxGraph.prototype.getMovableCells = function(a) { - return this.model.filterCells(a, mxUtils.bind(this, function(a) { - return this.isCellMovable(a) - })) -}; -mxGraph.prototype.isCellMovable = function(a) { - var b = this.view.getState(a), - b = null != b ? b.style : this.getCellStyle(a); - return this.isCellsMovable() && !this.isCellLocked(a) && 0 != b[mxConstants.STYLE_MOVABLE] -}; -mxGraph.prototype.isCellsMovable = function() { - return this.cellsMovable -}; -mxGraph.prototype.setCellsMovable = function(a) { - this.cellsMovable = a -}; -mxGraph.prototype.isGridEnabled = function() { - return this.gridEnabled -}; -mxGraph.prototype.setGridEnabled = function(a) { - this.gridEnabled = a -}; -mxGraph.prototype.isPortsEnabled = function() { - return this.portsEnabled -}; -mxGraph.prototype.setPortsEnabled = function(a) { - this.portsEnabled = a -}; -mxGraph.prototype.getGridSize = function() { - return this.gridSize -}; -mxGraph.prototype.setGridSize = function(a) { - this.gridSize = a -}; -mxGraph.prototype.getTolerance = function() { - return this.tolerance -}; -mxGraph.prototype.setTolerance = function(a) { - this.tolerance = a -}; -mxGraph.prototype.isVertexLabelsMovable = function() { - return this.vertexLabelsMovable -}; -mxGraph.prototype.setVertexLabelsMovable = function(a) { - this.vertexLabelsMovable = a -}; -mxGraph.prototype.isEdgeLabelsMovable = function() { - return this.edgeLabelsMovable -}; -mxGraph.prototype.setEdgeLabelsMovable = function(a) { - this.edgeLabelsMovable = a -}; -mxGraph.prototype.isSwimlaneNesting = function() { - return this.swimlaneNesting -}; -mxGraph.prototype.setSwimlaneNesting = function(a) { - this.swimlaneNesting = a -}; -mxGraph.prototype.isSwimlaneSelectionEnabled = function() { - return this.swimlaneSelectionEnabled -}; -mxGraph.prototype.setSwimlaneSelectionEnabled = function(a) { - this.swimlaneSelectionEnabled = a -}; -mxGraph.prototype.isMultigraph = function() { - return this.multigraph -}; -mxGraph.prototype.setMultigraph = function(a) { - this.multigraph = a -}; -mxGraph.prototype.isAllowLoops = function() { - return this.allowLoops -}; -mxGraph.prototype.setAllowDanglingEdges = function(a) { - this.allowDanglingEdges = a -}; -mxGraph.prototype.isAllowDanglingEdges = function() { - return this.allowDanglingEdges -}; -mxGraph.prototype.setConnectableEdges = function(a) { - this.connectableEdges = a -}; -mxGraph.prototype.isConnectableEdges = function() { - return this.connectableEdges -}; -mxGraph.prototype.setCloneInvalidEdges = function(a) { - this.cloneInvalidEdges = a -}; -mxGraph.prototype.isCloneInvalidEdges = function() { - return this.cloneInvalidEdges -}; -mxGraph.prototype.setAllowLoops = function(a) { - this.allowLoops = a -}; -mxGraph.prototype.isDisconnectOnMove = function() { - return this.disconnectOnMove -}; -mxGraph.prototype.setDisconnectOnMove = function(a) { - this.disconnectOnMove = a -}; -mxGraph.prototype.isDropEnabled = function() { - return this.dropEnabled -}; -mxGraph.prototype.setDropEnabled = function(a) { - this.dropEnabled = a -}; -mxGraph.prototype.isSplitEnabled = function() { - return this.splitEnabled -}; -mxGraph.prototype.setSplitEnabled = function(a) { - this.splitEnabled = a -}; -mxGraph.prototype.isCellResizable = function(a) { - var b = this.view.getState(a), - b = null != b ? b.style : this.getCellStyle(a); - return this.isCellsResizable() && !this.isCellLocked(a) && 0 != b[mxConstants.STYLE_RESIZABLE] -}; -mxGraph.prototype.isCellsResizable = function() { - return this.cellsResizable -}; -mxGraph.prototype.setCellsResizable = function(a) { - this.cellsResizable = a -}; -mxGraph.prototype.isTerminalPointMovable = function(a, b) { - return !0 -}; -mxGraph.prototype.isCellBendable = function(a) { - var b = this.view.getState(a), - b = null != b ? b.style : this.getCellStyle(a); - return this.isCellsBendable() && !this.isCellLocked(a) && 0 != b[mxConstants.STYLE_BENDABLE] -}; -mxGraph.prototype.isCellsBendable = function() { - return this.cellsBendable -}; -mxGraph.prototype.setCellsBendable = function(a) { - this.cellsBendable = a -}; -mxGraph.prototype.isCellEditable = function(a) { - var b = this.view.getState(a), - b = null != b ? b.style : this.getCellStyle(a); - return this.isCellsEditable() && !this.isCellLocked(a) && 0 != b[mxConstants.STYLE_EDITABLE] -}; -mxGraph.prototype.isCellsEditable = function() { - return this.cellsEditable -}; -mxGraph.prototype.setCellsEditable = function(a) { - this.cellsEditable = a -}; -mxGraph.prototype.isCellDisconnectable = function(a, b, c) { - return this.isCellsDisconnectable() && !this.isCellLocked(a) -}; -mxGraph.prototype.isCellsDisconnectable = function() { - return this.cellsDisconnectable -}; -mxGraph.prototype.setCellsDisconnectable = function(a) { - this.cellsDisconnectable = a -}; -mxGraph.prototype.isValidSource = function(a) { - return null == a && this.allowDanglingEdges || null != a && (!this.model.isEdge(a) || this.connectableEdges) && this.isCellConnectable(a) -}; -mxGraph.prototype.isValidTarget = function(a) { - return this.isValidSource(a) -}; -mxGraph.prototype.isValidConnection = function(a, b) { - return this.isValidSource(a) && this.isValidTarget(b) -}; -mxGraph.prototype.setConnectable = function(a) { - this.connectionHandler.setEnabled(a) -}; -mxGraph.prototype.isConnectable = function(a) { - return this.connectionHandler.isEnabled() -}; -mxGraph.prototype.setTooltips = function(a) { - this.tooltipHandler.setEnabled(a) -}; -mxGraph.prototype.setPanning = function(a) { - this.panningHandler.panningEnabled = a -}; -mxGraph.prototype.isEditing = function(a) { - if (null != this.cellEditor) { - var b = this.cellEditor.getEditingCell(); - return null == a ? null != b : a == b - } - return !1 -}; -mxGraph.prototype.isAutoSizeCell = function(a) { - var b = this.view.getState(a); - a = null != b ? b.style : this.getCellStyle(a); - return this.isAutoSizeCells() || 1 == a[mxConstants.STYLE_AUTOSIZE] -}; -mxGraph.prototype.isAutoSizeCells = function() { - return this.autoSizeCells -}; -mxGraph.prototype.setAutoSizeCells = function(a) { - this.autoSizeCells = a -}; -mxGraph.prototype.isExtendParent = function(a) { - return !this.getModel().isEdge(a) && this.isExtendParents() -}; -mxGraph.prototype.isExtendParents = function() { - return this.extendParents -}; -mxGraph.prototype.setExtendParents = function(a) { - this.extendParents = a -}; -mxGraph.prototype.isExtendParentsOnAdd = function() { - return this.extendParentsOnAdd -}; -mxGraph.prototype.setExtendParentsOnAdd = function(a) { - this.extendParentsOnAdd = a -}; -mxGraph.prototype.isConstrainChild = function(a) { - return this.isConstrainChildren() && !this.getModel().isEdge(this.getModel().getParent(a)) -}; -mxGraph.prototype.isConstrainChildren = function() { - return this.constrainChildren -}; -mxGraph.prototype.setConstrainChildren = function(a) { - this.constrainChildren = a -}; -mxGraph.prototype.isAllowNegativeCoordinates = function() { - return this.allowNegativeCoordinates -}; -mxGraph.prototype.setAllowNegativeCoordinates = function(a) { - this.allowNegativeCoordinates = a -}; -mxGraph.prototype.getOverlap = function(a) { - return this.isAllowOverlapParent(a) ? this.defaultOverlap : 0 -}; -mxGraph.prototype.isAllowOverlapParent = function(a) { - return !1 -}; -mxGraph.prototype.getFoldableCells = function(a, b) { - return this.model.filterCells(a, mxUtils.bind(this, function(a) { - return this.isCellFoldable(a, b) - })) -}; -mxGraph.prototype.isCellFoldable = function(a, b) { - var c = this.view.getState(a), - c = null != c ? c.style : this.getCellStyle(a); - return 0 < this.model.getChildCount(a) && 0 != c[mxConstants.STYLE_FOLDABLE] -}; -mxGraph.prototype.isValidDropTarget = function(a, b, c) { - return null != a && (this.isSplitEnabled() && this.isSplitTarget(a, b, c) || !this.model.isEdge(a) && (this.isSwimlane(a) || 0 < this.model.getChildCount(a) && !this.isCellCollapsed(a))) -}; -mxGraph.prototype.isSplitTarget = function(a, b, c) { - return this.model.isEdge(a) && null != b && 1 == b.length && this.isCellConnectable(b[0]) && null == this.getEdgeValidationError(a, this.model.getTerminal(a, !0), b[0]) ? (c = this.model.getTerminal( - a, !0), a = this.model.getTerminal(a, !1), !this.model.isAncestor(b[0], c) && !this.model.isAncestor(b[0], a)) : !1 -}; -mxGraph.prototype.getDropTarget = function(a, b, c) { - if (!this.isSwimlaneNesting()) - for (var d = 0; d < a.length; d++) - if (this.isSwimlane(a[d])) return null; - d = mxUtils.convertPoint(this.container, mxEvent.getClientX(b), mxEvent.getClientY(b)); - d.x -= this.panDx; - d.y -= this.panDy; - d = this.getSwimlaneAt(d.x, d.y); - if (null == c) c = d; - else if (null != d) { - for (var e = this.model.getParent(d); null != e && this.isSwimlane(e) && e != c;) e = this.model.getParent(e); - e == c && (c = d) - } - for (; null != c && !this.isValidDropTarget(c, a, b) && !this.model.isLayer(c);) c = this.model.getParent(c); - return !this.model.isLayer(c) && 0 > mxUtils.indexOf(a, c) ? c : null -}; -mxGraph.prototype.getDefaultParent = function() { - var a = this.defaultParent; - null == a && (a = this.getCurrentRoot(), null == a && (a = this.model.getRoot(), a = this.model.getChildAt(a, 0))); - return a -}; -mxGraph.prototype.setDefaultParent = function(a) { - this.defaultParent = a -}; -mxGraph.prototype.getSwimlane = function(a) { - for (; null != a && !this.isSwimlane(a);) a = this.model.getParent(a); - return a -}; -mxGraph.prototype.getSwimlaneAt = function(a, b, c) { - c = c || this.getDefaultParent(); - if (null != c) - for (var d = this.model.getChildCount(c), e = 0; e < d; e++) { - var f = this.model.getChildAt(c, e), - g = this.getSwimlaneAt(a, b, f); - if (null != g) return g; - if (this.isSwimlane(f) && (g = this.view.getState(f), this.intersects(g, a, b))) return f - } - return null -}; -mxGraph.prototype.getCellAt = function(a, b, c, d, e) { - d = null != d ? d : !0; - e = null != e ? e : !0; - c = null != c ? c : this.getDefaultParent(); - if (null != c) - for (var f = this.model.getChildCount(c) - 1; 0 <= f; f--) { - var g = this.model.getChildAt(c, f), - h = this.getCellAt(a, b, g, d, e); - if (null != h) return h; - if (this.isCellVisible(g) && (e && this.model.isEdge(g) || d && this.model.isVertex(g))) - if (h = this.view.getState(g), this.intersects(h, a, b)) return g - } - return null -}; -mxGraph.prototype.intersects = function(a, b, c) { - if (null != a) { - var d = a.absolutePoints; - if (null != d) { - a = this.tolerance * this.tolerance; - for (var e = d[0], f = 1; f < d.length; f++) { - var g = d[f]; - if (mxUtils.ptSegDistSq(e.x, e.y, g.x, g.y, b, c) <= a) return !0; - e = g - } - } else if (e = mxUtils.toRadians(mxUtils.getValue(a.style, mxConstants.STYLE_ROTATION) || 0), 0 != e && (d = Math.cos(-e), e = Math.sin(-e), f = new mxPoint(a.getCenterX(), a.getCenterY()), e = - mxUtils.getRotatedPoint(new mxPoint(b, c), d, e, f), b = e.x, c = e.y), mxUtils.contains(a, b, c)) return !0 - } - return !1 -}; -mxGraph.prototype.hitsSwimlaneContent = function(a, b, c) { - var d = this.getView().getState(a); - a = this.getStartSize(a); - if (null != d) { - var e = this.getView().getScale(); - b -= d.x; - c -= d.y; - if (0 < a.width && 0 < b && b > a.width * e || 0 < a.height && 0 < c && c > a.height * e) return !0 - } - return !1 -}; -mxGraph.prototype.getChildVertices = function(a) { - return this.getChildCells(a, !0, !1) -}; -mxGraph.prototype.getChildEdges = function(a) { - return this.getChildCells(a, !1, !0) -}; -mxGraph.prototype.getChildCells = function(a, b, c) { - a = null != a ? a : this.getDefaultParent(); - a = this.model.getChildCells(a, null != b ? b : !1, null != c ? c : !1); - b = []; - for (c = 0; c < a.length; c++) this.isCellVisible(a[c]) && b.push(a[c]); - return b -}; -mxGraph.prototype.getConnections = function(a, b) { - return this.getEdges(a, b, !0, !0, !1) -}; -mxGraph.prototype.getIncomingEdges = function(a, b) { - return this.getEdges(a, b, !0, !1, !1) -}; -mxGraph.prototype.getOutgoingEdges = function(a, b) { - return this.getEdges(a, b, !1, !0, !1) -}; -mxGraph.prototype.getEdges = function(a, b, c, d, e, f) { - c = null != c ? c : !0; - d = null != d ? d : !0; - e = null != e ? e : !0; - f = null != f ? f : !1; - for (var g = [], h = this.isCellCollapsed(a), k = this.model.getChildCount(a), l = 0; l < k; l++) { - var m = this.model.getChildAt(a, l); - if (h || !this.isCellVisible(m)) g = g.concat(this.model.getEdges(m, c, d)) - } - g = g.concat(this.model.getEdges(a, c, d)); - h = []; - for (l = 0; l < g.length; l++) m = this.view.getState(g[l]), k = null != m ? m.getVisibleTerminal(!0) : this.view.getVisibleTerminal(g[l], !0), m = null != m ? m.getVisibleTerminal(!1) : this.view - .getVisibleTerminal(g[l], !1), (e && k == m || k != m && (c && m == a && (null == b || this.isValidAncestor(k, b, f)) || d && k == a && (null == b || this.isValidAncestor(m, b, f)))) && h.push( - g[l]); - return h -}; -mxGraph.prototype.isValidAncestor = function(a, b, c) { - return c ? this.model.isAncestor(b, a) : this.model.getParent(a) == b -}; -mxGraph.prototype.getOpposites = function(a, b, c, d) { - c = null != c ? c : !0; - d = null != d ? d : !0; - var e = [], - f = {}; - if (null != a) - for (var g = 0; g < a.length; g++) { - var h = this.view.getState(a[g]), - k = null != h ? h.getVisibleTerminal(!0) : this.view.getVisibleTerminal(a[g], !0), - h = null != h ? h.getVisibleTerminal(!1) : this.view.getVisibleTerminal(a[g], !1); - if (k == b && null != h && h != b && d) { - var l = mxCellPath.create(h); - null == f[l] && (f[l] = h, e.push(h)) - } else h == b && (null != k && k != b && c) && (l = mxCellPath.create(k), null == f[l] && (f[l] = k, e.push(k))) - } - return e -}; -mxGraph.prototype.getEdgesBetween = function(a, b, c) { - c = null != c ? c : !1; - for (var d = this.getEdges(a), e = [], f = 0; f < d.length; f++) { - var g = this.view.getState(d[f]), - h = null != g ? g.getVisibleTerminal(!0) : this.view.getVisibleTerminal(d[f], !0), - g = null != g ? g.getVisibleTerminal(!1) : this.view.getVisibleTerminal(d[f], !1); - (h == a && g == b || !c && h == b && g == a) && e.push(d[f]) - } - return e -}; -mxGraph.prototype.getPointForEvent = function(a, b) { - var c = mxUtils.convertPoint(this.container, mxEvent.getClientX(a), mxEvent.getClientY(a)), - d = this.view.scale, - e = this.view.translate, - f = !1 != b ? this.gridSize / 2 : 0; - c.x = this.snap(c.x / d - e.x - f); - c.y = this.snap(c.y / d - e.y - f); - return c -}; -mxGraph.prototype.getCells = function(a, b, c, d, e, f) { - f = null != f ? f : []; - if (0 < c || 0 < d) { - var g = a + c, - h = b + d; - e = e || this.getDefaultParent(); - if (null != e) - for (var k = this.model.getChildCount(e), l = 0; l < k; l++) { - var m = this.model.getChildAt(e, l), - n = this.view.getState(m); - if (this.isCellVisible(m) && null != n) { - var p = n, - n = mxUtils.getValue(n.style, mxConstants.STYLE_ROTATION) || 0; - 0 != n && (p = mxUtils.getBoundingBox(p, n)); - p.x >= a && p.y + p.height <= h && p.y >= b && p.x + p.width <= g ? f.push(m) : this.getCells(a, b, c, d, m, f) - } - } - } - return f -}; -mxGraph.prototype.getCellsBeyond = function(a, b, c, d, e) { - var f = []; - if (d || e) - if (null == c && (c = this.getDefaultParent()), null != c) - for (var g = this.model.getChildCount(c), h = 0; h < g; h++) { - var k = this.model.getChildAt(c, h), - l = this.view.getState(k); - this.isCellVisible(k) && null != l && (!d || l.x >= a) && (!e || l.y >= b) && f.push(k) - } - return f -}; -mxGraph.prototype.findTreeRoots = function(a, b, c) { - b = null != b ? b : !1; - c = null != c ? c : !1; - var d = []; - if (null != a) { - for (var e = this.getModel(), f = e.getChildCount(a), g = null, h = 0, k = 0; k < f; k++) { - var l = e.getChildAt(a, k); - if (this.model.isVertex(l) && this.isCellVisible(l)) { - for (var m = this.getConnections(l, b ? a : null), n = 0, p = 0, q = 0; q < m.length; q++) this.view.getVisibleTerminal(m[q], !0) == l ? n++ : p++; - (c && 0 == n && 0 < p || !c && 0 == p && 0 < n) && d.push(l); - m = c ? p - n : n - p; - m > h && (h = m, g = l) - } - } - 0 == d.length && null != g && d.push(g) - } - return d -}; -mxGraph.prototype.traverse = function(a, b, c, d, e) { - if (null != c && null != a) { - b = null != b ? b : !0; - e = e || []; - var f = mxCellPath.create(a); - if (null == e[f] && (e[f] = a, d = c(a, d), null == d || d)) - if (d = this.model.getEdgeCount(a), 0 < d) - for (f = 0; f < d; f++) { - var g = this.model.getEdgeAt(a, f), - h = this.model.getTerminal(g, !0) == a; - if (!b || h) h = this.model.getTerminal(g, !h), this.traverse(h, b, c, g, e) - } - } -}; -mxGraph.prototype.isCellSelected = function(a) { - return this.getSelectionModel().isSelected(a) -}; -mxGraph.prototype.isSelectionEmpty = function() { - return this.getSelectionModel().isEmpty() -}; -mxGraph.prototype.clearSelection = function() { - return this.getSelectionModel().clear() -}; -mxGraph.prototype.getSelectionCount = function() { - return this.getSelectionModel().cells.length -}; -mxGraph.prototype.getSelectionCell = function() { - return this.getSelectionModel().cells[0] -}; -mxGraph.prototype.getSelectionCells = function() { - return this.getSelectionModel().cells.slice() -}; -mxGraph.prototype.setSelectionCell = function(a) { - this.getSelectionModel().setCell(a) -}; -mxGraph.prototype.setSelectionCells = function(a) { - this.getSelectionModel().setCells(a) -}; -mxGraph.prototype.addSelectionCell = function(a) { - this.getSelectionModel().addCell(a) -}; -mxGraph.prototype.addSelectionCells = function(a) { - this.getSelectionModel().addCells(a) -}; -mxGraph.prototype.removeSelectionCell = function(a) { - this.getSelectionModel().removeCell(a) -}; -mxGraph.prototype.removeSelectionCells = function(a) { - this.getSelectionModel().removeCells(a) -}; -mxGraph.prototype.selectRegion = function(a, b) { - var c = this.getCells(a.x, a.y, a.width, a.height); - this.selectCellsForEvent(c, b); - return c -}; -mxGraph.prototype.selectNextCell = function() { - this.selectCell(!0) -}; -mxGraph.prototype.selectPreviousCell = function() { - this.selectCell() -}; -mxGraph.prototype.selectParentCell = function() { - this.selectCell(!1, !0) -}; -mxGraph.prototype.selectChildCell = function() { - this.selectCell(!1, !1, !0) -}; -mxGraph.prototype.selectCell = function(a, b, c) { - var d = this.selectionModel, - e = 0 < d.cells.length ? d.cells[0] : null; - 1 < d.cells.length && d.clear(); - var d = null != e ? this.model.getParent(e) : this.getDefaultParent(), - f = this.model.getChildCount(d); - null == e && 0 < f ? (a = this.model.getChildAt(d, 0), this.setSelectionCell(a)) : (null == e || b) && null != this.view.getState(d) && null != this.model.getGeometry(d) ? this.getCurrentRoot() != - d && this.setSelectionCell(d) : null != e && c ? 0 < this.model.getChildCount(e) && (a = this.model.getChildAt(e, 0), this.setSelectionCell(a)) : - 0 < f && (b = d.getIndex(e), a ? (b++, a = this.model.getChildAt(d, b % f)) : (b--, a = this.model.getChildAt(d, 0 > b ? f - 1 : b)), this.setSelectionCell(a)) -}; -mxGraph.prototype.selectAll = function(a) { - a = a || this.getDefaultParent(); - a = this.model.getChildren(a); - null != a && this.setSelectionCells(a) -}; -mxGraph.prototype.selectVertices = function(a) { - this.selectCells(!0, !1, a) -}; -mxGraph.prototype.selectEdges = function(a) { - this.selectCells(!1, !0, a) -}; -mxGraph.prototype.selectCells = function(a, b, c) { - c = c || this.getDefaultParent(); - var d = mxUtils.bind(this, function(c) { - return null != this.view.getState(c) && 0 == this.model.getChildCount(c) && (this.model.isVertex(c) && a || this.model.isEdge(c) && b) - }); - c = this.model.filterDescendants(d, c); - this.setSelectionCells(c) -}; -mxGraph.prototype.selectCellForEvent = function(a, b) { - var c = this.isCellSelected(a); - this.isToggleEvent(b) ? c ? this.removeSelectionCell(a) : this.addSelectionCell(a) : (!c || 1 != this.getSelectionCount()) && this.setSelectionCell(a) -}; -mxGraph.prototype.selectCellsForEvent = function(a, b) { - this.isToggleEvent(b) ? this.addSelectionCells(a) : this.setSelectionCells(a) -}; -mxGraph.prototype.createHandler = function(a) { - var b = null; - null != a && (this.model.isEdge(a.cell) ? (b = this.view.getEdgeStyle(a), b = this.isLoop(a) || b == mxEdgeStyle.ElbowConnector || b == mxEdgeStyle.SideToSide || b == mxEdgeStyle.TopToBottom ? - new mxElbowEdgeHandler(a) : b == mxEdgeStyle.SegmentConnector || b == mxEdgeStyle.OrthConnector ? new mxEdgeSegmentHandler(a) : new mxEdgeHandler(a)) : b = new mxVertexHandler(a)); - return b -}; -mxGraph.prototype.addMouseListener = function(a) { - null == this.mouseListeners && (this.mouseListeners = []); - this.mouseListeners.push(a) -}; -mxGraph.prototype.removeMouseListener = function(a) { - if (null != this.mouseListeners) - for (var b = 0; b < this.mouseListeners.length; b++) - if (this.mouseListeners[b] == a) { - this.mouseListeners.splice(b, 1); - break - } -}; -mxGraph.prototype.updateMouseEvent = function(a) { - if (null == a.graphX || null == a.graphY) { - var b = mxUtils.convertPoint(this.container, a.getX(), a.getY()); - a.graphX = b.x - this.panDx; - a.graphY = b.y - this.panDy - } -}; -mxGraph.prototype.fireMouseEvent = function(a, b, c) { - null == c && (c = this); - this.updateMouseEvent(b); - a == mxEvent.MOUSE_DOWN && (this.isMouseDown = !0); - if (mxClient.IS_TOUCH && this.doubleTapEnabled && a == mxEvent.MOUSE_DOWN) { - var d = (new Date).getTime(); - d - this.lastTouchTime < this.doubleTapTimeout && Math.abs(this.lastTouchX - b.getX()) < this.doubleTapTolerance && Math.abs(this.lastTouchY - b.getY()) < this.doubleTapTolerance ? (this.lastTouchTime = - 0, this.dblClick(b.getEvent(), b.getCell()), b.getEvent().cancelBubble = !0) : (this.lastTouchX = - b.getX(), this.lastTouchY = b.getY(), this.lastTouchTime = d) - } - d = 2 != b.getEvent().detail; - if (mxClient.IS_IE && "CSS1Compat" == document.compatMode) { - if (null != this.lastMouseX && Math.abs(this.lastMouseX - b.getX()) > this.doubleTapTolerance || null != this.lastMouseY && Math.abs(this.lastMouseY - b.getY()) > this.doubleTapTolerance) d = ! - 0; - a == mxEvent.MOUSE_UP && (this.lastMouseX = b.getX(), this.lastMouseY = b.getY()) - } - if ((a != mxEvent.MOUSE_UP || this.isMouseDown) && d) { - if (a == mxEvent.MOUSE_UP && (this.isMouseDown = !1), !this.isEditing() && (mxClient.IS_OP || - mxClient.IS_SF || mxClient.IS_GC || mxClient.IS_IE && mxClient.IS_SVG || b.getEvent().target != this.container)) { - a == mxEvent.MOUSE_MOVE && (this.isMouseDown && this.autoScroll) && this.scrollPointToVisible(b.getGraphX(), b.getGraphY(), this.autoExtend); - if (null != this.mouseListeners) { - c = [c, b]; - b.getEvent().returnValue = !0; - for (d = 0; d < this.mouseListeners.length; d++) { - var e = this.mouseListeners[d]; - a == mxEvent.MOUSE_DOWN ? e.mouseDown.apply(e, c) : a == mxEvent.MOUSE_MOVE ? e.mouseMove.apply(e, c) : a == mxEvent.MOUSE_UP && e.mouseUp.apply(e, c) - } - } - a == - mxEvent.MOUSE_UP && this.click(b) - } - } else a == mxEvent.MOUSE_UP && (this.isMouseDown = !1) -}; -mxGraph.prototype.destroy = function() { - this.destroyed || (this.destroyed = !0, null != this.tooltipHandler && this.tooltipHandler.destroy(), null != this.selectionCellsHandler && this.selectionCellsHandler.destroy(), null != this.panningHandler && - this.panningHandler.destroy(), null != this.connectionHandler && this.connectionHandler.destroy(), null != this.graphHandler && this.graphHandler.destroy(), null != this.cellEditor && this.cellEditor - .destroy(), null != this.view && this.view.destroy(), null != this.model && null != this.graphModelChangeListener && - (this.model.removeListener(this.graphModelChangeListener), this.graphModelChangeListener = null), this.container = null) -}; - -function mxCellOverlay(a, b, c, d, e, f) { - this.image = a; - this.tooltip = b; - this.align = null != c ? c : this.align; - this.verticalAlign = null != d ? d : this.verticalAlign; - this.offset = null != e ? e : new mxPoint; - this.cursor = null != f ? f : "help" -} -mxCellOverlay.prototype = new mxEventSource; -mxCellOverlay.prototype.constructor = mxCellOverlay; -mxCellOverlay.prototype.image = null; -mxCellOverlay.prototype.tooltip = null; -mxCellOverlay.prototype.align = mxConstants.ALIGN_RIGHT; -mxCellOverlay.prototype.verticalAlign = mxConstants.ALIGN_BOTTOM; -mxCellOverlay.prototype.offset = null; -mxCellOverlay.prototype.cursor = null; -mxCellOverlay.prototype.defaultOverlap = 0.5; -mxCellOverlay.prototype.getBounds = function(a) { - var b = a.view.graph.getModel().isEdge(a.cell), - c = a.view.scale, - d = null, - e = this.image.width, - f = this.image.height; - b ? (b = a.absolutePoints, 1 == b.length % 2 ? d = b[Math.floor(b.length / 2)] : (d = b.length / 2, a = b[d - 1], b = b[d], d = new mxPoint(a.x + (b.x - a.x) / 2, a.y + (b.y - a.y) / 2))) : (d = - new mxPoint, d.x = this.align == mxConstants.ALIGN_LEFT ? a.x : this.align == mxConstants.ALIGN_CENTER ? a.x + a.width / 2 : a.x + a.width, d.y = this.verticalAlign == mxConstants.ALIGN_TOP ? - a.y : this.verticalAlign == mxConstants.ALIGN_MIDDLE ? - a.y + a.height / 2 : a.y + a.height); - return new mxRectangle(Math.round(d.x - (e * this.defaultOverlap - this.offset.x) * c), Math.round(d.y - (f * this.defaultOverlap - this.offset.y) * c), e * c, f * c) -}; -mxCellOverlay.prototype.toString = function() { - return this.tooltip -}; - -function mxOutline(a, b) { - this.source = a; - null != b && this.init(b) -} -mxOutline.prototype.source = null; -mxOutline.prototype.outline = null; -mxOutline.prototype.graphRenderHint = mxConstants.RENDERING_HINT_FASTER; -mxOutline.prototype.enabled = !0; -mxOutline.prototype.showViewport = !0; -mxOutline.prototype.border = 10; -mxOutline.prototype.sizerSize = 8; -mxOutline.prototype.updateOnPan = !1; -mxOutline.prototype.sizerImage = null; -mxOutline.prototype.suspended = !1; -mxOutline.prototype.init = function(a) { - this.outline = new mxGraph(a, this.source.getModel(), this.graphRenderHint, this.source.getStylesheet()); - this.outline.foldingEnabled = !1; - this.outline.autoScroll = !1; - var b = this.outline.graphModelChanged; - this.outline.graphModelChanged = mxUtils.bind(this, function(a) { - !this.suspended && null != this.outline && b.apply(this.outline, arguments) - }); - mxClient.IS_SVG && (a = this.outline.getView().getCanvas().parentNode, a.setAttribute("shape-rendering", "optimizeSpeed"), a.setAttribute("image-rendering", - "optimizeSpeed")); - this.outline.labelsVisible = !1; - this.outline.setEnabled(!1); - this.updateHandler = mxUtils.bind(this, function(a, b) { - !this.suspended && !this.active && this.update() - }); - this.source.getModel().addListener(mxEvent.CHANGE, this.updateHandler); - this.outline.addMouseListener(this); - a = this.source.getView(); - a.addListener(mxEvent.SCALE, this.updateHandler); - a.addListener(mxEvent.TRANSLATE, this.updateHandler); - a.addListener(mxEvent.SCALE_AND_TRANSLATE, this.updateHandler); - a.addListener(mxEvent.DOWN, this.updateHandler); - a.addListener(mxEvent.UP, this.updateHandler); - mxEvent.addListener(this.source.container, "scroll", this.updateHandler); - this.panHandler = mxUtils.bind(this, function(a) { - this.updateOnPan && this.updateHandler.apply(this, arguments) - }); - this.source.addListener(mxEvent.PAN, this.panHandler); - this.refreshHandler = mxUtils.bind(this, function(a) { - this.outline.setStylesheet(this.source.getStylesheet()); - this.outline.refresh() - }); - this.source.addListener(mxEvent.REFRESH, this.refreshHandler); - this.bounds = new mxRectangle(0, 0, 0, - 0); - this.selectionBorder = new mxRectangleShape(this.bounds, null, mxConstants.OUTLINE_COLOR, mxConstants.OUTLINE_STROKEWIDTH); - this.selectionBorder.dialect = this.outline.dialect != mxConstants.DIALECT_SVG ? mxConstants.DIALECT_VML : mxConstants.DIALECT_SVG; - this.selectionBorder.init(this.outline.getView().getOverlayPane()); - mxEvent.redirectMouseEvents(this.selectionBorder.node, this.outline); - this.selectionBorder.node.style.background = ""; - this.sizer = this.createSizer(); - this.sizer.init(this.outline.getView().getOverlayPane()); - this.enabled && (this.sizer.node.style.cursor = "pointer"); - mxEvent.addListener(this.sizer.node, mxClient.IS_TOUCH ? "touchstart" : "mousedown", mxUtils.bind(this, function(a) { - this.outline.fireMouseEvent(mxEvent.MOUSE_DOWN, new mxMouseEvent(a)) - })); - this.selectionBorder.node.style.display = this.showViewport ? "" : "none"; - this.sizer.node.style.display = this.selectionBorder.node.style.display; - this.selectionBorder.node.style.cursor = "move"; - this.update(!1) -}; -mxOutline.prototype.isEnabled = function() { - return this.enabled -}; -mxOutline.prototype.setEnabled = function(a) { - this.enabled = a -}; -mxOutline.prototype.setZoomEnabled = function(a) { - this.sizer.node.style.visibility = a ? "visible" : "hidden" -}; -mxOutline.prototype.refresh = function() { - this.update(!0) -}; -mxOutline.prototype.createSizer = function() { - var a = null != this.sizerImage ? new mxImageShape(new mxRectangle(0, 0, this.sizerImage.width, this.sizerImage.height), this.sizerImage.src) : new mxRectangleShape(new mxRectangle(0, 0, this.sizerSize, - this.sizerSize), mxConstants.OUTLINE_HANDLE_FILLCOLOR, mxConstants.OUTLINE_HANDLE_STROKECOLOR); - a.dialect = this.outline.dialect; - return a -}; -mxOutline.prototype.getSourceContainerSize = function() { - return new mxRectangle(0, 0, this.source.container.scrollWidth, this.source.container.scrollHeight) -}; -mxOutline.prototype.getOutlineOffset = function(a) { - return null -}; -mxOutline.prototype.update = function(a) { - if (null != this.source) { - var b = this.source.view.scale, - c = this.source.getGraphBounds(), - c = new mxRectangle(c.x / b + this.source.panDx, c.y / b + this.source.panDy, c.width / b, c.height / b), - d = new mxRectangle(0, 0, this.source.container.clientWidth / b, this.source.container.clientHeight / b), - e = c.clone(); - e.add(d); - var f = this.getSourceContainerSize(), - d = Math.max(f.width / b, e.width), - b = Math.max(f.height / b, e.height), - e = Math.max(0, this.outline.container.clientWidth - this.border), - f = Math.max(0, this.outline.container.clientHeight - - this.border), - e = Math.min(e / d, f / b); - if (0 < e) { - this.outline.getView().scale != e && (this.outline.getView().scale = e, a = !0); - d = this.outline.getView(); - d.currentRoot != this.source.getView().currentRoot && d.setCurrentRoot(this.source.getView().currentRoot); - var b = this.source.view.translate, - f = b.x + this.source.panDx, - g = b.y + this.source.panDy, - e = this.getOutlineOffset(e); - null != e && (f += e.x, g += e.y); - 0 > c.x && (f -= c.x); - 0 > c.y && (g -= c.y); - if (d.translate.x != f || d.translate.y != g) d.translate.x = f, d.translate.y = g, a = !0; - var c = d.translate, - e = this.source.getView().scale, - f = e / d.scale, - g = 1 / d.scale, - h = this.source.container; - this.bounds = new mxRectangle((c.x - b.x - this.source.panDx) / g, (c.y - b.y - this.source.panDy) / g, h.clientWidth / f, h.clientHeight / f); - this.bounds.x += this.source.container.scrollLeft * d.scale / e; - this.bounds.y += this.source.container.scrollTop * d.scale / e; - c = this.selectionBorder.bounds; - if (c.x != this.bounds.x || c.y != this.bounds.y || c.width != this.bounds.width || c.height != this.bounds.height) this.selectionBorder.bounds = this.bounds, this.selectionBorder.redraw(); - c = this.sizer.bounds; - d = new mxRectangle(this.bounds.x + this.bounds.width - c.width / 2, this.bounds.y + this.bounds.height - c.height / 2, c.width, c.height); - if (c.x != d.x || c.y != d.y || c.width != d.width || c.height != d.height) this.sizer.bounds = d, "hidden" != this.sizer.node.style.visibility && this.sizer.redraw(); - a && this.outline.view.revalidate() - } - } -}; -mxOutline.prototype.mouseDown = function(a, b) { - this.enabled && this.showViewport && (this.zoom = b.isSource(this.sizer), this.startX = b.getX(), this.startY = b.getY(), this.active = !0, this.source.useScrollbarsForPanning && mxUtils.hasScrollbars( - this.source.container) ? (this.dx0 = this.source.container.scrollLeft, this.dy0 = this.source.container.scrollTop) : this.dy0 = this.dx0 = 0); - b.consume() -}; -mxOutline.prototype.mouseMove = function(a, b) { - if (this.active) { - this.selectionBorder.node.style.display = this.showViewport ? "" : "none"; - this.sizer.node.style.display = this.selectionBorder.node.style.display; - var c = b.getX() - this.startX, - d = b.getY() - this.startY, - e = null; - if (this.zoom) e = this.source.container, d = c / (e.clientWidth / e.clientHeight), e = new mxRectangle(this.bounds.x, this.bounds.y, Math.max(1, this.bounds.width + c), Math.max(1, this.bounds - .height + d)), this.selectionBorder.bounds = e, this.selectionBorder.redraw(); - else { - var f = - this.outline.getView().scale, - e = new mxRectangle(this.bounds.x + c, this.bounds.y + d, this.bounds.width, this.bounds.height); - this.selectionBorder.bounds = e; - this.selectionBorder.redraw(); - c = c / f * this.source.getView().scale; - d = d / f * this.source.getView().scale; - this.source.panGraph(-c - this.dx0, -d - this.dy0) - } - c = this.sizer.bounds; - this.sizer.bounds = new mxRectangle(e.x + e.width - c.width / 2, e.y + e.height - c.height / 2, c.width, c.height); - "hidden" != this.sizer.node.style.visibility && this.sizer.redraw(); - b.consume() - } -}; -mxOutline.prototype.mouseUp = function(a, b) { - if (this.active) { - var c = b.getX() - this.startX, - d = b.getY() - this.startY; - if (0 < Math.abs(c) || 0 < Math.abs(d)) { - if (this.zoom) { - var d = this.selectionBorder.bounds.width, - e = this.source.getView().scale; - this.source.zoomTo(e - c * e / d, !1) - } else if (!this.source.useScrollbarsForPanning || !mxUtils.hasScrollbars(this.source.container)) this.source.panGraph(0, 0), c /= this.outline.getView().scale, d /= this.outline.getView().scale, - e = this.source.getView().translate, this.source.getView().setTranslate(e.x - - c, e.y - d); - this.update(); - b.consume() - } - this.index = null; - this.active = !1 - } -}; -mxOutline.prototype.destroy = function() { - null != this.source && (this.source.removeListener(this.panHandler), this.source.removeListener(this.refreshHandler), this.source.getModel().removeListener(this.updateHandler), this.source.getView() - .removeListener(this.updateHandler), mxEvent.addListener(this.source.container, "scroll", this.updateHandler), this.source = null); - null != this.outline && (this.outline.removeMouseListener(this), this.outline.destroy(), this.outline = null); - null != this.selectionBorder && (this.selectionBorder.destroy(), - this.selectionBorder = null); - null != this.sizer && (this.sizer.destroy(), this.sizer = null) -}; - -function mxMultiplicity(a, b, c, d, e, f, g, h, k, l) { - this.source = a; - this.type = b; - this.attr = c; - this.value = d; - this.min = null != e ? e : 0; - this.max = null != f ? f : "n"; - this.validNeighbors = g; - this.countError = mxResources.get(h) || h; - this.typeError = mxResources.get(k) || k; - this.validNeighborsAllowed = null != l ? l : !0 -} -mxMultiplicity.prototype.type = null; -mxMultiplicity.prototype.attr = null; -mxMultiplicity.prototype.value = null; -mxMultiplicity.prototype.source = null; -mxMultiplicity.prototype.min = null; -mxMultiplicity.prototype.max = null; -mxMultiplicity.prototype.validNeighbors = null; -mxMultiplicity.prototype.validNeighborsAllowed = !0; -mxMultiplicity.prototype.countError = null; -mxMultiplicity.prototype.typeError = null; -mxMultiplicity.prototype.check = function(a, b, c, d, e, f) { - var g = ""; - if (this.source && this.checkTerminal(a, c, b) || !this.source && this.checkTerminal(a, d, b)) { - if (null != this.countError && (this.source && (0 == this.max || e >= this.max) || !this.source && (0 == this.max || f >= this.max))) g += this.countError + "\n"; - null != this.validNeighbors && (null != this.typeError && 0 < this.validNeighbors.length) && (this.checkNeighbors(a, b, c, d) || (g += this.typeError + "\n")) - } - return 0 < g.length ? g : null -}; -mxMultiplicity.prototype.checkNeighbors = function(a, b, c, d) { - b = a.model.getValue(c); - d = a.model.getValue(d); - c = !this.validNeighborsAllowed; - for (var e = this.validNeighbors, f = 0; f < e.length; f++) - if (this.source && this.checkType(a, d, e[f])) { - c = this.validNeighborsAllowed; - break - } else if (!this.source && this.checkType(a, b, e[f])) { - c = this.validNeighborsAllowed; - break - } - return c -}; -mxMultiplicity.prototype.checkTerminal = function(a, b, c) { - b = a.model.getValue(b); - return this.checkType(a, b, this.type, this.attr, this.value) -}; -mxMultiplicity.prototype.checkType = function(a, b, c, d, e) { - return null != b ? isNaN(b.nodeType) ? b == c : mxUtils.isNode(b, c, d, e) : !1 -}; - -function mxLayoutManager(a) { - this.undoHandler = mxUtils.bind(this, function(a, c) { - this.isEnabled() && this.beforeUndo(c.getProperty("edit")) - }); - this.moveHandler = mxUtils.bind(this, function(a, c) { - this.isEnabled() && this.cellsMoved(c.getProperty("cells"), c.getProperty("event")) - }); - this.setGraph(a) -} -mxLayoutManager.prototype = new mxEventSource; -mxLayoutManager.prototype.constructor = mxLayoutManager; -mxLayoutManager.prototype.graph = null; -mxLayoutManager.prototype.bubbling = !0; -mxLayoutManager.prototype.enabled = !0; -mxLayoutManager.prototype.updateHandler = null; -mxLayoutManager.prototype.moveHandler = null; -mxLayoutManager.prototype.isEnabled = function() { - return this.enabled -}; -mxLayoutManager.prototype.setEnabled = function(a) { - this.enabled = a -}; -mxLayoutManager.prototype.isBubbling = function() { - return this.bubbling -}; -mxLayoutManager.prototype.setBubbling = function(a) { - this.bubbling = a -}; -mxLayoutManager.prototype.getGraph = function() { - return this.graph -}; -mxLayoutManager.prototype.setGraph = function(a) { - if (null != this.graph) { - var b = this.graph.getModel(); - b.removeListener(this.undoHandler); - this.graph.removeListener(this.moveHandler) - } - this.graph = a; - null != this.graph && (b = this.graph.getModel(), b.addListener(mxEvent.BEFORE_UNDO, this.undoHandler), this.graph.addListener(mxEvent.MOVE_CELLS, this.moveHandler)) -}; -mxLayoutManager.prototype.getLayout = function(a) { - return null -}; -mxLayoutManager.prototype.beforeUndo = function(a) { - a = this.getCellsForChanges(a.changes); - var b = this.getGraph().getModel(); - if (this.isBubbling()) - for (var c = b.getParents(a); 0 < c.length;) a = a.concat(c), c = b.getParents(c); - this.layoutCells(mxUtils.sortCells(a, !1)) -}; -mxLayoutManager.prototype.cellsMoved = function(a, b) { - if (null != a && null != b) - for (var c = mxUtils.convertPoint(this.getGraph().container, mxEvent.getClientX(b), mxEvent.getClientY(b)), d = this.getGraph().getModel(), e = 0; e < a.length; e++) { - var f = this.getLayout(d.getParent(a[e])); - null != f && f.moveCell(a[e], c.x, c.y) - } -}; -mxLayoutManager.prototype.getCellsForChanges = function(a) { - for (var b = [], c = {}, d = 0; d < a.length; d++) { - var e = a[d]; - if (e instanceof mxRootChange) return []; - for (var e = this.getCellsForChange(e), f = 0; f < e.length; f++) - if (null != e[f]) { - var g = mxCellPath.create(e[f]); - null == c[g] && (c[g] = e[f], b.push(e[f])) - } - } - return b -}; -mxLayoutManager.prototype.getCellsForChange = function(a) { - var b = this.getGraph().getModel(); - return a instanceof mxChildChange ? [a.child, a.previous, b.getParent(a.child)] : a instanceof mxTerminalChange || a instanceof mxGeometryChange ? [a.cell, b.getParent(a.cell)] : [] -}; -mxLayoutManager.prototype.layoutCells = function(a) { - if (0 < a.length) { - var b = this.getGraph().getModel(); - b.beginUpdate(); - try { - for (var c = null, d = 0; d < a.length; d++) a[d] != b.getRoot() && a[d] != c && (c = a[d], this.executeLayout(this.getLayout(c), c)); - this.fireEvent(new mxEventObject(mxEvent.LAYOUT_CELLS, "cells", a)) - } finally { - b.endUpdate() - } - } -}; -mxLayoutManager.prototype.executeLayout = function(a, b) { - null != a && null != b && a.execute(b) -}; -mxLayoutManager.prototype.destroy = function() { - this.setGraph(null) -}; - -function mxSpaceManager(a, b, c, d) { - this.resizeHandler = mxUtils.bind(this, function(a, b) { - this.isEnabled() && this.cellsResized(b.getProperty("cells")) - }); - this.foldHandler = mxUtils.bind(this, function(a, b) { - this.isEnabled() && this.cellsResized(b.getProperty("cells")) - }); - this.shiftRightwards = null != b ? b : !0; - this.shiftDownwards = null != c ? c : !0; - this.extendParents = null != d ? d : !0; - this.setGraph(a) -} -mxSpaceManager.prototype = new mxEventSource; -mxSpaceManager.prototype.constructor = mxSpaceManager; -mxSpaceManager.prototype.graph = null; -mxSpaceManager.prototype.enabled = !0; -mxSpaceManager.prototype.shiftRightwards = !0; -mxSpaceManager.prototype.shiftDownwards = !0; -mxSpaceManager.prototype.extendParents = !0; -mxSpaceManager.prototype.resizeHandler = null; -mxSpaceManager.prototype.foldHandler = null; -mxSpaceManager.prototype.isCellIgnored = function(a) { - return !this.getGraph().getModel().isVertex(a) -}; -mxSpaceManager.prototype.isCellShiftable = function(a) { - return this.getGraph().getModel().isVertex(a) && this.getGraph().isCellMovable(a) -}; -mxSpaceManager.prototype.isEnabled = function() { - return this.enabled -}; -mxSpaceManager.prototype.setEnabled = function(a) { - this.enabled = a -}; -mxSpaceManager.prototype.isShiftRightwards = function() { - return this.shiftRightwards -}; -mxSpaceManager.prototype.setShiftRightwards = function(a) { - this.shiftRightwards = a -}; -mxSpaceManager.prototype.isShiftDownwards = function() { - return this.shiftDownwards -}; -mxSpaceManager.prototype.setShiftDownwards = function(a) { - this.shiftDownwards = a -}; -mxSpaceManager.prototype.isExtendParents = function() { - return this.extendParents -}; -mxSpaceManager.prototype.setExtendParents = function(a) { - this.extendParents = a -}; -mxSpaceManager.prototype.getGraph = function() { - return this.graph -}; -mxSpaceManager.prototype.setGraph = function(a) { - null != this.graph && (this.graph.removeListener(this.resizeHandler), this.graph.removeListener(this.foldHandler)); - this.graph = a; - null != this.graph && (this.graph.addListener(mxEvent.RESIZE_CELLS, this.resizeHandler), this.graph.addListener(mxEvent.FOLD_CELLS, this.foldHandler)) -}; -mxSpaceManager.prototype.cellsResized = function(a) { - if (null != a) { - var b = this.graph.getModel(); - b.beginUpdate(); - try { - for (var c = 0; c < a.length; c++) - if (!this.isCellIgnored(a[c])) { - this.cellResized(a[c]); - break - } - } finally { - b.endUpdate() - } - } -}; -mxSpaceManager.prototype.cellResized = function(a) { - var b = this.getGraph(), - c = b.getView(), - d = b.getModel(), - e = c.getState(a), - f = c.getState(d.getParent(a)); - if (null != e && null != f) { - var g = this.getCellsToShift(e), - h = d.getGeometry(a); - if (null != g && null != h) { - var k = c.translate, - l = c.scale, - c = e.x - f.origin.x - k.x * l, - f = e.y - f.origin.y - k.y * l, - k = e.x + e.width, - m = e.y + e.height, - n = e.width - h.width * l + c - h.x * l, - p = e.height - h.height * l + f - h.y * l, - q = 1 - h.width * l / e.width, - e = 1 - h.height * l / e.height; - d.beginUpdate(); - try { - for (h = 0; h < g.length; h++) g[h] != a && this.isCellShiftable(g[h]) && - this.shiftCell(g[h], n, p, c, f, k, m, q, e, this.isExtendParents() && b.isExtendParent(g[h])) - } finally { - d.endUpdate() - } - } - } -}; -mxSpaceManager.prototype.shiftCell = function(a, b, c, d, e, f, g, h, k, l) { - d = this.getGraph(); - var m = d.getView().getState(a); - if (null != m) { - var n = d.getModel(), - p = n.getGeometry(a); - if (null != p) { - n.beginUpdate(); - try { - if (this.isShiftRightwards()) - if (m.x >= f) p = p.clone(), p.translate(-b, 0); - else { - var q = Math.max(0, m.x - x0), - p = p.clone(); - p.translate(-h * q, 0) - } - if (this.isShiftDownwards()) - if (m.y >= g) p = p.clone(), p.translate(0, -c); - else { - var s = Math.max(0, m.y - e), - p = p.clone(); - p.translate(0, -k * s) - } - p != n.getGeometry(a) && (n.setGeometry(a, p), l && d.extendParent(a)) - } finally { - n.endUpdate() - } - } - } -}; -mxSpaceManager.prototype.getCellsToShift = function(a) { - var b = this.getGraph(), - c = b.getModel().getParent(a.cell), - d = this.isShiftDownwards(), - e = this.isShiftRightwards(); - return b.getCellsBeyond(a.x + (d ? 0 : a.width), a.y + (d && e ? 0 : a.height), c, e, d) -}; -mxSpaceManager.prototype.destroy = function() { - this.setGraph(null) -}; - -function mxSwimlaneManager(a, b, c, d) { - this.horizontal = null != b ? b : !0; - this.addEnabled = null != c ? c : !0; - this.resizeEnabled = null != d ? d : !0; - this.addHandler = mxUtils.bind(this, function(a, b) { - this.isEnabled() && this.isAddEnabled() && this.cellsAdded(b.getProperty("cells")) - }); - this.resizeHandler = mxUtils.bind(this, function(a, b) { - this.isEnabled() && this.isResizeEnabled() && this.cellsResized(b.getProperty("cells")) - }); - this.setGraph(a) -} -mxSwimlaneManager.prototype = new mxEventSource; -mxSwimlaneManager.prototype.constructor = mxSwimlaneManager; -mxSwimlaneManager.prototype.graph = null; -mxSwimlaneManager.prototype.enabled = !0; -mxSwimlaneManager.prototype.horizontal = !0; -mxSwimlaneManager.prototype.addEnabled = !0; -mxSwimlaneManager.prototype.resizeEnabled = !0; -mxSwimlaneManager.prototype.addHandler = null; -mxSwimlaneManager.prototype.resizeHandler = null; -mxSwimlaneManager.prototype.isEnabled = function() { - return this.enabled -}; -mxSwimlaneManager.prototype.setEnabled = function(a) { - this.enabled = a -}; -mxSwimlaneManager.prototype.isHorizontal = function() { - return this.horizontal -}; -mxSwimlaneManager.prototype.setHorizontal = function(a) { - this.horizontal = a -}; -mxSwimlaneManager.prototype.isAddEnabled = function() { - return this.addEnabled -}; -mxSwimlaneManager.prototype.setAddEnabled = function(a) { - this.addEnabled = a -}; -mxSwimlaneManager.prototype.isResizeEnabled = function() { - return this.resizeEnabled -}; -mxSwimlaneManager.prototype.setResizeEnabled = function(a) { - this.resizeEnabled = a -}; -mxSwimlaneManager.prototype.getGraph = function() { - return this.graph -}; -mxSwimlaneManager.prototype.setGraph = function(a) { - null != this.graph && (this.graph.removeListener(this.addHandler), this.graph.removeListener(this.resizeHandler)); - this.graph = a; - null != this.graph && (this.graph.addListener(mxEvent.ADD_CELLS, this.addHandler), this.graph.addListener(mxEvent.CELLS_RESIZED, this.resizeHandler)) -}; -mxSwimlaneManager.prototype.isSwimlaneIgnored = function(a) { - return !this.getGraph().isSwimlane(a) -}; -mxSwimlaneManager.prototype.isCellHorizontal = function(a) { - if (this.graph.isSwimlane(a)) { - var b = this.graph.view.getState(a); - a = null != b ? b.style : this.graph.getCellStyle(a); - return 1 == mxUtils.getValue(a, mxConstants.STYLE_HORIZONTAL, 1) - } - return !this.isHorizontal() -}; -mxSwimlaneManager.prototype.cellsAdded = function(a) { - if (null != a) { - var b = this.getGraph().getModel(); - b.beginUpdate(); - try { - for (var c = 0; c < a.length; c++) this.isSwimlaneIgnored(a[c]) || this.swimlaneAdded(a[c]) - } finally { - b.endUpdate() - } - } -}; -mxSwimlaneManager.prototype.swimlaneAdded = function(a) { - for (var b = this.getGraph().getModel(), c = b.getParent(a), d = b.getChildCount(c), e = null, f = 0; f < d; f++) { - var g = b.getChildAt(c, f); - if (g != a && !this.isSwimlaneIgnored(g) && (e = b.getGeometry(g), null != e)) break - } - null != e && this.resizeSwimlane(a, e.width, e.height) -}; -mxSwimlaneManager.prototype.cellsResized = function(a) { - if (null != a) { - var b = this.getGraph().getModel(); - b.beginUpdate(); - try { - for (var c = 0; c < a.length; c++) - if (!this.isSwimlaneIgnored(a[c])) { - var d = b.getGeometry(a[c]); - if (null != d) { - for (var e = new mxRectangle(0, 0, d.width, d.height), f = a[c], g = f; null != g;) { - var f = g, - g = b.getParent(g), - h = this.graph.isSwimlane(g) ? this.graph.getStartSize(g) : new mxRectangle; - e.width += h.width; - e.height += h.height - } - this.resizeSwimlane(f, e.width, e.height) - } - } - } finally { - b.endUpdate() - } - } -}; -mxSwimlaneManager.prototype.resizeSwimlane = function(a, b, c) { - var d = this.getGraph().getModel(); - d.beginUpdate(); - try { - if (!this.isSwimlaneIgnored(a)) { - var e = d.getGeometry(a); - if (null != e) { - var f = this.isCellHorizontal(a); - if (f && e.height != c || !f && e.width != b) e = e.clone(), f ? e.height = c : e.width = b, d.setGeometry(a, e) - } - } - var g = this.graph.isSwimlane(a) ? this.graph.getStartSize(a) : new mxRectangle; - b -= g.width; - c -= g.height; - for (var h = d.getChildCount(a), e = 0; e < h; e++) { - var k = d.getChildAt(a, e); - this.resizeSwimlane(k, b, c) - } - } finally { - d.endUpdate() - } -}; -mxSwimlaneManager.prototype.destroy = function() { - this.setGraph(null) -}; - -function mxTemporaryCellStates(a, b, c) { - this.view = a; - b = null != b ? b : 1; - this.oldBounds = a.getGraphBounds(); - this.oldStates = a.getStates(); - this.oldScale = a.getScale(); - a.setStates(new mxDictionary); - a.setScale(b); - if (null != c) { - b = a.createState(new mxCell); - for (var d = 0; d < c.length; d++) a.validateBounds(b, c[d]); - for (var e = null, d = 0; d < c.length; d++) { - var f = a.validatePoints(b, c[d]); - null == e ? e = f : e.add(f) - } - null == e && (e = new mxRectangle); - a.setGraphBounds(e) - } -} -mxTemporaryCellStates.prototype.view = null; -mxTemporaryCellStates.prototype.oldStates = null; -mxTemporaryCellStates.prototype.oldBounds = null; -mxTemporaryCellStates.prototype.oldScale = null; -mxTemporaryCellStates.prototype.destroy = function() { - this.view.setScale(this.oldScale); - this.view.setStates(this.oldStates); - this.view.setGraphBounds(this.oldBounds) -}; - -function mxCellStatePreview(a) { - this.graph = a; - this.deltas = {} -} -mxCellStatePreview.prototype.graph = null; -mxCellStatePreview.prototype.deltas = null; -mxCellStatePreview.prototype.count = 0; -mxCellStatePreview.prototype.isEmpty = function() { - return 0 == this.count -}; -mxCellStatePreview.prototype.moveState = function(a, b, c, d, e) { - d = null != d ? d : !0; - e = null != e ? e : !0; - var f = mxCellPath.create(a.cell), - g = this.deltas[f]; - null == g ? (g = new mxPoint(b, c), this.deltas[f] = g, this.count++) : d ? (g.X += b, g.Y += c) : (g.X = b, g.Y = c); - e && this.addEdges(a); - return g -}; -mxCellStatePreview.prototype.show = function(a) { - var b = this.graph.getModel(), - c = b.getRoot(), - d; - for (d in this.deltas) { - var e = mxCellPath.resolve(c, d), - f = this.graph.view.getState(e), - g = this.deltas[d], - e = this.graph.view.getState(b.getParent(e)); - this.translateState(e, f, g.x, g.y) - } - for (d in this.deltas) e = mxCellPath.resolve(c, d), f = this.graph.view.getState(e), g = this.deltas[d], e = this.graph.view.getState(b.getParent(e)), this.revalidateState(e, f, g.x, g.y, a) -}; -mxCellStatePreview.prototype.translateState = function(a, b, c, d) { - if (null != b) { - var e = this.graph.getModel(); - if (e.isVertex(b.cell)) { - b.invalid = !0; - this.graph.view.validateBounds(a, b.cell); - a = e.getGeometry(b.cell); - var f = mxCellPath.create(b.cell); - if ((0 != c || 0 != d) && null != a && (!a.relative || null != this.deltas[f])) b.x += c, b.y += d - } - a = e.getChildCount(b.cell); - for (f = 0; f < a; f++) this.translateState(b, this.graph.view.getState(e.getChildAt(b.cell, f)), c, d) - } -}; -mxCellStatePreview.prototype.revalidateState = function(a, b, c, d, e) { - if (null != b) { - b.invalid = !0; - this.graph.view.validatePoints(a, b.cell); - var f = mxCellPath.create(b.cell), - g = this.graph.getModel(), - h = this.graph.getCellGeometry(b.cell); - if ((0 != c || 0 != d) && null != h && h.relative && g.isVertex(b.cell) && (null == a || g.isVertex(a.cell) || null != this.deltas[f])) b.x += c, b.y += d, this.graph.cellRenderer.redraw(b); - null != e && e(b); - a = g.getChildCount(b.cell); - for (f = 0; f < a; f++) this.revalidateState(b, this.graph.view.getState(g.getChildAt(b.cell, - f)), c, d, e) - } -}; -mxCellStatePreview.prototype.addEdges = function(a) { - for (var b = this.graph.getModel(), c = b.getEdgeCount(a.cell), d = 0; d < c; d++) { - var e = this.graph.view.getState(b.getEdgeAt(a.cell, d)); - null != e && this.moveState(e, 0, 0) - } -}; - -function mxConnectionConstraint(a, b) { - this.point = a; - this.perimeter = null != b ? b : !0 -} -mxConnectionConstraint.prototype.point = null; -mxConnectionConstraint.prototype.perimeter = null; - -function mxGraphHandler(a) { - this.graph = a; - this.graph.addMouseListener(this); - this.panHandler = mxUtils.bind(this, function() { - this.updatePreviewShape() - }); - this.graph.addListener(mxEvent.PAN, this.panHandler) -} -mxGraphHandler.prototype.graph = null; -mxGraphHandler.prototype.maxCells = mxClient.IS_IE ? 20 : 50; -mxGraphHandler.prototype.enabled = !0; -mxGraphHandler.prototype.highlightEnabled = !0; -mxGraphHandler.prototype.cloneEnabled = !0; -mxGraphHandler.prototype.moveEnabled = !0; -mxGraphHandler.prototype.guidesEnabled = !1; -mxGraphHandler.prototype.guide = null; -mxGraphHandler.prototype.currentDx = null; -mxGraphHandler.prototype.currentDy = null; -mxGraphHandler.prototype.updateCursor = !0; -mxGraphHandler.prototype.selectEnabled = !0; -mxGraphHandler.prototype.removeCellsFromParent = !0; -mxGraphHandler.prototype.connectOnDrop = !1; -mxGraphHandler.prototype.scrollOnMove = !0; -mxGraphHandler.prototype.minimumSize = 6; -mxGraphHandler.prototype.previewColor = "black"; -mxGraphHandler.prototype.htmlPreview = !1; -mxGraphHandler.prototype.shape = null; -mxGraphHandler.prototype.scaleGrid = !1; -mxGraphHandler.prototype.rotationEnabled = !0; -mxGraphHandler.prototype.isEnabled = function() { - return this.enabled -}; -mxGraphHandler.prototype.setEnabled = function(a) { - this.enabled = a -}; -mxGraphHandler.prototype.isCloneEnabled = function() { - return this.cloneEnabled -}; -mxGraphHandler.prototype.setCloneEnabled = function(a) { - this.cloneEnabled = a -}; -mxGraphHandler.prototype.isMoveEnabled = function() { - return this.moveEnabled -}; -mxGraphHandler.prototype.setMoveEnabled = function(a) { - this.moveEnabled = a -}; -mxGraphHandler.prototype.isSelectEnabled = function() { - return this.selectEnabled -}; -mxGraphHandler.prototype.setSelectEnabled = function(a) { - this.selectEnabled = a -}; -mxGraphHandler.prototype.isRemoveCellsFromParent = function() { - return this.removeCellsFromParent -}; -mxGraphHandler.prototype.setRemoveCellsFromParent = function(a) { - this.removeCellsFromParent = a -}; -mxGraphHandler.prototype.getInitialCellForEvent = function(a) { - return a.getCell() -}; -mxGraphHandler.prototype.isDelayedSelection = function(a) { - return this.graph.isCellSelected(a) -}; -mxGraphHandler.prototype.mouseDown = function(a, b) { - if (!b.isConsumed() && this.isEnabled() && this.graph.isEnabled() && !this.graph.isForceMarqueeEvent(b.getEvent()) && null != b.getState()) { - var c = this.getInitialCellForEvent(b); - this.cell = null; - this.delayedSelection = this.isDelayedSelection(c); - this.isSelectEnabled() && !this.delayedSelection && this.graph.selectCellForEvent(c, b.getEvent()); - if (this.isMoveEnabled()) { - var d = this.graph.model, - e = d.getGeometry(c); - this.graph.isCellMovable(c) && (!d.isEdge(c) || 1 < this.graph.getSelectionCount() || - null != e.points && 0 < e.points.length || null == d.getTerminal(c, !0) || null == d.getTerminal(c, !1) || this.graph.allowDanglingEdges || this.graph.isCloneEvent(b.getEvent()) && this.graph - .isCellsCloneable()) && this.start(c, b.getX(), b.getY()); - this.cellWasClicked = !0; - !mxClient.IS_SF && !mxClient.IS_GC || "SELECT" != b.getSource().nodeName ? b.consume() : mxClient.IS_SF && "SELECT" == b.getSource().nodeName && (this.cellWasClicked = !1, this.first = null) - } - } -}; -mxGraphHandler.prototype.getGuideStates = function() { - var a = this.graph.getDefaultParent(), - b = this.graph.getModel(), - c = mxUtils.bind(this, function(a) { - return null != this.graph.view.getState(a) && b.isVertex(a) && null != b.getGeometry(a) && !b.getGeometry(a).relative - }); - return this.graph.view.getCellStates(b.filterDescendants(c, a)) -}; -mxGraphHandler.prototype.getCells = function(a) { - return !this.delayedSelection && this.graph.isCellMovable(a) ? [a] : this.graph.getMovableCells(this.graph.getSelectionCells()) -}; -mxGraphHandler.prototype.getPreviewBounds = function(a) { - a = this.getBoundingBox(a); - null != a && (a.grow(-1, -1), a.width < this.minimumSize && (a.x -= (this.minimumSize - a.width) / 2, a.width = this.minimumSize), a.height < this.minimumSize && (a.y -= (this.minimumSize - a.height) / - 2, a.height = this.minimumSize)); - return a -}; -mxGraphHandler.prototype.getBoundingBox = function(a) { - var b = null; - if (null != a && 0 < a.length) - for (var c = this.graph.getModel(), d = 0; d < a.length; d++) - if (c.isVertex(a[d]) || c.isEdge(a[d])) { - var e = this.graph.view.getState(a[d]); - if (null != e) { - var f = e; - c.isVertex(a[d]) && (null != e.shape && null != e.shape.boundingBox) && (f = e.shape.boundingBox); - null == b ? b = new mxRectangle(f.x, f.y, f.width, f.height) : b.add(f) - } - } - return b -}; -mxGraphHandler.prototype.createPreviewShape = function(a) { - a = new mxRectangleShape(a, null, this.previewColor); - a.isDashed = !0; - this.htmlPreview ? (a.dialect = mxConstants.DIALECT_STRICTHTML, a.init(this.graph.container)) : (a.dialect = this.graph.dialect != mxConstants.DIALECT_SVG ? mxConstants.DIALECT_VML : mxConstants.DIALECT_SVG, - a.init(this.graph.getView().getOverlayPane()), a.pointerEvents = !1); - return a -}; -mxGraphHandler.prototype.start = function(a, b, c) { - this.cell = a; - this.first = mxUtils.convertPoint(this.graph.container, b, c); - this.cells = this.getCells(this.cell); - this.bounds = this.graph.getView().getBounds(this.cells); - this.pBounds = this.getPreviewBounds(this.cells); - this.guidesEnabled && (this.guide = new mxGuide(this.graph, this.getGuideStates())) -}; -mxGraphHandler.prototype.useGuidesForEvent = function(a) { - return null != this.guide ? this.guide.isEnabledForEvent(a.getEvent()) : !0 -}; -mxGraphHandler.prototype.snap = function(a) { - var b = this.scaleGrid ? this.graph.view.scale : 1; - a.x = this.graph.snap(a.x / b) * b; - a.y = this.graph.snap(a.y / b) * b; - return a -}; -mxGraphHandler.prototype.mouseMove = function(a, b) { - var c = this.graph; - if (!b.isConsumed() && c.isMouseDown && null != this.cell && null != this.first && null != this.bounds) { - var d = mxUtils.convertPoint(c.container, b.getX(), b.getY()), - e = d.x - this.first.x, - f = d.y - this.first.y, - d = c.tolerance; - if (null != this.shape || Math.abs(e) > d || Math.abs(f) > d) { - null == this.highlight && (this.highlight = new mxCellHighlight(this.graph, mxConstants.DROP_TARGET_COLOR, 3)); - null == this.shape && (this.shape = this.createPreviewShape(this.bounds)); - var g = c.isGridEnabledEvent(b.getEvent()), - d = !0; - if (null != this.guide && this.useGuidesForEvent(b)) f = this.guide.move(this.bounds, new mxPoint(e, f), g), d = !1, e = f.x, f = f.y; - else if (g) var h = c.getView().translate, - k = c.getView().scale, - g = this.bounds.x - (c.snap(this.bounds.x / k - h.x) + h.x) * k, - h = this.bounds.y - (c.snap(this.bounds.y / k - h.y) + h.y) * k, - f = this.snap(new mxPoint(e, f)), - e = f.x - g, - f = f.y - h; - null != this.guide && d && this.guide.hide(); - c.isConstrainedEvent(b.getEvent()) && (Math.abs(e) > Math.abs(f) ? f = 0 : e = 0); - this.currentDx = e; - this.currentDy = f; - this.updatePreviewShape(); - d = null; - f = b.getCell(); - c.isDropEnabled() && this.highlightEnabled && (d = c.getDropTarget(this.cells, b.getEvent(), f)); - g = d; - for (h = c.getModel(); null != g && g != this.cells[0];) g = h.getParent(g); - var k = c.isCloneEvent(b.getEvent()) && c.isCellsCloneable() && this.isCloneEnabled(), - e = c.getView().getState(d), - l = !1; - null != e && null == g && (h.getParent(this.cell) != d || k) ? (this.target != d && (this.target = d, this.setHighlightColor(mxConstants.DROP_TARGET_COLOR)), l = !0) : (this.target = null, - this.connectOnDrop && (null != f && 1 == this.cells.length && c.getModel().isVertex(f) && - c.isCellConnectable(f)) && (e = c.getView().getState(f), null != e && (c = null == c.getEdgeValidationError(null, this.cell, f) ? mxConstants.VALID_COLOR : mxConstants.INVALID_CONNECT_TARGET_COLOR, - this.setHighlightColor(c), l = !0))); - null != e && l ? this.highlight.highlight(e) : this.highlight.hide() - } - b.consume(); - mxEvent.consume(b.getEvent()) - } else if ((this.isMoveEnabled() || this.isCloneEnabled()) && this.updateCursor && !b.isConsumed() && null != b.getState() && !c.isMouseDown) e = c.getCursorForCell(b.getCell()), null == e && (c.isEnabled() && - c.isCellMovable(b.getCell())) && - (e = c.getModel().isEdge(b.getCell()) ? mxConstants.CURSOR_MOVABLE_EDGE : mxConstants.CURSOR_MOVABLE_VERTEX), b.getState().setCursor(e), b.consume() -}; -mxGraphHandler.prototype.updatePreviewShape = function() { - null != this.shape && (this.shape.bounds = new mxRectangle(Math.round(this.pBounds.x + this.currentDx - this.graph.panDx), Math.round(this.pBounds.y + this.currentDy - this.graph.panDy), this.pBounds - .width, this.pBounds.height), this.shape.redraw()) -}; -mxGraphHandler.prototype.setHighlightColor = function(a) { - null != this.highlight && this.highlight.setHighlightColor(a) -}; -mxGraphHandler.prototype.mouseUp = function(a, b) { - if (!b.isConsumed()) { - var c = this.graph; - if (null != this.cell && null != this.first && null != this.shape && null != this.currentDx && null != this.currentDy) { - var d = c.getView().scale, - e = c.isCloneEvent(b.getEvent()) && c.isCellsCloneable() && this.isCloneEnabled(), - f = this.currentDx / d, - d = this.currentDy / d, - g = b.getCell(); - this.connectOnDrop && null == this.target && null != g && c.getModel().isVertex(g) && c.isCellConnectable(g) && c.isEdgeValid(null, this.cell, g) ? c.connectionHandler.connect(this.cell, - g, b.getEvent()) : (g = this.target, c.isSplitEnabled() && c.isSplitTarget(g, this.cells, b.getEvent()) ? c.splitEdge(g, this.cells, null, f, d) : this.moveCells(this.cells, f, d, e, this - .target, b.getEvent())) - } else this.isSelectEnabled() && (this.delayedSelection && null != this.cell) && this.selectDelayed(b) - } - this.cellWasClicked && b.consume(); - this.reset() -}; -mxGraphHandler.prototype.selectDelayed = function(a) { - this.graph.selectCellForEvent(this.cell, a.getEvent()) -}; -mxGraphHandler.prototype.reset = function() { - this.destroyShapes(); - this.delayedSelection = this.cellWasClicked = !1; - this.target = this.cell = this.first = this.guides = this.currentDy = this.currentDx = null -}; -mxGraphHandler.prototype.shouldRemoveCellsFromParent = function(a, b, c) { - if (this.graph.getModel().isVertex(a)) { - a = this.graph.getView().getState(a); - c = mxUtils.convertPoint(this.graph.container, mxEvent.getClientX(c), mxEvent.getClientY(c)); - var d = mxUtils.toRadians(mxUtils.getValue(a.style, mxConstants.STYLE_ROTATION) || 0); - if (0 != d) { - b = Math.cos(-d); - var d = Math.sin(-d), - e = new mxPoint(a.getCenterX(), a.getCenterY()); - c = mxUtils.getRotatedPoint(c, b, d, e) - } - return null != a && !mxUtils.contains(a, c.x, c.y) - } - return !1 -}; -mxGraphHandler.prototype.moveCells = function(a, b, c, d, e, f) { - d && (a = this.graph.getCloneableCells(a)); - null == e && (this.isRemoveCellsFromParent() && this.shouldRemoveCellsFromParent(this.graph.getModel().getParent(this.cell), a, f)) && (e = this.graph.getDefaultParent()); - a = this.graph.moveCells(a, b - this.graph.panDx / this.graph.view.scale, c - this.graph.panDy / this.graph.view.scale, d, e, f); - this.isSelectEnabled() && this.scrollOnMove && this.graph.scrollCellToVisible(a[0]); - d && this.graph.setSelectionCells(a) -}; -mxGraphHandler.prototype.destroyShapes = function() { - null != this.shape && (this.shape.destroy(), this.shape = null); - null != this.guide && (this.guide.destroy(), this.guide = null); - null != this.highlight && (this.highlight.destroy(), this.highlight = null) -}; -mxGraphHandler.prototype.destroy = function() { - this.graph.removeMouseListener(this); - this.graph.removeListener(this.panHandler); - this.destroyShapes() -}; - -function mxPanningHandler(a, b) { - null != a && (this.graph = a, this.factoryMethod = b, this.graph.addMouseListener(this), this.init()) -} -mxPanningHandler.prototype = new mxPopupMenu; -mxPanningHandler.prototype.constructor = mxPanningHandler; -mxPanningHandler.prototype.graph = null; -mxPanningHandler.prototype.triggerX = null; -mxPanningHandler.prototype.triggerY = null; -mxPanningHandler.prototype.usePopupTrigger = !0; -mxPanningHandler.prototype.useLeftButtonForPanning = !1; -mxPanningHandler.prototype.selectOnPopup = !0; -mxPanningHandler.prototype.clearSelectionOnBackground = !0; -mxPanningHandler.prototype.ignoreCell = !1; -mxPanningHandler.prototype.previewEnabled = !0; -mxPanningHandler.prototype.useGrid = !1; -mxPanningHandler.prototype.panningEnabled = !0; -mxPanningHandler.prototype.isPanningEnabled = function() { - return this.panningEnabled -}; -mxPanningHandler.prototype.setPanningEnabled = function(a) { - this.panningEnabled = a -}; -mxPanningHandler.prototype.init = function() { - mxPopupMenu.prototype.init.apply(this); - mxEvent.addListener(this.div, mxClient.IS_TOUCH ? "touchmove" : "mousemove", mxUtils.bind(this, function(a) { - this.graph.tooltipHandler.hide() - })) -}; -mxPanningHandler.prototype.isPanningTrigger = function(a) { - var b = a.getEvent(); - return this.useLeftButtonForPanning && (this.ignoreCell || null == a.getState()) && mxEvent.isLeftMouseButton(b) || mxEvent.isControlDown(b) && mxEvent.isShiftDown(b) || this.usePopupTrigger && - mxEvent.isPopupTrigger(b) -}; -mxPanningHandler.prototype.mouseDown = function(a, b) { - if (!b.isConsumed() && this.isEnabled()) { - this.hideMenu(); - this.dx0 = -this.graph.container.scrollLeft; - this.dy0 = -this.graph.container.scrollTop; - var c = mxUtils.convertPoint(this.graph.container, b.getX(), b.getY()); - this.triggerX = c.x; - this.triggerY = c.y; - this.popupTrigger = this.isPopupTrigger(b); - this.panningTrigger = this.isPanningEnabled() && this.isPanningTrigger(b); - this.startX = b.getX(); - this.startY = b.getY(); - this.panningTrigger && this.consumePanningTrigger(b) - } -}; -mxPanningHandler.prototype.consumePanningTrigger = function(a) { - a.consume() -}; -mxPanningHandler.prototype.mouseMove = function(a, b) { - var c = b.getX() - this.startX, - d = b.getY() - this.startY; - if (this.active) this.previewEnabled && (this.useGrid && (c = this.graph.snap(c), d = this.graph.snap(d)), this.graph.panGraph(c + this.dx0, d + this.dy0)), this.fireEvent(new mxEventObject( - mxEvent.PAN, "event", b)), b.consume(); - else if (this.panningTrigger) { - var e = this.active; - this.active = Math.abs(c) > this.graph.tolerance || Math.abs(d) > this.graph.tolerance; - !e && this.active && this.fireEvent(new mxEventObject(mxEvent.PAN_START, - "event", b)) - } -}; -mxPanningHandler.prototype.mouseUp = function(a, b) { - var c = Math.abs(b.getX() - this.startX), - d = Math.abs(b.getY() - this.startY); - if (this.active) { - if (!this.graph.useScrollbarsForPanning || !mxUtils.hasScrollbars(this.graph.container)) { - c = b.getX() - this.startX; - d = b.getY() - this.startY; - this.useGrid && (c = this.graph.snap(c), d = this.graph.snap(d)); - var e = this.graph.getView().scale, - f = this.graph.getView().translate; - this.graph.panGraph(0, 0); - this.panGraph(f.x + c / e, f.y + d / e) - } - this.active = !1; - this.fireEvent(new mxEventObject(mxEvent.PAN_END, "event", - b)); - b.consume() - } else this.popupTrigger && (c < this.graph.tolerance && d < this.graph.tolerance) && (c = this.getCellForPopupEvent(b), this.graph.isEnabled() && this.selectOnPopup && null != c && !this.graph.isCellSelected( - c) ? this.graph.setSelectionCell(c) : this.clearSelectionOnBackground && null == c && this.graph.clearSelection(), this.graph.tooltipHandler.hide(), d = mxUtils.getScrollOrigin(), d = new mxPoint( - b.getX() + d.x, b.getY() + d.y), this.popup(d.x + 1, d.y + 1, c, b.getEvent()), b.consume()); - this.popupTrigger = this.panningTrigger = !1 -}; -mxPanningHandler.prototype.getCellForPopupEvent = function(a) { - return a.getCell() -}; -mxPanningHandler.prototype.panGraph = function(a, b) { - this.graph.getView().setTranslate(a, b) -}; -mxPanningHandler.prototype.destroy = function() { - this.graph.removeMouseListener(this); - mxPopupMenu.prototype.destroy.apply(this) -}; - -function mxCellMarker(a, b, c, d) { - mxEventSource.call(this); - null != a && (this.graph = a, this.validColor = null != b ? b : mxConstants.DEFAULT_VALID_COLOR, this.invalidColor = null != b ? c : mxConstants.DEFAULT_INVALID_COLOR, this.hotspot = null != d ? d : - mxConstants.DEFAULT_HOTSPOT, this.highlight = new mxCellHighlight(a)) -} -mxUtils.extend(mxCellMarker, mxEventSource); -mxCellMarker.prototype.graph = null; -mxCellMarker.prototype.enabled = !0; -mxCellMarker.prototype.hotspot = mxConstants.DEFAULT_HOTSPOT; -mxCellMarker.prototype.hotspotEnabled = !1; -mxCellMarker.prototype.validColor = null; -mxCellMarker.prototype.invalidColor = null; -mxCellMarker.prototype.currentColor = null; -mxCellMarker.prototype.validState = null; -mxCellMarker.prototype.markedState = null; -mxCellMarker.prototype.setEnabled = function(a) { - this.enabled = a -}; -mxCellMarker.prototype.isEnabled = function() { - return this.enabled -}; -mxCellMarker.prototype.setHotspot = function(a) { - this.hotspot = a -}; -mxCellMarker.prototype.getHotspot = function() { - return this.hotspot -}; -mxCellMarker.prototype.setHotspotEnabled = function(a) { - this.hotspotEnabled = a -}; -mxCellMarker.prototype.isHotspotEnabled = function() { - return this.hotspotEnabled -}; -mxCellMarker.prototype.hasValidState = function() { - return null != this.validState -}; -mxCellMarker.prototype.getValidState = function() { - return this.validState -}; -mxCellMarker.prototype.getMarkedState = function() { - return this.markedState -}; -mxCellMarker.prototype.reset = function() { - this.validState = null; - null != this.markedState && (this.markedState = null, this.unmark()) -}; -mxCellMarker.prototype.process = function(a) { - var b = null; - if (this.isEnabled()) { - var b = this.getState(a), - c = null != b ? this.isValidState(b) : !1; - a = this.getMarkerColor(a.getEvent(), b, c); - this.validState = c ? b : null; - if (b != this.markedState || a != this.currentColor) this.currentColor = a, null != b && null != this.currentColor ? (this.markedState = b, this.mark()) : null != this.markedState && (this.markedState = - null, this.unmark()) - } - return b -}; -mxCellMarker.prototype.markCell = function(a, b) { - var c = this.graph.getView().getState(a); - null != c && (this.currentColor = null != b ? b : this.validColor, this.markedState = c, this.mark()) -}; -mxCellMarker.prototype.mark = function() { - this.highlight.setHighlightColor(this.currentColor); - this.highlight.highlight(this.markedState); - this.fireEvent(new mxEventObject(mxEvent.MARK, "state", this.markedState)) -}; -mxCellMarker.prototype.unmark = function() { - this.mark() -}; -mxCellMarker.prototype.isValidState = function(a) { - return !0 -}; -mxCellMarker.prototype.getMarkerColor = function(a, b, c) { - return c ? this.validColor : this.invalidColor -}; -mxCellMarker.prototype.getState = function(a) { - var b = this.graph.getView(); - cell = this.getCell(a); - b = this.getStateToMark(b.getState(cell)); - return null != b && this.intersects(b, a) ? b : null -}; -mxCellMarker.prototype.getCell = function(a) { - return a.getCell() -}; -mxCellMarker.prototype.getStateToMark = function(a) { - return a -}; -mxCellMarker.prototype.intersects = function(a, b) { - return this.hotspotEnabled ? mxUtils.intersectsHotspot(a, b.getGraphX(), b.getGraphY(), this.hotspot, mxConstants.MIN_HOTSPOT_SIZE, mxConstants.MAX_HOTSPOT_SIZE) : !0 -}; -mxCellMarker.prototype.destroy = function() { - this.graph.getView().removeListener(this.resetHandler); - this.graph.getModel().removeListener(this.resetHandler); - this.highlight.destroy() -}; - -function mxSelectionCellsHandler(a) { - mxEventSource.call(this); - this.graph = a; - this.handlers = new mxDictionary; - this.graph.addMouseListener(this); - this.refreshHandler = mxUtils.bind(this, function(a, c) { - this.isEnabled() && this.refresh() - }); - this.graph.getSelectionModel().addListener(mxEvent.CHANGE, this.refreshHandler); - this.graph.getModel().addListener(mxEvent.CHANGE, this.refreshHandler); - this.graph.getView().addListener(mxEvent.SCALE, this.refreshHandler); - this.graph.getView().addListener(mxEvent.TRANSLATE, this.refreshHandler); - this.graph.getView().addListener(mxEvent.SCALE_AND_TRANSLATE, this.refreshHandler); - this.graph.getView().addListener(mxEvent.DOWN, this.refreshHandler); - this.graph.getView().addListener(mxEvent.UP, this.refreshHandler) -} -mxUtils.extend(mxSelectionCellsHandler, mxEventSource); -mxSelectionCellsHandler.prototype.graph = null; -mxSelectionCellsHandler.prototype.enabled = !0; -mxSelectionCellsHandler.prototype.refreshHandler = null; -mxSelectionCellsHandler.prototype.maxHandlers = 100; -mxSelectionCellsHandler.prototype.handlers = null; -mxSelectionCellsHandler.prototype.isEnabled = function() { - return this.enabled -}; -mxSelectionCellsHandler.prototype.setEnabled = function(a) { - this.enabled = a -}; -mxSelectionCellsHandler.prototype.getHandler = function(a) { - return this.handlers.get(a) -}; -mxSelectionCellsHandler.prototype.reset = function() { - this.handlers.visit(function(a, b) { - b.reset.apply(b) - }) -}; -mxSelectionCellsHandler.prototype.refresh = function() { - var a = this.handlers; - this.handlers = new mxDictionary; - for (var b = this.graph.getSelectionCells(), c = 0; c < b.length; c++) { - var d = this.graph.view.getState(b[c]); - if (null != d) { - var e = a.remove(b[c]); - null != e && (e.state != d ? (e.destroy(), e = null) : e.redraw()); - null == e && (e = this.graph.createHandler(d), this.fireEvent(new mxEventObject(mxEvent.ADD, "state", d))); - null != e && this.handlers.put(b[c], e) - } - } - a.visit(mxUtils.bind(this, function(a, b) { - this.fireEvent(new mxEventObject(mxEvent.REMOVE, - "state", b.state)); - b.destroy() - })) -}; -mxSelectionCellsHandler.prototype.mouseDown = function(a, b) { - if (this.graph.isEnabled() && this.isEnabled()) { - var c = [a, b]; - this.handlers.visit(function(a, b) { - b.mouseDown.apply(b, c) - }) - } -}; -mxSelectionCellsHandler.prototype.mouseMove = function(a, b) { - if (this.graph.isEnabled() && this.isEnabled()) { - var c = [a, b]; - this.handlers.visit(function(a, b) { - b.mouseMove.apply(b, c) - }) - } -}; -mxSelectionCellsHandler.prototype.mouseUp = function(a, b) { - if (this.graph.isEnabled() && this.isEnabled()) { - var c = [a, b]; - this.handlers.visit(function(a, b) { - b.mouseUp.apply(b, c) - }) - } -}; -mxSelectionCellsHandler.prototype.destroy = function() { - this.graph.removeMouseListener(this); - null != this.refreshHandler && (this.graph.getSelectionModel().removeListener(this.refreshHandler), this.graph.getModel().removeListener(this.refreshHandler), this.graph.getView().removeListener( - this.refreshHandler), this.refreshHandler = null) -}; - -function mxConnectionHandler(a, b) { - mxEventSource.call(this); - null != a && (this.graph = a, this.factoryMethod = b, this.init()) -} -mxUtils.extend(mxConnectionHandler, mxEventSource); -mxConnectionHandler.prototype.graph = null; -mxConnectionHandler.prototype.factoryMethod = !0; -mxConnectionHandler.prototype.moveIconFront = !1; -mxConnectionHandler.prototype.moveIconBack = !1; -mxConnectionHandler.prototype.connectImage = null; -mxConnectionHandler.prototype.targetConnectImage = !1; -mxConnectionHandler.prototype.enabled = !0; -mxConnectionHandler.prototype.select = !0; -mxConnectionHandler.prototype.createTarget = !1; -mxConnectionHandler.prototype.marker = null; -mxConnectionHandler.prototype.constraintHandler = null; -mxConnectionHandler.prototype.error = null; -mxConnectionHandler.prototype.waypointsEnabled = !1; -mxConnectionHandler.prototype.tapAndHoldEnabled = !0; -mxConnectionHandler.prototype.tapAndHoldDelay = 500; -mxConnectionHandler.prototype.tapAndHoldInProgress = !1; -mxConnectionHandler.prototype.tapAndHoldValid = !1; -mxConnectionHandler.prototype.tapAndHoldTolerance = 4; -mxConnectionHandler.prototype.initialTouchX = 0; -mxConnectionHandler.prototype.initialTouchY = 0; -mxConnectionHandler.prototype.ignoreMouseDown = !1; -mxConnectionHandler.prototype.first = null; -mxConnectionHandler.prototype.connectIconOffset = new mxPoint(0, mxConstants.TOOLTIP_VERTICAL_OFFSET); -mxConnectionHandler.prototype.edgeState = null; -mxConnectionHandler.prototype.changeHandler = null; -mxConnectionHandler.prototype.drillHandler = null; -mxConnectionHandler.prototype.mouseDownCounter = 0; -mxConnectionHandler.prototype.movePreviewAway = mxClient.IS_VML; -mxConnectionHandler.prototype.isEnabled = function() { - return this.enabled -}; -mxConnectionHandler.prototype.setEnabled = function(a) { - this.enabled = a -}; -mxConnectionHandler.prototype.isCreateTarget = function() { - return this.createTarget -}; -mxConnectionHandler.prototype.setCreateTarget = function(a) { - this.createTarget = a -}; -mxConnectionHandler.prototype.createShape = function() { - var a = new mxPolyline([], mxConstants.INVALID_COLOR); - a.dialect = this.graph.dialect != mxConstants.DIALECT_SVG ? mxConstants.DIALECT_VML : mxConstants.DIALECT_SVG; - a.init(this.graph.getView().getOverlayPane()); - a.svgStrokeTolerance = 0; - a.pointerEvents = !1; - a.isDashed = !0; - if (this.graph.dialect == mxConstants.DIALECT_SVG) a.node.setAttribute("pointer-events", "none"); - else { - var b = mxUtils.bind(this, function(a) { - a = mxUtils.convertPoint(this.graph.container, mxEvent.getClientX(a), - mxEvent.getClientY(a)); - return this.graph.view.getState(this.graph.getCellAt(a.x, a.y)) - }); - mxEvent.redirectMouseEvents(a.node, this.graph, b) - } - return a -}; -mxConnectionHandler.prototype.init = function() { - this.graph.addMouseListener(this); - this.marker = this.createMarker(); - this.constraintHandler = new mxConstraintHandler(this.graph); - this.changeHandler = mxUtils.bind(this, function(a) { - null != this.iconState && (this.iconState = this.graph.getView().getState(this.iconState.cell)); - null != this.iconState ? this.redrawIcons(this.icons, this.iconState) : (this.destroyIcons(this.icons), this.previous = null); - this.constraintHandler.reset() - }); - this.graph.getModel().addListener(mxEvent.CHANGE, - this.changeHandler); - this.graph.getView().addListener(mxEvent.SCALE, this.changeHandler); - this.graph.getView().addListener(mxEvent.TRANSLATE, this.changeHandler); - this.graph.getView().addListener(mxEvent.SCALE_AND_TRANSLATE, this.changeHandler); - this.drillHandler = mxUtils.bind(this, function(a) { - this.destroyIcons(this.icons) - }); - this.graph.addListener(mxEvent.START_EDITING, this.drillHandler); - this.graph.getView().addListener(mxEvent.DOWN, this.drillHandler); - this.graph.getView().addListener(mxEvent.UP, this.drillHandler) -}; -mxConnectionHandler.prototype.isConnectableCell = function(a) { - return !0 -}; -mxConnectionHandler.prototype.createMarker = function() { - var a = new mxCellMarker(this.graph); - a.hotspotEnabled = !0; - a.getCell = mxUtils.bind(this, function(b, c) { - c = mxCellMarker.prototype.getCell.apply(a, arguments); - this.error = null; - if (!this.isConnectableCell(c)) return null; - null != c ? this.isConnecting() ? null != this.previous && (this.error = this.validateConnection(this.previous.cell, c), null != this.error && 0 == this.error.length && (c = null, this.isCreateTarget() && - (this.error = null))) : this.isValidSource(c) || (c = null) : this.isConnecting() && - (!this.isCreateTarget() && !this.graph.allowDanglingEdges) && (this.error = ""); - return c - }); - a.isValidState = mxUtils.bind(this, function(b) { - return this.isConnecting() ? null == this.error : mxCellMarker.prototype.isValidState.apply(a, arguments) - }); - a.getMarkerColor = mxUtils.bind(this, function(b, c, d) { - return null == this.connectImage || this.isConnecting() ? mxCellMarker.prototype.getMarkerColor.apply(a, arguments) : null - }); - a.intersects = mxUtils.bind(this, function(b, c) { - return null != this.connectImage || this.isConnecting() ? !0 : mxCellMarker.prototype.intersects.apply(a, - arguments) - }); - return a -}; -mxConnectionHandler.prototype.start = function(a, b, c, d) { - this.previous = a; - this.first = new mxPoint(b, c); - this.edgeState = null != d ? d : this.createEdgeState(null); - this.marker.currentColor = this.marker.validColor; - this.marker.markedState = a; - this.marker.mark(); - this.fireEvent(new mxEventObject(mxEvent.START, "state", this.previous)) -}; -mxConnectionHandler.prototype.isConnecting = function() { - return null != this.first && null != this.shape -}; -mxConnectionHandler.prototype.isValidSource = function(a) { - return this.graph.isValidSource(a) -}; -mxConnectionHandler.prototype.isValidTarget = function(a) { - return !0 -}; -mxConnectionHandler.prototype.validateConnection = function(a, b) { - return !this.isValidTarget(b) ? "" : this.graph.getEdgeValidationError(null, a, b) -}; -mxConnectionHandler.prototype.getConnectImage = function(a) { - return this.connectImage -}; -mxConnectionHandler.prototype.isMoveIconToFrontForState = function(a) { - return null != a.text && a.text.node.parentNode == this.graph.container ? !0 : this.moveIconFront -}; -mxConnectionHandler.prototype.createIcons = function(a) { - var b = this.getConnectImage(a); - if (null != b && null != a) { - this.iconState = a; - var c = [], - d = new mxRectangle(0, 0, b.width, b.height), - e = new mxImageShape(d, b.src, null, null, 0); - e.preserveImageAspect = !1; - this.isMoveIconToFrontForState(a) ? (e.dialect = mxConstants.DIALECT_STRICTHTML, e.init(this.graph.container)) : (e.dialect = this.graph.dialect == mxConstants.DIALECT_SVG ? mxConstants.DIALECT_SVG : - mxConstants.DIALECT_VML, e.init(this.graph.getView().getOverlayPane()), this.moveIconBack && - null != e.node.previousSibling && e.node.parentNode.insertBefore(e.node, e.node.parentNode.firstChild)); - e.node.style.cursor = mxConstants.CURSOR_CONNECT; - var f = mxUtils.bind(this, function() { - return null != this.currentState ? this.currentState : a - }), - b = mxUtils.bind(this, function(a) { - mxEvent.isConsumed(a) || (this.icon = e, this.graph.fireMouseEvent(mxEvent.MOUSE_DOWN, new mxMouseEvent(a, f()))) - }); - mxEvent.redirectMouseEvents(e.node, this.graph, f, b); - c.push(e); - this.redrawIcons(c, this.iconState); - return c - } - return null -}; -mxConnectionHandler.prototype.redrawIcons = function(a, b) { - if (null != a && null != a[0] && null != b) { - var c = this.getIconPosition(a[0], b); - a[0].bounds.x = c.x; - a[0].bounds.y = c.y; - a[0].redraw() - } -}; -mxConnectionHandler.prototype.getIconPosition = function(a, b) { - var c = this.graph.getView().scale, - d = b.getCenterX(), - e = b.getCenterY(); - if (this.graph.isSwimlane(b.cell)) { - var f = this.graph.getStartSize(b.cell), - d = 0 != f.width ? b.x + f.width * c / 2 : d, - e = 0 != f.height ? b.y + f.height * c / 2 : e, - f = mxUtils.toRadians(mxUtils.getValue(b.style, mxConstants.STYLE_ROTATION) || 0); - if (0 != f) var c = Math.cos(f), - f = Math.sin(f), - g = new mxPoint(b.getCenterX(), b.getCenterY()), - e = mxUtils.getRotatedPoint(new mxPoint(d, e), c, f, g), - d = e.x, - e = e.y - } - return new mxPoint(d - - a.bounds.width / 2, e - a.bounds.height / 2) -}; -mxConnectionHandler.prototype.destroyIcons = function(a) { - if (null != a) { - this.iconState = null; - for (var b = 0; b < a.length; b++) a[b].destroy() - } -}; -mxConnectionHandler.prototype.isStartEvent = function(a) { - return !this.graph.isForceMarqueeEvent(a.getEvent()) && (null != this.constraintHandler.currentFocus && null != this.constraintHandler.currentConstraint || null != this.previous && null == this.error && - (null == this.icons || null != this.icons && null != this.icon)) -}; -mxConnectionHandler.prototype.mouseDown = function(a, b) { - this.mouseDownCounter++; - if (this.isEnabled() && this.graph.isEnabled() && !b.isConsumed() && !this.isConnecting() && this.isStartEvent(b)) { - null != this.constraintHandler.currentConstraint && null != this.constraintHandler.currentFocus && null != this.constraintHandler.currentPoint ? (this.sourceConstraint = this.constraintHandler.currentConstraint, - this.previous = this.constraintHandler.currentFocus, this.first = this.constraintHandler.currentPoint.clone()) : this.first = new mxPoint(b.getGraphX(), - b.getGraphY()); - this.edgeState = this.createEdgeState(b); - this.mouseDownCounter = 1; - this.waypointsEnabled && null == this.shape && (this.waypoints = null, this.shape = this.createShape()); - if (null == this.previous && null != this.edgeState) { - var c = this.graph.getPointForEvent(b.getEvent()); - this.edgeState.cell.geometry.setTerminalPoint(c, !0) - } - this.fireEvent(new mxEventObject(mxEvent.START, "state", this.previous)); - b.consume() - } else if (mxClient.IS_TOUCH && this.tapAndHoldEnabled && !this.tapAndHoldInProgress && this.isEnabled() && this.graph.isEnabled() && - !this.isConnecting()) { - this.tapAndHoldInProgress = !0; - this.initialTouchX = b.getX(); - this.initialTouchY = b.getY(); - var d = this.graph.view.getState(this.marker.getCell(b)); - this.tapAndHoldThread && window.clearTimeout(this.tapAndHoldThread); - this.tapAndHoldThread = window.setTimeout(mxUtils.bind(this, function() { - this.tapAndHoldValid && this.tapAndHold(b, d); - this.tapAndHoldValid = this.tapAndHoldInProgress = !1 - }), this.tapAndHoldDelay); - this.tapAndHoldValid = !0 - } - this.selectedIcon = this.icon; - this.icon = null -}; -mxConnectionHandler.prototype.tapAndHold = function(a, b) { - null != b && (this.marker.currentColor = this.marker.validColor, this.marker.markedState = b, this.marker.mark(), this.first = new mxPoint(a.getGraphX(), a.getGraphY()), this.edgeState = this.createEdgeState( - a), this.previous = b, this.fireEvent(new mxEventObject(mxEvent.START, "state", this.previous))) -}; -mxConnectionHandler.prototype.isImmediateConnectSource = function(a) { - return !this.graph.isCellMovable(a.cell) -}; -mxConnectionHandler.prototype.createEdgeState = function(a) { - return null -}; -mxConnectionHandler.prototype.updateCurrentState = function(a) { - var b = this.marker.process(a); - this.constraintHandler.update(a, null == this.first); - this.currentState = b -}; -mxConnectionHandler.prototype.convertWaypoint = function(a) { - var b = this.graph.getView().getScale(), - c = this.graph.getView().getTranslate(); - a.x = a.x / b - c.x; - a.y = a.y / b - c.y -}; -mxConnectionHandler.prototype.mouseMove = function(a, b) { - this.tapAndHoldValid && (this.tapAndHoldValid = Math.abs(this.initialTouchX - b.getX()) < this.tapAndHoldTolerance && Math.abs(this.initialTouchY - b.getY()) < this.tapAndHoldTolerance); - if (!b.isConsumed() && (this.ignoreMouseDown || null != this.first || !this.graph.isMouseDown)) { - !this.isEnabled() && null != this.currentState && (this.destroyIcons(this.icons), this.currentState = null); - (null != this.first || this.isEnabled() && this.graph.isEnabled()) && this.updateCurrentState(b); - if (null != this.first) { - var c = this.graph.getView().scale, - c = new mxPoint(this.graph.snap(b.getGraphX() / c) * c, this.graph.snap(b.getGraphY() / c) * c), - d = null, - e = c; - null != this.constraintHandler.currentConstraint && (null != this.constraintHandler.currentFocus && null != this.constraintHandler.currentPoint) && (d = this.constraintHandler.currentConstraint, - e = this.constraintHandler.currentPoint.clone()); - var f = this.first; - if (null != this.selectedIcon) { - var g = this.selectedIcon.bounds.width, - h = this.selectedIcon.bounds.height; - null != this.currentState && - this.targetConnectImage ? (g = this.getIconPosition(this.selectedIcon, this.currentState), this.selectedIcon.bounds.x = g.x, this.selectedIcon.bounds.y = g.y) : (g = new mxRectangle(b.getGraphX() + - this.connectIconOffset.x, b.getGraphY() + this.connectIconOffset.y, g, h), this.selectedIcon.bounds = g); - this.selectedIcon.redraw() - } - if (null != this.edgeState) { - this.edgeState.absolutePoints = [null, null != this.currentState ? null : e]; - this.graph.view.updateFixedTerminalPoint(this.edgeState, this.previous, !0, this.sourceConstraint); - null != this.currentState && - (null == d && (d = this.graph.getConnectionConstraint(this.edgeState, this.previous, !1)), this.edgeState.setAbsoluteTerminalPoint(null, !1), this.graph.view.updateFixedTerminalPoint(this - .edgeState, this.currentState, !1, d)); - f = null; - if (null != this.waypoints) { - f = []; - for (e = 0; e < this.waypoints.length; e++) d = this.waypoints[e].clone(), this.convertWaypoint(d), f[e] = d - } - this.graph.view.updatePoints(this.edgeState, f, this.previous, this.currentState); - this.graph.view.updateFloatingTerminalPoints(this.edgeState, this.previous, this.currentState); - e = this.edgeState.absolutePoints[this.edgeState.absolutePoints.length - 1]; - f = this.edgeState.absolutePoints[0] - } else null != this.currentState && null == this.constraintHandler.currentConstraint && (g = this.getTargetPerimeterPoint(this.currentState, b), null != g && (e = g)), null == this.sourceConstraint && - null != this.previous && (g = this.getSourcePerimeterPoint(this.previous, null != this.waypoints && 0 < this.waypoints.length ? this.waypoints[0] : e, b), null != g && (f = g)); - if (null == this.currentState && this.movePreviewAway) { - g = f; - null != this.edgeState && - 2 < this.edgeState.absolutePoints.length && (d = this.edgeState.absolutePoints[this.edgeState.absolutePoints.length - 2], null != d && (g = d)); - d = e.x - g.x; - g = e.y - g.y; - h = Math.sqrt(d * d + g * g); - if (0 == h) return; - e.x -= 4 * d / h; - e.y -= 4 * g / h - } - if (null == this.shape && (d = Math.abs(c.x - this.first.x), g = Math.abs(c.y - this.first.y), d > this.graph.tolerance || g > this.graph.tolerance)) this.shape = this.createShape(), this.updateCurrentState( - b); - null != this.shape && (null != this.edgeState ? this.shape.points = this.edgeState.absolutePoints : (c = [f], null != this.waypoints && - (c = c.concat(this.waypoints)), c.push(e), this.shape.points = c), this.drawPreview()); - mxEvent.consume(b.getEvent()); - b.consume() - } else !this.isEnabled() || !this.graph.isEnabled() ? this.constraintHandler.reset() : this.previous != this.currentState && null == this.edgeState ? (this.destroyIcons(this.icons), this.icons = - null, null != this.currentState && null == this.error && (this.icons = this.createIcons(this.currentState), null == this.icons && (this.currentState.setCursor(mxConstants.CURSOR_CONNECT), b - .consume())), this.previous = this.currentState) : - this.previous == this.currentState && (null != this.currentState && null == this.icons && !this.graph.isMouseDown) && b.consume(); - null != this.constraintHandler.currentConstraint && this.marker.reset(); - if (!this.graph.isMouseDown && null != this.currentState && null != this.icons) { - c = !1; - f = b.getSource(); - for (e = 0; e < this.icons.length && !c; e++) c = f == this.icons[e].node || f.parentNode == this.icons[e].node; - c || this.updateIcons(this.currentState, this.icons, b) - } - } else this.constraintHandler.reset() -}; -mxConnectionHandler.prototype.getTargetPerimeterPoint = function(a, b) { - var c = null, - d = a.view, - e = d.getPerimeterFunction(a); - if (null != e) { - var f = null != this.waypoints && 0 < this.waypoints.length ? this.waypoints[this.waypoints.length - 1] : new mxPoint(this.previous.getCenterX(), this.previous.getCenterY()), - d = e(d.getPerimeterBounds(a), this.edgeState, f, !1); - null != d && (c = d) - } else c = new mxPoint(a.getCenterX(), a.getCenterY()); - return c -}; -mxConnectionHandler.prototype.getSourcePerimeterPoint = function(a, b, c) { - c = null; - var d = a.view, - e = d.getPerimeterFunction(a), - f = new mxPoint(a.getCenterX(), a.getCenterY()); - if (null != e) { - var g = mxUtils.getValue(a.style, mxConstants.STYLE_ROTATION, 0), - h = -g * (Math.PI / 180); - 0 != g && (b = mxUtils.getRotatedPoint(new mxPoint(b.x, b.y), Math.cos(h), Math.sin(h), f)); - a = e(d.getPerimeterBounds(a), a, b, !1); - null != a && (0 != g && (a = mxUtils.getRotatedPoint(new mxPoint(a.x, a.y), Math.cos(-h), Math.sin(-h), f)), c = a) - } else c = f; - return c -}; -mxConnectionHandler.prototype.updateIcons = function(a, b, c) {}; -mxConnectionHandler.prototype.isStopEvent = function(a) { - return null != a.getState() -}; -mxConnectionHandler.prototype.addWaypointForEvent = function(a) { - var b = mxUtils.convertPoint(this.graph.container, a.getX(), a.getY()), - c = Math.abs(b.x - this.first.x), - b = Math.abs(b.y - this.first.y); - if (null != this.waypoints || 1 < this.mouseDownCounter && (c > this.graph.tolerance || b > this.graph.tolerance)) null == this.waypoints && (this.waypoints = []), c = this.graph.view.scale, b = - new mxPoint(this.graph.snap(a.getGraphX() / c) * c, this.graph.snap(a.getGraphY() / c) * c), this.waypoints.push(b) -}; -mxConnectionHandler.prototype.mouseUp = function(a, b) { - if (!b.isConsumed() && this.isConnecting()) { - if (this.waypointsEnabled && !this.isStopEvent(b)) { - this.addWaypointForEvent(b); - b.consume(); - return - } - if (null == this.error) { - var c = null != this.previous ? this.previous.cell : null, - d = null; - null != this.constraintHandler.currentConstraint && null != this.constraintHandler.currentFocus && (d = this.constraintHandler.currentFocus.cell); - null == d && this.marker.hasValidState() && (d = this.marker.validState.cell); - this.connect(c, d, b.getEvent(), - b.getCell()) - } else null != this.previous && (null != this.marker.validState && this.previous.cell == this.marker.validState.cell) && this.graph.selectCellForEvent(this.marker.source, evt), 0 < this.error.length && - this.graph.validationAlert(this.error); - this.destroyIcons(this.icons); - b.consume() - } - null != this.first && this.reset(); - this.tapAndHoldValid = this.tapAndHoldInProgress = !1 -}; -mxConnectionHandler.prototype.reset = function() { - null != this.shape && (this.shape.destroy(), this.shape = null); - this.destroyIcons(this.icons); - this.icons = null; - this.marker.reset(); - this.constraintHandler.reset(); - this.sourceConstraint = this.error = this.previous = this.edgeState = this.selectedIcon = null; - this.mouseDownCounter = 0; - this.icon = this.first = null; - this.fireEvent(new mxEventObject(mxEvent.RESET)) -}; -mxConnectionHandler.prototype.drawPreview = function() { - var a = null == this.error; - this.shape.strokewidth = this.getEdgeWidth(a); - a = this.getEdgeColor(a); - this.shape.stroke = a; - this.shape.redraw() -}; -mxConnectionHandler.prototype.getEdgeColor = function(a) { - return a ? mxConstants.VALID_COLOR : mxConstants.INVALID_COLOR -}; -mxConnectionHandler.prototype.getEdgeWidth = function(a) { - return a ? 3 : 1 -}; -mxConnectionHandler.prototype.connect = function(a, b, c, d) { - if (null != b || this.isCreateTarget() || this.graph.allowDanglingEdges) { - var e = this.graph.getModel(), - f = null; - e.beginUpdate(); - try { - if (null != a && (null == b && this.isCreateTarget()) && (b = this.createTargetVertex(c, a), null != b)) { - d = this.graph.getDropTarget([b], c, d); - if (null == d || !this.graph.getModel().isEdge(d)) { - var g = this.graph.getView().getState(d); - if (null != g) { - var h = e.getGeometry(b); - h.x -= g.origin.x; - h.y -= g.origin.y - } - } else d = this.graph.getDefaultParent(); - this.graph.addCell(b, - d) - } - var k = this.graph.getDefaultParent(); - null != a && (null != b && e.getParent(a) == e.getParent(b) && e.getParent(e.getParent(a)) != e.getRoot()) && (k = e.getParent(a), null != a.geometry && a.geometry.relative && (null != b.geometry && - b.geometry.relative) && (k = e.getParent(k))); - h = g = null; - null != this.edgeState && (g = this.edgeState.cell.value, h = this.edgeState.cell.style); - f = this.insertEdge(k, null, g, a, b, h); - if (null != f) { - this.graph.setConnectionConstraint(f, a, !0, this.sourceConstraint); - this.graph.setConnectionConstraint(f, b, !1, this.constraintHandler.currentConstraint); - null != this.edgeState && e.setGeometry(f, this.edgeState.cell.geometry); - var l = e.getGeometry(f); - null == l && (l = new mxGeometry, l.relative = !0, e.setGeometry(f, l)); - if (null != this.waypoints && 0 < this.waypoints.length) { - var m = this.graph.view.scale, - n = this.graph.view.translate; - l.points = []; - for (a = 0; a < this.waypoints.length; a++) { - var p = this.waypoints[a]; - l.points.push(new mxPoint(p.x / m - n.x, p.y / m - n.y)) - } - } - null == b && (p = this.graph.getPointForEvent(c, !1), p.x -= this.graph.panDx / this.graph.view.scale, p.y -= this.graph.panDy / this.graph.view.scale, - l.setTerminalPoint(p, !1)); - this.fireEvent(new mxEventObject(mxEvent.CONNECT, "cell", f, "event", c, "target", d)) - } - } catch (q) { - mxLog.show(), mxLog.debug(q.message) - } finally { - e.endUpdate() - } - this.select && this.selectCells(f, b) - } -}; -mxConnectionHandler.prototype.selectCells = function(a, b) { - this.graph.setSelectionCell(a) -}; -mxConnectionHandler.prototype.insertEdge = function(a, b, c, d, e, f) { - if (null == this.factoryMethod) return this.graph.insertEdge(a, b, c, d, e, f); - b = this.createEdge(c, d, e, f); - return b = this.graph.addEdge(b, a, d, e) -}; -mxConnectionHandler.prototype.createTargetVertex = function(a, b) { - for (var c = this.graph.getCellGeometry(b); null != c && c.relative;) b = this.graph.getModel().getParent(b), c = this.graph.getCellGeometry(b); - var d = this.graph.cloneCells([b])[0], - c = this.graph.getModel().getGeometry(d); - if (null != c) { - var e = this.graph.getPointForEvent(a); - c.x = this.graph.snap(e.x - c.width / 2) - this.graph.panDx / this.graph.view.scale; - c.y = this.graph.snap(e.y - c.height / 2) - this.graph.panDy / this.graph.view.scale; - if (null != this.first) { - var f = this.graph.view.getState(b); - if (null != f) { - var g = this.getAlignmentTolerance(); - Math.abs(this.graph.snap(this.first.x) - this.graph.snap(e.x)) <= g ? c.x = f.x : Math.abs(this.graph.snap(this.first.y) - this.graph.snap(e.y)) <= g && (c.y = f.y) - } - } - } - return d -}; -mxConnectionHandler.prototype.getAlignmentTolerance = function() { - return this.graph.isGridEnabled() ? this.graph.gridSize : this.graph.tolerance -}; -mxConnectionHandler.prototype.createEdge = function(a, b, c, d) { - var e = null; - null != this.factoryMethod && (e = this.factoryMethod(b, c, d)); - null == e && (e = new mxCell(a || ""), e.setEdge(!0), e.setStyle(d), a = new mxGeometry, a.relative = !0, e.setGeometry(a)); - return e -}; -mxConnectionHandler.prototype.destroy = function() { - this.graph.removeMouseListener(this); - null != this.shape && (this.shape.destroy(), this.shape = null); - null != this.marker && (this.marker.destroy(), this.marker = null); - null != this.constraintHandler && (this.constraintHandler.destroy(), this.constraintHandler = null); - null != this.changeHandler && (this.graph.getModel().removeListener(this.changeHandler), this.graph.getView().removeListener(this.changeHandler), this.changeHandler = null); - null != this.drillHandler && (this.graph.removeListener(this.drillHandler), - this.graph.getView().removeListener(this.drillHandler), this.drillHandler = null) -}; - -function mxConstraintHandler(a) { - this.graph = a -} -mxConstraintHandler.prototype.pointImage = new mxImage(mxClient.imageBasePath + "/point.gif", 5, 5); -mxConstraintHandler.prototype.graph = null; -mxConstraintHandler.prototype.enabled = !0; -mxConstraintHandler.prototype.highlightColor = mxConstants.DEFAULT_VALID_COLOR; -mxConstraintHandler.prototype.isEnabled = function() { - return this.enabled -}; -mxConstraintHandler.prototype.setEnabled = function(a) { - this.enabled = a -}; -mxConstraintHandler.prototype.reset = function() { - if (null != this.focusIcons) { - for (var a = 0; a < this.focusIcons.length; a++) this.focusIcons[a].destroy(); - this.focusIcons = null - } - null != this.focusHighlight && (this.focusHighlight.destroy(), this.focusHighlight = null); - this.focusPoints = this.currentFocus = this.currentPoint = this.currentFocusArea = this.currentConstraint = null -}; -mxConstraintHandler.prototype.getTolerance = function() { - return this.graph.getTolerance() -}; -mxConstraintHandler.prototype.getImageForConstraint = function(a, b, c) { - return this.pointImage -}; -mxConstraintHandler.prototype.isEventIgnored = function(a, b) { - return !1 -}; -mxConstraintHandler.prototype.update = function(a, b) { - if (this.isEnabled() && !this.isEventIgnored(a)) { - var c = this.getTolerance(), - d = new mxRectangle(a.getGraphX() - c, a.getGraphY() - c, 2 * c, 2 * c), - e = null != a.getCell() ? this.graph.isCellConnectable(a.getCell()) : !1; - if (null == this.currentFocusArea || !mxUtils.intersects(this.currentFocusArea, d) || null != a.getState() && null != this.currentFocus && e) - if (this.currentFocusArea = null, a.getState() != this.currentFocus) - if (this.currentFocus = null, this.constraints = null != a.getState() && e ? this.graph.getAllConnectionConstraints(a.getState(), - b) : null, null != this.constraints) { - this.currentFocus = a.getState(); - this.currentFocusArea = new mxRectangle(a.getState().x, a.getState().y, a.getState().width, a.getState().height); - if (null != this.focusIcons) { - for (e = 0; e < this.focusIcons.length; e++) this.focusIcons[e].destroy(); - this.focusPoints = this.focusIcons = null - } - this.focusIcons = []; - this.focusPoints = []; - for (e = 0; e < this.constraints.length; e++) { - var f = this.graph.getConnectionPoint(a.getState(), this.constraints[e]), - g = this.getImageForConstraint(a.getState(), this.constraints[e], - f), - h = g.src, - g = new mxRectangle(f.x - g.width / 2, f.y - g.height / 2, g.width, g.height), - g = new mxImageShape(g, h); - g.dialect = this.graph.dialect != mxConstants.DIALECT_SVG ? mxConstants.DIALECT_MIXEDHTML : mxConstants.DIALECT_SVG; - g.preserveImageAspect = !1; - g.init(this.graph.getView().getOverlayPane()); - null != g.node.previousSibling && g.node.parentNode.insertBefore(g.node, g.node.parentNode.firstChild); - h = mxUtils.bind(this, function() { - return null != this.currentFocus ? this.currentFocus : a.getState() - }); - g.redraw(); - mxEvent.redirectMouseEvents(g.node, - this.graph, h); - this.currentFocusArea.add(g.bounds); - this.focusIcons.push(g); - this.focusPoints.push(f) - } - this.currentFocusArea.grow(c) - } else if (null != this.focusIcons) { - null != this.focusHighlight && (this.focusHighlight.destroy(), this.focusHighlight = null); - for (e = 0; e < this.focusIcons.length; e++) this.focusIcons[e].destroy(); - this.focusPoints = this.focusIcons = null - } - this.currentPoint = this.currentConstraint = null; - if (null != this.focusIcons && null != this.constraints && (null == a.getState() || this.currentFocus == a.getState())) - for (e = - 0; e < this.focusIcons.length; e++) - if (mxUtils.intersects(this.focusIcons[e].bounds, d)) { - this.currentConstraint = this.constraints[e]; - this.currentPoint = this.focusPoints[e]; - c = this.focusIcons[e].bounds.clone(); - c.grow(mxClient.IS_IE ? 3 : 2); - mxClient.IS_IE && (c.width -= 1, c.height -= 1); - null == this.focusHighlight ? (c = new mxRectangleShape(c, null, this.highlightColor, 3), c.dialect = this.graph.dialect == mxConstants.DIALECT_SVG ? mxConstants.DIALECT_SVG : mxConstants - .DIALECT_VML, c.init(this.graph.getView().getOverlayPane()), this.focusHighlight = - c, h = mxUtils.bind(this, function() { - return null != this.currentFocus ? this.currentFocus : a.getState() - }), mxEvent.redirectMouseEvents(c.node, this.graph, h)) : (this.focusHighlight.bounds = c, this.focusHighlight.redraw()); - break - } - null == this.currentConstraint && null != this.focusHighlight && (this.focusHighlight.destroy(), this.focusHighlight = null) - } -}; -mxConstraintHandler.prototype.destroy = function() { - this.reset() -}; - -function mxRubberband(a) { - null != a && (this.graph = a, this.graph.addMouseListener(this), this.panHandler = mxUtils.bind(this, function() { - this.repaint() - }), this.graph.addListener(mxEvent.PAN, this.panHandler), mxClient.IS_IE && mxEvent.addListener(window, "unload", mxUtils.bind(this, function() { - this.destroy() - }))) -} -mxRubberband.prototype.defaultOpacity = 20; -mxRubberband.prototype.enabled = !0; -mxRubberband.prototype.div = null; -mxRubberband.prototype.sharedDiv = null; -mxRubberband.prototype.currentX = 0; -mxRubberband.prototype.currentY = 0; -mxRubberband.prototype.isEnabled = function() { - return this.enabled -}; -mxRubberband.prototype.setEnabled = function(a) { - this.enabled = a -}; -mxRubberband.prototype.mouseDown = function(a, b) { - if (!b.isConsumed() && this.isEnabled() && this.graph.isEnabled() && (this.graph.isForceMarqueeEvent(b.getEvent()) || null == b.getState())) { - var c = mxUtils.getOffset(this.graph.container), - d = mxUtils.getScrollOrigin(this.graph.container); - d.x -= c.x; - d.y -= c.y; - this.start(b.getX() + d.x, b.getY() + d.y); - if (mxClient.IS_NS && !mxClient.IS_SF && !mxClient.IS_GC) { - var e = this.graph.container, - f = function(a) { - a = new mxMouseEvent(a); - var b = mxUtils.convertPoint(e, a.getX(), a.getY()); - a.graphX = b.x; - a.graphY = b.y; - return a - }; - this.dragHandler = mxUtils.bind(this, function(a) { - this.mouseMove(this.graph, f(a)) - }); - this.dropHandler = mxUtils.bind(this, function(a) { - this.mouseUp(this.graph, f(a)) - }); - mxEvent.addListener(document, "mousemove", this.dragHandler); - mxEvent.addListener(document, "mouseup", this.dropHandler) - } - b.consume(!1) - } -}; -mxRubberband.prototype.start = function(a, b) { - this.first = new mxPoint(a, b) -}; -mxRubberband.prototype.mouseMove = function(a, b) { - if (!b.isConsumed() && null != this.first) { - var c = mxUtils.getScrollOrigin(this.graph.container), - d = mxUtils.getOffset(this.graph.container); - c.x -= d.x; - c.y -= d.y; - var d = b.getX() + c.x, - c = b.getY() + c.y, - e = this.first.x - d, - f = this.first.y - c, - g = this.graph.tolerance; - if (null != this.div || Math.abs(e) > g || Math.abs(f) > g) null == this.div && (this.div = this.createShape()), mxUtils.clearSelection(), this.update(d, c), b.consume() - } -}; -mxRubberband.prototype.createShape = function() { - null == this.sharedDiv && (this.sharedDiv = document.createElement("div"), this.sharedDiv.className = "mxRubberband", mxUtils.setOpacity(this.sharedDiv, this.defaultOpacity)); - this.graph.container.appendChild(this.sharedDiv); - return this.sharedDiv -}; -mxRubberband.prototype.mouseUp = function(a, b) { - var c = null != this.div; - this.reset(); - c && (c = new mxRectangle(this.x, this.y, this.width, this.height), this.graph.selectRegion(c, b.getEvent()), b.consume()) -}; -mxRubberband.prototype.reset = function() { - null != this.div && this.div.parentNode.removeChild(this.div); - null != this.dragHandler && (mxEvent.removeListener(document, "mousemove", this.dragHandler), this.dragHandler = null); - null != this.dropHandler && (mxEvent.removeListener(document, "mouseup", this.dropHandler), this.dropHandler = null); - this.currentY = this.currentX = 0; - this.div = this.first = null -}; -mxRubberband.prototype.update = function(a, b) { - this.currentX = a; - this.currentY = b; - this.repaint() -}; -mxRubberband.prototype.repaint = function() { - if (null != this.div) { - var a = this.currentX - this.graph.panDx, - b = this.currentY - this.graph.panDy; - this.x = Math.min(this.first.x, a); - this.y = Math.min(this.first.y, b); - this.width = Math.max(this.first.x, a) - this.x; - this.height = Math.max(this.first.y, b) - this.y; - a = mxClient.IS_VML ? this.graph.panDy : 0; - this.div.style.left = this.x + (mxClient.IS_VML ? this.graph.panDx : 0) + "px"; - this.div.style.top = this.y + a + "px"; - this.div.style.width = Math.max(1, this.width) + "px"; - this.div.style.height = Math.max(1, - this.height) + "px" - } -}; -mxRubberband.prototype.destroy = function() { - this.destroyed || (this.destroyed = !0, this.graph.removeMouseListener(this), this.graph.removeListener(this.panHandler), this.reset(), null != this.sharedDiv && (this.sharedDiv = null)) -}; - -function mxVertexHandler(a) { - null != a && (this.state = a, this.init()) -} -mxVertexHandler.prototype.graph = null; -mxVertexHandler.prototype.state = null; -mxVertexHandler.prototype.singleSizer = !1; -mxVertexHandler.prototype.index = null; -mxVertexHandler.prototype.allowHandleBoundsCheck = !0; -mxVertexHandler.prototype.handleImage = null; -mxVertexHandler.prototype.tolerance = 0; -mxVertexHandler.prototype.rotationEnabled = !1; -mxVertexHandler.prototype.rotationRaster = !0; -mxVertexHandler.prototype.init = function() { - this.graph = this.state.view.graph; - this.selectionBounds = this.getSelectionBounds(this.state); - this.bounds = new mxRectangle(this.selectionBounds.x, this.selectionBounds.y, this.selectionBounds.width, this.selectionBounds.height); - this.selectionBorder = this.createSelectionShape(this.bounds); - this.selectionBorder.dialect = this.graph.dialect != mxConstants.DIALECT_SVG ? mxConstants.DIALECT_VML : mxConstants.DIALECT_SVG; - this.selectionBorder.pointerEvents = !1; - this.selectionBorder.init(this.graph.getView().getOverlayPane()); - this.graph.isCellMovable(this.state.cell) && (this.selectionBorder.node.style.cursor = mxConstants.CURSOR_MOVABLE_VERTEX); - mxEvent.redirectMouseEvents(this.selectionBorder.node, this.graph, this.state); - if (0 >= mxGraphHandler.prototype.maxCells || this.graph.getSelectionCount() < mxGraphHandler.prototype.maxCells) { - var a = this.graph.isCellResizable(this.state.cell); - this.sizers = []; - if (a || this.graph.isLabelMovable(this.state.cell) && 2 <= this.state.width && 2 <= this.state.height) { - var b = 0; - a && (this.singleSizer || (this.sizers.push(this.createSizer("nw-resize", - b++)), this.sizers.push(this.createSizer("n-resize", b++)), this.sizers.push(this.createSizer("ne-resize", b++)), this.sizers.push(this.createSizer("w-resize", b++)), this.sizers.push( - this.createSizer("e-resize", b++)), this.sizers.push(this.createSizer("sw-resize", b++)), this.sizers.push(this.createSizer("s-resize", b++))), this.sizers.push(this.createSizer( - "se-resize", b++))); - a = this.graph.model.getGeometry(this.state.cell); - null != a && (!a.relative && !this.graph.isSwimlane(this.state.cell) && this.graph.isLabelMovable(this.state.cell)) && - (this.labelShape = this.createSizer(mxConstants.CURSOR_LABEL_HANDLE, mxEvent.LABEL_HANDLE, mxConstants.LABEL_HANDLE_SIZE, mxConstants.LABEL_HANDLE_FILLCOLOR), this.sizers.push(this.labelShape)) - } else this.graph.isCellMovable(this.state.cell) && (!this.graph.isCellResizable(this.state.cell) && 2 > this.state.width && 2 > this.state.height) && (this.labelShape = this.createSizer( - mxConstants.CURSOR_MOVABLE_VERTEX, null, null, mxConstants.LABEL_HANDLE_FILLCOLOR), this.sizers.push(this.labelShape)) - } - if (this.rotationEnabled && (0 >= - mxGraphHandler.prototype.maxCells || this.graph.getSelectionCount() < mxGraphHandler.prototype.maxCells)) this.rotationShape = this.createSizer("pointer", mxEvent.ROTATION_HANDLE, mxConstants - .HANDLE_SIZE + 3, mxConstants.HANDLE_FILLCOLOR), this.sizers.push(this.rotationShape); - this.redraw() -}; -mxVertexHandler.prototype.getSelectionBounds = function(a) { - return new mxRectangle(Math.round(a.x), Math.round(a.y), Math.round(a.width), Math.round(a.height)) -}; -mxVertexHandler.prototype.createSelectionShape = function(a) { - a = new mxRectangleShape(a, null, this.getSelectionColor()); - a.strokewidth = this.getSelectionStrokeWidth(); - a.isDashed = this.isSelectionDashed(); - return a -}; -mxVertexHandler.prototype.getSelectionColor = function() { - return mxConstants.VERTEX_SELECTION_COLOR -}; -mxVertexHandler.prototype.getSelectionStrokeWidth = function() { - return mxConstants.VERTEX_SELECTION_STROKEWIDTH -}; -mxVertexHandler.prototype.isSelectionDashed = function() { - return mxConstants.VERTEX_SELECTION_DASHED -}; -mxVertexHandler.prototype.createSizer = function(a, b, c, d) { - c = c || mxConstants.HANDLE_SIZE; - c = new mxRectangle(0, 0, c, c); - d = this.createSizerShape(c, b, d); - d.isHtmlAllowed() && null != this.state.text && this.state.text.node.parentNode == this.graph.container ? (d.bounds.height -= 1, d.bounds.width -= 1, d.dialect = mxConstants.DIALECT_STRICTHTML, d - .init(this.graph.container)) : (d.dialect = this.graph.dialect != mxConstants.DIALECT_SVG ? mxConstants.DIALECT_MIXEDHTML : mxConstants.DIALECT_SVG, d.init(this.graph.getView().getOverlayPane())); - mxEvent.redirectMouseEvents(d.node, this.graph, this.state); - this.graph.isEnabled() && (d.node.style.cursor = a); - this.isSizerVisible(b) || (d.node.style.visibility = "hidden"); - return d -}; -mxVertexHandler.prototype.isSizerVisible = function(a) { - return !0 -}; -mxVertexHandler.prototype.createSizerShape = function(a, b, c) { - return null != this.handleImage ? (a.width = this.handleImage.width, a.height = this.handleImage.height, new mxImageShape(a, this.handleImage.src)) : b == mxEvent.ROTATION_HANDLE ? new mxEllipse( - a, c || mxConstants.HANDLE_FILLCOLOR, mxConstants.HANDLE_STROKECOLOR) : new mxRectangleShape(a, c || mxConstants.HANDLE_FILLCOLOR, mxConstants.HANDLE_STROKECOLOR) -}; -mxVertexHandler.prototype.moveSizerTo = function(a, b, c) { - null != a && (a.bounds.x = Math.round(b - a.bounds.width / 2), a.bounds.y = Math.round(c - a.bounds.height / 2), a.redraw()) -}; -mxVertexHandler.prototype.getHandleForEvent = function(a) { - if (a.isSource(this.rotationShape)) return mxEvent.ROTATION_HANDLE; - if (a.isSource(this.labelShape)) return mxEvent.LABEL_HANDLE; - if (null != this.sizers) - for (var b = this.tolerance, b = this.allowHandleBoundsCheck && (mxClient.IS_IE || 0 < b) ? new mxRectangle(a.getGraphX() - b, a.getGraphY() - b, 2 * b, 2 * b) : null, c = 0; c < this.sizers.length; c++) - if (a.isSource(this.sizers[c]) || null != b && mxUtils.intersects(this.sizers[c].bounds, b)) return c; - return null -}; -mxVertexHandler.prototype.mouseDown = function(a, b) { - if (!b.isConsumed() && this.graph.isEnabled() && !this.graph.isForceMarqueeEvent(b.getEvent()) && (0 < this.tolerance || b.getState() == this.state)) { - var c = this.getHandleForEvent(b); - null != c && (this.start(b.getX(), b.getY(), c), b.consume()) - } -}; -mxVertexHandler.prototype.start = function(a, b, c) { - a = mxUtils.convertPoint(this.graph.container, a, b); - this.startX = a.x; - this.startY = a.y; - this.index = c; - this.selectionBorder.node.style.display = c == mxEvent.ROTATION_HANDLE ? "inline" : "none"; - this.preview = this.createSelectionShape(this.bounds); - !(mxClient.IS_SVG && 0 != Number(this.state.style[mxConstants.STYLE_ROTATION] || "0")) && null != this.state.text && this.state.text.node.parentNode == this.graph.container ? (this.preview.dialect = - mxConstants.DIALECT_STRICTHTML, this.preview.init(this.graph.container)) : - (this.preview.dialect = this.graph.dialect != mxConstants.DIALECT_SVG ? mxConstants.DIALECT_VML : mxConstants.DIALECT_SVG, this.preview.init(this.graph.view.getOverlayPane())) -}; -mxVertexHandler.prototype.mouseMove = function(a, b) { - if (!b.isConsumed() && null != this.index) { - var c = new mxPoint(b.getGraphX(), b.getGraphY()), - d = this.graph.isGridEnabledEvent(b.getEvent()), - e = this.graph.getView().scale; - if (this.index == mxEvent.LABEL_HANDLE) d && (c.x = this.graph.snap(c.x / e) * e, c.y = this.graph.snap(c.y / e) * e), this.moveSizerTo(this.sizers[this.sizers.length - 1], c.x, c.y); - else if (this.index == mxEvent.ROTATION_HANDLE) { - var f = this.state.x + this.state.width / 2 - c.x, - g = this.state.y + this.state.height / 2 - c.y; - this.currentAlpha = - 0 != f ? 180 * Math.atan(g / f) / Math.PI + 90 : 0 > g ? 180 : 0; - 0 < f && (this.currentAlpha -= 180); - this.rotationRaster && (f = c.x - this.state.getCenterX(), g = c.y - this.state.getCenterY(), f = Math.abs(Math.sqrt(f * f + g * g) - this.state.height / 2 - 20), f = Math.max(1, 5 * Math.min( - 3, Math.max(0, Math.round(80 / Math.abs(f))))), this.currentAlpha = Math.round(this.currentAlpha / f) * f); - this.selectionBorder.rotation = this.currentAlpha; - this.selectionBorder.redraw() - } else { - var h = mxUtils.toRadians(this.state.style[mxConstants.STYLE_ROTATION] || "0"), - k = Math.cos(-h), - l = Math.sin(-h), - m = new mxPoint(this.state.getCenterX(), this.state.getCenterY()), - f = c.x - this.startX, - g = c.y - this.startY, - c = this.graph.view.translate, - n = l * f + k * g, - f = k * f - l * g; - this.bounds = this.union(this.selectionBounds, f, n, this.index, d, e, c); - k = Math.cos(h); - l = Math.sin(h); - g = new mxPoint(this.bounds.getCenterX(), this.bounds.getCenterY()); - f = g.x - m.x; - g = g.y - m.y; - m = l * f + k * g - g; - this.bounds.x += k * f - l * g - f; - this.bounds.y += m; - this.drawPreview() - } - b.consume() - } else null != this.getHandleForEvent(b) && b.consume(!1) -}; -mxVertexHandler.prototype.mouseUp = function(a, b) { - if (!b.isConsumed() && null != this.index && null != this.state) { - var c = new mxPoint(b.getGraphX(), b.getGraphY()); - this.graph.getModel().beginUpdate(); - try { - if (this.index == mxEvent.ROTATION_HANDLE) null != this.currentAlpha && this.rotateCell(this.state.cell, this.currentAlpha - (this.state.style[mxConstants.STYLE_ROTATION] || 0)); - else { - var d = this.graph.isGridEnabledEvent(b.getEvent()), - e = mxUtils.toRadians(this.state.style[mxConstants.STYLE_ROTATION] || "0"), - f = Math.cos(-e), - g = Math.sin(-e), - h = c.x - this.startX, - k = c.y - this.startY, - c = g * h + f * k, - h = f * h - g * k, - k = c, - l = this.graph.view.scale; - this.resizeCell(this.state.cell, h / l, k / l, this.index, d) - } - } finally { - this.graph.getModel().endUpdate() - } - this.reset(); - b.consume() - } -}; -mxVertexHandler.prototype.rotateCell = function(a, b) { - var c = this.graph.getModel(); - if (c.isVertex(a)) { - var d = a == this.state ? this.state : this.graph.view.getState(a); - null != d && this.graph.setCellStyles(mxConstants.STYLE_ROTATION, (d.style[mxConstants.STYLE_ROTATION] || 0) + b, [a]); - if (this.state.cell != a && (d = this.graph.getCellGeometry(a), null != d && !d.relative)) - if (0 != b) { - var e = this.graph.getModel().getParent(a), - f = this.graph.getCellGeometry(e); - if (!d.relative && null != f) { - var g = mxUtils.toRadians(b), - e = Math.cos(g), - g = Math.sin(g), - h = new mxPoint(d.getCenterX(), d.getCenterY()), - f = new mxPoint(f.width / 2, f.height / 2), - e = mxUtils.getRotatedPoint(h, e, g, f), - d = d.clone(); - d.x = e.x - d.width / 2; - d.y = e.y - d.height / 2; - c.setGeometry(a, d) - } - } else d = d.clone(), d.x += dx, d.y += dy, c.setGeometry(a, d); - d = c.getChildCount(a); - for (e = 0; e < d; e++) this.rotateCell(c.getChildAt(a, e), b) - } -}; -mxVertexHandler.prototype.reset = function() { - this.index = this.currentAlpha = null; - null != this.preview && (this.preview.destroy(), this.preview = null); - null != this.selectionBorder && (this.selectionBorder.node.style.display = "inline", this.selectionBounds = this.getSelectionBounds(this.state), this.bounds = new mxRectangle(this.selectionBounds - .x, this.selectionBounds.y, this.selectionBounds.width, this.selectionBounds.height), this.drawPreview()) -}; -mxVertexHandler.prototype.resizeCell = function(a, b, c, d, e) { - var f = this.graph.model.getGeometry(a); - if (null != f) - if (d == mxEvent.LABEL_HANDLE) d = this.graph.view.scale, b = (this.labelShape.bounds.getCenterX() - this.startX) / d, c = (this.labelShape.bounds.getCenterY() - this.startY) / d, f = f.clone(), - null == f.offset ? f.offset = new mxPoint(b, c) : (f.offset.x += b, f.offset.y += c), this.graph.model.setGeometry(a, f); - else { - d = this.union(f, b, c, d, e, 1, new mxPoint(0, 0)); - var g = mxUtils.toRadians(this.state.style[mxConstants.STYLE_ROTATION] || "0"); - if (0 != g) { - b = d.getCenterX() - f.getCenterX(); - c = d.getCenterY() - f.getCenterY(); - e = Math.cos(g); - var h = Math.sin(g), - g = e * b - h * c - b; - b = h * b + e * c - c; - c = d.x - f.x; - var k = d.y - f.y, - l = e * c - h * k; - e = h * c + e * k; - d.x += g; - d.y += b; - if (!this.graph.isCellCollapsed(a) && (0 != g || 0 != b)) c = f.x - d.x + l, k = f.y - d.y + e, this.moveChildren(a, c, k) - } - this.graph.resizeCell(a, d) - } -}; -mxVertexHandler.prototype.moveChildren = function(a, b, c) { - for (var d = this.graph.getModel(), e = d.getChildCount(a), f = 0; f < e; f++) { - var g = d.getChildAt(a, f); - if (d.isVertex(g)) { - var h = this.graph.getCellGeometry(g); - null != h && !h.relative && (h = h.clone(), h.x += b, h.y += c, d.setGeometry(g, h)) - } - } -}; -mxVertexHandler.prototype.union = function(a, b, c, d, e, f, g) { - if (this.singleSizer) { - g = a.x + a.width + b; - var h = a.y + a.height + c; - e && (g = this.graph.snap(g / f) * f, h = this.graph.snap(h / f) * f); - f = new mxRectangle(a.x, a.y, 0, 0); - f.add(new mxRectangle(g, h, 0, 0)); - return f - } - var h = a.x - g.x * f, - k = h + a.width, - l = a.y - g.y * f; - a = l + a.height; - 4 < d ? (a += c, e && (a = this.graph.snap(a / f) * f)) : 3 > d && (l += c, e && (l = this.graph.snap(l / f) * f)); - if (0 == d || 3 == d || 5 == d) h += b, e && (h = this.graph.snap(h / f) * f); - else if (2 == d || 4 == d || 7 == d) k += b, e && (k = this.graph.snap(k / f) * f); - e = k - h; - a -= - l; - 0 > e && (h += e, e = Math.abs(e)); - 0 > a && (l += a, a = Math.abs(a)); - return new mxRectangle(h + g.x * f, l + g.y * f, e, a) -}; -mxVertexHandler.prototype.redraw = function() { - this.selectionBounds = this.getSelectionBounds(this.state); - this.bounds = new mxRectangle(this.state.x, this.state.y, this.state.width, this.state.height); - var a = this.state; - if (null != this.sizers) { - var b = a.x + a.width, - c = a.y + a.height; - if (this.singleSizer) this.moveSizerTo(this.sizers[0], b, c); - else { - var d = a.x + a.width / 2, - e = a.y + a.height / 2; - if (1 < this.sizers.length) { - var f = mxUtils.toRadians(a.style[mxConstants.STYLE_ROTATION] || "0"), - g = Math.cos(f), - f = Math.sin(f), - h = new mxPoint(a.getCenterX(), - a.getCenterY()), - k = mxUtils.getRotatedPoint(new mxPoint(a.x, a.y), g, f, h); - this.moveSizerTo(this.sizers[0], k.x, k.y); - k.x = d; - k.y = a.y; - k = mxUtils.getRotatedPoint(k, g, f, h); - this.moveSizerTo(this.sizers[1], k.x, k.y); - k.x = b; - k.y = a.y; - k = mxUtils.getRotatedPoint(k, g, f, h); - this.moveSizerTo(this.sizers[2], k.x, k.y); - k.x = a.x; - k.y = e; - k = mxUtils.getRotatedPoint(k, g, f, h); - this.moveSizerTo(this.sizers[3], k.x, k.y); - k.x = b; - k.y = e; - k = mxUtils.getRotatedPoint(k, g, f, h); - this.moveSizerTo(this.sizers[4], k.x, k.y); - k.x = a.x; - k.y = c; - k = mxUtils.getRotatedPoint(k, - g, f, h); - this.moveSizerTo(this.sizers[5], k.x, k.y); - k.x = d; - k.y = c; - k = mxUtils.getRotatedPoint(k, g, f, h); - this.moveSizerTo(this.sizers[6], k.x, k.y); - k.x = b; - k.y = c; - k = mxUtils.getRotatedPoint(k, g, f, h); - this.moveSizerTo(this.sizers[7], k.x, k.y); - this.moveSizerTo(this.sizers[8], d + a.absoluteOffset.x, e + a.absoluteOffset.y) - } else 2 <= this.state.width && 2 <= this.state.height ? this.moveSizerTo(this.sizers[0], d + a.absoluteOffset.x, e + a.absoluteOffset.y) : this.moveSizerTo(this.sizers[0], a.x, a.y) - } - } - null != this.rotationShape && (f = mxUtils.toRadians(this.state.style[mxConstants.STYLE_ROTATION] || - "0"), g = Math.cos(f), f = Math.sin(f), h = new mxPoint(this.state.getCenterX(), this.state.getCenterY()), k = mxUtils.getRotatedPoint(new mxPoint(a.x + a.width / 2, a.y - 16), g, f, h), - this.moveSizerTo(this.rotationShape, k.x, k.y)); - this.selectionBorder.rotation = Number(this.state.style[mxConstants.STYLE_ROTATION] || "0"); - this.drawPreview() -}; -mxVertexHandler.prototype.drawPreview = function() { - null != this.preview && (this.preview.bounds = this.bounds, this.preview.node.parentNode == this.graph.container && (this.preview.bounds.width = Math.max(0, this.preview.bounds.width - 1), this.preview - .bounds.height = Math.max(0, this.preview.bounds.height - 1)), this.preview.rotation = Number(this.state.style[mxConstants.STYLE_ROTATION] || "0"), this.preview.redraw()); - this.selectionBorder.bounds = this.bounds; - this.selectionBorder.redraw() -}; -mxVertexHandler.prototype.destroy = function() { - null != this.preview && (this.preview.destroy(), this.preview = null); - this.selectionBorder.destroy(); - this.labelShape = this.selectionBorder = null; - if (null != this.sizers) - for (var a = 0; a < this.sizers.length; a++) this.sizers[a].destroy(), this.sizers[a] = null -}; - -function mxEdgeHandler(a) { - null != a && (this.state = a, this.init()) -} -mxEdgeHandler.prototype.graph = null; -mxEdgeHandler.prototype.state = null; -mxEdgeHandler.prototype.marker = null; -mxEdgeHandler.prototype.constraintHandler = null; -mxEdgeHandler.prototype.error = null; -mxEdgeHandler.prototype.shape = null; -mxEdgeHandler.prototype.bends = null; -mxEdgeHandler.prototype.labelShape = null; -mxEdgeHandler.prototype.cloneEnabled = !0; -mxEdgeHandler.prototype.addEnabled = !1; -mxEdgeHandler.prototype.removeEnabled = !1; -mxEdgeHandler.prototype.preferHtml = !1; -mxEdgeHandler.prototype.allowHandleBoundsCheck = !0; -mxEdgeHandler.prototype.snapToTerminals = !1; -mxEdgeHandler.prototype.handleImage = null; -mxEdgeHandler.prototype.tolerance = 0; -mxEdgeHandler.prototype.init = function() { - this.graph = this.state.view.graph; - this.marker = this.createMarker(); - this.constraintHandler = new mxConstraintHandler(this.graph); - this.points = []; - this.abspoints = this.getSelectionPoints(this.state); - this.shape = this.createSelectionShape(this.abspoints); - this.shape.dialect = this.graph.dialect != mxConstants.DIALECT_SVG ? mxConstants.DIALECT_MIXEDHTML : mxConstants.DIALECT_SVG; - this.shape.init(this.graph.getView().getOverlayPane()); - this.shape.svgStrokeTolerance = 0; - this.shape.node.style.cursor = - mxConstants.CURSOR_MOVABLE_EDGE; - mxEvent.addListener(this.shape.node, "dblclick", mxUtils.bind(this, function(a) { - this.graph.dblClick(a, this.state.cell) - })); - mxEvent.addGestureListeners(this.shape.node, mxUtils.bind(this, function(a) { - this.addEnabled && this.isAddPointEvent(a) ? this.addPoint(this.state, a) : this.graph.fireMouseEvent(mxEvent.MOUSE_DOWN, new mxMouseEvent(a, this.state)) - }), mxUtils.bind(this, function(a) { - var c = this.state.cell; - if (null != this.index) { - var d = mxUtils.convertPoint(this.graph.container, mxEvent.getClientX(a), - mxEvent.getClientY(a)), - c = this.graph.getCellAt(d.x, d.y); - this.graph.isSwimlane(c) && this.graph.hitsSwimlaneContent(c, d.x, d.y) && (c = null) - } - this.graph.fireMouseEvent(mxEvent.MOUSE_MOVE, new mxMouseEvent(a, this.graph.getView().getState(c))) - }), mxUtils.bind(this, function(a) { - this.graph.fireMouseEvent(mxEvent.MOUSE_UP, new mxMouseEvent(a, this.state)) - })); - this.preferHtml = null != this.state.text && this.state.text.node.parentNode == this.graph.container; - if (!this.preferHtml) { - var a = this.state.getVisibleTerminalState(!0); - null != a && (this.preferHtml = null != a.text && a.text.node.parentNode == this.graph.container); - this.preferHtml || (a = this.state.getVisibleTerminalState(!1), null != a && (this.preferHtml = null != a.text && a.text.node.parentNode == this.graph.container)) - } - if (this.graph.getSelectionCount() < mxGraphHandler.prototype.maxCells || 0 >= mxGraphHandler.prototype.maxCells) this.bends = this.createBends(); - this.label = new mxPoint(this.state.absoluteOffset.x, this.state.absoluteOffset.y); - this.labelShape = new mxRectangleShape(new mxRectangle, - mxConstants.LABEL_HANDLE_FILLCOLOR, mxConstants.HANDLE_STROKECOLOR); - this.labelShape.pointerEvents = !1; - this.initBend(this.labelShape); - this.labelShape.node.style.cursor = mxConstants.CURSOR_LABEL_HANDLE; - mxEvent.redirectMouseEvents(this.labelShape.node, this.graph, this.state); - this.redraw() -}; -mxEdgeHandler.prototype.isAddPointEvent = function(a) { - return mxEvent.isShiftDown(a) -}; -mxEdgeHandler.prototype.isRemovePointEvent = function(a) { - return mxEvent.isShiftDown(a) -}; -mxEdgeHandler.prototype.getSelectionPoints = function(a) { - return a.absolutePoints -}; -mxEdgeHandler.prototype.createSelectionShape = function(a) { - a = new mxPolyline(a, this.getSelectionColor()); - a.strokewidth = this.getSelectionStrokeWidth(); - a.isDashed = this.isSelectionDashed(); - return a -}; -mxEdgeHandler.prototype.getSelectionColor = function() { - return mxConstants.EDGE_SELECTION_COLOR -}; -mxEdgeHandler.prototype.getSelectionStrokeWidth = function() { - return mxConstants.EDGE_SELECTION_STROKEWIDTH -}; -mxEdgeHandler.prototype.isSelectionDashed = function() { - return mxConstants.EDGE_SELECTION_DASHED -}; -mxEdgeHandler.prototype.isConnectableCell = function(a) { - return !0 -}; -mxEdgeHandler.prototype.createMarker = function() { - var a = new mxCellMarker(this.graph), - b = this; - a.getCell = function(a) { - var d = mxCellMarker.prototype.getCell.apply(this, arguments); - if (!b.isConnectableCell(d)) return null; - var e = b.graph.getModel(); - if (d == b.state.cell || null != d && !b.graph.connectableEdges && e.isEdge(d)) d = null; - return d - }; - a.isValidState = function(a) { - var d = b.graph.getModel(), - d = b.graph.view.getTerminalPort(a, b.graph.view.getState(d.getTerminal(b.state.cell, !b.isSource)), !b.isSource), - d = null != d ? d.cell : null; - b.error = b.validateConnection(b.isSource ? a.cell : d, b.isSource ? d : a.cell); - return null == b.error - }; - return a -}; -mxEdgeHandler.prototype.validateConnection = function(a, b) { - return this.graph.getEdgeValidationError(this.state.cell, a, b) -}; -mxEdgeHandler.prototype.createBends = function() { - for (var a = this.state.cell, b = [], c = 0; c < this.abspoints.length; c++) - if (this.isHandleVisible(c)) { - var d = c == this.abspoints.length - 1; - if ((d = 0 == c || d) || this.graph.isCellBendable(a)) { - var e = this.createHandleShape(c); - this.initBend(e); - mxClient.IS_TOUCH && e.node.setAttribute("pointer-events", "none"); - if (this.isHandleEnabled(c)) - if (mxClient.IS_TOUCH) { - var f = mxUtils.bind(this, function(a) { - a = mxUtils.convertPoint(this.graph.container, mxEvent.getClientX(a), mxEvent.getClientY(a)); - return this.graph.view.getState(this.graph.getCellAt(a.x, a.y)) - }); - mxEvent.redirectMouseEvents(e.node, this.graph, f) - } else e.node.style.cursor = mxConstants.CURSOR_BEND_HANDLE, mxEvent.redirectMouseEvents(e.node, this.graph, this.state); - b.push(e); - d || (this.points.push(new mxPoint(0, 0)), e.node.style.visibility = "hidden") - } - } - return b -}; -mxEdgeHandler.prototype.isHandleEnabled = function(a) { - return !0 -}; -mxEdgeHandler.prototype.isHandleVisible = function(a) { - return !0 -}; -mxEdgeHandler.prototype.createHandleShape = function(a) { - if (null != this.handleImage) return new mxImageShape(new mxRectangle(0, 0, this.handleImage.width, this.handleImage.height), this.handleImage.src); - a = mxConstants.HANDLE_SIZE; - this.preferHtml && (a -= 1); - return new mxRectangleShape(new mxRectangle(0, 0, a, a), mxConstants.HANDLE_FILLCOLOR, mxConstants.HANDLE_STROKECOLOR) -}; -mxEdgeHandler.prototype.initBend = function(a) { - this.preferHtml ? (a.dialect = mxConstants.DIALECT_STRICTHTML, a.init(this.graph.container)) : (a.dialect = this.graph.dialect != mxConstants.DIALECT_SVG ? mxConstants.DIALECT_MIXEDHTML : - mxConstants.DIALECT_SVG, a.init(this.graph.getView().getOverlayPane())) -}; -mxEdgeHandler.prototype.getHandleForEvent = function(a) { - if (null != this.bends) - for (var b = this.tolerance, b = this.allowHandleBoundsCheck && (mxClient.IS_IE || 0 < b) ? new mxRectangle(a.getGraphX() - b, a.getGraphY() - b, 2 * b, 2 * b) : null, c = 0; c < this.bends.length; c++) - if ((a.isSource(this.bends[c]) || null != b && mxUtils.intersects(this.bends[c].bounds, b)) && "hidden" != this.bends[c].node.style.visibility) return c; - if (a.isSource(this.labelShape) && "hidden" != this.labelShape.node.style.visibility || a.isSource(this.state.text)) - if (!mxClient.IS_SF && - !mxClient.IS_GC || "SELECT" != a.getSource().nodeName) return mxEvent.LABEL_HANDLE; - return null -}; -mxEdgeHandler.prototype.mouseDown = function(a, b) { - var c = null, - c = this.getHandleForEvent(b); - null != c && (!b.isConsumed() && this.graph.isEnabled() && !this.graph.isForceMarqueeEvent(b.getEvent())) && (this.removeEnabled && this.isRemovePointEvent(b.getEvent()) ? this.removePoint(this.state, - c) : (c != mxEvent.LABEL_HANDLE || this.graph.isLabelMovable(b.getCell())) && this.start(b.getX(), b.getY(), c), b.consume()) -}; -mxEdgeHandler.prototype.start = function(a, b, c) { - this.startX = a; - this.startY = b; - this.isSource = null == this.bends ? !1 : 0 == c; - this.isTarget = null == this.bends ? !1 : c == this.bends.length - 1; - this.isLabel = c == mxEvent.LABEL_HANDLE; - if (this.isSource || this.isTarget) { - if (a = this.state.cell, b = this.graph.model.getTerminal(a, this.isSource), null == b && this.graph.isTerminalPointMovable(a, this.isSource) || null != b && this.graph.isCellDisconnectable(a, - b, this.isSource)) this.index = c - } else this.index = c -}; -mxEdgeHandler.prototype.clonePreviewState = function(a, b) { - return this.state.clone() -}; -mxEdgeHandler.prototype.getSnapToTerminalTolerance = function() { - return this.graph.gridSize * this.graph.view.scale / 2 -}; -mxEdgeHandler.prototype.getPointForEvent = function(a) { - var b = new mxPoint(a.getGraphX(), a.getGraphY()), - c = this.getSnapToTerminalTolerance(), - d = this.graph.getView(), - e = !1, - f = !1; - if (this.snapToTerminals && 0 < c) { - var g = function(a) { - if (null != a) { - var d = a.x; - Math.abs(b.x - d) < c && (b.x = d, e = !0); - a = a.y; - Math.abs(b.y - a) < c && (b.y = a, f = !0) - } - }, - h = function(a) { - null != a && g.call(this, new mxPoint(d.getRoutingCenterX(a), d.getRoutingCenterY(a))) - }; - h.call(this, this.state.getVisibleTerminalState(!0)); - h.call(this, this.state.getVisibleTerminalState(!1)); - if (null != this.abspoints) - for (h = 0; h < this.abspoints; h++) h != this.index && g.call(this, this.abspoints[h]) - } - this.graph.isGridEnabledEvent(a.getEvent()) && (a = d.scale, h = d.translate, e || (b.x = (this.graph.snap(b.x / a - h.x) + h.x) * a), f || (b.y = (this.graph.snap(b.y / a - h.y) + h.y) * a)); - return b -}; -mxEdgeHandler.prototype.getPreviewTerminalState = function(a) { - this.constraintHandler.update(a, this.isSource); - this.marker.process(a); - a = this.marker.getValidState(); - var b = null; - null != this.constraintHandler.currentFocus && null != this.constraintHandler.currentConstraint && this.marker.reset(); - null != a ? b = a : null != this.constraintHandler.currentConstraint && null != this.constraintHandler.currentFocus && (b = this.constraintHandler.currentFocus); - return b -}; -mxEdgeHandler.prototype.getPreviewPoints = function(a) { - var b = this.graph.getCellGeometry(this.state.cell), - b = null != b.points ? b.points.slice() : null; - !this.isSource && !this.isTarget ? (this.convertPoint(a, !1), null == b ? b = [a] : b[this.index - 1] = a) : this.graph.resetEdgesOnConnect && (b = null); - return b -}; -mxEdgeHandler.prototype.updatePreviewState = function(a, b, c) { - var d = this.isSource ? c : this.state.getVisibleTerminalState(!0), - e = this.isTarget ? c : this.state.getVisibleTerminalState(!1), - f = this.graph.getConnectionConstraint(a, d, !0), - g = this.graph.getConnectionConstraint(a, e, !1), - h = this.constraintHandler.currentConstraint; - null == h && (h = new mxConnectionConstraint); - this.isSource ? f = h : this.isTarget && (g = h); - (!this.isSource || null != d) && a.view.updateFixedTerminalPoint(a, d, !0, f); - (!this.isTarget || null != e) && a.view.updateFixedTerminalPoint(a, - e, !1, g); - if ((this.isSource || this.isTarget) && null == c) a.setAbsoluteTerminalPoint(b, this.isSource), null == this.marker.getMarkedState() && (this.error = this.graph.allowDanglingEdges ? null : ""); - a.view.updatePoints(a, this.points, d, e); - a.view.updateFloatingTerminalPoints(a, d, e) -}; -mxEdgeHandler.prototype.mouseMove = function(a, b) { - if (null != this.index && null != this.marker) { - var c = this.getPointForEvent(b); - if (this.isLabel) this.label.x = c.x, this.label.y = c.y; - else { - this.points = this.getPreviewPoints(c); - var d = this.isSource || this.isTarget ? this.getPreviewTerminalState(b) : null, - e = this.clonePreviewState(c, null != d ? d.cell : null); - this.updatePreviewState(e, c, d); - this.setPreviewColor(null == this.error ? this.marker.validColor : this.marker.invalidColor); - this.abspoints = e.absolutePoints; - this.active = !0 - } - this.drawPreview(); - mxEvent.consume(b.getEvent()); - b.consume() - } else mxClient.IS_IE && null != this.getHandleForEvent(b) && b.consume(!1) -}; -mxEdgeHandler.prototype.mouseUp = function(a, b) { - if (null != this.index && null != this.marker) { - var c = this.state.cell; - if (b.getX() != this.startX || b.getY() != this.startY) - if (null != this.error) 0 < this.error.length && this.graph.validationAlert(this.error); - else if (this.isLabel) this.moveLabel(this.state, this.label.x, this.label.y); - else if (this.isSource || this.isTarget) { - var d = null; - null != this.constraintHandler.currentConstraint && null != this.constraintHandler.currentFocus && (d = this.constraintHandler.currentFocus.cell); - null == - d && this.marker.hasValidState() && (d = this.marker.validState.cell); - if (null != d) c = this.connect(c, d, this.isSource, this.graph.isCloneEvent(b.getEvent()) && this.cloneEnabled && this.graph.isCellsCloneable(), b); - else if (this.graph.isAllowDanglingEdges()) { - d = this.abspoints[this.isSource ? 0 : this.abspoints.length - 1]; - d.x = d.x / this.graph.view.scale - this.graph.view.translate.x; - d.y = d.y / this.graph.view.scale - this.graph.view.translate.y; - var e = this.graph.getView().getState(this.graph.getModel().getParent(c)); - null != e && (d.x -= - e.origin.x, d.y -= e.origin.y); - d.x -= this.graph.panDx / this.graph.view.scale; - d.y -= this.graph.panDy / this.graph.view.scale; - this.changeTerminalPoint(c, d, this.isSource) - } - } else this.active ? this.changePoints(c, this.points) : (this.graph.getView().invalidate(this.state.cell), this.graph.getView().revalidate(this.state.cell)); - null != this.marker && (this.reset(), c != this.state.cell && this.graph.setSelectionCell(c)); - b.consume() - } -}; -mxEdgeHandler.prototype.reset = function() { - this.points = this.label = this.index = this.error = null; - this.isTarget = this.isSource = this.isLabel = this.active = !1; - this.marker.reset(); - this.constraintHandler.reset(); - this.setPreviewColor(mxConstants.EDGE_SELECTION_COLOR); - this.redraw() -}; -mxEdgeHandler.prototype.setPreviewColor = function(a) { - null != this.shape && (this.shape.stroke = a) -}; -mxEdgeHandler.prototype.convertPoint = function(a, b) { - var c = this.graph.getView().getScale(), - d = this.graph.getView().getTranslate(); - b && (a.x = this.graph.snap(a.x), a.y = this.graph.snap(a.y)); - a.x = Math.round(a.x / c - d.x); - a.y = Math.round(a.y / c - d.y); - c = this.graph.getView().getState(this.graph.getModel().getParent(this.state.cell)); - null != c && (a.x -= c.origin.x, a.y -= c.origin.y); - return a -}; -mxEdgeHandler.prototype.moveLabel = function(a, b, c) { - var d = this.graph.getModel(), - e = d.getGeometry(a.cell); - if (null != e) { - var e = e.clone(), - f = this.graph.getView().getRelativePoint(a, b, c); - e.x = f.x; - e.y = f.y; - var g = this.graph.getView().scale; - e.offset = new mxPoint(0, 0); - f = this.graph.view.getPoint(a, e); - e.offset = new mxPoint((b - f.x) / g, (c - f.y) / g); - d.setGeometry(a.cell, e) - } -}; -mxEdgeHandler.prototype.connect = function(a, b, c, d, e) { - e = this.graph.getModel(); - var f = e.getParent(a); - e.beginUpdate(); - try { - if (d) { - var g = a.clone(); - e.add(f, g, e.getChildCount(f)); - var h = e.getTerminal(a, !c); - this.graph.connectCell(g, h, !c); - a = g - } - var k = this.constraintHandler.currentConstraint; - null == k && (k = new mxConnectionConstraint); - this.graph.connectCell(a, b, c, k) - } finally { - e.endUpdate() - } - return a -}; -mxEdgeHandler.prototype.changeTerminalPoint = function(a, b, c) { - var d = this.graph.getModel(), - e = d.getGeometry(a); - if (null != e) { - d.beginUpdate(); - try { - e = e.clone(), e.setTerminalPoint(b, c), d.setGeometry(a, e), this.graph.connectCell(a, null, c, new mxConnectionConstraint) - } finally { - d.endUpdate() - } - } -}; -mxEdgeHandler.prototype.changePoints = function(a, b) { - var c = this.graph.getModel(), - d = c.getGeometry(a); - null != d && (d = d.clone(), d.points = b, c.setGeometry(a, d)) -}; -mxEdgeHandler.prototype.addPoint = function(a, b) { - var c = mxUtils.convertPoint(this.graph.container, mxEvent.getClientX(b), mxEvent.getClientY(b)), - d = this.graph.isGridEnabledEvent(b); - this.convertPoint(c, d); - this.addPointAt(a, c.x, c.y); - mxEvent.consume(b) -}; -mxEdgeHandler.prototype.addPointAt = function(a, b, c) { - var d = this.graph.getCellGeometry(a.cell); - b = new mxPoint(b, c); - if (null != d) { - d = d.clone(); - c = this.graph.view.translate; - var e = this.graph.view.scale; - c = mxUtils.findNearestSegment(a, (b.x + c.x) * e, (b.y + c.y) * e); - null == d.points ? d.points = [b] : d.points.splice(c, 0, b); - this.graph.getModel().setGeometry(a.cell, d); - this.destroy(); - this.init() - } -}; -mxEdgeHandler.prototype.removePoint = function(a, b) { - if (0 < b && b < this.abspoints.length - 1) { - var c = this.graph.getCellGeometry(this.state.cell); - null != c && null != c.points && (c = c.clone(), c.points.splice(b - 1, 1), this.graph.getModel().setGeometry(a.cell, c), this.destroy(), this.init()) - } -}; -mxEdgeHandler.prototype.getHandleFillColor = function(a) { - a = 0 == a; - var b = this.state.cell, - c = this.graph.getModel().getTerminal(b, a), - d = mxConstants.HANDLE_FILLCOLOR; - null != c && !this.graph.isCellDisconnectable(b, c, a) || null == c && !this.graph.isTerminalPointMovable(b, a) ? d = mxConstants.LOCKED_HANDLE_FILLCOLOR : null != c && this.graph.isCellDisconnectable( - b, c, a) && (d = mxConstants.CONNECT_HANDLE_FILLCOLOR); - return d -}; -mxEdgeHandler.prototype.redraw = function() { - this.abspoints = this.state.absolutePoints.slice(); - var a = this.state.cell, - b = mxConstants.LABEL_HANDLE_SIZE; - this.label = new mxPoint(this.state.absoluteOffset.x, this.state.absoluteOffset.y); - this.labelShape.bounds = new mxRectangle(Math.round(this.label.x - b / 2), Math.round(this.label.y - b / 2), b, b); - this.labelShape.redraw(); - b = this.graph.getLabel(a); - null != b && 0 < b.length && this.graph.isLabelMovable(a) ? this.labelShape.node.style.visibility = "visible" : this.labelShape.node.style.visibility = - "hidden"; - if (null != this.bends && 0 < this.bends.length) { - var c = this.abspoints.length - 1, - a = this.abspoints[0], - d = this.abspoints[0].y, - b = this.bends[0].bounds; - this.bends[0].bounds = new mxRectangle(Math.round(this.abspoints[0].x - b.width / 2), Math.round(d - b.height / 2), b.width, b.height); - this.bends[0].fill = this.getHandleFillColor(0); - this.bends[0].redraw(); - var d = this.abspoints[c], - e = this.abspoints[c].x, - c = this.abspoints[c].y, - f = this.bends.length - 1, - b = this.bends[f].bounds; - this.bends[f].bounds = new mxRectangle(Math.round(e - b.width / - 2), Math.round(c - b.height / 2), b.width, b.height); - this.bends[f].fill = this.getHandleFillColor(f); - this.bends[f].redraw(); - this.redrawInnerBends(a, d) - } - this.drawPreview() -}; -mxEdgeHandler.prototype.redrawInnerBends = function(a, b) { - var c = this.graph.getModel().getGeometry(this.state.cell).points; - if (null != c) { - null == this.points && (this.points = []); - for (var d = 1; d < this.bends.length - 1; d++) - if (null != this.bends[d]) - if (null != this.abspoints[d]) { - var e = this.abspoints[d].x, - f = this.abspoints[d].y, - g = this.bends[d].bounds; - this.bends[d].node.style.visibility = "visible"; - this.bends[d].bounds = new mxRectangle(Math.round(e - g.width / 2), Math.round(f - g.height / 2), g.width, g.height); - this.bends[d].redraw(); - this.points[d - - 1] = c[d - 1] - } else this.bends[d].destroy(), this.bends[d] = null - } -}; -mxEdgeHandler.prototype.drawPreview = function() { - if (this.isLabel) { - var a = mxConstants.LABEL_HANDLE_SIZE, - a = new mxRectangle(Math.round(this.label.x - a / 2), Math.round(this.label.y - a / 2), a, a); - this.labelShape.bounds = a; - this.labelShape.redraw() - } else this.shape.points = this.abspoints, this.shape.redraw() -}; -mxEdgeHandler.prototype.destroy = function() { - null != this.marker && (this.marker.destroy(), this.marker = null); - null != this.shape && (this.shape.destroy(), this.shape = null); - null != this.labelShape && (this.labelShape.destroy(), this.labelShape = null); - null != this.constraintHandler && (this.constraintHandler.destroy(), this.constraintHandler = null); - if (null != this.bends) - for (var a = 0; a < this.bends.length; a++) null != this.bends[a] && (this.bends[a].destroy(), this.bends[a] = null) -}; - -function mxElbowEdgeHandler(a) { - mxEdgeHandler.call(this, a) -} -mxUtils.extend(mxElbowEdgeHandler, mxEdgeHandler); -mxElbowEdgeHandler.prototype = new mxEdgeHandler; -mxElbowEdgeHandler.prototype.constructor = mxElbowEdgeHandler; -mxElbowEdgeHandler.prototype.flipEnabled = !0; -mxElbowEdgeHandler.prototype.doubleClickOrientationResource = "none" != mxClient.language ? "doubleClickOrientation" : ""; -mxElbowEdgeHandler.prototype.createBends = function() { - var a = [], - b = this.createHandleShape(0); - this.initBend(b); - b.node.style.cursor = mxConstants.CURSOR_BEND_HANDLE; - mxEvent.redirectMouseEvents(b.node, this.graph, this.state); - a.push(b); - mxClient.IS_TOUCH && b.node.setAttribute("pointer-events", "none"); - a.push(this.createVirtualBend()); - this.points.push(new mxPoint(0, 0)); - b = this.createHandleShape(2); - this.initBend(b); - b.node.style.cursor = mxConstants.CURSOR_BEND_HANDLE; - mxEvent.redirectMouseEvents(b.node, this.graph, this.state); - a.push(b); - mxClient.IS_TOUCH && b.node.setAttribute("pointer-events", "none"); - return a -}; -mxElbowEdgeHandler.prototype.createVirtualBend = function() { - var a = this.createHandleShape(); - this.initBend(a); - var b = this.getCursorForBend(); - a.node.style.cursor = b; - b = mxUtils.bind(this, function(a) { - !mxEvent.isConsumed(a) && this.flipEnabled && (this.graph.flipEdge(this.state.cell, a), mxEvent.consume(a)) - }); - mxEvent.redirectMouseEvents(a.node, this.graph, this.state, null, null, null, b); - this.graph.isCellBendable(this.state.cell) || (a.node.style.display = "none"); - return a -}; -mxElbowEdgeHandler.prototype.getCursorForBend = function() { - return this.state.style[mxConstants.STYLE_EDGE] == mxEdgeStyle.TopToBottom || this.state.style[mxConstants.STYLE_EDGE] == mxConstants.EDGESTYLE_TOPTOBOTTOM || (this.state.style[mxConstants.STYLE_EDGE] == - mxEdgeStyle.ElbowConnector || this.state.style[mxConstants.STYLE_EDGE] == mxConstants.EDGESTYLE_ELBOW) && this.state.style[mxConstants.STYLE_ELBOW] == mxConstants.ELBOW_VERTICAL ? - "row-resize" : "col-resize" -}; -mxElbowEdgeHandler.prototype.getTooltipForNode = function(a) { - var b = null; - if (null != this.bends && null != this.bends[1] && (a == this.bends[1].node || a.parentNode == this.bends[1].node)) b = this.doubleClickOrientationResource, b = mxResources.get(b) || b; - return b -}; -mxElbowEdgeHandler.prototype.convertPoint = function(a, b) { - var c = this.graph.getView().getScale(), - d = this.graph.getView().getTranslate(), - e = this.state.origin; - b && (a.x = this.graph.snap(a.x), a.y = this.graph.snap(a.y)); - a.x = Math.round(a.x / c - d.x - e.x); - a.y = Math.round(a.y / c - d.y - e.y) -}; -mxElbowEdgeHandler.prototype.redrawInnerBends = function(a, b) { - var c = this.graph.getModel().getGeometry(this.state.cell).points, - c = null != c ? c[0] : null, - c = null == c ? new mxPoint(a.x + (b.x - a.x) / 2, a.y + (b.y - a.y) / 2) : new mxPoint(this.graph.getView().scale * (c.x + this.graph.getView().translate.x + this.state.origin.x), this.graph.getView() - .scale * (c.y + this.graph.getView().translate.y + this.state.origin.y)), - d = this.bends[1].bounds, - e = d.width, - d = d.height; - null == this.handleImage && (d = e = mxConstants.HANDLE_SIZE); - var f = new mxRectangle(Math.round(c.x - - e / 2), Math.round(c.y - d / 2), e, d); - null == this.handleImage && ("hidden" != this.labelShape.node.style.visibility && mxUtils.intersects(f, this.labelShape.bounds)) && (e += 3, d += 3, f = new mxRectangle(Math.round(c.x - e / 2), - Math.round(c.y - d / 2), e, d)); - this.bends[1].bounds = f; - this.bends[1].redraw() -}; - -function mxEdgeSegmentHandler(a) { - mxEdgeHandler.call(this, a) -} -mxUtils.extend(mxEdgeSegmentHandler, mxEdgeHandler); -mxEdgeSegmentHandler.prototype = new mxElbowEdgeHandler; -mxEdgeSegmentHandler.prototype.constructor = mxEdgeSegmentHandler; -mxEdgeSegmentHandler.prototype.getPreviewPoints = function(a) { - if (this.isSource || this.isTarget) return mxElbowEdgeHandler.prototype.getPreviewPoints.apply(this, arguments); - this.convertPoint(a, !1); - var b = this.state.absolutePoints, - c = b[0].clone(); - this.convertPoint(c, !1); - for (var d = [], e = 1; e < b.length; e++) { - var f = b[e].clone(); - this.convertPoint(f, !1); - e == this.index && (c.x == f.x ? (c.x = a.x, f.x = a.x) : (c.y = a.y, f.y = a.y)); - e < b.length - 1 && d.push(f); - c = f - } - if (1 == d.length) { - if (c = this.state.view, e = this.state.getVisibleTerminalState(!0), - f = this.state.getVisibleTerminalState(!1), null != f & null != e) { - var g = this.state.origin.x, - h = this.state.origin.y; - mxUtils.contains(f, d[0].x + g, d[0].y + h) ? b[1].y == b[2].y ? d[0].y = c.getRoutingCenterY(e) - h : d[0].x = c.getRoutingCenterX(e) - g : mxUtils.contains(e, d[0].x + g, d[0].y + h) && (b[ - 1].y == b[0].y ? d[0].y = c.getRoutingCenterY(f) - h : d[0].x = c.getRoutingCenterX(f) - g) - } - } else 0 == d.length && (d = [a]); - return d -}; -mxEdgeSegmentHandler.prototype.createBends = function() { - var a = [], - b = this.createHandleShape(0); - this.initBend(b); - b.node.style.cursor = mxConstants.CURSOR_BEND_HANDLE; - mxEvent.redirectMouseEvents(b.node, this.graph, this.state); - a.push(b); - mxClient.IS_TOUCH && b.node.setAttribute("pointer-events", "none"); - var c = this.state.absolutePoints; - if (this.graph.isCellBendable(this.state.cell)) { - null == this.points && (this.points = []); - for (var d = 0; d < c.length - 1; d++) b = this.createVirtualBend(), a.push(b), b.node.style.cursor = 0 == c[d].x - - c[d + 1].x ? "col-resize" : "row-resize", this.points.push(new mxPoint(0, 0)), mxClient.IS_TOUCH && b.node.setAttribute("pointer-events", "none") - } - b = this.createHandleShape(c.length); - this.initBend(b); - b.node.style.cursor = mxConstants.CURSOR_BEND_HANDLE; - mxEvent.redirectMouseEvents(b.node, this.graph, this.state); - a.push(b); - mxClient.IS_TOUCH && b.node.setAttribute("pointer-events", "none"); - return a -}; -mxEdgeSegmentHandler.prototype.redraw = function() { - this.refresh(); - mxEdgeHandler.prototype.redraw.apply(this, arguments) -}; -mxEdgeSegmentHandler.prototype.refresh = function() { - if (null != this.bends) { - for (var a = 0; a < this.bends.length; a++) null != this.bends[a] && (this.bends[a].destroy(), this.bends[a] = null); - this.bends = this.createBends() - } -}; -mxEdgeSegmentHandler.prototype.redrawInnerBends = function(a, b) { - if (this.graph.isCellBendable(this.state.cell)) { - var c = mxConstants.HANDLE_SIZE, - d = this.state.absolutePoints; - if (null != d && 1 < d.length) - for (var e = 0; e < this.state.absolutePoints.length - 1; e++) - if (null != this.bends[e + 1]) { - a = d[e]; - b = d[e + 1]; - var f = new mxPoint(a.x + (b.x - a.x) / 2, a.y + (b.y - a.y) / 2); - this.bends[e + 1].bounds = new mxRectangle(Math.round(f.x - c / 2), Math.round(f.y - c / 2), c, c); - this.bends[e + 1].redraw() - } - } -}; -mxEdgeSegmentHandler.prototype.changePoints = function(a, b) { - b = []; - var c = this.abspoints; - if (1 < c.length) - for (var d = c[0], e = c[1], f = 2; f < c.length; f++) { - var g = c[f]; - if ((Math.round(d.x) != Math.round(e.x) || Math.round(e.x) != Math.round(g.x)) && (Math.round(d.y) != Math.round(e.y) || Math.round(e.y) != Math.round(g.y))) d = e, e = e.clone(), this.convertPoint( - e, !1), b.push(e); - e = g - } - mxElbowEdgeHandler.prototype.changePoints.apply(this, arguments) -}; - -function mxKeyHandler(a, b) { - null != a && (this.graph = a, this.target = b || document.documentElement, this.normalKeys = [], this.shiftKeys = [], this.controlKeys = [], this.controlShiftKeys = [], mxEvent.addListener(this.target, - "keydown", mxUtils.bind(this, function(a) { - this.keyDown(a) - })), mxClient.IS_IE && mxEvent.addListener(window, "unload", mxUtils.bind(this, function() { - this.destroy() - }))) -} -mxKeyHandler.prototype.graph = null; -mxKeyHandler.prototype.target = null; -mxKeyHandler.prototype.normalKeys = null; -mxKeyHandler.prototype.shiftKeys = null; -mxKeyHandler.prototype.controlKeys = null; -mxKeyHandler.prototype.controlShiftKeys = null; -mxKeyHandler.prototype.enabled = !0; -mxKeyHandler.prototype.isEnabled = function() { - return this.enabled -}; -mxKeyHandler.prototype.setEnabled = function(a) { - this.enabled = a -}; -mxKeyHandler.prototype.bindKey = function(a, b) { - this.normalKeys[a] = b -}; -mxKeyHandler.prototype.bindShiftKey = function(a, b) { - this.shiftKeys[a] = b -}; -mxKeyHandler.prototype.bindControlKey = function(a, b) { - this.controlKeys[a] = b -}; -mxKeyHandler.prototype.bindControlShiftKey = function(a, b) { - this.controlShiftKeys[a] = b -}; -mxKeyHandler.prototype.isControlDown = function(a) { - return mxEvent.isControlDown(a) -}; -mxKeyHandler.prototype.getFunction = function(a) { - return null != a ? this.isControlDown(a) ? mxEvent.isShiftDown(a) ? this.controlShiftKeys[a.keyCode] : this.controlKeys[a.keyCode] : mxEvent.isShiftDown(a) ? this.shiftKeys[a.keyCode] : this.normalKeys[ - a.keyCode] : null -}; -mxKeyHandler.prototype.isGraphEvent = function(a) { - a = mxEvent.getSource(a); - if (a == this.target || a.parentNode == this.target || null != this.graph.cellEditor && a == this.graph.cellEditor.textarea) return !0; - for (; null != a;) { - if (a == this.graph.container) return !0; - a = a.parentNode - } - return !1 -}; -mxKeyHandler.prototype.keyDown = function(a) { - if (this.graph.isEnabled() && !mxEvent.isConsumed(a) && this.isGraphEvent(a) && this.isEnabled()) - if (27 == a.keyCode) this.escape(a); - else if (!this.graph.isEditing()) { - var b = this.getFunction(a); - null != b && (b(a), mxEvent.consume(a)) - } -}; -mxKeyHandler.prototype.escape = function(a) { - this.graph.isEscapeEnabled() && this.graph.escape(a) -}; -mxKeyHandler.prototype.destroy = function() { - this.target = null -}; - -function mxTooltipHandler(a, b) { - null != a && (this.graph = a, this.delay = b || 500, this.graph.addMouseListener(this)) -} -mxTooltipHandler.prototype.zIndex = 10005; -mxTooltipHandler.prototype.graph = null; -mxTooltipHandler.prototype.delay = null; -mxTooltipHandler.prototype.hideOnHover = !1; -mxTooltipHandler.prototype.enabled = !0; -mxTooltipHandler.prototype.isEnabled = function() { - return this.enabled -}; -mxTooltipHandler.prototype.setEnabled = function(a) { - this.enabled = a -}; -mxTooltipHandler.prototype.isHideOnHover = function() { - return this.hideOnHover -}; -mxTooltipHandler.prototype.setHideOnHover = function(a) { - this.hideOnHover = a -}; -mxTooltipHandler.prototype.init = function() { - null != document.body && (this.div = document.createElement("div"), this.div.className = "mxTooltip", this.div.style.visibility = "hidden", this.div.style.zIndex = this.zIndex, document.body.appendChild( - this.div), mxEvent.addListener(this.div, "mousedown", mxUtils.bind(this, function(a) { - this.hideTooltip() - }))) -}; -mxTooltipHandler.prototype.mouseDown = function(a, b) { - this.reset(b, !1); - this.hideTooltip() -}; -mxTooltipHandler.prototype.mouseMove = function(a, b) { - if (b.getX() != this.lastX || b.getY() != this.lastY) this.reset(b, !0), (this.isHideOnHover() || b.getState() != this.state || b.getSource() != this.node && (!this.stateSource || null != b.getState() && - this.stateSource == (b.isSource(b.getState().shape) || !b.isSource(b.getState().text)))) && this.hideTooltip(); - this.lastX = b.getX(); - this.lastY = b.getY() -}; -mxTooltipHandler.prototype.mouseUp = function(a, b) { - this.reset(b, !0); - this.hideTooltip() -}; -mxTooltipHandler.prototype.resetTimer = function() { - null != this.thread && (window.clearTimeout(this.thread), this.thread = null) -}; -mxTooltipHandler.prototype.reset = function(a, b) { - this.resetTimer(); - if (b && this.isEnabled() && null != a.getState() && (null == this.div || "hidden" == this.div.style.visibility)) { - var c = a.getState(), - d = a.getSource(), - e = a.getX(), - f = a.getY(), - g = a.isSource(c.shape) || a.isSource(c.text); - this.thread = window.setTimeout(mxUtils.bind(this, function() { - if (!this.graph.isEditing() && !this.graph.panningHandler.isMenuShowing()) { - var a = this.graph.getTooltip(c, d, e, f); - this.show(a, e, f); - this.state = c; - this.node = d; - this.stateSource = g - } - }), this.delay) - } -}; -mxTooltipHandler.prototype.hide = function() { - this.resetTimer(); - this.hideTooltip() -}; -mxTooltipHandler.prototype.hideTooltip = function() { - null != this.div && (this.div.style.visibility = "hidden") -}; -mxTooltipHandler.prototype.show = function(a, b, c) { - if (null != a && 0 < a.length) { - null == this.div && this.init(); - var d = mxUtils.getScrollOrigin(); - this.div.style.left = b + d.x + "px"; - this.div.style.top = c + mxConstants.TOOLTIP_VERTICAL_OFFSET + d.y + "px"; - mxUtils.isNode(a) ? (this.div.innerHTML = "", this.div.appendChild(a)) : this.div.innerHTML = a.replace(/\n/g, "\x3cbr\x3e"); - this.div.style.visibility = ""; - mxUtils.fit(this.div) - } -}; -mxTooltipHandler.prototype.destroy = function() { - this.graph.removeMouseListener(this); - mxEvent.release(this.div); - null != this.div && null != this.div.parentNode && this.div.parentNode.removeChild(this.div); - this.div = null -}; - -function mxCellTracker(a, b, c) { - mxCellMarker.call(this, a, b); - this.graph.addMouseListener(this); - null != c && (this.getCell = c); - mxClient.IS_IE && mxEvent.addListener(window, "unload", mxUtils.bind(this, function() { - this.destroy() - })) -} -mxUtils.extend(mxCellTracker, mxCellMarker); -mxCellTracker.prototype.mouseDown = function(a, b) {}; -mxCellTracker.prototype.mouseMove = function(a, b) { - this.isEnabled() && this.process(b) -}; -mxCellTracker.prototype.mouseUp = function(a, b) { - this.reset() -}; -mxCellTracker.prototype.destroy = function() { - this.destroyed || (this.destroyed = !0, this.graph.removeMouseListener(this), mxCellMarker.prototype.destroy.apply(this)) -}; - -function mxCellHighlight(a, b, c, d) { - null != a && (this.graph = a, this.highlightColor = null != b ? b : mxConstants.DEFAULT_VALID_COLOR, this.strokeWidth = null != c ? c : mxConstants.HIGHLIGHT_STROKEWIDTH, this.dashed = null != d ? - d : !1, this.repaintHandler = mxUtils.bind(this, function() { - this.repaint() - }), this.graph.getView().addListener(mxEvent.SCALE, this.repaintHandler), this.graph.getView().addListener(mxEvent.TRANSLATE, this.repaintHandler), this.graph.getView().addListener(mxEvent.SCALE_AND_TRANSLATE, - this.repaintHandler), this.graph.getModel().addListener(mxEvent.CHANGE, - this.repaintHandler), this.resetHandler = mxUtils.bind(this, function() { - this.hide() - }), this.graph.getView().addListener(mxEvent.DOWN, this.resetHandler), this.graph.getView().addListener(mxEvent.UP, this.resetHandler)) -} -mxCellHighlight.prototype.keepOnTop = !1; -mxCellHighlight.prototype.graph = !0; -mxCellHighlight.prototype.state = null; -mxCellHighlight.prototype.spacing = 2; -mxCellHighlight.prototype.resetHandler = null; -mxCellHighlight.prototype.setHighlightColor = function(a) { - this.highlightColor = a; - null != this.shape && (this.shape.stroke = a) -}; -mxCellHighlight.prototype.drawHighlight = function() { - this.shape = this.createShape(); - this.repaint(); - !this.keepOnTop && this.shape.node.parentNode.firstChild != this.shape.node && this.shape.node.parentNode.insertBefore(this.shape.node, this.shape.node.parentNode.firstChild) -}; -mxCellHighlight.prototype.createShape = function() { - var a = null, - a = this.graph.model.isEdge(this.state.cell) ? new mxPolyline(this.state.absolutePoints, this.highlightColor, this.strokeWidth) : new mxRectangleShape(new mxRectangle, null, this.highlightColor, - this.strokeWidth); - a.dialect = this.graph.dialect != mxConstants.DIALECT_SVG ? mxConstants.DIALECT_VML : mxConstants.DIALECT_SVG; - a.init(this.graph.getView().getOverlayPane()); - mxEvent.redirectMouseEvents(a.node, this.graph, this.state); - a.svgStrokeTolerance = 0; - a.pointerEvents = !1; - a.isDashed = this.dashed; - return a -}; -mxCellHighlight.prototype.repaint = function() { - if (null != this.state && null != this.shape) { - var a = 0; - this.graph.model.isEdge(this.state.cell) ? this.shape.points = this.state.absolutePoints : (this.shape.bounds = new mxRectangle(this.state.x - this.spacing, this.state.y - this.spacing, this.state - .width + 2 * this.spacing, this.state.height + 2 * this.spacing), a = Number(this.state.style[mxConstants.STYLE_ROTATION] || "0")); - null != this.state.shape && this.shape.setCursor(this.state.shape.getCursor()); - 0 != a && (this.shape.rotation = a); - this.shape.redraw() - } -}; -mxCellHighlight.prototype.hide = function() { - this.highlight(null) -}; -mxCellHighlight.prototype.highlight = function(a) { - this.state != a && (null != this.shape && (this.shape.destroy(), this.shape = null), this.state = a, null != this.state && this.drawHighlight()) -}; -mxCellHighlight.prototype.destroy = function() { - this.graph.getView().removeListener(this.repaintHandler); - this.graph.getModel().removeListener(this.repaintHandler); - this.graph.getView().removeListener(this.resetHandler); - this.graph.getModel().removeListener(this.resetHandler); - null != this.shape && (this.shape.destroy(), this.shape = null) -}; - -function mxDefaultKeyHandler(a) { - if (null != a) { - this.editor = a; - this.handler = new mxKeyHandler(a.graph); - var b = this.handler.escape; - this.handler.escape = function(c) { - b.apply(this, arguments); - a.hideProperties(); - a.fireEvent(new mxEventObject(mxEvent.ESCAPE, "event", c)) - } - } -} -mxDefaultKeyHandler.prototype.editor = null; -mxDefaultKeyHandler.prototype.handler = null; -mxDefaultKeyHandler.prototype.bindAction = function(a, b, c) { - var d = mxUtils.bind(this, function() { - this.editor.execute(b) - }); - c ? this.handler.bindControlKey(a, d) : this.handler.bindKey(a, d) -}; -mxDefaultKeyHandler.prototype.destroy = function() { - this.handler.destroy(); - this.handler = null -}; - -function mxDefaultPopupMenu(a) { - this.config = a -} -mxDefaultPopupMenu.prototype.imageBasePath = null; -mxDefaultPopupMenu.prototype.config = null; -mxDefaultPopupMenu.prototype.createMenu = function(a, b, c, d) { - if (null != this.config) { - var e = this.createConditions(a, c, d); - this.addItems(a, b, c, d, e, this.config.firstChild, null) - } -}; -mxDefaultPopupMenu.prototype.addItems = function(a, b, c, d, e, f, g) { - for (var h = !1; null != f;) { - if ("add" == f.nodeName) { - var k = f.getAttribute("if"); - if (null == k || e[k]) { - var k = f.getAttribute("as"), - k = mxResources.get(k) || k, - l = mxUtils.eval(mxUtils.getTextContent(f)), - m = f.getAttribute("action"), - n = f.getAttribute("icon"), - p = f.getAttribute("iconCls"); - h && (b.addSeparator(g), h = !1); - null != n && this.imageBasePath && (n = this.imageBasePath + n); - k = this.addAction(b, a, k, n, l, m, c, g, p); - this.addItems(a, b, c, d, e, f.firstChild, k) - } - } else "separator" == - f.nodeName && (h = !0); - f = f.nextSibling - } -}; -mxDefaultPopupMenu.prototype.addAction = function(a, b, c, d, e, f, g, h, k) { - return a.addItem(c, d, function(a) { - "function" == typeof e && e.call(b, b, g, a); - null != f && b.execute(f, g, a) - }, h, k) -}; -mxDefaultPopupMenu.prototype.createConditions = function(a, b, c) { - var d = a.graph.getModel(), - e = d.getChildCount(b), - f = []; - f.nocell = null == b; - f.ncells = 1 < a.graph.getSelectionCount(); - f.notRoot = d.getRoot() != d.getParent(a.graph.getDefaultParent()); - f.cell = null != b; - d = null != b && 1 == a.graph.getSelectionCount(); - f.nonEmpty = d && 0 < e; - f.expandable = d && a.graph.isCellFoldable(b, !1); - f.collapsable = d && a.graph.isCellFoldable(b, !0); - f.validRoot = d && a.graph.isValidRoot(b); - f.emptyValidRoot = f.validRoot && 0 == e; - f.swimlane = d && a.graph.isSwimlane(b); - e = this.config.getElementsByTagName("condition"); - for (d = 0; d < e.length; d++) { - var g = mxUtils.eval(mxUtils.getTextContent(e[d])), - h = e[d].getAttribute("name"); - null != h && "function" == typeof g && (f[h] = g(a, b, c)) - } - return f -}; - -function mxDefaultToolbar(a, b) { - this.editor = b; - null != a && null != b && this.init(a) -} -mxDefaultToolbar.prototype.editor = null; -mxDefaultToolbar.prototype.toolbar = null; -mxDefaultToolbar.prototype.resetHandler = null; -mxDefaultToolbar.prototype.spacing = 4; -mxDefaultToolbar.prototype.connectOnDrop = !1; -mxDefaultToolbar.prototype.init = function(a) { - null != a && (this.toolbar = new mxToolbar(a), this.toolbar.addListener(mxEvent.SELECT, mxUtils.bind(this, function(a, c) { - var d = c.getProperty("function"); - this.editor.insertFunction = null != d ? mxUtils.bind(this, function() { - d.apply(this, arguments); - this.toolbar.resetMode() - }) : null - })), this.resetHandler = mxUtils.bind(this, function() { - null != this.toolbar && this.toolbar.resetMode(!0) - }), this.editor.graph.addListener(mxEvent.DOUBLE_CLICK, this.resetHandler), this.editor.addListener(mxEvent.ESCAPE, - this.resetHandler)) -}; -mxDefaultToolbar.prototype.addItem = function(a, b, c, d) { - var e = mxUtils.bind(this, function() { - null != c && 0 < c.length && this.editor.execute(c) - }); - return this.toolbar.addItem(a, b, e, d) -}; -mxDefaultToolbar.prototype.addSeparator = function(a) { - a = a || mxClient.imageBasePath + "/separator.gif"; - this.toolbar.addSeparator(a) -}; -mxDefaultToolbar.prototype.addCombo = function() { - return this.toolbar.addCombo() -}; -mxDefaultToolbar.prototype.addActionCombo = function(a) { - return this.toolbar.addActionCombo(a) -}; -mxDefaultToolbar.prototype.addActionOption = function(a, b, c) { - var d = mxUtils.bind(this, function() { - this.editor.execute(c) - }); - this.addOption(a, b, d) -}; -mxDefaultToolbar.prototype.addOption = function(a, b, c) { - return this.toolbar.addOption(a, b, c) -}; -mxDefaultToolbar.prototype.addMode = function(a, b, c, d, e) { - var f = mxUtils.bind(this, function() { - this.editor.setMode(c); - null != e && e(this.editor) - }); - return this.toolbar.addSwitchMode(a, b, f, d) -}; -mxDefaultToolbar.prototype.addPrototype = function(a, b, c, d, e, f) { - var g = function() { - return "function" == typeof c ? c() : null != c ? c.clone() : null - }, - h = mxUtils.bind(this, function(a, b) { - "function" == typeof e ? e(this.editor, g(), a, b) : this.drop(g(), a, b); - this.toolbar.resetMode(); - mxEvent.consume(a) - }); - a = this.toolbar.addMode(a, b, h, d, null, f); - this.installDropHandler(a, function(a, b, c) { - h(b, c) - }); - return a -}; -mxDefaultToolbar.prototype.drop = function(a, b, c) { - var d = this.editor.graph, - e = d.getModel(); - if (null == c || e.isEdge(c) || !this.connectOnDrop || !d.isCellConnectable(c)) { - for (; null != c && !d.isValidDropTarget(c, [a], b);) c = e.getParent(c); - this.insert(a, b, c) - } else this.connect(a, b, c) -}; -mxDefaultToolbar.prototype.insert = function(a, b, c) { - var d = this.editor.graph; - if (d.canImportCell(a)) { - var e = mxEvent.getClientX(b), - f = mxEvent.getClientY(b), - e = mxUtils.convertPoint(d.container, e, f); - return d.isSplitEnabled() && d.isSplitTarget(c, [a], b) ? d.splitEdge(c, [a], null, e.x, e.y) : this.editor.addVertex(c, a, e.x, e.y) - } - return null -}; -mxDefaultToolbar.prototype.connect = function(a, b, c) { - b = this.editor.graph; - var d = b.getModel(); - if (null != c && b.isCellConnectable(a) && b.isEdgeValid(null, c, a)) { - var e = null; - d.beginUpdate(); - try { - var f = d.getGeometry(c), - g = d.getGeometry(a).clone(); - g.x = f.x + (f.width - g.width) / 2; - g.y = f.y + (f.height - g.height) / 2; - var h = this.spacing * b.gridSize, - k = 20 * d.getDirectedEdgeCount(c, !0); - this.editor.horizontalFlow ? g.x += (g.width + f.width) / 2 + h + k : g.y += (g.height + f.height) / 2 + h + k; - a.setGeometry(g); - var l = d.getParent(c); - b.addCell(a, l); - b.constrainChild(a); - e = this.editor.createEdge(c, a); - if (null == d.getGeometry(e)) { - var m = new mxGeometry; - m.relative = !0; - d.setGeometry(e, m) - } - b.addEdge(e, l, c, a) - } finally { - d.endUpdate() - } - b.setSelectionCells([a, e]); - b.scrollCellToVisible(a) - } -}; -mxDefaultToolbar.prototype.installDropHandler = function(a, b) { - var c = document.createElement("img"); - c.setAttribute("src", a.getAttribute("src")); - var d = mxUtils.bind(this, function(e) { - c.style.width = 2 * a.offsetWidth + "px"; - c.style.height = 2 * a.offsetHeight + "px"; - mxUtils.makeDraggable(a, this.editor.graph, b, c); - mxEvent.removeListener(c, "load", d) - }); - mxClient.IS_IE ? d() : mxEvent.addListener(c, "load", d) -}; -mxDefaultToolbar.prototype.destroy = function() { - null != this.resetHandler && (this.editor.graph.removeListener("dblclick", this.resetHandler), this.editor.removeListener("escape", this.resetHandler), this.resetHandler = null); - null != this.toolbar && (this.toolbar.destroy(), this.toolbar = null) -}; - -function mxEditor(a) { - this.actions = []; - this.addActions(); - if (null != document.body) { - this.cycleAttributeValues = []; - this.popupHandler = new mxDefaultPopupMenu; - this.undoManager = new mxUndoManager; - this.graph = this.createGraph(); - this.toolbar = this.createToolbar(); - this.keyHandler = new mxDefaultKeyHandler(this); - this.configure(a); - this.graph.swimlaneIndicatorColorAttribute = this.cycleAttributeName; - !mxClient.IS_LOCAL && null != this.urlInit && (this.session = this.createSession()); - if (null != this.onInit) this.onInit(); - mxClient.IS_IE && - mxEvent.addListener(window, "unload", mxUtils.bind(this, function() { - this.destroy() - })) - } -} -mxLoadResources && mxResources.add(mxClient.basePath + "/resources/editor"); -mxEditor.prototype = new mxEventSource; -mxEditor.prototype.constructor = mxEditor; -mxEditor.prototype.askZoomResource = "none" != mxClient.language ? "askZoom" : ""; -mxEditor.prototype.lastSavedResource = "none" != mxClient.language ? "lastSaved" : ""; -mxEditor.prototype.currentFileResource = "none" != mxClient.language ? "currentFile" : ""; -mxEditor.prototype.propertiesResource = "none" != mxClient.language ? "properties" : ""; -mxEditor.prototype.tasksResource = "none" != mxClient.language ? "tasks" : ""; -mxEditor.prototype.helpResource = "none" != mxClient.language ? "help" : ""; -mxEditor.prototype.outlineResource = "none" != mxClient.language ? "outline" : ""; -mxEditor.prototype.outline = null; -mxEditor.prototype.graph = null; -mxEditor.prototype.graphRenderHint = null; -mxEditor.prototype.toolbar = null; -mxEditor.prototype.session = null; -mxEditor.prototype.status = null; -mxEditor.prototype.popupHandler = null; -mxEditor.prototype.undoManager = null; -mxEditor.prototype.keyHandler = null; -mxEditor.prototype.actions = null; -mxEditor.prototype.dblClickAction = "edit"; -mxEditor.prototype.swimlaneRequired = !1; -mxEditor.prototype.disableContextMenu = !0; -mxEditor.prototype.insertFunction = null; -mxEditor.prototype.forcedInserting = !1; -mxEditor.prototype.templates = null; -mxEditor.prototype.defaultEdge = null; -mxEditor.prototype.defaultEdgeStyle = null; -mxEditor.prototype.defaultGroup = null; -mxEditor.prototype.groupBorderSize = null; -mxEditor.prototype.filename = null; -mxEditor.prototype.linefeed = "\x26#xa;"; -mxEditor.prototype.postParameterName = "xml"; -mxEditor.prototype.escapePostData = !0; -mxEditor.prototype.urlPost = null; -mxEditor.prototype.urlImage = null; -mxEditor.prototype.urlInit = null; -mxEditor.prototype.urlNotify = null; -mxEditor.prototype.urlPoll = null; -mxEditor.prototype.horizontalFlow = !1; -mxEditor.prototype.layoutDiagram = !1; -mxEditor.prototype.swimlaneSpacing = 0; -mxEditor.prototype.maintainSwimlanes = !1; -mxEditor.prototype.layoutSwimlanes = !1; -mxEditor.prototype.cycleAttributeValues = null; -mxEditor.prototype.cycleAttributeIndex = 0; -mxEditor.prototype.cycleAttributeName = "fillColor"; -mxEditor.prototype.tasks = null; -mxEditor.prototype.tasksWindowImage = null; -mxEditor.prototype.tasksTop = 20; -mxEditor.prototype.help = null; -mxEditor.prototype.helpWindowImage = null; -mxEditor.prototype.urlHelp = null; -mxEditor.prototype.helpWidth = 300; -mxEditor.prototype.helpHeight = 260; -mxEditor.prototype.propertiesWidth = 240; -mxEditor.prototype.propertiesHeight = null; -mxEditor.prototype.movePropertiesDialog = !1; -mxEditor.prototype.validating = !1; -mxEditor.prototype.modified = !1; -mxEditor.prototype.isModified = function() { - return this.modified -}; -mxEditor.prototype.setModified = function(a) { - this.modified = a -}; -mxEditor.prototype.addActions = function() { - this.addAction("save", function(a) { - a.save() - }); - this.addAction("print", function(a) { - (new mxPrintPreview(a.graph, 1)).open() - }); - this.addAction("show", function(a) { - mxUtils.show(a.graph, null, 10, 10) - }); - this.addAction("exportImage", function(a) { - var b = a.getUrlImage(); - if (null == b || mxClient.IS_LOCAL) a.execute("show"); - else { - var c = mxUtils.getViewXml(a.graph, 1), - c = mxUtils.getXml(c, "\n"); - mxUtils.submit(b, a.postParameterName + "\x3d" + encodeURIComponent(c), document, "_blank") - } - }); - this.addAction("refresh", - function(a) { - a.graph.refresh() - }); - this.addAction("cut", function(a) { - a.graph.isEnabled() && mxClipboard.cut(a.graph) - }); - this.addAction("copy", function(a) { - a.graph.isEnabled() && mxClipboard.copy(a.graph) - }); - this.addAction("paste", function(a) { - a.graph.isEnabled() && mxClipboard.paste(a.graph) - }); - this.addAction("delete", function(a) { - a.graph.isEnabled() && a.graph.removeCells() - }); - this.addAction("group", function(a) { - a.graph.isEnabled() && a.graph.setSelectionCell(a.groupCells()) - }); - this.addAction("ungroup", function(a) { - a.graph.isEnabled() && - a.graph.setSelectionCells(a.graph.ungroupCells()) - }); - this.addAction("removeFromParent", function(a) { - a.graph.isEnabled() && a.graph.removeCellsFromParent() - }); - this.addAction("undo", function(a) { - a.graph.isEnabled() && a.undo() - }); - this.addAction("redo", function(a) { - a.graph.isEnabled() && a.redo() - }); - this.addAction("zoomIn", function(a) { - a.graph.zoomIn() - }); - this.addAction("zoomOut", function(a) { - a.graph.zoomOut() - }); - this.addAction("actualSize", function(a) { - a.graph.zoomActual() - }); - this.addAction("fit", function(a) { - a.graph.fit() - }); - this.addAction("showProperties", function(a, b) { - a.showProperties(b) - }); - this.addAction("selectAll", function(a) { - a.graph.isEnabled() && a.graph.selectAll() - }); - this.addAction("selectNone", function(a) { - a.graph.isEnabled() && a.graph.clearSelection() - }); - this.addAction("selectVertices", function(a) { - a.graph.isEnabled() && a.graph.selectVertices() - }); - this.addAction("selectEdges", function(a) { - a.graph.isEnabled() && a.graph.selectEdges() - }); - this.addAction("edit", function(a, b) { - a.graph.isEnabled() && a.graph.isCellEditable(b) && a.graph.startEditingAtCell(b) - }); - this.addAction("toBack", function(a, b) { - a.graph.isEnabled() && a.graph.orderCells(!0) - }); - this.addAction("toFront", function(a, b) { - a.graph.isEnabled() && a.graph.orderCells(!1) - }); - this.addAction("enterGroup", function(a, b) { - a.graph.enterGroup(b) - }); - this.addAction("exitGroup", function(a) { - a.graph.exitGroup() - }); - this.addAction("home", function(a) { - a.graph.home() - }); - this.addAction("selectPrevious", function(a) { - a.graph.isEnabled() && a.graph.selectPreviousCell() - }); - this.addAction("selectNext", function(a) { - a.graph.isEnabled() && - a.graph.selectNextCell() - }); - this.addAction("selectParent", function(a) { - a.graph.isEnabled() && a.graph.selectParentCell() - }); - this.addAction("selectChild", function(a) { - a.graph.isEnabled() && a.graph.selectChildCell() - }); - this.addAction("collapse", function(a) { - a.graph.isEnabled() && a.graph.foldCells(!0) - }); - this.addAction("collapseAll", function(a) { - if (a.graph.isEnabled()) { - var b = a.graph.getChildVertices(); - a.graph.foldCells(!0, !1, b) - } - }); - this.addAction("expand", function(a) { - a.graph.isEnabled() && a.graph.foldCells(!1) - }); - this.addAction("expandAll", function(a) { - if (a.graph.isEnabled()) { - var b = a.graph.getChildVertices(); - a.graph.foldCells(!1, !1, b) - } - }); - this.addAction("bold", function(a) { - a.graph.isEnabled() && a.graph.toggleCellStyleFlags(mxConstants.STYLE_FONTSTYLE, mxConstants.FONT_BOLD) - }); - this.addAction("italic", function(a) { - a.graph.isEnabled() && a.graph.toggleCellStyleFlags(mxConstants.STYLE_FONTSTYLE, mxConstants.FONT_ITALIC) - }); - this.addAction("underline", function(a) { - a.graph.isEnabled() && a.graph.toggleCellStyleFlags(mxConstants.STYLE_FONTSTYLE, - mxConstants.FONT_UNDERLINE) - }); - this.addAction("shadow", function(a) { - a.graph.isEnabled() && a.graph.toggleCellStyleFlags(mxConstants.STYLE_FONTSTYLE, mxConstants.FONT_SHADOW) - }); - this.addAction("alignCellsLeft", function(a) { - a.graph.isEnabled() && a.graph.alignCells(mxConstants.ALIGN_LEFT) - }); - this.addAction("alignCellsCenter", function(a) { - a.graph.isEnabled() && a.graph.alignCells(mxConstants.ALIGN_CENTER) - }); - this.addAction("alignCellsRight", function(a) { - a.graph.isEnabled() && a.graph.alignCells(mxConstants.ALIGN_RIGHT) - }); - this.addAction("alignCellsTop", function(a) { - a.graph.isEnabled() && a.graph.alignCells(mxConstants.ALIGN_TOP) - }); - this.addAction("alignCellsMiddle", function(a) { - a.graph.isEnabled() && a.graph.alignCells(mxConstants.ALIGN_MIDDLE) - }); - this.addAction("alignCellsBottom", function(a) { - a.graph.isEnabled() && a.graph.alignCells(mxConstants.ALIGN_BOTTOM) - }); - this.addAction("alignFontLeft", function(a) { - a.graph.setCellStyles(mxConstants.STYLE_ALIGN, mxConstants.ALIGN_LEFT) - }); - this.addAction("alignFontCenter", function(a) { - a.graph.isEnabled() && - a.graph.setCellStyles(mxConstants.STYLE_ALIGN, mxConstants.ALIGN_CENTER) - }); - this.addAction("alignFontRight", function(a) { - a.graph.isEnabled() && a.graph.setCellStyles(mxConstants.STYLE_ALIGN, mxConstants.ALIGN_RIGHT) - }); - this.addAction("alignFontTop", function(a) { - a.graph.isEnabled() && a.graph.setCellStyles(mxConstants.STYLE_VERTICAL_ALIGN, mxConstants.ALIGN_TOP) - }); - this.addAction("alignFontMiddle", function(a) { - a.graph.isEnabled() && a.graph.setCellStyles(mxConstants.STYLE_VERTICAL_ALIGN, mxConstants.ALIGN_MIDDLE) - }); - this.addAction("alignFontBottom", function(a) { - a.graph.isEnabled() && a.graph.setCellStyles(mxConstants.STYLE_VERTICAL_ALIGN, mxConstants.ALIGN_BOTTOM) - }); - this.addAction("zoom", function(a) { - var b = 100 * a.graph.getView().scale, - b = parseFloat(mxUtils.prompt(mxResources.get(a.askZoomResource) || a.askZoomResource, b)) / 100; - isNaN(b) || a.graph.getView().setScale(b) - }); - this.addAction("toggleTasks", function(a) { - null != a.tasks ? a.tasks.setVisible(!a.tasks.isVisible()) : a.showTasks() - }); - this.addAction("toggleHelp", function(a) { - null != - a.help ? a.help.setVisible(!a.help.isVisible()) : a.showHelp() - }); - this.addAction("toggleOutline", function(a) { - null == a.outline ? a.showOutline() : a.outline.setVisible(!a.outline.isVisible()) - }); - this.addAction("toggleConsole", function(a) { - mxLog.setVisible(!mxLog.isVisible()) - }) -}; -mxEditor.prototype.createSession = function() { - var a = mxUtils.bind(this, function(a) { - this.fireEvent(new mxEventObject(mxEvent.SESSION, "session", a)) - }); - return this.connect(this.urlInit, this.urlPoll, this.urlNotify, a) -}; -mxEditor.prototype.configure = function(a) { - null != a && ((new mxCodec(a.ownerDocument)).decode(a, this), this.resetHistory()) -}; -mxEditor.prototype.resetFirstTime = function() { - document.cookie = "mxgraph\x3dseen; expires\x3dFri, 27 Jul 2001 02:47:11 UTC; path\x3d/" -}; -mxEditor.prototype.resetHistory = function() { - this.lastSnapshot = (new Date).getTime(); - this.undoManager.clear(); - this.ignoredChanges = 0; - this.setModified(!1) -}; -mxEditor.prototype.addAction = function(a, b) { - this.actions[a] = b -}; -mxEditor.prototype.execute = function(a, b, c) { - var d = this.actions[a]; - if (null != d) try { - var e = arguments; - e[0] = this; - d.apply(this, e) - } catch (f) { - throw mxUtils.error("Cannot execute " + a + ": " + f.message, 280, !0), f; - } else mxUtils.error("Cannot find action " + a, 280, !0) -}; -mxEditor.prototype.addTemplate = function(a, b) { - this.templates[a] = b -}; -mxEditor.prototype.getTemplate = function(a) { - return this.templates[a] -}; -mxEditor.prototype.createGraph = function() { - var a = new mxGraph(null, null, this.graphRenderHint); - a.setTooltips(!0); - a.setPanning(!0); - this.installDblClickHandler(a); - this.installUndoHandler(a); - this.installDrillHandler(a); - this.installChangeHandler(a); - this.installInsertHandler(a); - a.panningHandler.factoryMethod = mxUtils.bind(this, function(a, c, d) { - return this.createPopupMenu(a, c, d) - }); - a.connectionHandler.factoryMethod = mxUtils.bind(this, function(a, c) { - return this.createEdge(a, c) - }); - this.createSwimlaneManager(a); - this.createLayoutManager(a); - return a -}; -mxEditor.prototype.createSwimlaneManager = function(a) { - a = new mxSwimlaneManager(a, !1); - a.isHorizontal = mxUtils.bind(this, function() { - return this.horizontalFlow - }); - a.isEnabled = mxUtils.bind(this, function() { - return this.maintainSwimlanes - }); - return a -}; -mxEditor.prototype.createLayoutManager = function(a) { - var b = new mxLayoutManager(a), - c = this; - b.getLayout = function(b) { - var e = null, - f = c.graph.getModel(); - if (null != f.getParent(b)) - if (c.layoutSwimlanes && a.isSwimlane(b)) null == c.swimlaneLayout && (c.swimlaneLayout = c.createSwimlaneLayout()), e = c.swimlaneLayout; - else if (c.layoutDiagram && (a.isValidRoot(b) || null == f.getParent(f.getParent(b)))) null == c.diagramLayout && (c.diagramLayout = c.createDiagramLayout()), e = c.diagramLayout; - return e - }; - return b -}; -mxEditor.prototype.setGraphContainer = function(a) { - null == this.graph.container && (this.graph.init(a), this.rubberband = new mxRubberband(this.graph), this.disableContextMenu && mxEvent.disableContextMenu(a), mxClient.IS_QUIRKS && new mxDivResizer( - a)) -}; -mxEditor.prototype.installDblClickHandler = function(a) { - a.addListener(mxEvent.DOUBLE_CLICK, mxUtils.bind(this, function(b, c) { - var d = c.getProperty("cell"); - null != d && (a.isEnabled() && null != this.dblClickAction) && (this.execute(this.dblClickAction, d), c.consume()) - })) -}; -mxEditor.prototype.installUndoHandler = function(a) { - var b = mxUtils.bind(this, function(a, b) { - var e = b.getProperty("edit"); - this.undoManager.undoableEditHappened(e) - }); - a.getModel().addListener(mxEvent.UNDO, b); - a.getView().addListener(mxEvent.UNDO, b); - b = function(b, d) { - var e = d.getProperty("edit").changes; - a.setSelectionCells(a.getSelectionCellsForChanges(e)) - }; - this.undoManager.addListener(mxEvent.UNDO, b); - this.undoManager.addListener(mxEvent.REDO, b) -}; -mxEditor.prototype.installDrillHandler = function(a) { - var b = mxUtils.bind(this, function(a) { - this.fireEvent(new mxEventObject(mxEvent.ROOT)) - }); - a.getView().addListener(mxEvent.DOWN, b); - a.getView().addListener(mxEvent.UP, b) -}; -mxEditor.prototype.installChangeHandler = function(a) { - var b = mxUtils.bind(this, function(b, d) { - this.setModified(!0); - !0 == this.validating && a.validateGraph(); - for (var e = d.getProperty("edit").changes, f = 0; f < e.length; f++) { - var g = e[f]; - if (g instanceof mxRootChange || g instanceof mxValueChange && g.cell == this.graph.model.root || g instanceof mxCellAttributeChange && g.cell == this.graph.model.root) { - this.fireEvent(new mxEventObject(mxEvent.ROOT)); - break - } - } - }); - a.getModel().addListener(mxEvent.CHANGE, b) -}; -mxEditor.prototype.installInsertHandler = function(a) { - var b = this; - a.addMouseListener({ - mouseDown: function(a, d) { - if (null != b.insertFunction && !d.isPopupTrigger() && (b.forcedInserting || null == d.getState())) b.graph.clearSelection(), b.insertFunction(d.getEvent(), d.getCell()), this.isActive = ! - 0, d.consume() - }, - mouseMove: function(a, b) { - this.isActive && b.consume() - }, - mouseUp: function(a, b) { - this.isActive && (this.isActive = !1, b.consume()) - } - }) -}; -mxEditor.prototype.createDiagramLayout = function() { - var a = this.graph.gridSize, - b = new mxStackLayout(this.graph, !this.horizontalFlow, this.swimlaneSpacing, 2 * a, 2 * a); - b.isVertexIgnored = function(a) { - return !b.graph.isSwimlane(a) - }; - return b -}; -mxEditor.prototype.createSwimlaneLayout = function() { - return new mxCompactTreeLayout(this.graph, this.horizontalFlow) -}; -mxEditor.prototype.createToolbar = function() { - return new mxDefaultToolbar(null, this) -}; -mxEditor.prototype.setToolbarContainer = function(a) { - this.toolbar.init(a); - mxClient.IS_QUIRKS && new mxDivResizer(a) -}; -mxEditor.prototype.setStatusContainer = function(a) { - null == this.status && (this.status = a, this.addListener(mxEvent.SAVE, mxUtils.bind(this, function() { - var a = (new Date).toLocaleString(); - this.setStatus((mxResources.get(this.lastSavedResource) || this.lastSavedResource) + ": " + a) - })), this.addListener(mxEvent.OPEN, mxUtils.bind(this, function() { - this.setStatus((mxResources.get(this.currentFileResource) || this.currentFileResource) + ": " + this.filename) - })), mxClient.IS_QUIRKS && new mxDivResizer(a)) -}; -mxEditor.prototype.setStatus = function(a) { - null != this.status && null != a && (this.status.innerHTML = a) -}; -mxEditor.prototype.setTitleContainer = function(a) { - this.addListener(mxEvent.ROOT, mxUtils.bind(this, function(b) { - a.innerHTML = this.getTitle() - })); - mxClient.IS_QUIRKS && new mxDivResizer(a) -}; -mxEditor.prototype.treeLayout = function(a, b) { - null != a && (new mxCompactTreeLayout(this.graph, b)).execute(a) -}; -mxEditor.prototype.getTitle = function() { - for (var a = "", b = this.graph, c = b.getCurrentRoot(); null != c && null != b.getModel().getParent(b.getModel().getParent(c));) b.isValidRoot(c) && (a = " \x3e " + b.convertValueToString(c) + a), - c = b.getModel().getParent(c); - return this.getRootTitle() + a -}; -mxEditor.prototype.getRootTitle = function() { - var a = this.graph.getModel().getRoot(); - return this.graph.convertValueToString(a) -}; -mxEditor.prototype.undo = function() { - this.undoManager.undo() -}; -mxEditor.prototype.redo = function() { - this.undoManager.redo() -}; -mxEditor.prototype.groupCells = function() { - var a = null != this.groupBorderSize ? this.groupBorderSize : this.graph.gridSize; - return this.graph.groupCells(this.createGroup(), a) -}; -mxEditor.prototype.createGroup = function() { - return this.graph.getModel().cloneCell(this.defaultGroup) -}; -mxEditor.prototype.open = function(a) { - if (null != a) { - var b = mxUtils.load(a).getXml(); - this.readGraphModel(b.documentElement); - this.filename = a; - this.fireEvent(new mxEventObject(mxEvent.OPEN, "filename", a)) - } -}; -mxEditor.prototype.readGraphModel = function(a) { - (new mxCodec(a.ownerDocument)).decode(a, this.graph.getModel()); - this.resetHistory() -}; -mxEditor.prototype.save = function(a, b) { - a = a || this.getUrlPost(); - if (null != a && 0 < a.length) { - var c = this.writeGraphModel(b); - this.postDiagram(a, c); - this.setModified(!1) - } - this.fireEvent(new mxEventObject(mxEvent.SAVE, "url", a)) -}; -mxEditor.prototype.postDiagram = function(a, b) { - this.escapePostData && (b = encodeURIComponent(b)); - mxUtils.post(a, this.postParameterName + "\x3d" + b, mxUtils.bind(this, function(c) { - this.fireEvent(new mxEventObject(mxEvent.POST, "request", c, "url", a, "data", b)) - })) -}; -mxEditor.prototype.writeGraphModel = function(a) { - a = null != a ? a : this.linefeed; - var b = (new mxCodec).encode(this.graph.getModel()); - return mxUtils.getXml(b, a) -}; -mxEditor.prototype.getUrlPost = function() { - return this.urlPost -}; -mxEditor.prototype.getUrlImage = function() { - return this.urlImage -}; -mxEditor.prototype.connect = function(a, b, c, d) { - var e = null; - mxClient.IS_LOCAL || (e = new mxSession(this.graph.getModel(), a, b, c), e.addListener(mxEvent.RECEIVE, mxUtils.bind(this, function(a, b) { - null != b.getProperty("node").getAttribute("namespace") && this.resetHistory() - })), e.addListener(mxEvent.DISCONNECT, d), e.addListener(mxEvent.CONNECT, d), e.addListener(mxEvent.NOTIFY, d), e.addListener(mxEvent.GET, d), e.start()); - return e -}; -mxEditor.prototype.swapStyles = function(a, b) { - var c = this.graph.getStylesheet().styles[b]; - this.graph.getView().getStylesheet().putCellStyle(b, this.graph.getStylesheet().styles[a]); - this.graph.getStylesheet().putCellStyle(a, c); - this.graph.refresh() -}; -mxEditor.prototype.showProperties = function(a) { - a = a || this.graph.getSelectionCell(); - null == a && (a = this.graph.getCurrentRoot(), null == a && (a = this.graph.getModel().getRoot())); - if (null != a) { - this.graph.stopEditing(!0); - var b = mxUtils.getOffset(this.graph.container), - c = b.x + 10, - b = b.y; - if (null != this.properties && !this.movePropertiesDialog) c = this.properties.getX(), b = this.properties.getY(); - else { - var d = this.graph.getCellBounds(a); - null != d && (c += d.x + Math.min(200, d.width), b += d.y) - } - this.hideProperties(); - a = this.createProperties(a); - null != a && (this.properties = new mxWindow(mxResources.get(this.propertiesResource) || this.propertiesResource, a, c, b, this.propertiesWidth, this.propertiesHeight, !1), this.properties.setVisible(! - 0)) - } -}; -mxEditor.prototype.isPropertiesVisible = function() { - return null != this.properties -}; -mxEditor.prototype.createProperties = function(a) { - var b = this.graph.getModel(), - c = b.getValue(a); - if (mxUtils.isNode(c)) { - var d = new mxForm("properties"); - d.addText("ID", a.getId()).setAttribute("readonly", "true"); - var e = null, - f = null, - g = null, - h = null, - k = null; - b.isVertex(a) && (e = b.getGeometry(a), null != e && (f = d.addText("top", e.y), g = d.addText("left", e.x), h = d.addText("width", e.width), k = d.addText("height", e.height))); - for (var l = b.getStyle(a), m = d.addText("Style", l || ""), n = c.attributes, p = [], c = 0; c < n.length; c++) p[c] = d.addTextarea(n[c].nodeName, - n[c].nodeValue, "label" == n[c].nodeName ? 4 : 2); - c = mxUtils.bind(this, function() { - this.hideProperties(); - b.beginUpdate(); - try { - null != e && (e = e.clone(), e.x = parseFloat(g.value), e.y = parseFloat(f.value), e.width = parseFloat(h.value), e.height = parseFloat(k.value), b.setGeometry(a, e)); - 0 < m.value.length ? b.setStyle(a, m.value) : b.setStyle(a, null); - for (var c = 0; c < n.length; c++) { - var d = new mxCellAttributeChange(a, n[c].nodeName, p[c].value); - b.execute(d) - } - this.graph.isAutoSizeCell(a) && this.graph.updateCellSize(a) - } finally { - b.endUpdate() - } - }); - l = mxUtils.bind(this, function() { - this.hideProperties() - }); - d.addButtons(c, l); - return d.table - } - return null -}; -mxEditor.prototype.hideProperties = function() { - null != this.properties && (this.properties.destroy(), this.properties = null) -}; -mxEditor.prototype.showTasks = function() { - if (null == this.tasks) { - var a = document.createElement("div"); - a.style.padding = "4px"; - a.style.paddingLeft = "20px"; - var b = document.body.clientWidth, - b = new mxWindow(mxResources.get(this.tasksResource) || this.tasksResource, a, b - 220, this.tasksTop, 200); - b.setClosable(!0); - b.destroyOnClose = !1; - var c = mxUtils.bind(this, function(b) { - mxEvent.release(a); - a.innerHTML = ""; - this.createTasks(a) - }); - this.graph.getModel().addListener(mxEvent.CHANGE, c); - this.graph.getSelectionModel().addListener(mxEvent.CHANGE, - c); - this.graph.addListener(mxEvent.ROOT, c); - null != this.tasksWindowImage && b.setImage(this.tasksWindowImage); - this.tasks = b; - this.createTasks(a) - } - this.tasks.setVisible(!0) -}; -mxEditor.prototype.refreshTasks = function(a) { - null != this.tasks && (a = this.tasks.content, mxEvent.release(a), a.innerHTML = "", this.createTasks(a)) -}; -mxEditor.prototype.createTasks = function(a) {}; -mxEditor.prototype.showHelp = function(a) { - if (null == this.help) { - var b = document.createElement("iframe"); - b.setAttribute("src", mxResources.get("urlHelp") || this.urlHelp); - b.setAttribute("height", "100%"); - b.setAttribute("width", "100%"); - b.setAttribute("frameBorder", "0"); - b.style.backgroundColor = "white"; - a = document.body.clientWidth; - var c = document.body.clientHeight || document.documentElement.clientHeight, - d = new mxWindow(mxResources.get(this.helpResource) || this.helpResource, b, (a - this.helpWidth) / 2, (c - this.helpHeight) / - 3, this.helpWidth, this.helpHeight); - d.setMaximizable(!0); - d.setClosable(!0); - d.destroyOnClose = !1; - d.setResizable(!0); - null != this.helpWindowImage && d.setImage(this.helpWindowImage); - mxClient.IS_NS && (a = function(a) { - b.setAttribute("height", d.div.offsetHeight - 26 + "px") - }, d.addListener(mxEvent.RESIZE_END, a), d.addListener(mxEvent.MAXIMIZE, a), d.addListener(mxEvent.NORMALIZE, a), d.addListener(mxEvent.SHOW, a)); - this.help = d - } - this.help.setVisible(!0) -}; -mxEditor.prototype.showOutline = function() { - if (null == this.outline) { - var a = document.createElement("div"); - a.style.overflow = "hidden"; - a.style.width = "100%"; - a.style.height = "100%"; - a.style.background = "white"; - a.style.cursor = "move"; - var b = new mxWindow(mxResources.get(this.outlineResource) || this.outlineResource, a, 600, 480, 200, 200, !1), - c = new mxOutline(this.graph, a); - b.setClosable(!0); - b.setResizable(!0); - b.destroyOnClose = !1; - b.addListener(mxEvent.RESIZE_END, function() { - c.update() - }); - this.outline = b; - this.outline.outline = c - } - this.outline.setVisible(!0); - this.outline.outline.update(!0) -}; -mxEditor.prototype.setMode = function(a) { - "select" == a ? (this.graph.panningHandler.useLeftButtonForPanning = !1, this.graph.setConnectable(!1)) : "connect" == a ? (this.graph.panningHandler.useLeftButtonForPanning = !1, this.graph.setConnectable(! - 0)) : "pan" == a && (this.graph.panningHandler.useLeftButtonForPanning = !0, this.graph.setConnectable(!1)) -}; -mxEditor.prototype.createPopupMenu = function(a, b, c) { - this.popupHandler.createMenu(this, a, b, c) -}; -mxEditor.prototype.createEdge = function(a, b) { - var c = null; - if (null != this.defaultEdge) c = this.graph.getModel().cloneCell(this.defaultEdge); - else { - c = new mxCell(""); - c.setEdge(!0); - var d = new mxGeometry; - d.relative = !0; - c.setGeometry(d) - } - d = this.getEdgeStyle(); - null != d && c.setStyle(d); - return c -}; -mxEditor.prototype.getEdgeStyle = function() { - return this.defaultEdgeStyle -}; -mxEditor.prototype.consumeCycleAttribute = function(a) { - return null != this.cycleAttributeValues && 0 < this.cycleAttributeValues.length && this.graph.isSwimlane(a) ? this.cycleAttributeValues[this.cycleAttributeIndex++ % this.cycleAttributeValues.length] : - null -}; -mxEditor.prototype.cycleAttribute = function(a) { - if (null != this.cycleAttributeName) { - var b = this.consumeCycleAttribute(a); - null != b && a.setStyle(a.getStyle() + ";" + this.cycleAttributeName + "\x3d" + b) - } -}; -mxEditor.prototype.addVertex = function(a, b, c, d) { - for (var e = this.graph.getModel(); null != a && !this.graph.isValidDropTarget(a);) a = e.getParent(a); - a = null != a ? a : this.graph.getSwimlaneAt(c, d); - var f = this.graph.getView().scale, - g = e.getGeometry(b), - h = e.getGeometry(a); - if (this.graph.isSwimlane(b) && !this.graph.swimlaneNesting) a = null; - else { - if (null == a && this.swimlaneRequired) return null; - if (null != a && null != h) { - var k = this.graph.getView().getState(a); - if (null != k) { - if (c -= k.origin.x * f, d -= k.origin.y * f, this.graph.isConstrainedMoving) { - var h = - g.width, - l = g.height, - m = k.x + k.width; - c + h > m && (c -= c + h - m); - m = k.y + k.height; - d + l > m && (d -= d + l - m) - } - } else null != h && (c -= h.x * f, d -= h.y * f) - } - } - g = g.clone(); - g.x = this.graph.snap(c / f - this.graph.getView().translate.x - this.graph.gridSize / 2); - g.y = this.graph.snap(d / f - this.graph.getView().translate.y - this.graph.gridSize / 2); - b.setGeometry(g); - null == a && (a = this.graph.getDefaultParent()); - this.cycleAttribute(b); - this.fireEvent(new mxEventObject(mxEvent.BEFORE_ADD_VERTEX, "vertex", b, "parent", a)); - e.beginUpdate(); - try { - b = this.graph.addCell(b, - a), null != b && (this.graph.constrainChild(b), this.fireEvent(new mxEventObject(mxEvent.ADD_VERTEX, "vertex", b))) - } finally { - e.endUpdate() - } - null != b && (this.graph.setSelectionCell(b), this.graph.scrollCellToVisible(b), this.fireEvent(new mxEventObject(mxEvent.AFTER_ADD_VERTEX, "vertex", b))); - return b -}; -mxEditor.prototype.destroy = function() { - this.destroyed || (this.destroyed = !0, null != this.tasks && this.tasks.destroy(), null != this.outline && this.outline.destroy(), null != this.properties && this.properties.destroy(), null != - this.keyHandler && this.keyHandler.destroy(), null != this.rubberband && this.rubberband.destroy(), null != this.toolbar && this.toolbar.destroy(), null != this.graph && this.graph.destroy(), - this.templates = this.status = null) -}; -var mxCodecRegistry = { - codecs: [], - aliases: [], - register: function(a) { - if (null != a) { - var b = a.getName(); - mxCodecRegistry.codecs[b] = a; - var c = mxUtils.getFunctionName(a.template.constructor); - c != b && mxCodecRegistry.addAlias(c, b) - } - return a - }, - addAlias: function(a, b) { - mxCodecRegistry.aliases[a] = b - }, - getCodec: function(a) { - var b = null; - if (null != a) { - var b = mxUtils.getFunctionName(a), - c = mxCodecRegistry.aliases[b]; - null != c && (b = c); - b = mxCodecRegistry.codecs[b]; - if (null == b) try { - b = new mxObjectCodec(new a), mxCodecRegistry.register(b) - } catch (d) {} - } - return b - } -}; - -function mxCodec(a) { - this.document = a || mxUtils.createXmlDocument(); - this.objects = [] -} -mxCodec.prototype.document = null; -mxCodec.prototype.objects = null; -mxCodec.prototype.encodeDefaults = !1; -mxCodec.prototype.putObject = function(a, b) { - return this.objects[a] = b -}; -mxCodec.prototype.getObject = function(a) { - var b = null; - null != a && (b = this.objects[a], null == b && (b = this.lookup(a), null == b && (a = this.getElementById(a), null != a && (b = this.decode(a))))); - return b -}; -mxCodec.prototype.lookup = function(a) { - return null -}; -mxCodec.prototype.getElementById = function(a, b) { - return mxUtils.findNodeByAttribute(this.document.documentElement, null != b ? b : "id", a) -}; -mxCodec.prototype.getId = function(a) { - var b = null; - null != a && (b = this.reference(a), null == b && a instanceof mxCell && (b = a.getId(), null == b && (b = mxCellPath.create(a), 0 == b.length && (b = "root")))); - return b -}; -mxCodec.prototype.reference = function(a) { - return null -}; -mxCodec.prototype.encode = function(a) { - var b = null; - if (null != a && null != a.constructor) { - var c = mxCodecRegistry.getCodec(a.constructor); - null != c ? b = c.encode(this, a) : mxUtils.isNode(a) ? b = mxClient.IS_IE ? a.cloneNode(!0) : this.document.importNode(a, !0) : mxLog.warn("mxCodec.encode: No codec for " + mxUtils.getFunctionName( - a.constructor)) - } - return b -}; -mxCodec.prototype.decode = function(a, b) { - var c = null; - if (null != a && a.nodeType == mxConstants.NODETYPE_ELEMENT) { - var d = null; - try { - d = eval(a.nodeName) - } catch (e) {} - try { - var f = mxCodecRegistry.getCodec(d); - null != f ? c = f.decode(this, a, b) : (c = a.cloneNode(!0), c.removeAttribute("as")) - } catch (g) { - mxLog.debug("Cannot decode " + a.nodeName + ": " + g.message) - } - } - return c -}; -mxCodec.prototype.encodeCell = function(a, b, c) { - b.appendChild(this.encode(a)); - if (null == c || c) { - c = a.getChildCount(); - for (var d = 0; d < c; d++) this.encodeCell(a.getChildAt(d), b) - } -}; -mxCodec.prototype.isCellCodec = function(a) { - return null != a && "function" == typeof a.isCellCodec ? a.isCellCodec() : !1 -}; -mxCodec.prototype.decodeCell = function(a, b) { - b = null != b ? b : !0; - var c = null; - if (null != a && a.nodeType == mxConstants.NODETYPE_ELEMENT) { - c = mxCodecRegistry.getCodec(a.nodeName); - if (!this.isCellCodec(c)) - for (var d = a.firstChild; null != d && !this.isCellCodec(c);) c = mxCodecRegistry.getCodec(d.nodeName), d = d.nextSibling; - this.isCellCodec(c) || (c = mxCodecRegistry.getCodec(mxCell)); - c = c.decode(this, a); - b && this.insertIntoGraph(c) - } - return c -}; -mxCodec.prototype.insertIntoGraph = function(a) { - var b = a.parent, - c = a.getTerminal(!0), - d = a.getTerminal(!1); - a.setTerminal(null, !1); - a.setTerminal(null, !0); - a.parent = null; - null != b && b.insert(a); - null != c && c.insertEdge(a, !0); - null != d && d.insertEdge(a, !1) -}; -mxCodec.prototype.setAttribute = function(a, b, c) { - null != b && null != c && a.setAttribute(b, c) -}; - -function mxObjectCodec(a, b, c, d) { - this.template = a; - this.exclude = null != b ? b : []; - this.idrefs = null != c ? c : []; - this.mapping = null != d ? d : []; - this.reverse = {}; - for (var e in this.mapping) this.reverse[this.mapping[e]] = e -} -mxObjectCodec.prototype.template = null; -mxObjectCodec.prototype.exclude = null; -mxObjectCodec.prototype.idrefs = null; -mxObjectCodec.prototype.mapping = null; -mxObjectCodec.prototype.reverse = null; -mxObjectCodec.prototype.getName = function() { - return mxUtils.getFunctionName(this.template.constructor) -}; -mxObjectCodec.prototype.cloneTemplate = function() { - return new this.template.constructor -}; -mxObjectCodec.prototype.getFieldName = function(a) { - if (null != a) { - var b = this.reverse[a]; - null != b && (a = b) - } - return a -}; -mxObjectCodec.prototype.getAttributeName = function(a) { - if (null != a) { - var b = this.mapping[a]; - null != b && (a = b) - } - return a -}; -mxObjectCodec.prototype.isExcluded = function(a, b, c, d) { - return b == mxObjectIdentity.FIELD_NAME || 0 <= mxUtils.indexOf(this.exclude, b) -}; -mxObjectCodec.prototype.isReference = function(a, b, c, d) { - return 0 <= mxUtils.indexOf(this.idrefs, b) -}; -mxObjectCodec.prototype.encode = function(a, b) { - var c = a.document.createElement(this.getName()); - b = this.beforeEncode(a, b, c); - this.encodeObject(a, b, c); - return this.afterEncode(a, b, c) -}; -mxObjectCodec.prototype.encodeObject = function(a, b, c) { - a.setAttribute(c, "id", a.getId(b)); - for (var d in b) { - var e = d, - f = b[e]; - null != f && !this.isExcluded(b, e, f, !0) && (mxUtils.isNumeric(e) && (e = null), this.encodeValue(a, b, e, f, c)) - } -}; -mxObjectCodec.prototype.encodeValue = function(a, b, c, d, e) { - if (null != d) { - if (this.isReference(b, c, d, !0)) { - var f = a.getId(d); - if (null == f) { - mxLog.warn("mxObjectCodec.encode: No ID for " + this.getName() + "." + c + "\x3d" + d); - return - } - d = f - } - f = this.template[c]; - if (null == c || a.encodeDefaults || f != d) c = this.getAttributeName(c), this.writeAttribute(a, b, c, d, e) - } -}; -mxObjectCodec.prototype.writeAttribute = function(a, b, c, d, e) { - "object" != typeof d ? this.writePrimitiveAttribute(a, b, c, d, e) : this.writeComplexAttribute(a, b, c, d, e) -}; -mxObjectCodec.prototype.writePrimitiveAttribute = function(a, b, c, d, e) { - d = this.convertValueToXml(d); - null == c ? (b = a.document.createElement("add"), "function" == typeof d ? b.appendChild(a.document.createTextNode(d)) : a.setAttribute(b, "value", d), e.appendChild(b)) : "function" != typeof d && - a.setAttribute(e, c, d) -}; -mxObjectCodec.prototype.writeComplexAttribute = function(a, b, c, d, e) { - a = a.encode(d); - null != a ? (null != c && a.setAttribute("as", c), e.appendChild(a)) : mxLog.warn("mxObjectCodec.encode: No node for " + this.getName() + "." + c + ": " + d) -}; -mxObjectCodec.prototype.convertValueToXml = function(a) { - if ("undefined" == typeof a.length && (!0 == a || !1 == a)) a = !0 == a ? "1" : "0"; - return a -}; -mxObjectCodec.prototype.convertValueFromXml = function(a) { - mxUtils.isNumeric(a) && (a = parseFloat(a)); - // - // Marco (marco.murdocca@xenialab.it) + Andrea Bianco (andrea.bianco@xcally.com) - // 2016-02-24 - // - // mxUtils.isNumeric(a) && (a = ((Number(a) === a) && (a % 1 !== 0)) ? parseFloat(a) : a); - return a -}; -mxObjectCodec.prototype.beforeEncode = function(a, b, c) { - return b -}; -mxObjectCodec.prototype.afterEncode = function(a, b, c) { - return c -}; -mxObjectCodec.prototype.decode = function(a, b, c) { - var d = b.getAttribute("id"), - e = a.objects[d]; - null == e && (e = c || this.cloneTemplate(), null != d && a.putObject(d, e)); - b = this.beforeDecode(a, b, e); - this.decodeNode(a, b, e); - return this.afterDecode(a, b, e) -}; -mxObjectCodec.prototype.decodeNode = function(a, b, c) { - null != b && (this.decodeAttributes(a, b, c), this.decodeChildren(a, b, c)) -}; -mxObjectCodec.prototype.decodeAttributes = function(a, b, c) { - b = b.attributes; - if (null != b) - for (var d = 0; d < b.length; d++) this.decodeAttribute(a, b[d], c) -}; -mxObjectCodec.prototype.decodeAttribute = function(a, b, c) { - var d = b.nodeName; - if ("as" != d && "id" != d) { - b = this.convertValueFromXml(b.nodeValue); - var e = this.getFieldName(d); - if (this.isReference(c, e, b, !1)) { - a = a.getObject(b); - if (null == a) { - mxLog.warn("mxObjectCodec.decode: No object for " + this.getName() + "." + d + "\x3d" + b); - return - } - b = a - } - this.isExcluded(c, d, b, !1) || (c[d] = b) - } -}; -mxObjectCodec.prototype.decodeChildren = function(a, b, c) { - for (b = b.firstChild; null != b;) { - var d = b.nextSibling; - b.nodeType == mxConstants.NODETYPE_ELEMENT && !this.processInclude(a, b, c) && this.decodeChild(a, b, c); - b = d - } -}; -mxObjectCodec.prototype.decodeChild = function(a, b, c) { - var d = this.getFieldName(b.getAttribute("as")); - if (null == d || !this.isExcluded(c, d, b, !1)) { - var e = this.getFieldTemplate(c, d, b), - f = null; - "add" == b.nodeName ? (f = b.getAttribute("value"), null == f && (f = mxUtils.eval(mxUtils.getTextContent(b)))) : f = a.decode(b, e); - this.addObjectValue(c, d, f, e) - } -}; -mxObjectCodec.prototype.getFieldTemplate = function(a, b, c) { - a = a[b]; - a instanceof Array && 0 < a.length && (a = null); - return a -}; -mxObjectCodec.prototype.addObjectValue = function(a, b, c, d) { - null != c && c != d && (null != b && 0 < b.length ? a[b] = c : a.push(c)) -}; -mxObjectCodec.prototype.processInclude = function(a, b, c) { - if ("include" == b.nodeName) { - b = b.getAttribute("name"); - if (null != b) try { - var d = mxUtils.load(b).getDocumentElement(); - null != d && a.decode(d, c) - } catch (e) {} - return !0 - } - return !1 -}; -mxObjectCodec.prototype.beforeDecode = function(a, b, c) { - return b -}; -mxObjectCodec.prototype.afterDecode = function(a, b, c) { - return c -}; -mxCodecRegistry.register(function() { - var a = new mxObjectCodec(new mxCell, ["children", "edges", "overlays", "mxTransient"], ["parent", "source", "target"]); - a.isCellCodec = function() { - return !0 - }; - a.isExcluded = function(a, c, d, e) { - return mxObjectCodec.prototype.isExcluded.apply(this, arguments) || e && "value" == c && d.nodeType == mxConstants.NODETYPE_ELEMENT - }; - a.afterEncode = function(a, c, d) { - if (null != c.value && c.value.nodeType == mxConstants.NODETYPE_ELEMENT) { - var e = d; - d = mxClient.IS_IE ? c.value.cloneNode(!0) : a.document.importNode(c.value, !0); - d.appendChild(e); - a = e.getAttribute("id"); - d.setAttribute("id", a); - e.removeAttribute("id") - } - return d - }; - a.beforeDecode = function(a, c, d) { - var e = c, - f = this.getName(); - c.nodeName != f ? (e = c.getElementsByTagName(f)[0], null != e && e.parentNode == c ? (mxUtils.removeWhitespace(e, !0), mxUtils.removeWhitespace(e, !1), e.parentNode.removeChild(e)) : e = - null, d.value = c.cloneNode(!0), c = d.value.getAttribute("id"), null != c && (d.setId(c), d.value.removeAttribute("id"))) : d.setId(c.getAttribute("id")); - if (null != e) - for (c = 0; c < this.idrefs.length; c++) { - var f = - this.idrefs[c], - g = e.getAttribute(f); - if (null != g) { - e.removeAttribute(f); - var h = a.objects[g] || a.lookup(g); - null == h && (g = a.getElementById(g), null != g && (h = (mxCodecRegistry.codecs[g.nodeName] || this).decode(a, g))); - d[f] = h - } - } - return e - }; - return a -}()); -mxCodecRegistry.register(function() { - var a = new mxObjectCodec(new mxGraphModel); - a.encodeObject = function(a, c, d) { - var e = a.document.createElement("root"); - a.encodeCell(c.getRoot(), e); - d.appendChild(e) - }; - a.decodeChild = function(a, c, d) { - "root" == c.nodeName ? this.decodeRoot(a, c, d) : mxObjectCodec.prototype.decodeChild.apply(this, arguments) - }; - a.decodeRoot = function(a, c, d) { - var e = null; - for (c = c.firstChild; null != c;) { - var f = a.decodeCell(c); - null != f && null == f.getParent() && (e = f); - c = c.nextSibling - } - null != e && d.setRoot(e) - }; - return a -}()); -mxCodecRegistry.register(function() { - var a = new mxObjectCodec(new mxRootChange, ["model", "previous", "root"]); - a.afterEncode = function(a, c, d) { - a.encodeCell(c.root, d); - return d - }; - a.beforeDecode = function(a, c, d) { - if (null != c.firstChild && c.firstChild.nodeType == mxConstants.NODETYPE_ELEMENT) { - c = c.cloneNode(!0); - var e = c.firstChild; - d.root = a.decodeCell(e, !1); - d = e.nextSibling; - e.parentNode.removeChild(e); - for (e = d; null != e;) d = e.nextSibling, a.decodeCell(e), e.parentNode.removeChild(e), e = d - } - return c - }; - a.afterDecode = function(a, c, - d) { - d.previous = d.root; - return d - }; - return a -}()); -mxCodecRegistry.register(function() { - var a = new mxObjectCodec(new mxChildChange, ["model", "child", "previousIndex"], ["parent", "previous"]); - a.isReference = function(a, c, d, e) { - return "child" == c && (null != a.previous || !e) ? !0 : 0 <= mxUtils.indexOf(this.idrefs, c) - }; - a.afterEncode = function(a, c, d) { - this.isReference(c, "child", c.child, !0) ? d.setAttribute("child", a.getId(c.child)) : a.encodeCell(c.child, d); - return d - }; - a.beforeDecode = function(a, c, d) { - if (null != c.firstChild && c.firstChild.nodeType == mxConstants.NODETYPE_ELEMENT) { - c = c.cloneNode(!0); - var e = c.firstChild; - d.child = a.decodeCell(e, !1); - d = e.nextSibling; - e.parentNode.removeChild(e); - for (e = d; null != e;) { - d = e.nextSibling; - if (e.nodeType == mxConstants.NODETYPE_ELEMENT) { - var f = e.getAttribute("id"); - null == a.lookup(f) && a.decodeCell(e) - } - e.parentNode.removeChild(e); - e = d - } - } else e = c.getAttribute("child"), d.child = a.getObject(e); - return c - }; - a.afterDecode = function(a, c, d) { - d.child.parent = d.previous; - d.previous = d.parent; - d.previousIndex = d.index; - return d - }; - return a -}()); -mxCodecRegistry.register(function() { - var a = new mxObjectCodec(new mxTerminalChange, ["model", "previous"], ["cell", "terminal"]); - a.afterDecode = function(a, c, d) { - d.previous = d.terminal; - return d - }; - return a -}()); -var mxGenericChangeCodec = function(a, b) { - var c = new mxObjectCodec(a, ["model", "previous"], ["cell"]); - c.afterDecode = function(a, c, f) { - mxUtils.isNode(f.cell) && (f.cell = a.decodeCell(f.cell, !1)); - f.previous = f[b]; - return f - }; - return c -}; -mxCodecRegistry.register(mxGenericChangeCodec(new mxValueChange, "value")); -mxCodecRegistry.register(mxGenericChangeCodec(new mxStyleChange, "style")); -mxCodecRegistry.register(mxGenericChangeCodec(new mxGeometryChange, "geometry")); -mxCodecRegistry.register(mxGenericChangeCodec(new mxCollapseChange, "collapsed")); -mxCodecRegistry.register(mxGenericChangeCodec(new mxVisibleChange, "visible")); -mxCodecRegistry.register(mxGenericChangeCodec(new mxCellAttributeChange, "value")); -mxCodecRegistry.register(function() { - return new mxObjectCodec(new mxGraph, "graphListeners eventListeners view container cellRenderer editor selection".split(" ")) -}()); -mxCodecRegistry.register(function() { - var a = new mxObjectCodec(new mxGraphView); - a.encode = function(a, c) { - return this.encodeCell(a, c, c.graph.getModel().getRoot()) - }; - a.encodeCell = function(a, c, d) { - var e = c.graph.getModel(), - f = c.getState(d), - g = e.getParent(d); - if (null == g || null != f) { - var h = e.getChildCount(d), - k = c.graph.getCellGeometry(d), - l = null; - g == e.getRoot() ? l = "layer" : null == g ? l = "graph" : e.isEdge(d) ? l = "edge" : 0 < h && null != k ? l = "group" : e.isVertex(d) && (l = "vertex"); - if (null != l) { - var m = a.document.createElement(l); - null != c.graph.getLabel(d) && - (m.setAttribute("label", c.graph.getLabel(d)), c.graph.isHtmlLabel(d) && m.setAttribute("html", !0)); - if (null == g) { - var n = c.getGraphBounds(); - null != n && (m.setAttribute("x", Math.round(n.x)), m.setAttribute("y", Math.round(n.y)), m.setAttribute("width", Math.round(n.width)), m.setAttribute("height", Math.round(n.height))); - m.setAttribute("scale", c.scale) - } else if (null != f && null != k) { - for (n in f.style) g = f.style[n], "function" == typeof g && "object" == typeof g && (g = mxStyleRegistry.getName(g)), null != g && ("function" != typeof g && "object" != - typeof g) && m.setAttribute(n, g); - g = f.absolutePoints; - if (null != g && 0 < g.length) { - k = Math.round(g[0].x) + "," + Math.round(g[0].y); - for (n = 1; n < g.length; n++) k += " " + Math.round(g[n].x) + "," + Math.round(g[n].y); - m.setAttribute("points", k) - } else m.setAttribute("x", Math.round(f.x)), m.setAttribute("y", Math.round(f.y)), m.setAttribute("width", Math.round(f.width)), m.setAttribute("height", Math.round(f.height)); - n = f.absoluteOffset; - null != n && (0 != n.x && m.setAttribute("dx", Math.round(n.x)), 0 != n.y && m.setAttribute("dy", Math.round(n.y))) - } - for (n = - 0; n < h; n++) f = this.encodeCell(a, c, e.getChildAt(d, n)), null != f && m.appendChild(f) - } - } - return m - }; - return a -}()); -mxCodecRegistry.register(function() { - var a = new mxObjectCodec(new mxStylesheet); - a.encode = function(a, c) { - var d = a.document.createElement(this.getName()), - e; - for (e in c.styles) { - var f = c.styles[e], - g = a.document.createElement("add"); - if (null != e) { - g.setAttribute("as", e); - for (var h in f) { - var k = this.getStringValue(h, f[h]); - if (null != k) { - var l = a.document.createElement("add"); - l.setAttribute("value", k); - l.setAttribute("as", h); - g.appendChild(l) - } - } - 0 < g.childNodes.length && d.appendChild(g) - } - } - return d - }; - a.getStringValue = function(a, - c) { - var d = typeof c; - "function" == d ? c = mxStyleRegistry.getName(style[j]) : "object" == d && (c = null); - return c - }; - a.decode = function(a, c, d) { - d = d || new this.template.constructor; - var e = c.getAttribute("id"); - null != e && (a.objects[e] = d); - for (c = c.firstChild; null != c;) { - if (!this.processInclude(a, c, d) && "add" == c.nodeName && (e = c.getAttribute("as"), null != e)) { - var f = c.getAttribute("extend"), - g = null != f ? mxUtils.clone(d.styles[f]) : null; - null == g && (null != f && mxLog.warn("mxStylesheetCodec.decode: stylesheet " + f + " not found to extend"), g = {}); - for (f = c.firstChild; null != f;) { - if (f.nodeType == mxConstants.NODETYPE_ELEMENT) { - var h = f.getAttribute("as"); - if ("add" == f.nodeName) { - var k = mxUtils.getTextContent(f), - l = null; - null != k && 0 < k.length ? l = mxUtils.eval(k) : (l = f.getAttribute("value"), mxUtils.isNumeric(l) && (l = parseFloat(l))); - null != l && (g[h] = l) - } else "remove" == f.nodeName && delete g[h] - } - f = f.nextSibling - } - d.putCellStyle(e, g) - } - c = c.nextSibling - } - return d - }; - return a -}()); -mxCodecRegistry.register(function() { - var a = new mxObjectCodec(new mxDefaultKeyHandler); - a.encode = function(a, c) { - return null - }; - a.decode = function(a, c, d) { - if (null != d) - for (c = c.firstChild; null != c;) { - if (!this.processInclude(a, c, d) && "add" == c.nodeName) { - var e = c.getAttribute("as"), - f = c.getAttribute("action"), - g = c.getAttribute("control"); - d.bindAction(e, f, g) - } - c = c.nextSibling - } - return d - }; - return a -}()); -mxCodecRegistry.register(function() { - var a = new mxObjectCodec(new mxDefaultToolbar); - a.encode = function(a, c) { - return null - }; - a.decode = function(a, c, d) { - if (null != d) { - var e = d.editor; - for (c = c.firstChild; null != c;) { - if (c.nodeType == mxConstants.NODETYPE_ELEMENT && !this.processInclude(a, c, d)) - if ("separator" == c.nodeName) d.addSeparator(); - else if ("br" == c.nodeName) d.toolbar.addBreak(); - else if ("hr" == c.nodeName) d.toolbar.addLine(); - else if ("add" == c.nodeName) { - var f = c.getAttribute("as"), - f = mxResources.get(f) || f, - g = c.getAttribute("icon"), - h = c.getAttribute("pressedIcon"), - k = c.getAttribute("action"), - l = c.getAttribute("mode"), - m = c.getAttribute("template"), - n = "0" != c.getAttribute("toggle"), - p = mxUtils.getTextContent(c), - q = null; - if (null != k) q = d.addItem(f, g, k, h); - else if (null != l) var s = mxUtils.eval(p), - q = d.addMode(f, g, l, h, s); - else if (null != m || null != p && 0 < p.length) q = e.templates[m], m = c.getAttribute("style"), null != q && null != m && (q = q.clone(), q.setStyle(m)), m = null, null != p && 0 < - p.length && (m = mxUtils.eval(p)), q = d.addPrototype(f, g, q, h, m, n); - else if (h = mxUtils.getChildNodes(c), - 0 < h.length) - if (null == g) { - m = d.addActionCombo(f); - for (f = 0; f < h.length; f++) n = h[f], "separator" == n.nodeName ? d.addOption(m, "---") : "add" == n.nodeName && (g = n.getAttribute("as"), n = n.getAttribute("action"), d.addActionOption( - m, g, n)) - } else { - var r = null, - t = d.addPrototype(f, g, function() { - var a = e.templates[r.value]; - if (null != a) { - var a = a.clone(), - b = r.options[r.selectedIndex].cellStyle; - null != b && a.setStyle(b); - return a - } - mxLog.warn("Template " + a + " not found"); - return null - }, null, null, n), - r = d.addCombo(); - mxEvent.addListener(r, "change", - function() { - d.toolbar.selectMode(t, function(a) { - a = mxUtils.convertPoint(e.graph.container, mxEvent.getClientX(a), mxEvent.getClientY(a)); - return e.addVertex(null, s(), a.x, a.y) - }); - d.toolbar.noReset = !1 - }); - for (f = 0; f < h.length; f++) n = h[f], "separator" == n.nodeName ? d.addOption(r, "---") : "add" == n.nodeName && (g = n.getAttribute("as"), p = n.getAttribute("template"), d.addOption( - r, g, p || m).cellStyle = n.getAttribute("style")) - } - null != q && (m = c.getAttribute("id"), null != m && 0 < m.length && q.setAttribute("id", m)) - } - c = c.nextSibling - } - } - return d - }; - return a -}()); -mxCodecRegistry.register(function() { - var a = new mxObjectCodec(new mxDefaultPopupMenu); - a.encode = function(a, c) { - return null - }; - a.decode = function(a, c, d) { - var e = c.getElementsByTagName("include")[0]; - null != e ? this.processInclude(a, e, d) : null != d && (d.config = c); - return d - }; - return a -}()); -mxCodecRegistry.register(function() { - var a = new mxObjectCodec(new mxEditor, "modified lastSnapshot ignoredChanges undoManager graphContainer toolbarContainer".split(" ")); - a.afterDecode = function(a, c, d) { - a = c.getAttribute("defaultEdge"); - null != a && (c.removeAttribute("defaultEdge"), d.defaultEdge = d.templates[a]); - a = c.getAttribute("defaultGroup"); - null != a && (c.removeAttribute("defaultGroup"), d.defaultGroup = d.templates[a]); - return d - }; - a.decodeChild = function(a, c, d) { - if ("Array" == c.nodeName) { - if ("templates" == c.getAttribute("as")) { - this.decodeTemplates(a, - c, d); - return - } - } else if ("ui" == c.nodeName) { - this.decodeUi(a, c, d); - return - } - mxObjectCodec.prototype.decodeChild.apply(this, arguments) - }; - a.decodeUi = function(a, c, d) { - for (a = c.firstChild; null != a;) { - if ("add" == a.nodeName) { - c = a.getAttribute("as"); - var e = a.getAttribute("element"), - f = a.getAttribute("style"), - g = null; - if (null != e) g = document.getElementById(e), null != g && null != f && (g.style.cssText += ";" + f); - else { - var e = parseInt(a.getAttribute("x")), - h = parseInt(a.getAttribute("y")), - k = a.getAttribute("width"), - l = a.getAttribute("height"), - g = document.createElement("div"); - g.style.cssText = f; - (new mxWindow(mxResources.get(c) || c, g, e, h, k, l, !1, !0)).setVisible(!0) - } - "graph" == c ? d.setGraphContainer(g) : "toolbar" == c ? d.setToolbarContainer(g) : "title" == c ? d.setTitleContainer(g) : "status" == c ? d.setStatusContainer(g) : "map" == c && d.setMapContainer( - g) - } else "resource" == a.nodeName ? mxResources.add(a.getAttribute("basename")) : "stylesheet" == a.nodeName && mxClient.link("stylesheet", a.getAttribute("name")); - a = a.nextSibling - } - }; - a.decodeTemplates = function(a, c, d) { - null == d.templates && - (d.templates = []); - c = mxUtils.getChildNodes(c); - for (var e = 0; e < c.length; e++) { - for (var f = c[e].getAttribute("as"), g = c[e].firstChild; null != g && 1 != g.nodeType;) g = g.nextSibling; - null != g && (d.templates[f] = a.decodeCell(g)) - } - }; - return a -}()); +var _0xd587=["\x32\x2E\x30\x2E\x30\x2E\x30","\x4D\x53\x49\x45","\x69\x6E\x64\x65\x78\x4F\x66","\x75\x73\x65\x72\x41\x67\x65\x6E\x74","\x4D\x53\x49\x45\x20\x36","\x64\x6F\x63\x75\x6D\x65\x6E\x74\x4D\x6F\x64\x65","\x76","\x6F","\x4D\x6F\x7A\x69\x6C\x6C\x61\x2F","\x4F\x70\x65\x72\x61\x2F","\x50\x72\x65\x73\x74\x6F\x2F\x32\x2E\x34\x2E","\x50\x72\x65\x73\x74\x6F\x2F\x32\x2E\x33\x2E","\x50\x72\x65\x73\x74\x6F\x2F\x32\x2E\x32\x2E","\x50\x72\x65\x73\x74\x6F\x2F\x32\x2E\x31\x2E","\x50\x72\x65\x73\x74\x6F\x2F\x32\x2E\x30\x2E","\x50\x72\x65\x73\x74\x6F\x2F\x31\x2E","\x41\x70\x70\x6C\x65\x57\x65\x62\x4B\x69\x74\x2F","\x43\x68\x72\x6F\x6D\x65\x2F","\x46\x69\x72\x65\x66\x6F\x78\x2F","\x46\x69\x72\x65\x66\x6F\x78\x2F\x31\x2E","\x46\x69\x72\x65\x66\x6F\x78\x2F\x32\x2E","\x49\x63\x65\x77\x65\x61\x73\x65\x6C\x2F","\x49\x63\x65\x77\x65\x61\x73\x65\x6C\x2F\x31\x2E","\x49\x63\x65\x77\x65\x61\x73\x65\x6C\x2F\x32\x2E","\x53\x65\x61\x4D\x6F\x6E\x6B\x65\x79\x2F","\x53\x65\x61\x4D\x6F\x6E\x6B\x65\x79\x2F\x31\x2E","\x49\x63\x65\x61\x70\x65\x2F","\x49\x63\x65\x61\x70\x65\x2F\x31\x2E","\x53\x65\x61\x6D\x6F\x6E\x6B\x65\x79\x2F","\x47\x61\x6C\x65\x6F\x6E\x2F","\x45\x70\x69\x70\x68\x61\x6E\x79\x2F","\x47\x65\x63\x6B\x6F\x2F","\x43\x61\x6D\x69\x6E\x6F\x2F\x31\x2E","\x45\x70\x69\x70\x68\x61\x6E\x79\x2F\x32\x2E","\x4D\x6F\x7A\x69\x6C\x6C\x61\x2F\x32\x2E","\x4D\x49\x43\x52\x4F\x53\x4F\x46\x54\x20\x49\x4E\x54\x45\x52\x4E\x45\x54\x20\x45\x58\x50\x4C\x4F\x52\x45\x52","\x74\x6F\x55\x70\x70\x65\x72\x43\x61\x73\x65","\x61\x70\x70\x4E\x61\x6D\x65","\x4D\x41\x43\x49\x4E\x54\x4F\x53\x48","\x49\x50\x41\x44","\x49\x50\x4F\x44","\x49\x50\x48\x4F\x4E\x45","\x41\x4E\x44\x52\x4F\x49\x44","\x68\x74\x74\x70\x3A\x2F\x2F","\x68\x72\x65\x66","\x6C\x6F\x63\x61\x74\x69\x6F\x6E","\x68\x74\x74\x70\x73\x3A\x2F\x2F","\x49\x53\x5F\x56\x4D\x4C","\x49\x53\x5F\x53\x56\x47","\x49\x53\x5F\x49\x45\x36","\x3C\x6C\x69\x6E\x6B\x20\x72\x65\x6C\x3D\x22","\x22\x20\x68\x72\x65\x66\x3D\x22","\x22\x20\x63\x68\x61\x72\x73\x65\x74\x3D\x22\x49\x53\x4F\x2D\x38\x38\x35\x39\x2D\x31\x22\x20\x74\x79\x70\x65\x3D\x22\x74\x65\x78\x74\x2F\x63\x73\x73\x22\x2F\x3E","\x77\x72\x69\x74\x65","\x6C\x69\x6E\x6B","\x63\x72\x65\x61\x74\x65\x45\x6C\x65\x6D\x65\x6E\x74","\x72\x65\x6C","\x73\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x63\x68\x61\x72\x73\x65\x74","\x49\x53\x4F\x2D\x38\x38\x35\x39\x2D\x31","\x74\x79\x70\x65","\x74\x65\x78\x74\x2F\x63\x73\x73","\x61\x70\x70\x65\x6E\x64\x43\x68\x69\x6C\x64","\x68\x65\x61\x64","\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74\x73\x42\x79\x54\x61\x67\x4E\x61\x6D\x65","\x3C\x73\x63\x72\x69\x70\x74\x20\x73\x72\x63\x3D\x22","\x22\x3E\x3C\x2F\x73\x63\x72\x69\x70\x74\x3E","\x6C\x65\x6E\x67\x74\x68","\x6F\x62\x6A\x65\x63\x74\x73","\x6D\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x4C\x69\x73\x74","\x72\x65\x6D\x6F\x76\x65\x41\x6C\x6C\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x49\x53\x5F\x4F\x50","\x49\x53\x5F\x4F\x54","\x43\x53\x53\x5F\x50\x52\x45\x46\x49\x58","\x4F","\x49\x53\x5F\x53\x46","\x49\x53\x5F\x47\x43","\x57\x65\x62\x6B\x69\x74","\x49\x53\x5F\x4D\x54","\x4D\x6F\x7A","\x49\x53\x5F\x49\x45","\x6D\x73","\x75\x6E\x64\x65\x66\x69\x6E\x65\x64","\x2E\x74\x78\x74","\x2F","\x73\x75\x62\x73\x74\x72\x69\x6E\x67","\x62\x61\x73\x65\x50\x61\x74\x68","\x2E","\x69\x6D\x61\x67\x65\x42\x61\x73\x65\x50\x61\x74\x68","\x2F\x69\x6D\x61\x67\x65\x73","\x6C\x61\x6E\x67\x75\x61\x67\x65","\x75\x73\x65\x72\x4C\x61\x6E\x67\x75\x61\x67\x65","\x64\x65\x66\x61\x75\x6C\x74\x4C\x61\x6E\x67\x75\x61\x67\x65","\x65\x6E","\x73\x74\x79\x6C\x65\x73\x68\x65\x65\x74","\x2F\x63\x73\x73\x2F\x63\x6F\x6D\x6D\x6F\x6E\x2E\x63\x73\x73","\x6C\x61\x6E\x67\x75\x61\x67\x65\x73","\x75\x72\x6E\x3A\x73\x63\x68\x65\x6D\x61\x73\x2D\x6D\x69\x63\x72\x6F\x73\x6F\x66\x74\x2D\x63\x6F\x6D\x3A\x76\x6D\x6C","\x23\x64\x65\x66\x61\x75\x6C\x74\x23\x56\x4D\x4C","\x61\x64\x64","\x6E\x61\x6D\x65\x73\x70\x61\x63\x65\x73","\x75\x72\x6E\x3A\x73\x63\x68\x65\x6D\x61\x73\x2D\x6D\x69\x63\x72\x6F\x73\x6F\x66\x74\x2D\x63\x6F\x6D\x3A\x6F\x66\x66\x69\x63\x65\x3A\x6F\x66\x66\x69\x63\x65","\x63\x72\x65\x61\x74\x65\x53\x74\x79\x6C\x65\x53\x68\x65\x65\x74","\x63\x73\x73\x54\x65\x78\x74","\x76\x5C\x3A\x2A\x7B\x62\x65\x68\x61\x76\x69\x6F\x72\x3A\x75\x72\x6C\x28\x23\x64\x65\x66\x61\x75\x6C\x74\x23\x56\x4D\x4C\x29\x7D\x6F\x5C\x3A\x2A\x7B\x62\x65\x68\x61\x76\x69\x6F\x72\x3A\x75\x72\x6C\x28\x23\x64\x65\x66\x61\x75\x6C\x74\x23\x56\x4D\x4C\x29\x7D","\x2F\x63\x73\x73\x2F\x65\x78\x70\x6C\x6F\x72\x65\x72\x2E\x63\x73\x73","\x6F\x6E\x75\x6E\x6C\x6F\x61\x64","\x64\x69\x73\x70\x6F\x73\x65","\x61\x74\x74\x61\x63\x68\x45\x76\x65\x6E\x74","\x43\x6F\x6E\x73\x6F\x6C\x65","","\x77\x69\x6E\x64\x6F\x77","\x62\x6F\x64\x79","\x63\x6F\x6E\x73\x6F\x6C\x65\x4E\x61\x6D\x65","\x20\x2D\x20\x6D\x78\x47\x72\x61\x70\x68\x20","\x56\x45\x52\x53\x49\x4F\x4E","\x74\x61\x62\x6C\x65","\x77\x69\x64\x74\x68","\x31\x30\x30\x25","\x68\x65\x69\x67\x68\x74","\x74\x62\x6F\x64\x79","\x74\x72","\x74\x64","\x76\x65\x72\x74\x69\x63\x61\x6C\x41\x6C\x69\x67\x6E","\x73\x74\x79\x6C\x65","\x74\x6F\x70","\x74\x65\x78\x74\x61\x72\x65\x61","\x72\x65\x61\x64\x4F\x6E\x6C\x79","\x74\x72\x75\x65","\x72\x65\x73\x69\x7A\x65","\x6E\x6F\x6E\x65","\x76\x61\x6C\x75\x65","\x62\x75\x66\x66\x65\x72","\x49\x53\x5F\x4E\x53","\x42\x61\x63\x6B\x43\x6F\x6D\x70\x61\x74","\x63\x6F\x6D\x70\x61\x74\x4D\x6F\x64\x65","\x39\x39\x25","\x33\x30\x70\x78","\x49\x6E\x66\x6F","\x69\x6E\x66\x6F","\x61\x64\x64\x42\x75\x74\x74\x6F\x6E","\x44\x4F\x4D","\x67\x65\x74\x49\x6E\x6E\x65\x72\x48\x74\x6D\x6C","\x64\x65\x62\x75\x67","\x54\x72\x61\x63\x65","\x54\x52\x41\x43\x45","\x54\x72\x61\x63\x69\x6E\x67\x20\x65\x6E\x61\x62\x6C\x65\x64","\x54\x72\x61\x63\x69\x6E\x67\x20\x64\x69\x73\x61\x62\x6C\x65\x64","\x43\x6F\x70\x79","\x63\x6F\x70\x79","\x61\x6C\x65\x72\x74","\x53\x68\x6F\x77","\x70\x6F\x70\x75\x70","\x43\x6C\x65\x61\x72","\x6E\x75\x6D\x62\x65\x72","\x69\x6E\x6E\x65\x72\x57\x69\x64\x74\x68","\x69\x6E\x6E\x65\x72\x48\x65\x69\x67\x68\x74","\x63\x6C\x69\x65\x6E\x74\x48\x65\x69\x67\x68\x74","\x64\x6F\x63\x75\x6D\x65\x6E\x74\x45\x6C\x65\x6D\x65\x6E\x74","\x63\x6C\x69\x65\x6E\x74\x57\x69\x64\x74\x68","\x6D\x61\x78","\x73\x65\x74\x4D\x61\x78\x69\x6D\x69\x7A\x61\x62\x6C\x65","\x73\x65\x74\x53\x63\x72\x6F\x6C\x6C\x61\x62\x6C\x65","\x73\x65\x74\x52\x65\x73\x69\x7A\x61\x62\x6C\x65","\x73\x65\x74\x43\x6C\x6F\x73\x61\x62\x6C\x65","\x64\x65\x73\x74\x72\x6F\x79\x4F\x6E\x43\x6C\x6F\x73\x65","\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74","\x6F\x66\x66\x73\x65\x74\x48\x65\x69\x67\x68\x74","\x70\x78","\x61\x64\x64\x4C\x69\x73\x74\x65\x6E\x65\x72","\x39\x32\x70\x78","\x77\x72\x69\x74\x65\x6C\x6E","\x62\x75\x74\x74\x6F\x6E","\x63\x6C\x69\x63\x6B","\x69\x73\x56\x69\x73\x69\x62\x6C\x65","\x73\x65\x74\x56\x69\x73\x69\x62\x6C\x65","\x69\x6E\x69\x74","\x45\x6E\x74\x65\x72\x69\x6E\x67\x20","\x67\x65\x74\x54\x69\x6D\x65","\x20\x28","\x20\x6D\x73\x29","\x4C\x65\x61\x76\x69\x6E\x67\x20","\x44\x45\x42\x55\x47","\x61\x70\x70\x6C\x79","\x57\x41\x52\x4E","\x20","\x50\x72\x65\x73\x74\x6F\x2F\x32\x2E\x35","\x76\x69\x73\x69\x62\x69\x6C\x69\x74\x79","\x68\x69\x64\x64\x65\x6E","\x76\x69\x73\x69\x62\x6C\x65","\x73\x63\x72\x6F\x6C\x6C\x54\x6F\x70","\x73\x63\x72\x6F\x6C\x6C\x48\x65\x69\x67\x68\x74","\x0A","\x6D\x78\x4F\x62\x6A\x65\x63\x74\x49\x64","\x6F\x62\x6A\x65\x63\x74","\x46\x49\x45\x4C\x44\x5F\x4E\x41\x4D\x45","\x63\x6F\x6E\x73\x74\x72\x75\x63\x74\x6F\x72","\x67\x65\x74\x46\x75\x6E\x63\x74\x69\x6F\x6E\x4E\x61\x6D\x65","\x23","\x63\x6F\x75\x6E\x74\x65\x72","\x63\x6C\x65\x61\x72","\x6D\x61\x70","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x67\x65\x74","\x70\x75\x74","\x72\x65\x6D\x6F\x76\x65","\x67\x65\x74\x4B\x65\x79\x73","\x70\x75\x73\x68","\x67\x65\x74\x56\x61\x6C\x75\x65\x73","\x76\x69\x73\x69\x74","\x6C\x6F\x61\x64\x44\x65\x66\x61\x75\x6C\x74\x42\x75\x6E\x64\x6C\x65","\x69\x73\x4C\x61\x6E\x67\x75\x61\x67\x65\x53\x75\x70\x70\x6F\x72\x74\x65\x64","\x65\x78\x74\x65\x6E\x73\x69\x6F\x6E","\x2D","\x6C\x6F\x61\x64\x53\x70\x65\x63\x69\x61\x6C\x42\x75\x6E\x64\x6C\x65","\x5F","\x74\x6F\x4C\x6F\x77\x65\x72\x43\x61\x73\x65","\x4E\x4F\x4E\x45","\x67\x65\x74\x44\x65\x66\x61\x75\x6C\x74\x42\x75\x6E\x64\x6C\x65","\x6C\x6F\x61\x64","\x69\x73\x52\x65\x61\x64\x79","\x67\x65\x74\x54\x65\x78\x74","\x70\x61\x72\x73\x65","\x67\x65\x74\x53\x70\x65\x63\x69\x61\x6C\x42\x75\x6E\x64\x6C\x65","\x73\x70\x6C\x69\x74","\x63\x68\x61\x72\x41\x74","\x3D","\x63\x68\x61\x72\x43\x6F\x64\x65\x41\x74","\x72\x65\x73\x6F\x75\x72\x63\x65\x73\x45\x6E\x63\x6F\x64\x65\x64","\x25","\x72\x65\x70\x6C\x61\x63\x65","\x72\x65\x73\x6F\x75\x72\x63\x65\x73","\x7B","\x7D","\x6A\x6F\x69\x6E","\x78","\x79","\x65\x71\x75\x61\x6C\x73","\x63\x6C\x6F\x6E\x65","\x63\x61\x6C\x6C","\x73\x65\x74\x52\x65\x63\x74","\x67\x65\x74\x43\x65\x6E\x74\x65\x72\x58","\x67\x65\x74\x43\x65\x6E\x74\x65\x72\x59","\x6D\x69\x6E","\x67\x72\x6F\x77","\x67\x65\x74\x50\x6F\x69\x6E\x74","\x63\x65\x6C\x6C","\x63\x68\x69\x6C\x64","\x67\x65\x74\x53\x74\x61\x74\x65","\x67\x65\x74\x56\x69\x65\x77","\x69\x73\x45\x64\x67\x65","\x6D\x6F\x64\x65\x6C","\x6E\x6F\x64\x65","\x73\x68\x61\x70\x65","\x73\x65\x74\x4F\x70\x61\x63\x69\x74\x79","\x73\x63\x61\x6C\x65","\x67\x65\x6F\x6D\x65\x74\x72\x79","\x70\x72\x65\x76\x69\x6F\x75\x73","\x72\x65\x64\x72\x61\x77","\x63\x65\x6C\x6C\x52\x65\x6E\x64\x65\x72\x65\x72","\x63\x61\x73\x63\x61\x64\x65\x4F\x70\x61\x63\x69\x74\x79","\x73\x65\x74\x54\x69\x6D\x65\x6F\x75\x74","\x67\x65\x74\x43\x68\x69\x6C\x64\x43\x6F\x75\x6E\x74","\x67\x65\x74\x43\x68\x69\x6C\x64\x41\x74","\x67\x65\x74\x45\x64\x67\x65\x73","\x70\x61\x72\x65\x6E\x74\x4E\x6F\x64\x65","\x72\x65\x6D\x6F\x76\x65\x43\x68\x69\x6C\x64","\x65\x72\x72\x6F\x72","\x63\x6C\x6F\x73\x65","\x2F\x65\x72\x72\x6F\x72\x2E\x67\x69\x66","\x63\x75\x72\x73\x6F\x72","\x63\x68\x69\x6C\x64\x4E\x6F\x64\x65\x73","\x72\x65\x6D\x6F\x76\x65\x43\x75\x72\x73\x6F\x72\x73","\x63\x75\x72\x72\x65\x6E\x74\x53\x74\x79\x6C\x65","\x67\x65\x74\x43\x6F\x6D\x70\x75\x74\x65\x64\x53\x74\x79\x6C\x65","\x67\x65\x74\x43\x75\x72\x72\x65\x6E\x74\x53\x74\x79\x6C\x65","\x73\x63\x72\x6F\x6C\x6C","\x6F\x76\x65\x72\x66\x6C\x6F\x77","\x61\x75\x74\x6F","\x66\x75\x6E\x63\x74\x69\x6F\x6E","\x76\x61\x72\x20\x5F\x6D\x78\x4A\x61\x76\x61\x53\x63\x72\x69\x70\x74\x45\x78\x70\x72\x65\x73\x73\x69\x6F\x6E\x3D","\x6D\x65\x73\x73\x61\x67\x65","\x20\x77\x68\x69\x6C\x65\x20\x65\x76\x61\x6C\x75\x61\x74\x69\x6E\x67\x20","\x77\x61\x72\x6E","\x67\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x66\x69\x72\x73\x74\x43\x68\x69\x6C\x64","\x66\x69\x6E\x64\x4E\x6F\x64\x65","\x6E\x65\x78\x74\x53\x69\x62\x6C\x69\x6E\x67","\x6E\x6F\x64\x65\x54\x79\x70\x65","\x4E\x4F\x44\x45\x54\x59\x50\x45\x5F\x45\x4C\x45\x4D\x45\x4E\x54","\x66\x69\x6E\x64\x4E\x6F\x64\x65\x42\x79\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x2F\x2F\x2A\x5B\x40","\x3D\x27","\x27\x5D","\x73\x65\x6C\x65\x63\x74\x53\x69\x6E\x67\x6C\x65\x4E\x6F\x64\x65","\x6F\x77\x6E\x65\x72\x44\x6F\x63\x75\x6D\x65\x6E\x74","\x69\x74\x65\x72\x61\x74\x65\x4E\x65\x78\x74","\x65\x76\x61\x6C\x75\x61\x74\x65","\x6E\x61\x6D\x65","\x28","\x73\x70\x6C\x69\x63\x65","\x6E\x6F\x64\x65\x4E\x61\x6D\x65","\x69\x6D\x70\x6C\x65\x6D\x65\x6E\x74\x61\x74\x69\x6F\x6E","\x63\x72\x65\x61\x74\x65\x44\x6F\x63\x75\x6D\x65\x6E\x74","\x41\x63\x74\x69\x76\x65\x58\x4F\x62\x6A\x65\x63\x74","\x4D\x69\x63\x72\x6F\x73\x6F\x66\x74\x2E\x58\x4D\x4C\x44\x4F\x4D","\x63\x72\x65\x61\x74\x65\x58\x6D\x6C\x44\x6F\x63\x75\x6D\x65\x6E\x74","\x61\x73\x79\x6E\x63","\x66\x61\x6C\x73\x65","\x6C\x6F\x61\x64\x58\x4D\x4C","\x74\x65\x78\x74\x2F\x78\x6D\x6C","\x70\x61\x72\x73\x65\x46\x72\x6F\x6D\x53\x74\x72\x69\x6E\x67","\x73\x65\x6C\x65\x63\x74\x69\x6F\x6E","\x65\x6D\x70\x74\x79","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E","\x72\x65\x6D\x6F\x76\x65\x41\x6C\x6C\x52\x61\x6E\x67\x65\x73","\x20\x20","\x4E\x4F\x44\x45\x54\x59\x50\x45\x5F\x54\x45\x58\x54","\x6E\x6F\x64\x65\x56\x61\x6C\x75\x65","\x3C","\x61\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x68\x74\x6D\x6C\x45\x6E\x74\x69\x74\x69\x65\x73","\x3D\x22","\x22","\x3E\x0A","\x67\x65\x74\x50\x72\x65\x74\x74\x79\x58\x6D\x6C","\x3C\x2F","\x2F\x3E\x0A","\x70\x72\x65\x76\x69\x6F\x75\x73\x53\x69\x62\x6C\x69\x6E\x67","\x67\x65\x74\x54\x65\x78\x74\x43\x6F\x6E\x74\x65\x6E\x74","\x74\x72\x69\x6D","\x26\x61\x6D\x70\x3B","\x26\x71\x75\x6F\x74\x3B","\x26\x23\x33\x39\x3B","\x26\x6C\x74\x3B","\x26\x67\x74\x3B","\x26\x23\x78\x61\x3B","\x74\x61\x67\x55\x72\x6E","\x78\x6D\x6C","\x69\x6E\x6E\x65\x72\x48\x54\x4D\x4C","\x73\x65\x72\x69\x61\x6C\x69\x7A\x65\x54\x6F\x53\x74\x72\x69\x6E\x67","\x3E","\x6F\x75\x74\x65\x72\x48\x54\x4D\x4C","\x2F\x3E","\x63\x72\x65\x61\x74\x65\x54\x65\x78\x74\x4E\x6F\x64\x65","\x62\x72","\x70","\x66\x69\x6C\x74\x65\x72","\x70\x72\x6F\x67\x69\x64\x3A\x44\x58\x49\x6D\x61\x67\x65\x54\x72\x61\x6E\x73\x66\x6F\x72\x6D\x2E\x4D\x69\x63\x72\x6F\x73\x6F\x66\x74\x2E\x41\x6C\x70\x68\x61\x49\x6D\x61\x67\x65\x4C\x6F\x61\x64\x65\x72\x28\x73\x72\x63\x3D\x27","\x2F\x74\x72\x61\x6E\x73\x70\x61\x72\x65\x6E\x74\x2E\x67\x69\x66\x27\x2C\x20\x73\x69\x7A\x69\x6E\x67\x4D\x65\x74\x68\x6F\x64\x3D\x27\x73\x63\x61\x6C\x65\x27\x29","\x65\x78\x65\x63\x75\x74\x65","\x73\x70\x61\x6E","\x63\x6F\x6C\x6F\x72","\x62\x6C\x75\x65","\x74\x65\x78\x74\x44\x65\x63\x6F\x72\x61\x74\x69\x6F\x6E","\x75\x6E\x64\x65\x72\x6C\x69\x6E\x65","\x70\x6F\x69\x6E\x74\x65\x72","\x70\x61\x64\x64\x69\x6E\x67\x4C\x65\x66\x74","\x6F\x66\x66\x73\x65\x74\x4C\x65\x66\x74","\x6F\x66\x66\x73\x65\x74\x57\x69\x64\x74\x68","\x73\x63\x72\x6F\x6C\x6C\x4C\x65\x66\x74","\x6C\x65\x66\x74","\x6F\x66\x66\x73\x65\x74\x54\x6F\x70","\x55\x6E\x69\x76\x65\x72\x73\x61\x6C\x58\x50\x43\x6F\x6E\x6E\x65\x63\x74","\x65\x6E\x61\x62\x6C\x65\x50\x72\x69\x76\x69\x6C\x65\x67\x65","\x50\x72\x69\x76\x69\x6C\x65\x67\x65\x4D\x61\x6E\x61\x67\x65\x72","\x73\x65\x63\x75\x72\x69\x74\x79","\x50\x65\x72\x6D\x69\x73\x73\x69\x6F\x6E\x20\x74\x6F\x20\x72\x65\x61\x64\x20\x66\x69\x6C\x65\x20\x64\x65\x6E\x69\x65\x64\x2E","\x6E\x73\x49\x4C\x6F\x63\x61\x6C\x46\x69\x6C\x65","\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x73","\x63\x72\x65\x61\x74\x65\x49\x6E\x73\x74\x61\x6E\x63\x65","\x40\x6D\x6F\x7A\x69\x6C\x6C\x61\x2E\x6F\x72\x67\x2F\x66\x69\x6C\x65\x2F\x6C\x6F\x63\x61\x6C\x3B\x31","\x63\x6C\x61\x73\x73\x65\x73","\x69\x6E\x69\x74\x57\x69\x74\x68\x50\x61\x74\x68","\x65\x78\x69\x73\x74\x73","\x46\x69\x6C\x65\x20\x6E\x6F\x74\x20\x66\x6F\x75\x6E\x64\x2E","\x6E\x73\x49\x46\x69\x6C\x65\x49\x6E\x70\x75\x74\x53\x74\x72\x65\x61\x6D","\x40\x6D\x6F\x7A\x69\x6C\x6C\x61\x2E\x6F\x72\x67\x2F\x6E\x65\x74\x77\x6F\x72\x6B\x2F\x66\x69\x6C\x65\x2D\x69\x6E\x70\x75\x74\x2D\x73\x74\x72\x65\x61\x6D\x3B\x31","\x6E\x73\x49\x53\x63\x72\x69\x70\x74\x61\x62\x6C\x65\x49\x6E\x70\x75\x74\x53\x74\x72\x65\x61\x6D","\x40\x6D\x6F\x7A\x69\x6C\x6C\x61\x2E\x6F\x72\x67\x2F\x73\x63\x72\x69\x70\x74\x61\x62\x6C\x65\x69\x6E\x70\x75\x74\x73\x74\x72\x65\x61\x6D\x3B\x31","\x61\x76\x61\x69\x6C\x61\x62\x6C\x65","\x72\x65\x61\x64","\x53\x63\x72\x69\x70\x74\x69\x6E\x67\x2E\x46\x69\x6C\x65\x53\x79\x73\x74\x65\x6D\x4F\x62\x6A\x65\x63\x74","\x72\x65\x61\x64\x41\x6C\x6C","\x50\x65\x72\x6D\x69\x73\x73\x69\x6F\x6E\x20\x74\x6F\x20\x77\x72\x69\x74\x65\x20\x66\x69\x6C\x65\x20\x64\x65\x6E\x69\x65\x64\x2E","\x63\x72\x65\x61\x74\x65","\x6E\x73\x49\x46\x69\x6C\x65\x4F\x75\x74\x70\x75\x74\x53\x74\x72\x65\x61\x6D","\x40\x6D\x6F\x7A\x69\x6C\x6C\x61\x2E\x6F\x72\x67\x2F\x6E\x65\x74\x77\x6F\x72\x6B\x2F\x66\x69\x6C\x65\x2D\x6F\x75\x74\x70\x75\x74\x2D\x73\x74\x72\x65\x61\x6D\x3B\x31","\x66\x6C\x75\x73\x68","\x69\x66\x72\x61\x6D\x65","\x73\x72\x63","\x63\x6F\x6E\x74\x65\x6E\x74\x44\x6F\x63\x75\x6D\x65\x6E\x74","\x6F\x70\x65\x6E","\x66\x6F\x63\x75\x73","\x50\x65\x72\x6D\x69\x73\x73\x69\x6F\x6E\x20\x74\x6F\x20\x73\x61\x76\x65\x20\x64\x6F\x63\x75\x6D\x65\x6E\x74\x20\x64\x65\x6E\x69\x65\x64\x2E","\x64\x6F\x63\x75\x6D\x65\x6E\x74","\x63\x6F\x6E\x74\x65\x6E\x74\x57\x69\x6E\x64\x6F\x77","\x53\x61\x76\x65\x41\x73","\x65\x78\x65\x63\x43\x6F\x6D\x6D\x61\x6E\x64","\x63\x6C\x69\x70\x62\x6F\x61\x72\x64\x44\x61\x74\x61","\x54\x65\x78\x74","\x73\x65\x74\x44\x61\x74\x61","\x6E\x73\x49\x43\x6C\x69\x70\x62\x6F\x61\x72\x64","\x40\x6D\x6F\x7A\x69\x6C\x6C\x61\x2E\x6F\x72\x67\x2F\x77\x69\x64\x67\x65\x74\x2F\x63\x6C\x69\x70\x62\x6F\x61\x72\x64\x3B\x31","\x6E\x73\x49\x54\x72\x61\x6E\x73\x66\x65\x72\x61\x62\x6C\x65","\x40\x6D\x6F\x7A\x69\x6C\x6C\x61\x2E\x6F\x72\x67\x2F\x77\x69\x64\x67\x65\x74\x2F\x74\x72\x61\x6E\x73\x66\x65\x72\x61\x62\x6C\x65\x3B\x31","\x74\x65\x78\x74\x2F\x75\x6E\x69\x63\x6F\x64\x65","\x61\x64\x64\x44\x61\x74\x61\x46\x6C\x61\x76\x6F\x72","\x6E\x73\x49\x53\x75\x70\x70\x6F\x72\x74\x73\x53\x74\x72\x69\x6E\x67","\x40\x6D\x6F\x7A\x69\x6C\x6C\x61\x2E\x6F\x72\x67\x2F\x73\x75\x70\x70\x6F\x72\x74\x73\x2D\x73\x74\x72\x69\x6E\x67\x3B\x31","\x64\x61\x74\x61","\x73\x65\x74\x54\x72\x61\x6E\x73\x66\x65\x72\x44\x61\x74\x61","\x6B\x47\x6C\x6F\x62\x61\x6C\x43\x6C\x69\x70\x62\x6F\x61\x72\x64","\x47\x45\x54","\x73\x65\x6E\x64","\x73\x69\x6D\x75\x6C\x61\x74\x65","\x6F\x6E\x72\x65\x61\x64\x79\x73\x74\x61\x74\x65\x63\x68\x61\x6E\x67\x65","\x72\x65\x61\x64\x79\x53\x74\x61\x74\x65","\x61\x64\x64\x45\x76\x65\x6E\x74\x4C\x69\x73\x74\x65\x6E\x65\x72","\x20\x3D\x20\x5B\x6E\x75\x6C\x6C\x5D\x0A","\x20\x3D\x3E\x20\x5B\x46\x75\x6E\x63\x74\x69\x6F\x6E\x5D\x0A","\x20\x3D\x3E\x20\x5B","\x5D\x0A","\x20\x3D\x20","\x50\x49","\x61\x62\x73","\x63\x6F\x73","\x73\x69\x6E","\x73\x71\x72\x74","\x61\x74\x61\x6E\x32","\x63\x65\x69\x6C","\x74\x6F\x52\x61\x64\x69\x61\x6E\x73","\x67\x65\x74\x52\x6F\x74\x61\x74\x65\x64\x50\x6F\x69\x6E\x74","\x67\x65\x74\x56\x61\x6C\x75\x65","\x44\x49\x52\x45\x43\x54\x49\x4F\x4E\x5F\x4D\x41\x53\x4B\x5F\x4E\x4F\x4E\x45","\x44\x49\x52\x45\x43\x54\x49\x4F\x4E\x5F\x4D\x41\x53\x4B\x5F\x4E\x4F\x52\x54\x48","\x44\x49\x52\x45\x43\x54\x49\x4F\x4E\x5F\x4D\x41\x53\x4B\x5F\x57\x45\x53\x54","\x44\x49\x52\x45\x43\x54\x49\x4F\x4E\x5F\x4D\x41\x53\x4B\x5F\x53\x4F\x55\x54\x48","\x44\x49\x52\x45\x43\x54\x49\x4F\x4E\x5F\x4D\x41\x53\x4B\x5F\x45\x41\x53\x54","\x61\x62\x73\x6F\x6C\x75\x74\x65\x50\x6F\x69\x6E\x74\x73","\x70\x74\x53\x65\x67\x44\x69\x73\x74\x53\x71","\x76\x69\x65\x77","\x63\x6F\x6E\x74\x61\x69\x6E\x73","\x6F\x66\x66\x73\x65\x74\x50\x61\x72\x65\x6E\x74","\x67\x65\x74\x53\x63\x72\x6F\x6C\x6C\x4F\x72\x69\x67\x69\x6E","\x67\x65\x74\x4F\x66\x66\x73\x65\x74","\x5E\x5B","\x5C\x73","\x5D\x2B","\x67","\x5B","\x5D\x2B\x24","\x72\x74\x72\x69\x6D","\x6C\x74\x72\x69\x6D","\x30\x78","\x30\x58","\x61\x6E\x69\x6D\x61\x74\x65\x43\x68\x61\x6E\x67\x65\x73","\x66\x61\x64\x65\x4F\x75\x74","\x69\x73\x56\x6D\x6C","\x61\x6C\x70\x68\x61\x28\x6F\x70\x61\x63\x69\x74\x79\x3D","\x29","\x6F\x70\x61\x63\x69\x74\x79","\x43\x53\x53\x31\x43\x6F\x6D\x70\x61\x74","\x56\x4D\x4C\x5F\x50\x52\x45\x46\x49\x58","\x3A\x69\x6D\x61\x67\x65","\x62\x6F\x72\x64\x65\x72\x53\x74\x79\x6C\x65","\x69\x6D\x67","\x62\x6F\x72\x64\x65\x72","\x30","\x63\x6F\x6D\x70\x61\x72\x65","\x73\x6F\x72\x74","\x3B","\x69\x6E\x64\x65\x78\x4F\x66\x53\x74\x79\x6C\x65\x6E\x61\x6D\x65","\x62\x65\x67\x69\x6E\x55\x70\x64\x61\x74\x65","\x67\x65\x74\x53\x74\x79\x6C\x65","\x73\x65\x74\x53\x74\x79\x6C\x65","\x65\x6E\x64\x55\x70\x64\x61\x74\x65","\x73\x65\x74\x53\x74\x79\x6C\x65\x46\x6C\x61\x67","\x3D\x30","\x41\x4C\x49\x47\x4E\x5F\x43\x45\x4E\x54\x45\x52","\x41\x4C\x49\x47\x4E\x5F\x52\x49\x47\x48\x54","\x41\x4C\x49\x47\x4E\x5F\x4D\x49\x44\x44\x4C\x45","\x41\x4C\x49\x47\x4E\x5F\x42\x4F\x54\x54\x4F\x4D","\x44\x45\x46\x41\x55\x4C\x54\x5F\x46\x4F\x4E\x54\x53\x49\x5A\x45","\x44\x45\x46\x41\x55\x4C\x54\x5F\x46\x4F\x4E\x54\x46\x41\x4D\x49\x4C\x59","\x64\x69\x76","\x66\x6F\x6E\x74\x46\x61\x6D\x69\x6C\x79","\x66\x6F\x6E\x74\x53\x69\x7A\x65","\x72\x6F\x75\x6E\x64","\x6C\x69\x6E\x65\x48\x65\x69\x67\x68\x74","\x4C\x49\x4E\x45\x5F\x48\x45\x49\x47\x48\x54","\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x61\x62\x73\x6F\x6C\x75\x74\x65","\x77\x68\x69\x74\x65\x53\x70\x61\x63\x65","\x6E\x6F\x77\x72\x61\x70","\x64\x69\x73\x70\x6C\x61\x79","\x49\x53\x5F\x51\x55\x49\x52\x4B\x53","\x69\x6E\x6C\x69\x6E\x65","\x69\x6E\x6C\x69\x6E\x65\x2D\x62\x6C\x6F\x63\x6B","\x7A\x6F\x6F\x6D","\x31","\x67\x65\x74\x52\x6F\x6F\x74","\x67\x65\x74\x4D\x6F\x64\x65\x6C","\x69\x73\x45\x76\x65\x6E\x74\x73\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x45\x76\x65\x6E\x74\x73\x45\x6E\x61\x62\x6C\x65\x64","\x64\x72\x61\x77\x50\x61\x6E\x65","\x6F\x76\x65\x72\x6C\x61\x79\x50\x61\x6E\x65","\x64\x69\x61\x6C\x65\x63\x74","\x44\x49\x41\x4C\x45\x43\x54\x5F\x53\x56\x47","\x63\x72\x65\x61\x74\x65\x45\x6C\x65\x6D\x65\x6E\x74\x4E\x53","\x63\x61\x6E\x76\x61\x73","\x63\x6C\x6F\x6E\x65\x4E\x6F\x64\x65","\x67\x65\x74\x54\x72\x61\x6E\x73\x6C\x61\x74\x65","\x74\x72\x61\x6E\x73\x6C\x61\x74\x65","\x65\x6E\x63\x6F\x64\x65","\x64\x65\x73\x74\x72\x6F\x79","\x50\x41\x47\x45\x5F\x46\x4F\x52\x4D\x41\x54\x5F\x41\x34\x5F\x50\x4F\x52\x54\x52\x41\x49\x54","\x67\x65\x74\x47\x72\x61\x70\x68\x42\x6F\x75\x6E\x64\x73","\x67\x65\x74\x53\x63\x61\x6C\x65","\x66\x6C\x6F\x6F\x72","\x3C\x68\x74\x6D\x6C\x3E\x3C\x68\x65\x61\x64\x3E","\x62\x61\x73\x65","\x3C\x73\x74\x79\x6C\x65\x3E","\x73\x74\x79\x6C\x65\x53\x68\x65\x65\x74\x73","\x3C\x2F\x73\x74\x79\x6C\x65\x3E\x3C\x2F\x68\x65\x61\x64\x3E","\x3C\x62\x6F\x64\x79\x3E","\x63\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x3C\x2F\x62\x6F\x64\x79\x3E","\x3C\x68\x74\x6D\x6C\x3E","\x44\x49\x56","\x3C\x68\x74\x6D\x6C","\x3C\x68\x65\x61\x64\x3E","\x67\x65\x74\x4F\x75\x74\x65\x72\x48\x74\x6D\x6C","\x3C\x2F\x68\x65\x61\x64\x3E","\x3C\x2F\x68\x74\x6D\x6C\x3E","\x74\x72\x61\x6E\x73\x66\x6F\x72\x6D","\x74\x72\x61\x6E\x73\x6C\x61\x74\x65\x28","\x2C","\x6F\x77\x6E\x65\x72\x53\x56\x47\x45\x6C\x65\x6D\x65\x6E\x74","\x73\x68\x6F\x77","\x70\x72\x69\x6E\x74","\x36\x33\x36\x70\x78","\x34\x36\x30\x70\x78","\x70\x72\x65","\x26\x6E\x62\x73\x70\x3B","\x3C\x62\x72\x3E","\x50\x6F\x70\x75\x70\x20\x57\x69\x6E\x64\x6F\x77","\x3C\x70\x72\x65\x3E","\x3C\x2F\x70\x72\x65","\x70\x61\x64\x64\x69\x6E\x67","\x32\x30\x70\x78","\x65\x72\x72\x6F\x72\x49\x6D\x61\x67\x65","\x76\x61\x6C\x69\x67\x6E","\x62\x6F\x74\x74\x6F\x6D","\x6D\x69\x64\x64\x6C\x65","\xA0","\x65\x72\x72\x6F\x72\x52\x65\x73\x6F\x75\x72\x63\x65","\x66\x6C\x6F\x61\x74\x3A\x72\x69\x67\x68\x74","\x63\x6C\x6F\x73\x65\x52\x65\x73\x6F\x75\x72\x63\x65","\x64\x72\x61\x67\x4F\x66\x66\x73\x65\x74","\x54\x4F\x4F\x4C\x54\x49\x50\x5F\x56\x45\x52\x54\x49\x43\x41\x4C\x5F\x4F\x46\x46\x53\x45\x54","\x61\x75\x74\x6F\x73\x63\x72\x6F\x6C\x6C","\x73\x65\x74\x47\x75\x69\x64\x65\x73\x45\x6E\x61\x62\x6C\x65\x64","\x68\x69\x67\x68\x6C\x69\x67\x68\x74\x44\x72\x6F\x70\x54\x61\x72\x67\x65\x74\x73","\x67\x65\x74\x44\x72\x6F\x70\x54\x61\x72\x67\x65\x74","\x67\x65\x74\x47\x72\x61\x70\x68\x46\x6F\x72\x45\x76\x65\x6E\x74","\x63\x72\x65\x61\x74\x65\x44\x72\x61\x67\x45\x6C\x65\x6D\x65\x6E\x74","\x63\x72\x65\x61\x74\x65\x50\x72\x65\x76\x69\x65\x77\x45\x6C\x65\x6D\x65\x6E\x74","\x65\x78\x61\x63\x74","\x66\x61\x73\x74\x65\x72","\x66\x61\x73\x74\x65\x73\x74","\x73\x76\x67","\x76\x6D\x6C","\x6D\x69\x78\x65\x64\x48\x74\x6D\x6C","\x70\x72\x65\x66\x65\x72\x48\x74\x6D\x6C","\x73\x74\x72\x69\x63\x74\x48\x74\x6D\x6C","\x68\x74\x74\x70\x3A\x2F\x2F\x77\x77\x77\x2E\x77\x33\x2E\x6F\x72\x67\x2F\x32\x30\x30\x30\x2F\x73\x76\x67","\x68\x74\x74\x70\x3A\x2F\x2F\x77\x77\x77\x2E\x77\x33\x2E\x6F\x72\x67\x2F\x31\x39\x39\x39\x2F\x78\x68\x74\x6D\x6C","\x68\x74\x74\x70\x3A\x2F\x2F\x77\x77\x77\x2E\x77\x33\x2E\x6F\x72\x67\x2F\x31\x39\x39\x39\x2F\x78\x6C\x69\x6E\x6B","\x67\x72\x61\x79","\x23\x30\x30\x46\x46\x30\x30","\x23\x46\x46\x30\x30\x30\x30","\x6D\x6F\x76\x65","\x64\x65\x66\x61\x75\x6C\x74","\x23\x30\x30\x30\x30\x46\x46","\x23\x30\x30\x39\x39\x46\x46","\x62\x6C\x61\x63\x6B","\x79\x65\x6C\x6C\x6F\x77","\x23\x30\x30\x46\x46\x46\x46","\x23\x30\x30\x33\x33\x46\x46","\x41\x72\x69\x61\x6C\x2C\x48\x65\x6C\x76\x65\x74\x69\x63\x61","\x70\x65\x72\x69\x6D\x65\x74\x65\x72","\x73\x6F\x75\x72\x63\x65\x50\x6F\x72\x74","\x74\x61\x72\x67\x65\x74\x50\x6F\x72\x74","\x70\x6F\x72\x74\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74","\x74\x65\x78\x74\x4F\x70\x61\x63\x69\x74\x79","\x6F\x72\x74\x68\x6F\x67\x6F\x6E\x61\x6C","\x65\x78\x69\x74\x58","\x65\x78\x69\x74\x59","\x65\x78\x69\x74\x50\x65\x72\x69\x6D\x65\x74\x65\x72","\x65\x6E\x74\x72\x79\x58","\x65\x6E\x74\x72\x79\x59","\x65\x6E\x74\x72\x79\x50\x65\x72\x69\x6D\x65\x74\x65\x72","\x72\x6F\x74\x61\x74\x69\x6F\x6E","\x66\x69\x6C\x6C\x43\x6F\x6C\x6F\x72","\x73\x77\x69\x6D\x6C\x61\x6E\x65\x46\x69\x6C\x6C\x43\x6F\x6C\x6F\x72","\x67\x72\x61\x64\x69\x65\x6E\x74\x43\x6F\x6C\x6F\x72","\x67\x72\x61\x64\x69\x65\x6E\x74\x44\x69\x72\x65\x63\x74\x69\x6F\x6E","\x73\x74\x72\x6F\x6B\x65\x43\x6F\x6C\x6F\x72","\x73\x65\x70\x61\x72\x61\x74\x6F\x72\x43\x6F\x6C\x6F\x72","\x73\x74\x72\x6F\x6B\x65\x57\x69\x64\x74\x68","\x61\x6C\x69\x67\x6E","\x6C\x61\x62\x65\x6C\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x76\x65\x72\x74\x69\x63\x61\x6C\x4C\x61\x62\x65\x6C\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x69\x6D\x61\x67\x65\x41\x73\x70\x65\x63\x74","\x69\x6D\x61\x67\x65\x41\x6C\x69\x67\x6E","\x69\x6D\x61\x67\x65\x56\x65\x72\x74\x69\x63\x61\x6C\x41\x6C\x69\x67\x6E","\x67\x6C\x61\x73\x73","\x69\x6D\x61\x67\x65","\x69\x6D\x61\x67\x65\x57\x69\x64\x74\x68","\x69\x6D\x61\x67\x65\x48\x65\x69\x67\x68\x74","\x69\x6D\x61\x67\x65\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64","\x69\x6D\x61\x67\x65\x42\x6F\x72\x64\x65\x72","\x66\x6C\x69\x70\x48","\x66\x6C\x69\x70\x56","\x6E\x6F\x4C\x61\x62\x65\x6C","\x6E\x6F\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x6C\x61\x62\x65\x6C\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x43\x6F\x6C\x6F\x72","\x6C\x61\x62\x65\x6C\x42\x6F\x72\x64\x65\x72\x43\x6F\x6C\x6F\x72","\x6C\x61\x62\x65\x6C\x50\x61\x64\x64\x69\x6E\x67","\x69\x6E\x64\x69\x63\x61\x74\x6F\x72\x53\x68\x61\x70\x65","\x69\x6E\x64\x69\x63\x61\x74\x6F\x72\x49\x6D\x61\x67\x65","\x69\x6E\x64\x69\x63\x61\x74\x6F\x72\x43\x6F\x6C\x6F\x72","\x69\x6E\x64\x69\x63\x61\x74\x6F\x72\x53\x74\x72\x6F\x6B\x65\x43\x6F\x6C\x6F\x72","\x69\x6E\x64\x69\x63\x61\x74\x6F\x72\x47\x72\x61\x64\x69\x65\x6E\x74\x43\x6F\x6C\x6F\x72","\x69\x6E\x64\x69\x63\x61\x74\x6F\x72\x53\x70\x61\x63\x69\x6E\x67","\x69\x6E\x64\x69\x63\x61\x74\x6F\x72\x57\x69\x64\x74\x68","\x69\x6E\x64\x69\x63\x61\x74\x6F\x72\x48\x65\x69\x67\x68\x74","\x69\x6E\x64\x69\x63\x61\x74\x6F\x72\x44\x69\x72\x65\x63\x74\x69\x6F\x6E","\x73\x68\x61\x64\x6F\x77","\x73\x65\x67\x6D\x65\x6E\x74","\x65\x6E\x64\x41\x72\x72\x6F\x77","\x73\x74\x61\x72\x74\x41\x72\x72\x6F\x77","\x65\x6E\x64\x53\x69\x7A\x65","\x73\x74\x61\x72\x74\x53\x69\x7A\x65","\x73\x77\x69\x6D\x6C\x61\x6E\x65\x4C\x69\x6E\x65","\x65\x6E\x64\x46\x69\x6C\x6C","\x73\x74\x61\x72\x74\x46\x69\x6C\x6C","\x64\x61\x73\x68\x65\x64","\x64\x61\x73\x68\x50\x61\x74\x74\x65\x72\x6E","\x72\x6F\x75\x6E\x64\x65\x64","\x63\x75\x72\x76\x65\x64","\x61\x72\x63\x53\x69\x7A\x65","\x73\x6D\x6F\x6F\x74\x68","\x73\x6F\x75\x72\x63\x65\x50\x65\x72\x69\x6D\x65\x74\x65\x72\x53\x70\x61\x63\x69\x6E\x67","\x74\x61\x72\x67\x65\x74\x50\x65\x72\x69\x6D\x65\x74\x65\x72\x53\x70\x61\x63\x69\x6E\x67","\x70\x65\x72\x69\x6D\x65\x74\x65\x72\x53\x70\x61\x63\x69\x6E\x67","\x73\x70\x61\x63\x69\x6E\x67","\x73\x70\x61\x63\x69\x6E\x67\x54\x6F\x70","\x73\x70\x61\x63\x69\x6E\x67\x4C\x65\x66\x74","\x73\x70\x61\x63\x69\x6E\x67\x42\x6F\x74\x74\x6F\x6D","\x73\x70\x61\x63\x69\x6E\x67\x52\x69\x67\x68\x74","\x68\x6F\x72\x69\x7A\x6F\x6E\x74\x61\x6C","\x64\x69\x72\x65\x63\x74\x69\x6F\x6E","\x65\x6C\x62\x6F\x77","\x66\x6F\x6E\x74\x43\x6F\x6C\x6F\x72","\x66\x6F\x6E\x74\x53\x74\x79\x6C\x65","\x61\x75\x74\x6F\x73\x69\x7A\x65","\x66\x6F\x6C\x64\x61\x62\x6C\x65","\x65\x64\x69\x74\x61\x62\x6C\x65","\x62\x65\x6E\x64\x61\x62\x6C\x65","\x6D\x6F\x76\x61\x62\x6C\x65","\x72\x65\x73\x69\x7A\x61\x62\x6C\x65","\x63\x6C\x6F\x6E\x65\x61\x62\x6C\x65","\x64\x65\x6C\x65\x74\x61\x62\x6C\x65","\x65\x64\x67\x65\x53\x74\x79\x6C\x65","\x6C\x6F\x6F\x70\x53\x74\x79\x6C\x65","\x72\x6F\x75\x74\x69\x6E\x67\x43\x65\x6E\x74\x65\x72\x58","\x72\x6F\x75\x74\x69\x6E\x67\x43\x65\x6E\x74\x65\x72\x59","\x72\x65\x63\x74\x61\x6E\x67\x6C\x65","\x65\x6C\x6C\x69\x70\x73\x65","\x64\x6F\x75\x62\x6C\x65\x45\x6C\x6C\x69\x70\x73\x65","\x72\x68\x6F\x6D\x62\x75\x73","\x6C\x69\x6E\x65","\x61\x72\x72\x6F\x77","\x6C\x61\x62\x65\x6C","\x63\x79\x6C\x69\x6E\x64\x65\x72","\x73\x77\x69\x6D\x6C\x61\x6E\x65","\x63\x6F\x6E\x6E\x65\x63\x74\x6F\x72","\x61\x63\x74\x6F\x72","\x63\x6C\x6F\x75\x64","\x74\x72\x69\x61\x6E\x67\x6C\x65","\x68\x65\x78\x61\x67\x6F\x6E","\x63\x6C\x61\x73\x73\x69\x63","\x62\x6C\x6F\x63\x6B","\x6F\x76\x61\x6C","\x64\x69\x61\x6D\x6F\x6E\x64","\x64\x69\x61\x6D\x6F\x6E\x64\x54\x68\x69\x6E","\x63\x65\x6E\x74\x65\x72","\x72\x69\x67\x68\x74","\x6E\x6F\x72\x74\x68","\x73\x6F\x75\x74\x68","\x65\x61\x73\x74","\x77\x65\x73\x74","\x76\x65\x72\x74\x69\x63\x61\x6C","\x65\x6C\x62\x6F\x77\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x65\x6E\x74\x69\x74\x79\x52\x65\x6C\x61\x74\x69\x6F\x6E\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x6C\x6F\x6F\x70\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x73\x69\x64\x65\x54\x6F\x53\x69\x64\x65\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x74\x6F\x70\x54\x6F\x42\x6F\x74\x74\x6F\x6D\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x6F\x72\x74\x68\x6F\x67\x6F\x6E\x61\x6C\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x73\x65\x67\x6D\x65\x6E\x74\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x65\x6C\x6C\x69\x70\x73\x65\x50\x65\x72\x69\x6D\x65\x74\x65\x72","\x72\x65\x63\x74\x61\x6E\x67\x6C\x65\x50\x65\x72\x69\x6D\x65\x74\x65\x72","\x72\x68\x6F\x6D\x62\x75\x73\x50\x65\x72\x69\x6D\x65\x74\x65\x72","\x74\x72\x69\x61\x6E\x67\x6C\x65\x50\x65\x72\x69\x6D\x65\x74\x65\x72","\x70\x72\x6F\x70\x65\x72\x74\x69\x65\x73","\x63\x6F\x6E\x73\x75\x6D\x65\x64","\x67\x65\x74\x4E\x61\x6D\x65","\x67\x65\x74\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73","\x67\x65\x74\x50\x72\x6F\x70\x65\x72\x74\x79","\x69\x73\x43\x6F\x6E\x73\x75\x6D\x65\x64","\x63\x6F\x6E\x73\x75\x6D\x65","\x65\x76\x74","\x73\x74\x61\x74\x65","\x67\x72\x61\x70\x68\x58","\x67\x72\x61\x70\x68\x59","\x67\x65\x74\x45\x76\x65\x6E\x74","\x67\x65\x74\x53\x6F\x75\x72\x63\x65","\x69\x73\x53\x6F\x75\x72\x63\x65","\x67\x65\x74\x58","\x67\x65\x74\x43\x6C\x69\x65\x6E\x74\x58","\x67\x65\x74\x59","\x67\x65\x74\x43\x6C\x69\x65\x6E\x74\x59","\x67\x65\x74\x47\x72\x61\x70\x68\x58","\x67\x65\x74\x47\x72\x61\x70\x68\x59","\x67\x65\x74\x43\x65\x6C\x6C","\x69\x73\x50\x6F\x70\x75\x70\x54\x72\x69\x67\x67\x65\x72","\x70\x72\x65\x76\x65\x6E\x74\x44\x65\x66\x61\x75\x6C\x74","\x72\x65\x74\x75\x72\x6E\x56\x61\x6C\x75\x65","\x73\x65\x74\x45\x76\x65\x6E\x74\x53\x6F\x75\x72\x63\x65","\x65\x76\x65\x6E\x74\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x65\x76\x65\x6E\x74\x73\x45\x6E\x61\x62\x6C\x65\x64","\x65\x76\x65\x6E\x74\x53\x6F\x75\x72\x63\x65","\x67\x65\x74\x45\x76\x65\x6E\x74\x53\x6F\x75\x72\x63\x65","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72","\x66\x69\x72\x65\x45\x76\x65\x6E\x74","\x6F\x6E","\x66","\x72\x65\x6D\x6F\x76\x65\x45\x76\x65\x6E\x74\x4C\x69\x73\x74\x65\x6E\x65\x72","\x64\x65\x74\x61\x63\x68\x45\x76\x65\x6E\x74","\x6D\x6F\x75\x73\x65\x64\x6F\x77\x6E","\x6D\x6F\x75\x73\x65\x6D\x6F\x76\x65","\x6D\x6F\x75\x73\x65\x75\x70","\x49\x53\x5F\x54\x4F\x55\x43\x48","\x74\x6F\x75\x63\x68\x73\x74\x61\x72\x74","\x74\x6F\x75\x63\x68\x6D\x6F\x76\x65","\x74\x6F\x75\x63\x68\x65\x6E\x64","\x66\x69\x72\x65\x4D\x6F\x75\x73\x65\x45\x76\x65\x6E\x74","\x61\x64\x64\x47\x65\x73\x74\x75\x72\x65\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x64\x62\x6C\x63\x6C\x69\x63\x6B","\x64\x62\x6C\x43\x6C\x69\x63\x6B","\x72\x65\x6C\x65\x61\x73\x65","\x65\x76\x65\x6E\x74","\x64\x65\x74\x61\x69\x6C","\x77\x68\x65\x65\x6C\x44\x65\x6C\x74\x61","\x6D\x6F\x75\x73\x65\x77\x68\x65\x65\x6C","\x44\x4F\x4D\x4D\x6F\x75\x73\x65\x53\x63\x72\x6F\x6C\x6C","\x63\x6F\x6E\x74\x65\x78\x74\x6D\x65\x6E\x75","\x6F\x6E\x63\x6F\x6E\x74\x65\x78\x74\x6D\x65\x6E\x75","\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x3B","\x73\x72\x63\x45\x6C\x65\x6D\x65\x6E\x74","\x74\x61\x72\x67\x65\x74","\x69\x73\x52\x69\x67\x68\x74\x4D\x6F\x75\x73\x65\x42\x75\x74\x74\x6F\x6E","\x69\x73\x53\x68\x69\x66\x74\x44\x6F\x77\x6E","\x69\x73\x43\x6F\x6E\x74\x72\x6F\x6C\x44\x6F\x77\x6E","\x73\x68\x69\x66\x74\x4B\x65\x79","\x61\x6C\x74\x4B\x65\x79","\x63\x74\x72\x6C\x4B\x65\x79","\x6D\x65\x74\x61\x4B\x65\x79","\x74\x6F\x75\x63\x68\x65\x73","\x63\x68\x61\x6E\x67\x65\x64\x54\x6F\x75\x63\x68\x65\x73","\x63\x6C\x69\x65\x6E\x74\x58","\x67\x65\x74\x4D\x61\x69\x6E\x45\x76\x65\x6E\x74","\x63\x6C\x69\x65\x6E\x74\x59","\x73\x74\x6F\x70\x50\x72\x6F\x70\x61\x67\x61\x74\x69\x6F\x6E","\x63\x61\x6E\x63\x65\x6C\x42\x75\x62\x62\x6C\x65","\x6D\x6F\x75\x73\x65\x44\x6F\x77\x6E","\x6D\x6F\x75\x73\x65\x4D\x6F\x76\x65","\x6D\x6F\x75\x73\x65\x55\x70","\x61\x63\x74\x69\x76\x61\x74\x65","\x72\x65\x73\x69\x7A\x65\x53\x74\x61\x72\x74","\x72\x65\x73\x69\x7A\x65\x45\x6E\x64","\x6D\x6F\x76\x65\x53\x74\x61\x72\x74","\x6D\x6F\x76\x65\x45\x6E\x64","\x70\x61\x6E\x53\x74\x61\x72\x74","\x70\x61\x6E","\x70\x61\x6E\x45\x6E\x64","\x6D\x69\x6E\x69\x6D\x69\x7A\x65","\x6E\x6F\x72\x6D\x61\x6C\x69\x7A\x65","\x6D\x61\x78\x69\x6D\x69\x7A\x65","\x68\x69\x64\x65","\x72\x65\x66\x72\x65\x73\x68","\x73\x69\x7A\x65","\x73\x65\x6C\x65\x63\x74","\x66\x69\x72\x65\x64","\x72\x65\x63\x65\x69\x76\x65","\x63\x6F\x6E\x6E\x65\x63\x74","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x73\x75\x73\x70\x65\x6E\x64","\x72\x65\x73\x75\x6D\x65","\x6D\x61\x72\x6B","\x73\x65\x73\x73\x69\x6F\x6E","\x72\x6F\x6F\x74","\x70\x6F\x73\x74","\x73\x61\x76\x65","\x62\x65\x66\x6F\x72\x65\x41\x64\x64\x56\x65\x72\x74\x65\x78","\x61\x64\x64\x56\x65\x72\x74\x65\x78","\x61\x66\x74\x65\x72\x41\x64\x64\x56\x65\x72\x74\x65\x78","\x64\x6F\x6E\x65","\x65\x78\x65\x63\x75\x74\x65\x64","\x73\x74\x61\x72\x74\x45\x64\x69\x74","\x65\x6E\x64\x45\x64\x69\x74","\x62\x65\x66\x6F\x72\x65\x55\x6E\x64\x6F","\x75\x6E\x64\x6F","\x72\x65\x64\x6F","\x63\x68\x61\x6E\x67\x65","\x6E\x6F\x74\x69\x66\x79","\x6C\x61\x79\x6F\x75\x74\x43\x65\x6C\x6C\x73","\x73\x63\x61\x6C\x65\x41\x6E\x64\x54\x72\x61\x6E\x73\x6C\x61\x74\x65","\x75\x70","\x64\x6F\x77\x6E","\x61\x64\x64\x43\x65\x6C\x6C\x73","\x63\x65\x6C\x6C\x73\x41\x64\x64\x65\x64","\x6D\x6F\x76\x65\x43\x65\x6C\x6C\x73","\x63\x65\x6C\x6C\x73\x4D\x6F\x76\x65\x64","\x72\x65\x73\x69\x7A\x65\x43\x65\x6C\x6C\x73","\x63\x65\x6C\x6C\x73\x52\x65\x73\x69\x7A\x65\x64","\x74\x6F\x67\x67\x6C\x65\x43\x65\x6C\x6C\x73","\x63\x65\x6C\x6C\x73\x54\x6F\x67\x67\x6C\x65\x64","\x6F\x72\x64\x65\x72\x43\x65\x6C\x6C\x73","\x63\x65\x6C\x6C\x73\x4F\x72\x64\x65\x72\x65\x64","\x72\x65\x6D\x6F\x76\x65\x43\x65\x6C\x6C\x73","\x63\x65\x6C\x6C\x73\x52\x65\x6D\x6F\x76\x65\x64","\x67\x72\x6F\x75\x70\x43\x65\x6C\x6C\x73","\x75\x6E\x67\x72\x6F\x75\x70\x43\x65\x6C\x6C\x73","\x72\x65\x6D\x6F\x76\x65\x43\x65\x6C\x6C\x73\x46\x72\x6F\x6D\x50\x61\x72\x65\x6E\x74","\x66\x6F\x6C\x64\x43\x65\x6C\x6C\x73","\x63\x65\x6C\x6C\x73\x46\x6F\x6C\x64\x65\x64","\x61\x6C\x69\x67\x6E\x43\x65\x6C\x6C\x73","\x6C\x61\x62\x65\x6C\x43\x68\x61\x6E\x67\x65\x64","\x63\x6F\x6E\x6E\x65\x63\x74\x43\x65\x6C\x6C","\x63\x65\x6C\x6C\x43\x6F\x6E\x6E\x65\x63\x74\x65\x64","\x73\x70\x6C\x69\x74\x45\x64\x67\x65","\x66\x6C\x69\x70\x45\x64\x67\x65","\x73\x74\x61\x72\x74\x45\x64\x69\x74\x69\x6E\x67","\x61\x64\x64\x4F\x76\x65\x72\x6C\x61\x79","\x72\x65\x6D\x6F\x76\x65\x4F\x76\x65\x72\x6C\x61\x79","\x75\x70\x64\x61\x74\x65\x43\x65\x6C\x6C\x53\x69\x7A\x65","\x65\x73\x63\x61\x70\x65","\x64\x6F\x75\x62\x6C\x65\x43\x6C\x69\x63\x6B","\x73\x74\x61\x72\x74","\x72\x65\x73\x65\x74","\x75\x72\x6C","\x70\x61\x72\x61\x6D\x73","\x6D\x65\x74\x68\x6F\x64","\x50\x4F\x53\x54","\x75\x73\x65\x72\x6E\x61\x6D\x65","\x70\x61\x73\x73\x77\x6F\x72\x64","\x62\x69\x6E\x61\x72\x79","\x72\x65\x71\x75\x65\x73\x74","\x69\x73\x42\x69\x6E\x61\x72\x79","\x73\x65\x74\x42\x69\x6E\x61\x72\x79","\x72\x65\x73\x70\x6F\x6E\x73\x65\x54\x65\x78\x74","\x67\x65\x74\x44\x6F\x63\x75\x6D\x65\x6E\x74\x45\x6C\x65\x6D\x65\x6E\x74","\x67\x65\x74\x58\x6D\x6C","\x72\x65\x73\x70\x6F\x6E\x73\x65\x58\x4D\x4C","\x70\x61\x72\x73\x65\x58\x6D\x6C","\x67\x65\x74\x53\x74\x61\x74\x75\x73","\x73\x74\x61\x74\x75\x73","\x58\x4D\x4C\x48\x74\x74\x70\x52\x65\x71\x75\x65\x73\x74","\x6F\x76\x65\x72\x72\x69\x64\x65\x4D\x69\x6D\x65\x54\x79\x70\x65","\x74\x65\x78\x74\x2F\x70\x6C\x61\x69\x6E\x3B\x20\x63\x68\x61\x72\x73\x65\x74\x3D\x78\x2D\x75\x73\x65\x72\x2D\x64\x65\x66\x69\x6E\x65\x64","\x4D\x69\x63\x72\x6F\x73\x6F\x66\x74\x2E\x58\x4D\x4C\x48\x54\x54\x50","\x6F\x6E\x72\x65\x61\x64\x79\x73\x74\x61\x74\x65\x63\x68\x61\x61\x6E\x67\x65","\x62\x69\x6E\x64","\x73\x65\x74\x52\x65\x71\x75\x65\x73\x74\x48\x65\x61\x64\x65\x72\x73","\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65","\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x2F\x78\x2D\x77\x77\x77\x2D\x66\x6F\x72\x6D\x2D\x75\x72\x6C\x65\x6E\x63\x6F\x64\x65\x64","\x73\x65\x74\x52\x65\x71\x75\x65\x73\x74\x48\x65\x61\x64\x65\x72","\x6F\x6E\x62\x65\x66\x6F\x72\x65\x75\x6E\x6C\x6F\x61\x64","\x66\x6F\x72\x6D","\x61\x63\x74\x69\x6F\x6E","\x26","\x73\x75\x62\x6D\x69\x74","\x63\x65\x6C\x6C\x73","\x69\x6E\x73\x65\x72\x74\x43\x6F\x75\x6E\x74","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73","\x67\x65\x74\x45\x78\x70\x6F\x72\x74\x61\x62\x6C\x65\x43\x65\x6C\x6C\x73","\x63\x6C\x6F\x6E\x65\x43\x65\x6C\x6C\x73","\x67\x65\x74\x49\x6D\x70\x6F\x72\x74\x61\x62\x6C\x65\x43\x65\x6C\x6C\x73","\x53\x54\x45\x50\x53\x49\x5A\x45","\x67\x65\x74\x44\x65\x66\x61\x75\x6C\x74\x50\x61\x72\x65\x6E\x74","\x69\x6D\x70\x6F\x72\x74\x43\x65\x6C\x6C\x73","\x73\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73","\x63\x6F\x6E\x74\x65\x6E\x74","\x69\x6E\x73\x74\x61\x6C\x6C\x4D\x61\x78\x69\x6D\x69\x7A\x65\x48\x61\x6E\x64\x6C\x65\x72","\x69\x6E\x73\x74\x61\x6C\x6C\x4D\x69\x6E\x69\x6D\x69\x7A\x65\x48\x61\x6E\x64\x6C\x65\x72","\x69\x6E\x73\x74\x61\x6C\x6C\x43\x6C\x6F\x73\x65\x48\x61\x6E\x64\x6C\x65\x72","\x73\x65\x74\x4D\x69\x6E\x69\x6D\x69\x7A\x61\x62\x6C\x65","\x73\x65\x74\x54\x69\x74\x6C\x65","\x69\x6E\x73\x74\x61\x6C\x6C\x4D\x6F\x76\x65\x48\x61\x6E\x64\x6C\x65\x72","\x72\x65\x70\x6C\x61\x63\x65\x43\x68\x69\x6C\x64","\x63\x6C\x6F\x73\x65\x49\x6D\x61\x67\x65","\x2F\x63\x6C\x6F\x73\x65\x2E\x67\x69\x66","\x6D\x69\x6E\x69\x6D\x69\x7A\x65\x49\x6D\x61\x67\x65","\x2F\x6D\x69\x6E\x69\x6D\x69\x7A\x65\x2E\x67\x69\x66","\x6E\x6F\x72\x6D\x61\x6C\x69\x7A\x65\x49\x6D\x61\x67\x65","\x2F\x6E\x6F\x72\x6D\x61\x6C\x69\x7A\x65\x2E\x67\x69\x66","\x6D\x61\x78\x69\x6D\x69\x7A\x65\x49\x6D\x61\x67\x65","\x2F\x6D\x61\x78\x69\x6D\x69\x7A\x65\x2E\x67\x69\x66","\x72\x65\x73\x69\x7A\x65\x49\x6D\x61\x67\x65","\x2F\x72\x65\x73\x69\x7A\x65\x2E\x67\x69\x66","\x6D\x69\x6E\x69\x6D\x75\x6D\x53\x69\x7A\x65","\x74\x69\x74\x6C\x65","\x6D\x78\x57\x69\x6E\x64\x6F\x77","\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65","\x54\x69\x74\x6C\x65","\x50\x61\x6E\x65","\x63\x6F\x6E\x74\x65\x6E\x74\x57\x72\x61\x70\x70\x65\x72","\x61\x63\x74\x69\x76\x65\x57\x69\x6E\x64\x6F\x77","\x7A\x49\x6E\x64\x65\x78","\x70\x72\x65\x76\x69\x6F\x75\x73\x57\x69\x6E\x64\x6F\x77","\x66\x69\x74","\x69\x73\x52\x65\x73\x69\x7A\x61\x62\x6C\x65","\x32\x70\x78","\x6E\x77\x2D\x72\x65\x73\x69\x7A\x65","\x73\x65\x74\x53\x69\x7A\x65","\x72\x65\x6D\x6F\x76\x65\x47\x65\x73\x74\x75\x72\x65\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x67\x65\x74\x4D\x69\x6E\x69\x6D\x75\x6D\x53\x69\x7A\x65","\x4D\x69\x6E\x69\x6D\x69\x7A\x65","\x6D\x61\x72\x67\x69\x6E\x52\x69\x67\x68\x74","\x31\x70\x78","\x4E\x6F\x72\x6D\x61\x6C\x69\x7A\x65","\x4D\x61\x78\x69\x6D\x69\x7A\x65","\x6D\x61\x72\x67\x69\x6E\x4C\x65\x66\x74","\x30\x70\x78","\x73\x65\x74\x4C\x6F\x63\x61\x74\x69\x6F\x6E","\x63\x6C\x6F\x73\x65\x49\x6D\x67","\x43\x6C\x6F\x73\x65","\x69\x6E\x73\x65\x72\x74\x42\x65\x66\x6F\x72\x65","\x73\x65\x74\x49\x6D\x61\x67\x65","\x34\x70\x78","\x6D\x61\x72\x67\x69\x6E\x54\x6F\x70","\x2D\x32\x70\x78","\x67\x65\x74\x54\x61\x62\x6C\x65","\x61\x64\x64\x42\x75\x74\x74\x6F\x6E\x73","\x6F\x6B","\x4F\x4B","\x63\x61\x6E\x63\x65\x6C","\x43\x61\x6E\x63\x65\x6C","\x61\x64\x64\x54\x65\x78\x74","\x69\x6E\x70\x75\x74","\x74\x65\x78\x74","\x61\x64\x64\x46\x69\x65\x6C\x64","\x61\x64\x64\x43\x68\x65\x63\x6B\x62\x6F\x78","\x63\x68\x65\x63\x6B\x62\x6F\x78","\x63\x68\x65\x63\x6B\x65\x64","\x61\x64\x64\x54\x65\x78\x74\x61\x72\x65\x61","\x72\x6F\x77\x73","\x61\x64\x64\x43\x6F\x6D\x62\x6F","\x6D\x75\x6C\x74\x69\x70\x6C\x65","\x61\x64\x64\x4F\x70\x74\x69\x6F\x6E","\x6F\x70\x74\x69\x6F\x6E","\x73\x65\x6C\x65\x63\x74\x65\x64","\x72\x65\x73\x69\x7A\x65\x57\x69\x64\x74\x68","\x72\x65\x73\x69\x7A\x65\x48\x65\x69\x67\x68\x74","\x68\x61\x6E\x64\x6C\x69\x6E\x67\x52\x65\x73\x69\x7A\x65","\x67\x65\x74\x44\x6F\x63\x75\x6D\x65\x6E\x74\x57\x69\x64\x74\x68","\x67\x65\x74\x44\x6F\x63\x75\x6D\x65\x6E\x74\x48\x65\x69\x67\x68\x74","\x65\x6C\x65\x6D\x65\x6E\x74","\x64\x72\x6F\x70\x48\x61\x6E\x64\x6C\x65\x72","\x64\x72\x61\x67\x45\x6C\x65\x6D\x65\x6E\x74","\x70\x72\x65\x76\x69\x65\x77\x45\x6C\x65\x6D\x65\x6E\x74","\x65\x6E\x61\x62\x6C\x65\x64","\x63\x75\x72\x72\x65\x6E\x74\x47\x72\x61\x70\x68","\x63\x75\x72\x72\x65\x6E\x74\x44\x72\x6F\x70\x54\x61\x72\x67\x65\x74","\x63\x75\x72\x72\x65\x6E\x74\x50\x6F\x69\x6E\x74","\x63\x75\x72\x72\x65\x6E\x74\x47\x75\x69\x64\x65","\x63\x75\x72\x72\x65\x6E\x74\x48\x69\x67\x68\x6C\x69\x67\x68\x74","\x67\x75\x69\x64\x65\x73\x45\x6E\x61\x62\x6C\x65\x64","\x67\x72\x69\x64\x45\x6E\x61\x62\x6C\x65\x64","\x64\x72\x61\x67\x45\x6C\x65\x6D\x65\x6E\x74\x5A\x49\x6E\x64\x65\x78","\x64\x72\x61\x67\x45\x6C\x65\x6D\x65\x6E\x74\x4F\x70\x61\x63\x69\x74\x79","\x69\x73\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x47\x75\x69\x64\x65\x73\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x47\x72\x69\x64\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x47\x72\x69\x64\x45\x6E\x61\x62\x6C\x65\x64","\x67\x65\x74\x43\x65\x6C\x6C\x41\x74","\x6D\x6F\x75\x73\x65\x4D\x6F\x76\x65\x48\x61\x6E\x64\x6C\x65\x72","\x73\x74\x61\x72\x74\x44\x72\x61\x67","\x6D\x6F\x75\x73\x65\x55\x70\x48\x61\x6E\x64\x6C\x65\x72","\x73\x74\x6F\x70\x44\x72\x61\x67","\x67\x72\x61\x70\x68\x43\x6F\x6E\x74\x61\x69\x6E\x73\x45\x76\x65\x6E\x74","\x64\x72\x61\x67\x45\x78\x69\x74","\x64\x72\x61\x67\x45\x6E\x74\x65\x72","\x64\x72\x61\x67\x4F\x76\x65\x72","\x64\x72\x6F\x70","\x69\x73\x4D\x6F\x75\x73\x65\x44\x6F\x77\x6E","\x67\x65\x74\x47\x75\x69\x64\x65\x53\x74\x61\x74\x65\x73","\x67\x72\x61\x70\x68\x48\x61\x6E\x64\x6C\x65\x72","\x61\x75\x74\x6F\x53\x63\x72\x6F\x6C\x6C","\x61\x75\x74\x6F\x45\x78\x74\x65\x6E\x64","\x73\x63\x72\x6F\x6C\x6C\x50\x6F\x69\x6E\x74\x54\x6F\x56\x69\x73\x69\x62\x6C\x65","\x69\x73\x44\x72\x6F\x70\x45\x6E\x61\x62\x6C\x65\x64","\x68\x69\x67\x68\x6C\x69\x67\x68\x74","\x33","\x69\x73\x47\x72\x69\x64\x45\x6E\x61\x62\x6C\x65\x64\x45\x76\x65\x6E\x74","\x69\x73\x45\x6E\x61\x62\x6C\x65\x64\x46\x6F\x72\x45\x76\x65\x6E\x74","\x67\x72\x69\x64\x53\x69\x7A\x65","\x73\x6E\x61\x70","\x70\x72\x65\x76\x69\x65\x77\x4F\x66\x66\x73\x65\x74","\x6E\x6F\x52\x65\x73\x65\x74","\x75\x70\x64\x61\x74\x65\x44\x65\x66\x61\x75\x6C\x74\x4D\x6F\x64\x65","\x61\x64\x64\x49\x74\x65\x6D","\x6D\x78\x54\x6F\x6F\x6C\x62\x61\x72\x4D\x6F\x64\x65","\x6D\x78\x54\x6F\x6F\x6C\x62\x61\x72\x49\x74\x65\x6D","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x43\x6F\x6C\x6F\x72","\x6D\x65\x6E\x75","\x63\x75\x72\x72\x65\x6E\x74\x49\x6D\x67","\x69\x73\x4D\x65\x6E\x75\x53\x68\x6F\x77\x69\x6E\x67","\x68\x69\x64\x65\x4D\x65\x6E\x75","\x66\x61\x63\x74\x6F\x72\x79\x4D\x65\x74\x68\x6F\x64","\x53\x65\x6C\x65\x63\x74\x65\x64","\x6D\x6F\x75\x73\x65\x6F\x75\x74","\x6D\x78\x54\x6F\x6F\x6C\x62\x61\x72\x43\x6F\x6D\x62\x6F\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x6D\x78\x54\x6F\x6F\x6C\x62\x61\x72\x43\x6F\x6D\x62\x6F","\x61\x64\x64\x41\x63\x74\x69\x6F\x6E\x43\x6F\x6D\x62\x6F","\x73\x65\x6C\x65\x63\x74\x65\x64\x49\x6E\x64\x65\x78","\x6F\x70\x74\x69\x6F\x6E\x73","\x66\x75\x6E\x63\x74","\x61\x64\x64\x53\x77\x69\x74\x63\x68\x4D\x6F\x64\x65","\x69\x6E\x69\x74\x69\x61\x6C\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65","\x61\x6C\x74\x49\x63\x6F\x6E","\x73\x65\x6C\x65\x63\x74\x65\x64\x4D\x6F\x64\x65","\x64\x65\x66\x61\x75\x6C\x74\x4D\x6F\x64\x65","\x73\x65\x6C\x65\x63\x74\x4D\x6F\x64\x65","\x61\x64\x64\x4D\x6F\x64\x65","\x64\x65\x66\x61\x75\x6C\x74\x46\x75\x6E\x63\x74\x69\x6F\x6E","\x72\x65\x73\x65\x74\x4D\x6F\x64\x65","\x61\x64\x64\x53\x65\x70\x61\x72\x61\x74\x6F\x72","\x61\x64\x64\x42\x72\x65\x61\x6B","\x61\x64\x64\x4C\x69\x6E\x65","\x68\x72","\x36\x70\x78","\x75\x72\x6C\x49\x6E\x69\x74","\x75\x72\x6C\x50\x6F\x6C\x6C","\x75\x72\x6C\x4E\x6F\x74\x69\x66\x79","\x63\x6F\x64\x65\x63","\x6C\x6F\x6F\x6B\x75\x70","\x65\x64\x69\x74","\x63\x6F\x6E\x6E\x65\x63\x74\x65\x64","\x73\x75\x73\x70\x65\x6E\x64\x65\x64","\x3C\x65\x64\x69\x74\x3E","\x63\x68\x61\x6E\x67\x65\x73","\x75\x6E\x64\x6F\x6E\x65","\x65\x6E\x63\x6F\x64\x65\x43\x68\x61\x6E\x67\x65\x73","\x3C\x2F\x65\x64\x69\x74\x3E","\x6C\x69\x6E\x65\x66\x65\x65\x64","\x65\x73\x63\x61\x70\x65\x50\x6F\x73\x74\x44\x61\x74\x61","\x73\x69\x67\x6E\x69\x66\x69\x63\x61\x6E\x74\x52\x65\x6D\x6F\x74\x65\x43\x68\x61\x6E\x67\x65\x73","\x73\x65\x6E\x74","\x72\x65\x63\x65\x69\x76\x65\x64","\x70\x6F\x6C\x6C\x69\x6E\x67","\x70\x6F\x6C\x6C","\x73\x74\x6F\x70","\x72\x65\x61\x73\x6F\x6E","\x6D\x78\x53\x65\x73\x73\x69\x6F\x6E\x2E\x6E\x6F\x74\x69\x66\x79\x3A\x20","\x20\x78\x6D\x6C\x3D","\x3C\x6D\x65\x73\x73\x61\x67\x65\x3E\x3C\x64\x65\x6C\x74\x61\x3E","\x3C\x2F\x64\x65\x6C\x74\x61\x3E\x3C\x2F\x6D\x65\x73\x73\x61\x67\x65\x3E","\x78\x6D\x6C\x3D","\x69\x73\x56\x61\x6C\x69\x64\x52\x65\x73\x70\x6F\x6E\x73\x65","\x49\x6E\x76\x61\x6C\x69\x64\x20\x72\x65\x73\x70\x6F\x6E\x73\x65\x3A\x20","\x52\x65\x73\x70\x6F\x6E\x73\x65\x20\x6E\x6F\x74\x20\x72\x65\x61\x64\x79","\x54\x72\x61\x6E\x73\x6D\x69\x73\x73\x69\x6F\x6E\x20\x65\x72\x72\x6F\x72","\x3C\x3F\x70\x68\x70","\x6E\x61\x6D\x65\x73\x70\x61\x63\x65","\x70\x72\x65\x66\x69\x78","\x70\x72\x6F\x63\x65\x73\x73\x53\x74\x61\x74\x65","\x64\x65\x6C\x74\x61","\x70\x72\x6F\x63\x65\x73\x73\x44\x65\x6C\x74\x61","\x64\x65\x63\x6F\x64\x65","\x70\x72\x6F\x63\x65\x73\x73\x45\x64\x69\x74","\x64\x65\x63\x6F\x64\x65\x43\x68\x61\x6E\x67\x65\x73","\x63\x72\x65\x61\x74\x65\x55\x6E\x64\x6F\x61\x62\x6C\x65\x45\x64\x69\x74","\x73\x6F\x75\x72\x63\x65","\x64\x65\x63\x6F\x64\x65\x43\x68\x61\x6E\x67\x65","\x6D\x78\x52\x6F\x6F\x74\x43\x68\x61\x6E\x67\x65","\x6D\x78\x43\x68\x69\x6C\x64\x43\x68\x61\x6E\x67\x65","\x70\x61\x72\x65\x6E\x74","\x63\x65\x6C\x6C\x52\x65\x6D\x6F\x76\x65\x64","\x67\x65\x74\x49\x64","\x70\x75\x74\x4F\x62\x6A\x65\x63\x74","\x73\x69\x67\x6E\x69\x66\x69\x63\x61\x6E\x74","\x72\x65\x64\x6F\x6E\x65","\x69\x73\x45\x6D\x70\x74\x79","\x69\x73\x53\x69\x67\x6E\x69\x66\x69\x63\x61\x6E\x74","\x64\x69\x65","\x68\x69\x73\x74\x6F\x72\x79","\x69\x6E\x64\x65\x78\x4F\x66\x4E\x65\x78\x74\x41\x64\x64","\x63\x61\x6E\x55\x6E\x64\x6F","\x63\x61\x6E\x52\x65\x64\x6F","\x75\x6E\x64\x6F\x61\x62\x6C\x65\x45\x64\x69\x74\x48\x61\x70\x70\x65\x6E\x65\x64","\x73\x68\x69\x66\x74","\x64\x61\x74\x61\x3A\x69\x6D\x61\x67\x65","\x69\x73\x52\x65\x6C\x61\x74\x69\x76\x65\x55\x72\x6C","\x70\x72\x6F\x74\x6F\x63\x6F\x6C","\x2F\x2F","\x68\x6F\x73\x74","\x70\x61\x74\x68\x6E\x61\x6D\x65","\x6C\x61\x73\x74\x49\x6E\x64\x65\x78\x4F\x66","\x74\x68\x72\x65\x61\x64","\x61\x63\x74\x69\x76\x65","\x64\x79","\x64\x78","\x74\x30\x79","\x74\x30\x78","\x74\x64\x79","\x74\x64\x78","\x73\x63\x72\x6F\x6C\x6C\x62\x61\x72\x73","\x6D\x6F\x75\x73\x65\x4C\x69\x73\x74\x65\x6E\x65\x72","\x61\x64\x64\x4D\x6F\x75\x73\x65\x4C\x69\x73\x74\x65\x6E\x65\x72","\x68\x61\x73\x53\x63\x72\x6F\x6C\x6C\x62\x61\x72\x73","\x70\x61\x6E\x47\x72\x61\x70\x68","\x70\x61\x6E\x44\x78","\x70\x61\x6E\x44\x79","\x67\x65\x74\x44\x78","\x67\x65\x74\x44\x79","\x64\x65\x6C\x61\x79","\x73\x65\x74\x49\x6E\x74\x65\x72\x76\x61\x6C","\x69\x73\x41\x63\x74\x69\x76\x65","\x70\x61\x6E\x54\x6F","\x68\x61\x6E\x64\x6C\x65\x4D\x6F\x75\x73\x65\x4F\x75\x74","\x64\x61\x6D\x70\x65\x72","\x63\x6C\x65\x61\x72\x49\x6E\x74\x65\x72\x76\x61\x6C","\x73\x65\x74\x54\x72\x61\x6E\x73\x6C\x61\x74\x65","\x72\x65\x6D\x6F\x76\x65\x4D\x6F\x75\x73\x65\x4C\x69\x73\x74\x65\x6E\x65\x72","\x73\x75\x62\x6D\x65\x6E\x75\x49\x6D\x61\x67\x65","\x2F\x73\x75\x62\x6D\x65\x6E\x75\x2E\x67\x69\x66","\x75\x73\x65\x4C\x65\x66\x74\x42\x75\x74\x74\x6F\x6E\x46\x6F\x72\x50\x6F\x70\x75\x70","\x69\x74\x65\x6D\x43\x6F\x75\x6E\x74","\x61\x75\x74\x6F\x45\x78\x70\x61\x6E\x64","\x73\x6D\x61\x72\x74\x53\x65\x70\x61\x72\x61\x74\x6F\x72\x73","\x6C\x61\x62\x65\x6C\x73","\x6D\x78\x50\x6F\x70\x75\x70\x4D\x65\x6E\x75","\x64\x69\x73\x61\x62\x6C\x65\x43\x6F\x6E\x74\x65\x78\x74\x4D\x65\x6E\x75","\x69\x73\x4C\x65\x66\x74\x4D\x6F\x75\x73\x65\x42\x75\x74\x74\x6F\x6E","\x77\x69\x6C\x6C\x41\x64\x64\x53\x65\x70\x61\x72\x61\x74\x6F\x72","\x63\x6F\x6E\x74\x61\x69\x6E\x73\x49\x74\x65\x6D\x73","\x6D\x78\x50\x6F\x70\x75\x70\x4D\x65\x6E\x75\x49\x74\x65\x6D","\x6D\x78\x50\x6F\x70\x75\x70\x4D\x65\x6E\x75\x49\x63\x6F\x6E","\x20\x64\x69\x73\x61\x62\x6C\x65\x64","\x70\x61\x64\x64\x69\x6E\x67\x52\x69\x67\x68\x74","\x74\x65\x78\x74\x41\x6C\x69\x67\x6E","\x63\x72\x65\x61\x74\x65\x53\x75\x62\x6D\x65\x6E\x75","\x65\x76\x65\x6E\x74\x52\x65\x63\x65\x69\x76\x65\x72","\x61\x63\x74\x69\x76\x65\x52\x6F\x77","\x68\x69\x64\x65\x53\x75\x62\x6D\x65\x6E\x75","\x73\x68\x6F\x77\x53\x75\x62\x6D\x65\x6E\x75","\x6D\x78\x50\x6F\x70\x75\x70\x4D\x65\x6E\x75\x49\x74\x65\x6D\x48\x6F\x76\x65\x72","\x30\x20\x30\x20\x30\x20\x30\x70\x78","\x63\x6F\x6C\x53\x70\x61\x6E","\x32","\x73\x68\x6F\x77\x4D\x65\x6E\x75","\x63\x68\x61\x6E\x67\x65\x48\x61\x6E\x64\x6C\x65\x72","\x67\x72\x61\x70\x68\x4D\x6F\x64\x65\x6C\x43\x68\x61\x6E\x67\x65\x64","\x73\x65\x74\x47\x72\x61\x70\x68","\x67\x72\x61\x70\x68","\x61\x75\x74\x6F\x53\x61\x76\x65\x44\x65\x6C\x61\x79","\x61\x75\x74\x6F\x53\x61\x76\x65\x54\x68\x72\x6F\x74\x74\x6C\x65","\x61\x75\x74\x6F\x53\x61\x76\x65\x54\x68\x72\x65\x73\x68\x6F\x6C\x64","\x69\x67\x6E\x6F\x72\x65\x64\x43\x68\x61\x6E\x67\x65\x73","\x6C\x61\x73\x74\x53\x6E\x61\x70\x73\x68\x6F\x74","\x73\x74\x61\x72\x74\x41\x6E\x69\x6D\x61\x74\x69\x6F\x6E","\x75\x70\x64\x61\x74\x65\x41\x6E\x69\x6D\x61\x74\x69\x6F\x6E","\x73\x74\x6F\x70\x41\x6E\x69\x6D\x61\x74\x69\x6F\x6E","\x73\x74\x65\x70\x73","\x65\x61\x73\x65","\x73\x74\x65\x70","\x61\x6E\x69\x6D\x61\x74\x65\x43\x65\x6C\x6C","\x67\x65\x74\x44\x65\x6C\x74\x61","\x69\x73\x56\x65\x72\x74\x65\x78","\x6D\x6F\x76\x65\x53\x74\x61\x74\x65","\x73\x74\x6F\x70\x52\x65\x63\x75\x72\x73\x69\x6F\x6E","\x67\x65\x74\x4F\x72\x69\x67\x69\x6E\x46\x6F\x72\x43\x65\x6C\x6C","\x67\x65\x74\x50\x61\x72\x65\x6E\x74","\x67\x65\x74\x43\x65\x6C\x6C\x47\x65\x6F\x6D\x65\x74\x72\x79","\x69\x6D\x61\x67\x65\x73","\x61\x6C\x74","\x70\x75\x74\x49\x6D\x61\x67\x65","\x67\x65\x74\x49\x6D\x61\x67\x65","\x66\x61\x6C\x6C\x62\x61\x63\x6B","\x69\x6E\x63\x6C\x75\x64\x65\x4F\x76\x65\x72\x6C\x61\x79\x73","\x64\x72\x61\x77\x53\x74\x61\x74\x65","\x64\x72\x61\x77\x43\x65\x6C\x6C\x53\x74\x61\x74\x65","\x76\x69\x73\x69\x74\x53\x74\x61\x74\x65\x73\x52\x65\x63\x75\x72\x73\x69\x76\x65","\x64\x72\x61\x77\x4F\x76\x65\x72\x6C\x61\x79\x73","\x70\x61\x69\x6E\x74","\x72\x65\x73\x74\x6F\x72\x65","\x6F\x76\x65\x72\x6C\x61\x79\x73","\x63\x6F\x6E\x76\x65\x72\x74\x65\x72","\x63\x72\x65\x61\x74\x65\x55\x72\x6C\x43\x6F\x6E\x76\x65\x72\x74\x65\x72","\x73\x74\x61\x74\x65\x73","\x70\x61\x74\x68","\x72\x6F\x74\x61\x74\x65\x48\x74\x6D\x6C","\x6C\x61\x73\x74\x58","\x6C\x61\x73\x74\x59","\x6D\x6F\x76\x65\x4F\x70","\x4D","\x6C\x69\x6E\x65\x4F\x70","\x4C","\x71\x75\x61\x64\x4F\x70","\x51","\x63\x75\x72\x76\x65\x4F\x70","\x43","\x63\x6C\x6F\x73\x65\x4F\x70","\x5A","\x70\x6F\x69\x6E\x74\x65\x72\x45\x76\x65\x6E\x74\x73","\x63\x72\x65\x61\x74\x65\x53\x74\x61\x74\x65","\x33\x20\x33","\x66\x6C\x61\x74","\x6D\x69\x74\x65\x72","\x23\x30\x30\x30\x30\x30\x30","\x53\x48\x41\x44\x4F\x57\x43\x4F\x4C\x4F\x52","\x53\x48\x41\x44\x4F\x57\x5F\x4F\x50\x41\x43\x49\x54\x59","\x53\x48\x41\x44\x4F\x57\x5F\x4F\x46\x46\x53\x45\x54\x5F\x58","\x53\x48\x41\x44\x4F\x57\x5F\x4F\x46\x46\x53\x45\x54\x5F\x59","\x66\x6F\x72\x6D\x61\x74","\x61\x64\x64\x4F\x70","\x72\x6F\x74\x61\x74\x65\x50\x6F\x69\x6E\x74","\x70\x6F\x70","\x73\x65\x74\x41\x6C\x70\x68\x61","\x61\x6C\x70\x68\x61","\x73\x65\x74\x46\x69\x6C\x6C\x43\x6F\x6C\x6F\x72","\x73\x65\x74\x47\x72\x61\x64\x69\x65\x6E\x74","\x66\x69\x6C\x6C\x41\x6C\x70\x68\x61","\x67\x72\x61\x64\x69\x65\x6E\x74\x41\x6C\x70\x68\x61","\x73\x65\x74\x53\x74\x72\x6F\x6B\x65\x43\x6F\x6C\x6F\x72","\x73\x65\x74\x53\x74\x72\x6F\x6B\x65\x57\x69\x64\x74\x68","\x73\x65\x74\x44\x61\x73\x68\x65\x64","\x73\x65\x74\x44\x61\x73\x68\x50\x61\x74\x74\x65\x72\x6E","\x73\x65\x74\x4C\x69\x6E\x65\x43\x61\x70","\x6C\x69\x6E\x65\x43\x61\x70","\x73\x65\x74\x4C\x69\x6E\x65\x4A\x6F\x69\x6E","\x6C\x69\x6E\x65\x4A\x6F\x69\x6E","\x73\x65\x74\x4D\x69\x74\x65\x72\x4C\x69\x6D\x69\x74","\x6D\x69\x74\x65\x72\x4C\x69\x6D\x69\x74","\x73\x65\x74\x46\x6F\x6E\x74\x43\x6F\x6C\x6F\x72","\x73\x65\x74\x46\x6F\x6E\x74\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x43\x6F\x6C\x6F\x72","\x66\x6F\x6E\x74\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x43\x6F\x6C\x6F\x72","\x73\x65\x74\x46\x6F\x6E\x74\x42\x6F\x72\x64\x65\x72\x43\x6F\x6C\x6F\x72","\x66\x6F\x6E\x74\x42\x6F\x72\x64\x65\x72\x43\x6F\x6C\x6F\x72","\x73\x65\x74\x46\x6F\x6E\x74\x53\x69\x7A\x65","\x73\x65\x74\x46\x6F\x6E\x74\x46\x61\x6D\x69\x6C\x79","\x73\x65\x74\x46\x6F\x6E\x74\x53\x74\x79\x6C\x65","\x73\x65\x74\x53\x68\x61\x64\x6F\x77","\x73\x65\x74\x53\x68\x61\x64\x6F\x77\x43\x6F\x6C\x6F\x72","\x73\x68\x61\x64\x6F\x77\x43\x6F\x6C\x6F\x72","\x73\x65\x74\x53\x68\x61\x64\x6F\x77\x41\x6C\x70\x68\x61","\x73\x68\x61\x64\x6F\x77\x41\x6C\x70\x68\x61","\x73\x65\x74\x53\x68\x61\x64\x6F\x77\x4F\x66\x66\x73\x65\x74","\x73\x68\x61\x64\x6F\x77\x44\x78","\x73\x68\x61\x64\x6F\x77\x44\x79","\x62\x65\x67\x69\x6E","\x6D\x6F\x76\x65\x54\x6F","\x6C\x69\x6E\x65\x54\x6F","\x71\x75\x61\x64\x54\x6F","\x63\x75\x72\x76\x65\x54\x6F","\x61\x72\x63\x54\x6F","\x61\x72\x63\x54\x6F\x43\x75\x72\x76\x65\x73","\x65\x6E\x64","\x77\x72\x69\x74\x65\x44\x65\x66\x61\x75\x6C\x74\x73","\x65\x78\x74\x65\x6E\x64","\x74\x65\x78\x74\x45\x6E\x61\x62\x6C\x65\x64","\x63\x6F\x6D\x70\x72\x65\x73\x73\x65\x64","\x66\x6F\x6E\x74\x66\x61\x6D\x69\x6C\x79","\x66\x61\x6D\x69\x6C\x79","\x66\x6F\x6E\x74\x73\x69\x7A\x65","\x73\x68\x61\x64\x6F\x77\x63\x6F\x6C\x6F\x72","\x73\x68\x61\x64\x6F\x77\x61\x6C\x70\x68\x61","\x73\x68\x61\x64\x6F\x77\x6F\x66\x66\x73\x65\x74","\x74\x6F\x46\x69\x78\x65\x64","\x72\x6F\x74\x61\x74\x65","\x74\x68\x65\x74\x61","\x63\x78","\x63\x79","\x66\x69\x6C\x6C\x63\x6F\x6C\x6F\x72","\x67\x72\x61\x64\x69\x65\x6E\x74","\x63\x31","\x63\x32","\x77","\x68","\x61\x6C\x70\x68\x61\x31","\x61\x6C\x70\x68\x61\x32","\x73\x74\x72\x6F\x6B\x65\x63\x6F\x6C\x6F\x72","\x73\x74\x72\x6F\x6B\x65\x77\x69\x64\x74\x68","\x64\x61\x73\x68\x70\x61\x74\x74\x65\x72\x6E","\x70\x61\x74\x74\x65\x72\x6E","\x6C\x69\x6E\x65\x63\x61\x70","\x63\x61\x70","\x6C\x69\x6E\x65\x6A\x6F\x69\x6E","\x6D\x69\x74\x65\x72\x6C\x69\x6D\x69\x74","\x6C\x69\x6D\x69\x74","\x66\x6F\x6E\x74\x63\x6F\x6C\x6F\x72","\x66\x6F\x6E\x74\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x63\x6F\x6C\x6F\x72","\x66\x6F\x6E\x74\x62\x6F\x72\x64\x65\x72\x63\x6F\x6C\x6F\x72","\x66\x6F\x6E\x74\x73\x74\x79\x6C\x65","\x72\x65\x63\x74","\x72\x6F\x75\x6E\x64\x72\x65\x63\x74","\x63\x6F\x6E\x76\x65\x72\x74","\x61\x73\x70\x65\x63\x74","\x71\x75\x61\x64","\x78\x31","\x79\x31","\x78\x32","\x79\x32","\x63\x75\x72\x76\x65","\x78\x33","\x79\x33","\x69\x73\x4E\x6F\x64\x65","\x73\x74\x72","\x77\x72\x61\x70","\x66\x69\x6C\x6C","\x63\x6C\x69\x70","\x73\x74\x72\x6F\x6B\x65","\x66\x69\x6C\x6C\x41\x6E\x64\x53\x74\x72\x6F\x6B\x65","\x66\x69\x6C\x6C\x73\x74\x72\x6F\x6B\x65","\x67\x72\x61\x64\x69\x65\x6E\x74\x73","\x64\x65\x66\x73","\x73\x74\x79\x6C\x65\x45\x6E\x61\x62\x6C\x65\x64","\x63\x72\x65\x61\x74\x65\x53\x74\x79\x6C\x65","\x6D\x61\x74\x63\x68\x48\x74\x6D\x6C\x41\x6C\x69\x67\x6E\x6D\x65\x6E\x74","\x66\x6F\x45\x6E\x61\x62\x6C\x65\x64","\x73\x74\x72\x6F\x6B\x65\x54\x6F\x6C\x65\x72\x61\x6E\x63\x65","\x72\x65\x66\x43\x6F\x75\x6E\x74","\x62\x6C\x6F\x63\x6B\x49\x6D\x61\x67\x65\x50\x6F\x69\x6E\x74\x65\x72\x45\x76\x65\x6E\x74\x73","\x73\x76\x67\x7B\x66\x6F\x6E\x74\x2D\x66\x61\x6D\x69\x6C\x79\x3A","\x3B\x66\x6F\x6E\x74\x2D\x73\x69\x7A\x65\x3A","\x3B\x66\x69\x6C\x6C\x3A\x6E\x6F\x6E\x65\x3B\x73\x74\x72\x6F\x6B\x65\x2D\x6D\x69\x74\x65\x72\x6C\x69\x6D\x69\x74\x3A\x31\x30\x7D","\x4E\x53\x5F\x53\x56\x47","\x78\x6D\x6C\x6E\x73","\x63\x72\x65\x61\x74\x65\x47\x72\x61\x64\x69\x65\x6E\x74\x49\x64","\x44\x49\x52\x45\x43\x54\x49\x4F\x4E\x5F\x53\x4F\x55\x54\x48","\x73","\x44\x49\x52\x45\x43\x54\x49\x4F\x4E\x5F\x45\x41\x53\x54","\x65","\x44\x49\x52\x45\x43\x54\x49\x4F\x4E\x5F\x4E\x4F\x52\x54\x48","\x44\x49\x52\x45\x43\x54\x49\x4F\x4E\x5F\x57\x45\x53\x54","\x6D\x78\x2D\x67\x72\x61\x64\x69\x65\x6E\x74\x2D","\x67\x65\x74\x53\x76\x67\x47\x72\x61\x64\x69\x65\x6E\x74","\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74\x42\x79\x49\x64","\x69\x64","\x63\x72\x65\x61\x74\x65\x53\x76\x67\x47\x72\x61\x64\x69\x65\x6E\x74","\x6C\x69\x6E\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6E\x74","\x30\x25","\x3B\x73\x74\x6F\x70\x2D\x6F\x70\x61\x63\x69\x74\x79\x3A","\x6F\x66\x66\x73\x65\x74","\x73\x74\x6F\x70\x2D\x63\x6F\x6C\x6F\x72\x3A","\x61\x64\x64\x4E\x6F\x64\x65","\x64","\x75\x70\x64\x61\x74\x65\x46\x69\x6C\x6C","\x74\x72\x61\x6E\x73\x70\x61\x72\x65\x6E\x74","\x75\x70\x64\x61\x74\x65\x53\x74\x72\x6F\x6B\x65","\x63\x72\x65\x61\x74\x65\x53\x68\x61\x64\x6F\x77","\x63\x72\x65\x61\x74\x65\x54\x6F\x6C\x65\x72\x61\x6E\x63\x65","\x70\x6F\x69\x6E\x74\x65\x72\x2D\x65\x76\x65\x6E\x74\x73","\x61\x6C\x6C","\x66\x69\x6C\x6C\x2D\x6F\x70\x61\x63\x69\x74\x79","\x75\x72\x6C\x28\x23","\x73\x74\x72\x6F\x6B\x65\x2D\x6F\x70\x61\x63\x69\x74\x79","\x73\x74\x72\x6F\x6B\x65\x2D\x77\x69\x64\x74\x68","\x75\x70\x64\x61\x74\x65\x53\x74\x72\x6F\x6B\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x73\x74\x72\x6F\x6B\x65\x2D\x64\x61\x73\x68\x61\x72\x72\x61\x79","\x63\x72\x65\x61\x74\x65\x44\x61\x73\x68\x50\x61\x74\x74\x65\x72\x6E","\x73\x74\x72\x6F\x6B\x65\x2D\x6C\x69\x6E\x65\x6A\x6F\x69\x6E","\x62\x75\x74\x74","\x73\x74\x72\x6F\x6B\x65\x2D\x6C\x69\x6E\x65\x63\x61\x70","\x73\x74\x72\x6F\x6B\x65\x2D\x6D\x69\x74\x65\x72\x6C\x69\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x77\x68\x69\x74\x65","\x29\x73\x63\x61\x6C\x65\x28","\x29\x74\x72\x61\x6E\x73\x6C\x61\x74\x65\x28","\x72\x6F\x74\x61\x74\x65\x28","\x72\x6F\x74\x61\x74\x69\x6F\x6E\x43\x78","\x72\x6F\x74\x61\x74\x69\x6F\x6E\x43\x79","\x72\x78","\x72\x79","\x73\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65\x4E\x53","\x78\x6C\x69\x6E\x6B\x3A\x68\x72\x65\x66","\x70\x72\x65\x73\x65\x72\x76\x65\x41\x73\x70\x65\x63\x74\x52\x61\x74\x69\x6F","\x73\x63\x61\x6C\x65\x28","\x70\x6F\x69\x6E\x74\x65\x72\x2D\x65\x76\x65\x6E\x74\x73\x3A\x6E\x6F\x6E\x65","\x63\x72\x65\x61\x74\x65\x44\x69\x76","\x64\x69\x73\x70\x6C\x61\x79\x3A\x69\x6E\x6C\x69\x6E\x65\x2D\x62\x6C\x6F\x63\x6B\x3B\x66\x6F\x6E\x74\x2D\x73\x69\x7A\x65\x3A","\x70\x78\x3B\x66\x6F\x6E\x74\x2D\x66\x61\x6D\x69\x6C\x79\x3A","\x3B\x63\x6F\x6C\x6F\x72\x3A","\x3B\x6C\x69\x6E\x65\x2D\x68\x65\x69\x67\x68\x74\x3A","\x70\x78\x3B","\x46\x4F\x4E\x54\x5F\x42\x4F\x4C\x44","\x66\x6F\x6E\x74\x2D\x77\x65\x69\x67\x68\x74\x3A\x62\x6F\x6C\x64\x3B","\x46\x4F\x4E\x54\x5F\x49\x54\x41\x4C\x49\x43","\x66\x6F\x6E\x74\x2D\x73\x74\x79\x6C\x65\x3A\x69\x74\x61\x6C\x69\x63\x3B","\x46\x4F\x4E\x54\x5F\x55\x4E\x44\x45\x52\x4C\x49\x4E\x45","\x66\x6F\x6E\x74\x2D\x64\x65\x63\x6F\x72\x61\x74\x69\x6F\x6E\x3A\x75\x6E\x64\x65\x72\x6C\x69\x6E\x65\x3B","\x74\x65\x78\x74\x2D\x61\x6C\x69\x67\x6E\x3A\x63\x65\x6E\x74\x65\x72\x3B","\x74\x65\x78\x74\x2D\x61\x6C\x69\x67\x6E\x3A\x72\x69\x67\x68\x74\x3B","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x2D\x63\x6F\x6C\x6F\x72\x3A","\x62\x6F\x72\x64\x65\x72\x3A\x31\x70\x78\x20\x73\x6F\x6C\x69\x64\x20","\x26\x61\x6D\x70\x3B\x67\x74\x3B","\x26\x61\x6D\x70\x3B\x6C\x74\x3B","\x3C\x64\x69\x76\x20\x78\x6D\x6C\x6E\x73\x3D\x22\x68\x74\x74\x70\x3A\x2F\x2F\x77\x77\x77\x2E\x77\x33\x2E\x6F\x72\x67\x2F\x31\x39\x39\x39\x2F\x78\x68\x74\x6D\x6C\x22\x20\x73\x74\x79\x6C\x65\x3D\x22\x64\x69\x73\x70\x6C\x61\x79\x3A\x69\x6E\x6C\x69\x6E\x65\x2D\x62\x6C\x6F\x63\x6B\x3B","\x22\x3E","\x3C\x2F\x64\x69\x76\x3E","\x3C\x68\x72\x20\x2F\x3E","\x3C\x62\x72\x20\x2F\x3E","\x3C\x64\x69\x76\x20\x78\x6D\x6C\x6E\x73\x3D\x22\x68\x74\x74\x70\x3A\x2F\x2F\x77\x77\x77\x2E\x77\x33\x2E\x6F\x72\x67\x2F\x31\x39\x39\x39\x2F\x78\x68\x74\x6D\x6C\x22\x20\x73\x74\x79\x6C\x65\x3D\x22","\x68\x74\x6D\x6C","\x76\x65\x72\x74\x69\x63\x61\x6C\x2D\x61\x6C\x69\x67\x6E\x3A\x74\x6F\x70\x3B","\x6F\x76\x65\x72\x66\x6C\x6F\x77\x3A\x68\x69\x64\x64\x65\x6E\x3B","\x6D\x61\x78\x2D\x68\x65\x69\x67\x68\x74\x3A","\x77\x69\x64\x74\x68\x3A","\x77\x68\x69\x74\x65\x2D\x73\x70\x61\x63\x65\x3A\x6E\x6F\x72\x6D\x61\x6C\x3B","\x77\x68\x69\x74\x65\x2D\x73\x70\x61\x63\x65\x3A\x6E\x6F\x77\x72\x61\x70\x3B","\x66\x6F\x72\x65\x69\x67\x6E\x4F\x62\x6A\x65\x63\x74","\x70\x6C\x61\x69\x6E\x54\x65\x78\x74","\x63\x72\x65\x61\x74\x65\x43\x6C\x69\x70","\x6D\x78\x2D\x63\x6C\x69\x70\x2D","\x63\x6C\x69\x70\x50\x61\x74\x68","\x63\x6C\x69\x70\x2D\x70\x61\x74\x68","\x75\x70\x64\x61\x74\x65\x46\x6F\x6E\x74","\x74\x65\x78\x74\x2D\x61\x6E\x63\x68\x6F\x72","\x66\x6F\x6E\x74\x2D\x73\x69\x7A\x65","\x61\x64\x64\x54\x65\x78\x74\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64","\x66\x6F\x6E\x74\x2D\x66\x61\x6D\x69\x6C\x79","\x66\x6F\x6E\x74\x2D\x77\x65\x69\x67\x68\x74","\x62\x6F\x6C\x64","\x66\x6F\x6E\x74\x2D\x73\x74\x79\x6C\x65","\x69\x74\x61\x6C\x69\x63","\x74\x65\x78\x74\x2D\x64\x65\x63\x6F\x72\x61\x74\x69\x6F\x6E","\x67\x65\x74\x42\x42\x6F\x78","\x66\x6F\x6E\x74\x57\x65\x69\x67\x68\x74","\x3C\x62\x72\x2F\x3E","\x6D\x6F\x64","\x74\x72\x61\x6E\x73\x6C\x61\x74\x65\x28\x30\x2E\x35\x2C\x20\x30\x2E\x35\x29","\x6D","\x6C","\x63","\x72\x6F\x74\x61\x74\x65\x64\x48\x74\x6D\x6C\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64","\x76\x6D\x6C\x53\x63\x61\x6C\x65","\x20\x65","\x63\x6F\x6F\x72\x64\x73\x69\x7A\x65","\x73\x74\x72\x6F\x6B\x65\x77\x65\x69\x67\x68\x74","\x73\x74\x72\x6F\x6B\x65\x64","\x63\x72\x65\x61\x74\x65\x53\x74\x72\x6F\x6B\x65","\x63\x72\x65\x61\x74\x65\x46\x69\x6C\x6C","\x63\x72\x65\x61\x74\x65\x54\x72\x61\x6E\x73\x70\x61\x72\x65\x6E\x74\x46\x69\x6C\x6C","\x66\x69\x6C\x6C\x65\x64","\x3A\x66\x69\x6C\x6C","\x2F\x74\x72\x61\x6E\x73\x70\x61\x72\x65\x6E\x74\x2E\x67\x69\x66","\x74\x69\x6C\x65","\x63\x6F\x6C\x6F\x72\x32","\x66\x6C\x69\x70","\x61\x6E\x67\x6C\x65","\x4F\x46\x46\x49\x43\x45\x5F\x50\x52\x45\x46\x49\x58","\x3A\x6F\x70\x61\x63\x69\x74\x79\x32","\x3A\x73\x74\x72\x6F\x6B\x65","\x65\x6E\x64\x63\x61\x70","\x6A\x6F\x69\x6E\x73\x74\x79\x6C\x65","\x31\x30","\x64\x61\x73\x68\x73\x74\x79\x6C\x65","\x67\x65\x74\x56\x6D\x6C\x44\x61\x73\x68\x53\x74\x79\x6C\x65","\x64\x61\x73\x68","\x30\x20\x32","\x63\x72\x65\x61\x74\x65\x53\x68\x61\x64\x6F\x77\x53\x74\x72\x6F\x6B\x65","\x63\x72\x65\x61\x74\x65\x53\x68\x61\x64\x6F\x77\x46\x69\x6C\x6C","\x3A\x73\x68\x61\x70\x65","\x63\x20","\x63\x72\x65\x61\x74\x65\x52\x65\x63\x74","\x3A\x72\x65\x63\x74","\x3A\x72\x6F\x75\x6E\x64\x72\x65\x63\x74","\x61\x72\x63\x73\x69\x7A\x65","\x3A\x6F\x76\x61\x6C","\x61\x74\x6D\x6F\x73\x74","\x69\x67\x6E\x6F\x72\x65","\x66\x72\x61\x6D\x65","\x31\x38\x30","\x66\x6F\x6E\x74\x44\x65\x63\x6F\x72\x61\x74\x69\x6F\x6E","\x3A\x67\x72\x6F\x75\x70","\x72\x65\x6C\x61\x74\x69\x76\x65","\x67\x65\x74\x41\x6C\x69\x67\x6E\x6D\x65\x6E\x74\x41\x73\x50\x6F\x69\x6E\x74","\x6E\x6F\x72\x6D\x61\x6C","\x6D\x61\x78\x48\x65\x69\x67\x68\x74","\x67\x72\x6F\x75\x70","\x70\x72\x6F\x67\x69\x64\x3A\x44\x58\x49\x6D\x61\x67\x65\x54\x72\x61\x6E\x73\x66\x6F\x72\x6D\x2E\x4D\x69\x63\x72\x6F\x73\x6F\x66\x74\x2E\x4D\x61\x74\x72\x69\x78\x28\x4D\x31\x31\x3D","\x2C\x20\x4D\x31\x32\x3D","\x2C\x20\x4D\x32\x31\x3D","\x2C\x20\x4D\x32\x32\x3D","\x2C\x20\x73\x69\x7A\x69\x6E\x67\x4D\x65\x74\x68\x6F\x64\x3D\x27\x61\x75\x74\x6F\x20\x65\x78\x70\x61\x6E\x64\x27\x29","\x3A\x70\x61\x74\x68","\x74\x65\x78\x74\x70\x61\x74\x68\x6F\x6B","\x6D\x20","\x20\x6C\x20","\x3A\x74\x65\x78\x74\x70\x61\x74\x68","\x76\x2D\x74\x65\x78\x74\x2D\x61\x6C\x69\x67\x6E\x3A","\x73\x74\x72\x69\x6E\x67","\x73\x65\x74\x53\x74\x61\x74\x65\x73","\x67\x75\x69\x64\x65\x58","\x67\x75\x69\x64\x65\x59","\x67\x65\x74\x47\x75\x69\x64\x65\x54\x6F\x6C\x65\x72\x61\x6E\x63\x65","\x63\x72\x65\x61\x74\x65\x47\x75\x69\x64\x65\x53\x68\x61\x70\x65","\x69\x73\x44\x61\x73\x68\x65\x64","\x44\x49\x41\x4C\x45\x43\x54\x5F\x56\x4D\x4C","\x67\x65\x74\x4F\x76\x65\x72\x6C\x61\x79\x50\x61\x6E\x65","\x70\x6F\x69\x6E\x74\x73","\x73\x63\x72\x6F\x6C\x6C\x57\x69\x64\x74\x68","\x64\x65\x73\x63","\x70\x61\x72\x73\x65\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x70\x61\x72\x73\x65\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74\x73","\x64\x65\x66\x61\x75\x6C\x74\x4C\x6F\x63\x61\x6C\x69\x7A\x65\x64","\x63\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74\x73","\x77\x30","\x68\x30","\x62\x67\x4E\x6F\x64\x65","\x66\x67\x4E\x6F\x64\x65","\x66\x6F\x72\x65\x67\x72\x6F\x75\x6E\x64","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64","\x76\x61\x72\x69\x61\x62\x6C\x65","\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x73","\x67\x65\x74\x43\x68\x69\x6C\x64\x4E\x6F\x64\x65\x73","\x70\x61\x72\x73\x65\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74","\x65\x76\x61\x6C\x75\x61\x74\x65\x54\x65\x78\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x65\x76\x61\x6C\x75\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x6C\x6F\x63\x61\x6C\x69\x7A\x65\x64","\x65\x76\x61\x6C","\x64\x72\x61\x77\x53\x68\x61\x70\x65","\x64\x72\x61\x77\x43\x68\x69\x6C\x64\x72\x65\x6E","\x63\x6F\x6D\x70\x75\x74\x65\x41\x73\x70\x65\x63\x74","\x69\x6E\x68\x65\x72\x69\x74","\x67\x65\x74\x4E\x75\x6D\x62\x65\x72","\x64\x72\x61\x77\x4E\x6F\x64\x65","\x66\x69\x78\x65\x64","\x61\x72\x63","\x78\x2D\x61\x78\x69\x73\x2D\x72\x6F\x74\x61\x74\x69\x6F\x6E","\x6C\x61\x72\x67\x65\x2D\x61\x72\x63\x2D\x66\x6C\x61\x67","\x73\x77\x65\x65\x70\x2D\x66\x6C\x61\x67","\x52\x45\x43\x54\x41\x4E\x47\x4C\x45\x5F\x52\x4F\x55\x4E\x44\x49\x4E\x47\x5F\x46\x41\x43\x54\x4F\x52","\x61\x6C\x69\x67\x6E\x2D\x73\x68\x61\x70\x65","\x69\x6E\x63\x6C\x75\x64\x65\x2D\x73\x68\x61\x70\x65","\x67\x65\x74\x53\x74\x65\x6E\x63\x69\x6C","\x73\x74\x65\x6E\x63\x69\x6C","\x62\x6F\x75\x6E\x64\x73","\x62\x6F\x75\x6E\x64\x69\x6E\x67\x42\x6F\x78","\x73\x76\x67\x53\x74\x72\x6F\x6B\x65\x54\x6F\x6C\x65\x72\x61\x6E\x63\x65","\x73\x74\x65\x6E\x63\x69\x6C\x50\x6F\x69\x6E\x74\x65\x72\x45\x76\x65\x6E\x74\x73","\x69\x73\x50\x61\x72\x73\x65\x56\x6D\x6C","\x69\x73\x48\x74\x6D\x6C\x41\x6C\x6C\x6F\x77\x65\x64","\x67\x65\x74\x53\x76\x67\x53\x63\x72\x65\x65\x6E\x4F\x66\x66\x73\x65\x74","\x63\x72\x65\x61\x74\x65\x53\x76\x67","\x63\x72\x65\x61\x74\x65\x48\x74\x6D\x6C","\x63\x72\x65\x61\x74\x65\x56\x6D\x6C","\x72\x65\x63\x6F\x6E\x66\x69\x67\x75\x72\x65","\x75\x70\x64\x61\x74\x65\x42\x6F\x75\x6E\x64\x73\x46\x72\x6F\x6D\x50\x6F\x69\x6E\x74\x73","\x63\x68\x65\x63\x6B\x42\x6F\x75\x6E\x64\x73","\x72\x65\x64\x72\x61\x77\x48\x74\x6D\x6C\x53\x68\x61\x70\x65","\x72\x65\x64\x72\x61\x77\x53\x68\x61\x70\x65","\x75\x70\x64\x61\x74\x65\x42\x6F\x75\x6E\x64\x69\x6E\x67\x42\x6F\x78","\x63\x72\x65\x61\x74\x65\x56\x6D\x6C\x47\x72\x6F\x75\x70","\x63\x72\x65\x61\x74\x65\x43\x61\x6E\x76\x61\x73","\x68\x61\x73\x43\x68\x69\x6C\x64\x4E\x6F\x64\x65\x73","\x6C\x61\x73\x74\x43\x68\x69\x6C\x64","\x62\x65\x66\x6F\x72\x65\x65\x6E\x64","\x69\x6E\x73\x65\x72\x74\x41\x64\x6A\x61\x63\x65\x6E\x74\x48\x54\x4D\x4C","\x61\x64\x64\x54\x72\x61\x6E\x73\x70\x61\x72\x65\x6E\x74\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x46\x69\x6C\x74\x65\x72","\x64\x65\x73\x74\x72\x6F\x79\x43\x61\x6E\x76\x61\x73","\x75\x70\x64\x61\x74\x65\x56\x6D\x6C\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x6D\x78\x52\x65\x66\x43\x6F\x75\x6E\x74","\x6F\x6C\x64\x47\x72\x61\x64\x69\x65\x6E\x74\x73","\x72\x65\x6C\x65\x61\x73\x65\x53\x76\x67\x47\x72\x61\x64\x69\x65\x6E\x74\x73","\x69\x73\x50\x61\x69\x6E\x74\x42\x6F\x75\x6E\x64\x73\x49\x6E\x76\x65\x72\x74\x65\x64","\x75\x70\x64\x61\x74\x65\x54\x72\x61\x6E\x73\x66\x6F\x72\x6D","\x63\x6F\x6E\x66\x69\x67\x75\x72\x65\x43\x61\x6E\x76\x61\x73","\x70\x61\x69\x6E\x74\x53\x74\x65\x6E\x63\x69\x6C\x53\x68\x61\x70\x65","\x70\x61\x69\x6E\x74\x45\x64\x67\x65\x53\x68\x61\x70\x65","\x70\x61\x69\x6E\x74\x56\x65\x72\x74\x65\x78\x53\x68\x61\x70\x65","\x69\x73\x53\x68\x61\x64\x6F\x77","\x67\x65\x74\x47\x72\x61\x64\x69\x65\x6E\x74\x42\x6F\x75\x6E\x64\x73","\x67\x65\x74\x53\x68\x61\x70\x65\x52\x6F\x74\x61\x74\x69\x6F\x6E","\x61\x64\x64\x54\x72\x61\x6E\x73\x70\x61\x72\x65\x6E\x74\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x52\x65\x63\x74\x61\x6E\x67\x6C\x65","\x73\x65\x74\x54\x72\x61\x6E\x73\x70\x61\x72\x65\x6E\x74\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x49\x6D\x61\x67\x65","\x70\x61\x69\x6E\x74\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64","\x70\x61\x69\x6E\x74\x46\x6F\x72\x65\x67\x72\x6F\x75\x6E\x64","\x67\x65\x74\x41\x72\x63\x53\x69\x7A\x65","\x70\x61\x69\x6E\x74\x47\x6C\x61\x73\x73\x45\x66\x66\x65\x63\x74","\x23\x66\x66\x66\x66\x66\x66","\x69\x73\x52\x6F\x75\x6E\x64\x65\x64","\x73\x74\x65\x6E\x63\x69\x6C\x46\x6C\x69\x70\x48","\x73\x74\x65\x6E\x63\x69\x6C\x46\x6C\x69\x70\x56","\x73\x65\x74\x43\x75\x72\x73\x6F\x72","\x67\x65\x74\x43\x75\x72\x73\x6F\x72","\x63\x72\x65\x61\x74\x65\x42\x6F\x75\x6E\x64\x69\x6E\x67\x42\x6F\x78","\x61\x75\x67\x6D\x65\x6E\x74\x42\x6F\x75\x6E\x64\x69\x6E\x67\x42\x6F\x78","\x67\x65\x74\x42\x6F\x75\x6E\x64\x69\x6E\x67\x42\x6F\x78","\x67\x65\x74\x52\x6F\x74\x61\x74\x69\x6F\x6E","\x67\x65\x74\x54\x65\x78\x74\x52\x6F\x74\x61\x74\x69\x6F\x6E","\x76\x65\x72\x74\x69\x63\x61\x6C\x54\x65\x78\x74\x52\x6F\x74\x61\x74\x69\x6F\x6E","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x49\x6D\x61\x67\x65","\x75\x72\x6C\x28\x27","\x2F\x74\x72\x61\x6E\x73\x70\x61\x72\x65\x6E\x74\x2E\x67\x69\x66\x27\x29","\x73\x74\x65\x6E\x63\x69\x6C\x73","\x6D\x61\x72\x6B\x65\x72\x73","\x41\x52\x52\x4F\x57\x5F\x43\x4C\x41\x53\x53\x49\x43","\x41\x52\x52\x4F\x57\x5F\x44\x49\x41\x4D\x4F\x4E\x44","\x61\x64\x64\x4D\x61\x72\x6B\x65\x72","\x72\x65\x64\x72\x61\x77\x50\x61\x74\x68","\x75\x70\x64\x61\x74\x65\x48\x74\x6D\x6C\x42\x6F\x75\x6E\x64\x73","\x75\x70\x64\x61\x74\x65\x48\x74\x6D\x6C\x46\x69\x6C\x74\x65\x72\x73","\x75\x70\x64\x61\x74\x65\x48\x74\x6D\x6C\x43\x6F\x6C\x6F\x72\x73","\x62\x6F\x72\x64\x65\x72\x57\x69\x64\x74\x68","\x62\x6F\x72\x64\x65\x72\x43\x6F\x6C\x6F\x72","\x73\x6F\x6C\x69\x64","\x70\x72\x6F\x67\x69\x64\x3A\x44\x58\x49\x6D\x61\x67\x65\x54\x72\x61\x6E\x73\x66\x6F\x72\x6D\x2E\x4D\x69\x63\x72\x6F\x73\x6F\x66\x74\x2E\x64\x72\x6F\x70\x53\x68\x61\x64\x6F\x77\x20\x28\x4F\x66\x66\x58\x3D\x27","\x27\x2C\x20\x4F\x66\x66\x59\x3D\x27","\x27\x2C\x20\x43\x6F\x6C\x6F\x72\x3D\x27","\x27\x29","\x70\x72\x6F\x67\x69\x64\x3A\x44\x58\x49\x6D\x61\x67\x65\x54\x72\x61\x6E\x73\x66\x6F\x72\x6D\x2E\x4D\x69\x63\x72\x6F\x73\x6F\x66\x74\x2E\x67\x72\x61\x64\x69\x65\x6E\x74\x28\x73\x74\x61\x72\x74\x43\x6F\x6C\x6F\x72\x53\x74\x72\x3D\x27","\x27\x2C\x20\x65\x6E\x64\x43\x6F\x6C\x6F\x72\x53\x74\x72\x3D\x27","\x27\x2C\x20\x67\x72\x61\x64\x69\x65\x6E\x74\x54\x79\x70\x65\x3D\x27","\x70\x61\x69\x6E\x74\x4C\x69\x6E\x65","\x61\x72\x72\x6F\x77\x57\x69\x64\x74\x68","\x41\x52\x52\x4F\x57\x5F\x57\x49\x44\x54\x48","\x41\x52\x52\x4F\x57\x5F\x53\x50\x41\x43\x49\x4E\x47","\x41\x52\x52\x4F\x57\x5F\x53\x49\x5A\x45","\x44\x45\x46\x41\x55\x4C\x54\x5F\x46\x4F\x4E\x54\x53\x54\x59\x4C\x45","\x63\x6C\x69\x70\x70\x65\x64","\x62\x61\x73\x65\x53\x70\x61\x63\x69\x6E\x67\x54\x6F\x70","\x62\x61\x73\x65\x53\x70\x61\x63\x69\x6E\x67\x42\x6F\x74\x74\x6F\x6D","\x62\x61\x73\x65\x53\x70\x61\x63\x69\x6E\x67\x4C\x65\x66\x74","\x62\x61\x73\x65\x53\x70\x61\x63\x69\x6E\x67\x52\x69\x67\x68\x74","\x72\x65\x70\x6C\x61\x63\x65\x4C\x69\x6E\x65\x66\x65\x65\x64\x73","\x69\x67\x6E\x6F\x72\x65\x43\x6C\x69\x70\x70\x65\x64\x53\x74\x72\x69\x6E\x67\x53\x69\x7A\x65","\x69\x67\x6E\x6F\x72\x65\x53\x74\x72\x69\x6E\x67\x53\x69\x7A\x65","\x74\x65\x78\x74\x44\x69\x76","\x75\x70\x64\x61\x74\x65\x53\x69\x7A\x65","\x6D\x61\x72\x67\x69\x6E","\x44\x49\x41\x4C\x45\x43\x54\x5F\x53\x54\x52\x49\x43\x54\x48\x54\x4D\x4C","\x75\x70\x64\x61\x74\x65\x56\x61\x6C\x75\x65","\x75\x70\x64\x61\x74\x65\x48\x74\x6D\x6C\x54\x72\x61\x6E\x73\x66\x6F\x72\x6D","\x75\x70\x64\x61\x74\x65\x48\x74\x6D\x6C\x46\x69\x6C\x74\x65\x72","\x54\x72\x61\x6E\x73\x66\x6F\x72\x6D\x4F\x72\x69\x67\x69\x6E","\x25\x20","\x54\x72\x61\x6E\x73\x66\x6F\x72\x6D","\x25\x2C","\x25\x29\x73\x63\x61\x6C\x65\x28","\x29\x20\x72\x6F\x74\x61\x74\x65\x28","\x64\x65\x67\x29","\x30\x25\x20\x30\x25","\x25\x29","\x31\x70\x78\x20\x73\x6F\x6C\x69\x64\x20","\x3C\x64\x69\x76\x20\x73\x74\x79\x6C\x65\x3D\x22\x7A\x6F\x6F\x6D\x3A\x31\x3B","\x64\x69\x73\x70\x6C\x61\x79\x3A\x69\x6E\x6C\x69\x6E\x65\x2D\x62\x6C\x6F\x63\x6B\x3B\x5F\x64\x69\x73\x70\x6C\x61\x79\x3A\x69\x6E\x6C\x69\x6E\x65\x3B\x70\x61\x64\x64\x69\x6E\x67\x2D\x62\x6F\x74\x74\x6F\x6D\x3A\x31\x70\x78\x3B\x70\x61\x64\x64\x69\x6E\x67\x2D\x72\x69\x67\x68\x74\x3A\x31\x70\x78\x3B\x6C\x69\x6E\x65\x2D\x68\x65\x69\x67\x68\x74\x3A","\x75\x70\x64\x61\x74\x65\x4D\x61\x72\x67\x69\x6E","\x67\x65\x74\x53\x70\x61\x63\x69\x6E\x67","\x70\x72\x65\x73\x65\x72\x76\x65\x49\x6D\x61\x67\x65\x41\x73\x70\x65\x63\x74","\x69\x6D\x61\x67\x65\x46\x6C\x69\x70\x48","\x69\x6D\x61\x67\x65\x46\x6C\x69\x70\x56","\x70\x72\x6F\x67\x69\x64\x3A\x44\x58\x49\x6D\x61\x67\x65\x54\x72\x61\x6E\x73\x66\x6F\x72\x6D\x2E\x4D\x69\x63\x72\x6F\x73\x6F\x66\x74\x2E\x42\x61\x73\x69\x63\x49\x6D\x61\x67\x65\x28\x72\x6F\x74\x61\x74\x69\x6F\x6E\x3D\x32\x29","\x70\x72\x6F\x67\x69\x64\x3A\x44\x58\x49\x6D\x61\x67\x65\x54\x72\x61\x6E\x73\x66\x6F\x72\x6D\x2E\x4D\x69\x63\x72\x6F\x73\x6F\x66\x74\x2E\x42\x61\x73\x69\x63\x49\x6D\x61\x67\x65\x28\x6D\x69\x72\x72\x6F\x72\x3D\x31\x29","\x70\x72\x6F\x67\x69\x64\x3A\x44\x58\x49\x6D\x61\x67\x65\x54\x72\x61\x6E\x73\x66\x6F\x72\x6D\x2E\x4D\x69\x63\x72\x6F\x73\x6F\x66\x74\x2E\x42\x61\x73\x69\x63\x49\x6D\x61\x67\x65\x28\x72\x6F\x74\x61\x74\x69\x6F\x6E\x3D\x32\x2C\x20\x6D\x69\x72\x72\x6F\x72\x3D\x31\x29","\x69\x6D\x61\x67\x65\x53\x69\x7A\x65","\x44\x45\x46\x41\x55\x4C\x54\x5F\x49\x4D\x41\x47\x45\x53\x49\x5A\x45","\x69\x6E\x64\x69\x63\x61\x74\x6F\x72\x53\x69\x7A\x65","\x69\x6E\x64\x69\x63\x61\x74\x6F\x72","\x70\x61\x69\x6E\x74\x49\x6D\x61\x67\x65","\x70\x61\x69\x6E\x74\x49\x6E\x64\x69\x63\x61\x74\x6F\x72","\x67\x65\x74\x49\x6D\x61\x67\x65\x42\x6F\x75\x6E\x64\x73","\x41\x4C\x49\x47\x4E\x5F\x54\x4F\x50","\x67\x65\x74\x49\x6E\x64\x69\x63\x61\x74\x6F\x72\x42\x6F\x75\x6E\x64\x73","\x63\x72\x65\x61\x74\x65\x4D\x61\x72\x6B\x65\x72","\x53\x54\x59\x4C\x45\x5F\x43\x55\x52\x56\x45\x44","\x70\x61\x69\x6E\x74\x43\x75\x72\x76\x65\x64\x4C\x69\x6E\x65","\x53\x54\x59\x4C\x45\x5F\x53\x54\x41\x52\x54\x53\x49\x5A\x45","\x53\x54\x59\x4C\x45\x5F\x45\x4E\x44\x53\x49\x5A\x45","\x53\x54\x59\x4C\x45\x5F\x53\x54\x41\x52\x54\x41\x52\x52\x4F\x57","\x53\x54\x59\x4C\x45\x5F\x45\x4E\x44\x41\x52\x52\x4F\x57","\x53\x54\x59\x4C\x45\x5F\x53\x54\x41\x52\x54\x46\x49\x4C\x4C","\x53\x54\x59\x4C\x45\x5F\x45\x4E\x44\x46\x49\x4C\x4C","\x70\x61\x69\x6E\x74\x52\x6F\x75\x6E\x64\x65\x64\x53\x77\x69\x6D\x6C\x61\x6E\x65","\x70\x61\x69\x6E\x74\x53\x77\x69\x6D\x6C\x61\x6E\x65","\x70\x61\x69\x6E\x74\x53\x65\x70\x61\x72\x61\x74\x6F\x72","\x75\x73\x65\x42\x6F\x75\x6E\x64\x69\x6E\x67\x42\x6F\x78","\x6D\x6F\x76\x65\x43\x65\x6C\x6C","\x67\x65\x74\x47\x72\x61\x70\x68","\x67\x65\x74\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74","\x67\x65\x74\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65","\x74\x72\x61\x76\x65\x72\x73\x65","\x67\x65\x74\x45\x64\x67\x65\x43\x6F\x75\x6E\x74","\x67\x65\x74\x45\x64\x67\x65\x41\x74","\x67\x65\x74\x54\x65\x72\x6D\x69\x6E\x61\x6C","\x67\x65\x74\x56\x69\x73\x69\x62\x6C\x65\x54\x65\x72\x6D\x69\x6E\x61\x6C","\x69\x73\x56\x65\x72\x74\x65\x78\x4D\x6F\x76\x61\x62\x6C\x65","\x69\x73\x43\x65\x6C\x6C\x4D\x6F\x76\x61\x62\x6C\x65","\x69\x73\x56\x65\x72\x74\x65\x78\x49\x67\x6E\x6F\x72\x65\x64","\x69\x73\x43\x65\x6C\x6C\x56\x69\x73\x69\x62\x6C\x65","\x69\x73\x45\x64\x67\x65\x49\x67\x6E\x6F\x72\x65\x64","\x73\x65\x74\x45\x64\x67\x65\x53\x74\x79\x6C\x65\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65\x73","\x73\x65\x74\x4F\x72\x74\x68\x6F\x67\x6F\x6E\x61\x6C\x45\x64\x67\x65","\x67\x65\x74\x50\x61\x72\x65\x6E\x74\x4F\x66\x66\x73\x65\x74","\x69\x73\x41\x6E\x63\x65\x73\x74\x6F\x72","\x67\x65\x74\x47\x65\x6F\x6D\x65\x74\x72\x79","\x73\x65\x74\x45\x64\x67\x65\x50\x6F\x69\x6E\x74\x73","\x73\x65\x74\x52\x65\x6C\x61\x74\x69\x76\x65","\x73\x65\x74\x47\x65\x6F\x6D\x65\x74\x72\x79","\x73\x65\x74\x56\x65\x72\x74\x65\x78\x4C\x6F\x63\x61\x74\x69\x6F\x6E","\x67\x65\x74\x56\x65\x72\x74\x65\x78\x42\x6F\x75\x6E\x64\x73","\x61\x72\x72\x61\x6E\x67\x65\x47\x72\x6F\x75\x70\x73","\x67\x65\x74\x43\x68\x69\x6C\x64\x56\x65\x72\x74\x69\x63\x65\x73","\x67\x65\x74\x42\x6F\x75\x6E\x64\x69\x6E\x67\x42\x6F\x78\x46\x72\x6F\x6D\x47\x65\x6F\x6D\x65\x74\x72\x79","\x69\x73\x53\x77\x69\x6D\x6C\x61\x6E\x65","\x67\x65\x74\x53\x74\x61\x72\x74\x53\x69\x7A\x65","\x78\x30","\x79\x30","\x6B\x65\x65\x70\x46\x69\x72\x73\x74\x4C\x6F\x63\x61\x74\x69\x6F\x6E","\x72\x65\x73\x69\x7A\x65\x50\x61\x72\x65\x6E\x74","\x72\x65\x73\x69\x7A\x65\x4C\x61\x73\x74","\x69\x73\x48\x6F\x72\x69\x7A\x6F\x6E\x74\x61\x6C","\x67\x65\x74\x49\x6E\x64\x65\x78","\x67\x65\x74\x50\x61\x72\x65\x6E\x74\x53\x69\x7A\x65","\x69\x73\x4C\x61\x79\x65\x72","\x63\x75\x72\x72\x65\x6E\x74\x52\x6F\x6F\x74","\x69\x73\x43\x65\x6C\x6C\x43\x6F\x6C\x6C\x61\x70\x73\x65\x64","\x72\x65\x73\x69\x7A\x65\x56\x65\x72\x74\x69\x63\x65\x73","\x69\x6E\x76\x65\x72\x74","\x67\x72\x6F\x75\x70\x50\x61\x64\x64\x69\x6E\x67","\x70\x61\x72\x65\x6E\x74\x73\x43\x68\x61\x6E\x67\x65\x64","\x6D\x6F\x76\x65\x54\x72\x65\x65","\x6C\x65\x76\x65\x6C\x44\x69\x73\x74\x61\x6E\x63\x65","\x6E\x6F\x64\x65\x44\x69\x73\x74\x61\x6E\x63\x65","\x72\x65\x73\x65\x74\x45\x64\x67\x65\x73","\x70\x72\x65\x66\x48\x6F\x7A\x45\x64\x67\x65\x53\x65\x70","\x70\x72\x65\x66\x56\x65\x72\x74\x45\x64\x67\x65\x4F\x66\x66","\x6D\x69\x6E\x45\x64\x67\x65\x4A\x65\x74\x74\x79","\x63\x68\x61\x6E\x6E\x65\x6C\x42\x75\x66\x66\x65\x72","\x65\x64\x67\x65\x52\x6F\x75\x74\x69\x6E\x67","\x67\x65\x74\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x73","\x66\x69\x6E\x64\x54\x72\x65\x65\x52\x6F\x6F\x74\x73","\x64\x66\x73","\x6C\x61\x79\x6F\x75\x74","\x68\x6F\x72\x69\x7A\x6F\x6E\x74\x61\x6C\x4C\x61\x79\x6F\x75\x74","\x76\x65\x72\x74\x69\x63\x61\x6C\x4C\x61\x79\x6F\x75\x74","\x6D\x6F\x76\x65\x4E\x6F\x64\x65","\x61\x64\x6A\x75\x73\x74\x50\x61\x72\x65\x6E\x74\x73","\x6C\x6F\x63\x61\x6C\x45\x64\x67\x65\x50\x72\x6F\x63\x65\x73\x73\x69\x6E\x67","\x6E\x65\x78\x74","\x63\x72\x65\x61\x74\x65\x4E\x6F\x64\x65","\x61\x74\x74\x61\x63\x68\x50\x61\x72\x65\x6E\x74","\x6C\x61\x79\x6F\x75\x74\x4C\x65\x61\x66","\x6F\x66\x66\x73\x65\x74\x58","\x6F\x66\x66\x73\x65\x74\x59","\x75\x70\x70\x65\x72\x48\x65\x61\x64","\x63\x6F\x6E\x74\x6F\x75\x72","\x63\x72\x65\x61\x74\x65\x4C\x69\x6E\x65","\x6C\x6F\x77\x65\x72\x48\x65\x61\x64","\x75\x70\x70\x65\x72\x54\x61\x69\x6C","\x6C\x6F\x77\x65\x72\x54\x61\x69\x6C","\x6D\x65\x72\x67\x65","\x62\x72\x69\x64\x67\x65","\x73\x6F\x72\x74\x43\x65\x6C\x6C\x73","\x70\x72\x6F\x63\x65\x73\x73\x4E\x6F\x64\x65\x4F\x75\x74\x67\x6F\x69\x6E\x67","\x67\x65\x74\x45\x64\x67\x65\x73\x42\x65\x74\x77\x65\x65\x6E","\x77\x65\x69\x67\x68\x74\x65\x64\x56\x61\x6C\x75\x65","\x6E\x75\x64\x67\x65","\x76\x69\x73\x69\x74\x65\x64","\x72\x61\x6E\x6B\x49\x6E\x64\x65\x78","\x75\x73\x65\x49\x6E\x70\x75\x74\x4F\x72\x69\x67\x69\x6E","\x64\x69\x73\x61\x62\x6C\x65\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x66\x6F\x72\x63\x65\x43\x6F\x6E\x73\x74\x61\x6E\x74","\x66\x6F\x72\x63\x65\x43\x6F\x6E\x73\x74\x61\x6E\x74\x53\x71\x75\x61\x72\x65\x64","\x6D\x69\x6E\x44\x69\x73\x74\x61\x6E\x63\x65\x4C\x69\x6D\x69\x74","\x6D\x61\x78\x44\x69\x73\x74\x61\x6E\x63\x65\x4C\x69\x6D\x69\x74","\x6D\x69\x6E\x44\x69\x73\x74\x61\x6E\x63\x65\x4C\x69\x6D\x69\x74\x53\x71\x75\x61\x72\x65\x64","\x69\x6E\x69\x74\x69\x61\x6C\x54\x65\x6D\x70","\x74\x65\x6D\x70\x65\x72\x61\x74\x75\x72\x65","\x6D\x61\x78\x49\x74\x65\x72\x61\x74\x69\x6F\x6E\x73","\x69\x74\x65\x72\x61\x74\x69\x6F\x6E","\x61\x6C\x6C\x6F\x77\x65\x64\x54\x6F\x52\x75\x6E","\x76\x65\x72\x74\x65\x78\x41\x72\x72\x61\x79","\x67\x65\x74\x42\x6F\x75\x6E\x64\x73","\x69\x6E\x64\x69\x63\x65\x73","\x64\x69\x73\x70\x58","\x64\x69\x73\x70\x59","\x63\x65\x6C\x6C\x4C\x6F\x63\x61\x74\x69\x6F\x6E","\x69\x73\x4D\x6F\x76\x65\x61\x62\x6C\x65","\x6E\x65\x69\x67\x68\x62\x6F\x75\x72\x73","\x72\x61\x64\x69\x75\x73","\x72\x61\x64\x69\x75\x73\x53\x71\x75\x61\x72\x65\x64","\x67\x65\x74\x4F\x70\x70\x6F\x73\x69\x74\x65\x73","\x72\x65\x73\x65\x74\x45\x64\x67\x65","\x63\x61\x6C\x63\x52\x65\x70\x75\x6C\x73\x69\x6F\x6E","\x63\x61\x6C\x63\x41\x74\x74\x72\x61\x63\x74\x69\x6F\x6E","\x63\x61\x6C\x63\x50\x6F\x73\x69\x74\x69\x6F\x6E\x73","\x72\x65\x64\x75\x63\x65\x54\x65\x6D\x70\x65\x72\x61\x74\x75\x72\x65","\x72\x61\x6E\x64\x6F\x6D","\x6D\x6F\x76\x65\x43\x69\x72\x63\x6C\x65","\x67\x65\x74\x52\x61\x64\x69\x75\x73","\x63\x69\x72\x63\x6C\x65","\x66\x69\x6E\x64\x50\x61\x72\x61\x6C\x6C\x65\x6C\x73","\x67\x65\x74\x45\x64\x67\x65\x49\x64","\x72\x6F\x75\x74\x65","\x6C\x61\x79\x6F\x75\x74\x73","\x6D\x61\x73\x74\x65\x72","\x70\x6C\x61\x63\x65\x4C\x61\x62\x65\x6C\x73","\x61\x76\x6F\x69\x64","\x69\x6E\x74\x65\x72\x73\x65\x63\x74\x73","\x74\x65\x6D\x70","\x6D\x61\x78\x52\x61\x6E\x6B","\x6D\x69\x6E\x52\x61\x6E\x6B","\x6E\x65\x78\x74\x4C\x61\x79\x65\x72\x43\x6F\x6E\x6E\x65\x63\x74\x65\x64\x43\x65\x6C\x6C\x73","\x70\x72\x65\x76\x69\x6F\x75\x73\x4C\x61\x79\x65\x72\x43\x6F\x6E\x6E\x65\x63\x74\x65\x64\x43\x65\x6C\x6C\x73","\x67\x65\x74\x4E\x65\x78\x74\x4C\x61\x79\x65\x72\x43\x6F\x6E\x6E\x65\x63\x74\x65\x64\x43\x65\x6C\x6C\x73","\x67\x65\x74\x50\x72\x65\x76\x69\x6F\x75\x73\x4C\x61\x79\x65\x72\x43\x6F\x6E\x6E\x65\x63\x74\x65\x64\x43\x65\x6C\x6C\x73","\x67\x65\x74\x47\x65\x6E\x65\x72\x61\x6C\x50\x75\x72\x70\x6F\x73\x65\x56\x61\x72\x69\x61\x62\x6C\x65","\x73\x65\x74\x47\x65\x6E\x65\x72\x61\x6C\x50\x75\x72\x70\x6F\x73\x65\x56\x61\x72\x69\x61\x62\x6C\x65","\x73\x65\x74\x58","\x73\x65\x74\x59","\x63\x6F\x6E\x6E\x65\x63\x74\x73\x41\x73\x54\x61\x72\x67\x65\x74","\x63\x6F\x6E\x6E\x65\x63\x74\x73\x41\x73\x53\x6F\x75\x72\x63\x65","\x68\x61\x73\x68\x43\x6F\x64\x65","\x67\x65\x74\x52\x61\x6E\x6B\x56\x61\x6C\x75\x65","\x67\x65\x74\x43\x6F\x72\x65\x43\x65\x6C\x6C","\x65\x64\x67\x65\x73","\x69\x73\x52\x65\x76\x65\x72\x73\x65\x64","\x74\x69\x67\x68\x74\x65\x6E\x54\x6F\x53\x6F\x75\x72\x63\x65","\x72\x6F\x6F\x74\x73","\x76\x65\x72\x74\x65\x78\x4D\x61\x70\x70\x65\x72","\x65\x64\x67\x65\x4D\x61\x70\x70\x65\x72","\x53\x4F\x55\x52\x43\x45\x53\x43\x41\x4E\x53\x54\x41\x52\x54\x52\x41\x4E\x4B","\x63\x72\x65\x61\x74\x65\x49\x6E\x74\x65\x72\x6E\x61\x6C\x43\x65\x6C\x6C\x73","\x72\x61\x6E\x6B\x73","\x64\x66\x73\x43\x6F\x75\x6E\x74","\x69\x6E\x69\x74\x69\x61\x6C\x52\x61\x6E\x6B","\x73\x6C\x69\x63\x65","\x66\x69\x78\x52\x61\x6E\x6B\x73","\x65\x78\x74\x65\x6E\x64\x65\x64\x44\x66\x73","\x6E\x65\x73\x74\x65\x64\x42\x65\x73\x74\x52\x61\x6E\x6B\x73","\x63\x75\x72\x72\x65\x6E\x74\x42\x65\x73\x74\x43\x72\x6F\x73\x73\x69\x6E\x67\x73","\x69\x74\x65\x72\x61\x74\x69\x6F\x6E\x73\x57\x69\x74\x68\x6F\x75\x74\x49\x6D\x70\x72\x6F\x76\x65\x6D\x65\x6E\x74","\x6D\x61\x78\x4E\x6F\x49\x6D\x70\x72\x6F\x76\x65\x6D\x65\x6E\x74\x49\x74\x65\x72\x61\x74\x69\x6F\x6E\x73","\x63\x61\x6C\x63\x75\x6C\x61\x74\x65\x43\x72\x6F\x73\x73\x69\x6E\x67\x73","\x77\x65\x69\x67\x68\x74\x65\x64\x4D\x65\x64\x69\x61\x6E","\x74\x72\x61\x6E\x73\x70\x6F\x73\x65","\x63\x61\x6C\x63\x75\x6C\x61\x74\x65\x52\x61\x6E\x6B\x43\x72\x6F\x73\x73\x69\x6E\x67","\x6D\x65\x64\x69\x61\x6E\x52\x61\x6E\x6B","\x6D\x65\x64\x69\x61\x6E\x56\x61\x6C\x75\x65","\x6C\x65\x6E\x74\x68","\x67\x65\x74\x49\x6E\x63\x6F\x6D\x69\x6E\x67\x45\x64\x67\x65\x73","\x69\x6E\x74\x72\x61\x43\x65\x6C\x6C\x53\x70\x61\x63\x69\x6E\x67","\x69\x6E\x74\x65\x72\x52\x61\x6E\x6B\x43\x65\x6C\x6C\x53\x70\x61\x63\x69\x6E\x67","\x6F\x72\x69\x65\x6E\x74\x61\x74\x69\x6F\x6E","\x69\x6E\x69\x74\x69\x61\x6C\x58","\x70\x61\x72\x61\x6C\x6C\x65\x6C\x45\x64\x67\x65\x53\x70\x61\x63\x69\x6E\x67","\x6A\x65\x74\x74\x79\x50\x6F\x73\x69\x74\x69\x6F\x6E\x73","\x6C\x69\x6D\x69\x74\x58","\x63\x75\x72\x72\x65\x6E\x74\x58\x44\x65\x6C\x74\x61","\x77\x69\x64\x65\x73\x74\x52\x61\x6E\x6B","\x72\x61\x6E\x6B\x54\x6F\x70\x59","\x72\x61\x6E\x6B\x42\x6F\x74\x74\x6F\x6D\x59","\x77\x69\x64\x65\x73\x74\x52\x61\x6E\x6B\x56\x61\x6C\x75\x65","\x72\x61\x6E\x6B\x57\x69\x64\x74\x68\x73","\x72\x61\x6E\x6B\x59","\x66\x69\x6E\x65\x54\x75\x6E\x69\x6E\x67","\x50\x4F\x4C\x59\x4C\x49\x4E\x45","\x6E\x65\x78\x74\x4C\x61\x79\x65\x72\x43\x6F\x6E\x6E\x65\x63\x74\x65\x64\x43\x61\x63\x68\x65","\x70\x72\x65\x76\x69\x6F\x75\x73\x4C\x61\x79\x65\x72\x43\x6F\x6E\x6E\x65\x63\x74\x65\x64\x43\x61\x63\x68\x65","\x70\x72\x69\x6E\x74\x53\x74\x61\x74\x75\x73","\x3D\x3D\x3D\x3D\x3D\x3D\x43\x6F\x6F\x72\x64\x20\x61\x73\x73\x69\x67\x6E\x6D\x65\x6E\x74\x20\x64\x65\x62\x75\x67\x3D\x3D\x3D\x3D\x3D\x3D\x3D","\x52\x61\x6E\x6B\x20","\x20\x3A\x20","\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D","\x69\x6E\x69\x74\x69\x61\x6C\x43\x6F\x6F\x72\x64\x73","\x6D\x69\x6E\x4E\x6F\x64\x65","\x6D\x65\x64\x69\x61\x6E\x50\x6F\x73","\x6D\x69\x6E\x50\x61\x74\x68","\x73\x65\x74\x43\x65\x6C\x6C\x4C\x6F\x63\x61\x74\x69\x6F\x6E\x73","\x6D\x65\x64\x69\x61\x6E\x58\x56\x61\x6C\x75\x65","\x72\x61\x6E\x6B\x4D\x65\x64\x69\x61\x6E\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x63\x61\x6C\x63\x75\x6C\x61\x74\x65\x64\x57\x65\x69\x67\x68\x74\x65\x64\x56\x61\x6C\x75\x65","\x63\x61\x6C\x63\x75\x6C\x61\x74\x65\x57\x69\x64\x65\x73\x74\x52\x61\x6E\x6B","\x72\x61\x6E\x6B\x43\x6F\x6F\x72\x64\x69\x6E\x61\x74\x65\x73","\x65\x64\x67\x65\x2E\x65\x64\x67\x65\x73\x20\x69\x73\x20\x6E\x75\x6C\x6C","\x41\x74\x20\x6C\x65\x61\x73\x74\x20\x6F\x6E\x65\x20\x63\x65\x6C\x6C\x20\x68\x61\x73\x20\x6E\x6F\x20\x62\x6F\x75\x6E\x64\x73","\x72\x65\x70\x6F\x73\x69\x74\x69\x6F\x6E\x56\x61\x6C\x69\x64","\x4D\x41\x58\x5F\x56\x41\x4C\x55\x45","\x4F\x52\x54\x48\x4F\x47\x4F\x4E\x41\x4C","\x43\x55\x52\x56\x45","\x73\x65\x74\x45\x64\x67\x65\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x69\x73\x50\x6F\x72\x74","\x70\x72\x6F\x63\x65\x73\x73\x52\x65\x76\x65\x72\x73\x65\x64\x45\x64\x67\x65","\x64\x65\x74\x65\x72\x6D\x69\x6E\x69\x73\x74\x69\x63","\x6D\x6F\x76\x65\x50\x61\x72\x65\x6E\x74","\x70\x61\x72\x65\x6E\x74\x42\x6F\x72\x64\x65\x72","\x69\x6E\x74\x65\x72\x48\x69\x65\x72\x61\x72\x63\x68\x79\x53\x70\x61\x63\x69\x6E\x67","\x74\x72\x61\x76\x65\x72\x73\x65\x41\x6E\x63\x65\x73\x74\x6F\x72\x73","\x65\x64\x67\x65\x73\x43\x61\x63\x68\x65","\x72\x75\x6E","\x75\x70\x64\x61\x74\x65\x47\x72\x6F\x75\x70\x42\x6F\x75\x6E\x64\x73","\x66\x69\x6E\x64\x52\x6F\x6F\x74\x73","\x63\x6F\x6E\x63\x61\x74","\x69\x73\x56\x61\x6C\x69\x64\x41\x6E\x63\x65\x73\x74\x6F\x72","\x66\x69\x6C\x74\x65\x72\x44\x65\x73\x63\x65\x6E\x64\x61\x6E\x74\x73","\x63\x79\x63\x6C\x65\x53\x74\x61\x67\x65","\x6C\x61\x79\x65\x72\x69\x6E\x67\x53\x74\x61\x67\x65","\x63\x72\x6F\x73\x73\x69\x6E\x67\x53\x74\x61\x67\x65","\x70\x6C\x61\x63\x65\x6D\x65\x6E\x74\x53\x74\x61\x67\x65","\x63\x75\x72\x72\x65\x6E\x74\x45\x64\x69\x74","\x73\x65\x74\x52\x6F\x6F\x74","\x6D\x61\x69\x6E\x74\x61\x69\x6E\x45\x64\x67\x65\x50\x61\x72\x65\x6E\x74","\x63\x72\x65\x61\x74\x65\x49\x64\x73","\x70\x6F\x73\x74\x66\x69\x78","\x6E\x65\x78\x74\x49\x64","\x75\x70\x64\x61\x74\x65\x4C\x65\x76\x65\x6C","\x65\x6E\x64\x69\x6E\x67\x55\x70\x64\x61\x74\x65","\x63\x72\x65\x61\x74\x65\x52\x6F\x6F\x74","\x69\x73\x43\x72\x65\x61\x74\x65\x49\x64\x73","\x73\x65\x74\x43\x72\x65\x61\x74\x65\x49\x64\x73","\x69\x6E\x73\x65\x72\x74","\x66\x69\x6C\x74\x65\x72\x43\x65\x6C\x6C\x73","\x67\x65\x74\x44\x65\x73\x63\x65\x6E\x64\x61\x6E\x74\x73","\x72\x6F\x6F\x74\x43\x68\x61\x6E\x67\x65\x64","\x63\x65\x6C\x6C\x41\x64\x64\x65\x64","\x69\x73\x52\x6F\x6F\x74","\x75\x70\x64\x61\x74\x65\x45\x64\x67\x65\x50\x61\x72\x65\x6E\x74\x73","\x63\x72\x65\x61\x74\x65\x49\x64","\x73\x65\x74\x49\x64","\x69\x73\x4E\x75\x6D\x65\x72\x69\x63","\x75\x70\x64\x61\x74\x65\x45\x64\x67\x65\x50\x61\x72\x65\x6E\x74","\x67\x65\x74\x4E\x65\x61\x72\x65\x73\x74\x43\x6F\x6D\x6D\x6F\x6E\x41\x6E\x63\x65\x73\x74\x6F\x72","\x67\x65\x74\x4F\x72\x69\x67\x69\x6E","\x50\x41\x54\x48\x5F\x53\x45\x50\x41\x52\x41\x54\x4F\x52","\x67\x65\x74\x50\x61\x72\x65\x6E\x74\x50\x61\x74\x68","\x70\x61\x72\x65\x6E\x74\x46\x6F\x72\x43\x65\x6C\x6C\x43\x68\x61\x6E\x67\x65\x64","\x67\x65\x74\x43\x68\x69\x6C\x64\x72\x65\x6E","\x63\x68\x69\x6C\x64\x72\x65\x6E","\x67\x65\x74\x43\x68\x69\x6C\x64\x43\x65\x6C\x6C\x73","\x67\x65\x74\x43\x68\x69\x6C\x64\x45\x64\x67\x65\x73","\x73\x65\x74\x54\x65\x72\x6D\x69\x6E\x61\x6C","\x73\x65\x74\x54\x65\x72\x6D\x69\x6E\x61\x6C\x73","\x74\x65\x72\x6D\x69\x6E\x61\x6C\x46\x6F\x72\x43\x65\x6C\x6C\x43\x68\x61\x6E\x67\x65\x64","\x69\x6E\x73\x65\x72\x74\x45\x64\x67\x65","\x72\x65\x6D\x6F\x76\x65\x45\x64\x67\x65","\x67\x65\x74\x44\x69\x72\x65\x63\x74\x65\x64\x45\x64\x67\x65\x43\x6F\x75\x6E\x74","\x67\x65\x74\x4F\x75\x74\x67\x6F\x69\x6E\x67\x45\x64\x67\x65\x73","\x67\x65\x74\x54\x6F\x70\x6D\x6F\x73\x74\x43\x65\x6C\x6C\x73","\x69\x73\x43\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65","\x73\x65\x74\x56\x61\x6C\x75\x65","\x76\x61\x6C\x75\x65\x46\x6F\x72\x43\x65\x6C\x6C\x43\x68\x61\x6E\x67\x65\x64","\x76\x61\x6C\x75\x65\x43\x68\x61\x6E\x67\x65\x64","\x67\x65\x6F\x6D\x65\x74\x72\x79\x46\x6F\x72\x43\x65\x6C\x6C\x43\x68\x61\x6E\x67\x65\x64","\x73\x74\x79\x6C\x65\x46\x6F\x72\x43\x65\x6C\x6C\x43\x68\x61\x6E\x67\x65\x64","\x69\x73\x43\x6F\x6C\x6C\x61\x70\x73\x65\x64","\x73\x65\x74\x43\x6F\x6C\x6C\x61\x70\x73\x65\x64","\x63\x6F\x6C\x6C\x61\x70\x73\x65\x64\x53\x74\x61\x74\x65\x46\x6F\x72\x43\x65\x6C\x6C\x43\x68\x61\x6E\x67\x65\x64","\x76\x69\x73\x69\x62\x6C\x65\x53\x74\x61\x74\x65\x46\x6F\x72\x43\x65\x6C\x6C\x43\x68\x61\x6E\x67\x65\x64","\x6D\x65\x72\x67\x65\x43\x68\x69\x6C\x64\x72\x65\x6E","\x6D\x65\x72\x67\x65\x43\x68\x69\x6C\x64\x72\x65\x6E\x49\x6D\x70\x6C","\x67\x65\x74\x50\x61\x72\x65\x6E\x74\x73","\x63\x6C\x6F\x6E\x65\x43\x65\x6C\x6C","\x63\x6C\x6F\x6E\x65\x43\x65\x6C\x6C\x49\x6D\x70\x6C","\x72\x65\x73\x74\x6F\x72\x65\x43\x6C\x6F\x6E\x65","\x63\x65\x6C\x6C\x43\x6C\x6F\x6E\x65\x64","\x70\x72\x65\x76\x69\x6F\x75\x73\x49\x6E\x64\x65\x78","\x69\x6E\x64\x65\x78","\x74\x65\x72\x6D\x69\x6E\x61\x6C","\x63\x6F\x6C\x6C\x61\x70\x73\x65\x64","\x61\x74\x74\x72\x69\x62\x75\x74\x65","\x6F\x6E\x49\x6E\x69\x74","\x76\x65\x72\x74\x65\x78","\x65\x64\x67\x65","\x63\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65","\x6D\x78\x54\x72\x61\x6E\x73\x69\x65\x6E\x74","\x69\x64\x20\x76\x61\x6C\x75\x65\x20\x70\x61\x72\x65\x6E\x74\x20\x73\x6F\x75\x72\x63\x65\x20\x74\x61\x72\x67\x65\x74\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x20\x65\x64\x67\x65\x73","\x73\x65\x74\x56\x65\x72\x74\x65\x78","\x73\x65\x74\x45\x64\x67\x65","\x73\x65\x74\x43\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65","\x73\x65\x74\x50\x61\x72\x65\x6E\x74","\x72\x65\x6D\x6F\x76\x65\x46\x72\x6F\x6D\x50\x61\x72\x65\x6E\x74","\x67\x65\x74\x45\x64\x67\x65\x49\x6E\x64\x65\x78","\x72\x65\x6D\x6F\x76\x65\x46\x72\x6F\x6D\x54\x65\x72\x6D\x69\x6E\x61\x6C","\x63\x6C\x6F\x6E\x65\x56\x61\x6C\x75\x65","\x54\x52\x41\x4E\x53\x4C\x41\x54\x45\x5F\x43\x4F\x4E\x54\x52\x4F\x4C\x5F\x50\x4F\x49\x4E\x54\x53","\x61\x6C\x74\x65\x72\x6E\x61\x74\x65\x42\x6F\x75\x6E\x64\x73","\x73\x6F\x75\x72\x63\x65\x50\x6F\x69\x6E\x74","\x74\x61\x72\x67\x65\x74\x50\x6F\x69\x6E\x74","\x73\x77\x61\x70","\x67\x65\x74\x54\x65\x72\x6D\x69\x6E\x61\x6C\x50\x6F\x69\x6E\x74","\x73\x65\x74\x54\x65\x72\x6D\x69\x6E\x61\x6C\x50\x6F\x69\x6E\x74","\x74\x61\x6E","\x70\x6F\x77","\x69\x6E\x74\x65\x72\x73\x65\x63\x74\x69\x6F\x6E","\x53\x54\x59\x4C\x45\x5F\x44\x49\x52\x45\x43\x54\x49\x4F\x4E","\x70\x61\x67\x65\x53\x63\x61\x6C\x65","\x70\x61\x67\x65\x46\x6F\x72\x6D\x61\x74","\x50\x72\x69\x6E\x74\x65\x72\x2D\x66\x72\x69\x65\x6E\x64\x6C\x79\x20\x76\x65\x72\x73\x69\x6F\x6E","\x70\x61\x67\x65\x53\x65\x6C\x65\x63\x74\x6F\x72","\x61\x75\x74\x6F\x4F\x72\x69\x67\x69\x6E","\x70\x72\x69\x6E\x74\x4F\x76\x65\x72\x6C\x61\x79\x73","\x77\x6E\x64","\x70\x61\x67\x65\x43\x6F\x75\x6E\x74","\x67\x65\x74\x57\x69\x6E\x64\x6F\x77","\x67\x65\x74\x44\x6F\x63\x74\x79\x70\x65","\x3C\x6D\x65\x74\x61\x20\x68\x74\x74\x70\x2D\x65\x71\x75\x69\x76\x3D\x22\x58\x2D\x55\x41\x2D\x43\x6F\x6D\x70\x61\x74\x69\x62\x6C\x65\x22\x20\x63\x6F\x6E\x74\x65\x6E\x74\x3D\x22\x49\x45\x3D\x38\x22\x3E","\x69\x6E\x69\x74\x69\x61\x6C\x69\x7A\x65\x4F\x76\x65\x72\x6C\x61\x79","\x67\x65\x74\x44\x72\x61\x77\x50\x61\x6E\x65","\x77\x72\x69\x74\x65\x48\x65\x61\x64","\x3C\x62\x6F\x64\x79\x20\x63\x6C\x61\x73\x73\x3D\x22\x6D\x78\x50\x61\x67\x65\x22\x3E","\x63\x72\x65\x61\x74\x65\x50\x61\x67\x65\x53\x65\x6C\x65\x63\x74\x6F\x72","\x70\x61\x67\x65\x42\x72\x65\x61\x6B\x41\x66\x74\x65\x72","\x61\x6C\x77\x61\x79\x73","\x6D\x78\x50\x61\x67\x65\x42\x72\x65\x61\x6B","\x67\x65\x74\x43\x6F\x76\x65\x72\x50\x61\x67\x65\x73","\x67\x65\x74\x41\x70\x70\x65\x6E\x64\x69\x63\x65\x73","\x61\x64\x64\x47\x72\x61\x70\x68\x46\x72\x61\x67\x6D\x65\x6E\x74","\x72\x65\x6E\x64\x65\x72\x50\x61\x67\x65","\x6D\x78\x50\x61\x67\x65\x2D","\x3C\x74\x69\x74\x6C\x65\x3E","\x3C\x2F\x74\x69\x74\x6C\x65\x3E","\x3C\x73\x74\x79\x6C\x65\x20\x74\x79\x70\x65\x3D\x22\x74\x65\x78\x74\x2F\x63\x73\x73\x22\x3E","\x40\x6D\x65\x64\x69\x61\x20\x70\x72\x69\x6E\x74\x20\x7B","\x20\x20\x74\x61\x62\x6C\x65\x2E\x6D\x78\x50\x61\x67\x65\x53\x65\x6C\x65\x63\x74\x6F\x72\x20\x7B\x20\x64\x69\x73\x70\x6C\x61\x79\x3A\x20\x6E\x6F\x6E\x65\x3B\x20\x7D","\x20\x20\x68\x72\x2E\x6D\x78\x50\x61\x67\x65\x42\x72\x65\x61\x6B\x20\x7B\x20\x64\x69\x73\x70\x6C\x61\x79\x3A\x20\x6E\x6F\x6E\x65\x3B\x20\x7D","\x40\x6D\x65\x64\x69\x61\x20\x73\x63\x72\x65\x65\x6E\x20\x7B","\x20\x20\x74\x61\x62\x6C\x65\x2E\x6D\x78\x50\x61\x67\x65\x53\x65\x6C\x65\x63\x74\x6F\x72\x20\x7B\x20\x70\x6F\x73\x69\x74\x69\x6F\x6E\x3A\x20\x66\x69\x78\x65\x64\x3B\x20\x72\x69\x67\x68\x74\x3A\x20\x31\x30\x70\x78\x3B\x20\x74\x6F\x70\x3A\x20\x31\x30\x70\x78\x3B\x66\x6F\x6E\x74\x2D\x66\x61\x6D\x69\x6C\x79\x3A\x20\x41\x72\x69\x61\x6C\x3B\x20\x66\x6F\x6E\x74\x2D\x73\x69\x7A\x65\x3A\x31\x30\x70\x74\x3B\x20\x62\x6F\x72\x64\x65\x72\x3A\x20\x73\x6F\x6C\x69\x64\x20\x31\x70\x78\x20\x64\x61\x72\x6B\x67\x72\x61\x79\x3B\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x3A\x20\x77\x68\x69\x74\x65\x3B\x20\x62\x6F\x72\x64\x65\x72\x2D\x63\x6F\x6C\x6C\x61\x70\x73\x65\x3A\x63\x6F\x6C\x6C\x61\x70\x73\x65\x3B\x20\x7D","\x20\x20\x74\x61\x62\x6C\x65\x2E\x6D\x78\x50\x61\x67\x65\x53\x65\x6C\x65\x63\x74\x6F\x72\x20\x74\x64\x20\x7B\x20\x62\x6F\x72\x64\x65\x72\x3A\x20\x73\x6F\x6C\x69\x64\x20\x31\x70\x78\x20\x67\x72\x61\x79\x3B\x20\x70\x61\x64\x64\x69\x6E\x67\x3A\x34\x70\x78\x3B\x20\x7D","\x20\x20\x62\x6F\x64\x79\x2E\x6D\x78\x50\x61\x67\x65\x20\x7B\x20\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x3A\x20\x67\x72\x61\x79\x3B\x20\x7D","\x3C\x2F\x73\x74\x79\x6C\x65\x3E","\x6D\x78\x50\x61\x67\x65\x53\x65\x6C\x65\x63\x74\x6F\x72","\x61","\x23\x6D\x78\x50\x61\x67\x65\x2D","\x70\x61\x67\x65\x42\x72\x65\x61\x6B\x49\x6E\x73\x69\x64\x65","\x67\x65\x74\x43\x61\x6E\x76\x61\x73","\x67\x65\x74\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x61\x6E\x65","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x61\x6E\x65","\x73\x74\x79\x6C\x65\x73","\x63\x72\x65\x61\x74\x65\x44\x65\x66\x61\x75\x6C\x74\x56\x65\x72\x74\x65\x78\x53\x74\x79\x6C\x65","\x70\x75\x74\x44\x65\x66\x61\x75\x6C\x74\x56\x65\x72\x74\x65\x78\x53\x74\x79\x6C\x65","\x63\x72\x65\x61\x74\x65\x44\x65\x66\x61\x75\x6C\x74\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x70\x75\x74\x44\x65\x66\x61\x75\x6C\x74\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x53\x54\x59\x4C\x45\x5F\x53\x48\x41\x50\x45","\x53\x48\x41\x50\x45\x5F\x52\x45\x43\x54\x41\x4E\x47\x4C\x45","\x53\x54\x59\x4C\x45\x5F\x50\x45\x52\x49\x4D\x45\x54\x45\x52","\x52\x65\x63\x74\x61\x6E\x67\x6C\x65\x50\x65\x72\x69\x6D\x65\x74\x65\x72","\x53\x54\x59\x4C\x45\x5F\x56\x45\x52\x54\x49\x43\x41\x4C\x5F\x41\x4C\x49\x47\x4E","\x53\x54\x59\x4C\x45\x5F\x41\x4C\x49\x47\x4E","\x53\x54\x59\x4C\x45\x5F\x46\x49\x4C\x4C\x43\x4F\x4C\x4F\x52","\x23\x43\x33\x44\x39\x46\x46","\x53\x54\x59\x4C\x45\x5F\x53\x54\x52\x4F\x4B\x45\x43\x4F\x4C\x4F\x52","\x23\x36\x34\x38\x32\x42\x39","\x53\x54\x59\x4C\x45\x5F\x46\x4F\x4E\x54\x43\x4F\x4C\x4F\x52","\x23\x37\x37\x34\x34\x30\x30","\x53\x48\x41\x50\x45\x5F\x43\x4F\x4E\x4E\x45\x43\x54\x4F\x52","\x23\x34\x34\x36\x32\x39\x39","\x64\x65\x66\x61\x75\x6C\x74\x56\x65\x72\x74\x65\x78","\x70\x75\x74\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65","\x64\x65\x66\x61\x75\x6C\x74\x45\x64\x67\x65","\x67\x65\x74\x44\x65\x66\x61\x75\x6C\x74\x56\x65\x72\x74\x65\x78\x53\x74\x79\x6C\x65","\x67\x65\x74\x44\x65\x66\x61\x75\x6C\x74\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x6F\x72\x69\x67\x69\x6E","\x61\x62\x73\x6F\x6C\x75\x74\x65\x4F\x66\x66\x73\x65\x74","\x69\x6E\x76\x61\x6C\x69\x64","\x69\x6E\x76\x61\x6C\x69\x64\x4F\x72\x64\x65\x72","\x6F\x72\x64\x65\x72\x43\x68\x61\x6E\x67\x65\x64","\x76\x69\x73\x69\x62\x6C\x65\x53\x6F\x75\x72\x63\x65\x53\x74\x61\x74\x65","\x76\x69\x73\x69\x62\x6C\x65\x54\x61\x72\x67\x65\x74\x53\x74\x61\x74\x65","\x74\x65\x72\x6D\x69\x6E\x61\x6C\x44\x69\x73\x74\x61\x6E\x63\x65","\x73\x65\x67\x6D\x65\x6E\x74\x73","\x67\x65\x74\x50\x65\x72\x69\x6D\x65\x74\x65\x72\x42\x6F\x75\x6E\x64\x73","\x73\x65\x74\x41\x62\x73\x6F\x6C\x75\x74\x65\x54\x65\x72\x6D\x69\x6E\x61\x6C\x50\x6F\x69\x6E\x74","\x67\x65\x74\x56\x69\x73\x69\x62\x6C\x65\x54\x65\x72\x6D\x69\x6E\x61\x6C\x53\x74\x61\x74\x65","\x73\x65\x74\x56\x69\x73\x69\x62\x6C\x65\x54\x65\x72\x6D\x69\x6E\x61\x6C\x53\x74\x61\x74\x65","\x64\x6F\x6E\x65\x52\x65\x73\x6F\x75\x72\x63\x65","\x75\x70\x64\x61\x74\x69\x6E\x67\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x52\x65\x73\x6F\x75\x72\x63\x65","\x75\x70\x64\x61\x74\x69\x6E\x67\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E","\x73\x69\x6E\x67\x6C\x65\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E","\x69\x73\x53\x69\x6E\x67\x6C\x65\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E","\x73\x65\x74\x53\x69\x6E\x67\x6C\x65\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E","\x69\x73\x53\x65\x6C\x65\x63\x74\x65\x64","\x63\x68\x61\x6E\x67\x65\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E","\x73\x65\x74\x43\x65\x6C\x6C","\x73\x65\x74\x43\x65\x6C\x6C\x73","\x67\x65\x74\x46\x69\x72\x73\x74\x53\x65\x6C\x65\x63\x74\x61\x62\x6C\x65\x43\x65\x6C\x6C","\x69\x73\x43\x65\x6C\x6C\x53\x65\x6C\x65\x63\x74\x61\x62\x6C\x65","\x61\x64\x64\x43\x65\x6C\x6C","\x72\x65\x6D\x6F\x76\x65\x43\x65\x6C\x6C","\x73\x65\x6C\x65\x63\x74\x69\x6F\x6E\x4D\x6F\x64\x65\x6C","\x61\x64\x64\x65\x64","\x72\x65\x6D\x6F\x76\x65\x64","\x6D\x78\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x68\x61\x6E\x67\x65\x2E\x65\x78\x65\x63\x75\x74\x65","\x65\x6E\x74\x65\x72","\x6C\x65\x61\x76\x65","\x65\x64\x69\x74\x69\x6E\x67\x43\x65\x6C\x6C","\x74\x72\x69\x67\x67\x65\x72","\x6D\x6F\x64\x69\x66\x69\x65\x64","\x61\x75\x74\x6F\x53\x69\x7A\x65","\x65\x6D\x70\x74\x79\x4C\x61\x62\x65\x6C\x54\x65\x78\x74","\x74\x65\x78\x74\x4E\x6F\x64\x65","\x6D\x78\x43\x65\x6C\x6C\x45\x64\x69\x74\x6F\x72","\x63\x6F\x6C\x73","\x32\x30","\x34","\x62\x6C\x75\x72","\x66\x6F\x63\x75\x73\x4C\x6F\x73\x74","\x6B\x65\x79\x64\x6F\x77\x6E","\x6B\x65\x79\x43\x6F\x64\x65","\x69\x73\x45\x6E\x74\x65\x72\x53\x74\x6F\x70\x73\x43\x65\x6C\x6C\x45\x64\x69\x74\x69\x6E\x67","\x73\x74\x6F\x70\x45\x64\x69\x74\x69\x6E\x67","\x63\x6C\x65\x61\x72\x4F\x6E\x43\x68\x61\x6E\x67\x65","\x73\x65\x74\x4D\x6F\x64\x69\x66\x69\x65\x64","\x6B\x65\x79\x70\x72\x65\x73\x73","\x69\x73\x4C\x61\x62\x65\x6C\x43\x6C\x69\x70\x70\x65\x64","\x69\x73\x57\x72\x61\x70\x70\x69\x6E\x67","\x41\x4C\x49\x47\x4E\x5F\x4C\x45\x46\x54","\x69\x73\x4D\x6F\x64\x69\x66\x69\x65\x64","\x69\x73\x49\x6E\x76\x6F\x6B\x65\x73\x53\x74\x6F\x70\x43\x65\x6C\x6C\x45\x64\x69\x74\x69\x6E\x67","\x69\x73\x48\x69\x64\x65\x4C\x61\x62\x65\x6C","\x6F\x75\x74\x6C\x69\x6E\x65","\x67\x65\x74\x45\x64\x69\x74\x6F\x72\x42\x6F\x75\x6E\x64\x73","\x67\x65\x74\x49\x6E\x69\x74\x69\x61\x6C\x56\x61\x6C\x75\x65","\x67\x65\x74\x45\x6D\x70\x74\x79\x4C\x61\x62\x65\x6C\x54\x65\x78\x74","\x63\x72\x65\x61\x74\x65\x54\x65\x78\x74\x44\x69\x76","\x67\x65\x74\x43\x75\x72\x72\x65\x6E\x74\x56\x61\x6C\x75\x65","\x67\x65\x74\x45\x64\x69\x74\x69\x6E\x67\x56\x61\x6C\x75\x65","\x53\x54\x59\x4C\x45\x5F\x53\x50\x41\x43\x49\x4E\x47","\x53\x54\x59\x4C\x45\x5F\x53\x50\x41\x43\x49\x4E\x47\x5F\x54\x4F\x50","\x53\x54\x59\x4C\x45\x5F\x53\x50\x41\x43\x49\x4E\x47\x5F\x52\x49\x47\x48\x54","\x53\x54\x59\x4C\x45\x5F\x53\x50\x41\x43\x49\x4E\x47\x5F\x42\x4F\x54\x54\x4F\x4D","\x53\x54\x59\x4C\x45\x5F\x53\x50\x41\x43\x49\x4E\x47\x5F\x4C\x45\x46\x54","\x67\x65\x74\x45\x64\x69\x74\x69\x6E\x67\x43\x65\x6C\x6C","\x64\x65\x66\x61\x75\x6C\x74\x45\x64\x67\x65\x53\x68\x61\x70\x65","\x64\x65\x66\x61\x75\x6C\x74\x56\x65\x72\x74\x65\x78\x53\x68\x61\x70\x65","\x64\x65\x66\x61\x75\x6C\x74\x54\x65\x78\x74\x53\x68\x61\x70\x65","\x6C\x65\x67\x61\x63\x79\x43\x6F\x6E\x74\x72\x6F\x6C\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x64\x65\x66\x61\x75\x6C\x74\x53\x68\x61\x70\x65\x73","\x72\x65\x67\x69\x73\x74\x65\x72\x53\x68\x61\x70\x65","\x69\x6E\x69\x74\x69\x61\x6C\x69\x7A\x65","\x63\x72\x65\x61\x74\x65\x53\x68\x61\x70\x65","\x69\x6E\x69\x74\x69\x61\x6C\x69\x7A\x65\x53\x68\x61\x70\x65","\x6F\x72\x64\x65\x72\x65\x64","\x6B\x65\x65\x70\x45\x64\x67\x65\x73\x49\x6E\x46\x6F\x72\x65\x67\x72\x6F\x75\x6E\x64","\x66\x69\x72\x73\x74\x45\x64\x67\x65","\x69\x6E\x73\x65\x72\x74\x53\x74\x61\x74\x65","\x63\x72\x65\x61\x74\x65\x43\x65\x6C\x6C\x4F\x76\x65\x72\x6C\x61\x79\x73","\x69\x6E\x73\x74\x61\x6C\x6C\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x67\x65\x74\x50\x72\x65\x76\x69\x6F\x75\x73\x53\x74\x61\x74\x65\x49\x6E\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x66\x69\x6E\x64\x50\x72\x65\x76\x69\x6F\x75\x73\x53\x74\x61\x74\x65\x49\x6E\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x6F\x72\x64\x65\x72","\x6F\x72\x64\x65\x72\x45\x64\x67\x65","\x6B\x65\x65\x70\x45\x64\x67\x65\x73\x49\x6E\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64","\x67\x65\x74\x53\x68\x61\x70\x65\x43\x6F\x6E\x73\x74\x72\x75\x63\x74\x6F\x72","\x63\x6F\x6E\x66\x69\x67\x75\x72\x65\x53\x68\x61\x70\x65","\x67\x65\x74\x53\x68\x61\x70\x65","\x67\x65\x74\x49\x6E\x64\x69\x63\x61\x74\x6F\x72\x53\x68\x61\x70\x65","\x67\x65\x74\x49\x6E\x64\x69\x63\x61\x74\x6F\x72\x43\x6F\x6C\x6F\x72","\x67\x65\x74\x49\x6E\x64\x69\x63\x61\x74\x6F\x72\x47\x72\x61\x64\x69\x65\x6E\x74\x43\x6F\x6C\x6F\x72","\x53\x54\x59\x4C\x45\x5F\x49\x4E\x44\x49\x43\x41\x54\x4F\x52\x5F\x44\x49\x52\x45\x43\x54\x49\x4F\x4E","\x67\x65\x74\x49\x6E\x64\x69\x63\x61\x74\x6F\x72\x49\x6D\x61\x67\x65","\x70\x6F\x73\x74\x43\x6F\x6E\x66\x69\x67\x75\x72\x65\x53\x68\x61\x70\x65","\x72\x65\x73\x6F\x6C\x76\x65\x43\x6F\x6C\x6F\x72","\x67\x65\x74\x53\x77\x69\x6D\x6C\x61\x6E\x65","\x73\x77\x69\x6D\x6C\x61\x6E\x65\x49\x6E\x64\x69\x63\x61\x74\x6F\x72\x43\x6F\x6C\x6F\x72\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x69\x6E\x64\x69\x63\x61\x74\x65\x64","\x67\x65\x74\x4C\x61\x62\x65\x6C\x56\x61\x6C\x75\x65","\x67\x65\x74\x4C\x61\x62\x65\x6C","\x63\x72\x65\x61\x74\x65\x4C\x61\x62\x65\x6C","\x53\x54\x59\x4C\x45\x5F\x46\x4F\x4E\x54\x53\x49\x5A\x45","\x69\x73\x48\x74\x6D\x6C\x4C\x61\x62\x65\x6C","\x67\x65\x74\x56\x65\x72\x74\x69\x63\x61\x6C\x41\x6C\x69\x67\x6E","\x53\x54\x59\x4C\x45\x5F\x46\x4F\x4E\x54\x46\x41\x4D\x49\x4C\x59","\x53\x54\x59\x4C\x45\x5F\x46\x4F\x4E\x54\x53\x54\x59\x4C\x45","\x53\x54\x59\x4C\x45\x5F\x48\x4F\x52\x49\x5A\x4F\x4E\x54\x41\x4C","\x53\x54\x59\x4C\x45\x5F\x4C\x41\x42\x45\x4C\x5F\x42\x41\x43\x4B\x47\x52\x4F\x55\x4E\x44\x43\x4F\x4C\x4F\x52","\x53\x54\x59\x4C\x45\x5F\x4C\x41\x42\x45\x4C\x5F\x42\x4F\x52\x44\x45\x52\x43\x4F\x4C\x4F\x52","\x53\x54\x59\x4C\x45\x5F\x4F\x56\x45\x52\x46\x4C\x4F\x57","\x53\x54\x59\x4C\x45\x5F\x4C\x41\x42\x45\x4C\x5F\x50\x41\x44\x44\x49\x4E\x47","\x69\x6E\x69\x74\x69\x61\x6C\x69\x7A\x65\x4C\x61\x62\x65\x6C","\x63\x6F\x6E\x76\x65\x72\x74\x50\x6F\x69\x6E\x74","\x69\x73\x4C\x61\x62\x65\x6C\x45\x76\x65\x6E\x74","\x49\x4D\x47","\x4E\x4F\x5F\x46\x4F","\x67\x65\x74\x43\x65\x6C\x6C\x4F\x76\x65\x72\x6C\x61\x79\x73","\x6F\x76\x65\x72\x6C\x61\x79","\x69\x6E\x73\x74\x61\x6C\x6C\x43\x65\x6C\x6C\x4F\x76\x65\x72\x6C\x61\x79\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x69\x73\x45\x64\x69\x74\x69\x6E\x67","\x63\x72\x65\x61\x74\x65\x43\x6F\x6E\x74\x72\x6F\x6C","\x67\x65\x74\x46\x6F\x6C\x64\x69\x6E\x67\x49\x6D\x61\x67\x65","\x66\x6F\x6C\x64\x69\x6E\x67\x45\x6E\x61\x62\x6C\x65\x64","\x63\x6F\x6E\x74\x72\x6F\x6C","\x69\x6E\x69\x74\x43\x6F\x6E\x74\x72\x6F\x6C","\x44\x49\x41\x4C\x45\x43\x54\x5F\x50\x52\x45\x46\x45\x52\x48\x54\x4D\x4C","\x69\x6E\x6E\x65\x72\x4E\x6F\x64\x65","\x69\x73\x53\x68\x61\x70\x65\x45\x76\x65\x6E\x74","\x67\x65\x73\x74\x75\x72\x65\x73\x74\x61\x72\x74","\x6C\x61\x73\x74\x54\x6F\x75\x63\x68\x54\x69\x6D\x65","\x67\x65\x73\x74\x75\x72\x65\x65\x6E\x64","\x67\x65\x73\x74\x75\x72\x65\x45\x6E\x61\x62\x6C\x65\x64","\x68\x61\x6E\x64\x6C\x65\x47\x65\x73\x74\x75\x72\x65","\x72\x65\x64\x72\x61\x77\x4C\x61\x62\x65\x6C","\x67\x65\x74\x4C\x61\x62\x65\x6C\x42\x6F\x75\x6E\x64\x73","\x69\x73\x43\x6C\x69\x70\x70\x69\x6E\x67","\x67\x65\x74\x54\x65\x78\x74\x53\x63\x61\x6C\x65","\x72\x6F\x74\x61\x74\x65\x4C\x61\x62\x65\x6C\x42\x6F\x75\x6E\x64\x73","\x72\x65\x64\x72\x61\x77\x43\x65\x6C\x6C\x4F\x76\x65\x72\x6C\x61\x79\x73","\x72\x65\x64\x72\x61\x77\x43\x6F\x6E\x74\x72\x6F\x6C","\x67\x65\x74\x43\x6F\x6E\x74\x72\x6F\x6C\x42\x6F\x75\x6E\x64\x73","\x65\x71\x75\x61\x6C\x45\x6E\x74\x72\x69\x65\x73","\x65\x71\x75\x61\x6C\x50\x6F\x69\x6E\x74\x73","\x67\x65\x74\x50\x6F\x72\x74\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74\x73","\x67\x65\x74\x52\x6F\x75\x74\x69\x6E\x67\x43\x65\x6E\x74\x65\x72\x59","\x74\x72\x61\x6E\x73\x66\x6F\x72\x6D\x43\x6F\x6E\x74\x72\x6F\x6C\x50\x6F\x69\x6E\x74","\x67\x65\x74\x52\x6F\x75\x74\x69\x6E\x67\x43\x65\x6E\x74\x65\x72\x58","\x53\x54\x59\x4C\x45\x5F\x45\x4C\x42\x4F\x57","\x45\x4C\x42\x4F\x57\x5F\x56\x45\x52\x54\x49\x43\x41\x4C","\x6F\x72\x74\x68\x42\x75\x66\x66\x65\x72","\x44\x49\x52\x45\x43\x54\x49\x4F\x4E\x5F\x4D\x41\x53\x4B\x5F\x41\x4C\x4C","\x6C\x69\x6D\x69\x74\x73","\x76\x65\x72\x74\x65\x78\x53\x65\x70\x65\x72\x61\x74\x69\x6F\x6E\x73","\x72\x65\x76\x65\x72\x73\x65\x50\x6F\x72\x74\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74\x73","\x72\x6F\x75\x74\x65\x50\x61\x74\x74\x65\x72\x6E\x73","\x77\x61\x79\x50\x6F\x69\x6E\x74\x73\x31","\x64\x69\x72\x56\x65\x63\x74\x6F\x72\x73","\x54\x41\x52\x47\x45\x54\x5F\x4D\x41\x53\x4B","\x53\x4F\x55\x52\x43\x45\x5F\x4D\x41\x53\x4B","\x53\x49\x44\x45\x5F\x4D\x41\x53\x4B","\x43\x45\x4E\x54\x45\x52\x5F\x4D\x41\x53\x4B","\x76\x61\x6C\x75\x65\x73","\x70\x75\x74\x56\x61\x6C\x75\x65","\x67\x72\x61\x70\x68\x42\x6F\x75\x6E\x64\x73","\x45\x4D\x50\x54\x59\x5F\x50\x4F\x49\x4E\x54","\x75\x70\x64\x61\x74\x69\x6E\x67\x44\x6F\x63\x75\x6D\x65\x6E\x74\x52\x65\x73\x6F\x75\x72\x63\x65","\x75\x70\x64\x61\x74\x69\x6E\x67\x44\x6F\x63\x75\x6D\x65\x6E\x74","\x61\x6C\x6C\x6F\x77\x45\x76\x61\x6C","\x63\x61\x70\x74\x75\x72\x65\x44\x6F\x63\x75\x6D\x65\x6E\x74\x47\x65\x73\x74\x75\x72\x65","\x6F\x70\x74\x69\x6D\x69\x7A\x65\x56\x6D\x6C\x52\x65\x66\x6C\x6F\x77\x73","\x72\x65\x6E\x64\x65\x72\x69\x6E\x67","\x75\x70\x64\x61\x74\x65\x53\x74\x79\x6C\x65","\x73\x65\x74\x47\x72\x61\x70\x68\x42\x6F\x75\x6E\x64\x73","\x73\x65\x74\x43\x75\x72\x72\x65\x6E\x74\x52\x6F\x6F\x74","\x73\x69\x7A\x65\x44\x69\x64\x43\x68\x61\x6E\x67\x65","\x72\x65\x76\x61\x6C\x69\x64\x61\x74\x65","\x70\x72\x65\x76\x69\x6F\x75\x73\x53\x63\x61\x6C\x65","\x70\x72\x65\x76\x69\x6F\x75\x73\x54\x72\x61\x6E\x73\x6C\x61\x74\x65","\x73\x65\x74\x53\x63\x61\x6C\x65","\x69\x6E\x76\x61\x6C\x69\x64\x61\x74\x65","\x76\x61\x6C\x69\x64\x61\x74\x65","\x72\x65\x6D\x6F\x76\x65\x53\x74\x61\x74\x65","\x6D\x78\x47\x72\x61\x70\x68\x56\x69\x65\x77\x2E\x76\x61\x6C\x69\x64\x61\x74\x65","\x76\x61\x6C\x69\x64\x61\x74\x65\x42\x6F\x75\x6E\x64\x73","\x76\x61\x6C\x69\x64\x61\x74\x65\x50\x6F\x69\x6E\x74\x73","\x76\x61\x6C\x69\x64\x61\x74\x65\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64","\x63\x72\x65\x61\x74\x65\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x61\x67\x65\x53\x68\x61\x70\x65","\x67\x65\x74\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x49\x6D\x61\x67\x65","\x72\x65\x64\x72\x61\x77\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x49\x6D\x61\x67\x65","\x70\x61\x67\x65\x56\x69\x73\x69\x62\x6C\x65","\x67\x65\x74\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x61\x67\x65\x42\x6F\x75\x6E\x64\x73","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x61\x67\x65\x53\x68\x61\x70\x65","\x74\x6F\x6F\x6C\x74\x69\x70\x48\x61\x6E\x64\x6C\x65\x72","\x69\x73\x48\x69\x64\x65\x4F\x6E\x48\x6F\x76\x65\x72","\x53\x54\x59\x4C\x45\x5F\x52\x4F\x54\x41\x54\x49\x4F\x4E","\x75\x70\x64\x61\x74\x65\x56\x65\x72\x74\x65\x78\x4C\x61\x62\x65\x6C\x4F\x66\x66\x73\x65\x74","\x67\x65\x74\x43\x68\x69\x6C\x64\x4F\x66\x66\x73\x65\x74\x46\x6F\x72\x43\x65\x6C\x6C","\x75\x70\x64\x61\x74\x65\x46\x69\x78\x65\x64\x54\x65\x72\x6D\x69\x6E\x61\x6C\x50\x6F\x69\x6E\x74\x73","\x75\x70\x64\x61\x74\x65\x50\x6F\x69\x6E\x74\x73","\x75\x70\x64\x61\x74\x65\x46\x6C\x6F\x61\x74\x69\x6E\x67\x54\x65\x72\x6D\x69\x6E\x61\x6C\x50\x6F\x69\x6E\x74\x73","\x75\x70\x64\x61\x74\x65\x45\x64\x67\x65\x42\x6F\x75\x6E\x64\x73","\x75\x70\x64\x61\x74\x65\x45\x64\x67\x65\x4C\x61\x62\x65\x6C\x4F\x66\x66\x73\x65\x74","\x63\x68\x69\x6C\x64\x4D\x6F\x76\x65\x64","\x69\x73\x52\x65\x6E\x64\x65\x72\x69\x6E\x67","\x67\x65\x74\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74","\x75\x70\x64\x61\x74\x65\x46\x69\x78\x65\x64\x54\x65\x72\x6D\x69\x6E\x61\x6C\x50\x6F\x69\x6E\x74","\x67\x65\x74\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x50\x6F\x69\x6E\x74","\x67\x65\x74\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x67\x65\x74\x54\x65\x72\x6D\x69\x6E\x61\x6C\x50\x6F\x72\x74","\x64\x65\x66\x61\x75\x6C\x74\x4C\x6F\x6F\x70\x53\x74\x79\x6C\x65","\x53\x54\x59\x4C\x45\x5F\x45\x44\x47\x45","\x69\x73\x41\x6C\x6C\x6F\x77\x45\x76\x61\x6C","\x75\x70\x64\x61\x74\x65\x46\x6C\x6F\x61\x74\x69\x6E\x67\x54\x65\x72\x6D\x69\x6E\x61\x6C\x50\x6F\x69\x6E\x74","\x67\x65\x74\x4E\x65\x78\x74\x50\x6F\x69\x6E\x74","\x69\x73\x4F\x72\x74\x68\x6F\x67\x6F\x6E\x61\x6C","\x53\x54\x59\x4C\x45\x5F\x50\x45\x52\x49\x4D\x45\x54\x45\x52\x5F\x53\x50\x41\x43\x49\x4E\x47","\x53\x54\x59\x4C\x45\x5F\x53\x4F\x55\x52\x43\x45\x5F\x50\x45\x52\x49\x4D\x45\x54\x45\x52\x5F\x53\x50\x41\x43\x49\x4E\x47","\x53\x54\x59\x4C\x45\x5F\x54\x41\x52\x47\x45\x54\x5F\x50\x45\x52\x49\x4D\x45\x54\x45\x52\x5F\x53\x50\x41\x43\x49\x4E\x47","\x67\x65\x74\x50\x65\x72\x69\x6D\x65\x74\x65\x72\x50\x6F\x69\x6E\x74","\x53\x54\x59\x4C\x45\x5F\x53\x4F\x55\x52\x43\x45\x5F\x50\x4F\x52\x54","\x53\x54\x59\x4C\x45\x5F\x54\x41\x52\x47\x45\x54\x5F\x50\x4F\x52\x54","\x67\x65\x74\x50\x65\x72\x69\x6D\x65\x74\x65\x72\x46\x75\x6E\x63\x74\x69\x6F\x6E","\x53\x54\x59\x4C\x45\x5F\x52\x4F\x55\x54\x49\x4E\x47\x5F\x43\x45\x4E\x54\x45\x52\x5F\x58","\x53\x54\x59\x4C\x45\x5F\x52\x4F\x55\x54\x49\x4E\x47\x5F\x43\x45\x4E\x54\x45\x52\x5F\x59","\x67\x65\x74\x52\x65\x6C\x61\x74\x69\x76\x65\x50\x6F\x69\x6E\x74","\x72\x65\x6C\x61\x74\x69\x76\x65\x43\x63\x77","\x73\x65\x74\x52\x65\x6E\x64\x65\x72\x69\x6E\x67","\x73\x65\x74\x41\x6C\x6C\x6F\x77\x45\x76\x61\x6C","\x67\x65\x74\x53\x74\x61\x74\x65\x73","\x67\x65\x74\x43\x65\x6C\x6C\x53\x74\x61\x74\x65\x73","\x69\x73\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72\x45\x76\x65\x6E\x74","\x69\x73\x53\x63\x72\x6F\x6C\x6C\x45\x76\x65\x6E\x74","\x70\x61\x6E\x6E\x69\x6E\x67\x48\x61\x6E\x64\x6C\x65\x72","\x6D\x6F\x76\x65\x48\x61\x6E\x64\x6C\x65\x72","\x65\x6E\x64\x48\x61\x6E\x64\x6C\x65\x72","\x63\x72\x65\x61\x74\x65\x48\x74\x6D\x6C\x50\x61\x6E\x65","\x75\x70\x64\x61\x74\x65\x48\x74\x6D\x6C\x43\x61\x6E\x76\x61\x73\x53\x69\x7A\x65","\x63\x72\x65\x61\x74\x65\x56\x6D\x6C\x50\x61\x6E\x65","\x63\x6F\x6F\x72\x64\x6F\x72\x69\x67\x69\x6E","\x30\x2C\x30","\x73\x74\x61\x74\x69\x63","\x69\x73\x55\x70","\x67\x65\x74\x54\x72\x61\x6E\x73\x6C\x61\x74\x65\x46\x6F\x72\x52\x6F\x6F\x74","\x55\x50","\x44\x4F\x57\x4E","\x6D\x6F\x75\x73\x65\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x72\x65\x6E\x64\x65\x72\x48\x69\x6E\x74","\x52\x45\x4E\x44\x45\x52\x49\x4E\x47\x5F\x48\x49\x4E\x54\x5F\x45\x58\x41\x43\x54","\x52\x45\x4E\x44\x45\x52\x49\x4E\x47\x5F\x48\x49\x4E\x54\x5F\x46\x41\x53\x54\x45\x53\x54","\x52\x45\x4E\x44\x45\x52\x49\x4E\x47\x5F\x48\x49\x4E\x54\x5F\x46\x41\x53\x54\x45\x52","\x44\x49\x41\x4C\x45\x43\x54\x5F\x4D\x49\x58\x45\x44\x48\x54\x4D\x4C","\x6D\x75\x6C\x74\x69\x70\x6C\x69\x63\x69\x74\x69\x65\x73","\x69\x6D\x61\x67\x65\x42\x75\x6E\x64\x6C\x65\x73","\x63\x72\x65\x61\x74\x65\x43\x65\x6C\x6C\x52\x65\x6E\x64\x65\x72\x65\x72","\x63\x72\x65\x61\x74\x65\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x4D\x6F\x64\x65\x6C","\x73\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x4D\x6F\x64\x65\x6C","\x63\x72\x65\x61\x74\x65\x53\x74\x79\x6C\x65\x73\x68\x65\x65\x74","\x73\x65\x74\x53\x74\x79\x6C\x65\x73\x68\x65\x65\x74","\x63\x72\x65\x61\x74\x65\x47\x72\x61\x70\x68\x56\x69\x65\x77","\x67\x72\x61\x70\x68\x4D\x6F\x64\x65\x6C\x43\x68\x61\x6E\x67\x65\x4C\x69\x73\x74\x65\x6E\x65\x72","\x63\x72\x65\x61\x74\x65\x48\x61\x6E\x64\x6C\x65\x72\x73","\x2F\x72\x65\x73\x6F\x75\x72\x63\x65\x73\x2F\x67\x72\x61\x70\x68","\x45\x4D\x50\x54\x59\x5F\x41\x52\x52\x41\x59","\x63\x65\x6C\x6C\x45\x64\x69\x74\x6F\x72","\x70\x6F\x72\x74\x73\x45\x6E\x61\x62\x6C\x65\x64","\x64\x6F\x75\x62\x6C\x65\x54\x61\x70\x45\x6E\x61\x62\x6C\x65\x64","\x64\x6F\x75\x62\x6C\x65\x54\x61\x70\x54\x69\x6D\x65\x6F\x75\x74","\x64\x6F\x75\x62\x6C\x65\x54\x61\x70\x54\x6F\x6C\x65\x72\x61\x6E\x63\x65","\x6C\x61\x73\x74\x54\x6F\x75\x63\x68\x59","\x74\x6F\x6C\x65\x72\x61\x6E\x63\x65","\x64\x65\x66\x61\x75\x6C\x74\x4F\x76\x65\x72\x6C\x61\x70","\x64\x65\x66\x61\x75\x6C\x74\x50\x61\x72\x65\x6E\x74","\x61\x6C\x74\x65\x72\x6E\x61\x74\x65\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x70\x61\x67\x65\x42\x72\x65\x61\x6B\x73\x56\x69\x73\x69\x62\x6C\x65","\x70\x61\x67\x65\x42\x72\x65\x61\x6B\x43\x6F\x6C\x6F\x72","\x70\x61\x67\x65\x42\x72\x65\x61\x6B\x44\x61\x73\x68\x65\x64","\x6D\x69\x6E\x50\x61\x67\x65\x42\x72\x65\x61\x6B\x44\x69\x73\x74","\x70\x72\x65\x66\x65\x72\x50\x61\x67\x65\x53\x69\x7A\x65","\x65\x73\x63\x61\x70\x65\x45\x6E\x61\x62\x6C\x65\x64","\x69\x6E\x76\x6F\x6B\x65\x73\x53\x74\x6F\x70\x43\x65\x6C\x6C\x45\x64\x69\x74\x69\x6E\x67","\x65\x6E\x74\x65\x72\x53\x74\x6F\x70\x73\x43\x65\x6C\x6C\x45\x64\x69\x74\x69\x6E\x67","\x75\x73\x65\x53\x63\x72\x6F\x6C\x6C\x62\x61\x72\x73\x46\x6F\x72\x50\x61\x6E\x6E\x69\x6E\x67","\x65\x78\x70\x6F\x72\x74\x45\x6E\x61\x62\x6C\x65\x64","\x69\x6D\x70\x6F\x72\x74\x45\x6E\x61\x62\x6C\x65\x64","\x63\x65\x6C\x6C\x73\x4C\x6F\x63\x6B\x65\x64","\x63\x65\x6C\x6C\x73\x43\x6C\x6F\x6E\x65\x61\x62\x6C\x65","\x63\x65\x6C\x6C\x73\x45\x64\x69\x74\x61\x62\x6C\x65","\x63\x65\x6C\x6C\x73\x44\x65\x6C\x65\x74\x61\x62\x6C\x65","\x63\x65\x6C\x6C\x73\x4D\x6F\x76\x61\x62\x6C\x65","\x65\x64\x67\x65\x4C\x61\x62\x65\x6C\x73\x4D\x6F\x76\x61\x62\x6C\x65","\x76\x65\x72\x74\x65\x78\x4C\x61\x62\x65\x6C\x73\x4D\x6F\x76\x61\x62\x6C\x65","\x64\x72\x6F\x70\x45\x6E\x61\x62\x6C\x65\x64","\x73\x70\x6C\x69\x74\x45\x6E\x61\x62\x6C\x65\x64","\x63\x65\x6C\x6C\x73\x52\x65\x73\x69\x7A\x61\x62\x6C\x65","\x63\x65\x6C\x6C\x73\x42\x65\x6E\x64\x61\x62\x6C\x65","\x63\x65\x6C\x6C\x73\x53\x65\x6C\x65\x63\x74\x61\x62\x6C\x65","\x63\x65\x6C\x6C\x73\x44\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65","\x61\x75\x74\x6F\x53\x69\x7A\x65\x43\x65\x6C\x6C\x73","\x74\x69\x6D\x65\x72\x41\x75\x74\x6F\x53\x63\x72\x6F\x6C\x6C","\x61\x6C\x6C\x6F\x77\x41\x75\x74\x6F\x50\x61\x6E\x6E\x69\x6E\x67","\x69\x67\x6E\x6F\x72\x65\x53\x63\x72\x6F\x6C\x6C\x62\x61\x72\x73","\x6D\x61\x78\x69\x6D\x75\x6D\x47\x72\x61\x70\x68\x42\x6F\x75\x6E\x64\x73","\x6D\x69\x6E\x69\x6D\x75\x6D\x47\x72\x61\x70\x68\x53\x69\x7A\x65","\x6D\x69\x6E\x69\x6D\x75\x6D\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72\x53\x69\x7A\x65","\x6D\x61\x78\x69\x6D\x75\x6D\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72\x53\x69\x7A\x65","\x72\x65\x73\x69\x7A\x65\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x61\x6C\x6C\x6F\x77\x4E\x65\x67\x61\x74\x69\x76\x65\x43\x6F\x6F\x72\x64\x69\x6E\x61\x74\x65\x73","\x63\x6F\x6E\x73\x74\x72\x61\x69\x6E\x43\x68\x69\x6C\x64\x72\x65\x6E","\x65\x78\x74\x65\x6E\x64\x50\x61\x72\x65\x6E\x74\x73","\x65\x78\x74\x65\x6E\x64\x50\x61\x72\x65\x6E\x74\x73\x4F\x6E\x41\x64\x64","\x63\x6F\x6C\x6C\x61\x70\x73\x65\x54\x6F\x50\x72\x65\x66\x65\x72\x72\x65\x64\x53\x69\x7A\x65","\x7A\x6F\x6F\x6D\x46\x61\x63\x74\x6F\x72","\x6B\x65\x65\x70\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x56\x69\x73\x69\x62\x6C\x65\x4F\x6E\x5A\x6F\x6F\x6D","\x63\x65\x6E\x74\x65\x72\x5A\x6F\x6F\x6D","\x72\x65\x73\x65\x74\x56\x69\x65\x77\x4F\x6E\x52\x6F\x6F\x74\x43\x68\x61\x6E\x67\x65","\x72\x65\x73\x65\x74\x45\x64\x67\x65\x73\x4F\x6E\x52\x65\x73\x69\x7A\x65","\x72\x65\x73\x65\x74\x45\x64\x67\x65\x73\x4F\x6E\x4D\x6F\x76\x65","\x72\x65\x73\x65\x74\x45\x64\x67\x65\x73\x4F\x6E\x43\x6F\x6E\x6E\x65\x63\x74","\x61\x6C\x6C\x6F\x77\x4C\x6F\x6F\x70\x73","\x4C\x6F\x6F\x70","\x6D\x75\x6C\x74\x69\x67\x72\x61\x70\x68","\x63\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65\x45\x64\x67\x65\x73","\x61\x6C\x6C\x6F\x77\x44\x61\x6E\x67\x6C\x69\x6E\x67\x45\x64\x67\x65\x73","\x63\x6C\x6F\x6E\x65\x49\x6E\x76\x61\x6C\x69\x64\x45\x64\x67\x65\x73","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x4F\x6E\x4D\x6F\x76\x65","\x6C\x61\x62\x65\x6C\x73\x56\x69\x73\x69\x62\x6C\x65","\x68\x74\x6D\x6C\x4C\x61\x62\x65\x6C\x73","\x73\x77\x69\x6D\x6C\x61\x6E\x65\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x45\x6E\x61\x62\x6C\x65\x64","\x73\x77\x69\x6D\x6C\x61\x6E\x65\x4E\x65\x73\x74\x69\x6E\x67","\x6D\x69\x6E\x46\x69\x74\x53\x63\x61\x6C\x65","\x6D\x61\x78\x46\x69\x74\x53\x63\x61\x6C\x65","\x63\x6F\x6C\x6C\x61\x70\x73\x65\x64\x49\x6D\x61\x67\x65","\x2F\x63\x6F\x6C\x6C\x61\x70\x73\x65\x64\x2E\x67\x69\x66","\x65\x78\x70\x61\x6E\x64\x65\x64\x49\x6D\x61\x67\x65","\x2F\x65\x78\x70\x61\x6E\x64\x65\x64\x2E\x67\x69\x66","\x77\x61\x72\x6E\x69\x6E\x67\x49\x6D\x61\x67\x65","\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x6D\x78\x67\x72\x61\x70\x68\x2F\x69\x6D\x61\x67\x65\x73\x2F\x77\x61\x72\x6E\x69\x6E\x67\x2E\x67\x69\x66","\x61\x6C\x72\x65\x61\x64\x79\x43\x6F\x6E\x6E\x65\x63\x74\x65\x64\x52\x65\x73\x6F\x75\x72\x63\x65","\x61\x6C\x72\x65\x61\x64\x79\x43\x6F\x6E\x6E\x65\x63\x74\x65\x64","\x63\x6F\x6E\x74\x61\x69\x6E\x73\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E\x45\x72\x72\x6F\x72\x73\x52\x65\x73\x6F\x75\x72\x63\x65","\x63\x6F\x6E\x74\x61\x69\x6E\x73\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E\x45\x72\x72\x6F\x72\x73","\x63\x6F\x6C\x6C\x61\x70\x73\x65\x45\x78\x70\x61\x6E\x64\x52\x65\x73\x6F\x75\x72\x63\x65","\x63\x6F\x6C\x6C\x61\x70\x73\x65\x2D\x65\x78\x70\x61\x6E\x64","\x63\x72\x65\x61\x74\x65\x43\x65\x6C\x6C\x45\x64\x69\x74\x6F\x72","\x75\x6E\x6C\x6F\x61\x64","\x73\x65\x6C\x65\x63\x74\x73\x74\x61\x72\x74","\x3C\x76\x3A\x67\x72\x6F\x75\x70\x20\x73\x74\x79\x6C\x65\x3D\x22\x44\x49\x53\x50\x4C\x41\x59\x3A\x20\x6E\x6F\x6E\x65\x3B\x22\x3E\x3C\x2F\x76\x3A\x67\x72\x6F\x75\x70\x3E","\x70\x61\x6E\x6E\x69\x6E\x67\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73\x48\x61\x6E\x64\x6C\x65\x72","\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x48\x61\x6E\x64\x6C\x65\x72","\x67\x65\x74\x53\x74\x79\x6C\x65\x73\x68\x65\x65\x74","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x4D\x6F\x64\x65\x6C","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73\x46\x6F\x72\x43\x68\x61\x6E\x67\x65\x73","\x70\x72\x6F\x63\x65\x73\x73\x43\x68\x61\x6E\x67\x65","\x67\x65\x74\x52\x65\x6D\x6F\x76\x65\x64\x43\x65\x6C\x6C\x73\x46\x6F\x72\x43\x68\x61\x6E\x67\x65\x73","\x72\x65\x6D\x6F\x76\x65\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73","\x63\x6C\x65\x61\x72\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E","\x72\x65\x6D\x6F\x76\x65\x53\x74\x61\x74\x65\x46\x6F\x72\x43\x65\x6C\x6C","\x68\x6F\x6D\x65","\x61\x64\x64\x43\x65\x6C\x6C\x4F\x76\x65\x72\x6C\x61\x79","\x72\x65\x6D\x6F\x76\x65\x43\x65\x6C\x6C\x4F\x76\x65\x72\x6C\x61\x79","\x72\x65\x6D\x6F\x76\x65\x43\x65\x6C\x6C\x4F\x76\x65\x72\x6C\x61\x79\x73","\x63\x6C\x65\x61\x72\x43\x65\x6C\x6C\x4F\x76\x65\x72\x6C\x61\x79\x73","\x73\x65\x74\x43\x65\x6C\x6C\x57\x61\x72\x6E\x69\x6E\x67","\x3C\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x72\x65\x64\x3E","\x3C\x2F\x66\x6F\x6E\x74\x3E","\x73\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C","\x73\x74\x61\x72\x74\x45\x64\x69\x74\x69\x6E\x67\x41\x74\x43\x65\x6C\x6C","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C","\x69\x73\x43\x65\x6C\x6C\x45\x64\x69\x74\x61\x62\x6C\x65","\x63\x6F\x6E\x76\x65\x72\x74\x56\x61\x6C\x75\x65\x54\x6F\x53\x74\x72\x69\x6E\x67","\x69\x73\x41\x75\x74\x6F\x53\x69\x7A\x65\x43\x65\x6C\x6C","\x63\x65\x6C\x6C\x4C\x61\x62\x65\x6C\x43\x68\x61\x6E\x67\x65\x64","\x63\x65\x6C\x6C\x53\x69\x7A\x65\x55\x70\x64\x61\x74\x65\x64","\x68\x61\x6E\x64\x6C\x65\x72","\x73\x65\x6C\x65\x63\x74\x43\x65\x6C\x6C\x46\x6F\x72\x45\x76\x65\x6E\x74","\x69\x73\x53\x77\x69\x6D\x6C\x61\x6E\x65\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x45\x6E\x61\x62\x6C\x65\x64","\x67\x65\x74\x53\x77\x69\x6D\x6C\x61\x6E\x65\x41\x74","\x69\x73\x54\x6F\x67\x67\x6C\x65\x45\x76\x65\x6E\x74","\x70\x61\x6E\x6E\x69\x6E\x67\x4D\x61\x6E\x61\x67\x65\x72","\x63\x72\x65\x61\x74\x65\x50\x61\x6E\x6E\x69\x6E\x67\x4D\x61\x6E\x61\x67\x65\x72","\x67\x65\x74\x42\x6F\x72\x64\x65\x72\x53\x69\x7A\x65\x73","\x74\x68\x69\x6E","\x6D\x65\x64\x69\x75\x6D","\x74\x68\x69\x63\x6B","\x62\x6F\x72\x64\x65\x72\x4C\x65\x66\x74\x57\x69\x64\x74\x68","\x62\x6F\x72\x64\x65\x72\x54\x6F\x70\x57\x69\x64\x74\x68","\x70\x61\x64\x64\x69\x6E\x67\x54\x6F\x70","\x62\x6F\x72\x64\x65\x72\x52\x69\x67\x68\x74\x57\x69\x64\x74\x68","\x62\x6F\x72\x64\x65\x72\x42\x6F\x74\x74\x6F\x6D\x57\x69\x64\x74\x68","\x70\x61\x64\x64\x69\x6E\x67\x42\x6F\x74\x74\x6F\x6D","\x67\x65\x74\x50\x72\x65\x66\x65\x72\x72\x65\x64\x50\x61\x67\x65\x53\x69\x7A\x65","\x67\x65\x74\x42\x6F\x72\x64\x65\x72","\x64\x6F\x52\x65\x73\x69\x7A\x65\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x6D\x69\x6E\x57\x69\x64\x74\x68","\x6D\x69\x6E\x48\x65\x69\x67\x68\x74","\x75\x70\x64\x61\x74\x65\x50\x61\x67\x65\x42\x72\x65\x61\x6B\x73","\x68\x6F\x72\x69\x7A\x6F\x6E\x74\x61\x6C\x50\x61\x67\x65\x42\x72\x65\x61\x6B\x73","\x76\x65\x72\x74\x69\x63\x61\x6C\x50\x61\x67\x65\x42\x72\x65\x61\x6B\x73","\x70\x6F\x73\x74\x50\x72\x6F\x63\x65\x73\x73\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65","\x53\x54\x59\x4C\x45\x5F\x49\x4D\x41\x47\x45","\x67\x65\x74\x49\x6D\x61\x67\x65\x46\x72\x6F\x6D\x42\x75\x6E\x64\x6C\x65\x73","\x64\x61\x74\x61\x3A\x69\x6D\x61\x67\x65\x2F","\x3B\x62\x61\x73\x65\x36\x34\x2C","\x73\x65\x74\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65","\x74\x6F\x67\x67\x6C\x65\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65","\x74\x6F\x67\x67\x6C\x65\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65\x73","\x74\x6F\x67\x67\x6C\x65\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65\x46\x6C\x61\x67\x73","\x73\x65\x74\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65\x46\x6C\x61\x67\x73","\x61\x64\x64\x49\x6D\x61\x67\x65\x42\x75\x6E\x64\x6C\x65","\x72\x65\x6D\x6F\x76\x65\x49\x6D\x61\x67\x65\x42\x75\x6E\x64\x6C\x65","\x62\x61\x63\x6B","\x67\x65\x74\x43\x65\x6C\x6C\x73\x46\x6F\x72\x47\x72\x6F\x75\x70","\x63\x72\x65\x61\x74\x65\x47\x72\x6F\x75\x70\x43\x65\x6C\x6C","\x67\x65\x74\x42\x6F\x75\x6E\x64\x73\x46\x6F\x72\x47\x72\x6F\x75\x70","\x61\x64\x64\x41\x6C\x6C\x45\x64\x67\x65\x73","\x67\x65\x74\x45\x64\x67\x65\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E\x45\x72\x72\x6F\x72","\x69\x6E\x73\x65\x72\x74\x56\x65\x72\x74\x65\x78","\x63\x72\x65\x61\x74\x65\x56\x65\x72\x74\x65\x78","\x63\x72\x65\x61\x74\x65\x45\x64\x67\x65","\x61\x64\x64\x45\x64\x67\x65","\x69\x73\x41\x6C\x6C\x6F\x77\x4E\x65\x67\x61\x74\x69\x76\x65\x43\x6F\x6F\x72\x64\x69\x6E\x61\x74\x65\x73","\x69\x73\x45\x78\x74\x65\x6E\x64\x50\x61\x72\x65\x6E\x74\x73\x4F\x6E\x41\x64\x64","\x69\x73\x45\x78\x74\x65\x6E\x64\x50\x61\x72\x65\x6E\x74","\x65\x78\x74\x65\x6E\x64\x50\x61\x72\x65\x6E\x74","\x63\x6F\x6E\x73\x74\x72\x61\x69\x6E\x43\x68\x69\x6C\x64","\x67\x65\x74\x44\x65\x6C\x65\x74\x61\x62\x6C\x65\x43\x65\x6C\x6C\x73","\x69\x6E\x63\x6C\x75\x64\x65\x45\x64\x67\x65\x73","\x6E\x65\x77\x45\x64\x67\x65","\x67\x65\x74\x46\x6F\x6C\x64\x61\x62\x6C\x65\x43\x65\x6C\x6C\x73","\x63\x6F\x6C\x6C\x61\x70\x73\x65","\x72\x65\x63\x75\x72\x73\x65","\x69\x73\x43\x65\x6C\x6C\x46\x6F\x6C\x64\x61\x62\x6C\x65","\x73\x77\x61\x70\x42\x6F\x75\x6E\x64\x73","\x75\x70\x64\x61\x74\x65\x41\x6C\x74\x65\x72\x6E\x61\x74\x65\x42\x6F\x75\x6E\x64\x73","\x67\x65\x74\x50\x72\x65\x66\x65\x72\x72\x65\x64\x53\x69\x7A\x65\x46\x6F\x72\x43\x65\x6C\x6C","\x67\x65\x74\x41\x6C\x6C\x45\x64\x67\x65\x73","\x69\x67\x6E\x6F\x72\x65\x43\x68\x69\x6C\x64\x72\x65\x6E","\x53\x48\x41\x50\x45\x5F\x4C\x41\x42\x45\x4C","\x53\x54\x59\x4C\x45\x5F\x49\x4D\x41\x47\x45\x5F\x57\x49\x44\x54\x48","\x53\x54\x59\x4C\x45\x5F\x49\x4D\x41\x47\x45\x5F\x48\x45\x49\x47\x48\x54","\x67\x65\x74\x53\x69\x7A\x65\x46\x6F\x72\x53\x74\x72\x69\x6E\x67","\x72\x65\x73\x69\x7A\x65\x43\x65\x6C\x6C","\x69\x73\x43\x6C\x6F\x6E\x65\x49\x6E\x76\x61\x6C\x69\x64\x45\x64\x67\x65\x73","\x73\x65\x74\x41\x6C\x6C\x6F\x77\x4E\x65\x67\x61\x74\x69\x76\x65\x43\x6F\x6F\x72\x64\x69\x6E\x61\x74\x65\x73","\x69\x73\x44\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x4F\x6E\x4D\x6F\x76\x65","\x69\x73\x41\x6C\x6C\x6F\x77\x44\x61\x6E\x67\x6C\x69\x6E\x67\x45\x64\x67\x65\x73","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x47\x72\x61\x70\x68","\x74\x72\x61\x6E\x73\x6C\x61\x74\x65\x43\x65\x6C\x6C","\x67\x65\x74\x43\x65\x6C\x6C\x43\x6F\x6E\x74\x61\x69\x6E\x6D\x65\x6E\x74\x41\x72\x65\x61","\x67\x65\x74\x43\x75\x72\x72\x65\x6E\x74\x52\x6F\x6F\x74","\x67\x65\x74\x4D\x61\x78\x69\x6D\x75\x6D\x47\x72\x61\x70\x68\x42\x6F\x75\x6E\x64\x73","\x69\x73\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x43\x68\x69\x6C\x64","\x67\x65\x74\x4F\x76\x65\x72\x6C\x61\x70","\x67\x65\x74\x41\x6C\x6C\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74\x73","\x53\x54\x59\x4C\x45\x5F\x45\x58\x49\x54\x5F\x58","\x53\x54\x59\x4C\x45\x5F\x45\x4E\x54\x52\x59\x5F\x58","\x53\x54\x59\x4C\x45\x5F\x45\x58\x49\x54\x5F\x59","\x53\x54\x59\x4C\x45\x5F\x45\x4E\x54\x52\x59\x5F\x59","\x53\x54\x59\x4C\x45\x5F\x45\x58\x49\x54\x5F\x50\x45\x52\x49\x4D\x45\x54\x45\x52","\x53\x54\x59\x4C\x45\x5F\x45\x4E\x54\x52\x59\x5F\x50\x45\x52\x49\x4D\x45\x54\x45\x52","\x73\x65\x74\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74","\x70\x6F\x69\x6E\x74","\x53\x54\x59\x4C\x45\x5F\x46\x4C\x49\x50\x48","\x53\x54\x59\x4C\x45\x5F\x46\x4C\x49\x50\x56","\x69\x73\x50\x6F\x72\x74\x73\x45\x6E\x61\x62\x6C\x65\x64","\x67\x65\x74\x54\x65\x72\x6D\x69\x6E\x61\x6C\x46\x6F\x72\x50\x6F\x72\x74","\x69\x73\x43\x65\x6C\x6C\x44\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65","\x65\x6E\x74\x65\x72\x47\x72\x6F\x75\x70","\x69\x73\x56\x61\x6C\x69\x64\x52\x6F\x6F\x74","\x65\x78\x69\x74\x47\x72\x6F\x75\x70","\x67\x65\x74\x43\x65\x6C\x6C\x42\x6F\x75\x6E\x64\x73","\x73\x68\x69\x66\x74\x50\x72\x65\x76\x69\x65\x77\x31","\x73\x68\x69\x66\x74\x50\x72\x65\x76\x69\x65\x77\x32","\x7A\x6F\x6F\x6D\x49\x6E","\x7A\x6F\x6F\x6D\x4F\x75\x74","\x7A\x6F\x6F\x6D\x41\x63\x74\x75\x61\x6C","\x7A\x6F\x6F\x6D\x54\x6F","\x73\x63\x72\x6F\x6C\x6C\x52\x65\x63\x74\x54\x6F\x56\x69\x73\x69\x62\x6C\x65","\x7A\x6F\x6F\x6D\x54\x6F\x52\x65\x63\x74","\x73\x63\x72\x6F\x6C\x6C\x43\x65\x6C\x6C\x54\x6F\x56\x69\x73\x69\x62\x6C\x65","\x69\x73\x43\x65\x6C\x6C\x43\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65","\x53\x54\x59\x4C\x45\x5F\x4F\x52\x54\x48\x4F\x47\x4F\x4E\x41\x4C","\x53\x65\x67\x6D\x65\x6E\x74\x43\x6F\x6E\x6E\x65\x63\x74\x6F\x72","\x45\x6C\x62\x6F\x77\x43\x6F\x6E\x6E\x65\x63\x74\x6F\x72","\x53\x69\x64\x65\x54\x6F\x53\x69\x64\x65","\x54\x6F\x70\x54\x6F\x42\x6F\x74\x74\x6F\x6D","\x45\x6E\x74\x69\x74\x79\x52\x65\x6C\x61\x74\x69\x6F\x6E","\x4F\x72\x74\x68\x43\x6F\x6E\x6E\x65\x63\x74\x6F\x72","\x69\x73\x4C\x6F\x6F\x70","\x69\x73\x43\x6C\x6F\x6E\x65\x45\x76\x65\x6E\x74","\x49\x53\x5F\x4D\x41\x43","\x69\x73\x4D\x65\x74\x61\x44\x6F\x77\x6E","\x69\x73\x41\x6C\x74\x44\x6F\x77\x6E","\x69\x73\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x65\x64\x45\x76\x65\x6E\x74","\x69\x73\x46\x6F\x72\x63\x65\x4D\x61\x72\x71\x75\x65\x65\x45\x76\x65\x6E\x74","\x76\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E\x41\x6C\x65\x72\x74","\x69\x73\x45\x64\x67\x65\x56\x61\x6C\x69\x64","\x69\x73\x56\x61\x6C\x69\x64\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E","\x63\x68\x65\x63\x6B","\x76\x61\x6C\x69\x64\x61\x74\x65\x45\x64\x67\x65","\x76\x61\x6C\x69\x64\x61\x74\x65\x47\x72\x61\x70\x68","\x67\x65\x74\x43\x65\x6C\x6C\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E\x45\x72\x72\x6F\x72","\x76\x61\x6C\x69\x64\x61\x74\x65\x43\x65\x6C\x6C","\x61\x74\x74\x72","\x63\x6F\x75\x6E\x74\x45\x72\x72\x6F\x72","\x73\x65\x74\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x49\x6D\x61\x67\x65","\x74\x6F\x53\x74\x72\x69\x6E\x67","\x69\x73\x48\x74\x6D\x6C\x4C\x61\x62\x65\x6C\x73","\x73\x65\x74\x48\x74\x6D\x6C\x4C\x61\x62\x65\x6C\x73","\x53\x54\x59\x4C\x45\x5F\x57\x48\x49\x54\x45\x5F\x53\x50\x41\x43\x45","\x67\x65\x74\x54\x6F\x6F\x6C\x74\x69\x70","\x67\x65\x74\x48\x61\x6E\x64\x6C\x65\x72","\x67\x65\x74\x54\x6F\x6F\x6C\x74\x69\x70\x46\x6F\x72\x4E\x6F\x64\x65","\x67\x65\x74\x54\x6F\x6F\x6C\x74\x69\x70\x46\x6F\x72\x43\x65\x6C\x6C","\x67\x65\x74\x43\x75\x72\x73\x6F\x72\x46\x6F\x72\x43\x65\x6C\x6C","\x53\x54\x59\x4C\x45\x5F\x49\x4E\x44\x49\x43\x41\x54\x4F\x52\x5F\x43\x4F\x4C\x4F\x52","\x53\x54\x59\x4C\x45\x5F\x49\x4E\x44\x49\x43\x41\x54\x4F\x52\x5F\x47\x52\x41\x44\x49\x45\x4E\x54\x43\x4F\x4C\x4F\x52","\x53\x54\x59\x4C\x45\x5F\x49\x4E\x44\x49\x43\x41\x54\x4F\x52\x5F\x53\x48\x41\x50\x45","\x53\x54\x59\x4C\x45\x5F\x49\x4E\x44\x49\x43\x41\x54\x4F\x52\x5F\x49\x4D\x41\x47\x45","\x73\x65\x74\x42\x6F\x72\x64\x65\x72","\x53\x48\x41\x50\x45\x5F\x53\x57\x49\x4D\x4C\x41\x4E\x45","\x69\x73\x52\x65\x73\x69\x7A\x65\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x73\x65\x74\x52\x65\x73\x69\x7A\x65\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x69\x73\x45\x73\x63\x61\x70\x65\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x45\x73\x63\x61\x70\x65\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x49\x6E\x76\x6F\x6B\x65\x73\x53\x74\x6F\x70\x43\x65\x6C\x6C\x45\x64\x69\x74\x69\x6E\x67","\x73\x65\x74\x45\x6E\x74\x65\x72\x53\x74\x6F\x70\x73\x43\x65\x6C\x6C\x45\x64\x69\x74\x69\x6E\x67","\x69\x73\x43\x65\x6C\x6C\x4C\x6F\x63\x6B\x65\x64","\x69\x73\x43\x65\x6C\x6C\x73\x4C\x6F\x63\x6B\x65\x64","\x73\x65\x74\x43\x65\x6C\x6C\x73\x4C\x6F\x63\x6B\x65\x64","\x67\x65\x74\x43\x6C\x6F\x6E\x65\x61\x62\x6C\x65\x43\x65\x6C\x6C\x73","\x69\x73\x43\x65\x6C\x6C\x43\x6C\x6F\x6E\x65\x61\x62\x6C\x65","\x69\x73\x43\x65\x6C\x6C\x73\x43\x6C\x6F\x6E\x65\x61\x62\x6C\x65","\x53\x54\x59\x4C\x45\x5F\x43\x4C\x4F\x4E\x45\x41\x42\x4C\x45","\x73\x65\x74\x43\x65\x6C\x6C\x73\x43\x6C\x6F\x6E\x65\x61\x62\x6C\x65","\x63\x61\x6E\x45\x78\x70\x6F\x72\x74\x43\x65\x6C\x6C","\x63\x61\x6E\x49\x6D\x70\x6F\x72\x74\x43\x65\x6C\x6C","\x69\x73\x43\x65\x6C\x6C\x73\x53\x65\x6C\x65\x63\x74\x61\x62\x6C\x65","\x73\x65\x74\x43\x65\x6C\x6C\x73\x53\x65\x6C\x65\x63\x74\x61\x62\x6C\x65","\x69\x73\x43\x65\x6C\x6C\x44\x65\x6C\x65\x74\x61\x62\x6C\x65","\x69\x73\x43\x65\x6C\x6C\x73\x44\x65\x6C\x65\x74\x61\x62\x6C\x65","\x53\x54\x59\x4C\x45\x5F\x44\x45\x4C\x45\x54\x41\x42\x4C\x45","\x73\x65\x74\x43\x65\x6C\x6C\x73\x44\x65\x6C\x65\x74\x61\x62\x6C\x65","\x69\x73\x4C\x61\x62\x65\x6C\x4D\x6F\x76\x61\x62\x6C\x65","\x67\x65\x74\x4D\x6F\x76\x61\x62\x6C\x65\x43\x65\x6C\x6C\x73","\x69\x73\x43\x65\x6C\x6C\x73\x4D\x6F\x76\x61\x62\x6C\x65","\x53\x54\x59\x4C\x45\x5F\x4D\x4F\x56\x41\x42\x4C\x45","\x73\x65\x74\x43\x65\x6C\x6C\x73\x4D\x6F\x76\x61\x62\x6C\x65","\x73\x65\x74\x50\x6F\x72\x74\x73\x45\x6E\x61\x62\x6C\x65\x64","\x67\x65\x74\x47\x72\x69\x64\x53\x69\x7A\x65","\x73\x65\x74\x47\x72\x69\x64\x53\x69\x7A\x65","\x67\x65\x74\x54\x6F\x6C\x65\x72\x61\x6E\x63\x65","\x73\x65\x74\x54\x6F\x6C\x65\x72\x61\x6E\x63\x65","\x69\x73\x56\x65\x72\x74\x65\x78\x4C\x61\x62\x65\x6C\x73\x4D\x6F\x76\x61\x62\x6C\x65","\x73\x65\x74\x56\x65\x72\x74\x65\x78\x4C\x61\x62\x65\x6C\x73\x4D\x6F\x76\x61\x62\x6C\x65","\x69\x73\x45\x64\x67\x65\x4C\x61\x62\x65\x6C\x73\x4D\x6F\x76\x61\x62\x6C\x65","\x73\x65\x74\x45\x64\x67\x65\x4C\x61\x62\x65\x6C\x73\x4D\x6F\x76\x61\x62\x6C\x65","\x69\x73\x53\x77\x69\x6D\x6C\x61\x6E\x65\x4E\x65\x73\x74\x69\x6E\x67","\x73\x65\x74\x53\x77\x69\x6D\x6C\x61\x6E\x65\x4E\x65\x73\x74\x69\x6E\x67","\x73\x65\x74\x53\x77\x69\x6D\x6C\x61\x6E\x65\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x4D\x75\x6C\x74\x69\x67\x72\x61\x70\x68","\x73\x65\x74\x4D\x75\x6C\x74\x69\x67\x72\x61\x70\x68","\x69\x73\x41\x6C\x6C\x6F\x77\x4C\x6F\x6F\x70\x73","\x73\x65\x74\x41\x6C\x6C\x6F\x77\x44\x61\x6E\x67\x6C\x69\x6E\x67\x45\x64\x67\x65\x73","\x73\x65\x74\x43\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65\x45\x64\x67\x65\x73","\x69\x73\x43\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65\x45\x64\x67\x65\x73","\x73\x65\x74\x43\x6C\x6F\x6E\x65\x49\x6E\x76\x61\x6C\x69\x64\x45\x64\x67\x65\x73","\x73\x65\x74\x41\x6C\x6C\x6F\x77\x4C\x6F\x6F\x70\x73","\x73\x65\x74\x44\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x4F\x6E\x4D\x6F\x76\x65","\x73\x65\x74\x44\x72\x6F\x70\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x53\x70\x6C\x69\x74\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x53\x70\x6C\x69\x74\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x43\x65\x6C\x6C\x52\x65\x73\x69\x7A\x61\x62\x6C\x65","\x69\x73\x43\x65\x6C\x6C\x73\x52\x65\x73\x69\x7A\x61\x62\x6C\x65","\x53\x54\x59\x4C\x45\x5F\x52\x45\x53\x49\x5A\x41\x42\x4C\x45","\x73\x65\x74\x43\x65\x6C\x6C\x73\x52\x65\x73\x69\x7A\x61\x62\x6C\x65","\x69\x73\x54\x65\x72\x6D\x69\x6E\x61\x6C\x50\x6F\x69\x6E\x74\x4D\x6F\x76\x61\x62\x6C\x65","\x69\x73\x43\x65\x6C\x6C\x42\x65\x6E\x64\x61\x62\x6C\x65","\x69\x73\x43\x65\x6C\x6C\x73\x42\x65\x6E\x64\x61\x62\x6C\x65","\x53\x54\x59\x4C\x45\x5F\x42\x45\x4E\x44\x41\x42\x4C\x45","\x73\x65\x74\x43\x65\x6C\x6C\x73\x42\x65\x6E\x64\x61\x62\x6C\x65","\x69\x73\x43\x65\x6C\x6C\x73\x45\x64\x69\x74\x61\x62\x6C\x65","\x53\x54\x59\x4C\x45\x5F\x45\x44\x49\x54\x41\x42\x4C\x45","\x73\x65\x74\x43\x65\x6C\x6C\x73\x45\x64\x69\x74\x61\x62\x6C\x65","\x69\x73\x43\x65\x6C\x6C\x73\x44\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65","\x73\x65\x74\x43\x65\x6C\x6C\x73\x44\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65","\x69\x73\x56\x61\x6C\x69\x64\x53\x6F\x75\x72\x63\x65","\x69\x73\x56\x61\x6C\x69\x64\x54\x61\x72\x67\x65\x74","\x73\x65\x74\x54\x6F\x6F\x6C\x74\x69\x70\x73","\x73\x65\x74\x50\x61\x6E\x6E\x69\x6E\x67","\x69\x73\x41\x75\x74\x6F\x53\x69\x7A\x65\x43\x65\x6C\x6C\x73","\x53\x54\x59\x4C\x45\x5F\x41\x55\x54\x4F\x53\x49\x5A\x45","\x73\x65\x74\x41\x75\x74\x6F\x53\x69\x7A\x65\x43\x65\x6C\x6C\x73","\x69\x73\x45\x78\x74\x65\x6E\x64\x50\x61\x72\x65\x6E\x74\x73","\x73\x65\x74\x45\x78\x74\x65\x6E\x64\x50\x61\x72\x65\x6E\x74\x73","\x73\x65\x74\x45\x78\x74\x65\x6E\x64\x50\x61\x72\x65\x6E\x74\x73\x4F\x6E\x41\x64\x64","\x69\x73\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x43\x68\x69\x6C\x64\x72\x65\x6E","\x73\x65\x74\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x43\x68\x69\x6C\x64\x72\x65\x6E","\x69\x73\x41\x6C\x6C\x6F\x77\x4F\x76\x65\x72\x6C\x61\x70\x50\x61\x72\x65\x6E\x74","\x53\x54\x59\x4C\x45\x5F\x46\x4F\x4C\x44\x41\x42\x4C\x45","\x69\x73\x56\x61\x6C\x69\x64\x44\x72\x6F\x70\x54\x61\x72\x67\x65\x74","\x69\x73\x53\x70\x6C\x69\x74\x54\x61\x72\x67\x65\x74","\x73\x65\x74\x44\x65\x66\x61\x75\x6C\x74\x50\x61\x72\x65\x6E\x74","\x68\x69\x74\x73\x53\x77\x69\x6D\x6C\x61\x6E\x65\x43\x6F\x6E\x74\x65\x6E\x74","\x67\x65\x74\x50\x6F\x69\x6E\x74\x46\x6F\x72\x45\x76\x65\x6E\x74","\x67\x65\x74\x43\x65\x6C\x6C\x73","\x67\x65\x74\x43\x65\x6C\x6C\x73\x42\x65\x79\x6F\x6E\x64","\x69\x73\x43\x65\x6C\x6C\x53\x65\x6C\x65\x63\x74\x65\x64","\x69\x73\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x45\x6D\x70\x74\x79","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x6F\x75\x6E\x74","\x61\x64\x64\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C","\x61\x64\x64\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73","\x72\x65\x6D\x6F\x76\x65\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C","\x73\x65\x6C\x65\x63\x74\x52\x65\x67\x69\x6F\x6E","\x73\x65\x6C\x65\x63\x74\x43\x65\x6C\x6C\x73\x46\x6F\x72\x45\x76\x65\x6E\x74","\x73\x65\x6C\x65\x63\x74\x4E\x65\x78\x74\x43\x65\x6C\x6C","\x73\x65\x6C\x65\x63\x74\x43\x65\x6C\x6C","\x73\x65\x6C\x65\x63\x74\x50\x72\x65\x76\x69\x6F\x75\x73\x43\x65\x6C\x6C","\x73\x65\x6C\x65\x63\x74\x50\x61\x72\x65\x6E\x74\x43\x65\x6C\x6C","\x73\x65\x6C\x65\x63\x74\x43\x68\x69\x6C\x64\x43\x65\x6C\x6C","\x73\x65\x6C\x65\x63\x74\x41\x6C\x6C","\x73\x65\x6C\x65\x63\x74\x56\x65\x72\x74\x69\x63\x65\x73","\x73\x65\x6C\x65\x63\x74\x43\x65\x6C\x6C\x73","\x73\x65\x6C\x65\x63\x74\x45\x64\x67\x65\x73","\x63\x72\x65\x61\x74\x65\x48\x61\x6E\x64\x6C\x65\x72","\x75\x70\x64\x61\x74\x65\x4D\x6F\x75\x73\x65\x45\x76\x65\x6E\x74","\x4D\x4F\x55\x53\x45\x5F\x44\x4F\x57\x4E","\x6C\x61\x73\x74\x54\x6F\x75\x63\x68\x58","\x6C\x61\x73\x74\x4D\x6F\x75\x73\x65\x58","\x6C\x61\x73\x74\x4D\x6F\x75\x73\x65\x59","\x4D\x4F\x55\x53\x45\x5F\x55\x50","\x4D\x4F\x55\x53\x45\x5F\x4D\x4F\x56\x45","\x64\x65\x73\x74\x72\x6F\x79\x65\x64","\x74\x6F\x6F\x6C\x74\x69\x70","\x68\x65\x6C\x70","\x67\x72\x61\x70\x68\x52\x65\x6E\x64\x65\x72\x48\x69\x6E\x74","\x73\x68\x6F\x77\x56\x69\x65\x77\x70\x6F\x72\x74","\x73\x69\x7A\x65\x72\x53\x69\x7A\x65","\x75\x70\x64\x61\x74\x65\x4F\x6E\x50\x61\x6E","\x73\x69\x7A\x65\x72\x49\x6D\x61\x67\x65","\x73\x68\x61\x70\x65\x2D\x72\x65\x6E\x64\x65\x72\x69\x6E\x67","\x6F\x70\x74\x69\x6D\x69\x7A\x65\x53\x70\x65\x65\x64","\x69\x6D\x61\x67\x65\x2D\x72\x65\x6E\x64\x65\x72\x69\x6E\x67","\x75\x70\x64\x61\x74\x65\x48\x61\x6E\x64\x6C\x65\x72","\x75\x70\x64\x61\x74\x65","\x70\x61\x6E\x48\x61\x6E\x64\x6C\x65\x72","\x72\x65\x66\x72\x65\x73\x68\x48\x61\x6E\x64\x6C\x65\x72","\x73\x65\x6C\x65\x63\x74\x69\x6F\x6E\x42\x6F\x72\x64\x65\x72","\x72\x65\x64\x69\x72\x65\x63\x74\x4D\x6F\x75\x73\x65\x45\x76\x65\x6E\x74\x73","\x73\x69\x7A\x65\x72","\x63\x72\x65\x61\x74\x65\x53\x69\x7A\x65\x72","\x73\x65\x74\x5A\x6F\x6F\x6D\x45\x6E\x61\x62\x6C\x65\x64","\x67\x65\x74\x53\x6F\x75\x72\x63\x65\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72\x53\x69\x7A\x65","\x67\x65\x74\x4F\x75\x74\x6C\x69\x6E\x65\x4F\x66\x66\x73\x65\x74","\x73\x74\x61\x72\x74\x58","\x73\x74\x61\x72\x74\x59","\x64\x78\x30","\x64\x79\x30","\x6E","\x76\x61\x6C\x69\x64\x4E\x65\x69\x67\x68\x62\x6F\x72\x73","\x74\x79\x70\x65\x45\x72\x72\x6F\x72","\x76\x61\x6C\x69\x64\x4E\x65\x69\x67\x68\x62\x6F\x72\x73\x41\x6C\x6C\x6F\x77\x65\x64","\x63\x68\x65\x63\x6B\x54\x65\x72\x6D\x69\x6E\x61\x6C","\x63\x68\x65\x63\x6B\x4E\x65\x69\x67\x68\x62\x6F\x72\x73","\x63\x68\x65\x63\x6B\x54\x79\x70\x65","\x75\x6E\x64\x6F\x48\x61\x6E\x64\x6C\x65\x72","\x62\x75\x62\x62\x6C\x69\x6E\x67","\x69\x73\x42\x75\x62\x62\x6C\x69\x6E\x67","\x73\x65\x74\x42\x75\x62\x62\x6C\x69\x6E\x67","\x67\x65\x74\x4C\x61\x79\x6F\x75\x74","\x67\x65\x74\x43\x65\x6C\x6C\x73\x46\x6F\x72\x43\x68\x61\x6E\x67\x65\x73","\x67\x65\x74\x43\x65\x6C\x6C\x73\x46\x6F\x72\x43\x68\x61\x6E\x67\x65","\x65\x78\x65\x63\x75\x74\x65\x4C\x61\x79\x6F\x75\x74","\x72\x65\x73\x69\x7A\x65\x48\x61\x6E\x64\x6C\x65\x72","\x66\x6F\x6C\x64\x48\x61\x6E\x64\x6C\x65\x72","\x73\x68\x69\x66\x74\x52\x69\x67\x68\x74\x77\x61\x72\x64\x73","\x73\x68\x69\x66\x74\x44\x6F\x77\x6E\x77\x61\x72\x64\x73","\x69\x73\x43\x65\x6C\x6C\x49\x67\x6E\x6F\x72\x65\x64","\x69\x73\x43\x65\x6C\x6C\x53\x68\x69\x66\x74\x61\x62\x6C\x65","\x69\x73\x53\x68\x69\x66\x74\x52\x69\x67\x68\x74\x77\x61\x72\x64\x73","\x73\x65\x74\x53\x68\x69\x66\x74\x52\x69\x67\x68\x74\x77\x61\x72\x64\x73","\x69\x73\x53\x68\x69\x66\x74\x44\x6F\x77\x6E\x77\x61\x72\x64\x73","\x73\x65\x74\x53\x68\x69\x66\x74\x44\x6F\x77\x6E\x77\x61\x72\x64\x73","\x63\x65\x6C\x6C\x52\x65\x73\x69\x7A\x65\x64","\x67\x65\x74\x43\x65\x6C\x6C\x73\x54\x6F\x53\x68\x69\x66\x74","\x73\x68\x69\x66\x74\x43\x65\x6C\x6C","\x61\x64\x64\x45\x6E\x61\x62\x6C\x65\x64","\x72\x65\x73\x69\x7A\x65\x45\x6E\x61\x62\x6C\x65\x64","\x61\x64\x64\x48\x61\x6E\x64\x6C\x65\x72","\x69\x73\x41\x64\x64\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x52\x65\x73\x69\x7A\x65\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x48\x6F\x72\x69\x7A\x6F\x6E\x74\x61\x6C","\x73\x65\x74\x41\x64\x64\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x52\x65\x73\x69\x7A\x65\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x53\x77\x69\x6D\x6C\x61\x6E\x65\x49\x67\x6E\x6F\x72\x65\x64","\x69\x73\x43\x65\x6C\x6C\x48\x6F\x72\x69\x7A\x6F\x6E\x74\x61\x6C","\x73\x77\x69\x6D\x6C\x61\x6E\x65\x41\x64\x64\x65\x64","\x72\x65\x73\x69\x7A\x65\x53\x77\x69\x6D\x6C\x61\x6E\x65","\x6F\x6C\x64\x42\x6F\x75\x6E\x64\x73","\x6F\x6C\x64\x53\x74\x61\x74\x65\x73","\x6F\x6C\x64\x53\x63\x61\x6C\x65","\x64\x65\x6C\x74\x61\x73","\x63\x6F\x75\x6E\x74","\x58","\x59","\x61\x64\x64\x45\x64\x67\x65\x73","\x72\x65\x73\x6F\x6C\x76\x65","\x74\x72\x61\x6E\x73\x6C\x61\x74\x65\x53\x74\x61\x74\x65","\x72\x65\x76\x61\x6C\x69\x64\x61\x74\x65\x53\x74\x61\x74\x65","\x75\x70\x64\x61\x74\x65\x50\x72\x65\x76\x69\x65\x77\x53\x68\x61\x70\x65","\x6D\x61\x78\x43\x65\x6C\x6C\x73","\x68\x69\x67\x68\x6C\x69\x67\x68\x74\x45\x6E\x61\x62\x6C\x65\x64","\x63\x6C\x6F\x6E\x65\x45\x6E\x61\x62\x6C\x65\x64","\x6D\x6F\x76\x65\x45\x6E\x61\x62\x6C\x65\x64","\x67\x75\x69\x64\x65","\x63\x75\x72\x72\x65\x6E\x74\x44\x78","\x63\x75\x72\x72\x65\x6E\x74\x44\x79","\x75\x70\x64\x61\x74\x65\x43\x75\x72\x73\x6F\x72","\x73\x65\x6C\x65\x63\x74\x45\x6E\x61\x62\x6C\x65\x64","\x63\x6F\x6E\x6E\x65\x63\x74\x4F\x6E\x44\x72\x6F\x70","\x73\x63\x72\x6F\x6C\x6C\x4F\x6E\x4D\x6F\x76\x65","\x70\x72\x65\x76\x69\x65\x77\x43\x6F\x6C\x6F\x72","\x68\x74\x6D\x6C\x50\x72\x65\x76\x69\x65\x77","\x73\x63\x61\x6C\x65\x47\x72\x69\x64","\x72\x6F\x74\x61\x74\x69\x6F\x6E\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x43\x6C\x6F\x6E\x65\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x43\x6C\x6F\x6E\x65\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x4D\x6F\x76\x65\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x4D\x6F\x76\x65\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x53\x65\x6C\x65\x63\x74\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x53\x65\x6C\x65\x63\x74\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x52\x65\x6D\x6F\x76\x65\x43\x65\x6C\x6C\x73\x46\x72\x6F\x6D\x50\x61\x72\x65\x6E\x74","\x73\x65\x74\x52\x65\x6D\x6F\x76\x65\x43\x65\x6C\x6C\x73\x46\x72\x6F\x6D\x50\x61\x72\x65\x6E\x74","\x67\x65\x74\x49\x6E\x69\x74\x69\x61\x6C\x43\x65\x6C\x6C\x46\x6F\x72\x45\x76\x65\x6E\x74","\x69\x73\x44\x65\x6C\x61\x79\x65\x64\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E","\x64\x65\x6C\x61\x79\x65\x64\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E","\x63\x65\x6C\x6C\x57\x61\x73\x43\x6C\x69\x63\x6B\x65\x64","\x53\x45\x4C\x45\x43\x54","\x66\x69\x72\x73\x74","\x67\x65\x74\x50\x72\x65\x76\x69\x65\x77\x42\x6F\x75\x6E\x64\x73","\x63\x72\x65\x61\x74\x65\x50\x72\x65\x76\x69\x65\x77\x53\x68\x61\x70\x65","\x70\x42\x6F\x75\x6E\x64\x73","\x75\x73\x65\x47\x75\x69\x64\x65\x73\x46\x6F\x72\x45\x76\x65\x6E\x74","\x73\x65\x74\x48\x69\x67\x68\x6C\x69\x67\x68\x74\x43\x6F\x6C\x6F\x72","\x56\x41\x4C\x49\x44\x5F\x43\x4F\x4C\x4F\x52","\x49\x4E\x56\x41\x4C\x49\x44\x5F\x43\x4F\x4E\x4E\x45\x43\x54\x5F\x54\x41\x52\x47\x45\x54\x5F\x43\x4F\x4C\x4F\x52","\x43\x55\x52\x53\x4F\x52\x5F\x4D\x4F\x56\x41\x42\x4C\x45\x5F\x45\x44\x47\x45","\x43\x55\x52\x53\x4F\x52\x5F\x4D\x4F\x56\x41\x42\x4C\x45\x5F\x56\x45\x52\x54\x45\x58","\x73\x65\x6C\x65\x63\x74\x44\x65\x6C\x61\x79\x65\x64","\x64\x65\x73\x74\x72\x6F\x79\x53\x68\x61\x70\x65\x73","\x67\x75\x69\x64\x65\x73","\x73\x68\x6F\x75\x6C\x64\x52\x65\x6D\x6F\x76\x65\x43\x65\x6C\x6C\x73\x46\x72\x6F\x6D\x50\x61\x72\x65\x6E\x74","\x74\x72\x69\x67\x67\x65\x72\x58","\x74\x72\x69\x67\x67\x65\x72\x59","\x75\x73\x65\x50\x6F\x70\x75\x70\x54\x72\x69\x67\x67\x65\x72","\x75\x73\x65\x4C\x65\x66\x74\x42\x75\x74\x74\x6F\x6E\x46\x6F\x72\x50\x61\x6E\x6E\x69\x6E\x67","\x73\x65\x6C\x65\x63\x74\x4F\x6E\x50\x6F\x70\x75\x70","\x63\x6C\x65\x61\x72\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x4F\x6E\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64","\x69\x67\x6E\x6F\x72\x65\x43\x65\x6C\x6C","\x70\x72\x65\x76\x69\x65\x77\x45\x6E\x61\x62\x6C\x65\x64","\x75\x73\x65\x47\x72\x69\x64","\x69\x73\x50\x61\x6E\x6E\x69\x6E\x67\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x50\x61\x6E\x6E\x69\x6E\x67\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x50\x61\x6E\x6E\x69\x6E\x67\x54\x72\x69\x67\x67\x65\x72","\x70\x6F\x70\x75\x70\x54\x72\x69\x67\x67\x65\x72","\x70\x61\x6E\x6E\x69\x6E\x67\x54\x72\x69\x67\x67\x65\x72","\x63\x6F\x6E\x73\x75\x6D\x65\x50\x61\x6E\x6E\x69\x6E\x67\x54\x72\x69\x67\x67\x65\x72","\x67\x65\x74\x43\x65\x6C\x6C\x46\x6F\x72\x50\x6F\x70\x75\x70\x45\x76\x65\x6E\x74","\x76\x61\x6C\x69\x64\x43\x6F\x6C\x6F\x72","\x44\x45\x46\x41\x55\x4C\x54\x5F\x56\x41\x4C\x49\x44\x5F\x43\x4F\x4C\x4F\x52","\x69\x6E\x76\x61\x6C\x69\x64\x43\x6F\x6C\x6F\x72","\x44\x45\x46\x41\x55\x4C\x54\x5F\x49\x4E\x56\x41\x4C\x49\x44\x5F\x43\x4F\x4C\x4F\x52","\x68\x6F\x74\x73\x70\x6F\x74","\x44\x45\x46\x41\x55\x4C\x54\x5F\x48\x4F\x54\x53\x50\x4F\x54","\x68\x6F\x74\x73\x70\x6F\x74\x45\x6E\x61\x62\x6C\x65\x64","\x63\x75\x72\x72\x65\x6E\x74\x43\x6F\x6C\x6F\x72","\x76\x61\x6C\x69\x64\x53\x74\x61\x74\x65","\x6D\x61\x72\x6B\x65\x64\x53\x74\x61\x74\x65","\x73\x65\x74\x48\x6F\x74\x73\x70\x6F\x74","\x67\x65\x74\x48\x6F\x74\x73\x70\x6F\x74","\x73\x65\x74\x48\x6F\x74\x73\x70\x6F\x74\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x48\x6F\x74\x73\x70\x6F\x74\x45\x6E\x61\x62\x6C\x65\x64","\x68\x61\x73\x56\x61\x6C\x69\x64\x53\x74\x61\x74\x65","\x67\x65\x74\x56\x61\x6C\x69\x64\x53\x74\x61\x74\x65","\x67\x65\x74\x4D\x61\x72\x6B\x65\x64\x53\x74\x61\x74\x65","\x75\x6E\x6D\x61\x72\x6B","\x70\x72\x6F\x63\x65\x73\x73","\x69\x73\x56\x61\x6C\x69\x64\x53\x74\x61\x74\x65","\x67\x65\x74\x4D\x61\x72\x6B\x65\x72\x43\x6F\x6C\x6F\x72","\x6D\x61\x72\x6B\x43\x65\x6C\x6C","\x67\x65\x74\x53\x74\x61\x74\x65\x54\x6F\x4D\x61\x72\x6B","\x69\x6E\x74\x65\x72\x73\x65\x63\x74\x73\x48\x6F\x74\x73\x70\x6F\x74","\x72\x65\x73\x65\x74\x48\x61\x6E\x64\x6C\x65\x72","\x68\x61\x6E\x64\x6C\x65\x72\x73","\x6D\x61\x78\x48\x61\x6E\x64\x6C\x65\x72\x73","\x6D\x6F\x76\x65\x49\x63\x6F\x6E\x46\x72\x6F\x6E\x74","\x6D\x6F\x76\x65\x49\x63\x6F\x6E\x42\x61\x63\x6B","\x63\x6F\x6E\x6E\x65\x63\x74\x49\x6D\x61\x67\x65","\x74\x61\x72\x67\x65\x74\x43\x6F\x6E\x6E\x65\x63\x74\x49\x6D\x61\x67\x65","\x63\x72\x65\x61\x74\x65\x54\x61\x72\x67\x65\x74","\x6D\x61\x72\x6B\x65\x72","\x63\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74\x48\x61\x6E\x64\x6C\x65\x72","\x77\x61\x79\x70\x6F\x69\x6E\x74\x73\x45\x6E\x61\x62\x6C\x65\x64","\x74\x61\x70\x41\x6E\x64\x48\x6F\x6C\x64\x45\x6E\x61\x62\x6C\x65\x64","\x74\x61\x70\x41\x6E\x64\x48\x6F\x6C\x64\x44\x65\x6C\x61\x79","\x74\x61\x70\x41\x6E\x64\x48\x6F\x6C\x64\x49\x6E\x50\x72\x6F\x67\x72\x65\x73\x73","\x74\x61\x70\x41\x6E\x64\x48\x6F\x6C\x64\x56\x61\x6C\x69\x64","\x74\x61\x70\x41\x6E\x64\x48\x6F\x6C\x64\x54\x6F\x6C\x65\x72\x61\x6E\x63\x65","\x69\x6E\x69\x74\x69\x61\x6C\x54\x6F\x75\x63\x68\x58","\x69\x6E\x69\x74\x69\x61\x6C\x54\x6F\x75\x63\x68\x59","\x69\x67\x6E\x6F\x72\x65\x4D\x6F\x75\x73\x65\x44\x6F\x77\x6E","\x63\x6F\x6E\x6E\x65\x63\x74\x49\x63\x6F\x6E\x4F\x66\x66\x73\x65\x74","\x65\x64\x67\x65\x53\x74\x61\x74\x65","\x64\x72\x69\x6C\x6C\x48\x61\x6E\x64\x6C\x65\x72","\x6D\x6F\x75\x73\x65\x44\x6F\x77\x6E\x43\x6F\x75\x6E\x74\x65\x72","\x6D\x6F\x76\x65\x50\x72\x65\x76\x69\x65\x77\x41\x77\x61\x79","\x69\x73\x43\x72\x65\x61\x74\x65\x54\x61\x72\x67\x65\x74","\x73\x65\x74\x43\x72\x65\x61\x74\x65\x54\x61\x72\x67\x65\x74","\x69\x63\x6F\x6E\x53\x74\x61\x74\x65","\x69\x63\x6F\x6E\x73","\x72\x65\x64\x72\x61\x77\x49\x63\x6F\x6E\x73","\x64\x65\x73\x74\x72\x6F\x79\x49\x63\x6F\x6E\x73","\x69\x73\x43\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65\x43\x65\x6C\x6C","\x69\x73\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6E\x67","\x76\x61\x6C\x69\x64\x61\x74\x65\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E","\x63\x72\x65\x61\x74\x65\x45\x64\x67\x65\x53\x74\x61\x74\x65","\x67\x65\x74\x43\x6F\x6E\x6E\x65\x63\x74\x49\x6D\x61\x67\x65","\x69\x73\x4D\x6F\x76\x65\x49\x63\x6F\x6E\x54\x6F\x46\x72\x6F\x6E\x74\x46\x6F\x72\x53\x74\x61\x74\x65","\x63\x72\x65\x61\x74\x65\x49\x63\x6F\x6E\x73","\x43\x55\x52\x53\x4F\x52\x5F\x43\x4F\x4E\x4E\x45\x43\x54","\x63\x75\x72\x72\x65\x6E\x74\x53\x74\x61\x74\x65","\x69\x63\x6F\x6E","\x67\x65\x74\x49\x63\x6F\x6E\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x69\x73\x53\x74\x61\x72\x74\x45\x76\x65\x6E\x74","\x63\x75\x72\x72\x65\x6E\x74\x46\x6F\x63\x75\x73","\x63\x75\x72\x72\x65\x6E\x74\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74","\x73\x6F\x75\x72\x63\x65\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74","\x77\x61\x79\x70\x6F\x69\x6E\x74\x73","\x74\x61\x70\x41\x6E\x64\x48\x6F\x6C\x64\x54\x68\x72\x65\x61\x64","\x63\x6C\x65\x61\x72\x54\x69\x6D\x65\x6F\x75\x74","\x74\x61\x70\x41\x6E\x64\x48\x6F\x6C\x64","\x73\x65\x6C\x65\x63\x74\x65\x64\x49\x63\x6F\x6E","\x69\x73\x49\x6D\x6D\x65\x64\x69\x61\x74\x65\x43\x6F\x6E\x6E\x65\x63\x74\x53\x6F\x75\x72\x63\x65","\x75\x70\x64\x61\x74\x65\x43\x75\x72\x72\x65\x6E\x74\x53\x74\x61\x74\x65","\x63\x6F\x6E\x76\x65\x72\x74\x57\x61\x79\x70\x6F\x69\x6E\x74","\x67\x65\x74\x54\x61\x72\x67\x65\x74\x50\x65\x72\x69\x6D\x65\x74\x65\x72\x50\x6F\x69\x6E\x74","\x67\x65\x74\x53\x6F\x75\x72\x63\x65\x50\x65\x72\x69\x6D\x65\x74\x65\x72\x50\x6F\x69\x6E\x74","\x64\x72\x61\x77\x50\x72\x65\x76\x69\x65\x77","\x75\x70\x64\x61\x74\x65\x49\x63\x6F\x6E\x73","\x69\x73\x53\x74\x6F\x70\x45\x76\x65\x6E\x74","\x61\x64\x64\x57\x61\x79\x70\x6F\x69\x6E\x74\x46\x6F\x72\x45\x76\x65\x6E\x74","\x67\x65\x74\x45\x64\x67\x65\x57\x69\x64\x74\x68","\x67\x65\x74\x45\x64\x67\x65\x43\x6F\x6C\x6F\x72","\x49\x4E\x56\x41\x4C\x49\x44\x5F\x43\x4F\x4C\x4F\x52","\x63\x72\x65\x61\x74\x65\x54\x61\x72\x67\x65\x74\x56\x65\x72\x74\x65\x78","\x67\x65\x74\x41\x6C\x69\x67\x6E\x6D\x65\x6E\x74\x54\x6F\x6C\x65\x72\x61\x6E\x63\x65","\x70\x6F\x69\x6E\x74\x49\x6D\x61\x67\x65","\x2F\x70\x6F\x69\x6E\x74\x2E\x67\x69\x66","\x68\x69\x67\x68\x6C\x69\x67\x68\x74\x43\x6F\x6C\x6F\x72","\x66\x6F\x63\x75\x73\x49\x63\x6F\x6E\x73","\x66\x6F\x63\x75\x73\x48\x69\x67\x68\x6C\x69\x67\x68\x74","\x66\x6F\x63\x75\x73\x50\x6F\x69\x6E\x74\x73","\x63\x75\x72\x72\x65\x6E\x74\x46\x6F\x63\x75\x73\x41\x72\x65\x61","\x67\x65\x74\x49\x6D\x61\x67\x65\x46\x6F\x72\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74","\x69\x73\x45\x76\x65\x6E\x74\x49\x67\x6E\x6F\x72\x65\x64","\x72\x65\x70\x61\x69\x6E\x74","\x64\x65\x66\x61\x75\x6C\x74\x4F\x70\x61\x63\x69\x74\x79","\x73\x68\x61\x72\x65\x64\x44\x69\x76","\x63\x75\x72\x72\x65\x6E\x74\x58","\x63\x75\x72\x72\x65\x6E\x74\x59","\x64\x72\x61\x67\x48\x61\x6E\x64\x6C\x65\x72","\x6D\x78\x52\x75\x62\x62\x65\x72\x62\x61\x6E\x64","\x73\x69\x6E\x67\x6C\x65\x53\x69\x7A\x65\x72","\x61\x6C\x6C\x6F\x77\x48\x61\x6E\x64\x6C\x65\x42\x6F\x75\x6E\x64\x73\x43\x68\x65\x63\x6B","\x68\x61\x6E\x64\x6C\x65\x49\x6D\x61\x67\x65","\x72\x6F\x74\x61\x74\x69\x6F\x6E\x52\x61\x73\x74\x65\x72","\x73\x65\x6C\x65\x63\x74\x69\x6F\x6E\x42\x6F\x75\x6E\x64\x73","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x42\x6F\x75\x6E\x64\x73","\x63\x72\x65\x61\x74\x65\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x53\x68\x61\x70\x65","\x73\x69\x7A\x65\x72\x73","\x6E\x2D\x72\x65\x73\x69\x7A\x65","\x6E\x65\x2D\x72\x65\x73\x69\x7A\x65","\x77\x2D\x72\x65\x73\x69\x7A\x65","\x65\x2D\x72\x65\x73\x69\x7A\x65","\x73\x77\x2D\x72\x65\x73\x69\x7A\x65","\x73\x2D\x72\x65\x73\x69\x7A\x65","\x73\x65\x2D\x72\x65\x73\x69\x7A\x65","\x6C\x61\x62\x65\x6C\x53\x68\x61\x70\x65","\x72\x6F\x74\x61\x74\x69\x6F\x6E\x53\x68\x61\x70\x65","\x48\x41\x4E\x44\x4C\x45\x5F\x53\x49\x5A\x45","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x6F\x6C\x6F\x72","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x53\x74\x72\x6F\x6B\x65\x57\x69\x64\x74\x68","\x69\x73\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x44\x61\x73\x68\x65\x64","\x56\x45\x52\x54\x45\x58\x5F\x53\x45\x4C\x45\x43\x54\x49\x4F\x4E\x5F\x43\x4F\x4C\x4F\x52","\x56\x45\x52\x54\x45\x58\x5F\x53\x45\x4C\x45\x43\x54\x49\x4F\x4E\x5F\x53\x54\x52\x4F\x4B\x45\x57\x49\x44\x54\x48","\x56\x45\x52\x54\x45\x58\x5F\x53\x45\x4C\x45\x43\x54\x49\x4F\x4E\x5F\x44\x41\x53\x48\x45\x44","\x63\x72\x65\x61\x74\x65\x53\x69\x7A\x65\x72\x53\x68\x61\x70\x65","\x69\x73\x53\x69\x7A\x65\x72\x56\x69\x73\x69\x62\x6C\x65","\x52\x4F\x54\x41\x54\x49\x4F\x4E\x5F\x48\x41\x4E\x44\x4C\x45","\x48\x41\x4E\x44\x4C\x45\x5F\x46\x49\x4C\x4C\x43\x4F\x4C\x4F\x52","\x6D\x6F\x76\x65\x53\x69\x7A\x65\x72\x54\x6F","\x67\x65\x74\x48\x61\x6E\x64\x6C\x65\x46\x6F\x72\x45\x76\x65\x6E\x74","\x4C\x41\x42\x45\x4C\x5F\x48\x41\x4E\x44\x4C\x45","\x70\x72\x65\x76\x69\x65\x77","\x63\x75\x72\x72\x65\x6E\x74\x41\x6C\x70\x68\x61","\x61\x74\x61\x6E","\x75\x6E\x69\x6F\x6E","\x72\x6F\x74\x61\x74\x65\x43\x65\x6C\x6C","\x6D\x6F\x76\x65\x43\x68\x69\x6C\x64\x72\x65\x6E","\x62\x65\x6E\x64\x73","\x72\x65\x6D\x6F\x76\x65\x45\x6E\x61\x62\x6C\x65\x64","\x73\x6E\x61\x70\x54\x6F\x54\x65\x72\x6D\x69\x6E\x61\x6C\x73","\x61\x62\x73\x70\x6F\x69\x6E\x74\x73","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x50\x6F\x69\x6E\x74\x73","\x69\x73\x41\x64\x64\x50\x6F\x69\x6E\x74\x45\x76\x65\x6E\x74","\x61\x64\x64\x50\x6F\x69\x6E\x74","\x63\x72\x65\x61\x74\x65\x42\x65\x6E\x64\x73","\x69\x6E\x69\x74\x42\x65\x6E\x64","\x43\x55\x52\x53\x4F\x52\x5F\x4C\x41\x42\x45\x4C\x5F\x48\x41\x4E\x44\x4C\x45","\x69\x73\x52\x65\x6D\x6F\x76\x65\x50\x6F\x69\x6E\x74\x45\x76\x65\x6E\x74","\x45\x44\x47\x45\x5F\x53\x45\x4C\x45\x43\x54\x49\x4F\x4E\x5F\x43\x4F\x4C\x4F\x52","\x45\x44\x47\x45\x5F\x53\x45\x4C\x45\x43\x54\x49\x4F\x4E\x5F\x53\x54\x52\x4F\x4B\x45\x57\x49\x44\x54\x48","\x45\x44\x47\x45\x5F\x53\x45\x4C\x45\x43\x54\x49\x4F\x4E\x5F\x44\x41\x53\x48\x45\x44","\x69\x73\x48\x61\x6E\x64\x6C\x65\x56\x69\x73\x69\x62\x6C\x65","\x63\x72\x65\x61\x74\x65\x48\x61\x6E\x64\x6C\x65\x53\x68\x61\x70\x65","\x69\x73\x48\x61\x6E\x64\x6C\x65\x45\x6E\x61\x62\x6C\x65\x64","\x43\x55\x52\x53\x4F\x52\x5F\x42\x45\x4E\x44\x5F\x48\x41\x4E\x44\x4C\x45","\x72\x65\x6D\x6F\x76\x65\x50\x6F\x69\x6E\x74","\x69\x73\x54\x61\x72\x67\x65\x74","\x69\x73\x4C\x61\x62\x65\x6C","\x63\x6C\x6F\x6E\x65\x50\x72\x65\x76\x69\x65\x77\x53\x74\x61\x74\x65","\x67\x65\x74\x53\x6E\x61\x70\x54\x6F\x54\x65\x72\x6D\x69\x6E\x61\x6C\x54\x6F\x6C\x65\x72\x61\x6E\x63\x65","\x67\x65\x74\x50\x72\x65\x76\x69\x65\x77\x54\x65\x72\x6D\x69\x6E\x61\x6C\x53\x74\x61\x74\x65","\x67\x65\x74\x50\x72\x65\x76\x69\x65\x77\x50\x6F\x69\x6E\x74\x73","\x75\x70\x64\x61\x74\x65\x50\x72\x65\x76\x69\x65\x77\x53\x74\x61\x74\x65","\x73\x65\x74\x50\x72\x65\x76\x69\x65\x77\x43\x6F\x6C\x6F\x72","\x6D\x6F\x76\x65\x4C\x61\x62\x65\x6C","\x63\x68\x61\x6E\x67\x65\x54\x65\x72\x6D\x69\x6E\x61\x6C\x50\x6F\x69\x6E\x74","\x63\x68\x61\x6E\x67\x65\x50\x6F\x69\x6E\x74\x73","\x61\x64\x64\x50\x6F\x69\x6E\x74\x41\x74","\x66\x69\x6E\x64\x4E\x65\x61\x72\x65\x73\x74\x53\x65\x67\x6D\x65\x6E\x74","\x67\x65\x74\x48\x61\x6E\x64\x6C\x65\x46\x69\x6C\x6C\x43\x6F\x6C\x6F\x72","\x4C\x4F\x43\x4B\x45\x44\x5F\x48\x41\x4E\x44\x4C\x45\x5F\x46\x49\x4C\x4C\x43\x4F\x4C\x4F\x52","\x43\x4F\x4E\x4E\x45\x43\x54\x5F\x48\x41\x4E\x44\x4C\x45\x5F\x46\x49\x4C\x4C\x43\x4F\x4C\x4F\x52","\x4C\x41\x42\x45\x4C\x5F\x48\x41\x4E\x44\x4C\x45\x5F\x53\x49\x5A\x45","\x72\x65\x64\x72\x61\x77\x49\x6E\x6E\x65\x72\x42\x65\x6E\x64\x73","\x66\x6C\x69\x70\x45\x6E\x61\x62\x6C\x65\x64","\x64\x6F\x75\x62\x6C\x65\x43\x6C\x69\x63\x6B\x4F\x72\x69\x65\x6E\x74\x61\x74\x69\x6F\x6E\x52\x65\x73\x6F\x75\x72\x63\x65","\x64\x6F\x75\x62\x6C\x65\x43\x6C\x69\x63\x6B\x4F\x72\x69\x65\x6E\x74\x61\x74\x69\x6F\x6E","\x63\x72\x65\x61\x74\x65\x56\x69\x72\x74\x75\x61\x6C\x42\x65\x6E\x64","\x67\x65\x74\x43\x75\x72\x73\x6F\x72\x46\x6F\x72\x42\x65\x6E\x64","\x45\x44\x47\x45\x53\x54\x59\x4C\x45\x5F\x54\x4F\x50\x54\x4F\x42\x4F\x54\x54\x4F\x4D","\x45\x44\x47\x45\x53\x54\x59\x4C\x45\x5F\x45\x4C\x42\x4F\x57","\x72\x6F\x77\x2D\x72\x65\x73\x69\x7A\x65","\x63\x6F\x6C\x2D\x72\x65\x73\x69\x7A\x65","\x6E\x6F\x72\x6D\x61\x6C\x4B\x65\x79\x73","\x73\x68\x69\x66\x74\x4B\x65\x79\x73","\x63\x6F\x6E\x74\x72\x6F\x6C\x4B\x65\x79\x73","\x63\x6F\x6E\x74\x72\x6F\x6C\x53\x68\x69\x66\x74\x4B\x65\x79\x73","\x6B\x65\x79\x44\x6F\x77\x6E","\x62\x69\x6E\x64\x4B\x65\x79","\x62\x69\x6E\x64\x53\x68\x69\x66\x74\x4B\x65\x79","\x62\x69\x6E\x64\x43\x6F\x6E\x74\x72\x6F\x6C\x4B\x65\x79","\x62\x69\x6E\x64\x43\x6F\x6E\x74\x72\x6F\x6C\x53\x68\x69\x66\x74\x4B\x65\x79","\x67\x65\x74\x46\x75\x6E\x63\x74\x69\x6F\x6E","\x69\x73\x47\x72\x61\x70\x68\x45\x76\x65\x6E\x74","\x68\x69\x64\x65\x4F\x6E\x48\x6F\x76\x65\x72","\x73\x65\x74\x48\x69\x64\x65\x4F\x6E\x48\x6F\x76\x65\x72","\x6D\x78\x54\x6F\x6F\x6C\x74\x69\x70","\x68\x69\x64\x65\x54\x6F\x6F\x6C\x74\x69\x70","\x73\x74\x61\x74\x65\x53\x6F\x75\x72\x63\x65","\x72\x65\x73\x65\x74\x54\x69\x6D\x65\x72","\x48\x49\x47\x48\x4C\x49\x47\x48\x54\x5F\x53\x54\x52\x4F\x4B\x45\x57\x49\x44\x54\x48","\x72\x65\x70\x61\x69\x6E\x74\x48\x61\x6E\x64\x6C\x65\x72","\x6B\x65\x65\x70\x4F\x6E\x54\x6F\x70","\x64\x72\x61\x77\x48\x69\x67\x68\x6C\x69\x67\x68\x74","\x65\x64\x69\x74\x6F\x72","\x68\x69\x64\x65\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73","\x62\x69\x6E\x64\x41\x63\x74\x69\x6F\x6E","\x63\x6F\x6E\x66\x69\x67","\x63\x72\x65\x61\x74\x65\x4D\x65\x6E\x75","\x63\x72\x65\x61\x74\x65\x43\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73","\x61\x64\x64\x49\x74\x65\x6D\x73","\x69\x66","\x61\x73","\x69\x63\x6F\x6E\x43\x6C\x73","\x61\x64\x64\x41\x63\x74\x69\x6F\x6E","\x73\x65\x70\x61\x72\x61\x74\x6F\x72","\x6E\x6F\x63\x65\x6C\x6C","\x6E\x63\x65\x6C\x6C\x73","\x6E\x6F\x74\x52\x6F\x6F\x74","\x6E\x6F\x6E\x45\x6D\x70\x74\x79","\x65\x78\x70\x61\x6E\x64\x61\x62\x6C\x65","\x63\x6F\x6C\x6C\x61\x70\x73\x61\x62\x6C\x65","\x76\x61\x6C\x69\x64\x52\x6F\x6F\x74","\x65\x6D\x70\x74\x79\x56\x61\x6C\x69\x64\x52\x6F\x6F\x74","\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E","\x74\x6F\x6F\x6C\x62\x61\x72","\x69\x6E\x73\x65\x72\x74\x46\x75\x6E\x63\x74\x69\x6F\x6E","\x2F\x73\x65\x70\x61\x72\x61\x74\x6F\x72\x2E\x67\x69\x66","\x61\x64\x64\x41\x63\x74\x69\x6F\x6E\x4F\x70\x74\x69\x6F\x6E","\x73\x65\x74\x4D\x6F\x64\x65","\x61\x64\x64\x50\x72\x6F\x74\x6F\x74\x79\x70\x65","\x69\x6E\x73\x74\x61\x6C\x6C\x44\x72\x6F\x70\x48\x61\x6E\x64\x6C\x65\x72","\x68\x6F\x72\x69\x7A\x6F\x6E\x74\x61\x6C\x46\x6C\x6F\x77","\x6D\x61\x6B\x65\x44\x72\x61\x67\x67\x61\x62\x6C\x65","\x61\x63\x74\x69\x6F\x6E\x73","\x61\x64\x64\x41\x63\x74\x69\x6F\x6E\x73","\x63\x79\x63\x6C\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x56\x61\x6C\x75\x65\x73","\x70\x6F\x70\x75\x70\x48\x61\x6E\x64\x6C\x65\x72","\x75\x6E\x64\x6F\x4D\x61\x6E\x61\x67\x65\x72","\x63\x72\x65\x61\x74\x65\x47\x72\x61\x70\x68","\x63\x72\x65\x61\x74\x65\x54\x6F\x6F\x6C\x62\x61\x72","\x6B\x65\x79\x48\x61\x6E\x64\x6C\x65\x72","\x63\x6F\x6E\x66\x69\x67\x75\x72\x65","\x63\x79\x63\x6C\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x4E\x61\x6D\x65","\x49\x53\x5F\x4C\x4F\x43\x41\x4C","\x63\x72\x65\x61\x74\x65\x53\x65\x73\x73\x69\x6F\x6E","\x2F\x72\x65\x73\x6F\x75\x72\x63\x65\x73\x2F\x65\x64\x69\x74\x6F\x72","\x61\x73\x6B\x5A\x6F\x6F\x6D\x52\x65\x73\x6F\x75\x72\x63\x65","\x61\x73\x6B\x5A\x6F\x6F\x6D","\x6C\x61\x73\x74\x53\x61\x76\x65\x64\x52\x65\x73\x6F\x75\x72\x63\x65","\x6C\x61\x73\x74\x53\x61\x76\x65\x64","\x63\x75\x72\x72\x65\x6E\x74\x46\x69\x6C\x65\x52\x65\x73\x6F\x75\x72\x63\x65","\x63\x75\x72\x72\x65\x6E\x74\x46\x69\x6C\x65","\x70\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x52\x65\x73\x6F\x75\x72\x63\x65","\x74\x61\x73\x6B\x73\x52\x65\x73\x6F\x75\x72\x63\x65","\x74\x61\x73\x6B\x73","\x68\x65\x6C\x70\x52\x65\x73\x6F\x75\x72\x63\x65","\x6F\x75\x74\x6C\x69\x6E\x65\x52\x65\x73\x6F\x75\x72\x63\x65","\x64\x62\x6C\x43\x6C\x69\x63\x6B\x41\x63\x74\x69\x6F\x6E","\x73\x77\x69\x6D\x6C\x61\x6E\x65\x52\x65\x71\x75\x69\x72\x65\x64","\x66\x6F\x72\x63\x65\x64\x49\x6E\x73\x65\x72\x74\x69\x6E\x67","\x74\x65\x6D\x70\x6C\x61\x74\x65\x73","\x64\x65\x66\x61\x75\x6C\x74\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x64\x65\x66\x61\x75\x6C\x74\x47\x72\x6F\x75\x70","\x67\x72\x6F\x75\x70\x42\x6F\x72\x64\x65\x72\x53\x69\x7A\x65","\x66\x69\x6C\x65\x6E\x61\x6D\x65","\x70\x6F\x73\x74\x50\x61\x72\x61\x6D\x65\x74\x65\x72\x4E\x61\x6D\x65","\x75\x72\x6C\x50\x6F\x73\x74","\x75\x72\x6C\x49\x6D\x61\x67\x65","\x6C\x61\x79\x6F\x75\x74\x44\x69\x61\x67\x72\x61\x6D","\x73\x77\x69\x6D\x6C\x61\x6E\x65\x53\x70\x61\x63\x69\x6E\x67","\x6D\x61\x69\x6E\x74\x61\x69\x6E\x53\x77\x69\x6D\x6C\x61\x6E\x65\x73","\x6C\x61\x79\x6F\x75\x74\x53\x77\x69\x6D\x6C\x61\x6E\x65\x73","\x63\x79\x63\x6C\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x49\x6E\x64\x65\x78","\x74\x61\x73\x6B\x73\x57\x69\x6E\x64\x6F\x77\x49\x6D\x61\x67\x65","\x74\x61\x73\x6B\x73\x54\x6F\x70","\x68\x65\x6C\x70\x57\x69\x6E\x64\x6F\x77\x49\x6D\x61\x67\x65","\x75\x72\x6C\x48\x65\x6C\x70","\x68\x65\x6C\x70\x57\x69\x64\x74\x68","\x68\x65\x6C\x70\x48\x65\x69\x67\x68\x74","\x70\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x57\x69\x64\x74\x68","\x70\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x48\x65\x69\x67\x68\x74","\x6D\x6F\x76\x65\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x44\x69\x61\x6C\x6F\x67","\x76\x61\x6C\x69\x64\x61\x74\x69\x6E\x67","\x65\x78\x70\x6F\x72\x74\x49\x6D\x61\x67\x65","\x67\x65\x74\x55\x72\x6C\x49\x6D\x61\x67\x65","\x67\x65\x74\x56\x69\x65\x77\x58\x6D\x6C","\x5F\x62\x6C\x61\x6E\x6B","\x63\x75\x74","\x70\x61\x73\x74\x65","\x64\x65\x6C\x65\x74\x65","\x75\x6E\x67\x72\x6F\x75\x70","\x61\x63\x74\x75\x61\x6C\x53\x69\x7A\x65","\x73\x68\x6F\x77\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73","\x73\x65\x6C\x65\x63\x74\x4E\x6F\x6E\x65","\x74\x6F\x42\x61\x63\x6B","\x74\x6F\x46\x72\x6F\x6E\x74","\x73\x65\x6C\x65\x63\x74\x50\x72\x65\x76\x69\x6F\x75\x73","\x73\x65\x6C\x65\x63\x74\x4E\x65\x78\x74","\x73\x65\x6C\x65\x63\x74\x50\x61\x72\x65\x6E\x74","\x73\x65\x6C\x65\x63\x74\x43\x68\x69\x6C\x64","\x63\x6F\x6C\x6C\x61\x70\x73\x65\x41\x6C\x6C","\x65\x78\x70\x61\x6E\x64","\x65\x78\x70\x61\x6E\x64\x41\x6C\x6C","\x61\x6C\x69\x67\x6E\x43\x65\x6C\x6C\x73\x4C\x65\x66\x74","\x61\x6C\x69\x67\x6E\x43\x65\x6C\x6C\x73\x43\x65\x6E\x74\x65\x72","\x61\x6C\x69\x67\x6E\x43\x65\x6C\x6C\x73\x52\x69\x67\x68\x74","\x61\x6C\x69\x67\x6E\x43\x65\x6C\x6C\x73\x54\x6F\x70","\x61\x6C\x69\x67\x6E\x43\x65\x6C\x6C\x73\x4D\x69\x64\x64\x6C\x65","\x61\x6C\x69\x67\x6E\x43\x65\x6C\x6C\x73\x42\x6F\x74\x74\x6F\x6D","\x61\x6C\x69\x67\x6E\x46\x6F\x6E\x74\x4C\x65\x66\x74","\x61\x6C\x69\x67\x6E\x46\x6F\x6E\x74\x43\x65\x6E\x74\x65\x72","\x61\x6C\x69\x67\x6E\x46\x6F\x6E\x74\x52\x69\x67\x68\x74","\x61\x6C\x69\x67\x6E\x46\x6F\x6E\x74\x54\x6F\x70","\x61\x6C\x69\x67\x6E\x46\x6F\x6E\x74\x4D\x69\x64\x64\x6C\x65","\x61\x6C\x69\x67\x6E\x46\x6F\x6E\x74\x42\x6F\x74\x74\x6F\x6D","\x70\x72\x6F\x6D\x70\x74","\x74\x6F\x67\x67\x6C\x65\x54\x61\x73\x6B\x73","\x73\x68\x6F\x77\x54\x61\x73\x6B\x73","\x74\x6F\x67\x67\x6C\x65\x48\x65\x6C\x70","\x73\x68\x6F\x77\x48\x65\x6C\x70","\x74\x6F\x67\x67\x6C\x65\x4F\x75\x74\x6C\x69\x6E\x65","\x73\x68\x6F\x77\x4F\x75\x74\x6C\x69\x6E\x65","\x74\x6F\x67\x67\x6C\x65\x43\x6F\x6E\x73\x6F\x6C\x65","\x72\x65\x73\x65\x74\x48\x69\x73\x74\x6F\x72\x79","\x72\x65\x73\x65\x74\x46\x69\x72\x73\x74\x54\x69\x6D\x65","\x63\x6F\x6F\x6B\x69\x65","\x6D\x78\x67\x72\x61\x70\x68\x3D\x73\x65\x65\x6E\x3B\x20\x65\x78\x70\x69\x72\x65\x73\x3D\x46\x72\x69\x2C\x20\x32\x37\x20\x4A\x75\x6C\x20\x32\x30\x30\x31\x20\x30\x32\x3A\x34\x37\x3A\x31\x31\x20\x55\x54\x43\x3B\x20\x70\x61\x74\x68\x3D\x2F","\x43\x61\x6E\x6E\x6F\x74\x20\x65\x78\x65\x63\x75\x74\x65\x20","\x3A\x20","\x43\x61\x6E\x6E\x6F\x74\x20\x66\x69\x6E\x64\x20\x61\x63\x74\x69\x6F\x6E\x20","\x61\x64\x64\x54\x65\x6D\x70\x6C\x61\x74\x65","\x67\x65\x74\x54\x65\x6D\x70\x6C\x61\x74\x65","\x69\x6E\x73\x74\x61\x6C\x6C\x44\x62\x6C\x43\x6C\x69\x63\x6B\x48\x61\x6E\x64\x6C\x65\x72","\x69\x6E\x73\x74\x61\x6C\x6C\x55\x6E\x64\x6F\x48\x61\x6E\x64\x6C\x65\x72","\x69\x6E\x73\x74\x61\x6C\x6C\x44\x72\x69\x6C\x6C\x48\x61\x6E\x64\x6C\x65\x72","\x69\x6E\x73\x74\x61\x6C\x6C\x43\x68\x61\x6E\x67\x65\x48\x61\x6E\x64\x6C\x65\x72","\x69\x6E\x73\x74\x61\x6C\x6C\x49\x6E\x73\x65\x72\x74\x48\x61\x6E\x64\x6C\x65\x72","\x63\x72\x65\x61\x74\x65\x50\x6F\x70\x75\x70\x4D\x65\x6E\x75","\x63\x72\x65\x61\x74\x65\x53\x77\x69\x6D\x6C\x61\x6E\x65\x4D\x61\x6E\x61\x67\x65\x72","\x63\x72\x65\x61\x74\x65\x4C\x61\x79\x6F\x75\x74\x4D\x61\x6E\x61\x67\x65\x72","\x73\x77\x69\x6D\x6C\x61\x6E\x65\x4C\x61\x79\x6F\x75\x74","\x63\x72\x65\x61\x74\x65\x53\x77\x69\x6D\x6C\x61\x6E\x65\x4C\x61\x79\x6F\x75\x74","\x64\x69\x61\x67\x72\x61\x6D\x4C\x61\x79\x6F\x75\x74","\x63\x72\x65\x61\x74\x65\x44\x69\x61\x67\x72\x61\x6D\x4C\x61\x79\x6F\x75\x74","\x73\x65\x74\x47\x72\x61\x70\x68\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x72\x75\x62\x62\x65\x72\x62\x61\x6E\x64","\x73\x65\x74\x54\x6F\x6F\x6C\x62\x61\x72\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x73\x65\x74\x53\x74\x61\x74\x75\x73\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x74\x6F\x4C\x6F\x63\x61\x6C\x65\x53\x74\x72\x69\x6E\x67","\x73\x65\x74\x53\x74\x61\x74\x75\x73","\x73\x65\x74\x54\x69\x74\x6C\x65\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x67\x65\x74\x54\x69\x74\x6C\x65","\x74\x72\x65\x65\x4C\x61\x79\x6F\x75\x74","\x20\x3E\x20","\x67\x65\x74\x52\x6F\x6F\x74\x54\x69\x74\x6C\x65","\x63\x72\x65\x61\x74\x65\x47\x72\x6F\x75\x70","\x72\x65\x61\x64\x47\x72\x61\x70\x68\x4D\x6F\x64\x65\x6C","\x67\x65\x74\x55\x72\x6C\x50\x6F\x73\x74","\x77\x72\x69\x74\x65\x47\x72\x61\x70\x68\x4D\x6F\x64\x65\x6C","\x70\x6F\x73\x74\x44\x69\x61\x67\x72\x61\x6D","\x73\x77\x61\x70\x53\x74\x79\x6C\x65\x73","\x63\x72\x65\x61\x74\x65\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73","\x69\x73\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x56\x69\x73\x69\x62\x6C\x65","\x72\x65\x61\x64\x6F\x6E\x6C\x79","\x49\x44","\x53\x74\x79\x6C\x65","\x63\x72\x65\x61\x74\x65\x54\x61\x73\x6B\x73","\x72\x65\x66\x72\x65\x73\x68\x54\x61\x73\x6B\x73","\x66\x72\x61\x6D\x65\x42\x6F\x72\x64\x65\x72","\x63\x6F\x6E\x73\x75\x6D\x65\x43\x79\x63\x6C\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x63\x79\x63\x6C\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x69\x73\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x65\x64\x4D\x6F\x76\x69\x6E\x67","\x63\x6F\x64\x65\x63\x73","\x74\x65\x6D\x70\x6C\x61\x74\x65","\x61\x64\x64\x41\x6C\x69\x61\x73","\x61\x6C\x69\x61\x73\x65\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x65\x6E\x63\x6F\x64\x65\x44\x65\x66\x61\x75\x6C\x74\x73","\x67\x65\x74\x4F\x62\x6A\x65\x63\x74","\x72\x65\x66\x65\x72\x65\x6E\x63\x65","\x67\x65\x74\x43\x6F\x64\x65\x63","\x69\x6D\x70\x6F\x72\x74\x4E\x6F\x64\x65","\x6D\x78\x43\x6F\x64\x65\x63\x2E\x65\x6E\x63\x6F\x64\x65\x3A\x20\x4E\x6F\x20\x63\x6F\x64\x65\x63\x20\x66\x6F\x72\x20","\x43\x61\x6E\x6E\x6F\x74\x20\x64\x65\x63\x6F\x64\x65\x20","\x65\x6E\x63\x6F\x64\x65\x43\x65\x6C\x6C","\x69\x73\x43\x65\x6C\x6C\x43\x6F\x64\x65\x63","\x64\x65\x63\x6F\x64\x65\x43\x65\x6C\x6C","\x69\x6E\x73\x65\x72\x74\x49\x6E\x74\x6F\x47\x72\x61\x70\x68","\x65\x78\x63\x6C\x75\x64\x65","\x69\x64\x72\x65\x66\x73","\x6D\x61\x70\x70\x69\x6E\x67","\x72\x65\x76\x65\x72\x73\x65","\x63\x6C\x6F\x6E\x65\x54\x65\x6D\x70\x6C\x61\x74\x65","\x67\x65\x74\x46\x69\x65\x6C\x64\x4E\x61\x6D\x65","\x67\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65\x4E\x61\x6D\x65","\x69\x73\x45\x78\x63\x6C\x75\x64\x65\x64","\x69\x73\x52\x65\x66\x65\x72\x65\x6E\x63\x65","\x62\x65\x66\x6F\x72\x65\x45\x6E\x63\x6F\x64\x65","\x65\x6E\x63\x6F\x64\x65\x4F\x62\x6A\x65\x63\x74","\x61\x66\x74\x65\x72\x45\x6E\x63\x6F\x64\x65","\x65\x6E\x63\x6F\x64\x65\x56\x61\x6C\x75\x65","\x6D\x78\x4F\x62\x6A\x65\x63\x74\x43\x6F\x64\x65\x63\x2E\x65\x6E\x63\x6F\x64\x65\x3A\x20\x4E\x6F\x20\x49\x44\x20\x66\x6F\x72\x20","\x77\x72\x69\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x77\x72\x69\x74\x65\x50\x72\x69\x6D\x69\x74\x69\x76\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x77\x72\x69\x74\x65\x43\x6F\x6D\x70\x6C\x65\x78\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x63\x6F\x6E\x76\x65\x72\x74\x56\x61\x6C\x75\x65\x54\x6F\x58\x6D\x6C","\x6D\x78\x4F\x62\x6A\x65\x63\x74\x43\x6F\x64\x65\x63\x2E\x65\x6E\x63\x6F\x64\x65\x3A\x20\x4E\x6F\x20\x6E\x6F\x64\x65\x20\x66\x6F\x72\x20","\x63\x6F\x6E\x76\x65\x72\x74\x56\x61\x6C\x75\x65\x46\x72\x6F\x6D\x58\x6D\x6C","\x62\x65\x66\x6F\x72\x65\x44\x65\x63\x6F\x64\x65","\x64\x65\x63\x6F\x64\x65\x4E\x6F\x64\x65","\x61\x66\x74\x65\x72\x44\x65\x63\x6F\x64\x65","\x64\x65\x63\x6F\x64\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x64\x65\x63\x6F\x64\x65\x43\x68\x69\x6C\x64\x72\x65\x6E","\x64\x65\x63\x6F\x64\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x6D\x78\x4F\x62\x6A\x65\x63\x74\x43\x6F\x64\x65\x63\x2E\x64\x65\x63\x6F\x64\x65\x3A\x20\x4E\x6F\x20\x6F\x62\x6A\x65\x63\x74\x20\x66\x6F\x72\x20","\x70\x72\x6F\x63\x65\x73\x73\x49\x6E\x63\x6C\x75\x64\x65","\x64\x65\x63\x6F\x64\x65\x43\x68\x69\x6C\x64","\x67\x65\x74\x46\x69\x65\x6C\x64\x54\x65\x6D\x70\x6C\x61\x74\x65","\x61\x64\x64\x4F\x62\x6A\x65\x63\x74\x56\x61\x6C\x75\x65","\x69\x6E\x63\x6C\x75\x64\x65","\x72\x65\x6D\x6F\x76\x65\x57\x68\x69\x74\x65\x73\x70\x61\x63\x65","\x64\x65\x63\x6F\x64\x65\x52\x6F\x6F\x74","\x67\x72\x61\x70\x68\x4C\x69\x73\x74\x65\x6E\x65\x72\x73\x20\x65\x76\x65\x6E\x74\x4C\x69\x73\x74\x65\x6E\x65\x72\x73\x20\x76\x69\x65\x77\x20\x63\x6F\x6E\x74\x61\x69\x6E\x65\x72\x20\x63\x65\x6C\x6C\x52\x65\x6E\x64\x65\x72\x65\x72\x20\x65\x64\x69\x74\x6F\x72\x20\x73\x65\x6C\x65\x63\x74\x69\x6F\x6E","\x6C\x61\x79\x65\x72","\x67\x65\x74\x53\x74\x72\x69\x6E\x67\x56\x61\x6C\x75\x65","\x6D\x78\x53\x74\x79\x6C\x65\x73\x68\x65\x65\x74\x43\x6F\x64\x65\x63\x2E\x64\x65\x63\x6F\x64\x65\x3A\x20\x73\x74\x79\x6C\x65\x73\x68\x65\x65\x74\x20","\x20\x6E\x6F\x74\x20\x66\x6F\x75\x6E\x64\x20\x74\x6F\x20\x65\x78\x74\x65\x6E\x64","\x70\x72\x65\x73\x73\x65\x64\x49\x63\x6F\x6E","\x6D\x6F\x64\x65","\x74\x6F\x67\x67\x6C\x65","\x2D\x2D\x2D","\x63\x65\x6C\x6C\x53\x74\x79\x6C\x65","\x54\x65\x6D\x70\x6C\x61\x74\x65\x20","\x20\x6E\x6F\x74\x20\x66\x6F\x75\x6E\x64","\x6D\x6F\x64\x69\x66\x69\x65\x64\x20\x6C\x61\x73\x74\x53\x6E\x61\x70\x73\x68\x6F\x74\x20\x69\x67\x6E\x6F\x72\x65\x64\x43\x68\x61\x6E\x67\x65\x73\x20\x75\x6E\x64\x6F\x4D\x61\x6E\x61\x67\x65\x72\x20\x67\x72\x61\x70\x68\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72\x20\x74\x6F\x6F\x6C\x62\x61\x72\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x41\x72\x72\x61\x79","\x64\x65\x63\x6F\x64\x65\x54\x65\x6D\x70\x6C\x61\x74\x65\x73","\x75\x69","\x64\x65\x63\x6F\x64\x65\x55\x69","\x73\x65\x74\x4D\x61\x70\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x72\x65\x73\x6F\x75\x72\x63\x65","\x62\x61\x73\x65\x6E\x61\x6D\x65"];var mxClient={VERSION:_0xd587[0],IS_IE:0<= navigator[_0xd587[3]][_0xd587[2]](_0xd587[1]),IS_IE6:0<= navigator[_0xd587[3]][_0xd587[2]](_0xd587[4]),IS_QUIRKS:0<= navigator[_0xd587[3]][_0xd587[2]](_0xd587[1])&& (null== document[_0xd587[5]]|| 5== document[_0xd587[5]]),VML_PREFIX:_0xd587[6],OFFICE_PREFIX:_0xd587[7],IS_NS:0<= navigator[_0xd587[3]][_0xd587[2]](_0xd587[8])&& 0> navigator[_0xd587[3]][_0xd587[2]](_0xd587[1]),IS_OP:0<= navigator[_0xd587[3]][_0xd587[2]](_0xd587[9]),IS_OT:0> navigator[_0xd587[3]][_0xd587[2]](_0xd587[10])&& 0> navigator[_0xd587[3]][_0xd587[2]](_0xd587[11])&& 0> navigator[_0xd587[3]][_0xd587[2]](_0xd587[12])&& 0> navigator[_0xd587[3]][_0xd587[2]](_0xd587[13])&& 0> navigator[_0xd587[3]][_0xd587[2]](_0xd587[14])&& 0> navigator[_0xd587[3]][_0xd587[2]](_0xd587[15]),IS_SF:0<= navigator[_0xd587[3]][_0xd587[2]](_0xd587[16])&& 0> navigator[_0xd587[3]][_0xd587[2]](_0xd587[17]),IS_GC:0<= navigator[_0xd587[3]][_0xd587[2]](_0xd587[17]),IS_MT:0<= navigator[_0xd587[3]][_0xd587[2]](_0xd587[18])&& 0> navigator[_0xd587[3]][_0xd587[2]](_0xd587[19])&& 0> navigator[_0xd587[3]][_0xd587[2]](_0xd587[20])|| 0<= navigator[_0xd587[3]][_0xd587[2]](_0xd587[21])&& 0> navigator[_0xd587[3]][_0xd587[2]](_0xd587[22])&& 0> navigator[_0xd587[3]][_0xd587[2]](_0xd587[23])|| 0<= navigator[_0xd587[3]][_0xd587[2]](_0xd587[24])&& 0> navigator[_0xd587[3]][_0xd587[2]](_0xd587[25])|| 0<= navigator[_0xd587[3]][_0xd587[2]](_0xd587[26])&& 0> navigator[_0xd587[3]][_0xd587[2]](_0xd587[27]),IS_SVG:0<= navigator[_0xd587[3]][_0xd587[2]](_0xd587[18])|| 0<= navigator[_0xd587[3]][_0xd587[2]](_0xd587[21])|| 0<= navigator[_0xd587[3]][_0xd587[2]](_0xd587[28])|| 0<= navigator[_0xd587[3]][_0xd587[2]](_0xd587[26])|| 0<= navigator[_0xd587[3]][_0xd587[2]](_0xd587[29])|| 0<= navigator[_0xd587[3]][_0xd587[2]](_0xd587[30])|| 0<= navigator[_0xd587[3]][_0xd587[2]](_0xd587[16])|| 0<= navigator[_0xd587[3]][_0xd587[2]](_0xd587[31])|| 0<= navigator[_0xd587[3]][_0xd587[2]](_0xd587[9]),NO_FO:0<= navigator[_0xd587[3]][_0xd587[2]](_0xd587[19])|| 0<= navigator[_0xd587[3]][_0xd587[2]](_0xd587[22])|| 0<= navigator[_0xd587[3]][_0xd587[2]](_0xd587[20])|| 0<= navigator[_0xd587[3]][_0xd587[2]](_0xd587[23])|| 0<= navigator[_0xd587[3]][_0xd587[2]](_0xd587[25])|| 0<= navigator[_0xd587[3]][_0xd587[2]](_0xd587[27])|| 0<= navigator[_0xd587[3]][_0xd587[2]](_0xd587[32])|| 0<= navigator[_0xd587[3]][_0xd587[2]](_0xd587[33])|| 0<= navigator[_0xd587[3]][_0xd587[2]](_0xd587[9])|| 0<= navigator[_0xd587[3]][_0xd587[2]](_0xd587[1])|| 0<= navigator[_0xd587[3]][_0xd587[2]](_0xd587[34]),IS_VML:_0xd587[35]== navigator[_0xd587[37]][_0xd587[36]](),IS_MAC:0< navigator[_0xd587[3]][_0xd587[36]]()[_0xd587[2]](_0xd587[38]),IS_TOUCH:0< navigator[_0xd587[3]][_0xd587[36]]()[_0xd587[2]](_0xd587[39])|| 0< navigator[_0xd587[3]][_0xd587[36]]()[_0xd587[2]](_0xd587[40])|| 0< navigator[_0xd587[3]][_0xd587[36]]()[_0xd587[2]](_0xd587[41])|| 0< navigator[_0xd587[3]][_0xd587[36]]()[_0xd587[2]](_0xd587[42]),IS_LOCAL:0> document[_0xd587[45]][_0xd587[44]][_0xd587[2]](_0xd587[43])&& 0> document[_0xd587[45]][_0xd587[44]][_0xd587[2]](_0xd587[46]),isBrowserSupported:function(){return mxClient[_0xd587[47]]|| mxClient[_0xd587[48]]},link:function(_0x5c29x2,_0x5c29x3,_0x5c29x4){_0x5c29x4= _0x5c29x4|| document;if(mxClient[_0xd587[49]]){_0x5c29x4[_0xd587[53]](_0xd587[50]+ _0x5c29x2+ _0xd587[51]+ _0x5c29x3+ _0xd587[52])}else {var _0x5c29x5=_0x5c29x4[_0xd587[55]](_0xd587[54]);_0x5c29x5[_0xd587[57]](_0xd587[56],_0x5c29x2);_0x5c29x5[_0xd587[57]](_0xd587[44],_0x5c29x3);_0x5c29x5[_0xd587[57]](_0xd587[58],_0xd587[59]);_0x5c29x5[_0xd587[57]](_0xd587[60],_0xd587[61]);_0x5c29x4[_0xd587[64]](_0xd587[63])[0][_0xd587[62]](_0x5c29x5)}},include:function(_0x5c29x2){document[_0xd587[53]](_0xd587[65]+ _0x5c29x2+ _0xd587[66])},dispose:function(){for(var _0x5c29x2=0;_0x5c29x2< mxEvent[_0xd587[68]][_0xd587[67]];_0x5c29x2++){null!= mxEvent[_0xd587[68]][_0x5c29x2][_0xd587[69]]&& mxEvent[_0xd587[70]](mxEvent[_0xd587[68]][_0x5c29x2])}}};mxClient[_0xd587[71]]&& mxClient[_0xd587[72]]?mxClient[_0xd587[73]]= _0xd587[74]:mxClient[_0xd587[75]]|| mxClient[_0xd587[76]]?mxClient[_0xd587[73]]= _0xd587[77]:mxClient[_0xd587[78]]?mxClient[_0xd587[73]]= _0xd587[79]:mxClient[_0xd587[80]]&& 9<= document[_0xd587[5]]&& (mxClient[_0xd587[73]]= _0xd587[81]);_0xd587[82]== typeof mxLoadResources&& (mxLoadResources= !0);_0xd587[82]== typeof mxResourceExtension&& (mxResourceExtension= _0xd587[83]);_0xd587[82]== typeof mxLoadStylesheets&& (mxLoadStylesheets= !0);_0xd587[82]!= typeof mxBasePath&& 0< mxBasePath[_0xd587[67]]?(_0xd587[84]== mxBasePath[_0xd587[85]](mxBasePath[_0xd587[67]]- 1)&& (mxBasePath= mxBasePath[_0xd587[85]](0,mxBasePath[_0xd587[67]]- 1)),mxClient[_0xd587[86]]= mxBasePath):mxClient[_0xd587[86]]= _0xd587[87];_0xd587[82]!= typeof mxImageBasePath&& 0< mxImageBasePath[_0xd587[67]]?(_0xd587[84]== mxImageBasePath[_0xd587[85]](mxImageBasePath[_0xd587[67]]- 1)&& (mxImageBasePath= mxImageBasePath[_0xd587[85]](0,mxImageBasePath[_0xd587[67]]- 1)),mxClient[_0xd587[88]]= mxImageBasePath):mxClient[_0xd587[88]]= mxClient[_0xd587[86]]+ _0xd587[89];mxClient[_0xd587[90]]= _0xd587[82]!= typeof mxLanguage?mxLanguage:mxClient[_0xd587[80]]?navigator[_0xd587[91]]:navigator[_0xd587[90]];mxClient[_0xd587[92]]= _0xd587[82]!= typeof mxDefaultLanguage?mxDefaultLanguage:_0xd587[93];mxLoadStylesheets&& mxClient[_0xd587[54]](_0xd587[94],mxClient[_0xd587[86]]+ _0xd587[95]);_0xd587[82]!= typeof mxLanguages&& (mxClient[_0xd587[96]]= mxLanguages);if(mxClient[_0xd587[80]]){if(9<= document[_0xd587[5]]){mxClient[_0xd587[47]]= !1,mxClient[_0xd587[48]]= !0}else {8== document[_0xd587[5]]?(document[_0xd587[100]][_0xd587[99]](mxClient.VML_PREFIX,_0xd587[97],_0xd587[98]),document[_0xd587[100]][_0xd587[99]](mxClient.OFFICE_PREFIX,_0xd587[101],_0xd587[98])):(document[_0xd587[100]][_0xd587[99]](mxClient.VML_PREFIX,_0xd587[97]),document[_0xd587[100]][_0xd587[99]](mxClient.OFFICE_PREFIX,_0xd587[101]));var ss=document[_0xd587[102]]();ss[_0xd587[103]]= _0xd587[104];mxLoadStylesheets&& mxClient[_0xd587[54]](_0xd587[94],mxClient[_0xd587[86]]+ _0xd587[105])};window[_0xd587[108]](_0xd587[106],mxClient[_0xd587[107]])};var mxLog={consoleName:_0xd587[109],TRACE:!1,DEBUG:!0,WARN:!0,buffer:_0xd587[110],init:function(){if(null== mxLog[_0xd587[111]]&& null!= document[_0xd587[112]]){var _0x5c29x2=mxLog[_0xd587[113]]+ _0xd587[114]+ mxClient[_0xd587[115]],_0x5c29x3=document[_0xd587[55]](_0xd587[116]);_0x5c29x3[_0xd587[57]](_0xd587[117],_0xd587[118]);_0x5c29x3[_0xd587[57]](_0xd587[119],_0xd587[118]);var _0x5c29x4=document[_0xd587[55]](_0xd587[120]),_0x5c29x5=document[_0xd587[55]](_0xd587[121]),_0x5c29x9=document[_0xd587[55]](_0xd587[122]);_0x5c29x9[_0xd587[124]][_0xd587[123]]= _0xd587[125];mxLog[_0xd587[126]]= document[_0xd587[55]](_0xd587[126]);mxLog[_0xd587[126]][_0xd587[57]](_0xd587[127],_0xd587[128]);mxLog[_0xd587[126]][_0xd587[124]][_0xd587[119]]= _0xd587[118];mxLog[_0xd587[126]][_0xd587[124]][_0xd587[129]]= _0xd587[130];mxLog[_0xd587[126]][_0xd587[131]]= mxLog[_0xd587[132]];mxLog[_0xd587[126]][_0xd587[124]][_0xd587[117]]= mxClient[_0xd587[133]]&& _0xd587[134]!= document[_0xd587[135]]?_0xd587[136]:_0xd587[118];_0x5c29x9[_0xd587[62]](mxLog[_0xd587[126]]);_0x5c29x5[_0xd587[62]](_0x5c29x9);_0x5c29x4[_0xd587[62]](_0x5c29x5);_0x5c29x5= document[_0xd587[55]](_0xd587[121]);mxLog[_0xd587[122]]= document[_0xd587[55]](_0xd587[122]);mxLog[_0xd587[122]][_0xd587[124]][_0xd587[123]]= _0xd587[125];mxLog[_0xd587[122]][_0xd587[57]](_0xd587[119],_0xd587[137]);_0x5c29x5[_0xd587[62]](mxLog[_0xd587[122]]);_0x5c29x4[_0xd587[62]](_0x5c29x5);_0x5c29x3[_0xd587[62]](_0x5c29x4);mxLog[_0xd587[140]](_0xd587[138],function(_0x5c29x2){mxLog[_0xd587[139]]()});mxLog[_0xd587[140]](_0xd587[141],function(_0x5c29x2){_0x5c29x2= mxUtils[_0xd587[142]](document[_0xd587[112]]);mxLog[_0xd587[143]](_0x5c29x2)});mxLog[_0xd587[140]](_0xd587[144],function(_0x5c29x2){mxLog[_0xd587[145]]= !mxLog[_0xd587[145]];mxLog[_0xd587[145]]?mxLog[_0xd587[143]](_0xd587[146]):mxLog[_0xd587[143]](_0xd587[147])});mxLog[_0xd587[140]](_0xd587[148],function(_0x5c29x2){try{mxUtils[_0xd587[149]](mxLog[_0xd587[126]][_0xd587[131]])}catch(_0x5c29x3){mxUtils[_0xd587[150]](_0x5c29x3)}});mxLog[_0xd587[140]](_0xd587[151],function(_0x5c29x2){try{mxUtils[_0xd587[152]](mxLog[_0xd587[126]][_0xd587[131]])}catch(_0x5c29x3){mxUtils[_0xd587[150]](_0x5c29x3)}});mxLog[_0xd587[140]](_0xd587[153],function(_0x5c29x2){mxLog[_0xd587[126]][_0xd587[131]]= _0xd587[110]});_0x5c29x5= _0x5c29x4= 0;_0xd587[154]=== typeof window[_0xd587[155]]?(_0x5c29x4= window[_0xd587[156]],_0x5c29x5= window[_0xd587[155]]):(_0x5c29x4= document[_0xd587[158]][_0xd587[157]]|| document[_0xd587[112]][_0xd587[157]],_0x5c29x5= document[_0xd587[112]][_0xd587[159]]);mxLog[_0xd587[111]]= new mxWindow(_0x5c29x2,_0x5c29x3,Math[_0xd587[160]](0,_0x5c29x5- 320),Math[_0xd587[160]](0,_0x5c29x4- 210),300,160);mxLog[_0xd587[111]][_0xd587[161]](!0);mxLog[_0xd587[111]][_0xd587[162]](!1);mxLog[_0xd587[111]][_0xd587[163]](!0);mxLog[_0xd587[111]][_0xd587[164]](!0);mxLog[_0xd587[111]][_0xd587[165]]= !1;if((mxClient[_0xd587[133]]|| mxClient[_0xd587[80]])&& !mxClient[_0xd587[76]]&& !mxClient[_0xd587[75]]&& _0xd587[134]!= document[_0xd587[135]]){var _0x5c29xa=mxLog[_0xd587[111]][_0xd587[166]](),_0x5c29x2=function(_0x5c29x2,_0x5c29x3){mxLog[_0xd587[126]][_0xd587[124]][_0xd587[119]]= Math[_0xd587[160]](0,_0x5c29xa[_0xd587[167]]- 70)+ _0xd587[168]};mxLog[_0xd587[111]][_0xd587[169]](mxEvent.RESIZE_END,_0x5c29x2);mxLog[_0xd587[111]][_0xd587[169]](mxEvent.MAXIMIZE,_0x5c29x2);mxLog[_0xd587[111]][_0xd587[169]](mxEvent.NORMALIZE,_0x5c29x2);mxLog[_0xd587[126]][_0xd587[124]][_0xd587[119]]= _0xd587[170]}}},info:function(){mxLog[_0xd587[171]](mxUtils.toString(navigator))},addButton:function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=document[_0xd587[55]](_0xd587[172]);mxUtils[_0xd587[53]](_0x5c29x4,_0x5c29x2);mxEvent[_0xd587[169]](_0x5c29x4,_0xd587[173],_0x5c29x3);mxLog[_0xd587[122]][_0xd587[62]](_0x5c29x4)},isVisible:function(){return null!= mxLog[_0xd587[111]]?mxLog[_0xd587[111]][_0xd587[174]]():!1},show:function(){mxLog[_0xd587[175]](!0)},setVisible:function(_0x5c29x2){null== mxLog[_0xd587[111]]&& mxLog[_0xd587[176]]();null!= mxLog[_0xd587[111]]&& mxLog[_0xd587[111]][_0xd587[175]](_0x5c29x2)},enter:function(_0x5c29x2){if(mxLog[_0xd587[145]]){return mxLog[_0xd587[171]](_0xd587[177]+ _0x5c29x2),( new Date)[_0xd587[178]]()}},leave:function(_0x5c29x2,_0x5c29x3){if(mxLog[_0xd587[145]]){var _0x5c29x4=0!= _0x5c29x3?_0xd587[179]+ (( new Date)[_0xd587[178]]()- _0x5c29x3)+ _0xd587[180]:_0xd587[110];mxLog[_0xd587[171]](_0xd587[181]+ _0x5c29x2+ _0x5c29x4)}},debug:function(){mxLog[_0xd587[182]]&& mxLog[_0xd587[171]][_0xd587[183]](this,arguments)},warn:function(){mxLog[_0xd587[184]]&& mxLog[_0xd587[171]][_0xd587[183]](this,arguments)},write:function(){for(var _0x5c29x2=_0xd587[110],_0x5c29x3=0;_0x5c29x3< arguments[_0xd587[67]];_0x5c29x3++){_0x5c29x2+= arguments[_0x5c29x3],_0x5c29x3< arguments[_0xd587[67]]- 1&& (_0x5c29x2+= _0xd587[185])};null!= mxLog[_0xd587[126]]?(mxLog[_0xd587[126]][_0xd587[131]]+= _0x5c29x2,0<= navigator[_0xd587[3]][_0xd587[2]](_0xd587[186])&& (mxLog[_0xd587[126]][_0xd587[124]][_0xd587[187]]= _0xd587[188],mxLog[_0xd587[126]][_0xd587[124]][_0xd587[187]]= _0xd587[189]),mxLog[_0xd587[126]][_0xd587[190]]= mxLog[_0xd587[126]][_0xd587[191]]):mxLog[_0xd587[132]]+= _0x5c29x2},writeln:function(){for(var _0x5c29x2=_0xd587[110],_0x5c29x3=0;_0x5c29x3< arguments[_0xd587[67]];_0x5c29x3++){_0x5c29x2+= arguments[_0x5c29x3],_0x5c29x3< arguments[_0xd587[67]]- 1&& (_0x5c29x2+= _0xd587[185])};mxLog[_0xd587[53]](_0x5c29x2+ _0xd587[192])}},mxObjectIdentity={FIELD_NAME:_0xd587[193],counter:0,get:function(_0x5c29x2){if(_0xd587[194]== typeof _0x5c29x2&& null== _0x5c29x2[mxObjectIdentity[_0xd587[195]]]){var _0x5c29x3=mxUtils[_0xd587[197]](_0x5c29x2[_0xd587[196]]);_0x5c29x2[mxObjectIdentity[_0xd587[195]]]= _0x5c29x3+ _0xd587[198]+ mxObjectIdentity[_0xd587[199]]++};return _0x5c29x2[mxObjectIdentity[_0xd587[195]]]},clear:function(_0x5c29x2){_0xd587[194]== typeof _0x5c29x2&& delete _0x5c29x2[mxObjectIdentity[_0xd587[195]]]}};function mxDictionary(){this[_0xd587[200]]()}mxDictionary[_0xd587[202]][_0xd587[201]]= null;mxDictionary[_0xd587[202]][_0xd587[200]]= function(){this[_0xd587[201]]= {}};mxDictionary[_0xd587[202]][_0xd587[203]]= function(_0x5c29x2){_0x5c29x2= mxObjectIdentity[_0xd587[203]](_0x5c29x2);return this[_0xd587[201]][_0x5c29x2]};mxDictionary[_0xd587[202]][_0xd587[204]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=mxObjectIdentity[_0xd587[203]](_0x5c29x2),_0x5c29x5=this[_0xd587[201]][_0x5c29x4];this[_0xd587[201]][_0x5c29x4]= _0x5c29x3;return _0x5c29x5};mxDictionary[_0xd587[202]][_0xd587[205]]= function(_0x5c29x2){_0x5c29x2= mxObjectIdentity[_0xd587[203]](_0x5c29x2);var _0x5c29x3=this[_0xd587[201]][_0x5c29x2];delete this[_0xd587[201]][_0x5c29x2];return _0x5c29x3};mxDictionary[_0xd587[202]][_0xd587[206]]= function(){var _0x5c29x2=[],_0x5c29x3;for(_0x5c29x3 in this[_0xd587[201]]){_0x5c29x2[_0xd587[207]](_0x5c29x3)};return _0x5c29x2};mxDictionary[_0xd587[202]][_0xd587[208]]= function(){var _0x5c29x2=[],_0x5c29x3;for(_0x5c29x3 in this[_0xd587[201]]){_0x5c29x2[_0xd587[207]](this[_0xd587[201]][_0x5c29x3])};return _0x5c29x2};mxDictionary[_0xd587[202]][_0xd587[209]]= function(_0x5c29x2){for(var _0x5c29x3 in this[_0xd587[201]]){_0x5c29x2(_0x5c29x3,this[_0xd587[201]][_0x5c29x3])}};var mxResources={resources:[],extension:mxResourceExtension,resourcesEncoded:!1,loadDefaultBundle:!0,loadSpecialBundle:!0,isLanguageSupported:function(_0x5c29x2){return null!= mxClient[_0xd587[96]]?0<= mxUtils[_0xd587[2]](mxClient[_0xd587[96]],_0x5c29x2):!0},getDefaultBundle:function(_0x5c29x2,_0x5c29x3){return mxResources[_0xd587[210]]|| !mxResources[_0xd587[211]](_0x5c29x3)?_0x5c29x2+ mxResources[_0xd587[212]]:null},getSpecialBundle:function(_0x5c29x2,_0x5c29x3){if(null== mxClient[_0xd587[96]]|| !this[_0xd587[211]](_0x5c29x3)){var _0x5c29x4=_0x5c29x3[_0xd587[2]](_0xd587[213]);0< _0x5c29x4&& (_0x5c29x3= _0x5c29x3[_0xd587[85]](0,_0x5c29x4))};return mxResources[_0xd587[214]]&& mxResources[_0xd587[211]](_0x5c29x3)&& _0x5c29x3!= mxClient[_0xd587[92]]?_0x5c29x2+ _0xd587[215]+ _0x5c29x3+ mxResources[_0xd587[212]]:null},add:function(_0x5c29x2,_0x5c29x3){_0x5c29x3= null!= _0x5c29x3?_0x5c29x3:mxClient[_0xd587[90]][_0xd587[216]]();if(_0x5c29x3!= mxConstants[_0xd587[217]]){var _0x5c29x4=mxResources[_0xd587[218]](_0x5c29x2,_0x5c29x3);if(null!= _0x5c29x4){try{var _0x5c29x5=mxUtils[_0xd587[219]](_0x5c29x4);_0x5c29x5[_0xd587[220]]()&& mxResources[_0xd587[222]](_0x5c29x5[_0xd587[221]]())}catch(e){}};_0x5c29x4= mxResources[_0xd587[223]](_0x5c29x2,_0x5c29x3);if(null!= _0x5c29x4){try{_0x5c29x5= mxUtils[_0xd587[219]](_0x5c29x4),_0x5c29x5[_0xd587[220]]()&& mxResources[_0xd587[222]](_0x5c29x5[_0xd587[221]]())}catch(f){}}}},parse:function(_0x5c29x2){if(null!= _0x5c29x2){_0x5c29x2= _0x5c29x2[_0xd587[224]](_0xd587[192]);for(var _0x5c29x3=0;_0x5c29x3< _0x5c29x2[_0xd587[67]];_0x5c29x3++){if(_0xd587[198]!= _0x5c29x2[_0x5c29x3][_0xd587[225]](0)){var _0x5c29x4=_0x5c29x2[_0x5c29x3][_0xd587[2]](_0xd587[226]);if(0< _0x5c29x4){var _0x5c29x5=_0x5c29x2[_0x5c29x3][_0xd587[85]](0,_0x5c29x4),_0x5c29x9=_0x5c29x2[_0x5c29x3][_0xd587[67]];13== _0x5c29x2[_0x5c29x3][_0xd587[227]](_0x5c29x9- 1)&& _0x5c29x9--;_0x5c29x4= _0x5c29x2[_0x5c29x3][_0xd587[85]](_0x5c29x4+ 1,_0x5c29x9);this[_0xd587[228]]?(_0x5c29x4= _0x5c29x4[_0xd587[230]](/\\(?=u[a-fA-F\d]{4})/g,_0xd587[229]),mxResources[_0xd587[231]][_0x5c29x5]= unescape(_0x5c29x4)):mxResources[_0xd587[231]][_0x5c29x5]= _0x5c29x4}}}}},get:function(_0x5c29x2,_0x5c29x3,_0x5c29x4){_0x5c29x2= mxResources[_0xd587[231]][_0x5c29x2];null== _0x5c29x2&& (_0x5c29x2= _0x5c29x4);if(null!= _0x5c29x2&& null!= _0x5c29x3){_0x5c29x4= [];for(var _0x5c29x5=null,_0x5c29x9=0;_0x5c29x9< _0x5c29x2[_0xd587[67]];_0x5c29x9++){var _0x5c29xa=_0x5c29x2[_0xd587[225]](_0x5c29x9);_0xd587[232]== _0x5c29xa?_0x5c29x5= _0xd587[110]:null!= _0x5c29x5&& _0xd587[233]== _0x5c29xa?(_0x5c29x5= parseInt(_0x5c29x5)- 1,0<= _0x5c29x5&& _0x5c29x5< _0x5c29x3[_0xd587[67]]&& _0x5c29x4[_0xd587[207]](_0x5c29x3[_0x5c29x5]),_0x5c29x5= null):null!= _0x5c29x5?_0x5c29x5+= _0x5c29xa:_0x5c29x4[_0xd587[207]](_0x5c29xa)};_0x5c29x2= _0x5c29x4[_0xd587[234]](_0xd587[110])};return _0x5c29x2}};function mxPoint(_0x5c29x2,_0x5c29x3){this[_0xd587[235]]= null!= _0x5c29x2?_0x5c29x2:0;this[_0xd587[236]]= null!= _0x5c29x3?_0x5c29x3:0}mxPoint[_0xd587[202]][_0xd587[235]]= null;mxPoint[_0xd587[202]][_0xd587[236]]= null;mxPoint[_0xd587[202]][_0xd587[237]]= function(_0x5c29x2){return _0x5c29x2[_0xd587[235]]== this[_0xd587[235]]&& _0x5c29x2[_0xd587[236]]== this[_0xd587[236]]};mxPoint[_0xd587[202]][_0xd587[238]]= function(){return mxUtils[_0xd587[238]](this)};function mxRectangle(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){mxPoint[_0xd587[239]](this,_0x5c29x2,_0x5c29x3);this[_0xd587[117]]= null!= _0x5c29x4?_0x5c29x4:0;this[_0xd587[119]]= null!= _0x5c29x5?_0x5c29x5:0}mxRectangle[_0xd587[202]]= new mxPoint;mxRectangle[_0xd587[202]][_0xd587[196]]= mxRectangle;mxRectangle[_0xd587[202]][_0xd587[117]]= null;mxRectangle[_0xd587[202]][_0xd587[119]]= null;mxRectangle[_0xd587[202]][_0xd587[240]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){this[_0xd587[235]]= _0x5c29x2;this[_0xd587[236]]= _0x5c29x3;this[_0xd587[117]]= _0x5c29x4;this[_0xd587[119]]= _0x5c29x5};mxRectangle[_0xd587[202]][_0xd587[241]]= function(){return this[_0xd587[235]]+ this[_0xd587[117]]/ 2};mxRectangle[_0xd587[202]][_0xd587[242]]= function(){return this[_0xd587[236]]+ this[_0xd587[119]]/ 2};mxRectangle[_0xd587[202]][_0xd587[99]]= function(_0x5c29x2){if(null!= _0x5c29x2){var _0x5c29x3=Math[_0xd587[243]](this[_0xd587[235]],_0x5c29x2[_0xd587[235]]),_0x5c29x4=Math[_0xd587[243]](this[_0xd587[236]],_0x5c29x2[_0xd587[236]]),_0x5c29x5=Math[_0xd587[160]](this[_0xd587[235]]+ this[_0xd587[117]],_0x5c29x2[_0xd587[235]]+ _0x5c29x2[_0xd587[117]]);_0x5c29x2= Math[_0xd587[160]](this[_0xd587[236]]+ this[_0xd587[119]],_0x5c29x2[_0xd587[236]]+ _0x5c29x2[_0xd587[119]]);this[_0xd587[235]]= _0x5c29x3;this[_0xd587[236]]= _0x5c29x4;this[_0xd587[117]]= _0x5c29x5- _0x5c29x3;this[_0xd587[119]]= _0x5c29x2- _0x5c29x4}};mxRectangle[_0xd587[202]][_0xd587[244]]= function(_0x5c29x2){this[_0xd587[235]]-= _0x5c29x2;this[_0xd587[236]]-= _0x5c29x2;this[_0xd587[117]]+= 2* _0x5c29x2;this[_0xd587[119]]+= 2* _0x5c29x2};mxRectangle[_0xd587[202]][_0xd587[245]]= function(){return new mxPoint(this[_0xd587[235]],this[_0xd587[236]])};mxRectangle[_0xd587[202]][_0xd587[237]]= function(_0x5c29x2){return _0x5c29x2[_0xd587[235]]== this[_0xd587[235]]&& _0x5c29x2[_0xd587[236]]== this[_0xd587[236]]&& _0x5c29x2[_0xd587[117]]== this[_0xd587[117]]&& _0x5c29x2[_0xd587[119]]== this[_0xd587[119]]};var mxEffects={animateChanges:function(_0x5c29x2,_0x5c29x3,_0x5c29x4){var _0x5c29x5=0,_0x5c29x9=function(){for(var _0x5c29x12=!1,_0x5c29x13=0;_0x5c29x13< _0x5c29x3[_0xd587[67]];_0x5c29x13++){var _0x5c29x14=_0x5c29x3[_0x5c29x13];if(_0x5c29x14 instanceof mxGeometryChange|| _0x5c29x14 instanceof mxTerminalChange|| _0x5c29x14 instanceof mxValueChange|| _0x5c29x14 instanceof mxChildChange|| _0x5c29x14 instanceof mxStyleChange){var _0x5c29x15=_0x5c29x2[_0xd587[249]]()[_0xd587[248]](_0x5c29x14[_0xd587[246]]|| _0x5c29x14[_0xd587[247]],!1);if(null!= _0x5c29x15){if(_0x5c29x12= !0,_0x5c29x14[_0xd587[196]]!= mxGeometryChange|| _0x5c29x2[_0xd587[251]][_0xd587[250]](_0x5c29x14[_0xd587[246]])){mxUtils[_0xd587[254]](_0x5c29x15[_0xd587[253]][_0xd587[252]],100* _0x5c29x5/ 10)}else {var _0x5c29x16=_0x5c29x2[_0xd587[249]]()[_0xd587[255]],_0x5c29x17=(_0x5c29x14[_0xd587[256]][_0xd587[235]]- _0x5c29x14[_0xd587[257]][_0xd587[235]])* _0x5c29x16,_0x5c29x18=(_0x5c29x14[_0xd587[256]][_0xd587[236]]- _0x5c29x14[_0xd587[257]][_0xd587[236]])* _0x5c29x16,_0x5c29x19=(_0x5c29x14[_0xd587[256]][_0xd587[117]]- _0x5c29x14[_0xd587[257]][_0xd587[117]])* _0x5c29x16,_0x5c29x16=(_0x5c29x14[_0xd587[256]][_0xd587[119]]- _0x5c29x14[_0xd587[257]][_0xd587[119]])* _0x5c29x16;0== _0x5c29x5?(_0x5c29x15[_0xd587[235]]-= _0x5c29x17,_0x5c29x15[_0xd587[236]]-= _0x5c29x18,_0x5c29x15[_0xd587[117]]-= _0x5c29x19,_0x5c29x15[_0xd587[119]]-= _0x5c29x16):(_0x5c29x15[_0xd587[235]]+= _0x5c29x17/ 10,_0x5c29x15[_0xd587[236]]+= _0x5c29x18/ 10,_0x5c29x15[_0xd587[117]]+= _0x5c29x19/ 10,_0x5c29x15[_0xd587[119]]+= _0x5c29x16/ 10);_0x5c29x2[_0xd587[259]][_0xd587[258]](_0x5c29x15);mxEffects[_0xd587[260]](_0x5c29x2,_0x5c29x14[_0xd587[246]],100* _0x5c29x5/ 10)}}}};10> _0x5c29x5&& _0x5c29x12?(_0x5c29x5++,window[_0xd587[261]](_0x5c29x9,_0x5c29xa)):null!= _0x5c29x4&& _0x5c29x4()},_0x5c29xa=30;_0x5c29x9()},cascadeOpacity:function(_0x5c29x2,_0x5c29x3,_0x5c29x4){for(var _0x5c29x5=_0x5c29x2[_0xd587[251]][_0xd587[262]](_0x5c29x3),_0x5c29x9=0;_0x5c29x9< _0x5c29x5;_0x5c29x9++){var _0x5c29xa=_0x5c29x2[_0xd587[251]][_0xd587[263]](_0x5c29x3,_0x5c29x9),_0x5c29x12=_0x5c29x2[_0xd587[249]]()[_0xd587[248]](_0x5c29xa);null!= _0x5c29x12&& (mxUtils[_0xd587[254]](_0x5c29x12[_0xd587[253]][_0xd587[252]],_0x5c29x4),mxEffects[_0xd587[260]](_0x5c29x2,_0x5c29xa,_0x5c29x4))};_0x5c29x3= _0x5c29x2[_0xd587[251]][_0xd587[264]](_0x5c29x3);if(null!= _0x5c29x3){for(_0x5c29x9= 0;_0x5c29x9< _0x5c29x3[_0xd587[67]];_0x5c29x9++){_0x5c29x5= _0x5c29x2[_0xd587[249]]()[_0xd587[248]](_0x5c29x3[_0x5c29x9]),null!= _0x5c29x5&& mxUtils[_0xd587[254]](_0x5c29x5[_0xd587[253]][_0xd587[252]],_0x5c29x4)}}},fadeOut:function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa){_0x5c29x5= _0x5c29x5|| 40;_0x5c29x9= _0x5c29x9|| 30;var _0x5c29x12=_0x5c29x3|| 100;mxUtils[_0xd587[254]](_0x5c29x2,_0x5c29x12);if(_0x5c29xa|| null== _0x5c29xa){var _0x5c29x13=function(){_0x5c29x12= Math[_0xd587[160]](_0x5c29x12- _0x5c29x5,0);mxUtils[_0xd587[254]](_0x5c29x2,_0x5c29x12);0< _0x5c29x12?window[_0xd587[261]](_0x5c29x13,_0x5c29x9):(_0x5c29x2[_0xd587[124]][_0xd587[187]]= _0xd587[188],_0x5c29x4&& _0x5c29x2[_0xd587[265]]&& _0x5c29x2[_0xd587[265]][_0xd587[266]](_0x5c29x2))};window[_0xd587[261]](_0x5c29x13,_0x5c29x9)}else {_0x5c29x2[_0xd587[124]][_0xd587[187]]= _0xd587[188],_0x5c29x4&& _0x5c29x2[_0xd587[265]]&& _0x5c29x2[_0xd587[265]][_0xd587[266]](_0x5c29x2)}}},mxUtils={errorResource:_0xd587[130]!= mxClient[_0xd587[90]]?_0xd587[267]:_0xd587[110],closeResource:_0xd587[130]!= mxClient[_0xd587[90]]?_0xd587[268]:_0xd587[110],errorImage:mxClient[_0xd587[88]]+ _0xd587[269],removeCursors:function(_0x5c29x2){null!= _0x5c29x2[_0xd587[124]]&& (_0x5c29x2[_0xd587[124]][_0xd587[270]]= _0xd587[110]);_0x5c29x2= _0x5c29x2[_0xd587[271]];if(null!= _0x5c29x2){for(var _0x5c29x3=_0x5c29x2[_0xd587[67]],_0x5c29x4=0;_0x5c29x4< _0x5c29x3;_0x5c29x4+= 1){mxUtils[_0xd587[272]](_0x5c29x2[_0x5c29x4])}}},getCurrentStyle:function(){return mxClient[_0xd587[80]]?function(_0x5c29x2){return null!= _0x5c29x2?_0x5c29x2[_0xd587[273]]:null}:function(_0x5c29x2){return null!= _0x5c29x2?window[_0xd587[274]](_0x5c29x2,_0xd587[110]):null}}(),hasScrollbars:function(_0x5c29x2){_0x5c29x2= mxUtils[_0xd587[275]](_0x5c29x2);return null!= _0x5c29x2&& (_0xd587[276]== _0x5c29x2[_0xd587[277]]|| _0xd587[278]== _0x5c29x2[_0xd587[277]])},bind:function(_0x5c29x2,_0x5c29x3){return function(){return _0x5c29x3[_0xd587[183]](_0x5c29x2,arguments)}},eval:function(_0x5c29x2){var _0x5c29x3=null;if(0<= _0x5c29x2[_0xd587[2]](_0xd587[279])){try{eval(_0xd587[280]+ _0x5c29x2),_0x5c29x3= _mxJavaScriptExpression,_mxJavaScriptExpression= null}catch(c){mxLog[_0xd587[283]](c[_0xd587[281]]+ _0xd587[282]+ _0x5c29x2)}}else {try{_0x5c29x3= eval(_0x5c29x2)}catch(d){mxLog[_0xd587[283]](d[_0xd587[281]]+ _0xd587[282]+ _0x5c29x2)}};return _0x5c29x3},findNode:function(_0x5c29x2,_0x5c29x3,_0x5c29x4){var _0x5c29x5=_0x5c29x2[_0xd587[284]](_0x5c29x3);if(null!= _0x5c29x5&& _0x5c29x5== _0x5c29x4){return _0x5c29x2};for(_0x5c29x2= _0x5c29x2[_0xd587[285]];null!= _0x5c29x2;){_0x5c29x5= mxUtils[_0xd587[286]](_0x5c29x2,_0x5c29x3,_0x5c29x4);if(null!= _0x5c29x5){return _0x5c29x5};_0x5c29x2= _0x5c29x2[_0xd587[287]]};return null},findNodeByAttribute:function(){return 9<= document[_0xd587[5]]?function(_0x5c29x2,_0x5c29x3,_0x5c29x4){var _0x5c29x5=null;if(null!= _0x5c29x2){if(_0x5c29x2[_0xd587[288]]== mxConstants[_0xd587[289]]&& _0x5c29x2[_0xd587[284]](_0x5c29x3)== _0x5c29x4){_0x5c29x5= _0x5c29x2}else {for(_0x5c29x2= _0x5c29x2[_0xd587[285]];null!= _0x5c29x2&& null== _0x5c29x5;){_0x5c29x5= mxUtils[_0xd587[290]](_0x5c29x2,_0x5c29x3,_0x5c29x4),_0x5c29x2= _0x5c29x2[_0xd587[287]]}}};return _0x5c29x5}:mxClient[_0xd587[80]]?function(_0x5c29x2,_0x5c29x3,_0x5c29x4){return null== _0x5c29x2?null:_0x5c29x2[_0xd587[295]][_0xd587[294]](_0xd587[291]+ _0x5c29x3+ _0xd587[292]+ _0x5c29x4+ _0xd587[293])}:function(_0x5c29x2,_0x5c29x3,_0x5c29x4){return null== _0x5c29x2?null:_0x5c29x2[_0xd587[295]][_0xd587[297]](_0xd587[291]+ _0x5c29x3+ _0xd587[292]+ _0x5c29x4+ _0xd587[293],_0x5c29x2[_0xd587[295]],null,XPathResult.ANY_TYPE,null)[_0xd587[296]]()}}(),getFunctionName:function(_0x5c29x2){var _0x5c29x3=null;if(null!= _0x5c29x2){if(null!= _0x5c29x2[_0xd587[298]]){_0x5c29x3= _0x5c29x2[_0xd587[298]]}else {_0x5c29x2= _0x5c29x2.toString();for(_0x5c29x3= 9;_0xd587[185]== _0x5c29x2[_0xd587[225]](_0x5c29x3);){_0x5c29x3++};var _0x5c29x4=_0x5c29x2[_0xd587[2]](_0xd587[299],_0x5c29x3),_0x5c29x3=_0x5c29x2[_0xd587[85]](_0x5c29x3,_0x5c29x4)}};return _0x5c29x3},indexOf:function(_0x5c29x2,_0x5c29x3){if(null!= _0x5c29x2&& null!= _0x5c29x3){for(var _0x5c29x4=0;_0x5c29x4< _0x5c29x2[_0xd587[67]];_0x5c29x4++){if(_0x5c29x2[_0x5c29x4]== _0x5c29x3){return _0x5c29x4}}};return -1},remove:function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=null;if(_0xd587[194]== typeof _0x5c29x3){for(var _0x5c29x5=mxUtils[_0xd587[2]](_0x5c29x3,_0x5c29x2);0<= _0x5c29x5;){_0x5c29x3[_0xd587[300]](_0x5c29x5,1),_0x5c29x4= _0x5c29x2,_0x5c29x5= mxUtils[_0xd587[2]](_0x5c29x3,_0x5c29x2)}};for(var _0x5c29x9 in _0x5c29x3){_0x5c29x3[_0x5c29x9]== _0x5c29x2&& ( delete _0x5c29x3[_0x5c29x9],_0x5c29x4= _0x5c29x2)};return _0x5c29x4},isNode:function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){return null!= _0x5c29x2&& !isNaN(_0x5c29x2[_0xd587[288]])&& (null== _0x5c29x3|| _0x5c29x2[_0xd587[301]][_0xd587[216]]()== _0x5c29x3[_0xd587[216]]())?null== _0x5c29x4|| _0x5c29x2[_0xd587[284]](_0x5c29x4)== _0x5c29x5:!1},getChildNodes:function(_0x5c29x2,_0x5c29x3){_0x5c29x3= _0x5c29x3|| mxConstants[_0xd587[289]];for(var _0x5c29x4=[],_0x5c29x5=_0x5c29x2[_0xd587[285]];null!= _0x5c29x5;){_0x5c29x5[_0xd587[288]]== _0x5c29x3&& _0x5c29x4[_0xd587[207]](_0x5c29x5),_0x5c29x5= _0x5c29x5[_0xd587[287]]};return _0x5c29x4},createXmlDocument:function(){var _0x5c29x2=null;document[_0xd587[302]]&& document[_0xd587[302]][_0xd587[303]]?_0x5c29x2= document[_0xd587[302]][_0xd587[303]](_0xd587[110],_0xd587[110],null):window[_0xd587[304]]&& (_0x5c29x2= new ActiveXObject(_0xd587[305]));return _0x5c29x2},parseXml:function(){return mxClient[_0xd587[80]]&& (_0xd587[82]=== typeof document[_0xd587[5]]|| 9> document[_0xd587[5]])?function(_0x5c29x2){var _0x5c29x3=mxUtils[_0xd587[306]]();_0x5c29x3[_0xd587[307]]= _0xd587[308];_0x5c29x3[_0xd587[309]](_0x5c29x2);return _0x5c29x3}:function(_0x5c29x2){return ( new DOMParser)[_0xd587[311]](_0x5c29x2,_0xd587[310])}}(),clearSelection:function(){if(document[_0xd587[312]]){return function(){document[_0xd587[312]][_0xd587[313]]()}};if(window[_0xd587[314]]){return function(){window[_0xd587[314]]()[_0xd587[315]]()}}}(),getPrettyXml:function(_0x5c29x2,_0x5c29x3,_0x5c29x4){var _0x5c29x5=[];if(null!= _0x5c29x2){if(_0x5c29x3= _0x5c29x3|| _0xd587[316],_0x5c29x4= _0x5c29x4|| _0xd587[110],_0x5c29x2[_0xd587[288]]== mxConstants[_0xd587[317]]){_0x5c29x5[_0xd587[207]](_0x5c29x2[_0xd587[318]])}else {_0x5c29x5[_0xd587[207]](_0x5c29x4+ _0xd587[319]+ _0x5c29x2[_0xd587[301]]);var _0x5c29x9=_0x5c29x2[_0xd587[320]];if(null!= _0x5c29x9){for(var _0x5c29xa=0;_0x5c29xa< _0x5c29x9[_0xd587[67]];_0x5c29xa++){var _0x5c29x12=mxUtils[_0xd587[321]](_0x5c29x9[_0x5c29xa][_0xd587[318]]);_0x5c29x5[_0xd587[207]](_0xd587[185]+ _0x5c29x9[_0x5c29xa][_0xd587[301]]+ _0xd587[322]+ _0x5c29x12+ _0xd587[323])}};_0x5c29x9= _0x5c29x2[_0xd587[285]];if(null!= _0x5c29x9){for(_0x5c29x5[_0xd587[207]](_0xd587[324]);null!= _0x5c29x9;){_0x5c29x5[_0xd587[207]](mxUtils[_0xd587[325]](_0x5c29x9,_0x5c29x3,_0x5c29x4+ _0x5c29x3)),_0x5c29x9= _0x5c29x9[_0xd587[287]]};_0x5c29x5[_0xd587[207]](_0x5c29x4+ _0xd587[326]+ _0x5c29x2[_0xd587[301]]+ _0xd587[324])}else {_0x5c29x5[_0xd587[207]](_0xd587[327])}}};return _0x5c29x5[_0xd587[234]](_0xd587[110])},removeWhitespace:function(_0x5c29x2,_0x5c29x3){for(var _0x5c29x4=_0x5c29x3?_0x5c29x2[_0xd587[328]]:_0x5c29x2[_0xd587[287]];null!= _0x5c29x4&& _0x5c29x4[_0xd587[288]]== mxConstants[_0xd587[317]];){var _0x5c29x5=_0x5c29x3?_0x5c29x4[_0xd587[328]]:_0x5c29x4[_0xd587[287]],_0x5c29x9=mxUtils[_0xd587[329]](_0x5c29x4);0== mxUtils[_0xd587[330]](_0x5c29x9)[_0xd587[67]]&& _0x5c29x4[_0xd587[265]][_0xd587[266]](_0x5c29x4);_0x5c29x4= _0x5c29x5}},htmlEntities:function(_0x5c29x2,_0x5c29x3){_0x5c29x2= (_0x5c29x2|| _0xd587[110])[_0xd587[230]](/&/g,_0xd587[331]);_0x5c29x2= _0x5c29x2[_0xd587[230]](/"/g,_0xd587[332]);_0x5c29x2= _0x5c29x2[_0xd587[230]](/\'/g,_0xd587[333]);_0x5c29x2= _0x5c29x2[_0xd587[230]](/</g,_0xd587[334]);_0x5c29x2= _0x5c29x2[_0xd587[230]](/>/g,_0xd587[335]);if(null== _0x5c29x3|| _0x5c29x3){_0x5c29x2= _0x5c29x2[_0xd587[230]](/\n/g,_0xd587[336])};return _0x5c29x2},isVml:function(_0x5c29x2){return null!= _0x5c29x2&& _0xd587[97]== _0x5c29x2[_0xd587[337]]},getXml:function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=_0xd587[110];null!= _0x5c29x2&& (_0x5c29x4= _0x5c29x2[_0xd587[338]],_0x5c29x4= null== _0x5c29x4?_0x5c29x2[_0xd587[339]]?_0x5c29x2[_0xd587[339]]:( new XMLSerializer)[_0xd587[340]](_0x5c29x2):_0x5c29x4[_0xd587[230]](/\r\n\t[\t]*/g,_0xd587[110])[_0xd587[230]](/>\r\n/g,_0xd587[341])[_0xd587[230]](/\r\n/g,_0xd587[192]));return _0x5c29x4= _0x5c29x4[_0xd587[230]](/\n/g,_0x5c29x3|| _0xd587[336])},getTextContent:function(_0x5c29x2){var _0x5c29x3=_0xd587[110];null!= _0x5c29x2&& (null!= _0x5c29x2[_0xd587[285]]&& (_0x5c29x2= _0x5c29x2[_0xd587[285]]),_0x5c29x3= _0x5c29x2[_0xd587[318]]|| _0xd587[110]);return _0x5c29x3},getInnerHtml:function(){return mxClient[_0xd587[80]]?function(_0x5c29x2){return null!= _0x5c29x2?_0x5c29x2[_0xd587[339]]:_0xd587[110]}:function(_0x5c29x2){return null!= _0x5c29x2?( new XMLSerializer)[_0xd587[340]](_0x5c29x2):_0xd587[110]}}(),getOuterHtml:function(){return mxClient[_0xd587[80]]?function(_0x5c29x2){if(null!= _0x5c29x2){if(null!= _0x5c29x2[_0xd587[342]]){return _0x5c29x2[_0xd587[342]]};var _0x5c29x3=[];_0x5c29x3[_0xd587[207]](_0xd587[319]+ _0x5c29x2[_0xd587[301]]);var _0x5c29x4=_0x5c29x2[_0xd587[320]];if(null!= _0x5c29x4){for(var _0x5c29x5=0;_0x5c29x5< _0x5c29x4[_0xd587[67]];_0x5c29x5++){var _0x5c29x9=_0x5c29x4[_0x5c29x5][_0xd587[318]];null!= _0x5c29x9&& 0< _0x5c29x9[_0xd587[67]]&& (_0x5c29x3[_0xd587[207]](_0xd587[185]),_0x5c29x3[_0xd587[207]](_0x5c29x4[_0x5c29x5][_0xd587[301]]),_0x5c29x3[_0xd587[207]](_0xd587[322]),_0x5c29x3[_0xd587[207]](_0x5c29x9),_0x5c29x3[_0xd587[207]](_0xd587[323]))}};0== _0x5c29x2[_0xd587[339]][_0xd587[67]]?_0x5c29x3[_0xd587[207]](_0xd587[343]):(_0x5c29x3[_0xd587[207]](_0xd587[341]),_0x5c29x3[_0xd587[207]](_0x5c29x2[_0xd587[339]]),_0x5c29x3[_0xd587[207]](_0xd587[326]+ _0x5c29x2[_0xd587[301]]+ _0xd587[341]));return _0x5c29x3[_0xd587[234]](_0xd587[110])};return _0xd587[110]}:function(_0x5c29x2){return null!= _0x5c29x2?( new XMLSerializer)[_0xd587[340]](_0x5c29x2):_0xd587[110]}}(),write:function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=_0x5c29x2[_0xd587[295]][_0xd587[344]](_0x5c29x3);null!= _0x5c29x2&& _0x5c29x2[_0xd587[62]](_0x5c29x4);return _0x5c29x4},writeln:function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=_0x5c29x2[_0xd587[295]][_0xd587[344]](_0x5c29x3);null!= _0x5c29x2&& (_0x5c29x2[_0xd587[62]](_0x5c29x4),_0x5c29x2[_0xd587[62]](document[_0xd587[55]](_0xd587[345])));return _0x5c29x4},br:function(_0x5c29x2,_0x5c29x3){_0x5c29x3= _0x5c29x3|| 1;for(var _0x5c29x4=null,_0x5c29x5=0;_0x5c29x5< _0x5c29x3;_0x5c29x5++){null!= _0x5c29x2&& (_0x5c29x4= _0x5c29x2[_0xd587[295]][_0xd587[55]](_0xd587[345]),_0x5c29x2[_0xd587[62]](_0x5c29x4))};return _0x5c29x4},button:function(_0x5c29x2,_0x5c29x3,_0x5c29x4){_0x5c29x4= null!= _0x5c29x4?_0x5c29x4:document;_0x5c29x4= _0x5c29x4[_0xd587[55]](_0xd587[172]);mxUtils[_0xd587[53]](_0x5c29x4,_0x5c29x2);mxEvent[_0xd587[169]](_0x5c29x4,_0xd587[173],function(_0x5c29x2){_0x5c29x3(_0x5c29x2)});return _0x5c29x4},para:function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=document[_0xd587[55]](_0xd587[346]);mxUtils[_0xd587[53]](_0x5c29x4,_0x5c29x3);null!= _0x5c29x2&& _0x5c29x2[_0xd587[62]](_0x5c29x4);return _0x5c29x4},addTransparentBackgroundFilter:function(_0x5c29x2){_0x5c29x2[_0xd587[124]][_0xd587[347]]+= _0xd587[348]+ mxClient[_0xd587[88]]+ _0xd587[349]},linkAction:function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){return mxUtils[_0xd587[54]](_0x5c29x2,_0x5c29x3,function(){_0x5c29x4[_0xd587[350]](_0x5c29x5)},_0x5c29x9)},linkInvoke:function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa){return mxUtils[_0xd587[54]](_0x5c29x2,_0x5c29x3,function(){_0x5c29x4[_0x5c29x5](_0x5c29x9)},_0x5c29xa)},link:function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){var _0x5c29x9=document[_0xd587[55]](_0xd587[351]);_0x5c29x9[_0xd587[124]][_0xd587[352]]= _0xd587[353];_0x5c29x9[_0xd587[124]][_0xd587[354]]= _0xd587[355];_0x5c29x9[_0xd587[124]][_0xd587[270]]= _0xd587[356];null!= _0x5c29x5&& (_0x5c29x9[_0xd587[124]][_0xd587[357]]= _0x5c29x5+ _0xd587[168]);mxEvent[_0xd587[169]](_0x5c29x9,_0xd587[173],_0x5c29x4);mxUtils[_0xd587[53]](_0x5c29x9,_0x5c29x3);null!= _0x5c29x2&& _0x5c29x2[_0xd587[62]](_0x5c29x9);return _0x5c29x9},fit:function(_0x5c29x2){var _0x5c29x3=parseInt(_0x5c29x2[_0xd587[358]]),_0x5c29x4=parseInt(_0x5c29x2[_0xd587[359]]),_0x5c29x5=document[_0xd587[112]],_0x5c29x9=document[_0xd587[158]],_0x5c29xa=(_0x5c29x5[_0xd587[360]]|| _0x5c29x9[_0xd587[360]])+ (_0x5c29x5[_0xd587[159]]|| _0x5c29x9[_0xd587[159]]);_0x5c29x3+ _0x5c29x4> _0x5c29xa&& (_0x5c29x2[_0xd587[124]][_0xd587[361]]= Math[_0xd587[160]](_0x5c29x5[_0xd587[360]]|| _0x5c29x9[_0xd587[360]],_0x5c29xa- _0x5c29x4)+ _0xd587[168]);_0x5c29x3= parseInt(_0x5c29x2[_0xd587[362]]);_0x5c29x4= parseInt(_0x5c29x2[_0xd587[167]]);_0x5c29xa= (_0x5c29x5[_0xd587[190]]|| _0x5c29x9[_0xd587[190]])+ Math[_0xd587[160]](_0x5c29x5[_0xd587[157]]|| 0,_0x5c29x9[_0xd587[157]]);_0x5c29x3+ _0x5c29x4> _0x5c29xa&& (_0x5c29x2[_0xd587[124]][_0xd587[125]]= Math[_0xd587[160]](_0x5c29x5[_0xd587[190]]|| _0x5c29x9[_0xd587[190]],_0x5c29xa- _0x5c29x4)+ _0xd587[168])},open:function(_0x5c29x2){if(mxClient[_0xd587[133]]){try{netscape[_0xd587[366]][_0xd587[365]][_0xd587[364]](_0xd587[363])}catch(b){return mxUtils[_0xd587[150]](_0xd587[367]),_0xd587[110]};var _0x5c29x4=Components[_0xd587[372]][_0xd587[371]][_0xd587[370]](Components[_0xd587[369]][_0xd587[368]]);_0x5c29x4[_0xd587[373]](_0x5c29x2);if(!_0x5c29x4[_0xd587[374]]()){return mxUtils[_0xd587[150]](_0xd587[375]),_0xd587[110]};_0x5c29x2= Components[_0xd587[372]][_0xd587[377]][_0xd587[370]](Components[_0xd587[369]][_0xd587[376]]);_0x5c29x2[_0xd587[176]](_0x5c29x4,1,4,null);_0x5c29x4= Components[_0xd587[372]][_0xd587[379]][_0xd587[370]](Components[_0xd587[369]][_0xd587[378]]);_0x5c29x4[_0xd587[176]](_0x5c29x2);return _0x5c29x4[_0xd587[381]](_0x5c29x4[_0xd587[380]]())};_0x5c29x4= ( new ActiveXObject(_0xd587[382])).OpenTextFile(_0x5c29x2,1);_0x5c29x2= _0x5c29x4[_0xd587[383]]();_0x5c29x4[_0xd587[268]]();return _0x5c29x2},save:function(_0x5c29x2,_0x5c29x3){if(mxClient[_0xd587[133]]){try{netscape[_0xd587[366]][_0xd587[365]][_0xd587[364]](_0xd587[363])}catch(c){mxUtils[_0xd587[150]](_0xd587[384]);return};var _0x5c29x5=Components[_0xd587[372]][_0xd587[371]][_0xd587[370]](Components[_0xd587[369]][_0xd587[368]]);_0x5c29x5[_0xd587[373]](_0x5c29x2);_0x5c29x5[_0xd587[374]]()|| _0x5c29x5[_0xd587[385]](0,420);var _0x5c29x9=Components[_0xd587[372]][_0xd587[387]][_0xd587[370]](Components[_0xd587[369]][_0xd587[386]]);_0x5c29x9[_0xd587[176]](_0x5c29x5,34,4,null);_0x5c29x9[_0xd587[53]](_0x5c29x3,_0x5c29x3[_0xd587[67]]);_0x5c29x9[_0xd587[388]]();_0x5c29x9[_0xd587[268]]()}else {_0x5c29x5= ( new ActiveXObject(_0xd587[382])).CreateTextFile(_0x5c29x2,!0),_0x5c29x5.Write(_0x5c29x3),_0x5c29x5.Close()}},saveAs:function(_0x5c29x2){var _0x5c29x3=document[_0xd587[55]](_0xd587[389]);_0x5c29x3[_0xd587[57]](_0xd587[390],_0xd587[110]);_0x5c29x3[_0xd587[124]][_0xd587[187]]= _0xd587[188];document[_0xd587[112]][_0xd587[62]](_0x5c29x3);try{if(mxClient[_0xd587[133]]){var _0x5c29x4=_0x5c29x3[_0xd587[391]];_0x5c29x4[_0xd587[392]]();_0x5c29x4[_0xd587[53]](_0x5c29x2);_0x5c29x4[_0xd587[268]]();try{netscape[_0xd587[366]][_0xd587[365]][_0xd587[364]](_0xd587[363]),_0x5c29x3[_0xd587[393]](),saveDocument(_0x5c29x4)}catch(d){mxUtils[_0xd587[150]](_0xd587[394])}}else {_0x5c29x4= _0x5c29x3[_0xd587[396]][_0xd587[395]],_0x5c29x4[_0xd587[53]](_0x5c29x2),_0x5c29x4[_0xd587[398]](_0xd587[397],!1,document[_0xd587[45]])}}finally{document[_0xd587[112]][_0xd587[266]](_0x5c29x3)}},copy:function(_0x5c29x2){if(window[_0xd587[399]]){window[_0xd587[399]][_0xd587[401]](_0xd587[400],_0x5c29x2)}else {netscape[_0xd587[366]][_0xd587[365]][_0xd587[364]](_0xd587[363]);var _0x5c29x3=Components[_0xd587[372]][_0xd587[403]][_0xd587[370]](Components[_0xd587[369]][_0xd587[402]]);if(_0x5c29x3){var _0x5c29x4=Components[_0xd587[372]][_0xd587[405]][_0xd587[370]](Components[_0xd587[369]][_0xd587[404]]);if(_0x5c29x4){_0x5c29x4[_0xd587[407]](_0xd587[406]);var _0x5c29x5=Components[_0xd587[372]][_0xd587[409]][_0xd587[370]](Components[_0xd587[369]][_0xd587[408]]);_0x5c29x5[_0xd587[410]]= _0x5c29x2;_0x5c29x4[_0xd587[411]](_0xd587[406],_0x5c29x5,2* _0x5c29x2[_0xd587[67]]);_0x5c29x3[_0xd587[401]](_0x5c29x4,null,Components[_0xd587[369]][_0xd587[402]][_0xd587[412]])}}}},load:function(_0x5c29x2){_0x5c29x2= new mxXmlRequest(_0x5c29x2,null,_0xd587[413],!1);_0x5c29x2[_0xd587[414]]();return _0x5c29x2},get:function(_0x5c29x2,_0x5c29x3,_0x5c29x4){return ( new mxXmlRequest(_0x5c29x2,null,_0xd587[413]))[_0xd587[414]](_0x5c29x3,_0x5c29x4)},post:function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){return ( new mxXmlRequest(_0x5c29x2,_0x5c29x3))[_0xd587[414]](_0x5c29x4,_0x5c29x5)},submit:function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){return ( new mxXmlRequest(_0x5c29x2,_0x5c29x3))[_0xd587[415]](_0x5c29x4,_0x5c29x5)},loadInto:function(_0x5c29x2,_0x5c29x3,_0x5c29x4){mxClient[_0xd587[80]]?_0x5c29x3[_0xd587[416]]= function(){4== _0x5c29x3[_0xd587[417]]&& _0x5c29x4()}:_0x5c29x3[_0xd587[418]](_0xd587[219],_0x5c29x4,!1);_0x5c29x3[_0xd587[219]](_0x5c29x2)},getValue:function(_0x5c29x2,_0x5c29x3,_0x5c29x4){_0x5c29x2= null!= _0x5c29x2?_0x5c29x2[_0x5c29x3]:null;null== _0x5c29x2&& (_0x5c29x2= _0x5c29x4);return _0x5c29x2},getNumber:function(_0x5c29x2,_0x5c29x3,_0x5c29x4){_0x5c29x2= null!= _0x5c29x2?_0x5c29x2[_0x5c29x3]:null;null== _0x5c29x2&& (_0x5c29x2= _0x5c29x4|| 0);return Number(_0x5c29x2)},getColor:function(_0x5c29x2,_0x5c29x3,_0x5c29x4){_0x5c29x2= null!= _0x5c29x2?_0x5c29x2[_0x5c29x3]:null;null== _0x5c29x2?_0x5c29x2= _0x5c29x4:_0x5c29x2== mxConstants[_0xd587[217]]&& (_0x5c29x2= null);return _0x5c29x2},clone:function(_0x5c29x2,_0x5c29x3,_0x5c29x4){_0x5c29x4= null!= _0x5c29x4?_0x5c29x4:!1;var _0x5c29x5=null;if(null!= _0x5c29x2&& _0xd587[279]== typeof _0x5c29x2[_0xd587[196]]){var _0x5c29x5= new _0x5c29x2[_0xd587[196]],_0x5c29x9;for(_0x5c29x9 in _0x5c29x2){if(_0x5c29x9!= mxObjectIdentity[_0xd587[195]]&& (null== _0x5c29x3|| 0> mxUtils[_0xd587[2]](_0x5c29x3,_0x5c29x9))){_0x5c29x5[_0x5c29x9]= !_0x5c29x4&& _0xd587[194]== typeof _0x5c29x2[_0x5c29x9]?mxUtils[_0xd587[238]](_0x5c29x2[_0x5c29x9]):_0x5c29x2[_0x5c29x9]}}};return _0x5c29x5},equalPoints:function(_0x5c29x2,_0x5c29x3){if(null== _0x5c29x2&& null!= _0x5c29x3|| null!= _0x5c29x2&& null== _0x5c29x3|| null!= _0x5c29x2&& null!= _0x5c29x3&& _0x5c29x2[_0xd587[67]]!= _0x5c29x3[_0xd587[67]]){return !1};if(null!= _0x5c29x2&& null!= _0x5c29x3){for(var _0x5c29x4=0;_0x5c29x4< _0x5c29x2[_0xd587[67]];_0x5c29x4++){if(_0x5c29x2[_0x5c29x4]== _0x5c29x3[_0x5c29x4]|| null!= _0x5c29x2[_0x5c29x4]&& !_0x5c29x2[_0x5c29x4][_0xd587[237]](_0x5c29x3[_0x5c29x4])){return !1}}};return !0},equalEntries:function(_0x5c29x2,_0x5c29x3){if(null== _0x5c29x2&& null!= _0x5c29x3|| null!= _0x5c29x2&& null== _0x5c29x3|| null!= _0x5c29x2&& null!= _0x5c29x3&& _0x5c29x2[_0xd587[67]]!= _0x5c29x3[_0xd587[67]]){return !1};if(null!= _0x5c29x2&& null!= _0x5c29x3){for(var _0x5c29x4 in _0x5c29x2){if(_0x5c29x2[_0x5c29x4]!= _0x5c29x3[_0x5c29x4]){return !1}}};return !0},extend:function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=function(){};_0x5c29x4[_0xd587[202]]= _0x5c29x3[_0xd587[202]];_0x5c29x2[_0xd587[202]]= new _0x5c29x4;_0x5c29x2[_0xd587[202]][_0xd587[196]]= _0x5c29x2},toString:function(_0x5c29x2){var _0x5c29x3=_0xd587[110],_0x5c29x4;for(_0x5c29x4 in _0x5c29x2){try{if(null== _0x5c29x2[_0x5c29x4]){_0x5c29x3+= _0x5c29x4+ _0xd587[419]}else {if(_0xd587[279]== typeof _0x5c29x2[_0x5c29x4]){_0x5c29x3+= _0x5c29x4+ _0xd587[420]}else {if(_0xd587[194]== typeof _0x5c29x2[_0x5c29x4]){var _0x5c29x5=mxUtils[_0xd587[197]](_0x5c29x2[_0x5c29x4][_0xd587[196]]),_0x5c29x3=_0x5c29x3+ (_0x5c29x4+ _0xd587[421]+ _0x5c29x5+ _0xd587[422])}else {_0x5c29x3+= _0x5c29x4+ _0xd587[423]+ _0x5c29x2[_0x5c29x4]+ _0xd587[192]}}}}catch(e){_0x5c29x3+= _0x5c29x4+ _0xd587[226]+ e[_0xd587[281]]}};return _0x5c29x3},toRadians:function(_0x5c29x2){return Math[_0xd587[424]]* _0x5c29x2/ 180},arcToCurves:function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa,_0x5c29x12,_0x5c29x13,_0x5c29x14){_0x5c29x13-= _0x5c29x2;_0x5c29x14-= _0x5c29x3;if(0=== _0x5c29x4|| 0=== _0x5c29x5){return _0x5c29x18};_0x5c29x4= Math[_0xd587[425]](_0x5c29x4);_0x5c29x5= Math[_0xd587[425]](_0x5c29x5);var _0x5c29x15=-_0x5c29x13/ 2,_0x5c29x16=-_0x5c29x14/ 2,_0x5c29x17=Math[_0xd587[426]](_0x5c29x9* Math[_0xd587[424]]/ 180),_0x5c29x18=Math[_0xd587[427]](_0x5c29x9* Math[_0xd587[424]]/ 180);_0x5c29x9= _0x5c29x17* _0x5c29x15+ _0x5c29x18* _0x5c29x16;var _0x5c29x15=-1* _0x5c29x18* _0x5c29x15+ _0x5c29x17* _0x5c29x16,_0x5c29x16=_0x5c29x9* _0x5c29x9,_0x5c29x19=_0x5c29x15* _0x5c29x15,_0x5c29x1a=_0x5c29x4* _0x5c29x4,_0x5c29x1b=_0x5c29x5* _0x5c29x5,_0x5c29x1c=_0x5c29x16/ _0x5c29x1a+ _0x5c29x19/ _0x5c29x1b;1< _0x5c29x1c?(_0x5c29x4*= Math[_0xd587[428]](_0x5c29x1c),_0x5c29x5*= Math[_0xd587[428]](_0x5c29x1c),_0x5c29xa= 0):(_0x5c29x1c= 1,_0x5c29xa=== _0x5c29x12&& (_0x5c29x1c= -1),_0x5c29xa= _0x5c29x1c* Math[_0xd587[428]]((_0x5c29x1a* _0x5c29x1b- _0x5c29x1a* _0x5c29x19- _0x5c29x1b* _0x5c29x16)/ (_0x5c29x1a* _0x5c29x19+ _0x5c29x1b* _0x5c29x16)));_0x5c29x16= _0x5c29xa* _0x5c29x4* _0x5c29x15/ _0x5c29x5;_0x5c29x19= -1* _0x5c29xa* _0x5c29x5* _0x5c29x9/ _0x5c29x4;_0x5c29x13= _0x5c29x17* _0x5c29x16- _0x5c29x18* _0x5c29x19+ _0x5c29x13/ 2;_0x5c29x14= _0x5c29x18* _0x5c29x16+ _0x5c29x17* _0x5c29x19+ _0x5c29x14/ 2;_0x5c29x1a= Math[_0xd587[429]]((_0x5c29x15- _0x5c29x19)/ _0x5c29x5,(_0x5c29x9- _0x5c29x16)/ _0x5c29x4)- Math[_0xd587[429]](0,1);_0x5c29xa= 0<= _0x5c29x1a?_0x5c29x1a:2* Math[_0xd587[424]]+ _0x5c29x1a;_0x5c29x1a= Math[_0xd587[429]]((-_0x5c29x15- _0x5c29x19) / _0x5c29x5,(-_0x5c29x9- _0x5c29x16) / _0x5c29x4) - Math[_0xd587[429]]((_0x5c29x15- _0x5c29x19)/ _0x5c29x5,(_0x5c29x9- _0x5c29x16)/ _0x5c29x4);_0x5c29x9= 0<= _0x5c29x1a?_0x5c29x1a:2* Math[_0xd587[424]]+ _0x5c29x1a;0== _0x5c29x12&& 0< _0x5c29x9?_0x5c29x9-= 2* Math[_0xd587[424]]:0!= _0x5c29x12&& 0> _0x5c29x9&& (_0x5c29x9+= 2* Math[_0xd587[424]]);_0x5c29x12= 2* _0x5c29x9/ Math[_0xd587[424]];_0x5c29x12= Math[_0xd587[430]](0> _0x5c29x12?-1* _0x5c29x12:_0x5c29x12);_0x5c29x9/= _0x5c29x12;_0x5c29x15= 8/ 3* Math[_0xd587[427]](_0x5c29x9/ 4)* Math[_0xd587[427]](_0x5c29x9/ 4)/ Math[_0xd587[427]](_0x5c29x9/ 2);_0x5c29x16= _0x5c29x17* _0x5c29x4;_0x5c29x17*= _0x5c29x5;_0x5c29x4*= _0x5c29x18;_0x5c29x5*= _0x5c29x18;for(var _0x5c29x1d=Math[_0xd587[426]](_0x5c29xa),_0x5c29x1e=Math[_0xd587[427]](_0x5c29xa),_0x5c29x19=-_0x5c29x15* (_0x5c29x16* _0x5c29x1e+ _0x5c29x5* _0x5c29x1d),_0x5c29x1a=-_0x5c29x15* (_0x5c29x4* _0x5c29x1e- _0x5c29x17* _0x5c29x1d),_0x5c29x1c=_0x5c29x1b= 0,_0x5c29x18=[],_0x5c29x1f=0;_0x5c29x1f< _0x5c29x12;++_0x5c29x1f){_0x5c29xa+= _0x5c29x9;var _0x5c29x1d=Math[_0xd587[426]](_0x5c29xa),_0x5c29x1e=Math[_0xd587[427]](_0x5c29xa),_0x5c29x1b=_0x5c29x16* _0x5c29x1d- _0x5c29x5* _0x5c29x1e+ _0x5c29x13,_0x5c29x1c=_0x5c29x4* _0x5c29x1d+ _0x5c29x17* _0x5c29x1e+ _0x5c29x14,_0x5c29x20=-_0x5c29x15* (_0x5c29x16* _0x5c29x1e+ _0x5c29x5* _0x5c29x1d),_0x5c29x1d=-_0x5c29x15* (_0x5c29x4* _0x5c29x1e- _0x5c29x17* _0x5c29x1d),_0x5c29x1e=6* _0x5c29x1f;_0x5c29x18[_0x5c29x1e]= Number(_0x5c29x19+ _0x5c29x2);_0x5c29x18[_0x5c29x1e+ 1]= Number(_0x5c29x1a+ _0x5c29x3);_0x5c29x18[_0x5c29x1e+ 2]= Number(_0x5c29x1b- _0x5c29x20+ _0x5c29x2);_0x5c29x18[_0x5c29x1e+ 3]= Number(_0x5c29x1c- _0x5c29x1d+ _0x5c29x3);_0x5c29x18[_0x5c29x1e+ 4]= Number(_0x5c29x1b+ _0x5c29x2);_0x5c29x18[_0x5c29x1e+ 5]= Number(_0x5c29x1c+ _0x5c29x3);_0x5c29x19= _0x5c29x1b+ _0x5c29x20;_0x5c29x1a= _0x5c29x1c+ _0x5c29x1d};return _0x5c29x18},getBoundingBox:function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=null;if(null!= _0x5c29x2&& null!= _0x5c29x3&& 0!= _0x5c29x3){var _0x5c29x5=mxUtils[_0xd587[431]](_0x5c29x3),_0x5c29x4=Math[_0xd587[426]](_0x5c29x5),_0x5c29x9=Math[_0xd587[427]](_0x5c29x5),_0x5c29xa= new mxPoint(_0x5c29x2[_0xd587[235]]+ _0x5c29x2[_0xd587[117]]/ 2,_0x5c29x2[_0xd587[236]]+ _0x5c29x2[_0xd587[119]]/ 2),_0x5c29x12= new mxPoint(_0x5c29x2[_0xd587[235]],_0x5c29x2[_0xd587[236]]),_0x5c29x5= new mxPoint(_0x5c29x2[_0xd587[235]]+ _0x5c29x2[_0xd587[117]],_0x5c29x2[_0xd587[236]]),_0x5c29x13= new mxPoint(_0x5c29x5[_0xd587[235]],_0x5c29x2[_0xd587[236]]+ _0x5c29x2[_0xd587[119]]),_0x5c29x14= new mxPoint(_0x5c29x2[_0xd587[235]],_0x5c29x13[_0xd587[236]]),_0x5c29x12=mxUtils[_0xd587[432]](_0x5c29x12,_0x5c29x4,_0x5c29x9,_0x5c29xa),_0x5c29x5=mxUtils[_0xd587[432]](_0x5c29x5,_0x5c29x4,_0x5c29x9,_0x5c29xa),_0x5c29x13=mxUtils[_0xd587[432]](_0x5c29x13,_0x5c29x4,_0x5c29x9,_0x5c29xa),_0x5c29x14=mxUtils[_0xd587[432]](_0x5c29x14,_0x5c29x4,_0x5c29x9,_0x5c29xa),_0x5c29x4= new mxRectangle(_0x5c29x12[_0xd587[235]],_0x5c29x12[_0xd587[236]],0,0);_0x5c29x4[_0xd587[99]]( new mxRectangle(_0x5c29x5[_0xd587[235]],_0x5c29x5[_0xd587[236]],0,0));_0x5c29x4[_0xd587[99]]( new mxRectangle(_0x5c29x13[_0xd587[235]],_0x5c29x13[_0xd587[236]],0,0));_0x5c29x4[_0xd587[99]]( new mxRectangle(_0x5c29x14[_0xd587[235]],_0x5c29x14[_0xd587[236]],0,0))};return _0x5c29x4},getRotatedPoint:function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){_0x5c29x5= null!= _0x5c29x5?_0x5c29x5: new mxPoint;var _0x5c29x9=_0x5c29x2[_0xd587[235]]- _0x5c29x5[_0xd587[235]];_0x5c29x2= _0x5c29x2[_0xd587[236]]- _0x5c29x5[_0xd587[236]];return new mxPoint(_0x5c29x9* _0x5c29x3- _0x5c29x2* _0x5c29x4+ _0x5c29x5[_0xd587[235]],_0x5c29x2* _0x5c29x3+ _0x5c29x9* _0x5c29x4+ _0x5c29x5[_0xd587[236]])},getPortConstraints:function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){_0x5c29x2= mxUtils[_0xd587[433]](_0x5c29x2[_0xd587[124]],mxConstants.STYLE_PORT_CONSTRAINT,null);if(null== _0x5c29x2){return _0x5c29x5};_0x5c29x5= _0x5c29x2.toString();_0x5c29x2= mxConstants[_0xd587[434]];0<= _0x5c29x5[_0xd587[2]](mxConstants.DIRECTION_NORTH)&& (_0x5c29x2|= mxConstants[_0xd587[435]]);0<= _0x5c29x5[_0xd587[2]](mxConstants.DIRECTION_WEST)&& (_0x5c29x2|= mxConstants[_0xd587[436]]);0<= _0x5c29x5[_0xd587[2]](mxConstants.DIRECTION_SOUTH)&& (_0x5c29x2|= mxConstants[_0xd587[437]]);0<= _0x5c29x5[_0xd587[2]](mxConstants.DIRECTION_EAST)&& (_0x5c29x2|= mxConstants[_0xd587[438]]);return _0x5c29x2},reversePortConstraints:function(_0x5c29x2){var _0x5c29x3=0,_0x5c29x3=(_0x5c29x2& mxConstants[_0xd587[436]])<< 3,_0x5c29x3=_0x5c29x3| (_0x5c29x2& mxConstants[_0xd587[435]])<< 1,_0x5c29x3=_0x5c29x3| (_0x5c29x2& mxConstants[_0xd587[437]])>> 1;return _0x5c29x3|= (_0x5c29x2& mxConstants[_0xd587[438]])>> 3},findNearestSegment:function(_0x5c29x2,_0x5c29x3,_0x5c29x4){var _0x5c29x5=-1;if(0< _0x5c29x2[_0xd587[439]][_0xd587[67]]){for(var _0x5c29x9=_0x5c29x2[_0xd587[439]][0],_0x5c29xa=null,_0x5c29x12=1;_0x5c29x12< _0x5c29x2[_0xd587[439]][_0xd587[67]];_0x5c29x12++){var _0x5c29x13=_0x5c29x2[_0xd587[439]][_0x5c29x12],_0x5c29x9=mxUtils[_0xd587[440]](_0x5c29x9[_0xd587[235]],_0x5c29x9[_0xd587[236]],_0x5c29x13[_0xd587[235]],_0x5c29x13[_0xd587[236]],_0x5c29x3,_0x5c29x4);if(null== _0x5c29xa|| _0x5c29x9< _0x5c29xa){_0x5c29xa= _0x5c29x9,_0x5c29x5= _0x5c29x12- 1};_0x5c29x9= _0x5c29x13}};return _0x5c29x5},rectangleIntersectsSegment:function(_0x5c29x2,_0x5c29x3,_0x5c29x4){var _0x5c29x5=_0x5c29x2[_0xd587[236]],_0x5c29x9=_0x5c29x2[_0xd587[235]],_0x5c29xa=_0x5c29x5+ _0x5c29x2[_0xd587[119]],_0x5c29x12=_0x5c29x9+ _0x5c29x2[_0xd587[117]];_0x5c29x2= _0x5c29x3[_0xd587[235]];var _0x5c29x13=_0x5c29x4[_0xd587[235]];_0x5c29x3[_0xd587[235]]> _0x5c29x4[_0xd587[235]]&& (_0x5c29x2= _0x5c29x4[_0xd587[235]],_0x5c29x13= _0x5c29x3[_0xd587[235]]);_0x5c29x13> _0x5c29x12&& (_0x5c29x13= _0x5c29x12);_0x5c29x2< _0x5c29x9&& (_0x5c29x2= _0x5c29x9);if(_0x5c29x2> _0x5c29x13){return !1};var _0x5c29x9=_0x5c29x3[_0xd587[236]],_0x5c29x12=_0x5c29x4[_0xd587[236]],_0x5c29x14=_0x5c29x4[_0xd587[235]]- _0x5c29x3[_0xd587[235]];1E-7< Math[_0xd587[425]](_0x5c29x14)&& (_0x5c29x4= (_0x5c29x4[_0xd587[236]]- _0x5c29x3[_0xd587[236]])/ _0x5c29x14,_0x5c29x3= _0x5c29x3[_0xd587[236]]- _0x5c29x4* _0x5c29x3[_0xd587[235]],_0x5c29x9= _0x5c29x4* _0x5c29x2+ _0x5c29x3,_0x5c29x12= _0x5c29x4* _0x5c29x13+ _0x5c29x3);_0x5c29x9> _0x5c29x12&& (_0x5c29x3= _0x5c29x12,_0x5c29x12= _0x5c29x9,_0x5c29x9= _0x5c29x3);_0x5c29x12> _0x5c29xa&& (_0x5c29x12= _0x5c29xa);_0x5c29x9< _0x5c29x5&& (_0x5c29x9= _0x5c29x5);return _0x5c29x9> _0x5c29x12?!1:!0},contains:function(_0x5c29x2,_0x5c29x3,_0x5c29x4){return _0x5c29x2[_0xd587[235]]<= _0x5c29x3&& _0x5c29x2[_0xd587[235]]+ _0x5c29x2[_0xd587[117]]>= _0x5c29x3&& _0x5c29x2[_0xd587[236]]<= _0x5c29x4&& _0x5c29x2[_0xd587[236]]+ _0x5c29x2[_0xd587[119]]>= _0x5c29x4},intersects:function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=_0x5c29x2[_0xd587[117]],_0x5c29x5=_0x5c29x2[_0xd587[119]],_0x5c29x9=_0x5c29x3[_0xd587[117]],_0x5c29xa=_0x5c29x3[_0xd587[119]];if(0>= _0x5c29x9|| 0>= _0x5c29xa|| 0>= _0x5c29x4|| 0>= _0x5c29x5){return !1};var _0x5c29x12=_0x5c29x2[_0xd587[235]],_0x5c29x13=_0x5c29x2[_0xd587[236]],_0x5c29x14=_0x5c29x3[_0xd587[235]],_0x5c29x15=_0x5c29x3[_0xd587[236]],_0x5c29x9=_0x5c29x9+ _0x5c29x14,_0x5c29xa=_0x5c29xa+ _0x5c29x15,_0x5c29x4=_0x5c29x4+ _0x5c29x12,_0x5c29x5=_0x5c29x5+ _0x5c29x13;return (_0x5c29x9< _0x5c29x14|| _0x5c29x9> _0x5c29x12)&& (_0x5c29xa< _0x5c29x15|| _0x5c29xa> _0x5c29x13)&& (_0x5c29x4< _0x5c29x12|| _0x5c29x4> _0x5c29x14)&& (_0x5c29x5< _0x5c29x13|| _0x5c29x5> _0x5c29x15)},intersectsHotspot:function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa){_0x5c29x5= null!= _0x5c29x5?_0x5c29x5:1;_0x5c29x9= null!= _0x5c29x9?_0x5c29x9:0;_0x5c29xa= null!= _0x5c29xa?_0x5c29xa:0;if(0< _0x5c29x5){var _0x5c29x12=_0x5c29x2[_0xd587[241]](),_0x5c29x13=_0x5c29x2[_0xd587[242]](),_0x5c29x14=_0x5c29x2[_0xd587[117]],_0x5c29x15=_0x5c29x2[_0xd587[119]],_0x5c29x16=mxUtils[_0xd587[433]](_0x5c29x2[_0xd587[124]],mxConstants.STYLE_STARTSIZE)* _0x5c29x2[_0xd587[441]][_0xd587[255]];0< _0x5c29x16&& (mxUtils[_0xd587[433]](_0x5c29x2[_0xd587[124]],mxConstants.STYLE_HORIZONTAL,!0)?(_0x5c29x13= _0x5c29x2[_0xd587[236]]+ _0x5c29x16/ 2,_0x5c29x15= _0x5c29x16):(_0x5c29x12= _0x5c29x2[_0xd587[235]]+ _0x5c29x16/ 2,_0x5c29x14= _0x5c29x16));_0x5c29x14= Math[_0xd587[160]](_0x5c29x9,_0x5c29x14* _0x5c29x5);_0x5c29x15= Math[_0xd587[160]](_0x5c29x9,_0x5c29x15* _0x5c29x5);0< _0x5c29xa&& (_0x5c29x14= Math[_0xd587[243]](_0x5c29x14,_0x5c29xa),_0x5c29x15= Math[_0xd587[243]](_0x5c29x15,_0x5c29xa));_0x5c29x5= new mxRectangle(_0x5c29x12- _0x5c29x14/ 2,_0x5c29x13- _0x5c29x15/ 2,_0x5c29x14,_0x5c29x15);_0x5c29x12= mxUtils[_0xd587[431]](mxUtils[_0xd587[433]](_0x5c29x2[_0xd587[124]],mxConstants.STYLE_ROTATION)|| 0);0!= _0x5c29x12&& (_0x5c29x9= Math[_0xd587[426]](-_0x5c29x12),_0x5c29xa= Math[_0xd587[427]](-_0x5c29x12),_0x5c29x12= new mxPoint(_0x5c29x2[_0xd587[241]](),_0x5c29x2[_0xd587[242]]()),_0x5c29x2= mxUtils[_0xd587[432]]( new mxPoint(_0x5c29x3,_0x5c29x4),_0x5c29x9,_0x5c29xa,_0x5c29x12),_0x5c29x3= _0x5c29x2[_0xd587[235]],_0x5c29x4= _0x5c29x2[_0xd587[236]]);return mxUtils[_0xd587[442]](_0x5c29x5,_0x5c29x3,_0x5c29x4)};return !0},getOffset:function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=0,_0x5c29x5=0;if(null!= _0x5c29x3&& _0x5c29x3){var _0x5c29x9=document[_0xd587[112]],_0x5c29xa=document[_0xd587[158]],_0x5c29x4=_0x5c29x4+ (_0x5c29x9[_0xd587[360]]|| _0x5c29xa[_0xd587[360]]),_0x5c29x5=_0x5c29x5+ (_0x5c29x9[_0xd587[190]]|| _0x5c29xa[_0xd587[190]])};for(;_0x5c29x2[_0xd587[443]];){_0x5c29x4+= _0x5c29x2[_0xd587[358]],_0x5c29x5+= _0x5c29x2[_0xd587[362]],_0x5c29x2= _0x5c29x2[_0xd587[443]]};return new mxPoint(_0x5c29x4,_0x5c29x5)},getScrollOrigin:function(_0x5c29x2){for(var _0x5c29x3=document[_0xd587[112]],_0x5c29x4=document[_0xd587[158]],_0x5c29x5= new mxPoint(_0x5c29x3[_0xd587[360]]|| _0x5c29x4[_0xd587[360]],_0x5c29x3[_0xd587[190]]|| _0x5c29x4[_0xd587[190]]);null!= _0x5c29x2&& _0x5c29x2!= _0x5c29x3&& _0x5c29x2!= _0x5c29x4;){!isNaN(_0x5c29x2[_0xd587[360]])&& !isNaN(_0x5c29x2[_0xd587[190]])&& (_0x5c29x5[_0xd587[235]]+= _0x5c29x2[_0xd587[360]],_0x5c29x5[_0xd587[236]]+= _0x5c29x2[_0xd587[190]]),_0x5c29x2= _0x5c29x2[_0xd587[265]]};return _0x5c29x5},convertPoint:function(_0x5c29x2,_0x5c29x3,_0x5c29x4){var _0x5c29x5=mxUtils[_0xd587[444]](_0x5c29x2);_0x5c29x2= mxUtils[_0xd587[445]](_0x5c29x2);_0x5c29x2[_0xd587[235]]-= _0x5c29x5[_0xd587[235]];_0x5c29x2[_0xd587[236]]-= _0x5c29x5[_0xd587[236]];return new mxPoint(_0x5c29x3- _0x5c29x2[_0xd587[235]],_0x5c29x4- _0x5c29x2[_0xd587[236]])},ltrim:function(_0x5c29x2,_0x5c29x3){return _0x5c29x2[_0xd587[230]](RegExp(_0xd587[446]+ (_0x5c29x3|| _0xd587[447])+ _0xd587[448],_0xd587[449]),_0xd587[110])},rtrim:function(_0x5c29x2,_0x5c29x3){return _0x5c29x2[_0xd587[230]](RegExp(_0xd587[450]+ (_0x5c29x3|| _0xd587[447])+ _0xd587[451],_0xd587[449]),_0xd587[110])},trim:function(_0x5c29x2,_0x5c29x3){return mxUtils[_0xd587[453]](mxUtils[_0xd587[452]](_0x5c29x2,_0x5c29x3),_0x5c29x3)},isNumeric:function(_0x5c29x2){return null!= _0x5c29x2&& (null== _0x5c29x2[_0xd587[67]]|| 0< _0x5c29x2[_0xd587[67]]&& 0> _0x5c29x2[_0xd587[2]](_0xd587[454])&& 0> _0x5c29x2[_0xd587[2]](_0xd587[455]))&& !isNaN(_0x5c29x2)},mod:function(_0x5c29x2,_0x5c29x3){return (_0x5c29x2% _0x5c29x3+ _0x5c29x3)% _0x5c29x3},intersection:function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa,_0x5c29x12,_0x5c29x13){var _0x5c29x14=(_0x5c29x13- _0x5c29xa)* (_0x5c29x4- _0x5c29x2)- (_0x5c29x12- _0x5c29x9)* (_0x5c29x5- _0x5c29x3);_0x5c29x12= ((_0x5c29x12- _0x5c29x9)* (_0x5c29x3- _0x5c29xa)- (_0x5c29x13- _0x5c29xa)* (_0x5c29x2- _0x5c29x9))/ _0x5c29x14;_0x5c29x9= ((_0x5c29x4- _0x5c29x2)* (_0x5c29x3- _0x5c29xa)- (_0x5c29x5- _0x5c29x3)* (_0x5c29x2- _0x5c29x9))/ _0x5c29x14;return 0<= _0x5c29x12&& 1>= _0x5c29x12&& 0<= _0x5c29x9&& 1>= _0x5c29x9? new mxPoint(_0x5c29x2+ _0x5c29x12* (_0x5c29x4- _0x5c29x2),_0x5c29x3+ _0x5c29x12* (_0x5c29x5- _0x5c29x3)):null},ptSegDistSq:function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa){_0x5c29x4-= _0x5c29x2;_0x5c29x5-= _0x5c29x3;_0x5c29x9-= _0x5c29x2;_0x5c29xa-= _0x5c29x3;0>= _0x5c29x9* _0x5c29x4+ _0x5c29xa* _0x5c29x5?_0x5c29x4= 0:(_0x5c29x9= _0x5c29x4- _0x5c29x9,_0x5c29xa= _0x5c29x5- _0x5c29xa,_0x5c29x2= _0x5c29x9* _0x5c29x4+ _0x5c29xa* _0x5c29x5,_0x5c29x4= 0>= _0x5c29x2?0:_0x5c29x2* _0x5c29x2/ (_0x5c29x4* _0x5c29x4+ _0x5c29x5* _0x5c29x5));_0x5c29x9= _0x5c29x9* _0x5c29x9+ _0x5c29xa* _0x5c29xa- _0x5c29x4;0> _0x5c29x9&& (_0x5c29x9= 0);return _0x5c29x9},relativeCcw:function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa){_0x5c29x4-= _0x5c29x2;_0x5c29x5-= _0x5c29x3;_0x5c29x9-= _0x5c29x2;_0x5c29xa-= _0x5c29x3;_0x5c29x2= _0x5c29x9* _0x5c29x5- _0x5c29xa* _0x5c29x4;0== _0x5c29x2&& (_0x5c29x2= _0x5c29x9* _0x5c29x4+ _0x5c29xa* _0x5c29x5,0< _0x5c29x2&& (_0x5c29x2= (_0x5c29x9- _0x5c29x4)* _0x5c29x4+ (_0x5c29xa- _0x5c29x5)* _0x5c29x5,0> _0x5c29x2&& (_0x5c29x2= 0)));return 0> _0x5c29x2?-1:0< _0x5c29x2?1:0},animateChanges:function(_0x5c29x2,_0x5c29x3){mxEffects[_0xd587[456]][_0xd587[183]](this,arguments)},cascadeOpacity:function(_0x5c29x2,_0x5c29x3,_0x5c29x4){mxEffects[_0xd587[260]][_0xd587[183]](this,arguments)},fadeOut:function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa){mxEffects[_0xd587[457]][_0xd587[183]](this,arguments)},setOpacity:function(_0x5c29x2,_0x5c29x3){mxUtils[_0xd587[458]](_0x5c29x2)?_0x5c29x2[_0xd587[124]][_0xd587[347]]= 100<= _0x5c29x3?null:_0xd587[459]+ _0x5c29x3/ 5+ _0xd587[460]:mxClient[_0xd587[80]]&& (_0xd587[82]=== typeof document[_0xd587[5]]|| 9> document[_0xd587[5]])?_0x5c29x2[_0xd587[124]][_0xd587[347]]= 100<= _0x5c29x3?null:_0xd587[459]+ _0x5c29x3+ _0xd587[460]:_0x5c29x2[_0xd587[124]][_0xd587[461]]= _0x5c29x3/ 100},createImage:function(_0x5c29x2){var _0x5c29x3=null;mxClient[_0xd587[49]]&& _0xd587[462]!= document[_0xd587[135]]?(_0x5c29x3= document[_0xd587[55]](mxClient[_0xd587[463]]+ _0xd587[464]),_0x5c29x3[_0xd587[57]](_0xd587[390],_0x5c29x2),_0x5c29x3[_0xd587[124]][_0xd587[465]]= _0xd587[130]):(_0x5c29x3= document[_0xd587[55]](_0xd587[466]),_0x5c29x3[_0xd587[57]](_0xd587[390],_0x5c29x2),_0x5c29x3[_0xd587[57]](_0xd587[467],_0xd587[468]));return _0x5c29x3},sortCells:function(_0x5c29x2,_0x5c29x3){_0x5c29x3= null!= _0x5c29x3?_0x5c29x3:!0;var _0x5c29x4= new mxDictionary;_0x5c29x2[_0xd587[470]](function(_0x5c29x2,_0x5c29x9){var _0x5c29xa=_0x5c29x4[_0xd587[203]](_0x5c29x2);null== _0x5c29xa&& (_0x5c29xa= mxCellPath[_0xd587[385]](_0x5c29x2)[_0xd587[224]](mxCellPath.PATH_SEPARATOR),_0x5c29x4[_0xd587[204]](_0x5c29x2,_0x5c29xa));var _0x5c29x12=_0x5c29x4[_0xd587[203]](_0x5c29x9);null== _0x5c29x12&& (_0x5c29x12= mxCellPath[_0xd587[385]](_0x5c29x9)[_0xd587[224]](mxCellPath.PATH_SEPARATOR),_0x5c29x4[_0xd587[204]](_0x5c29x9,_0x5c29x12));_0x5c29xa= mxCellPath[_0xd587[469]](_0x5c29xa,_0x5c29x12);return 0== _0x5c29xa?0:0< _0x5c29xa== _0x5c29x3?1:-1});return _0x5c29x2},getStylename:function(_0x5c29x2){return null!= _0x5c29x2&& (_0x5c29x2= _0x5c29x2[_0xd587[224]](_0xd587[471])[0],0> _0x5c29x2[_0xd587[2]](_0xd587[226]))?_0x5c29x2:_0xd587[110]},getStylenames:function(_0x5c29x2){var _0x5c29x3=[];if(null!= _0x5c29x2){_0x5c29x2= _0x5c29x2[_0xd587[224]](_0xd587[471]);for(var _0x5c29x4=0;_0x5c29x4< _0x5c29x2[_0xd587[67]];_0x5c29x4++){0> _0x5c29x2[_0x5c29x4][_0xd587[2]](_0xd587[226])&& _0x5c29x3[_0xd587[207]](_0x5c29x2[_0x5c29x4])}};return _0x5c29x3},indexOfStylename:function(_0x5c29x2,_0x5c29x3){if(null!= _0x5c29x2&& null!= _0x5c29x3){for(var _0x5c29x4=_0x5c29x2[_0xd587[224]](_0xd587[471]),_0x5c29x5=0,_0x5c29x9=0;_0x5c29x9< _0x5c29x4[_0xd587[67]];_0x5c29x9++){if(_0x5c29x4[_0x5c29x9]== _0x5c29x3){return _0x5c29x5};_0x5c29x5+= _0x5c29x4[_0x5c29x9][_0xd587[67]]+ 1}};return -1},addStylename:function(_0x5c29x2,_0x5c29x3){0> mxUtils[_0xd587[472]](_0x5c29x2,_0x5c29x3)&& (null== _0x5c29x2?_0x5c29x2= _0xd587[110]:0< _0x5c29x2[_0xd587[67]]&& _0xd587[471]!= _0x5c29x2[_0xd587[225]](_0x5c29x2[_0xd587[67]]- 1)&& (_0x5c29x2+= _0xd587[471]),_0x5c29x2+= _0x5c29x3);return _0x5c29x2},removeStylename:function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=[];if(null!= _0x5c29x2){for(var _0x5c29x5=_0x5c29x2[_0xd587[224]](_0xd587[471]),_0x5c29x9=0;_0x5c29x9< _0x5c29x5[_0xd587[67]];_0x5c29x9++){_0x5c29x5[_0x5c29x9]!= _0x5c29x3&& _0x5c29x4[_0xd587[207]](_0x5c29x5[_0x5c29x9])}};return _0x5c29x4[_0xd587[234]](_0xd587[471])},removeAllStylenames:function(_0x5c29x2){var _0x5c29x3=[];if(null!= _0x5c29x2){_0x5c29x2= _0x5c29x2[_0xd587[224]](_0xd587[471]);for(var _0x5c29x4=0;_0x5c29x4< _0x5c29x2[_0xd587[67]];_0x5c29x4++){0<= _0x5c29x2[_0x5c29x4][_0xd587[2]](_0xd587[226])&& _0x5c29x3[_0xd587[207]](_0x5c29x2[_0x5c29x4])}};return _0x5c29x3[_0xd587[234]](_0xd587[471])},setCellStyles:function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){if(null!= _0x5c29x3&& 0< _0x5c29x3[_0xd587[67]]){_0x5c29x2[_0xd587[473]]();try{for(var _0x5c29x9=0;_0x5c29x9< _0x5c29x3[_0xd587[67]];_0x5c29x9++){if(null!= _0x5c29x3[_0x5c29x9]){var _0x5c29xa=mxUtils[_0xd587[475]](_0x5c29x2[_0xd587[474]](_0x5c29x3[_0x5c29x9]),_0x5c29x4,_0x5c29x5);_0x5c29x2[_0xd587[475]](_0x5c29x3[_0x5c29x9],_0x5c29xa)}}}finally{_0x5c29x2[_0xd587[476]]()}}},setStyle:function(_0x5c29x2,_0x5c29x3,_0x5c29x4){var _0x5c29x5=null!= _0x5c29x4&& (_0xd587[82]== typeof _0x5c29x4[_0xd587[67]]|| 0< _0x5c29x4[_0xd587[67]]);if(null== _0x5c29x2|| 0== _0x5c29x2[_0xd587[67]]){_0x5c29x5&& (_0x5c29x2= _0x5c29x3+ _0xd587[226]+ _0x5c29x4)}else {var _0x5c29x9=_0x5c29x2[_0xd587[2]](_0x5c29x3+ _0xd587[226]);0> _0x5c29x9?_0x5c29x5&& (_0x5c29x5= _0xd587[471]== _0x5c29x2[_0xd587[225]](_0x5c29x2[_0xd587[67]]- 1)?_0xd587[110]:_0xd587[471],_0x5c29x2= _0x5c29x2+ _0x5c29x5+ _0x5c29x3+ _0xd587[226]+ _0x5c29x4):(_0x5c29x3= _0x5c29x5?_0x5c29x3+ _0xd587[226]+ _0x5c29x4:_0xd587[110],_0x5c29x4= _0x5c29x2[_0xd587[2]](_0xd587[471],_0x5c29x9),_0x5c29x5|| _0x5c29x4++,_0x5c29x2= _0x5c29x2[_0xd587[85]](0,_0x5c29x9)+ _0x5c29x3+ (_0x5c29x4> _0x5c29x9?_0x5c29x2[_0xd587[85]](_0x5c29x4):_0xd587[110]))};return _0x5c29x2},setCellStyleFlags:function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){if(null!= _0x5c29x3&& 0< _0x5c29x3[_0xd587[67]]){_0x5c29x2[_0xd587[473]]();try{for(var _0x5c29xa=0;_0x5c29xa< _0x5c29x3[_0xd587[67]];_0x5c29xa++){if(null!= _0x5c29x3[_0x5c29xa]){var _0x5c29x12=mxUtils[_0xd587[477]](_0x5c29x2[_0xd587[474]](_0x5c29x3[_0x5c29xa]),_0x5c29x4,_0x5c29x5,_0x5c29x9);_0x5c29x2[_0xd587[475]](_0x5c29x3[_0x5c29xa],_0x5c29x12)}}}finally{_0x5c29x2[_0xd587[476]]()}}},setStyleFlag:function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){if(null== _0x5c29x2|| 0== _0x5c29x2[_0xd587[67]]){_0x5c29x2= _0x5c29x5|| null== _0x5c29x5?_0x5c29x3+ _0xd587[226]+ _0x5c29x4:_0x5c29x3+ _0xd587[478]}else {var _0x5c29x9=_0x5c29x2[_0xd587[2]](_0x5c29x3+ _0xd587[226]);if(0> _0x5c29x9){_0x5c29x9= _0xd587[471]== _0x5c29x2[_0xd587[225]](_0x5c29x2[_0xd587[67]]- 1)?_0xd587[110]:_0xd587[471],_0x5c29x2= _0x5c29x5|| null== _0x5c29x5?_0x5c29x2+ _0x5c29x9+ _0x5c29x3+ _0xd587[226]+ _0x5c29x4:_0x5c29x2+ _0x5c29x9+ _0x5c29x3+ _0xd587[478]}else {var _0x5c29xa=_0x5c29x2[_0xd587[2]](_0xd587[471],_0x5c29x9),_0x5c29x12=_0xd587[110],_0x5c29x12=0> _0x5c29xa?_0x5c29x2[_0xd587[85]](_0x5c29x9+ _0x5c29x3[_0xd587[67]]+ 1):_0x5c29x2[_0xd587[85]](_0x5c29x9+ _0x5c29x3[_0xd587[67]]+ 1,_0x5c29xa),_0x5c29x12=null== _0x5c29x5?parseInt(_0x5c29x12)^ _0x5c29x4:_0x5c29x5?parseInt(_0x5c29x12)| _0x5c29x4:parseInt(_0x5c29x12)& ~_0x5c29x4;_0x5c29x2= _0x5c29x2[_0xd587[85]](0,_0x5c29x9)+ _0x5c29x3+ _0xd587[226]+ _0x5c29x12+ (0<= _0x5c29xa?_0x5c29x2[_0xd587[85]](_0x5c29xa):_0xd587[110])}};return _0x5c29x2},getAlignmentAsPoint:function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=0,_0x5c29x5=0;_0x5c29x2== mxConstants[_0xd587[479]]?_0x5c29x4= -0.5:_0x5c29x2== mxConstants[_0xd587[480]]&& (_0x5c29x4= -1);_0x5c29x3== mxConstants[_0xd587[481]]?_0x5c29x5= -0.5:_0x5c29x3== mxConstants[_0xd587[482]]&& (_0x5c29x5= -1);return new mxPoint(_0x5c29x4,_0x5c29x5)},getSizeForString:function(_0x5c29x2,_0x5c29x3,_0x5c29x4){_0x5c29x3= null!= _0x5c29x3?_0x5c29x3:mxConstants[_0xd587[483]];_0x5c29x4= null!= _0x5c29x4?_0x5c29x4:mxConstants[_0xd587[484]];var _0x5c29x5=document[_0xd587[55]](_0xd587[485]);_0x5c29x5[_0xd587[124]][_0xd587[486]]= _0x5c29x4;_0x5c29x5[_0xd587[124]][_0xd587[487]]= Math[_0xd587[488]](_0x5c29x3)+ _0xd587[168];_0x5c29x5[_0xd587[124]][_0xd587[489]]= Math[_0xd587[488]](_0x5c29x3* mxConstants[_0xd587[490]])+ _0xd587[168];_0x5c29x5[_0xd587[124]][_0xd587[491]]= _0xd587[492];_0x5c29x5[_0xd587[124]][_0xd587[493]]= _0xd587[494];_0x5c29x5[_0xd587[124]][_0xd587[187]]= _0xd587[188];_0x5c29x5[_0xd587[124]][_0xd587[495]]= mxClient[_0xd587[496]]?_0xd587[497]:_0xd587[498];_0x5c29x5[_0xd587[124]][_0xd587[499]]= _0xd587[500];_0x5c29x5[_0xd587[339]]= _0x5c29x2;document[_0xd587[112]][_0xd587[62]](_0x5c29x5);_0x5c29x2= new mxRectangle(0,0,_0x5c29x5[_0xd587[359]],_0x5c29x5[_0xd587[167]]);document[_0xd587[112]][_0xd587[266]](_0x5c29x5);return _0x5c29x2},getViewXml:function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){_0x5c29x5= null!= _0x5c29x5?_0x5c29x5:0;_0x5c29x9= null!= _0x5c29x9?_0x5c29x9:0;_0x5c29x3= null!= _0x5c29x3?_0x5c29x3:1;null== _0x5c29x4&& (_0x5c29x4= [_0x5c29x2[_0xd587[502]]()[_0xd587[501]]()]);var _0x5c29xa=_0x5c29x2[_0xd587[249]](),_0x5c29x12=null,_0x5c29x13=_0x5c29xa[_0xd587[503]]();_0x5c29xa[_0xd587[504]](!1);var _0x5c29x14=_0x5c29xa[_0xd587[505]],_0x5c29x15=_0x5c29xa[_0xd587[506]];_0x5c29x2[_0xd587[507]]== mxConstants[_0xd587[508]]?(_0x5c29xa[_0xd587[505]]= document[_0xd587[509]](mxConstants.NS_SVG,_0xd587[449]),_0x5c29xa[_0xd587[510]][_0xd587[62]](_0x5c29xa[_0xd587[505]]),_0x5c29xa[_0xd587[506]]= document[_0xd587[509]](mxConstants.NS_SVG,_0xd587[449])):(_0x5c29xa[_0xd587[505]]= _0x5c29xa[_0xd587[505]][_0xd587[511]](!1),_0x5c29xa[_0xd587[510]][_0xd587[62]](_0x5c29xa[_0xd587[505]]),_0x5c29xa[_0xd587[506]]= _0x5c29xa[_0xd587[506]][_0xd587[511]](!1));_0x5c29xa[_0xd587[510]][_0xd587[62]](_0x5c29xa[_0xd587[506]]);var _0x5c29x16=_0x5c29xa[_0xd587[512]]();_0x5c29xa[_0xd587[513]]= new mxPoint(_0x5c29x5,_0x5c29x9);_0x5c29x3= new mxTemporaryCellStates(_0x5c29x2[_0xd587[249]](),_0x5c29x3,_0x5c29x4);try{_0x5c29x12= ( new mxCodec)[_0xd587[514]](_0x5c29x2[_0xd587[249]]())}finally{_0x5c29x3[_0xd587[515]](),_0x5c29xa[_0xd587[513]]= _0x5c29x16,_0x5c29xa[_0xd587[510]][_0xd587[266]](_0x5c29xa[_0xd587[505]]),_0x5c29xa[_0xd587[510]][_0xd587[266]](_0x5c29xa[_0xd587[506]]),_0x5c29xa[_0xd587[505]]= _0x5c29x14,_0x5c29xa[_0xd587[506]]= _0x5c29x15,_0x5c29xa[_0xd587[504]](_0x5c29x13)};return _0x5c29x12},getScaleForPageCount:function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){if(1> _0x5c29x2){return 1};_0x5c29x4= null!= _0x5c29x4?_0x5c29x4:mxConstants[_0xd587[516]];_0x5c29x5= null!= _0x5c29x5?_0x5c29x5:0;var _0x5c29x9=_0x5c29x4[_0xd587[117]]- 2* _0x5c29x5;_0x5c29x4= _0x5c29x4[_0xd587[119]]- 2* _0x5c29x5;_0x5c29x5= _0x5c29x3[_0xd587[517]]()[_0xd587[238]]();_0x5c29x3= _0x5c29x3[_0xd587[249]]()[_0xd587[518]]();_0x5c29x5[_0xd587[117]]/= _0x5c29x3;_0x5c29x5[_0xd587[119]]/= _0x5c29x3;_0x5c29x3= _0x5c29x5[_0xd587[117]];_0x5c29x4= _0x5c29x3/ _0x5c29x5[_0xd587[119]]/ (_0x5c29x9/ _0x5c29x4);_0x5c29x5= Math[_0xd587[428]](_0x5c29x2);var _0x5c29xa=Math[_0xd587[428]](_0x5c29x4);_0x5c29x4= _0x5c29x5* _0x5c29xa;_0x5c29x5/= _0x5c29xa;if(1> _0x5c29x4&& _0x5c29x5> _0x5c29x2){var _0x5c29x12=_0x5c29x5/ _0x5c29x2;_0x5c29x5= _0x5c29x2;_0x5c29x4/= _0x5c29x12};1> _0x5c29x5&& _0x5c29x4> _0x5c29x2&& (_0x5c29x12= _0x5c29x4/ _0x5c29x2,_0x5c29x4= _0x5c29x2,_0x5c29x5/= _0x5c29x12);_0x5c29x12= Math[_0xd587[430]](_0x5c29x4)* Math[_0xd587[430]](_0x5c29x5);for(_0x5c29xa= 0;_0x5c29x12> _0x5c29x2;){var _0x5c29x12=Math[_0xd587[519]](_0x5c29x4)/ _0x5c29x4,_0x5c29x13=Math[_0xd587[519]](_0x5c29x5)/ _0x5c29x5;1== _0x5c29x12&& (_0x5c29x12= Math[_0xd587[519]](_0x5c29x4- 1)/ _0x5c29x4);1== _0x5c29x13&& (_0x5c29x13= Math[_0xd587[519]](_0x5c29x5- 1)/ _0x5c29x5);_0x5c29x12= _0x5c29x12> _0x5c29x13?_0x5c29x12:_0x5c29x13;_0x5c29x4*= _0x5c29x12;_0x5c29x5*= _0x5c29x12;_0x5c29x12= Math[_0xd587[430]](_0x5c29x4)* Math[_0xd587[430]](_0x5c29x5);_0x5c29xa++;if(10< _0x5c29xa){break}};return 0.99999* (_0x5c29x9* _0x5c29x4/ _0x5c29x3)},show:function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){_0x5c29x4= null!= _0x5c29x4?_0x5c29x4:0;_0x5c29x5= null!= _0x5c29x5?_0x5c29x5:0;null== _0x5c29x3?_0x5c29x3= window[_0xd587[392]]()[_0xd587[395]]:_0x5c29x3[_0xd587[392]]();var _0x5c29x9=_0x5c29x2[_0xd587[517]]();_0x5c29x4= -_0x5c29x9[_0xd587[235]]+ _0x5c29x4;_0x5c29x5= -_0x5c29x9[_0xd587[236]]+ _0x5c29x5;if(mxClient[_0xd587[80]]){for(var _0x5c29x9=_0xd587[520],_0x5c29xa=document[_0xd587[64]](_0xd587[521]),_0x5c29x12=0;_0x5c29x12< _0x5c29xa[_0xd587[67]];_0x5c29x12++){_0x5c29x9+= _0x5c29xa[_0x5c29x12][_0xd587[342]]};_0x5c29x9+= _0xd587[522];for(_0x5c29x12= 0;_0x5c29x12< document[_0xd587[523]][_0xd587[67]];_0x5c29x12++){try{_0x5c29x9+= document[_0xd587[523]](_0x5c29x12)[_0xd587[103]]}catch(h){}};_0x5c29x9+= _0xd587[524];_0x5c29x9+= _0xd587[525];_0x5c29x9+= _0x5c29x2[_0xd587[526]][_0xd587[339]];_0x5c29x9+= _0xd587[527];_0x5c29x9+= _0xd587[528];_0x5c29x3[_0xd587[171]](_0x5c29x9);_0x5c29x3[_0xd587[268]]();_0x5c29x2= _0x5c29x3[_0xd587[112]][_0xd587[64]](_0xd587[529])[0];null!= _0x5c29x2&& (_0x5c29x2[_0xd587[124]][_0xd587[491]]= _0xd587[492],_0x5c29x2[_0xd587[124]][_0xd587[361]]= _0x5c29x4+ _0xd587[168],_0x5c29x2[_0xd587[124]][_0xd587[125]]= _0x5c29x5+ _0xd587[168])}else {_0x5c29x3[_0xd587[171]](_0xd587[530]);_0x5c29x3[_0xd587[171]](_0xd587[531]);_0x5c29xa= document[_0xd587[64]](_0xd587[521]);for(_0x5c29x12= 0;_0x5c29x12< _0x5c29xa[_0xd587[67]];_0x5c29x12++){_0x5c29x3[_0xd587[171]](mxUtils[_0xd587[532]](_0x5c29xa[_0x5c29x12]))};_0x5c29xa= document[_0xd587[64]](_0xd587[54]);for(_0x5c29x12= 0;_0x5c29x12< _0x5c29xa[_0xd587[67]];_0x5c29x12++){_0x5c29x3[_0xd587[171]](mxUtils[_0xd587[532]](_0x5c29xa[_0x5c29x12]))};_0x5c29xa= document[_0xd587[64]](_0xd587[124]);for(_0x5c29x12= 0;_0x5c29x12< _0x5c29xa[_0xd587[67]];_0x5c29x12++){_0x5c29x3[_0xd587[171]](mxUtils[_0xd587[532]](_0x5c29xa[_0x5c29x12]))};_0x5c29x3[_0xd587[171]](_0xd587[533]);_0x5c29x3[_0xd587[171]](_0xd587[534]);_0x5c29x3[_0xd587[268]]();null== _0x5c29x3[_0xd587[112]]&& _0x5c29x3[_0xd587[158]][_0xd587[62]](_0x5c29x3[_0xd587[55]](_0xd587[112]));_0x5c29x3[_0xd587[112]][_0xd587[124]][_0xd587[277]]= _0xd587[278];for(_0x5c29x2= _0x5c29x2[_0xd587[526]][_0xd587[285]];null!= _0x5c29x2;){_0x5c29x12= _0x5c29x2[_0xd587[511]](!0),_0x5c29x3[_0xd587[112]][_0xd587[62]](_0x5c29x12),_0x5c29x2= _0x5c29x2[_0xd587[287]]};_0x5c29x2= _0x5c29x3[_0xd587[64]](_0xd587[449])[0];null!= _0x5c29x2&& (_0x5c29x2[_0xd587[57]](_0xd587[535],_0xd587[536]+ _0x5c29x4+ _0xd587[537]+ _0x5c29x5+ _0xd587[460]),_0x5c29x4= _0x5c29x2[_0xd587[538]],_0x5c29x4[_0xd587[57]](_0xd587[117],_0x5c29x9[_0xd587[117]]+ Math[_0xd587[160]](_0x5c29x9[_0xd587[235]],0)+ 3),_0x5c29x4[_0xd587[57]](_0xd587[119],_0x5c29x9[_0xd587[119]]+ Math[_0xd587[160]](_0x5c29x9[_0xd587[236]],0)+ 3))};mxUtils[_0xd587[272]](_0x5c29x3[_0xd587[112]]);return _0x5c29x3},printScreen:function(_0x5c29x2){var _0x5c29x3=window[_0xd587[392]]();mxUtils[_0xd587[539]](_0x5c29x2,_0x5c29x3[_0xd587[395]]);_0x5c29x2= function(){_0x5c29x3[_0xd587[393]]();_0x5c29x3[_0xd587[540]]();_0x5c29x3[_0xd587[268]]()};mxClient[_0xd587[76]]?_0x5c29x3[_0xd587[261]](_0x5c29x2,500):_0x5c29x2()},popup:function(_0x5c29x2,_0x5c29x3){if(_0x5c29x3){var _0x5c29x4=document[_0xd587[55]](_0xd587[485]);_0x5c29x4[_0xd587[124]][_0xd587[277]]= _0xd587[276];_0x5c29x4[_0xd587[124]][_0xd587[117]]= _0xd587[541];_0x5c29x4[_0xd587[124]][_0xd587[119]]= _0xd587[542];var _0x5c29x5=document[_0xd587[55]](_0xd587[543]);_0x5c29x5[_0xd587[339]]= mxUtils[_0xd587[321]](_0x5c29x2,!1)[_0xd587[230]](/\n/g,_0xd587[545])[_0xd587[230]](/ /g,_0xd587[544]);_0x5c29x4[_0xd587[62]](_0x5c29x5);_0x5c29x4= new mxWindow(_0xd587[546],_0x5c29x4,document[_0xd587[112]][_0xd587[159]]/ 2- 320,(document[_0xd587[112]][_0xd587[157]]|| document[_0xd587[158]][_0xd587[157]])/ 2- 240,640,480,!1,!0);_0x5c29x4[_0xd587[164]](!0);_0x5c29x4[_0xd587[175]](!0)}else {mxClient[_0xd587[133]]?(_0x5c29x4= window[_0xd587[392]](),_0x5c29x4[_0xd587[395]][_0xd587[171]](_0xd587[547]+ mxUtils[_0xd587[321]](_0x5c29x2)+ _0xd587[548]),_0x5c29x4[_0xd587[395]][_0xd587[268]]()):(_0x5c29x4= window[_0xd587[392]](),_0x5c29x5= _0x5c29x4[_0xd587[395]][_0xd587[55]](_0xd587[543]),_0x5c29x5[_0xd587[339]]= mxUtils[_0xd587[321]](_0x5c29x2,!1)[_0xd587[230]](/\n/g,_0xd587[545])[_0xd587[230]](/ /g,_0xd587[544]),_0x5c29x4[_0xd587[395]][_0xd587[112]][_0xd587[62]](_0x5c29x5))}},alert:function(_0x5c29x2){alert(_0x5c29x2)},prompt:function(_0x5c29x2,_0x5c29x3){return prompt(_0x5c29x2,_0x5c29x3)},confirm:function(_0x5c29x2){return confirm(_0x5c29x2)},error:function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){var _0x5c29x9=document[_0xd587[55]](_0xd587[485]);_0x5c29x9[_0xd587[124]][_0xd587[549]]= _0xd587[550];var _0x5c29xa=document[_0xd587[55]](_0xd587[466]);_0x5c29xa[_0xd587[57]](_0xd587[390],_0x5c29x5|| mxUtils[_0xd587[551]]);_0x5c29xa[_0xd587[57]](_0xd587[552],_0xd587[553]);_0x5c29xa[_0xd587[124]][_0xd587[123]]= _0xd587[554];_0x5c29x9[_0xd587[62]](_0x5c29xa);_0x5c29x9[_0xd587[62]](document[_0xd587[344]](_0xd587[555]));_0x5c29x9[_0xd587[62]](document[_0xd587[344]](_0xd587[555]));_0x5c29x9[_0xd587[62]](document[_0xd587[344]](_0xd587[555]));mxUtils[_0xd587[53]](_0x5c29x9,_0x5c29x2);_0x5c29x2= document[_0xd587[112]][_0xd587[159]];_0x5c29x5= document[_0xd587[112]][_0xd587[157]]|| document[_0xd587[158]][_0xd587[157]];var _0x5c29x12= new mxWindow(mxResources[_0xd587[203]](mxUtils[_0xd587[556]])|| mxUtils[_0xd587[556]],_0x5c29x9,(_0x5c29x2- _0x5c29x3)/ 2,_0x5c29x5/ 4,_0x5c29x3,null,!1,!0);_0x5c29x4&& (mxUtils[_0xd587[345]](_0x5c29x9),_0x5c29x3= document[_0xd587[55]](_0xd587[346]),_0x5c29x4= document[_0xd587[55]](_0xd587[172]),mxClient[_0xd587[80]]?_0x5c29x4[_0xd587[124]][_0xd587[103]]= _0xd587[557]:_0x5c29x4[_0xd587[57]](_0xd587[124],_0xd587[557]),mxEvent[_0xd587[169]](_0x5c29x4,_0xd587[173],function(_0x5c29x2){_0x5c29x12[_0xd587[515]]()}),mxUtils[_0xd587[53]](_0x5c29x4,mxResources[_0xd587[203]](mxUtils[_0xd587[558]])|| mxUtils[_0xd587[558]]),_0x5c29x3[_0xd587[62]](_0x5c29x4),_0x5c29x9[_0xd587[62]](_0x5c29x3),mxUtils[_0xd587[345]](_0x5c29x9),_0x5c29x12[_0xd587[164]](!0));_0x5c29x12[_0xd587[175]](!0);return _0x5c29x12},makeDraggable:function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa,_0x5c29x12,_0x5c29x13,_0x5c29x14,_0x5c29x15){_0x5c29x2= new mxDragSource(_0x5c29x2,_0x5c29x4);_0x5c29x2[_0xd587[559]]= new mxPoint(null!= _0x5c29x9?_0x5c29x9:0,null!= _0x5c29xa?_0x5c29xa:mxConstants[_0xd587[560]]);_0x5c29x2[_0xd587[561]]= _0x5c29x12;_0x5c29x2[_0xd587[562]](!1);null!= _0x5c29x14&& (_0x5c29x2[_0xd587[563]]= _0x5c29x14);null!= _0x5c29x15&& (_0x5c29x2[_0xd587[564]]= _0x5c29x15);_0x5c29x2[_0xd587[565]]= function(_0x5c29x2){return _0xd587[279]== typeof _0x5c29x3?_0x5c29x3(_0x5c29x2):_0x5c29x3};null!= _0x5c29x5&& (_0x5c29x2[_0xd587[566]]= function(){return _0x5c29x5[_0xd587[511]](!0)},_0x5c29x13&& (_0x5c29x2[_0xd587[567]]= function(_0x5c29x2){var _0x5c29x3=_0x5c29x5[_0xd587[511]](!0),_0x5c29x4=parseInt(_0x5c29x3[_0xd587[124]][_0xd587[117]]),_0x5c29x9=parseInt(_0x5c29x3[_0xd587[124]][_0xd587[119]]);_0x5c29x3[_0xd587[124]][_0xd587[117]]= Math[_0xd587[488]](_0x5c29x4* _0x5c29x2[_0xd587[441]][_0xd587[255]])+ _0xd587[168];_0x5c29x3[_0xd587[124]][_0xd587[119]]= Math[_0xd587[488]](_0x5c29x9* _0x5c29x2[_0xd587[441]][_0xd587[255]])+ _0xd587[168];return _0x5c29x3}));return _0x5c29x2}},mxConstants={DEFAULT_HOTSPOT:0.3,MIN_HOTSPOT_SIZE:8,MAX_HOTSPOT_SIZE:0,RENDERING_HINT_EXACT:_0xd587[568],RENDERING_HINT_FASTER:_0xd587[569],RENDERING_HINT_FASTEST:_0xd587[570],DIALECT_SVG:_0xd587[571],DIALECT_VML:_0xd587[572],DIALECT_MIXEDHTML:_0xd587[573],DIALECT_PREFERHTML:_0xd587[574],DIALECT_STRICTHTML:_0xd587[575],NS_SVG:_0xd587[576],NS_XHTML:_0xd587[577],NS_XLINK:_0xd587[578],SHADOWCOLOR:_0xd587[579],SHADOW_OFFSET_X:2,SHADOW_OFFSET_Y:3,SHADOW_OPACITY:1,NODETYPE_ELEMENT:1,NODETYPE_ATTRIBUTE:2,NODETYPE_TEXT:3,NODETYPE_CDATA:4,NODETYPE_ENTITY_REFERENCE:5,NODETYPE_ENTITY:6,NODETYPE_PROCESSING_INSTRUCTION:7,NODETYPE_COMMENT:8,NODETYPE_DOCUMENT:9,NODETYPE_DOCUMENTTYPE:10,NODETYPE_DOCUMENT_FRAGMENT:11,NODETYPE_NOTATION:12,TOOLTIP_VERTICAL_OFFSET:16,DEFAULT_VALID_COLOR:_0xd587[580],DEFAULT_INVALID_COLOR:_0xd587[581],HIGHLIGHT_STROKEWIDTH:3,CURSOR_MOVABLE_VERTEX:_0xd587[582],CURSOR_MOVABLE_EDGE:_0xd587[582],CURSOR_LABEL_HANDLE:_0xd587[583],CURSOR_BEND_HANDLE:_0xd587[356],CURSOR_CONNECT:_0xd587[356],HIGHLIGHT_COLOR:_0xd587[580],CONNECT_TARGET_COLOR:_0xd587[584],INVALID_CONNECT_TARGET_COLOR:_0xd587[581],DROP_TARGET_COLOR:_0xd587[584],VALID_COLOR:_0xd587[580],INVALID_COLOR:_0xd587[581],EDGE_SELECTION_COLOR:_0xd587[580],VERTEX_SELECTION_COLOR:_0xd587[580],VERTEX_SELECTION_STROKEWIDTH:1,EDGE_SELECTION_STROKEWIDTH:1,VERTEX_SELECTION_DASHED:!0,EDGE_SELECTION_DASHED:!0,GUIDE_COLOR:_0xd587[581],GUIDE_STROKEWIDTH:1,OUTLINE_COLOR:_0xd587[585],OUTLINE_STROKEWIDTH:mxClient[_0xd587[80]]?2:3,HANDLE_SIZE:7,LABEL_HANDLE_SIZE:4,HANDLE_FILLCOLOR:_0xd587[580],HANDLE_STROKECOLOR:_0xd587[586],LABEL_HANDLE_FILLCOLOR:_0xd587[587],CONNECT_HANDLE_FILLCOLOR:_0xd587[584],LOCKED_HANDLE_FILLCOLOR:_0xd587[581],OUTLINE_HANDLE_FILLCOLOR:_0xd587[588],OUTLINE_HANDLE_STROKECOLOR:_0xd587[589],DEFAULT_FONTFAMILY:_0xd587[590],DEFAULT_FONTSIZE:11,LINE_HEIGHT:1.2,DEFAULT_FONTSTYLE:0,DEFAULT_STARTSIZE:40,DEFAULT_MARKERSIZE:6,DEFAULT_IMAGESIZE:24,ENTITY_SEGMENT:30,RECTANGLE_ROUNDING_FACTOR:0.15,LINE_ARCSIZE:20,ARROW_SPACING:10,ARROW_WIDTH:30,ARROW_SIZE:30,PAGE_FORMAT_A4_PORTRAIT: new mxRectangle(0,0,826,1169),PAGE_FORMAT_A4_LANDSCAPE: new mxRectangle(0,0,1169,826),PAGE_FORMAT_LETTER_PORTRAIT: new mxRectangle(0,0,850,1100),PAGE_FORMAT_LETTER_LANDSCAPE: new mxRectangle(0,0,1100,850),NONE:_0xd587[130],STYLE_PERIMETER:_0xd587[591],STYLE_SOURCE_PORT:_0xd587[592],STYLE_TARGET_PORT:_0xd587[593],STYLE_PORT_CONSTRAINT:_0xd587[594],STYLE_OPACITY:_0xd587[461],STYLE_TEXT_OPACITY:_0xd587[595],STYLE_OVERFLOW:_0xd587[277],STYLE_ORTHOGONAL:_0xd587[596],STYLE_EXIT_X:_0xd587[597],STYLE_EXIT_Y:_0xd587[598],STYLE_EXIT_PERIMETER:_0xd587[599],STYLE_ENTRY_X:_0xd587[600],STYLE_ENTRY_Y:_0xd587[601],STYLE_ENTRY_PERIMETER:_0xd587[602],STYLE_WHITE_SPACE:_0xd587[493],STYLE_ROTATION:_0xd587[603],STYLE_FILLCOLOR:_0xd587[604],STYLE_SWIMLANE_FILLCOLOR:_0xd587[605],STYLE_GRADIENTCOLOR:_0xd587[606],STYLE_GRADIENT_DIRECTION:_0xd587[607],STYLE_STROKECOLOR:_0xd587[608],STYLE_SEPARATORCOLOR:_0xd587[609],STYLE_STROKEWIDTH:_0xd587[610],STYLE_ALIGN:_0xd587[611],STYLE_VERTICAL_ALIGN:_0xd587[123],STYLE_LABEL_POSITION:_0xd587[612],STYLE_VERTICAL_LABEL_POSITION:_0xd587[613],STYLE_IMAGE_ASPECT:_0xd587[614],STYLE_IMAGE_ALIGN:_0xd587[615],STYLE_IMAGE_VERTICAL_ALIGN:_0xd587[616],STYLE_GLASS:_0xd587[617],STYLE_IMAGE:_0xd587[618],STYLE_IMAGE_WIDTH:_0xd587[619],STYLE_IMAGE_HEIGHT:_0xd587[620],STYLE_IMAGE_BACKGROUND:_0xd587[621],STYLE_IMAGE_BORDER:_0xd587[622],STYLE_FLIPH:_0xd587[623],STYLE_FLIPV:_0xd587[624],STYLE_NOLABEL:_0xd587[625],STYLE_NOEDGESTYLE:_0xd587[626],STYLE_LABEL_BACKGROUNDCOLOR:_0xd587[627],STYLE_LABEL_BORDERCOLOR:_0xd587[628],STYLE_LABEL_PADDING:_0xd587[629],STYLE_INDICATOR_SHAPE:_0xd587[630],STYLE_INDICATOR_IMAGE:_0xd587[631],STYLE_INDICATOR_COLOR:_0xd587[632],STYLE_INDICATOR_STROKECOLOR:_0xd587[633],STYLE_INDICATOR_GRADIENTCOLOR:_0xd587[634],STYLE_INDICATOR_SPACING:_0xd587[635],STYLE_INDICATOR_WIDTH:_0xd587[636],STYLE_INDICATOR_HEIGHT:_0xd587[637],STYLE_INDICATOR_DIRECTION:_0xd587[638],STYLE_SHADOW:_0xd587[639],STYLE_SEGMENT:_0xd587[640],STYLE_ENDARROW:_0xd587[641],STYLE_STARTARROW:_0xd587[642],STYLE_ENDSIZE:_0xd587[643],STYLE_STARTSIZE:_0xd587[644],STYLE_SWIMLANE_LINE:_0xd587[645],STYLE_ENDFILL:_0xd587[646],STYLE_STARTFILL:_0xd587[647],STYLE_DASHED:_0xd587[648],STYLE_DASH_PATTERN:_0xd587[649],STYLE_ROUNDED:_0xd587[650],STYLE_CURVED:_0xd587[651],STYLE_ARCSIZE:_0xd587[652],STYLE_SMOOTH:_0xd587[653],STYLE_SOURCE_PERIMETER_SPACING:_0xd587[654],STYLE_TARGET_PERIMETER_SPACING:_0xd587[655],STYLE_PERIMETER_SPACING:_0xd587[656],STYLE_SPACING:_0xd587[657],STYLE_SPACING_TOP:_0xd587[658],STYLE_SPACING_LEFT:_0xd587[659],STYLE_SPACING_BOTTOM:_0xd587[660],STYLE_SPACING_RIGHT:_0xd587[661],STYLE_HORIZONTAL:_0xd587[662],STYLE_DIRECTION:_0xd587[663],STYLE_ELBOW:_0xd587[664],STYLE_FONTCOLOR:_0xd587[665],STYLE_FONTFAMILY:_0xd587[486],STYLE_FONTSIZE:_0xd587[487],STYLE_FONTSTYLE:_0xd587[666],STYLE_AUTOSIZE:_0xd587[667],STYLE_FOLDABLE:_0xd587[668],STYLE_EDITABLE:_0xd587[669],STYLE_BENDABLE:_0xd587[670],STYLE_MOVABLE:_0xd587[671],STYLE_RESIZABLE:_0xd587[672],STYLE_CLONEABLE:_0xd587[673],STYLE_DELETABLE:_0xd587[674],STYLE_SHAPE:_0xd587[253],STYLE_EDGE:_0xd587[675],STYLE_LOOP:_0xd587[676],STYLE_ROUTING_CENTER_X:_0xd587[677],STYLE_ROUTING_CENTER_Y:_0xd587[678],FONT_BOLD:1,FONT_ITALIC:2,FONT_UNDERLINE:4,FONT_SHADOW:8,SHAPE_RECTANGLE:_0xd587[679],SHAPE_ELLIPSE:_0xd587[680],SHAPE_DOUBLE_ELLIPSE:_0xd587[681],SHAPE_RHOMBUS:_0xd587[682],SHAPE_LINE:_0xd587[683],SHAPE_IMAGE:_0xd587[618],SHAPE_ARROW:_0xd587[684],SHAPE_LABEL:_0xd587[685],SHAPE_CYLINDER:_0xd587[686],SHAPE_SWIMLANE:_0xd587[687],SHAPE_CONNECTOR:_0xd587[688],SHAPE_ACTOR:_0xd587[689],SHAPE_CLOUD:_0xd587[690],SHAPE_TRIANGLE:_0xd587[691],SHAPE_HEXAGON:_0xd587[692],ARROW_CLASSIC:_0xd587[693],ARROW_BLOCK:_0xd587[694],ARROW_OPEN:_0xd587[392],ARROW_OVAL:_0xd587[695],ARROW_DIAMOND:_0xd587[696],ARROW_DIAMOND_THIN:_0xd587[697],ALIGN_LEFT:_0xd587[361],ALIGN_CENTER:_0xd587[698],ALIGN_RIGHT:_0xd587[699],ALIGN_TOP:_0xd587[125],ALIGN_MIDDLE:_0xd587[554],ALIGN_BOTTOM:_0xd587[553],DIRECTION_NORTH:_0xd587[700],DIRECTION_SOUTH:_0xd587[701],DIRECTION_EAST:_0xd587[702],DIRECTION_WEST:_0xd587[703],DIRECTION_MASK_NONE:0,DIRECTION_MASK_WEST:1,DIRECTION_MASK_NORTH:2,DIRECTION_MASK_SOUTH:4,DIRECTION_MASK_EAST:8,DIRECTION_MASK_ALL:15,ELBOW_VERTICAL:_0xd587[704],ELBOW_HORIZONTAL:_0xd587[662],EDGESTYLE_ELBOW:_0xd587[705],EDGESTYLE_ENTITY_RELATION:_0xd587[706],EDGESTYLE_LOOP:_0xd587[707],EDGESTYLE_SIDETOSIDE:_0xd587[708],EDGESTYLE_TOPTOBOTTOM:_0xd587[709],EDGESTYLE_ORTHOGONAL:_0xd587[710],EDGESTYLE_SEGMENT:_0xd587[711],PERIMETER_ELLIPSE:_0xd587[712],PERIMETER_RECTANGLE:_0xd587[713],PERIMETER_RHOMBUS:_0xd587[714],PERIMETER_TRIANGLE:_0xd587[715]};function mxEventObject(_0x5c29x2){this[_0xd587[298]]= _0x5c29x2;this[_0xd587[716]]= [];for(var _0x5c29x3=1;_0x5c29x3< arguments[_0xd587[67]];_0x5c29x3+= 2){null!= arguments[_0x5c29x3+ 1]&& (this[_0xd587[716]][arguments[_0x5c29x3]]= arguments[_0x5c29x3+ 1])}}mxEventObject[_0xd587[202]][_0xd587[298]]= null;mxEventObject[_0xd587[202]][_0xd587[716]]= null;mxEventObject[_0xd587[202]][_0xd587[717]]= !1;mxEventObject[_0xd587[202]][_0xd587[718]]= function(){return this[_0xd587[298]]};mxEventObject[_0xd587[202]][_0xd587[719]]= function(){return this[_0xd587[716]]};mxEventObject[_0xd587[202]][_0xd587[720]]= function(_0x5c29x2){return this[_0xd587[716]][_0x5c29x2]};mxEventObject[_0xd587[202]][_0xd587[721]]= function(){return this[_0xd587[717]]};mxEventObject[_0xd587[202]][_0xd587[722]]= function(){this[_0xd587[717]]= !0};function mxMouseEvent(_0x5c29x2,_0x5c29x3){this[_0xd587[723]]= _0x5c29x2;this[_0xd587[724]]= _0x5c29x3}mxMouseEvent[_0xd587[202]][_0xd587[717]]= !1;mxMouseEvent[_0xd587[202]][_0xd587[723]]= null;mxMouseEvent[_0xd587[202]][_0xd587[725]]= null;mxMouseEvent[_0xd587[202]][_0xd587[726]]= null;mxMouseEvent[_0xd587[202]][_0xd587[724]]= null;mxMouseEvent[_0xd587[202]][_0xd587[727]]= function(){return this[_0xd587[723]]};mxMouseEvent[_0xd587[202]][_0xd587[728]]= function(){return mxEvent[_0xd587[728]](this[_0xd587[723]])};mxMouseEvent[_0xd587[202]][_0xd587[729]]= function(_0x5c29x2){if(null!= _0x5c29x2){for(var _0x5c29x3=this[_0xd587[728]]();null!= _0x5c29x3;){if(_0x5c29x3== _0x5c29x2[_0xd587[252]]){return !0};_0x5c29x3= _0x5c29x3[_0xd587[265]]}};return !1};mxMouseEvent[_0xd587[202]][_0xd587[730]]= function(){return mxEvent[_0xd587[731]](this[_0xd587[727]]())};mxMouseEvent[_0xd587[202]][_0xd587[732]]= function(){return mxEvent[_0xd587[733]](this[_0xd587[727]]())};mxMouseEvent[_0xd587[202]][_0xd587[734]]= function(){return this[_0xd587[725]]};mxMouseEvent[_0xd587[202]][_0xd587[735]]= function(){return this[_0xd587[726]]};mxMouseEvent[_0xd587[202]][_0xd587[248]]= function(){return this[_0xd587[724]]};mxMouseEvent[_0xd587[202]][_0xd587[736]]= function(){var _0x5c29x2=this[_0xd587[248]]();return null!= _0x5c29x2?_0x5c29x2[_0xd587[246]]:null};mxMouseEvent[_0xd587[202]][_0xd587[737]]= function(){return mxEvent[_0xd587[737]](this[_0xd587[727]]())};mxMouseEvent[_0xd587[202]][_0xd587[721]]= function(){return this[_0xd587[717]]};mxMouseEvent[_0xd587[202]][_0xd587[722]]= function(_0x5c29x2){(null!= _0x5c29x2?_0x5c29x2:1)&& this[_0xd587[723]][_0xd587[738]]&& this[_0xd587[723]][_0xd587[738]]();this[_0xd587[723]][_0xd587[739]]= !1;this[_0xd587[717]]= !0};function mxEventSource(_0x5c29x2){this[_0xd587[740]](_0x5c29x2)}mxEventSource[_0xd587[202]][_0xd587[741]]= null;mxEventSource[_0xd587[202]][_0xd587[742]]= !0;mxEventSource[_0xd587[202]][_0xd587[743]]= null;mxEventSource[_0xd587[202]][_0xd587[503]]= function(){return this[_0xd587[742]]};mxEventSource[_0xd587[202]][_0xd587[504]]= function(_0x5c29x2){this[_0xd587[742]]= _0x5c29x2};mxEventSource[_0xd587[202]][_0xd587[744]]= function(){return this[_0xd587[743]]};mxEventSource[_0xd587[202]][_0xd587[740]]= function(_0x5c29x2){this[_0xd587[743]]= _0x5c29x2};mxEventSource[_0xd587[202]][_0xd587[169]]= function(_0x5c29x2,_0x5c29x3){null== this[_0xd587[741]]&& (this[_0xd587[741]]= []);this[_0xd587[741]][_0xd587[207]](_0x5c29x2);this[_0xd587[741]][_0xd587[207]](_0x5c29x3)};mxEventSource[_0xd587[202]][_0xd587[745]]= function(_0x5c29x2){if(null!= this[_0xd587[741]]){for(var _0x5c29x3=0;_0x5c29x3< this[_0xd587[741]][_0xd587[67]];){this[_0xd587[741]][_0x5c29x3+ 1]== _0x5c29x2?this[_0xd587[741]][_0xd587[300]](_0x5c29x3,2):_0x5c29x3+= 2}}};mxEventSource[_0xd587[202]][_0xd587[746]]= function(_0x5c29x2,_0x5c29x3){if(null!= this[_0xd587[741]]&& this[_0xd587[503]]()){null== _0x5c29x2&& (_0x5c29x2= new mxEventObject);null== _0x5c29x3&& (_0x5c29x3= this[_0xd587[744]]());null== _0x5c29x3&& (_0x5c29x3= this);for(var _0x5c29x4=[_0x5c29x3,_0x5c29x2],_0x5c29x5=0;_0x5c29x5< this[_0xd587[741]][_0xd587[67]];_0x5c29x5+= 2){var _0x5c29x9=this[_0xd587[741]][_0x5c29x5];(null== _0x5c29x9|| _0x5c29x9== _0x5c29x2[_0xd587[718]]())&& this[_0xd587[741]][_0x5c29x5+ 1][_0xd587[183]](this,_0x5c29x4)}}};var mxEvent={objects:[],addListener:function(){var _0x5c29x2=function(_0x5c29x2,_0x5c29x4,_0x5c29x5){null== _0x5c29x2[_0xd587[69]]&& (_0x5c29x2[_0xd587[69]]= [],mxEvent[_0xd587[68]][_0xd587[207]](_0x5c29x2));_0x5c29x2[_0xd587[69]][_0xd587[207]]({name:_0x5c29x4,f:_0x5c29x5})};return window[_0xd587[418]]?function(_0x5c29x3,_0x5c29x4,_0x5c29x5){_0x5c29x3[_0xd587[418]](_0x5c29x4,_0x5c29x5,!1);_0x5c29x2(_0x5c29x3,_0x5c29x4,_0x5c29x5)}:function(_0x5c29x3,_0x5c29x4,_0x5c29x5){_0x5c29x3[_0xd587[108]](_0xd587[747]+ _0x5c29x4,_0x5c29x5);_0x5c29x2(_0x5c29x3,_0x5c29x4,_0x5c29x5)}}(),removeListener:function(){var _0x5c29x2=function(_0x5c29x2,_0x5c29x4,_0x5c29x5){if(null!= _0x5c29x2[_0xd587[69]]){_0x5c29x4= _0x5c29x2[_0xd587[69]][_0xd587[67]];for(var _0x5c29x9=0;_0x5c29x9< _0x5c29x4;_0x5c29x9++){if(_0x5c29x2[_0xd587[69]][_0x5c29x9][_0xd587[748]]== _0x5c29x5){_0x5c29x2[_0xd587[69]][_0xd587[300]](_0x5c29x9,1);break}};0== _0x5c29x2[_0xd587[69]][_0xd587[67]]&& (_0x5c29x2[_0xd587[69]]= null)}};return window[_0xd587[749]]?function(_0x5c29x3,_0x5c29x4,_0x5c29x5){_0x5c29x3[_0xd587[749]](_0x5c29x4,_0x5c29x5,!1);_0x5c29x2(_0x5c29x3,_0x5c29x4,_0x5c29x5)}:function(_0x5c29x3,_0x5c29x4,_0x5c29x5){_0x5c29x3[_0xd587[750]](_0xd587[747]+ _0x5c29x4,_0x5c29x5);_0x5c29x2(_0x5c29x3,_0x5c29x4,_0x5c29x5)}}(),removeAllListeners:function(_0x5c29x2){var _0x5c29x3=_0x5c29x2[_0xd587[69]];if(null!= _0x5c29x3){for(;0< _0x5c29x3[_0xd587[67]];){var _0x5c29x4=_0x5c29x3[0];mxEvent[_0xd587[745]](_0x5c29x2,_0x5c29x4[_0xd587[298]],_0x5c29x4[_0xd587[748]])}}},addGestureListeners:function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){null!= _0x5c29x3&& mxEvent[_0xd587[169]](_0x5c29x2,_0xd587[751],_0x5c29x3);null!= _0x5c29x4&& mxEvent[_0xd587[169]](_0x5c29x2,_0xd587[752],_0x5c29x4);null!= _0x5c29x5&& mxEvent[_0xd587[169]](_0x5c29x2,_0xd587[753],_0x5c29x5);mxClient[_0xd587[754]]&& (null!= _0x5c29x3&& mxEvent[_0xd587[169]](_0x5c29x2,_0xd587[755],_0x5c29x3),null!= _0x5c29x4&& mxEvent[_0xd587[169]](_0x5c29x2,_0xd587[756],_0x5c29x4),null!= _0x5c29x5&& mxEvent[_0xd587[169]](_0x5c29x2,_0xd587[757],_0x5c29x5))},removeGestureListeners:function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){null!= _0x5c29x3&& mxEvent[_0xd587[745]](_0x5c29x2,_0xd587[751],_0x5c29x3);null!= _0x5c29x4&& mxEvent[_0xd587[745]](_0x5c29x2,_0xd587[752],_0x5c29x4);null!= _0x5c29x5&& mxEvent[_0xd587[745]](_0x5c29x2,_0xd587[753],_0x5c29x5);mxClient[_0xd587[754]]&& (null!= _0x5c29x3&& mxEvent[_0xd587[745]](_0x5c29x2,_0xd587[755],_0x5c29x3),null!= _0x5c29x4&& mxEvent[_0xd587[745]](_0x5c29x2,_0xd587[756],_0x5c29x4),null!= _0x5c29x5&& mxEvent[_0xd587[745]](_0x5c29x2,_0xd587[757],_0x5c29x5))},redirectMouseEvents:function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa,_0x5c29x12){var _0x5c29x13=function(_0x5c29x2){return _0xd587[279]== typeof _0x5c29x4?_0x5c29x4(_0x5c29x2):_0x5c29x4};mxEvent[_0xd587[759]](_0x5c29x2,function(_0x5c29x2){null!= _0x5c29x5?_0x5c29x5(_0x5c29x2):mxEvent[_0xd587[721]](_0x5c29x2)|| _0x5c29x3[_0xd587[758]](mxEvent.MOUSE_DOWN, new mxMouseEvent(_0x5c29x2,_0x5c29x13(_0x5c29x2)))},function(_0x5c29x2){null!= _0x5c29x9?_0x5c29x9(_0x5c29x2):mxEvent[_0xd587[721]](_0x5c29x2)|| _0x5c29x3[_0xd587[758]](mxEvent.MOUSE_MOVE, new mxMouseEvent(_0x5c29x2,_0x5c29x13(_0x5c29x2)))},function(_0x5c29x2){null!= _0x5c29xa?_0x5c29xa(_0x5c29x2):mxEvent[_0xd587[721]](_0x5c29x2)|| _0x5c29x3[_0xd587[758]](mxEvent.MOUSE_UP, new mxMouseEvent(_0x5c29x2,_0x5c29x13(_0x5c29x2)))});mxEvent[_0xd587[169]](_0x5c29x2,_0xd587[760],function(_0x5c29x2){if(null!= _0x5c29x12){_0x5c29x12(_0x5c29x2)}else {if(!mxEvent[_0xd587[721]](_0x5c29x2)){var _0x5c29x4=_0x5c29x13(_0x5c29x2);_0x5c29x3[_0xd587[761]](_0x5c29x2,null!= _0x5c29x4?_0x5c29x4[_0xd587[246]]:null)}}})},release:function(_0x5c29x2){if(null!= _0x5c29x2&& (mxEvent[_0xd587[70]](_0x5c29x2),_0x5c29x2= _0x5c29x2[_0xd587[271]],null!= _0x5c29x2)){for(var _0x5c29x3=_0x5c29x2[_0xd587[67]],_0x5c29x4=0;_0x5c29x4< _0x5c29x3;_0x5c29x4+= 1){mxEvent[_0xd587[762]](_0x5c29x2[_0x5c29x4])}}},addMouseWheelListener:function(_0x5c29x2){if(null!= _0x5c29x2){var _0x5c29x3=function(_0x5c29x3){null== _0x5c29x3&& (_0x5c29x3= window[_0xd587[763]]);var _0x5c29x5=0,_0x5c29x5=mxClient[_0xd587[133]]&& !mxClient[_0xd587[75]]&& !mxClient[_0xd587[76]]?-_0x5c29x3[_0xd587[764]]/ 2:_0x5c29x3[_0xd587[765]]/ 120;0!= _0x5c29x5&& _0x5c29x2(_0x5c29x3,0< _0x5c29x5)};mxClient[_0xd587[133]]?mxEvent[_0xd587[169]](window,mxClient[_0xd587[75]]|| mxClient[_0xd587[76]]?_0xd587[766]:_0xd587[767],_0x5c29x3):mxEvent[_0xd587[169]](document,_0xd587[766],_0x5c29x3)}},disableContextMenu:function(){return mxClient[_0xd587[80]]&& (_0xd587[82]=== typeof document[_0xd587[5]]|| 9> document[_0xd587[5]])?function(_0x5c29x2){mxEvent[_0xd587[169]](_0x5c29x2,_0xd587[768],function(){return !1})}:function(_0x5c29x2){_0x5c29x2[_0xd587[57]](_0xd587[769],_0xd587[770])}}(),getSource:function(_0x5c29x2){return null!= _0x5c29x2[_0xd587[771]]?_0x5c29x2[_0xd587[771]]:_0x5c29x2[_0xd587[772]]},isConsumed:function(_0x5c29x2){return null!= _0x5c29x2[_0xd587[721]]&& _0x5c29x2[_0xd587[721]]},isLeftMouseButton:function(_0x5c29x2){return _0x5c29x2[_0xd587[172]]== (mxClient[_0xd587[80]]&& (_0xd587[82]=== typeof document[_0xd587[5]]|| 9> document[_0xd587[5]])?1:0)},isRightMouseButton:function(_0x5c29x2){return 2== _0x5c29x2[_0xd587[172]]},isPopupTrigger:function(_0x5c29x2){return mxEvent[_0xd587[773]](_0x5c29x2)|| mxEvent[_0xd587[774]](_0x5c29x2)&& !mxEvent[_0xd587[775]](_0x5c29x2)},isShiftDown:function(_0x5c29x2){return null!= _0x5c29x2?_0x5c29x2[_0xd587[776]]:!1},isAltDown:function(_0x5c29x2){return null!= _0x5c29x2?_0x5c29x2[_0xd587[777]]:!1},isControlDown:function(_0x5c29x2){return null!= _0x5c29x2?_0x5c29x2[_0xd587[778]]:!1},isMetaDown:function(_0x5c29x2){return null!= _0x5c29x2?_0x5c29x2[_0xd587[779]]:!1},getMainEvent:function(_0x5c29x2){(_0xd587[755]== _0x5c29x2[_0xd587[60]]|| _0xd587[756]== _0x5c29x2[_0xd587[60]])&& null!= _0x5c29x2[_0xd587[780]]&& null!= _0x5c29x2[_0xd587[780]][0]?_0x5c29x2= _0x5c29x2[_0xd587[780]][0]:_0xd587[757]== _0x5c29x2[_0xd587[60]]&& (null!= _0x5c29x2[_0xd587[781]]&& null!= _0x5c29x2[_0xd587[781]][0])&& (_0x5c29x2= _0x5c29x2[_0xd587[781]][0]);return _0x5c29x2},getClientX:function(_0x5c29x2){return mxEvent[_0xd587[783]](_0x5c29x2)[_0xd587[782]]},getClientY:function(_0x5c29x2){return mxEvent[_0xd587[783]](_0x5c29x2)[_0xd587[784]]},consume:function(_0x5c29x2,_0x5c29x3,_0x5c29x4){_0x5c29x4= null!= _0x5c29x4?_0x5c29x4:!0;if(null!= _0x5c29x3?_0x5c29x3:1){_0x5c29x2[_0xd587[738]]?(_0x5c29x4&& _0x5c29x2[_0xd587[785]](),_0x5c29x2[_0xd587[738]]()):_0x5c29x4&& (_0x5c29x2[_0xd587[786]]= !0)};_0x5c29x2[_0xd587[721]]= !0;_0x5c29x2[_0xd587[739]]= !1},LABEL_HANDLE:-1,ROTATION_HANDLE:-2,MOUSE_DOWN:_0xd587[787],MOUSE_MOVE:_0xd587[788],MOUSE_UP:_0xd587[789],ACTIVATE:_0xd587[790],RESIZE_START:_0xd587[791],RESIZE:_0xd587[129],RESIZE_END:_0xd587[792],MOVE_START:_0xd587[793],MOVE:_0xd587[582],MOVE_END:_0xd587[794],PAN_START:_0xd587[795],PAN:_0xd587[796],PAN_END:_0xd587[797],MINIMIZE:_0xd587[798],NORMALIZE:_0xd587[799],MAXIMIZE:_0xd587[800],HIDE:_0xd587[801],SHOW:_0xd587[539],CLOSE:_0xd587[268],DESTROY:_0xd587[515],REFRESH:_0xd587[802],SIZE:_0xd587[803],SELECT:_0xd587[804],FIRED:_0xd587[805],GET:_0xd587[203],RECEIVE:_0xd587[806],CONNECT:_0xd587[807],DISCONNECT:_0xd587[808],SUSPEND:_0xd587[809],RESUME:_0xd587[810],MARK:_0xd587[811],SESSION:_0xd587[812],ROOT:_0xd587[813],POST:_0xd587[814],OPEN:_0xd587[392],SAVE:_0xd587[815],BEFORE_ADD_VERTEX:_0xd587[816],ADD_VERTEX:_0xd587[817],AFTER_ADD_VERTEX:_0xd587[818],DONE:_0xd587[819],EXECUTE:_0xd587[350],EXECUTED:_0xd587[820],BEGIN_UPDATE:_0xd587[473],START_EDIT:_0xd587[821],END_UPDATE:_0xd587[476],END_EDIT:_0xd587[822],BEFORE_UNDO:_0xd587[823],UNDO:_0xd587[824],REDO:_0xd587[825],CHANGE:_0xd587[826],NOTIFY:_0xd587[827],LAYOUT_CELLS:_0xd587[828],CLICK:_0xd587[173],SCALE:_0xd587[255],TRANSLATE:_0xd587[513],SCALE_AND_TRANSLATE:_0xd587[829],UP:_0xd587[830],DOWN:_0xd587[831],ADD:_0xd587[99],REMOVE:_0xd587[205],CLEAR:_0xd587[200],ADD_CELLS:_0xd587[832],CELLS_ADDED:_0xd587[833],MOVE_CELLS:_0xd587[834],CELLS_MOVED:_0xd587[835],RESIZE_CELLS:_0xd587[836],CELLS_RESIZED:_0xd587[837],TOGGLE_CELLS:_0xd587[838],CELLS_TOGGLED:_0xd587[839],ORDER_CELLS:_0xd587[840],CELLS_ORDERED:_0xd587[841],REMOVE_CELLS:_0xd587[842],CELLS_REMOVED:_0xd587[843],GROUP_CELLS:_0xd587[844],UNGROUP_CELLS:_0xd587[845],REMOVE_CELLS_FROM_PARENT:_0xd587[846],FOLD_CELLS:_0xd587[847],CELLS_FOLDED:_0xd587[848],ALIGN_CELLS:_0xd587[849],LABEL_CHANGED:_0xd587[850],CONNECT_CELL:_0xd587[851],CELL_CONNECTED:_0xd587[852],SPLIT_EDGE:_0xd587[853],FLIP_EDGE:_0xd587[854],START_EDITING:_0xd587[855],ADD_OVERLAY:_0xd587[856],REMOVE_OVERLAY:_0xd587[857],UPDATE_CELL_SIZE:_0xd587[858],ESCAPE:_0xd587[859],CLICK:_0xd587[173],DOUBLE_CLICK:_0xd587[860],START:_0xd587[861],RESET:_0xd587[862]};function mxXmlRequest(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa){this[_0xd587[863]]= _0x5c29x2;this[_0xd587[864]]= _0x5c29x3;this[_0xd587[865]]= _0x5c29x4|| _0xd587[866];this[_0xd587[307]]= null!= _0x5c29x5?_0x5c29x5:!0;this[_0xd587[867]]= _0x5c29x9;this[_0xd587[868]]= _0x5c29xa}mxXmlRequest[_0xd587[202]][_0xd587[863]]= null;mxXmlRequest[_0xd587[202]][_0xd587[864]]= null;mxXmlRequest[_0xd587[202]][_0xd587[865]]= null;mxXmlRequest[_0xd587[202]][_0xd587[307]]= null;mxXmlRequest[_0xd587[202]][_0xd587[869]]= !1;mxXmlRequest[_0xd587[202]][_0xd587[867]]= null;mxXmlRequest[_0xd587[202]][_0xd587[868]]= null;mxXmlRequest[_0xd587[202]][_0xd587[870]]= null;mxXmlRequest[_0xd587[202]][_0xd587[871]]= function(){return this[_0xd587[869]]};mxXmlRequest[_0xd587[202]][_0xd587[872]]= function(_0x5c29x2){this[_0xd587[869]]= _0x5c29x2};mxXmlRequest[_0xd587[202]][_0xd587[221]]= function(){return this[_0xd587[870]][_0xd587[873]]};mxXmlRequest[_0xd587[202]][_0xd587[220]]= function(){return 4== this[_0xd587[870]][_0xd587[417]]};mxXmlRequest[_0xd587[202]][_0xd587[874]]= function(){var _0x5c29x2=this[_0xd587[875]]();return null!= _0x5c29x2?_0x5c29x2[_0xd587[158]]:null};mxXmlRequest[_0xd587[202]][_0xd587[875]]= function(){var _0x5c29x2=this[_0xd587[870]][_0xd587[876]];if(9<= document[_0xd587[5]]|| null== _0x5c29x2|| null== _0x5c29x2[_0xd587[158]]){_0x5c29x2= mxUtils[_0xd587[877]](this[_0xd587[870]][_0xd587[873]])};return _0x5c29x2};mxXmlRequest[_0xd587[202]][_0xd587[221]]= function(){return this[_0xd587[870]][_0xd587[873]]};mxXmlRequest[_0xd587[202]][_0xd587[878]]= function(){return this[_0xd587[870]][_0xd587[879]]};mxXmlRequest[_0xd587[202]][_0xd587[385]]= function(){if(window[_0xd587[880]]){return function(){var _0x5c29x2= new XMLHttpRequest;this[_0xd587[871]]()&& _0x5c29x2[_0xd587[881]]&& _0x5c29x2[_0xd587[881]](_0xd587[882]);return _0x5c29x2}};if(_0xd587[82]!= typeof ActiveXObject){return function(){return new ActiveXObject(_0xd587[883])}}}();mxXmlRequest[_0xd587[202]][_0xd587[414]]= function(_0x5c29x2,_0x5c29x3){this[_0xd587[870]]= this[_0xd587[385]]();null!= this[_0xd587[870]]&& (null!= _0x5c29x2&& (this[_0xd587[870]][_0xd587[416]]= mxUtils[_0xd587[885]](this,function(){this[_0xd587[220]]()&& (_0x5c29x2(this),this[_0xd587[884]]= null)})),this[_0xd587[870]][_0xd587[392]](this[_0xd587[865]],this[_0xd587[863]],this[_0xd587[307]],this[_0xd587[867]],this[_0xd587[868]]),this[_0xd587[886]](this[_0xd587[870]],this[_0xd587[864]]),this[_0xd587[870]][_0xd587[414]](this[_0xd587[864]]))};mxXmlRequest[_0xd587[202]][_0xd587[886]]= function(_0x5c29x2,_0x5c29x3){null!= _0x5c29x3&& _0x5c29x2[_0xd587[889]](_0xd587[887],_0xd587[888])};mxXmlRequest[_0xd587[202]][_0xd587[415]]= function(_0x5c29x2,_0x5c29x3){_0x5c29x2= _0x5c29x2|| document;var _0x5c29x4=null;_0x5c29x2== document&& (_0x5c29x4= window[_0xd587[890]],window[_0xd587[890]]= null);var _0x5c29x5=_0x5c29x2[_0xd587[55]](_0xd587[891]);_0x5c29x5[_0xd587[57]](_0xd587[865],this[_0xd587[865]]);_0x5c29x5[_0xd587[57]](_0xd587[892],this[_0xd587[863]]);null!= _0x5c29x3&& _0x5c29x5[_0xd587[57]](_0xd587[772],_0x5c29x3);_0x5c29x5[_0xd587[124]][_0xd587[495]]= _0xd587[130];_0x5c29x5[_0xd587[124]][_0xd587[187]]= _0xd587[188];for(var _0x5c29x9=0< this[_0xd587[864]][_0xd587[2]](_0xd587[893])?this[_0xd587[864]][_0xd587[224]](_0xd587[893]):this[_0xd587[864]][_0xd587[224]](),_0x5c29xa=0;_0x5c29xa< _0x5c29x9[_0xd587[67]];_0x5c29xa++){var _0x5c29x12=_0x5c29x9[_0x5c29xa][_0xd587[2]](_0xd587[226]);if(0< _0x5c29x12){var _0x5c29x13=_0x5c29x9[_0x5c29xa][_0xd587[85]](0,_0x5c29x12),_0x5c29x14=_0x5c29x9[_0x5c29xa][_0xd587[85]](_0x5c29x12+ 1),_0x5c29x12=_0x5c29x2[_0xd587[55]](_0xd587[126]);_0x5c29x12[_0xd587[57]](_0xd587[298],_0x5c29x13);_0x5c29x14= _0x5c29x14[_0xd587[230]](/\n/g,_0xd587[336]);_0x5c29x13= _0x5c29x2[_0xd587[344]](_0x5c29x14);_0x5c29x12[_0xd587[62]](_0x5c29x13);_0x5c29x5[_0xd587[62]](_0x5c29x12)}};_0x5c29x2[_0xd587[112]][_0xd587[62]](_0x5c29x5);_0x5c29x5[_0xd587[894]]();_0x5c29x2[_0xd587[112]][_0xd587[266]](_0x5c29x5);null!= _0x5c29x4&& (window[_0xd587[890]]= _0x5c29x4)};var mxClipboard={STEPSIZE:10,insertCount:1,cells:null,isEmpty:function(){return null== mxClipboard[_0xd587[895]]},cut:function(_0x5c29x2,_0x5c29x3){_0x5c29x3= mxClipboard[_0xd587[149]](_0x5c29x2,_0x5c29x3);mxClipboard[_0xd587[896]]= 0;mxClipboard[_0xd587[842]](_0x5c29x2,_0x5c29x3);return _0x5c29x3},removeCells:function(_0x5c29x2,_0x5c29x3){_0x5c29x2[_0xd587[842]](_0x5c29x3)},copy:function(_0x5c29x2,_0x5c29x3){_0x5c29x3= _0x5c29x3|| _0x5c29x2[_0xd587[897]]();var _0x5c29x4=_0x5c29x2[_0xd587[898]](_0x5c29x3);mxClipboard[_0xd587[896]]= 1;mxClipboard[_0xd587[895]]= _0x5c29x2[_0xd587[899]](_0x5c29x4);return _0x5c29x4},paste:function(_0x5c29x2){if(null!= mxClipboard[_0xd587[895]]){var _0x5c29x3=_0x5c29x2[_0xd587[900]](mxClipboard[_0xd587[895]]),_0x5c29x4=mxClipboard[_0xd587[896]]* mxClipboard[_0xd587[901]],_0x5c29x5=_0x5c29x2[_0xd587[902]](),_0x5c29x3=_0x5c29x2[_0xd587[903]](_0x5c29x3,_0x5c29x4,_0x5c29x4,_0x5c29x5);mxClipboard[_0xd587[896]]++;_0x5c29x2[_0xd587[904]](_0x5c29x3)}}};function mxWindow(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa,_0x5c29x12,_0x5c29x13,_0x5c29x14,_0x5c29x15){null!= _0x5c29x3&& (_0x5c29x12= null!= _0x5c29x12?_0x5c29x12:!0,this[_0xd587[905]]= _0x5c29x3,this[_0xd587[176]](_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa,_0x5c29x15),this[_0xd587[906]](),this[_0xd587[907]](),this[_0xd587[908]](),this[_0xd587[909]](_0x5c29x12),this[_0xd587[910]](_0x5c29x2),(null== _0x5c29x13|| _0x5c29x13)&& this[_0xd587[911]](),null!= _0x5c29x14&& null!= _0x5c29x14[_0xd587[265]]?_0x5c29x14[_0xd587[265]][_0xd587[912]](this[_0xd587[485]],_0x5c29x14):document[_0xd587[112]][_0xd587[62]](this[_0xd587[485]]))}mxWindow[_0xd587[202]]= new mxEventSource;mxWindow[_0xd587[202]][_0xd587[196]]= mxWindow;mxWindow[_0xd587[202]][_0xd587[913]]= mxClient[_0xd587[88]]+ _0xd587[914];mxWindow[_0xd587[202]][_0xd587[915]]= mxClient[_0xd587[88]]+ _0xd587[916];mxWindow[_0xd587[202]][_0xd587[917]]= mxClient[_0xd587[88]]+ _0xd587[918];mxWindow[_0xd587[202]][_0xd587[919]]= mxClient[_0xd587[88]]+ _0xd587[920];mxWindow[_0xd587[202]][_0xd587[921]]= mxClient[_0xd587[88]]+ _0xd587[922];mxWindow[_0xd587[202]][_0xd587[189]]= !1;mxWindow[_0xd587[202]][_0xd587[905]]= !1;mxWindow[_0xd587[202]][_0xd587[923]]= new mxRectangle(0,0,50,40);mxWindow[_0xd587[202]][_0xd587[924]]= !1;mxWindow[_0xd587[202]][_0xd587[905]]= !1;mxWindow[_0xd587[202]][_0xd587[165]]= !0;mxWindow[_0xd587[202]][_0xd587[176]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){_0x5c29x9= null!= _0x5c29x9?_0x5c29x9:_0xd587[925];this[_0xd587[485]]= document[_0xd587[55]](_0xd587[485]);this[_0xd587[485]][_0xd587[926]]= _0x5c29x9;this[_0xd587[485]][_0xd587[124]][_0xd587[361]]= _0x5c29x2+ _0xd587[168];this[_0xd587[485]][_0xd587[124]][_0xd587[125]]= _0x5c29x3+ _0xd587[168];this[_0xd587[116]]= document[_0xd587[55]](_0xd587[116]);this[_0xd587[116]][_0xd587[926]]= _0x5c29x9;null!= _0x5c29x4&& (mxClient[_0xd587[80]]|| (this[_0xd587[485]][_0xd587[124]][_0xd587[117]]= _0x5c29x4+ _0xd587[168]),this[_0xd587[116]][_0xd587[124]][_0xd587[117]]= _0x5c29x4+ _0xd587[168]);null!= _0x5c29x5&& (mxClient[_0xd587[80]]|| (this[_0xd587[485]][_0xd587[124]][_0xd587[119]]= _0x5c29x5+ _0xd587[168]),this[_0xd587[116]][_0xd587[124]][_0xd587[119]]= _0x5c29x5+ _0xd587[168]);_0x5c29x2= document[_0xd587[55]](_0xd587[120]);_0x5c29x3= document[_0xd587[55]](_0xd587[121]);this[_0xd587[924]]= document[_0xd587[55]](_0xd587[122]);this[_0xd587[924]][_0xd587[926]]= _0x5c29x9+ _0xd587[927];_0x5c29x3[_0xd587[62]](this[_0xd587[924]]);_0x5c29x2[_0xd587[62]](_0x5c29x3);_0x5c29x3= document[_0xd587[55]](_0xd587[121]);this[_0xd587[122]]= document[_0xd587[55]](_0xd587[122]);this[_0xd587[122]][_0xd587[926]]= _0x5c29x9+ _0xd587[928];this[_0xd587[929]]= document[_0xd587[55]](_0xd587[485]);this[_0xd587[929]][_0xd587[926]]= _0x5c29x9+ _0xd587[928];this[_0xd587[929]][_0xd587[124]][_0xd587[117]]= _0xd587[118];this[_0xd587[929]][_0xd587[62]](this[_0xd587[905]]);if(mxClient[_0xd587[80]]|| _0xd587[529]!= this[_0xd587[905]][_0xd587[301]][_0xd587[36]]()){this[_0xd587[929]][_0xd587[124]][_0xd587[119]]= _0xd587[118]};this[_0xd587[122]][_0xd587[62]](this[_0xd587[929]]);_0x5c29x3[_0xd587[62]](this[_0xd587[122]]);_0x5c29x2[_0xd587[62]](_0x5c29x3);this[_0xd587[116]][_0xd587[62]](_0x5c29x2);this[_0xd587[485]][_0xd587[62]](this[_0xd587[116]]);_0x5c29x9= mxUtils[_0xd587[885]](this,function(_0x5c29x2){this[_0xd587[790]]()});mxEvent[_0xd587[169]](this[_0xd587[924]],_0xd587[751],_0x5c29x9);mxEvent[_0xd587[169]](this[_0xd587[116]],_0xd587[751],_0x5c29x9);mxClient[_0xd587[754]]&& (mxEvent[_0xd587[169]](this[_0xd587[924]],_0xd587[755],_0x5c29x9),mxEvent[_0xd587[169]](this[_0xd587[116]],_0xd587[755],_0x5c29x9));this[_0xd587[801]]()};mxWindow[_0xd587[202]][_0xd587[910]]= function(_0x5c29x2){for(var _0x5c29x3=this[_0xd587[924]][_0xd587[285]];null!= _0x5c29x3;){var _0x5c29x4=_0x5c29x3[_0xd587[287]];_0x5c29x3[_0xd587[288]]== mxConstants[_0xd587[317]]&& _0x5c29x3[_0xd587[265]][_0xd587[266]](_0x5c29x3);_0x5c29x3= _0x5c29x4};mxUtils[_0xd587[53]](this[_0xd587[924]],_0x5c29x2|| _0xd587[110])};mxWindow[_0xd587[202]][_0xd587[162]]= function(_0x5c29x2){0> navigator[_0xd587[3]][_0xd587[2]](_0xd587[186])&& (this[_0xd587[929]][_0xd587[124]][_0xd587[277]]= _0x5c29x2?_0xd587[278]:_0xd587[188])};mxWindow[_0xd587[202]][_0xd587[790]]= function(){if(mxWindow[_0xd587[930]]!= this){var _0x5c29x2=mxUtils[_0xd587[275]](this[_0xd587[166]]()),_0x5c29x2=null!= _0x5c29x2?_0x5c29x2[_0xd587[931]]:3;if(mxWindow[_0xd587[930]]){var _0x5c29x3=mxWindow[_0xd587[930]][_0xd587[166]]();null!= _0x5c29x3&& null!= _0x5c29x3[_0xd587[124]]&& (_0x5c29x3[_0xd587[124]][_0xd587[931]]= _0x5c29x2)};_0x5c29x3= mxWindow[_0xd587[930]];this[_0xd587[166]]()[_0xd587[124]][_0xd587[931]]= parseInt(_0x5c29x2)+ 1;mxWindow[_0xd587[930]]= this;this[_0xd587[746]]( new mxEventObject(mxEvent.ACTIVATE,_0xd587[932],_0x5c29x3))}};mxWindow[_0xd587[202]][_0xd587[166]]= function(){return this[_0xd587[485]]};mxWindow[_0xd587[202]][_0xd587[933]]= function(){mxUtils[_0xd587[933]](this[_0xd587[485]])};mxWindow[_0xd587[202]][_0xd587[934]]= function(){return null!= this[_0xd587[129]]?_0xd587[130]!= this[_0xd587[129]][_0xd587[124]][_0xd587[495]]:!1};mxWindow[_0xd587[202]][_0xd587[163]]= function(_0x5c29x2){_0x5c29x2?null== this[_0xd587[129]]?(this[_0xd587[129]]= document[_0xd587[55]](_0xd587[466]),this[_0xd587[129]][_0xd587[124]][_0xd587[491]]= _0xd587[492],this[_0xd587[129]][_0xd587[124]][_0xd587[553]]= _0xd587[935],this[_0xd587[129]][_0xd587[124]][_0xd587[699]]= _0xd587[935],this[_0xd587[129]][_0xd587[57]](_0xd587[390],mxClient[_0xd587[88]]+ _0xd587[922]),this[_0xd587[129]][_0xd587[124]][_0xd587[270]]= _0xd587[936],mxEvent[_0xd587[759]](this[_0xd587[129]],mxUtils[_0xd587[885]](this,function(_0x5c29x2){this[_0xd587[790]]();var _0x5c29x4=mxEvent[_0xd587[731]](_0x5c29x2),_0x5c29x5=mxEvent[_0xd587[733]](_0x5c29x2),_0x5c29x9=this[_0xd587[485]][_0xd587[359]],_0x5c29xa=this[_0xd587[485]][_0xd587[167]],_0x5c29x12=mxUtils[_0xd587[885]](this,function(_0x5c29x2){var _0x5c29x3=mxEvent[_0xd587[731]](_0x5c29x2)- _0x5c29x4,_0x5c29x12=mxEvent[_0xd587[733]](_0x5c29x2)- _0x5c29x5;this[_0xd587[937]](_0x5c29x9+ _0x5c29x3,_0x5c29xa+ _0x5c29x12);this[_0xd587[746]]( new mxEventObject(mxEvent.RESIZE,_0xd587[763],_0x5c29x2));mxEvent[_0xd587[722]](_0x5c29x2)}),_0x5c29x13=mxUtils[_0xd587[885]](this,function(_0x5c29x2){mxEvent[_0xd587[938]](document,null,_0x5c29x12,_0x5c29x13);this[_0xd587[746]]( new mxEventObject(mxEvent.RESIZE_END,_0xd587[763],_0x5c29x2));mxEvent[_0xd587[722]](_0x5c29x2)});mxEvent[_0xd587[759]](document,null,_0x5c29x12,_0x5c29x13);this[_0xd587[746]]( new mxEventObject(mxEvent.RESIZE_START,_0xd587[763],_0x5c29x2));mxEvent[_0xd587[722]](_0x5c29x2)}),null,null),this[_0xd587[485]][_0xd587[62]](this[_0xd587[129]])):this[_0xd587[129]][_0xd587[124]][_0xd587[495]]= _0xd587[497]:null!= this[_0xd587[129]]&& (this[_0xd587[129]][_0xd587[124]][_0xd587[495]]= _0xd587[130])};mxWindow[_0xd587[202]][_0xd587[937]]= function(_0x5c29x2,_0x5c29x3){_0x5c29x2= Math[_0xd587[160]](this[_0xd587[923]][_0xd587[117]],_0x5c29x2);_0x5c29x3= Math[_0xd587[160]](this[_0xd587[923]][_0xd587[119]],_0x5c29x3);mxClient[_0xd587[80]]|| (this[_0xd587[485]][_0xd587[124]][_0xd587[117]]= _0x5c29x2+ _0xd587[168],this[_0xd587[485]][_0xd587[124]][_0xd587[119]]= _0x5c29x3+ _0xd587[168]);this[_0xd587[116]][_0xd587[124]][_0xd587[117]]= _0x5c29x2+ _0xd587[168];this[_0xd587[116]][_0xd587[124]][_0xd587[119]]= _0x5c29x3+ _0xd587[168];mxClient[_0xd587[80]]|| (this[_0xd587[929]][_0xd587[124]][_0xd587[119]]= this[_0xd587[485]][_0xd587[167]]- this[_0xd587[924]][_0xd587[167]]- 2+ _0xd587[168])};mxWindow[_0xd587[202]][_0xd587[909]]= function(_0x5c29x2){this[_0xd587[798]][_0xd587[124]][_0xd587[495]]= _0x5c29x2?_0xd587[110]:_0xd587[130]};mxWindow[_0xd587[202]][_0xd587[939]]= function(){return new mxRectangle(0,0,0,this[_0xd587[924]][_0xd587[167]])};mxWindow[_0xd587[202]][_0xd587[907]]= function(){this[_0xd587[798]]= document[_0xd587[55]](_0xd587[466]);this[_0xd587[798]][_0xd587[57]](_0xd587[390],this[_0xd587[915]]);this[_0xd587[798]][_0xd587[57]](_0xd587[611],_0xd587[699]);this[_0xd587[798]][_0xd587[57]](_0xd587[924],_0xd587[940]);this[_0xd587[798]][_0xd587[124]][_0xd587[270]]= _0xd587[356];this[_0xd587[798]][_0xd587[124]][_0xd587[941]]= _0xd587[942];this[_0xd587[798]][_0xd587[124]][_0xd587[495]]= _0xd587[130];this[_0xd587[924]][_0xd587[62]](this[_0xd587[798]]);var _0x5c29x2=!1,_0x5c29x3=null,_0x5c29x4=null,_0x5c29x5=mxUtils[_0xd587[885]](this,function(_0x5c29x5){this[_0xd587[790]]();if(_0x5c29x2){_0x5c29x2= !1,this[_0xd587[798]][_0xd587[57]](_0xd587[390],this[_0xd587[915]]),this[_0xd587[798]][_0xd587[57]](_0xd587[924],_0xd587[940]),this[_0xd587[929]][_0xd587[124]][_0xd587[495]]= _0xd587[110],this[_0xd587[800]][_0xd587[124]][_0xd587[495]]= _0x5c29x3,mxClient[_0xd587[80]]|| (this[_0xd587[485]][_0xd587[124]][_0xd587[119]]= _0x5c29x4),this[_0xd587[116]][_0xd587[124]][_0xd587[119]]= _0x5c29x4,null!= this[_0xd587[129]]&& (this[_0xd587[129]][_0xd587[124]][_0xd587[187]]= _0xd587[110]),this[_0xd587[746]]( new mxEventObject(mxEvent.NORMALIZE,_0xd587[763],_0x5c29x5))}else {_0x5c29x2= !0;this[_0xd587[798]][_0xd587[57]](_0xd587[390],this[_0xd587[917]]);this[_0xd587[798]][_0xd587[57]](_0xd587[924],_0xd587[943]);this[_0xd587[929]][_0xd587[124]][_0xd587[495]]= _0xd587[130];_0x5c29x3= this[_0xd587[800]][_0xd587[124]][_0xd587[495]];this[_0xd587[800]][_0xd587[124]][_0xd587[495]]= _0xd587[130];_0x5c29x4= this[_0xd587[116]][_0xd587[124]][_0xd587[119]];var _0x5c29xa=this[_0xd587[939]]();0< _0x5c29xa[_0xd587[119]]&& (mxClient[_0xd587[80]]|| (this[_0xd587[485]][_0xd587[124]][_0xd587[119]]= _0x5c29xa[_0xd587[119]]+ _0xd587[168]),this[_0xd587[116]][_0xd587[124]][_0xd587[119]]= _0x5c29xa[_0xd587[119]]+ _0xd587[168]);0< _0x5c29xa[_0xd587[117]]&& (mxClient[_0xd587[80]]|| (this[_0xd587[485]][_0xd587[124]][_0xd587[117]]= _0x5c29xa[_0xd587[117]]+ _0xd587[168]),this[_0xd587[116]][_0xd587[124]][_0xd587[117]]= _0x5c29xa[_0xd587[117]]+ _0xd587[168]);null!= this[_0xd587[129]]&& (this[_0xd587[129]][_0xd587[124]][_0xd587[187]]= _0xd587[188]);this[_0xd587[746]]( new mxEventObject(mxEvent.MINIMIZE,_0xd587[763],_0x5c29x5))};mxEvent[_0xd587[722]](_0x5c29x5)});mxEvent[_0xd587[169]](this[_0xd587[798]],_0xd587[751],_0x5c29x5);mxClient[_0xd587[754]]&& mxEvent[_0xd587[169]](this[_0xd587[798]],_0xd587[755],_0x5c29x5)};mxWindow[_0xd587[202]][_0xd587[161]]= function(_0x5c29x2){this[_0xd587[800]][_0xd587[124]][_0xd587[495]]= _0x5c29x2?_0xd587[110]:_0xd587[130]};mxWindow[_0xd587[202]][_0xd587[906]]= function(){this[_0xd587[800]]= document[_0xd587[55]](_0xd587[466]);this[_0xd587[800]][_0xd587[57]](_0xd587[390],this[_0xd587[919]]);this[_0xd587[800]][_0xd587[57]](_0xd587[611],_0xd587[699]);this[_0xd587[800]][_0xd587[57]](_0xd587[924],_0xd587[944]);this[_0xd587[800]][_0xd587[124]][_0xd587[270]]= _0xd587[583];this[_0xd587[800]][_0xd587[124]][_0xd587[945]]= _0xd587[942];this[_0xd587[800]][_0xd587[124]][_0xd587[270]]= _0xd587[356];this[_0xd587[800]][_0xd587[124]][_0xd587[495]]= _0xd587[130];this[_0xd587[924]][_0xd587[62]](this[_0xd587[800]]);var _0x5c29x2=!1,_0x5c29x3=null,_0x5c29x4=null,_0x5c29x5=null,_0x5c29x9=null,_0x5c29xa=mxUtils[_0xd587[885]](this,function(_0x5c29xa){this[_0xd587[790]]();if(_0xd587[130]!= this[_0xd587[800]][_0xd587[124]][_0xd587[495]]){if(_0x5c29x2){_0x5c29x2= !1;this[_0xd587[800]][_0xd587[57]](_0xd587[390],this[_0xd587[919]]);this[_0xd587[800]][_0xd587[57]](_0xd587[924],_0xd587[944]);this[_0xd587[929]][_0xd587[124]][_0xd587[495]]= _0xd587[110];this[_0xd587[798]][_0xd587[124]][_0xd587[187]]= _0xd587[110];this[_0xd587[485]][_0xd587[124]][_0xd587[361]]= _0x5c29x3+ _0xd587[168];this[_0xd587[485]][_0xd587[124]][_0xd587[125]]= _0x5c29x4+ _0xd587[168];if(!mxClient[_0xd587[80]]&& (this[_0xd587[485]][_0xd587[124]][_0xd587[119]]= _0x5c29x5,this[_0xd587[485]][_0xd587[124]][_0xd587[117]]= _0x5c29x9,_0x5c29x13= mxUtils[_0xd587[275]](this[_0xd587[929]]),_0xd587[278]== _0x5c29x13[_0xd587[277]]|| null!= this[_0xd587[129]])){this[_0xd587[929]][_0xd587[124]][_0xd587[119]]= this[_0xd587[485]][_0xd587[167]]- this[_0xd587[924]][_0xd587[167]]- 2+ _0xd587[168]};this[_0xd587[116]][_0xd587[124]][_0xd587[119]]= _0x5c29x5;this[_0xd587[116]][_0xd587[124]][_0xd587[117]]= _0x5c29x9;null!= this[_0xd587[129]]&& (this[_0xd587[129]][_0xd587[124]][_0xd587[187]]= _0xd587[110]);this[_0xd587[746]]( new mxEventObject(mxEvent.NORMALIZE,_0xd587[763],_0x5c29xa))}else {_0x5c29x2= !0;this[_0xd587[800]][_0xd587[57]](_0xd587[390],this[_0xd587[917]]);this[_0xd587[800]][_0xd587[57]](_0xd587[924],_0xd587[943]);this[_0xd587[929]][_0xd587[124]][_0xd587[495]]= _0xd587[110];this[_0xd587[798]][_0xd587[124]][_0xd587[187]]= _0xd587[188];_0x5c29x3= parseInt(this[_0xd587[485]][_0xd587[124]][_0xd587[361]]);_0x5c29x4= parseInt(this[_0xd587[485]][_0xd587[124]][_0xd587[125]]);_0x5c29x5= this[_0xd587[116]][_0xd587[124]][_0xd587[119]];_0x5c29x9= this[_0xd587[116]][_0xd587[124]][_0xd587[117]];this[_0xd587[485]][_0xd587[124]][_0xd587[361]]= _0xd587[946];this[_0xd587[485]][_0xd587[124]][_0xd587[125]]= _0xd587[946];mxClient[_0xd587[80]]|| (this[_0xd587[485]][_0xd587[124]][_0xd587[119]]= document[_0xd587[112]][_0xd587[157]]- 2+ _0xd587[168],this[_0xd587[485]][_0xd587[124]][_0xd587[117]]= document[_0xd587[112]][_0xd587[159]]- 2+ _0xd587[168]);this[_0xd587[116]][_0xd587[124]][_0xd587[117]]= document[_0xd587[112]][_0xd587[159]]- 2+ _0xd587[168];this[_0xd587[116]][_0xd587[124]][_0xd587[119]]= document[_0xd587[112]][_0xd587[157]]- 2+ _0xd587[168];null!= this[_0xd587[129]]&& (this[_0xd587[129]][_0xd587[124]][_0xd587[187]]= _0xd587[188]);if(!mxClient[_0xd587[80]]){var _0x5c29x13=mxUtils[_0xd587[275]](this[_0xd587[929]]);if(_0xd587[278]== _0x5c29x13[_0xd587[277]]|| null!= this[_0xd587[129]]){this[_0xd587[929]][_0xd587[124]][_0xd587[119]]= this[_0xd587[485]][_0xd587[167]]- this[_0xd587[924]][_0xd587[167]]- 2+ _0xd587[168]}};this[_0xd587[746]]( new mxEventObject(mxEvent.MAXIMIZE,_0xd587[763],_0x5c29xa))};mxEvent[_0xd587[722]](_0x5c29xa)}});mxEvent[_0xd587[759]](this[_0xd587[800]],_0x5c29xa);mxEvent[_0xd587[169]](this[_0xd587[924]],_0xd587[760],_0x5c29xa)};mxWindow[_0xd587[202]][_0xd587[911]]= function(){this[_0xd587[924]][_0xd587[124]][_0xd587[270]]= _0xd587[582];mxEvent[_0xd587[759]](this[_0xd587[924]],mxUtils[_0xd587[885]](this,function(_0x5c29x2){var _0x5c29x3=mxEvent[_0xd587[731]](_0x5c29x2),_0x5c29x4=mxEvent[_0xd587[733]](_0x5c29x2),_0x5c29x5=this[_0xd587[730]](),_0x5c29x9=this[_0xd587[732]](),_0x5c29xa=mxUtils[_0xd587[885]](this,function(_0x5c29x2){var _0x5c29xa=mxEvent[_0xd587[731]](_0x5c29x2)- _0x5c29x3,_0x5c29x12=mxEvent[_0xd587[733]](_0x5c29x2)- _0x5c29x4;this[_0xd587[947]](_0x5c29x5+ _0x5c29xa,_0x5c29x9+ _0x5c29x12);this[_0xd587[746]]( new mxEventObject(mxEvent.MOVE,_0xd587[763],_0x5c29x2));mxEvent[_0xd587[722]](_0x5c29x2)}),_0x5c29x12=mxUtils[_0xd587[885]](this,function(_0x5c29x2){mxEvent[_0xd587[938]](document,null,_0x5c29xa,_0x5c29x12);this[_0xd587[746]]( new mxEventObject(mxEvent.MOVE_END,_0xd587[763],_0x5c29x2));mxEvent[_0xd587[722]](_0x5c29x2)});mxEvent[_0xd587[759]](document,null,_0x5c29xa,_0x5c29x12);this[_0xd587[746]]( new mxEventObject(mxEvent.MOVE_START,_0xd587[763],_0x5c29x2));mxEvent[_0xd587[722]](_0x5c29x2)}))};mxWindow[_0xd587[202]][_0xd587[947]]= function(_0x5c29x2,_0x5c29x3){this[_0xd587[485]][_0xd587[124]][_0xd587[361]]= _0x5c29x2+ _0xd587[168];this[_0xd587[485]][_0xd587[124]][_0xd587[125]]= _0x5c29x3+ _0xd587[168]};mxWindow[_0xd587[202]][_0xd587[730]]= function(){return parseInt(this[_0xd587[485]][_0xd587[124]][_0xd587[361]])};mxWindow[_0xd587[202]][_0xd587[732]]= function(){return parseInt(this[_0xd587[485]][_0xd587[124]][_0xd587[125]])};mxWindow[_0xd587[202]][_0xd587[908]]= function(){this[_0xd587[948]]= document[_0xd587[55]](_0xd587[466]);this[_0xd587[948]][_0xd587[57]](_0xd587[390],this[_0xd587[913]]);this[_0xd587[948]][_0xd587[57]](_0xd587[611],_0xd587[699]);this[_0xd587[948]][_0xd587[57]](_0xd587[924],_0xd587[949]);this[_0xd587[948]][_0xd587[124]][_0xd587[945]]= _0xd587[935];this[_0xd587[948]][_0xd587[124]][_0xd587[270]]= _0xd587[356];this[_0xd587[948]][_0xd587[124]][_0xd587[495]]= _0xd587[130];this[_0xd587[924]][_0xd587[950]](this[_0xd587[948]],this[_0xd587[924]][_0xd587[285]]);mxEvent[_0xd587[759]](this[_0xd587[948]],mxUtils[_0xd587[885]](this,function(_0x5c29x2){this[_0xd587[746]]( new mxEventObject(mxEvent.CLOSE,_0xd587[763],_0x5c29x2));this[_0xd587[165]]?this[_0xd587[515]]():this[_0xd587[175]](!1);mxEvent[_0xd587[722]](_0x5c29x2)}))};mxWindow[_0xd587[202]][_0xd587[951]]= function(_0x5c29x2){this[_0xd587[618]]= document[_0xd587[55]](_0xd587[466]);this[_0xd587[618]][_0xd587[57]](_0xd587[390],_0x5c29x2);this[_0xd587[618]][_0xd587[57]](_0xd587[611],_0xd587[361]);this[_0xd587[618]][_0xd587[124]][_0xd587[941]]= _0xd587[952];this[_0xd587[618]][_0xd587[124]][_0xd587[945]]= _0xd587[946];this[_0xd587[618]][_0xd587[124]][_0xd587[953]]= _0xd587[954];this[_0xd587[924]][_0xd587[950]](this[_0xd587[618]],this[_0xd587[924]][_0xd587[285]])};mxWindow[_0xd587[202]][_0xd587[164]]= function(_0x5c29x2){this[_0xd587[948]][_0xd587[124]][_0xd587[495]]= _0x5c29x2?_0xd587[110]:_0xd587[130]};mxWindow[_0xd587[202]][_0xd587[174]]= function(){return null!= this[_0xd587[485]]?_0xd587[188]!= this[_0xd587[485]][_0xd587[124]][_0xd587[187]]:!1};mxWindow[_0xd587[202]][_0xd587[175]]= function(_0x5c29x2){null!= this[_0xd587[485]]&& this[_0xd587[174]]()!= _0x5c29x2&& (_0x5c29x2?this[_0xd587[539]]():this[_0xd587[801]]())};mxWindow[_0xd587[202]][_0xd587[539]]= function(){this[_0xd587[485]][_0xd587[124]][_0xd587[187]]= _0xd587[110];this[_0xd587[790]]();var _0x5c29x2=mxUtils[_0xd587[275]](this[_0xd587[929]]);if(!mxClient[_0xd587[80]]&& (_0xd587[278]== _0x5c29x2[_0xd587[277]]|| null!= this[_0xd587[129]])){this[_0xd587[929]][_0xd587[124]][_0xd587[119]]= this[_0xd587[485]][_0xd587[167]]- this[_0xd587[924]][_0xd587[167]]- 2+ _0xd587[168]};this[_0xd587[746]]( new mxEventObject(mxEvent.SHOW))};mxWindow[_0xd587[202]][_0xd587[801]]= function(){this[_0xd587[485]][_0xd587[124]][_0xd587[187]]= _0xd587[188];this[_0xd587[746]]( new mxEventObject(mxEvent.HIDE))};mxWindow[_0xd587[202]][_0xd587[515]]= function(){this[_0xd587[746]]( new mxEventObject(mxEvent.DESTROY));null!= this[_0xd587[485]]&& (mxEvent[_0xd587[762]](this[_0xd587[485]]),this[_0xd587[485]][_0xd587[265]][_0xd587[266]](this[_0xd587[485]]),this[_0xd587[485]]= null);this[_0xd587[929]]= this[_0xd587[905]]= this[_0xd587[924]]= null};function mxForm(_0x5c29x2){this[_0xd587[116]]= document[_0xd587[55]](_0xd587[116]);this[_0xd587[116]][_0xd587[926]]= _0x5c29x2;this[_0xd587[112]]= document[_0xd587[55]](_0xd587[120]);this[_0xd587[116]][_0xd587[62]](this[_0xd587[112]])}mxForm[_0xd587[202]][_0xd587[116]]= null;mxForm[_0xd587[202]][_0xd587[112]]= !1;mxForm[_0xd587[202]][_0xd587[955]]= function(){return this[_0xd587[116]]};mxForm[_0xd587[202]][_0xd587[956]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=document[_0xd587[55]](_0xd587[121]),_0x5c29x5=document[_0xd587[55]](_0xd587[122]);_0x5c29x4[_0xd587[62]](_0x5c29x5);var _0x5c29x5=document[_0xd587[55]](_0xd587[122]),_0x5c29x9=document[_0xd587[55]](_0xd587[172]);mxUtils[_0xd587[53]](_0x5c29x9,mxResources[_0xd587[203]](_0xd587[957])|| _0xd587[958]);_0x5c29x5[_0xd587[62]](_0x5c29x9);mxEvent[_0xd587[169]](_0x5c29x9,_0xd587[173],function(){_0x5c29x2()});_0x5c29x9= document[_0xd587[55]](_0xd587[172]);mxUtils[_0xd587[53]](_0x5c29x9,mxResources[_0xd587[203]](_0xd587[959])|| _0xd587[960]);_0x5c29x5[_0xd587[62]](_0x5c29x9);mxEvent[_0xd587[169]](_0x5c29x9,_0xd587[173],function(){_0x5c29x3()});_0x5c29x4[_0xd587[62]](_0x5c29x5);this[_0xd587[112]][_0xd587[62]](_0x5c29x4)};mxForm[_0xd587[202]][_0xd587[961]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=document[_0xd587[55]](_0xd587[962]);_0x5c29x4[_0xd587[57]](_0xd587[60],_0xd587[963]);_0x5c29x4[_0xd587[131]]= _0x5c29x3;return this[_0xd587[964]](_0x5c29x2,_0x5c29x4)};mxForm[_0xd587[202]][_0xd587[965]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=document[_0xd587[55]](_0xd587[962]);_0x5c29x4[_0xd587[57]](_0xd587[60],_0xd587[966]);this[_0xd587[964]](_0x5c29x2,_0x5c29x4);_0x5c29x3&& (_0x5c29x4[_0xd587[967]]= !0);return _0x5c29x4};mxForm[_0xd587[202]][_0xd587[968]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){var _0x5c29x5=document[_0xd587[55]](_0xd587[126]);mxClient[_0xd587[133]]&& _0x5c29x4--;_0x5c29x5[_0xd587[57]](_0xd587[969],_0x5c29x4|| 2);_0x5c29x5[_0xd587[131]]= _0x5c29x3;return this[_0xd587[964]](_0x5c29x2,_0x5c29x5)};mxForm[_0xd587[202]][_0xd587[970]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){var _0x5c29x5=document[_0xd587[55]](_0xd587[804]);null!= _0x5c29x4&& _0x5c29x5[_0xd587[57]](_0xd587[803],_0x5c29x4);_0x5c29x3&& _0x5c29x5[_0xd587[57]](_0xd587[971],_0xd587[128]);return this[_0xd587[964]](_0x5c29x2,_0x5c29x5)};mxForm[_0xd587[202]][_0xd587[972]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){var _0x5c29x9=document[_0xd587[55]](_0xd587[973]);mxUtils[_0xd587[171]](_0x5c29x9,_0x5c29x3);_0x5c29x9[_0xd587[57]](_0xd587[131],_0x5c29x4);_0x5c29x5&& _0x5c29x9[_0xd587[57]](_0xd587[974],_0x5c29x5);_0x5c29x2[_0xd587[62]](_0x5c29x9)};mxForm[_0xd587[202]][_0xd587[964]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=document[_0xd587[55]](_0xd587[121]),_0x5c29x5=document[_0xd587[55]](_0xd587[122]);mxUtils[_0xd587[53]](_0x5c29x5,_0x5c29x2);_0x5c29x4[_0xd587[62]](_0x5c29x5);_0x5c29x5= document[_0xd587[55]](_0xd587[122]);_0x5c29x5[_0xd587[62]](_0x5c29x3);_0x5c29x4[_0xd587[62]](_0x5c29x5);this[_0xd587[112]][_0xd587[62]](_0x5c29x4);return _0x5c29x3};function mxImage(_0x5c29x2,_0x5c29x3,_0x5c29x4){this[_0xd587[390]]= _0x5c29x2;this[_0xd587[117]]= _0x5c29x3;this[_0xd587[119]]= _0x5c29x4}mxImage[_0xd587[202]][_0xd587[390]]= null;mxImage[_0xd587[202]][_0xd587[117]]= null;mxImage[_0xd587[202]][_0xd587[119]]= null;function mxDivResizer(_0x5c29x2,_0x5c29x3){if(_0xd587[485]== _0x5c29x2[_0xd587[301]][_0xd587[216]]()){null== _0x5c29x3&& (_0x5c29x3= window);this[_0xd587[485]]= _0x5c29x2;var _0x5c29x4=mxUtils[_0xd587[275]](_0x5c29x2);null!= _0x5c29x4&& (this[_0xd587[975]]= _0xd587[278]== _0x5c29x4[_0xd587[117]],this[_0xd587[976]]= _0xd587[278]== _0x5c29x4[_0xd587[119]]);mxEvent[_0xd587[169]](_0x5c29x3,_0xd587[129],mxUtils[_0xd587[885]](this,function(_0x5c29x2){this[_0xd587[977]]|| (this[_0xd587[977]]= !0,this[_0xd587[129]](),this[_0xd587[977]]= !1)}));this[_0xd587[129]]()}}mxDivResizer[_0xd587[202]][_0xd587[975]]= !0;mxDivResizer[_0xd587[202]][_0xd587[976]]= !0;mxDivResizer[_0xd587[202]][_0xd587[977]]= !1;mxDivResizer[_0xd587[202]][_0xd587[129]]= function(){var _0x5c29x2=this[_0xd587[978]](),_0x5c29x3=this[_0xd587[979]](),_0x5c29x4=parseInt(this[_0xd587[485]][_0xd587[124]][_0xd587[361]]),_0x5c29x5=parseInt(this[_0xd587[485]][_0xd587[124]][_0xd587[699]]),_0x5c29x9=parseInt(this[_0xd587[485]][_0xd587[124]][_0xd587[125]]),_0x5c29xa=parseInt(this[_0xd587[485]][_0xd587[124]][_0xd587[553]]);this[_0xd587[975]]&& (!isNaN(_0x5c29x4)&& !isNaN(_0x5c29x5)&& 0<= _0x5c29x4&& 0<= _0x5c29x5&& 0< _0x5c29x2- _0x5c29x5- _0x5c29x4)&& (this[_0xd587[485]][_0xd587[124]][_0xd587[117]]= _0x5c29x2- _0x5c29x5- _0x5c29x4+ _0xd587[168]);this[_0xd587[976]]&& (!isNaN(_0x5c29x9)&& !isNaN(_0x5c29xa)&& 0<= _0x5c29x9&& 0<= _0x5c29xa&& 0< _0x5c29x3- _0x5c29x9- _0x5c29xa)&& (this[_0xd587[485]][_0xd587[124]][_0xd587[119]]= _0x5c29x3- _0x5c29x9- _0x5c29xa+ _0xd587[168])};mxDivResizer[_0xd587[202]][_0xd587[978]]= function(){return document[_0xd587[112]][_0xd587[159]]};mxDivResizer[_0xd587[202]][_0xd587[979]]= function(){return document[_0xd587[112]][_0xd587[157]]};function mxDragSource(_0x5c29x2,_0x5c29x3){this[_0xd587[980]]= _0x5c29x2;this[_0xd587[981]]= _0x5c29x3;mxEvent[_0xd587[759]](_0x5c29x2,mxUtils[_0xd587[885]](this,this[_0xd587[787]]))}mxDragSource[_0xd587[202]][_0xd587[980]]= null;mxDragSource[_0xd587[202]][_0xd587[981]]= null;mxDragSource[_0xd587[202]][_0xd587[559]]= null;mxDragSource[_0xd587[202]][_0xd587[982]]= null;mxDragSource[_0xd587[202]][_0xd587[983]]= null;mxDragSource[_0xd587[202]][_0xd587[984]]= !0;mxDragSource[_0xd587[202]][_0xd587[985]]= null;mxDragSource[_0xd587[202]][_0xd587[986]]= null;mxDragSource[_0xd587[202]][_0xd587[987]]= null;mxDragSource[_0xd587[202]][_0xd587[988]]= null;mxDragSource[_0xd587[202]][_0xd587[989]]= null;mxDragSource[_0xd587[202]][_0xd587[561]]= !0;mxDragSource[_0xd587[202]][_0xd587[990]]= !0;mxDragSource[_0xd587[202]][_0xd587[991]]= !0;mxDragSource[_0xd587[202]][_0xd587[563]]= !0;mxDragSource[_0xd587[202]][_0xd587[992]]= 100;mxDragSource[_0xd587[202]][_0xd587[993]]= 70;mxDragSource[_0xd587[202]][_0xd587[994]]= function(){return this[_0xd587[984]]};mxDragSource[_0xd587[202]][_0xd587[995]]= function(_0x5c29x2){this[_0xd587[984]]= _0x5c29x2};mxDragSource[_0xd587[202]][_0xd587[996]]= function(){return this[_0xd587[990]]};mxDragSource[_0xd587[202]][_0xd587[562]]= function(_0x5c29x2){this[_0xd587[990]]= _0x5c29x2};mxDragSource[_0xd587[202]][_0xd587[997]]= function(){return this[_0xd587[991]]};mxDragSource[_0xd587[202]][_0xd587[998]]= function(_0x5c29x2){this[_0xd587[991]]= _0x5c29x2};mxDragSource[_0xd587[202]][_0xd587[565]]= function(_0x5c29x2){return null};mxDragSource[_0xd587[202]][_0xd587[564]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){return _0x5c29x2[_0xd587[999]](_0x5c29x3,_0x5c29x4)};mxDragSource[_0xd587[202]][_0xd587[566]]= function(_0x5c29x2){return this[_0xd587[980]][_0xd587[511]](!0)};mxDragSource[_0xd587[202]][_0xd587[567]]= function(_0x5c29x2){return null};mxDragSource[_0xd587[202]][_0xd587[787]]= function(_0x5c29x2){this[_0xd587[984]]&& (!mxEvent[_0xd587[721]](_0x5c29x2)&& null== this[_0xd587[1000]])&& (this[_0xd587[1001]](_0x5c29x2),this[_0xd587[1000]]= mxUtils[_0xd587[885]](this,this[_0xd587[788]]),this[_0xd587[1002]]= mxUtils[_0xd587[885]](this,this[_0xd587[789]]),mxEvent[_0xd587[759]](document,null,this[_0xd587[1000]],this[_0xd587[1002]]),mxEvent[_0xd587[722]](_0x5c29x2,!0,!1))};mxDragSource[_0xd587[202]][_0xd587[1001]]= function(_0x5c29x2){this[_0xd587[982]]= this[_0xd587[566]](_0x5c29x2);this[_0xd587[982]][_0xd587[124]][_0xd587[491]]= _0xd587[492];this[_0xd587[982]][_0xd587[124]][_0xd587[931]]= this[_0xd587[992]];mxUtils[_0xd587[254]](this[_0xd587[982]],this[_0xd587[993]])};mxDragSource[_0xd587[202]][_0xd587[1003]]= function(_0x5c29x2){null!= this[_0xd587[982]]&& (null!= this[_0xd587[982]][_0xd587[265]]&& this[_0xd587[982]][_0xd587[265]][_0xd587[266]](this[_0xd587[982]]),this[_0xd587[982]]= null)};mxDragSource[_0xd587[202]][_0xd587[1004]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=mxEvent[_0xd587[731]](_0x5c29x3),_0x5c29x5=mxEvent[_0xd587[733]](_0x5c29x3),_0x5c29x9=mxUtils[_0xd587[445]](_0x5c29x2[_0xd587[526]]),_0x5c29xa=mxUtils[_0xd587[444]]();return _0x5c29x4>= _0x5c29x9[_0xd587[235]]- _0x5c29xa[_0xd587[235]]&& _0x5c29x5>= _0x5c29x9[_0xd587[236]]- _0x5c29xa[_0xd587[236]]&& _0x5c29x4<= _0x5c29x9[_0xd587[235]]- _0x5c29xa[_0xd587[235]]+ _0x5c29x2[_0xd587[526]][_0xd587[359]]&& _0x5c29x5<= _0x5c29x9[_0xd587[236]]- _0x5c29xa[_0xd587[236]]+ _0x5c29x2[_0xd587[526]][_0xd587[167]]};mxDragSource[_0xd587[202]][_0xd587[788]]= function(_0x5c29x2){var _0x5c29x3=this[_0xd587[565]](_0x5c29x2);null!= _0x5c29x3&& !this[_0xd587[1004]](_0x5c29x3,_0x5c29x2)&& (_0x5c29x3= null);_0x5c29x3!= this[_0xd587[985]]&& (null!= this[_0xd587[985]]&& this[_0xd587[1005]](this[_0xd587[985]]),this[_0xd587[985]]= _0x5c29x3,null!= this[_0xd587[985]]&& this[_0xd587[1006]](this[_0xd587[985]]));null!= this[_0xd587[985]]&& this[_0xd587[1007]](this[_0xd587[985]],_0x5c29x2);if(null!= this[_0xd587[982]]&& (null== this[_0xd587[983]]|| _0xd587[189]!= this[_0xd587[983]][_0xd587[124]][_0xd587[187]])){var _0x5c29x3=mxEvent[_0xd587[731]](_0x5c29x2),_0x5c29x4=mxEvent[_0xd587[733]](_0x5c29x2);null== this[_0xd587[982]][_0xd587[265]]&& document[_0xd587[112]][_0xd587[62]](this[_0xd587[982]]);this[_0xd587[982]][_0xd587[124]][_0xd587[187]]= _0xd587[189];null!= this[_0xd587[559]]&& (_0x5c29x3+= this[_0xd587[559]][_0xd587[235]],_0x5c29x4+= this[_0xd587[559]][_0xd587[236]]);_0x5c29x3+= document[_0xd587[112]][_0xd587[360]]|| document[_0xd587[158]][_0xd587[360]];_0x5c29x4+= document[_0xd587[112]][_0xd587[190]]|| document[_0xd587[158]][_0xd587[190]];this[_0xd587[982]][_0xd587[124]][_0xd587[361]]= _0x5c29x3+ _0xd587[168];this[_0xd587[982]][_0xd587[124]][_0xd587[125]]= _0x5c29x4+ _0xd587[168]}else {null!= this[_0xd587[982]]&& (this[_0xd587[982]][_0xd587[124]][_0xd587[187]]= _0xd587[188])};mxEvent[_0xd587[722]](_0x5c29x2)};mxDragSource[_0xd587[202]][_0xd587[789]]= function(_0x5c29x2){if(null!= this[_0xd587[985]]){if(null!= this[_0xd587[987]]&& (null== this[_0xd587[983]]|| _0xd587[188]!= this[_0xd587[983]][_0xd587[124]][_0xd587[187]])){var _0x5c29x3=this[_0xd587[985]][_0xd587[441]][_0xd587[255]],_0x5c29x4=this[_0xd587[985]][_0xd587[441]][_0xd587[513]];this[_0xd587[1008]](this[_0xd587[985]],_0x5c29x2,this[_0xd587[986]],this[_0xd587[987]][_0xd587[235]]/ _0x5c29x3- _0x5c29x4[_0xd587[235]],this[_0xd587[987]][_0xd587[236]]/ _0x5c29x3- _0x5c29x4[_0xd587[236]])};this[_0xd587[1005]](this[_0xd587[985]])};this[_0xd587[1003]](_0x5c29x2);mxEvent[_0xd587[938]](document,null,this[_0xd587[1000]],this[_0xd587[1002]]);this[_0xd587[985]]= this[_0xd587[1002]]= this[_0xd587[1000]]= null;mxEvent[_0xd587[722]](_0x5c29x2)};mxDragSource[_0xd587[202]][_0xd587[1006]]= function(_0x5c29x2){_0x5c29x2[_0xd587[1009]]= !0;this[_0xd587[983]]= this[_0xd587[567]](_0x5c29x2);this[_0xd587[996]]()&& null!= this[_0xd587[983]]&& (this[_0xd587[988]]= new mxGuide(_0x5c29x2,_0x5c29x2[_0xd587[1011]][_0xd587[1010]]()));this[_0xd587[563]]&& (this[_0xd587[989]]= new mxCellHighlight(_0x5c29x2,mxConstants.DROP_TARGET_COLOR))};mxDragSource[_0xd587[202]][_0xd587[1005]]= function(_0x5c29x2){this[_0xd587[987]]= this[_0xd587[986]]= null;_0x5c29x2[_0xd587[1009]]= !1;null!= this[_0xd587[983]]&& (null!= this[_0xd587[983]][_0xd587[265]]&& this[_0xd587[983]][_0xd587[265]][_0xd587[266]](this[_0xd587[983]]),this[_0xd587[983]]= null);null!= this[_0xd587[988]]&& (this[_0xd587[988]][_0xd587[515]](),this[_0xd587[988]]= null);null!= this[_0xd587[989]]&& (this[_0xd587[989]][_0xd587[515]](),this[_0xd587[989]]= null)};mxDragSource[_0xd587[202]][_0xd587[1007]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=mxUtils[_0xd587[445]](_0x5c29x2[_0xd587[526]]),_0x5c29x5=mxUtils[_0xd587[444]](_0x5c29x2[_0xd587[526]]),_0x5c29x9=mxEvent[_0xd587[731]](_0x5c29x3)- _0x5c29x4[_0xd587[235]]+ _0x5c29x5[_0xd587[235]],_0x5c29x4=mxEvent[_0xd587[733]](_0x5c29x3)- _0x5c29x4[_0xd587[236]]+ _0x5c29x5[_0xd587[236]];_0x5c29x2[_0xd587[1012]]&& (null== this[_0xd587[561]]|| this[_0xd587[561]])&& _0x5c29x2[_0xd587[1014]](_0x5c29x9,_0x5c29x4,_0x5c29x2[_0xd587[1013]]);null!= this[_0xd587[989]]&& _0x5c29x2[_0xd587[1015]]()&& (this[_0xd587[986]]= this[_0xd587[564]](_0x5c29x2,_0x5c29x9,_0x5c29x4),_0x5c29x5= _0x5c29x2[_0xd587[249]]()[_0xd587[248]](this[_0xd587[986]]),this[_0xd587[989]][_0xd587[1016]](_0x5c29x5));if(null!= this[_0xd587[983]]){null== this[_0xd587[983]][_0xd587[265]]&& (_0x5c29x2[_0xd587[526]][_0xd587[62]](this[_0xd587[983]]),this[_0xd587[983]][_0xd587[124]][_0xd587[931]]= _0xd587[1017],this[_0xd587[983]][_0xd587[124]][_0xd587[491]]= _0xd587[492]);var _0x5c29x5=this[_0xd587[997]]()&& _0x5c29x2[_0xd587[1018]](_0x5c29x3),_0x5c29xa=!0;if(null!= this[_0xd587[988]]&& this[_0xd587[988]][_0xd587[1019]](_0x5c29x3)){var _0x5c29xa=parseInt(this[_0xd587[983]][_0xd587[124]][_0xd587[117]]),_0x5c29x12=parseInt(this[_0xd587[983]][_0xd587[124]][_0xd587[119]]),_0x5c29xa= new mxRectangle(0,0,_0x5c29xa,_0x5c29x12),_0x5c29x4= new mxPoint(_0x5c29x9,_0x5c29x4),_0x5c29x4=this[_0xd587[988]][_0xd587[582]](_0x5c29xa,_0x5c29x4,_0x5c29x5),_0x5c29xa=!1,_0x5c29x9=_0x5c29x4[_0xd587[235]],_0x5c29x4=_0x5c29x4[_0xd587[236]]}else {if(_0x5c29x5){var _0x5c29x5=_0x5c29x2[_0xd587[441]][_0xd587[255]],_0x5c29x12=_0x5c29x2[_0xd587[441]][_0xd587[513]],_0x5c29x13=_0x5c29x2[_0xd587[1020]]/ 2,_0x5c29x9=(_0x5c29x2[_0xd587[1021]](_0x5c29x9/ _0x5c29x5- _0x5c29x12[_0xd587[235]]- _0x5c29x13)+ _0x5c29x12[_0xd587[235]])* _0x5c29x5,_0x5c29x4=(_0x5c29x2[_0xd587[1021]](_0x5c29x4/ _0x5c29x5- _0x5c29x12[_0xd587[236]]- _0x5c29x13)+ _0x5c29x12[_0xd587[236]])* _0x5c29x5}};null!= this[_0xd587[988]]&& _0x5c29xa&& this[_0xd587[988]][_0xd587[801]]();null!= this[_0xd587[1022]]&& (_0x5c29x9+= this[_0xd587[1022]][_0xd587[235]],_0x5c29x4+= this[_0xd587[1022]][_0xd587[236]]);this[_0xd587[983]][_0xd587[124]][_0xd587[361]]= Math[_0xd587[488]](_0x5c29x9)+ _0xd587[168];this[_0xd587[983]][_0xd587[124]][_0xd587[125]]= Math[_0xd587[488]](_0x5c29x4)+ _0xd587[168];this[_0xd587[983]][_0xd587[124]][_0xd587[187]]= _0xd587[189]};this[_0xd587[987]]= new mxPoint(_0x5c29x9,_0x5c29x4)};mxDragSource[_0xd587[202]][_0xd587[1008]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){this[_0xd587[981]](_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9);_0x5c29x2[_0xd587[526]][_0xd587[393]]()};function mxToolbar(_0x5c29x2){this[_0xd587[526]]= _0x5c29x2}mxToolbar[_0xd587[202]]= new mxEventSource;mxToolbar[_0xd587[202]][_0xd587[196]]= mxToolbar;mxToolbar[_0xd587[202]][_0xd587[526]]= null;mxToolbar[_0xd587[202]][_0xd587[984]]= !0;mxToolbar[_0xd587[202]][_0xd587[1023]]= !1;mxToolbar[_0xd587[202]][_0xd587[1024]]= !0;mxToolbar[_0xd587[202]][_0xd587[1025]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa){var _0x5c29x12=document[_0xd587[55]](null!= _0x5c29x3?_0xd587[466]:_0xd587[172]),_0x5c29x13=_0x5c29x9|| (null!= _0x5c29xa?_0xd587[1026]:_0xd587[1027]);_0x5c29x12[_0xd587[926]]= _0x5c29x13;_0x5c29x12[_0xd587[57]](_0xd587[390],_0x5c29x3);null!= _0x5c29x2&& (null!= _0x5c29x3?_0x5c29x12[_0xd587[57]](_0xd587[924],_0x5c29x2):mxUtils[_0xd587[53]](_0x5c29x12,_0x5c29x2));this[_0xd587[526]][_0xd587[62]](_0x5c29x12);null!= _0x5c29x4&& (mxEvent[_0xd587[169]](_0x5c29x12,_0xd587[173],_0x5c29x4),mxClient[_0xd587[754]]&& mxEvent[_0xd587[169]](_0x5c29x12,_0xd587[757],_0x5c29x4));_0x5c29x2= mxUtils[_0xd587[885]](this,function(_0x5c29x2){null!= _0x5c29x5?_0x5c29x12[_0xd587[57]](_0xd587[390],_0x5c29x3):_0x5c29x12[_0xd587[124]][_0xd587[1028]]= _0xd587[110]});mxEvent[_0xd587[759]](_0x5c29x12,mxUtils[_0xd587[885]](this,function(_0x5c29x2){null!= _0x5c29x5?_0x5c29x12[_0xd587[57]](_0xd587[390],_0x5c29x5):_0x5c29x12[_0xd587[124]][_0xd587[1028]]= _0xd587[579];if(null!= _0x5c29xa){null== this[_0xd587[1029]]&& (this[_0xd587[1029]]= new mxPopupMenu,this[_0xd587[1029]][_0xd587[176]]());var _0x5c29x3=this[_0xd587[1030]];this[_0xd587[1029]][_0xd587[1031]]()&& this[_0xd587[1029]][_0xd587[1032]]();_0x5c29x3!= _0x5c29x12&& (this[_0xd587[1030]]= _0x5c29x12,this[_0xd587[1029]][_0xd587[1033]]= _0x5c29xa,_0x5c29x3= new mxPoint(_0x5c29x12[_0xd587[358]],_0x5c29x12[_0xd587[362]]+ _0x5c29x12[_0xd587[167]]),this[_0xd587[1029]][_0xd587[152]](_0x5c29x3[_0xd587[235]],_0x5c29x3[_0xd587[236]],null,_0x5c29x2),this[_0xd587[1029]][_0xd587[1031]]()&& (_0x5c29x12[_0xd587[926]]= _0x5c29x13+ _0xd587[1034],this[_0xd587[1029]][_0xd587[1032]]= function(){mxPopupMenu[_0xd587[202]][_0xd587[1032]][_0xd587[183]](this);_0x5c29x12[_0xd587[926]]= _0x5c29x13;this[_0xd587[1030]]= null}))}}),null,_0x5c29x2);mxEvent[_0xd587[169]](_0x5c29x12,_0xd587[1035],_0x5c29x2);return _0x5c29x12};mxToolbar[_0xd587[202]][_0xd587[970]]= function(_0x5c29x2){var _0x5c29x3=document[_0xd587[55]](_0xd587[485]);_0x5c29x3[_0xd587[124]][_0xd587[495]]= _0xd587[497];_0x5c29x3[_0xd587[926]]= _0xd587[1036];var _0x5c29x4=document[_0xd587[55]](_0xd587[804]);_0x5c29x4[_0xd587[926]]= _0x5c29x2|| _0xd587[1037];_0x5c29x3[_0xd587[62]](_0x5c29x4);this[_0xd587[526]][_0xd587[62]](_0x5c29x3);return _0x5c29x4};mxToolbar[_0xd587[202]][_0xd587[1038]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=document[_0xd587[55]](_0xd587[804]);_0x5c29x4[_0xd587[926]]= _0x5c29x3|| _0xd587[1037];this[_0xd587[972]](_0x5c29x4,_0x5c29x2,null);mxEvent[_0xd587[169]](_0x5c29x4,_0xd587[826],function(_0x5c29x2){var _0x5c29x3=_0x5c29x4[_0xd587[1040]][_0x5c29x4[_0xd587[1039]]];_0x5c29x4[_0xd587[1039]]= 0;null!= _0x5c29x3[_0xd587[1041]]&& _0x5c29x3[_0xd587[1041]](_0x5c29x2)});this[_0xd587[526]][_0xd587[62]](_0x5c29x4);return _0x5c29x4};mxToolbar[_0xd587[202]][_0xd587[972]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){var _0x5c29x5=document[_0xd587[55]](_0xd587[973]);mxUtils[_0xd587[171]](_0x5c29x5,_0x5c29x3);_0xd587[279]== typeof _0x5c29x4?_0x5c29x5[_0xd587[1041]]= _0x5c29x4:_0x5c29x5[_0xd587[57]](_0xd587[131],_0x5c29x4);_0x5c29x2[_0xd587[62]](_0x5c29x5);return _0x5c29x5};mxToolbar[_0xd587[202]][_0xd587[1042]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){var _0x5c29xa=document[_0xd587[55]](_0xd587[466]);_0x5c29xa[_0xd587[1043]]= _0x5c29x9|| _0xd587[1026];_0x5c29xa[_0xd587[926]]= _0x5c29xa[_0xd587[1043]];_0x5c29xa[_0xd587[57]](_0xd587[390],_0x5c29x3);_0x5c29xa[_0xd587[1044]]= _0x5c29x5;null!= _0x5c29x2&& _0x5c29xa[_0xd587[57]](_0xd587[924],_0x5c29x2);mxEvent[_0xd587[169]](_0x5c29xa,_0xd587[173],mxUtils[_0xd587[885]](this,function(_0x5c29x2){_0x5c29x2= this[_0xd587[1045]][_0xd587[1044]];null!= _0x5c29x2?(this[_0xd587[1045]][_0xd587[1044]]= this[_0xd587[1045]][_0xd587[284]](_0xd587[390]),this[_0xd587[1045]][_0xd587[57]](_0xd587[390],_0x5c29x2)):this[_0xd587[1045]][_0xd587[926]]= this[_0xd587[1045]][_0xd587[1043]];this[_0xd587[1024]]&& (this[_0xd587[1046]]= _0x5c29xa);this[_0xd587[1045]]= _0x5c29xa;_0x5c29x2= _0x5c29xa[_0xd587[1044]];null!= _0x5c29x2?(_0x5c29xa[_0xd587[1044]]= _0x5c29xa[_0xd587[284]](_0xd587[390]),_0x5c29xa[_0xd587[57]](_0xd587[390],_0x5c29x2)):_0x5c29xa[_0xd587[926]]= _0x5c29xa[_0xd587[1043]]+ _0xd587[1034];this[_0xd587[746]]( new mxEventObject(mxEvent.SELECT));_0x5c29x4()}));this[_0xd587[526]][_0xd587[62]](_0x5c29xa);null== this[_0xd587[1046]]&& (this[_0xd587[1046]]= _0x5c29xa,this[_0xd587[1047]](_0x5c29xa),_0x5c29x4());return _0x5c29xa};mxToolbar[_0xd587[202]][_0xd587[1048]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa){_0x5c29xa= null!= _0x5c29xa?_0x5c29xa:!0;var _0x5c29x12=document[_0xd587[55]](null!= _0x5c29x3?_0xd587[466]:_0xd587[172]);_0x5c29x12[_0xd587[1043]]= _0x5c29x9|| _0xd587[1026];_0x5c29x12[_0xd587[926]]= _0x5c29x12[_0xd587[1043]];_0x5c29x12[_0xd587[57]](_0xd587[390],_0x5c29x3);_0x5c29x12[_0xd587[1044]]= _0x5c29x5;null!= _0x5c29x2&& _0x5c29x12[_0xd587[57]](_0xd587[924],_0x5c29x2);this[_0xd587[984]]&& _0x5c29xa&& (mxEvent[_0xd587[169]](_0x5c29x12,_0xd587[173],mxUtils[_0xd587[885]](this,function(_0x5c29x2){this[_0xd587[1047]](_0x5c29x12,_0x5c29x4);this[_0xd587[1023]]= !1})),mxEvent[_0xd587[169]](_0x5c29x12,_0xd587[760],mxUtils[_0xd587[885]](this,function(_0x5c29x2){this[_0xd587[1047]](_0x5c29x12,_0x5c29x4);this[_0xd587[1023]]= !0})),null== this[_0xd587[1046]]&& (this[_0xd587[1046]]= _0x5c29x12,this[_0xd587[1049]]= _0x5c29x4,this[_0xd587[1047]](_0x5c29x12,_0x5c29x4)));this[_0xd587[526]][_0xd587[62]](_0x5c29x12);return _0x5c29x12};mxToolbar[_0xd587[202]][_0xd587[1047]]= function(_0x5c29x2,_0x5c29x3){if(this[_0xd587[1045]]!= _0x5c29x2){if(null!= this[_0xd587[1045]]){var _0x5c29x4=this[_0xd587[1045]][_0xd587[1044]];null!= _0x5c29x4?(this[_0xd587[1045]][_0xd587[1044]]= this[_0xd587[1045]][_0xd587[284]](_0xd587[390]),this[_0xd587[1045]][_0xd587[57]](_0xd587[390],_0x5c29x4)):this[_0xd587[1045]][_0xd587[926]]= this[_0xd587[1045]][_0xd587[1043]]};this[_0xd587[1045]]= _0x5c29x2;_0x5c29x4= this[_0xd587[1045]][_0xd587[1044]];null!= _0x5c29x4?(this[_0xd587[1045]][_0xd587[1044]]= this[_0xd587[1045]][_0xd587[284]](_0xd587[390]),this[_0xd587[1045]][_0xd587[57]](_0xd587[390],_0x5c29x4)):this[_0xd587[1045]][_0xd587[926]]= this[_0xd587[1045]][_0xd587[1043]]+ _0xd587[1034];this[_0xd587[746]]( new mxEventObject(mxEvent.SELECT,_0xd587[279],_0x5c29x3))}};mxToolbar[_0xd587[202]][_0xd587[1050]]= function(_0x5c29x2){(_0x5c29x2|| !this[_0xd587[1023]])&& this[_0xd587[1045]]!= this[_0xd587[1046]]&& this[_0xd587[1047]](this[_0xd587[1046]],this[_0xd587[1049]])};mxToolbar[_0xd587[202]][_0xd587[1051]]= function(_0x5c29x2){return this[_0xd587[1025]](null,_0x5c29x2,null)};mxToolbar[_0xd587[202]][_0xd587[1052]]= function(){mxUtils[_0xd587[345]](this[_0xd587[526]])};mxToolbar[_0xd587[202]][_0xd587[1053]]= function(){var _0x5c29x2=document[_0xd587[55]](_0xd587[1054]);_0x5c29x2[_0xd587[124]][_0xd587[941]]= _0xd587[1055];_0x5c29x2[_0xd587[57]](_0xd587[803],_0xd587[500]);this[_0xd587[526]][_0xd587[62]](_0x5c29x2)};mxToolbar[_0xd587[202]][_0xd587[515]]= function(){mxEvent[_0xd587[762]](this[_0xd587[526]]);this[_0xd587[1045]]= this[_0xd587[1049]]= this[_0xd587[1046]]= this[_0xd587[526]]= null;null!= this[_0xd587[1029]]&& this[_0xd587[1029]][_0xd587[515]]()};function mxSession(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){this[_0xd587[251]]= _0x5c29x2;this[_0xd587[1056]]= _0x5c29x3;this[_0xd587[1057]]= _0x5c29x4;this[_0xd587[1058]]= _0x5c29x5;null!= _0x5c29x2&& (this[_0xd587[1059]]= new mxCodec,this[_0xd587[1059]][_0xd587[1060]]= function(_0x5c29x3){return _0x5c29x2[_0xd587[736]](_0x5c29x3)});_0x5c29x2[_0xd587[169]](mxEvent.NOTIFY,mxUtils[_0xd587[885]](this,function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=_0x5c29x3[_0xd587[720]](_0xd587[1061]);(null!= _0x5c29x4&& this[_0xd587[143]]|| this[_0xd587[1062]]&& !this[_0xd587[1063]])&& this[_0xd587[827]](_0xd587[1064]+ this[_0xd587[1067]](_0x5c29x4[_0xd587[1065]],_0x5c29x4[_0xd587[1066]])+ _0xd587[1068])}))}mxSession[_0xd587[202]]= new mxEventSource;mxSession[_0xd587[202]][_0xd587[196]]= mxSession;mxSession[_0xd587[202]][_0xd587[251]]= null;mxSession[_0xd587[202]][_0xd587[1056]]= null;mxSession[_0xd587[202]][_0xd587[1057]]= null;mxSession[_0xd587[202]][_0xd587[1058]]= null;mxSession[_0xd587[202]][_0xd587[1059]]= null;mxSession[_0xd587[202]][_0xd587[1069]]= _0xd587[336];mxSession[_0xd587[202]][_0xd587[1070]]= !0;mxSession[_0xd587[202]][_0xd587[1071]]= !0;mxSession[_0xd587[202]][_0xd587[1072]]= 0;mxSession[_0xd587[202]][_0xd587[1073]]= 0;mxSession[_0xd587[202]][_0xd587[143]]= !1;mxSession[_0xd587[202]][_0xd587[1062]]= !1;mxSession[_0xd587[202]][_0xd587[1063]]= !1;mxSession[_0xd587[202]][_0xd587[1074]]= !1;mxSession[_0xd587[202]][_0xd587[861]]= function(){this[_0xd587[143]]?(this[_0xd587[1062]]= !0,this[_0xd587[746]]( new mxEventObject(mxEvent.CONNECT))):this[_0xd587[1062]]|| this[_0xd587[203]](this[_0xd587[1056]],mxUtils[_0xd587[885]](this,function(_0x5c29x2){this[_0xd587[1062]]= !0;this[_0xd587[746]]( new mxEventObject(mxEvent.CONNECT));this[_0xd587[1075]]()}))};mxSession[_0xd587[202]][_0xd587[809]]= function(){this[_0xd587[1062]]&& !this[_0xd587[1063]]&& (this[_0xd587[1063]]= !0,this[_0xd587[746]]( new mxEventObject(mxEvent.SUSPEND)))};mxSession[_0xd587[202]][_0xd587[810]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){this[_0xd587[1062]]&& this[_0xd587[1063]]&& (this[_0xd587[1063]]= !1,this[_0xd587[746]]( new mxEventObject(mxEvent.RESUME)),this[_0xd587[1074]]|| this[_0xd587[1075]]())};mxSession[_0xd587[202]][_0xd587[1076]]= function(_0x5c29x2){this[_0xd587[1062]]&& (this[_0xd587[1062]]= !1);this[_0xd587[746]]( new mxEventObject(mxEvent.DISCONNECT,_0xd587[1077],_0x5c29x2))};mxSession[_0xd587[202]][_0xd587[1075]]= function(){this[_0xd587[1062]]&& !this[_0xd587[1063]]&& null!= this[_0xd587[1057]]?(this[_0xd587[1074]]= !0,this[_0xd587[203]](this[_0xd587[1057]],mxUtils[_0xd587[885]](this,function(){this[_0xd587[1075]]()}))):this[_0xd587[1074]]= !1};mxSession[_0xd587[202]][_0xd587[827]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){null!= _0x5c29x2&& 0< _0x5c29x2[_0xd587[67]]&& (null!= this[_0xd587[1058]]&& (this[_0xd587[143]]?(mxLog[_0xd587[539]](),mxLog[_0xd587[143]](_0xd587[1078]+ this[_0xd587[1058]]+ _0xd587[1079]+ _0x5c29x2)):(_0x5c29x2= _0xd587[1080]+ _0x5c29x2+ _0xd587[1081],this[_0xd587[1070]]&& (_0x5c29x2= encodeURIComponent(_0x5c29x2)),mxUtils[_0xd587[814]](this[_0xd587[1058]],_0xd587[1082]+ _0x5c29x2,_0x5c29x3,_0x5c29x4))),this[_0xd587[1072]]+= _0x5c29x2[_0xd587[67]],this[_0xd587[746]]( new mxEventObject(mxEvent.NOTIFY,_0xd587[863],this[_0xd587[1058]],_0xd587[338],_0x5c29x2)))};mxSession[_0xd587[202]][_0xd587[203]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){if(_0xd587[82]!= typeof mxUtils){var _0x5c29x5=mxUtils[_0xd587[885]](this,function(_0x5c29x2){null!= _0x5c29x4?_0x5c29x4(_0x5c29x2):this[_0xd587[1076]](_0x5c29x2)});mxUtils[_0xd587[203]](_0x5c29x2,mxUtils[_0xd587[885]](this,function(_0x5c29x4){if(_0xd587[82]!= typeof mxUtils){if(_0x5c29x4[_0xd587[220]]()&& 404!= _0x5c29x4[_0xd587[878]]()){if(this[_0xd587[1073]]+= _0x5c29x4[_0xd587[221]]()[_0xd587[67]],this[_0xd587[746]]( new mxEventObject(mxEvent.GET,_0xd587[863],_0x5c29x2,_0xd587[870],_0x5c29x4)),this[_0xd587[1083]](_0x5c29x4)){if(0< _0x5c29x4[_0xd587[221]]()[_0xd587[67]]){var _0x5c29xa=_0x5c29x4[_0xd587[874]]();null== _0x5c29xa?_0x5c29x5(_0xd587[1084]+ _0x5c29x4[_0xd587[221]]()):this[_0xd587[806]](_0x5c29xa)};null!= _0x5c29x3&& _0x5c29x3(_0x5c29x4)}}else {_0x5c29x5(_0xd587[1085])}}}),function(_0x5c29x2){_0x5c29x5(_0xd587[1086])})}};mxSession[_0xd587[202]][_0xd587[1083]]= function(_0x5c29x2){return 0> _0x5c29x2[_0xd587[221]]()[_0xd587[2]](_0xd587[1087])};mxSession[_0xd587[202]][_0xd587[1067]]= function(_0x5c29x2,_0x5c29x3){for(var _0x5c29x4=_0xd587[110],_0x5c29x5=_0x5c29x3?-1:1,_0x5c29x9=_0x5c29x3?_0x5c29x2[_0xd587[67]]- 1:0;0<= _0x5c29x9&& _0x5c29x9< _0x5c29x2[_0xd587[67]];_0x5c29x9+= _0x5c29x5){var _0x5c29xa=this[_0xd587[1059]][_0xd587[514]](_0x5c29x2[_0x5c29x9]),_0x5c29x4=_0x5c29x4+ mxUtils[_0xd587[875]](_0x5c29xa,this[_0xd587[1069]])};return _0x5c29x4};mxSession[_0xd587[202]][_0xd587[806]]= function(_0x5c29x2){if(null!= _0x5c29x2&& _0x5c29x2[_0xd587[288]]== mxConstants[_0xd587[289]]){var _0x5c29x3=_0x5c29x2[_0xd587[284]](_0xd587[1088]);null!= _0x5c29x3&& (this[_0xd587[251]][_0xd587[1089]]= _0x5c29x3+ _0xd587[213]);for(_0x5c29x3= _0x5c29x2[_0xd587[285]];null!= _0x5c29x3;){var _0x5c29x4=_0x5c29x3[_0xd587[301]][_0xd587[216]]();_0xd587[724]== _0x5c29x4?this[_0xd587[1090]](_0x5c29x3):_0xd587[1091]== _0x5c29x4&& this[_0xd587[1092]](_0x5c29x3);_0x5c29x3= _0x5c29x3[_0xd587[287]]};this[_0xd587[746]]( new mxEventObject(mxEvent.RECEIVE,_0xd587[252],_0x5c29x2))}};mxSession[_0xd587[202]][_0xd587[1090]]= function(_0x5c29x2){( new mxCodec(_0x5c29x2[_0xd587[295]]))[_0xd587[1093]](_0x5c29x2[_0xd587[285]],this[_0xd587[251]])};mxSession[_0xd587[202]][_0xd587[1092]]= function(_0x5c29x2){for(_0x5c29x2= _0x5c29x2[_0xd587[285]];null!= _0x5c29x2;){_0xd587[1061]== _0x5c29x2[_0xd587[301]]&& this[_0xd587[1094]](_0x5c29x2),_0x5c29x2= _0x5c29x2[_0xd587[287]]}};mxSession[_0xd587[202]][_0xd587[1094]]= function(_0x5c29x2){_0x5c29x2= this[_0xd587[1095]](_0x5c29x2);if(0< _0x5c29x2[_0xd587[67]]){var _0x5c29x3=this[_0xd587[1096]](_0x5c29x2);this[_0xd587[251]][_0xd587[746]]( new mxEventObject(mxEvent.CHANGE,_0xd587[1061],_0x5c29x3,_0xd587[1065],_0x5c29x2));this[_0xd587[251]][_0xd587[746]]( new mxEventObject(mxEvent.UNDO,_0xd587[1061],_0x5c29x3));this[_0xd587[746]]( new mxEventObject(mxEvent.FIRED,_0xd587[1061],_0x5c29x3))}};mxSession[_0xd587[202]][_0xd587[1096]]= function(_0x5c29x2){var _0x5c29x3= new mxUndoableEdit(this[_0xd587[251]],this[_0xd587[1071]]);_0x5c29x3[_0xd587[1065]]= _0x5c29x2;_0x5c29x3[_0xd587[827]]= function(){_0x5c29x3[_0xd587[1097]][_0xd587[746]]( new mxEventObject(mxEvent.CHANGE,_0xd587[1061],_0x5c29x3,_0xd587[1065],_0x5c29x3[_0xd587[1065]]));_0x5c29x3[_0xd587[1097]][_0xd587[746]]( new mxEventObject(mxEvent.NOTIFY,_0xd587[1061],_0x5c29x3,_0xd587[1065],_0x5c29x3[_0xd587[1065]]))};return _0x5c29x3};mxSession[_0xd587[202]][_0xd587[1095]]= function(_0x5c29x2){this[_0xd587[1059]][_0xd587[395]]= _0x5c29x2[_0xd587[295]];var _0x5c29x3=[];for(_0x5c29x2= _0x5c29x2[_0xd587[285]];null!= _0x5c29x2;){var _0x5c29x4=this[_0xd587[1098]](_0x5c29x2);null!= _0x5c29x4&& _0x5c29x3[_0xd587[207]](_0x5c29x4);_0x5c29x2= _0x5c29x2[_0xd587[287]]};return _0x5c29x3};mxSession[_0xd587[202]][_0xd587[1098]]= function(_0x5c29x2){var _0x5c29x3=null;_0x5c29x2[_0xd587[288]]== mxConstants[_0xd587[289]]&& (_0x5c29x3= _0xd587[1099]== _0x5c29x2[_0xd587[301]]?( new mxCodec(_0x5c29x2[_0xd587[295]]))[_0xd587[1093]](_0x5c29x2):this[_0xd587[1059]][_0xd587[1093]](_0x5c29x2),null!= _0x5c29x3&& (_0x5c29x3[_0xd587[251]]= this[_0xd587[251]],_0x5c29x3[_0xd587[350]](),_0xd587[1100]== _0x5c29x2[_0xd587[301]]&& null== _0x5c29x3[_0xd587[1101]]&& this[_0xd587[1102]](_0x5c29x3[_0xd587[247]])));return _0x5c29x3};mxSession[_0xd587[202]][_0xd587[1102]]= function(_0x5c29x2,_0x5c29x3){this[_0xd587[1059]][_0xd587[1104]](_0x5c29x2[_0xd587[1103]](),_0x5c29x2);for(var _0x5c29x4=this[_0xd587[251]][_0xd587[262]](_0x5c29x2),_0x5c29x5=0;_0x5c29x5< _0x5c29x4;_0x5c29x5++){this[_0xd587[1102]](this[_0xd587[251]][_0xd587[263]](_0x5c29x2,_0x5c29x5))}};function mxUndoableEdit(_0x5c29x2,_0x5c29x3){this[_0xd587[1097]]= _0x5c29x2;this[_0xd587[1065]]= [];this[_0xd587[1105]]= null!= _0x5c29x3?_0x5c29x3:!0}mxUndoableEdit[_0xd587[202]][_0xd587[1097]]= null;mxUndoableEdit[_0xd587[202]][_0xd587[1065]]= null;mxUndoableEdit[_0xd587[202]][_0xd587[1105]]= null;mxUndoableEdit[_0xd587[202]][_0xd587[1066]]= !1;mxUndoableEdit[_0xd587[202]][_0xd587[1106]]= !1;mxUndoableEdit[_0xd587[202]][_0xd587[1107]]= function(){return 0== this[_0xd587[1065]][_0xd587[67]]};mxUndoableEdit[_0xd587[202]][_0xd587[1108]]= function(){return this[_0xd587[1105]]};mxUndoableEdit[_0xd587[202]][_0xd587[99]]= function(_0x5c29x2){this[_0xd587[1065]][_0xd587[207]](_0x5c29x2)};mxUndoableEdit[_0xd587[202]][_0xd587[827]]= function(){};mxUndoableEdit[_0xd587[202]][_0xd587[1109]]= function(){};mxUndoableEdit[_0xd587[202]][_0xd587[824]]= function(){if(!this[_0xd587[1066]]){this[_0xd587[1097]][_0xd587[746]]( new mxEventObject(mxEvent.START_EDIT));for(var _0x5c29x2=this[_0xd587[1065]][_0xd587[67]]- 1;0<= _0x5c29x2;_0x5c29x2--){var _0x5c29x3=this[_0xd587[1065]][_0x5c29x2];null!= _0x5c29x3[_0xd587[350]]?_0x5c29x3[_0xd587[350]]():null!= _0x5c29x3[_0xd587[824]]&& _0x5c29x3[_0xd587[824]]();this[_0xd587[1097]][_0xd587[746]]( new mxEventObject(mxEvent.EXECUTED,_0xd587[826],_0x5c29x3))};this[_0xd587[1066]]= !0;this[_0xd587[1106]]= !1;this[_0xd587[1097]][_0xd587[746]]( new mxEventObject(mxEvent.END_EDIT))};this[_0xd587[827]]()};mxUndoableEdit[_0xd587[202]][_0xd587[825]]= function(){if(!this[_0xd587[1106]]){this[_0xd587[1097]][_0xd587[746]]( new mxEventObject(mxEvent.START_EDIT));for(var _0x5c29x2=this[_0xd587[1065]][_0xd587[67]],_0x5c29x3=0;_0x5c29x3< _0x5c29x2;_0x5c29x3++){var _0x5c29x4=this[_0xd587[1065]][_0x5c29x3];null!= _0x5c29x4[_0xd587[350]]?_0x5c29x4[_0xd587[350]]():null!= _0x5c29x4[_0xd587[825]]&& _0x5c29x4[_0xd587[825]]();this[_0xd587[1097]][_0xd587[746]]( new mxEventObject(mxEvent.EXECUTED,_0xd587[826],_0x5c29x4))};this[_0xd587[1066]]= !1;this[_0xd587[1106]]= !0;this[_0xd587[1097]][_0xd587[746]]( new mxEventObject(mxEvent.END_EDIT))};this[_0xd587[827]]()};function mxUndoManager(_0x5c29x2){this[_0xd587[803]]= null!= _0x5c29x2?_0x5c29x2:100;this[_0xd587[200]]()}mxUndoManager[_0xd587[202]]= new mxEventSource;mxUndoManager[_0xd587[202]][_0xd587[196]]= mxUndoManager;mxUndoManager[_0xd587[202]][_0xd587[803]]= null;mxUndoManager[_0xd587[202]][_0xd587[1110]]= null;mxUndoManager[_0xd587[202]][_0xd587[1111]]= 0;mxUndoManager[_0xd587[202]][_0xd587[1107]]= function(){return 0== this[_0xd587[1110]][_0xd587[67]]};mxUndoManager[_0xd587[202]][_0xd587[200]]= function(){this[_0xd587[1110]]= [];this[_0xd587[1111]]= 0;this[_0xd587[746]]( new mxEventObject(mxEvent.CLEAR))};mxUndoManager[_0xd587[202]][_0xd587[1112]]= function(){return 0< this[_0xd587[1111]]};mxUndoManager[_0xd587[202]][_0xd587[824]]= function(){for(;0< this[_0xd587[1111]];){var _0x5c29x2=this[_0xd587[1110]][--this[_0xd587[1111]]];_0x5c29x2[_0xd587[824]]();if(_0x5c29x2[_0xd587[1108]]()){this[_0xd587[746]]( new mxEventObject(mxEvent.UNDO,_0xd587[1061],_0x5c29x2));break}}};mxUndoManager[_0xd587[202]][_0xd587[1113]]= function(){return this[_0xd587[1111]]< this[_0xd587[1110]][_0xd587[67]]};mxUndoManager[_0xd587[202]][_0xd587[825]]= function(){for(var _0x5c29x2=this[_0xd587[1110]][_0xd587[67]];this[_0xd587[1111]]< _0x5c29x2;){var _0x5c29x3=this[_0xd587[1110]][this[_0xd587[1111]]++];_0x5c29x3[_0xd587[825]]();if(_0x5c29x3[_0xd587[1108]]()){this[_0xd587[746]]( new mxEventObject(mxEvent.REDO,_0xd587[1061],_0x5c29x3));break}}};mxUndoManager[_0xd587[202]][_0xd587[1114]]= function(_0x5c29x2){this[_0xd587[330]]();0< this[_0xd587[803]]&& this[_0xd587[803]]== this[_0xd587[1110]][_0xd587[67]]&& this[_0xd587[1110]][_0xd587[1115]]();this[_0xd587[1110]][_0xd587[207]](_0x5c29x2);this[_0xd587[1111]]= this[_0xd587[1110]][_0xd587[67]];this[_0xd587[746]]( new mxEventObject(mxEvent.ADD,_0xd587[1061],_0x5c29x2))};mxUndoManager[_0xd587[202]][_0xd587[330]]= function(){if(this[_0xd587[1110]][_0xd587[67]]> this[_0xd587[1111]]){for(var _0x5c29x2=this[_0xd587[1110]][_0xd587[300]](this[_0xd587[1111]],this[_0xd587[1110]][_0xd587[67]]- this[_0xd587[1111]]),_0x5c29x3=0;_0x5c29x3< _0x5c29x2[_0xd587[67]];_0x5c29x3++){_0x5c29x2[_0x5c29x3][_0xd587[1109]]()}}};var mxUrlConverter=function(_0x5c29x2){var _0x5c29x3=!0,_0x5c29x4=null,_0x5c29x5=null;return {isEnabled:function(){return _0x5c29x3},setEnabled:function(_0x5c29x2){_0x5c29x3= _0x5c29x2},getBaseUrl:function(){return _0x5c29x4},setBaseUrl:function(_0x5c29x2){_0x5c29x4= _0x5c29x2},getBaseDomain:function(){return _0x5c29x4},setBaseDomain:function(_0x5c29x2){_0x5c29x4= _0x5c29x2},isRelativeUrl:function(_0x5c29x2){return _0xd587[43]!= _0x5c29x2[_0xd587[85]](0,7)&& _0xd587[46]!= _0x5c29x2[_0xd587[85]](0,8)&& _0xd587[1116]!= _0x5c29x2[_0xd587[85]](0,10)},convert:function(_0x5c29x2){if(_0x5c29x3&& this[_0xd587[1117]](_0x5c29x2)){if(null== _0x5c29x4){_0x5c29x5= location[_0xd587[1118]]+ _0xd587[1119]+ location[_0xd587[1120]];_0x5c29x4= _0x5c29x5+ location[_0xd587[1121]];var _0x5c29xa=_0x5c29x4[_0xd587[1122]](_0xd587[84]);0< _0x5c29xa&& (_0x5c29x4= _0x5c29x4[_0xd587[85]](0,_0x5c29xa+ 1))};_0x5c29x2= _0xd587[84]== _0x5c29x2[_0xd587[225]](0)?_0x5c29x5+ _0x5c29x2:_0x5c29x4+ _0x5c29x2};return _0x5c29x2}}};function mxPanningManager(_0x5c29x2){this[_0xd587[1123]]= null;this[_0xd587[1124]]= !1;this[_0xd587[1125]]= this[_0xd587[1126]]= this[_0xd587[1127]]= this[_0xd587[1128]]= this[_0xd587[1129]]= this[_0xd587[1130]]= 0;this[_0xd587[1131]]= !1;this[_0xd587[190]]= this[_0xd587[360]]= 0;this[_0xd587[1132]]= {mouseDown:function(_0x5c29x2,_0x5c29x3){},mouseMove:function(_0x5c29x2,_0x5c29x3){},mouseUp:mxUtils[_0xd587[885]](this,function(_0x5c29x2,_0x5c29x3){this[_0xd587[1124]]&& this[_0xd587[1076]]()})};_0x5c29x2[_0xd587[1133]](this[_0xd587[1132]]);mxEvent[_0xd587[169]](document,_0xd587[753],mxUtils[_0xd587[885]](this,function(){this[_0xd587[1124]]&& this[_0xd587[1076]]()}));var _0x5c29x3=mxUtils[_0xd587[885]](this,function(){this[_0xd587[1131]]= mxUtils[_0xd587[1134]](_0x5c29x2[_0xd587[526]]);this[_0xd587[360]]= _0x5c29x2[_0xd587[526]][_0xd587[360]];this[_0xd587[190]]= _0x5c29x2[_0xd587[526]][_0xd587[190]];return window[_0xd587[1141]](mxUtils[_0xd587[885]](this,function(){this[_0xd587[1130]]-= this[_0xd587[1126]];this[_0xd587[1129]]-= this[_0xd587[1125]];if(this[_0xd587[1131]]){var _0x5c29x3=-_0x5c29x2[_0xd587[526]][_0xd587[360]]- Math[_0xd587[430]](this[_0xd587[1126]]),_0x5c29x5=-_0x5c29x2[_0xd587[526]][_0xd587[190]]- Math[_0xd587[430]](this[_0xd587[1125]]);_0x5c29x2[_0xd587[1135]](_0x5c29x3,_0x5c29x5);_0x5c29x2[_0xd587[1136]]= this[_0xd587[360]]- _0x5c29x2[_0xd587[526]][_0xd587[360]];_0x5c29x2[_0xd587[1137]]= this[_0xd587[190]]- _0x5c29x2[_0xd587[526]][_0xd587[190]];_0x5c29x2[_0xd587[746]]( new mxEventObject(mxEvent.PAN))}else {_0x5c29x2[_0xd587[1135]](this[_0xd587[1138]](),this[_0xd587[1139]]())}}),this[_0xd587[1140]])});this[_0xd587[1142]]= function(){return active};this[_0xd587[1138]]= function(){return Math[_0xd587[488]](this[_0xd587[1130]])};this[_0xd587[1139]]= function(){return Math[_0xd587[488]](this[_0xd587[1129]])};this[_0xd587[861]]= function(){this[_0xd587[1128]]= _0x5c29x2[_0xd587[441]][_0xd587[513]][_0xd587[235]];this[_0xd587[1127]]= _0x5c29x2[_0xd587[441]][_0xd587[513]][_0xd587[236]];this[_0xd587[1124]]= !0};this[_0xd587[1143]]= function(_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa){this[_0xd587[1124]]|| this[_0xd587[861]]();this[_0xd587[360]]= _0x5c29x2[_0xd587[526]][_0xd587[360]];this[_0xd587[190]]= _0x5c29x2[_0xd587[526]][_0xd587[190]];_0x5c29xa= null!= _0x5c29xa?_0x5c29xa:0;var _0x5c29x12=_0x5c29x2[_0xd587[526]];this[_0xd587[1126]]= _0x5c29x4+ (null!= _0x5c29x9?_0x5c29x9:0)- _0x5c29x12[_0xd587[360]]- _0x5c29x12[_0xd587[159]];0> this[_0xd587[1126]]&& Math[_0xd587[425]](this[_0xd587[1126]])< this[_0xd587[467]]?this[_0xd587[1126]]= this[_0xd587[467]]+ this[_0xd587[1126]]:this[_0xd587[1126]]= this[_0xd587[1144]]?Math[_0xd587[160]](this[_0xd587[1126]],0):0;0== this[_0xd587[1126]]&& (this[_0xd587[1126]]= _0x5c29x4- _0x5c29x12[_0xd587[360]],this[_0xd587[1126]]= 0< this[_0xd587[1126]]&& this[_0xd587[1126]]< this[_0xd587[467]]?this[_0xd587[1126]]- this[_0xd587[467]]:this[_0xd587[1144]]?Math[_0xd587[243]](0,this[_0xd587[1126]]):0);this[_0xd587[1125]]= _0x5c29x5+ _0x5c29xa- _0x5c29x12[_0xd587[190]]- _0x5c29x12[_0xd587[157]];0> this[_0xd587[1125]]&& Math[_0xd587[425]](this[_0xd587[1125]])< this[_0xd587[467]]?this[_0xd587[1125]]= this[_0xd587[467]]+ this[_0xd587[1125]]:this[_0xd587[1125]]= this[_0xd587[1144]]?Math[_0xd587[160]](this[_0xd587[1125]],0):0;0== this[_0xd587[1125]]&& (this[_0xd587[1125]]= _0x5c29x5- _0x5c29x12[_0xd587[190]],this[_0xd587[1125]]= 0< this[_0xd587[1125]]&& this[_0xd587[1125]]< this[_0xd587[467]]?this[_0xd587[1125]]- this[_0xd587[467]]:this[_0xd587[1144]]?Math[_0xd587[243]](0,this[_0xd587[1125]]):0);0!= this[_0xd587[1126]]|| 0!= this[_0xd587[1125]]?(this[_0xd587[1126]]*= this[_0xd587[1145]],this[_0xd587[1125]]*= this[_0xd587[1145]],null== this[_0xd587[1123]]&& (this[_0xd587[1123]]= _0x5c29x3())):null!= this[_0xd587[1123]]&& (window[_0xd587[1146]](this[_0xd587[1123]]),this[_0xd587[1123]]= null)};this[_0xd587[1076]]= function(){if(this[_0xd587[1124]]){if(this[_0xd587[1124]]= !1,null!= this[_0xd587[1123]]&& (window[_0xd587[1146]](this[_0xd587[1123]]),this[_0xd587[1123]]= null),this[_0xd587[1129]]= this[_0xd587[1130]]= 0,this[_0xd587[1131]]){_0x5c29x2[_0xd587[1136]]= 0,_0x5c29x2[_0xd587[1137]]= 0,_0x5c29x2[_0xd587[746]]( new mxEventObject(mxEvent.PAN))}else {var _0x5c29x3=_0x5c29x2[_0xd587[1136]],_0x5c29x5=_0x5c29x2[_0xd587[1137]];if(0!= _0x5c29x3|| 0!= _0x5c29x5){_0x5c29x2[_0xd587[1135]](0,0),_0x5c29x2[_0xd587[441]][_0xd587[1147]](this[_0xd587[1128]]+ _0x5c29x3/ _0x5c29x2[_0xd587[441]][_0xd587[255]],this[_0xd587[1127]]+ _0x5c29x5/ _0x5c29x2[_0xd587[441]][_0xd587[255]])}}}};this[_0xd587[515]]= function(){_0x5c29x2[_0xd587[1148]](this[_0xd587[1132]])}}mxPanningManager[_0xd587[202]][_0xd587[1145]]= 1/ 6;mxPanningManager[_0xd587[202]][_0xd587[1140]]= 10;mxPanningManager[_0xd587[202]][_0xd587[1144]]= !0;mxPanningManager[_0xd587[202]][_0xd587[467]]= 0;function mxPopupMenu(_0x5c29x2){this[_0xd587[1033]]= _0x5c29x2;null!= _0x5c29x2&& this[_0xd587[176]]()}mxPopupMenu[_0xd587[202]]= new mxEventSource;mxPopupMenu[_0xd587[202]][_0xd587[196]]= mxPopupMenu;mxPopupMenu[_0xd587[202]][_0xd587[1149]]= mxClient[_0xd587[88]]+ _0xd587[1150];mxPopupMenu[_0xd587[202]][_0xd587[931]]= 10006;mxPopupMenu[_0xd587[202]][_0xd587[1033]]= null;mxPopupMenu[_0xd587[202]][_0xd587[1151]]= !1;mxPopupMenu[_0xd587[202]][_0xd587[984]]= !0;mxPopupMenu[_0xd587[202]][_0xd587[1152]]= 0;mxPopupMenu[_0xd587[202]][_0xd587[1153]]= !1;mxPopupMenu[_0xd587[202]][_0xd587[1154]]= !1;mxPopupMenu[_0xd587[202]][_0xd587[1155]]= !0;mxPopupMenu[_0xd587[202]][_0xd587[176]]= function(){this[_0xd587[116]]= document[_0xd587[55]](_0xd587[116]);this[_0xd587[116]][_0xd587[926]]= _0xd587[1156];this[_0xd587[120]]= document[_0xd587[55]](_0xd587[120]);this[_0xd587[116]][_0xd587[62]](this[_0xd587[120]]);this[_0xd587[485]]= document[_0xd587[55]](_0xd587[485]);this[_0xd587[485]][_0xd587[926]]= _0xd587[1156];this[_0xd587[485]][_0xd587[124]][_0xd587[495]]= _0xd587[497];this[_0xd587[485]][_0xd587[124]][_0xd587[931]]= this[_0xd587[931]];this[_0xd587[485]][_0xd587[62]](this[_0xd587[116]]);mxEvent[_0xd587[1157]](this[_0xd587[485]])};mxPopupMenu[_0xd587[202]][_0xd587[994]]= function(){return this[_0xd587[984]]};mxPopupMenu[_0xd587[202]][_0xd587[995]]= function(_0x5c29x2){this[_0xd587[984]]= _0x5c29x2};mxPopupMenu[_0xd587[202]][_0xd587[737]]= function(_0x5c29x2){return _0x5c29x2[_0xd587[737]]()|| this[_0xd587[1151]]&& mxEvent[_0xd587[1158]](_0x5c29x2[_0xd587[727]]())};mxPopupMenu[_0xd587[202]][_0xd587[1025]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa){_0x5c29x5= _0x5c29x5|| this;this[_0xd587[1152]]++;_0x5c29x5[_0xd587[1159]]&& (_0x5c29x5[_0xd587[1160]]&& this[_0xd587[1051]](_0x5c29x5,!0),_0x5c29x5[_0xd587[1159]]= !1);_0x5c29x5[_0xd587[1160]]= !0;var _0x5c29x12=document[_0xd587[55]](_0xd587[121]);_0x5c29x12[_0xd587[926]]= _0xd587[1161];var _0x5c29x13=document[_0xd587[55]](_0xd587[122]);_0x5c29x13[_0xd587[926]]= _0xd587[1162];null!= _0x5c29x3?(_0x5c29x9= document[_0xd587[55]](_0xd587[466]),_0x5c29x9[_0xd587[390]]= _0x5c29x3,_0x5c29x13[_0xd587[62]](_0x5c29x9)):null!= _0x5c29x9&& (_0x5c29x3= document[_0xd587[55]](_0xd587[485]),_0x5c29x3[_0xd587[926]]= _0x5c29x9,_0x5c29x13[_0xd587[62]](_0x5c29x3));_0x5c29x12[_0xd587[62]](_0x5c29x13);this[_0xd587[1155]]&& (_0x5c29x13= document[_0xd587[55]](_0xd587[122]),_0x5c29x13[_0xd587[926]]= _0xd587[1161]+ (null!= _0x5c29xa&& !_0x5c29xa?_0xd587[1163]:_0xd587[110]),mxUtils[_0xd587[53]](_0x5c29x13,_0x5c29x2),_0x5c29x13[_0xd587[611]]= _0xd587[361],_0x5c29x12[_0xd587[62]](_0x5c29x13),_0x5c29x2= document[_0xd587[55]](_0xd587[122]),_0x5c29x2[_0xd587[926]]= _0xd587[1161]+ (null!= _0x5c29xa&& !_0x5c29xa?_0xd587[1163]:_0xd587[110]),_0x5c29x2[_0xd587[124]][_0xd587[1164]]= _0xd587[1055],_0x5c29x2[_0xd587[124]][_0xd587[1165]]= _0xd587[699],_0x5c29x12[_0xd587[62]](_0x5c29x2),null== _0x5c29x5[_0xd587[485]]&& this[_0xd587[1166]](_0x5c29x5));_0x5c29x5[_0xd587[120]][_0xd587[62]](_0x5c29x12);if(null== _0x5c29xa|| _0x5c29xa){mxEvent[_0xd587[759]](_0x5c29x12,mxUtils[_0xd587[885]](this,function(_0x5c29x2){this[_0xd587[1167]]= _0x5c29x12;_0x5c29x5[_0xd587[1168]]!= _0x5c29x12&& _0x5c29x5[_0xd587[1168]]!= _0x5c29x5&& (null!= _0x5c29x5[_0xd587[1168]]&& null!= _0x5c29x5[_0xd587[1168]][_0xd587[485]][_0xd587[265]]&& this[_0xd587[1169]](_0x5c29x5),null!= _0x5c29x12[_0xd587[485]]&& (this[_0xd587[1170]](_0x5c29x5,_0x5c29x12),_0x5c29x5[_0xd587[1168]]= _0x5c29x12));mxEvent[_0xd587[722]](_0x5c29x2)}),mxUtils[_0xd587[885]](this,function(_0x5c29x2){_0x5c29x5[_0xd587[1168]]!= _0x5c29x12&& _0x5c29x5[_0xd587[1168]]!= _0x5c29x5&& (null!= _0x5c29x5[_0xd587[1168]]&& null!= _0x5c29x5[_0xd587[1168]][_0xd587[485]][_0xd587[265]]&& this[_0xd587[1169]](_0x5c29x5),this[_0xd587[1153]]&& null!= _0x5c29x12[_0xd587[485]]&& (this[_0xd587[1170]](_0x5c29x5,_0x5c29x12),_0x5c29x5[_0xd587[1168]]= _0x5c29x12));_0x5c29x12[_0xd587[926]]= _0xd587[1171]}),mxUtils[_0xd587[885]](this,function(_0x5c29x2){this[_0xd587[1167]]== _0x5c29x12&& (_0x5c29x5[_0xd587[1168]]!= _0x5c29x12&& this[_0xd587[1032]](),null!= _0x5c29x4&& _0x5c29x4(_0x5c29x2));this[_0xd587[1167]]= null;mxEvent[_0xd587[722]](_0x5c29x2)})),mxEvent[_0xd587[169]](_0x5c29x12,_0xd587[1035],mxUtils[_0xd587[885]](this,function(_0x5c29x2){_0x5c29x12[_0xd587[926]]= _0xd587[1161]}))};return _0x5c29x12};mxPopupMenu[_0xd587[202]][_0xd587[1166]]= function(_0x5c29x2){_0x5c29x2[_0xd587[116]]= document[_0xd587[55]](_0xd587[116]);_0x5c29x2[_0xd587[116]][_0xd587[926]]= _0xd587[1156];_0x5c29x2[_0xd587[120]]= document[_0xd587[55]](_0xd587[120]);_0x5c29x2[_0xd587[116]][_0xd587[62]](_0x5c29x2[_0xd587[120]]);_0x5c29x2[_0xd587[485]]= document[_0xd587[55]](_0xd587[485]);_0x5c29x2[_0xd587[485]][_0xd587[926]]= _0xd587[1156];_0x5c29x2[_0xd587[485]][_0xd587[124]][_0xd587[491]]= _0xd587[492];_0x5c29x2[_0xd587[485]][_0xd587[124]][_0xd587[495]]= _0xd587[497];_0x5c29x2[_0xd587[485]][_0xd587[124]][_0xd587[931]]= this[_0xd587[931]];_0x5c29x2[_0xd587[485]][_0xd587[62]](_0x5c29x2[_0xd587[116]]);var _0x5c29x3=document[_0xd587[55]](_0xd587[466]);_0x5c29x3[_0xd587[57]](_0xd587[390],this[_0xd587[1149]]);td= _0x5c29x2[_0xd587[285]][_0xd587[287]][_0xd587[287]];td[_0xd587[62]](_0x5c29x3)};mxPopupMenu[_0xd587[202]][_0xd587[1170]]= function(_0x5c29x2,_0x5c29x3){if(null!= _0x5c29x3[_0xd587[485]]){_0x5c29x3[_0xd587[485]][_0xd587[124]][_0xd587[361]]= _0x5c29x2[_0xd587[485]][_0xd587[358]]+ _0x5c29x3[_0xd587[358]]+ _0x5c29x3[_0xd587[359]]- 1+ _0xd587[168];_0x5c29x3[_0xd587[485]][_0xd587[124]][_0xd587[125]]= _0x5c29x2[_0xd587[485]][_0xd587[362]]+ _0x5c29x3[_0xd587[362]]+ _0xd587[168];document[_0xd587[112]][_0xd587[62]](_0x5c29x3[_0xd587[485]]);var _0x5c29x4=parseInt(_0x5c29x3[_0xd587[485]][_0xd587[358]]),_0x5c29x5=parseInt(_0x5c29x3[_0xd587[485]][_0xd587[359]]),_0x5c29x9=document[_0xd587[112]],_0x5c29xa=document[_0xd587[158]];if(_0x5c29x4+ _0x5c29x5> (_0x5c29x9[_0xd587[360]]|| _0x5c29xa[_0xd587[360]])+ (_0x5c29x9[_0xd587[159]]|| _0x5c29xa[_0xd587[159]])){_0x5c29x3[_0xd587[485]][_0xd587[124]][_0xd587[361]]= _0x5c29x2[_0xd587[485]][_0xd587[358]]- _0x5c29x5+ (mxClient[_0xd587[80]]?6:-6)+ _0xd587[168]};mxUtils[_0xd587[933]](_0x5c29x3[_0xd587[485]])}};mxPopupMenu[_0xd587[202]][_0xd587[1051]]= function(_0x5c29x2,_0x5c29x3){_0x5c29x2= _0x5c29x2|| this;if(this[_0xd587[1154]]&& !_0x5c29x3){_0x5c29x2[_0xd587[1159]]= !0}else {if(null!= _0x5c29x2[_0xd587[120]]){_0x5c29x2[_0xd587[1159]]= !1;var _0x5c29x4=document[_0xd587[55]](_0xd587[121]),_0x5c29x5=document[_0xd587[55]](_0xd587[122]);_0x5c29x5[_0xd587[926]]= _0xd587[1162];_0x5c29x5[_0xd587[124]][_0xd587[549]]= _0xd587[1172];_0x5c29x4[_0xd587[62]](_0x5c29x5);_0x5c29x5= document[_0xd587[55]](_0xd587[122]);_0x5c29x5[_0xd587[124]][_0xd587[549]]= _0xd587[1172];_0x5c29x5[_0xd587[57]](_0xd587[1173],_0xd587[1174]);var _0x5c29x9=document[_0xd587[55]](_0xd587[1054]);_0x5c29x9[_0xd587[57]](_0xd587[803],_0xd587[500]);_0x5c29x5[_0xd587[62]](_0x5c29x9);_0x5c29x4[_0xd587[62]](_0x5c29x5);_0x5c29x2[_0xd587[120]][_0xd587[62]](_0x5c29x4)}}};mxPopupMenu[_0xd587[202]][_0xd587[152]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){if(null!= this[_0xd587[485]]&& null!= this[_0xd587[120]]&& null!= this[_0xd587[1033]]){this[_0xd587[485]][_0xd587[124]][_0xd587[361]]= _0x5c29x2+ _0xd587[168];for(this[_0xd587[485]][_0xd587[124]][_0xd587[125]]= _0x5c29x3+ _0xd587[168];null!= this[_0xd587[120]][_0xd587[285]];){mxEvent[_0xd587[762]](this[_0xd587[120]][_0xd587[285]]),this[_0xd587[120]][_0xd587[266]](this[_0xd587[120]][_0xd587[285]])};this[_0xd587[1152]]= 0;this[_0xd587[1033]](this,_0x5c29x4,_0x5c29x5);0< this[_0xd587[1152]]&& (this[_0xd587[1175]](),this[_0xd587[746]]( new mxEventObject(mxEvent.SHOW)))}};mxPopupMenu[_0xd587[202]][_0xd587[1031]]= function(){return null!= this[_0xd587[485]]&& this[_0xd587[485]][_0xd587[265]]== document[_0xd587[112]]};mxPopupMenu[_0xd587[202]][_0xd587[1175]]= function(){9<= document[_0xd587[5]]&& (this[_0xd587[485]][_0xd587[124]][_0xd587[347]]= _0xd587[130]);document[_0xd587[112]][_0xd587[62]](this[_0xd587[485]]);mxUtils[_0xd587[933]](this[_0xd587[485]])};mxPopupMenu[_0xd587[202]][_0xd587[1032]]= function(){null!= this[_0xd587[485]]&& (null!= this[_0xd587[485]][_0xd587[265]]&& this[_0xd587[485]][_0xd587[265]][_0xd587[266]](this[_0xd587[485]]),this[_0xd587[1169]](this),this[_0xd587[1160]]= !1)};mxPopupMenu[_0xd587[202]][_0xd587[1169]]= function(_0x5c29x2){null!= _0x5c29x2[_0xd587[1168]]&& (this[_0xd587[1169]](_0x5c29x2[_0xd587[1168]]),null!= _0x5c29x2[_0xd587[1168]][_0xd587[485]][_0xd587[265]]&& _0x5c29x2[_0xd587[1168]][_0xd587[485]][_0xd587[265]][_0xd587[266]](_0x5c29x2[_0xd587[1168]][_0xd587[485]]),_0x5c29x2[_0xd587[1168]]= null)};mxPopupMenu[_0xd587[202]][_0xd587[515]]= function(){null!= this[_0xd587[485]]&& (mxEvent[_0xd587[762]](this[_0xd587[485]]),null!= this[_0xd587[485]][_0xd587[265]]&& this[_0xd587[485]][_0xd587[265]][_0xd587[266]](this[_0xd587[485]]),this[_0xd587[485]]= null)};function mxAutoSaveManager(_0x5c29x2){this[_0xd587[1176]]= mxUtils[_0xd587[885]](this,function(_0x5c29x2,_0x5c29x4){this[_0xd587[994]]()&& this[_0xd587[1177]](_0x5c29x4[_0xd587[720]](_0xd587[1061])[_0xd587[1065]])});this[_0xd587[1178]](_0x5c29x2)}mxAutoSaveManager[_0xd587[202]]= new mxEventSource;mxAutoSaveManager[_0xd587[202]][_0xd587[196]]= mxAutoSaveManager;mxAutoSaveManager[_0xd587[202]][_0xd587[1179]]= null;mxAutoSaveManager[_0xd587[202]][_0xd587[1180]]= 10;mxAutoSaveManager[_0xd587[202]][_0xd587[1181]]= 2;mxAutoSaveManager[_0xd587[202]][_0xd587[1182]]= 5;mxAutoSaveManager[_0xd587[202]][_0xd587[1183]]= 0;mxAutoSaveManager[_0xd587[202]][_0xd587[1184]]= 0;mxAutoSaveManager[_0xd587[202]][_0xd587[984]]= !0;mxAutoSaveManager[_0xd587[202]][_0xd587[1176]]= null;mxAutoSaveManager[_0xd587[202]][_0xd587[994]]= function(){return this[_0xd587[984]]};mxAutoSaveManager[_0xd587[202]][_0xd587[995]]= function(_0x5c29x2){this[_0xd587[984]]= _0x5c29x2};mxAutoSaveManager[_0xd587[202]][_0xd587[1178]]= function(_0x5c29x2){null!= this[_0xd587[1179]]&& this[_0xd587[1179]][_0xd587[502]]()[_0xd587[745]](this[_0xd587[1176]]);this[_0xd587[1179]]= _0x5c29x2;null!= this[_0xd587[1179]]&& this[_0xd587[1179]][_0xd587[502]]()[_0xd587[169]](mxEvent.CHANGE,this[_0xd587[1176]])};mxAutoSaveManager[_0xd587[202]][_0xd587[815]]= function(){};mxAutoSaveManager[_0xd587[202]][_0xd587[1177]]= function(_0x5c29x2){_0x5c29x2= (( new Date)[_0xd587[178]]()- this[_0xd587[1184]])/ 1E3;_0x5c29x2> this[_0xd587[1180]]|| this[_0xd587[1183]]>= this[_0xd587[1182]]&& _0x5c29x2> this[_0xd587[1181]]?(this[_0xd587[815]](),this[_0xd587[862]]()):this[_0xd587[1183]]++};mxAutoSaveManager[_0xd587[202]][_0xd587[862]]= function(){this[_0xd587[1184]]= ( new Date)[_0xd587[178]]();this[_0xd587[1183]]= 0};mxAutoSaveManager[_0xd587[202]][_0xd587[515]]= function(){this[_0xd587[1178]](null)};function mxAnimation(_0x5c29x2){this[_0xd587[1140]]= null!= _0x5c29x2?_0x5c29x2:20}mxAnimation[_0xd587[202]]= new mxEventSource;mxAnimation[_0xd587[202]][_0xd587[196]]= mxAnimation;mxAnimation[_0xd587[202]][_0xd587[1140]]= null;mxAnimation[_0xd587[202]][_0xd587[1123]]= null;mxAnimation[_0xd587[202]][_0xd587[1185]]= function(){null== this[_0xd587[1123]]&& (this[_0xd587[1123]]= window[_0xd587[1141]](mxUtils[_0xd587[885]](this,this[_0xd587[1186]]),this[_0xd587[1140]]))};mxAnimation[_0xd587[202]][_0xd587[1186]]= function(){this[_0xd587[746]]( new mxEventObject(mxEvent.EXECUTE))};mxAnimation[_0xd587[202]][_0xd587[1187]]= function(){null!= this[_0xd587[1123]]&& (window[_0xd587[1146]](this[_0xd587[1123]]),this[_0xd587[1123]]= null,this[_0xd587[746]]( new mxEventObject(mxEvent.DONE)))};function mxMorphing(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){mxAnimation[_0xd587[239]](this,_0x5c29x5);this[_0xd587[1179]]= _0x5c29x2;this[_0xd587[1188]]= null!= _0x5c29x3?_0x5c29x3:6;this[_0xd587[1189]]= null!= _0x5c29x4?_0x5c29x4:1.5}mxMorphing[_0xd587[202]]= new mxAnimation;mxMorphing[_0xd587[202]][_0xd587[196]]= mxMorphing;mxMorphing[_0xd587[202]][_0xd587[1179]]= null;mxMorphing[_0xd587[202]][_0xd587[1188]]= null;mxMorphing[_0xd587[202]][_0xd587[1190]]= 0;mxMorphing[_0xd587[202]][_0xd587[1189]]= null;mxMorphing[_0xd587[202]][_0xd587[895]]= null;mxMorphing[_0xd587[202]][_0xd587[1186]]= function(){var _0x5c29x2= new mxCellStatePreview(this[_0xd587[1179]]);if(null!= this[_0xd587[895]]){for(var _0x5c29x3=0;_0x5c29x3< this[_0xd587[895]][_0xd587[67]];_0x5c29x3++){this[_0xd587[1191]](cells[_0x5c29x3],_0x5c29x2,!1)}}else {this[_0xd587[1191]](this[_0xd587[1179]][_0xd587[502]]()[_0xd587[501]](),_0x5c29x2,!0)};this[_0xd587[539]](_0x5c29x2);(_0x5c29x2[_0xd587[1107]]()|| this[_0xd587[1190]]++ >= this[_0xd587[1188]])&& this[_0xd587[1187]]()};mxMorphing[_0xd587[202]][_0xd587[539]]= function(_0x5c29x2){_0x5c29x2[_0xd587[539]]()};mxMorphing[_0xd587[202]][_0xd587[1191]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){var _0x5c29x5=this[_0xd587[1179]][_0xd587[249]]()[_0xd587[248]](_0x5c29x2),_0x5c29x9=null;if(null!= _0x5c29x5&& (_0x5c29x9= this[_0xd587[1192]](_0x5c29x5),this[_0xd587[1179]][_0xd587[502]]()[_0xd587[1193]](_0x5c29x2)&& (0!= _0x5c29x9[_0xd587[235]]|| 0!= _0x5c29x9[_0xd587[236]]))){var _0x5c29xa=this[_0xd587[1179]][_0xd587[441]][_0xd587[512]](),_0x5c29x12=this[_0xd587[1179]][_0xd587[441]][_0xd587[518]]();_0x5c29x9[_0xd587[235]]+= _0x5c29xa[_0xd587[235]]* _0x5c29x12;_0x5c29x9[_0xd587[236]]+= _0x5c29xa[_0xd587[236]]* _0x5c29x12;_0x5c29x3[_0xd587[1194]](_0x5c29x5,-_0x5c29x9[_0xd587[235]]/ this[_0xd587[1189]],-_0x5c29x9[_0xd587[236]]/ this[_0xd587[1189]])};if(_0x5c29x4&& !this[_0xd587[1195]](_0x5c29x5,_0x5c29x9)){_0x5c29x5= this[_0xd587[1179]][_0xd587[502]]()[_0xd587[262]](_0x5c29x2);for(_0x5c29x9= 0;_0x5c29x9< _0x5c29x5;_0x5c29x9++){this[_0xd587[1191]](this[_0xd587[1179]][_0xd587[502]]()[_0xd587[263]](_0x5c29x2,_0x5c29x9),_0x5c29x3,_0x5c29x4)}}};mxMorphing[_0xd587[202]][_0xd587[1195]]= function(_0x5c29x2,_0x5c29x3){return null!= _0x5c29x3&& (0!= _0x5c29x3[_0xd587[235]]|| 0!= _0x5c29x3[_0xd587[236]])};mxMorphing[_0xd587[202]][_0xd587[1192]]= function(_0x5c29x2){var _0x5c29x3=this[_0xd587[1196]](_0x5c29x2[_0xd587[246]]),_0x5c29x4=this[_0xd587[1179]][_0xd587[249]]()[_0xd587[512]](),_0x5c29x5=this[_0xd587[1179]][_0xd587[249]]()[_0xd587[518]]();_0x5c29x2= new mxPoint(_0x5c29x2[_0xd587[235]]/ _0x5c29x5- _0x5c29x4[_0xd587[235]],_0x5c29x2[_0xd587[236]]/ _0x5c29x5- _0x5c29x4[_0xd587[236]]);return new mxPoint((_0x5c29x3[_0xd587[235]]- _0x5c29x2[_0xd587[235]])* _0x5c29x5,(_0x5c29x3[_0xd587[236]]- _0x5c29x2[_0xd587[236]])* _0x5c29x5)};mxMorphing[_0xd587[202]][_0xd587[1196]]= function(_0x5c29x2){var _0x5c29x3=null;null!= _0x5c29x2&& (_0x5c29x3= this[_0xd587[1196]](this[_0xd587[1179]][_0xd587[502]]()[_0xd587[1197]](_0x5c29x2)),_0x5c29x2= this[_0xd587[1179]][_0xd587[1198]](_0x5c29x2),null!= _0x5c29x2&& (_0x5c29x3[_0xd587[235]]+= _0x5c29x2[_0xd587[235]],_0x5c29x3[_0xd587[236]]+= _0x5c29x2[_0xd587[236]]));null== _0x5c29x3&& (_0x5c29x3= this[_0xd587[1179]][_0xd587[441]][_0xd587[512]](),_0x5c29x3= new mxPoint(-_0x5c29x3[_0xd587[235]],-_0x5c29x3[_0xd587[236]]));return _0x5c29x3};function mxImageBundle(_0x5c29x2){this[_0xd587[1199]]= [];this[_0xd587[1200]]= null!= _0x5c29x2?_0x5c29x2:!1}mxImageBundle[_0xd587[202]][_0xd587[1199]]= null;mxImageBundle[_0xd587[202]][_0xd587[1199]]= null;mxImageBundle[_0xd587[202]][_0xd587[1201]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){this[_0xd587[1199]][_0x5c29x2]= {value:_0x5c29x3,fallback:_0x5c29x4}};mxImageBundle[_0xd587[202]][_0xd587[1202]]= function(_0x5c29x2){var _0x5c29x3=null;null!= _0x5c29x2&& (_0x5c29x2= this[_0xd587[1199]][_0x5c29x2],null!= _0x5c29x2&& (_0x5c29x3= this[_0xd587[1200]]?_0x5c29x2[_0xd587[1203]]:_0x5c29x2[_0xd587[131]]));return _0x5c29x3};function mxImageExport(){}mxImageExport[_0xd587[202]][_0xd587[1204]]= !1;mxImageExport[_0xd587[202]][_0xd587[1205]]= function(_0x5c29x2,_0x5c29x3){null!= _0x5c29x2&& (this[_0xd587[1207]](_0x5c29x2,_0x5c29x3,this[_0xd587[1206]]),this[_0xd587[1204]]&& this[_0xd587[1207]](_0x5c29x2,_0x5c29x3,this[_0xd587[1208]]))};mxImageExport[_0xd587[202]][_0xd587[1207]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){if(null!= _0x5c29x2){_0x5c29x4(_0x5c29x2,_0x5c29x3);for(var _0x5c29x5=_0x5c29x2[_0xd587[441]][_0xd587[1179]],_0x5c29x9=_0x5c29x5[_0xd587[251]][_0xd587[262]](_0x5c29x2[_0xd587[246]]),_0x5c29xa=0;_0x5c29xa< _0x5c29x9;_0x5c29xa++){var _0x5c29x12=_0x5c29x5[_0xd587[441]][_0xd587[248]](_0x5c29x5[_0xd587[251]][_0xd587[263]](_0x5c29x2[_0xd587[246]],_0x5c29xa));this[_0xd587[1207]](_0x5c29x12,_0x5c29x3,_0x5c29x4)}}};mxImageExport[_0xd587[202]][_0xd587[1206]]= function(_0x5c29x2,_0x5c29x3){_0x5c29x2[_0xd587[253]] instanceof mxShape&& (_0x5c29x3[_0xd587[815]](),_0x5c29x2[_0xd587[253]][_0xd587[1209]](_0x5c29x3),_0x5c29x3[_0xd587[1210]]());null!= _0x5c29x2[_0xd587[963]]&& (_0x5c29x3[_0xd587[815]](),_0x5c29x2[_0xd587[963]][_0xd587[1209]](_0x5c29x3),_0x5c29x3[_0xd587[1210]]())};mxImageExport[_0xd587[202]][_0xd587[1208]]= function(_0x5c29x2,_0x5c29x3){null!= _0x5c29x2[_0xd587[1211]]&& _0x5c29x2[_0xd587[1211]][_0xd587[209]](function(_0x5c29x2,_0x5c29x5){_0x5c29x5 instanceof mxShape&& _0x5c29x5[_0xd587[1209]](_0x5c29x3)})};function mxAbstractCanvas2D(){this[_0xd587[1212]]= this[_0xd587[1213]]();this[_0xd587[862]]()}mxAbstractCanvas2D[_0xd587[202]][_0xd587[724]]= null;mxAbstractCanvas2D[_0xd587[202]][_0xd587[1214]]= null;mxAbstractCanvas2D[_0xd587[202]][_0xd587[1215]]= null;mxAbstractCanvas2D[_0xd587[202]][_0xd587[1216]]= !0;mxAbstractCanvas2D[_0xd587[202]][_0xd587[1217]]= 0;mxAbstractCanvas2D[_0xd587[202]][_0xd587[1218]]= 0;mxAbstractCanvas2D[_0xd587[202]][_0xd587[1219]]= _0xd587[1220];mxAbstractCanvas2D[_0xd587[202]][_0xd587[1221]]= _0xd587[1222];mxAbstractCanvas2D[_0xd587[202]][_0xd587[1223]]= _0xd587[1224];mxAbstractCanvas2D[_0xd587[202]][_0xd587[1225]]= _0xd587[1226];mxAbstractCanvas2D[_0xd587[202]][_0xd587[1227]]= _0xd587[1228];mxAbstractCanvas2D[_0xd587[202]][_0xd587[1229]]= !1;mxAbstractCanvas2D[_0xd587[202]][_0xd587[1213]]= function(){return new mxUrlConverter};mxAbstractCanvas2D[_0xd587[202]][_0xd587[862]]= function(){this[_0xd587[724]]= this[_0xd587[1230]]();this[_0xd587[1214]]= []};mxAbstractCanvas2D[_0xd587[202]][_0xd587[1230]]= function(){return {dx:0,dy:0,scale:1,alpha:1,fillColor:null,fillAlpha:1,gradientColor:null,gradientAlpha:1,gradientDirection:null,strokeColor:null,strokeWidth:1,dashed:!1,dashPattern:_0xd587[1231],lineCap:_0xd587[1232],lineJoin:_0xd587[1233],miterLimit:10,fontColor:_0xd587[1234],fontBackgroundColor:null,fontBorderColor:null,fontSize:mxConstants[_0xd587[483]],fontFamily:mxConstants[_0xd587[484]],fontStyle:0,shadow:!1,shadowColor:mxConstants[_0xd587[1235]],shadowAlpha:mxConstants[_0xd587[1236]],shadowDx:mxConstants[_0xd587[1237]],shadowDy:mxConstants[_0xd587[1238]],rotation:0,rotationCx:0,rotationCy:0}};mxAbstractCanvas2D[_0xd587[202]][_0xd587[1239]]= function(_0x5c29x2){return Math[_0xd587[488]](parseFloat(_0x5c29x2))};mxAbstractCanvas2D[_0xd587[202]][_0xd587[1240]]= function(){if(null!= this[_0xd587[1215]]&& (this[_0xd587[1215]][_0xd587[207]](arguments[0]),2< arguments[_0xd587[67]])){for(var _0x5c29x2=this[_0xd587[724]],_0x5c29x3=2;_0x5c29x3< arguments[_0xd587[67]];_0x5c29x3+= 2){this[_0xd587[1217]]= arguments[_0x5c29x3- 1],this[_0xd587[1218]]= arguments[_0x5c29x3],this[_0xd587[1215]][_0xd587[207]](this[_0xd587[1239]]((this[_0xd587[1217]]+ _0x5c29x2[_0xd587[1126]])* _0x5c29x2[_0xd587[255]])),this[_0xd587[1215]][_0xd587[207]](this[_0xd587[1239]]((this[_0xd587[1218]]+ _0x5c29x2[_0xd587[1125]])* _0x5c29x2[_0xd587[255]]))}}};mxAbstractCanvas2D[_0xd587[202]][_0xd587[1241]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){_0x5c29x4*= Math[_0xd587[424]]/ 180;return mxUtils[_0xd587[432]]( new mxPoint(_0x5c29x2,_0x5c29x3),Math[_0xd587[426]](_0x5c29x4),Math[_0xd587[427]](_0x5c29x4), new mxPoint(_0x5c29x5,_0x5c29x9))};mxAbstractCanvas2D[_0xd587[202]][_0xd587[815]]= function(){this[_0xd587[1214]][_0xd587[207]](this[_0xd587[724]]);this[_0xd587[724]]= mxUtils[_0xd587[238]](this[_0xd587[724]])};mxAbstractCanvas2D[_0xd587[202]][_0xd587[1210]]= function(){this[_0xd587[724]]= this[_0xd587[1214]][_0xd587[1242]]()};mxAbstractCanvas2D[_0xd587[202]][_0xd587[255]]= function(_0x5c29x2){this[_0xd587[724]][_0xd587[255]]*= _0x5c29x2;this[_0xd587[724]][_0xd587[610]]*= _0x5c29x2};mxAbstractCanvas2D[_0xd587[202]][_0xd587[513]]= function(_0x5c29x2,_0x5c29x3){this[_0xd587[724]][_0xd587[1126]]+= _0x5c29x2;this[_0xd587[724]][_0xd587[1125]]+= _0x5c29x3};mxAbstractCanvas2D[_0xd587[202]][_0xd587[1243]]= function(_0x5c29x2){this[_0xd587[724]][_0xd587[1244]]= _0x5c29x2};mxAbstractCanvas2D[_0xd587[202]][_0xd587[1245]]= function(_0x5c29x2){_0x5c29x2== mxConstants[_0xd587[217]]&& (_0x5c29x2= null);this[_0xd587[724]][_0xd587[604]]= _0x5c29x2;this[_0xd587[724]][_0xd587[606]]= null};mxAbstractCanvas2D[_0xd587[202]][_0xd587[1246]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa,_0x5c29x12,_0x5c29x13,_0x5c29x14){_0x5c29x4= this[_0xd587[724]];_0x5c29x4[_0xd587[604]]= _0x5c29x2;_0x5c29x4[_0xd587[1247]]= null!= _0x5c29x13?_0x5c29x13:1;_0x5c29x4[_0xd587[606]]= _0x5c29x3;_0x5c29x4[_0xd587[1248]]= null!= _0x5c29x14?_0x5c29x14:1;_0x5c29x4[_0xd587[607]]= _0x5c29x12};mxAbstractCanvas2D[_0xd587[202]][_0xd587[1249]]= function(_0x5c29x2){_0x5c29x2== mxConstants[_0xd587[217]]&& (_0x5c29x2= null);this[_0xd587[724]][_0xd587[608]]= _0x5c29x2};mxAbstractCanvas2D[_0xd587[202]][_0xd587[1250]]= function(_0x5c29x2){this[_0xd587[724]][_0xd587[610]]= _0x5c29x2};mxAbstractCanvas2D[_0xd587[202]][_0xd587[1251]]= function(_0x5c29x2){this[_0xd587[724]][_0xd587[648]]= _0x5c29x2};mxAbstractCanvas2D[_0xd587[202]][_0xd587[1252]]= function(_0x5c29x2){this[_0xd587[724]][_0xd587[649]]= _0x5c29x2};mxAbstractCanvas2D[_0xd587[202]][_0xd587[1253]]= function(_0x5c29x2){this[_0xd587[724]][_0xd587[1254]]= _0x5c29x2};mxAbstractCanvas2D[_0xd587[202]][_0xd587[1255]]= function(_0x5c29x2){this[_0xd587[724]][_0xd587[1256]]= _0x5c29x2};mxAbstractCanvas2D[_0xd587[202]][_0xd587[1257]]= function(_0x5c29x2){this[_0xd587[724]][_0xd587[1258]]= _0x5c29x2};mxAbstractCanvas2D[_0xd587[202]][_0xd587[1259]]= function(_0x5c29x2){_0x5c29x2== mxConstants[_0xd587[217]]&& (_0x5c29x2= null);this[_0xd587[724]][_0xd587[665]]= _0x5c29x2};mxAbstractCanvas2D[_0xd587[202]][_0xd587[1260]]= function(_0x5c29x2){_0x5c29x2== mxConstants[_0xd587[217]]&& (_0x5c29x2= null);this[_0xd587[724]][_0xd587[1261]]= _0x5c29x2};mxAbstractCanvas2D[_0xd587[202]][_0xd587[1262]]= function(_0x5c29x2){_0x5c29x2== mxConstants[_0xd587[217]]&& (_0x5c29x2= null);this[_0xd587[724]][_0xd587[1263]]= _0x5c29x2};mxAbstractCanvas2D[_0xd587[202]][_0xd587[1264]]= function(_0x5c29x2){this[_0xd587[724]][_0xd587[487]]= _0x5c29x2};mxAbstractCanvas2D[_0xd587[202]][_0xd587[1265]]= function(_0x5c29x2){this[_0xd587[724]][_0xd587[486]]= _0x5c29x2};mxAbstractCanvas2D[_0xd587[202]][_0xd587[1266]]= function(_0x5c29x2){null== _0x5c29x2&& (_0x5c29x2= 0);this[_0xd587[724]][_0xd587[666]]= _0x5c29x2};mxAbstractCanvas2D[_0xd587[202]][_0xd587[1267]]= function(_0x5c29x2){this[_0xd587[724]][_0xd587[639]]= _0x5c29x2};mxAbstractCanvas2D[_0xd587[202]][_0xd587[1268]]= function(_0x5c29x2){_0x5c29x2== mxConstants[_0xd587[217]]&& (_0x5c29x2= null);this[_0xd587[724]][_0xd587[1269]]= _0x5c29x2};mxAbstractCanvas2D[_0xd587[202]][_0xd587[1270]]= function(_0x5c29x2){this[_0xd587[724]][_0xd587[1271]]= _0x5c29x2};mxAbstractCanvas2D[_0xd587[202]][_0xd587[1272]]= function(_0x5c29x2,_0x5c29x3){this[_0xd587[724]][_0xd587[1273]]= _0x5c29x2;this[_0xd587[724]][_0xd587[1274]]= _0x5c29x3};mxAbstractCanvas2D[_0xd587[202]][_0xd587[1275]]= function(){this[_0xd587[1218]]= this[_0xd587[1217]]= 0;this[_0xd587[1215]]= []};mxAbstractCanvas2D[_0xd587[202]][_0xd587[1276]]= function(_0x5c29x2,_0x5c29x3){this[_0xd587[1240]](this[_0xd587[1219]],_0x5c29x2,_0x5c29x3)};mxAbstractCanvas2D[_0xd587[202]][_0xd587[1277]]= function(_0x5c29x2,_0x5c29x3){this[_0xd587[1240]](this[_0xd587[1221]],_0x5c29x2,_0x5c29x3)};mxAbstractCanvas2D[_0xd587[202]][_0xd587[1278]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){this[_0xd587[1240]](this[_0xd587[1223]],_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5)};mxAbstractCanvas2D[_0xd587[202]][_0xd587[1279]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa){this[_0xd587[1240]](this[_0xd587[1225]],_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa)};mxAbstractCanvas2D[_0xd587[202]][_0xd587[1280]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa,_0x5c29x12){_0x5c29x2= mxUtils[_0xd587[1281]](this[_0xd587[1217]],this[_0xd587[1218]],_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa,_0x5c29x12);for(_0x5c29x3= 0;_0x5c29x3< _0x5c29x2[_0xd587[67]];_0x5c29x3+= 6){this[_0xd587[1279]](_0x5c29x2[_0x5c29x3],_0x5c29x2[_0x5c29x3+ 1],_0x5c29x2[_0x5c29x3+ 2],_0x5c29x2[_0x5c29x3+ 3],_0x5c29x2[_0x5c29x3+ 4],_0x5c29x2[_0x5c29x3+ 5])}};mxAbstractCanvas2D[_0xd587[202]][_0xd587[268]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa){this[_0xd587[1240]](this[_0xd587[1227]])};mxAbstractCanvas2D[_0xd587[202]][_0xd587[1282]]= function(){};function mxXmlCanvas2D(_0x5c29x2){mxAbstractCanvas2D[_0xd587[239]](this);this[_0xd587[813]]= _0x5c29x2;this[_0xd587[1283]]()}mxUtils[_0xd587[1284]](mxXmlCanvas2D,mxAbstractCanvas2D);mxXmlCanvas2D[_0xd587[202]][_0xd587[1285]]= !0;mxXmlCanvas2D[_0xd587[202]][_0xd587[1286]]= !0;mxXmlCanvas2D[_0xd587[202]][_0xd587[1283]]= function(){var _0x5c29x2;_0x5c29x2= this[_0xd587[55]](_0xd587[1287]);_0x5c29x2[_0xd587[57]](_0xd587[1288],mxConstants.DEFAULT_FONTFAMILY);this[_0xd587[813]][_0xd587[62]](_0x5c29x2);_0x5c29x2= this[_0xd587[55]](_0xd587[1289]);_0x5c29x2[_0xd587[57]](_0xd587[803],mxConstants.DEFAULT_FONTSIZE);this[_0xd587[813]][_0xd587[62]](_0x5c29x2);_0x5c29x2= this[_0xd587[55]](_0xd587[1290]);_0x5c29x2[_0xd587[57]](_0xd587[352],mxConstants.SHADOWCOLOR);this[_0xd587[813]][_0xd587[62]](_0x5c29x2);_0x5c29x2= this[_0xd587[55]](_0xd587[1291]);_0x5c29x2[_0xd587[57]](_0xd587[1244],mxConstants.SHADOW_OPACITY);this[_0xd587[813]][_0xd587[62]](_0x5c29x2);_0x5c29x2= this[_0xd587[55]](_0xd587[1292]);_0x5c29x2[_0xd587[57]](_0xd587[1126],mxConstants.SHADOW_OFFSET_X);_0x5c29x2[_0xd587[57]](_0xd587[1125],mxConstants.SHADOW_OFFSET_Y);this[_0xd587[813]][_0xd587[62]](_0x5c29x2)};mxXmlCanvas2D[_0xd587[202]][_0xd587[1239]]= function(_0x5c29x2){return parseFloat(parseFloat(_0x5c29x2)[_0xd587[1293]](2))};mxXmlCanvas2D[_0xd587[202]][_0xd587[55]]= function(_0x5c29x2){return this[_0xd587[813]][_0xd587[295]][_0xd587[55]](_0x5c29x2)};mxXmlCanvas2D[_0xd587[202]][_0xd587[815]]= function(){this[_0xd587[1286]]&& mxAbstractCanvas2D[_0xd587[202]][_0xd587[815]][_0xd587[183]](this,arguments);this[_0xd587[813]][_0xd587[62]](this[_0xd587[55]](_0xd587[815]))};mxXmlCanvas2D[_0xd587[202]][_0xd587[1210]]= function(){this[_0xd587[1286]]&& mxAbstractCanvas2D[_0xd587[202]][_0xd587[1210]][_0xd587[183]](this,arguments);this[_0xd587[813]][_0xd587[62]](this[_0xd587[55]](_0xd587[1210]))};mxXmlCanvas2D[_0xd587[202]][_0xd587[255]]= function(_0x5c29x2){if(this[_0xd587[1286]]){if(this[_0xd587[724]][_0xd587[255]]== _0x5c29x2){return};mxAbstractCanvas2D[_0xd587[202]][_0xd587[1243]][_0xd587[183]](this,arguments)};var _0x5c29x3=this[_0xd587[55]](_0xd587[255]);_0x5c29x3[_0xd587[57]](_0xd587[255],_0x5c29x2);this[_0xd587[813]][_0xd587[62]](_0x5c29x3)};mxXmlCanvas2D[_0xd587[202]][_0xd587[513]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=this[_0xd587[55]](_0xd587[513]);_0x5c29x4[_0xd587[57]](_0xd587[1126],this[_0xd587[1239]](_0x5c29x2));_0x5c29x4[_0xd587[57]](_0xd587[1125],this[_0xd587[1239]](_0x5c29x3));this[_0xd587[813]][_0xd587[62]](_0x5c29x4)};mxXmlCanvas2D[_0xd587[202]][_0xd587[1294]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){var _0x5c29xa=this[_0xd587[55]](_0xd587[1294]);if(0!= _0x5c29x2|| _0x5c29x3|| _0x5c29x4){_0x5c29xa[_0xd587[57]](_0xd587[1295],this[_0xd587[1239]](_0x5c29x2)),_0x5c29xa[_0xd587[57]](_0xd587[623],_0x5c29x3?_0xd587[500]:_0xd587[468]),_0x5c29xa[_0xd587[57]](_0xd587[624],_0x5c29x4?_0xd587[500]:_0xd587[468]),_0x5c29xa[_0xd587[57]](_0xd587[1296],this[_0xd587[1239]](_0x5c29x5)),_0x5c29xa[_0xd587[57]](_0xd587[1297],this[_0xd587[1239]](_0x5c29x9)),this[_0xd587[813]][_0xd587[62]](_0x5c29xa)}};mxXmlCanvas2D[_0xd587[202]][_0xd587[1243]]= function(_0x5c29x2){if(this[_0xd587[1286]]){if(this[_0xd587[724]][_0xd587[1244]]== _0x5c29x2){return};mxAbstractCanvas2D[_0xd587[202]][_0xd587[1243]][_0xd587[183]](this,arguments)};var _0x5c29x3=this[_0xd587[55]](_0xd587[1244]);_0x5c29x3[_0xd587[57]](_0xd587[1244],this[_0xd587[1239]](_0x5c29x2));this[_0xd587[813]][_0xd587[62]](_0x5c29x3)};mxXmlCanvas2D[_0xd587[202]][_0xd587[1245]]= function(_0x5c29x2){_0x5c29x2== mxConstants[_0xd587[217]]&& (_0x5c29x2= null);if(this[_0xd587[1286]]){if(this[_0xd587[724]][_0xd587[604]]== _0x5c29x2){return};mxAbstractCanvas2D[_0xd587[202]][_0xd587[1245]][_0xd587[183]](this,arguments)};var _0x5c29x3=this[_0xd587[55]](_0xd587[1298]);_0x5c29x3[_0xd587[57]](_0xd587[352],null!= _0x5c29x2?_0x5c29x2:mxConstants[_0xd587[217]]);this[_0xd587[813]][_0xd587[62]](_0x5c29x3)};mxXmlCanvas2D[_0xd587[202]][_0xd587[1246]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa,_0x5c29x12,_0x5c29x13,_0x5c29x14){if(null!= _0x5c29x2&& null!= _0x5c29x3){mxAbstractCanvas2D[_0xd587[202]][_0xd587[1246]][_0xd587[183]](this,arguments);var _0x5c29x15=this[_0xd587[55]](_0xd587[1299]);_0x5c29x15[_0xd587[57]](_0xd587[1300],_0x5c29x2);_0x5c29x15[_0xd587[57]](_0xd587[1301],_0x5c29x3);_0x5c29x15[_0xd587[57]](_0xd587[235],this[_0xd587[1239]](_0x5c29x4));_0x5c29x15[_0xd587[57]](_0xd587[236],this[_0xd587[1239]](_0x5c29x5));_0x5c29x15[_0xd587[57]](_0xd587[1302],this[_0xd587[1239]](_0x5c29x9));_0x5c29x15[_0xd587[57]](_0xd587[1303],this[_0xd587[1239]](_0x5c29xa));null!= _0x5c29x12&& _0x5c29x15[_0xd587[57]](_0xd587[663],_0x5c29x12);null!= _0x5c29x13&& _0x5c29x15[_0xd587[57]](_0xd587[1304],_0x5c29x13);null!= _0x5c29x14&& _0x5c29x15[_0xd587[57]](_0xd587[1305],_0x5c29x14);this[_0xd587[813]][_0xd587[62]](_0x5c29x15)}};mxXmlCanvas2D[_0xd587[202]][_0xd587[1249]]= function(_0x5c29x2){_0x5c29x2== mxConstants[_0xd587[217]]&& (_0x5c29x2= null);if(this[_0xd587[1286]]){if(this[_0xd587[724]][_0xd587[608]]== _0x5c29x2){return};mxAbstractCanvas2D[_0xd587[202]][_0xd587[1249]][_0xd587[183]](this,arguments)};var _0x5c29x3=this[_0xd587[55]](_0xd587[1306]);_0x5c29x3[_0xd587[57]](_0xd587[352],null!= _0x5c29x2?_0x5c29x2:mxConstants[_0xd587[217]]);this[_0xd587[813]][_0xd587[62]](_0x5c29x3)};mxXmlCanvas2D[_0xd587[202]][_0xd587[1250]]= function(_0x5c29x2){if(this[_0xd587[1286]]){if(this[_0xd587[724]][_0xd587[610]]== _0x5c29x2){return};mxAbstractCanvas2D[_0xd587[202]][_0xd587[1250]][_0xd587[183]](this,arguments)};var _0x5c29x3=this[_0xd587[55]](_0xd587[1307]);_0x5c29x3[_0xd587[57]](_0xd587[117],this[_0xd587[1239]](_0x5c29x2));this[_0xd587[813]][_0xd587[62]](_0x5c29x3)};mxXmlCanvas2D[_0xd587[202]][_0xd587[1251]]= function(_0x5c29x2){if(this[_0xd587[1286]]){if(this[_0xd587[724]][_0xd587[648]]== _0x5c29x2){return};mxAbstractCanvas2D[_0xd587[202]][_0xd587[1251]][_0xd587[183]](this,arguments)};var _0x5c29x3=this[_0xd587[55]](_0xd587[648]);_0x5c29x3[_0xd587[57]](_0xd587[648],_0x5c29x2?_0xd587[500]:_0xd587[468]);this[_0xd587[813]][_0xd587[62]](_0x5c29x3)};mxXmlCanvas2D[_0xd587[202]][_0xd587[1252]]= function(_0x5c29x2){if(this[_0xd587[1286]]){if(this[_0xd587[724]][_0xd587[649]]== _0x5c29x2){return};mxAbstractCanvas2D[_0xd587[202]][_0xd587[1252]][_0xd587[183]](this,arguments)};var _0x5c29x3=this[_0xd587[55]](_0xd587[1308]);_0x5c29x3[_0xd587[57]](_0xd587[1309],_0x5c29x2);this[_0xd587[813]][_0xd587[62]](_0x5c29x3)};mxXmlCanvas2D[_0xd587[202]][_0xd587[1253]]= function(_0x5c29x2){if(this[_0xd587[1286]]){if(this[_0xd587[724]][_0xd587[1254]]== _0x5c29x2){return};mxAbstractCanvas2D[_0xd587[202]][_0xd587[1253]][_0xd587[183]](this,arguments)};var _0x5c29x3=this[_0xd587[55]](_0xd587[1310]);_0x5c29x3[_0xd587[57]](_0xd587[1311],_0x5c29x2);this[_0xd587[813]][_0xd587[62]](_0x5c29x3)};mxXmlCanvas2D[_0xd587[202]][_0xd587[1255]]= function(_0x5c29x2){if(this[_0xd587[1286]]){if(this[_0xd587[724]][_0xd587[1256]]== _0x5c29x2){return};mxAbstractCanvas2D[_0xd587[202]][_0xd587[1255]][_0xd587[183]](this,arguments)};var _0x5c29x3=this[_0xd587[55]](_0xd587[1312]);_0x5c29x3[_0xd587[57]](_0xd587[234],_0x5c29x2);this[_0xd587[813]][_0xd587[62]](_0x5c29x3)};mxXmlCanvas2D[_0xd587[202]][_0xd587[1257]]= function(_0x5c29x2){if(this[_0xd587[1286]]){if(this[_0xd587[724]][_0xd587[1258]]== _0x5c29x2){return};mxAbstractCanvas2D[_0xd587[202]][_0xd587[1257]][_0xd587[183]](this,arguments)};var _0x5c29x3=this[_0xd587[55]](_0xd587[1313]);_0x5c29x3[_0xd587[57]](_0xd587[1314],_0x5c29x2);this[_0xd587[813]][_0xd587[62]](_0x5c29x3)};mxXmlCanvas2D[_0xd587[202]][_0xd587[1259]]= function(_0x5c29x2){if(this[_0xd587[1285]]){_0x5c29x2== mxConstants[_0xd587[217]]&& (_0x5c29x2= null);if(this[_0xd587[1286]]){if(this[_0xd587[724]][_0xd587[665]]== _0x5c29x2){return};mxAbstractCanvas2D[_0xd587[202]][_0xd587[1259]][_0xd587[183]](this,arguments)};var _0x5c29x3=this[_0xd587[55]](_0xd587[1315]);_0x5c29x3[_0xd587[57]](_0xd587[352],null!= _0x5c29x2?_0x5c29x2:mxConstants[_0xd587[217]]);this[_0xd587[813]][_0xd587[62]](_0x5c29x3)}};mxXmlCanvas2D[_0xd587[202]][_0xd587[1260]]= function(_0x5c29x2){if(this[_0xd587[1285]]){_0x5c29x2== mxConstants[_0xd587[217]]&& (_0x5c29x2= null);if(this[_0xd587[1286]]){if(this[_0xd587[724]][_0xd587[1261]]== _0x5c29x2){return};mxAbstractCanvas2D[_0xd587[202]][_0xd587[1260]][_0xd587[183]](this,arguments)};var _0x5c29x3=this[_0xd587[55]](_0xd587[1316]);_0x5c29x3[_0xd587[57]](_0xd587[352],null!= _0x5c29x2?_0x5c29x2:mxConstants[_0xd587[217]]);this[_0xd587[813]][_0xd587[62]](_0x5c29x3)}};mxXmlCanvas2D[_0xd587[202]][_0xd587[1262]]= function(_0x5c29x2){if(this[_0xd587[1285]]){_0x5c29x2== mxConstants[_0xd587[217]]&& (_0x5c29x2= null);if(this[_0xd587[1286]]){if(this[_0xd587[724]][_0xd587[1263]]== _0x5c29x2){return};mxAbstractCanvas2D[_0xd587[202]][_0xd587[1262]][_0xd587[183]](this,arguments)};var _0x5c29x3=this[_0xd587[55]](_0xd587[1317]);_0x5c29x3[_0xd587[57]](_0xd587[352],null!= _0x5c29x2?_0x5c29x2:mxConstants[_0xd587[217]]);this[_0xd587[813]][_0xd587[62]](_0x5c29x3)}};mxXmlCanvas2D[_0xd587[202]][_0xd587[1264]]= function(_0x5c29x2){if(this[_0xd587[1285]]){if(this[_0xd587[1286]]){if(this[_0xd587[724]][_0xd587[487]]== _0x5c29x2){return};mxAbstractCanvas2D[_0xd587[202]][_0xd587[1264]][_0xd587[183]](this,arguments)};var _0x5c29x3=this[_0xd587[55]](_0xd587[1289]);_0x5c29x3[_0xd587[57]](_0xd587[803],_0x5c29x2);this[_0xd587[813]][_0xd587[62]](_0x5c29x3)}};mxXmlCanvas2D[_0xd587[202]][_0xd587[1265]]= function(_0x5c29x2){if(this[_0xd587[1285]]){if(this[_0xd587[1286]]){if(this[_0xd587[724]][_0xd587[486]]== _0x5c29x2){return};mxAbstractCanvas2D[_0xd587[202]][_0xd587[1265]][_0xd587[183]](this,arguments)};var _0x5c29x3=this[_0xd587[55]](_0xd587[1287]);_0x5c29x3[_0xd587[57]](_0xd587[1288],_0x5c29x2);this[_0xd587[813]][_0xd587[62]](_0x5c29x3)}};mxXmlCanvas2D[_0xd587[202]][_0xd587[1266]]= function(_0x5c29x2){if(this[_0xd587[1285]]){null== _0x5c29x2&& (_0x5c29x2= 0);if(this[_0xd587[1286]]){if(this[_0xd587[724]][_0xd587[666]]== _0x5c29x2){return};mxAbstractCanvas2D[_0xd587[202]][_0xd587[1266]][_0xd587[183]](this,arguments)};var _0x5c29x3=this[_0xd587[55]](_0xd587[1318]);_0x5c29x3[_0xd587[57]](_0xd587[124],_0x5c29x2);this[_0xd587[813]][_0xd587[62]](_0x5c29x3)}};mxXmlCanvas2D[_0xd587[202]][_0xd587[1267]]= function(_0x5c29x2){if(this[_0xd587[1286]]){if(this[_0xd587[724]][_0xd587[639]]== _0x5c29x2){return};mxAbstractCanvas2D[_0xd587[202]][_0xd587[1267]][_0xd587[183]](this,arguments)};var _0x5c29x3=this[_0xd587[55]](_0xd587[639]);_0x5c29x3[_0xd587[57]](_0xd587[984],_0x5c29x2?_0xd587[500]:_0xd587[468]);this[_0xd587[813]][_0xd587[62]](_0x5c29x3)};mxXmlCanvas2D[_0xd587[202]][_0xd587[1268]]= function(_0x5c29x2){if(this[_0xd587[1286]]){_0x5c29x2== mxConstants[_0xd587[217]]&& (_0x5c29x2= null);if(this[_0xd587[724]][_0xd587[1269]]== _0x5c29x2){return};mxAbstractCanvas2D[_0xd587[202]][_0xd587[1268]][_0xd587[183]](this,arguments)};var _0x5c29x3=this[_0xd587[55]](_0xd587[1290]);_0x5c29x3[_0xd587[57]](_0xd587[352],null!= _0x5c29x2?_0x5c29x2:mxConstants[_0xd587[217]]);this[_0xd587[813]][_0xd587[62]](_0x5c29x3)};mxXmlCanvas2D[_0xd587[202]][_0xd587[1270]]= function(_0x5c29x2){if(this[_0xd587[1286]]){if(this[_0xd587[724]][_0xd587[1271]]== _0x5c29x2){return};mxAbstractCanvas2D[_0xd587[202]][_0xd587[1270]][_0xd587[183]](this,arguments)};var _0x5c29x3=this[_0xd587[55]](_0xd587[1291]);_0x5c29x3[_0xd587[57]](_0xd587[1244],_0x5c29x2);this[_0xd587[813]][_0xd587[62]](_0x5c29x3)};mxXmlCanvas2D[_0xd587[202]][_0xd587[1272]]= function(_0x5c29x2,_0x5c29x3){if(this[_0xd587[1286]]){if(this[_0xd587[724]][_0xd587[1273]]== _0x5c29x2&& this[_0xd587[724]][_0xd587[1274]]== _0x5c29x3){return};mxAbstractCanvas2D[_0xd587[202]][_0xd587[1272]][_0xd587[183]](this,arguments)};var _0x5c29x4=this[_0xd587[55]](_0xd587[1292]);_0x5c29x4[_0xd587[57]](_0xd587[1126],_0x5c29x2);_0x5c29x4[_0xd587[57]](_0xd587[1125],_0x5c29x3);this[_0xd587[813]][_0xd587[62]](_0x5c29x4)};mxXmlCanvas2D[_0xd587[202]][_0xd587[1319]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){var _0x5c29x9=this[_0xd587[55]](_0xd587[1319]);_0x5c29x9[_0xd587[57]](_0xd587[235],this[_0xd587[1239]](_0x5c29x2));_0x5c29x9[_0xd587[57]](_0xd587[236],this[_0xd587[1239]](_0x5c29x3));_0x5c29x9[_0xd587[57]](_0xd587[1302],this[_0xd587[1239]](_0x5c29x4));_0x5c29x9[_0xd587[57]](_0xd587[1303],this[_0xd587[1239]](_0x5c29x5));this[_0xd587[813]][_0xd587[62]](_0x5c29x9)};mxXmlCanvas2D[_0xd587[202]][_0xd587[1320]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa){var _0x5c29x12=this[_0xd587[55]](_0xd587[1320]);_0x5c29x12[_0xd587[57]](_0xd587[235],this[_0xd587[1239]](_0x5c29x2));_0x5c29x12[_0xd587[57]](_0xd587[236],this[_0xd587[1239]](_0x5c29x3));_0x5c29x12[_0xd587[57]](_0xd587[1302],this[_0xd587[1239]](_0x5c29x4));_0x5c29x12[_0xd587[57]](_0xd587[1303],this[_0xd587[1239]](_0x5c29x5));_0x5c29x12[_0xd587[57]](_0xd587[1126],this[_0xd587[1239]](_0x5c29x9));_0x5c29x12[_0xd587[57]](_0xd587[1125],this[_0xd587[1239]](_0x5c29xa));this[_0xd587[813]][_0xd587[62]](_0x5c29x12)};mxXmlCanvas2D[_0xd587[202]][_0xd587[680]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){var _0x5c29x9=this[_0xd587[55]](_0xd587[680]);_0x5c29x9[_0xd587[57]](_0xd587[235],this[_0xd587[1239]](_0x5c29x2));_0x5c29x9[_0xd587[57]](_0xd587[236],this[_0xd587[1239]](_0x5c29x3));_0x5c29x9[_0xd587[57]](_0xd587[1302],this[_0xd587[1239]](_0x5c29x4));_0x5c29x9[_0xd587[57]](_0xd587[1303],this[_0xd587[1239]](_0x5c29x5));this[_0xd587[813]][_0xd587[62]](_0x5c29x9)};mxXmlCanvas2D[_0xd587[202]][_0xd587[618]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa,_0x5c29x12,_0x5c29x13){_0x5c29x9= this[_0xd587[1212]][_0xd587[1321]](_0x5c29x9);var _0x5c29x14=this[_0xd587[55]](_0xd587[618]);_0x5c29x14[_0xd587[57]](_0xd587[235],this[_0xd587[1239]](_0x5c29x2));_0x5c29x14[_0xd587[57]](_0xd587[236],this[_0xd587[1239]](_0x5c29x3));_0x5c29x14[_0xd587[57]](_0xd587[1302],this[_0xd587[1239]](_0x5c29x4));_0x5c29x14[_0xd587[57]](_0xd587[1303],this[_0xd587[1239]](_0x5c29x5));_0x5c29x14[_0xd587[57]](_0xd587[390],_0x5c29x9);_0x5c29x14[_0xd587[57]](_0xd587[1322],_0x5c29xa?_0xd587[500]:_0xd587[468]);_0x5c29x14[_0xd587[57]](_0xd587[623],_0x5c29x12?_0xd587[500]:_0xd587[468]);_0x5c29x14[_0xd587[57]](_0xd587[624],_0x5c29x13?_0xd587[500]:_0xd587[468]);this[_0xd587[813]][_0xd587[62]](_0x5c29x14)};mxXmlCanvas2D[_0xd587[202]][_0xd587[1275]]= function(){this[_0xd587[813]][_0xd587[62]](this[_0xd587[55]](_0xd587[1275]));this[_0xd587[1218]]= this[_0xd587[1217]]= 0};mxXmlCanvas2D[_0xd587[202]][_0xd587[1276]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=this[_0xd587[55]](_0xd587[582]);_0x5c29x4[_0xd587[57]](_0xd587[235],this[_0xd587[1239]](_0x5c29x2));_0x5c29x4[_0xd587[57]](_0xd587[236],this[_0xd587[1239]](_0x5c29x3));this[_0xd587[813]][_0xd587[62]](_0x5c29x4);this[_0xd587[1217]]= _0x5c29x2;this[_0xd587[1218]]= _0x5c29x3};mxXmlCanvas2D[_0xd587[202]][_0xd587[1277]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=this[_0xd587[55]](_0xd587[683]);_0x5c29x4[_0xd587[57]](_0xd587[235],this[_0xd587[1239]](_0x5c29x2));_0x5c29x4[_0xd587[57]](_0xd587[236],this[_0xd587[1239]](_0x5c29x3));this[_0xd587[813]][_0xd587[62]](_0x5c29x4);this[_0xd587[1217]]= _0x5c29x2;this[_0xd587[1218]]= _0x5c29x3};mxXmlCanvas2D[_0xd587[202]][_0xd587[1278]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){var _0x5c29x9=this[_0xd587[55]](_0xd587[1323]);_0x5c29x9[_0xd587[57]](_0xd587[1324],this[_0xd587[1239]](_0x5c29x2));_0x5c29x9[_0xd587[57]](_0xd587[1325],this[_0xd587[1239]](_0x5c29x3));_0x5c29x9[_0xd587[57]](_0xd587[1326],this[_0xd587[1239]](_0x5c29x4));_0x5c29x9[_0xd587[57]](_0xd587[1327],this[_0xd587[1239]](_0x5c29x5));this[_0xd587[813]][_0xd587[62]](_0x5c29x9);this[_0xd587[1217]]= _0x5c29x4;this[_0xd587[1218]]= _0x5c29x5};mxXmlCanvas2D[_0xd587[202]][_0xd587[1279]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa){var _0x5c29x12=this[_0xd587[55]](_0xd587[1328]);_0x5c29x12[_0xd587[57]](_0xd587[1324],this[_0xd587[1239]](_0x5c29x2));_0x5c29x12[_0xd587[57]](_0xd587[1325],this[_0xd587[1239]](_0x5c29x3));_0x5c29x12[_0xd587[57]](_0xd587[1326],this[_0xd587[1239]](_0x5c29x4));_0x5c29x12[_0xd587[57]](_0xd587[1327],this[_0xd587[1239]](_0x5c29x5));_0x5c29x12[_0xd587[57]](_0xd587[1329],this[_0xd587[1239]](_0x5c29x9));_0x5c29x12[_0xd587[57]](_0xd587[1330],this[_0xd587[1239]](_0x5c29xa));this[_0xd587[813]][_0xd587[62]](_0x5c29x12);this[_0xd587[1217]]= _0x5c29x9;this[_0xd587[1218]]= _0x5c29xa};mxXmlCanvas2D[_0xd587[202]][_0xd587[268]]= function(){this[_0xd587[813]][_0xd587[62]](this[_0xd587[55]](_0xd587[268]))};mxXmlCanvas2D[_0xd587[202]][_0xd587[963]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa,_0x5c29x12,_0x5c29x13,_0x5c29x14,_0x5c29x15,_0x5c29x16,_0x5c29x17){if(this[_0xd587[1285]]&& null!= _0x5c29x9){mxUtils[_0xd587[1331]](_0x5c29x9)&& (_0x5c29x9= mxUtils[_0xd587[532]](_0x5c29x9));var _0x5c29x18=this[_0xd587[55]](_0xd587[963]);_0x5c29x18[_0xd587[57]](_0xd587[235],this[_0xd587[1239]](_0x5c29x2));_0x5c29x18[_0xd587[57]](_0xd587[236],this[_0xd587[1239]](_0x5c29x3));_0x5c29x18[_0xd587[57]](_0xd587[1302],this[_0xd587[1239]](_0x5c29x4));_0x5c29x18[_0xd587[57]](_0xd587[1303],this[_0xd587[1239]](_0x5c29x5));_0x5c29x18[_0xd587[57]](_0xd587[1332],_0x5c29x9);null!= _0x5c29xa&& _0x5c29x18[_0xd587[57]](_0xd587[611],_0x5c29xa);null!= _0x5c29x12&& _0x5c29x18[_0xd587[57]](_0xd587[552],_0x5c29x12);_0x5c29x18[_0xd587[57]](_0xd587[1333],_0x5c29x13?_0xd587[500]:_0xd587[468]);null== _0x5c29x14&& (_0x5c29x14= _0xd587[110]);_0x5c29x18[_0xd587[57]](_0xd587[1239],_0x5c29x14);null!= _0x5c29x15&& _0x5c29x18[_0xd587[57]](_0xd587[1334],_0x5c29x15?_0xd587[500]:_0xd587[468]);null!= _0x5c29x16&& _0x5c29x18[_0xd587[57]](_0xd587[1335],_0x5c29x16?_0xd587[500]:_0xd587[468]);null!= _0x5c29x17&& _0x5c29x18[_0xd587[57]](_0xd587[603],_0x5c29x17);this[_0xd587[813]][_0xd587[62]](_0x5c29x18)}};mxXmlCanvas2D[_0xd587[202]][_0xd587[1336]]= function(){this[_0xd587[813]][_0xd587[62]](this[_0xd587[55]](_0xd587[1336]))};mxXmlCanvas2D[_0xd587[202]][_0xd587[1334]]= function(){this[_0xd587[813]][_0xd587[62]](this[_0xd587[55]](_0xd587[1334]))};mxXmlCanvas2D[_0xd587[202]][_0xd587[1337]]= function(){this[_0xd587[813]][_0xd587[62]](this[_0xd587[55]](_0xd587[1338]))};function mxSvgCanvas2D(_0x5c29x2,_0x5c29x3){mxAbstractCanvas2D[_0xd587[239]](this);this[_0xd587[813]]= _0x5c29x2;this[_0xd587[1339]]= [];this[_0xd587[1340]]= null;this[_0xd587[1341]]= null!= _0x5c29x3?_0x5c29x3:!1;var _0x5c29x4=null;if(_0x5c29x2[_0xd587[295]]!= document){for(_0x5c29x4= _0x5c29x2;null!= _0x5c29x4&& _0xd587[571]!= _0x5c29x4[_0xd587[301]];){_0x5c29x4= _0x5c29x4[_0xd587[265]]}};null!= _0x5c29x4&& (0< _0x5c29x4[_0xd587[64]](_0xd587[1340])[_0xd587[67]]&& (this[_0xd587[1340]]= _0x5c29x4[_0xd587[64]](_0xd587[1340])[0]),null== this[_0xd587[1340]]&& (this[_0xd587[1340]]= this[_0xd587[55]](_0xd587[1340]),null!= _0x5c29x4[_0xd587[285]]?_0x5c29x4[_0xd587[950]](this[_0xd587[1340]],_0x5c29x4[_0xd587[285]]):_0x5c29x4[_0xd587[62]](this[_0xd587[1340]])),this[_0xd587[1341]]&& this[_0xd587[1340]][_0xd587[62]](this[_0xd587[1342]]()))}mxUtils[_0xd587[1284]](mxSvgCanvas2D,mxAbstractCanvas2D);mxSvgCanvas2D[_0xd587[202]][_0xd587[252]]= null;mxSvgCanvas2D[_0xd587[202]][_0xd587[1343]]= !0;mxSvgCanvas2D[_0xd587[202]][_0xd587[1285]]= !0;mxSvgCanvas2D[_0xd587[202]][_0xd587[1344]]= !0;mxSvgCanvas2D[_0xd587[202]][_0xd587[1345]]= 0;mxSvgCanvas2D[_0xd587[202]][_0xd587[1346]]= 0;mxSvgCanvas2D[_0xd587[202]][_0xd587[1347]]= !1;mxSvgCanvas2D[_0xd587[202]][_0xd587[862]]= function(){mxAbstractCanvas2D[_0xd587[202]][_0xd587[862]][_0xd587[183]](this,arguments);this[_0xd587[1339]]= []};mxSvgCanvas2D[_0xd587[202]][_0xd587[1342]]= function(_0x5c29x2){_0x5c29x2= this[_0xd587[55]](_0xd587[124]);_0x5c29x2[_0xd587[57]](_0xd587[60],_0xd587[61]);mxUtils[_0xd587[53]](_0x5c29x2,_0xd587[1348]+ mxConstants[_0xd587[484]]+ _0xd587[1349]+ mxConstants[_0xd587[483]]+ _0xd587[1350]);return _0x5c29x2};mxSvgCanvas2D[_0xd587[202]][_0xd587[55]]= function(_0x5c29x2,_0x5c29x3){if(null!= this[_0xd587[813]][_0xd587[295]][_0xd587[509]]){return this[_0xd587[813]][_0xd587[295]][_0xd587[509]](_0x5c29x3|| mxConstants[_0xd587[1351]],_0x5c29x2)};var _0x5c29x4=this[_0xd587[813]][_0xd587[295]][_0xd587[55]](_0x5c29x2);null!= _0x5c29x3&& _0x5c29x4[_0xd587[57]](_0xd587[1352],_0x5c29x3);return _0x5c29x4};mxSvgCanvas2D[_0xd587[202]][_0xd587[1353]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){_0xd587[198]== _0x5c29x2[_0xd587[225]](0)&& (_0x5c29x2= _0x5c29x2[_0xd587[85]](1));_0xd587[198]== _0x5c29x3[_0xd587[225]](0)&& (_0x5c29x3= _0x5c29x3[_0xd587[85]](1));_0x5c29x2= _0x5c29x2[_0xd587[216]]()+ _0xd587[213]+ _0x5c29x4;_0x5c29x3= _0x5c29x3[_0xd587[216]]()+ _0xd587[213]+ _0x5c29x5;_0x5c29x4= null;null== _0x5c29x9|| _0x5c29x9== mxConstants[_0xd587[1354]]?_0x5c29x4= _0xd587[1355]:_0x5c29x9== mxConstants[_0xd587[1356]]?_0x5c29x4= _0xd587[1357]:(_0x5c29x5= _0x5c29x2,_0x5c29x2= _0x5c29x3,_0x5c29x3= _0x5c29x5,_0x5c29x9== mxConstants[_0xd587[1358]]?_0x5c29x4= _0xd587[1355]:_0x5c29x9== mxConstants[_0xd587[1359]]&& (_0x5c29x4= _0xd587[1357]));return _0xd587[1360]+ _0x5c29x2+ _0xd587[213]+ _0x5c29x3+ _0xd587[213]+ _0x5c29x4};mxSvgCanvas2D[_0xd587[202]][_0xd587[1361]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){var _0x5c29xa=this[_0xd587[1353]](_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9),_0x5c29x12=this[_0xd587[1339]][_0x5c29xa];if(null== _0x5c29x12){var _0x5c29x13=this[_0xd587[813]][_0xd587[538]],_0x5c29x14=0,_0x5c29x15=_0x5c29xa+ _0xd587[213]+ _0x5c29x14;if(null!= _0x5c29x13){for(_0x5c29x12= _0x5c29x13[_0xd587[295]][_0xd587[1362]](_0x5c29x15);null!= _0x5c29x12&& _0x5c29x12[_0xd587[538]]!= _0x5c29x13;){_0x5c29x15= _0x5c29xa+ _0xd587[213]+ _0x5c29x14++,_0x5c29x12= _0x5c29x13[_0xd587[295]][_0xd587[1362]](_0x5c29x15)}}else {_0x5c29x15= _0xd587[1363]+ ++this[_0xd587[1346]]};null== _0x5c29x12&& (_0x5c29x12= this[_0xd587[1364]](_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9),_0x5c29x12[_0xd587[57]](_0xd587[1363],_0x5c29x15),null!= this[_0xd587[1340]]?this[_0xd587[1340]][_0xd587[62]](_0x5c29x12):_0x5c29x13[_0xd587[62]](_0x5c29x12));this[_0xd587[1339]][_0x5c29xa]= _0x5c29x12};return _0x5c29x12[_0xd587[284]](_0xd587[1363])};mxSvgCanvas2D[_0xd587[202]][_0xd587[1364]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){var _0x5c29xa=this[_0xd587[55]](_0xd587[1365]);_0x5c29xa[_0xd587[57]](_0xd587[1324],_0xd587[1366]);_0x5c29xa[_0xd587[57]](_0xd587[1325],_0xd587[1366]);_0x5c29xa[_0xd587[57]](_0xd587[1326],_0xd587[1366]);_0x5c29xa[_0xd587[57]](_0xd587[1327],_0xd587[1366]);null== _0x5c29x9|| _0x5c29x9== mxConstants[_0xd587[1354]]?_0x5c29xa[_0xd587[57]](_0xd587[1327],_0xd587[118]):_0x5c29x9== mxConstants[_0xd587[1356]]?_0x5c29xa[_0xd587[57]](_0xd587[1326],_0xd587[118]):_0x5c29x9== mxConstants[_0xd587[1358]]?_0x5c29xa[_0xd587[57]](_0xd587[1325],_0xd587[118]):_0x5c29x9== mxConstants[_0xd587[1359]]&& _0x5c29xa[_0xd587[57]](_0xd587[1324],_0xd587[118]);_0x5c29x4= 1> _0x5c29x4?_0xd587[1367]+ _0x5c29x4:_0xd587[110];_0x5c29x9= this[_0xd587[55]](_0xd587[1076]);_0x5c29x9[_0xd587[57]](_0xd587[1368],_0xd587[1366]);_0x5c29x9[_0xd587[57]](_0xd587[124],_0xd587[1369]+ _0x5c29x2+ _0x5c29x4);_0x5c29xa[_0xd587[62]](_0x5c29x9);_0x5c29x4= 1> _0x5c29x5?_0xd587[1367]+ _0x5c29x5:_0xd587[110];_0x5c29x9= this[_0xd587[55]](_0xd587[1076]);_0x5c29x9[_0xd587[57]](_0xd587[1368],_0xd587[118]);_0x5c29x9[_0xd587[57]](_0xd587[124],_0xd587[1369]+ _0x5c29x3+ _0x5c29x4);_0x5c29xa[_0xd587[62]](_0x5c29x9);return _0x5c29xa};mxSvgCanvas2D[_0xd587[202]][_0xd587[1370]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=this[_0xd587[252]],_0x5c29x5=this[_0xd587[724]];if(null!= _0x5c29x4){if(_0xd587[1215]== _0x5c29x4[_0xd587[301]]){if(null!= this[_0xd587[1215]]&& 0< this[_0xd587[1215]][_0xd587[67]]){_0x5c29x4[_0xd587[57]](_0xd587[1371],this[_0xd587[1215]][_0xd587[234]](_0xd587[185]))}else {return}};_0x5c29x2&& null!= _0x5c29x5[_0xd587[604]]?this[_0xd587[1372]]():this[_0xd587[1341]]|| (_0xd587[680]== _0x5c29x4[_0xd587[301]]&& mxClient[_0xd587[133]]&& !mxClient[_0xd587[76]]&& !mxClient[_0xd587[75]]?_0x5c29x4[_0xd587[57]](_0xd587[1334],_0xd587[1373]):_0x5c29x4[_0xd587[57]](_0xd587[1334],_0xd587[130]),_0x5c29x2= !1);_0x5c29x3&& null!= _0x5c29x5[_0xd587[608]]?this[_0xd587[1374]]():this[_0xd587[1341]]|| _0x5c29x4[_0xd587[57]](_0xd587[1336],_0xd587[130]);null!= _0x5c29x5[_0xd587[535]]&& 0< _0x5c29x5[_0xd587[535]][_0xd587[67]]&& _0x5c29x4[_0xd587[57]](_0xd587[535],_0x5c29x5[_0xd587[535]]);_0x5c29x5[_0xd587[639]]&& this[_0xd587[813]][_0xd587[62]](this[_0xd587[1375]](_0x5c29x4));0< this[_0xd587[1345]]&& !_0x5c29x2&& this[_0xd587[813]][_0xd587[62]](this[_0xd587[1376]](_0x5c29x4));this[_0xd587[1229]]&& (_0xd587[1215]!= _0x5c29x4[_0xd587[301]]|| this[_0xd587[1215]][this[_0xd587[1215]][_0xd587[67]]- 1]== this[_0xd587[1227]])&& _0x5c29x4[_0xd587[57]](_0xd587[1377],_0xd587[1378]);this[_0xd587[813]][_0xd587[62]](_0x5c29x4)}};mxSvgCanvas2D[_0xd587[202]][_0xd587[1372]]= function(){var _0x5c29x2=this[_0xd587[724]];1> _0x5c29x2[_0xd587[1244]]&& this[_0xd587[252]][_0xd587[57]](_0xd587[1379],_0x5c29x2[_0xd587[1244]]);null!= _0x5c29x2[_0xd587[604]]&& (null!= _0x5c29x2[_0xd587[606]]?(_0x5c29x2= this[_0xd587[1361]](_0x5c29x2[_0xd587[604]],_0x5c29x2[_0xd587[606]],_0x5c29x2[_0xd587[1247]],_0x5c29x2[_0xd587[1248]],_0x5c29x2[_0xd587[607]]),this[_0xd587[252]][_0xd587[57]](_0xd587[1334],_0xd587[1380]+ _0x5c29x2+ _0xd587[460])):this[_0xd587[252]][_0xd587[57]](_0xd587[1334],_0x5c29x2[_0xd587[604]][_0xd587[216]]()))};mxSvgCanvas2D[_0xd587[202]][_0xd587[1374]]= function(){var _0x5c29x2=this[_0xd587[724]];this[_0xd587[252]][_0xd587[57]](_0xd587[1336],_0x5c29x2[_0xd587[608]][_0xd587[216]]());1> _0x5c29x2[_0xd587[1244]]&& this[_0xd587[252]][_0xd587[57]](_0xd587[1381],_0x5c29x2[_0xd587[1244]]);var _0x5c29x3=Math[_0xd587[160]](1,this[_0xd587[1239]](_0x5c29x2[_0xd587[610]]* _0x5c29x2[_0xd587[255]]));1!= _0x5c29x3&& this[_0xd587[252]][_0xd587[57]](_0xd587[1382],_0x5c29x3);_0xd587[1215]== this[_0xd587[252]][_0xd587[301]]&& this[_0xd587[1383]]();_0x5c29x2[_0xd587[648]]&& this[_0xd587[252]][_0xd587[57]](_0xd587[1384],this[_0xd587[1385]](_0x5c29x3))};mxSvgCanvas2D[_0xd587[202]][_0xd587[1383]]= function(){var _0x5c29x2=this[_0xd587[724]];null!= _0x5c29x2[_0xd587[1256]]&& _0xd587[1233]!= _0x5c29x2[_0xd587[1256]]&& this[_0xd587[252]][_0xd587[57]](_0xd587[1386],_0x5c29x2[_0xd587[1256]]);if(null!= _0x5c29x2[_0xd587[1254]]){var _0x5c29x3=_0x5c29x2[_0xd587[1254]];_0xd587[1232]== _0x5c29x3&& (_0x5c29x3= _0xd587[1387]);_0xd587[1387]!= _0x5c29x3&& this[_0xd587[252]][_0xd587[57]](_0xd587[1388],_0x5c29x3)};null!= _0x5c29x2[_0xd587[1258]]&& (!this[_0xd587[1341]]|| 10!= _0x5c29x2[_0xd587[1258]])&& this[_0xd587[252]][_0xd587[57]](_0xd587[1389],_0x5c29x2[_0xd587[1258]])};mxSvgCanvas2D[_0xd587[202]][_0xd587[1385]]= function(_0x5c29x2){var _0x5c29x3=this[_0xd587[724]][_0xd587[649]][_0xd587[224]](_0xd587[185]),_0x5c29x4=[];if(0< _0x5c29x3[_0xd587[67]]){for(var _0x5c29x5=0;_0x5c29x5< _0x5c29x3[_0xd587[67]];_0x5c29x5++){_0x5c29x4[_0x5c29x5]= Number(_0x5c29x3[_0x5c29x5])* _0x5c29x2}};return _0x5c29x4[_0xd587[234]](_0xd587[185])};mxSvgCanvas2D[_0xd587[202]][_0xd587[1376]]= function(_0x5c29x2){_0x5c29x2= _0x5c29x2[_0xd587[511]](!0);var _0x5c29x3=parseFloat(_0x5c29x2[_0xd587[284]](_0xd587[1382])|| 1)+ this[_0xd587[1345]];_0x5c29x2[_0xd587[57]](_0xd587[1377],_0xd587[1336]);_0x5c29x2[_0xd587[57]](_0xd587[187],_0xd587[188]);_0x5c29x2[_0xd587[1390]](_0xd587[1384]);_0x5c29x2[_0xd587[57]](_0xd587[1382],_0x5c29x3);_0x5c29x2[_0xd587[57]](_0xd587[1334],_0xd587[130]);_0x5c29x2[_0xd587[57]](_0xd587[1336],mxClient[_0xd587[71]]?_0xd587[130]:_0xd587[1391]);return _0x5c29x2};mxSvgCanvas2D[_0xd587[202]][_0xd587[1375]]= function(_0x5c29x2){_0x5c29x2= _0x5c29x2[_0xd587[511]](!0);var _0x5c29x3=this[_0xd587[724]];_0xd587[130]!= _0x5c29x2[_0xd587[284]](_0xd587[1334])&& _0x5c29x2[_0xd587[57]](_0xd587[1334],_0x5c29x3[_0xd587[1269]]);_0xd587[130]!= _0x5c29x2[_0xd587[284]](_0xd587[1336])&& _0x5c29x2[_0xd587[57]](_0xd587[1336],_0x5c29x3[_0xd587[1269]]);_0x5c29x2[_0xd587[57]](_0xd587[535],_0xd587[536]+ this[_0xd587[1239]](_0x5c29x3[_0xd587[1273]]* _0x5c29x3[_0xd587[255]])+ _0xd587[537]+ this[_0xd587[1239]](_0x5c29x3[_0xd587[1274]]* _0x5c29x3[_0xd587[255]])+ _0xd587[460]+ (_0x5c29x3[_0xd587[535]]|| _0xd587[110]));_0x5c29x2[_0xd587[57]](_0xd587[461],_0x5c29x3[_0xd587[1271]]);return _0x5c29x2};mxSvgCanvas2D[_0xd587[202]][_0xd587[1294]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){if(0!= _0x5c29x2|| _0x5c29x3|| _0x5c29x4){var _0x5c29xa=this[_0xd587[724]];_0x5c29x5+= _0x5c29xa[_0xd587[1126]];_0x5c29x9+= _0x5c29xa[_0xd587[1125]];_0x5c29x5*= _0x5c29xa[_0xd587[255]];_0x5c29x9*= _0x5c29xa[_0xd587[255]];_0x5c29xa[_0xd587[535]]= _0x5c29xa[_0xd587[535]]|| _0xd587[110];if(_0x5c29x3&& _0x5c29x4){_0x5c29x2+= 180}else {if(_0x5c29x3^ _0x5c29x4){var _0x5c29x12=_0x5c29x3?_0x5c29x5:0,_0x5c29x13=_0x5c29x3?-1:1,_0x5c29x14=_0x5c29x4?_0x5c29x9:0,_0x5c29x15=_0x5c29x4?-1:1;_0x5c29xa[_0xd587[535]]+= _0xd587[536]+ this[_0xd587[1239]](_0x5c29x12)+ _0xd587[537]+ this[_0xd587[1239]](_0x5c29x14)+ _0xd587[1392]+ this[_0xd587[1239]](_0x5c29x13)+ _0xd587[537]+ this[_0xd587[1239]](_0x5c29x15)+ _0xd587[1393]+ this[_0xd587[1239]](-_0x5c29x12) + _0xd587[537]+ this[_0xd587[1239]](-_0x5c29x14) + _0xd587[460]}};if(_0x5c29x3?!_0x5c29x4:_0x5c29x4){_0x5c29x2*= -1};0!= _0x5c29x2&& (_0x5c29xa[_0xd587[535]]+= _0xd587[1394]+ this[_0xd587[1239]](_0x5c29x2)+ _0xd587[537]+ this[_0xd587[1239]](_0x5c29x5)+ _0xd587[537]+ this[_0xd587[1239]](_0x5c29x9)+ _0xd587[460]);_0x5c29xa[_0xd587[603]]+= _0x5c29x2;_0x5c29xa[_0xd587[1395]]= _0x5c29x5;_0x5c29xa[_0xd587[1396]]= _0x5c29x9}};mxSvgCanvas2D[_0xd587[202]][_0xd587[1275]]= function(){mxAbstractCanvas2D[_0xd587[202]][_0xd587[1275]][_0xd587[183]](this,arguments);this[_0xd587[252]]= this[_0xd587[55]](_0xd587[1215])};mxSvgCanvas2D[_0xd587[202]][_0xd587[1319]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){var _0x5c29x9=this[_0xd587[724]],_0x5c29xa=this[_0xd587[55]](_0xd587[1319]);_0x5c29xa[_0xd587[57]](_0xd587[235],this[_0xd587[1239]]((_0x5c29x2+ _0x5c29x9[_0xd587[1126]])* _0x5c29x9[_0xd587[255]]));_0x5c29xa[_0xd587[57]](_0xd587[236],this[_0xd587[1239]]((_0x5c29x3+ _0x5c29x9[_0xd587[1125]])* _0x5c29x9[_0xd587[255]]));_0x5c29xa[_0xd587[57]](_0xd587[117],this[_0xd587[1239]](_0x5c29x4* _0x5c29x9[_0xd587[255]]));_0x5c29xa[_0xd587[57]](_0xd587[119],this[_0xd587[1239]](_0x5c29x5* _0x5c29x9[_0xd587[255]]));this[_0xd587[252]]= _0x5c29xa};mxSvgCanvas2D[_0xd587[202]][_0xd587[1320]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa){this[_0xd587[1319]](_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5);0< _0x5c29x9&& this[_0xd587[252]][_0xd587[57]](_0xd587[1397],this[_0xd587[1239]](_0x5c29x9* this[_0xd587[724]][_0xd587[255]]));0< _0x5c29xa&& this[_0xd587[252]][_0xd587[57]](_0xd587[1398],this[_0xd587[1239]](_0x5c29xa* this[_0xd587[724]][_0xd587[255]]))};mxSvgCanvas2D[_0xd587[202]][_0xd587[680]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){var _0x5c29x9=this[_0xd587[724]],_0x5c29xa=this[_0xd587[55]](_0xd587[680]);_0x5c29xa[_0xd587[57]](_0xd587[1296],Math[_0xd587[488]]((_0x5c29x2+ _0x5c29x4/ 2+ _0x5c29x9[_0xd587[1126]])* _0x5c29x9[_0xd587[255]]));_0x5c29xa[_0xd587[57]](_0xd587[1297],Math[_0xd587[488]]((_0x5c29x3+ _0x5c29x5/ 2+ _0x5c29x9[_0xd587[1125]])* _0x5c29x9[_0xd587[255]]));_0x5c29xa[_0xd587[57]](_0xd587[1397],_0x5c29x4/ 2* _0x5c29x9[_0xd587[255]]);_0x5c29xa[_0xd587[57]](_0xd587[1398],_0x5c29x5/ 2* _0x5c29x9[_0xd587[255]]);this[_0xd587[252]]= _0x5c29xa};mxSvgCanvas2D[_0xd587[202]][_0xd587[618]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa,_0x5c29x12,_0x5c29x13){_0x5c29x9= this[_0xd587[1212]][_0xd587[1321]](_0x5c29x9);_0x5c29xa= null!= _0x5c29xa?_0x5c29xa:!0;_0x5c29x12= null!= _0x5c29x12?_0x5c29x12:!1;_0x5c29x13= null!= _0x5c29x13?_0x5c29x13:!1;var _0x5c29x14=this[_0xd587[724]];_0x5c29x2+= _0x5c29x14[_0xd587[1126]];_0x5c29x3+= _0x5c29x14[_0xd587[1125]];var _0x5c29x15=this[_0xd587[55]](_0xd587[618]);_0x5c29x15[_0xd587[57]](_0xd587[235],this[_0xd587[1239]](_0x5c29x2* _0x5c29x14[_0xd587[255]]));_0x5c29x15[_0xd587[57]](_0xd587[236],this[_0xd587[1239]](_0x5c29x3* _0x5c29x14[_0xd587[255]]));_0x5c29x15[_0xd587[57]](_0xd587[117],this[_0xd587[1239]](_0x5c29x4* _0x5c29x14[_0xd587[255]]));_0x5c29x15[_0xd587[57]](_0xd587[119],this[_0xd587[1239]](_0x5c29x5* _0x5c29x14[_0xd587[255]]));null== _0x5c29x15[_0xd587[1399]]?_0x5c29x15[_0xd587[57]](_0xd587[1400],_0x5c29x9):_0x5c29x15[_0xd587[1399]](mxConstants.NS_XLINK,_0xd587[44],_0x5c29x9);_0x5c29xa|| _0x5c29x15[_0xd587[57]](_0xd587[1401],_0xd587[130]);1> _0x5c29x14[_0xd587[1244]]&& _0x5c29x15[_0xd587[57]](_0xd587[461],_0x5c29x14[_0xd587[1244]]);_0x5c29x9= this[_0xd587[724]][_0xd587[535]]|| _0xd587[110];if(_0x5c29x12|| _0x5c29x13){var _0x5c29x16=_0x5c29xa= 1,_0x5c29x17=0,_0x5c29x18=0;_0x5c29x12&& (_0x5c29xa= -1,_0x5c29x17= -_0x5c29x4- 2* _0x5c29x2);_0x5c29x13&& (_0x5c29x16= -1,_0x5c29x18= -_0x5c29x5- 2* _0x5c29x3);_0x5c29x9+= _0xd587[1402]+ _0x5c29xa+ _0xd587[537]+ _0x5c29x16+ _0xd587[1393]+ _0x5c29x17+ _0xd587[537]+ _0x5c29x18+ _0xd587[460]};0< _0x5c29x9[_0xd587[67]]&& _0x5c29x15[_0xd587[57]](_0xd587[535],_0x5c29x9);this[_0xd587[813]][_0xd587[62]](_0x5c29x15);this[_0xd587[1347]]&& (_0x5c29x15[_0xd587[57]](_0xd587[124],_0xd587[1403]),_0x5c29x15= this[_0xd587[55]](_0xd587[1319]),_0x5c29x15[_0xd587[57]](_0xd587[187],_0xd587[188]),_0x5c29x15[_0xd587[57]](_0xd587[1377],_0xd587[1334]),_0x5c29x15[_0xd587[57]](_0xd587[235],this[_0xd587[1239]](_0x5c29x2* _0x5c29x14[_0xd587[255]])),_0x5c29x15[_0xd587[57]](_0xd587[236],this[_0xd587[1239]](_0x5c29x3* _0x5c29x14[_0xd587[255]])),_0x5c29x15[_0xd587[57]](_0xd587[117],this[_0xd587[1239]](_0x5c29x4* _0x5c29x14[_0xd587[255]])),_0x5c29x15[_0xd587[57]](_0xd587[119],this[_0xd587[1239]](_0x5c29x5* _0x5c29x14[_0xd587[255]])),this[_0xd587[813]][_0xd587[62]](_0x5c29x15))};mxSvgCanvas2D[_0xd587[202]][_0xd587[1404]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){_0x5c29x4= this[_0xd587[724]];_0x5c29x5= _0xd587[1405]+ Math[_0xd587[488]](_0x5c29x4[_0xd587[487]])+ _0xd587[1406]+ _0x5c29x4[_0xd587[486]]+ _0xd587[1407]+ _0x5c29x4[_0xd587[665]]+ _0xd587[1408]+ Math[_0xd587[488]](_0x5c29x4[_0xd587[487]]* mxConstants[_0xd587[490]])+ _0xd587[1409]+ _0x5c29x5;(_0x5c29x4[_0xd587[666]]& mxConstants[_0xd587[1410]])== mxConstants[_0xd587[1410]]&& (_0x5c29x5+= _0xd587[1411]);(_0x5c29x4[_0xd587[666]]& mxConstants[_0xd587[1412]])== mxConstants[_0xd587[1412]]&& (_0x5c29x5+= _0xd587[1413]);(_0x5c29x4[_0xd587[666]]& mxConstants[_0xd587[1414]])== mxConstants[_0xd587[1414]]&& (_0x5c29x5+= _0xd587[1415]);_0x5c29x3== mxConstants[_0xd587[479]]?_0x5c29x5+= _0xd587[1416]:_0x5c29x3== mxConstants[_0xd587[480]]&& (_0x5c29x5+= _0xd587[1417]);_0x5c29x3= _0xd587[110];null!= _0x5c29x4[_0xd587[1261]]&& (_0x5c29x3+= _0xd587[1418]+ _0x5c29x4[_0xd587[1261]]+ _0xd587[471]);null!= _0x5c29x4[_0xd587[1263]]&& (_0x5c29x3+= _0xd587[1419]+ _0x5c29x4[_0xd587[1263]]+ _0xd587[471]);mxUtils[_0xd587[1331]](_0x5c29x2)|| (_0x5c29x4= document[_0xd587[55]](_0xd587[126]),_0x5c29x4[_0xd587[339]]= _0x5c29x2[_0xd587[230]](/</g,_0xd587[1421])[_0xd587[230]](/>/g,_0xd587[1420])[_0xd587[230]](/</g,_0xd587[334])[_0xd587[230]](/>/g,_0xd587[335]),_0x5c29x2= _0x5c29x4[_0xd587[131]],_0x5c29x9?_0x5c29x5+= _0x5c29x3:0< _0x5c29x3[_0xd587[67]]&& (_0x5c29x2= _0xd587[1422]+ _0x5c29x3+ _0xd587[1423]+ _0x5c29x2+ _0xd587[1424]));if(!mxClient[_0xd587[80]]&& document[_0xd587[509]]){return _0x5c29x9= document[_0xd587[509]](_0xd587[577],_0xd587[485]),_0x5c29x9[_0xd587[57]](_0xd587[124],_0x5c29x5),mxUtils[_0xd587[1331]](_0x5c29x2)?this[_0xd587[813]][_0xd587[295]]!= document?_0x5c29x9[_0xd587[62]](_0x5c29x2[_0xd587[511]](!0)):_0x5c29x9[_0xd587[62]](_0x5c29x2):_0x5c29x9[_0xd587[339]]= _0x5c29x2,_0x5c29x9};mxUtils[_0xd587[1331]](_0x5c29x2)&& this[_0xd587[813]][_0xd587[295]]!= document&& (_0x5c29x2= _0x5c29x2[_0xd587[342]]);_0x5c29x2= _0x5c29x2[_0xd587[230]](/<br>/g,_0xd587[1426])[_0xd587[230]](/<hr>/g,_0xd587[1425]);return mxUtils[_0xd587[877]](_0xd587[1427]+ _0x5c29x5+ _0xd587[1423]+ _0x5c29x2+ _0xd587[1424])[_0xd587[158]]};mxSvgCanvas2D[_0xd587[202]][_0xd587[963]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa,_0x5c29x12,_0x5c29x13,_0x5c29x14,_0x5c29x15,_0x5c29x16,_0x5c29x17){if(this[_0xd587[1285]]&& null!= _0x5c29x9){_0x5c29x17= null!= _0x5c29x17?_0x5c29x17:0;var _0x5c29x18=this[_0xd587[724]];_0x5c29x2+= _0x5c29x18[_0xd587[1126]];_0x5c29x3+= _0x5c29x18[_0xd587[1125]];if(this[_0xd587[1344]]&& _0xd587[1428]== _0x5c29x14){var _0x5c29x19=_0xd587[1429];_0x5c29x16?(_0x5c29x19+= _0xd587[1430],0< _0x5c29x5&& (_0x5c29x19+= _0xd587[1431]+ Math[_0xd587[488]](_0x5c29x5)+ _0xd587[1409]),0< _0x5c29x4&& (_0x5c29x19+= _0xd587[1432]+ Math[_0xd587[488]](_0x5c29x4)+ _0xd587[1409])):_0x5c29x15&& (_0x5c29x19+= _0xd587[1432]+ Math[_0xd587[488]](_0x5c29x4)+ _0xd587[1409],0< _0x5c29x5&& (_0x5c29x19+= _0xd587[1431]+ Math[_0xd587[488]](_0x5c29x5)+ _0xd587[1409]));_0x5c29x13?(!_0x5c29x16&& 0< _0x5c29x4&& (_0x5c29x19+= _0xd587[1432]+ Math[_0xd587[488]](_0x5c29x4)+ _0xd587[1409]),_0x5c29x19+= _0xd587[1433]):_0x5c29x19+= _0xd587[1434];_0x5c29x13= this[_0xd587[55]](_0xd587[449]);1> _0x5c29x18[_0xd587[1244]]&& _0x5c29x13[_0xd587[57]](_0xd587[461],_0x5c29x18[_0xd587[1244]]);_0x5c29x14= this[_0xd587[55]](_0xd587[1435]);_0x5c29x14[_0xd587[57]](_0xd587[1377],_0xd587[1378]);_0x5c29x19= this[_0xd587[1404]](_0x5c29x9,_0x5c29xa,_0x5c29x12,_0x5c29x19,_0x5c29x15);if(null!= _0x5c29x19){_0x5c29x13[_0xd587[62]](_0x5c29x14);this[_0xd587[813]][_0xd587[62]](_0x5c29x13);var _0x5c29x1a=0;if(mxClient[_0xd587[80]]&& !mxClient[_0xd587[48]]){var _0x5c29x1b=document[_0xd587[55]](_0xd587[485]);_0x5c29x1b[_0xd587[124]][_0xd587[103]]= _0x5c29x19[_0xd587[284]](_0xd587[124]);_0x5c29x1b[_0xd587[124]][_0xd587[495]]= mxClient[_0xd587[496]]?_0xd587[497]:_0xd587[498];_0x5c29x1b[_0xd587[124]][_0xd587[187]]= _0xd587[188];_0x5c29x1b[_0xd587[339]]= mxUtils[_0xd587[1331]](_0x5c29x9)?_0x5c29x9[_0xd587[342]]:_0x5c29x9;document[_0xd587[112]][_0xd587[62]](_0x5c29x1b);_0x5c29x1a= _0x5c29x1b[_0xd587[359]];_0x5c29x5= mxClient[_0xd587[496]]&& 0< _0x5c29x5&& _0x5c29x16?Math[_0xd587[243]](_0x5c29x5,_0x5c29x1b[_0xd587[167]]+ 2):_0x5c29x1b[_0xd587[167]];_0x5c29x1b[_0xd587[265]][_0xd587[266]](_0x5c29x1b);_0x5c29x14[_0xd587[62]](_0x5c29x19)}else {this[_0xd587[813]][_0xd587[295]]!= document?(_0x5c29x19[_0xd587[124]][_0xd587[187]]= _0xd587[188],document[_0xd587[112]][_0xd587[62]](_0x5c29x19),_0x5c29x1a= _0x5c29x19[_0xd587[359]],_0x5c29x5= _0x5c29x19[_0xd587[167]],_0x5c29x14[_0xd587[62]](_0x5c29x19),_0x5c29x19[_0xd587[124]][_0xd587[187]]= _0xd587[110]):(_0x5c29x14[_0xd587[62]](_0x5c29x19),_0x5c29x1a= _0x5c29x19[_0xd587[359]],_0x5c29x5= _0x5c29x19[_0xd587[167]])};_0x5c29x4= _0x5c29x15?Math[_0xd587[160]](_0x5c29x4,_0x5c29x1a):_0x5c29x1a;1> _0x5c29x18[_0xd587[1244]]&& _0x5c29x13[_0xd587[57]](_0xd587[461],_0x5c29x18[_0xd587[1244]]);_0x5c29x15= _0x5c29x9= 0;_0x5c29xa== mxConstants[_0xd587[479]]?_0x5c29x9-= _0x5c29x4/ 2:_0x5c29xa== mxConstants[_0xd587[480]]&& (_0x5c29x9-= _0x5c29x4);_0x5c29x2+= _0x5c29x9;_0x5c29x12== mxConstants[_0xd587[481]]?_0x5c29x15-= _0x5c29x5/ 2:_0x5c29x12== mxConstants[_0xd587[482]]&& (_0x5c29x15-= _0x5c29x5);_0x5c29x3+= _0x5c29x15;_0x5c29xa= 1!= _0x5c29x18[_0xd587[255]]?_0xd587[1402]+ _0x5c29x18[_0xd587[255]]+ _0xd587[460]:_0xd587[110];0!= _0x5c29x18[_0xd587[603]]&& this[_0xd587[1216]]?(_0x5c29xa+= _0xd587[1394]+ _0x5c29x18[_0xd587[603]]+ _0xd587[537]+ _0x5c29x4/ 2+ _0xd587[537]+ _0x5c29x5/ 2+ _0xd587[460],_0x5c29x3= this[_0xd587[1241]]((_0x5c29x2+ _0x5c29x4/ 2)* _0x5c29x18[_0xd587[255]],(_0x5c29x3+ _0x5c29x5/ 2)* _0x5c29x18[_0xd587[255]],_0x5c29x18[_0xd587[603]],_0x5c29x18[_0xd587[1395]],_0x5c29x18[_0xd587[1396]]),_0x5c29x2= _0x5c29x3[_0xd587[235]]- _0x5c29x4* _0x5c29x18[_0xd587[255]]/ 2,_0x5c29x3= _0x5c29x3[_0xd587[236]]- _0x5c29x5* _0x5c29x18[_0xd587[255]]/ 2):(_0x5c29x2*= _0x5c29x18[_0xd587[255]],_0x5c29x3*= _0x5c29x18[_0xd587[255]]);0!= _0x5c29x17&& (_0x5c29xa+= _0xd587[1394]+ _0x5c29x17+ _0xd587[537]+ -_0x5c29x9+ _0xd587[537]+ -_0x5c29x15+ _0xd587[460]);_0x5c29x13[_0xd587[57]](_0xd587[535],_0xd587[536]+ Math[_0xd587[488]](_0x5c29x2)+ _0xd587[537]+ Math[_0xd587[488]](_0x5c29x3)+ _0xd587[460]+ _0x5c29xa);_0x5c29x14[_0xd587[57]](_0xd587[117],Math[_0xd587[488]](Math[_0xd587[160]](1,_0x5c29x4)));_0x5c29x14[_0xd587[57]](_0xd587[119],Math[_0xd587[488]](Math[_0xd587[160]](1,_0x5c29x5)))}}else {this[_0xd587[1436]](_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa,_0x5c29x12,_0x5c29x13,_0x5c29x15,_0x5c29x16,_0x5c29x17)}}};mxSvgCanvas2D[_0xd587[202]][_0xd587[1437]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){_0x5c29x2= Math[_0xd587[488]](_0x5c29x2);_0x5c29x3= Math[_0xd587[488]](_0x5c29x3);_0x5c29x4= Math[_0xd587[488]](_0x5c29x4);_0x5c29x5= Math[_0xd587[488]](_0x5c29x5);for(var _0x5c29x9=_0xd587[1438]+ _0x5c29x2+ _0xd587[213]+ _0x5c29x3+ _0xd587[213]+ _0x5c29x4+ _0xd587[213]+ _0x5c29x5,_0x5c29xa=0,_0x5c29x12=_0x5c29x9+ _0xd587[213]+ _0x5c29xa;null!= document[_0xd587[1362]](_0x5c29x12);){_0x5c29x12= _0x5c29x9+ _0xd587[213]+ ++_0x5c29xa};clip= this[_0xd587[55]](_0xd587[1439]);clip[_0xd587[57]](_0xd587[1363],_0x5c29x12);_0x5c29x9= this[_0xd587[55]](_0xd587[1319]);_0x5c29x9[_0xd587[57]](_0xd587[235],_0x5c29x2);_0x5c29x9[_0xd587[57]](_0xd587[236],_0x5c29x3);_0x5c29x9[_0xd587[57]](_0xd587[117],_0x5c29x4);_0x5c29x9[_0xd587[57]](_0xd587[119],_0x5c29x5);clip[_0xd587[62]](_0x5c29x9);return clip};mxSvgCanvas2D[_0xd587[202]][_0xd587[1436]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa,_0x5c29x12,_0x5c29x13,_0x5c29x14,_0x5c29x15,_0x5c29x16){_0x5c29x16= null!= _0x5c29x16?_0x5c29x16:0;_0x5c29x13= this[_0xd587[724]];var _0x5c29x17=Math[_0xd587[488]](_0x5c29x13[_0xd587[487]]),_0x5c29x18=this[_0xd587[55]](_0xd587[449]),_0x5c29x19=_0x5c29x13[_0xd587[535]]|| _0xd587[110];0!= _0x5c29x16&& (_0x5c29x19+= _0xd587[1394]+ _0x5c29x16+ _0xd587[537]+ this[_0xd587[1239]](_0x5c29x2* _0x5c29x13[_0xd587[255]])+ _0xd587[537]+ this[_0xd587[1239]](_0x5c29x3* _0x5c29x13[_0xd587[255]])+ _0xd587[460]);if(_0x5c29x15&& 0< _0x5c29x4&& 0< _0x5c29x5){var _0x5c29x1a=_0x5c29x2;_0x5c29x16= _0x5c29x3;_0x5c29xa== mxConstants[_0xd587[479]]?_0x5c29x1a-= _0x5c29x4/ 2:_0x5c29xa== mxConstants[_0xd587[480]]&& (_0x5c29x1a-= _0x5c29x4);_0x5c29x12== mxConstants[_0xd587[481]]?_0x5c29x16-= _0x5c29x5/ 2:_0x5c29x12== mxConstants[_0xd587[482]]&& (_0x5c29x16-= _0x5c29x5);_0x5c29x16= this[_0xd587[1437]](_0x5c29x1a* _0x5c29x13[_0xd587[255]]- 2,_0x5c29x16* _0x5c29x13[_0xd587[255]]- 2,_0x5c29x4* _0x5c29x13[_0xd587[255]]+ 4,_0x5c29x5* _0x5c29x13[_0xd587[255]]+ 4);null!= this[_0xd587[1340]]?this[_0xd587[1340]][_0xd587[62]](_0x5c29x16):this[_0xd587[813]][_0xd587[62]](_0x5c29x16);_0x5c29x18[_0xd587[57]](_0xd587[1440],_0xd587[1380]+ _0x5c29x16[_0xd587[284]](_0xd587[1363])+ _0xd587[460])};this[_0xd587[1441]](_0x5c29x18,_0x5c29xa);_0x5c29x16= _0x5c29xa== mxConstants[_0xd587[480]]?_0xd587[1282]:_0x5c29xa== mxConstants[_0xd587[479]]?_0xd587[554]:_0xd587[861];_0xd587[861]!= _0x5c29x16&& _0x5c29x18[_0xd587[57]](_0xd587[1442],_0x5c29x16);(!this[_0xd587[1341]]|| _0x5c29x17!= mxConstants[_0xd587[483]])&& _0x5c29x18[_0xd587[57]](_0xd587[1443],Math[_0xd587[488]](_0x5c29x17* _0x5c29x13[_0xd587[255]])+ _0xd587[168]);0< _0x5c29x19[_0xd587[67]]&& _0x5c29x18[_0xd587[57]](_0xd587[535],_0x5c29x19);1> _0x5c29x13[_0xd587[1244]]&& _0x5c29x18[_0xd587[57]](_0xd587[461],_0x5c29x13[_0xd587[1244]]);var _0x5c29x19=_0x5c29x9[_0xd587[224]](_0xd587[192]),_0x5c29x1a=Math[_0xd587[488]](_0x5c29x17* mxConstants[_0xd587[490]]),_0x5c29x1b=_0x5c29x17+ (_0x5c29x19[_0xd587[67]]- 1)* _0x5c29x1a;_0x5c29x16= _0x5c29x3+ _0x5c29x17- 1;_0x5c29x12== mxConstants[_0xd587[481]]?(_0x5c29x5= (this[_0xd587[1343]]&& _0x5c29x15&& 0< _0x5c29x5?Math[_0xd587[243]](_0x5c29x1b,_0x5c29x5):_0x5c29x1b)/ 2,_0x5c29x16-= _0x5c29x5+ 1):_0x5c29x12== mxConstants[_0xd587[482]]&& (_0x5c29x5= this[_0xd587[1343]]&& _0x5c29x15&& 0< _0x5c29x5?Math[_0xd587[243]](_0x5c29x1b,_0x5c29x5):_0x5c29x1b,_0x5c29x16-= _0x5c29x5+ 2);for(_0x5c29x5= 0;_0x5c29x5< _0x5c29x19[_0xd587[67]];_0x5c29x5++){0< _0x5c29x19[_0x5c29x5][_0xd587[67]]&& 0< mxUtils[_0xd587[330]](_0x5c29x19[_0x5c29x5])[_0xd587[67]]&& (_0x5c29x15= this[_0xd587[55]](_0xd587[963]),_0x5c29x15[_0xd587[57]](_0xd587[235],this[_0xd587[1239]](_0x5c29x2* _0x5c29x13[_0xd587[255]])),_0x5c29x15[_0xd587[57]](_0xd587[236],this[_0xd587[1239]](_0x5c29x16* _0x5c29x13[_0xd587[255]])),mxUtils[_0xd587[53]](_0x5c29x15,_0x5c29x19[_0x5c29x5]),_0x5c29x18[_0xd587[62]](_0x5c29x15)),_0x5c29x16+= _0x5c29x1a};this[_0xd587[813]][_0xd587[62]](_0x5c29x18);this[_0xd587[1444]](_0x5c29x18,_0x5c29x9,_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x1b,_0x5c29xa,_0x5c29x12,_0x5c29x14)};mxSvgCanvas2D[_0xd587[202]][_0xd587[1441]]= function(_0x5c29x2){var _0x5c29x3=this[_0xd587[724]];_0x5c29x2[_0xd587[57]](_0xd587[1334],_0x5c29x3[_0xd587[665]]);(!this[_0xd587[1341]]|| _0x5c29x3[_0xd587[486]]!= mxConstants[_0xd587[484]])&& _0x5c29x2[_0xd587[57]](_0xd587[1445],_0x5c29x3[_0xd587[486]]);(_0x5c29x3[_0xd587[666]]& mxConstants[_0xd587[1410]])== mxConstants[_0xd587[1410]]&& _0x5c29x2[_0xd587[57]](_0xd587[1446],_0xd587[1447]);(_0x5c29x3[_0xd587[666]]& mxConstants[_0xd587[1412]])== mxConstants[_0xd587[1412]]&& _0x5c29x2[_0xd587[57]](_0xd587[1448],_0xd587[1449]);(_0x5c29x3[_0xd587[666]]& mxConstants[_0xd587[1414]])== mxConstants[_0xd587[1414]]&& _0x5c29x2[_0xd587[57]](_0xd587[1450],_0xd587[355])};mxSvgCanvas2D[_0xd587[202]][_0xd587[1444]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa,_0x5c29x12,_0x5c29x13,_0x5c29x14){var _0x5c29x15=this[_0xd587[724]];if(null!= _0x5c29x15[_0xd587[1261]]|| null!= _0x5c29x15[_0xd587[1263]]){var _0x5c29x16=null;_0x5c29x14?(_0x5c29x12== mxConstants[_0xd587[479]]?_0x5c29x4-= _0x5c29x9/ 2:_0x5c29x12== mxConstants[_0xd587[480]]&& (_0x5c29x4-= _0x5c29x9),_0x5c29x13== mxConstants[_0xd587[481]]?_0x5c29x5-= _0x5c29xa/ 2:_0x5c29x13== mxConstants[_0xd587[482]]&& (_0x5c29x5-= _0x5c29xa),_0x5c29x16= new mxRectangle((_0x5c29x4+ 1)* _0x5c29x15[_0xd587[255]],_0x5c29x5* _0x5c29x15[_0xd587[255]],(_0x5c29x9- 2)* _0x5c29x15[_0xd587[255]],(_0x5c29xa+ 2)* _0x5c29x15[_0xd587[255]])):null!= _0x5c29x2[_0xd587[1451]]&& this[_0xd587[813]][_0xd587[295]]== document?(_0x5c29x16= _0x5c29x2[_0xd587[1451]](),_0x5c29x3= mxClient[_0xd587[80]]&& mxClient[_0xd587[48]],_0x5c29x16= new mxRectangle(_0x5c29x16[_0xd587[235]],_0x5c29x16[_0xd587[236]]+ (_0x5c29x3?0:1),_0x5c29x16[_0xd587[117]],_0x5c29x16[_0xd587[119]]+ (_0x5c29x3?1:0))):(_0x5c29x16= document[_0xd587[55]](_0xd587[485]),_0x5c29x16[_0xd587[124]][_0xd587[489]]= Math[_0xd587[488]](_0x5c29x15[_0xd587[487]]* mxConstants[_0xd587[490]])+ _0xd587[168],_0x5c29x16[_0xd587[124]][_0xd587[487]]= Math[_0xd587[488]](_0x5c29x15[_0xd587[487]])+ _0xd587[168],_0x5c29x16[_0xd587[124]][_0xd587[486]]= _0x5c29x15[_0xd587[486]],_0x5c29x16[_0xd587[124]][_0xd587[493]]= _0xd587[494],_0x5c29x16[_0xd587[124]][_0xd587[491]]= _0xd587[492],_0x5c29x16[_0xd587[124]][_0xd587[187]]= _0xd587[188],_0x5c29x16[_0xd587[124]][_0xd587[495]]= mxClient[_0xd587[496]]?_0xd587[497]:_0xd587[498],_0x5c29x16[_0xd587[124]][_0xd587[499]]= _0xd587[500],(_0x5c29x15[_0xd587[666]]& mxConstants[_0xd587[1410]])== mxConstants[_0xd587[1410]]&& (_0x5c29x16[_0xd587[124]][_0xd587[1452]]= _0xd587[1447]),(_0x5c29x15[_0xd587[666]]& mxConstants[_0xd587[1412]])== mxConstants[_0xd587[1412]]&& (_0x5c29x16[_0xd587[124]][_0xd587[666]]= _0xd587[1449]),_0x5c29x3= mxUtils[_0xd587[321]](_0x5c29x3,!1),_0x5c29x16[_0xd587[339]]= _0x5c29x3[_0xd587[230]](/\n/g,_0xd587[1453]),document[_0xd587[112]][_0xd587[62]](_0x5c29x16),_0x5c29x9= _0x5c29x16[_0xd587[359]],_0x5c29xa= _0x5c29x16[_0xd587[167]],_0x5c29x16[_0xd587[265]][_0xd587[266]](_0x5c29x16),_0x5c29x12== mxConstants[_0xd587[479]]?_0x5c29x4-= _0x5c29x9/ 2:_0x5c29x12== mxConstants[_0xd587[480]]&& (_0x5c29x4-= _0x5c29x9),_0x5c29x13== mxConstants[_0xd587[481]]?_0x5c29x5-= _0x5c29xa/ 2:_0x5c29x13== mxConstants[_0xd587[482]]&& (_0x5c29x5-= _0x5c29xa),_0x5c29x16= new mxRectangle((_0x5c29x4+ 1)* _0x5c29x15[_0xd587[255]],(_0x5c29x5+ 2)* _0x5c29x15[_0xd587[255]],_0x5c29x9* _0x5c29x15[_0xd587[255]],(_0x5c29xa+ 1)* _0x5c29x15[_0xd587[255]]));null!= _0x5c29x16&& (_0x5c29x3= this[_0xd587[55]](_0xd587[1319]),_0x5c29x3[_0xd587[57]](_0xd587[1334],_0x5c29x15[_0xd587[1261]]|| _0xd587[130]),_0x5c29x3[_0xd587[57]](_0xd587[1336],_0x5c29x15[_0xd587[1263]]|| _0xd587[130]),_0x5c29x3[_0xd587[57]](_0xd587[235],Math[_0xd587[519]](_0x5c29x16[_0xd587[235]]- 1)),_0x5c29x3[_0xd587[57]](_0xd587[236],Math[_0xd587[519]](_0x5c29x16[_0xd587[236]]- 1)),_0x5c29x3[_0xd587[57]](_0xd587[117],Math[_0xd587[430]](_0x5c29x16[_0xd587[117]]+ 2)),_0x5c29x3[_0xd587[57]](_0xd587[119],Math[_0xd587[430]](_0x5c29x16[_0xd587[119]])),_0x5c29x15= null!= _0x5c29x15[_0xd587[1263]]?Math[_0xd587[160]](1,this[_0xd587[1239]](_0x5c29x15[_0xd587[255]])):0,_0x5c29x3[_0xd587[57]](_0xd587[1382],_0x5c29x15),this[_0xd587[813]][_0xd587[295]]== document&& 1== mxUtils[_0xd587[1454]](_0x5c29x15,2)&& _0x5c29x3[_0xd587[57]](_0xd587[535],_0xd587[1455]),_0x5c29x2[_0xd587[950]](_0x5c29x3,_0x5c29x2[_0xd587[285]]))}};mxSvgCanvas2D[_0xd587[202]][_0xd587[1336]]= function(){this[_0xd587[1370]](!1,!0)};mxSvgCanvas2D[_0xd587[202]][_0xd587[1334]]= function(){this[_0xd587[1370]](!0,!1)};mxSvgCanvas2D[_0xd587[202]][_0xd587[1337]]= function(){this[_0xd587[1370]](!0,!0)};var mxVmlCanvas2D=function(_0x5c29x2){mxAbstractCanvas2D[_0xd587[239]](this);this[_0xd587[813]]= _0x5c29x2};mxUtils[_0xd587[1284]](mxVmlCanvas2D,mxAbstractCanvas2D);mxVmlCanvas2D[_0xd587[202]][_0xd587[252]]= null;mxVmlCanvas2D[_0xd587[202]][_0xd587[1285]]= !0;mxVmlCanvas2D[_0xd587[202]][_0xd587[1219]]= _0xd587[1456];mxVmlCanvas2D[_0xd587[202]][_0xd587[1221]]= _0xd587[1457];mxVmlCanvas2D[_0xd587[202]][_0xd587[1225]]= _0xd587[1458];mxVmlCanvas2D[_0xd587[202]][_0xd587[1227]]= _0xd587[235];mxVmlCanvas2D[_0xd587[202]][_0xd587[1459]]= _0xd587[110];mxVmlCanvas2D[_0xd587[202]][_0xd587[1460]]= 1;mxVmlCanvas2D[_0xd587[202]][_0xd587[1370]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=this[_0xd587[252]],_0x5c29x5=this[_0xd587[724]];if(null!= _0x5c29x4){if(_0xd587[253]== _0x5c29x4[_0xd587[301]]){if(null!= this[_0xd587[1215]]&& 0< this[_0xd587[1215]][_0xd587[67]]){_0x5c29x4[_0xd587[1215]]= this[_0xd587[1215]][_0xd587[234]](_0xd587[185])+ _0xd587[1461],_0x5c29x4[_0xd587[124]][_0xd587[117]]= this[_0xd587[813]][_0xd587[124]][_0xd587[117]],_0x5c29x4[_0xd587[124]][_0xd587[119]]= this[_0xd587[813]][_0xd587[124]][_0xd587[119]],_0x5c29x4[_0xd587[1462]]= parseInt(_0x5c29x4[_0xd587[124]][_0xd587[117]])+ _0xd587[185]+ parseInt(_0x5c29x4[_0xd587[124]][_0xd587[119]])}else {return}};_0x5c29x4[_0xd587[1463]]= this[_0xd587[1239]](Math[_0xd587[160]](1,_0x5c29x5[_0xd587[610]]* _0x5c29x5[_0xd587[255]]/ this[_0xd587[1460]]))+ _0xd587[168];_0x5c29x5[_0xd587[639]]&& this[_0xd587[813]][_0xd587[62]](this[_0xd587[1375]](_0x5c29x4,_0x5c29x2&& null!= _0x5c29x5[_0xd587[604]],_0x5c29x3&& null!= _0x5c29x5[_0xd587[608]]));_0x5c29x3&& null!= _0x5c29x5[_0xd587[608]]?(_0x5c29x4[_0xd587[1464]]= _0xd587[128],_0x5c29x4[_0xd587[1306]]= _0x5c29x5[_0xd587[608]]):_0x5c29x4[_0xd587[1464]]= _0xd587[308];_0x5c29x4[_0xd587[62]](this[_0xd587[1465]]());_0x5c29x2&& null!= _0x5c29x5[_0xd587[604]]?_0x5c29x4[_0xd587[62]](this[_0xd587[1466]]()):this[_0xd587[1229]]&& (_0xd587[253]!= _0x5c29x4[_0xd587[301]]|| this[_0xd587[1215]][this[_0xd587[1215]][_0xd587[67]]- 1]== this[_0xd587[1227]])?_0x5c29x4[_0xd587[62]](this[_0xd587[1467]]()):_0x5c29x4[_0xd587[1468]]= _0xd587[308];this[_0xd587[813]][_0xd587[62]](_0x5c29x4)}};mxVmlCanvas2D[_0xd587[202]][_0xd587[1467]]= function(){var _0x5c29x2=document[_0xd587[55]](mxClient[_0xd587[463]]+ _0xd587[1469]);_0x5c29x2[_0xd587[390]]= mxClient[_0xd587[88]]+ _0xd587[1470];_0x5c29x2[_0xd587[60]]= _0xd587[1471];return _0x5c29x2};mxVmlCanvas2D[_0xd587[202]][_0xd587[1466]]= function(){var _0x5c29x2=this[_0xd587[724]],_0x5c29x3=document[_0xd587[55]](mxClient[_0xd587[463]]+ _0xd587[1469]);_0x5c29x3[_0xd587[352]]= _0x5c29x2[_0xd587[604]];if(null!= _0x5c29x2[_0xd587[606]]){_0x5c29x3[_0xd587[60]]= _0xd587[1299];_0x5c29x3[_0xd587[865]]= _0xd587[130];_0x5c29x3[_0xd587[1472]]= _0x5c29x2[_0xd587[606]];var _0x5c29x4=180- _0x5c29x2[_0xd587[603]],_0x5c29x4=_0x5c29x2[_0xd587[607]]== mxConstants[_0xd587[1359]]?_0x5c29x4- (90+ (_0xd587[235]== this[_0xd587[813]][_0xd587[124]][_0xd587[1473]]?180:0)):_0x5c29x2[_0xd587[607]]== mxConstants[_0xd587[1356]]?_0x5c29x4+ (90+ (_0xd587[235]== this[_0xd587[813]][_0xd587[124]][_0xd587[1473]]?180:0)):_0x5c29x2[_0xd587[607]]== mxConstants[_0xd587[1358]]?_0x5c29x4- (180+ (_0xd587[236]== this[_0xd587[813]][_0xd587[124]][_0xd587[1473]]?-180:0)):_0x5c29x4+ (_0xd587[236]== this[_0xd587[813]][_0xd587[124]][_0xd587[1473]]?-180:0);if(_0xd587[235]== this[_0xd587[813]][_0xd587[124]][_0xd587[1473]]|| _0xd587[236]== this[_0xd587[813]][_0xd587[124]][_0xd587[1473]]){_0x5c29x4*= -1};_0x5c29x3[_0xd587[1474]]= mxUtils[_0xd587[1454]](_0x5c29x4,360);_0x5c29x3[_0xd587[461]]= 100* _0x5c29x2[_0xd587[1244]]* _0x5c29x2[_0xd587[1247]]+ _0xd587[229];_0x5c29x3[_0xd587[57]](mxClient[_0xd587[1475]]+ _0xd587[1476],100* _0x5c29x2[_0xd587[1244]]* _0x5c29x2[_0xd587[1248]]+ _0xd587[229])}else {1> _0x5c29x2[_0xd587[1244]]&& (_0x5c29x3[_0xd587[461]]= 100* _0x5c29x2[_0xd587[1244]]+ _0xd587[229])};return _0x5c29x3};mxVmlCanvas2D[_0xd587[202]][_0xd587[1465]]= function(){var _0x5c29x2=this[_0xd587[724]],_0x5c29x3=document[_0xd587[55]](mxClient[_0xd587[463]]+ _0xd587[1477]);_0x5c29x3[_0xd587[1478]]= _0x5c29x2[_0xd587[1254]]|| _0xd587[1232];_0x5c29x3[_0xd587[1479]]= _0x5c29x2[_0xd587[1256]]|| _0xd587[1233];_0x5c29x3[_0xd587[1313]]= _0x5c29x2[_0xd587[1258]]|| _0xd587[1480];1> _0x5c29x2[_0xd587[1244]]&& (_0x5c29x3[_0xd587[461]]= 100* _0x5c29x2[_0xd587[1244]]+ _0xd587[229]);_0x5c29x2[_0xd587[648]]&& (_0x5c29x3[_0xd587[1481]]= this[_0xd587[1482]]());return _0x5c29x3};mxVmlCanvas2D[_0xd587[202]][_0xd587[1482]]= function(){var _0x5c29x2=_0xd587[1483];if(null!= this[_0xd587[724]][_0xd587[649]]){var _0x5c29x3=this[_0xd587[724]][_0xd587[649]][_0xd587[224]](_0xd587[185]);0< _0x5c29x3[_0xd587[67]]&& 1== _0x5c29x3[0]&& (_0x5c29x2= _0xd587[1484])};return _0x5c29x2};mxVmlCanvas2D[_0xd587[202]][_0xd587[1375]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){var _0x5c29x5=this[_0xd587[724]],_0x5c29x9=-_0x5c29x5[_0xd587[603]]* (Math[_0xd587[424]]/ 180),_0x5c29xa=Math[_0xd587[426]](_0x5c29x9),_0x5c29x9=Math[_0xd587[427]](_0x5c29x9),_0x5c29x12=_0x5c29x5[_0xd587[1273]]* _0x5c29x5[_0xd587[255]],_0x5c29x13=_0x5c29x5[_0xd587[1274]]* _0x5c29x5[_0xd587[255]];_0xd587[235]== this[_0xd587[813]][_0xd587[124]][_0xd587[1473]]?_0x5c29x12*= -1:_0xd587[236]== this[_0xd587[813]][_0xd587[124]][_0xd587[1473]]&& (_0x5c29x13*= -1);var _0x5c29x14=_0x5c29x2[_0xd587[511]](!0);_0x5c29x14[_0xd587[124]][_0xd587[945]]= Math[_0xd587[488]](_0x5c29x12* _0x5c29xa- _0x5c29x13* _0x5c29x9)+ _0xd587[168];_0x5c29x14[_0xd587[124]][_0xd587[953]]= Math[_0xd587[488]](_0x5c29x12* _0x5c29x9+ _0x5c29x13* _0x5c29xa)+ _0xd587[168];8== document[_0xd587[5]]&& (_0x5c29x14[_0xd587[1463]]= _0x5c29x2[_0xd587[1463]],_0xd587[253]== _0x5c29x2[_0xd587[301]]&& (_0x5c29x14[_0xd587[1215]]= this[_0xd587[1215]][_0xd587[234]](_0xd587[185])+ _0xd587[1461],_0x5c29x14[_0xd587[124]][_0xd587[117]]= this[_0xd587[813]][_0xd587[124]][_0xd587[117]],_0x5c29x14[_0xd587[124]][_0xd587[119]]= this[_0xd587[813]][_0xd587[124]][_0xd587[119]],_0x5c29x14[_0xd587[1462]]= parseInt(_0x5c29x2[_0xd587[124]][_0xd587[117]])+ _0xd587[185]+ parseInt(_0x5c29x2[_0xd587[124]][_0xd587[119]])));_0x5c29x4?(_0x5c29x14[_0xd587[1306]]= _0x5c29x5[_0xd587[1269]],_0x5c29x14[_0xd587[62]](this[_0xd587[1485]]())):_0x5c29x14[_0xd587[1464]]= _0xd587[308];_0x5c29x3?_0x5c29x14[_0xd587[62]](this[_0xd587[1486]]()):_0x5c29x14[_0xd587[1468]]= _0xd587[308];return _0x5c29x14};mxVmlCanvas2D[_0xd587[202]][_0xd587[1486]]= function(){var _0x5c29x2=document[_0xd587[55]](mxClient[_0xd587[463]]+ _0xd587[1469]);_0x5c29x2[_0xd587[352]]= this[_0xd587[724]][_0xd587[1269]];_0x5c29x2[_0xd587[461]]= 100* this[_0xd587[724]][_0xd587[1244]]* this[_0xd587[724]][_0xd587[1271]]+ _0xd587[229];return _0x5c29x2};mxVmlCanvas2D[_0xd587[202]][_0xd587[1485]]= function(){var _0x5c29x2=this[_0xd587[1465]]();_0x5c29x2[_0xd587[461]]= 100* this[_0xd587[724]][_0xd587[1244]]* this[_0xd587[724]][_0xd587[1271]]+ _0xd587[229];return _0x5c29x2};mxVmlCanvas2D[_0xd587[202]][_0xd587[1294]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){_0x5c29x3&& _0x5c29x4?_0x5c29x2+= 180:_0x5c29x3?this[_0xd587[813]][_0xd587[124]][_0xd587[1473]]= _0xd587[235]:_0x5c29x4&& (this[_0xd587[813]][_0xd587[124]][_0xd587[1473]]= _0xd587[236]);if(_0x5c29x3?!_0x5c29x4:_0x5c29x4){_0x5c29x2*= -1};this[_0xd587[813]][_0xd587[124]][_0xd587[603]]= _0x5c29x2;this[_0xd587[724]][_0xd587[603]]+= _0x5c29x2;this[_0xd587[724]][_0xd587[1395]]= _0x5c29x5;this[_0xd587[724]][_0xd587[1396]]= _0x5c29x9};mxVmlCanvas2D[_0xd587[202]][_0xd587[1275]]= function(){mxAbstractCanvas2D[_0xd587[202]][_0xd587[1275]][_0xd587[183]](this,arguments);this[_0xd587[252]]= document[_0xd587[55]](mxClient[_0xd587[463]]+ _0xd587[1487]);this[_0xd587[252]][_0xd587[124]][_0xd587[491]]= _0xd587[492]};mxVmlCanvas2D[_0xd587[202]][_0xd587[1278]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){var _0x5c29x9=this[_0xd587[724]],_0x5c29xa=(this[_0xd587[1217]]+ _0x5c29x9[_0xd587[1126]])* _0x5c29x9[_0xd587[255]],_0x5c29x12=(this[_0xd587[1218]]+ _0x5c29x9[_0xd587[1125]])* _0x5c29x9[_0xd587[255]];_0x5c29x2= (_0x5c29x2+ _0x5c29x9[_0xd587[1126]])* _0x5c29x9[_0xd587[255]];_0x5c29x3= (_0x5c29x3+ _0x5c29x9[_0xd587[1125]])* _0x5c29x9[_0xd587[255]];_0x5c29x4= (_0x5c29x4+ _0x5c29x9[_0xd587[1126]])* _0x5c29x9[_0xd587[255]];_0x5c29x5= (_0x5c29x5+ _0x5c29x9[_0xd587[1125]])* _0x5c29x9[_0xd587[255]];var _0x5c29x12=_0x5c29x12+ 2/ 3* (_0x5c29x3- _0x5c29x12),_0x5c29x13=_0x5c29x4+ 2/ 3* (_0x5c29x2- _0x5c29x4);_0x5c29x3= _0x5c29x5+ 2/ 3* (_0x5c29x3- _0x5c29x5);this[_0xd587[1215]][_0xd587[207]](_0xd587[1488]+ this[_0xd587[1239]](_0x5c29xa+ 2/ 3* (_0x5c29x2- _0x5c29xa))+ _0xd587[185]+ this[_0xd587[1239]](_0x5c29x12)+ _0xd587[185]+ this[_0xd587[1239]](_0x5c29x13)+ _0xd587[185]+ this[_0xd587[1239]](_0x5c29x3)+ _0xd587[185]+ this[_0xd587[1239]](_0x5c29x4)+ _0xd587[185]+ this[_0xd587[1239]](_0x5c29x5));this[_0xd587[1217]]= _0x5c29x4/ _0x5c29x9[_0xd587[255]]- _0x5c29x9[_0xd587[1126]];this[_0xd587[1218]]= _0x5c29x5/ _0x5c29x9[_0xd587[255]]- _0x5c29x9[_0xd587[1125]]};mxVmlCanvas2D[_0xd587[202]][_0xd587[1489]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){var _0x5c29xa=this[_0xd587[724]];_0x5c29x2= document[_0xd587[55]](_0x5c29x2);_0x5c29x2[_0xd587[124]][_0xd587[491]]= _0xd587[492];_0x5c29x2[_0xd587[124]][_0xd587[361]]= this[_0xd587[1239]]((_0x5c29x3+ _0x5c29xa[_0xd587[1126]])* _0x5c29xa[_0xd587[255]])+ _0xd587[168];_0x5c29x2[_0xd587[124]][_0xd587[125]]= this[_0xd587[1239]]((_0x5c29x4+ _0x5c29xa[_0xd587[1125]])* _0x5c29xa[_0xd587[255]])+ _0xd587[168];_0x5c29x2[_0xd587[124]][_0xd587[117]]= this[_0xd587[1239]](_0x5c29x5* _0x5c29xa[_0xd587[255]])+ _0xd587[168];_0x5c29x2[_0xd587[124]][_0xd587[119]]= this[_0xd587[1239]](_0x5c29x9* _0x5c29xa[_0xd587[255]])+ _0xd587[168];return _0x5c29x2};mxVmlCanvas2D[_0xd587[202]][_0xd587[1319]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){this[_0xd587[252]]= this[_0xd587[1489]](mxClient[_0xd587[463]]+ _0xd587[1490],_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5)};mxVmlCanvas2D[_0xd587[202]][_0xd587[1320]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa){this[_0xd587[252]]= this[_0xd587[1489]](mxClient[_0xd587[463]]+ _0xd587[1491],_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5);this[_0xd587[252]][_0xd587[57]](_0xd587[1492],Math[_0xd587[160]](100* _0x5c29x9/ _0x5c29x4,100* _0x5c29xa/ _0x5c29x5)+ _0xd587[229])};mxVmlCanvas2D[_0xd587[202]][_0xd587[680]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){this[_0xd587[252]]= this[_0xd587[1489]](mxClient[_0xd587[463]]+ _0xd587[1493],_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5)};mxVmlCanvas2D[_0xd587[202]][_0xd587[618]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa,_0x5c29x12,_0x5c29x13){var _0x5c29x14=null;_0x5c29xa?(_0x5c29x14= this[_0xd587[1489]](mxClient[_0xd587[463]]+ _0xd587[1490],_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5),_0x5c29x14[_0xd587[1464]]= _0xd587[308],_0x5c29x2= document[_0xd587[55]](mxClient[_0xd587[463]]+ _0xd587[1469]),_0x5c29x2[_0xd587[1322]]= _0x5c29xa?_0xd587[1494]:_0xd587[1495],_0x5c29x2[_0xd587[1294]]= _0xd587[128],_0x5c29x2[_0xd587[60]]= _0xd587[1496],_0x5c29x2[_0xd587[390]]= _0x5c29x9,_0x5c29x14[_0xd587[62]](_0x5c29x2)):(_0x5c29x14= this[_0xd587[1489]](mxClient[_0xd587[463]]+ _0xd587[464],_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5),_0x5c29x14[_0xd587[390]]= _0x5c29x9);_0x5c29x12&& _0x5c29x13?_0x5c29x14[_0xd587[124]][_0xd587[603]]= _0xd587[1497]:_0x5c29x12?_0x5c29x14[_0xd587[124]][_0xd587[1473]]= _0xd587[235]:_0x5c29x13&& (_0x5c29x14[_0xd587[124]][_0xd587[1473]]= _0xd587[236]);1> this[_0xd587[724]][_0xd587[1244]]&& (_0x5c29x14[_0xd587[124]][_0xd587[347]]+= _0xd587[459]+ 100* this[_0xd587[724]][_0xd587[1244]]+ _0xd587[460]);this[_0xd587[813]][_0xd587[62]](_0x5c29x14)};mxVmlCanvas2D[_0xd587[202]][_0xd587[1404]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){_0x5c29x4= document[_0xd587[55]](_0xd587[485]);var _0x5c29x9=this[_0xd587[724]],_0x5c29xa=_0xd587[110];null!= _0x5c29x9[_0xd587[1261]]&& (_0x5c29xa+= _0xd587[1418]+ _0x5c29x9[_0xd587[1261]]+ _0xd587[471]);null!= _0x5c29x9[_0xd587[1263]]&& (_0x5c29xa+= _0xd587[1419]+ _0x5c29x9[_0xd587[1263]]+ _0xd587[471]);mxUtils[_0xd587[1331]](_0x5c29x2)?_0x5c29x4[_0xd587[62]](_0x5c29x2):0< _0x5c29xa[_0xd587[67]]&& !_0x5c29x5?(_0x5c29x5= document[_0xd587[55]](_0xd587[485]),_0x5c29x5[_0xd587[124]][_0xd587[103]]= _0x5c29xa,_0x5c29x5[_0xd587[124]][_0xd587[495]]= mxClient[_0xd587[496]]?_0xd587[497]:_0xd587[498],_0x5c29x5[_0xd587[124]][_0xd587[499]]= _0xd587[500],_0x5c29x5[_0xd587[339]]= _0x5c29x2,_0x5c29x4[_0xd587[62]](_0x5c29x5)):(_0x5c29x4[_0xd587[124]][_0xd587[103]]= _0x5c29xa,_0x5c29x4[_0xd587[339]]= _0x5c29x2);_0x5c29x2= _0x5c29x4[_0xd587[124]];_0x5c29x2[_0xd587[487]]= Math[_0xd587[488]](_0x5c29x9[_0xd587[487]]/ this[_0xd587[1460]])+ _0xd587[168];_0x5c29x2[_0xd587[486]]= _0x5c29x9[_0xd587[486]];_0x5c29x2[_0xd587[352]]= _0x5c29x9[_0xd587[665]];_0x5c29x2[_0xd587[123]]= _0xd587[125];_0x5c29x2[_0xd587[1165]]= _0x5c29x3|| _0xd587[361];_0x5c29x2[_0xd587[489]]= Math[_0xd587[488]](_0x5c29x9[_0xd587[487]]* mxConstants[_0xd587[490]]/ this[_0xd587[1460]])+ _0xd587[168];(_0x5c29x9[_0xd587[666]]& mxConstants[_0xd587[1410]])== mxConstants[_0xd587[1410]]&& (_0x5c29x2[_0xd587[1452]]= _0xd587[1447]);(_0x5c29x9[_0xd587[666]]& mxConstants[_0xd587[1412]])== mxConstants[_0xd587[1412]]&& (_0x5c29x2[_0xd587[666]]= _0xd587[1449]);(_0x5c29x9[_0xd587[666]]& mxConstants[_0xd587[1414]])== mxConstants[_0xd587[1414]]&& (_0x5c29x2[_0xd587[1498]]= _0xd587[355]);return _0x5c29x4};mxVmlCanvas2D[_0xd587[202]][_0xd587[963]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa,_0x5c29x12,_0x5c29x13,_0x5c29x14,_0x5c29x15,_0x5c29x16,_0x5c29x17){if(this[_0xd587[1285]]&& null!= _0x5c29x9){var _0x5c29x18=this[_0xd587[724]];if(_0xd587[1428]== _0x5c29x14){null!= _0x5c29x18[_0xd587[603]]&& (_0x5c29x3= this[_0xd587[1241]](_0x5c29x2,_0x5c29x3,_0x5c29x18[_0xd587[603]],_0x5c29x18[_0xd587[1395]],_0x5c29x18[_0xd587[1396]]),_0x5c29x2= _0x5c29x3[_0xd587[235]],_0x5c29x3= _0x5c29x3[_0xd587[236]]);8== document[_0xd587[5]]?(_0x5c29x2+= _0x5c29x18[_0xd587[1126]],_0x5c29x3+= _0x5c29x18[_0xd587[1125]]):(_0x5c29x2*= _0x5c29x18[_0xd587[255]],_0x5c29x3*= _0x5c29x18[_0xd587[255]]);_0x5c29x14= 8== document[_0xd587[5]]?document[_0xd587[55]](mxClient[_0xd587[463]]+ _0xd587[1499]):document[_0xd587[55]](_0xd587[485]);_0x5c29x14[_0xd587[124]][_0xd587[491]]= _0xd587[492];_0x5c29x14[_0xd587[124]][_0xd587[495]]= _0xd587[497];_0x5c29x14[_0xd587[124]][_0xd587[361]]= this[_0xd587[1239]](_0x5c29x2)+ _0xd587[168];_0x5c29x14[_0xd587[124]][_0xd587[125]]= this[_0xd587[1239]](_0x5c29x3)+ _0xd587[168];_0x5c29x14[_0xd587[124]][_0xd587[499]]= _0x5c29x18[_0xd587[255]];var _0x5c29x19=document[_0xd587[55]](_0xd587[485]);_0x5c29x19[_0xd587[124]][_0xd587[491]]= _0xd587[1500];_0x5c29x19[_0xd587[124]][_0xd587[495]]= _0xd587[497];var _0x5c29x1a=mxUtils[_0xd587[1501]](_0x5c29xa,_0x5c29x12),_0x5c29x1b=_0x5c29x1a[_0xd587[235]],_0x5c29x1a=_0x5c29x1a[_0xd587[236]];_0x5c29x9= this[_0xd587[1404]](_0x5c29x9,_0x5c29xa,_0x5c29x12,_0x5c29x15);_0x5c29xa= document[_0xd587[55]](_0xd587[485]);_0x5c29x13?(!_0x5c29x16&& 0< _0x5c29x4&& (_0x5c29x9[_0xd587[124]][_0xd587[117]]= Math[_0xd587[488]](_0x5c29x4)+ _0xd587[168]),_0x5c29x9[_0xd587[124]][_0xd587[493]]= _0xd587[1502]):_0x5c29x9[_0xd587[124]][_0xd587[493]]= _0xd587[494];_0x5c29x13= _0x5c29x18[_0xd587[603]]+ (_0x5c29x17|| 0);this[_0xd587[1216]]&& 0!= _0x5c29x13?(_0x5c29xa[_0xd587[124]][_0xd587[495]]= _0xd587[497],_0x5c29xa[_0xd587[124]][_0xd587[499]]= _0xd587[500],_0x5c29xa[_0xd587[62]](_0x5c29x9),8== document[_0xd587[5]]&& _0xd587[529]!= this[_0xd587[813]][_0xd587[301]]?(_0x5c29x19[_0xd587[62]](_0x5c29xa),_0x5c29x14[_0xd587[62]](_0x5c29x19)):_0x5c29x14[_0xd587[62]](_0x5c29xa)):8== document[_0xd587[5]]?(_0x5c29x19[_0xd587[62]](_0x5c29x9),_0x5c29x14[_0xd587[62]](_0x5c29x19)):(_0x5c29x9[_0xd587[124]][_0xd587[495]]= _0xd587[497],_0x5c29x14[_0xd587[62]](_0x5c29x9));_0xd587[529]!= this[_0xd587[813]][_0xd587[301]]?(_0x5c29x17= document[_0xd587[55]](mxClient[_0xd587[463]]+ _0xd587[1490]),_0x5c29x17[_0xd587[1464]]= _0xd587[308],_0x5c29x17[_0xd587[1468]]= _0xd587[308],_0x5c29x17[_0xd587[62]](_0x5c29x14),this[_0xd587[813]][_0xd587[62]](_0x5c29x17)):this[_0xd587[813]][_0xd587[62]](_0x5c29x14);_0x5c29x16?(_0x5c29x9[_0xd587[124]][_0xd587[277]]= _0xd587[188],0< _0x5c29x4&& (_0x5c29x9[_0xd587[124]][_0xd587[117]]= Math[_0xd587[488]](_0x5c29x4)+ _0xd587[168]),0< _0x5c29x5&& 8== document[_0xd587[5]]&& (_0x5c29x9[_0xd587[124]][_0xd587[1503]]= Math[_0xd587[488]](_0x5c29x5)+ _0xd587[168])):_0x5c29x15&& (_0x5c29x9[_0xd587[124]][_0xd587[117]]= _0x5c29x4+ _0xd587[168],0< _0x5c29x5&& (_0x5c29x9[_0xd587[124]][_0xd587[1503]]= Math[_0xd587[488]](_0x5c29x5)+ _0xd587[168]));if(this[_0xd587[1216]]&& 0!= _0x5c29x13){_0x5c29x4= _0x5c29x13* (Math[_0xd587[424]]/ 180);_0x5c29x13= parseFloat(parseFloat(Math[_0xd587[426]](_0x5c29x4))[_0xd587[1293]](8));_0x5c29x17= parseFloat(parseFloat(Math[_0xd587[427]](-_0x5c29x4))[_0xd587[1293]](8));_0x5c29x4%= 2* Math[_0xd587[424]];0> _0x5c29x4&& (_0x5c29x4+= 2* Math[_0xd587[424]]);_0x5c29x4%= Math[_0xd587[424]];_0x5c29x4> Math[_0xd587[424]]/ 2&& (_0x5c29x4= Math[_0xd587[424]]- _0x5c29x4);_0x5c29x12= Math[_0xd587[426]](_0x5c29x4);var _0x5c29x1c=Math[_0xd587[427]](_0x5c29x4);8== document[_0xd587[5]]&& (_0x5c29x9[_0xd587[124]][_0xd587[495]]= _0xd587[498],_0x5c29xa[_0xd587[124]][_0xd587[495]]= _0xd587[498],_0x5c29x19[_0xd587[124]][_0xd587[495]]= _0xd587[498]);_0x5c29x9[_0xd587[124]][_0xd587[187]]= _0xd587[188];document[_0xd587[112]][_0xd587[62]](_0x5c29x9);_0x5c29x4= _0x5c29x9[_0xd587[359]];_0x5c29x19= _0x5c29x9[_0xd587[167]];if(mxClient[_0xd587[496]]&& (_0x5c29x16|| _0x5c29x15)&& _0x5c29x19> _0x5c29x5){_0x5c29x19= _0x5c29x5,_0x5c29x9[_0xd587[124]][_0xd587[119]]= _0x5c29x19+ _0xd587[168]};_0x5c29x5= _0x5c29x19;_0x5c29x16= (_0x5c29x5- _0x5c29x5* _0x5c29x12+ _0x5c29x4* -_0x5c29x1c)/ 2- _0x5c29x17* _0x5c29x4* (_0x5c29x1b+ 0.5)+ _0x5c29x13* _0x5c29x5* (_0x5c29x1a+ 0.5);_0x5c29x15= (_0x5c29x4- _0x5c29x4* _0x5c29x12+ _0x5c29x5* -_0x5c29x1c)/ 2+ _0x5c29x13* _0x5c29x4* (_0x5c29x1b+ 0.5)+ _0x5c29x17* _0x5c29x5* (_0x5c29x1a+ 0.5);_0xd587[1504]== _0x5c29x14[_0xd587[301]]&& _0xd587[529]== this[_0xd587[813]][_0xd587[301]]?(_0x5c29x1b= document[_0xd587[55]](_0xd587[485]),_0x5c29x1b[_0xd587[124]][_0xd587[495]]= _0xd587[498],_0x5c29x1b[_0xd587[124]][_0xd587[491]]= _0xd587[492],_0x5c29x1b[_0xd587[124]][_0xd587[361]]= this[_0xd587[1239]](_0x5c29x2+ (_0x5c29x15- _0x5c29x4/ 2)* _0x5c29x18[_0xd587[255]])+ _0xd587[168],_0x5c29x1b[_0xd587[124]][_0xd587[125]]= this[_0xd587[1239]](_0x5c29x3+ (_0x5c29x16- _0x5c29x5/ 2)* _0x5c29x18[_0xd587[255]])+ _0xd587[168],_0x5c29x14[_0xd587[265]][_0xd587[62]](_0x5c29x1b),_0x5c29x1b[_0xd587[62]](_0x5c29x14)):(_0x5c29x18= 8== document[_0xd587[5]]?1:_0x5c29x18[_0xd587[255]],_0x5c29x14[_0xd587[124]][_0xd587[361]]= this[_0xd587[1239]](_0x5c29x2+ (_0x5c29x15- _0x5c29x4/ 2)* _0x5c29x18)+ _0xd587[168],_0x5c29x14[_0xd587[124]][_0xd587[125]]= this[_0xd587[1239]](_0x5c29x3+ (_0x5c29x16- _0x5c29x5/ 2)* _0x5c29x18)+ _0xd587[168]);_0x5c29xa[_0xd587[124]][_0xd587[347]]= _0xd587[1505]+ _0x5c29x13+ _0xd587[1506]+ _0x5c29x17+ _0xd587[1507]+ -_0x5c29x17+ _0xd587[1508]+ _0x5c29x13+ _0xd587[1509];_0x5c29xa[_0xd587[124]][_0xd587[1028]]= this[_0xd587[1459]];1> this[_0xd587[724]][_0xd587[1244]]&& (_0x5c29xa[_0xd587[124]][_0xd587[347]]+= _0xd587[459]+ 100* this[_0xd587[724]][_0xd587[1244]]+ _0xd587[460]);_0x5c29x9[_0xd587[124]][_0xd587[187]]= _0xd587[110];_0x5c29xa[_0xd587[62]](_0x5c29x9)}else {8!= document[_0xd587[5]]?(_0x5c29x9[_0xd587[124]][_0xd587[123]]= _0xd587[125],1> this[_0xd587[724]][_0xd587[1244]]&& (_0x5c29x14[_0xd587[124]][_0xd587[347]]= _0xd587[459]+ 100* this[_0xd587[724]][_0xd587[1244]]+ _0xd587[460]),_0x5c29x18= _0x5c29x9[_0xd587[265]],_0x5c29x9[_0xd587[124]][_0xd587[187]]= _0xd587[188],document[_0xd587[112]][_0xd587[62]](_0x5c29x9),_0x5c29x4= _0x5c29x9[_0xd587[359]],_0x5c29x19= _0x5c29x9[_0xd587[167]],mxClient[_0xd587[496]]&& (_0x5c29x16&& _0x5c29x19> _0x5c29x5)&& (_0x5c29x19= _0x5c29x5,_0x5c29x9[_0xd587[124]][_0xd587[119]]= _0x5c29x19+ _0xd587[168]),_0x5c29x5= _0x5c29x19,_0x5c29x9[_0xd587[124]][_0xd587[187]]= _0xd587[110],_0x5c29x18[_0xd587[62]](_0x5c29x9),_0x5c29x14[_0xd587[124]][_0xd587[361]]= this[_0xd587[1239]](_0x5c29x2+ _0x5c29x4* _0x5c29x1b* this[_0xd587[724]][_0xd587[255]])+ _0xd587[168],_0x5c29x14[_0xd587[124]][_0xd587[125]]= this[_0xd587[1239]](_0x5c29x3+ _0x5c29x5* _0x5c29x1a* this[_0xd587[724]][_0xd587[255]])+ _0xd587[168]):(1> this[_0xd587[724]][_0xd587[1244]]&& (_0x5c29x9[_0xd587[124]][_0xd587[347]]= _0xd587[459]+ 100* this[_0xd587[724]][_0xd587[1244]]+ _0xd587[460]),_0x5c29x19[_0xd587[124]][_0xd587[361]]= 100* _0x5c29x1b+ _0xd587[229],_0x5c29x19[_0xd587[124]][_0xd587[125]]= 100* _0x5c29x1a+ _0xd587[229])}}else {this[_0xd587[1436]](_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,mxUtils[_0xd587[321]](_0x5c29x9,!1),_0x5c29xa,_0x5c29x12,_0x5c29x13,_0x5c29x14,_0x5c29x15,_0x5c29x16,_0x5c29x17)}}};mxVmlCanvas2D[_0xd587[202]][_0xd587[1436]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa,_0x5c29x12,_0x5c29x13,_0x5c29x14,_0x5c29x15,_0x5c29x16,_0x5c29x17){_0x5c29x5= this[_0xd587[724]];_0x5c29x2= (_0x5c29x2+ _0x5c29x5[_0xd587[1126]])* _0x5c29x5[_0xd587[255]];_0x5c29x3= (_0x5c29x3+ _0x5c29x5[_0xd587[1125]])* _0x5c29x5[_0xd587[255]];_0x5c29x4= document[_0xd587[55]](mxClient[_0xd587[463]]+ _0xd587[1487]);_0x5c29x4[_0xd587[124]][_0xd587[117]]= _0xd587[942];_0x5c29x4[_0xd587[124]][_0xd587[119]]= _0xd587[942];_0x5c29x4[_0xd587[1464]]= _0xd587[308];_0x5c29x15= document[_0xd587[55]](mxClient[_0xd587[463]]+ _0xd587[1469]);_0x5c29x15[_0xd587[352]]= _0x5c29x5[_0xd587[665]];_0x5c29x15[_0xd587[461]]= 100* _0x5c29x5[_0xd587[1244]]+ _0xd587[229];_0x5c29x4[_0xd587[62]](_0x5c29x15);_0x5c29x15= document[_0xd587[55]](mxClient[_0xd587[463]]+ _0xd587[1510]);_0x5c29x15[_0xd587[1511]]= _0xd587[128];_0x5c29x15[_0xd587[6]]= _0xd587[1512]+ this[_0xd587[1239]](0)+ _0xd587[185]+ this[_0xd587[1239]](0)+ _0xd587[1513]+ this[_0xd587[1239]](1)+ _0xd587[185]+ this[_0xd587[1239]](0);_0x5c29x4[_0xd587[62]](_0x5c29x15);_0x5c29x15= document[_0xd587[55]](mxClient[_0xd587[463]]+ _0xd587[1514]);_0x5c29x15[_0xd587[124]][_0xd587[103]]= _0xd587[1515]+ _0x5c29xa;_0x5c29x15[_0xd587[124]][_0xd587[611]]= _0x5c29xa;_0x5c29x15[_0xd587[124]][_0xd587[486]]= _0x5c29x5[_0xd587[486]];_0x5c29x15[_0xd587[1516]]= _0x5c29x9;_0x5c29x15[_0xd587[747]]= _0xd587[128];_0x5c29xa= Math[_0xd587[488]](_0x5c29x5[_0xd587[487]]* _0x5c29x5[_0xd587[255]]/ this[_0xd587[1460]]);_0x5c29x15[_0xd587[124]][_0xd587[487]]= _0x5c29xa+ _0xd587[168];(_0x5c29x5[_0xd587[666]]& mxConstants[_0xd587[1410]])== mxConstants[_0xd587[1410]]&& (_0x5c29x15[_0xd587[124]][_0xd587[1452]]= _0xd587[1447]);(_0x5c29x5[_0xd587[666]]& mxConstants[_0xd587[1412]])== mxConstants[_0xd587[1412]]&& (_0x5c29x15[_0xd587[124]][_0xd587[666]]= _0xd587[1449]);(_0x5c29x5[_0xd587[666]]& mxConstants[_0xd587[1414]])== mxConstants[_0xd587[1414]]&& (_0x5c29x15[_0xd587[124]][_0xd587[354]]= _0xd587[355]);_0x5c29x9= _0x5c29x9[_0xd587[224]](_0xd587[192]);_0x5c29x5= _0x5c29xa+ (_0x5c29x9[_0xd587[67]]- 1)* _0x5c29xa* mxConstants[_0xd587[490]];_0x5c29xa= _0x5c29x9= 0;_0x5c29x12== mxConstants[_0xd587[482]]?_0x5c29xa= -_0x5c29x5/ 2:_0x5c29x12!= mxConstants[_0xd587[481]]&& (_0x5c29xa= _0x5c29x5/ 2);null!= _0x5c29x17&& (_0x5c29x4[_0xd587[124]][_0xd587[603]]= _0x5c29x17,_0x5c29x12= _0x5c29x17* (Math[_0xd587[424]]/ 180),_0x5c29x9= Math[_0xd587[427]](_0x5c29x12)* _0x5c29xa,_0x5c29xa*= Math[_0xd587[426]](_0x5c29x12));_0x5c29x4[_0xd587[62]](_0x5c29x15);_0x5c29x4[_0xd587[124]][_0xd587[361]]= this[_0xd587[1239]](_0x5c29x2- _0x5c29x9)+ _0xd587[168];_0x5c29x4[_0xd587[124]][_0xd587[125]]= this[_0xd587[1239]](_0x5c29x3+ _0x5c29xa)+ _0xd587[168];this[_0xd587[813]][_0xd587[62]](_0x5c29x4)};mxVmlCanvas2D[_0xd587[202]][_0xd587[1336]]= function(){this[_0xd587[1370]](!1,!0)};mxVmlCanvas2D[_0xd587[202]][_0xd587[1334]]= function(){this[_0xd587[1370]](!0,!1)};mxVmlCanvas2D[_0xd587[202]][_0xd587[1337]]= function(){this[_0xd587[1370]](!0,!0)};function mxGuide(_0x5c29x2,_0x5c29x3){this[_0xd587[1179]]= _0x5c29x2;this[_0xd587[1517]](_0x5c29x3)}mxGuide[_0xd587[202]][_0xd587[1179]]= null;mxGuide[_0xd587[202]][_0xd587[1214]]= null;mxGuide[_0xd587[202]][_0xd587[662]]= !0;mxGuide[_0xd587[202]][_0xd587[704]]= !0;mxGuide[_0xd587[202]][_0xd587[1518]]= null;mxGuide[_0xd587[202]][_0xd587[1519]]= null;mxGuide[_0xd587[202]][_0xd587[1517]]= function(_0x5c29x2){this[_0xd587[1214]]= _0x5c29x2};mxGuide[_0xd587[202]][_0xd587[1019]]= function(_0x5c29x2){return !0};mxGuide[_0xd587[202]][_0xd587[1520]]= function(){return this[_0xd587[1179]][_0xd587[1020]]* this[_0xd587[1179]][_0xd587[441]][_0xd587[255]]/ 2};mxGuide[_0xd587[202]][_0xd587[1521]]= function(_0x5c29x2){_0x5c29x2= new mxPolyline([],mxConstants.GUIDE_COLOR,mxConstants.GUIDE_STROKEWIDTH);_0x5c29x2[_0xd587[1522]]= !0;return _0x5c29x2};mxGuide[_0xd587[202]][_0xd587[582]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){if(null!= this[_0xd587[1214]]&& (this[_0xd587[662]]|| this[_0xd587[704]])&& null!= _0x5c29x2&& null!= _0x5c29x3){var _0x5c29x5=this[_0xd587[1179]][_0xd587[249]]()[_0xd587[513]],_0x5c29x9=this[_0xd587[1179]][_0xd587[249]]()[_0xd587[255]],_0x5c29xa=_0x5c29x3[_0xd587[235]],_0x5c29x12=_0x5c29x3[_0xd587[236]],_0x5c29x13=!1,_0x5c29x14=!1,_0x5c29x15=this[_0xd587[1520]](),_0x5c29x16=_0x5c29x15,_0x5c29x17=_0x5c29x15,_0x5c29x15=_0x5c29x2[_0xd587[238]]();_0x5c29x15[_0xd587[235]]+= _0x5c29x3[_0xd587[235]];_0x5c29x15[_0xd587[236]]+= _0x5c29x3[_0xd587[236]];var _0x5c29x18=_0x5c29x15[_0xd587[235]],_0x5c29x19=_0x5c29x15[_0xd587[235]]+ _0x5c29x15[_0xd587[117]],_0x5c29x1a=_0x5c29x15[_0xd587[241]](),_0x5c29x1b=_0x5c29x15[_0xd587[236]],_0x5c29x1c=_0x5c29x15[_0xd587[236]]+ _0x5c29x15[_0xd587[119]],_0x5c29x1d=_0x5c29x15[_0xd587[242]]();_0x5c29x3= function(_0x5c29x3){_0x5c29x3+= this[_0xd587[1179]][_0xd587[1136]];var _0x5c29x4=!1;Math[_0xd587[425]](_0x5c29x3- _0x5c29x1a)< _0x5c29x16?(_0x5c29xa= _0x5c29x3- _0x5c29x2[_0xd587[241]](),_0x5c29x16= Math[_0xd587[425]](_0x5c29x3- _0x5c29x1a),_0x5c29x4= !0):Math[_0xd587[425]](_0x5c29x3- _0x5c29x18)< _0x5c29x16?(_0x5c29xa= _0x5c29x3- _0x5c29x2[_0xd587[235]],_0x5c29x16= Math[_0xd587[425]](_0x5c29x3- _0x5c29x18),_0x5c29x4= !0):Math[_0xd587[425]](_0x5c29x3- _0x5c29x19)< _0x5c29x16&& (_0x5c29xa= _0x5c29x3- _0x5c29x2[_0xd587[235]]- _0x5c29x2[_0xd587[117]],_0x5c29x16= Math[_0xd587[425]](_0x5c29x3- _0x5c29x19),_0x5c29x4= !0);if(_0x5c29x4){null== this[_0xd587[1518]]&& (this[_0xd587[1518]]= this[_0xd587[1521]](!0),this[_0xd587[1518]][_0xd587[507]]= this[_0xd587[1179]][_0xd587[507]]!= mxConstants[_0xd587[508]]?mxConstants[_0xd587[1523]]:mxConstants[_0xd587[508]],this[_0xd587[1518]][_0xd587[1229]]= !1,this[_0xd587[1518]][_0xd587[176]](this[_0xd587[1179]][_0xd587[249]]()[_0xd587[1524]]()));var _0x5c29x5=this[_0xd587[1179]][_0xd587[526]];_0x5c29x3-= this[_0xd587[1179]][_0xd587[1136]];this[_0xd587[1518]][_0xd587[1525]]= [ new mxPoint(_0x5c29x3,-this[_0xd587[1179]][_0xd587[1137]]), new mxPoint(_0x5c29x3,_0x5c29x5[_0xd587[191]]- 3- this[_0xd587[1179]][_0xd587[1137]])]};_0x5c29x13= _0x5c29x13|| _0x5c29x4};for(var _0x5c29x15=function(_0x5c29x3){_0x5c29x3+= this[_0xd587[1179]][_0xd587[1137]];var _0x5c29x4=!1;Math[_0xd587[425]](_0x5c29x3- _0x5c29x1d)< _0x5c29x17?(_0x5c29x12= _0x5c29x3- _0x5c29x2[_0xd587[242]](),_0x5c29x17= Math[_0xd587[425]](_0x5c29x3- _0x5c29x1d),_0x5c29x4= !0):Math[_0xd587[425]](_0x5c29x3- _0x5c29x1b)< _0x5c29x17?(_0x5c29x12= _0x5c29x3- _0x5c29x2[_0xd587[236]],_0x5c29x17= Math[_0xd587[425]](_0x5c29x3- _0x5c29x1b),_0x5c29x4= !0):Math[_0xd587[425]](_0x5c29x3- _0x5c29x1c)< _0x5c29x17&& (_0x5c29x12= _0x5c29x3- _0x5c29x2[_0xd587[236]]- _0x5c29x2[_0xd587[119]],_0x5c29x17= Math[_0xd587[425]](_0x5c29x3- _0x5c29x1c),_0x5c29x4= !0);if(_0x5c29x4){null== this[_0xd587[1519]]&& (this[_0xd587[1519]]= this[_0xd587[1521]](!1),this[_0xd587[1519]][_0xd587[507]]= this[_0xd587[1179]][_0xd587[507]]!= mxConstants[_0xd587[508]]?mxConstants[_0xd587[1523]]:mxConstants[_0xd587[508]],this[_0xd587[1519]][_0xd587[1229]]= !1,this[_0xd587[1519]][_0xd587[176]](this[_0xd587[1179]][_0xd587[249]]()[_0xd587[1524]]()));var _0x5c29x5=this[_0xd587[1179]][_0xd587[526]];_0x5c29x3-= this[_0xd587[1179]][_0xd587[1137]];this[_0xd587[1519]][_0xd587[1525]]= [ new mxPoint(-this[_0xd587[1179]][_0xd587[1136]],_0x5c29x3), new mxPoint(_0x5c29x5[_0xd587[1526]]- 3- this[_0xd587[1179]][_0xd587[1136]],_0x5c29x3)]};_0x5c29x14= _0x5c29x14|| _0x5c29x4},_0x5c29x1e=0;_0x5c29x1e< this[_0xd587[1214]][_0xd587[67]];_0x5c29x1e++){var _0x5c29x1f=this[_0xd587[1214]][_0x5c29x1e];null!= _0x5c29x1f&& (this[_0xd587[662]]&& (_0x5c29x3[_0xd587[239]](this,_0x5c29x1f[_0xd587[241]]()),_0x5c29x3[_0xd587[239]](this,_0x5c29x1f[_0xd587[235]]),_0x5c29x3[_0xd587[239]](this,_0x5c29x1f[_0xd587[235]]+ _0x5c29x1f[_0xd587[117]])),this[_0xd587[704]]&& (_0x5c29x15[_0xd587[239]](this,_0x5c29x1f[_0xd587[242]]()),_0x5c29x15[_0xd587[239]](this,_0x5c29x1f[_0xd587[236]]),_0x5c29x15[_0xd587[239]](this,_0x5c29x1f[_0xd587[236]]+ _0x5c29x1f[_0xd587[119]])))};!_0x5c29x13&& null!= this[_0xd587[1518]]?this[_0xd587[1518]][_0xd587[252]][_0xd587[124]][_0xd587[187]]= _0xd587[188]:null!= this[_0xd587[1518]]&& (this[_0xd587[1518]][_0xd587[252]][_0xd587[124]][_0xd587[187]]= _0xd587[189],this[_0xd587[1518]][_0xd587[258]]());!_0x5c29x14&& null!= this[_0xd587[1519]]?this[_0xd587[1519]][_0xd587[252]][_0xd587[124]][_0xd587[187]]= _0xd587[188]:null!= this[_0xd587[1519]]&& (this[_0xd587[1519]][_0xd587[252]][_0xd587[124]][_0xd587[187]]= _0xd587[189],this[_0xd587[1519]][_0xd587[258]]());_0x5c29x4&& (_0x5c29x13|| (_0x5c29x4= _0x5c29x2[_0xd587[235]]- (this[_0xd587[1179]][_0xd587[1021]](_0x5c29x2[_0xd587[235]]/ _0x5c29x9- _0x5c29x5[_0xd587[235]])+ _0x5c29x5[_0xd587[235]])* _0x5c29x9,_0x5c29xa= this[_0xd587[1179]][_0xd587[1021]](_0x5c29xa/ _0x5c29x9)* _0x5c29x9- _0x5c29x4),_0x5c29x14|| (_0x5c29x5= _0x5c29x2[_0xd587[236]]- (this[_0xd587[1179]][_0xd587[1021]](_0x5c29x2[_0xd587[236]]/ _0x5c29x9- _0x5c29x5[_0xd587[236]])+ _0x5c29x5[_0xd587[236]])* _0x5c29x9,_0x5c29x12= this[_0xd587[1179]][_0xd587[1021]](_0x5c29x12/ _0x5c29x9)* _0x5c29x9- _0x5c29x5));_0x5c29x3= new mxPoint(_0x5c29xa,_0x5c29x12)};return _0x5c29x3};mxGuide[_0xd587[202]][_0xd587[801]]= function(){null!= this[_0xd587[1518]]&& (this[_0xd587[1518]][_0xd587[252]][_0xd587[124]][_0xd587[187]]= _0xd587[188]);null!= this[_0xd587[1519]]&& (this[_0xd587[1519]][_0xd587[252]][_0xd587[124]][_0xd587[187]]= _0xd587[188])};mxGuide[_0xd587[202]][_0xd587[515]]= function(){null!= this[_0xd587[1518]]&& (this[_0xd587[1518]][_0xd587[515]](),this[_0xd587[1518]]= null);null!= this[_0xd587[1519]]&& (this[_0xd587[1519]][_0xd587[515]](),this[_0xd587[1519]]= null)};function mxStencil(_0x5c29x2){this[_0xd587[1527]]= _0x5c29x2;this[_0xd587[1528]]();this[_0xd587[1529]]()}mxStencil[_0xd587[1530]]= !1;mxStencil[_0xd587[202]][_0xd587[1527]]= null;mxStencil[_0xd587[202]][_0xd587[1531]]= null;mxStencil[_0xd587[202]][_0xd587[1322]]= null;mxStencil[_0xd587[202]][_0xd587[1532]]= null;mxStencil[_0xd587[202]][_0xd587[1533]]= null;mxStencil[_0xd587[202]][_0xd587[1534]]= null;mxStencil[_0xd587[202]][_0xd587[1535]]= null;mxStencil[_0xd587[202]][_0xd587[1307]]= null;mxStencil[_0xd587[202]][_0xd587[1528]]= function(){this[_0xd587[1535]]= this[_0xd587[1527]][_0xd587[64]](_0xd587[1536])[0];this[_0xd587[1534]]= this[_0xd587[1527]][_0xd587[64]](_0xd587[1537])[0];this[_0xd587[1532]]= Number(this[_0xd587[1527]][_0xd587[284]](_0xd587[1302])|| 100);this[_0xd587[1533]]= Number(this[_0xd587[1527]][_0xd587[284]](_0xd587[1303])|| 100);var _0x5c29x2=this[_0xd587[1527]][_0xd587[284]](_0xd587[1322]);this[_0xd587[1322]]= null!= _0x5c29x2?_0x5c29x2:_0xd587[1538];_0x5c29x2= this[_0xd587[1527]][_0xd587[284]](_0xd587[1307]);this[_0xd587[1307]]= null!= _0x5c29x2?_0x5c29x2:_0xd587[500]};mxStencil[_0xd587[202]][_0xd587[1529]]= function(){var _0x5c29x2=this[_0xd587[1527]][_0xd587[64]](_0xd587[1539])[0];if(null!= _0x5c29x2&& (_0x5c29x2= mxUtils[_0xd587[1540]](_0x5c29x2),null!= _0x5c29x2&& 0< _0x5c29x2[_0xd587[67]])){this[_0xd587[1531]]= [];for(var _0x5c29x3=0;_0x5c29x3< _0x5c29x2[_0xd587[67]];_0x5c29x3++){this[_0xd587[1531]][_0xd587[207]](this[_0xd587[1541]](_0x5c29x2[_0x5c29x3]))}}};mxStencil[_0xd587[202]][_0xd587[1541]]= function(_0x5c29x2){var _0x5c29x3=Number(_0x5c29x2[_0xd587[284]](_0xd587[235])),_0x5c29x4=Number(_0x5c29x2[_0xd587[284]](_0xd587[236]));_0x5c29x2= _0xd587[500]== _0x5c29x2[_0xd587[284]](_0xd587[591]);return new mxConnectionConstraint( new mxPoint(_0x5c29x3,_0x5c29x4),_0x5c29x2)};mxStencil[_0xd587[202]][_0xd587[1542]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){_0x5c29x3= this[_0xd587[1543]](_0x5c29x2,_0x5c29x3,_0x5c29x4);_0x5c29x2= _0x5c29x2[_0xd587[284]](_0xd587[1544]);if(mxStencil[_0xd587[1530]]&& null== _0x5c29x2|| _0xd587[500]== _0x5c29x2){_0x5c29x3= mxResources[_0xd587[203]](_0x5c29x3)};return _0x5c29x3};mxStencil[_0xd587[202]][_0xd587[1543]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){_0x5c29x3= _0x5c29x2[_0xd587[284]](_0x5c29x3);null== _0x5c29x3&& (_0x5c29x2= mxUtils[_0xd587[329]](_0x5c29x2),null!= _0x5c29x2&& (_0x5c29x2= mxUtils[_0xd587[1545]](_0x5c29x2),_0xd587[279]== typeof _0x5c29x2&& (_0x5c29x3= _0x5c29x2(_0x5c29x4))));return _0x5c29x3};mxStencil[_0xd587[202]][_0xd587[1546]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa){this[_0xd587[1547]](_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa,this[_0xd587[1534]],!1);this[_0xd587[1547]](_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa,this[_0xd587[1535]],!0)};mxStencil[_0xd587[202]][_0xd587[1547]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa,_0x5c29x12,_0x5c29x13){if(null!= _0x5c29x12){var _0x5c29x14=mxUtils[_0xd587[433]](_0x5c29x3[_0xd587[124]],mxConstants.STYLE_DIRECTION,null);_0x5c29x4= this[_0xd587[1548]](_0x5c29x3[_0xd587[124]],_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa,_0x5c29x14);_0x5c29x5= Math[_0xd587[243]](_0x5c29x4[_0xd587[117]],_0x5c29x4[_0xd587[119]]);_0x5c29x5= _0xd587[1549]== this[_0xd587[1307]]?Number(mxUtils[_0xd587[1550]](_0x5c29x3[_0xd587[124]],mxConstants.STYLE_STROKEWIDTH,1)):Number(this[_0xd587[1307]])* _0x5c29x5;_0x5c29x2[_0xd587[1250]](_0x5c29x5);for(_0x5c29x12= _0x5c29x12[_0xd587[285]];null!= _0x5c29x12;){_0x5c29x12[_0xd587[288]]== mxConstants[_0xd587[289]]&& this[_0xd587[1551]](_0x5c29x2,_0x5c29x3,_0x5c29x12,_0x5c29x4,_0x5c29x13),_0x5c29x12= _0x5c29x12[_0xd587[287]]}}};mxStencil[_0xd587[202]][_0xd587[1548]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa){_0x5c29x2= _0x5c29x3;_0x5c29x3= _0x5c29x5/ this[_0xd587[1532]];var _0x5c29x12=_0x5c29x9/ this[_0xd587[1533]];if(_0x5c29xa= _0xd587[700]== _0x5c29xa|| _0xd587[701]== _0x5c29xa){_0x5c29x12= _0x5c29x5/ this[_0xd587[1533]];_0x5c29x3= _0x5c29x9/ this[_0xd587[1532]];var _0x5c29x13=(_0x5c29x5- _0x5c29x9)/ 2;_0x5c29x2+= _0x5c29x13;_0x5c29x4-= _0x5c29x13};_0xd587[1552]== this[_0xd587[1322]]&& (_0x5c29x3= _0x5c29x12= Math[_0xd587[243]](_0x5c29x3,_0x5c29x12),_0x5c29xa?(_0x5c29x2+= (_0x5c29x9- this[_0xd587[1532]]* _0x5c29x3)/ 2,_0x5c29x4+= (_0x5c29x5- this[_0xd587[1533]]* _0x5c29x12)/ 2):(_0x5c29x2+= (_0x5c29x5- this[_0xd587[1532]]* _0x5c29x3)/ 2,_0x5c29x4+= (_0x5c29x9- this[_0xd587[1533]]* _0x5c29x12)/ 2));return new mxRectangle(_0x5c29x2,_0x5c29x4,_0x5c29x3,_0x5c29x12)};mxStencil[_0xd587[202]][_0xd587[1551]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){var _0x5c29xa=_0x5c29x4[_0xd587[301]],_0x5c29x12=_0x5c29x5[_0xd587[235]],_0x5c29x13=_0x5c29x5[_0xd587[236]],_0x5c29x14=_0x5c29x5[_0xd587[117]],_0x5c29x15=_0x5c29x5[_0xd587[119]],_0x5c29x16=Math[_0xd587[243]](_0x5c29x14,_0x5c29x15);if(_0xd587[815]== _0x5c29xa){_0x5c29x2[_0xd587[815]]()}else {if(_0xd587[1210]== _0x5c29xa){_0x5c29x2[_0xd587[1210]]()}else {if(_0xd587[1215]== _0x5c29xa){_0x5c29x2[_0xd587[1275]]();for(_0x5c29x4= _0x5c29x4[_0xd587[285]];null!= _0x5c29x4;){_0x5c29x4[_0xd587[288]]== mxConstants[_0xd587[289]]&& this[_0xd587[1551]](_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9),_0x5c29x4= _0x5c29x4[_0xd587[287]]}}else {if(_0xd587[268]== _0x5c29xa){_0x5c29x2[_0xd587[268]]()}else {if(_0xd587[582]== _0x5c29xa){_0x5c29x2[_0xd587[1276]](_0x5c29x12+ Number(_0x5c29x4[_0xd587[284]](_0xd587[235]))* _0x5c29x14,_0x5c29x13+ Number(_0x5c29x4[_0xd587[284]](_0xd587[236]))* _0x5c29x15)}else {if(_0xd587[683]== _0x5c29xa){_0x5c29x2[_0xd587[1277]](_0x5c29x12+ Number(_0x5c29x4[_0xd587[284]](_0xd587[235]))* _0x5c29x14,_0x5c29x13+ Number(_0x5c29x4[_0xd587[284]](_0xd587[236]))* _0x5c29x15)}else {if(_0xd587[1323]== _0x5c29xa){_0x5c29x2[_0xd587[1278]](_0x5c29x12+ Number(_0x5c29x4[_0xd587[284]](_0xd587[1324]))* _0x5c29x14,_0x5c29x13+ Number(_0x5c29x4[_0xd587[284]](_0xd587[1325]))* _0x5c29x15,_0x5c29x12+ Number(_0x5c29x4[_0xd587[284]](_0xd587[1326]))* _0x5c29x14,_0x5c29x13+ Number(_0x5c29x4[_0xd587[284]](_0xd587[1327]))* _0x5c29x15)}else {if(_0xd587[1328]== _0x5c29xa){_0x5c29x2[_0xd587[1279]](_0x5c29x12+ Number(_0x5c29x4[_0xd587[284]](_0xd587[1324]))* _0x5c29x14,_0x5c29x13+ Number(_0x5c29x4[_0xd587[284]](_0xd587[1325]))* _0x5c29x15,_0x5c29x12+ Number(_0x5c29x4[_0xd587[284]](_0xd587[1326]))* _0x5c29x14,_0x5c29x13+ Number(_0x5c29x4[_0xd587[284]](_0xd587[1327]))* _0x5c29x15,_0x5c29x12+ Number(_0x5c29x4[_0xd587[284]](_0xd587[1329]))* _0x5c29x14,_0x5c29x13+ Number(_0x5c29x4[_0xd587[284]](_0xd587[1330]))* _0x5c29x15)}else {if(_0xd587[1553]== _0x5c29xa){_0x5c29x2[_0xd587[1280]](Number(_0x5c29x4[_0xd587[284]](_0xd587[1397]))* _0x5c29x14,Number(_0x5c29x4[_0xd587[284]](_0xd587[1398]))* _0x5c29x15,Number(_0x5c29x4[_0xd587[284]](_0xd587[1554])),Number(_0x5c29x4[_0xd587[284]](_0xd587[1555])),Number(_0x5c29x4[_0xd587[284]](_0xd587[1556])),_0x5c29x12+ Number(_0x5c29x4[_0xd587[284]](_0xd587[235]))* _0x5c29x14,_0x5c29x13+ Number(_0x5c29x4[_0xd587[284]](_0xd587[236]))* _0x5c29x15)}else {if(_0xd587[1319]== _0x5c29xa){_0x5c29x2[_0xd587[1319]](_0x5c29x12+ Number(_0x5c29x4[_0xd587[284]](_0xd587[235]))* _0x5c29x14,_0x5c29x13+ Number(_0x5c29x4[_0xd587[284]](_0xd587[236]))* _0x5c29x15,Number(_0x5c29x4[_0xd587[284]](_0xd587[1302]))* _0x5c29x14,Number(_0x5c29x4[_0xd587[284]](_0xd587[1303]))* _0x5c29x15)}else {if(_0xd587[1320]== _0x5c29xa){_0x5c29x3= _0x5c29x4[_0xd587[284]](_0xd587[1492]),0== _0x5c29x3&& (_0x5c29x3= 100* mxConstants[_0xd587[1557]]),_0x5c29x16= Number(_0x5c29x4[_0xd587[284]](_0xd587[1302]))* _0x5c29x14,_0x5c29x5= Number(_0x5c29x4[_0xd587[284]](_0xd587[1303]))* _0x5c29x15,_0x5c29x3= Number(_0x5c29x3)/ 100,_0x5c29x3= Math[_0xd587[243]](_0x5c29x16* _0x5c29x3,_0x5c29x5* _0x5c29x3),_0x5c29x2[_0xd587[1320]](_0x5c29x12+ Number(_0x5c29x4[_0xd587[284]](_0xd587[235]))* _0x5c29x14,_0x5c29x13+ Number(_0x5c29x4[_0xd587[284]](_0xd587[236]))* _0x5c29x15,_0x5c29x16,_0x5c29x5,_0x5c29x3,_0x5c29x3)}else {if(_0xd587[680]== _0x5c29xa){_0x5c29x2[_0xd587[680]](_0x5c29x12+ Number(_0x5c29x4[_0xd587[284]](_0xd587[235]))* _0x5c29x14,_0x5c29x13+ Number(_0x5c29x4[_0xd587[284]](_0xd587[236]))* _0x5c29x15,Number(_0x5c29x4[_0xd587[284]](_0xd587[1302]))* _0x5c29x14,Number(_0x5c29x4[_0xd587[284]](_0xd587[1303]))* _0x5c29x15)}else {if(_0xd587[618]== _0x5c29xa){_0x5c29x3= this[_0xd587[1543]](_0x5c29x4,_0xd587[390],_0x5c29x3),_0x5c29x2[_0xd587[618]](_0x5c29x12+ Number(_0x5c29x4[_0xd587[284]](_0xd587[235]))* _0x5c29x14,_0x5c29x13+ Number(_0x5c29x4[_0xd587[284]](_0xd587[236]))* _0x5c29x15,Number(_0x5c29x4[_0xd587[284]](_0xd587[1302]))* _0x5c29x14,Number(_0x5c29x4[_0xd587[284]](_0xd587[1303]))* _0x5c29x15,_0x5c29x3,!1,_0xd587[500]== _0x5c29x4[_0xd587[284]](_0xd587[623]),_0xd587[500]== _0x5c29x4[_0xd587[284]](_0xd587[624]))}else {if(_0xd587[963]== _0x5c29xa){_0x5c29x16= this[_0xd587[1542]](_0x5c29x4,_0xd587[1332],_0x5c29x3);_0x5c29x5= _0xd587[500]== _0x5c29x4[_0xd587[284]](_0xd587[704])?-90:0;if(_0xd587[468]== _0x5c29x4[_0xd587[284]](_0xd587[1558])){var _0x5c29x17=_0x5c29x3[_0xd587[603]],_0x5c29x18=1== mxUtils[_0xd587[433]](_0x5c29x3[_0xd587[124]],mxConstants.STYLE_FLIPH,0);_0x5c29x3= 1== mxUtils[_0xd587[433]](_0x5c29x3[_0xd587[124]],mxConstants.STYLE_FLIPV,0);_0x5c29x5= _0x5c29x18&& _0x5c29x3?_0x5c29x5- _0x5c29x17:_0x5c29x18|| _0x5c29x3?_0x5c29x5+ _0x5c29x17:_0x5c29x5- _0x5c29x17};_0x5c29x5-= _0x5c29x4[_0xd587[284]](_0xd587[603]);_0x5c29x2[_0xd587[963]](_0x5c29x12+ Number(_0x5c29x4[_0xd587[284]](_0xd587[235]))* _0x5c29x14,_0x5c29x13+ Number(_0x5c29x4[_0xd587[284]](_0xd587[236]))* _0x5c29x15,0,0,_0x5c29x16,_0x5c29x4[_0xd587[284]](_0xd587[611])|| _0xd587[361],_0x5c29x4[_0xd587[284]](_0xd587[552])|| _0xd587[125],!1,_0xd587[110],!1,!1,_0x5c29x5)}else {if(_0xd587[1559]== _0x5c29xa){_0x5c29x17= mxStencilRegistry[_0xd587[1560]](_0x5c29x4[_0xd587[284]](_0xd587[298])),null!= _0x5c29x17&& (_0x5c29x12+= Number(_0x5c29x4[_0xd587[284]](_0xd587[235]))* _0x5c29x14,_0x5c29x13+= Number(_0x5c29x4[_0xd587[284]](_0xd587[236]))* _0x5c29x15,_0x5c29x16= Number(_0x5c29x4[_0xd587[284]](_0xd587[1302]))* _0x5c29x14,_0x5c29x5= Number(_0x5c29x4[_0xd587[284]](_0xd587[1303]))* _0x5c29x15,_0x5c29x17[_0xd587[1546]](_0x5c29x2,_0x5c29x3,_0x5c29x12,_0x5c29x13,_0x5c29x16,_0x5c29x5))}else {if(_0xd587[1338]== _0x5c29xa){_0x5c29x2[_0xd587[1337]]()}else {if(_0xd587[1334]== _0x5c29xa){_0x5c29x2[_0xd587[1334]]()}else {if(_0xd587[1336]== _0x5c29xa){_0x5c29x2[_0xd587[1336]]()}else {if(_0xd587[1307]== _0x5c29xa){_0x5c29x2[_0xd587[1250]](Number(_0x5c29x4[_0xd587[284]](_0xd587[117]))* _0x5c29x16)}else {if(_0xd587[648]== _0x5c29xa){_0x5c29x2[_0xd587[1251]](_0xd587[500]== _0x5c29x4[_0xd587[284]](_0xd587[648]))}else {if(_0xd587[1308]== _0x5c29xa){if(_0x5c29x4= _0x5c29x4[_0xd587[284]](_0xd587[1309]),null!= _0x5c29x4){_0x5c29x4= _0x5c29x4[_0xd587[224]](_0xd587[185]);_0x5c29x14= [];for(_0x5c29x15= 0;_0x5c29x15< _0x5c29x4[_0xd587[67]];_0x5c29x15++){0< _0x5c29x4[_0x5c29x15][_0xd587[67]]&& _0x5c29x14[_0xd587[207]](Number(_0x5c29x4[_0x5c29x15])* _0x5c29x16)};_0x5c29x4= _0x5c29x14[_0xd587[234]](_0xd587[185]);_0x5c29x2[_0xd587[1252]](_0x5c29x4)}}else {_0xd587[1306]== _0x5c29xa?_0x5c29x2[_0xd587[1249]](_0x5c29x4[_0xd587[284]](_0xd587[352])):_0xd587[1310]== _0x5c29xa?_0x5c29x2[_0xd587[1253]](_0x5c29x4[_0xd587[284]](_0xd587[1311])):_0xd587[1312]== _0x5c29xa?_0x5c29x2[_0xd587[1255]](_0x5c29x4[_0xd587[284]](_0xd587[234])):_0xd587[1313]== _0x5c29xa?_0x5c29x2[_0xd587[1257]](Number(_0x5c29x4[_0xd587[284]](_0xd587[1314]))):_0xd587[1298]== _0x5c29xa?_0x5c29x2[_0xd587[1245]](_0x5c29x4[_0xd587[284]](_0xd587[352])):_0xd587[1244]== _0x5c29xa?_0x5c29x2[_0xd587[1243]](_0x5c29x4[_0xd587[284]](_0xd587[1244])):_0xd587[1315]== _0x5c29xa?_0x5c29x2[_0xd587[1259]](_0x5c29x4[_0xd587[284]](_0xd587[352])):_0xd587[1318]== _0x5c29xa?_0x5c29x2[_0xd587[1266]](_0x5c29x4[_0xd587[284]](_0xd587[124])):_0xd587[1287]== _0x5c29xa?_0x5c29x2[_0xd587[1265]](_0x5c29x4[_0xd587[284]](_0xd587[1288])):_0xd587[1289]== _0x5c29xa&& _0x5c29x2[_0xd587[1264]](Number(_0x5c29x4[_0xd587[284]](_0xd587[803]))* _0x5c29x16)}}}}}}}}}}}}}}}}}}}}};_0x5c29x9&& (_0xd587[1338]== _0x5c29xa|| _0xd587[1334]== _0x5c29xa|| _0xd587[1336]== _0x5c29xa)&& _0x5c29x2[_0xd587[1267]](!1)};function mxShape(_0x5c29x2){this[_0xd587[1561]]= _0x5c29x2;this[_0xd587[1307]]= 1;this[_0xd587[603]]= 0;this[_0xd587[461]]= 100;this[_0xd587[624]]= this[_0xd587[623]]= !1}mxShape[_0xd587[202]][_0xd587[507]]= null;mxShape[_0xd587[202]][_0xd587[255]]= 1;mxShape[_0xd587[202]][_0xd587[1562]]= null;mxShape[_0xd587[202]][_0xd587[1525]]= null;mxShape[_0xd587[202]][_0xd587[252]]= null;mxShape[_0xd587[202]][_0xd587[124]]= null;mxShape[_0xd587[202]][_0xd587[124]]= null;mxShape[_0xd587[202]][_0xd587[1563]]= null;mxShape[_0xd587[202]][_0xd587[1561]]= null;mxShape[_0xd587[202]][_0xd587[1564]]= 6;mxShape[_0xd587[202]][_0xd587[1229]]= !0;mxShape[_0xd587[202]][_0xd587[1565]]= !1;mxShape[_0xd587[202]][_0xd587[1460]]= 1;mxShape[_0xd587[202]][_0xd587[176]]= function(_0x5c29x2){null== this[_0xd587[252]]&& (this[_0xd587[252]]= this[_0xd587[385]](_0x5c29x2),null!= _0x5c29x2&& _0x5c29x2[_0xd587[62]](this[_0xd587[252]]))};mxShape[_0xd587[202]][_0xd587[1566]]= function(){return !0};mxShape[_0xd587[202]][_0xd587[1567]]= function(){return !1};mxShape[_0xd587[202]][_0xd587[1568]]= function(){return 1== mxUtils[_0xd587[1454]](Math[_0xd587[160]](1,Math[_0xd587[488]](this[_0xd587[1307]]* this[_0xd587[255]])),2)?0.5:0};mxShape[_0xd587[202]][_0xd587[385]]= function(_0x5c29x2){var _0x5c29x3=null;return _0x5c29x3= null!= _0x5c29x2[_0xd587[538]]?this[_0xd587[1569]](_0x5c29x2):8== document[_0xd587[5]]|| this[_0xd587[507]]== mxConstants[_0xd587[508]]|| this[_0xd587[507]]!= mxConstants[_0xd587[1523]]&& this[_0xd587[1567]]()?this[_0xd587[1570]](_0x5c29x2):this[_0xd587[1571]](_0x5c29x2)};mxShape[_0xd587[202]][_0xd587[1569]]= function(){return document[_0xd587[509]](mxConstants.NS_SVG,_0xd587[449])};mxShape[_0xd587[202]][_0xd587[1571]]= function(){var _0x5c29x2=document[_0xd587[55]](mxClient[_0xd587[463]]+ _0xd587[1499]);_0x5c29x2[_0xd587[124]][_0xd587[491]]= _0xd587[492];return _0x5c29x2};mxShape[_0xd587[202]][_0xd587[1570]]= function(){var _0x5c29x2=document[_0xd587[55]](_0xd587[485]);_0x5c29x2[_0xd587[124]][_0xd587[491]]= _0xd587[492];return _0x5c29x2};mxShape[_0xd587[202]][_0xd587[1572]]= function(){this[_0xd587[258]]()};mxShape[_0xd587[202]][_0xd587[258]]= function(){this[_0xd587[1573]]();this[_0xd587[1574]]()?(this[_0xd587[252]][_0xd587[124]][_0xd587[187]]= _0xd587[110],_0xd587[529]== this[_0xd587[252]][_0xd587[301]]&& this[_0xd587[1567]]()?this[_0xd587[1575]]():this[_0xd587[1576]](),this[_0xd587[1577]]()):(this[_0xd587[252]][_0xd587[124]][_0xd587[187]]= _0xd587[188],this[_0xd587[1563]]= null)};mxShape[_0xd587[202]][_0xd587[1573]]= function(){var _0x5c29x2=this[_0xd587[1525]];if(null!= _0x5c29x2&& 0< _0x5c29x2[_0xd587[67]]&& null!= _0x5c29x2[0]){this[_0xd587[1562]]= new mxRectangle(Number(_0x5c29x2[0][_0xd587[235]]),Number(_0x5c29x2[0][_0xd587[236]]),1,1);for(var _0x5c29x3=1;_0x5c29x3< this[_0xd587[1525]][_0xd587[67]];_0x5c29x3++){null!= _0x5c29x2[_0x5c29x3]&& this[_0xd587[1562]][_0xd587[99]]( new mxRectangle(Number(_0x5c29x2[_0x5c29x3][_0xd587[235]]),Number(_0x5c29x2[_0x5c29x3][_0xd587[236]]),1,1))}}};mxShape[_0xd587[202]][_0xd587[1574]]= function(){return null!= this[_0xd587[1562]]&& !isNaN(this[_0xd587[1562]][_0xd587[235]])&& !isNaN(this[_0xd587[1562]][_0xd587[236]])&& !isNaN(this[_0xd587[1562]][_0xd587[117]])&& !isNaN(this[_0xd587[1562]][_0xd587[119]])&& 0< this[_0xd587[1562]][_0xd587[117]]&& 0< this[_0xd587[1562]][_0xd587[119]]};mxShape[_0xd587[202]][_0xd587[1578]]= function(){var _0x5c29x2=document[_0xd587[55]](mxClient[_0xd587[463]]+ _0xd587[1499]);_0x5c29x2[_0xd587[124]][_0xd587[491]]= _0xd587[492];_0x5c29x2[_0xd587[124]][_0xd587[117]]= this[_0xd587[252]][_0xd587[124]][_0xd587[117]];_0x5c29x2[_0xd587[124]][_0xd587[119]]= this[_0xd587[252]][_0xd587[124]][_0xd587[119]];return _0x5c29x2};mxShape[_0xd587[202]][_0xd587[1576]]= function(){var _0x5c29x2=this[_0xd587[1579]]();for(_0x5c29x2[_0xd587[1229]]= this[_0xd587[1229]];this[_0xd587[252]][_0xd587[1580]]();){this[_0xd587[252]][_0xd587[266]](this[_0xd587[252]][_0xd587[1581]])};this[_0xd587[1209]](_0x5c29x2);this[_0xd587[252]]!= _0x5c29x2[_0xd587[813]]&& this[_0xd587[252]][_0xd587[1583]](_0xd587[1582],_0x5c29x2[_0xd587[813]][_0xd587[342]]);_0xd587[529]== this[_0xd587[252]][_0xd587[301]]&& 8== document[_0xd587[5]]&& (this[_0xd587[252]][_0xd587[124]][_0xd587[347]]= _0xd587[110],(null== this[_0xd587[1561]]|| !this[_0xd587[1565]])&& mxUtils[_0xd587[1584]](this[_0xd587[252]]));this[_0xd587[1585]](_0x5c29x2)};mxShape[_0xd587[202]][_0xd587[1579]]= function(){var _0x5c29x2=null,_0x5c29x3=null;if(null!= this[_0xd587[252]][_0xd587[538]]){_0x5c29x2= new mxSvgCanvas2D(this[_0xd587[252]],!1),_0x5c29x2[_0xd587[1345]]= this[_0xd587[1564]],_0x5c29x2[_0xd587[1347]]= mxClient[_0xd587[133]]&& !mxClient[_0xd587[75]]&& !mxClient[_0xd587[76]],_0x5c29x3= this[_0xd587[1568]](),0!= _0x5c29x3?this[_0xd587[252]][_0xd587[57]](_0xd587[535],_0xd587[536]+ _0x5c29x3+ _0xd587[537]+ _0x5c29x3+ _0xd587[460]):this[_0xd587[252]][_0xd587[1390]](_0xd587[535])}else {this[_0xd587[1586]]();var _0x5c29x4=Math[_0xd587[160]](1,Math[_0xd587[488]](this[_0xd587[1562]][_0xd587[117]])),_0x5c29x5=Math[_0xd587[160]](1,Math[_0xd587[488]](this[_0xd587[1562]][_0xd587[119]])),_0x5c29x3=8== document[_0xd587[5]]&& this[_0xd587[1566]]()?this[_0xd587[1578]]():this[_0xd587[252]],_0x5c29x2= new mxVmlCanvas2D(_0x5c29x3,!1);_0xd587[110]!= _0x5c29x3[_0xd587[337]]&& (_0x5c29x3[_0xd587[1462]]= _0x5c29x4* this[_0xd587[1460]]+ _0xd587[537]+ _0x5c29x5* this[_0xd587[1460]],_0x5c29x2[_0xd587[255]](this[_0xd587[1460]]),_0x5c29x2[_0xd587[1460]]= this[_0xd587[1460]]);_0x5c29x3= this[_0xd587[255]];_0x5c29x2[_0xd587[513]](-Math[_0xd587[488]](this[_0xd587[1562]][_0xd587[235]]/ _0x5c29x3),-Math[_0xd587[488]](this[_0xd587[1562]][_0xd587[236]]/ _0x5c29x3))};return _0x5c29x2};mxShape[_0xd587[202]][_0xd587[1586]]= function(){this[_0xd587[252]][_0xd587[124]][_0xd587[361]]= Math[_0xd587[488]](this[_0xd587[1562]][_0xd587[235]])+ _0xd587[168];this[_0xd587[252]][_0xd587[124]][_0xd587[125]]= Math[_0xd587[488]](this[_0xd587[1562]][_0xd587[236]])+ _0xd587[168];var _0x5c29x2=Math[_0xd587[160]](1,Math[_0xd587[488]](this[_0xd587[1562]][_0xd587[117]])),_0x5c29x3=Math[_0xd587[160]](1,Math[_0xd587[488]](this[_0xd587[1562]][_0xd587[119]]));this[_0xd587[252]][_0xd587[124]][_0xd587[117]]= _0x5c29x2+ _0xd587[168];this[_0xd587[252]][_0xd587[124]][_0xd587[119]]= _0x5c29x3+ _0xd587[168];this[_0xd587[252]][_0xd587[124]][_0xd587[277]]= _0xd587[189]};mxShape[_0xd587[202]][_0xd587[1585]]= function(_0x5c29x2){if(_0x5c29x2 instanceof mxSvgCanvas2D){for(var _0x5c29x3 in _0x5c29x2[_0xd587[1339]]){var _0x5c29x4=_0x5c29x2[_0xd587[1339]][_0x5c29x3];_0x5c29x4[_0xd587[1587]]= (_0x5c29x4[_0xd587[1587]]|| 0)+ 1};this[_0xd587[1589]](this[_0xd587[1588]]);this[_0xd587[1588]]= _0x5c29x2[_0xd587[1339]]}};mxShape[_0xd587[202]][_0xd587[1209]]= function(_0x5c29x2){var _0x5c29x3=this[_0xd587[255]],_0x5c29x4=this[_0xd587[1562]][_0xd587[235]]/ _0x5c29x3,_0x5c29x5=this[_0xd587[1562]][_0xd587[236]]/ _0x5c29x3,_0x5c29x9=this[_0xd587[1562]][_0xd587[117]]/ _0x5c29x3,_0x5c29xa=this[_0xd587[1562]][_0xd587[119]]/ _0x5c29x3;if(this[_0xd587[1590]]()){var _0x5c29x12=(_0x5c29x9- _0x5c29xa)/ 2,_0x5c29x4=_0x5c29x4+ _0x5c29x12,_0x5c29x5=_0x5c29x5- _0x5c29x12,_0x5c29x12=_0x5c29x9,_0x5c29x9=_0x5c29xa,_0x5c29xa=_0x5c29x12};this[_0xd587[1591]](_0x5c29x2,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa);this[_0xd587[1592]](_0x5c29x2,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa);if(null!= this[_0xd587[1561]]){this[_0xd587[1593]](_0x5c29x2,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa)}else {if(_0x5c29x2[_0xd587[1250]](this[_0xd587[1307]]),null!= this[_0xd587[1525]]){_0x5c29x4= [];for(_0x5c29x5= 0;_0x5c29x5< this[_0xd587[1525]][_0xd587[67]];_0x5c29x5++){_0x5c29x4[_0xd587[207]]( new mxPoint(this[_0xd587[1525]][_0x5c29x5][_0xd587[235]]/ _0x5c29x3,this[_0xd587[1525]][_0x5c29x5][_0xd587[236]]/ _0x5c29x3))};this[_0xd587[1594]](_0x5c29x2,_0x5c29x4)}else {this[_0xd587[1595]](_0x5c29x2,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa)}}};mxShape[_0xd587[202]][_0xd587[1592]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){var _0x5c29xa=null;null!= this[_0xd587[124]]&& (_0x5c29xa= this[_0xd587[124]][_0xd587[649]]);_0x5c29x2[_0xd587[1243]](this[_0xd587[461]]/ 100);null!= this[_0xd587[1596]]&& _0x5c29x2[_0xd587[1267]](this[_0xd587[1596]]);null!= this[_0xd587[1522]]&& _0x5c29x2[_0xd587[1251]](this[_0xd587[1522]]);null!= _0x5c29xa&& _0x5c29x2[_0xd587[1252]](_0x5c29xa);null!= this[_0xd587[1299]]?(_0x5c29x3= this[_0xd587[1597]](_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9),_0x5c29x2[_0xd587[1246]](this[_0xd587[1334]],this[_0xd587[1299]],_0x5c29x3[_0xd587[235]],_0x5c29x3[_0xd587[236]],_0x5c29x3[_0xd587[117]],_0x5c29x3[_0xd587[119]],this[_0xd587[607]])):_0x5c29x2[_0xd587[1245]](this[_0xd587[1334]]);_0x5c29x2[_0xd587[1249]](this[_0xd587[1336]])};mxShape[_0xd587[202]][_0xd587[1597]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){return new mxRectangle(_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9)};mxShape[_0xd587[202]][_0xd587[1591]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){_0x5c29x2[_0xd587[255]](this[_0xd587[255]]);_0x5c29x2[_0xd587[1294]](this[_0xd587[1598]](),this[_0xd587[623]],this[_0xd587[624]],_0x5c29x3+ _0x5c29x5/ 2,_0x5c29x4+ _0x5c29x9/ 2)};mxShape[_0xd587[202]][_0xd587[1593]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){this[_0xd587[1565]]&& (this[_0xd587[507]]== mxConstants[_0xd587[508]]?this[_0xd587[1599]](this[_0xd587[252]],_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9):8!= document[_0xd587[5]]&& this[_0xd587[1600]](this[_0xd587[252]]));this[_0xd587[1561]][_0xd587[1546]](_0x5c29x2,this,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9)};mxShape[_0xd587[202]][_0xd587[1595]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){this[_0xd587[1601]](_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9);_0x5c29x2[_0xd587[1267]](!1);this[_0xd587[1602]](_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9)};mxShape[_0xd587[202]][_0xd587[1601]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){};mxShape[_0xd587[202]][_0xd587[1602]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){};mxShape[_0xd587[202]][_0xd587[1594]]= function(_0x5c29x2,_0x5c29x3){};mxShape[_0xd587[202]][_0xd587[1603]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=mxUtils[_0xd587[433]](this[_0xd587[124]],mxConstants.STYLE_ARCSIZE,100* mxConstants[_0xd587[1557]])/ 100;return Math[_0xd587[243]](_0x5c29x2* _0x5c29x4,_0x5c29x3* _0x5c29x4)};mxShape[_0xd587[202]][_0xd587[1604]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa){var _0x5c29x12=Math[_0xd587[430]](this[_0xd587[1307]]/ 2);_0x5c29x2[_0xd587[1246]](_0xd587[1605],_0xd587[1605],_0x5c29x3,_0x5c29x4,_0x5c29x5,0.6* _0x5c29x9,_0xd587[701],0.9,0.1);_0x5c29x2[_0xd587[1275]]();_0x5c29xa+= 2* _0x5c29x12;this[_0xd587[1606]]?(_0x5c29x2[_0xd587[1276]](_0x5c29x3- _0x5c29x12+ _0x5c29xa,_0x5c29x4- _0x5c29x12),_0x5c29x2[_0xd587[1278]](_0x5c29x3- _0x5c29x12,_0x5c29x4- _0x5c29x12,_0x5c29x3- _0x5c29x12,_0x5c29x4- _0x5c29x12+ _0x5c29xa),_0x5c29x2[_0xd587[1277]](_0x5c29x3- _0x5c29x12,_0x5c29x4+ 0.4* _0x5c29x9),_0x5c29x2[_0xd587[1278]](_0x5c29x3+ 0.5* _0x5c29x5,_0x5c29x4+ 0.7* _0x5c29x9,_0x5c29x3+ _0x5c29x5+ _0x5c29x12,_0x5c29x4+ 0.4* _0x5c29x9),_0x5c29x2[_0xd587[1277]](_0x5c29x3+ _0x5c29x5+ _0x5c29x12,_0x5c29x4- _0x5c29x12+ _0x5c29xa),_0x5c29x2[_0xd587[1278]](_0x5c29x3+ _0x5c29x5+ _0x5c29x12,_0x5c29x4- _0x5c29x12,_0x5c29x3+ _0x5c29x5+ _0x5c29x12- _0x5c29xa,_0x5c29x4- _0x5c29x12)):(_0x5c29x2[_0xd587[1276]](_0x5c29x3- _0x5c29x12,_0x5c29x4- _0x5c29x12),_0x5c29x2[_0xd587[1277]](_0x5c29x3- _0x5c29x12,_0x5c29x4+ 0.4* _0x5c29x9),_0x5c29x2[_0xd587[1278]](_0x5c29x3+ 0.5* _0x5c29x5,_0x5c29x4+ 0.7* _0x5c29x9,_0x5c29x3+ _0x5c29x5+ _0x5c29x12,_0x5c29x4+ 0.4* _0x5c29x9),_0x5c29x2[_0xd587[1277]](_0x5c29x3+ _0x5c29x5+ _0x5c29x12,_0x5c29x4- _0x5c29x12));_0x5c29x2[_0xd587[268]]();_0x5c29x2[_0xd587[1334]]()};mxShape[_0xd587[202]][_0xd587[183]]= function(_0x5c29x2){this[_0xd587[724]]= _0x5c29x2;this[_0xd587[124]]= _0x5c29x2[_0xd587[124]];if(null!= this[_0xd587[124]]){this[_0xd587[1334]]= mxUtils[_0xd587[433]](this[_0xd587[124]],mxConstants.STYLE_FILLCOLOR,this[_0xd587[1334]]);this[_0xd587[1299]]= mxUtils[_0xd587[433]](this[_0xd587[124]],mxConstants.STYLE_GRADIENTCOLOR,this[_0xd587[1299]]);this[_0xd587[607]]= mxUtils[_0xd587[433]](this[_0xd587[124]],mxConstants.STYLE_GRADIENT_DIRECTION,this[_0xd587[607]]);this[_0xd587[461]]= mxUtils[_0xd587[433]](this[_0xd587[124]],mxConstants.STYLE_OPACITY,this[_0xd587[461]]);this[_0xd587[1336]]= mxUtils[_0xd587[433]](this[_0xd587[124]],mxConstants.STYLE_STROKECOLOR,this[_0xd587[1336]]);this[_0xd587[1307]]= mxUtils[_0xd587[1550]](this[_0xd587[124]],mxConstants.STYLE_STROKEWIDTH,this[_0xd587[1307]]);this[_0xd587[657]]= mxUtils[_0xd587[433]](this[_0xd587[124]],mxConstants.STYLE_SPACING,this[_0xd587[657]]);this[_0xd587[644]]= mxUtils[_0xd587[1550]](this[_0xd587[124]],mxConstants.STYLE_STARTSIZE,this[_0xd587[644]]);this[_0xd587[643]]= mxUtils[_0xd587[1550]](this[_0xd587[124]],mxConstants.STYLE_ENDSIZE,this[_0xd587[643]]);this[_0xd587[642]]= mxUtils[_0xd587[433]](this[_0xd587[124]],mxConstants.STYLE_STARTARROW,this[_0xd587[642]]);this[_0xd587[641]]= mxUtils[_0xd587[433]](this[_0xd587[124]],mxConstants.STYLE_ENDARROW,this[_0xd587[641]]);this[_0xd587[603]]= mxUtils[_0xd587[433]](this[_0xd587[124]],mxConstants.STYLE_ROTATION,this[_0xd587[603]]);this[_0xd587[663]]= mxUtils[_0xd587[433]](this[_0xd587[124]],mxConstants.STYLE_DIRECTION,this[_0xd587[663]]);this[_0xd587[623]]= 1== mxUtils[_0xd587[433]](this[_0xd587[124]],mxConstants.STYLE_FLIPH,0);this[_0xd587[624]]= 1== mxUtils[_0xd587[433]](this[_0xd587[124]],mxConstants.STYLE_FLIPV,0);null!= this[_0xd587[1561]]&& (this[_0xd587[623]]= 1== mxUtils[_0xd587[433]](this[_0xd587[124]],_0xd587[1607],0)|| this[_0xd587[623]],this[_0xd587[624]]= 1== mxUtils[_0xd587[433]](this[_0xd587[124]],_0xd587[1608],0)|| this[_0xd587[624]]);if(_0xd587[700]== this[_0xd587[663]]|| _0xd587[701]== this[_0xd587[663]]){_0x5c29x2= this[_0xd587[623]],this[_0xd587[623]]= this[_0xd587[624]],this[_0xd587[624]]= _0x5c29x2};this[_0xd587[1596]]= 1== mxUtils[_0xd587[433]](this[_0xd587[124]],mxConstants.STYLE_SHADOW,this[_0xd587[1596]]);this[_0xd587[1522]]= 1== mxUtils[_0xd587[433]](this[_0xd587[124]],mxConstants.STYLE_DASHED,this[_0xd587[1522]]);this[_0xd587[1606]]= 1== mxUtils[_0xd587[433]](this[_0xd587[124]],mxConstants.STYLE_ROUNDED,this[_0xd587[1606]]);this[_0xd587[617]]= 1== mxUtils[_0xd587[433]](this[_0xd587[124]],mxConstants.STYLE_GLASS,this[_0xd587[617]]);_0xd587[130]== this[_0xd587[1334]]&& (this[_0xd587[1334]]= null);_0xd587[130]== this[_0xd587[1299]]&& (this[_0xd587[1299]]= null);_0xd587[130]== this[_0xd587[1336]]&& (this[_0xd587[1336]]= null)}};mxShape[_0xd587[202]][_0xd587[1609]]= function(_0x5c29x2){null== _0x5c29x2&& (_0x5c29x2= _0xd587[110]);this[_0xd587[270]]= _0x5c29x2;null!= this[_0xd587[252]]&& (this[_0xd587[252]][_0xd587[124]][_0xd587[270]]= _0x5c29x2)};mxShape[_0xd587[202]][_0xd587[1610]]= function(){return this[_0xd587[270]]};mxShape[_0xd587[202]][_0xd587[1577]]= function(){if(null!= this[_0xd587[1562]]){var _0x5c29x2=this[_0xd587[1611]]();if(null!= _0x5c29x2){this[_0xd587[1612]](_0x5c29x2);var _0x5c29x3=this[_0xd587[1598]]();0!= _0x5c29x3&& (_0x5c29x2= mxUtils[_0xd587[1613]](_0x5c29x2,_0x5c29x3));_0x5c29x2[_0xd587[235]]= Math[_0xd587[519]](_0x5c29x2[_0xd587[235]]);_0x5c29x2[_0xd587[236]]= Math[_0xd587[519]](_0x5c29x2[_0xd587[236]]);_0x5c29x2[_0xd587[117]]= Math[_0xd587[430]](_0x5c29x2[_0xd587[117]]);_0x5c29x2[_0xd587[119]]= Math[_0xd587[430]](_0x5c29x2[_0xd587[119]])};this[_0xd587[1563]]= _0x5c29x2}};mxShape[_0xd587[202]][_0xd587[1611]]= function(){var _0x5c29x2=this[_0xd587[1562]][_0xd587[238]]();if(this[_0xd587[1590]]()){var _0x5c29x3=(_0x5c29x2[_0xd587[117]]- _0x5c29x2[_0xd587[119]])/ 2;_0x5c29x2[_0xd587[235]]+= _0x5c29x3;_0x5c29x2[_0xd587[236]]-= _0x5c29x3;_0x5c29x3= _0x5c29x2[_0xd587[117]];_0x5c29x2[_0xd587[117]]= _0x5c29x2[_0xd587[119]];_0x5c29x2[_0xd587[119]]= _0x5c29x3};return _0x5c29x2};mxShape[_0xd587[202]][_0xd587[1612]]= function(_0x5c29x2){this[_0xd587[1596]]&& (_0x5c29x2[_0xd587[117]]+= Math[_0xd587[430]](mxConstants[_0xd587[1237]]* this[_0xd587[255]]),_0x5c29x2[_0xd587[119]]+= Math[_0xd587[430]](mxConstants[_0xd587[1238]]* this[_0xd587[255]]));var _0x5c29x3=Math[_0xd587[430]](this[_0xd587[1307]]* this[_0xd587[255]]);_0x5c29x2[_0xd587[244]](Math[_0xd587[430]](_0x5c29x3/ 2))};mxShape[_0xd587[202]][_0xd587[1590]]= function(){return null== this[_0xd587[1561]]&& (_0xd587[700]== this[_0xd587[663]]|| _0xd587[701]== this[_0xd587[663]])};mxShape[_0xd587[202]][_0xd587[1614]]= function(){return null!= this[_0xd587[603]]?this[_0xd587[603]]:0};mxShape[_0xd587[202]][_0xd587[1615]]= function(){var _0x5c29x2=this[_0xd587[1614]]();1!= mxUtils[_0xd587[433]](this[_0xd587[124]],mxConstants.STYLE_HORIZONTAL,1)&& (_0x5c29x2+= mxText[_0xd587[202]][_0xd587[1616]]);return _0x5c29x2};mxShape[_0xd587[202]][_0xd587[1598]]= function(){var _0x5c29x2=this[_0xd587[1614]]();null!= this[_0xd587[663]]&& (_0xd587[700]== this[_0xd587[663]]?_0x5c29x2+= 270:_0xd587[703]== this[_0xd587[663]]?_0x5c29x2+= 180:_0xd587[701]== this[_0xd587[663]]&& (_0x5c29x2+= 90));return _0x5c29x2};mxShape[_0xd587[202]][_0xd587[1599]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){_0x5c29x2= document[_0xd587[509]](mxConstants.NS_SVG,_0xd587[1319]);_0x5c29x2[_0xd587[57]](_0xd587[235],_0x5c29x3);_0x5c29x2[_0xd587[57]](_0xd587[236],_0x5c29x4);_0x5c29x2[_0xd587[57]](_0xd587[117],_0x5c29x5);_0x5c29x2[_0xd587[57]](_0xd587[119],_0x5c29x9);_0x5c29x2[_0xd587[57]](_0xd587[1334],_0xd587[130]);_0x5c29x2[_0xd587[57]](_0xd587[1336],_0xd587[130]);_0x5c29x2[_0xd587[57]](_0xd587[1377],_0xd587[1378]);this[_0xd587[252]][_0xd587[62]](_0x5c29x2)};mxShape[_0xd587[202]][_0xd587[1600]]= function(_0x5c29x2){_0x5c29x2[_0xd587[124]][_0xd587[1617]]= _0xd587[1618]+ mxClient[_0xd587[88]]+ _0xd587[1619]};mxShape[_0xd587[202]][_0xd587[1589]]= function(_0x5c29x2){if(null!= _0x5c29x2){for(var _0x5c29x3 in _0x5c29x2){var _0x5c29x4=_0x5c29x2[_0x5c29x3];_0x5c29x4[_0xd587[1587]]= (_0x5c29x4[_0xd587[1587]]|| 0)- 1;0== _0x5c29x4[_0xd587[1587]]&& null!= _0x5c29x4[_0xd587[265]]&& _0x5c29x4[_0xd587[265]][_0xd587[266]](_0x5c29x4)}}};mxShape[_0xd587[202]][_0xd587[515]]= function(){null!= this[_0xd587[252]]&& (mxEvent[_0xd587[762]](this[_0xd587[252]]),null!= this[_0xd587[252]][_0xd587[265]]&& this[_0xd587[252]][_0xd587[265]][_0xd587[266]](this[_0xd587[252]]),this[_0xd587[252]]= null);this[_0xd587[1589]](this[_0xd587[1588]]);this[_0xd587[1588]]= null};var mxStencilRegistry={stencils:[],addStencil:function(_0x5c29x2,_0x5c29x3){mxStencilRegistry[_0xd587[1620]][_0x5c29x2]= _0x5c29x3},getStencil:function(_0x5c29x2){return mxStencilRegistry[_0xd587[1620]][_0x5c29x2]}},mxMarker={markers:[],addMarker:function(_0x5c29x2,_0x5c29x3){mxMarker[_0xd587[1621]][_0x5c29x2]= _0x5c29x3},createMarker:function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa,_0x5c29x12,_0x5c29x13,_0x5c29x14,_0x5c29x15){var _0x5c29x16=mxMarker[_0xd587[1621]][_0x5c29x4];return null!= _0x5c29x16?_0x5c29x16(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa,_0x5c29x12,_0x5c29x13,_0x5c29x14,_0x5c29x15):null}};(function(){function _0x5c29x2(_0x5c29x2,_0x5c29x3,_0x5c29x9,_0x5c29xa,_0x5c29x12,_0x5c29x13,_0x5c29x14,_0x5c29x15,_0x5c29x16,_0x5c29x17){_0x5c29x3= 1.118* _0x5c29x12* _0x5c29x16;_0x5c29x15= 1.118* _0x5c29x13* _0x5c29x16;_0x5c29x12*= _0x5c29x14+ _0x5c29x16;_0x5c29x13*= _0x5c29x14+ _0x5c29x16;var _0x5c29x18=_0x5c29xa[_0xd587[238]]();_0x5c29x18[_0xd587[235]]-= _0x5c29x3;_0x5c29x18[_0xd587[236]]-= _0x5c29x15;_0x5c29x14= _0x5c29x9!= mxConstants[_0xd587[1622]]?1:0.75;_0x5c29xa[_0xd587[235]]+= -_0x5c29x12* _0x5c29x14- _0x5c29x3;_0x5c29xa[_0xd587[236]]+= -_0x5c29x13* _0x5c29x14- _0x5c29x15;return function(){_0x5c29x2[_0xd587[1275]]();_0x5c29x2[_0xd587[1276]](_0x5c29x18[_0xd587[235]],_0x5c29x18[_0xd587[236]]);_0x5c29x2[_0xd587[1277]](_0x5c29x18[_0xd587[235]]- _0x5c29x12- _0x5c29x13/ 2,_0x5c29x18[_0xd587[236]]- _0x5c29x13+ _0x5c29x12/ 2);_0x5c29x9== mxConstants[_0xd587[1622]]&& _0x5c29x2[_0xd587[1277]](_0x5c29x18[_0xd587[235]]- 3* _0x5c29x12/ 4,_0x5c29x18[_0xd587[236]]- 3* _0x5c29x13/ 4);_0x5c29x2[_0xd587[1277]](_0x5c29x18[_0xd587[235]]+ _0x5c29x13/ 2- _0x5c29x12,_0x5c29x18[_0xd587[236]]- _0x5c29x13- _0x5c29x12/ 2);_0x5c29x2[_0xd587[268]]();_0x5c29x17?_0x5c29x2[_0xd587[1337]]():_0x5c29x2[_0xd587[1336]]()}}function _0x5c29x3(_0x5c29x2,_0x5c29x3,_0x5c29x9,_0x5c29xa,_0x5c29x12,_0x5c29x13,_0x5c29x14,_0x5c29x15,_0x5c29x16,_0x5c29x17){_0x5c29x15= _0x5c29x9== mxConstants[_0xd587[1623]]?0.7071:0.9862;_0x5c29x3= _0x5c29x12* _0x5c29x16* _0x5c29x15;_0x5c29x15*= _0x5c29x13* _0x5c29x16;_0x5c29x12*= _0x5c29x14+ _0x5c29x16;_0x5c29x13*= _0x5c29x14+ _0x5c29x16;var _0x5c29x18=_0x5c29xa[_0xd587[238]]();_0x5c29x18[_0xd587[235]]-= _0x5c29x3;_0x5c29x18[_0xd587[236]]-= _0x5c29x15;_0x5c29xa[_0xd587[235]]+= -_0x5c29x12- _0x5c29x3;_0x5c29xa[_0xd587[236]]+= -_0x5c29x13- _0x5c29x15;var _0x5c29x19=_0x5c29x9== mxConstants[_0xd587[1623]]?2:3.4;return function(){_0x5c29x2[_0xd587[1275]]();_0x5c29x2[_0xd587[1276]](_0x5c29x18[_0xd587[235]],_0x5c29x18[_0xd587[236]]);_0x5c29x2[_0xd587[1277]](_0x5c29x18[_0xd587[235]]- _0x5c29x12/ 2- _0x5c29x13/ _0x5c29x19,_0x5c29x18[_0xd587[236]]+ _0x5c29x12/ _0x5c29x19- _0x5c29x13/ 2);_0x5c29x2[_0xd587[1277]](_0x5c29x18[_0xd587[235]]- _0x5c29x12,_0x5c29x18[_0xd587[236]]- _0x5c29x13);_0x5c29x2[_0xd587[1277]](_0x5c29x18[_0xd587[235]]- _0x5c29x12/ 2+ _0x5c29x13/ _0x5c29x19,_0x5c29x18[_0xd587[236]]- _0x5c29x13/ 2- _0x5c29x12/ _0x5c29x19);_0x5c29x2[_0xd587[268]]();_0x5c29x17?_0x5c29x2[_0xd587[1337]]():_0x5c29x2[_0xd587[1336]]()}}mxMarker[_0xd587[1624]](_0xd587[693],_0x5c29x2);mxMarker[_0xd587[1624]](_0xd587[694],_0x5c29x2);mxMarker[_0xd587[1624]](_0xd587[392],function(_0x5c29x2,_0x5c29x3,_0x5c29x9,_0x5c29xa,_0x5c29x12,_0x5c29x13,_0x5c29x14,_0x5c29x15,_0x5c29x16,_0x5c29x17){_0x5c29x3= 1.118* _0x5c29x12* _0x5c29x16;_0x5c29x9= 1.118* _0x5c29x13* _0x5c29x16;_0x5c29x12*= _0x5c29x14+ _0x5c29x16;_0x5c29x13*= _0x5c29x14+ _0x5c29x16;var _0x5c29x18=_0x5c29xa[_0xd587[238]]();_0x5c29x18[_0xd587[235]]-= _0x5c29x3;_0x5c29x18[_0xd587[236]]-= _0x5c29x9;_0x5c29xa[_0xd587[235]]+= 2* -_0x5c29x3;_0x5c29xa[_0xd587[236]]+= 2* -_0x5c29x9;return function(){_0x5c29x2[_0xd587[1275]]();_0x5c29x2[_0xd587[1276]](_0x5c29x18[_0xd587[235]]- _0x5c29x12- _0x5c29x13/ 2,_0x5c29x18[_0xd587[236]]- _0x5c29x13+ _0x5c29x12/ 2);_0x5c29x2[_0xd587[1277]](_0x5c29x18[_0xd587[235]],_0x5c29x18[_0xd587[236]]);_0x5c29x2[_0xd587[1277]](_0x5c29x18[_0xd587[235]]+ _0x5c29x13/ 2- _0x5c29x12,_0x5c29x18[_0xd587[236]]- _0x5c29x13- _0x5c29x12/ 2);_0x5c29x2[_0xd587[1336]]()}});mxMarker[_0xd587[1624]](_0xd587[695],function(_0x5c29x2,_0x5c29x3,_0x5c29x9,_0x5c29xa,_0x5c29x12,_0x5c29x13,_0x5c29x14,_0x5c29x15,_0x5c29x16,_0x5c29x17){var _0x5c29x18=_0x5c29x14/ 2,_0x5c29x19=_0x5c29xa[_0xd587[238]]();_0x5c29xa[_0xd587[235]]-= _0x5c29x12* _0x5c29x18;_0x5c29xa[_0xd587[236]]-= _0x5c29x13* _0x5c29x18;return function(){_0x5c29x2[_0xd587[680]](_0x5c29x19[_0xd587[235]]- _0x5c29x18,_0x5c29x19[_0xd587[236]]- _0x5c29x18,_0x5c29x14,_0x5c29x14);_0x5c29x17?_0x5c29x2[_0xd587[1337]]():_0x5c29x2[_0xd587[1336]]()}});mxMarker[_0xd587[1624]](_0xd587[696],_0x5c29x3);mxMarker[_0xd587[1624]](_0xd587[697],_0x5c29x3)})();function mxActor(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){mxShape[_0xd587[239]](this);this[_0xd587[1562]]= _0x5c29x2;this[_0xd587[1334]]= _0x5c29x3;this[_0xd587[1336]]= _0x5c29x4;this[_0xd587[1307]]= null!= _0x5c29x5?_0x5c29x5:1}mxUtils[_0xd587[1284]](mxActor,mxShape);mxActor[_0xd587[202]][_0xd587[1595]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){_0x5c29x2[_0xd587[513]](_0x5c29x3,_0x5c29x4);_0x5c29x2[_0xd587[1275]]();this[_0xd587[1625]](_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9);_0x5c29x2[_0xd587[1337]]()};mxActor[_0xd587[202]][_0xd587[1625]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){_0x5c29x3= _0x5c29x5/ 3;_0x5c29x2[_0xd587[1276]](0,_0x5c29x9);_0x5c29x2[_0xd587[1279]](0,3* _0x5c29x9/ 5,0,2* _0x5c29x9/ 5,_0x5c29x5/ 2,2* _0x5c29x9/ 5);_0x5c29x2[_0xd587[1279]](_0x5c29x5/ 2- _0x5c29x3,2* _0x5c29x9/ 5,_0x5c29x5/ 2- _0x5c29x3,0,_0x5c29x5/ 2,0);_0x5c29x2[_0xd587[1279]](_0x5c29x5/ 2+ _0x5c29x3,0,_0x5c29x5/ 2+ _0x5c29x3,2* _0x5c29x9/ 5,_0x5c29x5/ 2,2* _0x5c29x9/ 5);_0x5c29x2[_0xd587[1279]](_0x5c29x5,2* _0x5c29x9/ 5,_0x5c29x5,3* _0x5c29x9/ 5,_0x5c29x5,_0x5c29x9);_0x5c29x2[_0xd587[268]]()};function mxCloud(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){mxActor[_0xd587[239]](this);this[_0xd587[1562]]= _0x5c29x2;this[_0xd587[1334]]= _0x5c29x3;this[_0xd587[1336]]= _0x5c29x4;this[_0xd587[1307]]= null!= _0x5c29x5?_0x5c29x5:1}mxUtils[_0xd587[1284]](mxCloud,mxActor);mxCloud[_0xd587[202]][_0xd587[1625]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){_0x5c29x2[_0xd587[1276]](0.25* _0x5c29x5,0.25* _0x5c29x9);_0x5c29x2[_0xd587[1279]](0.05* _0x5c29x5,0.25* _0x5c29x9,0,0.5* _0x5c29x9,0.16* _0x5c29x5,0.55* _0x5c29x9);_0x5c29x2[_0xd587[1279]](0,0.66* _0x5c29x9,0.18* _0x5c29x5,0.9* _0x5c29x9,0.31* _0x5c29x5,0.8* _0x5c29x9);_0x5c29x2[_0xd587[1279]](0.4* _0x5c29x5,_0x5c29x9,0.7* _0x5c29x5,_0x5c29x9,0.8* _0x5c29x5,0.8* _0x5c29x9);_0x5c29x2[_0xd587[1279]](_0x5c29x5,0.8* _0x5c29x9,_0x5c29x5,0.6* _0x5c29x9,0.875* _0x5c29x5,0.5* _0x5c29x9);_0x5c29x2[_0xd587[1279]](_0x5c29x5,0.3* _0x5c29x9,0.8* _0x5c29x5,0.1* _0x5c29x9,0.625* _0x5c29x5,0.2* _0x5c29x9);_0x5c29x2[_0xd587[1279]](0.5* _0x5c29x5,0.05* _0x5c29x9,0.3* _0x5c29x5,0.05* _0x5c29x9,0.25* _0x5c29x5,0.25* _0x5c29x9);_0x5c29x2[_0xd587[268]]()};function mxRectangleShape(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){mxShape[_0xd587[239]](this);this[_0xd587[1562]]= _0x5c29x2;this[_0xd587[1334]]= _0x5c29x3;this[_0xd587[1336]]= _0x5c29x4;this[_0xd587[1307]]= null!= _0x5c29x5?_0x5c29x5:1}mxUtils[_0xd587[1284]](mxRectangleShape,mxShape);mxRectangleShape[_0xd587[202]][_0xd587[1567]]= function(){return !this[_0xd587[1606]]&& !this[_0xd587[617]]&& 0== this[_0xd587[603]]};mxRectangleShape[_0xd587[202]][_0xd587[1601]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){if(this[_0xd587[1606]]){var _0x5c29xa=mxUtils[_0xd587[433]](this[_0xd587[124]],mxConstants.STYLE_ARCSIZE,100* mxConstants[_0xd587[1557]])/ 100,_0x5c29xa=Math[_0xd587[243]](_0x5c29x5* _0x5c29xa,_0x5c29x9* _0x5c29xa);_0x5c29x2[_0xd587[1320]](_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa,_0x5c29xa)}else {_0x5c29x2[_0xd587[1319]](_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9)};_0x5c29x2[_0xd587[1337]]()};mxRectangleShape[_0xd587[202]][_0xd587[1602]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){this[_0xd587[617]]&& this[_0xd587[1604]](_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,this[_0xd587[1603]](_0x5c29x5+ this[_0xd587[1307]],_0x5c29x9+ this[_0xd587[1307]]))};mxRectangleShape[_0xd587[202]][_0xd587[1575]]= function(){this[_0xd587[1626]](this[_0xd587[252]]);this[_0xd587[1627]](this[_0xd587[252]]);this[_0xd587[1628]](this[_0xd587[252]])};mxRectangleShape[_0xd587[202]][_0xd587[1626]]= function(_0x5c29x2){var _0x5c29x3=9<= document[_0xd587[5]]?0:Math[_0xd587[430]](this[_0xd587[1307]]* this[_0xd587[255]]);_0x5c29x2[_0xd587[124]][_0xd587[1629]]= Math[_0xd587[160]](1,_0x5c29x3)+ _0xd587[168];_0x5c29x2[_0xd587[124]][_0xd587[277]]= _0xd587[188];_0x5c29x2[_0xd587[124]][_0xd587[361]]= Math[_0xd587[488]](this[_0xd587[1562]][_0xd587[235]]- _0x5c29x3/ 2)+ _0xd587[168];_0x5c29x2[_0xd587[124]][_0xd587[125]]= Math[_0xd587[488]](this[_0xd587[1562]][_0xd587[236]]- _0x5c29x3/ 2)+ _0xd587[168];_0xd587[462]== document[_0xd587[135]]&& (_0x5c29x3= -_0x5c29x3);_0x5c29x2[_0xd587[124]][_0xd587[117]]= Math[_0xd587[488]](Math[_0xd587[160]](0,this[_0xd587[1562]][_0xd587[117]]+ _0x5c29x3))+ _0xd587[168];_0x5c29x2[_0xd587[124]][_0xd587[119]]= Math[_0xd587[488]](Math[_0xd587[160]](0,this[_0xd587[1562]][_0xd587[119]]+ _0x5c29x3))+ _0xd587[168]};mxRectangleShape[_0xd587[202]][_0xd587[1628]]= function(_0x5c29x2){var _0x5c29x3=this[_0xd587[1336]];null!= _0x5c29x3&& _0x5c29x3!= mxConstants[_0xd587[217]]?(_0x5c29x2[_0xd587[124]][_0xd587[1630]]= _0x5c29x3,this[_0xd587[1522]]?_0x5c29x2[_0xd587[124]][_0xd587[465]]= _0xd587[648]:0< this[_0xd587[1307]]&& (_0x5c29x2[_0xd587[124]][_0xd587[465]]= _0xd587[1631]),_0x5c29x2[_0xd587[124]][_0xd587[1629]]= Math[_0xd587[160]](1,Math[_0xd587[430]](this[_0xd587[1307]]* this[_0xd587[255]]))+ _0xd587[168]):_0x5c29x2[_0xd587[124]][_0xd587[1629]]= _0xd587[946];_0x5c29x3= this[_0xd587[1334]];null!= _0x5c29x3&& _0x5c29x3!= mxConstants[_0xd587[217]]?(_0x5c29x2[_0xd587[124]][_0xd587[1028]]= _0x5c29x3,_0x5c29x2[_0xd587[124]][_0xd587[1617]]= _0xd587[130]):this[_0xd587[1229]]?_0x5c29x2[_0xd587[124]][_0xd587[1028]]= _0xd587[1373]:8== document[_0xd587[5]]?mxUtils[_0xd587[1584]](_0x5c29x2):this[_0xd587[1600]](_0x5c29x2)};mxRectangleShape[_0xd587[202]][_0xd587[1627]]= function(_0x5c29x2){var _0x5c29x3=_0xd587[110];100> this[_0xd587[461]]&& (_0x5c29x3+= _0xd587[459]+ this[_0xd587[461]]+ _0xd587[460]);this[_0xd587[1596]]&& (_0x5c29x3+= _0xd587[1632]+ Math[_0xd587[488]](mxConstants[_0xd587[1237]]* this[_0xd587[255]])+ _0xd587[1633]+ Math[_0xd587[488]](mxConstants[_0xd587[1238]]* this[_0xd587[255]])+ _0xd587[1634]+ mxConstants[_0xd587[1235]]+ _0xd587[1635]);if(this[_0xd587[1299]]){var _0x5c29x4=this[_0xd587[1334]],_0x5c29x5=this[_0xd587[1299]],_0x5c29x9=_0xd587[468],_0x5c29xa={east:0,south:1,west:2,north:3},_0x5c29x12=null!= this[_0xd587[663]]?_0x5c29xa[this[_0xd587[663]]]:0;null!= this[_0xd587[607]]&& (_0x5c29x12= mxUtils[_0xd587[1454]](_0x5c29x12+ _0x5c29xa[this[_0xd587[607]]]- 1,4));1== _0x5c29x12?(_0x5c29x9= _0xd587[500],_0x5c29xa= _0x5c29x4,_0x5c29x4= _0x5c29x5,_0x5c29x5= _0x5c29xa):2== _0x5c29x12?(_0x5c29xa= _0x5c29x4,_0x5c29x4= _0x5c29x5,_0x5c29x5= _0x5c29xa):3== _0x5c29x12&& (_0x5c29x9= _0xd587[500]);_0x5c29x3+= _0xd587[1636]+ _0x5c29x4+ _0xd587[1637]+ _0x5c29x5+ _0xd587[1638]+ _0x5c29x9+ _0xd587[1635]};_0x5c29x2[_0xd587[124]][_0xd587[347]]= _0x5c29x3};function mxEllipse(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){mxShape[_0xd587[239]](this);this[_0xd587[1562]]= _0x5c29x2;this[_0xd587[1334]]= _0x5c29x3;this[_0xd587[1336]]= _0x5c29x4;this[_0xd587[1307]]= null!= _0x5c29x5?_0x5c29x5:1}mxUtils[_0xd587[1284]](mxEllipse,mxShape);mxEllipse[_0xd587[202]][_0xd587[1595]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){_0x5c29x2[_0xd587[680]](_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9);_0x5c29x2[_0xd587[1337]]()};function mxDoubleEllipse(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){mxShape[_0xd587[239]](this);this[_0xd587[1562]]= _0x5c29x2;this[_0xd587[1334]]= _0x5c29x3;this[_0xd587[1336]]= _0x5c29x4;this[_0xd587[1307]]= null!= _0x5c29x5?_0x5c29x5:1}mxUtils[_0xd587[1284]](mxDoubleEllipse,mxShape);mxDoubleEllipse[_0xd587[202]][_0xd587[1460]]= 10;mxDoubleEllipse[_0xd587[202]][_0xd587[1601]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){_0x5c29x2[_0xd587[680]](_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9);_0x5c29x2[_0xd587[1337]]()};mxDoubleEllipse[_0xd587[202]][_0xd587[1602]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){var _0x5c29xa=Math[_0xd587[243]](4,Math[_0xd587[243]](_0x5c29x5/ 5,_0x5c29x9/ 5));_0x5c29x5-= 2* _0x5c29xa;_0x5c29x9-= 2* _0x5c29xa;0< _0x5c29x5&& 0< _0x5c29x9&& _0x5c29x2[_0xd587[680]](_0x5c29x3+ _0x5c29xa,_0x5c29x4+ _0x5c29xa,_0x5c29x5,_0x5c29x9);_0x5c29x2[_0xd587[1336]]()};function mxRhombus(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){mxShape[_0xd587[239]](this);this[_0xd587[1562]]= _0x5c29x2;this[_0xd587[1334]]= _0x5c29x3;this[_0xd587[1336]]= _0x5c29x4;this[_0xd587[1307]]= null!= _0x5c29x5?_0x5c29x5:1}mxUtils[_0xd587[1284]](mxRhombus,mxShape);mxRhombus[_0xd587[202]][_0xd587[1595]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){var _0x5c29xa=_0x5c29x5/ 2,_0x5c29x12=_0x5c29x9/ 2;_0x5c29x2[_0xd587[1275]]();_0x5c29x2[_0xd587[1276]](_0x5c29x3+ _0x5c29xa,_0x5c29x4);_0x5c29x2[_0xd587[1277]](_0x5c29x3+ _0x5c29x5,_0x5c29x4+ _0x5c29x12);_0x5c29x2[_0xd587[1277]](_0x5c29x3+ _0x5c29xa,_0x5c29x4+ _0x5c29x9);_0x5c29x2[_0xd587[1277]](_0x5c29x3,_0x5c29x4+ _0x5c29x12);_0x5c29x2[_0xd587[268]]();_0x5c29x2[_0xd587[1337]]()};function mxPolyline(_0x5c29x2,_0x5c29x3,_0x5c29x4){mxShape[_0xd587[239]](this);this[_0xd587[1525]]= _0x5c29x2;this[_0xd587[1336]]= _0x5c29x3;this[_0xd587[1307]]= null!= _0x5c29x4?_0x5c29x4:1}mxUtils[_0xd587[1284]](mxPolyline,mxShape);mxPolyline[_0xd587[202]][_0xd587[1614]]= function(){return 0};mxPolyline[_0xd587[202]][_0xd587[1594]]= function(_0x5c29x2,_0x5c29x3){this[_0xd587[1639]](_0x5c29x2,_0x5c29x3,this[_0xd587[1606]])};mxPolyline[_0xd587[202]][_0xd587[1639]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){var _0x5c29x5=mxUtils[_0xd587[433]](this[_0xd587[124]],mxConstants.STYLE_ARCSIZE,mxConstants.LINE_ARCSIZE)/ 2,_0x5c29x9=_0x5c29x3[0],_0x5c29xa=_0x5c29x3[_0x5c29x3[_0xd587[67]]- 1];_0x5c29x2[_0xd587[1275]]();_0x5c29x2[_0xd587[1276]](_0x5c29x9[_0xd587[235]],_0x5c29x9[_0xd587[236]]);for(var _0x5c29x12=1;_0x5c29x12< _0x5c29x3[_0xd587[67]]- 1;_0x5c29x12++){var _0x5c29x13=_0x5c29x3[_0x5c29x12],_0x5c29x14=_0x5c29x9[_0xd587[235]]- _0x5c29x13[_0xd587[235]],_0x5c29x9=_0x5c29x9[_0xd587[236]]- _0x5c29x13[_0xd587[236]];if(_0x5c29x4&& _0x5c29x12< _0x5c29x3[_0xd587[67]]- 1&& (0!= _0x5c29x14|| 0!= _0x5c29x9)){var _0x5c29x15=Math[_0xd587[428]](_0x5c29x14* _0x5c29x14+ _0x5c29x9* _0x5c29x9),_0x5c29x14=_0x5c29x14* Math[_0xd587[243]](_0x5c29x5,_0x5c29x15/ 2)/ _0x5c29x15,_0x5c29x9=_0x5c29x9* Math[_0xd587[243]](_0x5c29x5,_0x5c29x15/ 2)/ _0x5c29x15;_0x5c29x2[_0xd587[1277]](_0x5c29x13[_0xd587[235]]+ _0x5c29x14,_0x5c29x13[_0xd587[236]]+ _0x5c29x9);_0x5c29x9= _0x5c29x3[_0x5c29x12+ 1];_0x5c29x14= _0x5c29x9[_0xd587[235]]- _0x5c29x13[_0xd587[235]];_0x5c29x9= _0x5c29x9[_0xd587[236]]- _0x5c29x13[_0xd587[236]];_0x5c29x15= Math[_0xd587[160]](1,Math[_0xd587[428]](_0x5c29x14* _0x5c29x14+ _0x5c29x9* _0x5c29x9));_0x5c29x14= _0x5c29x14* Math[_0xd587[243]](_0x5c29x5,_0x5c29x15/ 2)/ _0x5c29x15;_0x5c29x9= _0x5c29x9* Math[_0xd587[243]](_0x5c29x5,_0x5c29x15/ 2)/ _0x5c29x15;_0x5c29x14= _0x5c29x13[_0xd587[235]]+ _0x5c29x14;_0x5c29x9= _0x5c29x13[_0xd587[236]]+ _0x5c29x9;_0x5c29x2[_0xd587[1278]](_0x5c29x13[_0xd587[235]],_0x5c29x13[_0xd587[236]],_0x5c29x14,_0x5c29x9);_0x5c29x13= new mxPoint(_0x5c29x14,_0x5c29x9)}else {_0x5c29x2[_0xd587[1277]](_0x5c29x13[_0xd587[235]],_0x5c29x13[_0xd587[236]])};_0x5c29x9= _0x5c29x13};_0x5c29x2[_0xd587[1277]](_0x5c29xa[_0xd587[235]],_0x5c29xa[_0xd587[236]]);_0x5c29x2[_0xd587[1336]]()};function mxArrow(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa,_0x5c29x12){mxShape[_0xd587[239]](this);this[_0xd587[1525]]= _0x5c29x2;this[_0xd587[1334]]= _0x5c29x3;this[_0xd587[1336]]= _0x5c29x4;this[_0xd587[1307]]= null!= _0x5c29x5?_0x5c29x5:1;this[_0xd587[1640]]= null!= _0x5c29x9?_0x5c29x9:mxConstants[_0xd587[1641]];this[_0xd587[657]]= null!= _0x5c29xa?_0x5c29xa:mxConstants[_0xd587[1642]];this[_0xd587[643]]= null!= _0x5c29x12?_0x5c29x12:mxConstants[_0xd587[1643]]}mxUtils[_0xd587[1284]](mxArrow,mxShape);mxArrow[_0xd587[202]][_0xd587[1594]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=mxConstants[_0xd587[1642]],_0x5c29x5=mxConstants[_0xd587[1641]],_0x5c29x9=mxConstants[_0xd587[1643]],_0x5c29xa=_0x5c29x3[0],_0x5c29x12=_0x5c29x3[_0x5c29x3[_0xd587[67]]- 1],_0x5c29x13=_0x5c29x12[_0xd587[235]]- _0x5c29xa[_0xd587[235]],_0x5c29x14=_0x5c29x12[_0xd587[236]]- _0x5c29xa[_0xd587[236]],_0x5c29x15=Math[_0xd587[428]](_0x5c29x13* _0x5c29x13+ _0x5c29x14* _0x5c29x14),_0x5c29x16=_0x5c29x15- 2* _0x5c29x4- _0x5c29x9,_0x5c29x13=_0x5c29x13/ _0x5c29x15,_0x5c29x14=_0x5c29x14/ _0x5c29x15,_0x5c29x15=_0x5c29x5* _0x5c29x14/ 3,_0x5c29x5=-_0x5c29x5* _0x5c29x13/ 3,_0x5c29x9=_0x5c29xa[_0xd587[235]]- _0x5c29x15/ 2+ _0x5c29x4* _0x5c29x13,_0x5c29xa=_0x5c29xa[_0xd587[236]]- _0x5c29x5/ 2+ _0x5c29x4* _0x5c29x14,_0x5c29x17=_0x5c29x9+ _0x5c29x15,_0x5c29x18=_0x5c29xa+ _0x5c29x5,_0x5c29x19=_0x5c29x17+ _0x5c29x16* _0x5c29x13,_0x5c29x16=_0x5c29x18+ _0x5c29x16* _0x5c29x14,_0x5c29x1a=_0x5c29x19+ _0x5c29x15,_0x5c29x1b=_0x5c29x16+ _0x5c29x5,_0x5c29x1c=_0x5c29x1a- 3* _0x5c29x15,_0x5c29x1d=_0x5c29x1b- 3* _0x5c29x5;_0x5c29x2[_0xd587[1275]]();_0x5c29x2[_0xd587[1276]](_0x5c29x9,_0x5c29xa);_0x5c29x2[_0xd587[1277]](_0x5c29x17,_0x5c29x18);_0x5c29x2[_0xd587[1277]](_0x5c29x19,_0x5c29x16);_0x5c29x2[_0xd587[1277]](_0x5c29x1a,_0x5c29x1b);_0x5c29x2[_0xd587[1277]](_0x5c29x12[_0xd587[235]]- _0x5c29x4* _0x5c29x13,_0x5c29x12[_0xd587[236]]- _0x5c29x4* _0x5c29x14);_0x5c29x2[_0xd587[1277]](_0x5c29x1c,_0x5c29x1d);_0x5c29x2[_0xd587[1277]](_0x5c29x1c+ _0x5c29x15,_0x5c29x1d+ _0x5c29x5);_0x5c29x2[_0xd587[268]]();_0x5c29x2[_0xd587[1337]]()};function mxText(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa,_0x5c29x12,_0x5c29x13,_0x5c29x14,_0x5c29x15,_0x5c29x16,_0x5c29x17,_0x5c29x18,_0x5c29x19,_0x5c29x1a,_0x5c29x1b,_0x5c29x1c,_0x5c29x1d,_0x5c29x1e,_0x5c29x1f){mxShape[_0xd587[239]](this);this[_0xd587[131]]= _0x5c29x2;this[_0xd587[1562]]= _0x5c29x3;this[_0xd587[352]]= null!= _0x5c29x9?_0x5c29x9:_0xd587[586];this[_0xd587[611]]= null!= _0x5c29x4?_0x5c29x4:_0xd587[110];this[_0xd587[552]]= null!= _0x5c29x5?_0x5c29x5:_0xd587[110];this[_0xd587[1288]]= null!= _0x5c29xa?_0x5c29xa:mxConstants[_0xd587[484]];this[_0xd587[803]]= null!= _0x5c29x12?_0x5c29x12:mxConstants[_0xd587[483]];this[_0xd587[666]]= null!= _0x5c29x13?_0x5c29x13:mxConstants[_0xd587[1644]];this[_0xd587[657]]= parseInt(_0x5c29x14|| 2);this[_0xd587[658]]= this[_0xd587[657]]+ parseInt(_0x5c29x15|| 0);this[_0xd587[661]]= this[_0xd587[657]]+ parseInt(_0x5c29x16|| 0);this[_0xd587[660]]= this[_0xd587[657]]+ parseInt(_0x5c29x17|| 0);this[_0xd587[659]]= this[_0xd587[657]]+ parseInt(_0x5c29x18|| 0);this[_0xd587[662]]= null!= _0x5c29x19?_0x5c29x19:!0;this[_0xd587[1537]]= _0x5c29x1a;this[_0xd587[467]]= _0x5c29x1b;this[_0xd587[1333]]= null!= _0x5c29x1c?_0x5c29x1c:!1;this[_0xd587[1645]]= null!= _0x5c29x1d?_0x5c29x1d:!1;this[_0xd587[277]]= null!= _0x5c29x1e?_0x5c29x1e:_0xd587[189];this[_0xd587[629]]= null!= _0x5c29x1f?_0x5c29x1f:0;this[_0xd587[603]]= 0}mxUtils[_0xd587[1284]](mxText,mxShape);mxText[_0xd587[202]][_0xd587[1646]]= 0;mxText[_0xd587[202]][_0xd587[1647]]= 0;mxText[_0xd587[202]][_0xd587[1648]]= 0;mxText[_0xd587[202]][_0xd587[1649]]= 0;mxText[_0xd587[202]][_0xd587[1650]]= !0;mxText[_0xd587[202]][_0xd587[1616]]= -90;mxText[_0xd587[202]][_0xd587[1651]]= !0;mxText[_0xd587[202]][_0xd587[1652]]= !1;mxText[_0xd587[202]][_0xd587[1566]]= function(){return !1};mxText[_0xd587[202]][_0xd587[1567]]= function(){return 8!= document[_0xd587[5]]};mxText[_0xd587[202]][_0xd587[1568]]= function(){return 0};mxText[_0xd587[202]][_0xd587[1574]]= function(){return null!= this[_0xd587[1562]]&& !isNaN(this[_0xd587[1562]][_0xd587[235]])&& !isNaN(this[_0xd587[1562]][_0xd587[236]])&& !isNaN(this[_0xd587[1562]][_0xd587[117]])&& !isNaN(this[_0xd587[1562]][_0xd587[119]])};mxText[_0xd587[202]][_0xd587[1577]]= function(){var _0x5c29x2=this[_0xd587[252]];8== document[_0xd587[5]]&& null!= _0x5c29x2[_0xd587[285]]&& (_0x5c29x2= _0x5c29x2[_0xd587[285]],null!= _0x5c29x2[_0xd587[285]]&& (_0x5c29x2= _0x5c29x2[_0xd587[285]]));this[_0xd587[1563]]= this[_0xd587[1562]][_0xd587[238]]();var _0x5c29x3=this[_0xd587[1615]]();if(!this[_0xd587[1652]]&& null!= _0x5c29x2&& _0xd587[1334]!= this[_0xd587[277]]&& (!this[_0xd587[1645]]|| !this[_0xd587[1651]])){var _0x5c29x4=null,_0x5c29x5=null;if(null!= _0x5c29x2[_0xd587[538]]){if(null!= _0x5c29x2[_0xd587[285]]&& null!= _0x5c29x2[_0xd587[285]][_0xd587[285]]&& _0xd587[1435]== _0x5c29x2[_0xd587[285]][_0xd587[285]][_0xd587[301]]){_0x5c29x2= _0x5c29x2[_0xd587[285]][_0xd587[285]],_0x5c29x4= this[_0xd587[1333]]?this[_0xd587[1562]][_0xd587[117]]:parseInt(_0x5c29x2[_0xd587[284]](_0xd587[117]))* this[_0xd587[255]],_0x5c29x5= parseInt(_0x5c29x2[_0xd587[284]](_0xd587[119]))* this[_0xd587[255]]}else {_0x5c29x3= _0x5c29x2[_0xd587[1451]]();if(0== _0x5c29x3[_0xd587[117]]&& 0== _0x5c29x3[_0xd587[119]]){return};this[_0xd587[1563]]= new mxRectangle(_0x5c29x3[_0xd587[235]],_0x5c29x3[_0xd587[236]],_0x5c29x3[_0xd587[117]],_0x5c29x3[_0xd587[119]]);_0x5c29x3= 0}}else {_0x5c29x5= this[_0xd587[724]][_0xd587[441]][_0xd587[1653]],null!= this[_0xd587[359]]&& null!= this[_0xd587[167]]?(_0x5c29x4= this[_0xd587[1333]]?this[_0xd587[1562]][_0xd587[117]]:this[_0xd587[359]]* this[_0xd587[255]],_0x5c29x5= this[_0xd587[167]]* this[_0xd587[255]]):null!= _0x5c29x5?(this[_0xd587[1441]](_0x5c29x5),this[_0xd587[1654]](_0x5c29x5),mxUtils[_0xd587[1331]](this[_0xd587[131]])?_0x5c29x5[_0xd587[339]]= this[_0xd587[131]][_0xd587[342]]:(_0x5c29x4= this[_0xd587[1650]]?this[_0xd587[131]][_0xd587[230]](/\n/g,_0xd587[1453]):this[_0xd587[131]],_0x5c29x5[_0xd587[339]]= _0x5c29x4),_0x5c29x4= this[_0xd587[1333]]?this[_0xd587[1562]][_0xd587[117]]:_0x5c29x5[_0xd587[359]]* this[_0xd587[255]],_0x5c29x5= _0x5c29x5[_0xd587[167]]* this[_0xd587[255]]):(_0x5c29x4= this[_0xd587[1333]]?this[_0xd587[1562]][_0xd587[117]]:_0x5c29x2[_0xd587[359]]* this[_0xd587[255]],_0x5c29x5= _0x5c29x2[_0xd587[167]]* this[_0xd587[255]])};null!= _0x5c29x4&& null!= _0x5c29x5&& (this[_0xd587[1563]]= new mxRectangle(this[_0xd587[1562]][_0xd587[235]]+ this[_0xd587[1655]][_0xd587[235]]* _0x5c29x4,this[_0xd587[1562]][_0xd587[236]]+ this[_0xd587[1655]][_0xd587[236]]* _0x5c29x5,_0x5c29x4,_0x5c29x5))}else {this[_0xd587[1563]][_0xd587[235]]+= this[_0xd587[1655]][_0xd587[235]]* this[_0xd587[1563]][_0xd587[117]],this[_0xd587[1563]][_0xd587[236]]+= this[_0xd587[1655]][_0xd587[236]]* this[_0xd587[1563]][_0xd587[119]]};null!= this[_0xd587[1563]]&& (0!= _0x5c29x3&& (_0x5c29x3= mxUtils[_0xd587[1613]](this[_0xd587[1563]],_0x5c29x3),this[_0xd587[1563]][_0xd587[235]]= _0x5c29x3[_0xd587[235]],this[_0xd587[1563]][_0xd587[236]]= _0x5c29x3[_0xd587[236]],mxClient[_0xd587[496]]|| (this[_0xd587[1563]][_0xd587[117]]= _0x5c29x3[_0xd587[117]],this[_0xd587[1563]][_0xd587[119]]= _0x5c29x3[_0xd587[119]])),this[_0xd587[1563]][_0xd587[235]]= Math[_0xd587[519]](this[_0xd587[1563]][_0xd587[235]]),this[_0xd587[1563]][_0xd587[236]]= Math[_0xd587[519]](this[_0xd587[1563]][_0xd587[236]]),this[_0xd587[1563]][_0xd587[117]]= Math[_0xd587[430]](this[_0xd587[1563]][_0xd587[117]]),this[_0xd587[1563]][_0xd587[119]]= Math[_0xd587[430]](this[_0xd587[1563]][_0xd587[119]]))};mxText[_0xd587[202]][_0xd587[1598]]= function(){return 0};mxText[_0xd587[202]][_0xd587[1615]]= function(){return null!= this[_0xd587[724]]&& null!= this[_0xd587[724]][_0xd587[253]]?this[_0xd587[724]][_0xd587[253]][_0xd587[1615]]():0};mxText[_0xd587[202]][_0xd587[1590]]= function(){return !this[_0xd587[662]]&& null!= this[_0xd587[724]]&& this[_0xd587[724]][_0xd587[441]][_0xd587[1179]][_0xd587[251]][_0xd587[1193]](this[_0xd587[724]][_0xd587[246]])};mxText[_0xd587[202]][_0xd587[1592]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){mxShape[_0xd587[202]][_0xd587[1592]][_0xd587[183]](this,arguments);_0x5c29x2[_0xd587[1259]](this[_0xd587[352]]);_0x5c29x2[_0xd587[1260]](this[_0xd587[1537]]);_0x5c29x2[_0xd587[1262]](this[_0xd587[467]]);_0x5c29x2[_0xd587[1265]](this[_0xd587[1288]]);_0x5c29x2[_0xd587[1264]](this[_0xd587[803]]);_0x5c29x2[_0xd587[1266]](this[_0xd587[666]])};mxText[_0xd587[202]][_0xd587[1586]]= function(){this[_0xd587[252]][_0xd587[124]][_0xd587[361]]= Math[_0xd587[488]](this[_0xd587[1562]][_0xd587[235]])+ _0xd587[168];this[_0xd587[252]][_0xd587[124]][_0xd587[125]]= Math[_0xd587[488]](this[_0xd587[1562]][_0xd587[236]])+ _0xd587[168];this[_0xd587[252]][_0xd587[124]][_0xd587[117]]= _0xd587[942];this[_0xd587[252]][_0xd587[124]][_0xd587[119]]= _0xd587[942];this[_0xd587[252]][_0xd587[124]][_0xd587[277]]= _0xd587[189]};mxText[_0xd587[202]][_0xd587[1209]]= function(_0x5c29x2){var _0x5c29x3=this[_0xd587[255]],_0x5c29x4=this[_0xd587[1562]][_0xd587[235]]/ _0x5c29x3,_0x5c29x5=this[_0xd587[1562]][_0xd587[236]]/ _0x5c29x3,_0x5c29x9=this[_0xd587[1562]][_0xd587[117]]/ _0x5c29x3,_0x5c29x3=this[_0xd587[1562]][_0xd587[119]]/ _0x5c29x3;this[_0xd587[1591]](_0x5c29x2,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29x3);this[_0xd587[1592]](_0x5c29x2,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29x3);var _0x5c29xa=mxUtils[_0xd587[1331]](this[_0xd587[131]])|| this[_0xd587[507]]== mxConstants[_0xd587[1656]],_0x5c29x12=_0x5c29xa|| _0x5c29x2 instanceof mxVmlCanvas2D?_0xd587[1428]:_0xd587[110],_0x5c29x13=this[_0xd587[131]];!_0x5c29xa&& _0xd587[1428]== _0x5c29x12&& (_0x5c29x13= mxUtils[_0xd587[321]](_0x5c29x13,!1));_0x5c29x13= !mxUtils[_0xd587[1331]](this[_0xd587[131]])&& this[_0xd587[1650]]&& _0xd587[1428]== _0x5c29x12?_0x5c29x13[_0xd587[230]](/\n/g,_0xd587[1453]):_0x5c29x13;_0x5c29x2[_0xd587[963]](_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29x3,_0x5c29x13,this[_0xd587[611]],this[_0xd587[552]],this[_0xd587[1333]],_0x5c29x12,_0xd587[1334]== this[_0xd587[277]],this[_0xd587[1645]],this[_0xd587[1615]]())};mxText[_0xd587[202]][_0xd587[1575]]= function(){var _0x5c29x2=this[_0xd587[252]][_0xd587[124]];_0x5c29x2[_0xd587[461]]= 1> this[_0xd587[461]]?this[_0xd587[461]]:_0xd587[110];_0x5c29x2[_0xd587[277]]= _0xd587[110];_0x5c29x2[_0xd587[117]]= _0xd587[110];_0x5c29x2[_0xd587[119]]= _0xd587[110];this[_0xd587[1441]](this[_0xd587[252]]);this[_0xd587[1654]](this[_0xd587[252]]);this[_0xd587[1657]]();this[_0xd587[167]]= this[_0xd587[359]]= null;null!= mxClient[_0xd587[73]]?this[_0xd587[1658]]():this[_0xd587[1659]]()};mxText[_0xd587[202]][_0xd587[1658]]= function(){var _0x5c29x2=this[_0xd587[1615]](),_0x5c29x3=this[_0xd587[252]][_0xd587[124]],_0x5c29x4=this[_0xd587[1655]][_0xd587[235]],_0x5c29x5=this[_0xd587[1655]][_0xd587[236]];0!= _0x5c29x2?(_0x5c29x3[mxClient[_0xd587[73]]+ _0xd587[1660]]= 100* -_0x5c29x4+ _0xd587[1661]+ 100* -_0x5c29x5+ _0xd587[229],_0x5c29x3[mxClient[_0xd587[73]]+ _0xd587[1662]]= _0xd587[536]+ 100* _0x5c29x4+ _0xd587[1663]+ 100* _0x5c29x5+ _0xd587[1664]+ this[_0xd587[255]]+ _0xd587[1665]+ _0x5c29x2+ _0xd587[1666]):(_0x5c29x3[mxClient[_0xd587[73]]+ _0xd587[1660]]= _0xd587[1667],_0x5c29x3[mxClient[_0xd587[73]]+ _0xd587[1662]]= _0xd587[1402]+ this[_0xd587[255]]+ _0xd587[1393]+ 100* _0x5c29x4+ _0xd587[1663]+ 100* _0x5c29x5+ _0xd587[1668]);_0x5c29x3[_0xd587[361]]= Math[_0xd587[488]](this[_0xd587[1562]][_0xd587[235]])+ _0xd587[168];_0x5c29x3[_0xd587[125]]= Math[_0xd587[488]](this[_0xd587[1562]][_0xd587[236]])+ _0xd587[168]};mxText[_0xd587[202]][_0xd587[1659]]= function(){var _0x5c29x2=this[_0xd587[252]][_0xd587[124]],_0x5c29x3=this[_0xd587[1655]][_0xd587[235]],_0x5c29x4=this[_0xd587[1655]][_0xd587[236]],_0x5c29x5=this[_0xd587[255]];_0x5c29x2[_0xd587[347]]= _0xd587[110];var _0x5c29x9=0,_0x5c29xa=0,_0x5c29x12=null!= this[_0xd587[724]]?this[_0xd587[724]][_0xd587[441]][_0xd587[1653]]:null;if(null!= _0x5c29x12){_0x5c29x12[_0xd587[124]][_0xd587[277]]= _0xd587[110];_0x5c29x12[_0xd587[124]][_0xd587[119]]= _0xd587[110];_0x5c29x12[_0xd587[124]][_0xd587[117]]= _0xd587[110];this[_0xd587[1441]](_0x5c29x12);this[_0xd587[1654]](_0x5c29x12);if(mxUtils[_0xd587[1331]](this[_0xd587[131]])){_0x5c29x12[_0xd587[339]]= this[_0xd587[131]][_0xd587[342]]}else {var _0x5c29x13=this[_0xd587[131]];this[_0xd587[507]]!= mxConstants[_0xd587[1656]]&& (_0x5c29x13= mxUtils[_0xd587[321]](_0x5c29x13,!1));_0x5c29x13= this[_0xd587[1650]]?_0x5c29x13[_0xd587[230]](/\n/g,_0xd587[1453]):_0x5c29x13;_0x5c29x12[_0xd587[339]]= _0x5c29x13};_0x5c29x9= _0x5c29x12[_0xd587[359]]+ 2;_0x5c29xa= _0x5c29x12[_0xd587[167]]+ 2}else {_0x5c29x9= this[_0xd587[252]][_0xd587[359]],_0x5c29xa= this[_0xd587[252]][_0xd587[167]]+ 1};this[_0xd587[359]]= _0x5c29x9;this[_0xd587[167]]= _0x5c29xa;_0x5c29x12= this[_0xd587[1562]][_0xd587[117]]/ _0x5c29x5;_0x5c29x13= this[_0xd587[1562]][_0xd587[119]]/ _0x5c29x5;mxClient[_0xd587[496]]&& (this[_0xd587[1645]]|| _0xd587[1334]== this[_0xd587[277]])&& 0< _0x5c29x13?(_0x5c29x13= Math[_0xd587[243]](_0x5c29x13,_0x5c29xa),_0x5c29x2[_0xd587[119]]= Math[_0xd587[488]](_0x5c29x13+ 1)+ _0xd587[168]):_0x5c29x13= _0x5c29xa;_0xd587[1334]!= this[_0xd587[277]]&& (mxClient[_0xd587[496]]&& (this[_0xd587[1645]]|| this[_0xd587[1333]])&& 0< _0x5c29x12?(_0x5c29x12= Math[_0xd587[243]](_0x5c29x12,_0x5c29x9),_0x5c29x2[_0xd587[117]]= Math[_0xd587[488]](_0x5c29x12)+ _0xd587[168]):_0x5c29x12= _0x5c29x9);var _0x5c29x13=_0x5c29x13* _0x5c29x5,_0x5c29x12=_0x5c29x12* _0x5c29x5,_0x5c29x9=this[_0xd587[1615]]()* (Math[_0xd587[424]]/ 180),_0x5c29xa=parseFloat(parseFloat(Math[_0xd587[426]](_0x5c29x9))[_0xd587[1293]](8)),_0x5c29x14=parseFloat(parseFloat(Math[_0xd587[427]](-_0x5c29x9))[_0xd587[1293]](8)),_0x5c29x9=_0x5c29x9% (2* Math[_0xd587[424]]);0> _0x5c29x9&& (_0x5c29x9+= 2* Math[_0xd587[424]]);_0x5c29x9%= Math[_0xd587[424]];_0x5c29x9> Math[_0xd587[424]]/ 2&& (_0x5c29x9= Math[_0xd587[424]]- _0x5c29x9);var _0x5c29x15=Math[_0xd587[426]](_0x5c29x9),_0x5c29x16=Math[_0xd587[427]](-_0x5c29x9),_0x5c29x3=_0x5c29x12* -(_0x5c29x3+ 0.5),_0x5c29x4=_0x5c29x13* -(_0x5c29x4+ 0.5),_0x5c29x17=(_0x5c29x13- _0x5c29x13* _0x5c29x15+ _0x5c29x12* _0x5c29x16)/ 2+ _0x5c29x14* _0x5c29x3- _0x5c29xa* _0x5c29x4;0!= _0x5c29x9&& (_0x5c29x2[_0xd587[347]]= _0xd587[1505]+ _0x5c29xa+ _0xd587[1506]+ _0x5c29x14+ _0xd587[1507]+ -_0x5c29x14+ _0xd587[1508]+ _0x5c29xa+ _0xd587[1509]);_0x5c29x2[_0xd587[499]]= _0x5c29x5;_0x5c29x2[_0xd587[361]]= Math[_0xd587[488]](this[_0xd587[1562]][_0xd587[235]]+ ((_0x5c29x12- _0x5c29x12* _0x5c29x15+ _0x5c29x13* _0x5c29x16)/ 2- _0x5c29xa* _0x5c29x3- _0x5c29x14* _0x5c29x4)- _0x5c29x12/ 2)+ _0xd587[168];_0x5c29x2[_0xd587[125]]= Math[_0xd587[488]](this[_0xd587[1562]][_0xd587[236]]+ _0x5c29x17- _0x5c29x13/ 2)+ _0xd587[168]};mxText[_0xd587[202]][_0xd587[1657]]= function(){if(mxUtils[_0xd587[1331]](this[_0xd587[131]])){this[_0xd587[252]][_0xd587[339]]= _0xd587[110],this[_0xd587[252]][_0xd587[62]](this[_0xd587[131]])}else {var _0x5c29x2=this[_0xd587[131]];this[_0xd587[507]]!= mxConstants[_0xd587[1656]]&& (_0x5c29x2= mxUtils[_0xd587[321]](_0x5c29x2,!1));var _0x5c29x2=this[_0xd587[1650]]?_0x5c29x2[_0xd587[230]](/\n/g,_0xd587[1453]):_0x5c29x2,_0x5c29x3=null!= this[_0xd587[1537]]&& this[_0xd587[1537]]!= mxConstants[_0xd587[217]]?this[_0xd587[1537]]:null,_0x5c29x4=null!= this[_0xd587[467]]&& this[_0xd587[467]]!= mxConstants[_0xd587[217]]?this[_0xd587[467]]:null;if(null!= _0x5c29x3|| null!= _0x5c29x4){if(_0xd587[1334]== this[_0xd587[277]]){null!= _0x5c29x3&& (this[_0xd587[252]][_0xd587[124]][_0xd587[1028]]= _0x5c29x3),null!= _0x5c29x4&& (this[_0xd587[252]][_0xd587[124]][_0xd587[467]]= _0xd587[1669]+ _0x5c29x4)}else {var _0x5c29x5=_0xd587[110];null!= _0x5c29x3&& (_0x5c29x5+= _0xd587[1418]+ _0x5c29x3+ _0xd587[471]);null!= _0x5c29x4&& (_0x5c29x5+= _0xd587[1419]+ _0x5c29x4+ _0xd587[471]);_0x5c29x2= _0xd587[1670]+ _0x5c29x5+ _0xd587[1671]+ this[_0xd587[252]][_0xd587[124]][_0xd587[489]]+ _0xd587[1423]+ _0x5c29x2+ _0xd587[1424];this[_0xd587[252]][_0xd587[124]][_0xd587[489]]= _0xd587[110]}};this[_0xd587[252]][_0xd587[339]]= _0x5c29x2}};mxText[_0xd587[202]][_0xd587[1441]]= function(_0x5c29x2){_0x5c29x2= _0x5c29x2[_0xd587[124]];_0x5c29x2[_0xd587[489]]= Math[_0xd587[488]](this[_0xd587[803]]* mxConstants[_0xd587[490]])+ _0xd587[168];_0x5c29x2[_0xd587[487]]= Math[_0xd587[488]](this[_0xd587[803]])+ _0xd587[168];_0x5c29x2[_0xd587[486]]= this[_0xd587[1288]];_0x5c29x2[_0xd587[123]]= _0xd587[125];_0x5c29x2[_0xd587[352]]= this[_0xd587[352]];_0x5c29x2[_0xd587[1452]]= (this[_0xd587[666]]& mxConstants[_0xd587[1410]])== mxConstants[_0xd587[1410]]?_0xd587[1447]:_0xd587[110];_0x5c29x2[_0xd587[666]]= (this[_0xd587[666]]& mxConstants[_0xd587[1412]])== mxConstants[_0xd587[1412]]?_0xd587[1449]:_0xd587[110];_0x5c29x2[_0xd587[1498]]= (this[_0xd587[666]]& mxConstants[_0xd587[1414]])== mxConstants[_0xd587[1414]]?_0xd587[355]:_0xd587[110];_0x5c29x2[_0xd587[1165]]= this[_0xd587[611]]== mxConstants[_0xd587[479]]?_0xd587[698]:this[_0xd587[611]]== mxConstants[_0xd587[480]]?_0xd587[699]:_0xd587[361]};mxText[_0xd587[202]][_0xd587[1654]]= function(_0x5c29x2){var _0x5c29x3=Math[_0xd587[488]](this[_0xd587[1562]][_0xd587[117]]/ this[_0xd587[255]]),_0x5c29x4=Math[_0xd587[488]](this[_0xd587[1562]][_0xd587[119]]/ this[_0xd587[255]]);_0x5c29x2= _0x5c29x2[_0xd587[124]];this[_0xd587[1645]]?(_0x5c29x2[_0xd587[277]]= _0xd587[188],0< _0x5c29x4&& (_0x5c29x2[_0xd587[1503]]= _0x5c29x4+ _0xd587[168]),0< _0x5c29x3&& (_0x5c29x2[_0xd587[117]]= _0x5c29x3+ _0xd587[168])):_0xd587[1334]== this[_0xd587[277]]&& (_0x5c29x2[_0xd587[117]]= _0x5c29x3+ _0xd587[168],0< _0x5c29x4&& (_0x5c29x2[_0xd587[1503]]= _0x5c29x4+ _0xd587[168]));this[_0xd587[1333]]?(!this[_0xd587[1645]]&& 0< _0x5c29x3&& (_0x5c29x2[_0xd587[117]]= _0x5c29x3+ _0xd587[168]),_0x5c29x2[_0xd587[493]]= _0xd587[1502]):_0x5c29x2[_0xd587[493]]= _0xd587[494]};mxText[_0xd587[202]][_0xd587[1672]]= function(){this[_0xd587[1655]]= mxUtils[_0xd587[1501]](this[_0xd587[611]],this[_0xd587[552]])};mxText[_0xd587[202]][_0xd587[1673]]= function(){var _0x5c29x2=0,_0x5c29x3=0,_0x5c29x2=this[_0xd587[611]]== mxConstants[_0xd587[479]]?(this[_0xd587[659]]- this[_0xd587[661]])/ 2:this[_0xd587[611]]== mxConstants[_0xd587[480]]?-this[_0xd587[661]]- this[_0xd587[1649]]:this[_0xd587[659]]+ this[_0xd587[1648]],_0x5c29x3=this[_0xd587[552]]== mxConstants[_0xd587[481]]?(this[_0xd587[658]]- this[_0xd587[660]])/ 2:this[_0xd587[552]]== mxConstants[_0xd587[482]]?-this[_0xd587[660]]- this[_0xd587[1647]]:this[_0xd587[658]]+ this[_0xd587[1646]];return new mxPoint(_0x5c29x2,_0x5c29x3)};function mxTriangle(){mxActor[_0xd587[239]](this)}mxUtils[_0xd587[1284]](mxTriangle,mxActor);mxTriangle[_0xd587[202]][_0xd587[1625]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){_0x5c29x2[_0xd587[1276]](0,0);_0x5c29x2[_0xd587[1277]](_0x5c29x5,0.5* _0x5c29x9);_0x5c29x2[_0xd587[1277]](0,_0x5c29x9);_0x5c29x2[_0xd587[268]]()};function mxHexagon(){mxActor[_0xd587[239]](this)}mxUtils[_0xd587[1284]](mxHexagon,mxActor);mxHexagon[_0xd587[202]][_0xd587[1625]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){_0x5c29x2[_0xd587[1276]](0.25* _0x5c29x5,0);_0x5c29x2[_0xd587[1277]](0.75* _0x5c29x5,0);_0x5c29x2[_0xd587[1277]](_0x5c29x5,0.5* _0x5c29x9);_0x5c29x2[_0xd587[1277]](0.75* _0x5c29x5,_0x5c29x9);_0x5c29x2[_0xd587[1277]](0.25* _0x5c29x5,_0x5c29x9);_0x5c29x2[_0xd587[1277]](0,0.5* _0x5c29x9);_0x5c29x2[_0xd587[268]]()};function mxLine(_0x5c29x2,_0x5c29x3,_0x5c29x4){mxShape[_0xd587[239]](this);this[_0xd587[1562]]= _0x5c29x2;this[_0xd587[1336]]= _0x5c29x3;this[_0xd587[1307]]= null!= _0x5c29x4?_0x5c29x4:1}mxUtils[_0xd587[1284]](mxLine,mxShape);mxLine[_0xd587[202]][_0xd587[1595]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){_0x5c29x4+= _0x5c29x9/ 2;_0x5c29x2[_0xd587[1275]]();_0x5c29x2[_0xd587[1276]](_0x5c29x3,_0x5c29x4);_0x5c29x2[_0xd587[1277]](_0x5c29x3+ _0x5c29x5,_0x5c29x4);_0x5c29x2[_0xd587[1336]]()};function mxImageShape(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){mxShape[_0xd587[239]](this);this[_0xd587[1562]]= _0x5c29x2;this[_0xd587[618]]= _0x5c29x3;this[_0xd587[1334]]= _0x5c29x4;this[_0xd587[1336]]= _0x5c29x5;this[_0xd587[1307]]= null!= _0x5c29x9?_0x5c29x9:1;this[_0xd587[639]]= !1}mxUtils[_0xd587[1284]](mxImageShape,mxRectangleShape);mxImageShape[_0xd587[202]][_0xd587[1674]]= !0;mxImageShape[_0xd587[202]][_0xd587[1568]]= function(){return !mxClient[_0xd587[80]]?0.5:0};mxImageShape[_0xd587[202]][_0xd587[183]]= function(_0x5c29x2){mxShape[_0xd587[202]][_0xd587[183]][_0xd587[183]](this,arguments);this[_0xd587[1299]]= this[_0xd587[1336]]= this[_0xd587[1334]]= null;null!= this[_0xd587[124]]&& (this[_0xd587[1334]]= mxUtils[_0xd587[433]](this[_0xd587[124]],mxConstants.STYLE_IMAGE_BACKGROUND),this[_0xd587[1336]]= mxUtils[_0xd587[433]](this[_0xd587[124]],mxConstants.STYLE_IMAGE_BORDER),this[_0xd587[1674]]= 1== mxUtils[_0xd587[1550]](this[_0xd587[124]],mxConstants.STYLE_IMAGE_ASPECT,1),this[_0xd587[623]]= this[_0xd587[623]]|| 1== mxUtils[_0xd587[433]](this[_0xd587[124]],_0xd587[1675],0),this[_0xd587[624]]= this[_0xd587[624]]|| 1== mxUtils[_0xd587[433]](this[_0xd587[124]],_0xd587[1676],0))};mxImageShape[_0xd587[202]][_0xd587[1567]]= function(){return !this[_0xd587[1674]]};mxImageShape[_0xd587[202]][_0xd587[1570]]= function(){var _0x5c29x2=document[_0xd587[55]](_0xd587[485]);_0x5c29x2[_0xd587[124]][_0xd587[491]]= _0xd587[492];return _0x5c29x2};mxImageShape[_0xd587[202]][_0xd587[1595]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){if(null!= this[_0xd587[618]]){var _0x5c29xa=mxUtils[_0xd587[433]](this[_0xd587[124]],mxConstants.STYLE_IMAGE_BACKGROUND,null),_0x5c29x12=mxUtils[_0xd587[433]](this[_0xd587[124]],mxConstants.STYLE_IMAGE_BORDER,null);if(null!= _0x5c29xa|| null!= _0x5c29x12){_0x5c29x2[_0xd587[1245]](_0x5c29xa),_0x5c29x2[_0xd587[1249]](_0x5c29x12),_0x5c29x2[_0xd587[1319]](_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9),_0x5c29x2[_0xd587[1337]]()};_0x5c29x2[_0xd587[618]](_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,this[_0xd587[618]],this[_0xd587[1674]],!1,!1)}else {mxRectangleShape[_0xd587[202]][_0xd587[1601]][_0xd587[183]](this,arguments)}};mxImageShape[_0xd587[202]][_0xd587[1575]]= function(){this[_0xd587[252]][_0xd587[124]][_0xd587[361]]= Math[_0xd587[488]](this[_0xd587[1562]][_0xd587[235]])+ _0xd587[168];this[_0xd587[252]][_0xd587[124]][_0xd587[125]]= Math[_0xd587[488]](this[_0xd587[1562]][_0xd587[236]])+ _0xd587[168];this[_0xd587[252]][_0xd587[124]][_0xd587[117]]= Math[_0xd587[160]](0,Math[_0xd587[488]](this[_0xd587[1562]][_0xd587[117]]))+ _0xd587[168];this[_0xd587[252]][_0xd587[124]][_0xd587[119]]= Math[_0xd587[160]](0,Math[_0xd587[488]](this[_0xd587[1562]][_0xd587[119]]))+ _0xd587[168];this[_0xd587[252]][_0xd587[124]][_0xd587[1028]]= this[_0xd587[1334]]|| _0xd587[110];this[_0xd587[252]][_0xd587[124]][_0xd587[1630]]= this[_0xd587[1336]]|| _0xd587[110];this[_0xd587[252]][_0xd587[339]]= _0xd587[110];if(null!= this[_0xd587[618]]){var _0x5c29x2=document[_0xd587[55]](mxClient[_0xd587[49]]|| null== mxClient[_0xd587[73]]&& 0!= this[_0xd587[603]]?mxClient[_0xd587[463]]+ _0xd587[464]:_0xd587[466]);_0x5c29x2[_0xd587[124]][_0xd587[491]]= _0xd587[492];_0x5c29x2[_0xd587[390]]= this[_0xd587[618]];var _0x5c29x3=100> this[_0xd587[461]]?_0xd587[459]+ this[_0xd587[461]]+ _0xd587[460]:_0xd587[110];this[_0xd587[252]][_0xd587[124]][_0xd587[347]]= _0x5c29x3;this[_0xd587[623]]&& this[_0xd587[624]]?_0x5c29x3+= _0xd587[1677]:this[_0xd587[623]]?_0x5c29x3+= _0xd587[1678]:this[_0xd587[624]]&& (_0x5c29x3+= _0xd587[1679]);_0x5c29x2[_0xd587[124]][_0xd587[347]]!= _0x5c29x3&& (_0x5c29x2[_0xd587[124]][_0xd587[347]]= _0x5c29x3);_0xd587[618]== _0x5c29x2[_0xd587[301]]?_0x5c29x2[_0xd587[124]][_0xd587[603]]= this[_0xd587[603]]:_0x5c29x2[_0xd587[124]][mxClient[_0xd587[73]]+ _0xd587[1662]]= _0xd587[1394]+ this[_0xd587[603]]+ _0xd587[1666];_0x5c29x2[_0xd587[124]][_0xd587[117]]= this[_0xd587[252]][_0xd587[124]][_0xd587[117]];_0x5c29x2[_0xd587[124]][_0xd587[119]]= this[_0xd587[252]][_0xd587[124]][_0xd587[119]];this[_0xd587[252]][_0xd587[124]][_0xd587[1617]]= _0xd587[110];this[_0xd587[252]][_0xd587[62]](_0x5c29x2)}else {this[_0xd587[1600]](this[_0xd587[252]])}};function mxLabel(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){mxRectangleShape[_0xd587[239]](this,_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5)}mxUtils[_0xd587[1284]](mxLabel,mxRectangleShape);mxLabel[_0xd587[202]][_0xd587[1680]]= mxConstants[_0xd587[1681]];mxLabel[_0xd587[202]][_0xd587[657]]= 2;mxLabel[_0xd587[202]][_0xd587[1682]]= 10;mxLabel[_0xd587[202]][_0xd587[635]]= 2;mxLabel[_0xd587[202]][_0xd587[176]]= function(_0x5c29x2){mxShape[_0xd587[202]][_0xd587[176]][_0xd587[183]](this,arguments);null!= this[_0xd587[632]]&& null!= this[_0xd587[630]]&& (this[_0xd587[1683]]= new this[_0xd587[630]],this[_0xd587[1683]][_0xd587[507]]= this[_0xd587[507]],this[_0xd587[1683]][_0xd587[1562]]= this[_0xd587[1562]],this[_0xd587[1683]][_0xd587[1334]]= this[_0xd587[632]],this[_0xd587[1683]][_0xd587[1336]]= this[_0xd587[632]],this[_0xd587[1683]][_0xd587[1299]]= this[_0xd587[634]],this[_0xd587[1683]][_0xd587[663]]= this[_0xd587[638]],this[_0xd587[1683]][_0xd587[176]](this[_0xd587[252]]))};mxLabel[_0xd587[202]][_0xd587[258]]= function(){null!= this[_0xd587[1683]]&& (this[_0xd587[1683]][_0xd587[1334]]= this[_0xd587[632]],this[_0xd587[1683]][_0xd587[1336]]= this[_0xd587[632]],this[_0xd587[1683]][_0xd587[1299]]= this[_0xd587[634]],this[_0xd587[1683]][_0xd587[663]]= this[_0xd587[638]]);mxShape[_0xd587[202]][_0xd587[258]][_0xd587[183]](this,arguments)};mxLabel[_0xd587[202]][_0xd587[1567]]= function(){return mxRectangleShape[_0xd587[202]][_0xd587[1567]][_0xd587[183]](this,arguments)&& null== this[_0xd587[632]]&& null== this[_0xd587[630]]};mxLabel[_0xd587[202]][_0xd587[1602]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){this[_0xd587[1684]](_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9);this[_0xd587[1685]](_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9);mxRectangleShape[_0xd587[202]][_0xd587[1602]][_0xd587[183]](this,arguments)};mxLabel[_0xd587[202]][_0xd587[1684]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){null!= this[_0xd587[618]]&& (_0x5c29x3= this[_0xd587[1686]](_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9),_0x5c29x2[_0xd587[618]](_0x5c29x3[_0xd587[235]],_0x5c29x3[_0xd587[236]],_0x5c29x3[_0xd587[117]],_0x5c29x3[_0xd587[119]],this[_0xd587[618]],!1,!1,!1))};mxLabel[_0xd587[202]][_0xd587[1686]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){var _0x5c29x9=mxUtils[_0xd587[433]](this[_0xd587[124]],mxConstants.STYLE_IMAGE_ALIGN,mxConstants.ALIGN_LEFT),_0x5c29xa=mxUtils[_0xd587[433]](this[_0xd587[124]],mxConstants.STYLE_IMAGE_VERTICAL_ALIGN,mxConstants.ALIGN_MIDDLE),_0x5c29x12=mxUtils[_0xd587[1550]](this[_0xd587[124]],mxConstants.STYLE_IMAGE_WIDTH,mxConstants.DEFAULT_IMAGESIZE),_0x5c29x13=mxUtils[_0xd587[1550]](this[_0xd587[124]],mxConstants.STYLE_IMAGE_HEIGHT,mxConstants.DEFAULT_IMAGESIZE),_0x5c29x14=mxUtils[_0xd587[1550]](this[_0xd587[124]],mxConstants.STYLE_SPACING,this[_0xd587[657]])+ 5;_0x5c29x2= _0x5c29x9== mxConstants[_0xd587[479]]?_0x5c29x2+ (_0x5c29x4- _0x5c29x12)/ 2:_0x5c29x9== mxConstants[_0xd587[480]]?_0x5c29x2+ (_0x5c29x4- _0x5c29x12- _0x5c29x14):_0x5c29x2+ _0x5c29x14;_0x5c29x3= _0x5c29xa== mxConstants[_0xd587[1687]]?_0x5c29x3+ _0x5c29x14:_0x5c29xa== mxConstants[_0xd587[482]]?_0x5c29x3+ (_0x5c29x5- _0x5c29x13- _0x5c29x14):_0x5c29x3+ (_0x5c29x5- _0x5c29x13)/ 2;return new mxRectangle(_0x5c29x2,_0x5c29x3,_0x5c29x12,_0x5c29x13)};mxLabel[_0xd587[202]][_0xd587[1685]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){null!= this[_0xd587[1683]]?(this[_0xd587[1683]][_0xd587[1562]]= this[_0xd587[1688]](_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9),this[_0xd587[1683]][_0xd587[1209]](_0x5c29x2)):null!= this[_0xd587[631]]&& (_0x5c29x3= this[_0xd587[1688]](_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9),_0x5c29x2[_0xd587[618]](_0x5c29x3[_0xd587[235]],_0x5c29x3[_0xd587[236]],_0x5c29x3[_0xd587[117]],_0x5c29x3[_0xd587[119]],this[_0xd587[631]],!1,!1,!1))};mxLabel[_0xd587[202]][_0xd587[1688]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){var _0x5c29x9=mxUtils[_0xd587[433]](this[_0xd587[124]],mxConstants.STYLE_IMAGE_ALIGN,mxConstants.ALIGN_LEFT),_0x5c29xa=mxUtils[_0xd587[433]](this[_0xd587[124]],mxConstants.STYLE_IMAGE_VERTICAL_ALIGN,mxConstants.ALIGN_MIDDLE),_0x5c29x12=mxUtils[_0xd587[1550]](this[_0xd587[124]],mxConstants.STYLE_INDICATOR_WIDTH,this[_0xd587[1682]]),_0x5c29x13=mxUtils[_0xd587[1550]](this[_0xd587[124]],mxConstants.STYLE_INDICATOR_HEIGHT,this[_0xd587[1682]]),_0x5c29x14=this[_0xd587[657]]+ 5;_0x5c29x2= _0x5c29x9== mxConstants[_0xd587[480]]?_0x5c29x2+ (_0x5c29x4- _0x5c29x12- _0x5c29x14):_0x5c29x9== mxConstants[_0xd587[479]]?_0x5c29x2+ (_0x5c29x4- _0x5c29x12)/ 2:_0x5c29x2+ _0x5c29x14;_0x5c29x3= _0x5c29xa== mxConstants[_0xd587[482]]?_0x5c29x3+ (_0x5c29x5- _0x5c29x13- _0x5c29x14):_0x5c29xa== mxConstants[_0xd587[1687]]?_0x5c29x3+ _0x5c29x14:_0x5c29x3+ (_0x5c29x5- _0x5c29x13)/ 2;return new mxRectangle(_0x5c29x2,_0x5c29x3,_0x5c29x12,_0x5c29x13)};mxLabel[_0xd587[202]][_0xd587[1575]]= function(){for(mxRectangleShape[_0xd587[202]][_0xd587[1575]][_0xd587[183]](this,arguments);this[_0xd587[252]][_0xd587[1580]]();){this[_0xd587[252]][_0xd587[266]](this[_0xd587[252]][_0xd587[1581]])};if(null!= this[_0xd587[618]]){var _0x5c29x2=document[_0xd587[55]](_0xd587[466]);_0x5c29x2[_0xd587[124]][_0xd587[491]]= _0xd587[1500];_0x5c29x2[_0xd587[57]](_0xd587[467],_0xd587[468]);var _0x5c29x3=this[_0xd587[1686]](this[_0xd587[1562]][_0xd587[235]],this[_0xd587[1562]][_0xd587[236]],this[_0xd587[1562]][_0xd587[117]],this[_0xd587[1562]][_0xd587[119]]);_0x5c29x3[_0xd587[235]]-= this[_0xd587[1562]][_0xd587[235]];_0x5c29x3[_0xd587[236]]-= this[_0xd587[1562]][_0xd587[236]];_0x5c29x2[_0xd587[124]][_0xd587[361]]= Math[_0xd587[488]](_0x5c29x3[_0xd587[235]])+ _0xd587[168];_0x5c29x2[_0xd587[124]][_0xd587[125]]= Math[_0xd587[488]](_0x5c29x3[_0xd587[236]])+ _0xd587[168];_0x5c29x2[_0xd587[124]][_0xd587[117]]= Math[_0xd587[488]](_0x5c29x3[_0xd587[117]])+ _0xd587[168];_0x5c29x2[_0xd587[124]][_0xd587[119]]= Math[_0xd587[488]](_0x5c29x3[_0xd587[119]])+ _0xd587[168];_0x5c29x2[_0xd587[390]]= this[_0xd587[618]];this[_0xd587[252]][_0xd587[62]](_0x5c29x2)}};function mxCylinder(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){mxShape[_0xd587[239]](this);this[_0xd587[1562]]= _0x5c29x2;this[_0xd587[1334]]= _0x5c29x3;this[_0xd587[1336]]= _0x5c29x4;this[_0xd587[1307]]= null!= _0x5c29x5?_0x5c29x5:1}mxUtils[_0xd587[1284]](mxCylinder,mxShape);mxCylinder[_0xd587[202]][_0xd587[1503]]= 40;mxCylinder[_0xd587[202]][_0xd587[1564]]= 0;mxCylinder[_0xd587[202]][_0xd587[1595]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){_0x5c29x2[_0xd587[513]](_0x5c29x3,_0x5c29x4);_0x5c29x2[_0xd587[1275]]();this[_0xd587[1625]](_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,!1);_0x5c29x2[_0xd587[1337]]();_0x5c29x2[_0xd587[1267]](!1);_0x5c29x2[_0xd587[1275]]();this[_0xd587[1625]](_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,!0);_0x5c29x2[_0xd587[1336]]()};mxCylinder[_0xd587[202]][_0xd587[1625]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa){_0x5c29x3= Math[_0xd587[243]](this[_0xd587[1503]],Math[_0xd587[488]](_0x5c29x9/ 5));if(_0x5c29xa&& null!= this[_0xd587[1334]]|| !_0x5c29xa&& null== this[_0xd587[1334]]){_0x5c29x2[_0xd587[1276]](0,_0x5c29x3),_0x5c29x2[_0xd587[1279]](0,2* _0x5c29x3,_0x5c29x5,2* _0x5c29x3,_0x5c29x5,_0x5c29x3),_0x5c29xa|| (_0x5c29x2[_0xd587[1336]](),_0x5c29x2[_0xd587[1275]]())};_0x5c29xa|| (_0x5c29x2[_0xd587[1276]](0,_0x5c29x3),_0x5c29x2[_0xd587[1279]](0,-_0x5c29x3/ 3,_0x5c29x5,-_0x5c29x3/ 3,_0x5c29x5,_0x5c29x3),_0x5c29x2[_0xd587[1277]](_0x5c29x5,_0x5c29x9- _0x5c29x3),_0x5c29x2[_0xd587[1279]](_0x5c29x5,_0x5c29x9+ _0x5c29x3/ 3,0,_0x5c29x9+ _0x5c29x3/ 3,0,_0x5c29x9- _0x5c29x3),_0x5c29x2[_0xd587[268]]())};function mxConnector(_0x5c29x2,_0x5c29x3,_0x5c29x4){mxPolyline[_0xd587[239]](this,_0x5c29x2,_0x5c29x3,_0x5c29x4)}mxUtils[_0xd587[1284]](mxConnector,mxPolyline);mxConnector[_0xd587[202]][_0xd587[1594]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=this[_0xd587[1689]](_0x5c29x2,_0x5c29x3,!0),_0x5c29x5=this[_0xd587[1689]](_0x5c29x2,_0x5c29x3,!1);null== this[_0xd587[124]]|| 1!= this[_0xd587[124]][mxConstants[_0xd587[1690]]]?this[_0xd587[1639]](_0x5c29x2,_0x5c29x3,this[_0xd587[1606]]):this[_0xd587[1691]](_0x5c29x2,_0x5c29x3);_0x5c29x2[_0xd587[1245]](this[_0xd587[1336]]);_0x5c29x2[_0xd587[1267]](!1);_0x5c29x2[_0xd587[1251]](!1);null!= _0x5c29x4&& _0x5c29x4();null!= _0x5c29x5&& _0x5c29x5()};mxConnector[_0xd587[202]][_0xd587[1691]]= function(_0x5c29x2,_0x5c29x3){_0x5c29x2[_0xd587[1275]]();var _0x5c29x4=_0x5c29x3[0],_0x5c29x5=_0x5c29x3[_0xd587[67]];_0x5c29x2[_0xd587[1276]](_0x5c29x4[_0xd587[235]],_0x5c29x4[_0xd587[236]]);for(_0x5c29x4= 1;_0x5c29x4< _0x5c29x5- 2;_0x5c29x4++){var _0x5c29x9=_0x5c29x3[_0x5c29x4],_0x5c29xa=_0x5c29x3[_0x5c29x4+ 1];_0x5c29x2[_0xd587[1278]](_0x5c29x9[_0xd587[235]],_0x5c29x9[_0xd587[236]],(_0x5c29x9[_0xd587[235]]+ _0x5c29xa[_0xd587[235]])/ 2,(_0x5c29x9[_0xd587[236]]+ _0x5c29xa[_0xd587[236]])/ 2)};_0x5c29x9= _0x5c29x3[_0x5c29x5- 2];_0x5c29xa= _0x5c29x3[_0x5c29x5- 1];_0x5c29x2[_0xd587[1278]](_0x5c29x9[_0xd587[235]],_0x5c29x9[_0xd587[236]],_0x5c29xa[_0xd587[235]],_0x5c29xa[_0xd587[236]]);_0x5c29x2[_0xd587[1336]]()};mxConnector[_0xd587[202]][_0xd587[1689]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){var _0x5c29x5=_0x5c29x3[_0xd587[67]],_0x5c29x9=_0x5c29x4?_0x5c29x3[1]:_0x5c29x3[_0x5c29x5- 2];_0x5c29x3= _0x5c29x4?_0x5c29x3[0]:_0x5c29x3[_0x5c29x5- 1];var _0x5c29x5=_0x5c29x3[_0xd587[235]]- _0x5c29x9[_0xd587[235]],_0x5c29xa=_0x5c29x3[_0xd587[236]]- _0x5c29x9[_0xd587[236]],_0x5c29x12=Math[_0xd587[160]](1,Math[_0xd587[428]](_0x5c29x5* _0x5c29x5+ _0x5c29xa* _0x5c29xa)),_0x5c29x9=_0x5c29x5/ _0x5c29x12,_0x5c29x5=_0x5c29xa/ _0x5c29x12,_0x5c29xa=mxUtils[_0xd587[1550]](this[_0xd587[124]],_0x5c29x4?mxConstants[_0xd587[1692]]:mxConstants[_0xd587[1693]],mxConstants.DEFAULT_MARKERSIZE),_0x5c29x12=mxUtils[_0xd587[433]](this[_0xd587[124]],_0x5c29x4?mxConstants[_0xd587[1694]]:mxConstants[_0xd587[1695]]);return mxMarker[_0xd587[1689]](_0x5c29x2,this,_0x5c29x12,_0x5c29x3,_0x5c29x9,_0x5c29x5,_0x5c29xa,_0x5c29x4,this[_0xd587[1307]],0!= this[_0xd587[124]][_0x5c29x4?mxConstants[_0xd587[1696]]:mxConstants[_0xd587[1697]]])};mxConnector[_0xd587[202]][_0xd587[1612]]= function(_0x5c29x2){mxShape[_0xd587[202]][_0xd587[1612]][_0xd587[183]](this,arguments);var _0x5c29x3=0;mxUtils[_0xd587[433]](this[_0xd587[124]],mxConstants.STYLE_STARTARROW,mxConstants.NONE)!= mxConstants[_0xd587[217]]&& (_0x5c29x3= mxUtils[_0xd587[1550]](this[_0xd587[124]],mxConstants.STYLE_STARTSIZE,mxConstants.DEFAULT_MARKERSIZE)+ 1);mxUtils[_0xd587[433]](this[_0xd587[124]],mxConstants.STYLE_ENDARROW,mxConstants.NONE)!= mxConstants[_0xd587[217]]&& (_0x5c29x3= Math[_0xd587[160]](_0x5c29x3,mxUtils[_0xd587[1550]](this[_0xd587[124]],mxConstants.STYLE_ENDSIZE,mxConstants.DEFAULT_MARKERSIZE))+ 1);_0x5c29x2[_0xd587[244]](Math[_0xd587[430]](_0x5c29x3* this[_0xd587[255]]))};function mxSwimlane(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){mxShape[_0xd587[239]](this);this[_0xd587[1562]]= _0x5c29x2;this[_0xd587[1334]]= _0x5c29x3;this[_0xd587[1336]]= _0x5c29x4;this[_0xd587[1307]]= null!= _0x5c29x5?_0x5c29x5:1}mxUtils[_0xd587[1284]](mxSwimlane,mxShape);mxSwimlane[_0xd587[202]][_0xd587[1680]]= 16;mxSwimlane[_0xd587[202]][_0xd587[1597]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){_0x5c29x2= Math[_0xd587[243]](_0x5c29x9,mxUtils[_0xd587[433]](this[_0xd587[124]],mxConstants.STYLE_STARTSIZE,mxConstants.DEFAULT_STARTSIZE));return new mxRectangle(_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x2)};mxSwimlane[_0xd587[202]][_0xd587[1614]]= function(){var _0x5c29x2=mxShape[_0xd587[202]][_0xd587[1614]][_0xd587[183]](this,arguments);1!= mxUtils[_0xd587[433]](this[_0xd587[124]],mxConstants.STYLE_HORIZONTAL,1)&& (_0x5c29x2+= mxText[_0xd587[202]][_0xd587[1616]]);return _0x5c29x2};mxSwimlane[_0xd587[202]][_0xd587[1615]]= function(){return this[_0xd587[1614]]()};mxSwimlane[_0xd587[202]][_0xd587[1590]]= function(){return mxShape[_0xd587[202]][_0xd587[1590]][_0xd587[183]](this,arguments)|| 1!= mxUtils[_0xd587[433]](this[_0xd587[124]],mxConstants.STYLE_HORIZONTAL,1)};mxSwimlane[_0xd587[202]][_0xd587[1603]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){_0x5c29x2= mxUtils[_0xd587[433]](this[_0xd587[124]],mxConstants.STYLE_ARCSIZE,100* mxConstants[_0xd587[1557]])/ 100;return 3* _0x5c29x4* _0x5c29x2};mxSwimlane[_0xd587[202]][_0xd587[1595]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){var _0x5c29xa=Math[_0xd587[243]](_0x5c29x9,mxUtils[_0xd587[433]](this[_0xd587[124]],mxConstants.STYLE_STARTSIZE,mxConstants.DEFAULT_STARTSIZE)),_0x5c29x12=mxUtils[_0xd587[433]](this[_0xd587[124]],mxConstants.STYLE_SWIMLANE_FILLCOLOR,mxConstants.NONE),_0x5c29x13=1== mxUtils[_0xd587[433]](this[_0xd587[124]],mxConstants.STYLE_SWIMLANE_LINE,1),_0x5c29x14=0;_0x5c29x2[_0xd587[513]](_0x5c29x3,_0x5c29x4);this[_0xd587[1606]]?(_0x5c29x14= this[_0xd587[1603]](_0x5c29x5,_0x5c29x9,_0x5c29xa),this[_0xd587[1698]](_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa,_0x5c29x14,_0x5c29x12,_0x5c29x13)):this[_0xd587[1699]](_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa,_0x5c29x12,_0x5c29x13);_0x5c29x12= mxUtils[_0xd587[433]](this[_0xd587[124]],mxConstants.STYLE_SEPARATORCOLOR,mxConstants.NONE);this[_0xd587[1700]](_0x5c29x2,_0x5c29x5,_0x5c29xa,_0x5c29x9,_0x5c29x12);null!= this[_0xd587[618]]&& (_0x5c29x9= this[_0xd587[1686]](_0x5c29x3,_0x5c29xa,_0x5c29x5,_0x5c29x9),_0x5c29x2[_0xd587[618]](_0x5c29x9[_0xd587[235]]- _0x5c29x3,_0x5c29x9[_0xd587[236]]- _0x5c29x4,_0x5c29x9[_0xd587[117]],_0x5c29x9[_0xd587[119]],this[_0xd587[618]],!1,!1,!1));this[_0xd587[617]]&& (_0x5c29x2[_0xd587[1267]](!1),this[_0xd587[1604]](_0x5c29x2,0,0,_0x5c29x5,_0x5c29xa,_0x5c29x14))};mxSwimlane[_0xd587[202]][_0xd587[1699]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa,_0x5c29x12,_0x5c29x13){_0x5c29x12!= mxConstants[_0xd587[217]]&& (_0x5c29x2[_0xd587[815]](),_0x5c29x2[_0xd587[1245]](_0x5c29x12),_0x5c29x2[_0xd587[1319]](0,0,_0x5c29x5,_0x5c29x9),_0x5c29x2[_0xd587[1337]](),_0x5c29x2[_0xd587[1210]](),_0x5c29x2[_0xd587[1267]](!1));_0x5c29x2[_0xd587[1275]]();_0x5c29x2[_0xd587[1276]](0,_0x5c29xa);_0x5c29x2[_0xd587[1277]](0,0);_0x5c29x2[_0xd587[1277]](_0x5c29x5,0);_0x5c29x2[_0xd587[1277]](_0x5c29x5,_0x5c29xa);_0x5c29x13&& _0x5c29x2[_0xd587[268]]();_0x5c29x2[_0xd587[1337]]();_0x5c29xa< _0x5c29x9&& _0x5c29x12== mxConstants[_0xd587[217]]&& (_0x5c29x2[_0xd587[1229]]= !1,_0x5c29x2[_0xd587[1275]](),_0x5c29x2[_0xd587[1276]](0,_0x5c29xa),_0x5c29x2[_0xd587[1277]](0,_0x5c29x9),_0x5c29x2[_0xd587[1277]](_0x5c29x5,_0x5c29x9),_0x5c29x2[_0xd587[1277]](_0x5c29x5,_0x5c29xa),_0x5c29x2[_0xd587[1336]]())};mxSwimlane[_0xd587[202]][_0xd587[1698]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa,_0x5c29x12,_0x5c29x13,_0x5c29x14){_0x5c29x13!= mxConstants[_0xd587[217]]&& (_0x5c29x2[_0xd587[815]](),_0x5c29x2[_0xd587[1245]](_0x5c29x13),_0x5c29x2[_0xd587[1320]](0,0,_0x5c29x5,_0x5c29x9,_0x5c29x12,_0x5c29x12),_0x5c29x2[_0xd587[1337]](),_0x5c29x2[_0xd587[1210]](),_0x5c29x2[_0xd587[1267]](!1));_0x5c29x2[_0xd587[1275]]();_0x5c29x2[_0xd587[1276]](_0x5c29x5,_0x5c29xa);_0x5c29x2[_0xd587[1277]](_0x5c29x5,_0x5c29x12);_0x5c29x2[_0xd587[1278]](_0x5c29x5,0,_0x5c29x5- Math[_0xd587[243]](_0x5c29x5/ 2,_0x5c29x12),0);_0x5c29x2[_0xd587[1277]](Math[_0xd587[243]](_0x5c29x5/ 2,_0x5c29x12),0);_0x5c29x2[_0xd587[1278]](0,0,0,_0x5c29x12);_0x5c29x2[_0xd587[1277]](0,_0x5c29xa);_0x5c29x14&& _0x5c29x2[_0xd587[268]]();_0x5c29x2[_0xd587[1337]]();_0x5c29xa< _0x5c29x9&& _0x5c29x13== mxConstants[_0xd587[217]]&& (_0x5c29x2[_0xd587[1229]]= !1,_0x5c29x2[_0xd587[1275]](),_0x5c29x2[_0xd587[1276]](0,_0x5c29xa),_0x5c29x2[_0xd587[1277]](0,_0x5c29x9- _0x5c29x12),_0x5c29x2[_0xd587[1278]](0,_0x5c29x9,Math[_0xd587[243]](_0x5c29x5/ 2,_0x5c29x12),_0x5c29x9),_0x5c29x2[_0xd587[1277]](_0x5c29x5- Math[_0xd587[243]](_0x5c29x5/ 2,_0x5c29x12),_0x5c29x9),_0x5c29x2[_0xd587[1278]](_0x5c29x5,_0x5c29x9,_0x5c29x5,_0x5c29x9- _0x5c29x12),_0x5c29x2[_0xd587[1277]](_0x5c29x5,_0x5c29xa),_0x5c29x2[_0xd587[1336]]())};mxSwimlane[_0xd587[202]][_0xd587[1700]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){_0x5c29x9!= mxConstants[_0xd587[217]]&& (_0x5c29x2[_0xd587[1249]](_0x5c29x9),_0x5c29x2[_0xd587[1251]](!0),_0x5c29x2[_0xd587[1275]](),_0x5c29x2[_0xd587[1276]](_0x5c29x3,_0x5c29x4),_0x5c29x2[_0xd587[1277]](_0x5c29x3,_0x5c29x5),_0x5c29x2[_0xd587[1336]](),_0x5c29x2[_0xd587[1251]](!1))};mxSwimlane[_0xd587[202]][_0xd587[1686]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){return new mxRectangle(_0x5c29x2+ _0x5c29x4- this[_0xd587[1680]],_0x5c29x3,this[_0xd587[1680]],this[_0xd587[1680]])};function mxGraphLayout(_0x5c29x2){this[_0xd587[1179]]= _0x5c29x2}mxGraphLayout[_0xd587[202]][_0xd587[1179]]= null;mxGraphLayout[_0xd587[202]][_0xd587[1701]]= !0;mxGraphLayout[_0xd587[202]][_0xd587[1101]]= null;mxGraphLayout[_0xd587[202]][_0xd587[1702]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){};mxGraphLayout[_0xd587[202]][_0xd587[350]]= function(_0x5c29x2){};mxGraphLayout[_0xd587[202]][_0xd587[1703]]= function(){return this[_0xd587[1179]]};mxGraphLayout[_0xd587[202]][_0xd587[1704]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){_0x5c29x4= this[_0xd587[1179]][_0xd587[441]][_0xd587[248]](_0x5c29x3);_0x5c29x3= null!= _0x5c29x4?_0x5c29x4[_0xd587[124]]:this[_0xd587[1179]][_0xd587[1705]](_0x5c29x3);return null!= _0x5c29x3?_0x5c29x3[_0x5c29x2]:null};mxGraphLayout[_0xd587[1706]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){if(null!= _0x5c29x4&& null!= _0x5c29x2){_0x5c29x3= null!= _0x5c29x3?_0x5c29x3:!0;_0x5c29x9= _0x5c29x9|| [];var _0x5c29xa=mxCellPath[_0xd587[385]](_0x5c29x2);if(null== _0x5c29x9[_0x5c29xa]&& (_0x5c29x9[_0x5c29xa]= _0x5c29x2,_0x5c29x5= _0x5c29x4(_0x5c29x2,_0x5c29x5),null== _0x5c29x5|| _0x5c29x5)){if(_0x5c29x5= this[_0xd587[1179]][_0xd587[251]][_0xd587[1707]](_0x5c29x2),0< _0x5c29x5){for(_0x5c29xa= 0;_0x5c29xa< _0x5c29x5;_0x5c29xa++){var _0x5c29x12=this[_0xd587[1179]][_0xd587[251]][_0xd587[1708]](_0x5c29x2,_0x5c29xa),_0x5c29x13=this[_0xd587[1179]][_0xd587[251]][_0xd587[1709]](_0x5c29x12,!0)== _0x5c29x2;if(!_0x5c29x3|| _0x5c29x13){_0x5c29x13= this[_0xd587[1179]][_0xd587[441]][_0xd587[1710]](_0x5c29x12,!_0x5c29x13),this[_0xd587[1706]](_0x5c29x13,_0x5c29x3,_0x5c29x4,_0x5c29x12,_0x5c29x9)}}}}}};mxGraphLayout[_0xd587[202]][_0xd587[1711]]= function(_0x5c29x2){return this[_0xd587[1179]][_0xd587[1712]](_0x5c29x2)};mxGraphLayout[_0xd587[202]][_0xd587[1713]]= function(_0x5c29x2){return !this[_0xd587[1179]][_0xd587[502]]()[_0xd587[1193]](_0x5c29x2)|| !this[_0xd587[1179]][_0xd587[1714]](_0x5c29x2)};mxGraphLayout[_0xd587[202]][_0xd587[1715]]= function(_0x5c29x2){var _0x5c29x3=this[_0xd587[1179]][_0xd587[502]]();return !_0x5c29x3[_0xd587[250]](_0x5c29x2)|| !this[_0xd587[1179]][_0xd587[1714]](_0x5c29x2)|| null== _0x5c29x3[_0xd587[1709]](_0x5c29x2,!0)|| null== _0x5c29x3[_0xd587[1709]](_0x5c29x2,!1)};mxGraphLayout[_0xd587[202]][_0xd587[1716]]= function(_0x5c29x2,_0x5c29x3){this[_0xd587[1179]][_0xd587[1717]](mxConstants.STYLE_NOEDGESTYLE,_0x5c29x3?_0xd587[468]:_0xd587[500],[_0x5c29x2])};mxGraphLayout[_0xd587[202]][_0xd587[1718]]= function(_0x5c29x2,_0x5c29x3){this[_0xd587[1179]][_0xd587[1717]](mxConstants.STYLE_ORTHOGONAL,_0x5c29x3?_0xd587[500]:_0xd587[468],[_0x5c29x2])};mxGraphLayout[_0xd587[202]][_0xd587[1719]]= function(_0x5c29x2){var _0x5c29x3= new mxPoint;if(null!= _0x5c29x2&& _0x5c29x2!= this[_0xd587[1101]]){var _0x5c29x4=this[_0xd587[1179]][_0xd587[502]]();if(_0x5c29x4[_0xd587[1720]](this[_0xd587[1101]],_0x5c29x2)){for(var _0x5c29x5=_0x5c29x4[_0xd587[1721]](_0x5c29x2);_0x5c29x2!= this[_0xd587[1101]];){_0x5c29x3[_0xd587[235]]+= _0x5c29x5[_0xd587[235]],_0x5c29x3[_0xd587[236]]+= _0x5c29x5[_0xd587[236]],_0x5c29x2= _0x5c29x4[_0xd587[1197]](_0x5c29x2),_0x5c29x5= _0x5c29x4[_0xd587[1721]](_0x5c29x2)}}};return _0x5c29x3};mxGraphLayout[_0xd587[202]][_0xd587[1722]]= function(_0x5c29x2,_0x5c29x3){if(null!= _0x5c29x2){var _0x5c29x4=this[_0xd587[1179]][_0xd587[251]],_0x5c29x5=_0x5c29x4[_0xd587[1721]](_0x5c29x2);null== _0x5c29x5?(_0x5c29x5= new mxGeometry,_0x5c29x5[_0xd587[1723]](!0)):_0x5c29x5= _0x5c29x5[_0xd587[238]]();if(null!= this[_0xd587[1101]]&& null!= _0x5c29x3){for(var _0x5c29x9=_0x5c29x4[_0xd587[1197]](_0x5c29x2),_0x5c29x9=this[_0xd587[1719]](_0x5c29x9),_0x5c29xa=0;_0x5c29xa< _0x5c29x3[_0xd587[67]];_0x5c29xa++){_0x5c29x3[_0x5c29xa][_0xd587[235]]-= _0x5c29x9[_0xd587[235]],_0x5c29x3[_0x5c29xa][_0xd587[236]]-= _0x5c29x9[_0xd587[236]]}};_0x5c29x5[_0xd587[1525]]= _0x5c29x3;_0x5c29x4[_0xd587[1724]](_0x5c29x2,_0x5c29x5)}};mxGraphLayout[_0xd587[202]][_0xd587[1725]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){var _0x5c29x5=this[_0xd587[1179]][_0xd587[502]](),_0x5c29x9=_0x5c29x5[_0xd587[1721]](_0x5c29x2),_0x5c29xa=null;if(null!= _0x5c29x9){_0x5c29xa= new mxRectangle(_0x5c29x3,_0x5c29x4,_0x5c29x9[_0xd587[117]],_0x5c29x9[_0xd587[119]]);if(this[_0xd587[1701]]){var _0x5c29x12=this[_0xd587[1179]][_0xd587[249]]()[_0xd587[248]](_0x5c29x2);if(null!= _0x5c29x12&& null!= _0x5c29x12[_0xd587[963]]&& null!= _0x5c29x12[_0xd587[963]][_0xd587[1563]]){var _0x5c29x13=this[_0xd587[1179]][_0xd587[249]]()[_0xd587[255]],_0x5c29x14=_0x5c29x12[_0xd587[963]][_0xd587[1563]];_0x5c29x12[_0xd587[963]][_0xd587[1563]][_0xd587[235]]< _0x5c29x12[_0xd587[235]]&& (_0x5c29x3+= (_0x5c29x12[_0xd587[235]]- _0x5c29x14[_0xd587[235]])/ _0x5c29x13,_0x5c29xa[_0xd587[117]]= _0x5c29x14[_0xd587[117]]);_0x5c29x12[_0xd587[963]][_0xd587[1563]][_0xd587[236]]< _0x5c29x12[_0xd587[236]]&& (_0x5c29x4+= (_0x5c29x12[_0xd587[236]]- _0x5c29x14[_0xd587[236]])/ _0x5c29x13,_0x5c29xa[_0xd587[119]]= _0x5c29x14[_0xd587[119]])}};null!= this[_0xd587[1101]]&& (_0x5c29x12= _0x5c29x5[_0xd587[1197]](_0x5c29x2),null!= _0x5c29x12&& _0x5c29x12!= this[_0xd587[1101]]&& (_0x5c29x12= this[_0xd587[1719]](_0x5c29x12),_0x5c29x3-= _0x5c29x12[_0xd587[235]],_0x5c29x4-= _0x5c29x12[_0xd587[236]]));if(_0x5c29x9[_0xd587[235]]!= _0x5c29x3|| _0x5c29x9[_0xd587[236]]!= _0x5c29x4){_0x5c29x9= _0x5c29x9[_0xd587[238]](),_0x5c29x9[_0xd587[235]]= _0x5c29x3,_0x5c29x9[_0xd587[236]]= _0x5c29x4,_0x5c29x5[_0xd587[1724]](_0x5c29x2,_0x5c29x9)}};return _0x5c29xa};mxGraphLayout[_0xd587[202]][_0xd587[1726]]= function(_0x5c29x2){var _0x5c29x3=this[_0xd587[1179]][_0xd587[502]]()[_0xd587[1721]](_0x5c29x2);if(this[_0xd587[1701]]){var _0x5c29x4=this[_0xd587[1179]][_0xd587[249]]()[_0xd587[248]](_0x5c29x2);if(null!= _0x5c29x4&& null!= _0x5c29x4[_0xd587[963]]&& null!= _0x5c29x4[_0xd587[963]][_0xd587[1563]]){var _0x5c29x5=this[_0xd587[1179]][_0xd587[249]]()[_0xd587[255]],_0x5c29x9=_0x5c29x4[_0xd587[963]][_0xd587[1563]],_0x5c29xa=Math[_0xd587[160]](_0x5c29x4[_0xd587[235]]- _0x5c29x9[_0xd587[235]],0)/ _0x5c29x5,_0x5c29x12=Math[_0xd587[160]](_0x5c29x4[_0xd587[236]]- _0x5c29x9[_0xd587[236]],0)/ _0x5c29x5,_0x5c29x13=Math[_0xd587[160]](_0x5c29x9[_0xd587[235]]+ _0x5c29x9[_0xd587[117]]- (_0x5c29x4[_0xd587[235]]+ _0x5c29x4[_0xd587[117]]),0)/ _0x5c29x5,_0x5c29x4=Math[_0xd587[160]](_0x5c29x9[_0xd587[236]]+ _0x5c29x9[_0xd587[119]]- (_0x5c29x4[_0xd587[236]]+ _0x5c29x4[_0xd587[119]]),0)/ _0x5c29x5,_0x5c29x3= new mxRectangle(_0x5c29x3[_0xd587[235]]- _0x5c29xa,_0x5c29x3[_0xd587[236]]- _0x5c29x12,_0x5c29x3[_0xd587[117]]+ _0x5c29xa+ _0x5c29x13,_0x5c29x3[_0xd587[119]]+ _0x5c29x12+ _0x5c29x4)}};null!= this[_0xd587[1101]]&& (_0x5c29x2= this[_0xd587[1179]][_0xd587[502]]()[_0xd587[1197]](_0x5c29x2),_0x5c29x3= _0x5c29x3[_0xd587[238]](),null!= _0x5c29x2&& _0x5c29x2!= this[_0xd587[1101]]&& (_0x5c29x2= this[_0xd587[1719]](_0x5c29x2),_0x5c29x3[_0xd587[235]]+= _0x5c29x2[_0xd587[235]],_0x5c29x3[_0xd587[236]]+= _0x5c29x2[_0xd587[236]]));return new mxRectangle(_0x5c29x3[_0xd587[235]],_0x5c29x3[_0xd587[236]],_0x5c29x3[_0xd587[117]],_0x5c29x3[_0xd587[119]])};mxGraphLayout[_0xd587[202]][_0xd587[1727]]= function(_0x5c29x2,_0x5c29x3){this[_0xd587[1179]][_0xd587[502]]()[_0xd587[473]]();try{for(var _0x5c29x4=_0x5c29x2[_0xd587[67]]- 1;0<= _0x5c29x4;_0x5c29x4--){var _0x5c29x5=_0x5c29x2[_0x5c29x4],_0x5c29x9=this[_0xd587[1179]][_0xd587[1728]](_0x5c29x5),_0x5c29xa=this[_0xd587[1179]][_0xd587[1729]](_0x5c29x9),_0x5c29x12=this[_0xd587[1179]][_0xd587[1198]](_0x5c29x5),_0x5c29x13=0,_0x5c29x14=0;if(this[_0xd587[1179]][_0xd587[1730]](_0x5c29x5)){var _0x5c29x15=this[_0xd587[1179]][_0xd587[1731]](_0x5c29x5),_0x5c29x13=_0x5c29x15[_0xd587[117]],_0x5c29x14=_0x5c29x15[_0xd587[119]]};null!= _0x5c29xa&& null!= _0x5c29x12&& (_0x5c29x12= _0x5c29x12[_0xd587[238]](),_0x5c29x12[_0xd587[235]]= _0x5c29x12[_0xd587[235]]+ _0x5c29xa[_0xd587[235]]- _0x5c29x3- _0x5c29x13,_0x5c29x12[_0xd587[236]]= _0x5c29x12[_0xd587[236]]+ _0x5c29xa[_0xd587[236]]- _0x5c29x3- _0x5c29x14,_0x5c29x12[_0xd587[117]]= _0x5c29xa[_0xd587[117]]+ 2* _0x5c29x3+ _0x5c29x13,_0x5c29x12[_0xd587[119]]= _0x5c29xa[_0xd587[119]]+ 2* _0x5c29x3+ _0x5c29x14,this[_0xd587[1179]][_0xd587[502]]()[_0xd587[1724]](_0x5c29x5,_0x5c29x12),this[_0xd587[1179]][_0xd587[834]](_0x5c29x9,_0x5c29x3+ _0x5c29x13- _0x5c29xa[_0xd587[235]],_0x5c29x3+ _0x5c29x14- _0x5c29xa[_0xd587[236]]))}}finally{this[_0xd587[1179]][_0xd587[502]]()[_0xd587[476]]()}};function mxStackLayout(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa){mxGraphLayout[_0xd587[239]](this,_0x5c29x2);this[_0xd587[662]]= null!= _0x5c29x3?_0x5c29x3:!0;this[_0xd587[657]]= null!= _0x5c29x4?_0x5c29x4:0;this[_0xd587[1732]]= null!= _0x5c29x5?_0x5c29x5:0;this[_0xd587[1733]]= null!= _0x5c29x9?_0x5c29x9:0;this[_0xd587[467]]= null!= _0x5c29xa?_0x5c29xa:0}mxStackLayout[_0xd587[202]]= new mxGraphLayout;mxStackLayout[_0xd587[202]][_0xd587[196]]= mxStackLayout;mxStackLayout[_0xd587[202]][_0xd587[662]]= null;mxStackLayout[_0xd587[202]][_0xd587[657]]= null;mxStackLayout[_0xd587[202]][_0xd587[1732]]= null;mxStackLayout[_0xd587[202]][_0xd587[1733]]= null;mxStackLayout[_0xd587[202]][_0xd587[467]]= 0;mxStackLayout[_0xd587[202]][_0xd587[1734]]= !1;mxStackLayout[_0xd587[202]][_0xd587[1334]]= !1;mxStackLayout[_0xd587[202]][_0xd587[1735]]= !1;mxStackLayout[_0xd587[202]][_0xd587[1736]]= !1;mxStackLayout[_0xd587[202]][_0xd587[1333]]= null;mxStackLayout[_0xd587[202]][_0xd587[1737]]= function(){return this[_0xd587[662]]};mxStackLayout[_0xd587[202]][_0xd587[1702]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){var _0x5c29x5=this[_0xd587[1179]][_0xd587[502]](),_0x5c29x9=_0x5c29x5[_0xd587[1197]](_0x5c29x2),_0x5c29xa=this[_0xd587[1737]]();if(null!= _0x5c29x2&& null!= _0x5c29x9){var _0x5c29x12=0,_0x5c29x13=0,_0x5c29x14=_0x5c29x5[_0xd587[262]](_0x5c29x9);_0x5c29x3= _0x5c29xa?_0x5c29x3:_0x5c29x4;_0x5c29x12= this[_0xd587[1179]][_0xd587[249]]()[_0xd587[248]](_0x5c29x9);null!= _0x5c29x12&& (_0x5c29x3-= _0x5c29xa?_0x5c29x12[_0xd587[235]]:_0x5c29x12[_0xd587[236]]);for(_0x5c29x12= 0;_0x5c29x12< _0x5c29x14;_0x5c29x12++){if(_0x5c29x4= _0x5c29x5[_0xd587[263]](_0x5c29x9,_0x5c29x12),_0x5c29x4!= _0x5c29x2&& (_0x5c29x4= _0x5c29x5[_0xd587[1721]](_0x5c29x4),null!= _0x5c29x4)){_0x5c29x4= _0x5c29xa?_0x5c29x4[_0xd587[235]]+ _0x5c29x4[_0xd587[117]]/ 2:_0x5c29x4[_0xd587[236]]+ _0x5c29x4[_0xd587[119]]/ 2;if(_0x5c29x13< _0x5c29x3&& _0x5c29x4> _0x5c29x3){break};_0x5c29x13= _0x5c29x4}};_0x5c29xa= _0x5c29x9[_0xd587[1738]](_0x5c29x2);_0x5c29xa= Math[_0xd587[160]](0,_0x5c29x12- (_0x5c29x12> _0x5c29xa?1:0));_0x5c29x5[_0xd587[99]](_0x5c29x9,_0x5c29x2,_0x5c29xa)}};mxStackLayout[_0xd587[202]][_0xd587[1739]]= function(_0x5c29x2){var _0x5c29x3=this[_0xd587[1179]][_0xd587[502]](),_0x5c29x4=_0x5c29x3[_0xd587[1721]](_0x5c29x2);if(null!= this[_0xd587[1179]][_0xd587[526]]&& (null== _0x5c29x4&& _0x5c29x3[_0xd587[1740]](_0x5c29x2)|| _0x5c29x2== this[_0xd587[1179]][_0xd587[249]]()[_0xd587[1741]])){_0x5c29x4= new mxRectangle(0,0,this[_0xd587[1179]][_0xd587[526]][_0xd587[359]]- 1,this[_0xd587[1179]][_0xd587[526]][_0xd587[167]]- 1)};return _0x5c29x4};mxStackLayout[_0xd587[202]][_0xd587[350]]= function(_0x5c29x2){if(null!= _0x5c29x2){var _0x5c29x3=this[_0xd587[1737]](),_0x5c29x4=this[_0xd587[1179]][_0xd587[502]](),_0x5c29x5=this[_0xd587[1739]](_0x5c29x2),_0x5c29x9=0;null!= _0x5c29x5&& (_0x5c29x9= _0x5c29x3?_0x5c29x5[_0xd587[119]]:_0x5c29x5[_0xd587[117]]);var _0x5c29x9=_0x5c29x9- (2* this[_0xd587[657]]+ 2* this[_0xd587[467]]),_0x5c29xa=this[_0xd587[1732]]+ this[_0xd587[467]],_0x5c29x12=this[_0xd587[1733]]+ this[_0xd587[467]];if(this[_0xd587[1179]][_0xd587[1730]](_0x5c29x2)){var _0x5c29x13=this[_0xd587[1179]][_0xd587[1705]](_0x5c29x2),_0x5c29x14=mxUtils[_0xd587[433]](_0x5c29x13,mxConstants.STYLE_STARTSIZE,mxConstants.DEFAULT_STARTSIZE),_0x5c29x13=mxUtils[_0xd587[433]](_0x5c29x13,mxConstants.STYLE_HORIZONTAL,!0);_0x5c29x3== _0x5c29x13&& (_0x5c29x9-= _0x5c29x14);_0x5c29x3?_0x5c29x12+= _0x5c29x14:_0x5c29xa+= _0x5c29x14};_0x5c29x4[_0xd587[473]]();try{for(var _0x5c29x14=0,_0x5c29x13=null,_0x5c29x15=_0x5c29x4[_0xd587[262]](_0x5c29x2),_0x5c29x16=0;_0x5c29x16< _0x5c29x15;_0x5c29x16++){var _0x5c29x17=_0x5c29x4[_0xd587[263]](_0x5c29x2,_0x5c29x16);if(!this[_0xd587[1713]](_0x5c29x17)&& this[_0xd587[1711]](_0x5c29x17)){var _0x5c29x18=_0x5c29x4[_0xd587[1721]](_0x5c29x17);if(null!= _0x5c29x18){_0x5c29x18= _0x5c29x18[_0xd587[238]]();if(null!= this[_0xd587[1333]]&& null!= _0x5c29x13&& (_0x5c29x3&& _0x5c29x13[_0xd587[235]]+ _0x5c29x13[_0xd587[117]]+ _0x5c29x18[_0xd587[117]]+ 2* this[_0xd587[657]]> this[_0xd587[1333]]|| !_0x5c29x3&& _0x5c29x13[_0xd587[236]]+ _0x5c29x13[_0xd587[119]]+ _0x5c29x18[_0xd587[119]]+ 2* this[_0xd587[657]]> this[_0xd587[1333]])){_0x5c29x13= null,_0x5c29x3?_0x5c29x12+= _0x5c29x14+ this[_0xd587[657]]:_0x5c29xa+= _0x5c29x14+ this[_0xd587[657]],_0x5c29x14= 0};_0x5c29x14= Math[_0xd587[160]](_0x5c29x14,_0x5c29x3?_0x5c29x18[_0xd587[119]]:_0x5c29x18[_0xd587[117]]);null!= _0x5c29x13?_0x5c29x3?_0x5c29x18[_0xd587[235]]= _0x5c29x13[_0xd587[235]]+ _0x5c29x13[_0xd587[117]]+ this[_0xd587[657]]:_0x5c29x18[_0xd587[236]]= _0x5c29x13[_0xd587[236]]+ _0x5c29x13[_0xd587[119]]+ this[_0xd587[657]]:this[_0xd587[1734]]|| (_0x5c29x3?_0x5c29x18[_0xd587[235]]= _0x5c29xa:_0x5c29x18[_0xd587[236]]= _0x5c29x12);_0x5c29x3?_0x5c29x18[_0xd587[236]]= _0x5c29x12:_0x5c29x18[_0xd587[235]]= _0x5c29xa;this[_0xd587[1334]]&& 0< _0x5c29x9&& (_0x5c29x3?_0x5c29x18[_0xd587[119]]= _0x5c29x9:_0x5c29x18[_0xd587[117]]= _0x5c29x9);_0x5c29x4[_0xd587[1724]](_0x5c29x17,_0x5c29x18);_0x5c29x13= _0x5c29x18}}};this[_0xd587[1735]]&& null!= _0x5c29x5&& null!= _0x5c29x13&& !this[_0xd587[1179]][_0xd587[1742]](_0x5c29x2)?(_0x5c29x5= _0x5c29x5[_0xd587[238]](),_0x5c29x3?_0x5c29x5[_0xd587[117]]= _0x5c29x13[_0xd587[235]]+ _0x5c29x13[_0xd587[117]]+ this[_0xd587[657]]:_0x5c29x5[_0xd587[119]]= _0x5c29x13[_0xd587[236]]+ _0x5c29x13[_0xd587[119]]+ this[_0xd587[657]],_0x5c29x4[_0xd587[1724]](_0x5c29x2,_0x5c29x5)):this[_0xd587[1736]]&& (null!= _0x5c29x5&& null!= _0x5c29x13)&& (_0x5c29x3?_0x5c29x13[_0xd587[117]]= _0x5c29x5[_0xd587[117]]- _0x5c29x13[_0xd587[235]]- this[_0xd587[657]]:_0x5c29x13[_0xd587[119]]= _0x5c29x5[_0xd587[119]]- _0x5c29x13[_0xd587[236]]- this[_0xd587[657]])}finally{_0x5c29x4[_0xd587[476]]()}}};function mxPartitionLayout(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){mxGraphLayout[_0xd587[239]](this,_0x5c29x2);this[_0xd587[662]]= null!= _0x5c29x3?_0x5c29x3:!0;this[_0xd587[657]]= _0x5c29x4|| 0;this[_0xd587[467]]= _0x5c29x5|| 0}mxPartitionLayout[_0xd587[202]]= new mxGraphLayout;mxPartitionLayout[_0xd587[202]][_0xd587[196]]= mxPartitionLayout;mxPartitionLayout[_0xd587[202]][_0xd587[662]]= null;mxPartitionLayout[_0xd587[202]][_0xd587[657]]= null;mxPartitionLayout[_0xd587[202]][_0xd587[467]]= null;mxPartitionLayout[_0xd587[202]][_0xd587[1743]]= !0;mxPartitionLayout[_0xd587[202]][_0xd587[1737]]= function(){return this[_0xd587[662]]};mxPartitionLayout[_0xd587[202]][_0xd587[1702]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){_0x5c29x4= this[_0xd587[1179]][_0xd587[502]]();var _0x5c29x5=_0x5c29x4[_0xd587[1197]](_0x5c29x2);if(null!= _0x5c29x2&& null!= _0x5c29x5){for(var _0x5c29x9=0,_0x5c29xa=0,_0x5c29x12=_0x5c29x4[_0xd587[262]](_0x5c29x5),_0x5c29x9=0;_0x5c29x9< _0x5c29x12;_0x5c29x9++){var _0x5c29x13=_0x5c29x4[_0xd587[263]](_0x5c29x5,_0x5c29x9),_0x5c29x13=this[_0xd587[1726]](_0x5c29x13);if(null!= _0x5c29x13){_0x5c29x13= _0x5c29x13[_0xd587[235]]+ _0x5c29x13[_0xd587[117]]/ 2;if(_0x5c29xa< _0x5c29x3&& _0x5c29x13> _0x5c29x3){break};_0x5c29xa= _0x5c29x13}};_0x5c29x3= _0x5c29x5[_0xd587[1738]](_0x5c29x2);_0x5c29x3= Math[_0xd587[160]](0,_0x5c29x9- (_0x5c29x9> _0x5c29x3?1:0));_0x5c29x4[_0xd587[99]](_0x5c29x5,_0x5c29x2,_0x5c29x3)}};mxPartitionLayout[_0xd587[202]][_0xd587[350]]= function(_0x5c29x2){var _0x5c29x3=this[_0xd587[1737]](),_0x5c29x4=this[_0xd587[1179]][_0xd587[502]](),_0x5c29x5=_0x5c29x4[_0xd587[1721]](_0x5c29x2);if(null!= this[_0xd587[1179]][_0xd587[526]]&& (null== _0x5c29x5&& _0x5c29x4[_0xd587[1740]](_0x5c29x2)|| _0x5c29x2== this[_0xd587[1179]][_0xd587[249]]()[_0xd587[1741]])){_0x5c29x5= new mxRectangle(0,0,this[_0xd587[1179]][_0xd587[526]][_0xd587[359]]- 1,this[_0xd587[1179]][_0xd587[526]][_0xd587[167]]- 1)};if(null!= _0x5c29x5){for(var _0x5c29x9=[],_0x5c29xa=_0x5c29x4[_0xd587[262]](_0x5c29x2),_0x5c29x12=0;_0x5c29x12< _0x5c29xa;_0x5c29x12++){var _0x5c29x13=_0x5c29x4[_0xd587[263]](_0x5c29x2,_0x5c29x12);!this[_0xd587[1713]](_0x5c29x13)&& this[_0xd587[1711]](_0x5c29x13)&& _0x5c29x9[_0xd587[207]](_0x5c29x13)};_0x5c29xa= _0x5c29x9[_0xd587[67]];if(0< _0x5c29xa){var _0x5c29x14=this[_0xd587[467]],_0x5c29x15=this[_0xd587[467]],_0x5c29x16=_0x5c29x3?_0x5c29x5[_0xd587[119]]:_0x5c29x5[_0xd587[117]],_0x5c29x16=_0x5c29x16- 2* this[_0xd587[467]];_0x5c29x2= this[_0xd587[1179]][_0xd587[1730]](_0x5c29x2)?this[_0xd587[1179]][_0xd587[1731]](_0x5c29x2): new mxRectangle;_0x5c29x16-= _0x5c29x3?_0x5c29x2[_0xd587[119]]:_0x5c29x2[_0xd587[117]];_0x5c29x14+= _0x5c29x2[_0xd587[117]];_0x5c29x15+= _0x5c29x2[_0xd587[119]];_0x5c29x2= this[_0xd587[467]]+ (_0x5c29xa- 1)* this[_0xd587[657]];_0x5c29x5= _0x5c29x3?(_0x5c29x5[_0xd587[117]]- _0x5c29x14- _0x5c29x2)/ _0x5c29xa:(_0x5c29x5[_0xd587[119]]- _0x5c29x15- _0x5c29x2)/ _0x5c29xa;if(0< _0x5c29x5){_0x5c29x4[_0xd587[473]]();try{for(_0x5c29x12= 0;_0x5c29x12< _0x5c29xa;_0x5c29x12++){var _0x5c29x13=_0x5c29x9[_0x5c29x12],_0x5c29x17=_0x5c29x4[_0xd587[1721]](_0x5c29x13);null!= _0x5c29x17&& (_0x5c29x17= _0x5c29x17[_0xd587[238]](),_0x5c29x17[_0xd587[235]]= _0x5c29x14,_0x5c29x17[_0xd587[236]]= _0x5c29x15,_0x5c29x3?(this[_0xd587[1743]]&& (_0x5c29x17[_0xd587[117]]= _0x5c29x5,_0x5c29x17[_0xd587[119]]= _0x5c29x16),_0x5c29x14+= _0x5c29x5+ this[_0xd587[657]]):(this[_0xd587[1743]]&& (_0x5c29x17[_0xd587[119]]= _0x5c29x5,_0x5c29x17[_0xd587[117]]= _0x5c29x16),_0x5c29x15+= _0x5c29x5+ this[_0xd587[657]]),_0x5c29x4[_0xd587[1724]](_0x5c29x13,_0x5c29x17))}}finally{_0x5c29x4[_0xd587[476]]()}}}}};function mxCompactTreeLayout(_0x5c29x2,_0x5c29x3,_0x5c29x4){mxGraphLayout[_0xd587[239]](this,_0x5c29x2);this[_0xd587[662]]= null!= _0x5c29x3?_0x5c29x3:!0;this[_0xd587[1744]]= null!= _0x5c29x4?_0x5c29x4:!1}mxCompactTreeLayout[_0xd587[202]]= new mxGraphLayout;mxCompactTreeLayout[_0xd587[202]][_0xd587[196]]= mxCompactTreeLayout;mxCompactTreeLayout[_0xd587[202]][_0xd587[662]]= null;mxCompactTreeLayout[_0xd587[202]][_0xd587[1744]]= null;mxCompactTreeLayout[_0xd587[202]][_0xd587[1735]]= !0;mxCompactTreeLayout[_0xd587[202]][_0xd587[1745]]= 10;mxCompactTreeLayout[_0xd587[202]][_0xd587[1746]]= null;mxCompactTreeLayout[_0xd587[202]][_0xd587[1747]]= !1;mxCompactTreeLayout[_0xd587[202]][_0xd587[1748]]= 10;mxCompactTreeLayout[_0xd587[202]][_0xd587[1749]]= 20;mxCompactTreeLayout[_0xd587[202]][_0xd587[1750]]= !0;mxCompactTreeLayout[_0xd587[202]][_0xd587[1751]]= 5;mxCompactTreeLayout[_0xd587[202]][_0xd587[1752]]= 4;mxCompactTreeLayout[_0xd587[202]][_0xd587[1753]]= 8;mxCompactTreeLayout[_0xd587[202]][_0xd587[1754]]= 4;mxCompactTreeLayout[_0xd587[202]][_0xd587[1755]]= !0;mxCompactTreeLayout[_0xd587[202]][_0xd587[1713]]= function(_0x5c29x2){return mxGraphLayout[_0xd587[202]][_0xd587[1713]][_0xd587[183]](this,arguments)|| 0== this[_0xd587[1179]][_0xd587[1756]](_0x5c29x2)[_0xd587[67]]};mxCompactTreeLayout[_0xd587[202]][_0xd587[1737]]= function(){return this[_0xd587[662]]};mxCompactTreeLayout[_0xd587[202]][_0xd587[350]]= function(_0x5c29x2,_0x5c29x3){this[_0xd587[1101]]= _0x5c29x2;var _0x5c29x4=this[_0xd587[1179]][_0xd587[502]]();if(null== _0x5c29x3){if(0< this[_0xd587[1179]][_0xd587[264]](_0x5c29x2,_0x5c29x4[_0xd587[1197]](_0x5c29x2),this[_0xd587[1744]],!this[_0xd587[1744]],!1)[_0xd587[67]]){_0x5c29x3= _0x5c29x2}else {var _0x5c29x5=this[_0xd587[1179]][_0xd587[1757]](_0x5c29x2,!0,this[_0xd587[1744]]);if(0< _0x5c29x5[_0xd587[67]]){for(var _0x5c29x9=0;_0x5c29x9< _0x5c29x5[_0xd587[67]];_0x5c29x9++){if(!this[_0xd587[1713]](_0x5c29x5[_0x5c29x9])&& 0< this[_0xd587[1179]][_0xd587[264]](_0x5c29x5[_0x5c29x9],null,this[_0xd587[1744]],!this[_0xd587[1744]],!1)[_0xd587[67]]){_0x5c29x3= _0x5c29x5[_0x5c29x9];break}}}}};if(null!= _0x5c29x3){this[_0xd587[1746]]= this[_0xd587[1735]]?{}:null;_0x5c29x4[_0xd587[473]]();try{var _0x5c29xa=this[_0xd587[1758]](_0x5c29x3,_0x5c29x2);if(null!= _0x5c29xa){this[_0xd587[1759]](_0x5c29xa);var _0x5c29x12=this[_0xd587[1179]][_0xd587[1020]],_0x5c29x5=_0x5c29x12;if(!this[_0xd587[1747]]){var _0x5c29x13=this[_0xd587[1726]](_0x5c29x3);null!= _0x5c29x13&& (_0x5c29x12= _0x5c29x13[_0xd587[235]],_0x5c29x5= _0x5c29x13[_0xd587[236]])};_0x5c29x13= null;_0x5c29x13= this[_0xd587[1737]]()?this[_0xd587[1760]](_0x5c29xa,_0x5c29x12,_0x5c29x5):this[_0xd587[1761]](_0x5c29xa,null,_0x5c29x12,_0x5c29x5);if(null!= _0x5c29x13){var _0x5c29x14=_0x5c29x9= 0;0> _0x5c29x13[_0xd587[235]]&& (_0x5c29x9= Math[_0xd587[425]](_0x5c29x12- _0x5c29x13[_0xd587[235]]));0> _0x5c29x13[_0xd587[236]]&& (_0x5c29x14= Math[_0xd587[425]](_0x5c29x5- _0x5c29x13[_0xd587[236]]));(0!= _0x5c29x9|| 0!= _0x5c29x14)&& this[_0xd587[1762]](_0x5c29xa,_0x5c29x9,_0x5c29x14);this[_0xd587[1735]]&& this[_0xd587[1763]]();this[_0xd587[1755]]&& this[_0xd587[1764]](_0x5c29xa)}}}finally{_0x5c29x4[_0xd587[476]]()}}};mxCompactTreeLayout[_0xd587[202]][_0xd587[1762]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){_0x5c29x2[_0xd587[235]]+= _0x5c29x3;_0x5c29x2[_0xd587[236]]+= _0x5c29x4;this[_0xd587[183]](_0x5c29x2);for(_0x5c29x2= _0x5c29x2[_0xd587[247]];null!= _0x5c29x2;){this[_0xd587[1762]](_0x5c29x2,_0x5c29x3,_0x5c29x4),_0x5c29x2= _0x5c29x2[_0xd587[1765]]}};mxCompactTreeLayout[_0xd587[202]][_0xd587[1758]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){_0x5c29x4= null!= _0x5c29x4?_0x5c29x4:[];var _0x5c29x5=mxCellPath[_0xd587[385]](_0x5c29x2),_0x5c29x9=null;if(null!= _0x5c29x2&& null== _0x5c29x4[_0x5c29x5]&& !this[_0xd587[1713]](_0x5c29x2)){_0x5c29x4[_0x5c29x5]= _0x5c29x2;var _0x5c29x9=this[_0xd587[1766]](_0x5c29x2),_0x5c29x5=this[_0xd587[1179]][_0xd587[502]](),_0x5c29xa=null;_0x5c29x2= this[_0xd587[1179]][_0xd587[264]](_0x5c29x2,_0x5c29x3,this[_0xd587[1744]],!this[_0xd587[1744]],!1,!0);for(var _0x5c29x12=this[_0xd587[1179]][_0xd587[249]](),_0x5c29x13=0;_0x5c29x13< _0x5c29x2[_0xd587[67]];_0x5c29x13++){var _0x5c29x14=_0x5c29x2[_0x5c29x13];if(!this[_0xd587[1715]](_0x5c29x14)){this[_0xd587[1750]]&& this[_0xd587[1722]](_0x5c29x14,null);this[_0xd587[1755]]&& (this[_0xd587[1716]](_0x5c29x14,!1),this[_0xd587[1722]](_0x5c29x14,null));var _0x5c29x15=_0x5c29x12[_0xd587[248]](_0x5c29x14),_0x5c29x14=null!= _0x5c29x15?_0x5c29x15[_0xd587[1710]](this[_0xd587[1744]]):_0x5c29x12[_0xd587[1710]](_0x5c29x14,this[_0xd587[1744]]),_0x5c29x15=this[_0xd587[1758]](_0x5c29x14,_0x5c29x3,_0x5c29x4);null!= _0x5c29x15&& null!= _0x5c29x5[_0xd587[1721]](_0x5c29x14)&& (null== _0x5c29xa?_0x5c29x9[_0xd587[247]]= _0x5c29x15:_0x5c29xa[_0xd587[1765]]= _0x5c29x15,_0x5c29xa= _0x5c29x15)}}};return _0x5c29x9};mxCompactTreeLayout[_0xd587[202]][_0xd587[1759]]= function(_0x5c29x2){if(null!= _0x5c29x2){for(var _0x5c29x3=_0x5c29x2[_0xd587[247]];null!= _0x5c29x3;){this[_0xd587[1759]](_0x5c29x3),_0x5c29x3= _0x5c29x3[_0xd587[1765]]};null!= _0x5c29x2[_0xd587[247]]?this[_0xd587[1767]](_0x5c29x2,this[_0xd587[234]](_0x5c29x2)):this[_0xd587[1768]](_0x5c29x2)}};mxCompactTreeLayout[_0xd587[202]][_0xd587[1760]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){_0x5c29x2[_0xd587[235]]+= _0x5c29x3+ _0x5c29x2[_0xd587[1769]];_0x5c29x2[_0xd587[236]]+= _0x5c29x4+ _0x5c29x2[_0xd587[1770]];_0x5c29x5= this[_0xd587[183]](_0x5c29x2,_0x5c29x5);_0x5c29x3= _0x5c29x2[_0xd587[247]];if(null!= _0x5c29x3){_0x5c29x5= this[_0xd587[1760]](_0x5c29x3,_0x5c29x2[_0xd587[235]],_0x5c29x2[_0xd587[236]],_0x5c29x5);_0x5c29x4= _0x5c29x2[_0xd587[236]]+ _0x5c29x3[_0xd587[1770]];for(var _0x5c29x9=_0x5c29x3[_0xd587[1765]];null!= _0x5c29x9;){_0x5c29x5= this[_0xd587[1760]](_0x5c29x9,_0x5c29x2[_0xd587[235]]+ _0x5c29x3[_0xd587[1769]],_0x5c29x4,_0x5c29x5),_0x5c29x4+= _0x5c29x9[_0xd587[1770]],_0x5c29x9= _0x5c29x9[_0xd587[1765]]}};return _0x5c29x5};mxCompactTreeLayout[_0xd587[202]][_0xd587[1761]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){_0x5c29x2[_0xd587[235]]+= _0x5c29x4+ _0x5c29x2[_0xd587[1770]];_0x5c29x2[_0xd587[236]]+= _0x5c29x5+ _0x5c29x2[_0xd587[1769]];_0x5c29x9= this[_0xd587[183]](_0x5c29x2,_0x5c29x9);_0x5c29x3= _0x5c29x2[_0xd587[247]];if(null!= _0x5c29x3){_0x5c29x9= this[_0xd587[1761]](_0x5c29x3,_0x5c29x2,_0x5c29x2[_0xd587[235]],_0x5c29x2[_0xd587[236]],_0x5c29x9);_0x5c29x4= _0x5c29x2[_0xd587[235]]+ _0x5c29x3[_0xd587[1770]];for(_0x5c29x5= _0x5c29x3[_0xd587[1765]];null!= _0x5c29x5;){_0x5c29x9= this[_0xd587[1761]](_0x5c29x5,_0x5c29x2,_0x5c29x4,_0x5c29x2[_0xd587[236]]+ _0x5c29x3[_0xd587[1769]],_0x5c29x9),_0x5c29x4+= _0x5c29x5[_0xd587[1770]],_0x5c29x5= _0x5c29x5[_0xd587[1765]]}};return _0x5c29x9};mxCompactTreeLayout[_0xd587[202]][_0xd587[1767]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=this[_0xd587[1749]]+ this[_0xd587[1748]],_0x5c29x5=(_0x5c29x3- _0x5c29x2[_0xd587[117]])/ 2- this[_0xd587[1749]],_0x5c29x9=_0x5c29x5+ _0x5c29x2[_0xd587[117]]+ 2* this[_0xd587[1749]]- _0x5c29x3;_0x5c29x2[_0xd587[247]][_0xd587[1769]]= _0x5c29x4+ _0x5c29x2[_0xd587[119]];_0x5c29x2[_0xd587[247]][_0xd587[1770]]= _0x5c29x9;_0x5c29x2[_0xd587[1772]][_0xd587[1771]]= this[_0xd587[1773]](_0x5c29x2[_0xd587[119]],0,this[_0xd587[1773]](_0x5c29x4,_0x5c29x9,_0x5c29x2[_0xd587[1772]][_0xd587[1771]]));_0x5c29x2[_0xd587[1772]][_0xd587[1774]]= this[_0xd587[1773]](_0x5c29x2[_0xd587[119]],0,this[_0xd587[1773]](_0x5c29x4,_0x5c29x5,_0x5c29x2[_0xd587[1772]][_0xd587[1774]]))};mxCompactTreeLayout[_0xd587[202]][_0xd587[1768]]= function(_0x5c29x2){var _0x5c29x3=2* this[_0xd587[1749]];_0x5c29x2[_0xd587[1772]][_0xd587[1775]]= this[_0xd587[1773]](_0x5c29x2[_0xd587[119]]+ _0x5c29x3,0);_0x5c29x2[_0xd587[1772]][_0xd587[1771]]= _0x5c29x2[_0xd587[1772]][_0xd587[1775]];_0x5c29x2[_0xd587[1772]][_0xd587[1776]]= this[_0xd587[1773]](0,-_0x5c29x2[_0xd587[117]]- _0x5c29x3);_0x5c29x2[_0xd587[1772]][_0xd587[1774]]= this[_0xd587[1773]](_0x5c29x2[_0xd587[119]]+ _0x5c29x3,0,_0x5c29x2[_0xd587[1772]][_0xd587[1776]])};mxCompactTreeLayout[_0xd587[202]][_0xd587[234]]= function(_0x5c29x2){var _0x5c29x3=2* this[_0xd587[1749]],_0x5c29x4=_0x5c29x2[_0xd587[247]];_0x5c29x2[_0xd587[1772]]= _0x5c29x4[_0xd587[1772]];for(var _0x5c29x5=_0x5c29x4[_0xd587[117]]+ _0x5c29x3,_0x5c29x9=_0x5c29x5,_0x5c29x4=_0x5c29x4[_0xd587[1765]];null!= _0x5c29x4;){var _0x5c29xa=this[_0xd587[1777]](_0x5c29x2[_0xd587[1772]],_0x5c29x4[_0xd587[1772]]);_0x5c29x4[_0xd587[1770]]= _0x5c29xa+ _0x5c29x5;_0x5c29x4[_0xd587[1769]]= 0;_0x5c29x5= _0x5c29x4[_0xd587[117]]+ _0x5c29x3;_0x5c29x9+= _0x5c29xa+ _0x5c29x5;_0x5c29x4= _0x5c29x4[_0xd587[1765]]};return _0x5c29x9};mxCompactTreeLayout[_0xd587[202]][_0xd587[1777]]= function(_0x5c29x2,_0x5c29x3){for(var _0x5c29x4=0,_0x5c29x5=0,_0x5c29x9=0,_0x5c29xa=_0x5c29x2[_0xd587[1774]],_0x5c29x12=_0x5c29x3[_0xd587[1771]];null!= _0x5c29x12&& null!= _0x5c29xa;){var _0x5c29x13=this[_0xd587[1368]](_0x5c29x4,_0x5c29x5,_0x5c29x12[_0xd587[1126]],_0x5c29x12[_0xd587[1125]],_0x5c29xa[_0xd587[1126]],_0x5c29xa[_0xd587[1125]]),_0x5c29x5=_0x5c29x5+ _0x5c29x13,_0x5c29x9=_0x5c29x9+ _0x5c29x13;_0x5c29x4+ _0x5c29x12[_0xd587[1126]]<= _0x5c29xa[_0xd587[1126]]?(_0x5c29x4+= _0x5c29x12[_0xd587[1126]],_0x5c29x5+= _0x5c29x12[_0xd587[1125]],_0x5c29x12= _0x5c29x12[_0xd587[1765]]):(_0x5c29x4-= _0x5c29xa[_0xd587[1126]],_0x5c29x5-= _0x5c29xa[_0xd587[1125]],_0x5c29xa= _0x5c29xa[_0xd587[1765]])};null!= _0x5c29x12?(_0x5c29x4= this[_0xd587[1778]](_0x5c29x2[_0xd587[1775]],0,0,_0x5c29x12,_0x5c29x4,_0x5c29x5),_0x5c29x2[_0xd587[1775]]= null!= _0x5c29x4[_0xd587[1765]]?_0x5c29x3[_0xd587[1775]]:_0x5c29x4,_0x5c29x2[_0xd587[1776]]= _0x5c29x3[_0xd587[1776]]):(_0x5c29x4= this[_0xd587[1778]](_0x5c29x3[_0xd587[1776]],_0x5c29x4,_0x5c29x5,_0x5c29xa,0,0),null== _0x5c29x4[_0xd587[1765]]&& (_0x5c29x2[_0xd587[1776]]= _0x5c29x4));_0x5c29x2[_0xd587[1774]]= _0x5c29x3[_0xd587[1774]];return _0x5c29x9};mxCompactTreeLayout[_0xd587[202]][_0xd587[1368]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa){var _0x5c29x12=0;if(_0x5c29x9<= _0x5c29x2|| 0>= _0x5c29x2+ _0x5c29x4){return 0};_0x5c29x12= 0< _0x5c29x9* _0x5c29x5- _0x5c29x4* _0x5c29xa?0> _0x5c29x2?_0x5c29x2* _0x5c29x5/ _0x5c29x4- _0x5c29x3:0< _0x5c29x2?_0x5c29x2* _0x5c29xa/ _0x5c29x9- _0x5c29x3:-_0x5c29x3:_0x5c29x9< _0x5c29x2+ _0x5c29x4?_0x5c29xa- (_0x5c29x3+ (_0x5c29x9- _0x5c29x2)* _0x5c29x5/ _0x5c29x4):_0x5c29x9> _0x5c29x2+ _0x5c29x4?(_0x5c29x4+ _0x5c29x2)* _0x5c29xa/ _0x5c29x9- (_0x5c29x3+ _0x5c29x5):_0x5c29xa- (_0x5c29x3+ _0x5c29x5);return 0< _0x5c29x12?_0x5c29x12:0};mxCompactTreeLayout[_0xd587[202]][_0xd587[1778]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa){_0x5c29x3= _0x5c29x9+ _0x5c29x5[_0xd587[1126]]- _0x5c29x3;_0x5c29x9= _0x5c29x9= 0;0== _0x5c29x5[_0xd587[1126]]?_0x5c29x9= _0x5c29x5[_0xd587[1125]]:(_0x5c29x9= _0x5c29x3* _0x5c29x5[_0xd587[1125]],_0x5c29x9/= _0x5c29x5[_0xd587[1126]]);_0x5c29x3= this[_0xd587[1773]](_0x5c29x3,_0x5c29x9,_0x5c29x5[_0xd587[1765]]);_0x5c29x2[_0xd587[1765]]= this[_0xd587[1773]](0,_0x5c29xa+ _0x5c29x5[_0xd587[1125]]- _0x5c29x9- _0x5c29x4,_0x5c29x3);return _0x5c29x3};mxCompactTreeLayout[_0xd587[202]][_0xd587[1766]]= function(_0x5c29x2){var _0x5c29x3={};_0x5c29x3[_0xd587[246]]= _0x5c29x2;_0x5c29x3[_0xd587[235]]= 0;_0x5c29x3[_0xd587[236]]= 0;_0x5c29x3[_0xd587[117]]= 0;_0x5c29x3[_0xd587[119]]= 0;_0x5c29x2= this[_0xd587[1726]](_0x5c29x2);null!= _0x5c29x2&& (this[_0xd587[1737]]()?(_0x5c29x3[_0xd587[117]]= _0x5c29x2[_0xd587[119]],_0x5c29x3[_0xd587[119]]= _0x5c29x2[_0xd587[117]]):(_0x5c29x3[_0xd587[117]]= _0x5c29x2[_0xd587[117]],_0x5c29x3[_0xd587[119]]= _0x5c29x2[_0xd587[119]]));_0x5c29x3[_0xd587[1769]]= 0;_0x5c29x3[_0xd587[1770]]= 0;_0x5c29x3[_0xd587[1772]]= {};return _0x5c29x3};mxCompactTreeLayout[_0xd587[202]][_0xd587[183]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=this[_0xd587[1179]][_0xd587[502]](),_0x5c29x5=_0x5c29x2[_0xd587[246]],_0x5c29x9=_0x5c29x4[_0xd587[1721]](_0x5c29x5);null!= _0x5c29x5&& null!= _0x5c29x9&& (this[_0xd587[1711]](_0x5c29x5)&& (_0x5c29x9= this[_0xd587[1725]](_0x5c29x5,_0x5c29x2[_0xd587[235]],_0x5c29x2[_0xd587[236]]),this[_0xd587[1735]]&& (_0x5c29x4= _0x5c29x4[_0xd587[1197]](_0x5c29x5),_0x5c29x5= mxCellPath[_0xd587[385]](_0x5c29x4),null== this[_0xd587[1746]][_0x5c29x5]&& (this[_0xd587[1746]][_0x5c29x5]= _0x5c29x4))),_0x5c29x3= null== _0x5c29x3? new mxRectangle(_0x5c29x9[_0xd587[235]],_0x5c29x9[_0xd587[236]],_0x5c29x9[_0xd587[117]],_0x5c29x9[_0xd587[119]]): new mxRectangle(Math[_0xd587[243]](_0x5c29x3[_0xd587[235]],_0x5c29x9[_0xd587[235]]),Math[_0xd587[243]](_0x5c29x3[_0xd587[236]],_0x5c29x9[_0xd587[236]]),Math[_0xd587[160]](_0x5c29x3[_0xd587[235]]+ _0x5c29x3[_0xd587[117]],_0x5c29x9[_0xd587[235]]+ _0x5c29x9[_0xd587[117]]),Math[_0xd587[160]](_0x5c29x3[_0xd587[236]]+ _0x5c29x3[_0xd587[119]],_0x5c29x9[_0xd587[236]]+ _0x5c29x9[_0xd587[119]])));return _0x5c29x3};mxCompactTreeLayout[_0xd587[202]][_0xd587[1773]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){var _0x5c29x5={};_0x5c29x5[_0xd587[1126]]= _0x5c29x2;_0x5c29x5[_0xd587[1125]]= _0x5c29x3;_0x5c29x5[_0xd587[1765]]= _0x5c29x4;return _0x5c29x5};mxCompactTreeLayout[_0xd587[202]][_0xd587[1763]]= function(){var _0x5c29x2=[],_0x5c29x3;for(_0x5c29x3 in this[_0xd587[1746]]){_0x5c29x2[_0xd587[207]](this[_0xd587[1746]][_0x5c29x3])};this[_0xd587[1727]](mxUtils[_0xd587[1779]](_0x5c29x2,!0),this[_0xd587[1745]])};mxCompactTreeLayout[_0xd587[202]][_0xd587[1764]]= function(_0x5c29x2){this[_0xd587[1780]](_0x5c29x2);for(_0x5c29x2= _0x5c29x2[_0xd587[247]];null!= _0x5c29x2;){this[_0xd587[1764]](_0x5c29x2),_0x5c29x2= _0x5c29x2[_0xd587[1765]]}};mxCompactTreeLayout[_0xd587[202]][_0xd587[1780]]= function(_0x5c29x2){for(var _0x5c29x3=_0x5c29x2[_0xd587[247]],_0x5c29x4=_0x5c29x2[_0xd587[246]],_0x5c29x5=0,_0x5c29x9=[];null!= _0x5c29x3;){_0x5c29x5++;var _0x5c29xa=_0x5c29x3[_0xd587[235]];this[_0xd587[662]]&& (_0x5c29xa= _0x5c29x3[_0xd587[236]]);_0x5c29x9[_0xd587[207]]( new WeightedCellSorter(_0x5c29x3,_0x5c29xa));_0x5c29x3= _0x5c29x3[_0xd587[1765]]};_0x5c29x9[_0xd587[470]](WeightedCellSorter[_0xd587[202]][_0xd587[469]]);var _0x5c29xa=_0x5c29x2[_0xd587[117]],_0x5c29x12=(_0x5c29x5+ 1)* this[_0xd587[1751]];_0x5c29xa> _0x5c29x12+ 2* this[_0xd587[1751]]&& (_0x5c29xa-= 2* this[_0xd587[1751]]);_0x5c29x2= _0x5c29xa/ _0x5c29x5;_0x5c29x3= _0x5c29x2/ 2;_0x5c29xa> _0x5c29x12+ 2* this[_0xd587[1751]]&& (_0x5c29x3+= this[_0xd587[1751]]);for(var _0x5c29xa=this[_0xd587[1753]]- this[_0xd587[1752]],_0x5c29x12=0,_0x5c29x13=this[_0xd587[1726]](_0x5c29x4),_0x5c29x14=0;_0x5c29x14< _0x5c29x9[_0xd587[67]];_0x5c29x14++){for(var _0x5c29x15=_0x5c29x9[_0x5c29x14][_0xd587[246]][_0xd587[246]],_0x5c29x16=this[_0xd587[1726]](_0x5c29x15),_0x5c29x15=this[_0xd587[1179]][_0xd587[1781]](_0x5c29x4,_0x5c29x15,!1),_0x5c29x17=[],_0x5c29x18=0,_0x5c29x19=0,_0x5c29x1a=0;_0x5c29x1a< _0x5c29x15[_0xd587[67]];_0x5c29x1a++){this[_0xd587[662]]?(_0x5c29x18= _0x5c29x13[_0xd587[235]]+ _0x5c29x13[_0xd587[117]],_0x5c29x19= _0x5c29x13[_0xd587[236]]+ _0x5c29x3,_0x5c29x17[_0xd587[207]]( new mxPoint(_0x5c29x18,_0x5c29x19)),_0x5c29x18= _0x5c29x13[_0xd587[235]]+ _0x5c29x13[_0xd587[117]]+ _0x5c29xa,_0x5c29x17[_0xd587[207]]( new mxPoint(_0x5c29x18,_0x5c29x19)),_0x5c29x19= _0x5c29x16[_0xd587[236]]+ _0x5c29x16[_0xd587[119]]/ 2):(_0x5c29x18= _0x5c29x13[_0xd587[235]]+ _0x5c29x3,_0x5c29x19= _0x5c29x13[_0xd587[236]]+ _0x5c29x13[_0xd587[119]],_0x5c29x17[_0xd587[207]]( new mxPoint(_0x5c29x18,_0x5c29x19)),_0x5c29x19= _0x5c29x13[_0xd587[236]]+ _0x5c29x13[_0xd587[119]]+ _0x5c29xa,_0x5c29x17[_0xd587[207]]( new mxPoint(_0x5c29x18,_0x5c29x19)),_0x5c29x18= _0x5c29x16[_0xd587[235]]+ _0x5c29x16[_0xd587[117]]/ 2),_0x5c29x17[_0xd587[207]]( new mxPoint(_0x5c29x18,_0x5c29x19)),this[_0xd587[1722]](_0x5c29x15[_0x5c29x1a],_0x5c29x17)};_0x5c29x14< _0x5c29x5/ 2?_0x5c29xa+= this[_0xd587[1752]]:_0x5c29x14> _0x5c29x5/ 2&& (_0x5c29xa-= this[_0xd587[1752]]);_0x5c29x3+= _0x5c29x2;_0x5c29x12= Math[_0xd587[160]](_0x5c29x12,_0x5c29xa)}};function WeightedCellSorter(_0x5c29x2,_0x5c29x3){this[_0xd587[246]]= _0x5c29x2;this[_0xd587[1782]]= _0x5c29x3}WeightedCellSorter[_0xd587[202]][_0xd587[1782]]= 0;WeightedCellSorter[_0xd587[202]][_0xd587[1783]]= !1;WeightedCellSorter[_0xd587[202]][_0xd587[1784]]= !1;WeightedCellSorter[_0xd587[202]][_0xd587[1785]]= null;WeightedCellSorter[_0xd587[202]][_0xd587[246]]= null;WeightedCellSorter[_0xd587[202]][_0xd587[469]]= function(_0x5c29x2,_0x5c29x3){return null!= _0x5c29x2&& null!= _0x5c29x3?_0x5c29x3[_0xd587[1782]]> _0x5c29x2[_0xd587[1782]]?1:_0x5c29x3[_0xd587[1782]]< _0x5c29x2[_0xd587[1782]]?-1:_0x5c29x3[_0xd587[1783]]?1:-1:0};function mxFastOrganicLayout(_0x5c29x2){mxGraphLayout[_0xd587[239]](this,_0x5c29x2)}mxFastOrganicLayout[_0xd587[202]]= new mxGraphLayout;mxFastOrganicLayout[_0xd587[202]][_0xd587[196]]= mxFastOrganicLayout;mxFastOrganicLayout[_0xd587[202]][_0xd587[1786]]= !0;mxFastOrganicLayout[_0xd587[202]][_0xd587[1750]]= !0;mxFastOrganicLayout[_0xd587[202]][_0xd587[1787]]= !0;mxFastOrganicLayout[_0xd587[202]][_0xd587[1788]]= 50;mxFastOrganicLayout[_0xd587[202]][_0xd587[1789]]= 0;mxFastOrganicLayout[_0xd587[202]][_0xd587[1790]]= 2;mxFastOrganicLayout[_0xd587[202]][_0xd587[1791]]= 500;mxFastOrganicLayout[_0xd587[202]][_0xd587[1792]]= 4;mxFastOrganicLayout[_0xd587[202]][_0xd587[1793]]= 200;mxFastOrganicLayout[_0xd587[202]][_0xd587[1794]]= 0;mxFastOrganicLayout[_0xd587[202]][_0xd587[1795]]= 0;mxFastOrganicLayout[_0xd587[202]][_0xd587[1796]]= 0;mxFastOrganicLayout[_0xd587[202]][_0xd587[1797]]= !0;mxFastOrganicLayout[_0xd587[202]][_0xd587[1713]]= function(_0x5c29x2){return mxGraphLayout[_0xd587[202]][_0xd587[1713]][_0xd587[183]](this,arguments)|| 0== this[_0xd587[1179]][_0xd587[1756]](_0x5c29x2)[_0xd587[67]]};mxFastOrganicLayout[_0xd587[202]][_0xd587[350]]= function(_0x5c29x2){var _0x5c29x3=this[_0xd587[1179]][_0xd587[502]]();this[_0xd587[1798]]= [];for(var _0x5c29x4=this[_0xd587[1179]][_0xd587[1728]](_0x5c29x2),_0x5c29x5=0;_0x5c29x5< _0x5c29x4[_0xd587[67]];_0x5c29x5++){this[_0xd587[1713]](_0x5c29x4[_0x5c29x5])|| this[_0xd587[1798]][_0xd587[207]](_0x5c29x4[_0x5c29x5])};var _0x5c29x9=this[_0xd587[1786]]?this[_0xd587[1179]][_0xd587[441]][_0xd587[1799]](this[_0xd587[1798]]):null,_0x5c29xa=this[_0xd587[1798]][_0xd587[67]];this[_0xd587[1800]]= [];this[_0xd587[1801]]= [];this[_0xd587[1802]]= [];this[_0xd587[1803]]= [];this[_0xd587[1804]]= [];this[_0xd587[1805]]= [];this[_0xd587[1806]]= [];this[_0xd587[1807]]= [];0.0010> this[_0xd587[1788]]&& (this[_0xd587[1788]]= 0.0010);this[_0xd587[1789]]= this[_0xd587[1788]]* this[_0xd587[1788]];for(_0x5c29x5= 0;_0x5c29x5< this[_0xd587[1798]][_0xd587[67]];_0x5c29x5++){var _0x5c29x12=this[_0xd587[1798]][_0x5c29x5];this[_0xd587[1803]][_0x5c29x5]= [];var _0x5c29x13=mxCellPath[_0xd587[385]](_0x5c29x12);this[_0xd587[1800]][_0x5c29x13]= _0x5c29x5;var _0x5c29x14=this[_0xd587[1726]](_0x5c29x12),_0x5c29x15=_0x5c29x14[_0xd587[117]],_0x5c29x16=_0x5c29x14[_0xd587[119]],_0x5c29x17=_0x5c29x14[_0xd587[235]],_0x5c29x18=_0x5c29x14[_0xd587[236]];this[_0xd587[1803]][_0x5c29x5][0]= _0x5c29x17+ _0x5c29x15/ 2;this[_0xd587[1803]][_0x5c29x5][1]= _0x5c29x18+ _0x5c29x16/ 2;this[_0xd587[1806]][_0x5c29x5]= Math[_0xd587[243]](_0x5c29x15,_0x5c29x16);this[_0xd587[1807]][_0x5c29x5]= this[_0xd587[1806]][_0x5c29x5]* this[_0xd587[1806]][_0x5c29x5]};_0x5c29x3[_0xd587[473]]();try{for(_0x5c29x5= 0;_0x5c29x5< _0x5c29xa;_0x5c29x5++){this[_0xd587[1801]][_0x5c29x5]= 0;this[_0xd587[1802]][_0x5c29x5]= 0;this[_0xd587[1804]][_0x5c29x5]= this[_0xd587[1711]](this[_0xd587[1798]][_0x5c29x5]);var _0x5c29x19=this[_0xd587[1179]][_0xd587[1756]](this[_0xd587[1798]][_0x5c29x5],_0x5c29x2),_0x5c29x4=this[_0xd587[1179]][_0xd587[1808]](_0x5c29x19,this[_0xd587[1798]][_0x5c29x5]);this[_0xd587[1805]][_0x5c29x5]= [];for(_0x5c29x15= 0;_0x5c29x15< _0x5c29x4[_0xd587[67]];_0x5c29x15++){this[_0xd587[1750]]&& this[_0xd587[1179]][_0xd587[1809]](_0x5c29x19[_0x5c29x15]);this[_0xd587[1787]]&& this[_0xd587[1716]](_0x5c29x19[_0x5c29x15],!1);var _0x5c29x13=mxCellPath[_0xd587[385]](_0x5c29x4[_0x5c29x15]),_0x5c29x1a=this[_0xd587[1800]][_0x5c29x13];this[_0xd587[1805]][_0x5c29x5][_0x5c29x15]= null!= _0x5c29x1a?_0x5c29x1a:_0x5c29x5}};this[_0xd587[1794]]= this[_0xd587[1793]];0== this[_0xd587[1795]]&& (this[_0xd587[1795]]= 20* Math[_0xd587[428]](_0x5c29xa));for(this[_0xd587[1796]]= 0;this[_0xd587[1796]]< this[_0xd587[1795]];this[_0xd587[1796]]++){if(!this[_0xd587[1797]]){return};this[_0xd587[1810]]();this[_0xd587[1811]]();this[_0xd587[1812]]();this[_0xd587[1813]]()};_0x5c29x2= _0x5c29x4= null;for(_0x5c29x5= 0;_0x5c29x5< this[_0xd587[1798]][_0xd587[67]];_0x5c29x5++){_0x5c29x12= this[_0xd587[1798]][_0x5c29x5],this[_0xd587[1711]](_0x5c29x12)&& (_0x5c29x14= this[_0xd587[1726]](_0x5c29x12),null!= _0x5c29x14&& (this[_0xd587[1803]][_0x5c29x5][0]-= _0x5c29x14[_0xd587[117]]/ 2,this[_0xd587[1803]][_0x5c29x5][1]-= _0x5c29x14[_0xd587[119]]/ 2,_0x5c29x17= this[_0xd587[1179]][_0xd587[1021]](this[_0xd587[1803]][_0x5c29x5][0]),_0x5c29x18= this[_0xd587[1179]][_0xd587[1021]](this[_0xd587[1803]][_0x5c29x5][1]),this[_0xd587[1725]](_0x5c29x12,_0x5c29x17,_0x5c29x18),_0x5c29x4= null== _0x5c29x4?_0x5c29x17:Math[_0xd587[243]](_0x5c29x4,_0x5c29x17),_0x5c29x2= null== _0x5c29x2?_0x5c29x18:Math[_0xd587[243]](_0x5c29x2,_0x5c29x18)))};_0x5c29x5= -(_0x5c29x4|| 0)+ 1;_0x5c29x12= -(_0x5c29x2|| 0)+ 1;null!= _0x5c29x9&& (_0x5c29x5+= _0x5c29x9[_0xd587[235]],_0x5c29x12+= _0x5c29x9[_0xd587[236]]);this[_0xd587[1179]][_0xd587[834]](this[_0xd587[1798]],_0x5c29x5,_0x5c29x12)}finally{_0x5c29x3[_0xd587[476]]()}};mxFastOrganicLayout[_0xd587[202]][_0xd587[1812]]= function(){for(var _0x5c29x2=0;_0x5c29x2< this[_0xd587[1798]][_0xd587[67]];_0x5c29x2++){if(this[_0xd587[1804]][_0x5c29x2]){var _0x5c29x3=Math[_0xd587[428]](this[_0xd587[1801]][_0x5c29x2]* this[_0xd587[1801]][_0x5c29x2]+ this[_0xd587[1802]][_0x5c29x2]* this[_0xd587[1802]][_0x5c29x2]);0.0010> _0x5c29x3&& (_0x5c29x3= 0.0010);var _0x5c29x4=this[_0xd587[1801]][_0x5c29x2]/ _0x5c29x3* Math[_0xd587[243]](_0x5c29x3,this[_0xd587[1794]]),_0x5c29x3=this[_0xd587[1802]][_0x5c29x2]/ _0x5c29x3* Math[_0xd587[243]](_0x5c29x3,this[_0xd587[1794]]);this[_0xd587[1801]][_0x5c29x2]= 0;this[_0xd587[1802]][_0x5c29x2]= 0;this[_0xd587[1803]][_0x5c29x2][0]+= _0x5c29x4;this[_0xd587[1803]][_0x5c29x2][1]+= _0x5c29x3}}};mxFastOrganicLayout[_0xd587[202]][_0xd587[1811]]= function(){for(var _0x5c29x2=0;_0x5c29x2< this[_0xd587[1798]][_0xd587[67]];_0x5c29x2++){for(var _0x5c29x3=0;_0x5c29x3< this[_0xd587[1805]][_0x5c29x2][_0xd587[67]];_0x5c29x3++){var _0x5c29x4=this[_0xd587[1805]][_0x5c29x2][_0x5c29x3];if(_0x5c29x2!= _0x5c29x4&& this[_0xd587[1804]][_0x5c29x2]&& this[_0xd587[1804]][_0x5c29x4]){var _0x5c29x5=this[_0xd587[1803]][_0x5c29x2][0]- this[_0xd587[1803]][_0x5c29x4][0],_0x5c29x9=this[_0xd587[1803]][_0x5c29x2][1]- this[_0xd587[1803]][_0x5c29x4][1],_0x5c29xa=_0x5c29x5* _0x5c29x5+ _0x5c29x9* _0x5c29x9- this[_0xd587[1807]][_0x5c29x2]- this[_0xd587[1807]][_0x5c29x4];_0x5c29xa< this[_0xd587[1792]]&& (_0x5c29xa= this[_0xd587[1792]]);var _0x5c29x12=Math[_0xd587[428]](_0x5c29xa),_0x5c29xa=_0x5c29xa/ this[_0xd587[1788]],_0x5c29x5=_0x5c29x5/ _0x5c29x12* _0x5c29xa,_0x5c29x9=_0x5c29x9/ _0x5c29x12* _0x5c29xa;this[_0xd587[1801]][_0x5c29x2]-= _0x5c29x5;this[_0xd587[1802]][_0x5c29x2]-= _0x5c29x9;this[_0xd587[1801]][_0x5c29x4]+= _0x5c29x5;this[_0xd587[1802]][_0x5c29x4]+= _0x5c29x9}}}};mxFastOrganicLayout[_0xd587[202]][_0xd587[1810]]= function(){for(var _0x5c29x2=this[_0xd587[1798]][_0xd587[67]],_0x5c29x3=0;_0x5c29x3< _0x5c29x2;_0x5c29x3++){for(var _0x5c29x4=_0x5c29x3;_0x5c29x4< _0x5c29x2;_0x5c29x4++){if(!this[_0xd587[1797]]){return};if(_0x5c29x4!= _0x5c29x3&& this[_0xd587[1804]][_0x5c29x3]&& this[_0xd587[1804]][_0x5c29x4]){var _0x5c29x5=this[_0xd587[1803]][_0x5c29x3][0]- this[_0xd587[1803]][_0x5c29x4][0],_0x5c29x9=this[_0xd587[1803]][_0x5c29x3][1]- this[_0xd587[1803]][_0x5c29x4][1];0== _0x5c29x5&& (_0x5c29x5= 0.01+ Math[_0xd587[1814]]());0== _0x5c29x9&& (_0x5c29x9= 0.01+ Math[_0xd587[1814]]());var _0x5c29xa=Math[_0xd587[428]](_0x5c29x5* _0x5c29x5+ _0x5c29x9* _0x5c29x9),_0x5c29x12=_0x5c29xa- this[_0xd587[1806]][_0x5c29x3]- this[_0xd587[1806]][_0x5c29x4];_0x5c29x12> this[_0xd587[1791]]|| (_0x5c29x12< this[_0xd587[1790]]&& (_0x5c29x12= this[_0xd587[1790]]),_0x5c29x12= this[_0xd587[1789]]/ _0x5c29x12,_0x5c29x5= _0x5c29x5/ _0x5c29xa* _0x5c29x12,_0x5c29x9= _0x5c29x9/ _0x5c29xa* _0x5c29x12,this[_0xd587[1801]][_0x5c29x3]+= _0x5c29x5,this[_0xd587[1802]][_0x5c29x3]+= _0x5c29x9,this[_0xd587[1801]][_0x5c29x4]-= _0x5c29x5,this[_0xd587[1802]][_0x5c29x4]-= _0x5c29x9)}}}};mxFastOrganicLayout[_0xd587[202]][_0xd587[1813]]= function(){this[_0xd587[1794]]= this[_0xd587[1793]]* (1- this[_0xd587[1796]]/ this[_0xd587[1795]])};function mxCircleLayout(_0x5c29x2,_0x5c29x3){mxGraphLayout[_0xd587[239]](this,_0x5c29x2);this[_0xd587[1806]]= null!= _0x5c29x3?_0x5c29x3:100}mxCircleLayout[_0xd587[202]]= new mxGraphLayout;mxCircleLayout[_0xd587[202]][_0xd587[196]]= mxCircleLayout;mxCircleLayout[_0xd587[202]][_0xd587[1806]]= null;mxCircleLayout[_0xd587[202]][_0xd587[1815]]= !1;mxCircleLayout[_0xd587[202]][_0xd587[1732]]= 0;mxCircleLayout[_0xd587[202]][_0xd587[1733]]= 0;mxCircleLayout[_0xd587[202]][_0xd587[1750]]= !0;mxCircleLayout[_0xd587[202]][_0xd587[1787]]= !0;mxCircleLayout[_0xd587[202]][_0xd587[350]]= function(_0x5c29x2){var _0x5c29x3=this[_0xd587[1179]][_0xd587[502]]();_0x5c29x3[_0xd587[473]]();try{for(var _0x5c29x4=0,_0x5c29x5=null,_0x5c29x9=null,_0x5c29xa=[],_0x5c29x12=_0x5c29x3[_0xd587[262]](_0x5c29x2),_0x5c29x13=0;_0x5c29x13< _0x5c29x12;_0x5c29x13++){var _0x5c29x14=_0x5c29x3[_0xd587[263]](_0x5c29x2,_0x5c29x13);if(this[_0xd587[1713]](_0x5c29x14)){this[_0xd587[1715]](_0x5c29x14)|| (this[_0xd587[1750]]&& this[_0xd587[1179]][_0xd587[1809]](_0x5c29x14),this[_0xd587[1787]]&& this[_0xd587[1716]](_0x5c29x14,!1))}else {_0x5c29xa[_0xd587[207]](_0x5c29x14);var _0x5c29x15=this[_0xd587[1726]](_0x5c29x14),_0x5c29x5=null== _0x5c29x5?_0x5c29x15[_0xd587[236]]:Math[_0xd587[243]](_0x5c29x5,_0x5c29x15[_0xd587[236]]),_0x5c29x9=null== _0x5c29x9?_0x5c29x15[_0xd587[235]]:Math[_0xd587[243]](_0x5c29x9,_0x5c29x15[_0xd587[235]]),_0x5c29x4=Math[_0xd587[160]](_0x5c29x4,Math[_0xd587[160]](_0x5c29x15[_0xd587[117]],_0x5c29x15[_0xd587[119]]))}};var _0x5c29x16=this[_0xd587[1816]](_0x5c29xa[_0xd587[67]],_0x5c29x4);this[_0xd587[1815]]&& (_0x5c29x9= this[_0xd587[1732]],_0x5c29x5= this[_0xd587[1733]]);this[_0xd587[1817]](_0x5c29xa,_0x5c29x16,_0x5c29x9,_0x5c29x5)}finally{_0x5c29x3[_0xd587[476]]()}};mxCircleLayout[_0xd587[202]][_0xd587[1816]]= function(_0x5c29x2,_0x5c29x3){return Math[_0xd587[160]](_0x5c29x2* _0x5c29x3/ Math[_0xd587[424]],this[_0xd587[1806]])};mxCircleLayout[_0xd587[202]][_0xd587[1817]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){for(var _0x5c29x9=_0x5c29x2[_0xd587[67]],_0x5c29xa=2* Math[_0xd587[424]]/ _0x5c29x9,_0x5c29x12=0;_0x5c29x12< _0x5c29x9;_0x5c29x12++){this[_0xd587[1711]](_0x5c29x2[_0x5c29x12])&& this[_0xd587[1725]](_0x5c29x2[_0x5c29x12],_0x5c29x4+ _0x5c29x3+ _0x5c29x3* Math[_0xd587[427]](_0x5c29x12* _0x5c29xa),_0x5c29x5+ _0x5c29x3+ _0x5c29x3* Math[_0xd587[426]](_0x5c29x12* _0x5c29xa))}};function mxParallelEdgeLayout(_0x5c29x2){mxGraphLayout[_0xd587[239]](this,_0x5c29x2)}mxParallelEdgeLayout[_0xd587[202]]= new mxGraphLayout;mxParallelEdgeLayout[_0xd587[202]][_0xd587[196]]= mxParallelEdgeLayout;mxParallelEdgeLayout[_0xd587[202]][_0xd587[657]]= 20;mxParallelEdgeLayout[_0xd587[202]][_0xd587[350]]= function(_0x5c29x2){_0x5c29x2= this[_0xd587[1818]](_0x5c29x2);this[_0xd587[1179]][_0xd587[251]][_0xd587[473]]();try{for(var _0x5c29x3 in _0x5c29x2){var _0x5c29x4=_0x5c29x2[_0x5c29x3];1< _0x5c29x4[_0xd587[67]]&& this[_0xd587[1759]](_0x5c29x4)}}finally{this[_0xd587[1179]][_0xd587[251]][_0xd587[476]]()}};mxParallelEdgeLayout[_0xd587[202]][_0xd587[1818]]= function(_0x5c29x2){for(var _0x5c29x3=this[_0xd587[1179]][_0xd587[502]](),_0x5c29x4=[],_0x5c29x5=_0x5c29x3[_0xd587[262]](_0x5c29x2),_0x5c29x9=0;_0x5c29x9< _0x5c29x5;_0x5c29x9++){var _0x5c29xa=_0x5c29x3[_0xd587[263]](_0x5c29x2,_0x5c29x9);if(!this[_0xd587[1715]](_0x5c29xa)){var _0x5c29x12=this[_0xd587[1819]](_0x5c29xa);null!= _0x5c29x12&& (null== _0x5c29x4[_0x5c29x12]&& (_0x5c29x4[_0x5c29x12]= []),_0x5c29x4[_0x5c29x12][_0xd587[207]](_0x5c29xa))}};return _0x5c29x4};mxParallelEdgeLayout[_0xd587[202]][_0xd587[1819]]= function(_0x5c29x2){var _0x5c29x3=this[_0xd587[1179]][_0xd587[249]](),_0x5c29x4=_0x5c29x3[_0xd587[248]](_0x5c29x2),_0x5c29x5=null!= _0x5c29x4?_0x5c29x4[_0xd587[1710]](!0):_0x5c29x3[_0xd587[1710]](_0x5c29x2,!0);_0x5c29x2= null!= _0x5c29x4?_0x5c29x4[_0xd587[1710]](!1):_0x5c29x3[_0xd587[1710]](_0x5c29x2,!1);return null!= _0x5c29x5&& null!= _0x5c29x2?(_0x5c29x5= mxCellPath[_0xd587[385]](_0x5c29x5),_0x5c29x2= mxCellPath[_0xd587[385]](_0x5c29x2),_0x5c29x5> _0x5c29x2?_0x5c29x2+ _0xd587[213]+ _0x5c29x5:_0x5c29x5+ _0xd587[213]+ _0x5c29x2):null};mxParallelEdgeLayout[_0xd587[202]][_0xd587[1759]]= function(_0x5c29x2){var _0x5c29x3=_0x5c29x2[0],_0x5c29x4=this[_0xd587[1179]][_0xd587[502]](),_0x5c29x5=_0x5c29x4[_0xd587[1721]](_0x5c29x4[_0xd587[1709]](_0x5c29x3,!0)),_0x5c29x9=_0x5c29x4[_0xd587[1721]](_0x5c29x4[_0xd587[1709]](_0x5c29x3,!1));if(_0x5c29x5== _0x5c29x9){for(var _0x5c29x3=_0x5c29x5[_0xd587[235]]+ _0x5c29x5[_0xd587[117]]+ this[_0xd587[657]],_0x5c29x4=_0x5c29x5[_0xd587[236]]+ _0x5c29x5[_0xd587[119]]/ 2,_0x5c29xa=0;_0x5c29xa< _0x5c29x2[_0xd587[67]];_0x5c29xa++){this[_0xd587[1820]](_0x5c29x2[_0x5c29xa],_0x5c29x3,_0x5c29x4),_0x5c29x3+= this[_0xd587[657]]}}else {if(null!= _0x5c29x5&& null!= _0x5c29x9){for(var _0x5c29x3=_0x5c29x5[_0xd587[235]]+ _0x5c29x5[_0xd587[117]]/ 2,_0x5c29x4=_0x5c29x5[_0xd587[236]]+ _0x5c29x5[_0xd587[119]]/ 2,_0x5c29xa=_0x5c29x9[_0xd587[235]]+ _0x5c29x9[_0xd587[117]]/ 2- _0x5c29x3,_0x5c29x12=_0x5c29x9[_0xd587[236]]+ _0x5c29x9[_0xd587[119]]/ 2- _0x5c29x4,_0x5c29x9=Math[_0xd587[428]](_0x5c29xa* _0x5c29xa+ _0x5c29x12* _0x5c29x12),_0x5c29x5=_0x5c29x12* this[_0xd587[657]]/ _0x5c29x9,_0x5c29x9=_0x5c29xa* this[_0xd587[657]]/ _0x5c29x9,_0x5c29x3=_0x5c29x3+ _0x5c29xa/ 2+ _0x5c29x5* (_0x5c29x2[_0xd587[67]]- 1)/ 2,_0x5c29x4=_0x5c29x4+ _0x5c29x12/ 2- _0x5c29x9* (_0x5c29x2[_0xd587[67]]- 1)/ 2,_0x5c29xa=0;_0x5c29xa< _0x5c29x2[_0xd587[67]];_0x5c29xa++){this[_0xd587[1820]](_0x5c29x2[_0x5c29xa],_0x5c29x3,_0x5c29x4),_0x5c29x3-= _0x5c29x5,_0x5c29x4+= _0x5c29x9}}}};mxParallelEdgeLayout[_0xd587[202]][_0xd587[1820]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){this[_0xd587[1179]][_0xd587[1712]](_0x5c29x2)&& this[_0xd587[1722]](_0x5c29x2,[ new mxPoint(_0x5c29x3,_0x5c29x4)])};function mxCompositeLayout(_0x5c29x2,_0x5c29x3,_0x5c29x4){mxGraphLayout[_0xd587[239]](this,_0x5c29x2);this[_0xd587[1821]]= _0x5c29x3;this[_0xd587[1822]]= _0x5c29x4}mxCompositeLayout[_0xd587[202]]= new mxGraphLayout;mxCompositeLayout[_0xd587[202]][_0xd587[196]]= mxCompositeLayout;mxCompositeLayout[_0xd587[202]][_0xd587[1821]]= null;mxCompositeLayout[_0xd587[202]][_0xd587[1822]]= null;mxCompositeLayout[_0xd587[202]][_0xd587[1702]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){null!= this[_0xd587[1822]]?this[_0xd587[1822]][_0xd587[582]][_0xd587[183]](this[_0xd587[1822]],arguments):this[_0xd587[1821]][0][_0xd587[582]][_0xd587[183]](this[_0xd587[1821]][0],arguments)};mxCompositeLayout[_0xd587[202]][_0xd587[350]]= function(_0x5c29x2){var _0x5c29x3=this[_0xd587[1179]][_0xd587[502]]();_0x5c29x3[_0xd587[473]]();try{for(var _0x5c29x4=0;_0x5c29x4< this[_0xd587[1821]][_0xd587[67]];_0x5c29x4++){this[_0xd587[1821]][_0x5c29x4][_0xd587[350]][_0xd587[183]](this[_0xd587[1821]][_0x5c29x4],arguments)}}finally{_0x5c29x3[_0xd587[476]]()}};function mxEdgeLabelLayout(_0x5c29x2,_0x5c29x3){mxGraphLayout[_0xd587[239]](this,_0x5c29x2)}mxEdgeLabelLayout[_0xd587[202]]= new mxGraphLayout;mxEdgeLabelLayout[_0xd587[202]][_0xd587[196]]= mxEdgeLabelLayout;mxEdgeLabelLayout[_0xd587[202]][_0xd587[350]]= function(_0x5c29x2){for(var _0x5c29x3=this[_0xd587[1179]][_0xd587[441]],_0x5c29x4=this[_0xd587[1179]][_0xd587[502]](),_0x5c29x5=[],_0x5c29x9=[],_0x5c29xa=_0x5c29x4[_0xd587[262]](_0x5c29x2),_0x5c29x12=0;_0x5c29x12< _0x5c29xa;_0x5c29x12++){var _0x5c29x13=_0x5c29x4[_0xd587[263]](_0x5c29x2,_0x5c29x12),_0x5c29x14=_0x5c29x3[_0xd587[248]](_0x5c29x13);null!= _0x5c29x14&& (this[_0xd587[1713]](_0x5c29x13)?this[_0xd587[1715]](_0x5c29x13)|| _0x5c29x5[_0xd587[207]](_0x5c29x14):_0x5c29x9[_0xd587[207]](_0x5c29x14))};this[_0xd587[1823]](_0x5c29x9,_0x5c29x5)};mxEdgeLabelLayout[_0xd587[202]][_0xd587[1823]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=this[_0xd587[1179]][_0xd587[502]]();_0x5c29x4[_0xd587[473]]();try{for(var _0x5c29x5=0;_0x5c29x5< _0x5c29x3[_0xd587[67]];_0x5c29x5++){var _0x5c29x9=_0x5c29x3[_0x5c29x5];if(null!= _0x5c29x9&& null!= _0x5c29x9[_0xd587[963]]&& null!= _0x5c29x9[_0xd587[963]][_0xd587[1563]]){for(var _0x5c29xa=0;_0x5c29xa< _0x5c29x2[_0xd587[67]];_0x5c29xa++){var _0x5c29x12=_0x5c29x2[_0x5c29xa];null!= _0x5c29x12&& this[_0xd587[1824]](_0x5c29x9,_0x5c29x12)}}}}finally{_0x5c29x4[_0xd587[476]]()}};mxEdgeLabelLayout[_0xd587[202]][_0xd587[1824]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=this[_0xd587[1179]][_0xd587[502]](),_0x5c29x5=_0x5c29x2[_0xd587[963]][_0xd587[1563]];if(mxUtils[_0xd587[1825]](_0x5c29x5,_0x5c29x3)){var _0x5c29x9=-_0x5c29x5[_0xd587[236]]- _0x5c29x5[_0xd587[119]]+ _0x5c29x3[_0xd587[236]],_0x5c29xa=-_0x5c29x5[_0xd587[236]]+ _0x5c29x3[_0xd587[236]]+ _0x5c29x3[_0xd587[119]],_0x5c29x9=Math[_0xd587[425]](_0x5c29x9)< Math[_0xd587[425]](_0x5c29xa)?_0x5c29x9:_0x5c29xa,_0x5c29xa=-_0x5c29x5[_0xd587[235]]- _0x5c29x5[_0xd587[117]]+ _0x5c29x3[_0xd587[235]],_0x5c29x5=-_0x5c29x5[_0xd587[235]]+ _0x5c29x3[_0xd587[235]]+ _0x5c29x3[_0xd587[117]],_0x5c29x5=Math[_0xd587[425]](_0x5c29xa)< Math[_0xd587[425]](_0x5c29x5)?_0x5c29xa:_0x5c29x5;Math[_0xd587[425]](_0x5c29x5)< Math[_0xd587[425]](_0x5c29x9)?_0x5c29x9= 0:_0x5c29x5= 0;_0x5c29xa= _0x5c29x4[_0xd587[1721]](_0x5c29x2[_0xd587[246]]);null!= _0x5c29xa&& (_0x5c29xa= _0x5c29xa[_0xd587[238]](),null!= _0x5c29xa[_0xd587[1368]]?(_0x5c29xa[_0xd587[1368]][_0xd587[235]]+= _0x5c29x5,_0x5c29xa[_0xd587[1368]][_0xd587[236]]+= _0x5c29x9):_0x5c29xa[_0xd587[1368]]= new mxPoint(_0x5c29x5,_0x5c29x9),_0x5c29x4[_0xd587[1724]](_0x5c29x2[_0xd587[246]],_0x5c29xa))}};function mxGraphAbstractHierarchyCell(){this[_0xd587[235]]= [];this[_0xd587[236]]= [];this[_0xd587[1826]]= []}mxGraphAbstractHierarchyCell[_0xd587[202]][_0xd587[1827]]= -1;mxGraphAbstractHierarchyCell[_0xd587[202]][_0xd587[1828]]= -1;mxGraphAbstractHierarchyCell[_0xd587[202]][_0xd587[235]]= null;mxGraphAbstractHierarchyCell[_0xd587[202]][_0xd587[236]]= null;mxGraphAbstractHierarchyCell[_0xd587[202]][_0xd587[117]]= 0;mxGraphAbstractHierarchyCell[_0xd587[202]][_0xd587[119]]= 0;mxGraphAbstractHierarchyCell[_0xd587[202]][_0xd587[1829]]= null;mxGraphAbstractHierarchyCell[_0xd587[202]][_0xd587[1830]]= null;mxGraphAbstractHierarchyCell[_0xd587[202]][_0xd587[1826]]= null;mxGraphAbstractHierarchyCell[_0xd587[202]][_0xd587[1831]]= function(_0x5c29x2){return null};mxGraphAbstractHierarchyCell[_0xd587[202]][_0xd587[1832]]= function(_0x5c29x2){return null};mxGraphAbstractHierarchyCell[_0xd587[202]][_0xd587[250]]= function(){return !1};mxGraphAbstractHierarchyCell[_0xd587[202]][_0xd587[1193]]= function(){return !1};mxGraphAbstractHierarchyCell[_0xd587[202]][_0xd587[1833]]= function(_0x5c29x2){return null};mxGraphAbstractHierarchyCell[_0xd587[202]][_0xd587[1834]]= function(_0x5c29x2,_0x5c29x3){return null};mxGraphAbstractHierarchyCell[_0xd587[202]][_0xd587[1835]]= function(_0x5c29x2,_0x5c29x3){this[_0xd587[1193]]()?this[_0xd587[235]][0]= _0x5c29x3:this[_0xd587[250]]()&& (this[_0xd587[235]][_0x5c29x2- this[_0xd587[1828]]- 1]= _0x5c29x3)};mxGraphAbstractHierarchyCell[_0xd587[202]][_0xd587[730]]= function(_0x5c29x2){return this[_0xd587[1193]]()?this[_0xd587[235]][0]:this[_0xd587[250]]()?this[_0xd587[235]][_0x5c29x2- this[_0xd587[1828]]- 1]:0};mxGraphAbstractHierarchyCell[_0xd587[202]][_0xd587[1836]]= function(_0x5c29x2,_0x5c29x3){this[_0xd587[1193]]()?this[_0xd587[236]][0]= _0x5c29x3:this[_0xd587[250]]()&& (this[_0xd587[236]][_0x5c29x2- this[_0xd587[1828]]- 1]= _0x5c29x3)};function mxGraphHierarchyNode(_0x5c29x2){mxGraphAbstractHierarchyCell[_0xd587[183]](this,arguments);this[_0xd587[246]]= _0x5c29x2}mxGraphHierarchyNode[_0xd587[202]]= new mxGraphAbstractHierarchyCell;mxGraphHierarchyNode[_0xd587[202]][_0xd587[196]]= mxGraphHierarchyNode;mxGraphHierarchyNode[_0xd587[202]][_0xd587[246]]= null;mxGraphHierarchyNode[_0xd587[202]][_0xd587[1837]]= [];mxGraphHierarchyNode[_0xd587[202]][_0xd587[1838]]= [];mxGraphHierarchyNode[_0xd587[202]][_0xd587[1839]]= !1;mxGraphHierarchyNode[_0xd587[202]][_0xd587[1840]]= function(_0x5c29x2){return this[_0xd587[1827]]};mxGraphHierarchyNode[_0xd587[202]][_0xd587[1831]]= function(_0x5c29x2){if(null== this[_0xd587[1829]]){this[_0xd587[1829]]= [];this[_0xd587[1829]][0]= [];for(var _0x5c29x3=0;_0x5c29x3< this[_0xd587[1837]][_0xd587[67]];_0x5c29x3++){var _0x5c29x4=this[_0xd587[1837]][_0x5c29x3];-1== _0x5c29x4[_0xd587[1827]]|| _0x5c29x4[_0xd587[1827]]== _0x5c29x2+ 1?this[_0xd587[1829]][0][_0xd587[207]](_0x5c29x4[_0xd587[1097]]):this[_0xd587[1829]][0][_0xd587[207]](_0x5c29x4)}};return this[_0xd587[1829]][0]};mxGraphHierarchyNode[_0xd587[202]][_0xd587[1832]]= function(_0x5c29x2){if(null== this[_0xd587[1830]]){this[_0xd587[1830]]= [];this[_0xd587[1830]][0]= [];for(var _0x5c29x3=0;_0x5c29x3< this[_0xd587[1838]][_0xd587[67]];_0x5c29x3++){var _0x5c29x4=this[_0xd587[1838]][_0x5c29x3];-1== _0x5c29x4[_0xd587[1828]]|| _0x5c29x4[_0xd587[1828]]== _0x5c29x2- 1?this[_0xd587[1830]][0][_0xd587[207]](_0x5c29x4[_0xd587[772]]):this[_0xd587[1830]][0][_0xd587[207]](_0x5c29x4)}};return this[_0xd587[1830]][0]};mxGraphHierarchyNode[_0xd587[202]][_0xd587[1193]]= function(){return !0};mxGraphHierarchyNode[_0xd587[202]][_0xd587[1833]]= function(_0x5c29x2){return this[_0xd587[1826]][0]};mxGraphHierarchyNode[_0xd587[202]][_0xd587[1834]]= function(_0x5c29x2,_0x5c29x3){this[_0xd587[1826]][0]= _0x5c29x3};mxGraphHierarchyNode[_0xd587[202]][_0xd587[1720]]= function(_0x5c29x2){if(null!= _0x5c29x2&& null!= this[_0xd587[1839]]&& null!= _0x5c29x2[_0xd587[1839]]&& this[_0xd587[1839]][_0xd587[67]]< _0x5c29x2[_0xd587[1839]][_0xd587[67]]){if(this[_0xd587[1839]]== _0x5c29x2[_0xd587[1839]]){return !0};if(null== this[_0xd587[1839]]|| null== this[_0xd587[1839]]){return !1};for(var _0x5c29x3=0;_0x5c29x3< this[_0xd587[1839]][_0xd587[67]];_0x5c29x3++){if(this[_0xd587[1839]][_0x5c29x3]!= _0x5c29x2[_0xd587[1839]][_0x5c29x3]){return !1}};return !0};return !1};mxGraphHierarchyNode[_0xd587[202]][_0xd587[1841]]= function(){return this[_0xd587[246]]};function mxGraphHierarchyEdge(_0x5c29x2){mxGraphAbstractHierarchyCell[_0xd587[183]](this,arguments);this[_0xd587[1842]]= _0x5c29x2}mxGraphHierarchyEdge[_0xd587[202]]= new mxGraphAbstractHierarchyCell;mxGraphHierarchyEdge[_0xd587[202]][_0xd587[196]]= mxGraphHierarchyEdge;mxGraphHierarchyEdge[_0xd587[202]][_0xd587[1842]]= null;mxGraphHierarchyEdge[_0xd587[202]][_0xd587[1097]]= null;mxGraphHierarchyEdge[_0xd587[202]][_0xd587[772]]= null;mxGraphHierarchyEdge[_0xd587[202]][_0xd587[1843]]= !1;mxGraphHierarchyEdge[_0xd587[202]][_0xd587[1744]]= function(_0x5c29x2){_0x5c29x2= this[_0xd587[1097]];this[_0xd587[1097]]= this[_0xd587[772]];this[_0xd587[772]]= _0x5c29x2;this[_0xd587[1843]]= !this[_0xd587[1843]]};mxGraphHierarchyEdge[_0xd587[202]][_0xd587[1831]]= function(_0x5c29x2){if(null== this[_0xd587[1829]]){this[_0xd587[1829]]= [];for(var _0x5c29x3=0;_0x5c29x3< this[_0xd587[1826]][_0xd587[67]];_0x5c29x3++){this[_0xd587[1829]][_0x5c29x3]= [],_0x5c29x3== this[_0xd587[1826]][_0xd587[67]]- 1?this[_0xd587[1829]][_0x5c29x3][_0xd587[207]](this[_0xd587[1097]]):this[_0xd587[1829]][_0x5c29x3][_0xd587[207]](this)}};return this[_0xd587[1829]][_0x5c29x2- this[_0xd587[1828]]- 1]};mxGraphHierarchyEdge[_0xd587[202]][_0xd587[1832]]= function(_0x5c29x2){if(null== this[_0xd587[1830]]){this[_0xd587[1830]]= [];for(var _0x5c29x3=0;_0x5c29x3< this[_0xd587[1826]][_0xd587[67]];_0x5c29x3++){this[_0xd587[1830]][_0x5c29x3]= [],0== _0x5c29x3?this[_0xd587[1830]][_0x5c29x3][_0xd587[207]](this[_0xd587[772]]):this[_0xd587[1830]][_0x5c29x3][_0xd587[207]](this)}};return this[_0xd587[1830]][_0x5c29x2- this[_0xd587[1828]]- 1]};mxGraphHierarchyEdge[_0xd587[202]][_0xd587[250]]= function(){return !0};mxGraphHierarchyEdge[_0xd587[202]][_0xd587[1833]]= function(_0x5c29x2){return this[_0xd587[1826]][_0x5c29x2- this[_0xd587[1828]]- 1]};mxGraphHierarchyEdge[_0xd587[202]][_0xd587[1834]]= function(_0x5c29x2,_0x5c29x3){this[_0xd587[1826]][_0x5c29x2- this[_0xd587[1828]]- 1]= _0x5c29x3};mxGraphHierarchyEdge[_0xd587[202]][_0xd587[1841]]= function(){return null!= this[_0xd587[1842]]&& 0< this[_0xd587[1842]][_0xd587[67]]?this[_0xd587[1842]][0]:null};function mxGraphHierarchyModel(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){_0x5c29x2[_0xd587[1703]]();this[_0xd587[1844]]= _0x5c29x9;this[_0xd587[1845]]= _0x5c29x4;this[_0xd587[1101]]= _0x5c29x5;this[_0xd587[1846]]= {};this[_0xd587[1847]]= {};this[_0xd587[1827]]= 0;_0x5c29x4= [];null== _0x5c29x3&& (_0x5c29x3= this[_0xd587[1179]][_0xd587[1728]](_0x5c29x5));this[_0xd587[1827]]= this[_0xd587[1848]];this[_0xd587[1849]](_0x5c29x2,_0x5c29x3,_0x5c29x4);for(_0x5c29x5= 0;_0x5c29x5< _0x5c29x3[_0xd587[67]];_0x5c29x5++){_0x5c29x9= _0x5c29x4[_0x5c29x5][_0xd587[1838]];for(var _0x5c29xa=0;_0x5c29xa< _0x5c29x9[_0xd587[67]];_0x5c29xa++){var _0x5c29x12=_0x5c29x9[_0x5c29xa],_0x5c29x13=_0x5c29x12[_0xd587[1842]];if(null!= _0x5c29x13&& 0< _0x5c29x13[_0xd587[67]]){var _0x5c29x13=_0x5c29x13[0],_0x5c29x14=_0x5c29x2[_0xd587[1710]](_0x5c29x13,!1),_0x5c29x14=mxCellPath[_0xd587[385]](_0x5c29x14),_0x5c29x14=this[_0xd587[1846]][_0x5c29x14];_0x5c29x4[_0x5c29x5]== _0x5c29x14&& (_0x5c29x14= _0x5c29x2[_0xd587[1710]](_0x5c29x13,!0),_0x5c29x14= mxCellPath[_0xd587[385]](_0x5c29x14),_0x5c29x14= this[_0xd587[1846]][_0x5c29x14]);null!= _0x5c29x14&& _0x5c29x4[_0x5c29x5]!= _0x5c29x14&& (_0x5c29x12[_0xd587[772]]= _0x5c29x14,0== _0x5c29x14[_0xd587[1837]][_0xd587[67]]&& (_0x5c29x14[_0xd587[1837]]= []),0> mxUtils[_0xd587[2]](_0x5c29x14[_0xd587[1837]],_0x5c29x12)&& _0x5c29x14[_0xd587[1837]][_0xd587[207]](_0x5c29x12))}};_0x5c29x4[_0x5c29x5][_0xd587[1826]][0]= 1}}mxGraphHierarchyModel[_0xd587[202]][_0xd587[1827]]= null;mxGraphHierarchyModel[_0xd587[202]][_0xd587[1846]]= null;mxGraphHierarchyModel[_0xd587[202]][_0xd587[1847]]= null;mxGraphHierarchyModel[_0xd587[202]][_0xd587[1850]]= null;mxGraphHierarchyModel[_0xd587[202]][_0xd587[1845]]= null;mxGraphHierarchyModel[_0xd587[202]][_0xd587[1101]]= null;mxGraphHierarchyModel[_0xd587[202]][_0xd587[1851]]= 0;mxGraphHierarchyModel[_0xd587[202]][_0xd587[1848]]= 1E8;mxGraphHierarchyModel[_0xd587[202]][_0xd587[1844]]= !1;mxGraphHierarchyModel[_0xd587[202]][_0xd587[1849]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){for(var _0x5c29x5=_0x5c29x2[_0xd587[1703]](),_0x5c29x9=0;_0x5c29x9< _0x5c29x3[_0xd587[67]];_0x5c29x9++){_0x5c29x4[_0x5c29x9]= new mxGraphHierarchyNode(_0x5c29x3[_0x5c29x9]);var _0x5c29xa=mxCellPath[_0xd587[385]](_0x5c29x3[_0x5c29x9]);this[_0xd587[1846]][_0x5c29xa]= _0x5c29x4[_0x5c29x9];_0x5c29xa= _0x5c29x2[_0xd587[264]](_0x5c29x3[_0x5c29x9]);_0x5c29x4[_0x5c29x9][_0xd587[1838]]= [];for(var _0x5c29x12=0;_0x5c29x12< _0x5c29xa[_0xd587[67]];_0x5c29x12++){var _0x5c29x13=_0x5c29x2[_0xd587[1710]](_0x5c29xa[_0x5c29x12],!1);if(_0x5c29x13!= _0x5c29x3[_0x5c29x9]&& _0x5c29x13!= _0x5c29x3[_0x5c29x9]&& _0x5c29x2[_0xd587[1179]][_0xd587[251]][_0xd587[1193]](_0x5c29x13)&& !_0x5c29x2[_0xd587[1713]](_0x5c29x13)){var _0x5c29x14=_0x5c29x2[_0xd587[1781]](_0x5c29x3[_0x5c29x9],_0x5c29x13,!1),_0x5c29x15=_0x5c29x2[_0xd587[1781]](_0x5c29x3[_0x5c29x9],_0x5c29x13,!0),_0x5c29x13=mxCellPath[_0xd587[385]](_0x5c29x14[0]);if(null!= _0x5c29x14&& 0< _0x5c29x14[_0xd587[67]]&& null== this[_0xd587[1847]][_0x5c29x13]&& 2* _0x5c29x15[_0xd587[67]]>= _0x5c29x14[_0xd587[67]]){for(var _0x5c29x15= new mxGraphHierarchyEdge(_0x5c29x14),_0x5c29x16=0;_0x5c29x16< _0x5c29x14[_0xd587[67]];_0x5c29x16++){var _0x5c29x17=_0x5c29x14[_0x5c29x16],_0x5c29x13=mxCellPath[_0xd587[385]](_0x5c29x17);this[_0xd587[1847]][_0x5c29x13]= _0x5c29x15;_0x5c29x5[_0xd587[1809]](_0x5c29x17);_0x5c29x2[_0xd587[1787]]&& (_0x5c29x2[_0xd587[1716]](_0x5c29x17,!1),_0x5c29x2[_0xd587[1718]](_0x5c29x17,!0))};_0x5c29x15[_0xd587[1097]]= _0x5c29x4[_0x5c29x9];0> mxUtils[_0xd587[2]](_0x5c29x4[_0x5c29x9][_0xd587[1838]],_0x5c29x15)&& _0x5c29x4[_0x5c29x9][_0xd587[1838]][_0xd587[207]](_0x5c29x15)}}};_0x5c29x4[_0x5c29x9][_0xd587[1826]][0]= 0}};mxGraphHierarchyModel[_0xd587[202]][_0xd587[1852]]= function(){var _0x5c29x2=[];if(null!= this[_0xd587[1845]]){for(var _0x5c29x3=0;_0x5c29x3< this[_0xd587[1845]][_0xd587[67]];_0x5c29x3++){var _0x5c29x4=mxCellPath[_0xd587[385]](this[_0xd587[1845]][_0x5c29x3]),_0x5c29x4=this[_0xd587[1846]][_0x5c29x4];null!= _0x5c29x4&& _0x5c29x2[_0xd587[207]](_0x5c29x4)}};for(var _0x5c29x5 in this[_0xd587[1846]]){_0x5c29x4= this[_0xd587[1846]][_0x5c29x5],_0x5c29x4[_0xd587[1826]][0]= -1};for(var _0x5c29x9=_0x5c29x2[_0xd587[1853]]();0< _0x5c29x2[_0xd587[67]];){var _0x5c29x4=_0x5c29x2[0],_0x5c29xa,_0x5c29x12;_0x5c29xa= _0x5c29x4[_0xd587[1837]];_0x5c29x12= _0x5c29x4[_0xd587[1838]];for(var _0x5c29x13=!0,_0x5c29x14=this[_0xd587[1848]],_0x5c29x3=0;_0x5c29x3< _0x5c29xa[_0xd587[67]];_0x5c29x3++){var _0x5c29x15=_0x5c29xa[_0x5c29x3];if(5270620== _0x5c29x15[_0xd587[1826]][0]){_0x5c29x15= _0x5c29x15[_0xd587[1097]],_0x5c29x14= Math[_0xd587[243]](_0x5c29x14,_0x5c29x15[_0xd587[1826]][0]- 1)}else {_0x5c29x13= !1;break}};if(_0x5c29x13){_0x5c29x4[_0xd587[1826]][0]= _0x5c29x14;this[_0xd587[1827]]= Math[_0xd587[243]](this[_0xd587[1827]],_0x5c29x14);if(null!= _0x5c29x12){for(_0x5c29x3= 0;_0x5c29x3< _0x5c29x12[_0xd587[67]];_0x5c29x3++){_0x5c29x15= _0x5c29x12[_0x5c29x3],_0x5c29x15[_0xd587[1826]][0]= 5270620,_0x5c29x15= _0x5c29x15[_0xd587[772]],-1== _0x5c29x15[_0xd587[1826]][0]&& (_0x5c29x2[_0xd587[207]](_0x5c29x15),_0x5c29x15[_0xd587[1826]][0]= -2)}};_0x5c29x2[_0xd587[1115]]()}else {if(_0x5c29x3= _0x5c29x2[_0xd587[1115]](),_0x5c29x2[_0xd587[207]](_0x5c29x4),_0x5c29x3== _0x5c29x4&& 1== _0x5c29x2[_0xd587[67]]){break}}};for(_0x5c29x5 in this[_0xd587[1846]]){_0x5c29x4= this[_0xd587[1846]][_0x5c29x5],_0x5c29x4[_0xd587[1826]][0]-= this[_0xd587[1827]]};for(_0x5c29x3= 0;_0x5c29x3< _0x5c29x9[_0xd587[67]];_0x5c29x3++){_0x5c29x4= _0x5c29x9[_0x5c29x3];_0x5c29x2= 0;_0x5c29xa= _0x5c29x4[_0xd587[1838]];for(_0x5c29x5= 0;_0x5c29x5< _0x5c29xa[_0xd587[67]];_0x5c29x5++){_0x5c29x15= _0x5c29xa[_0x5c29x5],_0x5c29x15= _0x5c29x15[_0xd587[772]],_0x5c29x4[_0xd587[1826]][0]= Math[_0xd587[160]](_0x5c29x2,_0x5c29x15[_0xd587[1826]][0]+ 1),_0x5c29x2= _0x5c29x4[_0xd587[1826]][0]}};this[_0xd587[1827]]= this[_0xd587[1848]]- this[_0xd587[1827]]};mxGraphHierarchyModel[_0xd587[202]][_0xd587[1854]]= function(){var _0x5c29x2=[];this[_0xd587[1850]]= [];for(var _0x5c29x3=0;_0x5c29x3< this[_0xd587[1827]]+ 1;_0x5c29x3++){_0x5c29x2[_0x5c29x3]= [],this[_0xd587[1850]][_0x5c29x3]= _0x5c29x2[_0x5c29x3]};var _0x5c29x4=null;if(null!= this[_0xd587[1845]]){for(var _0x5c29x5=this[_0xd587[1845]],_0x5c29x4=[],_0x5c29x3=0;_0x5c29x3< _0x5c29x5[_0xd587[67]];_0x5c29x3++){var _0x5c29x9=mxCellPath[_0xd587[385]](_0x5c29x5[_0x5c29x3]);_0x5c29x4[_0x5c29x3]= this[_0xd587[1846]][_0x5c29x9]}};this[_0xd587[209]](function(_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29x15){0== _0x5c29x15&& (0> _0x5c29x4[_0xd587[1827]]&& 0> _0x5c29x4[_0xd587[1828]])&& (_0x5c29x2[_0x5c29x4[_0xd587[1826]][0]][_0xd587[207]](_0x5c29x4),_0x5c29x4[_0xd587[1827]]= _0x5c29x4[_0xd587[1826]][0],_0x5c29x4[_0xd587[1828]]= _0x5c29x4[_0xd587[1826]][0],_0x5c29x4[_0xd587[1826]][0]= _0x5c29x2[_0x5c29x4[_0xd587[1827]]][_0xd587[67]]- 1);if(null!= _0x5c29x3&& null!= _0x5c29x5&& 1< _0x5c29x3[_0xd587[1827]]- _0x5c29x4[_0xd587[1827]]){_0x5c29x5[_0xd587[1827]]= _0x5c29x3[_0xd587[1827]];_0x5c29x5[_0xd587[1828]]= _0x5c29x4[_0xd587[1827]];_0x5c29x5[_0xd587[1826]]= [];_0x5c29x5[_0xd587[235]]= [];_0x5c29x5[_0xd587[236]]= [];for(_0x5c29x3= _0x5c29x5[_0xd587[1828]]+ 1;_0x5c29x3< _0x5c29x5[_0xd587[1827]];_0x5c29x3++){_0x5c29x2[_0x5c29x3][_0xd587[207]](_0x5c29x5),_0x5c29x5[_0xd587[1834]](_0x5c29x3,_0x5c29x2[_0x5c29x3][_0xd587[67]]- 1)}}},_0x5c29x4,!1,null)};mxGraphHierarchyModel[_0xd587[202]][_0xd587[209]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){if(null!= _0x5c29x3){for(var _0x5c29x9=0;_0x5c29x9< _0x5c29x3[_0xd587[67]];_0x5c29x9++){var _0x5c29xa=_0x5c29x3[_0x5c29x9];null!= _0x5c29xa&& (null== _0x5c29x5&& (_0x5c29x5= {}),_0x5c29x4?(_0x5c29xa[_0xd587[1839]]= [],_0x5c29xa[_0xd587[1839]][0]= this[_0xd587[1851]],_0x5c29xa[_0xd587[1839]][1]= _0x5c29x9,this[_0xd587[1855]](null,_0x5c29xa,null,_0x5c29x2,_0x5c29x5,_0x5c29xa[_0xd587[1839]],_0x5c29x9,0)):this[_0xd587[1758]](null,_0x5c29xa,null,_0x5c29x2,_0x5c29x5,0))};this[_0xd587[1851]]++}};mxGraphHierarchyModel[_0xd587[202]][_0xd587[1758]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa){if(null!= _0x5c29x3){var _0x5c29x12=mxCellPath[_0xd587[385]](_0x5c29x3[_0xd587[246]]);if(null== _0x5c29x9[_0x5c29x12]){_0x5c29x9[_0x5c29x12]= _0x5c29x3;_0x5c29x5(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29xa,0);_0x5c29x2= _0x5c29x3[_0xd587[1838]][_0xd587[1853]]();for(_0x5c29x4= 0;_0x5c29x4< _0x5c29x2[_0xd587[67]];_0x5c29x4++){_0x5c29x12= _0x5c29x2[_0x5c29x4],this[_0xd587[1758]](_0x5c29x3,_0x5c29x12[_0xd587[772]],_0x5c29x12,_0x5c29x5,_0x5c29x9,_0x5c29xa+ 1)}}else {_0x5c29x5(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29xa,1)}}};mxGraphHierarchyModel[_0xd587[202]][_0xd587[1855]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa,_0x5c29x12,_0x5c29x13){if(null!= _0x5c29x3){if(null!= _0x5c29x2&& (null== _0x5c29x3[_0xd587[1839]]|| _0x5c29x3[_0xd587[1839]][0]!= _0x5c29x2[_0xd587[1839]][0])){_0x5c29xa= _0x5c29x2[_0xd587[1839]][_0xd587[67]]+ 1,_0x5c29x3[_0xd587[1839]]= _0x5c29x2[_0xd587[1839]][_0xd587[1853]](),_0x5c29x3[_0xd587[1839]][_0x5c29xa- 1]= _0x5c29x12};_0x5c29x12= mxCellPath[_0xd587[385]](_0x5c29x3[_0xd587[246]]);if(null== _0x5c29x9[_0x5c29x12]){_0x5c29x9[_0x5c29x12]= _0x5c29x3;_0x5c29x5(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x13,0);_0x5c29x2= _0x5c29x3[_0xd587[1838]][_0xd587[1853]]();for(_0x5c29x4= 0;_0x5c29x4< _0x5c29x2[_0xd587[67]];_0x5c29x4++){_0x5c29x12= _0x5c29x2[_0x5c29x4],this[_0xd587[1855]](_0x5c29x3,_0x5c29x12[_0xd587[772]],_0x5c29x12,_0x5c29x5,_0x5c29x9,_0x5c29x3[_0xd587[1839]],_0x5c29x4,_0x5c29x13+ 1)}}else {_0x5c29x5(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x13,1)}}};function mxHierarchicalLayoutStage(){}mxHierarchicalLayoutStage[_0xd587[202]][_0xd587[350]]= function(_0x5c29x2){};function mxMedianHybridCrossingReduction(_0x5c29x2){this[_0xd587[1759]]= _0x5c29x2}mxMedianHybridCrossingReduction[_0xd587[202]]= new mxHierarchicalLayoutStage;mxMedianHybridCrossingReduction[_0xd587[202]][_0xd587[196]]= mxMedianHybridCrossingReduction;mxMedianHybridCrossingReduction[_0xd587[202]][_0xd587[1759]]= null;mxMedianHybridCrossingReduction[_0xd587[202]][_0xd587[1795]]= 24;mxMedianHybridCrossingReduction[_0xd587[202]][_0xd587[1856]]= null;mxMedianHybridCrossingReduction[_0xd587[202]][_0xd587[1857]]= 0;mxMedianHybridCrossingReduction[_0xd587[202]][_0xd587[1858]]= 0;mxMedianHybridCrossingReduction[_0xd587[202]][_0xd587[1859]]= 2;mxMedianHybridCrossingReduction[_0xd587[202]][_0xd587[350]]= function(_0x5c29x2){_0x5c29x2= this[_0xd587[1759]][_0xd587[502]]();this[_0xd587[1856]]= [];for(var _0x5c29x3=0;_0x5c29x3< _0x5c29x2[_0xd587[1850]][_0xd587[67]];_0x5c29x3++){this[_0xd587[1856]][_0x5c29x3]= _0x5c29x2[_0xd587[1850]][_0x5c29x3][_0xd587[1853]]()};for(var _0x5c29x4=0,_0x5c29x5=this[_0xd587[1860]](_0x5c29x2),_0x5c29x3=0;_0x5c29x3< this[_0xd587[1795]]&& _0x5c29x4< this[_0xd587[1859]];_0x5c29x3++){this[_0xd587[1861]](_0x5c29x3,_0x5c29x2);this[_0xd587[1862]](_0x5c29x3,_0x5c29x2);var _0x5c29x9=this[_0xd587[1860]](_0x5c29x2);if(_0x5c29x9< _0x5c29x5){_0x5c29x5= _0x5c29x9;for(_0x5c29x9= _0x5c29x4= 0;_0x5c29x9< this[_0xd587[1856]][_0xd587[67]];_0x5c29x9++){for(var _0x5c29xa=_0x5c29x2[_0xd587[1850]][_0x5c29x9],_0x5c29x12=0;_0x5c29x12< _0x5c29xa[_0xd587[67]];_0x5c29x12++){var _0x5c29x13=_0x5c29xa[_0x5c29x12];this[_0xd587[1856]][_0x5c29x9][_0x5c29x13[_0xd587[1833]](_0x5c29x9)]= _0x5c29x13}}}else {_0x5c29x4++;for(_0x5c29x9= 0;_0x5c29x9< this[_0xd587[1856]][_0xd587[67]];_0x5c29x9++){_0x5c29xa= _0x5c29x2[_0xd587[1850]][_0x5c29x9];for(_0x5c29x12= 0;_0x5c29x12< _0x5c29xa[_0xd587[67]];_0x5c29x12++){_0x5c29x13= _0x5c29xa[_0x5c29x12],_0x5c29x13[_0xd587[1834]](_0x5c29x9,_0x5c29x12)}}};if(0== _0x5c29x5){break}};_0x5c29x4= [];_0x5c29x5= [];for(_0x5c29x3= 0;_0x5c29x3< _0x5c29x2[_0xd587[1827]]+ 1;_0x5c29x3++){_0x5c29x5[_0x5c29x3]= [],_0x5c29x4[_0x5c29x3]= _0x5c29x5[_0x5c29x3]};for(_0x5c29x3= 0;_0x5c29x3< this[_0xd587[1856]][_0xd587[67]];_0x5c29x3++){for(_0x5c29x9= 0;_0x5c29x9< this[_0xd587[1856]][_0x5c29x3][_0xd587[67]];_0x5c29x9++){_0x5c29x5[_0x5c29x3][_0xd587[207]](this[_0xd587[1856]][_0x5c29x3][_0x5c29x9])}};_0x5c29x2[_0xd587[1850]]= _0x5c29x4};mxMedianHybridCrossingReduction[_0xd587[202]][_0xd587[1860]]= function(_0x5c29x2){for(var _0x5c29x3=_0x5c29x2[_0xd587[1850]][_0xd587[67]],_0x5c29x4=0,_0x5c29x5=1;_0x5c29x5< _0x5c29x3;_0x5c29x5++){_0x5c29x4+= this[_0xd587[1863]](_0x5c29x5,_0x5c29x2)};return _0x5c29x4};mxMedianHybridCrossingReduction[_0xd587[202]][_0xd587[1863]]= function(_0x5c29x2,_0x5c29x3){for(var _0x5c29x4=0,_0x5c29x5=_0x5c29x3[_0xd587[1850]][_0x5c29x2],_0x5c29x9=_0x5c29x5[_0xd587[67]],_0x5c29xa=_0x5c29x3[_0xd587[1850]][_0x5c29x2- 1][_0xd587[67]],_0x5c29x12=[],_0x5c29x13=0;_0x5c29x13< _0x5c29x9;_0x5c29x13++){_0x5c29x12[_0x5c29x13]= []};for(_0x5c29x13= 0;_0x5c29x13< _0x5c29x5[_0xd587[67]];_0x5c29x13++){for(var _0x5c29x14=_0x5c29x5[_0x5c29x13],_0x5c29x15=_0x5c29x14[_0xd587[1833]](_0x5c29x2),_0x5c29x16=_0x5c29x14[_0xd587[1832]](_0x5c29x2),_0x5c29x14=0;_0x5c29x14< _0x5c29x16[_0xd587[67]];_0x5c29x14++){var _0x5c29x17=_0x5c29x16[_0x5c29x14][_0xd587[1833]](_0x5c29x2- 1);_0x5c29x12[_0x5c29x15][_0x5c29x17]= 201207}};for(_0x5c29x13= 0;_0x5c29x13< _0x5c29x9;_0x5c29x13++){for(_0x5c29x14= 0;_0x5c29x14< _0x5c29xa;_0x5c29x14++){if(201207== _0x5c29x12[_0x5c29x13][_0x5c29x14]){for(_0x5c29x5= _0x5c29x13+ 1;_0x5c29x5< _0x5c29x9;_0x5c29x5++){for(_0x5c29x15= 0;_0x5c29x15< _0x5c29x14;_0x5c29x15++){201207== _0x5c29x12[_0x5c29x5][_0x5c29x15]&& _0x5c29x4++}};for(_0x5c29x5= 0;_0x5c29x5< _0x5c29x13;_0x5c29x5++){for(_0x5c29x15= _0x5c29x14+ 1;_0x5c29x15< _0x5c29xa;_0x5c29x15++){201207== _0x5c29x12[_0x5c29x5][_0x5c29x15]&& _0x5c29x4++}}}}};return _0x5c29x4/ 2};mxMedianHybridCrossingReduction[_0xd587[202]][_0xd587[1862]]= function(_0x5c29x2,_0x5c29x3){for(var _0x5c29x4=!0,_0x5c29x5=0;_0x5c29x4&& 10> _0x5c29x5++;){for(var _0x5c29x9=1== _0x5c29x2% 2&& 1== _0x5c29x5% 2,_0x5c29x4=!1,_0x5c29xa=0;_0x5c29xa< _0x5c29x3[_0xd587[1850]][_0xd587[67]];_0x5c29xa++){for(var _0x5c29x12=_0x5c29x3[_0xd587[1850]][_0x5c29xa],_0x5c29x13=[],_0x5c29x14=0;_0x5c29x14< _0x5c29x12[_0xd587[67]];_0x5c29x14++){var _0x5c29x15=_0x5c29x12[_0x5c29x14],_0x5c29x16=_0x5c29x15[_0xd587[1833]](_0x5c29xa);0> _0x5c29x16&& (_0x5c29x16= _0x5c29x14);_0x5c29x13[_0x5c29x16]= _0x5c29x15};for(var _0x5c29x17=_0x5c29x16= _0x5c29x15= null,_0x5c29x18=null,_0x5c29x19=null,_0x5c29x1a=null,_0x5c29x1b=null,_0x5c29x1c=null,_0x5c29x1d=null,_0x5c29x1e=null,_0x5c29x14=0;_0x5c29x14< _0x5c29x12[_0xd587[67]]- 1;_0x5c29x14++){if(0== _0x5c29x14){for(var _0x5c29x1d=_0x5c29x13[_0x5c29x14],_0x5c29x15=_0x5c29x1d[_0xd587[1831]](_0x5c29xa),_0x5c29x16=_0x5c29x1d[_0xd587[1832]](_0x5c29xa),_0x5c29x19=[],_0x5c29x1a=[],_0x5c29x1f=0;_0x5c29x1f< _0x5c29x15[_0xd587[67]];_0x5c29x1f++){_0x5c29x19[_0x5c29x1f]= _0x5c29x15[_0x5c29x1f][_0xd587[1833]](_0x5c29xa+ 1)};for(_0x5c29x1f= 0;_0x5c29x1f< _0x5c29x16[_0xd587[67]];_0x5c29x1f++){_0x5c29x1a[_0x5c29x1f]= _0x5c29x16[_0x5c29x1f][_0xd587[1833]](_0x5c29xa- 1)}}else {_0x5c29x15= _0x5c29x17,_0x5c29x16= _0x5c29x18,_0x5c29x19= _0x5c29x1b,_0x5c29x1a= _0x5c29x1c,_0x5c29x1d= _0x5c29x1e};_0x5c29x1e= _0x5c29x13[_0x5c29x14+ 1];_0x5c29x17= _0x5c29x1e[_0xd587[1831]](_0x5c29xa);_0x5c29x18= _0x5c29x1e[_0xd587[1832]](_0x5c29xa);_0x5c29x1b= [];_0x5c29x1c= [];for(_0x5c29x1f= 0;_0x5c29x1f< _0x5c29x17[_0xd587[67]];_0x5c29x1f++){_0x5c29x1b[_0x5c29x1f]= _0x5c29x17[_0x5c29x1f][_0xd587[1833]](_0x5c29xa+ 1)};for(_0x5c29x1f= 0;_0x5c29x1f< _0x5c29x18[_0xd587[67]];_0x5c29x1f++){_0x5c29x1c[_0x5c29x1f]= _0x5c29x18[_0x5c29x1f][_0xd587[1833]](_0x5c29xa- 1)};for(var _0x5c29x20=0,_0x5c29x62=0,_0x5c29x1f=0;_0x5c29x1f< _0x5c29x19[_0xd587[67]];_0x5c29x1f++){for(var _0x5c29x63=0;_0x5c29x63< _0x5c29x1b[_0xd587[67]];_0x5c29x63++){_0x5c29x19[_0x5c29x1f]> _0x5c29x1b[_0x5c29x63]&& _0x5c29x20++,_0x5c29x19[_0x5c29x1f]< _0x5c29x1b[_0x5c29x63]&& _0x5c29x62++}};for(_0x5c29x1f= 0;_0x5c29x1f< _0x5c29x1a[_0xd587[67]];_0x5c29x1f++){for(_0x5c29x63= 0;_0x5c29x63< _0x5c29x1c[_0xd587[67]];_0x5c29x63++){_0x5c29x1a[_0x5c29x1f]> _0x5c29x1c[_0x5c29x63]&& _0x5c29x20++,_0x5c29x1a[_0x5c29x1f]< _0x5c29x1c[_0x5c29x63]&& _0x5c29x62++}};if(_0x5c29x62< _0x5c29x20|| _0x5c29x62== _0x5c29x20&& _0x5c29x9){_0x5c29x17= _0x5c29x1d[_0xd587[1833]](_0x5c29xa),_0x5c29x1d[_0xd587[1834]](_0x5c29xa,_0x5c29x1e[_0xd587[1833]](_0x5c29xa)),_0x5c29x1e[_0xd587[1834]](_0x5c29xa,_0x5c29x17),_0x5c29x17= _0x5c29x15,_0x5c29x18= _0x5c29x16,_0x5c29x1b= _0x5c29x19,_0x5c29x1c= _0x5c29x1a,_0x5c29x1e= _0x5c29x1d,_0x5c29x9|| (_0x5c29x4= !0)}}}}};mxMedianHybridCrossingReduction[_0xd587[202]][_0xd587[1861]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=0== _0x5c29x2% 2;if(_0x5c29x4){for(var _0x5c29x5=_0x5c29x3[_0xd587[1827]]- 1;0<= _0x5c29x5;_0x5c29x5--){this[_0xd587[1864]](_0x5c29x5,_0x5c29x4)}}else {for(_0x5c29x5= 1;_0x5c29x5< _0x5c29x3[_0xd587[1827]];_0x5c29x5++){this[_0xd587[1864]](_0x5c29x5,_0x5c29x4)}}};mxMedianHybridCrossingReduction[_0xd587[202]][_0xd587[1864]]= function(_0x5c29x2,_0x5c29x3){for(var _0x5c29x4=this[_0xd587[1856]][_0x5c29x2][_0xd587[67]],_0x5c29x5=[],_0x5c29x9=[],_0x5c29xa=0;_0x5c29xa< _0x5c29x4;_0x5c29xa++){var _0x5c29x12=this[_0xd587[1856]][_0x5c29x2][_0x5c29xa],_0x5c29x13= new MedianCellSorter;_0x5c29x13[_0xd587[246]]= _0x5c29x12;var _0x5c29x14;_0x5c29x14= _0x5c29x3?_0x5c29x12[_0xd587[1831]](_0x5c29x2):_0x5c29x12[_0xd587[1832]](_0x5c29x2);var _0x5c29x15;_0x5c29x15= _0x5c29x3?_0x5c29x2+ 1:_0x5c29x2- 1;null!= _0x5c29x14&& 0!= _0x5c29x14[_0xd587[67]]?(_0x5c29x13[_0xd587[1865]]= this[_0xd587[1865]](_0x5c29x14,_0x5c29x15),_0x5c29x5[_0xd587[207]](_0x5c29x13)):_0x5c29x9[_0x5c29x12[_0xd587[1833]](_0x5c29x2)]= !0};_0x5c29x5[_0xd587[470]](MedianCellSorter[_0xd587[202]][_0xd587[469]]);for(_0x5c29xa= 0;_0x5c29xa< _0x5c29x4;_0x5c29xa++){null== _0x5c29x9[_0x5c29xa]&& (_0x5c29x12= _0x5c29x5[_0xd587[1115]]()[_0xd587[246]],_0x5c29x12[_0xd587[1834]](_0x5c29x2,_0x5c29xa))}};mxMedianHybridCrossingReduction[_0xd587[202]][_0xd587[1865]]= function(_0x5c29x2,_0x5c29x3){for(var _0x5c29x4=[],_0x5c29x5=0,_0x5c29x9=0;_0x5c29x9< _0x5c29x2[_0xd587[67]];_0x5c29x9++){var _0x5c29xa=_0x5c29x2[_0x5c29x9];_0x5c29x4[_0x5c29x5++]= _0x5c29xa[_0xd587[1833]](_0x5c29x3)};_0x5c29x4[_0xd587[470]](function(_0x5c29x2,_0x5c29x3){return _0x5c29x2- _0x5c29x3});if(1== _0x5c29x5% 2){return _0x5c29x4[Math[_0xd587[519]](_0x5c29x5/ 2)]};if(2== _0x5c29x5){return (_0x5c29x4[0]+ _0x5c29x4[1])/ 2};_0x5c29x9= _0x5c29x5/ 2;_0x5c29xa= _0x5c29x4[_0x5c29x9- 1]- _0x5c29x4[0];_0x5c29x5= _0x5c29x4[_0x5c29x5- 1]- _0x5c29x4[_0x5c29x9];return (_0x5c29x4[_0x5c29x9- 1]* _0x5c29x5+ _0x5c29x4[_0x5c29x9]* _0x5c29xa)/ (_0x5c29xa+ _0x5c29x5)};function MedianCellSorter(){}MedianCellSorter[_0xd587[202]][_0xd587[1865]]= 0;MedianCellSorter[_0xd587[202]][_0xd587[246]]= !1;MedianCellSorter[_0xd587[202]][_0xd587[469]]= function(_0x5c29x2,_0x5c29x3){return null!= _0x5c29x2&& null!= _0x5c29x3?_0x5c29x3[_0xd587[1865]]> _0x5c29x2[_0xd587[1865]]?-1:_0x5c29x3[_0xd587[1865]]< _0x5c29x2[_0xd587[1865]]?1:0:0};function mxMinimumCycleRemover(_0x5c29x2){this[_0xd587[1759]]= _0x5c29x2}mxMinimumCycleRemover[_0xd587[202]]= new mxHierarchicalLayoutStage;mxMinimumCycleRemover[_0xd587[202]][_0xd587[196]]= mxMinimumCycleRemover;mxMinimumCycleRemover[_0xd587[202]][_0xd587[1759]]= null;mxMinimumCycleRemover[_0xd587[202]][_0xd587[350]]= function(_0x5c29x2){var _0x5c29x3=this[_0xd587[1759]][_0xd587[502]](),_0x5c29x4={},_0x5c29x5=mxUtils[_0xd587[238]](_0x5c29x3[_0xd587[1846]],null,!0),_0x5c29x9=null;if(null!= _0x5c29x3[_0xd587[1845]]){var _0x5c29xa=_0x5c29x3[_0xd587[1845]],_0x5c29x9=[];for(_0x5c29x2= 0;_0x5c29x2< _0x5c29xa[_0xd587[67]];_0x5c29x2++){var _0x5c29x12=mxCellPath[_0xd587[385]](_0x5c29xa[_0x5c29x2]);_0x5c29x9[_0x5c29x2]= _0x5c29x3[_0xd587[1846]][_0x5c29x12]}};_0x5c29x3[_0xd587[209]](function(_0x5c29x2,_0x5c29x3,_0x5c29x9,_0x5c29xa,_0x5c29x12){_0x5c29x3[_0xd587[1720]](_0x5c29x2)&& (_0x5c29x9[_0xd587[1744]](),mxUtils[_0xd587[205]](_0x5c29x9,_0x5c29x2[_0xd587[1838]]),_0x5c29x2[_0xd587[1837]][_0xd587[207]](_0x5c29x9),mxUtils[_0xd587[205]](_0x5c29x9,_0x5c29x3[_0xd587[1837]]),_0x5c29x3[_0xd587[1838]][_0xd587[207]](_0x5c29x9));_0x5c29x2= mxCellPath[_0xd587[385]](_0x5c29x3[_0xd587[246]]);_0x5c29x4[_0x5c29x2]= _0x5c29x3;delete _0x5c29x5[_0x5c29x2]},_0x5c29x9,!0,null);_0x5c29x9= null;0< _0x5c29x5[_0xd587[1866]]&& (_0x5c29x9= mxUtils[_0xd587[238]](_0x5c29x5,null,!0));_0x5c29x2= mxUtils[_0xd587[238]](_0x5c29x4,null,!0);_0x5c29x3[_0xd587[209]](function(_0x5c29x2,_0x5c29x3,_0x5c29x9,_0x5c29xa,_0x5c29x12){_0x5c29x3[_0xd587[1720]](_0x5c29x2)&& (_0x5c29x9[_0xd587[1744]](),mxUtils[_0xd587[205]](_0x5c29x9,_0x5c29x2[_0xd587[1838]]),_0x5c29x3[_0xd587[1838]][_0xd587[207]](_0x5c29x9),_0x5c29x2[_0xd587[1837]][_0xd587[207]](_0x5c29x9),mxUtils[_0xd587[205]](_0x5c29x9,_0x5c29x3[_0xd587[1837]]));_0x5c29x2= mxCellPath[_0xd587[385]](_0x5c29x3[_0xd587[246]]);_0x5c29x4[_0x5c29x2]= _0x5c29x3;delete _0x5c29x5[_0x5c29x2]},_0x5c29x5,!0,_0x5c29x2);_0x5c29xa= this[_0xd587[1759]][_0xd587[1703]]();if(null!= _0x5c29x9&& 0< _0x5c29x9[_0xd587[67]]){_0x5c29x3= _0x5c29x3[_0xd587[1845]];for(_0x5c29x2= 0;_0x5c29x2< _0x5c29x9[_0xd587[67]];_0x5c29x2++){_0x5c29x12= _0x5c29x9[_0x5c29x2][_0xd587[246]],0== _0x5c29xa[_0xd587[1867]](_0x5c29x12)[_0xd587[67]]&& _0x5c29x3[_0xd587[207]](_0x5c29x12)}}};function mxCoordinateAssignment(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa){this[_0xd587[1759]]= _0x5c29x2;this[_0xd587[1868]]= _0x5c29x3;this[_0xd587[1869]]= _0x5c29x4;this[_0xd587[1870]]= _0x5c29x5;this[_0xd587[1871]]= _0x5c29x9;this[_0xd587[1872]]= _0x5c29xa}var mxHierarchicalEdgeStyle={ORTHOGONAL:1,POLYLINE:2,STRAIGHT:3,CURVE:4};mxCoordinateAssignment[_0xd587[202]]= new mxHierarchicalLayoutStage;mxCoordinateAssignment[_0xd587[202]][_0xd587[196]]= mxCoordinateAssignment;mxCoordinateAssignment[_0xd587[202]][_0xd587[1759]]= null;mxCoordinateAssignment[_0xd587[202]][_0xd587[1868]]= 30;mxCoordinateAssignment[_0xd587[202]][_0xd587[1869]]= 100;mxCoordinateAssignment[_0xd587[202]][_0xd587[1872]]= 10;mxCoordinateAssignment[_0xd587[202]][_0xd587[1795]]= 8;mxCoordinateAssignment[_0xd587[202]][_0xd587[1751]]= 5;mxCoordinateAssignment[_0xd587[202]][_0xd587[1752]]= 2;mxCoordinateAssignment[_0xd587[202]][_0xd587[1753]]= 12;mxCoordinateAssignment[_0xd587[202]][_0xd587[1754]]= 4;mxCoordinateAssignment[_0xd587[202]][_0xd587[1873]]= null;mxCoordinateAssignment[_0xd587[202]][_0xd587[1870]]= mxConstants[_0xd587[1358]];mxCoordinateAssignment[_0xd587[202]][_0xd587[1871]]= null;mxCoordinateAssignment[_0xd587[202]][_0xd587[1874]]= null;mxCoordinateAssignment[_0xd587[202]][_0xd587[1875]]= null;mxCoordinateAssignment[_0xd587[202]][_0xd587[1876]]= null;mxCoordinateAssignment[_0xd587[202]][_0xd587[1877]]= null;mxCoordinateAssignment[_0xd587[202]][_0xd587[1878]]= null;mxCoordinateAssignment[_0xd587[202]][_0xd587[1879]]= null;mxCoordinateAssignment[_0xd587[202]][_0xd587[1880]]= null;mxCoordinateAssignment[_0xd587[202]][_0xd587[1881]]= null;mxCoordinateAssignment[_0xd587[202]][_0xd587[1882]]= !0;mxCoordinateAssignment[_0xd587[202]][_0xd587[675]]= mxHierarchicalEdgeStyle[_0xd587[1883]];mxCoordinateAssignment[_0xd587[202]][_0xd587[1884]]= null;mxCoordinateAssignment[_0xd587[202]][_0xd587[1885]]= null;mxCoordinateAssignment[_0xd587[202]][_0xd587[1745]]= 10;mxCoordinateAssignment[_0xd587[202]][_0xd587[1886]]= function(){var _0x5c29x2=this[_0xd587[1759]][_0xd587[502]]();mxLog[_0xd587[539]]();mxLog[_0xd587[171]](_0xd587[1887]);for(var _0x5c29x3=0;_0x5c29x3< _0x5c29x2[_0xd587[1850]][_0xd587[67]];_0x5c29x3++){mxLog[_0xd587[53]](_0xd587[1888],_0x5c29x3,_0xd587[1889]);for(var _0x5c29x4=_0x5c29x2[_0xd587[1850]][_0x5c29x3],_0x5c29x5=0;_0x5c29x5< _0x5c29x4[_0xd587[67]];_0x5c29x5++){mxLog[_0xd587[53]](_0x5c29x4[_0x5c29x5][_0xd587[1833]](_0x5c29x3),_0xd587[316])};mxLog[_0xd587[171]]()};mxLog[_0xd587[171]](_0xd587[1890])};mxCoordinateAssignment[_0xd587[202]][_0xd587[350]]= function(_0x5c29x2){this[_0xd587[1873]]= [];_0x5c29x2= this[_0xd587[1759]][_0xd587[502]]();this[_0xd587[1875]]= 0;this[_0xd587[1891]](this[_0xd587[1759]][_0xd587[1703]](),_0x5c29x2);this[_0xd587[1882]]&& this[_0xd587[1892]](_0x5c29x2);var _0x5c29x3=1E8;if(this[_0xd587[1882]]){for(var _0x5c29x4=0;_0x5c29x4< this[_0xd587[1795]];_0x5c29x4++){0!= _0x5c29x4&& (this[_0xd587[1893]](_0x5c29x4,_0x5c29x2),this[_0xd587[1892]](_0x5c29x2));if(this[_0xd587[1875]]< _0x5c29x3){for(var _0x5c29x5=0;_0x5c29x5< _0x5c29x2[_0xd587[1850]][_0xd587[67]];_0x5c29x5++){for(var _0x5c29x9=_0x5c29x2[_0xd587[1850]][_0x5c29x5],_0x5c29xa=0;_0x5c29xa< _0x5c29x9[_0xd587[67]];_0x5c29xa++){var _0x5c29x12=_0x5c29x9[_0x5c29xa];_0x5c29x12[_0xd587[1835]](_0x5c29x5,_0x5c29x12[_0xd587[1833]](_0x5c29x5))}};_0x5c29x3= this[_0xd587[1875]]}else {for(_0x5c29x5= 0;_0x5c29x5< _0x5c29x2[_0xd587[1850]][_0xd587[67]];_0x5c29x5++){_0x5c29x9= _0x5c29x2[_0xd587[1850]][_0x5c29x5];for(_0x5c29xa= 0;_0x5c29xa< _0x5c29x9[_0xd587[67]];_0x5c29xa++){_0x5c29x12= _0x5c29x9[_0x5c29xa],_0x5c29x12[_0xd587[1834]](_0x5c29x5,_0x5c29x12[_0xd587[730]](_0x5c29x5))}}};this[_0xd587[1894]](this[_0xd587[1759]][_0xd587[1703]](),_0x5c29x2);this[_0xd587[1875]]= 0}};this[_0xd587[1895]](this[_0xd587[1759]][_0xd587[1703]](),_0x5c29x2)};mxCoordinateAssignment[_0xd587[202]][_0xd587[1892]]= function(_0x5c29x2){for(var _0x5c29x3=[],_0x5c29x4=[],_0x5c29x5=[],_0x5c29x9=0;_0x5c29x9<= _0x5c29x2[_0xd587[1827]];_0x5c29x9++){_0x5c29x5[_0x5c29x9]= _0x5c29x2[_0xd587[1850]][_0x5c29x9];for(var _0x5c29xa=0;_0x5c29xa< _0x5c29x5[_0x5c29x9][_0xd587[67]];_0x5c29xa++){var _0x5c29x12=_0x5c29x5[_0x5c29x9][_0x5c29xa],_0x5c29x13= new WeightedCellSorter(_0x5c29x12,_0x5c29x9);_0x5c29x13[_0xd587[1785]]= _0x5c29xa;_0x5c29x13[_0xd587[1784]]= !0;_0x5c29x3[_0xd587[207]](_0x5c29x13);_0x5c29x12= mxCellPath[_0xd587[385]](_0x5c29x12[_0xd587[1841]]());_0x5c29x4[_0x5c29x12]= _0x5c29x13}};_0x5c29x2= 10* _0x5c29x3[_0xd587[67]];for(_0x5c29xa= 0;0< _0x5c29x3[_0xd587[67]]&& _0x5c29xa<= _0x5c29x2;){var _0x5c29x13=_0x5c29x3[_0xd587[1115]](),_0x5c29x9=_0x5c29x13[_0xd587[246]],_0x5c29x14=_0x5c29x13[_0xd587[1782]],_0x5c29x15=parseInt(_0x5c29x13[_0xd587[1785]]),_0x5c29x12=_0x5c29x9[_0xd587[1831]](_0x5c29x14),_0x5c29x16=_0x5c29x9[_0xd587[1832]](_0x5c29x14),_0x5c29x17=_0x5c29x12[_0xd587[67]],_0x5c29x18=_0x5c29x16[_0xd587[67]],_0x5c29x19=this[_0xd587[1896]](_0x5c29x12,_0x5c29x14+ 1),_0x5c29x1a=this[_0xd587[1896]](_0x5c29x16,_0x5c29x14- 1),_0x5c29x1b=_0x5c29x17+ _0x5c29x18,_0x5c29x1c=_0x5c29x9[_0xd587[1833]](_0x5c29x14),_0x5c29x1d=_0x5c29x1c;0< _0x5c29x1b&& (_0x5c29x1d= (_0x5c29x19* _0x5c29x17+ _0x5c29x1a* _0x5c29x18)/ _0x5c29x1b);_0x5c29x17= !1;_0x5c29x1d< _0x5c29x1c- 1?0== _0x5c29x15?(_0x5c29x9[_0xd587[1834]](_0x5c29x14,_0x5c29x1d),_0x5c29x17= !0):(_0x5c29x15= _0x5c29x5[_0x5c29x14][_0x5c29x15- 1],_0x5c29x1c= _0x5c29x15[_0xd587[1833]](_0x5c29x14),_0x5c29x1c= _0x5c29x1c+ _0x5c29x15[_0xd587[117]]/ 2+ this[_0xd587[1868]]+ _0x5c29x9[_0xd587[117]]/ 2,_0x5c29x1c< _0x5c29x1d?(_0x5c29x9[_0xd587[1834]](_0x5c29x14,_0x5c29x1d),_0x5c29x17= !0):_0x5c29x1c< _0x5c29x9[_0xd587[1833]](_0x5c29x14)- 1&& (_0x5c29x9[_0xd587[1834]](_0x5c29x14,_0x5c29x1c),_0x5c29x17= !0)):_0x5c29x1d> _0x5c29x1c+ 1&& (_0x5c29x15== _0x5c29x5[_0x5c29x14][_0xd587[67]]- 1?(_0x5c29x9[_0xd587[1834]](_0x5c29x14,_0x5c29x1d),_0x5c29x17= !0):(_0x5c29x15= _0x5c29x5[_0x5c29x14][_0x5c29x15+ 1],_0x5c29x1c= _0x5c29x15[_0xd587[1833]](_0x5c29x14),_0x5c29x1c= _0x5c29x1c- _0x5c29x15[_0xd587[117]]/ 2- this[_0xd587[1868]]- _0x5c29x9[_0xd587[117]]/ 2,_0x5c29x1c> _0x5c29x1d?(_0x5c29x9[_0xd587[1834]](_0x5c29x14,_0x5c29x1d),_0x5c29x17= !0):_0x5c29x1c> _0x5c29x9[_0xd587[1833]](_0x5c29x14)+ 1&& (_0x5c29x9[_0xd587[1834]](_0x5c29x14,_0x5c29x1c),_0x5c29x17= !0)));if(_0x5c29x17){for(_0x5c29x9= 0;_0x5c29x9< _0x5c29x12[_0xd587[67]];_0x5c29x9++){_0x5c29x14= _0x5c29x12[_0x5c29x9],_0x5c29x14= mxCellPath[_0xd587[385]](_0x5c29x14[_0xd587[1841]]()),_0x5c29x14= _0x5c29x4[_0x5c29x14],null!= _0x5c29x14&& !1== _0x5c29x14[_0xd587[1784]]&& (_0x5c29x14[_0xd587[1784]]= !0,_0x5c29x3[_0xd587[207]](_0x5c29x14))};for(_0x5c29x9= 0;_0x5c29x9< _0x5c29x16[_0xd587[67]];_0x5c29x9++){_0x5c29x14= _0x5c29x16[_0x5c29x9],_0x5c29x14= mxCellPath[_0xd587[385]](_0x5c29x14[_0xd587[1841]]()),_0x5c29x14= _0x5c29x4[_0x5c29x14],null!= _0x5c29x14&& !1== _0x5c29x14[_0xd587[1784]]&& (_0x5c29x14[_0xd587[1784]]= !0,_0x5c29x3[_0xd587[207]](_0x5c29x14))}};_0x5c29x13[_0xd587[1784]]= !1;_0x5c29xa++}};mxCoordinateAssignment[_0xd587[202]][_0xd587[1893]]= function(_0x5c29x2,_0x5c29x3){if(0== _0x5c29x2% 2){for(var _0x5c29x4=_0x5c29x3[_0xd587[1827]];0< _0x5c29x4;_0x5c29x4--){this[_0xd587[1897]](_0x5c29x4- 1,_0x5c29x3,_0x5c29x4)}}else {for(_0x5c29x4= 0;_0x5c29x4< _0x5c29x3[_0xd587[1827]]- 1;_0x5c29x4++){this[_0xd587[1897]](_0x5c29x4+ 1,_0x5c29x3,_0x5c29x4)}}};mxCoordinateAssignment[_0xd587[202]][_0xd587[1897]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){_0x5c29x3= _0x5c29x3[_0xd587[1850]][_0x5c29x2];for(var _0x5c29x5=[],_0x5c29x9=[],_0x5c29xa=0;_0x5c29xa< _0x5c29x3[_0xd587[67]];_0x5c29xa++){var _0x5c29x12=_0x5c29x3[_0x5c29xa];_0x5c29x5[_0x5c29xa]= new WeightedCellSorter;_0x5c29x5[_0x5c29xa][_0xd587[246]]= _0x5c29x12;_0x5c29x5[_0x5c29xa][_0xd587[1785]]= _0x5c29xa;var _0x5c29x13=mxCellPath[_0xd587[385]](_0x5c29x12[_0xd587[1841]]());_0x5c29x9[_0x5c29x13]= _0x5c29x5[_0x5c29xa];var _0x5c29x14=null,_0x5c29x14=_0x5c29x4< _0x5c29x2?_0x5c29x12[_0xd587[1832]](_0x5c29x2):_0x5c29x12[_0xd587[1831]](_0x5c29x2);_0x5c29x5[_0x5c29xa][_0xd587[1782]]= this[_0xd587[1898]](_0x5c29x12,_0x5c29x14)};_0x5c29x5[_0xd587[470]](WeightedCellSorter[_0xd587[202]][_0xd587[469]]);for(_0x5c29xa= 0;_0x5c29xa< _0x5c29x5[_0xd587[67]];_0x5c29xa++){_0x5c29x13= 0;_0x5c29x12= _0x5c29x5[_0x5c29xa][_0xd587[246]];_0x5c29x13= 0;_0x5c29x14= _0x5c29x4< _0x5c29x2?_0x5c29x12[_0xd587[1832]](_0x5c29x2)[_0xd587[1853]]():_0x5c29x12[_0xd587[1831]](_0x5c29x2)[_0xd587[1853]]();null!= _0x5c29x14&& (_0x5c29x13= _0x5c29x14[_0xd587[67]],_0x5c29x13= 0< _0x5c29x13?this[_0xd587[1896]](_0x5c29x14,_0x5c29x4):_0x5c29x12[_0xd587[1833]](_0x5c29x2));for(var _0x5c29x15=0,_0x5c29x14=-1E8,_0x5c29x16=_0x5c29x5[_0x5c29xa][_0xd587[1785]]- 1;0<= _0x5c29x16;){var _0x5c29x17=mxCellPath[_0xd587[385]](_0x5c29x3[_0x5c29x16][_0xd587[1841]]()),_0x5c29x17=_0x5c29x9[_0x5c29x17];if(null!= _0x5c29x17){var _0x5c29x18=_0x5c29x17[_0xd587[246]];_0x5c29x17[_0xd587[1784]]?(_0x5c29x14= _0x5c29x18[_0xd587[1833]](_0x5c29x2)+ _0x5c29x18[_0xd587[117]]/ 2+ this[_0xd587[1868]]+ _0x5c29x15+ _0x5c29x12[_0xd587[117]]/ 2,_0x5c29x16= -1):(_0x5c29x15+= _0x5c29x18[_0xd587[117]]+ this[_0xd587[1868]],_0x5c29x16--)}};_0x5c29x15= 0;_0x5c29x18= 1E8;for(_0x5c29x16= _0x5c29x5[_0x5c29xa][_0xd587[1785]]+ 1;_0x5c29x16< _0x5c29x5[_0xd587[67]];){if(_0x5c29x17= mxCellPath[_0xd587[385]](_0x5c29x3[_0x5c29x16][_0xd587[1841]]()),_0x5c29x17= _0x5c29x9[_0x5c29x17],null!= _0x5c29x17){var _0x5c29x19=_0x5c29x17[_0xd587[246]];_0x5c29x17[_0xd587[1784]]?(_0x5c29x18= _0x5c29x19[_0xd587[1833]](_0x5c29x2)- _0x5c29x19[_0xd587[117]]/ 2- this[_0xd587[1868]]- _0x5c29x15- _0x5c29x12[_0xd587[117]]/ 2,_0x5c29x16= _0x5c29x5[_0xd587[67]]):(_0x5c29x15+= _0x5c29x19[_0xd587[117]]+ this[_0xd587[1868]],_0x5c29x16++)}};_0x5c29x13>= _0x5c29x14&& _0x5c29x13<= _0x5c29x18?_0x5c29x12[_0xd587[1834]](_0x5c29x2,_0x5c29x13):_0x5c29x13< _0x5c29x14?(_0x5c29x12[_0xd587[1834]](_0x5c29x2,_0x5c29x14),this[_0xd587[1875]]+= _0x5c29x14- _0x5c29x13):_0x5c29x13> _0x5c29x18&& (_0x5c29x12[_0xd587[1834]](_0x5c29x2,_0x5c29x18),this[_0xd587[1875]]+= _0x5c29x13- _0x5c29x18);_0x5c29x5[_0x5c29xa][_0xd587[1784]]= !0}};mxCoordinateAssignment[_0xd587[202]][_0xd587[1898]]= function(_0x5c29x2,_0x5c29x3){for(var _0x5c29x4=0,_0x5c29x5=0;_0x5c29x5< _0x5c29x3[_0xd587[67]];_0x5c29x5++){var _0x5c29x9=_0x5c29x3[_0x5c29x5];_0x5c29x2[_0xd587[1193]]()&& _0x5c29x9[_0xd587[1193]]()?_0x5c29x4++:_0x5c29x4= _0x5c29x2[_0xd587[250]]()&& _0x5c29x9[_0xd587[250]]()?_0x5c29x4+ 8:_0x5c29x4+ 2};return _0x5c29x4};mxCoordinateAssignment[_0xd587[202]][_0xd587[1896]]= function(_0x5c29x2,_0x5c29x3){if(0== _0x5c29x2[_0xd587[67]]){return 0};for(var _0x5c29x4=[],_0x5c29x5=0;_0x5c29x5< _0x5c29x2[_0xd587[67]];_0x5c29x5++){_0x5c29x4[_0x5c29x5]= _0x5c29x2[_0x5c29x5][_0xd587[1833]](_0x5c29x3)};_0x5c29x4[_0xd587[470]](function(_0x5c29x2,_0x5c29x3){return _0x5c29x2- _0x5c29x3});if(1== _0x5c29x2[_0xd587[67]]% 2){return _0x5c29x4[Math[_0xd587[519]](_0x5c29x2[_0xd587[67]]/ 2)]};_0x5c29x5= _0x5c29x2[_0xd587[67]]/ 2;return (_0x5c29x4[_0x5c29x5- 1]+ _0x5c29x4[_0x5c29x5])/ 2};mxCoordinateAssignment[_0xd587[202]][_0xd587[1891]]= function(_0x5c29x2,_0x5c29x3){this[_0xd587[1899]](_0x5c29x2,_0x5c29x3);for(var _0x5c29x4=this[_0xd587[1876]];0<= _0x5c29x4;_0x5c29x4--){_0x5c29x4< _0x5c29x3[_0xd587[1827]]&& this[_0xd587[1900]](_0x5c29x4,_0x5c29x2,_0x5c29x3)};for(_0x5c29x4= this[_0xd587[1876]]+ 1;_0x5c29x4<= _0x5c29x3[_0xd587[1827]];_0x5c29x4++){0< _0x5c29x4&& this[_0xd587[1900]](_0x5c29x4,_0x5c29x2,_0x5c29x3)}};mxCoordinateAssignment[_0xd587[202]][_0xd587[1900]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){_0x5c29x3= _0x5c29x4[_0xd587[1850]][_0x5c29x2];_0x5c29x4= 0;for(var _0x5c29x5=this[_0xd587[1871]]+ (this[_0xd587[1879]]- this[_0xd587[1880]][_0x5c29x2])/ 2,_0x5c29x9=!1,_0x5c29xa=0;_0x5c29xa< _0x5c29x3[_0xd587[67]];_0x5c29xa++){var _0x5c29x12=_0x5c29x3[_0x5c29xa];if(_0x5c29x12[_0xd587[1193]]()){var _0x5c29x13=this[_0xd587[1759]][_0xd587[1726]](_0x5c29x12[_0xd587[246]]);null!= _0x5c29x13?this[_0xd587[1870]]== mxConstants[_0xd587[1358]]|| this[_0xd587[1870]]== mxConstants[_0xd587[1354]]?(_0x5c29x12[_0xd587[117]]= _0x5c29x13[_0xd587[117]],_0x5c29x12[_0xd587[119]]= _0x5c29x13[_0xd587[119]]):(_0x5c29x12[_0xd587[117]]= _0x5c29x13[_0xd587[119]],_0x5c29x12[_0xd587[119]]= _0x5c29x13[_0xd587[117]]):_0x5c29x9= !0;_0x5c29x4= Math[_0xd587[160]](_0x5c29x4,_0x5c29x12[_0xd587[119]])}else {_0x5c29x12[_0xd587[250]]()&& (_0x5c29x13= 1,null!= _0x5c29x12[_0xd587[1842]]?_0x5c29x13= _0x5c29x12[_0xd587[1842]][_0xd587[67]]:mxLog[_0xd587[283]](_0xd587[1901]),_0x5c29x12[_0xd587[117]]= (_0x5c29x13- 1)* this[_0xd587[1872]])};_0x5c29x5+= _0x5c29x12[_0xd587[117]]/ 2;_0x5c29x12[_0xd587[1835]](_0x5c29x2,_0x5c29x5);_0x5c29x12[_0xd587[1834]](_0x5c29x2,_0x5c29x5);_0x5c29x5+= _0x5c29x12[_0xd587[117]]/ 2;_0x5c29x5+= this[_0xd587[1868]]};!0== _0x5c29x9&& mxLog[_0xd587[283]](_0xd587[1902])};mxCoordinateAssignment[_0xd587[202]][_0xd587[1899]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=-this[_0xd587[1869]],_0x5c29x5=0;this[_0xd587[1880]]= [];this[_0xd587[1881]]= [];for(var _0x5c29x9=_0x5c29x3[_0xd587[1827]];0<= _0x5c29x9;_0x5c29x9--){for(var _0x5c29xa=0,_0x5c29x12=_0x5c29x3[_0xd587[1850]][_0x5c29x9],_0x5c29x13=this[_0xd587[1871]],_0x5c29x14=!1,_0x5c29x15=0;_0x5c29x15< _0x5c29x12[_0xd587[67]];_0x5c29x15++){var _0x5c29x16=_0x5c29x12[_0x5c29x15];if(_0x5c29x16[_0xd587[1193]]()){var _0x5c29x17=this[_0xd587[1759]][_0xd587[1726]](_0x5c29x16[_0xd587[246]]);null!= _0x5c29x17?this[_0xd587[1870]]== mxConstants[_0xd587[1358]]|| this[_0xd587[1870]]== mxConstants[_0xd587[1354]]?(_0x5c29x16[_0xd587[117]]= _0x5c29x17[_0xd587[117]],_0x5c29x16[_0xd587[119]]= _0x5c29x17[_0xd587[119]]):(_0x5c29x16[_0xd587[117]]= _0x5c29x17[_0xd587[119]],_0x5c29x16[_0xd587[119]]= _0x5c29x17[_0xd587[117]]):_0x5c29x14= !0;_0x5c29xa= Math[_0xd587[160]](_0x5c29xa,_0x5c29x16[_0xd587[119]])}else {_0x5c29x16[_0xd587[250]]()&& (_0x5c29x17= 1,null!= _0x5c29x16[_0xd587[1842]]?_0x5c29x17= _0x5c29x16[_0xd587[1842]][_0xd587[67]]:mxLog[_0xd587[283]](_0xd587[1901]),_0x5c29x16[_0xd587[117]]= (_0x5c29x17- 1)* this[_0xd587[1872]])};_0x5c29x13+= _0x5c29x16[_0xd587[117]]/ 2;_0x5c29x16[_0xd587[1835]](_0x5c29x9,_0x5c29x13);_0x5c29x16[_0xd587[1834]](_0x5c29x9,_0x5c29x13);_0x5c29x13+= _0x5c29x16[_0xd587[117]]/ 2;_0x5c29x13+= this[_0xd587[1868]];_0x5c29x13> this[_0xd587[1879]]&& (this[_0xd587[1879]]= _0x5c29x13,this[_0xd587[1876]]= _0x5c29x9);this[_0xd587[1880]][_0x5c29x9]= _0x5c29x13};!0== _0x5c29x14&& mxLog[_0xd587[283]](_0xd587[1902]);this[_0xd587[1881]][_0x5c29x9]= _0x5c29x4;_0x5c29x13= _0x5c29xa/ 2+ _0x5c29x5/ 2+ this[_0xd587[1869]];_0x5c29x5= _0x5c29xa;_0x5c29x4= this[_0xd587[1870]]== mxConstants[_0xd587[1358]]|| this[_0xd587[1870]]== mxConstants[_0xd587[1359]]?_0x5c29x4+ _0x5c29x13:_0x5c29x4- _0x5c29x13;for(_0x5c29x15= 0;_0x5c29x15< _0x5c29x12[_0xd587[67]];_0x5c29x15++){_0x5c29x12[_0x5c29x15][_0xd587[1836]](_0x5c29x9,_0x5c29x4)}}};mxCoordinateAssignment[_0xd587[202]][_0xd587[1894]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=_0x5c29x3[_0xd587[1847]],_0x5c29x5;for(_0x5c29x5 in _0x5c29x4){var _0x5c29x9=_0x5c29x4[_0x5c29x5];if(!(1> _0x5c29x9[_0xd587[1827]]- _0x5c29x9[_0xd587[1828]]- 1)){for(var _0x5c29xa=_0x5c29x9[_0xd587[1833]](_0x5c29x9[_0xd587[1828]]+ 1),_0x5c29x12=!0,_0x5c29x13=0,_0x5c29x14=_0x5c29x9[_0xd587[1828]]+ 2;_0x5c29x14< _0x5c29x9[_0xd587[1827]];_0x5c29x14++){var _0x5c29x15=_0x5c29x9[_0xd587[1833]](_0x5c29x14);_0x5c29xa!= _0x5c29x15?(_0x5c29x12= !1,_0x5c29xa= _0x5c29x15):_0x5c29x13++};if(!_0x5c29x12){for(var _0x5c29x12=_0x5c29xa= 0,_0x5c29x15=[],_0x5c29x16=[],_0x5c29x17=_0x5c29x9[_0xd587[1833]](_0x5c29x9[_0xd587[1828]]+ 1),_0x5c29x14=_0x5c29x9[_0xd587[1828]]+ 1;_0x5c29x14< _0x5c29x9[_0xd587[1827]]- 1;_0x5c29x14++){var _0x5c29x18=_0x5c29x9[_0xd587[730]](_0x5c29x14+ 1);_0x5c29x17== _0x5c29x18?(_0x5c29x15[_0x5c29x14- _0x5c29x9[_0xd587[1828]]- 1]= _0x5c29x17,_0x5c29xa++):this[_0xd587[1903]](_0x5c29x3,_0x5c29x9,_0x5c29x14+ 1,_0x5c29x17)?(_0x5c29x15[_0x5c29x14- _0x5c29x9[_0xd587[1828]]- 1]= _0x5c29x17,_0x5c29xa++):_0x5c29x17= _0x5c29x15[_0x5c29x14- _0x5c29x9[_0xd587[1828]]- 1]= _0x5c29x18};_0x5c29x17= _0x5c29x9[_0xd587[730]](_0x5c29x14);for(_0x5c29x14= _0x5c29x9[_0xd587[1827]]- 1;_0x5c29x14> _0x5c29x9[_0xd587[1828]]+ 1;_0x5c29x14--){_0x5c29x18= _0x5c29x9[_0xd587[730]](_0x5c29x14- 1),_0x5c29x17== _0x5c29x18?(_0x5c29x16[_0x5c29x14- _0x5c29x9[_0xd587[1828]]- 2]= _0x5c29x17,_0x5c29x12++):this[_0xd587[1903]](_0x5c29x3,_0x5c29x9,_0x5c29x14- 1,_0x5c29x17)?(_0x5c29x16[_0x5c29x14- _0x5c29x9[_0xd587[1828]]- 2]= _0x5c29x17,_0x5c29x12++):(_0x5c29x16[_0x5c29x14- _0x5c29x9[_0xd587[1828]]- 2]= _0x5c29x9[_0xd587[730]](_0x5c29x14- 1),_0x5c29x17= _0x5c29x18)};if(_0x5c29x12> _0x5c29x13|| _0x5c29xa> _0x5c29x13){if(_0x5c29x12>= _0x5c29xa){for(_0x5c29x14= _0x5c29x9[_0xd587[1827]]- 2;_0x5c29x14> _0x5c29x9[_0xd587[1828]];_0x5c29x14--){_0x5c29x9[_0xd587[1835]](_0x5c29x14,_0x5c29x16[_0x5c29x14- _0x5c29x9[_0xd587[1828]]- 1])}}else {if(_0x5c29xa> _0x5c29x12){for(_0x5c29x14= _0x5c29x9[_0xd587[1828]]+ 2;_0x5c29x14< _0x5c29x9[_0xd587[1827]];_0x5c29x14++){_0x5c29x9[_0xd587[1835]](_0x5c29x14,_0x5c29x15[_0x5c29x14- _0x5c29x9[_0xd587[1828]]- 2])}}}}}}}};mxCoordinateAssignment[_0xd587[202]][_0xd587[1903]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){_0x5c29x2= _0x5c29x2[_0xd587[1850]][_0x5c29x4];for(var _0x5c29x9=-1,_0x5c29xa=0;_0x5c29xa< _0x5c29x2[_0xd587[67]];_0x5c29xa++){if(_0x5c29x3== _0x5c29x2[_0x5c29xa]){_0x5c29x9= _0x5c29xa;break}};if(0> _0x5c29x9){return !1};_0x5c29xa= _0x5c29x3[_0xd587[1833]](_0x5c29x4);if(_0x5c29x5< _0x5c29xa){if(0== _0x5c29x9){return !0};_0x5c29x2= _0x5c29x2[_0x5c29x9- 1];_0x5c29x4= _0x5c29x2[_0xd587[1833]](_0x5c29x4);_0x5c29x4= _0x5c29x4+ _0x5c29x2[_0xd587[117]]/ 2+ this[_0xd587[1868]]+ _0x5c29x3[_0xd587[117]]/ 2;if(!(_0x5c29x4<= _0x5c29x5)){return !1}}else {if(_0x5c29x5> _0x5c29xa){if(_0x5c29x9== _0x5c29x2[_0xd587[67]]- 1){return !0};_0x5c29x2= _0x5c29x2[_0x5c29x9+ 1];_0x5c29x4= _0x5c29x2[_0xd587[1833]](_0x5c29x4);_0x5c29x4= _0x5c29x4- _0x5c29x2[_0xd587[117]]/ 2- this[_0xd587[1868]]- _0x5c29x3[_0xd587[117]]/ 2;if(!(_0x5c29x4>= _0x5c29x5)){return !1}}};return !0};mxCoordinateAssignment[_0xd587[202]][_0xd587[1895]]= function(_0x5c29x2,_0x5c29x3){this[_0xd587[1877]]= [];this[_0xd587[1878]]= [];for(var _0x5c29x4=0;_0x5c29x4< _0x5c29x3[_0xd587[1850]][_0xd587[67]];_0x5c29x4++){this[_0xd587[1877]][_0x5c29x4]= Number[_0xd587[1904]],this[_0xd587[1878]][_0x5c29x4]= 0};_0x5c29x4= null;this[_0xd587[1759]][_0xd587[1735]]&& (_0x5c29x4= {});var _0x5c29x5=_0x5c29x3[_0xd587[1847]],_0x5c29x9=_0x5c29x3[_0xd587[1846]],_0x5c29xa;for(_0x5c29xa in _0x5c29x9){var _0x5c29x12=_0x5c29x9[_0x5c29xa];this[_0xd587[1725]](_0x5c29x12);if(this[_0xd587[1759]][_0xd587[1735]]){var _0x5c29x12=_0x5c29x2[_0xd587[251]][_0xd587[1197]](_0x5c29x12[_0xd587[246]]),_0x5c29x13=mxCellPath[_0xd587[385]](_0x5c29x12);null== _0x5c29x4[_0x5c29x13]&& (_0x5c29x4[_0x5c29x13]= _0x5c29x12)}};this[_0xd587[1759]][_0xd587[1735]]&& null!= _0x5c29x4&& this[_0xd587[1763]](_0x5c29x4);(this[_0xd587[675]]== mxHierarchicalEdgeStyle[_0xd587[1905]]|| this[_0xd587[675]]== mxHierarchicalEdgeStyle[_0xd587[1883]]|| this[_0xd587[675]]== mxHierarchicalEdgeStyle[_0xd587[1906]])&& this[_0xd587[1764]](_0x5c29x3);for(_0x5c29xa in _0x5c29x5){this[_0xd587[1907]](_0x5c29x5[_0x5c29xa])}};mxCoordinateAssignment[_0xd587[202]][_0xd587[1763]]= function(_0x5c29x2){var _0x5c29x3=[],_0x5c29x4;for(_0x5c29x4 in _0x5c29x2){_0x5c29x3[_0xd587[207]](_0x5c29x2[_0x5c29x4])};this[_0xd587[1759]][_0xd587[1727]](mxUtils[_0xd587[1779]](_0x5c29x3,!0),this[_0xd587[1745]])};mxCoordinateAssignment[_0xd587[202]][_0xd587[1764]]= function(_0x5c29x2){for(var _0x5c29x3=0;_0x5c29x3< _0x5c29x2[_0xd587[1850]][_0xd587[67]];_0x5c29x3++){for(var _0x5c29x4=_0x5c29x2[_0xd587[1850]][_0x5c29x3],_0x5c29x5=0;_0x5c29x5< _0x5c29x4[_0xd587[67]];_0x5c29x5++){var _0x5c29x9=_0x5c29x4[_0x5c29x5];if(_0x5c29x9[_0xd587[1193]]()){for(var _0x5c29xa=_0x5c29x9[_0xd587[1832]](_0x5c29x3),_0x5c29x12=_0x5c29x3- 1,_0x5c29x13=0;2> _0x5c29x13;_0x5c29x13++){if(-1< _0x5c29x12&& _0x5c29x12< _0x5c29x2[_0xd587[1850]][_0xd587[67]]&& null!= _0x5c29xa&& 0< _0x5c29xa[_0xd587[67]]){for(var _0x5c29x14=[],_0x5c29x15=0;_0x5c29x15< _0x5c29xa[_0xd587[67]];_0x5c29x15++){var _0x5c29x16= new WeightedCellSorter(_0x5c29xa[_0x5c29x15],_0x5c29xa[_0x5c29x15][_0xd587[730]](_0x5c29x12));_0x5c29x14[_0xd587[207]](_0x5c29x16)};_0x5c29x14[_0xd587[470]](WeightedCellSorter[_0xd587[202]][_0xd587[469]]);for(var _0x5c29x16=_0x5c29x9[_0xd587[235]][0]- _0x5c29x9[_0xd587[117]]/ 2,_0x5c29x17=_0x5c29x16+ _0x5c29x9[_0xd587[117]],_0x5c29x18=_0x5c29xa= 0,_0x5c29x12=[],_0x5c29x15=0;_0x5c29x15< _0x5c29x14[_0xd587[67]];_0x5c29x15++){var _0x5c29x19=_0x5c29x14[_0x5c29x15][_0xd587[246]],_0x5c29x1a;if(_0x5c29x19[_0xd587[1193]]()){_0x5c29x1a= 0== _0x5c29x13?_0x5c29x9[_0xd587[1838]]:_0x5c29x9[_0xd587[1837]];for(var _0x5c29x1b=0;_0x5c29x1b< _0x5c29x1a[_0xd587[67]];_0x5c29x1b++){if(_0x5c29x1a[_0x5c29x1b][_0xd587[1097]]== _0x5c29x19|| _0x5c29x1a[_0x5c29x1b][_0xd587[772]]== _0x5c29x19){_0x5c29xa+= _0x5c29x1a[_0x5c29x1b][_0xd587[1842]][_0xd587[67]],_0x5c29x18++,_0x5c29x12[_0xd587[207]](_0x5c29x1a[_0x5c29x1b])}}}else {_0x5c29xa+= _0x5c29x19[_0xd587[1842]][_0xd587[67]],_0x5c29x18++,_0x5c29x12[_0xd587[207]](_0x5c29x19)}};_0x5c29x9[_0xd587[117]]> (_0x5c29xa+ 1)* this[_0xd587[1751]]+ 2* this[_0xd587[1751]]&& (_0x5c29x16+= this[_0xd587[1751]],_0x5c29x17-= this[_0xd587[1751]]);_0x5c29x14= (_0x5c29x17- _0x5c29x16)/ _0x5c29xa;_0x5c29x16+= _0x5c29x14/ 2;_0x5c29x17= this[_0xd587[1753]]- this[_0xd587[1752]];for(_0x5c29x15= _0x5c29x18= 0;_0x5c29x15< _0x5c29x12[_0xd587[67]];_0x5c29x15++){_0x5c29x19= _0x5c29x12[_0x5c29x15][_0xd587[1842]][_0xd587[67]];_0x5c29x1b= mxCellPath[_0xd587[385]](_0x5c29x12[_0x5c29x15][_0xd587[1842]][0]);_0x5c29x1a= this[_0xd587[1873]][_0x5c29x1b];null== _0x5c29x1a&& (_0x5c29x1a= [],this[_0xd587[1873]][_0x5c29x1b]= _0x5c29x1a);_0x5c29x15< _0x5c29xa/ 2?_0x5c29x17+= this[_0xd587[1752]]:_0x5c29x15> _0x5c29xa/ 2&& (_0x5c29x17-= this[_0xd587[1752]]);for(_0x5c29x1b= 0;_0x5c29x1b< _0x5c29x19;_0x5c29x1b++){_0x5c29x1a[4* _0x5c29x1b+ 2* _0x5c29x13]= _0x5c29x16,_0x5c29x16+= _0x5c29x14,_0x5c29x1a[4* _0x5c29x1b+ 2* _0x5c29x13+ 1]= _0x5c29x17};_0x5c29x18= Math[_0xd587[160]](_0x5c29x18,_0x5c29x17)}};_0x5c29xa= _0x5c29x9[_0xd587[1831]](_0x5c29x3);_0x5c29x12= _0x5c29x3+ 1}}}}};mxCoordinateAssignment[_0xd587[202]][_0xd587[1907]]= function(_0x5c29x2){var _0x5c29x3=0;if(101207!= _0x5c29x2[_0xd587[1826]][0]){var _0x5c29x4=_0x5c29x2[_0xd587[1827]],_0x5c29x5=_0x5c29x2[_0xd587[1828]];_0x5c29x4== _0x5c29x5&& (_0x5c29x4= _0x5c29x2[_0xd587[1097]][_0xd587[1827]],_0x5c29x5= _0x5c29x2[_0xd587[772]][_0xd587[1828]]);for(var _0x5c29x9=0,_0x5c29xa=mxCellPath[_0xd587[385]](_0x5c29x2[_0xd587[1842]][0]),_0x5c29xa=this[_0xd587[1873]][_0x5c29xa],_0x5c29x12=_0x5c29x2[_0xd587[1843]]?_0x5c29x2[_0xd587[772]][_0xd587[246]]:_0x5c29x2[_0xd587[1097]][_0xd587[246]],_0x5c29x13=this[_0xd587[1759]][_0xd587[1179]],_0x5c29x14=0;_0x5c29x14< _0x5c29x2[_0xd587[1842]][_0xd587[67]];_0x5c29x14++){var _0x5c29x15=_0x5c29x2[_0xd587[1842]][_0x5c29x14],_0x5c29x16=this[_0xd587[1759]][_0xd587[1710]](_0x5c29x15,!0),_0x5c29x17=_0x5c29x13[_0xd587[251]][_0xd587[1709]](_0x5c29x15,!0),_0x5c29x18=[],_0x5c29x19=_0x5c29x2[_0xd587[1843]];_0x5c29x16!= _0x5c29x12&& (_0x5c29x19= !_0x5c29x19);if(null!= _0x5c29xa){var _0x5c29x1a=_0x5c29x19?2:0,_0x5c29x1b=_0x5c29x19?this[_0xd587[1877]][_0x5c29x5]:this[_0xd587[1878]][_0x5c29x4],_0x5c29x1c=_0x5c29xa[4* _0x5c29x9+ 1+ _0x5c29x1a];_0x5c29x19&& (_0x5c29x1c= -_0x5c29x1c);_0x5c29x1b+= _0x5c29x1c;_0x5c29x1a= _0x5c29xa[4* _0x5c29x9+ _0x5c29x1a];_0x5c29x17= _0x5c29x13[_0xd587[251]][_0xd587[1709]](_0x5c29x15,!0);this[_0xd587[1759]][_0xd587[1908]](_0x5c29x17)&& _0x5c29x13[_0xd587[251]][_0xd587[1197]](_0x5c29x17)== _0x5c29x16&& (_0x5c29x1a= _0x5c29x13[_0xd587[441]][_0xd587[248]](_0x5c29x17),_0x5c29x1a= null!= _0x5c29x1a?_0x5c29x1a[_0xd587[235]]:_0x5c29x16[_0xd587[256]][_0xd587[235]]+ _0x5c29x2[_0xd587[1097]][_0xd587[117]]* _0x5c29x17[_0xd587[256]][_0xd587[235]]);this[_0xd587[1870]]== mxConstants[_0xd587[1358]]|| this[_0xd587[1870]]== mxConstants[_0xd587[1354]]?(_0x5c29x18[_0xd587[207]]( new mxPoint(_0x5c29x1a,_0x5c29x1b)),this[_0xd587[675]]== mxHierarchicalEdgeStyle[_0xd587[1906]]&& _0x5c29x18[_0xd587[207]]( new mxPoint(_0x5c29x1a,_0x5c29x1b+ _0x5c29x1c))):(_0x5c29x18[_0xd587[207]]( new mxPoint(_0x5c29x1b,_0x5c29x1a)),this[_0xd587[675]]== mxHierarchicalEdgeStyle[_0xd587[1906]]&& _0x5c29x18[_0xd587[207]]( new mxPoint(_0x5c29x1b+ _0x5c29x1c,_0x5c29x1a)))};_0x5c29x1a= _0x5c29x2[_0xd587[235]][_0xd587[67]]- 1;_0x5c29x1b= _0x5c29x1c= -1;_0x5c29x16= _0x5c29x2[_0xd587[1827]]- 1;_0x5c29x19&& (_0x5c29x1a= 0,_0x5c29x1c= _0x5c29x2[_0xd587[235]][_0xd587[67]],_0x5c29x1b= 1,_0x5c29x16= _0x5c29x2[_0xd587[1828]]+ 1);for(;_0x5c29x2[_0xd587[1827]]!= _0x5c29x2[_0xd587[1828]]&& _0x5c29x1a!= _0x5c29x1c;_0x5c29x1a+= _0x5c29x1b){var _0x5c29x17=_0x5c29x2[_0xd587[235]][_0x5c29x1a]+ _0x5c29x3,_0x5c29x1d=(this[_0xd587[1877]][_0x5c29x16]+ this[_0xd587[1878]][_0x5c29x16+ 1])/ 2,_0x5c29x1e=(this[_0xd587[1877]][_0x5c29x16- 1]+ this[_0xd587[1878]][_0x5c29x16])/ 2;if(_0x5c29x19){var _0x5c29x1f=_0x5c29x1d,_0x5c29x1d=_0x5c29x1e,_0x5c29x1e=_0x5c29x1f};this[_0xd587[1870]]== mxConstants[_0xd587[1358]]|| this[_0xd587[1870]]== mxConstants[_0xd587[1354]]?(_0x5c29x18[_0xd587[207]]( new mxPoint(_0x5c29x17,_0x5c29x1d)),_0x5c29x18[_0xd587[207]]( new mxPoint(_0x5c29x17,_0x5c29x1e))):(_0x5c29x18[_0xd587[207]]( new mxPoint(_0x5c29x1d,_0x5c29x17)),_0x5c29x18[_0xd587[207]]( new mxPoint(_0x5c29x1e,_0x5c29x17)));this[_0xd587[1874]]= Math[_0xd587[160]](this[_0xd587[1874]],_0x5c29x17);_0x5c29x16+= _0x5c29x1b};null!= _0x5c29xa&& (_0x5c29x1a= _0x5c29x19?2:0,_0x5c29x1b= _0x5c29x19?this[_0xd587[1878]][_0x5c29x4]:this[_0xd587[1877]][_0x5c29x5],_0x5c29x1c= _0x5c29xa[4* _0x5c29x9+ 3- _0x5c29x1a],_0x5c29x19&& (_0x5c29x1c= -_0x5c29x1c),_0x5c29x1b-= _0x5c29x1c,_0x5c29x1a= _0x5c29xa[4* _0x5c29x9+ 2- _0x5c29x1a],_0x5c29x19= _0x5c29x13[_0xd587[251]][_0xd587[1709]](_0x5c29x15,!1),_0x5c29x16= this[_0xd587[1759]][_0xd587[1710]](_0x5c29x15,!1),this[_0xd587[1759]][_0xd587[1908]](_0x5c29x19)&& _0x5c29x13[_0xd587[251]][_0xd587[1197]](_0x5c29x19)== _0x5c29x16&& (_0x5c29x1a= _0x5c29x13[_0xd587[441]][_0xd587[248]](_0x5c29x19),_0x5c29x1a= null!= _0x5c29x1a?_0x5c29x1a[_0xd587[235]]:_0x5c29x16[_0xd587[256]][_0xd587[235]]+ _0x5c29x2[_0xd587[772]][_0xd587[117]]* _0x5c29x19[_0xd587[256]][_0xd587[235]]),this[_0xd587[1870]]== mxConstants[_0xd587[1358]]|| this[_0xd587[1870]]== mxConstants[_0xd587[1354]]?(this[_0xd587[675]]== mxHierarchicalEdgeStyle[_0xd587[1906]]&& _0x5c29x18[_0xd587[207]]( new mxPoint(_0x5c29x1a,_0x5c29x1b- _0x5c29x1c)),_0x5c29x18[_0xd587[207]]( new mxPoint(_0x5c29x1a,_0x5c29x1b))):(this[_0xd587[675]]== mxHierarchicalEdgeStyle[_0xd587[1906]]&& _0x5c29x18[_0xd587[207]]( new mxPoint(_0x5c29x1b- _0x5c29x1c,_0x5c29x1a)),_0x5c29x18[_0xd587[207]]( new mxPoint(_0x5c29x1b,_0x5c29x1a))));_0x5c29x2[_0xd587[1843]]&& this[_0xd587[1909]](_0x5c29x2,_0x5c29x15);this[_0xd587[1759]][_0xd587[1722]](_0x5c29x15,_0x5c29x18);_0x5c29x3= 0== _0x5c29x3?this[_0xd587[1872]]:0< _0x5c29x3?-_0x5c29x3:-_0x5c29x3+ this[_0xd587[1872]];_0x5c29x9++};_0x5c29x2[_0xd587[1826]][0]= 101207}};mxCoordinateAssignment[_0xd587[202]][_0xd587[1725]]= function(_0x5c29x2){var _0x5c29x3=_0x5c29x2[_0xd587[246]],_0x5c29x4=_0x5c29x2[_0xd587[235]][0]- _0x5c29x2[_0xd587[117]]/ 2,_0x5c29x5=_0x5c29x2[_0xd587[236]][0]- _0x5c29x2[_0xd587[119]]/ 2;this[_0xd587[1877]][_0x5c29x2[_0xd587[1828]]]= Math[_0xd587[243]](this[_0xd587[1877]][_0x5c29x2[_0xd587[1828]]],_0x5c29x5);this[_0xd587[1878]][_0x5c29x2[_0xd587[1828]]]= Math[_0xd587[160]](this[_0xd587[1878]][_0x5c29x2[_0xd587[1828]]],_0x5c29x5+ _0x5c29x2[_0xd587[119]]);this[_0xd587[1870]]== mxConstants[_0xd587[1358]]|| this[_0xd587[1870]]== mxConstants[_0xd587[1354]]?this[_0xd587[1759]][_0xd587[1725]](_0x5c29x3,_0x5c29x4,_0x5c29x5):this[_0xd587[1759]][_0xd587[1725]](_0x5c29x3,_0x5c29x5,_0x5c29x4);this[_0xd587[1874]]= Math[_0xd587[160]](this[_0xd587[1874]],_0x5c29x4+ _0x5c29x2[_0xd587[117]])};mxCoordinateAssignment[_0xd587[202]][_0xd587[1909]]= function(_0x5c29x2,_0x5c29x3){};function WeightedCellSorter(_0x5c29x2,_0x5c29x3){this[_0xd587[246]]= _0x5c29x2;this[_0xd587[1782]]= _0x5c29x3}WeightedCellSorter[_0xd587[202]][_0xd587[1782]]= 0;WeightedCellSorter[_0xd587[202]][_0xd587[1783]]= !1;WeightedCellSorter[_0xd587[202]][_0xd587[1784]]= !1;WeightedCellSorter[_0xd587[202]][_0xd587[1785]]= null;WeightedCellSorter[_0xd587[202]][_0xd587[246]]= null;WeightedCellSorter[_0xd587[202]][_0xd587[469]]= function(_0x5c29x2,_0x5c29x3){return null!= _0x5c29x2&& null!= _0x5c29x3?_0x5c29x3[_0xd587[1782]]> _0x5c29x2[_0xd587[1782]]?-1:_0x5c29x3[_0xd587[1782]]< _0x5c29x2[_0xd587[1782]]?1:_0x5c29x3[_0xd587[1783]]?-1:1:0};function mxHierarchicalLayout(_0x5c29x2,_0x5c29x3,_0x5c29x4){mxGraphLayout[_0xd587[239]](this,_0x5c29x2);this[_0xd587[1870]]= null!= _0x5c29x3?_0x5c29x3:mxConstants[_0xd587[1358]];this[_0xd587[1910]]= null!= _0x5c29x4?_0x5c29x4:!0}mxHierarchicalLayout[_0xd587[202]]= new mxGraphLayout;mxHierarchicalLayout[_0xd587[202]][_0xd587[196]]= mxHierarchicalLayout;mxHierarchicalLayout[_0xd587[202]][_0xd587[1845]]= null;mxHierarchicalLayout[_0xd587[202]][_0xd587[1735]]= !1;mxHierarchicalLayout[_0xd587[202]][_0xd587[1911]]= !1;mxHierarchicalLayout[_0xd587[202]][_0xd587[1912]]= 0;mxHierarchicalLayout[_0xd587[202]][_0xd587[1868]]= 30;mxHierarchicalLayout[_0xd587[202]][_0xd587[1869]]= 100;mxHierarchicalLayout[_0xd587[202]][_0xd587[1913]]= 60;mxHierarchicalLayout[_0xd587[202]][_0xd587[1872]]= 10;mxHierarchicalLayout[_0xd587[202]][_0xd587[1870]]= mxConstants[_0xd587[1358]];mxHierarchicalLayout[_0xd587[202]][_0xd587[1882]]= !0;mxHierarchicalLayout[_0xd587[202]][_0xd587[1844]]= !0;mxHierarchicalLayout[_0xd587[202]][_0xd587[1787]]= !0;mxHierarchicalLayout[_0xd587[202]][_0xd587[1914]]= !0;mxHierarchicalLayout[_0xd587[202]][_0xd587[251]]= null;mxHierarchicalLayout[_0xd587[202]][_0xd587[1915]]= null;mxHierarchicalLayout[_0xd587[202]][_0xd587[502]]= function(){return this[_0xd587[251]]};mxHierarchicalLayout[_0xd587[202]][_0xd587[350]]= function(_0x5c29x2,_0x5c29x3){this[_0xd587[1101]]= _0x5c29x2;var _0x5c29x4=this[_0xd587[1179]][_0xd587[251]];this[_0xd587[1915]]= {};if(!(null== _0x5c29x3&& null== _0x5c29x2)){if(null!= _0x5c29x3&& null!= _0x5c29x2){for(var _0x5c29x5=[],_0x5c29x9=0;_0x5c29x9< _0x5c29x3[_0xd587[67]];_0x5c29x9++){_0x5c29x4[_0xd587[1720]](_0x5c29x2,_0x5c29x3[_0x5c29x9])&& _0x5c29x5[_0xd587[207]](_0x5c29x3[_0x5c29x9])};this[_0xd587[1845]]= _0x5c29x5}else {this[_0xd587[1845]]= _0x5c29x3};_0x5c29x4[_0xd587[473]]();try{this[_0xd587[1916]](_0x5c29x2),this[_0xd587[1735]]&& !this[_0xd587[1179]][_0xd587[1742]](_0x5c29x2)&& this[_0xd587[1179]][_0xd587[1917]]([_0x5c29x2],this[_0xd587[1912]],this[_0xd587[1911]])}finally{_0x5c29x4[_0xd587[476]]()}}};mxHierarchicalLayout[_0xd587[202]][_0xd587[1918]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=[];if(null!= _0x5c29x2&& null!= _0x5c29x3){var _0x5c29x5=this[_0xd587[1179]][_0xd587[251]],_0x5c29x9=null,_0x5c29xa=-1E5,_0x5c29x12;for(_0x5c29x12 in _0x5c29x3){var _0x5c29x13=_0x5c29x3[_0x5c29x12];if(_0x5c29x5[_0xd587[1193]](_0x5c29x13)&& this[_0xd587[1179]][_0xd587[1714]](_0x5c29x13)){for(var _0x5c29x14=this[_0xd587[264]](_0x5c29x13),_0x5c29x15=0,_0x5c29x16=0,_0x5c29x17=0;_0x5c29x17< _0x5c29x14[_0xd587[67]];_0x5c29x17++){this[_0xd587[1710]](_0x5c29x14[_0x5c29x17],!0)== _0x5c29x13?_0x5c29x15++:_0x5c29x16++};0== _0x5c29x16&& 0< _0x5c29x15&& _0x5c29x4[_0xd587[207]](_0x5c29x13);_0x5c29x14= _0x5c29x15- _0x5c29x16;_0x5c29x14> _0x5c29xa&& (_0x5c29xa= _0x5c29x14,_0x5c29x9= _0x5c29x13)}};0== _0x5c29x4[_0xd587[67]]&& null!= _0x5c29x9&& _0x5c29x4[_0xd587[207]](_0x5c29x9)};return _0x5c29x4};mxHierarchicalLayout[_0xd587[202]][_0xd587[264]]= function(_0x5c29x2){var _0x5c29x3=mxCellPath[_0xd587[385]](_0x5c29x2);if(null!= this[_0xd587[1915]][_0x5c29x3]){return this[_0xd587[1915]][_0x5c29x3]};for(var _0x5c29x4=this[_0xd587[1179]][_0xd587[251]],_0x5c29x5=[],_0x5c29x9=this[_0xd587[1179]][_0xd587[1742]](_0x5c29x2),_0x5c29xa=_0x5c29x4[_0xd587[262]](_0x5c29x2),_0x5c29x12=0;_0x5c29x12< _0x5c29xa;_0x5c29x12++){var _0x5c29x13=_0x5c29x4[_0xd587[263]](_0x5c29x2,_0x5c29x12);if(this[_0xd587[1908]](_0x5c29x13)){_0x5c29x5= _0x5c29x5[_0xd587[1919]](_0x5c29x4[_0xd587[264]](_0x5c29x13,!0,!0))}else {if(_0x5c29x9|| !this[_0xd587[1179]][_0xd587[1714]](_0x5c29x13)){_0x5c29x5= _0x5c29x5[_0xd587[1919]](_0x5c29x4[_0xd587[264]](_0x5c29x13,!0,!0))}}};_0x5c29x5= _0x5c29x5[_0xd587[1919]](_0x5c29x4[_0xd587[264]](_0x5c29x2,!0,!0));_0x5c29x4= [];for(_0x5c29x12= 0;_0x5c29x12< _0x5c29x5[_0xd587[67]];_0x5c29x12++){_0x5c29x9= this[_0xd587[1710]](_0x5c29x5[_0x5c29x12],!0),_0x5c29xa= this[_0xd587[1710]](_0x5c29x5[_0x5c29x12],!1),(_0x5c29x9== _0x5c29xa|| _0x5c29x9!= _0x5c29xa&& (_0x5c29xa== _0x5c29x2&& (null== this[_0xd587[1101]]|| this[_0xd587[1179]][_0xd587[1920]](_0x5c29x9,this[_0xd587[1101]],this[_0xd587[1914]]))|| _0x5c29x9== _0x5c29x2&& (null== this[_0xd587[1101]]|| this[_0xd587[1179]][_0xd587[1920]](_0x5c29xa,this[_0xd587[1101]],this[_0xd587[1914]]))))&& _0x5c29x4[_0xd587[207]](_0x5c29x5[_0x5c29x12])};return this[_0xd587[1915]][_0x5c29x3]= _0x5c29x4};mxHierarchicalLayout[_0xd587[202]][_0xd587[1710]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=this[_0xd587[1179]][_0xd587[441]][_0xd587[248]](_0x5c29x2),_0x5c29x4=null!= _0x5c29x4?_0x5c29x4[_0xd587[1710]](_0x5c29x3):this[_0xd587[1179]][_0xd587[441]][_0xd587[1710]](_0x5c29x2,_0x5c29x3);this[_0xd587[1908]](_0x5c29x4)&& (_0x5c29x4= this[_0xd587[1179]][_0xd587[251]][_0xd587[1197]](_0x5c29x4));return _0x5c29x4};mxHierarchicalLayout[_0xd587[202]][_0xd587[1916]]= function(_0x5c29x2){var _0x5c29x3=[],_0x5c29x4=[];if(null== this[_0xd587[1845]]&& null!= _0x5c29x2){var _0x5c29x5={};this[_0xd587[1921]](_0x5c29x2,_0x5c29x5);this[_0xd587[1845]]= [];var _0x5c29x9=!0,_0x5c29xa;for(_0x5c29xa in _0x5c29x5){if(null!= _0x5c29x5[_0x5c29xa]){_0x5c29x9= !1;break}};for(;!_0x5c29x9;){for(var _0x5c29x12=this[_0xd587[1918]](_0x5c29x2,_0x5c29x5),_0x5c29x9=0;_0x5c29x9< _0x5c29x12[_0xd587[67]];_0x5c29x9++){var _0x5c29x13=[];_0x5c29x3[_0xd587[207]](_0x5c29x13);this[_0xd587[1706]](_0x5c29x12[_0x5c29x9],!0,null,_0x5c29x4,_0x5c29x13,_0x5c29x3,_0x5c29x5)};for(_0x5c29x9= 0;_0x5c29x9< _0x5c29x12[_0xd587[67]];_0x5c29x9++){this[_0xd587[1845]][_0xd587[207]](_0x5c29x12[_0x5c29x9])};_0x5c29x9= !0;for(_0x5c29xa in _0x5c29x5){if(null!= _0x5c29x5[_0x5c29xa]){_0x5c29x9= !1;break}}}}else {for(_0x5c29x9= 0;_0x5c29x9< roots[_0xd587[67]];_0x5c29x9++){_0x5c29x13= [],_0x5c29x3[_0xd587[207]](_0x5c29x13),traverse(roots[_0xd587[203]](_0x5c29x9),!0,null,_0x5c29x4,_0x5c29x13,_0x5c29x3,null)}};for(_0x5c29x9= _0x5c29x4= 0;_0x5c29x9< _0x5c29x3[_0xd587[67]];_0x5c29x9++){_0x5c29x13= _0x5c29x3[_0x5c29x9];_0x5c29x5= [];for(_0x5c29xa in _0x5c29x13){_0x5c29x5[_0xd587[207]](_0x5c29x13[_0x5c29xa])};this[_0xd587[251]]= new mxGraphHierarchyModel(this,_0x5c29x5,this[_0xd587[1845]],_0x5c29x2,this[_0xd587[1844]]);this[_0xd587[1922]](_0x5c29x2);this[_0xd587[1923]]();this[_0xd587[1924]](_0x5c29x2);_0x5c29x4= this[_0xd587[1925]](_0x5c29x4,_0x5c29x2)}};mxHierarchicalLayout[_0xd587[202]][_0xd587[1921]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=this[_0xd587[1179]][_0xd587[251]];_0x5c29x4[_0xd587[1193]](_0x5c29x2)&& (_0x5c29x2!= this[_0xd587[1101]]&& this[_0xd587[1179]][_0xd587[1714]](_0x5c29x2))&& (_0x5c29x3[mxCellPath[_0xd587[385]](_0x5c29x2)]= _0x5c29x2);if(this[_0xd587[1914]]|| _0x5c29x2== this[_0xd587[1101]]&& this[_0xd587[1179]][_0xd587[1714]](_0x5c29x2)){for(var _0x5c29x5=_0x5c29x4[_0xd587[262]](_0x5c29x2),_0x5c29x9=0;_0x5c29x9< _0x5c29x5;_0x5c29x9++){var _0x5c29xa=_0x5c29x4[_0xd587[263]](_0x5c29x2,_0x5c29x9);this[_0xd587[1908]](_0x5c29xa)|| this[_0xd587[1921]](_0x5c29xa,_0x5c29x3)}}};mxHierarchicalLayout[_0xd587[202]][_0xd587[1908]]= function(_0x5c29x2){return _0x5c29x2[_0xd587[256]][_0xd587[1500]]?!0:!1};mxHierarchicalLayout[_0xd587[202]][_0xd587[1781]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){_0x5c29x4= null!= _0x5c29x4?_0x5c29x4:!1;for(var _0x5c29x5=this[_0xd587[264]](_0x5c29x2),_0x5c29x9=[],_0x5c29xa=0;_0x5c29xa< _0x5c29x5[_0xd587[67]];_0x5c29xa++){var _0x5c29x12=this[_0xd587[1710]](_0x5c29x5[_0x5c29xa],!0),_0x5c29x13=this[_0xd587[1710]](_0x5c29x5[_0x5c29xa],!1);(_0x5c29x12== _0x5c29x2&& _0x5c29x13== _0x5c29x3|| !_0x5c29x4&& _0x5c29x12== _0x5c29x3&& _0x5c29x13== _0x5c29x2)&& _0x5c29x9[_0xd587[207]](_0x5c29x5[_0x5c29xa])};return _0x5c29x9};mxHierarchicalLayout[_0xd587[202]][_0xd587[1706]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa,_0x5c29x12){if(null!= _0x5c29x2&& null!= _0x5c29x5){var _0x5c29x13=mxCellPath[_0xd587[385]](_0x5c29x2);if(null== _0x5c29x5[_0x5c29x13]&& (null== _0x5c29x12|| null!= _0x5c29x12[_0x5c29x13])){null== _0x5c29x9[_0x5c29x13]&& (_0x5c29x9[_0x5c29x13]= _0x5c29x2);null== _0x5c29x5[_0x5c29x13]&& (_0x5c29x5[_0x5c29x13]= _0x5c29x2);delete _0x5c29x12[_0x5c29x13];var _0x5c29x14=this[_0xd587[264]](_0x5c29x2);for(_0x5c29x4= 0;_0x5c29x4< _0x5c29x14[_0xd587[67]];_0x5c29x4++){if(_0x5c29x13= this[_0xd587[1710]](_0x5c29x14[_0x5c29x4],!0)== _0x5c29x2,!_0x5c29x3|| _0x5c29x13){_0x5c29x13= this[_0xd587[1710]](_0x5c29x14[_0x5c29x4],!_0x5c29x13),_0x5c29x9= this[_0xd587[1706]](_0x5c29x13,_0x5c29x3,_0x5c29x14[_0x5c29x4],_0x5c29x5,_0x5c29x9,_0x5c29xa,_0x5c29x12)}}}else {if(null== _0x5c29x9[_0x5c29x13]){for(_0x5c29x4= 0;_0x5c29x4< _0x5c29xa[_0xd587[67]];_0x5c29x4++){if(_0x5c29x2= _0x5c29xa[_0x5c29x4],null!= _0x5c29x2[_0x5c29x13]){for(_0x5c29x14 in _0x5c29x9){_0x5c29x2[_0x5c29x14]= _0x5c29x9[_0x5c29x14]};_0x5c29xa[_0xd587[1242]]();return _0x5c29x2}}}}};return _0x5c29x9};mxHierarchicalLayout[_0xd587[202]][_0xd587[1922]]= function(_0x5c29x2){( new mxMinimumCycleRemover(this))[_0xd587[350]](_0x5c29x2)};mxHierarchicalLayout[_0xd587[202]][_0xd587[1923]]= function(){this[_0xd587[251]][_0xd587[1852]]();this[_0xd587[251]][_0xd587[1854]]()};mxHierarchicalLayout[_0xd587[202]][_0xd587[1924]]= function(_0x5c29x2){( new mxMedianHybridCrossingReduction(this))[_0xd587[350]](_0x5c29x2)};mxHierarchicalLayout[_0xd587[202]][_0xd587[1925]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4= new mxCoordinateAssignment(this,this[_0xd587[1868]],this[_0xd587[1869]],this[_0xd587[1870]],_0x5c29x2,this[_0xd587[1872]]);_0x5c29x4[_0xd587[1882]]= this[_0xd587[1882]];_0x5c29x4[_0xd587[350]](_0x5c29x3);return _0x5c29x4[_0xd587[1874]]+ this[_0xd587[1913]]};function mxGraphModel(_0x5c29x2){this[_0xd587[1926]]= this[_0xd587[1096]]();null!= _0x5c29x2?this[_0xd587[1927]](_0x5c29x2):this[_0xd587[200]]()}mxGraphModel[_0xd587[202]]= new mxEventSource;mxGraphModel[_0xd587[202]][_0xd587[196]]= mxGraphModel;mxGraphModel[_0xd587[202]][_0xd587[813]]= null;mxGraphModel[_0xd587[202]][_0xd587[895]]= null;mxGraphModel[_0xd587[202]][_0xd587[1928]]= !0;mxGraphModel[_0xd587[202]][_0xd587[1929]]= !0;mxGraphModel[_0xd587[202]][_0xd587[1089]]= _0xd587[110];mxGraphModel[_0xd587[202]][_0xd587[1930]]= _0xd587[110];mxGraphModel[_0xd587[202]][_0xd587[1931]]= 0;mxGraphModel[_0xd587[202]][_0xd587[1926]]= null;mxGraphModel[_0xd587[202]][_0xd587[1932]]= 0;mxGraphModel[_0xd587[202]][_0xd587[1933]]= !1;mxGraphModel[_0xd587[202]][_0xd587[200]]= function(){this[_0xd587[1927]](this[_0xd587[1934]]())};mxGraphModel[_0xd587[202]][_0xd587[1935]]= function(){return this[_0xd587[1929]]};mxGraphModel[_0xd587[202]][_0xd587[1936]]= function(_0x5c29x2){this[_0xd587[1929]]= _0x5c29x2};mxGraphModel[_0xd587[202]][_0xd587[1934]]= function(){var _0x5c29x2= new mxCell;_0x5c29x2[_0xd587[1937]]( new mxCell);return _0x5c29x2};mxGraphModel[_0xd587[202]][_0xd587[736]]= function(_0x5c29x2){return null!= this[_0xd587[895]]?this[_0xd587[895]][_0x5c29x2]:null};mxGraphModel[_0xd587[202]][_0xd587[1938]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=null;if(null!= _0x5c29x2){for(var _0x5c29x4=[],_0x5c29x5=0;_0x5c29x5< _0x5c29x2[_0xd587[67]];_0x5c29x5++){_0x5c29x3(_0x5c29x2[_0x5c29x5])&& _0x5c29x4[_0xd587[207]](_0x5c29x2[_0x5c29x5])}};return _0x5c29x4};mxGraphModel[_0xd587[202]][_0xd587[1939]]= function(_0x5c29x2){return this[_0xd587[1921]](null,_0x5c29x2)};mxGraphModel[_0xd587[202]][_0xd587[1921]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=[];_0x5c29x3= _0x5c29x3|| this[_0xd587[501]]();(null== _0x5c29x2|| _0x5c29x2(_0x5c29x3))&& _0x5c29x4[_0xd587[207]](_0x5c29x3);for(var _0x5c29x5=this[_0xd587[262]](_0x5c29x3),_0x5c29x9=0;_0x5c29x9< _0x5c29x5;_0x5c29x9++){var _0x5c29xa=this[_0xd587[263]](_0x5c29x3,_0x5c29x9),_0x5c29x4=_0x5c29x4[_0xd587[1919]](this[_0xd587[1921]](_0x5c29x2,_0x5c29xa))};return _0x5c29x4};mxGraphModel[_0xd587[202]][_0xd587[501]]= function(_0x5c29x2){var _0x5c29x3=_0x5c29x2|| this[_0xd587[813]];if(null!= _0x5c29x2){for(;null!= _0x5c29x2;){_0x5c29x3= _0x5c29x2,_0x5c29x2= this[_0xd587[1197]](_0x5c29x2)}};return _0x5c29x3};mxGraphModel[_0xd587[202]][_0xd587[1927]]= function(_0x5c29x2){this[_0xd587[350]]( new mxRootChange(this,_0x5c29x2));return _0x5c29x2};mxGraphModel[_0xd587[202]][_0xd587[1940]]= function(_0x5c29x2){var _0x5c29x3=this[_0xd587[813]];this[_0xd587[813]]= _0x5c29x2;this[_0xd587[1931]]= 0;this[_0xd587[895]]= null;this[_0xd587[1941]](_0x5c29x2);return _0x5c29x3};mxGraphModel[_0xd587[202]][_0xd587[1942]]= function(_0x5c29x2){return null!= _0x5c29x2&& this[_0xd587[813]]== _0x5c29x2};mxGraphModel[_0xd587[202]][_0xd587[1740]]= function(_0x5c29x2){return this[_0xd587[1942]](this[_0xd587[1197]](_0x5c29x2))};mxGraphModel[_0xd587[202]][_0xd587[1720]]= function(_0x5c29x2,_0x5c29x3){for(;null!= _0x5c29x3&& _0x5c29x3!= _0x5c29x2;){_0x5c29x3= this[_0xd587[1197]](_0x5c29x3)};return _0x5c29x3== _0x5c29x2};mxGraphModel[_0xd587[202]][_0xd587[442]]= function(_0x5c29x2){return this[_0xd587[1720]](this[_0xd587[813]],_0x5c29x2)};mxGraphModel[_0xd587[202]][_0xd587[1197]]= function(_0x5c29x2){return null!= _0x5c29x2?_0x5c29x2[_0xd587[1197]]():null};mxGraphModel[_0xd587[202]][_0xd587[99]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){if(_0x5c29x3!= _0x5c29x2&& null!= _0x5c29x2&& null!= _0x5c29x3){null== _0x5c29x4&& (_0x5c29x4= this[_0xd587[262]](_0x5c29x2));var _0x5c29x5=_0x5c29x2!= this[_0xd587[1197]](_0x5c29x3);this[_0xd587[350]]( new mxChildChange(this,_0x5c29x2,_0x5c29x3,_0x5c29x4));this[_0xd587[1928]]&& _0x5c29x5&& this[_0xd587[1943]](_0x5c29x3)};return _0x5c29x3};mxGraphModel[_0xd587[202]][_0xd587[1941]]= function(_0x5c29x2){if(null!= _0x5c29x2){null== _0x5c29x2[_0xd587[1103]]()&& this[_0xd587[1929]]&& _0x5c29x2[_0xd587[1945]](this[_0xd587[1944]](_0x5c29x2));if(null!= _0x5c29x2[_0xd587[1103]]()){var _0x5c29x3=this[_0xd587[736]](_0x5c29x2[_0xd587[1103]]());if(_0x5c29x3!= _0x5c29x2){for(;null!= _0x5c29x3;){_0x5c29x2[_0xd587[1945]](this[_0xd587[1944]](_0x5c29x2)),_0x5c29x3= this[_0xd587[736]](_0x5c29x2[_0xd587[1103]]())};null== this[_0xd587[895]]&& (this[_0xd587[895]]= {});this[_0xd587[895]][_0x5c29x2[_0xd587[1103]]()]= _0x5c29x2}};mxUtils[_0xd587[1946]](_0x5c29x2[_0xd587[1103]]())&& (this[_0xd587[1931]]= Math[_0xd587[160]](this[_0xd587[1931]],_0x5c29x2[_0xd587[1103]]()));for(var _0x5c29x3=this[_0xd587[262]](_0x5c29x2),_0x5c29x4=0;_0x5c29x4< _0x5c29x3;_0x5c29x4++){this[_0xd587[1941]](this[_0xd587[263]](_0x5c29x2,_0x5c29x4))}}};mxGraphModel[_0xd587[202]][_0xd587[1944]]= function(_0x5c29x2){_0x5c29x2= this[_0xd587[1931]];this[_0xd587[1931]]++;return this[_0xd587[1089]]+ _0x5c29x2+ this[_0xd587[1930]]};mxGraphModel[_0xd587[202]][_0xd587[1943]]= function(_0x5c29x2,_0x5c29x3){_0x5c29x3= _0x5c29x3|| this[_0xd587[501]](_0x5c29x2);for(var _0x5c29x4=this[_0xd587[262]](_0x5c29x2),_0x5c29x5=0;_0x5c29x5< _0x5c29x4;_0x5c29x5++){var _0x5c29x9=this[_0xd587[263]](_0x5c29x2,_0x5c29x5);this[_0xd587[1943]](_0x5c29x9,_0x5c29x3)};_0x5c29x9= this[_0xd587[1707]](_0x5c29x2);_0x5c29x4= [];for(_0x5c29x5= 0;_0x5c29x5< _0x5c29x9;_0x5c29x5++){_0x5c29x4[_0xd587[207]](this[_0xd587[1708]](_0x5c29x2,_0x5c29x5))};for(_0x5c29x5= 0;_0x5c29x5< _0x5c29x4[_0xd587[67]];_0x5c29x5++){_0x5c29x9= _0x5c29x4[_0x5c29x5],this[_0xd587[1720]](_0x5c29x3,_0x5c29x9)&& this[_0xd587[1947]](_0x5c29x9,_0x5c29x3)}};mxGraphModel[_0xd587[202]][_0xd587[1947]]= function(_0x5c29x2,_0x5c29x3){for(var _0x5c29x4=this[_0xd587[1709]](_0x5c29x2,!0),_0x5c29x5=this[_0xd587[1709]](_0x5c29x2,!1),_0x5c29x9=null;null!= _0x5c29x4&& !this[_0xd587[250]](_0x5c29x4)&& null!= _0x5c29x4[_0xd587[256]]&& _0x5c29x4[_0xd587[256]][_0xd587[1500]];){_0x5c29x4= this[_0xd587[1197]](_0x5c29x4)};for(;null!= _0x5c29x5&& !this[_0xd587[250]](_0x5c29x5)&& null!= _0x5c29x5[_0xd587[256]]&& _0x5c29x5[_0xd587[256]][_0xd587[1500]];){_0x5c29x5= this[_0xd587[1197]](_0x5c29x5)};if(this[_0xd587[1720]](_0x5c29x3,_0x5c29x4)&& this[_0xd587[1720]](_0x5c29x3,_0x5c29x5)&& (_0x5c29x9= _0x5c29x4== _0x5c29x5?this[_0xd587[1197]](_0x5c29x4):this[_0xd587[1948]](_0x5c29x4,_0x5c29x5),null!= _0x5c29x9&& (this[_0xd587[1197]](_0x5c29x9)!= this[_0xd587[813]]|| this[_0xd587[1720]](_0x5c29x9,_0x5c29x2))&& this[_0xd587[1197]](_0x5c29x2)!= _0x5c29x9)){_0x5c29x4= this[_0xd587[1721]](_0x5c29x2);if(null!= _0x5c29x4){var _0x5c29xa=this[_0xd587[1949]](this[_0xd587[1197]](_0x5c29x2)),_0x5c29x12=this[_0xd587[1949]](_0x5c29x9),_0x5c29x5=_0x5c29x12[_0xd587[235]]- _0x5c29xa[_0xd587[235]],_0x5c29xa=_0x5c29x12[_0xd587[236]]- _0x5c29xa[_0xd587[236]],_0x5c29x4=_0x5c29x4[_0xd587[238]]();_0x5c29x4[_0xd587[513]](-_0x5c29x5,-_0x5c29xa);this[_0xd587[1724]](_0x5c29x2,_0x5c29x4)};this[_0xd587[99]](_0x5c29x9,_0x5c29x2,this[_0xd587[262]](_0x5c29x9))}};mxGraphModel[_0xd587[202]][_0xd587[1949]]= function(_0x5c29x2){var _0x5c29x3=null;null!= _0x5c29x2?(_0x5c29x3= this[_0xd587[1949]](this[_0xd587[1197]](_0x5c29x2)),this[_0xd587[250]](_0x5c29x2)|| (_0x5c29x2= this[_0xd587[1721]](_0x5c29x2),null!= _0x5c29x2&& (_0x5c29x3[_0xd587[235]]+= _0x5c29x2[_0xd587[235]],_0x5c29x3[_0xd587[236]]+= _0x5c29x2[_0xd587[236]]))):_0x5c29x3= new mxPoint;return _0x5c29x3};mxGraphModel[_0xd587[202]][_0xd587[1948]]= function(_0x5c29x2,_0x5c29x3){if(null!= _0x5c29x2&& null!= _0x5c29x3){var _0x5c29x4=mxCellPath[_0xd587[385]](_0x5c29x3);if(null!= _0x5c29x4&& 0< _0x5c29x4[_0xd587[67]]){var _0x5c29x5=_0x5c29x2,_0x5c29x9=mxCellPath[_0xd587[385]](_0x5c29x5);if(_0x5c29x4[_0xd587[67]]< _0x5c29x9[_0xd587[67]]){var _0x5c29x5=_0x5c29x3,_0x5c29xa=_0x5c29x9,_0x5c29x9=_0x5c29x4,_0x5c29x4=_0x5c29xa};for(;null!= _0x5c29x5;){_0x5c29xa= this[_0xd587[1197]](_0x5c29x5);if(0== _0x5c29x4[_0xd587[2]](_0x5c29x9+ mxCellPath[_0xd587[1950]])&& null!= _0x5c29xa){return _0x5c29x5};_0x5c29x9= mxCellPath[_0xd587[1951]](_0x5c29x9);_0x5c29x5= _0x5c29xa}}};return null};mxGraphModel[_0xd587[202]][_0xd587[205]]= function(_0x5c29x2){_0x5c29x2== this[_0xd587[813]]?this[_0xd587[1927]](null):null!= this[_0xd587[1197]](_0x5c29x2)&& this[_0xd587[350]]( new mxChildChange(this,null,_0x5c29x2));return _0x5c29x2};mxGraphModel[_0xd587[202]][_0xd587[1102]]= function(_0x5c29x2){if(null!= _0x5c29x2&& null!= this[_0xd587[895]]){for(var _0x5c29x3=this[_0xd587[262]](_0x5c29x2)- 1;0<= _0x5c29x3;_0x5c29x3--){this[_0xd587[1102]](this[_0xd587[263]](_0x5c29x2,_0x5c29x3))};null!= this[_0xd587[895]]&& null!= _0x5c29x2[_0xd587[1103]]()&& delete this[_0xd587[895]][_0x5c29x2[_0xd587[1103]]()]}};mxGraphModel[_0xd587[202]][_0xd587[1952]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){var _0x5c29x5=this[_0xd587[1197]](_0x5c29x2);null!= _0x5c29x3?(_0x5c29x3!= _0x5c29x5|| _0x5c29x5[_0xd587[1738]](_0x5c29x2)!= _0x5c29x4)&& _0x5c29x3[_0xd587[1937]](_0x5c29x2,_0x5c29x4):null!= _0x5c29x5&& (_0x5c29x4= _0x5c29x5[_0xd587[1738]](_0x5c29x2),_0x5c29x5[_0xd587[205]](_0x5c29x4));!this[_0xd587[442]](_0x5c29x5)&& null!= _0x5c29x3?this[_0xd587[1941]](_0x5c29x2):null== _0x5c29x3&& this[_0xd587[1102]](_0x5c29x2);return _0x5c29x5};mxGraphModel[_0xd587[202]][_0xd587[262]]= function(_0x5c29x2){return null!= _0x5c29x2?_0x5c29x2[_0xd587[262]]():0};mxGraphModel[_0xd587[202]][_0xd587[263]]= function(_0x5c29x2,_0x5c29x3){return null!= _0x5c29x2?_0x5c29x2[_0xd587[263]](_0x5c29x3):null};mxGraphModel[_0xd587[202]][_0xd587[1953]]= function(_0x5c29x2){return null!= _0x5c29x2?_0x5c29x2[_0xd587[1954]]:null};mxGraphModel[_0xd587[202]][_0xd587[1728]]= function(_0x5c29x2){return this[_0xd587[1955]](_0x5c29x2,!0,!1)};mxGraphModel[_0xd587[202]][_0xd587[1956]]= function(_0x5c29x2){return this[_0xd587[1955]](_0x5c29x2,!1,!0)};mxGraphModel[_0xd587[202]][_0xd587[1955]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){_0x5c29x3= null!= _0x5c29x3?_0x5c29x3:!1;_0x5c29x4= null!= _0x5c29x4?_0x5c29x4:!1;for(var _0x5c29x5=this[_0xd587[262]](_0x5c29x2),_0x5c29x9=[],_0x5c29xa=0;_0x5c29xa< _0x5c29x5;_0x5c29xa++){var _0x5c29x12=this[_0xd587[263]](_0x5c29x2,_0x5c29xa);(!_0x5c29x4&& !_0x5c29x3|| _0x5c29x4&& this[_0xd587[250]](_0x5c29x12)|| _0x5c29x3&& this[_0xd587[1193]](_0x5c29x12)) && _0x5c29x9[_0xd587[207]](_0x5c29x12)};return _0x5c29x9};mxGraphModel[_0xd587[202]][_0xd587[1709]]= function(_0x5c29x2,_0x5c29x3){return null!= _0x5c29x2?_0x5c29x2[_0xd587[1709]](_0x5c29x3):null};mxGraphModel[_0xd587[202]][_0xd587[1957]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){var _0x5c29x5=_0x5c29x3!= this[_0xd587[1709]](_0x5c29x2,_0x5c29x4);this[_0xd587[350]]( new mxTerminalChange(this,_0x5c29x2,_0x5c29x3,_0x5c29x4));this[_0xd587[1928]]&& _0x5c29x5&& this[_0xd587[1947]](_0x5c29x2,this[_0xd587[501]]());return _0x5c29x3};mxGraphModel[_0xd587[202]][_0xd587[1958]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){this[_0xd587[473]]();try{this[_0xd587[1957]](_0x5c29x2,_0x5c29x3,!0),this[_0xd587[1957]](_0x5c29x2,_0x5c29x4,!1)}finally{this[_0xd587[476]]()}};mxGraphModel[_0xd587[202]][_0xd587[1959]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){var _0x5c29x5=this[_0xd587[1709]](_0x5c29x2,_0x5c29x4);null!= _0x5c29x3?_0x5c29x3[_0xd587[1960]](_0x5c29x2,_0x5c29x4):null!= _0x5c29x5&& _0x5c29x5[_0xd587[1961]](_0x5c29x2,_0x5c29x4);return _0x5c29x5};mxGraphModel[_0xd587[202]][_0xd587[1707]]= function(_0x5c29x2){return null!= _0x5c29x2?_0x5c29x2[_0xd587[1707]]():0};mxGraphModel[_0xd587[202]][_0xd587[1708]]= function(_0x5c29x2,_0x5c29x3){return null!= _0x5c29x2?_0x5c29x2[_0xd587[1708]](_0x5c29x3):null};mxGraphModel[_0xd587[202]][_0xd587[1962]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){for(var _0x5c29x5=0,_0x5c29x9=this[_0xd587[1707]](_0x5c29x2),_0x5c29xa=0;_0x5c29xa< _0x5c29x9;_0x5c29xa++){var _0x5c29x12=this[_0xd587[1708]](_0x5c29x2,_0x5c29xa);_0x5c29x12!= _0x5c29x4&& this[_0xd587[1709]](_0x5c29x12,_0x5c29x3)== _0x5c29x2&& _0x5c29x5++};return _0x5c29x5};mxGraphModel[_0xd587[202]][_0xd587[1756]]= function(_0x5c29x2){return this[_0xd587[264]](_0x5c29x2,!0,!0,!1)};mxGraphModel[_0xd587[202]][_0xd587[1867]]= function(_0x5c29x2){return this[_0xd587[264]](_0x5c29x2,!0,!1,!1)};mxGraphModel[_0xd587[202]][_0xd587[1963]]= function(_0x5c29x2){return this[_0xd587[264]](_0x5c29x2,!1,!0,!1)};mxGraphModel[_0xd587[202]][_0xd587[264]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){_0x5c29x3= null!= _0x5c29x3?_0x5c29x3:!0;_0x5c29x4= null!= _0x5c29x4?_0x5c29x4:!0;_0x5c29x5= null!= _0x5c29x5?_0x5c29x5:!0;for(var _0x5c29x9=this[_0xd587[1707]](_0x5c29x2),_0x5c29xa=[],_0x5c29x12=0;_0x5c29x12< _0x5c29x9;_0x5c29x12++){var _0x5c29x13=this[_0xd587[1708]](_0x5c29x2,_0x5c29x12),_0x5c29x14=this[_0xd587[1709]](_0x5c29x13,!0),_0x5c29x15=this[_0xd587[1709]](_0x5c29x13,!1);(_0x5c29x5&& _0x5c29x14== _0x5c29x15|| _0x5c29x14!= _0x5c29x15&& (_0x5c29x3&& _0x5c29x15== _0x5c29x2|| _0x5c29x4&& _0x5c29x14== _0x5c29x2))&& _0x5c29xa[_0xd587[207]](_0x5c29x13)};return _0x5c29xa};mxGraphModel[_0xd587[202]][_0xd587[1781]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){_0x5c29x4= null!= _0x5c29x4?_0x5c29x4:!1;var _0x5c29x5=this[_0xd587[1707]](_0x5c29x2),_0x5c29x9=this[_0xd587[1707]](_0x5c29x3),_0x5c29xa=_0x5c29x2,_0x5c29x12=_0x5c29x5;_0x5c29x9< _0x5c29x5&& (_0x5c29x12= _0x5c29x9,_0x5c29xa= _0x5c29x3);_0x5c29x5= [];for(_0x5c29x9= 0;_0x5c29x9< _0x5c29x12;_0x5c29x9++){var _0x5c29x13=this[_0xd587[1708]](_0x5c29xa,_0x5c29x9),_0x5c29x14=this[_0xd587[1709]](_0x5c29x13,!0),_0x5c29x15=this[_0xd587[1709]](_0x5c29x13,!1),_0x5c29x16=_0x5c29x15== _0x5c29x2&& _0x5c29x14== _0x5c29x3;(_0x5c29x14== _0x5c29x2&& _0x5c29x15== _0x5c29x3|| !_0x5c29x4&& _0x5c29x16)&& _0x5c29x5[_0xd587[207]](_0x5c29x13)};return _0x5c29x5};mxGraphModel[_0xd587[202]][_0xd587[1808]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){_0x5c29x4= null!= _0x5c29x4?_0x5c29x4:!0;_0x5c29x5= null!= _0x5c29x5?_0x5c29x5:!0;var _0x5c29x9=[];if(null!= _0x5c29x2){for(var _0x5c29xa=0;_0x5c29xa< _0x5c29x2[_0xd587[67]];_0x5c29xa++){var _0x5c29x12=this[_0xd587[1709]](_0x5c29x2[_0x5c29xa],!0),_0x5c29x13=this[_0xd587[1709]](_0x5c29x2[_0x5c29xa],!1);_0x5c29x12== _0x5c29x3&& null!= _0x5c29x13&& _0x5c29x13!= _0x5c29x3&& _0x5c29x5?_0x5c29x9[_0xd587[207]](_0x5c29x13):_0x5c29x13== _0x5c29x3&& (null!= _0x5c29x12&& _0x5c29x12!= _0x5c29x3&& _0x5c29x4)&& _0x5c29x9[_0xd587[207]](_0x5c29x12)}};return _0x5c29x9};mxGraphModel[_0xd587[202]][_0xd587[1964]]= function(_0x5c29x2){for(var _0x5c29x3=[],_0x5c29x4=0;_0x5c29x4< _0x5c29x2[_0xd587[67]];_0x5c29x4++){for(var _0x5c29x5=_0x5c29x2[_0x5c29x4],_0x5c29x9=!0,_0x5c29xa=this[_0xd587[1197]](_0x5c29x5);null!= _0x5c29xa;){if(0<= mxUtils[_0xd587[2]](_0x5c29x2,_0x5c29xa)){_0x5c29x9= !1;break};_0x5c29xa= this[_0xd587[1197]](_0x5c29xa)};_0x5c29x9&& _0x5c29x3[_0xd587[207]](_0x5c29x5)};return _0x5c29x3};mxGraphModel[_0xd587[202]][_0xd587[1193]]= function(_0x5c29x2){return null!= _0x5c29x2?_0x5c29x2[_0xd587[1193]]():!1};mxGraphModel[_0xd587[202]][_0xd587[250]]= function(_0x5c29x2){return null!= _0x5c29x2?_0x5c29x2[_0xd587[250]]():!1};mxGraphModel[_0xd587[202]][_0xd587[1965]]= function(_0x5c29x2){return null!= _0x5c29x2?_0x5c29x2[_0xd587[1965]]():!1};mxGraphModel[_0xd587[202]][_0xd587[433]]= function(_0x5c29x2){return null!= _0x5c29x2?_0x5c29x2[_0xd587[433]]():null};mxGraphModel[_0xd587[202]][_0xd587[1966]]= function(_0x5c29x2,_0x5c29x3){this[_0xd587[350]]( new mxValueChange(this,_0x5c29x2,_0x5c29x3));return _0x5c29x3};mxGraphModel[_0xd587[202]][_0xd587[1967]]= function(_0x5c29x2,_0x5c29x3){return _0x5c29x2[_0xd587[1968]](_0x5c29x3)};mxGraphModel[_0xd587[202]][_0xd587[1721]]= function(_0x5c29x2,_0x5c29x3){return null!= _0x5c29x2?_0x5c29x2[_0xd587[1721]]():null};mxGraphModel[_0xd587[202]][_0xd587[1724]]= function(_0x5c29x2,_0x5c29x3){_0x5c29x3!= this[_0xd587[1721]](_0x5c29x2)&& this[_0xd587[350]]( new mxGeometryChange(this,_0x5c29x2,_0x5c29x3));return _0x5c29x3};mxGraphModel[_0xd587[202]][_0xd587[1969]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=this[_0xd587[1721]](_0x5c29x2);_0x5c29x2[_0xd587[1724]](_0x5c29x3);return _0x5c29x4};mxGraphModel[_0xd587[202]][_0xd587[474]]= function(_0x5c29x2){return null!= _0x5c29x2?_0x5c29x2[_0xd587[474]]():null};mxGraphModel[_0xd587[202]][_0xd587[475]]= function(_0x5c29x2,_0x5c29x3){_0x5c29x3!= this[_0xd587[474]](_0x5c29x2)&& this[_0xd587[350]]( new mxStyleChange(this,_0x5c29x2,_0x5c29x3));return _0x5c29x3};mxGraphModel[_0xd587[202]][_0xd587[1970]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=this[_0xd587[474]](_0x5c29x2);_0x5c29x2[_0xd587[475]](_0x5c29x3);return _0x5c29x4};mxGraphModel[_0xd587[202]][_0xd587[1971]]= function(_0x5c29x2){return null!= _0x5c29x2?_0x5c29x2[_0xd587[1971]]():!1};mxGraphModel[_0xd587[202]][_0xd587[1972]]= function(_0x5c29x2,_0x5c29x3){_0x5c29x3!= this[_0xd587[1971]](_0x5c29x2)&& this[_0xd587[350]]( new mxCollapseChange(this,_0x5c29x2,_0x5c29x3));return _0x5c29x3};mxGraphModel[_0xd587[202]][_0xd587[1973]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=this[_0xd587[1971]](_0x5c29x2);_0x5c29x2[_0xd587[1972]](_0x5c29x3);return _0x5c29x4};mxGraphModel[_0xd587[202]][_0xd587[174]]= function(_0x5c29x2){return null!= _0x5c29x2?_0x5c29x2[_0xd587[174]]():!1};mxGraphModel[_0xd587[202]][_0xd587[175]]= function(_0x5c29x2,_0x5c29x3){_0x5c29x3!= this[_0xd587[174]](_0x5c29x2)&& this[_0xd587[350]]( new mxVisibleChange(this,_0x5c29x2,_0x5c29x3));return _0x5c29x3};mxGraphModel[_0xd587[202]][_0xd587[1974]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=this[_0xd587[174]](_0x5c29x2);_0x5c29x2[_0xd587[175]](_0x5c29x3);return _0x5c29x4};mxGraphModel[_0xd587[202]][_0xd587[350]]= function(_0x5c29x2){_0x5c29x2[_0xd587[350]]();this[_0xd587[473]]();this[_0xd587[1926]][_0xd587[99]](_0x5c29x2);this[_0xd587[746]]( new mxEventObject(mxEvent.EXECUTE,_0xd587[826],_0x5c29x2));this[_0xd587[746]]( new mxEventObject(mxEvent.EXECUTED,_0xd587[826],_0x5c29x2));this[_0xd587[476]]()};mxGraphModel[_0xd587[202]][_0xd587[473]]= function(){this[_0xd587[1932]]++;this[_0xd587[746]]( new mxEventObject(mxEvent.BEGIN_UPDATE));1== this[_0xd587[1932]]&& this[_0xd587[746]]( new mxEventObject(mxEvent.START_EDIT))};mxGraphModel[_0xd587[202]][_0xd587[476]]= function(){this[_0xd587[1932]]--;0== this[_0xd587[1932]]&& this[_0xd587[746]]( new mxEventObject(mxEvent.END_EDIT));if(!this[_0xd587[1933]]){this[_0xd587[1933]]= 0== this[_0xd587[1932]];this[_0xd587[746]]( new mxEventObject(mxEvent.END_UPDATE,_0xd587[1061],this[_0xd587[1926]]));try{if(this[_0xd587[1933]]&& !this[_0xd587[1926]][_0xd587[1107]]()){this[_0xd587[746]]( new mxEventObject(mxEvent.BEFORE_UNDO,_0xd587[1061],this[_0xd587[1926]]));var _0x5c29x2=this[_0xd587[1926]];this[_0xd587[1926]]= this[_0xd587[1096]]();_0x5c29x2[_0xd587[827]]();this[_0xd587[746]]( new mxEventObject(mxEvent.UNDO,_0xd587[1061],_0x5c29x2))}}finally{this[_0xd587[1933]]= !1}}};mxGraphModel[_0xd587[202]][_0xd587[1096]]= function(){var _0x5c29x2= new mxUndoableEdit(this,!0);_0x5c29x2[_0xd587[827]]= function(){_0x5c29x2[_0xd587[1097]][_0xd587[746]]( new mxEventObject(mxEvent.CHANGE,_0xd587[1061],_0x5c29x2,_0xd587[1065],_0x5c29x2[_0xd587[1065]]));_0x5c29x2[_0xd587[1097]][_0xd587[746]]( new mxEventObject(mxEvent.NOTIFY,_0xd587[1061],_0x5c29x2,_0xd587[1065],_0x5c29x2[_0xd587[1065]]))};return _0x5c29x2};mxGraphModel[_0xd587[202]][_0xd587[1975]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){_0x5c29x4= null!= _0x5c29x4?_0x5c29x4:!0;this[_0xd587[473]]();try{var _0x5c29x5={};this[_0xd587[1976]](_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5);for(var _0x5c29x9 in _0x5c29x5){var _0x5c29xa=_0x5c29x5[_0x5c29x9],_0x5c29x12=this[_0xd587[1709]](_0x5c29xa,!0);null!= _0x5c29x12&& (_0x5c29x12= _0x5c29x5[mxCellPath[_0xd587[385]](_0x5c29x12)],this[_0xd587[1957]](_0x5c29xa,_0x5c29x12,!0));_0x5c29x12= this[_0xd587[1709]](_0x5c29xa,!1);null!= _0x5c29x12&& (_0x5c29x12= _0x5c29x5[mxCellPath[_0xd587[385]](_0x5c29x12)],this[_0xd587[1957]](_0x5c29xa,_0x5c29x12,!1))}}finally{this[_0xd587[476]]()}};mxGraphModel[_0xd587[202]][_0xd587[1976]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){this[_0xd587[473]]();try{for(var _0x5c29x9=_0x5c29x2[_0xd587[262]](),_0x5c29xa=0;_0x5c29xa< _0x5c29x9;_0x5c29xa++){var _0x5c29x12=_0x5c29x2[_0xd587[263]](_0x5c29xa);if(_0xd587[279]== typeof _0x5c29x12[_0xd587[1103]]){var _0x5c29x13=_0x5c29x12[_0xd587[1103]](),_0x5c29x14=null!= _0x5c29x13&& (!this[_0xd587[250]](_0x5c29x12)|| !_0x5c29x4)?this[_0xd587[736]](_0x5c29x13):null;if(null== _0x5c29x14){var _0x5c29x15=_0x5c29x12[_0xd587[238]]();_0x5c29x15[_0xd587[1945]](_0x5c29x13);_0x5c29x15[_0xd587[1957]](_0x5c29x12[_0xd587[1709]](!0),!0);_0x5c29x15[_0xd587[1957]](_0x5c29x12[_0xd587[1709]](!1),!1);_0x5c29x14= _0x5c29x3[_0xd587[1937]](_0x5c29x15);this[_0xd587[1941]](_0x5c29x14)};_0x5c29x5[mxCellPath[_0xd587[385]](_0x5c29x12)]= _0x5c29x14;this[_0xd587[1976]](_0x5c29x12,_0x5c29x14,_0x5c29x4,_0x5c29x5)}}}finally{this[_0xd587[476]]()}};mxGraphModel[_0xd587[202]][_0xd587[1977]]= function(_0x5c29x2){var _0x5c29x3=[];if(null!= _0x5c29x2){for(var _0x5c29x4={},_0x5c29x5=0;_0x5c29x5< _0x5c29x2[_0xd587[67]];_0x5c29x5++){var _0x5c29x9=this[_0xd587[1197]](_0x5c29x2[_0x5c29x5]);if(null!= _0x5c29x9){var _0x5c29xa=mxCellPath[_0xd587[385]](_0x5c29x9);null== _0x5c29x4[_0x5c29xa]&& (_0x5c29x4[_0x5c29xa]= _0x5c29x9,_0x5c29x3[_0xd587[207]](_0x5c29x9))}}};return _0x5c29x3};mxGraphModel[_0xd587[202]][_0xd587[1978]]= function(_0x5c29x2){return null!= _0x5c29x2?this[_0xd587[899]]([_0x5c29x2],!0)[0]:null};mxGraphModel[_0xd587[202]][_0xd587[899]]= function(_0x5c29x2,_0x5c29x3){for(var _0x5c29x4={},_0x5c29x5=[],_0x5c29x9=0;_0x5c29x9< _0x5c29x2[_0xd587[67]];_0x5c29x9++){null!= _0x5c29x2[_0x5c29x9]?_0x5c29x5[_0xd587[207]](this[_0xd587[1979]](_0x5c29x2[_0x5c29x9],_0x5c29x4,_0x5c29x3)):_0x5c29x5[_0xd587[207]](null)};for(_0x5c29x9= 0;_0x5c29x9< _0x5c29x5[_0xd587[67]];_0x5c29x9++){null!= _0x5c29x5[_0x5c29x9]&& this[_0xd587[1980]](_0x5c29x5[_0x5c29x9],_0x5c29x2[_0x5c29x9],_0x5c29x4)};return _0x5c29x5};mxGraphModel[_0xd587[202]][_0xd587[1979]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){var _0x5c29x5=this[_0xd587[1981]](_0x5c29x2);_0x5c29x3[mxObjectIdentity[_0xd587[203]](_0x5c29x2)]= _0x5c29x5;if(_0x5c29x4){_0x5c29x4= this[_0xd587[262]](_0x5c29x2);for(var _0x5c29x9=0;_0x5c29x9< _0x5c29x4;_0x5c29x9++){var _0x5c29xa=this[_0xd587[1979]](this[_0xd587[263]](_0x5c29x2,_0x5c29x9),_0x5c29x3,!0);_0x5c29x5[_0xd587[1937]](_0x5c29xa)}};return _0x5c29x5};mxGraphModel[_0xd587[202]][_0xd587[1981]]= function(_0x5c29x2){return _0x5c29x2[_0xd587[238]]()};mxGraphModel[_0xd587[202]][_0xd587[1980]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){var _0x5c29x5=this[_0xd587[1709]](_0x5c29x3,!0);null!= _0x5c29x5&& (_0x5c29x5= _0x5c29x4[mxObjectIdentity[_0xd587[203]](_0x5c29x5)],null!= _0x5c29x5&& _0x5c29x5[_0xd587[1960]](_0x5c29x2,!0));_0x5c29x5= this[_0xd587[1709]](_0x5c29x3,!1);null!= _0x5c29x5&& (_0x5c29x5= _0x5c29x4[mxObjectIdentity[_0xd587[203]](_0x5c29x5)],null!= _0x5c29x5&& _0x5c29x5[_0xd587[1960]](_0x5c29x2,!1));for(var _0x5c29x5=this[_0xd587[262]](_0x5c29x2),_0x5c29x9=0;_0x5c29x9< _0x5c29x5;_0x5c29x9++){this[_0xd587[1980]](this[_0xd587[263]](_0x5c29x2,_0x5c29x9),this[_0xd587[263]](_0x5c29x3,_0x5c29x9),_0x5c29x4)}};function mxRootChange(_0x5c29x2,_0x5c29x3){this[_0xd587[251]]= _0x5c29x2;this[_0xd587[257]]= this[_0xd587[813]]= _0x5c29x3}mxRootChange[_0xd587[202]][_0xd587[350]]= function(){this[_0xd587[813]]= this[_0xd587[257]];this[_0xd587[257]]= this[_0xd587[251]][_0xd587[1940]](this[_0xd587[257]])};function mxChildChange(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){this[_0xd587[251]]= _0x5c29x2;this[_0xd587[257]]= this[_0xd587[1101]]= _0x5c29x3;this[_0xd587[247]]= _0x5c29x4;this[_0xd587[1982]]= this[_0xd587[1983]]= _0x5c29x5}mxChildChange[_0xd587[202]][_0xd587[350]]= function(){var _0x5c29x2=this[_0xd587[251]][_0xd587[1197]](this[_0xd587[247]]),_0x5c29x3=null!= _0x5c29x2?_0x5c29x2[_0xd587[1738]](this[_0xd587[247]]):0;null== this[_0xd587[257]]&& this[_0xd587[807]](this[_0xd587[247]],!1);_0x5c29x2= this[_0xd587[251]][_0xd587[1952]](this[_0xd587[247]],this[_0xd587[257]],this[_0xd587[1982]]);null!= this[_0xd587[257]]&& this[_0xd587[807]](this[_0xd587[247]],!0);this[_0xd587[1101]]= this[_0xd587[257]];this[_0xd587[257]]= _0x5c29x2;this[_0xd587[1983]]= this[_0xd587[1982]];this[_0xd587[1982]]= _0x5c29x3};mxChildChange[_0xd587[202]][_0xd587[807]]= function(_0x5c29x2,_0x5c29x3){_0x5c29x3= null!= _0x5c29x3?_0x5c29x3:!0;var _0x5c29x4=_0x5c29x2[_0xd587[1709]](!0),_0x5c29x5=_0x5c29x2[_0xd587[1709]](!1);null!= _0x5c29x4&& (_0x5c29x3?this[_0xd587[251]][_0xd587[1959]](_0x5c29x2,_0x5c29x4,!0):this[_0xd587[251]][_0xd587[1959]](_0x5c29x2,null,!0));null!= _0x5c29x5&& (_0x5c29x3?this[_0xd587[251]][_0xd587[1959]](_0x5c29x2,_0x5c29x5,!1):this[_0xd587[251]][_0xd587[1959]](_0x5c29x2,null,!1));_0x5c29x2[_0xd587[1957]](_0x5c29x4,!0);_0x5c29x2[_0xd587[1957]](_0x5c29x5,!1);_0x5c29x4= this[_0xd587[251]][_0xd587[262]](_0x5c29x2);for(_0x5c29x5= 0;_0x5c29x5< _0x5c29x4;_0x5c29x5++){this[_0xd587[807]](this[_0xd587[251]][_0xd587[263]](_0x5c29x2,_0x5c29x5),_0x5c29x3)}};function mxTerminalChange(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){this[_0xd587[251]]= _0x5c29x2;this[_0xd587[246]]= _0x5c29x3;this[_0xd587[257]]= this[_0xd587[1984]]= _0x5c29x4;this[_0xd587[1097]]= _0x5c29x5}mxTerminalChange[_0xd587[202]][_0xd587[350]]= function(){this[_0xd587[1984]]= this[_0xd587[257]];this[_0xd587[257]]= this[_0xd587[251]][_0xd587[1959]](this[_0xd587[246]],this[_0xd587[257]],this[_0xd587[1097]])};function mxValueChange(_0x5c29x2,_0x5c29x3,_0x5c29x4){this[_0xd587[251]]= _0x5c29x2;this[_0xd587[246]]= _0x5c29x3;this[_0xd587[257]]= this[_0xd587[131]]= _0x5c29x4}mxValueChange[_0xd587[202]][_0xd587[350]]= function(){this[_0xd587[131]]= this[_0xd587[257]];this[_0xd587[257]]= this[_0xd587[251]][_0xd587[1967]](this[_0xd587[246]],this[_0xd587[257]])};function mxStyleChange(_0x5c29x2,_0x5c29x3,_0x5c29x4){this[_0xd587[251]]= _0x5c29x2;this[_0xd587[246]]= _0x5c29x3;this[_0xd587[257]]= this[_0xd587[124]]= _0x5c29x4}mxStyleChange[_0xd587[202]][_0xd587[350]]= function(){this[_0xd587[124]]= this[_0xd587[257]];this[_0xd587[257]]= this[_0xd587[251]][_0xd587[1970]](this[_0xd587[246]],this[_0xd587[257]])};function mxGeometryChange(_0x5c29x2,_0x5c29x3,_0x5c29x4){this[_0xd587[251]]= _0x5c29x2;this[_0xd587[246]]= _0x5c29x3;this[_0xd587[257]]= this[_0xd587[256]]= _0x5c29x4}mxGeometryChange[_0xd587[202]][_0xd587[350]]= function(){this[_0xd587[256]]= this[_0xd587[257]];this[_0xd587[257]]= this[_0xd587[251]][_0xd587[1969]](this[_0xd587[246]],this[_0xd587[257]])};function mxCollapseChange(_0x5c29x2,_0x5c29x3,_0x5c29x4){this[_0xd587[251]]= _0x5c29x2;this[_0xd587[246]]= _0x5c29x3;this[_0xd587[257]]= this[_0xd587[1985]]= _0x5c29x4}mxCollapseChange[_0xd587[202]][_0xd587[350]]= function(){this[_0xd587[1985]]= this[_0xd587[257]];this[_0xd587[257]]= this[_0xd587[251]][_0xd587[1973]](this[_0xd587[246]],this[_0xd587[257]])};function mxVisibleChange(_0x5c29x2,_0x5c29x3,_0x5c29x4){this[_0xd587[251]]= _0x5c29x2;this[_0xd587[246]]= _0x5c29x3;this[_0xd587[257]]= this[_0xd587[189]]= _0x5c29x4}mxVisibleChange[_0xd587[202]][_0xd587[350]]= function(){this[_0xd587[189]]= this[_0xd587[257]];this[_0xd587[257]]= this[_0xd587[251]][_0xd587[1974]](this[_0xd587[246]],this[_0xd587[257]])};function mxCellAttributeChange(_0x5c29x2,_0x5c29x3,_0x5c29x4){this[_0xd587[246]]= _0x5c29x2;this[_0xd587[1986]]= _0x5c29x3;this[_0xd587[257]]= this[_0xd587[131]]= _0x5c29x4}mxCellAttributeChange[_0xd587[202]][_0xd587[350]]= function(){var _0x5c29x2=this[_0xd587[246]][_0xd587[284]](this[_0xd587[1986]]);null== this[_0xd587[257]]?this[_0xd587[246]][_0xd587[131]][_0xd587[1390]](this[_0xd587[1986]]):this[_0xd587[246]][_0xd587[57]](this[_0xd587[1986]],this[_0xd587[257]]);this[_0xd587[257]]= _0x5c29x2};function mxCell(_0x5c29x2,_0x5c29x3,_0x5c29x4){this[_0xd587[131]]= _0x5c29x2;this[_0xd587[1724]](_0x5c29x3);this[_0xd587[475]](_0x5c29x4);if(null!= this[_0xd587[1987]]){this[_0xd587[1987]]()}}mxCell[_0xd587[202]][_0xd587[1363]]= null;mxCell[_0xd587[202]][_0xd587[131]]= null;mxCell[_0xd587[202]][_0xd587[256]]= null;mxCell[_0xd587[202]][_0xd587[124]]= null;mxCell[_0xd587[202]][_0xd587[1988]]= !1;mxCell[_0xd587[202]][_0xd587[1989]]= !1;mxCell[_0xd587[202]][_0xd587[1990]]= !0;mxCell[_0xd587[202]][_0xd587[189]]= !0;mxCell[_0xd587[202]][_0xd587[1985]]= !1;mxCell[_0xd587[202]][_0xd587[1101]]= null;mxCell[_0xd587[202]][_0xd587[1097]]= null;mxCell[_0xd587[202]][_0xd587[772]]= null;mxCell[_0xd587[202]][_0xd587[1954]]= null;mxCell[_0xd587[202]][_0xd587[1842]]= null;mxCell[_0xd587[202]][_0xd587[1991]]= _0xd587[1992][_0xd587[224]](_0xd587[185]);mxCell[_0xd587[202]][_0xd587[1103]]= function(){return this[_0xd587[1363]]};mxCell[_0xd587[202]][_0xd587[1945]]= function(_0x5c29x2){this[_0xd587[1363]]= _0x5c29x2};mxCell[_0xd587[202]][_0xd587[433]]= function(){return this[_0xd587[131]]};mxCell[_0xd587[202]][_0xd587[1966]]= function(_0x5c29x2){this[_0xd587[131]]= _0x5c29x2};mxCell[_0xd587[202]][_0xd587[1968]]= function(_0x5c29x2){var _0x5c29x3=this[_0xd587[433]]();this[_0xd587[1966]](_0x5c29x2);return _0x5c29x3};mxCell[_0xd587[202]][_0xd587[1721]]= function(){return this[_0xd587[256]]};mxCell[_0xd587[202]][_0xd587[1724]]= function(_0x5c29x2){this[_0xd587[256]]= _0x5c29x2};mxCell[_0xd587[202]][_0xd587[474]]= function(){return this[_0xd587[124]]};mxCell[_0xd587[202]][_0xd587[475]]= function(_0x5c29x2){this[_0xd587[124]]= _0x5c29x2};mxCell[_0xd587[202]][_0xd587[1193]]= function(){return this[_0xd587[1988]]};mxCell[_0xd587[202]][_0xd587[1993]]= function(_0x5c29x2){this[_0xd587[1988]]= _0x5c29x2};mxCell[_0xd587[202]][_0xd587[250]]= function(){return this[_0xd587[1989]]};mxCell[_0xd587[202]][_0xd587[1994]]= function(_0x5c29x2){this[_0xd587[1989]]= _0x5c29x2};mxCell[_0xd587[202]][_0xd587[1965]]= function(){return this[_0xd587[1990]]};mxCell[_0xd587[202]][_0xd587[1995]]= function(_0x5c29x2){this[_0xd587[1990]]= _0x5c29x2};mxCell[_0xd587[202]][_0xd587[174]]= function(){return this[_0xd587[189]]};mxCell[_0xd587[202]][_0xd587[175]]= function(_0x5c29x2){this[_0xd587[189]]= _0x5c29x2};mxCell[_0xd587[202]][_0xd587[1971]]= function(){return this[_0xd587[1985]]};mxCell[_0xd587[202]][_0xd587[1972]]= function(_0x5c29x2){this[_0xd587[1985]]= _0x5c29x2};mxCell[_0xd587[202]][_0xd587[1197]]= function(){return this[_0xd587[1101]]};mxCell[_0xd587[202]][_0xd587[1996]]= function(_0x5c29x2){this[_0xd587[1101]]= _0x5c29x2};mxCell[_0xd587[202]][_0xd587[1709]]= function(_0x5c29x2){return _0x5c29x2?this[_0xd587[1097]]:this[_0xd587[772]]};mxCell[_0xd587[202]][_0xd587[1957]]= function(_0x5c29x2,_0x5c29x3){_0x5c29x3?this[_0xd587[1097]]= _0x5c29x2:this[_0xd587[772]]= _0x5c29x2;return _0x5c29x2};mxCell[_0xd587[202]][_0xd587[262]]= function(){return null== this[_0xd587[1954]]?0:this[_0xd587[1954]][_0xd587[67]]};mxCell[_0xd587[202]][_0xd587[1738]]= function(_0x5c29x2){return mxUtils[_0xd587[2]](this[_0xd587[1954]],_0x5c29x2)};mxCell[_0xd587[202]][_0xd587[263]]= function(_0x5c29x2){return null== this[_0xd587[1954]]?null:this[_0xd587[1954]][_0x5c29x2]};mxCell[_0xd587[202]][_0xd587[1937]]= function(_0x5c29x2,_0x5c29x3){null!= _0x5c29x2&& (null== _0x5c29x3&& (_0x5c29x3= this[_0xd587[262]](),_0x5c29x2[_0xd587[1197]]()== this&& _0x5c29x3--),_0x5c29x2[_0xd587[1997]](),_0x5c29x2[_0xd587[1996]](this),null== this[_0xd587[1954]]?(this[_0xd587[1954]]= [],this[_0xd587[1954]][_0xd587[207]](_0x5c29x2)):this[_0xd587[1954]][_0xd587[300]](_0x5c29x3,0,_0x5c29x2));return _0x5c29x2};mxCell[_0xd587[202]][_0xd587[205]]= function(_0x5c29x2){var _0x5c29x3=null;null!= this[_0xd587[1954]]&& 0<= _0x5c29x2&& (_0x5c29x3= this[_0xd587[263]](_0x5c29x2),null!= _0x5c29x3&& (this[_0xd587[1954]][_0xd587[300]](_0x5c29x2,1),_0x5c29x3[_0xd587[1996]](null)));return _0x5c29x3};mxCell[_0xd587[202]][_0xd587[1997]]= function(){if(null!= this[_0xd587[1101]]){var _0x5c29x2=this[_0xd587[1101]][_0xd587[1738]](this);this[_0xd587[1101]][_0xd587[205]](_0x5c29x2)}};mxCell[_0xd587[202]][_0xd587[1707]]= function(){return null== this[_0xd587[1842]]?0:this[_0xd587[1842]][_0xd587[67]]};mxCell[_0xd587[202]][_0xd587[1998]]= function(_0x5c29x2){return mxUtils[_0xd587[2]](this[_0xd587[1842]],_0x5c29x2)};mxCell[_0xd587[202]][_0xd587[1708]]= function(_0x5c29x2){return null== this[_0xd587[1842]]?null:this[_0xd587[1842]][_0x5c29x2]};mxCell[_0xd587[202]][_0xd587[1960]]= function(_0x5c29x2,_0x5c29x3){if(null!= _0x5c29x2&& (_0x5c29x2[_0xd587[1999]](_0x5c29x3),_0x5c29x2[_0xd587[1957]](this,_0x5c29x3),null== this[_0xd587[1842]]|| _0x5c29x2[_0xd587[1709]](!_0x5c29x3) != this|| 0> mxUtils[_0xd587[2]](this[_0xd587[1842]],_0x5c29x2))){null== this[_0xd587[1842]]&& (this[_0xd587[1842]]= []),this[_0xd587[1842]][_0xd587[207]](_0x5c29x2)};return _0x5c29x2};mxCell[_0xd587[202]][_0xd587[1961]]= function(_0x5c29x2,_0x5c29x3){if(null!= _0x5c29x2){if(_0x5c29x2[_0xd587[1709]](!_0x5c29x3) != this&& null!= this[_0xd587[1842]]){var _0x5c29x4=this[_0xd587[1998]](_0x5c29x2);0<= _0x5c29x4&& this[_0xd587[1842]][_0xd587[300]](_0x5c29x4,1)};_0x5c29x2[_0xd587[1957]](null,_0x5c29x3)};return _0x5c29x2};mxCell[_0xd587[202]][_0xd587[1999]]= function(_0x5c29x2){var _0x5c29x3=this[_0xd587[1709]](_0x5c29x2);null!= _0x5c29x3&& _0x5c29x3[_0xd587[1961]](this,_0x5c29x2)};mxCell[_0xd587[202]][_0xd587[284]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=this[_0xd587[433]]();return (null!= _0x5c29x4&& _0x5c29x4[_0xd587[288]]== mxConstants[_0xd587[289]]?_0x5c29x4[_0xd587[284]](_0x5c29x2):null)|| _0x5c29x3};mxCell[_0xd587[202]][_0xd587[57]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=this[_0xd587[433]]();null!= _0x5c29x4&& _0x5c29x4[_0xd587[288]]== mxConstants[_0xd587[289]]&& _0x5c29x4[_0xd587[57]](_0x5c29x2,_0x5c29x3)};mxCell[_0xd587[202]][_0xd587[238]]= function(){var _0x5c29x2=mxUtils[_0xd587[238]](this,this[_0xd587[1991]]);_0x5c29x2[_0xd587[1966]](this[_0xd587[2000]]());return _0x5c29x2};mxCell[_0xd587[202]][_0xd587[2000]]= function(){var _0x5c29x2=this[_0xd587[433]]();null!= _0x5c29x2&& (_0xd587[279]== typeof _0x5c29x2[_0xd587[238]]?_0x5c29x2= _0x5c29x2[_0xd587[238]]():isNaN(_0x5c29x2[_0xd587[288]])|| (_0x5c29x2= _0x5c29x2[_0xd587[511]](!0)));return _0x5c29x2};function mxGeometry(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){mxRectangle[_0xd587[239]](this,_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5)}mxGeometry[_0xd587[202]]= new mxRectangle;mxGeometry[_0xd587[202]][_0xd587[196]]= mxGeometry;mxGeometry[_0xd587[202]][_0xd587[2001]]= !0;mxGeometry[_0xd587[202]][_0xd587[2002]]= null;mxGeometry[_0xd587[202]][_0xd587[2003]]= null;mxGeometry[_0xd587[202]][_0xd587[2004]]= null;mxGeometry[_0xd587[202]][_0xd587[1525]]= null;mxGeometry[_0xd587[202]][_0xd587[1368]]= null;mxGeometry[_0xd587[202]][_0xd587[1500]]= !1;mxGeometry[_0xd587[202]][_0xd587[2005]]= function(){if(null!= this[_0xd587[2002]]){var _0x5c29x2= new mxRectangle(this[_0xd587[235]],this[_0xd587[236]],this[_0xd587[117]],this[_0xd587[119]]);this[_0xd587[235]]= this[_0xd587[2002]][_0xd587[235]];this[_0xd587[236]]= this[_0xd587[2002]][_0xd587[236]];this[_0xd587[117]]= this[_0xd587[2002]][_0xd587[117]];this[_0xd587[119]]= this[_0xd587[2002]][_0xd587[119]];this[_0xd587[2002]]= _0x5c29x2}};mxGeometry[_0xd587[202]][_0xd587[2006]]= function(_0x5c29x2){return _0x5c29x2?this[_0xd587[2003]]:this[_0xd587[2004]]};mxGeometry[_0xd587[202]][_0xd587[2007]]= function(_0x5c29x2,_0x5c29x3){_0x5c29x3?this[_0xd587[2003]]= _0x5c29x2:this[_0xd587[2004]]= _0x5c29x2;return _0x5c29x2};mxGeometry[_0xd587[202]][_0xd587[513]]= function(_0x5c29x2,_0x5c29x3){this[_0xd587[238]]();this[_0xd587[1500]]|| (this[_0xd587[235]]+= _0x5c29x2,this[_0xd587[236]]+= _0x5c29x3);null!= this[_0xd587[2003]]&& (this[_0xd587[2003]][_0xd587[235]]+= _0x5c29x2,this[_0xd587[2003]][_0xd587[236]]+= _0x5c29x3);null!= this[_0xd587[2004]]&& (this[_0xd587[2004]][_0xd587[235]]+= _0x5c29x2,this[_0xd587[2004]][_0xd587[236]]+= _0x5c29x3);if(this[_0xd587[2001]]&& null!= this[_0xd587[1525]]){for(var _0x5c29x4=this[_0xd587[1525]][_0xd587[67]],_0x5c29x5=0;_0x5c29x5< _0x5c29x4;_0x5c29x5++){var _0x5c29x9=this[_0xd587[1525]][_0x5c29x5];null!= _0x5c29x9&& (_0x5c29x9[_0xd587[235]]+= _0x5c29x2,_0x5c29x9[_0xd587[236]]+= _0x5c29x3)}}};var mxCellPath={PATH_SEPARATOR:_0xd587[87],create:function(_0x5c29x2){var _0x5c29x3=_0xd587[110];if(null!= _0x5c29x2){for(var _0x5c29x4=_0x5c29x2[_0xd587[1197]]();null!= _0x5c29x4;){_0x5c29x3= _0x5c29x4[_0xd587[1738]](_0x5c29x2)+ mxCellPath[_0xd587[1950]]+ _0x5c29x3,_0x5c29x2= _0x5c29x4,_0x5c29x4= _0x5c29x2[_0xd587[1197]]()}};_0x5c29x2= _0x5c29x3[_0xd587[67]];1< _0x5c29x2&& (_0x5c29x3= _0x5c29x3[_0xd587[85]](0,_0x5c29x2- 1));return _0x5c29x3},getParentPath:function(_0x5c29x2){if(null!= _0x5c29x2){var _0x5c29x3=_0x5c29x2[_0xd587[1122]](mxCellPath.PATH_SEPARATOR);if(0<= _0x5c29x3){return _0x5c29x2[_0xd587[85]](0,_0x5c29x3)};if(0< _0x5c29x2[_0xd587[67]]){return _0xd587[110]}};return null},resolve:function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=_0x5c29x2;if(null!= _0x5c29x3){for(var _0x5c29x5=_0x5c29x3[_0xd587[224]](mxCellPath.PATH_SEPARATOR),_0x5c29x9=0;_0x5c29x9< _0x5c29x5[_0xd587[67]];_0x5c29x9++){_0x5c29x4= _0x5c29x4[_0xd587[263]](parseInt(_0x5c29x5[_0x5c29x9]))}};return _0x5c29x4},compare:function(_0x5c29x2,_0x5c29x3){for(var _0x5c29x4=Math[_0xd587[243]](_0x5c29x2[_0xd587[67]],_0x5c29x3[_0xd587[67]]),_0x5c29x5=0,_0x5c29x9=0;_0x5c29x9< _0x5c29x4;_0x5c29x9++){if(_0x5c29x2[_0x5c29x9]!= _0x5c29x3[_0x5c29x9]){0== _0x5c29x2[_0x5c29x9][_0xd587[67]]|| 0== _0x5c29x3[_0x5c29x9][_0xd587[67]]?_0x5c29x5= _0x5c29x2[_0x5c29x9]== _0x5c29x3[_0x5c29x9]?0:_0x5c29x2[_0x5c29x9]> _0x5c29x3[_0x5c29x9]?1:-1:(_0x5c29x4= parseInt(_0x5c29x2[_0x5c29x9]),_0x5c29x9= parseInt(_0x5c29x3[_0x5c29x9]),_0x5c29x5= _0x5c29x4== _0x5c29x9?0:_0x5c29x4> _0x5c29x9?1:-1);break}};0== _0x5c29x5&& (_0x5c29x4= _0x5c29x2[_0xd587[67]],_0x5c29x9= _0x5c29x3[_0xd587[67]],_0x5c29x4!= _0x5c29x9&& (_0x5c29x5= _0x5c29x4> _0x5c29x9?1:-1));return _0x5c29x5}},mxPerimeter={RectanglePerimeter:function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){_0x5c29x3= _0x5c29x2[_0xd587[241]]();var _0x5c29x9=_0x5c29x2[_0xd587[242]](),_0x5c29xa=Math[_0xd587[429]](_0x5c29x4[_0xd587[236]]- _0x5c29x9,_0x5c29x4[_0xd587[235]]- _0x5c29x3),_0x5c29x12= new mxPoint(0,0),_0x5c29x13=Math[_0xd587[424]],_0x5c29x14=Math[_0xd587[424]]/ 2- _0x5c29xa,_0x5c29x15=Math[_0xd587[429]](_0x5c29x2[_0xd587[119]],_0x5c29x2[_0xd587[117]]);_0x5c29xa< -_0x5c29x13+ _0x5c29x15|| _0x5c29xa> _0x5c29x13- _0x5c29x15?(_0x5c29x12[_0xd587[235]]= _0x5c29x2[_0xd587[235]],_0x5c29x12[_0xd587[236]]= _0x5c29x9- _0x5c29x2[_0xd587[117]]* Math[_0xd587[2008]](_0x5c29xa)/ 2):_0x5c29xa< -_0x5c29x15?(_0x5c29x12[_0xd587[236]]= _0x5c29x2[_0xd587[236]],_0x5c29x12[_0xd587[235]]= _0x5c29x3- _0x5c29x2[_0xd587[119]]* Math[_0xd587[2008]](_0x5c29x14)/ 2):_0x5c29xa< _0x5c29x15?(_0x5c29x12[_0xd587[235]]= _0x5c29x2[_0xd587[235]]+ _0x5c29x2[_0xd587[117]],_0x5c29x12[_0xd587[236]]= _0x5c29x9+ _0x5c29x2[_0xd587[117]]* Math[_0xd587[2008]](_0x5c29xa)/ 2):(_0x5c29x12[_0xd587[236]]= _0x5c29x2[_0xd587[236]]+ _0x5c29x2[_0xd587[119]],_0x5c29x12[_0xd587[235]]= _0x5c29x3+ _0x5c29x2[_0xd587[119]]* Math[_0xd587[2008]](_0x5c29x14)/ 2);_0x5c29x5&& (_0x5c29x4[_0xd587[235]]>= _0x5c29x2[_0xd587[235]]&& _0x5c29x4[_0xd587[235]]<= _0x5c29x2[_0xd587[235]]+ _0x5c29x2[_0xd587[117]]?_0x5c29x12[_0xd587[235]]= _0x5c29x4[_0xd587[235]]:_0x5c29x4[_0xd587[236]]>= _0x5c29x2[_0xd587[236]]&& _0x5c29x4[_0xd587[236]]<= _0x5c29x2[_0xd587[236]]+ _0x5c29x2[_0xd587[119]]&& (_0x5c29x12[_0xd587[236]]= _0x5c29x4[_0xd587[236]]),_0x5c29x4[_0xd587[235]]< _0x5c29x2[_0xd587[235]]?_0x5c29x12[_0xd587[235]]= _0x5c29x2[_0xd587[235]]:_0x5c29x4[_0xd587[235]]> _0x5c29x2[_0xd587[235]]+ _0x5c29x2[_0xd587[117]]&& (_0x5c29x12[_0xd587[235]]= _0x5c29x2[_0xd587[235]]+ _0x5c29x2[_0xd587[117]]),_0x5c29x4[_0xd587[236]]< _0x5c29x2[_0xd587[236]]?_0x5c29x12[_0xd587[236]]= _0x5c29x2[_0xd587[236]]:_0x5c29x4[_0xd587[236]]> _0x5c29x2[_0xd587[236]]+ _0x5c29x2[_0xd587[119]]&& (_0x5c29x12[_0xd587[236]]= _0x5c29x2[_0xd587[236]]+ _0x5c29x2[_0xd587[119]]));return _0x5c29x12},EllipsePerimeter:function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){var _0x5c29x9=_0x5c29x2[_0xd587[235]],_0x5c29xa=_0x5c29x2[_0xd587[236]],_0x5c29x12=_0x5c29x2[_0xd587[117]]/ 2,_0x5c29x13=_0x5c29x2[_0xd587[119]]/ 2,_0x5c29x14=_0x5c29x9+ _0x5c29x12,_0x5c29x15=_0x5c29xa+ _0x5c29x13;_0x5c29x3= _0x5c29x4[_0xd587[235]];_0x5c29x4= _0x5c29x4[_0xd587[236]];var _0x5c29x16=parseInt(_0x5c29x3- _0x5c29x14),_0x5c29x17=parseInt(_0x5c29x4- _0x5c29x15);if(0== _0x5c29x16&& 0!= _0x5c29x17){return new mxPoint(_0x5c29x14,_0x5c29x15+ _0x5c29x13* _0x5c29x17/ Math[_0xd587[425]](_0x5c29x17))};if(0== _0x5c29x16&& 0== _0x5c29x17){return new mxPoint(_0x5c29x3,_0x5c29x4)};if(_0x5c29x5){if(_0x5c29x4>= _0x5c29xa&& _0x5c29x4<= _0x5c29xa+ _0x5c29x2[_0xd587[119]]){return _0x5c29x2= _0x5c29x4- _0x5c29x15,_0x5c29x2= Math[_0xd587[428]](_0x5c29x12* _0x5c29x12* (1- _0x5c29x2* _0x5c29x2/ (_0x5c29x13* _0x5c29x13)))|| 0,_0x5c29x3<= _0x5c29x9&& (_0x5c29x2= -_0x5c29x2), new mxPoint(_0x5c29x14+ _0x5c29x2,_0x5c29x4)};if(_0x5c29x3>= _0x5c29x9&& _0x5c29x3<= _0x5c29x9+ _0x5c29x2[_0xd587[117]]){return _0x5c29x2= _0x5c29x3- _0x5c29x14,_0x5c29x2= Math[_0xd587[428]](_0x5c29x13* _0x5c29x13* (1- _0x5c29x2* _0x5c29x2/ (_0x5c29x12* _0x5c29x12)))|| 0,_0x5c29x4<= _0x5c29xa&& (_0x5c29x2= -_0x5c29x2), new mxPoint(_0x5c29x3,_0x5c29x15+ _0x5c29x2)}};_0x5c29x9= _0x5c29x17/ _0x5c29x16;_0x5c29x15-= _0x5c29x9* _0x5c29x14;_0x5c29xa= _0x5c29x12* _0x5c29x12* _0x5c29x9* _0x5c29x9+ _0x5c29x13* _0x5c29x13;_0x5c29x2= -2* _0x5c29x14* _0x5c29xa;_0x5c29x13= Math[_0xd587[428]](_0x5c29x2* _0x5c29x2- 4* _0x5c29xa* (_0x5c29x12* _0x5c29x12* _0x5c29x9* _0x5c29x9* _0x5c29x14* _0x5c29x14+ _0x5c29x13* _0x5c29x13* _0x5c29x14* _0x5c29x14- _0x5c29x12* _0x5c29x12* _0x5c29x13* _0x5c29x13));_0x5c29x12= (-_0x5c29x2+ _0x5c29x13) / (2* _0x5c29xa);_0x5c29x13= (-_0x5c29x2- _0x5c29x13) / (2* _0x5c29xa);_0x5c29x14= _0x5c29x9* _0x5c29x12+ _0x5c29x15;_0x5c29x15= _0x5c29x9* _0x5c29x13+ _0x5c29x15;_0x5c29x9= Math[_0xd587[428]](Math[_0xd587[2009]](_0x5c29x12- _0x5c29x3,2)+ Math[_0xd587[2009]](_0x5c29x14- _0x5c29x4,2));_0x5c29x3= Math[_0xd587[428]](Math[_0xd587[2009]](_0x5c29x13- _0x5c29x3,2)+ Math[_0xd587[2009]](_0x5c29x15- _0x5c29x4,2));_0x5c29xa= _0x5c29x4= 0;_0x5c29x9< _0x5c29x3?(_0x5c29x4= _0x5c29x12,_0x5c29xa= _0x5c29x14):(_0x5c29x4= _0x5c29x13,_0x5c29xa= _0x5c29x15);return new mxPoint(_0x5c29x4,_0x5c29xa)},RhombusPerimeter:function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){_0x5c29x3= _0x5c29x2[_0xd587[235]];var _0x5c29x9=_0x5c29x2[_0xd587[236]],_0x5c29xa=_0x5c29x2[_0xd587[117]];_0x5c29x2= _0x5c29x2[_0xd587[119]];var _0x5c29x12=_0x5c29x3+ _0x5c29xa/ 2,_0x5c29x13=_0x5c29x9+ _0x5c29x2/ 2,_0x5c29x14=_0x5c29x4[_0xd587[235]];_0x5c29x4= _0x5c29x4[_0xd587[236]];if(_0x5c29x12== _0x5c29x14){return _0x5c29x13> _0x5c29x4? new mxPoint(_0x5c29x12,_0x5c29x9): new mxPoint(_0x5c29x12,_0x5c29x9+ _0x5c29x2)};if(_0x5c29x13== _0x5c29x4){return _0x5c29x12> _0x5c29x14? new mxPoint(_0x5c29x3,_0x5c29x13): new mxPoint(_0x5c29x3+ _0x5c29xa,_0x5c29x13)};var _0x5c29x15=_0x5c29x12,_0x5c29x16=_0x5c29x13;_0x5c29x5&& (_0x5c29x14>= _0x5c29x3&& _0x5c29x14<= _0x5c29x3+ _0x5c29xa?_0x5c29x15= _0x5c29x14:_0x5c29x4>= _0x5c29x9&& _0x5c29x4<= _0x5c29x9+ _0x5c29x2&& (_0x5c29x16= _0x5c29x4));return _0x5c29x14< _0x5c29x12?_0x5c29x4< _0x5c29x13?mxUtils[_0xd587[2010]](_0x5c29x14,_0x5c29x4,_0x5c29x15,_0x5c29x16,_0x5c29x12,_0x5c29x9,_0x5c29x3,_0x5c29x13):mxUtils[_0xd587[2010]](_0x5c29x14,_0x5c29x4,_0x5c29x15,_0x5c29x16,_0x5c29x12,_0x5c29x9+ _0x5c29x2,_0x5c29x3,_0x5c29x13):_0x5c29x4< _0x5c29x13?mxUtils[_0xd587[2010]](_0x5c29x14,_0x5c29x4,_0x5c29x15,_0x5c29x16,_0x5c29x12,_0x5c29x9,_0x5c29x3+ _0x5c29xa,_0x5c29x13):mxUtils[_0xd587[2010]](_0x5c29x14,_0x5c29x4,_0x5c29x15,_0x5c29x16,_0x5c29x12,_0x5c29x9+ _0x5c29x2,_0x5c29x3+ _0x5c29xa,_0x5c29x13)},TrianglePerimeter:function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){_0x5c29x3= null!= _0x5c29x3?_0x5c29x3[_0xd587[124]][mxConstants[_0xd587[2011]]]:null;var _0x5c29x9=_0x5c29x3== mxConstants[_0xd587[1358]]|| _0x5c29x3== mxConstants[_0xd587[1354]],_0x5c29xa=_0x5c29x2[_0xd587[235]],_0x5c29x12=_0x5c29x2[_0xd587[236]],_0x5c29x13=_0x5c29x2[_0xd587[117]];_0x5c29x2= _0x5c29x2[_0xd587[119]];var _0x5c29x14=_0x5c29xa+ _0x5c29x13/ 2,_0x5c29x15=_0x5c29x12+ _0x5c29x2/ 2,_0x5c29x16= new mxPoint(_0x5c29xa,_0x5c29x12),_0x5c29x17= new mxPoint(_0x5c29xa+ _0x5c29x13,_0x5c29x15),_0x5c29x18= new mxPoint(_0x5c29xa,_0x5c29x12+ _0x5c29x2);_0x5c29x3== mxConstants[_0xd587[1358]]?(_0x5c29x16= _0x5c29x18,_0x5c29x17= new mxPoint(_0x5c29x14,_0x5c29x12),_0x5c29x18= new mxPoint(_0x5c29xa+ _0x5c29x13,_0x5c29x12+ _0x5c29x2)):_0x5c29x3== mxConstants[_0xd587[1354]]?(_0x5c29x17= new mxPoint(_0x5c29x14,_0x5c29x12+ _0x5c29x2),_0x5c29x18= new mxPoint(_0x5c29xa+ _0x5c29x13,_0x5c29x12)):_0x5c29x3== mxConstants[_0xd587[1359]]&& (_0x5c29x16= new mxPoint(_0x5c29xa+ _0x5c29x13,_0x5c29x12),_0x5c29x17= new mxPoint(_0x5c29xa,_0x5c29x15),_0x5c29x18= new mxPoint(_0x5c29xa+ _0x5c29x13,_0x5c29x12+ _0x5c29x2));var _0x5c29x19=_0x5c29x4[_0xd587[235]]- _0x5c29x14,_0x5c29x1a=_0x5c29x4[_0xd587[236]]- _0x5c29x15,_0x5c29x19=_0x5c29x9?Math[_0xd587[429]](_0x5c29x19,_0x5c29x1a):Math[_0xd587[429]](_0x5c29x1a,_0x5c29x19),_0x5c29x1b=_0x5c29x9?Math[_0xd587[429]](_0x5c29x13,_0x5c29x2):Math[_0xd587[429]](_0x5c29x2,_0x5c29x13),_0x5c29x1a=!1,_0x5c29x1a=_0x5c29x3== mxConstants[_0xd587[1358]]|| _0x5c29x3== mxConstants[_0xd587[1359]]?_0x5c29x19> -_0x5c29x1b&& _0x5c29x19< _0x5c29x1b:_0x5c29x19< -Math[_0xd587[424]]+ _0x5c29x1b|| _0x5c29x19> Math[_0xd587[424]]- _0x5c29x1b,_0x5c29x1b=null;_0x5c29x1a?_0x5c29x1b= _0x5c29x5&& (_0x5c29x9&& _0x5c29x4[_0xd587[235]]>= _0x5c29x16[_0xd587[235]]&& _0x5c29x4[_0xd587[235]]<= _0x5c29x18[_0xd587[235]]|| !_0x5c29x9&& _0x5c29x4[_0xd587[236]]>= _0x5c29x16[_0xd587[236]]&& _0x5c29x4[_0xd587[236]]<= _0x5c29x18[_0xd587[236]])?_0x5c29x9? new mxPoint(_0x5c29x4[_0xd587[235]],_0x5c29x16[_0xd587[236]]): new mxPoint(_0x5c29x16[_0xd587[235]],_0x5c29x4[_0xd587[236]]):_0x5c29x3== mxConstants[_0xd587[1358]]? new mxPoint(_0x5c29xa+ _0x5c29x13/ 2+ _0x5c29x2* Math[_0xd587[2008]](_0x5c29x19)/ 2,_0x5c29x12+ _0x5c29x2):_0x5c29x3== mxConstants[_0xd587[1354]]? new mxPoint(_0x5c29xa+ _0x5c29x13/ 2- _0x5c29x2* Math[_0xd587[2008]](_0x5c29x19)/ 2,_0x5c29x12):_0x5c29x3== mxConstants[_0xd587[1359]]? new mxPoint(_0x5c29xa+ _0x5c29x13,_0x5c29x12+ _0x5c29x2/ 2+ _0x5c29x13* Math[_0xd587[2008]](_0x5c29x19)/ 2): new mxPoint(_0x5c29xa,_0x5c29x12+ _0x5c29x2/ 2- _0x5c29x13* Math[_0xd587[2008]](_0x5c29x19)/ 2):(_0x5c29x5&& (_0x5c29x5= new mxPoint(_0x5c29x14,_0x5c29x15),_0x5c29x4[_0xd587[236]]>= _0x5c29x12&& _0x5c29x4[_0xd587[236]]<= _0x5c29x12+ _0x5c29x2?(_0x5c29x5[_0xd587[235]]= _0x5c29x9?_0x5c29x14:_0x5c29x3== mxConstants[_0xd587[1359]]?_0x5c29xa+ _0x5c29x13:_0x5c29xa,_0x5c29x5[_0xd587[236]]= _0x5c29x4[_0xd587[236]]):_0x5c29x4[_0xd587[235]]>= _0x5c29xa&& _0x5c29x4[_0xd587[235]]<= _0x5c29xa+ _0x5c29x13&& (_0x5c29x5[_0xd587[235]]= _0x5c29x4[_0xd587[235]],_0x5c29x5[_0xd587[236]]= !_0x5c29x9?_0x5c29x15:_0x5c29x3== mxConstants[_0xd587[1358]]?_0x5c29x12+ _0x5c29x2:_0x5c29x12),_0x5c29x14= _0x5c29x5[_0xd587[235]],_0x5c29x15= _0x5c29x5[_0xd587[236]]),_0x5c29x1b= _0x5c29x9&& _0x5c29x4[_0xd587[235]]<= _0x5c29xa+ _0x5c29x13/ 2|| !_0x5c29x9&& _0x5c29x4[_0xd587[236]]<= _0x5c29x12+ _0x5c29x2/ 2?mxUtils[_0xd587[2010]](_0x5c29x4[_0xd587[235]],_0x5c29x4[_0xd587[236]],_0x5c29x14,_0x5c29x15,_0x5c29x16[_0xd587[235]],_0x5c29x16[_0xd587[236]],_0x5c29x17[_0xd587[235]],_0x5c29x17[_0xd587[236]]):mxUtils[_0xd587[2010]](_0x5c29x4[_0xd587[235]],_0x5c29x4[_0xd587[236]],_0x5c29x14,_0x5c29x15,_0x5c29x17[_0xd587[235]],_0x5c29x17[_0xd587[236]],_0x5c29x18[_0xd587[235]],_0x5c29x18[_0xd587[236]]));null== _0x5c29x1b&& (_0x5c29x1b= new mxPoint(_0x5c29x14,_0x5c29x15));return _0x5c29x1b}};function mxPrintPreview(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa,_0x5c29x12,_0x5c29x13,_0x5c29x14){this[_0xd587[1179]]= _0x5c29x2;this[_0xd587[255]]= null!= _0x5c29x3?_0x5c29x3:1/ _0x5c29x2[_0xd587[2012]];this[_0xd587[467]]= null!= _0x5c29x5?_0x5c29x5:0;this[_0xd587[2013]]= null!= _0x5c29x4?_0x5c29x4:_0x5c29x2[_0xd587[2013]];this[_0xd587[924]]= null!= _0x5c29x13?_0x5c29x13:_0xd587[2014];this[_0xd587[1732]]= null!= _0x5c29x9?_0x5c29x9:0;this[_0xd587[1733]]= null!= _0x5c29xa?_0x5c29xa:0;this[_0xd587[1630]]= _0x5c29x12;this[_0xd587[2015]]= null!= _0x5c29x14?_0x5c29x14:!0}mxPrintPreview[_0xd587[202]][_0xd587[1179]]= null;mxPrintPreview[_0xd587[202]][_0xd587[2013]]= null;mxPrintPreview[_0xd587[202]][_0xd587[255]]= null;mxPrintPreview[_0xd587[202]][_0xd587[467]]= 0;mxPrintPreview[_0xd587[202]][_0xd587[1732]]= 0;mxPrintPreview[_0xd587[202]][_0xd587[1733]]= 0;mxPrintPreview[_0xd587[202]][_0xd587[2016]]= !0;mxPrintPreview[_0xd587[202]][_0xd587[2017]]= !1;mxPrintPreview[_0xd587[202]][_0xd587[1630]]= null;mxPrintPreview[_0xd587[202]][_0xd587[924]]= null;mxPrintPreview[_0xd587[202]][_0xd587[2015]]= null;mxPrintPreview[_0xd587[202]][_0xd587[2018]]= null;mxPrintPreview[_0xd587[202]][_0xd587[2019]]= 0;mxPrintPreview[_0xd587[202]][_0xd587[2020]]= function(){return this[_0xd587[2018]]};mxPrintPreview[_0xd587[202]][_0xd587[2021]]= function(){var _0x5c29x2=_0xd587[110];8== document[_0xd587[5]]&& (_0x5c29x2= _0xd587[2022]);return _0x5c29x2};mxPrintPreview[_0xd587[202]][_0xd587[392]]= function(_0x5c29x2){var _0x5c29x3=this[_0xd587[1179]][_0xd587[259]][_0xd587[2023]],_0x5c29x4=null;try{this[_0xd587[2017]]&& (this[_0xd587[1179]][_0xd587[259]][_0xd587[2023]]= function(_0x5c29x2,_0x5c29x3){_0x5c29x3[_0xd587[176]](_0x5c29x2[_0xd587[441]][_0xd587[2024]]())});if(null== this[_0xd587[2018]]){this[_0xd587[2018]]= window[_0xd587[392]]();var _0x5c29x5=this[_0xd587[2018]][_0xd587[395]],_0x5c29x9=this[_0xd587[2021]]();null!= _0x5c29x9&& 0< _0x5c29x9[_0xd587[67]]&& _0x5c29x5[_0xd587[171]](_0x5c29x9);_0x5c29x5[_0xd587[171]](_0xd587[528]);_0x5c29x5[_0xd587[171]](_0xd587[531]);this[_0xd587[2025]](_0x5c29x5,_0x5c29x2);_0x5c29x5[_0xd587[171]](_0xd587[533]);_0x5c29x5[_0xd587[171]](_0xd587[2026]);mxClient[_0xd587[54]](_0xd587[94],mxClient[_0xd587[86]]+ _0xd587[95],_0x5c29x5);mxClient[_0xd587[47]]&& (_0x5c29x5[_0xd587[100]][_0xd587[99]](_0xd587[6],_0xd587[97]),_0x5c29x5[_0xd587[100]][_0xd587[99]](_0xd587[7],_0xd587[101]),_0x5c29x5[_0xd587[102]]()[_0xd587[103]]= _0xd587[104],mxClient[_0xd587[54]](_0xd587[94],mxClient[_0xd587[86]]+ _0xd587[105],_0x5c29x5));var _0x5c29xa=this[_0xd587[1179]][_0xd587[517]]()[_0xd587[238]](),_0x5c29x12=this[_0xd587[1179]][_0xd587[249]]()[_0xd587[518]](),_0x5c29x13=_0x5c29x12/ this[_0xd587[255]],_0x5c29x14=this[_0xd587[1179]][_0xd587[249]]()[_0xd587[512]]();this[_0xd587[2016]]|| (this[_0xd587[1732]]= -_0x5c29x14[_0xd587[235]]* this[_0xd587[255]],this[_0xd587[1733]]= -_0x5c29x14[_0xd587[236]]* this[_0xd587[255]],_0x5c29xa[_0xd587[117]]+= _0x5c29xa[_0xd587[235]],_0x5c29xa[_0xd587[119]]+= _0x5c29xa[_0xd587[236]],_0x5c29xa[_0xd587[235]]= 0,this[_0xd587[467]]= _0x5c29xa[_0xd587[236]]= 0);_0x5c29xa[_0xd587[117]]/= _0x5c29x13;_0x5c29xa[_0xd587[119]]/= _0x5c29x13;var _0x5c29x15=this[_0xd587[2013]][_0xd587[117]]- 2* this[_0xd587[467]],_0x5c29x16=this[_0xd587[2013]][_0xd587[119]]- 2* this[_0xd587[467]],_0x5c29x17=Math[_0xd587[160]](1,Math[_0xd587[430]]((_0x5c29xa[_0xd587[117]]+ this[_0xd587[1732]])/ _0x5c29x15)),_0x5c29x18=Math[_0xd587[160]](1,Math[_0xd587[430]]((_0x5c29xa[_0xd587[119]]+ this[_0xd587[1733]])/ _0x5c29x16));this[_0xd587[2019]]= _0x5c29x17* _0x5c29x18;var _0x5c29x19=mxUtils[_0xd587[885]](this,function(){if(this[_0xd587[2015]]&& (1< _0x5c29x18|| 1< _0x5c29x17)){var _0x5c29x2=this[_0xd587[2027]](_0x5c29x18,_0x5c29x17);_0x5c29x5[_0xd587[112]][_0xd587[62]](_0x5c29x2);if(mxClient[_0xd587[80]]){_0x5c29x2[_0xd587[124]][_0xd587[491]]= _0xd587[492];var _0x5c29x3=function(){_0x5c29x2[_0xd587[124]][_0xd587[125]]= _0x5c29x5[_0xd587[112]][_0xd587[190]]+ 10+ _0xd587[168]};mxEvent[_0xd587[169]](this[_0xd587[2018]],_0xd587[276],function(_0x5c29x2){_0x5c29x3()});mxEvent[_0xd587[169]](this[_0xd587[2018]],_0xd587[129],function(_0x5c29x2){_0x5c29x3()})}}});_0x5c29x2= function(_0x5c29x2,_0x5c29x3){null!= this[_0xd587[1630]]&& (_0x5c29x2[_0xd587[124]][_0xd587[1630]]= this[_0xd587[1630]],_0x5c29x2[_0xd587[124]][_0xd587[465]]= _0xd587[1631],_0x5c29x2[_0xd587[124]][_0xd587[1629]]= _0xd587[942]);_0x5c29x2[_0xd587[124]][_0xd587[1537]]= _0xd587[1391];_0x5c29x3&& (_0x5c29x2[_0xd587[124]][_0xd587[2028]]= _0xd587[2029]);mxClient[_0xd587[80]]?(_0x5c29x5[_0xd587[171]](_0x5c29x2[_0xd587[342]]),_0x5c29x2[_0xd587[265]][_0xd587[266]](_0x5c29x2)):(_0x5c29x2[_0xd587[265]][_0xd587[266]](_0x5c29x2),_0x5c29x5[_0xd587[112]][_0xd587[62]](_0x5c29x2));if(_0x5c29x3){var _0x5c29x4=_0x5c29x5[_0xd587[55]](_0xd587[1054]);_0x5c29x4[_0xd587[926]]= _0xd587[2030];_0x5c29x5[_0xd587[112]][_0xd587[62]](_0x5c29x4)}};var _0x5c29x1a=this[_0xd587[2031]](this[_0xd587[2013]][_0xd587[117]],this[_0xd587[2013]][_0xd587[119]]);if(null!= _0x5c29x1a){for(var _0x5c29x1b=0;_0x5c29x1b< _0x5c29x1a[_0xd587[67]];_0x5c29x1b++){_0x5c29x2(_0x5c29x1a[_0x5c29x1b],!0)}};for(var _0x5c29x1c=this[_0xd587[2032]](this[_0xd587[2013]][_0xd587[117]],this[_0xd587[2013]][_0xd587[119]]),_0x5c29x1b=0;_0x5c29x1b< _0x5c29x18;_0x5c29x1b++){for(var _0x5c29x1d=_0x5c29x1b* _0x5c29x16/ this[_0xd587[255]]- this[_0xd587[1733]]/ this[_0xd587[255]]+ (_0x5c29xa[_0xd587[236]]- _0x5c29x14[_0xd587[236]]* _0x5c29x12)/ _0x5c29x12,_0x5c29x1a=0;_0x5c29x1a< _0x5c29x17;_0x5c29x1a++){if(null== this[_0xd587[2018]]){return null};var _0x5c29x1e=_0x5c29x1a* _0x5c29x15/ this[_0xd587[255]]- this[_0xd587[1732]]/ this[_0xd587[255]]+ (_0x5c29xa[_0xd587[235]]- _0x5c29x14[_0xd587[235]]* _0x5c29x12)/ _0x5c29x12,_0x5c29x1f=_0x5c29x1b* _0x5c29x17+ _0x5c29x1a+ 1,_0x5c29x4=this[_0xd587[2034]](this[_0xd587[2013]][_0xd587[117]],this[_0xd587[2013]][_0xd587[119]],mxUtils[_0xd587[885]](this,function(_0x5c29x2){this[_0xd587[2033]](-_0x5c29x1e,-_0x5c29x1d,this[_0xd587[255]],_0x5c29x1f,_0x5c29x2)}));_0x5c29x4[_0xd587[57]](_0xd587[1363],_0xd587[2035]+ _0x5c29x1f);_0x5c29x2(_0x5c29x4,null!= _0x5c29x1c|| _0x5c29x1b< _0x5c29x18- 1|| _0x5c29x1a< _0x5c29x17- 1)}};if(null!= _0x5c29x1c){for(_0x5c29x1b= 0;_0x5c29x1b< _0x5c29x1c[_0xd587[67]];_0x5c29x1b++){_0x5c29x2(_0x5c29x1c[_0x5c29x1b],_0x5c29x1b< _0x5c29x1c[_0xd587[67]])}};_0x5c29x5[_0xd587[171]](_0xd587[527]);_0x5c29x5[_0xd587[171]](_0xd587[534]);_0x5c29x5[_0xd587[268]]();_0x5c29x19();mxEvent[_0xd587[762]](_0x5c29x5[_0xd587[112]])};this[_0xd587[2018]][_0xd587[393]]()}catch(y){null!= _0x5c29x4&& null!= _0x5c29x4[_0xd587[265]]&& _0x5c29x4[_0xd587[265]][_0xd587[266]](_0x5c29x4)}finally{this[_0xd587[1179]][_0xd587[259]][_0xd587[2023]]= _0x5c29x3};return this[_0xd587[2018]]};mxPrintPreview[_0xd587[202]][_0xd587[2025]]= function(_0x5c29x2,_0x5c29x3){null!= this[_0xd587[924]]&& _0x5c29x2[_0xd587[171]](_0xd587[2036]+ this[_0xd587[924]]+ _0xd587[2037]);_0x5c29x2[_0xd587[171]](_0xd587[2038]);_0x5c29x2[_0xd587[171]](_0xd587[2039]);_0x5c29x2[_0xd587[171]](_0xd587[2040]);_0x5c29x2[_0xd587[171]](_0xd587[2041]);_0x5c29x2[_0xd587[171]](_0xd587[233]);_0x5c29x2[_0xd587[171]](_0xd587[2042]);_0x5c29x2[_0xd587[171]](_0xd587[2043]);_0x5c29x2[_0xd587[171]](_0xd587[2044]);_0x5c29x2[_0xd587[171]](_0xd587[2045]);_0x5c29x2[_0xd587[171]](_0xd587[233]);null!= _0x5c29x3&& _0x5c29x2[_0xd587[171]](_0x5c29x3);_0x5c29x2[_0xd587[171]](_0xd587[2046])};mxPrintPreview[_0xd587[202]][_0xd587[2027]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=this[_0xd587[2018]][_0xd587[395]],_0x5c29x5=_0x5c29x4[_0xd587[55]](_0xd587[116]);_0x5c29x5[_0xd587[926]]= _0xd587[2047];_0x5c29x5[_0xd587[57]](_0xd587[467],_0xd587[468]);for(var _0x5c29x9=_0x5c29x4[_0xd587[55]](_0xd587[120]),_0x5c29xa=0;_0x5c29xa< _0x5c29x2;_0x5c29xa++){for(var _0x5c29x12=_0x5c29x4[_0xd587[55]](_0xd587[121]),_0x5c29x13=0;_0x5c29x13< _0x5c29x3;_0x5c29x13++){var _0x5c29x14=_0x5c29xa* _0x5c29x3+ _0x5c29x13+ 1,_0x5c29x15=_0x5c29x4[_0xd587[55]](_0xd587[122]);if(!mxClient[_0xd587[133]]|| mxClient[_0xd587[75]]|| mxClient[_0xd587[76]]){var _0x5c29x16=_0x5c29x4[_0xd587[55]](_0xd587[2048]);_0x5c29x16[_0xd587[57]](_0xd587[44],_0xd587[2049]+ _0x5c29x14);mxUtils[_0xd587[53]](_0x5c29x16,_0x5c29x14,_0x5c29x4);_0x5c29x15[_0xd587[62]](_0x5c29x16)}else {mxUtils[_0xd587[53]](_0x5c29x15,_0x5c29x14,_0x5c29x4)};_0x5c29x12[_0xd587[62]](_0x5c29x15)};_0x5c29x9[_0xd587[62]](_0x5c29x12)};_0x5c29x5[_0xd587[62]](_0x5c29x9);return _0x5c29x5};mxPrintPreview[_0xd587[202]][_0xd587[2034]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){var _0x5c29x5=document[_0xd587[55]](_0xd587[485]);try{_0x5c29x5[_0xd587[124]][_0xd587[117]]= _0x5c29x2+ _0xd587[168];_0x5c29x5[_0xd587[124]][_0xd587[119]]= _0x5c29x3+ _0xd587[168];_0x5c29x5[_0xd587[124]][_0xd587[277]]= _0xd587[188];_0x5c29x5[_0xd587[124]][_0xd587[2050]]= _0xd587[1824];_0x5c29x5[_0xd587[124]][_0xd587[491]]= _0xd587[1500];var _0x5c29x9=document[_0xd587[55]](_0xd587[485]);_0x5c29x9[_0xd587[124]][_0xd587[125]]= this[_0xd587[467]]+ _0xd587[168];_0x5c29x9[_0xd587[124]][_0xd587[361]]= this[_0xd587[467]]+ _0xd587[168];_0x5c29x9[_0xd587[124]][_0xd587[117]]= _0x5c29x2- 2* this[_0xd587[467]]+ _0xd587[168];_0x5c29x9[_0xd587[124]][_0xd587[119]]= _0x5c29x3- 2* this[_0xd587[467]]+ _0xd587[168];_0x5c29x9[_0xd587[124]][_0xd587[277]]= _0xd587[188];this[_0xd587[1179]][_0xd587[507]]== mxConstants[_0xd587[1523]]&& (_0x5c29x9[_0xd587[124]][_0xd587[491]]= _0xd587[492]);_0x5c29x5[_0xd587[62]](_0x5c29x9);document[_0xd587[112]][_0xd587[62]](_0x5c29x5);_0x5c29x4(_0x5c29x9)}catch(f){throw _0x5c29x5[_0xd587[265]][_0xd587[266]](_0x5c29x5),f};return _0x5c29x5};mxPrintPreview[_0xd587[202]][_0xd587[2033]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){_0x5c29x5= this[_0xd587[1179]][_0xd587[249]]();var _0x5c29xa=this[_0xd587[1179]][_0xd587[526]];this[_0xd587[1179]][_0xd587[526]]= _0x5c29x9;var _0x5c29x12=_0x5c29x5[_0xd587[2051]](),_0x5c29x13=_0x5c29x5[_0xd587[2052]](),_0x5c29x14=_0x5c29x5[_0xd587[2024]](),_0x5c29x15=_0x5c29x5[_0xd587[1524]]();this[_0xd587[1179]][_0xd587[507]]== mxConstants[_0xd587[508]]?_0x5c29x5[_0xd587[1569]]():this[_0xd587[1179]][_0xd587[507]]== mxConstants[_0xd587[1523]]?_0x5c29x5[_0xd587[1571]]():_0x5c29x5[_0xd587[1570]]();var _0x5c29x16=_0x5c29x5[_0xd587[503]]();_0x5c29x5[_0xd587[504]](!1);var _0x5c29x17=this[_0xd587[1179]][_0xd587[994]]();this[_0xd587[1179]][_0xd587[995]](!1);var _0x5c29x18=_0x5c29x5[_0xd587[512]]();_0x5c29x5[_0xd587[513]]= new mxPoint(_0x5c29x2,_0x5c29x3);_0x5c29x2= null;try{var _0x5c29x19=[this[_0xd587[1179]][_0xd587[502]]()[_0xd587[501]]()];_0x5c29x2= new mxTemporaryCellStates(_0x5c29x5,_0x5c29x4,_0x5c29x19)}finally{if(mxClient[_0xd587[80]]){_0x5c29x5[_0xd587[506]][_0xd587[339]]= _0xd587[110]}else {for(_0x5c29x4= _0x5c29x9[_0xd587[285]];null!= _0x5c29x4;){_0x5c29x19= _0x5c29x4[_0xd587[287]],_0x5c29x3= _0x5c29x4[_0xd587[301]][_0xd587[216]](),_0xd587[571]== _0x5c29x3?(_0x5c29x4[_0xd587[57]](_0xd587[117],parseInt(_0x5c29x9[_0xd587[124]][_0xd587[117]])),_0x5c29x4[_0xd587[57]](_0xd587[119],parseInt(_0x5c29x9[_0xd587[124]][_0xd587[119]]))):_0xd587[583]!= _0x5c29x4[_0xd587[124]][_0xd587[270]]&& _0xd587[116]!= _0x5c29x3&& _0x5c29x4[_0xd587[265]][_0xd587[266]](_0x5c29x4),_0x5c29x4= _0x5c29x19}};_0x5c29x5[_0xd587[506]][_0xd587[265]][_0xd587[266]](_0x5c29x5[_0xd587[506]]);this[_0xd587[1179]][_0xd587[995]](_0x5c29x17);this[_0xd587[1179]][_0xd587[526]]= _0x5c29xa;_0x5c29x5[_0xd587[510]]= _0x5c29x12;_0x5c29x5[_0xd587[2053]]= _0x5c29x13;_0x5c29x5[_0xd587[505]]= _0x5c29x14;_0x5c29x5[_0xd587[506]]= _0x5c29x15;_0x5c29x5[_0xd587[513]]= _0x5c29x18;_0x5c29x2[_0xd587[515]]();_0x5c29x5[_0xd587[504]](_0x5c29x16)}};mxPrintPreview[_0xd587[202]][_0xd587[2031]]= function(){return null};mxPrintPreview[_0xd587[202]][_0xd587[2032]]= function(){return null};mxPrintPreview[_0xd587[202]][_0xd587[540]]= function(){var _0x5c29x2=this[_0xd587[392]]();null!= _0x5c29x2&& _0x5c29x2[_0xd587[540]]()};mxPrintPreview[_0xd587[202]][_0xd587[268]]= function(){null!= this[_0xd587[2018]]&& (this[_0xd587[2018]][_0xd587[268]](),this[_0xd587[2018]]= null)};function mxStylesheet(){this[_0xd587[2054]]= {};this[_0xd587[2056]](this[_0xd587[2055]]());this[_0xd587[2058]](this[_0xd587[2057]]())}mxStylesheet[_0xd587[202]][_0xd587[2055]]= function(){var _0x5c29x2={};_0x5c29x2[mxConstants[_0xd587[2059]]]= mxConstants[_0xd587[2060]];_0x5c29x2[mxConstants[_0xd587[2061]]]= mxPerimeter[_0xd587[2062]];_0x5c29x2[mxConstants[_0xd587[2063]]]= mxConstants[_0xd587[481]];_0x5c29x2[mxConstants[_0xd587[2064]]]= mxConstants[_0xd587[479]];_0x5c29x2[mxConstants[_0xd587[2065]]]= _0xd587[2066];_0x5c29x2[mxConstants[_0xd587[2067]]]= _0xd587[2068];_0x5c29x2[mxConstants[_0xd587[2069]]]= _0xd587[2070];return _0x5c29x2};mxStylesheet[_0xd587[202]][_0xd587[2057]]= function(){var _0x5c29x2={};_0x5c29x2[mxConstants[_0xd587[2059]]]= mxConstants[_0xd587[2071]];_0x5c29x2[mxConstants[_0xd587[1695]]]= mxConstants[_0xd587[1622]];_0x5c29x2[mxConstants[_0xd587[2063]]]= mxConstants[_0xd587[481]];_0x5c29x2[mxConstants[_0xd587[2064]]]= mxConstants[_0xd587[479]];_0x5c29x2[mxConstants[_0xd587[2067]]]= _0xd587[2068];_0x5c29x2[mxConstants[_0xd587[2069]]]= _0xd587[2072];return _0x5c29x2};mxStylesheet[_0xd587[202]][_0xd587[2056]]= function(_0x5c29x2){this[_0xd587[2074]](_0xd587[2073],_0x5c29x2)};mxStylesheet[_0xd587[202]][_0xd587[2058]]= function(_0x5c29x2){this[_0xd587[2074]](_0xd587[2075],_0x5c29x2)};mxStylesheet[_0xd587[202]][_0xd587[2076]]= function(){return this[_0xd587[2054]][_0xd587[2073]]};mxStylesheet[_0xd587[202]][_0xd587[2077]]= function(){return this[_0xd587[2054]][_0xd587[2075]]};mxStylesheet[_0xd587[202]][_0xd587[2074]]= function(_0x5c29x2,_0x5c29x3){this[_0xd587[2054]][_0x5c29x2]= _0x5c29x3};mxStylesheet[_0xd587[202]][_0xd587[1705]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=_0x5c29x3;if(null!= _0x5c29x2&& 0< _0x5c29x2[_0xd587[67]]){for(var _0x5c29x5=_0x5c29x2[_0xd587[224]](_0xd587[471]),_0x5c29x4=null!= _0x5c29x4&& _0xd587[471]!= _0x5c29x2[_0xd587[225]](0)?mxUtils[_0xd587[238]](_0x5c29x4):{},_0x5c29x9=0;_0x5c29x9< _0x5c29x5[_0xd587[67]];_0x5c29x9++){var _0x5c29xa=_0x5c29x5[_0x5c29x9],_0x5c29x12=_0x5c29xa[_0xd587[2]](_0xd587[226]);if(0<= _0x5c29x12){var _0x5c29x13=_0x5c29xa[_0xd587[85]](0,_0x5c29x12),_0x5c29xa=_0x5c29xa[_0xd587[85]](_0x5c29x12+ 1);_0x5c29xa== mxConstants[_0xd587[217]]? delete _0x5c29x4[_0x5c29x13]:mxUtils[_0xd587[1946]](_0x5c29xa)?_0x5c29x4[_0x5c29x13]= parseFloat(_0x5c29xa):_0x5c29x4[_0x5c29x13]= _0x5c29xa}else {if(_0x5c29xa= this[_0xd587[2054]][_0x5c29xa],null!= _0x5c29xa){for(_0x5c29x13 in _0x5c29xa){_0x5c29x4[_0x5c29x13]= _0x5c29xa[_0x5c29x13]}}}}};return _0x5c29x4};function mxCellState(_0x5c29x2,_0x5c29x3,_0x5c29x4){this[_0xd587[441]]= _0x5c29x2;this[_0xd587[246]]= _0x5c29x3;this[_0xd587[124]]= _0x5c29x4;this[_0xd587[2078]]= new mxPoint;this[_0xd587[2079]]= new mxPoint}mxCellState[_0xd587[202]]= new mxRectangle;mxCellState[_0xd587[202]][_0xd587[196]]= mxCellState;mxCellState[_0xd587[202]][_0xd587[441]]= null;mxCellState[_0xd587[202]][_0xd587[246]]= null;mxCellState[_0xd587[202]][_0xd587[124]]= null;mxCellState[_0xd587[202]][_0xd587[2080]]= !0;mxCellState[_0xd587[202]][_0xd587[2081]]= !1;mxCellState[_0xd587[202]][_0xd587[2082]]= !1;mxCellState[_0xd587[202]][_0xd587[2078]]= null;mxCellState[_0xd587[202]][_0xd587[439]]= null;mxCellState[_0xd587[202]][_0xd587[2079]]= null;mxCellState[_0xd587[202]][_0xd587[2083]]= null;mxCellState[_0xd587[202]][_0xd587[2084]]= null;mxCellState[_0xd587[202]][_0xd587[2085]]= 0;mxCellState[_0xd587[202]][_0xd587[67]]= 0;mxCellState[_0xd587[202]][_0xd587[2086]]= null;mxCellState[_0xd587[202]][_0xd587[253]]= null;mxCellState[_0xd587[202]][_0xd587[963]]= null;mxCellState[_0xd587[202]][_0xd587[2087]]= function(_0x5c29x2,_0x5c29x3){_0x5c29x2= _0x5c29x2|| 0;_0x5c29x3= null!= _0x5c29x3?_0x5c29x3: new mxRectangle(this[_0xd587[235]],this[_0xd587[236]],this[_0xd587[117]],this[_0xd587[119]]);if(null!= this[_0xd587[253]]&& null!= this[_0xd587[253]][_0xd587[1561]]){var _0x5c29x4=this[_0xd587[253]][_0xd587[1561]][_0xd587[1548]](this[_0xd587[124]],_0x5c29x3[_0xd587[235]],_0x5c29x3[_0xd587[236]],_0x5c29x3[_0xd587[117]],_0x5c29x3[_0xd587[119]]);_0x5c29x3[_0xd587[235]]= _0x5c29x4[_0xd587[235]];_0x5c29x3[_0xd587[236]]= _0x5c29x4[_0xd587[236]];_0x5c29x3[_0xd587[117]]= this[_0xd587[253]][_0xd587[1561]][_0xd587[1532]]* _0x5c29x4[_0xd587[117]];_0x5c29x3[_0xd587[119]]= this[_0xd587[253]][_0xd587[1561]][_0xd587[1533]]* _0x5c29x4[_0xd587[119]]};0!= _0x5c29x2&& _0x5c29x3[_0xd587[244]](_0x5c29x2);return _0x5c29x3};mxCellState[_0xd587[202]][_0xd587[2088]]= function(_0x5c29x2,_0x5c29x3){_0x5c29x3?(null== this[_0xd587[439]]&& (this[_0xd587[439]]= []),0== this[_0xd587[439]][_0xd587[67]]?this[_0xd587[439]][_0xd587[207]](_0x5c29x2):this[_0xd587[439]][0]= _0x5c29x2):null== this[_0xd587[439]]?(this[_0xd587[439]]= [],this[_0xd587[439]][_0xd587[207]](null),this[_0xd587[439]][_0xd587[207]](_0x5c29x2)):1== this[_0xd587[439]][_0xd587[67]]?this[_0xd587[439]][_0xd587[207]](_0x5c29x2):this[_0xd587[439]][this[_0xd587[439]][_0xd587[67]]- 1]= _0x5c29x2};mxCellState[_0xd587[202]][_0xd587[1609]]= function(_0x5c29x2){null!= this[_0xd587[253]]&& this[_0xd587[253]][_0xd587[1609]](_0x5c29x2);null!= this[_0xd587[963]]&& this[_0xd587[963]][_0xd587[1609]](_0x5c29x2)};mxCellState[_0xd587[202]][_0xd587[1710]]= function(_0x5c29x2){_0x5c29x2= this[_0xd587[2089]](_0x5c29x2);return null!= _0x5c29x2?_0x5c29x2[_0xd587[246]]:null};mxCellState[_0xd587[202]][_0xd587[2089]]= function(_0x5c29x2){return _0x5c29x2?this[_0xd587[2083]]:this[_0xd587[2084]]};mxCellState[_0xd587[202]][_0xd587[2090]]= function(_0x5c29x2,_0x5c29x3){_0x5c29x3?this[_0xd587[2083]]= _0x5c29x2:this[_0xd587[2084]]= _0x5c29x2};mxCellState[_0xd587[202]][_0xd587[515]]= function(){this[_0xd587[441]][_0xd587[1179]][_0xd587[259]][_0xd587[515]](this)};mxCellState[_0xd587[202]][_0xd587[238]]= function(){var _0x5c29x2= new mxCellState(this[_0xd587[441]],this[_0xd587[246]],this[_0xd587[124]]);if(null!= this[_0xd587[439]]){_0x5c29x2[_0xd587[439]]= [];for(var _0x5c29x3=0;_0x5c29x3< this[_0xd587[439]][_0xd587[67]];_0x5c29x3++){_0x5c29x2[_0xd587[439]][_0x5c29x3]= this[_0xd587[439]][_0x5c29x3][_0xd587[238]]()}};null!= this[_0xd587[2078]]&& (_0x5c29x2[_0xd587[2078]]= this[_0xd587[2078]][_0xd587[238]]());null!= this[_0xd587[2079]]&& (_0x5c29x2[_0xd587[2079]]= this[_0xd587[2079]][_0xd587[238]]());null!= this[_0xd587[1563]]&& (_0x5c29x2[_0xd587[1563]]= this[_0xd587[1563]][_0xd587[238]]());_0x5c29x2[_0xd587[2085]]= this[_0xd587[2085]];_0x5c29x2[_0xd587[2086]]= this[_0xd587[2086]];_0x5c29x2[_0xd587[67]]= this[_0xd587[67]];_0x5c29x2[_0xd587[235]]= this[_0xd587[235]];_0x5c29x2[_0xd587[236]]= this[_0xd587[236]];_0x5c29x2[_0xd587[117]]= this[_0xd587[117]];_0x5c29x2[_0xd587[119]]= this[_0xd587[119]];return _0x5c29x2};function mxGraphSelectionModel(_0x5c29x2){this[_0xd587[1179]]= _0x5c29x2;this[_0xd587[895]]= []}mxGraphSelectionModel[_0xd587[202]]= new mxEventSource;mxGraphSelectionModel[_0xd587[202]][_0xd587[196]]= mxGraphSelectionModel;mxGraphSelectionModel[_0xd587[202]][_0xd587[2091]]= _0xd587[130]!= mxClient[_0xd587[90]]?_0xd587[819]:_0xd587[110];mxGraphSelectionModel[_0xd587[202]][_0xd587[2092]]= _0xd587[130]!= mxClient[_0xd587[90]]?_0xd587[2093]:_0xd587[110];mxGraphSelectionModel[_0xd587[202]][_0xd587[1179]]= null;mxGraphSelectionModel[_0xd587[202]][_0xd587[2094]]= !1;mxGraphSelectionModel[_0xd587[202]][_0xd587[2095]]= function(){return this[_0xd587[2094]]};mxGraphSelectionModel[_0xd587[202]][_0xd587[2096]]= function(_0x5c29x2){this[_0xd587[2094]]= _0x5c29x2};mxGraphSelectionModel[_0xd587[202]][_0xd587[2097]]= function(_0x5c29x2){return null!= _0x5c29x2?0<= mxUtils[_0xd587[2]](this[_0xd587[895]],_0x5c29x2):!1};mxGraphSelectionModel[_0xd587[202]][_0xd587[1107]]= function(){return 0== this[_0xd587[895]][_0xd587[67]]};mxGraphSelectionModel[_0xd587[202]][_0xd587[200]]= function(){this[_0xd587[2098]](null,this[_0xd587[895]])};mxGraphSelectionModel[_0xd587[202]][_0xd587[2099]]= function(_0x5c29x2){null!= _0x5c29x2&& this[_0xd587[2100]]([_0x5c29x2])};mxGraphSelectionModel[_0xd587[202]][_0xd587[2100]]= function(_0x5c29x2){if(null!= _0x5c29x2){this[_0xd587[2094]]&& (_0x5c29x2= [this[_0xd587[2101]](_0x5c29x2)]);for(var _0x5c29x3=[],_0x5c29x4=0;_0x5c29x4< _0x5c29x2[_0xd587[67]];_0x5c29x4++){this[_0xd587[1179]][_0xd587[2102]](_0x5c29x2[_0x5c29x4])&& _0x5c29x3[_0xd587[207]](_0x5c29x2[_0x5c29x4])};this[_0xd587[2098]](_0x5c29x3,this[_0xd587[895]])}};mxGraphSelectionModel[_0xd587[202]][_0xd587[2101]]= function(_0x5c29x2){if(null!= _0x5c29x2){for(var _0x5c29x3=0;_0x5c29x3< _0x5c29x2[_0xd587[67]];_0x5c29x3++){if(this[_0xd587[1179]][_0xd587[2102]](_0x5c29x2[_0x5c29x3])){return _0x5c29x2[_0x5c29x3]}}};return null};mxGraphSelectionModel[_0xd587[202]][_0xd587[2103]]= function(_0x5c29x2){null!= _0x5c29x2&& this[_0xd587[832]]([_0x5c29x2])};mxGraphSelectionModel[_0xd587[202]][_0xd587[832]]= function(_0x5c29x2){if(null!= _0x5c29x2){var _0x5c29x3=null;this[_0xd587[2094]]&& (_0x5c29x3= this[_0xd587[895]],_0x5c29x2= [this[_0xd587[2101]](_0x5c29x2)]);for(var _0x5c29x4=[],_0x5c29x5=0;_0x5c29x5< _0x5c29x2[_0xd587[67]];_0x5c29x5++){!this[_0xd587[2097]](_0x5c29x2[_0x5c29x5])&& this[_0xd587[1179]][_0xd587[2102]](_0x5c29x2[_0x5c29x5])&& _0x5c29x4[_0xd587[207]](_0x5c29x2[_0x5c29x5])};this[_0xd587[2098]](_0x5c29x4,_0x5c29x3)}};mxGraphSelectionModel[_0xd587[202]][_0xd587[2104]]= function(_0x5c29x2){null!= _0x5c29x2&& this[_0xd587[842]]([_0x5c29x2])};mxGraphSelectionModel[_0xd587[202]][_0xd587[842]]= function(_0x5c29x2){if(null!= _0x5c29x2){for(var _0x5c29x3=[],_0x5c29x4=0;_0x5c29x4< _0x5c29x2[_0xd587[67]];_0x5c29x4++){this[_0xd587[2097]](_0x5c29x2[_0x5c29x4])&& _0x5c29x3[_0xd587[207]](_0x5c29x2[_0x5c29x4])};this[_0xd587[2098]](null,_0x5c29x3)}};mxGraphSelectionModel[_0xd587[202]][_0xd587[2098]]= function(_0x5c29x2,_0x5c29x3){if(null!= _0x5c29x2&& 0< _0x5c29x2[_0xd587[67]]&& null!= _0x5c29x2[0]|| null!= _0x5c29x3&& 0< _0x5c29x3[_0xd587[67]]&& null!= _0x5c29x3[0]){var _0x5c29x4= new mxSelectionChange(this,_0x5c29x2,_0x5c29x3);_0x5c29x4[_0xd587[350]]();var _0x5c29x5= new mxUndoableEdit(this,!1);_0x5c29x5[_0xd587[99]](_0x5c29x4);this[_0xd587[746]]( new mxEventObject(mxEvent.UNDO,_0xd587[1061],_0x5c29x5))}};mxGraphSelectionModel[_0xd587[202]][_0xd587[1941]]= function(_0x5c29x2){null!= _0x5c29x2&& !this[_0xd587[2097]](_0x5c29x2)&& this[_0xd587[895]][_0xd587[207]](_0x5c29x2)};mxGraphSelectionModel[_0xd587[202]][_0xd587[1102]]= function(_0x5c29x2){null!= _0x5c29x2&& (_0x5c29x2= mxUtils[_0xd587[2]](this[_0xd587[895]],_0x5c29x2),0<= _0x5c29x2&& this[_0xd587[895]][_0xd587[300]](_0x5c29x2,1))};function mxSelectionChange(_0x5c29x2,_0x5c29x3,_0x5c29x4){this[_0xd587[2105]]= _0x5c29x2;this[_0xd587[2106]]= null!= _0x5c29x3?_0x5c29x3[_0xd587[1853]]():null;this[_0xd587[2107]]= null!= _0x5c29x4?_0x5c29x4[_0xd587[1853]]():null}mxSelectionChange[_0xd587[202]][_0xd587[350]]= function(){var _0x5c29x2=mxLog[_0xd587[2109]](_0xd587[2108]);window[_0xd587[879]]= mxResources[_0xd587[203]](this[_0xd587[2105]][_0xd587[2092]])|| this[_0xd587[2105]][_0xd587[2092]];if(null!= this[_0xd587[2107]]){for(var _0x5c29x3=0;_0x5c29x3< this[_0xd587[2107]][_0xd587[67]];_0x5c29x3++){this[_0xd587[2105]][_0xd587[1102]](this[_0xd587[2107]][_0x5c29x3])}};if(null!= this[_0xd587[2106]]){for(_0x5c29x3= 0;_0x5c29x3< this[_0xd587[2106]][_0xd587[67]];_0x5c29x3++){this[_0xd587[2105]][_0xd587[1941]](this[_0xd587[2106]][_0x5c29x3])}};_0x5c29x3= this[_0xd587[2106]];this[_0xd587[2106]]= this[_0xd587[2107]];this[_0xd587[2107]]= _0x5c29x3;window[_0xd587[879]]= mxResources[_0xd587[203]](this[_0xd587[2105]][_0xd587[2091]])|| this[_0xd587[2105]][_0xd587[2091]];mxLog[_0xd587[2110]](_0xd587[2108],_0x5c29x2);this[_0xd587[2105]][_0xd587[746]]( new mxEventObject(mxEvent.CHANGE,_0xd587[2106],this[_0xd587[2106]],_0xd587[2107],this[_0xd587[2107]]))};function mxCellEditor(_0x5c29x2){this[_0xd587[1179]]= _0x5c29x2}mxCellEditor[_0xd587[202]][_0xd587[1179]]= null;mxCellEditor[_0xd587[202]][_0xd587[126]]= null;mxCellEditor[_0xd587[202]][_0xd587[2111]]= null;mxCellEditor[_0xd587[202]][_0xd587[2112]]= null;mxCellEditor[_0xd587[202]][_0xd587[2113]]= !1;mxCellEditor[_0xd587[202]][_0xd587[2114]]= !0;mxCellEditor[_0xd587[202]][_0xd587[2115]]= _0xd587[110];mxCellEditor[_0xd587[202]][_0xd587[2116]]= _0xd587[110];mxCellEditor[_0xd587[202]][_0xd587[176]]= function(){this[_0xd587[126]]= document[_0xd587[55]](_0xd587[126]);this[_0xd587[126]][_0xd587[926]]= _0xd587[2117];this[_0xd587[126]][_0xd587[124]][_0xd587[491]]= _0xd587[492];this[_0xd587[126]][_0xd587[124]][_0xd587[277]]= _0xd587[189];this[_0xd587[126]][_0xd587[57]](_0xd587[2118],_0xd587[2119]);this[_0xd587[126]][_0xd587[57]](_0xd587[969],_0xd587[2120]);mxClient[_0xd587[133]]&& (this[_0xd587[126]][_0xd587[124]][_0xd587[129]]= _0xd587[130]);mxEvent[_0xd587[169]](this[_0xd587[126]],_0xd587[2121],mxUtils[_0xd587[885]](this,function(_0x5c29x2){this[_0xd587[2122]]()}));mxEvent[_0xd587[169]](this[_0xd587[126]],_0xd587[2123],mxUtils[_0xd587[885]](this,function(_0x5c29x2){mxEvent[_0xd587[721]](_0x5c29x2)|| (113== _0x5c29x2[_0xd587[2124]]|| this[_0xd587[1179]][_0xd587[2125]]()&& 13== _0x5c29x2[_0xd587[2124]]&& !mxEvent[_0xd587[775]](_0x5c29x2)&& !mxEvent[_0xd587[774]](_0x5c29x2)?(this[_0xd587[1179]][_0xd587[2126]](!1),mxEvent[_0xd587[722]](_0x5c29x2)):27== _0x5c29x2[_0xd587[2124]]?(this[_0xd587[1179]][_0xd587[2126]](!0),mxEvent[_0xd587[722]](_0x5c29x2)):(this[_0xd587[2127]]&& (this[_0xd587[2127]]= !1,this[_0xd587[126]][_0xd587[131]]= _0xd587[110]),this[_0xd587[2128]](!0)))}));mxEvent[_0xd587[169]](this[_0xd587[126]],_0xd587[2129],mxUtils[_0xd587[885]](this,function(_0x5c29x2){this[_0xd587[2114]]&& !mxEvent[_0xd587[721]](_0x5c29x2)&& setTimeout(mxUtils[_0xd587[885]](this,function(){this[_0xd587[129]]()}),0)}))};mxCellEditor[_0xd587[202]][_0xd587[129]]= function(){if(null!= this[_0xd587[1653]]){var _0x5c29x2=this[_0xd587[1179]][_0xd587[249]]()[_0xd587[248]](this[_0xd587[2111]]),_0x5c29x3=this[_0xd587[1179]][_0xd587[2130]](_0x5c29x2[_0xd587[246]]),_0x5c29x4=this[_0xd587[1179]][_0xd587[2131]](_0x5c29x2[_0xd587[246]]);if(this[_0xd587[1179]][_0xd587[502]]()[_0xd587[250]](_0x5c29x2[_0xd587[246]])){this[_0xd587[1562]][_0xd587[235]]= _0x5c29x2[_0xd587[2079]][_0xd587[235]],this[_0xd587[1562]][_0xd587[236]]= _0x5c29x2[_0xd587[2079]][_0xd587[236]],this[_0xd587[1562]][_0xd587[117]]= 0,this[_0xd587[1562]][_0xd587[119]]= 0}else {if(null!= this[_0xd587[1562]]){this[_0xd587[1562]][_0xd587[235]]= _0x5c29x2[_0xd587[235]];this[_0xd587[1562]][_0xd587[236]]= _0x5c29x2[_0xd587[236]];this[_0xd587[1562]][_0xd587[117]]= _0x5c29x2[_0xd587[117]];this[_0xd587[1562]][_0xd587[119]]= _0x5c29x2[_0xd587[119]];var _0x5c29x5=mxUtils[_0xd587[433]](_0x5c29x2[_0xd587[124]],mxConstants.STYLE_LABEL_POSITION,mxConstants.ALIGN_CENTER);_0x5c29x5== mxConstants[_0xd587[2132]]?this[_0xd587[1562]][_0xd587[235]]-= _0x5c29x2[_0xd587[117]]:_0x5c29x5== mxConstants[_0xd587[480]]&& (this[_0xd587[1562]][_0xd587[235]]+= _0x5c29x2[_0xd587[117]]);_0x5c29x5= mxUtils[_0xd587[433]](_0x5c29x2[_0xd587[124]],mxConstants.STYLE_VERTICAL_LABEL_POSITION,mxConstants.ALIGN_MIDDLE);_0x5c29x5== mxConstants[_0xd587[1687]]?this[_0xd587[1562]][_0xd587[236]]-= _0x5c29x2[_0xd587[119]]:_0x5c29x5== mxConstants[_0xd587[482]]&& (this[_0xd587[1562]][_0xd587[236]]+= _0x5c29x2[_0xd587[119]])}};_0x5c29x5= this[_0xd587[126]][_0xd587[131]];if(_0xd587[192]== _0x5c29x5[_0xd587[225]](_0x5c29x5[_0xd587[67]]- 1)|| _0xd587[110]== _0x5c29x5){_0x5c29x5+= _0xd587[544]};_0x5c29x5= mxUtils[_0xd587[321]](_0x5c29x5,!1);_0x5c29x4?(this[_0xd587[1653]][_0xd587[124]][_0xd587[493]]= _0xd587[1502],this[_0xd587[1653]][_0xd587[124]][_0xd587[117]]= this[_0xd587[1562]][_0xd587[117]]+ _0xd587[168]):_0x5c29x5= _0x5c29x5[_0xd587[230]](/ /g,_0xd587[544]);_0x5c29x5= _0x5c29x5[_0xd587[230]](/\n/g,_0xd587[1453]);this[_0xd587[1653]][_0xd587[339]]= _0x5c29x5;var _0x5c29x5=this[_0xd587[1653]][_0xd587[359]]+ 30,_0x5c29x9=this[_0xd587[1653]][_0xd587[167]]+ 16,_0x5c29x5=Math[_0xd587[160]](_0x5c29x5,40),_0x5c29x9=Math[_0xd587[160]](_0x5c29x9,20);_0x5c29x3&& (_0x5c29x5= Math[_0xd587[243]](this[_0xd587[1562]][_0xd587[117]]- 4,_0x5c29x5),_0x5c29x9= Math[_0xd587[243]](this[_0xd587[1562]][_0xd587[119]],_0x5c29x9));var _0x5c29xa=null!= _0x5c29x2[_0xd587[963]]?_0x5c29x2[_0xd587[963]][_0xd587[1655]]:null;null== _0x5c29xa&& (_0x5c29xa= mxUtils[_0xd587[433]](_0x5c29x2[_0xd587[124]],mxConstants.STYLE_ALIGN,mxConstants.ALIGN_CENTER),_0x5c29x2= mxUtils[_0xd587[433]](_0x5c29x2[_0xd587[124]],mxConstants.STYLE_VERTICAL_ALIGN,mxConstants.ALIGN_MIDDLE),_0x5c29xa= mxUtils[_0xd587[1501]](_0x5c29xa,_0x5c29x2));if(null!= _0x5c29xa){if(_0x5c29x3|| !_0x5c29x4){this[_0xd587[126]][_0xd587[124]][_0xd587[361]]= Math[_0xd587[160]](0,Math[_0xd587[488]](this[_0xd587[1562]][_0xd587[235]]- _0x5c29xa[_0xd587[235]]* this[_0xd587[1562]][_0xd587[117]]+ _0x5c29xa[_0xd587[235]]* _0x5c29x5)- 3)+ _0xd587[168]};this[_0xd587[126]][_0xd587[124]][_0xd587[125]]= Math[_0xd587[160]](0,Math[_0xd587[488]](this[_0xd587[1562]][_0xd587[236]]- _0x5c29xa[_0xd587[236]]* this[_0xd587[1562]][_0xd587[119]]+ _0x5c29xa[_0xd587[236]]* _0x5c29x9)+ 4)+ _0xd587[168]};if(_0x5c29x3|| !_0x5c29x4){this[_0xd587[126]][_0xd587[124]][_0xd587[117]]= _0x5c29x5+ _0xd587[168]};this[_0xd587[126]][_0xd587[124]][_0xd587[119]]= _0x5c29x9+ _0xd587[168]}};mxCellEditor[_0xd587[202]][_0xd587[2133]]= function(){return this[_0xd587[2113]]};mxCellEditor[_0xd587[202]][_0xd587[2128]]= function(_0x5c29x2){this[_0xd587[2113]]= _0x5c29x2};mxCellEditor[_0xd587[202]][_0xd587[2122]]= function(){this[_0xd587[2126]](!this[_0xd587[1179]][_0xd587[2134]]())};mxCellEditor[_0xd587[202]][_0xd587[855]]= function(_0x5c29x2,_0x5c29x3){null== this[_0xd587[126]]&& this[_0xd587[176]]();this[_0xd587[2126]](!0);var _0x5c29x4=this[_0xd587[1179]][_0xd587[249]]()[_0xd587[248]](_0x5c29x2);if(null!= _0x5c29x4){this[_0xd587[2111]]= _0x5c29x2;this[_0xd587[2112]]= _0x5c29x3;this[_0xd587[2116]]= null;null!= _0x5c29x4[_0xd587[963]]&& this[_0xd587[2135]](_0x5c29x4)&& (this[_0xd587[2116]]= _0x5c29x4[_0xd587[963]][_0xd587[252]],this[_0xd587[2116]][_0xd587[124]][_0xd587[187]]= _0xd587[188]);var _0x5c29x5=this[_0xd587[1179]][_0xd587[249]]()[_0xd587[255]],_0x5c29x5=mxUtils[_0xd587[433]](_0x5c29x4[_0xd587[124]],mxConstants.STYLE_FONTSIZE,mxConstants.DEFAULT_FONTSIZE)* _0x5c29x5,_0x5c29x9=mxUtils[_0xd587[433]](_0x5c29x4[_0xd587[124]],mxConstants.STYLE_FONTFAMILY,mxConstants.DEFAULT_FONTFAMILY),_0x5c29xa=mxUtils[_0xd587[433]](_0x5c29x4[_0xd587[124]],mxConstants.STYLE_FONTCOLOR,_0xd587[586]),_0x5c29x12=mxUtils[_0xd587[433]](_0x5c29x4[_0xd587[124]],mxConstants.STYLE_ALIGN,mxConstants.ALIGN_LEFT),_0x5c29x13=(mxUtils[_0xd587[433]](_0x5c29x4[_0xd587[124]],mxConstants.STYLE_FONTSTYLE,0)& mxConstants[_0xd587[1410]])== mxConstants[_0xd587[1410]],_0x5c29x14=(mxUtils[_0xd587[433]](_0x5c29x4[_0xd587[124]],mxConstants.STYLE_FONTSTYLE,0)& mxConstants[_0xd587[1412]])== mxConstants[_0xd587[1412]],_0x5c29x15=(mxUtils[_0xd587[433]](_0x5c29x4[_0xd587[124]],mxConstants.STYLE_FONTSTYLE,0)& mxConstants[_0xd587[1414]])== mxConstants[_0xd587[1414]];this[_0xd587[126]][_0xd587[124]][_0xd587[487]]= Math[_0xd587[488]](_0x5c29x5)+ _0xd587[168];this[_0xd587[126]][_0xd587[124]][_0xd587[489]]= Math[_0xd587[488]](_0x5c29x5* mxConstants[_0xd587[490]])+ _0xd587[168];this[_0xd587[126]][_0xd587[124]][_0xd587[486]]= _0x5c29x9;this[_0xd587[126]][_0xd587[124]][_0xd587[1165]]= _0x5c29x12;this[_0xd587[126]][_0xd587[124]][_0xd587[352]]= _0x5c29xa;this[_0xd587[126]][_0xd587[124]][_0xd587[1452]]= _0x5c29x13?_0xd587[1447]:_0xd587[1502];this[_0xd587[126]][_0xd587[124]][_0xd587[666]]= _0x5c29x14?_0xd587[1449]:_0xd587[110];this[_0xd587[126]][_0xd587[124]][_0xd587[354]]= _0x5c29x15?_0xd587[355]:_0xd587[110];this[_0xd587[126]][_0xd587[124]][_0xd587[277]]= _0xd587[278];this[_0xd587[126]][_0xd587[124]][_0xd587[2136]]= _0xd587[130];this[_0xd587[1562]]= _0x5c29x5= this[_0xd587[2137]](_0x5c29x4);this[_0xd587[126]][_0xd587[124]][_0xd587[361]]= _0x5c29x5[_0xd587[235]]+ _0xd587[168];this[_0xd587[126]][_0xd587[124]][_0xd587[125]]= _0x5c29x5[_0xd587[236]]+ _0xd587[168];this[_0xd587[126]][_0xd587[124]][_0xd587[117]]= _0x5c29x5[_0xd587[117]]+ _0xd587[168];this[_0xd587[126]][_0xd587[124]][_0xd587[119]]= _0x5c29x5[_0xd587[119]]+ _0xd587[168];this[_0xd587[126]][_0xd587[124]][_0xd587[931]]= 5;_0x5c29x4= this[_0xd587[2138]](_0x5c29x4,_0x5c29x3);null== _0x5c29x4|| 0== _0x5c29x4[_0xd587[67]]?(_0x5c29x4= this[_0xd587[2139]](),this[_0xd587[2127]]= !0):this[_0xd587[2127]]= !1;this[_0xd587[2128]](!1);this[_0xd587[126]][_0xd587[131]]= _0x5c29x4;this[_0xd587[1179]][_0xd587[526]][_0xd587[62]](this[_0xd587[126]]);_0xd587[130]!= this[_0xd587[126]][_0xd587[124]][_0xd587[495]]&& (this[_0xd587[2114]]&& (this[_0xd587[1653]]= this[_0xd587[2140]](),document[_0xd587[112]][_0xd587[62]](this[_0xd587[1653]]),this[_0xd587[129]]()),this[_0xd587[126]][_0xd587[393]](),this[_0xd587[126]][_0xd587[804]]())}};mxCellEditor[_0xd587[202]][_0xd587[2140]]= function(){var _0x5c29x2=document[_0xd587[55]](_0xd587[485]),_0x5c29x3=_0x5c29x2[_0xd587[124]];_0x5c29x3[_0xd587[491]]= _0xd587[492];_0x5c29x3[_0xd587[493]]= _0xd587[494];_0x5c29x3[_0xd587[187]]= _0xd587[188];_0x5c29x3[_0xd587[495]]= mxClient[_0xd587[496]]?_0xd587[497]:_0xd587[498];_0x5c29x3[_0xd587[499]]= _0xd587[500];_0x5c29x3[_0xd587[123]]= _0xd587[125];_0x5c29x3[_0xd587[489]]= this[_0xd587[126]][_0xd587[124]][_0xd587[489]];_0x5c29x3[_0xd587[487]]= this[_0xd587[126]][_0xd587[124]][_0xd587[487]];_0x5c29x3[_0xd587[486]]= this[_0xd587[126]][_0xd587[124]][_0xd587[486]];_0x5c29x3[_0xd587[1452]]= this[_0xd587[126]][_0xd587[124]][_0xd587[1452]];_0x5c29x3[_0xd587[1165]]= this[_0xd587[126]][_0xd587[124]][_0xd587[1165]];_0x5c29x3[_0xd587[666]]= this[_0xd587[126]][_0xd587[124]][_0xd587[666]];_0x5c29x3[_0xd587[354]]= this[_0xd587[126]][_0xd587[124]][_0xd587[354]];return _0x5c29x2};mxCellEditor[_0xd587[202]][_0xd587[2126]]= function(_0x5c29x2){null!= this[_0xd587[2111]]&& (null!= this[_0xd587[2116]]&& (this[_0xd587[2116]][_0xd587[124]][_0xd587[187]]= _0xd587[189],this[_0xd587[2116]]= null),!_0x5c29x2&& this[_0xd587[2133]]()&& this[_0xd587[1179]][_0xd587[850]](this[_0xd587[2111]],this[_0xd587[2141]](),this[_0xd587[2112]]),null!= this[_0xd587[1653]]&& (document[_0xd587[112]][_0xd587[266]](this[_0xd587[1653]]),this[_0xd587[1653]]= null),this[_0xd587[1562]]= this[_0xd587[2112]]= this[_0xd587[2111]]= null,this[_0xd587[126]][_0xd587[2121]](),this[_0xd587[126]][_0xd587[265]][_0xd587[266]](this[_0xd587[126]]))};mxCellEditor[_0xd587[202]][_0xd587[2138]]= function(_0x5c29x2,_0x5c29x3){return this[_0xd587[1179]][_0xd587[2142]](_0x5c29x2[_0xd587[246]],_0x5c29x3)};mxCellEditor[_0xd587[202]][_0xd587[2141]]= function(){return this[_0xd587[126]][_0xd587[131]][_0xd587[230]](/\r/g,_0xd587[110])};mxCellEditor[_0xd587[202]][_0xd587[2135]]= function(_0x5c29x2){return !0};mxCellEditor[_0xd587[202]][_0xd587[939]]= function(_0x5c29x2){var _0x5c29x3=this[_0xd587[1179]][_0xd587[249]]()[_0xd587[255]];return new mxRectangle(0,0,null== _0x5c29x2[_0xd587[963]]?30:_0x5c29x2[_0xd587[963]][_0xd587[803]]* _0x5c29x3+ 20,_0xd587[361]== this[_0xd587[126]][_0xd587[124]][_0xd587[1165]]?120:40)};mxCellEditor[_0xd587[202]][_0xd587[2137]]= function(_0x5c29x2){var _0x5c29x3=this[_0xd587[1179]][_0xd587[502]]()[_0xd587[250]](_0x5c29x2[_0xd587[246]]),_0x5c29x4=this[_0xd587[1179]][_0xd587[249]]()[_0xd587[255]],_0x5c29x5=this[_0xd587[939]](_0x5c29x2),_0x5c29x9=_0x5c29x5[_0xd587[117]],_0x5c29x5=_0x5c29x5[_0xd587[119]],_0x5c29xa=parseInt(_0x5c29x2[_0xd587[124]][mxConstants[_0xd587[2143]]]|| 2)* _0x5c29x4,_0x5c29x12=parseInt(_0x5c29x2[_0xd587[124]][mxConstants[_0xd587[2144]]]|| 0)* _0x5c29x4+ _0x5c29xa,_0x5c29x13=parseInt(_0x5c29x2[_0xd587[124]][mxConstants[_0xd587[2145]]]|| 0)* _0x5c29x4+ _0x5c29xa,_0x5c29x14=parseInt(_0x5c29x2[_0xd587[124]][mxConstants[_0xd587[2146]]]|| 0)* _0x5c29x4+ _0x5c29xa,_0x5c29x4=parseInt(_0x5c29x2[_0xd587[124]][mxConstants[_0xd587[2147]]]|| 0)* _0x5c29x4+ _0x5c29xa,_0x5c29x13= new mxRectangle(_0x5c29x2[_0xd587[235]],_0x5c29x2[_0xd587[236]],Math[_0xd587[160]](_0x5c29x9,_0x5c29x2[_0xd587[117]]- _0x5c29x4- _0x5c29x13),Math[_0xd587[160]](_0x5c29x5,_0x5c29x2[_0xd587[119]]- _0x5c29x12- _0x5c29x14));_0x5c29x3?(_0x5c29x13[_0xd587[235]]= _0x5c29x2[_0xd587[2079]][_0xd587[235]],_0x5c29x13[_0xd587[236]]= _0x5c29x2[_0xd587[2079]][_0xd587[236]],null!= _0x5c29x2[_0xd587[963]]&& null!= _0x5c29x2[_0xd587[963]][_0xd587[1563]]&& (0< _0x5c29x2[_0xd587[963]][_0xd587[1563]][_0xd587[235]]&& (_0x5c29x13[_0xd587[235]]= _0x5c29x2[_0xd587[963]][_0xd587[1563]][_0xd587[235]]),0< _0x5c29x2[_0xd587[963]][_0xd587[1563]][_0xd587[236]]&& (_0x5c29x13[_0xd587[236]]= _0x5c29x2[_0xd587[963]][_0xd587[1563]][_0xd587[236]]))):null!= _0x5c29x2[_0xd587[963]]&& null!= _0x5c29x2[_0xd587[963]][_0xd587[1563]]&& (_0x5c29x13[_0xd587[235]]= Math[_0xd587[243]](_0x5c29x13[_0xd587[235]],_0x5c29x2[_0xd587[963]][_0xd587[1563]][_0xd587[235]]),_0x5c29x13[_0xd587[236]]= Math[_0xd587[243]](_0x5c29x13[_0xd587[236]],_0x5c29x2[_0xd587[963]][_0xd587[1563]][_0xd587[236]]));_0x5c29x13[_0xd587[235]]+= _0x5c29x4;_0x5c29x13[_0xd587[236]]+= _0x5c29x12;null!= _0x5c29x2[_0xd587[963]]&& null!= _0x5c29x2[_0xd587[963]][_0xd587[1563]]&& (_0x5c29x3?(_0x5c29x13[_0xd587[117]]= Math[_0xd587[160]](_0x5c29x9,_0x5c29x2[_0xd587[963]][_0xd587[1563]][_0xd587[117]]),_0x5c29x13[_0xd587[119]]= Math[_0xd587[160]](_0x5c29x5,_0x5c29x2[_0xd587[963]][_0xd587[1563]][_0xd587[119]])):(_0x5c29x13[_0xd587[117]]= Math[_0xd587[160]](_0x5c29x13[_0xd587[117]],_0x5c29x2[_0xd587[963]][_0xd587[1563]][_0xd587[117]]),_0x5c29x13[_0xd587[119]]= Math[_0xd587[160]](_0x5c29x13[_0xd587[119]],_0x5c29x2[_0xd587[963]][_0xd587[1563]][_0xd587[119]])));this[_0xd587[1179]][_0xd587[502]]()[_0xd587[1193]](_0x5c29x2[_0xd587[246]])&& (_0x5c29x3= mxUtils[_0xd587[433]](_0x5c29x2[_0xd587[124]],mxConstants.STYLE_LABEL_POSITION,mxConstants.ALIGN_CENTER),_0x5c29x3== mxConstants[_0xd587[2132]]?_0x5c29x13[_0xd587[235]]-= _0x5c29x2[_0xd587[117]]:_0x5c29x3== mxConstants[_0xd587[480]]&& (_0x5c29x13[_0xd587[235]]+= _0x5c29x2[_0xd587[117]]),_0x5c29x3= mxUtils[_0xd587[433]](_0x5c29x2[_0xd587[124]],mxConstants.STYLE_VERTICAL_LABEL_POSITION,mxConstants.ALIGN_MIDDLE),_0x5c29x3== mxConstants[_0xd587[1687]]?_0x5c29x13[_0xd587[236]]-= _0x5c29x2[_0xd587[119]]:_0x5c29x3== mxConstants[_0xd587[482]]&& (_0x5c29x13[_0xd587[236]]+= _0x5c29x2[_0xd587[119]]));return _0x5c29x13};mxCellEditor[_0xd587[202]][_0xd587[2139]]= function(_0x5c29x2){return this[_0xd587[2115]]};mxCellEditor[_0xd587[202]][_0xd587[2148]]= function(){return this[_0xd587[2111]]};mxCellEditor[_0xd587[202]][_0xd587[515]]= function(){null!= this[_0xd587[126]]&& (mxEvent[_0xd587[762]](this[_0xd587[126]]),null!= this[_0xd587[126]][_0xd587[265]]&& this[_0xd587[126]][_0xd587[265]][_0xd587[266]](this[_0xd587[126]]),this[_0xd587[126]]= null)};function mxCellRenderer(){}mxCellRenderer[_0xd587[202]][_0xd587[2149]]= mxConnector;mxCellRenderer[_0xd587[202]][_0xd587[2150]]= mxRectangleShape;mxCellRenderer[_0xd587[202]][_0xd587[2151]]= mxText;mxCellRenderer[_0xd587[202]][_0xd587[2152]]= !0;mxCellRenderer[_0xd587[202]][_0xd587[2153]]= {};mxCellRenderer[_0xd587[2154]]= function(_0x5c29x2,_0x5c29x3){mxCellRenderer[_0xd587[202]][_0xd587[2153]][_0x5c29x2]= _0x5c29x3};mxCellRenderer[_0xd587[2154]](mxConstants.SHAPE_RECTANGLE,mxRectangleShape);mxCellRenderer[_0xd587[2154]](mxConstants.SHAPE_ELLIPSE,mxEllipse);mxCellRenderer[_0xd587[2154]](mxConstants.SHAPE_RHOMBUS,mxRhombus);mxCellRenderer[_0xd587[2154]](mxConstants.SHAPE_CYLINDER,mxCylinder);mxCellRenderer[_0xd587[2154]](mxConstants.SHAPE_CONNECTOR,mxConnector);mxCellRenderer[_0xd587[2154]](mxConstants.SHAPE_ACTOR,mxActor);mxCellRenderer[_0xd587[2154]](mxConstants.SHAPE_TRIANGLE,mxTriangle);mxCellRenderer[_0xd587[2154]](mxConstants.SHAPE_HEXAGON,mxHexagon);mxCellRenderer[_0xd587[2154]](mxConstants.SHAPE_CLOUD,mxCloud);mxCellRenderer[_0xd587[2154]](mxConstants.SHAPE_LINE,mxLine);mxCellRenderer[_0xd587[2154]](mxConstants.SHAPE_ARROW,mxArrow);mxCellRenderer[_0xd587[2154]](mxConstants.SHAPE_DOUBLE_ELLIPSE,mxDoubleEllipse);mxCellRenderer[_0xd587[2154]](mxConstants.SHAPE_SWIMLANE,mxSwimlane);mxCellRenderer[_0xd587[2154]](mxConstants.SHAPE_IMAGE,mxImageShape);mxCellRenderer[_0xd587[2154]](mxConstants.SHAPE_LABEL,mxLabel);mxCellRenderer[_0xd587[202]][_0xd587[2155]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=_0x5c29x2[_0xd587[441]][_0xd587[1179]][_0xd587[502]]();if(null!= _0x5c29x2[_0xd587[441]][_0xd587[1179]][_0xd587[526]]&& null== _0x5c29x2[_0xd587[253]]&& _0x5c29x2[_0xd587[246]]!= _0x5c29x2[_0xd587[441]][_0xd587[1741]]&& (_0x5c29x4[_0xd587[1193]](_0x5c29x2[_0xd587[246]])|| _0x5c29x4[_0xd587[250]](_0x5c29x2[_0xd587[246]]))){if(this[_0xd587[2156]](_0x5c29x2),null!= _0x5c29x2[_0xd587[253]]&& (null== _0x5c29x3|| _0x5c29x3)){this[_0xd587[2157]](_0x5c29x2),_0x5c29x2[_0xd587[441]][_0xd587[1179]][_0xd587[2158]]|| _0x5c29x4[_0xd587[250]](_0x5c29x2[_0xd587[246]])?_0x5c29x2[_0xd587[2081]]= !0:_0x5c29x2[_0xd587[441]][_0xd587[1179]][_0xd587[2159]]&& null!= this[_0xd587[2160]]&& (this[_0xd587[2160]][_0xd587[265]]== _0x5c29x2[_0xd587[253]][_0xd587[252]][_0xd587[265]]?this[_0xd587[2161]](_0x5c29x2,this[_0xd587[2160]]):this[_0xd587[2160]]= null),_0x5c29x2[_0xd587[253]][_0xd587[255]]= _0x5c29x2[_0xd587[441]][_0xd587[255]],this[_0xd587[2162]](_0x5c29x2),this[_0xd587[2163]](_0x5c29x2)}}};mxCellRenderer[_0xd587[202]][_0xd587[2157]]= function(_0x5c29x2){_0x5c29x2[_0xd587[253]][_0xd587[176]](_0x5c29x2[_0xd587[441]][_0xd587[2024]]())};mxCellRenderer[_0xd587[202]][_0xd587[2164]]= function(_0x5c29x2,_0x5c29x3){for(var _0x5c29x4=null,_0x5c29x5=_0x5c29x2[_0xd587[441]][_0xd587[1179]],_0x5c29x9=_0x5c29x5[_0xd587[502]](),_0x5c29xa=_0x5c29x2[_0xd587[246]],_0x5c29x12=_0x5c29x9[_0xd587[1197]](_0x5c29xa);null!= _0x5c29x12&& null== _0x5c29x4;){_0x5c29x4= this[_0xd587[2165]](_0x5c29x5,_0x5c29x12,_0x5c29xa,_0x5c29x3),_0x5c29xa= _0x5c29x12,_0x5c29x12= _0x5c29x9[_0xd587[1197]](_0x5c29xa)};return _0x5c29x4};mxCellRenderer[_0xd587[202]][_0xd587[2165]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){var _0x5c29x9=null,_0x5c29xa=_0x5c29x2[_0xd587[502]]();for(_0x5c29x4= null!= _0x5c29x4?_0x5c29x3[_0xd587[1738]](_0x5c29x4)- 1:_0x5c29xa[_0xd587[262]](_0x5c29x3)- 1;0<= _0x5c29x4&& null== _0x5c29x9;_0x5c29x4--){_0x5c29x9= this[_0xd587[2165]](_0x5c29x2,_0x5c29xa[_0xd587[263]](_0x5c29x3,_0x5c29x4),null,_0x5c29x5)};if(null== _0x5c29x9&& (_0x5c29x9= _0x5c29x2[_0xd587[441]][_0xd587[248]](_0x5c29x3),null!= _0x5c29x9&& (null== _0x5c29x9[_0xd587[253]]|| null== _0x5c29x9[_0xd587[253]][_0xd587[252]]|| _0x5c29x9[_0xd587[253]][_0xd587[252]][_0xd587[265]]!= _0x5c29x5))){_0x5c29x9= null};return _0x5c29x9};mxCellRenderer[_0xd587[202]][_0xd587[2166]]= function(_0x5c29x2){var _0x5c29x3=_0x5c29x2[_0xd587[253]][_0xd587[252]][_0xd587[265]],_0x5c29x4=this[_0xd587[2164]](_0x5c29x2,_0x5c29x3),_0x5c29x5=_0x5c29x3[_0xd587[285]];null!= _0x5c29x4&& (_0x5c29x5= _0x5c29x4[_0xd587[253]][_0xd587[252]],null!= _0x5c29x4[_0xd587[963]]&& (null!= _0x5c29x4[_0xd587[963]][_0xd587[252]]&& _0x5c29x4[_0xd587[963]][_0xd587[252]][_0xd587[265]]== _0x5c29x3)&& (_0x5c29x5= _0x5c29x4[_0xd587[963]][_0xd587[252]]),_0x5c29x5= _0x5c29x5[_0xd587[287]]);this[_0xd587[2161]](_0x5c29x2,_0x5c29x5)};mxCellRenderer[_0xd587[202]][_0xd587[2167]]= function(_0x5c29x2){var _0x5c29x3=_0x5c29x2[_0xd587[441]],_0x5c29x4=_0x5c29x3[_0xd587[1179]][_0xd587[502]]();if(_0x5c29x3[_0xd587[1179]][_0xd587[2159]]){if(null== this[_0xd587[2160]]|| null== this[_0xd587[2160]][_0xd587[265]]|| this[_0xd587[2160]][_0xd587[265]]!= _0x5c29x2[_0xd587[253]][_0xd587[252]][_0xd587[265]]){this[_0xd587[2160]]= _0x5c29x2[_0xd587[253]][_0xd587[252]]}}else {if(_0x5c29x3[_0xd587[1179]][_0xd587[2168]]){var _0x5c29x5=_0x5c29x2[_0xd587[253]][_0xd587[252]],_0x5c29x9=_0x5c29x5[_0xd587[265]],_0x5c29x4=_0x5c29x4[_0xd587[1197]](_0x5c29x2[_0xd587[246]]),_0x5c29x3=_0x5c29x3[_0xd587[248]](_0x5c29x4),_0x5c29x9=null!= _0x5c29x3&& null!= _0x5c29x3[_0xd587[253]]&& null!= _0x5c29x3[_0xd587[253]][_0xd587[252]]?_0x5c29x3[_0xd587[253]][_0xd587[252]][_0xd587[287]]:_0x5c29x9[_0xd587[285]];null!= _0x5c29x9&& _0x5c29x9!= _0x5c29x5&& this[_0xd587[2161]](_0x5c29x2,_0x5c29x9)}}};mxCellRenderer[_0xd587[202]][_0xd587[2161]]= function(_0x5c29x2,_0x5c29x3){_0x5c29x2[_0xd587[253]][_0xd587[252]][_0xd587[265]][_0xd587[950]](_0x5c29x2[_0xd587[253]][_0xd587[252]],_0x5c29x3);null!= _0x5c29x2[_0xd587[963]]&& (null!= _0x5c29x2[_0xd587[963]][_0xd587[252]]&& _0x5c29x2[_0xd587[963]][_0xd587[252]][_0xd587[265]]== _0x5c29x2[_0xd587[253]][_0xd587[252]][_0xd587[265]])&& _0x5c29x2[_0xd587[253]][_0xd587[252]][_0xd587[265]][_0xd587[950]](_0x5c29x2[_0xd587[963]][_0xd587[252]],_0x5c29x2[_0xd587[253]][_0xd587[252]][_0xd587[287]])};mxCellRenderer[_0xd587[202]][_0xd587[2156]]= function(_0x5c29x2){if(null!= _0x5c29x2[_0xd587[124]]){var _0x5c29x3=mxStencilRegistry[_0xd587[1560]](_0x5c29x2[_0xd587[124]][mxConstants[_0xd587[2059]]]);null!= _0x5c29x3?_0x5c29x2[_0xd587[253]]= new mxShape(_0x5c29x3):(_0x5c29x3= this[_0xd587[2169]](_0x5c29x2),_0x5c29x2[_0xd587[253]]= new _0x5c29x3);_0x5c29x2[_0xd587[253]][_0xd587[1525]]= _0x5c29x2[_0xd587[439]];_0x5c29x2[_0xd587[253]][_0xd587[1562]]= new mxRectangle(_0x5c29x2[_0xd587[235]],_0x5c29x2[_0xd587[236]],_0x5c29x2[_0xd587[117]],_0x5c29x2[_0xd587[119]]);_0x5c29x2[_0xd587[253]][_0xd587[507]]= _0x5c29x2[_0xd587[441]][_0xd587[1179]][_0xd587[507]];this[_0xd587[2170]](_0x5c29x2)}};mxCellRenderer[_0xd587[202]][_0xd587[2171]]= function(_0x5c29x2){return null!= _0x5c29x2?mxCellRenderer[_0xd587[202]][_0xd587[2153]][_0x5c29x2]:null};mxCellRenderer[_0xd587[202]][_0xd587[2169]]= function(_0x5c29x2){var _0x5c29x3=this[_0xd587[2171]](_0x5c29x2[_0xd587[124]][mxConstants[_0xd587[2059]]]);null== _0x5c29x3&& (_0x5c29x3= _0x5c29x2[_0xd587[441]][_0xd587[1179]][_0xd587[502]]()[_0xd587[250]](_0x5c29x2[_0xd587[246]])?this[_0xd587[2149]]:this[_0xd587[2150]]);return _0x5c29x3};mxCellRenderer[_0xd587[202]][_0xd587[2170]]= function(_0x5c29x2){_0x5c29x2[_0xd587[253]][_0xd587[183]](_0x5c29x2);_0x5c29x2[_0xd587[253]][_0xd587[618]]= _0x5c29x2[_0xd587[441]][_0xd587[1179]][_0xd587[1202]](_0x5c29x2);_0x5c29x2[_0xd587[253]][_0xd587[630]]= this[_0xd587[2171]](_0x5c29x2[_0xd587[441]][_0xd587[1179]][_0xd587[2172]](_0x5c29x2));_0x5c29x2[_0xd587[253]][_0xd587[632]]= _0x5c29x2[_0xd587[441]][_0xd587[1179]][_0xd587[2173]](_0x5c29x2);_0x5c29x2[_0xd587[253]][_0xd587[634]]= _0x5c29x2[_0xd587[441]][_0xd587[1179]][_0xd587[2174]](_0x5c29x2);_0x5c29x2[_0xd587[253]][_0xd587[638]]= _0x5c29x2[_0xd587[124]][mxConstants[_0xd587[2175]]];_0x5c29x2[_0xd587[253]][_0xd587[631]]= _0x5c29x2[_0xd587[441]][_0xd587[1179]][_0xd587[2176]](_0x5c29x2);this[_0xd587[2177]](_0x5c29x2)};mxCellRenderer[_0xd587[202]][_0xd587[2177]]= function(_0x5c29x2){null!= _0x5c29x2[_0xd587[253]]&& (this[_0xd587[2178]](_0x5c29x2,_0xd587[632],mxConstants.STYLE_FILLCOLOR),this[_0xd587[2178]](_0x5c29x2,_0xd587[634],mxConstants.STYLE_GRADIENTCOLOR),this[_0xd587[2178]](_0x5c29x2,_0xd587[1334],mxConstants.STYLE_FILLCOLOR),this[_0xd587[2178]](_0x5c29x2,_0xd587[1336],mxConstants.STYLE_STROKECOLOR),this[_0xd587[2178]](_0x5c29x2,_0xd587[1299],mxConstants.STYLE_GRADIENTCOLOR))};mxCellRenderer[_0xd587[202]][_0xd587[2178]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){var _0x5c29x5=_0x5c29x2[_0xd587[253]][_0x5c29x3],_0x5c29x9=_0x5c29x2[_0xd587[441]][_0xd587[1179]],_0x5c29xa=null;_0xd587[1549]== _0x5c29x5?_0x5c29xa= _0x5c29x9[_0xd587[251]][_0xd587[1197]](_0x5c29x2[_0xd587[246]]):_0xd587[687]== _0x5c29x5?(_0x5c29xa= null!= _0x5c29x9[_0xd587[251]][_0xd587[1709]](_0x5c29x2[_0xd587[246]],!1)?_0x5c29x9[_0xd587[251]][_0xd587[1709]](_0x5c29x2[_0xd587[246]],!1):_0x5c29x2[_0xd587[246]],_0x5c29xa= _0x5c29x9[_0xd587[2179]](_0x5c29xa),_0x5c29x4= _0x5c29x9[_0xd587[2180]]):_0xd587[2181]== _0x5c29x5&& (_0x5c29x2[_0xd587[253]][_0x5c29x3]= _0x5c29x2[_0xd587[253]][_0xd587[632]]);null!= _0x5c29xa&& (_0x5c29x5= _0x5c29x9[_0xd587[249]]()[_0xd587[248]](_0x5c29xa),_0x5c29x2[_0xd587[253]][_0x5c29x3]= null,null!= _0x5c29x5&& (_0x5c29x2[_0xd587[253]][_0x5c29x3]= null!= _0x5c29x5[_0xd587[253]]&& _0xd587[632]!= _0x5c29x3?_0x5c29x5[_0xd587[253]][_0x5c29x3]:_0x5c29x5[_0xd587[124]][_0x5c29x4]))};mxCellRenderer[_0xd587[202]][_0xd587[2182]]= function(_0x5c29x2){return _0x5c29x2[_0xd587[441]][_0xd587[1179]][_0xd587[2183]](_0x5c29x2[_0xd587[246]])};mxCellRenderer[_0xd587[202]][_0xd587[2184]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=_0x5c29x2[_0xd587[441]][_0xd587[1179]];_0x5c29x4[_0xd587[502]]()[_0xd587[250]](_0x5c29x2[_0xd587[246]]);if(0< _0x5c29x2[_0xd587[124]][mxConstants[_0xd587[2185]]]|| null== _0x5c29x2[_0xd587[124]][mxConstants[_0xd587[2185]]]){var _0x5c29x5=_0x5c29x4[_0xd587[2186]](_0x5c29x2[_0xd587[246]])|| null!= _0x5c29x3&& mxUtils[_0xd587[1331]](_0x5c29x3);_0x5c29x2[_0xd587[963]]= new this[_0xd587[2151]](_0x5c29x3, new mxRectangle,_0x5c29x2[_0xd587[124]][mxConstants[_0xd587[2064]]]|| mxConstants[_0xd587[479]],_0x5c29x4[_0xd587[2187]](_0x5c29x2),_0x5c29x2[_0xd587[124]][mxConstants[_0xd587[2069]]],_0x5c29x2[_0xd587[124]][mxConstants[_0xd587[2188]]],_0x5c29x2[_0xd587[124]][mxConstants[_0xd587[2185]]],_0x5c29x2[_0xd587[124]][mxConstants[_0xd587[2189]]],_0x5c29x2[_0xd587[124]][mxConstants[_0xd587[2143]]],_0x5c29x2[_0xd587[124]][mxConstants[_0xd587[2144]]],_0x5c29x2[_0xd587[124]][mxConstants[_0xd587[2145]]],_0x5c29x2[_0xd587[124]][mxConstants[_0xd587[2146]]],_0x5c29x2[_0xd587[124]][mxConstants[_0xd587[2147]]],_0x5c29x2[_0xd587[124]][mxConstants[_0xd587[2190]]],_0x5c29x2[_0xd587[124]][mxConstants[_0xd587[2191]]],_0x5c29x2[_0xd587[124]][mxConstants[_0xd587[2192]]],_0x5c29x4[_0xd587[2131]](_0x5c29x2[_0xd587[246]])&& _0x5c29x4[_0xd587[2186]](_0x5c29x2[_0xd587[246]]),_0x5c29x4[_0xd587[2130]](_0x5c29x2[_0xd587[246]]),_0x5c29x2[_0xd587[124]][mxConstants[_0xd587[2193]]],_0x5c29x2[_0xd587[124]][mxConstants[_0xd587[2194]]]);_0x5c29x2[_0xd587[963]][_0xd587[461]]= mxUtils[_0xd587[433]](_0x5c29x2[_0xd587[124]],mxConstants.STYLE_TEXT_OPACITY,100);_0x5c29x2[_0xd587[963]][_0xd587[507]]= _0x5c29x5?mxConstants[_0xd587[1656]]:_0x5c29x2[_0xd587[441]][_0xd587[1179]][_0xd587[507]];_0x5c29x2[_0xd587[963]][_0xd587[724]]= _0x5c29x2;this[_0xd587[2195]](_0x5c29x2);var _0x5c29x9=!1,_0x5c29xa=function(_0x5c29x3){var _0x5c29x5=_0x5c29x2;if(mxClient[_0xd587[754]]|| _0x5c29x9){_0x5c29x5= mxEvent[_0xd587[731]](_0x5c29x3),_0x5c29x3= mxEvent[_0xd587[733]](_0x5c29x3),_0x5c29x3= mxUtils[_0xd587[2196]](_0x5c29x4[_0xd587[526]],_0x5c29x5,_0x5c29x3),_0x5c29x5= _0x5c29x4[_0xd587[441]][_0xd587[248]](_0x5c29x4[_0xd587[999]](_0x5c29x3[_0xd587[235]],_0x5c29x3[_0xd587[236]]))};return _0x5c29x5};mxEvent[_0xd587[759]](_0x5c29x2[_0xd587[963]][_0xd587[252]],mxUtils[_0xd587[885]](this,function(_0x5c29x3){this[_0xd587[2197]](_0x5c29x2,_0x5c29x3)&& (_0x5c29x4[_0xd587[758]](mxEvent.MOUSE_DOWN, new mxMouseEvent(_0x5c29x3,_0x5c29x2)),_0x5c29x9= _0x5c29x4[_0xd587[507]]!= mxConstants[_0xd587[508]]&& _0xd587[2198]== mxEvent[_0xd587[728]](_0x5c29x3)[_0xd587[301]])}),mxUtils[_0xd587[885]](this,function(_0x5c29x3){this[_0xd587[2197]](_0x5c29x2,_0x5c29x3)&& _0x5c29x4[_0xd587[758]](mxEvent.MOUSE_MOVE, new mxMouseEvent(_0x5c29x3,_0x5c29xa(_0x5c29x3)))}),mxUtils[_0xd587[885]](this,function(_0x5c29x3){this[_0xd587[2197]](_0x5c29x2,_0x5c29x3)&& (_0x5c29x4[_0xd587[758]](mxEvent.MOUSE_UP, new mxMouseEvent(_0x5c29x3,_0x5c29xa(_0x5c29x3))),_0x5c29x9= !1)}));mxEvent[_0xd587[169]](_0x5c29x2[_0xd587[963]][_0xd587[252]],_0xd587[760],mxUtils[_0xd587[885]](this,function(_0x5c29x3){this[_0xd587[2197]](_0x5c29x2,_0x5c29x3)&& (_0x5c29x4[_0xd587[761]](_0x5c29x3,_0x5c29x2[_0xd587[246]]),mxEvent[_0xd587[722]](_0x5c29x3))}))}};mxCellRenderer[_0xd587[202]][_0xd587[2195]]= function(_0x5c29x2){var _0x5c29x3=_0x5c29x2[_0xd587[441]][_0xd587[1179]];_0x5c29x2[_0xd587[963]][_0xd587[507]]!= mxConstants[_0xd587[508]]&& (mxClient[_0xd587[48]]&& mxClient[_0xd587[2199]]?_0x5c29x2[_0xd587[963]][_0xd587[176]](_0x5c29x3[_0xd587[526]]):mxUtils[_0xd587[458]](_0x5c29x2[_0xd587[441]][_0xd587[2024]]())&& (null!= _0x5c29x2[_0xd587[253]][_0xd587[685]]?_0x5c29x2[_0xd587[963]][_0xd587[176]](_0x5c29x2[_0xd587[253]][_0xd587[685]]):_0x5c29x2[_0xd587[963]][_0xd587[176]](_0x5c29x2[_0xd587[253]][_0xd587[252]])));null== _0x5c29x2[_0xd587[963]][_0xd587[252]]&& (_0x5c29x2[_0xd587[963]][_0xd587[176]](_0x5c29x2[_0xd587[441]][_0xd587[2024]]()),null!= _0x5c29x2[_0xd587[253]]&& null!= _0x5c29x2[_0xd587[963]]&& _0x5c29x2[_0xd587[253]][_0xd587[252]][_0xd587[265]][_0xd587[950]](_0x5c29x2[_0xd587[963]][_0xd587[252]],_0x5c29x2[_0xd587[253]][_0xd587[252]][_0xd587[287]]))};mxCellRenderer[_0xd587[202]][_0xd587[2162]]= function(_0x5c29x2){var _0x5c29x3=_0x5c29x2[_0xd587[441]][_0xd587[1179]][_0xd587[2200]](_0x5c29x2[_0xd587[246]]),_0x5c29x4=null;if(null!= _0x5c29x3){for(var _0x5c29x4= new mxDictionary,_0x5c29x5=0;_0x5c29x5< _0x5c29x3[_0xd587[67]];_0x5c29x5++){var _0x5c29x9=null!= _0x5c29x2[_0xd587[1211]]?_0x5c29x2[_0xd587[1211]][_0xd587[205]](_0x5c29x3[_0x5c29x5]):null;null== _0x5c29x9&& (_0x5c29x9= new mxImageShape( new mxRectangle,_0x5c29x3[_0x5c29x5][_0xd587[618]][_0xd587[390]]),_0x5c29x9[_0xd587[507]]= _0x5c29x2[_0xd587[441]][_0xd587[1179]][_0xd587[507]],_0x5c29x9[_0xd587[1674]]= !1,_0x5c29x9[_0xd587[2201]]= _0x5c29x3[_0x5c29x5],this[_0xd587[2023]](_0x5c29x2,_0x5c29x9),this[_0xd587[2202]](_0x5c29x2,_0x5c29x3[_0x5c29x5],_0x5c29x9),null!= _0x5c29x3[_0x5c29x5][_0xd587[270]]&& (_0x5c29x9[_0xd587[252]][_0xd587[124]][_0xd587[270]]= _0x5c29x3[_0x5c29x5][_0xd587[270]]));_0x5c29x4[_0xd587[204]](_0x5c29x3[_0x5c29x5],_0x5c29x9)}};null!= _0x5c29x2[_0xd587[1211]]&& _0x5c29x2[_0xd587[1211]][_0xd587[209]](function(_0x5c29x2,_0x5c29x3){_0x5c29x3[_0xd587[515]]()});_0x5c29x2[_0xd587[1211]]= _0x5c29x4};mxCellRenderer[_0xd587[202]][_0xd587[2023]]= function(_0x5c29x2,_0x5c29x3){_0x5c29x3[_0xd587[176]](_0x5c29x2[_0xd587[441]][_0xd587[1524]]())};mxCellRenderer[_0xd587[202]][_0xd587[2202]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){var _0x5c29x5=_0x5c29x2[_0xd587[441]][_0xd587[1179]];mxEvent[_0xd587[169]](_0x5c29x4[_0xd587[252]],_0xd587[173],function(_0x5c29x4){_0x5c29x5[_0xd587[2203]]()&& _0x5c29x5[_0xd587[2126]](!_0x5c29x5[_0xd587[2134]]());_0x5c29x3[_0xd587[746]]( new mxEventObject(mxEvent.CLICK,_0xd587[763],_0x5c29x4,_0xd587[246],_0x5c29x2[_0xd587[246]]))});mxEvent[_0xd587[759]](_0x5c29x4[_0xd587[252]],function(_0x5c29x2){mxEvent[_0xd587[722]](_0x5c29x2)},function(_0x5c29x3){_0x5c29x5[_0xd587[758]](mxEvent.MOUSE_MOVE, new mxMouseEvent(_0x5c29x3,_0x5c29x2))});mxClient[_0xd587[754]]&& mxEvent[_0xd587[169]](_0x5c29x4[_0xd587[252]],_0xd587[757],function(_0x5c29x4){_0x5c29x3[_0xd587[746]]( new mxEventObject(mxEvent.CLICK,_0xd587[763],_0x5c29x4,_0xd587[246],_0x5c29x2[_0xd587[246]]))})};mxCellRenderer[_0xd587[202]][_0xd587[2204]]= function(_0x5c29x2){var _0x5c29x3=_0x5c29x2[_0xd587[441]][_0xd587[1179]],_0x5c29x4=_0x5c29x3[_0xd587[2205]](_0x5c29x2);if(_0x5c29x3[_0xd587[2206]]&& null!= _0x5c29x4){if(null== _0x5c29x2[_0xd587[2207]]){var _0x5c29x5= new mxRectangle(0,0,_0x5c29x4[_0xd587[117]],_0x5c29x4[_0xd587[119]]);_0x5c29x2[_0xd587[2207]]= new mxImageShape(_0x5c29x5,_0x5c29x4[_0xd587[390]]);_0x5c29x2[_0xd587[2207]][_0xd587[1674]]= !1;_0x5c29x2[_0xd587[2207]][_0xd587[507]]= _0x5c29x3[_0xd587[507]];this[_0xd587[2208]](_0x5c29x2,_0x5c29x2[_0xd587[2207]],!0,function(_0x5c29x4){if(_0x5c29x3[_0xd587[994]]()){var _0x5c29x5=!_0x5c29x3[_0xd587[1742]](_0x5c29x2[_0xd587[246]]);_0x5c29x3[_0xd587[847]](_0x5c29x5,!1,[_0x5c29x2[_0xd587[246]]]);mxEvent[_0xd587[722]](_0x5c29x4)}})}}else {null!= _0x5c29x2[_0xd587[2207]]&& (_0x5c29x2[_0xd587[2207]][_0xd587[515]](),_0x5c29x2[_0xd587[2207]]= null)}};mxCellRenderer[_0xd587[202]][_0xd587[2208]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){var _0x5c29x9=_0x5c29x2[_0xd587[441]][_0xd587[1179]];_0x5c29x9[_0xd587[2186]](_0x5c29x2[_0xd587[246]])&& mxClient[_0xd587[2199]]&& _0x5c29x9[_0xd587[507]]== mxConstants[_0xd587[508]]?(_0x5c29x3[_0xd587[507]]= mxConstants[_0xd587[2209]],_0x5c29x3[_0xd587[176]](_0x5c29x9[_0xd587[526]]),_0x5c29x3[_0xd587[252]][_0xd587[124]][_0xd587[931]]= 1):_0x5c29x3[_0xd587[176]](_0x5c29x2[_0xd587[441]][_0xd587[1524]]());_0x5c29x3= _0x5c29x3[_0xd587[2210]]|| _0x5c29x3[_0xd587[252]];_0x5c29x5&& (_0x5c29x9[_0xd587[994]]()&& (_0x5c29x3[_0xd587[124]][_0xd587[270]]= _0xd587[356]),mxEvent[_0xd587[169]](_0x5c29x3,_0xd587[173],_0x5c29x5));_0x5c29x4&& mxEvent[_0xd587[759]](_0x5c29x3,function(_0x5c29x3){_0x5c29x9[_0xd587[758]](mxEvent.MOUSE_DOWN, new mxMouseEvent(_0x5c29x3,_0x5c29x2));mxEvent[_0xd587[722]](_0x5c29x3)},function(_0x5c29x3){_0x5c29x9[_0xd587[758]](mxEvent.MOUSE_MOVE, new mxMouseEvent(_0x5c29x3,_0x5c29x2))});return _0x5c29x3};mxCellRenderer[_0xd587[202]][_0xd587[2211]]= function(_0x5c29x2,_0x5c29x3){return !0};mxCellRenderer[_0xd587[202]][_0xd587[2197]]= function(_0x5c29x2,_0x5c29x3){return !0};mxCellRenderer[_0xd587[202]][_0xd587[2163]]= function(_0x5c29x2){var _0x5c29x3=_0x5c29x2[_0xd587[441]][_0xd587[1179]],_0x5c29x4=function(_0x5c29x4){var _0x5c29x5=_0x5c29x2;if(_0x5c29x3[_0xd587[507]]!= mxConstants[_0xd587[508]]&& _0xd587[2198]== mxEvent[_0xd587[728]](_0x5c29x4)[_0xd587[301]]|| mxClient[_0xd587[754]]){_0x5c29x5= mxEvent[_0xd587[731]](_0x5c29x4),_0x5c29x4= mxEvent[_0xd587[733]](_0x5c29x4),_0x5c29x4= mxUtils[_0xd587[2196]](_0x5c29x3[_0xd587[526]],_0x5c29x5,_0x5c29x4),_0x5c29x5= _0x5c29x3[_0xd587[441]][_0xd587[248]](_0x5c29x3[_0xd587[999]](_0x5c29x4[_0xd587[235]],_0x5c29x4[_0xd587[236]]))};return _0x5c29x5},_0x5c29x5=!1;mxEvent[_0xd587[169]](_0x5c29x2[_0xd587[253]][_0xd587[252]],_0xd587[2212],mxUtils[_0xd587[885]](this,function(_0x5c29x2){_0x5c29x3[_0xd587[2213]]= 0;_0x5c29x5= !0;mxEvent[_0xd587[722]](_0x5c29x2)}));mxEvent[_0xd587[759]](_0x5c29x2[_0xd587[253]][_0xd587[252]],mxUtils[_0xd587[885]](this,function(_0x5c29x4){this[_0xd587[2211]](_0x5c29x2,_0x5c29x4)&& !_0x5c29x5?_0x5c29x3[_0xd587[758]](mxEvent.MOUSE_DOWN, new mxMouseEvent(_0x5c29x4,null!= _0x5c29x2[_0xd587[253]]&& mxEvent[_0xd587[728]](_0x5c29x4)== _0x5c29x2[_0xd587[253]][_0xd587[905]]?null:_0x5c29x2)):_0x5c29x5&& mxEvent[_0xd587[722]](_0x5c29x4)}),mxUtils[_0xd587[885]](this,function(_0x5c29x9){this[_0xd587[2211]](_0x5c29x2,_0x5c29x9)&& !_0x5c29x5?_0x5c29x3[_0xd587[758]](mxEvent.MOUSE_MOVE, new mxMouseEvent(_0x5c29x9,null!= _0x5c29x2[_0xd587[253]]&& mxEvent[_0xd587[728]](_0x5c29x9)== _0x5c29x2[_0xd587[253]][_0xd587[905]]?null:_0x5c29x4(_0x5c29x9))):_0x5c29x5&& mxEvent[_0xd587[722]](_0x5c29x9)}),mxUtils[_0xd587[885]](this,function(_0x5c29x9){this[_0xd587[2211]](_0x5c29x2,_0x5c29x9)&& !_0x5c29x5?_0x5c29x3[_0xd587[758]](mxEvent.MOUSE_UP, new mxMouseEvent(_0x5c29x9,null!= _0x5c29x2[_0xd587[253]]&& mxEvent[_0xd587[728]](_0x5c29x9)== _0x5c29x2[_0xd587[253]][_0xd587[905]]?null:_0x5c29x4(_0x5c29x9))):_0x5c29x5&& mxEvent[_0xd587[722]](_0x5c29x9)}));var _0x5c29x9=mxClient[_0xd587[754]]?_0xd587[2214]:_0xd587[760];mxEvent[_0xd587[169]](_0x5c29x2[_0xd587[253]][_0xd587[252]],_0x5c29x9,mxUtils[_0xd587[885]](this,function(_0x5c29x4){_0x5c29x5= !1;_0xd587[2214]== _0x5c29x9?(_0x5c29x3[_0xd587[2213]]= 0,_0x5c29x3[_0xd587[2215]]&& (_0x5c29x3[_0xd587[2216]](_0x5c29x2,_0x5c29x4),mxEvent[_0xd587[722]](_0x5c29x4))):this[_0xd587[2211]](_0x5c29x2,_0x5c29x4)&& (_0x5c29x3[_0xd587[761]](_0x5c29x4,null!= _0x5c29x2[_0xd587[253]]&& mxEvent[_0xd587[728]](_0x5c29x4)== _0x5c29x2[_0xd587[253]][_0xd587[905]]?null:_0x5c29x2[_0xd587[246]]),mxEvent[_0xd587[722]](_0x5c29x4))}))};mxCellRenderer[_0xd587[202]][_0xd587[2217]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=this[_0xd587[2182]](_0x5c29x2);if(null== _0x5c29x2[_0xd587[963]]&& null!= _0x5c29x4&& (mxUtils[_0xd587[1331]](_0x5c29x4)|| 0< _0x5c29x4[_0xd587[67]])){this[_0xd587[2184]](_0x5c29x2,_0x5c29x4)}else {if(null!= _0x5c29x2[_0xd587[963]]&& (null== _0x5c29x4|| 0== _0x5c29x4[_0xd587[67]])){_0x5c29x2[_0xd587[963]][_0xd587[515]](),_0x5c29x2[_0xd587[963]]= null}};if(null!= _0x5c29x2[_0xd587[963]]){var _0x5c29x5=_0x5c29x2[_0xd587[441]][_0xd587[1179]],_0x5c29x9=_0x5c29x5[_0xd587[2131]](_0x5c29x2[_0xd587[246]]),_0x5c29x5=_0x5c29x5[_0xd587[2130]](_0x5c29x2[_0xd587[246]]),_0x5c29xa=this[_0xd587[2218]](_0x5c29x2);if(_0x5c29x3|| _0x5c29x2[_0xd587[963]][_0xd587[131]]!= _0x5c29x4|| _0x5c29x2[_0xd587[963]][_0xd587[2131]]!= _0x5c29x9|| _0x5c29x2[_0xd587[963]][_0xd587[2219]]!= _0x5c29x5|| _0x5c29x2[_0xd587[963]][_0xd587[255]]!= _0x5c29x2[_0xd587[441]][_0xd587[255]]|| !_0x5c29x2[_0xd587[963]][_0xd587[1562]][_0xd587[237]](_0x5c29xa)){_0x5c29x2[_0xd587[963]][_0xd587[131]]= _0x5c29x4,_0x5c29x2[_0xd587[963]][_0xd587[1562]]= _0x5c29xa,_0x5c29x2[_0xd587[963]][_0xd587[255]]= this[_0xd587[2220]](_0x5c29x2),_0x5c29x2[_0xd587[963]][_0xd587[2131]]= _0x5c29x9,_0x5c29x2[_0xd587[963]][_0xd587[2219]]= _0x5c29x5,_0x5c29x2[_0xd587[963]][_0xd587[258]]()}}};mxCellRenderer[_0xd587[202]][_0xd587[2220]]= function(_0x5c29x2){return _0x5c29x2[_0xd587[441]][_0xd587[255]]};mxCellRenderer[_0xd587[202]][_0xd587[2218]]= function(_0x5c29x2){var _0x5c29x3=_0x5c29x2[_0xd587[441]][_0xd587[1179]],_0x5c29x4=_0x5c29x2[_0xd587[441]][_0xd587[255]],_0x5c29x5=_0x5c29x3[_0xd587[502]]()[_0xd587[250]](_0x5c29x2[_0xd587[246]]),_0x5c29x9= new mxRectangle(_0x5c29x2[_0xd587[2079]][_0xd587[235]],_0x5c29x2[_0xd587[2079]][_0xd587[236]]);_0x5c29x2[_0xd587[963]][_0xd587[1672]]();_0x5c29x5?(_0x5c29x5= _0x5c29x2[_0xd587[963]][_0xd587[1673]](),_0x5c29x9[_0xd587[235]]+= _0x5c29x5[_0xd587[235]]* _0x5c29x4,_0x5c29x9[_0xd587[236]]+= _0x5c29x5[_0xd587[236]]* _0x5c29x4,_0x5c29x3= _0x5c29x3[_0xd587[1198]](_0x5c29x2[_0xd587[246]]),null!= _0x5c29x3&& (_0x5c29x9[_0xd587[117]]= Math[_0xd587[160]](0,_0x5c29x2[_0xd587[963]][_0xd587[1655]][_0xd587[235]]* _0x5c29x3[_0xd587[117]]* _0x5c29x4- _0x5c29x2[_0xd587[963]][_0xd587[659]]* _0x5c29x4- _0x5c29x2[_0xd587[963]][_0xd587[661]]* _0x5c29x4),_0x5c29x9[_0xd587[119]]= Math[_0xd587[160]](0,_0x5c29x2[_0xd587[963]][_0xd587[1655]][_0xd587[236]]* _0x5c29x3[_0xd587[119]]* _0x5c29x4- _0x5c29x2[_0xd587[963]][_0xd587[658]]* _0x5c29x4- _0x5c29x2[_0xd587[963]][_0xd587[660]]* _0x5c29x4))):(_0x5c29x2[_0xd587[963]][_0xd587[1590]]()&& (_0x5c29x5= _0x5c29x9[_0xd587[235]],_0x5c29x9[_0xd587[235]]= _0x5c29x9[_0xd587[236]],_0x5c29x9[_0xd587[236]]= _0x5c29x5),_0x5c29x9[_0xd587[235]]+= _0x5c29x2[_0xd587[235]],_0x5c29x9[_0xd587[236]]+= _0x5c29x2[_0xd587[236]],_0x5c29x9[_0xd587[117]]= Math[_0xd587[160]](1,_0x5c29x2[_0xd587[117]]),_0x5c29x9[_0xd587[119]]= Math[_0xd587[160]](1,_0x5c29x2[_0xd587[119]]),_0x5c29x3[_0xd587[1730]](_0x5c29x2[_0xd587[246]])&& (_0x5c29x3= _0x5c29x3[_0xd587[1731]](_0x5c29x2[_0xd587[246]]),0< _0x5c29x3[_0xd587[117]]?(_0x5c29x5= Math[_0xd587[243]](_0x5c29x9[_0xd587[117]],_0x5c29x3[_0xd587[117]]* _0x5c29x4),_0x5c29x2[_0xd587[253]][_0xd587[623]]&& (_0x5c29x9[_0xd587[235]]+= _0x5c29x9[_0xd587[117]]- _0x5c29x5),_0x5c29x9[_0xd587[117]]= _0x5c29x5):0< _0x5c29x3[_0xd587[119]]&& (_0x5c29x5= Math[_0xd587[243]](_0x5c29x9[_0xd587[119]],_0x5c29x3[_0xd587[119]]* _0x5c29x4),_0x5c29x2[_0xd587[253]][_0xd587[624]]&& (_0x5c29x9[_0xd587[236]]+= _0x5c29x9[_0xd587[119]]- _0x5c29x5),_0x5c29x9[_0xd587[119]]= _0x5c29x5)),this[_0xd587[2221]](_0x5c29x2,_0x5c29x9));return _0x5c29x9};mxCellRenderer[_0xd587[202]][_0xd587[2221]]= function(_0x5c29x2,_0x5c29x3){if(_0x5c29x2[_0xd587[963]][_0xd587[1590]]()){var _0x5c29x4=(_0x5c29x2[_0xd587[117]]- _0x5c29x2[_0xd587[119]])/ 2;_0x5c29x3[_0xd587[235]]+= _0x5c29x4;_0x5c29x3[_0xd587[236]]-= _0x5c29x4;_0x5c29x4= _0x5c29x3[_0xd587[117]];_0x5c29x3[_0xd587[117]]= _0x5c29x3[_0xd587[119]];_0x5c29x3[_0xd587[119]]= _0x5c29x4};_0x5c29x3[_0xd587[235]]-= _0x5c29x2[_0xd587[963]][_0xd587[1655]][_0xd587[235]]* _0x5c29x3[_0xd587[117]];_0x5c29x3[_0xd587[236]]-= _0x5c29x2[_0xd587[963]][_0xd587[1655]][_0xd587[236]]* _0x5c29x3[_0xd587[119]];if(_0xd587[1334]!= _0x5c29x2[_0xd587[124]][mxConstants[_0xd587[2193]]]){var _0x5c29x4=_0x5c29x2[_0xd587[441]][_0xd587[255]],_0x5c29x5=_0x5c29x2[_0xd587[963]][_0xd587[1673]]();_0x5c29x3[_0xd587[235]]+= _0x5c29x5[_0xd587[235]]* _0x5c29x4;_0x5c29x3[_0xd587[236]]+= _0x5c29x5[_0xd587[236]]* _0x5c29x4;_0x5c29x3[_0xd587[117]]= Math[_0xd587[160]](0,_0x5c29x3[_0xd587[117]]- _0x5c29x2[_0xd587[963]][_0xd587[659]]* _0x5c29x4- _0x5c29x2[_0xd587[963]][_0xd587[661]]* _0x5c29x4);_0x5c29x3[_0xd587[119]]= Math[_0xd587[160]](0,_0x5c29x3[_0xd587[119]]- _0x5c29x2[_0xd587[963]][_0xd587[658]]* _0x5c29x4- _0x5c29x2[_0xd587[963]][_0xd587[660]]* _0x5c29x4)};var _0x5c29x9=_0x5c29x2[_0xd587[963]][_0xd587[1615]]();if(0!= _0x5c29x9&& (null!= _0x5c29x2&& _0x5c29x2[_0xd587[441]][_0xd587[1179]][_0xd587[251]][_0xd587[1193]](_0x5c29x2[_0xd587[246]]))&& (_0x5c29x4= _0x5c29x2[_0xd587[241]](),_0x5c29x5= _0x5c29x2[_0xd587[242]](),_0x5c29x3[_0xd587[235]]!= _0x5c29x4|| _0x5c29x3[_0xd587[236]]!= _0x5c29x5)){_0x5c29x9*= Math[_0xd587[424]]/ 180,pt= mxUtils[_0xd587[432]]( new mxPoint(_0x5c29x3[_0xd587[235]],_0x5c29x3[_0xd587[236]]),Math[_0xd587[426]](_0x5c29x9),Math[_0xd587[427]](_0x5c29x9), new mxPoint(_0x5c29x4,_0x5c29x5)),_0x5c29x3[_0xd587[235]]= pt[_0xd587[235]],_0x5c29x3[_0xd587[236]]= pt[_0xd587[236]]}};mxCellRenderer[_0xd587[202]][_0xd587[2222]]= function(_0x5c29x2,_0x5c29x3){this[_0xd587[2162]](_0x5c29x2);if(null!= _0x5c29x2[_0xd587[1211]]){var _0x5c29x4=mxUtils[_0xd587[1454]](mxUtils[_0xd587[433]](_0x5c29x2[_0xd587[124]],mxConstants.STYLE_ROTATION,0),90),_0x5c29x5=mxUtils[_0xd587[431]](_0x5c29x4),_0x5c29x9=Math[_0xd587[426]](_0x5c29x5),_0x5c29xa=Math[_0xd587[427]](_0x5c29x5);_0x5c29x2[_0xd587[1211]][_0xd587[209]](function(_0x5c29x5,_0x5c29x13){var _0x5c29x14=_0x5c29x13[_0xd587[2201]][_0xd587[1799]](_0x5c29x2);if(!_0x5c29x2[_0xd587[441]][_0xd587[1179]][_0xd587[502]]()[_0xd587[250]](_0x5c29x2[_0xd587[246]])&& null!= _0x5c29x2[_0xd587[253]]&& 0!= _0x5c29x4){var _0x5c29x15=_0x5c29x14[_0xd587[241]](),_0x5c29x16=_0x5c29x14[_0xd587[242]](),_0x5c29x16=mxUtils[_0xd587[432]]( new mxPoint(_0x5c29x15,_0x5c29x16),_0x5c29x9,_0x5c29xa, new mxPoint(_0x5c29x2[_0xd587[241]](),_0x5c29x2[_0xd587[242]]())),_0x5c29x15=_0x5c29x16[_0xd587[235]],_0x5c29x16=_0x5c29x16[_0xd587[236]];_0x5c29x14[_0xd587[235]]= Math[_0xd587[488]](_0x5c29x15- _0x5c29x14[_0xd587[117]]/ 2);_0x5c29x14[_0xd587[236]]= Math[_0xd587[488]](_0x5c29x16- _0x5c29x14[_0xd587[119]]/ 2)};if(_0x5c29x3|| null== _0x5c29x13[_0xd587[1562]]|| _0x5c29x13[_0xd587[255]]!= _0x5c29x2[_0xd587[441]][_0xd587[255]]|| !_0x5c29x13[_0xd587[1562]][_0xd587[237]](_0x5c29x14)){_0x5c29x13[_0xd587[1562]]= _0x5c29x14,_0x5c29x13[_0xd587[255]]= _0x5c29x2[_0xd587[441]][_0xd587[255]],_0x5c29x13[_0xd587[258]]()}})}};mxCellRenderer[_0xd587[202]][_0xd587[2223]]= function(_0x5c29x2,_0x5c29x3){if(null!= _0x5c29x2[_0xd587[2207]]){var _0x5c29x4=this[_0xd587[2224]](_0x5c29x2),_0x5c29x5=this[_0xd587[2152]]?mxUtils[_0xd587[433]](_0x5c29x2[_0xd587[124]],mxConstants.STYLE_ROTATION,0):_0x5c29x2[_0xd587[253]][_0xd587[1615]](),_0x5c29x9=_0x5c29x2[_0xd587[441]][_0xd587[255]];if(_0x5c29x3|| _0x5c29x2[_0xd587[2207]][_0xd587[255]]!= _0x5c29x9|| !_0x5c29x2[_0xd587[2207]][_0xd587[1562]][_0xd587[237]](_0x5c29x4)|| _0x5c29x2[_0xd587[2207]][_0xd587[603]]!= _0x5c29x5){_0x5c29x2[_0xd587[2207]][_0xd587[603]]= _0x5c29x5,_0x5c29x2[_0xd587[2207]][_0xd587[1562]]= _0x5c29x4,_0x5c29x2[_0xd587[2207]][_0xd587[255]]= _0x5c29x9,_0x5c29x2[_0xd587[2207]][_0xd587[258]]()}}};mxCellRenderer[_0xd587[202]][_0xd587[2224]]= function(_0x5c29x2){if(null!= _0x5c29x2[_0xd587[2207]]){var _0x5c29x3=_0x5c29x2[_0xd587[2207]][_0xd587[255]],_0x5c29x4=_0x5c29x2[_0xd587[2207]][_0xd587[1562]][_0xd587[117]]/ _0x5c29x3,_0x5c29x3=_0x5c29x2[_0xd587[2207]][_0xd587[1562]][_0xd587[119]]/ _0x5c29x3,_0x5c29x5=_0x5c29x2[_0xd587[441]][_0xd587[255]],_0x5c29x9=_0x5c29x2[_0xd587[241]](),_0x5c29xa=_0x5c29x2[_0xd587[242]]();if(!_0x5c29x2[_0xd587[441]][_0xd587[1179]][_0xd587[502]]()[_0xd587[250]](_0x5c29x2[_0xd587[246]])&& (_0x5c29x9= _0x5c29x2[_0xd587[235]]+ _0x5c29x4* _0x5c29x5,_0x5c29xa= _0x5c29x2[_0xd587[236]]+ _0x5c29x3* _0x5c29x5,null!= _0x5c29x2[_0xd587[253]])){var _0x5c29x12=_0x5c29x2[_0xd587[253]][_0xd587[1598]]();if(this[_0xd587[2152]]){_0x5c29x12= mxUtils[_0xd587[433]](_0x5c29x2[_0xd587[124]],mxConstants.STYLE_ROTATION,0)}else {if(_0x5c29x2[_0xd587[253]][_0xd587[1590]]()){var _0x5c29x13=(_0x5c29x2[_0xd587[117]]- _0x5c29x2[_0xd587[119]])/ 2,_0x5c29x9=_0x5c29x9+ _0x5c29x13,_0x5c29xa=_0x5c29xa- _0x5c29x13}};0!= _0x5c29x12&& (_0x5c29x13= mxUtils[_0xd587[431]](_0x5c29x12),_0x5c29x12= Math[_0xd587[426]](_0x5c29x13),_0x5c29x13= Math[_0xd587[427]](_0x5c29x13),_0x5c29xa= mxUtils[_0xd587[432]]( new mxPoint(_0x5c29x9,_0x5c29xa),_0x5c29x12,_0x5c29x13, new mxPoint(_0x5c29x2[_0xd587[241]](),_0x5c29x2[_0xd587[242]]())),_0x5c29x9= _0x5c29xa[_0xd587[235]],_0x5c29xa= _0x5c29xa[_0xd587[236]])};return _0x5c29x2[_0xd587[441]][_0xd587[1179]][_0xd587[502]]()[_0xd587[250]](_0x5c29x2[_0xd587[246]]), new mxRectangle(Math[_0xd587[488]](_0x5c29x9- _0x5c29x4/ 2* _0x5c29x5),Math[_0xd587[488]](_0x5c29xa- _0x5c29x3/ 2* _0x5c29x5),Math[_0xd587[488]](_0x5c29x4* _0x5c29x5),Math[_0xd587[488]](_0x5c29x3* _0x5c29x5))};return null};mxCellRenderer[_0xd587[202]][_0xd587[258]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){if(null!= _0x5c29x2[_0xd587[253]]){var _0x5c29x5=!1;_0x5c29x2[_0xd587[441]][_0xd587[1179]][_0xd587[502]]()[_0xd587[250]](_0x5c29x2[_0xd587[246]]);reconfigure= null!= _0x5c29x3?_0x5c29x3:!1;this[_0xd587[2204]](_0x5c29x2);if(_0x5c29x2[_0xd587[2082]]|| _0x5c29x2[_0xd587[2081]]){_0x5c29x2[_0xd587[441]][_0xd587[1179]][_0xd587[2158]]?this[_0xd587[2166]](_0x5c29x2):this[_0xd587[2167]](_0x5c29x2)};if(_0x5c29x2[_0xd587[2082]]|| !mxUtils[_0xd587[2225]](_0x5c29x2[_0xd587[253]][_0xd587[124]],_0x5c29x2[_0xd587[124]])){this[_0xd587[2170]](_0x5c29x2),_0x5c29x3= !0};delete _0x5c29x2[_0xd587[2081]];delete _0x5c29x2[_0xd587[2082]];if(_0x5c29x3|| null== _0x5c29x2[_0xd587[253]][_0xd587[1562]]|| _0x5c29x2[_0xd587[253]][_0xd587[255]]!= _0x5c29x2[_0xd587[441]][_0xd587[255]]|| !_0x5c29x2[_0xd587[253]][_0xd587[1562]][_0xd587[237]](_0x5c29x2)|| !mxUtils[_0xd587[2226]](_0x5c29x2[_0xd587[253]][_0xd587[1525]],_0x5c29x2[_0xd587[439]])){_0x5c29x5= !0,_0x5c29x2[_0xd587[253]][_0xd587[1525]]= null!= _0x5c29x2[_0xd587[439]]?_0x5c29x2[_0xd587[439]][_0xd587[1853]]():null,_0x5c29x2[_0xd587[253]][_0xd587[1562]]= new mxRectangle(_0x5c29x2[_0xd587[235]],_0x5c29x2[_0xd587[236]],_0x5c29x2[_0xd587[117]],_0x5c29x2[_0xd587[119]]),_0x5c29x2[_0xd587[253]][_0xd587[255]]= _0x5c29x2[_0xd587[441]][_0xd587[255]],null== _0x5c29x4|| _0x5c29x4?_0x5c29x2[_0xd587[253]][_0xd587[258]]():_0x5c29x2[_0xd587[253]][_0xd587[1577]]()};if(null== _0x5c29x4|| _0x5c29x4){this[_0xd587[2217]](_0x5c29x2,_0x5c29x5),this[_0xd587[2222]](_0x5c29x2,_0x5c29x5),this[_0xd587[2223]](_0x5c29x2,_0x5c29x5)}}};mxCellRenderer[_0xd587[202]][_0xd587[515]]= function(_0x5c29x2){null!= _0x5c29x2[_0xd587[253]]&& (null!= _0x5c29x2[_0xd587[963]]&& (_0x5c29x2[_0xd587[963]][_0xd587[515]](),_0x5c29x2[_0xd587[963]]= null),null!= _0x5c29x2[_0xd587[1211]]&& (_0x5c29x2[_0xd587[1211]][_0xd587[209]](function(_0x5c29x2,_0x5c29x4){_0x5c29x4[_0xd587[515]]()}),_0x5c29x2[_0xd587[1211]]= null),null!= _0x5c29x2[_0xd587[2207]]&& (_0x5c29x2[_0xd587[2207]][_0xd587[515]](),_0x5c29x2[_0xd587[2207]]= null),_0x5c29x2[_0xd587[253]][_0xd587[515]](),_0x5c29x2[_0xd587[253]]= null)};var mxEdgeStyle={EntityRelation:function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){var _0x5c29xa=_0x5c29x2[_0xd587[441]],_0x5c29x12=_0x5c29xa[_0xd587[1179]];_0x5c29x5= mxUtils[_0xd587[433]](_0x5c29x2[_0xd587[124]],mxConstants.STYLE_SEGMENT,mxConstants.ENTITY_SEGMENT)* _0x5c29xa[_0xd587[255]];var _0x5c29x13=_0x5c29x2[_0xd587[439]],_0x5c29x14=_0x5c29x13[0],_0x5c29x15=_0x5c29x13[_0x5c29x13[_0xd587[67]]- 1],_0x5c29x13=!1;if(null!= _0x5c29x14){_0x5c29x3= new mxCellState,_0x5c29x3[_0xd587[235]]= _0x5c29x14[_0xd587[235]],_0x5c29x3[_0xd587[236]]= _0x5c29x14[_0xd587[236]]}else {if(null!= _0x5c29x3){var _0x5c29x16=mxUtils[_0xd587[2227]](_0x5c29x3,_0x5c29x2,!0,mxConstants.DIRECTION_MASK_NONE);_0x5c29x16!= mxConstants[_0xd587[434]]?_0x5c29x13= _0x5c29x16== mxConstants[_0xd587[436]]:(_0x5c29x14= _0x5c29x12[_0xd587[1198]](_0x5c29x3[_0xd587[246]]),_0x5c29x14[_0xd587[1500]]?_0x5c29x13= 0.5>= _0x5c29x14[_0xd587[235]]:null!= _0x5c29x4&& (_0x5c29x13= _0x5c29x4[_0xd587[235]]+ _0x5c29x4[_0xd587[117]]< _0x5c29x3[_0xd587[235]]))}else {return}};_0x5c29x14= !0;null!= _0x5c29x15?(_0x5c29x4= new mxCellState,_0x5c29x4[_0xd587[235]]= _0x5c29x15[_0xd587[235]],_0x5c29x4[_0xd587[236]]= _0x5c29x15[_0xd587[236]]):null!= _0x5c29x4&& (_0x5c29x16= mxUtils[_0xd587[2227]](_0x5c29x4,_0x5c29x2,!1,mxConstants.DIRECTION_MASK_NONE),_0x5c29x16!= mxConstants[_0xd587[434]]?_0x5c29x14= _0x5c29x16== mxConstants[_0xd587[436]]:(_0x5c29x2= _0x5c29x12[_0xd587[1198]](_0x5c29x4[_0xd587[246]]),_0x5c29x2[_0xd587[1500]]?_0x5c29x14= 0.5>= _0x5c29x2[_0xd587[235]]:null!= _0x5c29x3&& (_0x5c29x14= _0x5c29x3[_0xd587[235]]+ _0x5c29x3[_0xd587[117]]< _0x5c29x4[_0xd587[235]])));null!= _0x5c29x3&& null!= _0x5c29x4&& (_0x5c29x2= _0x5c29x13?_0x5c29x3[_0xd587[235]]:_0x5c29x3[_0xd587[235]]+ _0x5c29x3[_0xd587[117]],_0x5c29x3= _0x5c29xa[_0xd587[2228]](_0x5c29x3),_0x5c29x12= _0x5c29x14?_0x5c29x4[_0xd587[235]]:_0x5c29x4[_0xd587[235]]+ _0x5c29x4[_0xd587[117]],_0x5c29x4= _0x5c29xa[_0xd587[2228]](_0x5c29x4),_0x5c29xa= new mxPoint(_0x5c29x2+ (_0x5c29x13?-_0x5c29x5:_0x5c29x5),_0x5c29x3),_0x5c29x15= new mxPoint(_0x5c29x12+ (_0x5c29x14?-_0x5c29x5:_0x5c29x5),_0x5c29x4),_0x5c29x13== _0x5c29x14?(_0x5c29x5= _0x5c29x13?Math[_0xd587[243]](_0x5c29x2,_0x5c29x12)- _0x5c29x5:Math[_0xd587[160]](_0x5c29x2,_0x5c29x12)+ _0x5c29x5,_0x5c29x9[_0xd587[207]]( new mxPoint(_0x5c29x5,_0x5c29x3)),_0x5c29x9[_0xd587[207]]( new mxPoint(_0x5c29x5,_0x5c29x4))):(_0x5c29xa[_0xd587[235]]< _0x5c29x15[_0xd587[235]]== _0x5c29x13?(_0x5c29x5= _0x5c29x3+ (_0x5c29x4- _0x5c29x3)/ 2,_0x5c29x9[_0xd587[207]](_0x5c29xa),_0x5c29x9[_0xd587[207]]( new mxPoint(_0x5c29xa[_0xd587[235]],_0x5c29x5)),_0x5c29x9[_0xd587[207]]( new mxPoint(_0x5c29x15[_0xd587[235]],_0x5c29x5))):_0x5c29x9[_0xd587[207]](_0x5c29xa),_0x5c29x9[_0xd587[207]](_0x5c29x15)))},Loop:function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){if(null!= _0x5c29x3){_0x5c29x4= _0x5c29x2[_0xd587[441]];var _0x5c29xa=_0x5c29x4[_0xd587[1179]];_0x5c29x5= null!= _0x5c29x5&& 0< _0x5c29x5[_0xd587[67]]?_0x5c29x5[0]:null;null!= _0x5c29x5&& (_0x5c29x5= _0x5c29x4[_0xd587[2229]](_0x5c29x2,_0x5c29x5),mxUtils[_0xd587[442]](_0x5c29x3,_0x5c29x5[_0xd587[235]],_0x5c29x5[_0xd587[236]])&& (_0x5c29x5= null));var _0x5c29x12=0,_0x5c29x13=0,_0x5c29x14=0,_0x5c29x15=0,_0x5c29xa=mxUtils[_0xd587[433]](_0x5c29x2[_0xd587[124]],mxConstants.STYLE_SEGMENT,_0x5c29xa[_0xd587[1020]])* _0x5c29x4[_0xd587[255]];_0x5c29x2= mxUtils[_0xd587[433]](_0x5c29x2[_0xd587[124]],mxConstants.STYLE_DIRECTION,mxConstants.DIRECTION_WEST);_0x5c29x2== mxConstants[_0xd587[1358]]|| _0x5c29x2== mxConstants[_0xd587[1354]]?(_0x5c29x12= _0x5c29x4[_0xd587[2230]](_0x5c29x3),_0x5c29x13= _0x5c29xa):(_0x5c29x14= _0x5c29x4[_0xd587[2228]](_0x5c29x3),_0x5c29x15= _0x5c29xa);null== _0x5c29x5|| _0x5c29x5[_0xd587[235]]< _0x5c29x3[_0xd587[235]]|| _0x5c29x5[_0xd587[235]]> _0x5c29x3[_0xd587[235]]+ _0x5c29x3[_0xd587[117]]?null!= _0x5c29x5?(_0x5c29x12= _0x5c29x5[_0xd587[235]],_0x5c29x15= Math[_0xd587[160]](Math[_0xd587[425]](_0x5c29x14- _0x5c29x5[_0xd587[236]]),_0x5c29x15)):_0x5c29x2== mxConstants[_0xd587[1358]]?_0x5c29x14= _0x5c29x3[_0xd587[236]]- 2* _0x5c29x13:_0x5c29x2== mxConstants[_0xd587[1354]]?_0x5c29x14= _0x5c29x3[_0xd587[236]]+ _0x5c29x3[_0xd587[119]]+ 2* _0x5c29x13:_0x5c29x12= _0x5c29x2== mxConstants[_0xd587[1356]]?_0x5c29x3[_0xd587[235]]- 2* _0x5c29x15:_0x5c29x3[_0xd587[235]]+ _0x5c29x3[_0xd587[117]]+ 2* _0x5c29x15:null!= _0x5c29x5&& (_0x5c29x12= _0x5c29x4[_0xd587[2230]](_0x5c29x3),_0x5c29x13= Math[_0xd587[160]](Math[_0xd587[425]](_0x5c29x12- _0x5c29x5[_0xd587[235]]),_0x5c29x15),_0x5c29x14= _0x5c29x5[_0xd587[236]],_0x5c29x15= 0);_0x5c29x9[_0xd587[207]]( new mxPoint(_0x5c29x12- _0x5c29x13,_0x5c29x14- _0x5c29x15));_0x5c29x9[_0xd587[207]]( new mxPoint(_0x5c29x12+ _0x5c29x13,_0x5c29x14+ _0x5c29x15))}},ElbowConnector:function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){var _0x5c29xa=null!= _0x5c29x5&& 0< _0x5c29x5[_0xd587[67]]?_0x5c29x5[0]:null,_0x5c29x12=!1,_0x5c29x13=!1;if(null!= _0x5c29x3&& null!= _0x5c29x4){if(null!= _0x5c29xa){var _0x5c29x14=Math[_0xd587[243]](_0x5c29x3[_0xd587[235]],_0x5c29x4[_0xd587[235]]),_0x5c29x15=Math[_0xd587[160]](_0x5c29x3[_0xd587[235]]+ _0x5c29x3[_0xd587[117]],_0x5c29x4[_0xd587[235]]+ _0x5c29x4[_0xd587[117]]),_0x5c29x13=Math[_0xd587[243]](_0x5c29x3[_0xd587[236]],_0x5c29x4[_0xd587[236]]),_0x5c29x16=Math[_0xd587[160]](_0x5c29x3[_0xd587[236]]+ _0x5c29x3[_0xd587[119]],_0x5c29x4[_0xd587[236]]+ _0x5c29x4[_0xd587[119]]),_0x5c29xa=_0x5c29x2[_0xd587[441]][_0xd587[2229]](_0x5c29x2,_0x5c29xa),_0x5c29x12=_0x5c29xa[_0xd587[236]]< _0x5c29x13|| _0x5c29xa[_0xd587[236]]> _0x5c29x16,_0x5c29x13=_0x5c29xa[_0xd587[235]]< _0x5c29x14|| _0x5c29xa[_0xd587[235]]> _0x5c29x15}else {_0x5c29x14= Math[_0xd587[160]](_0x5c29x3[_0xd587[235]],_0x5c29x4[_0xd587[235]]),_0x5c29x15= Math[_0xd587[243]](_0x5c29x3[_0xd587[235]]+ _0x5c29x3[_0xd587[117]],_0x5c29x4[_0xd587[235]]+ _0x5c29x4[_0xd587[117]]),_0x5c29x12= _0x5c29x14== _0x5c29x15,_0x5c29x12|| (_0x5c29x13= Math[_0xd587[160]](_0x5c29x3[_0xd587[236]],_0x5c29x4[_0xd587[236]]),_0x5c29x16= Math[_0xd587[243]](_0x5c29x3[_0xd587[236]]+ _0x5c29x3[_0xd587[119]],_0x5c29x4[_0xd587[236]]+ _0x5c29x4[_0xd587[119]]),_0x5c29x13= _0x5c29x13== _0x5c29x16)}};!_0x5c29x13&& (_0x5c29x12|| _0x5c29x2[_0xd587[124]][mxConstants[_0xd587[2231]]]== mxConstants[_0xd587[2232]])?mxEdgeStyle.TopToBottom(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9):mxEdgeStyle.SideToSide(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9)},SideToSide:function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){var _0x5c29xa=_0x5c29x2[_0xd587[441]];_0x5c29x5= null!= _0x5c29x5&& 0< _0x5c29x5[_0xd587[67]]?_0x5c29x5[0]:null;var _0x5c29x12=_0x5c29x2[_0xd587[439]],_0x5c29x13=_0x5c29x12[0],_0x5c29x12=_0x5c29x12[_0x5c29x12[_0xd587[67]]- 1];null!= _0x5c29x5&& (_0x5c29x5= _0x5c29xa[_0xd587[2229]](_0x5c29x2,_0x5c29x5));null!= _0x5c29x13&& (_0x5c29x3= new mxCellState,_0x5c29x3[_0xd587[235]]= _0x5c29x13[_0xd587[235]],_0x5c29x3[_0xd587[236]]= _0x5c29x13[_0xd587[236]]);null!= _0x5c29x12&& (_0x5c29x4= new mxCellState,_0x5c29x4[_0xd587[235]]= _0x5c29x12[_0xd587[235]],_0x5c29x4[_0xd587[236]]= _0x5c29x12[_0xd587[236]]);null!= _0x5c29x3&& null!= _0x5c29x4&& (_0x5c29x2= Math[_0xd587[160]](_0x5c29x3[_0xd587[235]],_0x5c29x4[_0xd587[235]]),_0x5c29x13= Math[_0xd587[243]](_0x5c29x3[_0xd587[235]]+ _0x5c29x3[_0xd587[117]],_0x5c29x4[_0xd587[235]]+ _0x5c29x4[_0xd587[117]]),_0x5c29x2= null!= _0x5c29x5?_0x5c29x5[_0xd587[235]]:_0x5c29x13+ (_0x5c29x2- _0x5c29x13)/ 2,_0x5c29x13= _0x5c29xa[_0xd587[2228]](_0x5c29x3),_0x5c29xa= _0x5c29xa[_0xd587[2228]](_0x5c29x4),null!= _0x5c29x5&& (_0x5c29x5[_0xd587[236]]>= _0x5c29x3[_0xd587[236]]&& _0x5c29x5[_0xd587[236]]<= _0x5c29x3[_0xd587[236]]+ _0x5c29x3[_0xd587[119]]&& (_0x5c29x13= _0x5c29x5[_0xd587[236]]),_0x5c29x5[_0xd587[236]]>= _0x5c29x4[_0xd587[236]]&& _0x5c29x5[_0xd587[236]]<= _0x5c29x4[_0xd587[236]]+ _0x5c29x4[_0xd587[119]]&& (_0x5c29xa= _0x5c29x5[_0xd587[236]])),!mxUtils[_0xd587[442]](_0x5c29x4,_0x5c29x2,_0x5c29x13)&& !mxUtils[_0xd587[442]](_0x5c29x3,_0x5c29x2,_0x5c29x13)&& _0x5c29x9[_0xd587[207]]( new mxPoint(_0x5c29x2,_0x5c29x13)),!mxUtils[_0xd587[442]](_0x5c29x4,_0x5c29x2,_0x5c29xa)&& !mxUtils[_0xd587[442]](_0x5c29x3,_0x5c29x2,_0x5c29xa)&& _0x5c29x9[_0xd587[207]]( new mxPoint(_0x5c29x2,_0x5c29xa)),1== _0x5c29x9[_0xd587[67]]&& (null!= _0x5c29x5?!mxUtils[_0xd587[442]](_0x5c29x4,_0x5c29x2,_0x5c29x5[_0xd587[236]])&& !mxUtils[_0xd587[442]](_0x5c29x3,_0x5c29x2,_0x5c29x5[_0xd587[236]])&& _0x5c29x9[_0xd587[207]]( new mxPoint(_0x5c29x2,_0x5c29x5[_0xd587[236]])):(_0x5c29xa= Math[_0xd587[160]](_0x5c29x3[_0xd587[236]],_0x5c29x4[_0xd587[236]]),_0x5c29x3= Math[_0xd587[243]](_0x5c29x3[_0xd587[236]]+ _0x5c29x3[_0xd587[119]],_0x5c29x4[_0xd587[236]]+ _0x5c29x4[_0xd587[119]]),_0x5c29x9[_0xd587[207]]( new mxPoint(_0x5c29x2,_0x5c29xa+ (_0x5c29x3- _0x5c29xa)/ 2)))))},TopToBottom:function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){var _0x5c29xa=_0x5c29x2[_0xd587[441]];_0x5c29x5= null!= _0x5c29x5&& 0< _0x5c29x5[_0xd587[67]]?_0x5c29x5[0]:null;var _0x5c29x12=_0x5c29x2[_0xd587[439]],_0x5c29x13=_0x5c29x12[0],_0x5c29x12=_0x5c29x12[_0x5c29x12[_0xd587[67]]- 1];null!= _0x5c29x5&& (_0x5c29x5= _0x5c29xa[_0xd587[2229]](_0x5c29x2,_0x5c29x5));null!= _0x5c29x13&& (_0x5c29x3= new mxCellState,_0x5c29x3[_0xd587[235]]= _0x5c29x13[_0xd587[235]],_0x5c29x3[_0xd587[236]]= _0x5c29x13[_0xd587[236]]);null!= _0x5c29x12&& (_0x5c29x4= new mxCellState,_0x5c29x4[_0xd587[235]]= _0x5c29x12[_0xd587[235]],_0x5c29x4[_0xd587[236]]= _0x5c29x12[_0xd587[236]]);null!= _0x5c29x3&& null!= _0x5c29x4&& (_0x5c29x13= Math[_0xd587[160]](_0x5c29x3[_0xd587[236]],_0x5c29x4[_0xd587[236]]),_0x5c29x12= Math[_0xd587[243]](_0x5c29x3[_0xd587[236]]+ _0x5c29x3[_0xd587[119]],_0x5c29x4[_0xd587[236]]+ _0x5c29x4[_0xd587[119]]),_0x5c29x2= _0x5c29xa[_0xd587[2230]](_0x5c29x3),null!= _0x5c29x5&& (_0x5c29x5[_0xd587[235]]>= _0x5c29x3[_0xd587[235]]&& _0x5c29x5[_0xd587[235]]<= _0x5c29x3[_0xd587[235]]+ _0x5c29x3[_0xd587[117]])&& (_0x5c29x2= _0x5c29x5[_0xd587[235]]),_0x5c29x13= null!= _0x5c29x5?_0x5c29x5[_0xd587[236]]:_0x5c29x12+ (_0x5c29x13- _0x5c29x12)/ 2,!mxUtils[_0xd587[442]](_0x5c29x4,_0x5c29x2,_0x5c29x13)&& !mxUtils[_0xd587[442]](_0x5c29x3,_0x5c29x2,_0x5c29x13)&& _0x5c29x9[_0xd587[207]]( new mxPoint(_0x5c29x2,_0x5c29x13)),_0x5c29x2= null!= _0x5c29x5&& _0x5c29x5[_0xd587[235]]>= _0x5c29x4[_0xd587[235]]&& _0x5c29x5[_0xd587[235]]<= _0x5c29x4[_0xd587[235]]+ _0x5c29x4[_0xd587[117]]?_0x5c29x5[_0xd587[235]]:_0x5c29xa[_0xd587[2230]](_0x5c29x4),!mxUtils[_0xd587[442]](_0x5c29x4,_0x5c29x2,_0x5c29x13)&& !mxUtils[_0xd587[442]](_0x5c29x3,_0x5c29x2,_0x5c29x13)&& _0x5c29x9[_0xd587[207]]( new mxPoint(_0x5c29x2,_0x5c29x13)),1== _0x5c29x9[_0xd587[67]]&& (null!= _0x5c29x5&& 1== _0x5c29x9[_0xd587[67]]?!mxUtils[_0xd587[442]](_0x5c29x4,_0x5c29x5[_0xd587[235]],_0x5c29x13)&& !mxUtils[_0xd587[442]](_0x5c29x3,_0x5c29x5[_0xd587[235]],_0x5c29x13)&& _0x5c29x9[_0xd587[207]]( new mxPoint(_0x5c29x5[_0xd587[235]],_0x5c29x13)):(_0x5c29xa= Math[_0xd587[160]](_0x5c29x3[_0xd587[235]],_0x5c29x4[_0xd587[235]]),_0x5c29x3= Math[_0xd587[243]](_0x5c29x3[_0xd587[235]]+ _0x5c29x3[_0xd587[117]],_0x5c29x4[_0xd587[235]]+ _0x5c29x4[_0xd587[117]]),_0x5c29x9[_0xd587[207]]( new mxPoint(_0x5c29xa+ (_0x5c29x3- _0x5c29xa)/ 2,_0x5c29x13)))))},SegmentConnector:function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){var _0x5c29xa=_0x5c29x2[_0xd587[439]],_0x5c29x12=!0,_0x5c29x13=null,_0x5c29x14=_0x5c29xa[0];null== _0x5c29x14&& null!= _0x5c29x3?_0x5c29x14= new mxPoint(_0x5c29x2[_0xd587[441]][_0xd587[2230]](_0x5c29x3),_0x5c29x2[_0xd587[441]][_0xd587[2228]](_0x5c29x3)):null!= _0x5c29x14&& (_0x5c29x14= _0x5c29x14[_0xd587[238]]());var _0x5c29x15=_0x5c29xa[_0xd587[67]]- 1;if(null!= _0x5c29x5&& 0< _0x5c29x5[_0xd587[67]]){for(var _0x5c29x13=_0x5c29x2[_0xd587[441]][_0xd587[2229]](_0x5c29x2,_0x5c29x5[0]),_0x5c29x16=_0x5c29x3,_0x5c29x17=_0x5c29xa[0],_0x5c29x18=!1,_0x5c29x19=!1,_0x5c29x18=_0x5c29x13,_0x5c29x1a=_0x5c29x5[_0xd587[67]],_0x5c29x1b=0;2> _0x5c29x1b;_0x5c29x1b++){var _0x5c29x1c=null!= _0x5c29x17&& _0x5c29x17[_0xd587[235]]== _0x5c29x18[_0xd587[235]],_0x5c29x1d=null!= _0x5c29x17&& _0x5c29x17[_0xd587[236]]== _0x5c29x18[_0xd587[236]],_0x5c29x1e=null!= _0x5c29x16&& _0x5c29x18[_0xd587[236]]>= _0x5c29x16[_0xd587[236]]&& _0x5c29x18[_0xd587[236]]<= _0x5c29x16[_0xd587[236]]+ _0x5c29x16[_0xd587[119]],_0x5c29x16=null!= _0x5c29x16&& _0x5c29x18[_0xd587[235]]>= _0x5c29x16[_0xd587[235]]&& _0x5c29x18[_0xd587[235]]<= _0x5c29x16[_0xd587[235]]+ _0x5c29x16[_0xd587[117]],_0x5c29x18=_0x5c29x1d|| null== _0x5c29x17&& _0x5c29x1e,_0x5c29x19=_0x5c29x1c|| null== _0x5c29x17&& _0x5c29x16;if(null!= _0x5c29x17&& !_0x5c29x1d&& !_0x5c29x1c&& (_0x5c29x1e|| _0x5c29x16)){_0x5c29x12= _0x5c29x1e?!1:!0;break};if(_0x5c29x19|| _0x5c29x18){_0x5c29x12= _0x5c29x18;1== _0x5c29x1b&& (_0x5c29x12= 0== _0x5c29x5[_0xd587[67]]% 2?_0x5c29x18:_0x5c29x19);break};_0x5c29x16= _0x5c29x4;_0x5c29x17= _0x5c29xa[_0x5c29x15];_0x5c29x18= _0x5c29x2[_0xd587[441]][_0xd587[2229]](_0x5c29x2,_0x5c29x5[_0x5c29x1a- 1])};_0x5c29x12&& (null!= _0x5c29xa[0]&& _0x5c29xa[0][_0xd587[236]]!= _0x5c29x13[_0xd587[236]]|| null== _0x5c29xa[0]&& null!= _0x5c29x3&& (_0x5c29x13[_0xd587[236]]< _0x5c29x3[_0xd587[236]]|| _0x5c29x13[_0xd587[236]]> _0x5c29x3[_0xd587[236]]+ _0x5c29x3[_0xd587[119]]))?_0x5c29x9[_0xd587[207]]( new mxPoint(_0x5c29x14[_0xd587[235]],_0x5c29x13[_0xd587[236]])):!_0x5c29x12&& (null!= _0x5c29xa[0]&& _0x5c29xa[0][_0xd587[235]]!= _0x5c29x13[_0xd587[235]]|| null== _0x5c29xa[0]&& null!= _0x5c29x3&& (_0x5c29x13[_0xd587[235]]< _0x5c29x3[_0xd587[235]]|| _0x5c29x13[_0xd587[235]]> _0x5c29x3[_0xd587[235]]+ _0x5c29x3[_0xd587[117]]))&& _0x5c29x9[_0xd587[207]]( new mxPoint(_0x5c29x13[_0xd587[235]],_0x5c29x14[_0xd587[236]]));_0x5c29x12?_0x5c29x14[_0xd587[236]]= _0x5c29x13[_0xd587[236]]:_0x5c29x14[_0xd587[235]]= _0x5c29x13[_0xd587[235]];for(_0x5c29x1b= 0;_0x5c29x1b< _0x5c29x5[_0xd587[67]];_0x5c29x1b++){_0x5c29x12= !_0x5c29x12,_0x5c29x13= _0x5c29x2[_0xd587[441]][_0xd587[2229]](_0x5c29x2,_0x5c29x5[_0x5c29x1b]),_0x5c29x12?_0x5c29x14[_0xd587[236]]= _0x5c29x13[_0xd587[236]]:_0x5c29x14[_0xd587[235]]= _0x5c29x13[_0xd587[235]],_0x5c29x9[_0xd587[207]](_0x5c29x14[_0xd587[238]]())}}else {_0x5c29x13= _0x5c29x14,_0x5c29x12= !0};_0x5c29x14= _0x5c29xa[_0x5c29x15];null== _0x5c29x14&& null!= _0x5c29x4&& (_0x5c29x14= new mxPoint(_0x5c29x2[_0xd587[441]][_0xd587[2230]](_0x5c29x4),_0x5c29x2[_0xd587[441]][_0xd587[2228]](_0x5c29x4)));_0x5c29x12&& (null!= _0x5c29xa[_0x5c29x15]&& _0x5c29xa[_0x5c29x15][_0xd587[236]]!= _0x5c29x13[_0xd587[236]]|| null== _0x5c29xa[_0x5c29x15]&& null!= _0x5c29x4&& (_0x5c29x13[_0xd587[236]]< _0x5c29x4[_0xd587[236]]|| _0x5c29x13[_0xd587[236]]> _0x5c29x4[_0xd587[236]]+ _0x5c29x4[_0xd587[119]]))?_0x5c29x9[_0xd587[207]]( new mxPoint(_0x5c29x14[_0xd587[235]],_0x5c29x13[_0xd587[236]])):!_0x5c29x12&& (null!= _0x5c29xa[_0x5c29x15]&& _0x5c29xa[_0x5c29x15][_0xd587[235]]!= _0x5c29x13[_0xd587[235]]|| null== _0x5c29xa[_0x5c29x15]&& null!= _0x5c29x4&& (_0x5c29x13[_0xd587[235]]< _0x5c29x4[_0xd587[235]]|| _0x5c29x13[_0xd587[235]]> _0x5c29x4[_0xd587[235]]+ _0x5c29x4[_0xd587[117]]))&& _0x5c29x9[_0xd587[207]]( new mxPoint(_0x5c29x13[_0xd587[235]],_0x5c29x14[_0xd587[236]]));if(null== _0x5c29xa[0]&& null!= _0x5c29x3){for(;1< _0x5c29x9[_0xd587[67]]&& mxUtils[_0xd587[442]](_0x5c29x3,_0x5c29x9[1][_0xd587[235]],_0x5c29x9[1][_0xd587[236]]);){_0x5c29x9= _0x5c29x9[_0xd587[300]](1,1)}};if(null== _0x5c29xa[_0x5c29x15]&& null!= _0x5c29x4){for(;1< _0x5c29x9[_0xd587[67]]&& mxUtils[_0xd587[442]](_0x5c29x4,_0x5c29x9[_0x5c29x9[_0xd587[67]]- 1][_0xd587[235]],_0x5c29x9[_0x5c29x9[_0xd587[67]]- 1][_0xd587[236]]);){_0x5c29x9= _0x5c29x9[_0xd587[300]](_0x5c29x9[_0xd587[67]]- 1,1)}}},orthBuffer:10,dirVectors:[[-1,0],[0,-1],[1,0],[0,1],[-1,0],[0,-1],[1,0]],wayPoints1:[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],routePatterns:[[[513,2308,2081,2562],[513,1090,514,2184,2114,2561],[513,1090,514,2564,2184,2562],[513,2308,2561,1090,514,2568,2308]],[[514,1057,513,2308,2081,2562],[514,2184,2114,2561],[514,2184,2562,1057,513,2564,2184],[514,1057,513,2568,2308,2561]],[[1090,514,1057,513,2308,2081,2562],[2114,2561],[1090,2562,1057,513,2564,2184],[1090,514,1057,513,2308,2561,2568]],[[2081,2562],[1057,513,1090,514,2184,2114,2561],[1057,513,1090,514,2184,2562,2564],[1057,2561,1090,514,2568,2308]]],inlineRoutePatterns:[[null,[2114,2568],null,null],[null,[514,2081,2114,2568],null,null],[null,[2114,2561],null,null],[[2081,2562],[1057,2114,2568],[2184,2562],null]],vertexSeperations:[],limits:[[0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0]],LEFT_MASK:32,TOP_MASK:64,RIGHT_MASK:128,BOTTOM_MASK:256,LEFT:1,TOP:2,RIGHT:4,BOTTOM:8,SIDE_MASK:480,CENTER_MASK:512,SOURCE_MASK:1024,TARGET_MASK:2048,VERTEX_MASK:3072,OrthConnector:function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){var _0x5c29xa=_0x5c29x2[_0xd587[441]][_0xd587[1179]],_0x5c29x12=null== _0x5c29x3?!1:_0x5c29xa[_0xd587[502]]()[_0xd587[250]](_0x5c29x3[_0xd587[246]]),_0x5c29xa=null== _0x5c29x4?!1:_0x5c29xa[_0xd587[502]]()[_0xd587[250]](_0x5c29x4[_0xd587[246]]);if(null!= _0x5c29x5&& 0< _0x5c29x5[_0xd587[67]]|| _0x5c29x12|| _0x5c29xa){mxEdgeStyle.SegmentConnector(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9)}else {_0x5c29x5= _0x5c29x2[_0xd587[439]];var _0x5c29x13=_0x5c29x5[0],_0x5c29x14=_0x5c29x5[_0x5c29x5[_0xd587[67]]- 1];_0x5c29x5= null!= _0x5c29x3?_0x5c29x3[_0xd587[235]]:_0x5c29x13[_0xd587[235]];var _0x5c29x12=null!= _0x5c29x3?_0x5c29x3[_0xd587[236]]:_0x5c29x13[_0xd587[236]],_0x5c29x15=null!= _0x5c29x3?_0x5c29x3[_0xd587[117]]:1,_0x5c29x16=null!= _0x5c29x3?_0x5c29x3[_0xd587[119]]:1,_0x5c29x17=null!= _0x5c29x4?_0x5c29x4[_0xd587[235]]:_0x5c29x14[_0xd587[235]],_0x5c29x18=null!= _0x5c29x4?_0x5c29x4[_0xd587[236]]:_0x5c29x14[_0xd587[236]],_0x5c29x19=null!= _0x5c29x4?_0x5c29x4[_0xd587[117]]:1,_0x5c29x1a=null!= _0x5c29x4?_0x5c29x4[_0xd587[119]]:1,_0x5c29xa=_0x5c29x2[_0xd587[441]][_0xd587[255]]* mxEdgeStyle[_0xd587[2233]],_0x5c29x1b=[mxConstants[_0xd587[2234]],mxConstants[_0xd587[2234]]];null!= _0x5c29x3&& (_0x5c29x1b[0]= mxUtils[_0xd587[2227]](_0x5c29x3,_0x5c29x2,!0,mxConstants.DIRECTION_MASK_ALL));null!= _0x5c29x4&& (_0x5c29x1b[1]= mxUtils[_0xd587[2227]](_0x5c29x4,_0x5c29x2,!1,mxConstants.DIRECTION_MASK_ALL));_0x5c29x2= [0,0];_0x5c29x5= [[_0x5c29x5,_0x5c29x12,_0x5c29x15,_0x5c29x16],[_0x5c29x17,_0x5c29x18,_0x5c29x19,_0x5c29x1a]];for(_0x5c29x15= 0;2> _0x5c29x15;_0x5c29x15++){mxEdgeStyle[_0xd587[2235]][_0x5c29x15][1]= _0x5c29x5[_0x5c29x15][0]- _0x5c29xa,mxEdgeStyle[_0xd587[2235]][_0x5c29x15][2]= _0x5c29x5[_0x5c29x15][1]- _0x5c29xa,mxEdgeStyle[_0xd587[2235]][_0x5c29x15][4]= _0x5c29x5[_0x5c29x15][0]+ _0x5c29x5[_0x5c29x15][2]+ _0x5c29xa,mxEdgeStyle[_0xd587[2235]][_0x5c29x15][8]= _0x5c29x5[_0x5c29x15][1]+ _0x5c29x5[_0x5c29x15][3]+ _0x5c29xa};_0x5c29x15= _0x5c29x5[0][0]+ _0x5c29x5[0][2]/ 2- (_0x5c29x5[1][0]+ _0x5c29x5[1][2]/ 2);_0x5c29x16= _0x5c29x5[0][1]+ _0x5c29x5[0][3]/ 2- (_0x5c29x5[1][1]+ _0x5c29x5[1][3]/ 2);_0x5c29x12= 0;0> _0x5c29x15?_0x5c29x12= 0> _0x5c29x16?2:1:0>= _0x5c29x16&& (_0x5c29x12= 3,0== _0x5c29x15&& (_0x5c29x12= 2));_0x5c29x16= null;null!= _0x5c29x3&& (_0x5c29x16= _0x5c29x13);_0x5c29x3= [[0.5,0.5],[0.5,0.5]];for(_0x5c29x15= 0;2> _0x5c29x15;_0x5c29x15++){null!= _0x5c29x16&& (_0x5c29x3[_0x5c29x15][0]= (_0x5c29x16[_0xd587[235]]- _0x5c29x5[_0x5c29x15][0])/ _0x5c29x5[_0x5c29x15][2],0.01> _0x5c29x3[_0x5c29x15][0]?_0x5c29x2[_0x5c29x15]= mxConstants[_0xd587[436]]:0.99< _0x5c29x3[_0x5c29x15][0]&& (_0x5c29x2[_0x5c29x15]= mxConstants[_0xd587[438]]),_0x5c29x3[_0x5c29x15][1]= (_0x5c29x16[_0xd587[236]]- _0x5c29x5[_0x5c29x15][1])/ _0x5c29x5[_0x5c29x15][3],0.01> _0x5c29x3[_0x5c29x15][1]?_0x5c29x2[_0x5c29x15]= mxConstants[_0xd587[435]]:0.99< _0x5c29x3[_0x5c29x15][1]&& (_0x5c29x2[_0x5c29x15]= mxConstants[_0xd587[437]])),_0x5c29x16= null,null!= _0x5c29x4&& (_0x5c29x16= _0x5c29x14)};_0x5c29x15= _0x5c29x5[0][1]- (_0x5c29x5[1][1]+ _0x5c29x5[1][3]);_0x5c29x16= _0x5c29x5[0][0]- (_0x5c29x5[1][0]+ _0x5c29x5[1][2]);_0x5c29x17= _0x5c29x5[1][1]- (_0x5c29x5[0][1]+ _0x5c29x5[0][3]);_0x5c29x18= _0x5c29x5[1][0]- (_0x5c29x5[0][0]+ _0x5c29x5[0][2]);mxEdgeStyle[_0xd587[2236]][1]= Math[_0xd587[160]](_0x5c29x16- 2* _0x5c29xa,0);mxEdgeStyle[_0xd587[2236]][2]= Math[_0xd587[160]](_0x5c29x15- 2* _0x5c29xa,0);mxEdgeStyle[_0xd587[2236]][4]= Math[_0xd587[160]](_0x5c29x17- 2* _0x5c29xa,0);mxEdgeStyle[_0xd587[2236]][3]= Math[_0xd587[160]](_0x5c29x18- 2* _0x5c29xa,0);_0x5c29x4= [];_0x5c29x13= [];_0x5c29x14= [];_0x5c29x13[0]= _0x5c29x16>= _0x5c29x18?mxConstants[_0xd587[436]]:mxConstants[_0xd587[438]];_0x5c29x14[0]= _0x5c29x15>= _0x5c29x17?mxConstants[_0xd587[435]]:mxConstants[_0xd587[437]];_0x5c29x13[1]= mxUtils[_0xd587[2237]](_0x5c29x13[0]);_0x5c29x14[1]= mxUtils[_0xd587[2237]](_0x5c29x14[0]);_0x5c29x16= _0x5c29x16>= _0x5c29x18?_0x5c29x16:_0x5c29x18;_0x5c29x17= _0x5c29x15>= _0x5c29x17?_0x5c29x15:_0x5c29x17;_0x5c29x18= [[0,0],[0,0]];_0x5c29x19= !1;for(_0x5c29x15= 0;2> _0x5c29x15;_0x5c29x15++){0== _0x5c29x2[_0x5c29x15]&& (0== (_0x5c29x13[_0x5c29x15]& _0x5c29x1b[_0x5c29x15])&& (_0x5c29x13[_0x5c29x15]= mxUtils[_0xd587[2237]](_0x5c29x13[_0x5c29x15])),0== (_0x5c29x14[_0x5c29x15]& _0x5c29x1b[_0x5c29x15])&& (_0x5c29x14[_0x5c29x15]= mxUtils[_0xd587[2237]](_0x5c29x14[_0x5c29x15])),_0x5c29x18[_0x5c29x15][0]= _0x5c29x14[_0x5c29x15],_0x5c29x18[_0x5c29x15][1]= _0x5c29x13[_0x5c29x15])};_0x5c29x17> 2* _0x5c29xa&& _0x5c29x16> 2* _0x5c29xa&& (0< (_0x5c29x13[0]& _0x5c29x1b[0])&& 0< (_0x5c29x14[1]& _0x5c29x1b[1])?(_0x5c29x18[0][0]= _0x5c29x13[0],_0x5c29x18[0][1]= _0x5c29x14[0],_0x5c29x18[1][0]= _0x5c29x14[1],_0x5c29x18[1][1]= _0x5c29x13[1],_0x5c29x19= !0):0< (_0x5c29x14[0]& _0x5c29x1b[0])&& 0< (_0x5c29x13[1]& _0x5c29x1b[1])&& (_0x5c29x18[0][0]= _0x5c29x14[0],_0x5c29x18[0][1]= _0x5c29x13[0],_0x5c29x18[1][0]= _0x5c29x13[1],_0x5c29x18[1][1]= _0x5c29x14[1],_0x5c29x19= !0));_0x5c29x17> 2* _0x5c29xa&& !_0x5c29x19&& (_0x5c29x18[0][0]= _0x5c29x14[0],_0x5c29x18[0][1]= _0x5c29x13[0],_0x5c29x18[1][0]= _0x5c29x14[1],_0x5c29x18[1][1]= _0x5c29x13[1],_0x5c29x19= !0);_0x5c29x16> 2* _0x5c29xa&& !_0x5c29x19&& (_0x5c29x18[0][0]= _0x5c29x13[0],_0x5c29x18[0][1]= _0x5c29x14[0],_0x5c29x18[1][0]= _0x5c29x13[1],_0x5c29x18[1][1]= _0x5c29x14[1]);for(_0x5c29x15= 0;2> _0x5c29x15;_0x5c29x15++){if(0== _0x5c29x2[_0x5c29x15]&& (0== (_0x5c29x18[_0x5c29x15][0]& _0x5c29x1b[_0x5c29x15])&& (_0x5c29x18[_0x5c29x15][0]= _0x5c29x18[_0x5c29x15][1]),_0x5c29x4[_0x5c29x15]= _0x5c29x18[_0x5c29x15][0]& _0x5c29x1b[_0x5c29x15],_0x5c29x4[_0x5c29x15]|= (_0x5c29x18[_0x5c29x15][1]& _0x5c29x1b[_0x5c29x15])<< 8,_0x5c29x4[_0x5c29x15]|= (_0x5c29x18[1- _0x5c29x15][_0x5c29x15]& _0x5c29x1b[_0x5c29x15])<< 16,_0x5c29x4[_0x5c29x15]|= (_0x5c29x18[1- _0x5c29x15][1- _0x5c29x15]& _0x5c29x1b[_0x5c29x15])<< 24,0== (_0x5c29x4[_0x5c29x15]& 15)&& (_0x5c29x4[_0x5c29x15]<<= 8),0== (_0x5c29x4[_0x5c29x15]& 3840)&& (_0x5c29x4[_0x5c29x15]= _0x5c29x4[_0x5c29x15]& 15| _0x5c29x4[_0x5c29x15]>> 8),0== (_0x5c29x4[_0x5c29x15]& 983040)&& (_0x5c29x4[_0x5c29x15]= _0x5c29x4[_0x5c29x15]& 65535| (_0x5c29x4[_0x5c29x15]& 251658240)>> 8),_0x5c29x2[_0x5c29x15]= _0x5c29x4[_0x5c29x15]& 15,_0x5c29x1b[_0x5c29x15]== mxConstants[_0xd587[436]]|| _0x5c29x1b[_0x5c29x15]== mxConstants[_0xd587[435]]|| _0x5c29x1b[_0x5c29x15]== mxConstants[_0xd587[438]]|| _0x5c29x1b[_0x5c29x15]== mxConstants[_0xd587[437]])){_0x5c29x2[_0x5c29x15]= _0x5c29x1b[_0x5c29x15]}};_0x5c29x15= _0x5c29x2[0]== mxConstants[_0xd587[438]]?3:_0x5c29x2[0];_0x5c29x1b= _0x5c29x2[1]== mxConstants[_0xd587[438]]?3:_0x5c29x2[1];_0x5c29x15-= _0x5c29x12;_0x5c29x1b-= _0x5c29x12;1> _0x5c29x15&& (_0x5c29x15+= 4);1> _0x5c29x1b&& (_0x5c29x1b+= 4);_0x5c29x1b= mxEdgeStyle[_0xd587[2238]][_0x5c29x15- 1][_0x5c29x1b- 1];mxEdgeStyle[_0xd587[2239]][0][0]= _0x5c29x5[0][0];mxEdgeStyle[_0xd587[2239]][0][1]= _0x5c29x5[0][1];switch(_0x5c29x2[0]){case mxConstants[_0xd587[436]]:mxEdgeStyle[_0xd587[2239]][0][0]-= _0x5c29xa;mxEdgeStyle[_0xd587[2239]][0][1]+= _0x5c29x3[0][1]* _0x5c29x5[0][3];break;case mxConstants[_0xd587[437]]:mxEdgeStyle[_0xd587[2239]][0][0]+= _0x5c29x3[0][0]* _0x5c29x5[0][2];mxEdgeStyle[_0xd587[2239]][0][1]+= _0x5c29x5[0][3]+ _0x5c29xa;break;case mxConstants[_0xd587[438]]:mxEdgeStyle[_0xd587[2239]][0][0]+= _0x5c29x5[0][2]+ _0x5c29xa;mxEdgeStyle[_0xd587[2239]][0][1]+= _0x5c29x3[0][1]* _0x5c29x5[0][3];break;case mxConstants[_0xd587[435]]:mxEdgeStyle[_0xd587[2239]][0][0]+= _0x5c29x3[0][0]* _0x5c29x5[0][2],mxEdgeStyle[_0xd587[2239]][0][1]-= _0x5c29xa};_0x5c29xa= 0;_0x5c29x13= _0x5c29x4= 0< (_0x5c29x2[0]& (mxConstants[_0xd587[438]]| mxConstants[_0xd587[436]]))?0:1;for(_0x5c29x15= _0x5c29x14= 0;_0x5c29x15< _0x5c29x1b[_0xd587[67]];_0x5c29x15++){_0x5c29x14= _0x5c29x1b[_0x5c29x15]& 15;_0x5c29x1a= _0x5c29x14== mxConstants[_0xd587[438]]?3:_0x5c29x14;_0x5c29x1a+= _0x5c29x12;4< _0x5c29x1a&& (_0x5c29x1a-= 4);_0x5c29x16= mxEdgeStyle[_0xd587[2240]][_0x5c29x1a- 1];_0x5c29x14= 0< _0x5c29x1a% 2?0:1;_0x5c29x14!= _0x5c29x4&& (_0x5c29xa++,mxEdgeStyle[_0xd587[2239]][_0x5c29xa][0]= mxEdgeStyle[_0xd587[2239]][_0x5c29xa- 1][0],mxEdgeStyle[_0xd587[2239]][_0x5c29xa][1]= mxEdgeStyle[_0xd587[2239]][_0x5c29xa- 1][1]);var _0x5c29x1c=0< (_0x5c29x1b[_0x5c29x15]& mxEdgeStyle[_0xd587[2241]]),_0x5c29x19=0< (_0x5c29x1b[_0x5c29x15]& mxEdgeStyle[_0xd587[2242]]),_0x5c29x17=(_0x5c29x1b[_0x5c29x15]& mxEdgeStyle[_0xd587[2243]])>> 5,_0x5c29x17=_0x5c29x17<< _0x5c29x12;15< _0x5c29x17&& (_0x5c29x17>>= 4);_0x5c29x18= 0< (_0x5c29x1b[_0x5c29x15]& mxEdgeStyle[_0xd587[2244]]);(_0x5c29x19|| _0x5c29x1c)&& 9> _0x5c29x17?(_0x5c29x1a= 0,_0x5c29x19= _0x5c29x19?0:1,_0x5c29x1a= _0x5c29x18&& 0== _0x5c29x14?_0x5c29x5[_0x5c29x19][0]+ _0x5c29x3[_0x5c29x19][0]* _0x5c29x5[_0x5c29x19][2]:_0x5c29x18?_0x5c29x5[_0x5c29x19][1]+ _0x5c29x3[_0x5c29x19][1]* _0x5c29x5[_0x5c29x19][3]:mxEdgeStyle[_0xd587[2235]][_0x5c29x19][_0x5c29x17],0== _0x5c29x14?(_0x5c29x17= (_0x5c29x1a- mxEdgeStyle[_0xd587[2239]][_0x5c29xa][0])* _0x5c29x16[0],0< _0x5c29x17&& (mxEdgeStyle[_0xd587[2239]][_0x5c29xa][0]+= _0x5c29x16[0]* _0x5c29x17)):(_0x5c29x17= (_0x5c29x1a- mxEdgeStyle[_0xd587[2239]][_0x5c29xa][1])* _0x5c29x16[1],0< _0x5c29x17&& (mxEdgeStyle[_0xd587[2239]][_0x5c29xa][1]+= _0x5c29x16[1]* _0x5c29x17))):_0x5c29x18&& (mxEdgeStyle[_0xd587[2239]][_0x5c29xa][0]+= _0x5c29x16[0]* Math[_0xd587[425]](mxEdgeStyle[_0xd587[2236]][_0x5c29x1a]/ 2),mxEdgeStyle[_0xd587[2239]][_0x5c29xa][1]+= _0x5c29x16[1]* Math[_0xd587[425]](mxEdgeStyle[_0xd587[2236]][_0x5c29x1a]/ 2));0< _0x5c29xa&& mxEdgeStyle[_0xd587[2239]][_0x5c29xa][_0x5c29x14]== mxEdgeStyle[_0xd587[2239]][_0x5c29xa- 1][_0x5c29x14]?_0x5c29xa--:_0x5c29x4= _0x5c29x14};for(_0x5c29x15= 0;_0x5c29x15<= _0x5c29xa&& !(_0x5c29x15== _0x5c29xa&& ((0< (_0x5c29x2[1]& (mxConstants[_0xd587[438]]| mxConstants[_0xd587[436]]))?0:1)== _0x5c29x13?0:1)!= (_0x5c29xa+ 1)% 2);_0x5c29x15++){_0x5c29x9[_0xd587[207]]( new mxPoint(mxEdgeStyle[_0xd587[2239]][_0x5c29x15][0],mxEdgeStyle[_0xd587[2239]][_0x5c29x15][1]))}}},getRoutePattern:function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){var _0x5c29x9=_0x5c29x2[0]== mxConstants[_0xd587[438]]?3:_0x5c29x2[0];_0x5c29x2= _0x5c29x2[1]== mxConstants[_0xd587[438]]?3:_0x5c29x2[1];_0x5c29x9-= _0x5c29x3;_0x5c29x2-= _0x5c29x3;1> _0x5c29x9&& (_0x5c29x9+= 4);1> _0x5c29x2&& (_0x5c29x2+= 4);_0x5c29x3= routePatterns[_0x5c29x9- 1][_0x5c29x2- 1];if(0== _0x5c29x4|| 0== _0x5c29x5){null!= inlineRoutePatterns[_0x5c29x9- 1][_0x5c29x2- 1]&& (_0x5c29x3= inlineRoutePatterns[_0x5c29x9- 1][_0x5c29x2- 1])};return _0x5c29x3}},mxStyleRegistry={values:[],putValue:function(_0x5c29x2,_0x5c29x3){mxStyleRegistry[_0xd587[2245]][_0x5c29x2]= _0x5c29x3},getValue:function(_0x5c29x2){return mxStyleRegistry[_0xd587[2245]][_0x5c29x2]},getName:function(_0x5c29x2){for(var _0x5c29x3 in mxStyleRegistry[_0xd587[2245]]){if(mxStyleRegistry[_0xd587[2245]][_0x5c29x3]== _0x5c29x2){return _0x5c29x3}};return null}};mxStyleRegistry[_0xd587[2246]](mxConstants.EDGESTYLE_ELBOW,mxEdgeStyle.ElbowConnector);mxStyleRegistry[_0xd587[2246]](mxConstants.EDGESTYLE_ENTITY_RELATION,mxEdgeStyle.EntityRelation);mxStyleRegistry[_0xd587[2246]](mxConstants.EDGESTYLE_LOOP,mxEdgeStyle.Loop);mxStyleRegistry[_0xd587[2246]](mxConstants.EDGESTYLE_SIDETOSIDE,mxEdgeStyle.SideToSide);mxStyleRegistry[_0xd587[2246]](mxConstants.EDGESTYLE_TOPTOBOTTOM,mxEdgeStyle.TopToBottom);mxStyleRegistry[_0xd587[2246]](mxConstants.EDGESTYLE_ORTHOGONAL,mxEdgeStyle.OrthConnector);mxStyleRegistry[_0xd587[2246]](mxConstants.EDGESTYLE_SEGMENT,mxEdgeStyle.SegmentConnector);mxStyleRegistry[_0xd587[2246]](mxConstants.PERIMETER_ELLIPSE,mxPerimeter.EllipsePerimeter);mxStyleRegistry[_0xd587[2246]](mxConstants.PERIMETER_RECTANGLE,mxPerimeter.RectanglePerimeter);mxStyleRegistry[_0xd587[2246]](mxConstants.PERIMETER_RHOMBUS,mxPerimeter.RhombusPerimeter);mxStyleRegistry[_0xd587[2246]](mxConstants.PERIMETER_TRIANGLE,mxPerimeter.TrianglePerimeter);function mxGraphView(_0x5c29x2){this[_0xd587[1179]]= _0x5c29x2;this[_0xd587[513]]= new mxPoint;this[_0xd587[2247]]= new mxRectangle;this[_0xd587[1214]]= new mxDictionary}mxGraphView[_0xd587[202]]= new mxEventSource;mxGraphView[_0xd587[202]][_0xd587[196]]= mxGraphView;mxGraphView[_0xd587[202]][_0xd587[2248]]= new mxPoint;mxGraphView[_0xd587[202]][_0xd587[2091]]= _0xd587[130]!= mxClient[_0xd587[90]]?_0xd587[819]:_0xd587[110];mxGraphView[_0xd587[202]][_0xd587[2249]]= _0xd587[130]!= mxClient[_0xd587[90]]?_0xd587[2250]:_0xd587[110];mxGraphView[_0xd587[202]][_0xd587[2251]]= !1;mxGraphView[_0xd587[202]][_0xd587[2252]]= !0;mxGraphView[_0xd587[202]][_0xd587[2253]]= !0;mxGraphView[_0xd587[202]][_0xd587[2254]]= !0;mxGraphView[_0xd587[202]][_0xd587[1179]]= null;mxGraphView[_0xd587[202]][_0xd587[1741]]= null;mxGraphView[_0xd587[202]][_0xd587[2247]]= null;mxGraphView[_0xd587[202]][_0xd587[255]]= 1;mxGraphView[_0xd587[202]][_0xd587[513]]= null;mxGraphView[_0xd587[202]][_0xd587[2255]]= !1;mxGraphView[_0xd587[202]][_0xd587[517]]= function(){return this[_0xd587[2247]]};mxGraphView[_0xd587[202]][_0xd587[2256]]= function(_0x5c29x2){this[_0xd587[2247]]= _0x5c29x2};mxGraphView[_0xd587[202]][_0xd587[1799]]= function(_0x5c29x2){var _0x5c29x3=null;if(null!= _0x5c29x2&& 0< _0x5c29x2[_0xd587[67]]){for(var _0x5c29x4=this[_0xd587[1179]][_0xd587[502]](),_0x5c29x5=0;_0x5c29x5< _0x5c29x2[_0xd587[67]];_0x5c29x5++){if(_0x5c29x4[_0xd587[1193]](_0x5c29x2[_0x5c29x5])|| _0x5c29x4[_0xd587[250]](_0x5c29x2[_0x5c29x5])){var _0x5c29x9=this[_0xd587[248]](_0x5c29x2[_0x5c29x5]);null!= _0x5c29x9&& (null== _0x5c29x3?_0x5c29x3= new mxRectangle(_0x5c29x9[_0xd587[235]],_0x5c29x9[_0xd587[236]],_0x5c29x9[_0xd587[117]],_0x5c29x9[_0xd587[119]]):_0x5c29x3[_0xd587[99]](_0x5c29x9))}}};return _0x5c29x3};mxGraphView[_0xd587[202]][_0xd587[2257]]= function(_0x5c29x2){if(this[_0xd587[1741]]!= _0x5c29x2){var _0x5c29x3= new mxCurrentRootChange(this,_0x5c29x2);_0x5c29x3[_0xd587[350]]();var _0x5c29x4= new mxUndoableEdit(this,!1);_0x5c29x4[_0xd587[99]](_0x5c29x3);this[_0xd587[746]]( new mxEventObject(mxEvent.UNDO,_0xd587[1061],_0x5c29x4));this[_0xd587[1179]][_0xd587[2258]]()};return _0x5c29x2};mxGraphView[_0xd587[202]][_0xd587[829]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){var _0x5c29x5=this[_0xd587[255]],_0x5c29x9= new mxPoint(this[_0xd587[513]][_0xd587[235]],this[_0xd587[513]][_0xd587[236]]);if(this[_0xd587[255]]!= _0x5c29x2|| this[_0xd587[513]][_0xd587[235]]!= _0x5c29x3|| this[_0xd587[513]][_0xd587[236]]!= _0x5c29x4){this[_0xd587[255]]= _0x5c29x2,this[_0xd587[513]][_0xd587[235]]= _0x5c29x3,this[_0xd587[513]][_0xd587[236]]= _0x5c29x4,this[_0xd587[503]]()&& (this[_0xd587[2259]](),this[_0xd587[1179]][_0xd587[2258]]())};this[_0xd587[746]]( new mxEventObject(mxEvent.SCALE_AND_TRANSLATE,_0xd587[255],_0x5c29x2,_0xd587[2260],_0x5c29x5,_0xd587[513],this[_0xd587[513]],_0xd587[2261],_0x5c29x9))};mxGraphView[_0xd587[202]][_0xd587[518]]= function(){return this[_0xd587[255]]};mxGraphView[_0xd587[202]][_0xd587[2262]]= function(_0x5c29x2){var _0x5c29x3=this[_0xd587[255]];this[_0xd587[255]]!= _0x5c29x2&& (this[_0xd587[255]]= _0x5c29x2,this[_0xd587[503]]()&& (this[_0xd587[2259]](),this[_0xd587[1179]][_0xd587[2258]]()));this[_0xd587[746]]( new mxEventObject(mxEvent.SCALE,_0xd587[255],_0x5c29x2,_0xd587[2260],_0x5c29x3))};mxGraphView[_0xd587[202]][_0xd587[512]]= function(){return this[_0xd587[513]]};mxGraphView[_0xd587[202]][_0xd587[1147]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4= new mxPoint(this[_0xd587[513]][_0xd587[235]],this[_0xd587[513]][_0xd587[236]]);if(this[_0xd587[513]][_0xd587[235]]!= _0x5c29x2|| this[_0xd587[513]][_0xd587[236]]!= _0x5c29x3){this[_0xd587[513]][_0xd587[235]]= _0x5c29x2,this[_0xd587[513]][_0xd587[236]]= _0x5c29x3,this[_0xd587[503]]()&& (this[_0xd587[2259]](),this[_0xd587[1179]][_0xd587[2258]]())};this[_0xd587[746]]( new mxEventObject(mxEvent.TRANSLATE,_0xd587[513],this[_0xd587[513]],_0xd587[2261],_0x5c29x4))};mxGraphView[_0xd587[202]][_0xd587[802]]= function(){null!= this[_0xd587[1741]]&& this[_0xd587[200]]();this[_0xd587[2259]]()};mxGraphView[_0xd587[202]][_0xd587[2259]]= function(){this[_0xd587[2263]]();this[_0xd587[2264]]()};mxGraphView[_0xd587[202]][_0xd587[200]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){var _0x5c29x5=this[_0xd587[1179]][_0xd587[502]]();_0x5c29x2= _0x5c29x2|| _0x5c29x5[_0xd587[501]]();_0x5c29x3= null!= _0x5c29x3?_0x5c29x3:!1;_0x5c29x4= null!= _0x5c29x4?_0x5c29x4:!0;this[_0xd587[2265]](_0x5c29x2);if(_0x5c29x4&& (_0x5c29x3|| _0x5c29x2!= this[_0xd587[1741]])){_0x5c29x4= _0x5c29x5[_0xd587[262]](_0x5c29x2);for(var _0x5c29x9=0;_0x5c29x9< _0x5c29x4;_0x5c29x9++){this[_0xd587[200]](_0x5c29x5[_0xd587[263]](_0x5c29x2,_0x5c29x9),_0x5c29x3)}}else {this[_0xd587[2263]](_0x5c29x2)}};mxGraphView[_0xd587[202]][_0xd587[2263]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){var _0x5c29x9=this[_0xd587[1179]][_0xd587[502]]();_0x5c29x2= _0x5c29x2|| _0x5c29x9[_0xd587[501]]();_0x5c29x3= null!= _0x5c29x3?_0x5c29x3:!0;_0x5c29x4= null!= _0x5c29x4?_0x5c29x4:!0;_0x5c29x5= null!= _0x5c29x5?_0x5c29x5:!1;var _0x5c29xa=this[_0xd587[248]](_0x5c29x2);null!= _0x5c29xa&& (_0x5c29xa[_0xd587[2080]]= !0,_0x5c29x5&& (_0x5c29xa[_0xd587[2082]]= !0));if(_0x5c29x3){for(var _0x5c29x12=_0x5c29x9[_0xd587[262]](_0x5c29x2),_0x5c29xa=0;_0x5c29xa< _0x5c29x12;_0x5c29xa++){var _0x5c29x13=_0x5c29x9[_0xd587[263]](_0x5c29x2,_0x5c29xa);this[_0xd587[2263]](_0x5c29x13,_0x5c29x3,_0x5c29x4,_0x5c29x5)}};if(_0x5c29x4){_0x5c29x5= _0x5c29x9[_0xd587[1707]](_0x5c29x2);for(_0x5c29xa= 0;_0x5c29xa< _0x5c29x5;_0x5c29xa++){this[_0xd587[2263]](_0x5c29x9[_0xd587[1708]](_0x5c29x2,_0x5c29xa),_0x5c29x3,_0x5c29x4)}}};mxGraphView[_0xd587[202]][_0xd587[2264]]= function(_0x5c29x2){var _0x5c29x3=mxLog[_0xd587[2109]](_0xd587[2266]);window[_0xd587[879]]= mxResources[_0xd587[203]](this[_0xd587[2249]])|| this[_0xd587[2249]];var _0x5c29x4=null;if(this[_0xd587[2253]]&& null!= this[_0xd587[510]]&& null== this[_0xd587[1653]]&& (8== document[_0xd587[5]]|| mxClient[_0xd587[496]])){_0x5c29x4= this[_0xd587[510]][_0xd587[124]][_0xd587[495]];this[_0xd587[510]][_0xd587[124]][_0xd587[495]]= _0xd587[130];var _0x5c29x5=document[_0xd587[55]](_0xd587[485]);_0x5c29x5[_0xd587[124]][_0xd587[491]]= _0xd587[492];_0x5c29x5[_0xd587[124]][_0xd587[493]]= _0xd587[494];_0x5c29x5[_0xd587[124]][_0xd587[187]]= _0xd587[188];_0x5c29x5[_0xd587[124]][_0xd587[495]]= mxClient[_0xd587[496]]?_0xd587[497]:_0xd587[498];_0x5c29x5[_0xd587[124]][_0xd587[499]]= _0xd587[500];document[_0xd587[112]][_0xd587[62]](_0x5c29x5);this[_0xd587[1653]]= _0x5c29x5};_0x5c29x2= _0x5c29x2|| (null!= this[_0xd587[1741]]?this[_0xd587[1741]]:this[_0xd587[1179]][_0xd587[502]]()[_0xd587[501]]());this[_0xd587[2267]](null,_0x5c29x2);_0x5c29x2= this[_0xd587[2268]](null,_0x5c29x2);null== _0x5c29x2&& (_0x5c29x2= new mxRectangle);this[_0xd587[2256]](_0x5c29x2);this[_0xd587[2269]]();null!= _0x5c29x4&& (this[_0xd587[510]][_0xd587[124]][_0xd587[495]]= _0x5c29x4,document[_0xd587[112]][_0xd587[266]](this[_0xd587[1653]]),this[_0xd587[1653]]= null);window[_0xd587[879]]= mxResources[_0xd587[203]](this[_0xd587[2091]])|| this[_0xd587[2091]];mxLog[_0xd587[2110]](_0xd587[2266],_0x5c29x3)};mxGraphView[_0xd587[202]][_0xd587[2270]]= function(_0x5c29x2){return new mxRectangleShape(_0x5c29x2,_0xd587[1391],_0xd587[586])};mxGraphView[_0xd587[202]][_0xd587[2269]]= function(){var _0x5c29x2=this[_0xd587[1179]][_0xd587[2271]]();if(null!= _0x5c29x2){if(null== this[_0xd587[1617]]|| this[_0xd587[1617]][_0xd587[618]]!= _0x5c29x2[_0xd587[390]]){null!= this[_0xd587[1617]]&& this[_0xd587[1617]][_0xd587[515]]();var _0x5c29x3= new mxRectangle(0,0,1,1);this[_0xd587[1617]]= new mxImageShape(_0x5c29x3,_0x5c29x2[_0xd587[390]]);this[_0xd587[1617]][_0xd587[507]]= this[_0xd587[1179]][_0xd587[507]];this[_0xd587[1617]][_0xd587[176]](this[_0xd587[2053]]);this[_0xd587[1617]][_0xd587[258]]()};this[_0xd587[2272]](this[_0xd587[1617]],_0x5c29x2)}else {null!= this[_0xd587[1617]]&& (this[_0xd587[1617]][_0xd587[515]](),this[_0xd587[1617]]= null)};this[_0xd587[1179]][_0xd587[2273]]?(_0x5c29x3= this[_0xd587[2274]](),null== this[_0xd587[2275]]?(this[_0xd587[2275]]= this[_0xd587[2270]](_0x5c29x3),this[_0xd587[2275]][_0xd587[255]]= this[_0xd587[255]],this[_0xd587[2275]][_0xd587[1596]]= !0,this[_0xd587[2275]][_0xd587[507]]= this[_0xd587[1179]][_0xd587[507]],this[_0xd587[2275]][_0xd587[176]](this[_0xd587[2053]]),this[_0xd587[2275]][_0xd587[258]](),mxEvent[_0xd587[169]](this[_0xd587[2275]][_0xd587[252]],_0xd587[760],mxUtils[_0xd587[885]](this,function(_0x5c29x2){this[_0xd587[1179]][_0xd587[761]](_0x5c29x2)})),mxEvent[_0xd587[759]](this[_0xd587[2275]][_0xd587[252]],mxUtils[_0xd587[885]](this,function(_0x5c29x2){this[_0xd587[1179]][_0xd587[758]](mxEvent.MOUSE_DOWN, new mxMouseEvent(_0x5c29x2))}),mxUtils[_0xd587[885]](this,function(_0x5c29x2){null!= this[_0xd587[1179]][_0xd587[2276]]&& this[_0xd587[1179]][_0xd587[2276]][_0xd587[2277]]()&& this[_0xd587[1179]][_0xd587[2276]][_0xd587[801]]();this[_0xd587[1179]][_0xd587[1009]]&& !mxEvent[_0xd587[721]](_0x5c29x2)&& this[_0xd587[1179]][_0xd587[758]](mxEvent.MOUSE_MOVE, new mxMouseEvent(_0x5c29x2))}),mxUtils[_0xd587[885]](this,function(_0x5c29x2){this[_0xd587[1179]][_0xd587[758]](mxEvent.MOUSE_UP, new mxMouseEvent(_0x5c29x2))}))):(this[_0xd587[2275]][_0xd587[255]]= this[_0xd587[255]],this[_0xd587[2275]][_0xd587[1562]]= _0x5c29x3,this[_0xd587[2275]][_0xd587[258]]())):null!= this[_0xd587[2275]]&& (this[_0xd587[2275]][_0xd587[515]](),this[_0xd587[2275]]= null)};mxGraphView[_0xd587[202]][_0xd587[2274]]= function(){var _0x5c29x2=this[_0xd587[1179]][_0xd587[2013]],_0x5c29x3=this[_0xd587[255]]* this[_0xd587[1179]][_0xd587[2012]];return new mxRectangle(this[_0xd587[255]]* this[_0xd587[513]][_0xd587[235]],this[_0xd587[255]]* this[_0xd587[513]][_0xd587[236]],_0x5c29x2[_0xd587[117]]* _0x5c29x3,_0x5c29x2[_0xd587[119]]* _0x5c29x3)};mxGraphView[_0xd587[202]][_0xd587[2272]]= function(_0x5c29x2,_0x5c29x3){_0x5c29x2[_0xd587[255]]= this[_0xd587[255]];_0x5c29x2[_0xd587[1562]][_0xd587[235]]= this[_0xd587[255]]* this[_0xd587[513]][_0xd587[235]];_0x5c29x2[_0xd587[1562]][_0xd587[236]]= this[_0xd587[255]]* this[_0xd587[513]][_0xd587[236]];_0x5c29x2[_0xd587[1562]][_0xd587[117]]= this[_0xd587[255]]* _0x5c29x3[_0xd587[117]];_0x5c29x2[_0xd587[1562]][_0xd587[119]]= this[_0xd587[255]]* _0x5c29x3[_0xd587[119]];_0x5c29x2[_0xd587[258]]()};mxGraphView[_0xd587[202]][_0xd587[2267]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=this[_0xd587[1179]][_0xd587[502]](),_0x5c29x5=this[_0xd587[248]](_0x5c29x3,!0);if(null!= _0x5c29x5&& _0x5c29x5[_0xd587[2080]]){if(this[_0xd587[1179]][_0xd587[1714]](_0x5c29x3)){if(_0x5c29x3!= this[_0xd587[1741]]&& null!= _0x5c29x2){_0x5c29x5[_0xd587[2079]][_0xd587[235]]= 0;_0x5c29x5[_0xd587[2079]][_0xd587[236]]= 0;_0x5c29x5[_0xd587[2078]][_0xd587[235]]= _0x5c29x2[_0xd587[2078]][_0xd587[235]];_0x5c29x5[_0xd587[2078]][_0xd587[236]]= _0x5c29x2[_0xd587[2078]][_0xd587[236]];var _0x5c29x9=this[_0xd587[1179]][_0xd587[1198]](_0x5c29x3);if(null!= _0x5c29x9){if(!_0x5c29x4[_0xd587[250]](_0x5c29x3)){var _0x5c29xa=_0x5c29x9[_0xd587[1368]]|| this[_0xd587[2248]];_0x5c29x9[_0xd587[1500]]?(_0x5c29x5[_0xd587[2078]][_0xd587[235]]+= _0x5c29x9[_0xd587[235]]* _0x5c29x2[_0xd587[117]]/ this[_0xd587[255]]+ _0x5c29xa[_0xd587[235]],_0x5c29x5[_0xd587[2078]][_0xd587[236]]+= _0x5c29x9[_0xd587[236]]* _0x5c29x2[_0xd587[119]]/ this[_0xd587[255]]+ _0x5c29xa[_0xd587[236]]):(_0x5c29x5[_0xd587[2079]][_0xd587[235]]= this[_0xd587[255]]* _0x5c29xa[_0xd587[235]],_0x5c29x5[_0xd587[2079]][_0xd587[236]]= this[_0xd587[255]]* _0x5c29xa[_0xd587[236]],_0x5c29x5[_0xd587[2078]][_0xd587[235]]+= _0x5c29x9[_0xd587[235]],_0x5c29x5[_0xd587[2078]][_0xd587[236]]+= _0x5c29x9[_0xd587[236]])};_0x5c29x5[_0xd587[235]]= this[_0xd587[255]]* (this[_0xd587[513]][_0xd587[235]]+ _0x5c29x5[_0xd587[2078]][_0xd587[235]]);_0x5c29x5[_0xd587[236]]= this[_0xd587[255]]* (this[_0xd587[513]][_0xd587[236]]+ _0x5c29x5[_0xd587[2078]][_0xd587[236]]);_0x5c29x5[_0xd587[117]]= this[_0xd587[255]]* _0x5c29x9[_0xd587[117]];_0x5c29x5[_0xd587[119]]= this[_0xd587[255]]* _0x5c29x9[_0xd587[119]];if(_0x5c29x4[_0xd587[1193]](_0x5c29x3)){if(_0x5c29x9[_0xd587[1500]]&& (_0x5c29xa= mxUtils[_0xd587[431]](_0x5c29x2[_0xd587[124]][mxConstants[_0xd587[2278]]]|| _0xd587[468]),0!= _0x5c29xa)){var _0x5c29x9=Math[_0xd587[426]](_0x5c29xa),_0x5c29xa=Math[_0xd587[427]](_0x5c29xa),_0x5c29x12= new mxPoint(_0x5c29x5[_0xd587[241]](),_0x5c29x5[_0xd587[242]]()),_0x5c29x13= new mxPoint(_0x5c29x2[_0xd587[241]](),_0x5c29x2[_0xd587[242]]()),_0x5c29x9=mxUtils[_0xd587[432]](_0x5c29x12,_0x5c29x9,_0x5c29xa,_0x5c29x13);_0x5c29x5[_0xd587[235]]= _0x5c29x9[_0xd587[235]]- _0x5c29x5[_0xd587[117]]/ 2;_0x5c29x5[_0xd587[236]]= _0x5c29x9[_0xd587[236]]- _0x5c29x5[_0xd587[119]]/ 2};this[_0xd587[2279]](_0x5c29x5)}}}}else {this[_0xd587[2265]](_0x5c29x3)};_0x5c29xa= this[_0xd587[1179]][_0xd587[2280]](_0x5c29x3);null!= _0x5c29xa&& (_0x5c29x5[_0xd587[2078]][_0xd587[235]]+= _0x5c29xa[_0xd587[235]],_0x5c29x5[_0xd587[2078]][_0xd587[236]]+= _0x5c29xa[_0xd587[236]])};if(null!= _0x5c29x5&& (!this[_0xd587[1179]][_0xd587[1742]](_0x5c29x3)|| _0x5c29x3== this[_0xd587[1741]])){_0x5c29x9= _0x5c29x4[_0xd587[262]](_0x5c29x3);for(_0x5c29xa= 0;_0x5c29xa< _0x5c29x9;_0x5c29xa++){_0x5c29x12= _0x5c29x4[_0xd587[263]](_0x5c29x3,_0x5c29xa),this[_0xd587[2267]](_0x5c29x5,_0x5c29x12)}}};mxGraphView[_0xd587[202]][_0xd587[2279]]= function(_0x5c29x2){var _0x5c29x3=mxUtils[_0xd587[433]](_0x5c29x2[_0xd587[124]],mxConstants.STYLE_LABEL_POSITION,mxConstants.ALIGN_CENTER);_0x5c29x3== mxConstants[_0xd587[2132]]?_0x5c29x2[_0xd587[2079]][_0xd587[235]]-= _0x5c29x2[_0xd587[117]]:_0x5c29x3== mxConstants[_0xd587[480]]&& (_0x5c29x2[_0xd587[2079]][_0xd587[235]]+= _0x5c29x2[_0xd587[117]]);_0x5c29x3= mxUtils[_0xd587[433]](_0x5c29x2[_0xd587[124]],mxConstants.STYLE_VERTICAL_LABEL_POSITION,mxConstants.ALIGN_MIDDLE);_0x5c29x3== mxConstants[_0xd587[1687]]?_0x5c29x2[_0xd587[2079]][_0xd587[236]]-= _0x5c29x2[_0xd587[119]]:_0x5c29x3== mxConstants[_0xd587[482]]&& (_0x5c29x2[_0xd587[2079]][_0xd587[236]]+= _0x5c29x2[_0xd587[119]])};mxGraphView[_0xd587[202]][_0xd587[2268]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=this[_0xd587[1179]][_0xd587[502]](),_0x5c29x5=this[_0xd587[248]](_0x5c29x3),_0x5c29x9=null;if(null!= _0x5c29x5){if(_0x5c29x5[_0xd587[2080]]){var _0x5c29xa=this[_0xd587[1179]][_0xd587[1198]](_0x5c29x3);if(null!= _0x5c29xa&& _0x5c29x4[_0xd587[250]](_0x5c29x3)){var _0x5c29x12=this[_0xd587[248]](this[_0xd587[1710]](_0x5c29x3,!0));_0x5c29x5[_0xd587[2090]](_0x5c29x12,!0);if(null!= _0x5c29x12&& _0x5c29x4[_0xd587[250]](_0x5c29x12[_0xd587[246]])&& !_0x5c29x4[_0xd587[1720]](_0x5c29x12[_0xd587[246]],_0x5c29x3)){var _0x5c29x13=this[_0xd587[248]](_0x5c29x4[_0xd587[1197]](_0x5c29x12[_0xd587[246]]));this[_0xd587[2268]](_0x5c29x13,_0x5c29x12[_0xd587[246]])};var _0x5c29x14=this[_0xd587[248]](this[_0xd587[1710]](_0x5c29x3,!1));_0x5c29x5[_0xd587[2090]](_0x5c29x14,!1);null!= _0x5c29x14&& (_0x5c29x4[_0xd587[250]](_0x5c29x14[_0xd587[246]])&& !_0x5c29x4[_0xd587[1720]](_0x5c29x14[_0xd587[246]],_0x5c29x3))&& (_0x5c29x13= this[_0xd587[248]](_0x5c29x4[_0xd587[1197]](_0x5c29x14[_0xd587[246]])),this[_0xd587[2268]](_0x5c29x13,_0x5c29x14[_0xd587[246]]));this[_0xd587[2281]](_0x5c29x5,_0x5c29x12,_0x5c29x14);this[_0xd587[2282]](_0x5c29x5,_0x5c29xa[_0xd587[1525]],_0x5c29x12,_0x5c29x14);this[_0xd587[2283]](_0x5c29x5,_0x5c29x12,_0x5c29x14);this[_0xd587[2284]](_0x5c29x5);this[_0xd587[2285]](_0x5c29x5)}else {null!= _0x5c29xa&& (_0x5c29xa[_0xd587[1500]]&& null!= _0x5c29x2&& _0x5c29x4[_0xd587[250]](_0x5c29x2[_0xd587[246]]))&& (_0x5c29xa= this[_0xd587[245]](_0x5c29x2,_0x5c29xa),null!= _0x5c29xa&& (_0x5c29x5[_0xd587[235]]= _0x5c29xa[_0xd587[235]],_0x5c29x5[_0xd587[236]]= _0x5c29xa[_0xd587[236]],_0x5c29xa[_0xd587[235]]= _0x5c29xa[_0xd587[235]]/ this[_0xd587[255]]- this[_0xd587[513]][_0xd587[235]],_0x5c29xa[_0xd587[236]]= _0x5c29xa[_0xd587[236]]/ this[_0xd587[255]]- this[_0xd587[513]][_0xd587[236]],_0x5c29x5[_0xd587[2078]]= _0x5c29xa,this[_0xd587[2286]](_0x5c29x2,_0x5c29x5)))};_0x5c29x5[_0xd587[2080]]= !1;_0x5c29x3!= this[_0xd587[1741]]&& this[_0xd587[1179]][_0xd587[259]][_0xd587[258]](_0x5c29x5,!1,this[_0xd587[2287]]())};if(_0x5c29x4[_0xd587[250]](_0x5c29x3)|| _0x5c29x4[_0xd587[1193]](_0x5c29x3)){null!= _0x5c29x5[_0xd587[253]]&& null!= _0x5c29x5[_0xd587[253]][_0xd587[1563]]&& (_0x5c29x9= _0x5c29x5[_0xd587[253]][_0xd587[1563]][_0xd587[238]]()),null!= _0x5c29x5[_0xd587[963]]&& !this[_0xd587[1179]][_0xd587[2130]](_0x5c29x5[_0xd587[246]])&& null!= _0x5c29x5[_0xd587[963]][_0xd587[1563]]&& (null!= _0x5c29x9?_0x5c29x9[_0xd587[99]](_0x5c29x5[_0xd587[963]][_0xd587[1563]]):_0x5c29x9= _0x5c29x5[_0xd587[963]][_0xd587[1563]][_0xd587[238]]())}};if(null!= _0x5c29x5&& (!this[_0xd587[1179]][_0xd587[1742]](_0x5c29x3)|| _0x5c29x3== this[_0xd587[1741]])){_0x5c29xa= _0x5c29x4[_0xd587[262]](_0x5c29x3);for(_0x5c29x12= 0;_0x5c29x12< _0x5c29xa;_0x5c29x12++){_0x5c29x13= _0x5c29x4[_0xd587[263]](_0x5c29x3,_0x5c29x12),_0x5c29x13= this[_0xd587[2268]](_0x5c29x5,_0x5c29x13),null!= _0x5c29x13&& (null== _0x5c29x9?_0x5c29x9= _0x5c29x13:_0x5c29x9[_0xd587[99]](_0x5c29x13))}};return _0x5c29x9};mxGraphView[_0xd587[202]][_0xd587[2286]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=_0x5c29x3[_0xd587[246]];if(!this[_0xd587[1179]][_0xd587[1742]](_0x5c29x4)|| _0x5c29x4== this[_0xd587[1741]]){for(var _0x5c29x5=this[_0xd587[1179]][_0xd587[502]](),_0x5c29x9=_0x5c29x5[_0xd587[262]](_0x5c29x4),_0x5c29xa=0;_0x5c29xa< _0x5c29x9;_0x5c29xa++){this[_0xd587[2267]](_0x5c29x3,_0x5c29x5[_0xd587[263]](_0x5c29x4,_0x5c29xa))}}};mxGraphView[_0xd587[202]][_0xd587[2281]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){this[_0xd587[2289]](_0x5c29x2,_0x5c29x3,!0,this[_0xd587[1179]][_0xd587[2288]](_0x5c29x2,_0x5c29x3,!0));this[_0xd587[2289]](_0x5c29x2,_0x5c29x4,!1,this[_0xd587[1179]][_0xd587[2288]](_0x5c29x2,_0x5c29x4,!1))};mxGraphView[_0xd587[202]][_0xd587[2289]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){var _0x5c29x9=null;null!= _0x5c29x5&& (_0x5c29x9= this[_0xd587[1179]][_0xd587[2290]](_0x5c29x3,_0x5c29x5));if(null== _0x5c29x9&& null== _0x5c29x3){_0x5c29x3= this[_0xd587[255]];_0x5c29x5= this[_0xd587[513]];var _0x5c29xa=_0x5c29x2[_0xd587[2078]],_0x5c29x9=this[_0xd587[1179]][_0xd587[1198]](_0x5c29x2[_0xd587[246]])[_0xd587[2006]](_0x5c29x4);null!= _0x5c29x9&& (_0x5c29x9= new mxPoint(_0x5c29x3* (_0x5c29x5[_0xd587[235]]+ _0x5c29x9[_0xd587[235]]+ _0x5c29xa[_0xd587[235]]),_0x5c29x3* (_0x5c29x5[_0xd587[236]]+ _0x5c29x9[_0xd587[236]]+ _0x5c29xa[_0xd587[236]])))};_0x5c29x2[_0xd587[2088]](_0x5c29x9,_0x5c29x4)};mxGraphView[_0xd587[202]][_0xd587[2282]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){if(null!= _0x5c29x2){var _0x5c29x9=[];_0x5c29x9[_0xd587[207]](_0x5c29x2[_0xd587[439]][0]);var _0x5c29xa=this[_0xd587[2291]](_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5);if(null!= _0x5c29xa){_0x5c29x4= this[_0xd587[2292]](_0x5c29x2,_0x5c29x4,!0),_0x5c29x5= this[_0xd587[2292]](_0x5c29x2,_0x5c29x5,!1),_0x5c29xa(_0x5c29x2,_0x5c29x4,_0x5c29x5,_0x5c29x3,_0x5c29x9)}else {if(null!= _0x5c29x3){for(_0x5c29xa= 0;_0x5c29xa< _0x5c29x3[_0xd587[67]];_0x5c29xa++){null!= _0x5c29x3[_0x5c29xa]&& (_0x5c29x5= mxUtils[_0xd587[238]](_0x5c29x3[_0x5c29xa]),_0x5c29x9[_0xd587[207]](this[_0xd587[2229]](_0x5c29x2,_0x5c29x5)))}}};_0x5c29x3= _0x5c29x2[_0xd587[439]];_0x5c29x9[_0xd587[207]](_0x5c29x3[_0x5c29x3[_0xd587[67]]- 1]);_0x5c29x2[_0xd587[439]]= _0x5c29x9}};mxGraphView[_0xd587[202]][_0xd587[2229]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=_0x5c29x2[_0xd587[2078]];return new mxPoint(this[_0xd587[255]]* (_0x5c29x3[_0xd587[235]]+ this[_0xd587[513]][_0xd587[235]]+ _0x5c29x4[_0xd587[235]]),this[_0xd587[255]]* (_0x5c29x3[_0xd587[236]]+ this[_0xd587[513]][_0xd587[236]]+ _0x5c29x4[_0xd587[236]]))};mxGraphView[_0xd587[202]][_0xd587[2291]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){_0x5c29x2= null!= _0x5c29x4&& _0x5c29x4== _0x5c29x5?mxUtils[_0xd587[433]](_0x5c29x2[_0xd587[124]],mxConstants.STYLE_LOOP,this[_0xd587[1179]][_0xd587[2293]]):!mxUtils[_0xd587[433]](_0x5c29x2[_0xd587[124]],mxConstants.STYLE_NOEDGESTYLE,!1)?_0x5c29x2[_0xd587[124]][mxConstants[_0xd587[2294]]]:null;_0xd587[1516]== typeof _0x5c29x2&& (_0x5c29x3= mxStyleRegistry[_0xd587[433]](_0x5c29x2),null== _0x5c29x3&& this[_0xd587[2295]]()&& (_0x5c29x3= mxUtils[_0xd587[1545]](_0x5c29x2)),_0x5c29x2= _0x5c29x3);return _0xd587[279]== typeof _0x5c29x2?_0x5c29x2:null};mxGraphView[_0xd587[202]][_0xd587[2283]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){var _0x5c29x5=_0x5c29x2[_0xd587[439]],_0x5c29x9=_0x5c29x5[0];null== _0x5c29x5[_0x5c29x5[_0xd587[67]]- 1]&& null!= _0x5c29x4&& this[_0xd587[2296]](_0x5c29x2,_0x5c29x4,_0x5c29x3,!1);null== _0x5c29x9&& null!= _0x5c29x3&& this[_0xd587[2296]](_0x5c29x2,_0x5c29x3,_0x5c29x4,!0)};mxGraphView[_0xd587[202]][_0xd587[2296]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){_0x5c29x3= this[_0xd587[2292]](_0x5c29x2,_0x5c29x3,_0x5c29x5);var _0x5c29x9=this[_0xd587[2297]](_0x5c29x2,_0x5c29x4,_0x5c29x5),_0x5c29xa=this[_0xd587[1179]][_0xd587[2298]](_0x5c29x2);_0x5c29x4= mxUtils[_0xd587[431]](Number(_0x5c29x3[_0xd587[124]][mxConstants[_0xd587[2278]]]|| _0xd587[468]));var _0x5c29x12= new mxPoint(_0x5c29x3[_0xd587[241]](),_0x5c29x3[_0xd587[242]]());if(0!= _0x5c29x4){var _0x5c29x13=Math[_0xd587[426]](-_0x5c29x4),_0x5c29x14=Math[_0xd587[427]](-_0x5c29x4),_0x5c29x9=mxUtils[_0xd587[432]](_0x5c29x9,_0x5c29x13,_0x5c29x14,_0x5c29x12)};_0x5c29x13= parseFloat(_0x5c29x2[_0xd587[124]][mxConstants[_0xd587[2299]]]|| 0);_0x5c29x13+= parseFloat(_0x5c29x2[_0xd587[124]][_0x5c29x5?mxConstants[_0xd587[2300]]:mxConstants[_0xd587[2301]]]|| 0);_0x5c29x3= this[_0xd587[2302]](_0x5c29x3,_0x5c29x9,0== _0x5c29x4&& _0x5c29xa,_0x5c29x13);0!= _0x5c29x4&& (_0x5c29x13= Math[_0xd587[426]](_0x5c29x4),_0x5c29x14= Math[_0xd587[427]](_0x5c29x4),_0x5c29x3= mxUtils[_0xd587[432]](_0x5c29x3,_0x5c29x13,_0x5c29x14,_0x5c29x12));_0x5c29x2[_0xd587[2088]](_0x5c29x3,_0x5c29x5)};mxGraphView[_0xd587[202]][_0xd587[2292]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){_0x5c29x2= mxUtils[_0xd587[433]](_0x5c29x2[_0xd587[124]],_0x5c29x4?mxConstants[_0xd587[2303]]:mxConstants[_0xd587[2304]]);null!= _0x5c29x2&& (_0x5c29x2= this[_0xd587[248]](this[_0xd587[1179]][_0xd587[502]]()[_0xd587[736]](_0x5c29x2)),null!= _0x5c29x2&& (_0x5c29x3= _0x5c29x2));return _0x5c29x3};mxGraphView[_0xd587[202]][_0xd587[2302]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){var _0x5c29x9=null;if(null!= _0x5c29x2){var _0x5c29xa=this[_0xd587[2305]](_0x5c29x2);if(null!= _0x5c29xa&& null!= _0x5c29x3&& (_0x5c29x5= this[_0xd587[2087]](_0x5c29x2,_0x5c29x5),0< _0x5c29x5[_0xd587[117]]|| 0< _0x5c29x5[_0xd587[119]])){_0x5c29x9= _0x5c29xa(_0x5c29x5,_0x5c29x2,_0x5c29x3,_0x5c29x4)};null== _0x5c29x9&& (_0x5c29x9= this[_0xd587[245]](_0x5c29x2))};return _0x5c29x9};mxGraphView[_0xd587[202]][_0xd587[2230]]= function(_0x5c29x2){var _0x5c29x3=null!= _0x5c29x2[_0xd587[124]]?parseFloat(_0x5c29x2[_0xd587[124]][mxConstants[_0xd587[2306]]])|| 0:0;return _0x5c29x2[_0xd587[241]]()+ _0x5c29x3* _0x5c29x2[_0xd587[117]]};mxGraphView[_0xd587[202]][_0xd587[2228]]= function(_0x5c29x2){var _0x5c29x3=null!= _0x5c29x2[_0xd587[124]]?parseFloat(_0x5c29x2[_0xd587[124]][mxConstants[_0xd587[2307]]])|| 0:0;return _0x5c29x2[_0xd587[242]]()+ _0x5c29x3* _0x5c29x2[_0xd587[119]]};mxGraphView[_0xd587[202]][_0xd587[2087]]= function(_0x5c29x2,_0x5c29x3){_0x5c29x3= null!= _0x5c29x3?_0x5c29x3:0;null!= _0x5c29x2&& (_0x5c29x3+= parseFloat(_0x5c29x2[_0xd587[124]][mxConstants[_0xd587[2299]]]|| 0));return _0x5c29x2[_0xd587[2087]](_0x5c29x3* this[_0xd587[255]])};mxGraphView[_0xd587[202]][_0xd587[2305]]= function(_0x5c29x2){_0x5c29x2= _0x5c29x2[_0xd587[124]][mxConstants[_0xd587[2061]]];if(_0xd587[1516]== typeof _0x5c29x2){var _0x5c29x3=mxStyleRegistry[_0xd587[433]](_0x5c29x2);null== _0x5c29x3&& this[_0xd587[2295]]()&& (_0x5c29x3= mxUtils[_0xd587[1545]](_0x5c29x2));_0x5c29x2= _0x5c29x3};return _0xd587[279]== typeof _0x5c29x2?_0x5c29x2:null};mxGraphView[_0xd587[202]][_0xd587[2297]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){_0x5c29x2= _0x5c29x2[_0xd587[439]];var _0x5c29x5=null;if(null!= _0x5c29x2&& (_0x5c29x4|| 2< _0x5c29x2[_0xd587[67]]|| null== _0x5c29x3)){_0x5c29x5= _0x5c29x2[_0xd587[67]],_0x5c29x5= _0x5c29x2[_0x5c29x4?Math[_0xd587[243]](1,_0x5c29x5- 1):Math[_0xd587[160]](0,_0x5c29x5- 2)]};null== _0x5c29x5&& null!= _0x5c29x3&& (_0x5c29x5= new mxPoint(_0x5c29x3[_0xd587[241]](),_0x5c29x3[_0xd587[242]]()));return _0x5c29x5};mxGraphView[_0xd587[202]][_0xd587[1710]]= function(_0x5c29x2,_0x5c29x3){for(var _0x5c29x4=this[_0xd587[1179]][_0xd587[502]](),_0x5c29x5=_0x5c29x4[_0xd587[1709]](_0x5c29x2,_0x5c29x3),_0x5c29x9=_0x5c29x5;null!= _0x5c29x5&& _0x5c29x5!= this[_0xd587[1741]];){if(!this[_0xd587[1179]][_0xd587[1714]](_0x5c29x9)|| this[_0xd587[1179]][_0xd587[1742]](_0x5c29x5)){_0x5c29x9= _0x5c29x5};_0x5c29x5= _0x5c29x4[_0xd587[1197]](_0x5c29x5)};_0x5c29x4[_0xd587[1197]](_0x5c29x9)== _0x5c29x4[_0xd587[501]]()&& (_0x5c29x9= null);return _0x5c29x9};mxGraphView[_0xd587[202]][_0xd587[2284]]= function(_0x5c29x2){var _0x5c29x3=_0x5c29x2[_0xd587[439]];_0x5c29x2[_0xd587[67]]= 0;if(null!= _0x5c29x3&& 0< _0x5c29x3[_0xd587[67]]){var _0x5c29x4=_0x5c29x3[0],_0x5c29x5=_0x5c29x3[_0x5c29x3[_0xd587[67]]- 1];if(null== _0x5c29x4|| null== _0x5c29x5){_0x5c29x2[_0xd587[246]]!= this[_0xd587[1741]]&& this[_0xd587[200]](_0x5c29x2[_0xd587[246]],!0)}else {if(_0x5c29x4[_0xd587[235]]!= _0x5c29x5[_0xd587[235]]|| _0x5c29x4[_0xd587[236]]!= _0x5c29x5[_0xd587[236]]){var _0x5c29x9=_0x5c29x5[_0xd587[235]]- _0x5c29x4[_0xd587[235]],_0x5c29xa=_0x5c29x5[_0xd587[236]]- _0x5c29x4[_0xd587[236]];_0x5c29x2[_0xd587[2085]]= Math[_0xd587[428]](_0x5c29x9* _0x5c29x9+ _0x5c29xa* _0x5c29xa)}else {_0x5c29x2[_0xd587[2085]]= 0};var _0x5c29x5=0,_0x5c29x12=[],_0x5c29xa=_0x5c29x4;if(null!= _0x5c29xa){for(var _0x5c29x4=_0x5c29xa[_0xd587[235]],_0x5c29x13=_0x5c29xa[_0xd587[236]],_0x5c29x14=_0x5c29x4,_0x5c29x15=_0x5c29x13,_0x5c29x16=1;_0x5c29x16< _0x5c29x3[_0xd587[67]];_0x5c29x16++){var _0x5c29x17=_0x5c29x3[_0x5c29x16];null!= _0x5c29x17&& (_0x5c29x9= _0x5c29xa[_0xd587[235]]- _0x5c29x17[_0xd587[235]],_0x5c29xa= _0x5c29xa[_0xd587[236]]- _0x5c29x17[_0xd587[236]],_0x5c29x9= Math[_0xd587[428]](_0x5c29x9* _0x5c29x9+ _0x5c29xa* _0x5c29xa),_0x5c29x12[_0xd587[207]](_0x5c29x9),_0x5c29x5+= _0x5c29x9,_0x5c29xa= _0x5c29x17,_0x5c29x4= Math[_0xd587[243]](_0x5c29xa[_0xd587[235]],_0x5c29x4),_0x5c29x13= Math[_0xd587[243]](_0x5c29xa[_0xd587[236]],_0x5c29x13),_0x5c29x14= Math[_0xd587[160]](_0x5c29xa[_0xd587[235]],_0x5c29x14),_0x5c29x15= Math[_0xd587[160]](_0x5c29xa[_0xd587[236]],_0x5c29x15))};_0x5c29x2[_0xd587[67]]= _0x5c29x5;_0x5c29x2[_0xd587[2086]]= _0x5c29x12;_0x5c29x2[_0xd587[235]]= _0x5c29x4;_0x5c29x2[_0xd587[236]]= _0x5c29x13;_0x5c29x2[_0xd587[117]]= Math[_0xd587[160]](1,_0x5c29x14- _0x5c29x4);_0x5c29x2[_0xd587[119]]= Math[_0xd587[160]](1,_0x5c29x15- _0x5c29x13)}}}};mxGraphView[_0xd587[202]][_0xd587[245]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=_0x5c29x2[_0xd587[241]](),_0x5c29x5=_0x5c29x2[_0xd587[242]]();if(null!= _0x5c29x2[_0xd587[2086]]&& (null== _0x5c29x3|| _0x5c29x3[_0xd587[1500]])){for(var _0x5c29x9=_0x5c29x2[_0xd587[439]][_0xd587[67]],_0x5c29xa=((null!= _0x5c29x3?_0x5c29x3[_0xd587[235]]/ 2:0)+ 0.5)* _0x5c29x2[_0xd587[67]],_0x5c29x12=_0x5c29x2[_0xd587[2086]][0],_0x5c29x13=0,_0x5c29x14=1;_0x5c29xa> _0x5c29x13+ _0x5c29x12&& _0x5c29x14< _0x5c29x9- 1;){_0x5c29x13+= _0x5c29x12,_0x5c29x12= _0x5c29x2[_0xd587[2086]][_0x5c29x14++]};_0x5c29x9= 0== _0x5c29x12?0:(_0x5c29xa- _0x5c29x13)/ _0x5c29x12;_0x5c29xa= _0x5c29x2[_0xd587[439]][_0x5c29x14- 1];_0x5c29x14= _0x5c29x2[_0xd587[439]][_0x5c29x14];if(null!= _0x5c29xa&& null!= _0x5c29x14){_0x5c29x13= _0x5c29x4= _0x5c29x5= 0;if(null!= _0x5c29x3){var _0x5c29x5=_0x5c29x3[_0xd587[236]],_0x5c29x15=_0x5c29x3[_0xd587[1368]];null!= _0x5c29x15&& (_0x5c29x4= _0x5c29x15[_0xd587[235]],_0x5c29x13= _0x5c29x15[_0xd587[236]])};_0x5c29x15= _0x5c29x14[_0xd587[235]]- _0x5c29xa[_0xd587[235]];_0x5c29x14= _0x5c29x14[_0xd587[236]]- _0x5c29xa[_0xd587[236]];_0x5c29x4= _0x5c29xa[_0xd587[235]]+ _0x5c29x15* _0x5c29x9+ ((0== _0x5c29x12?0:_0x5c29x14/ _0x5c29x12)* _0x5c29x5+ _0x5c29x4)* this[_0xd587[255]];_0x5c29x5= _0x5c29xa[_0xd587[236]]+ _0x5c29x14* _0x5c29x9- ((0== _0x5c29x12?0:_0x5c29x15/ _0x5c29x12)* _0x5c29x5- _0x5c29x13)* this[_0xd587[255]]}}else {null!= _0x5c29x3&& (_0x5c29x15= _0x5c29x3[_0xd587[1368]],null!= _0x5c29x15&& (_0x5c29x4+= _0x5c29x15[_0xd587[235]],_0x5c29x5+= _0x5c29x15[_0xd587[236]]))};return new mxPoint(_0x5c29x4,_0x5c29x5)};mxGraphView[_0xd587[202]][_0xd587[2308]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){var _0x5c29x5=this[_0xd587[1179]][_0xd587[502]]()[_0xd587[1721]](_0x5c29x2[_0xd587[246]]);if(null!= _0x5c29x5){var _0x5c29x9=_0x5c29x2[_0xd587[439]][_0xd587[67]];if(_0x5c29x5[_0xd587[1500]]&& 1< _0x5c29x9){for(var _0x5c29x5=_0x5c29x2[_0xd587[67]],_0x5c29xa=_0x5c29x2[_0xd587[2086]],_0x5c29x12=_0x5c29x2[_0xd587[439]][0],_0x5c29x13=_0x5c29x2[_0xd587[439]][1],_0x5c29x14=mxUtils[_0xd587[440]](_0x5c29x12[_0xd587[235]],_0x5c29x12[_0xd587[236]],_0x5c29x13[_0xd587[235]],_0x5c29x13[_0xd587[236]],_0x5c29x3,_0x5c29x4),_0x5c29x15=0,_0x5c29x16=0,_0x5c29x17=0,_0x5c29x18=2;_0x5c29x18< _0x5c29x9;_0x5c29x18++){_0x5c29x16+= _0x5c29xa[_0x5c29x18- 2],_0x5c29x13= _0x5c29x2[_0xd587[439]][_0x5c29x18],_0x5c29x12= mxUtils[_0xd587[440]](_0x5c29x12[_0xd587[235]],_0x5c29x12[_0xd587[236]],_0x5c29x13[_0xd587[235]],_0x5c29x13[_0xd587[236]],_0x5c29x3,_0x5c29x4),_0x5c29x12<= _0x5c29x14&& (_0x5c29x14= _0x5c29x12,_0x5c29x15= _0x5c29x18- 1,_0x5c29x17= _0x5c29x16),_0x5c29x12= _0x5c29x13};_0x5c29x9= _0x5c29xa[_0x5c29x15];_0x5c29x12= _0x5c29x2[_0xd587[439]][_0x5c29x15];_0x5c29x13= _0x5c29x2[_0xd587[439]][_0x5c29x15+ 1];_0x5c29x14= _0x5c29x13[_0xd587[235]];_0x5c29xa= _0x5c29x13[_0xd587[236]];_0x5c29x2= _0x5c29x12[_0xd587[235]]- _0x5c29x14;_0x5c29x15= _0x5c29x12[_0xd587[236]]- _0x5c29xa;_0x5c29x14= _0x5c29x3- _0x5c29x14;_0x5c29xa= _0x5c29x4- _0x5c29xa;_0x5c29x14= _0x5c29x2- _0x5c29x14;_0x5c29xa= _0x5c29x15- _0x5c29xa;_0x5c29xa= _0x5c29x14* _0x5c29x2+ _0x5c29xa* _0x5c29x15;_0x5c29x2= Math[_0xd587[428]](0>= _0x5c29xa?0:_0x5c29xa* _0x5c29xa/ (_0x5c29x2* _0x5c29x2+ _0x5c29x15* _0x5c29x15));_0x5c29x2> _0x5c29x9&& (_0x5c29x2= _0x5c29x9);_0x5c29x9= Math[_0xd587[428]](mxUtils[_0xd587[440]](_0x5c29x12[_0xd587[235]],_0x5c29x12[_0xd587[236]],_0x5c29x13[_0xd587[235]],_0x5c29x13[_0xd587[236]],_0x5c29x3,_0x5c29x4));-1== mxUtils[_0xd587[2309]](_0x5c29x12[_0xd587[235]],_0x5c29x12[_0xd587[236]],_0x5c29x13[_0xd587[235]],_0x5c29x13[_0xd587[236]],_0x5c29x3,_0x5c29x4)&& (_0x5c29x9= -_0x5c29x9);return new mxPoint(-2* ((_0x5c29x5/ 2- _0x5c29x17- _0x5c29x2)/ _0x5c29x5),_0x5c29x9/ this[_0xd587[255]])}};return new mxPoint};mxGraphView[_0xd587[202]][_0xd587[2285]]= function(_0x5c29x2){var _0x5c29x3=_0x5c29x2[_0xd587[439]];_0x5c29x2[_0xd587[2079]][_0xd587[235]]= _0x5c29x2[_0xd587[241]]();_0x5c29x2[_0xd587[2079]][_0xd587[236]]= _0x5c29x2[_0xd587[242]]();if(null!= _0x5c29x3&& 0< _0x5c29x3[_0xd587[67]]&& null!= _0x5c29x2[_0xd587[2086]]){var _0x5c29x4=this[_0xd587[1179]][_0xd587[1198]](_0x5c29x2[_0xd587[246]]);if(_0x5c29x4[_0xd587[1500]]){var _0x5c29x5=this[_0xd587[245]](_0x5c29x2,_0x5c29x4);null!= _0x5c29x5&& (_0x5c29x2[_0xd587[2079]]= _0x5c29x5)}else {var _0x5c29x5=_0x5c29x3[0],_0x5c29x9=_0x5c29x3[_0x5c29x3[_0xd587[67]]- 1];if(null!= _0x5c29x5&& null!= _0x5c29x9){var _0x5c29x3=_0x5c29x9[_0xd587[235]]- _0x5c29x5[_0xd587[235]],_0x5c29xa=_0x5c29x9[_0xd587[236]]- _0x5c29x5[_0xd587[236]],_0x5c29x12=_0x5c29x9= 0,_0x5c29x4=_0x5c29x4[_0xd587[1368]];null!= _0x5c29x4&& (_0x5c29x9= _0x5c29x4[_0xd587[235]],_0x5c29x12= _0x5c29x4[_0xd587[236]]);_0x5c29x4= _0x5c29x5[_0xd587[236]]+ _0x5c29xa/ 2+ _0x5c29x12* this[_0xd587[255]];_0x5c29x2[_0xd587[2079]][_0xd587[235]]= _0x5c29x5[_0xd587[235]]+ _0x5c29x3/ 2+ _0x5c29x9* this[_0xd587[255]];_0x5c29x2[_0xd587[2079]][_0xd587[236]]= _0x5c29x4}}}};mxGraphView[_0xd587[202]][_0xd587[248]]= function(_0x5c29x2,_0x5c29x3){_0x5c29x3= _0x5c29x3|| !1;var _0x5c29x4=null;null!= _0x5c29x2&& (_0x5c29x4= this[_0xd587[1214]][_0xd587[203]](_0x5c29x2),this[_0xd587[1179]][_0xd587[1714]](_0x5c29x2)&& (null== _0x5c29x4&& _0x5c29x3&& this[_0xd587[1179]][_0xd587[1714]](_0x5c29x2)?(_0x5c29x4= this[_0xd587[1230]](_0x5c29x2),this[_0xd587[1214]][_0xd587[204]](_0x5c29x2,_0x5c29x4)):_0x5c29x3&& (null!= _0x5c29x4&& this[_0xd587[2255]])&& (_0x5c29x4[_0xd587[124]]= this[_0xd587[1179]][_0xd587[1705]](_0x5c29x2))));return _0x5c29x4};mxGraphView[_0xd587[202]][_0xd587[2287]]= function(){return this[_0xd587[2254]]};mxGraphView[_0xd587[202]][_0xd587[2310]]= function(_0x5c29x2){this[_0xd587[2254]]= _0x5c29x2};mxGraphView[_0xd587[202]][_0xd587[2295]]= function(){return this[_0xd587[2251]]};mxGraphView[_0xd587[202]][_0xd587[2311]]= function(_0x5c29x2){this[_0xd587[2251]]= _0x5c29x2};mxGraphView[_0xd587[202]][_0xd587[2312]]= function(){return this[_0xd587[1214]]};mxGraphView[_0xd587[202]][_0xd587[1517]]= function(_0x5c29x2){this[_0xd587[1214]]= _0x5c29x2};mxGraphView[_0xd587[202]][_0xd587[2313]]= function(_0x5c29x2){if(null== _0x5c29x2){return this[_0xd587[1214]]};for(var _0x5c29x3=[],_0x5c29x4=0;_0x5c29x4< _0x5c29x2[_0xd587[67]];_0x5c29x4++){var _0x5c29x5=this[_0xd587[248]](_0x5c29x2[_0x5c29x4]);null!= _0x5c29x5&& _0x5c29x3[_0xd587[207]](_0x5c29x5)};return _0x5c29x3};mxGraphView[_0xd587[202]][_0xd587[2265]]= function(_0x5c29x2){var _0x5c29x3=null;null!= _0x5c29x2&& (_0x5c29x3= this[_0xd587[1214]][_0xd587[205]](_0x5c29x2),null!= _0x5c29x3&& (this[_0xd587[1179]][_0xd587[259]][_0xd587[515]](_0x5c29x3),_0x5c29x3[_0xd587[515]]()));return _0x5c29x3};mxGraphView[_0xd587[202]][_0xd587[1230]]= function(_0x5c29x2){var _0x5c29x3=this[_0xd587[1179]][_0xd587[1705]](_0x5c29x2);_0x5c29x2= new mxCellState(this,_0x5c29x2,_0x5c29x3);this[_0xd587[1179]][_0xd587[259]][_0xd587[2155]](_0x5c29x2,this[_0xd587[2287]]());return _0x5c29x2};mxGraphView[_0xd587[202]][_0xd587[2051]]= function(){return this[_0xd587[510]]};mxGraphView[_0xd587[202]][_0xd587[2052]]= function(){return this[_0xd587[2053]]};mxGraphView[_0xd587[202]][_0xd587[2024]]= function(){return this[_0xd587[505]]};mxGraphView[_0xd587[202]][_0xd587[1524]]= function(){return this[_0xd587[506]]};mxGraphView[_0xd587[202]][_0xd587[2314]]= function(_0x5c29x2){_0x5c29x2= mxEvent[_0xd587[728]](_0x5c29x2);return _0x5c29x2== this[_0xd587[1179]][_0xd587[526]]|| _0x5c29x2[_0xd587[265]]== this[_0xd587[2053]]|| null!= _0x5c29x2[_0xd587[265]]&& _0x5c29x2[_0xd587[265]][_0xd587[265]]== this[_0xd587[2053]]|| _0x5c29x2== this[_0xd587[510]][_0xd587[265]]|| _0x5c29x2== this[_0xd587[510]]|| _0x5c29x2== this[_0xd587[2053]]|| _0x5c29x2== this[_0xd587[505]]|| _0x5c29x2== this[_0xd587[506]]};mxGraphView[_0xd587[202]][_0xd587[2315]]= function(_0x5c29x2){var _0x5c29x3=mxUtils[_0xd587[445]](this[_0xd587[1179]][_0xd587[526]]);_0x5c29x2= new mxPoint(_0x5c29x2[_0xd587[782]]- _0x5c29x3[_0xd587[235]],_0x5c29x2[_0xd587[784]]- _0x5c29x3[_0xd587[236]]);var _0x5c29x3=this[_0xd587[1179]][_0xd587[526]][_0xd587[359]],_0x5c29x4=this[_0xd587[1179]][_0xd587[526]][_0xd587[159]];if(_0x5c29x3> _0x5c29x4&& _0x5c29x2[_0xd587[235]]> _0x5c29x4+ 2&& _0x5c29x2[_0xd587[235]]<= _0x5c29x3){return !0};_0x5c29x3= this[_0xd587[1179]][_0xd587[526]][_0xd587[167]];_0x5c29x4= this[_0xd587[1179]][_0xd587[526]][_0xd587[157]];return _0x5c29x3> _0x5c29x4&& _0x5c29x2[_0xd587[236]]> _0x5c29x4+ 2&& _0x5c29x2[_0xd587[236]]<= _0x5c29x3?!0:!1};mxGraphView[_0xd587[202]][_0xd587[176]]= function(){this[_0xd587[2163]]();var _0x5c29x2=this[_0xd587[1179]];_0x5c29x2[_0xd587[507]]== mxConstants[_0xd587[508]]?this[_0xd587[1569]]():_0x5c29x2[_0xd587[507]]== mxConstants[_0xd587[1523]]?this[_0xd587[1571]]():this[_0xd587[1570]]()};mxGraphView[_0xd587[202]][_0xd587[2163]]= function(){var _0x5c29x2=this[_0xd587[1179]],_0x5c29x3=_0x5c29x2[_0xd587[526]];if(null!= _0x5c29x3){mxEvent[_0xd587[759]](_0x5c29x3,mxUtils[_0xd587[885]](this,function(_0x5c29x3){mxClient[_0xd587[754]]&& _0x5c29x2[_0xd587[2203]]()&& _0x5c29x2[_0xd587[2126]](!_0x5c29x2[_0xd587[2134]]());this[_0xd587[2314]](_0x5c29x3)&& (!mxClient[_0xd587[80]]&& !mxClient[_0xd587[76]]&& !mxClient[_0xd587[71]]&& !mxClient[_0xd587[75]]|| !this[_0xd587[2315]](_0x5c29x3))&& _0x5c29x2[_0xd587[758]](mxEvent.MOUSE_DOWN, new mxMouseEvent(_0x5c29x3))}),mxUtils[_0xd587[885]](this,function(_0x5c29x3){this[_0xd587[2314]](_0x5c29x3)&& _0x5c29x2[_0xd587[758]](mxEvent.MOUSE_MOVE, new mxMouseEvent(_0x5c29x3))}),mxUtils[_0xd587[885]](this,function(_0x5c29x3){this[_0xd587[2314]](_0x5c29x3)&& _0x5c29x2[_0xd587[758]](mxEvent.MOUSE_UP, new mxMouseEvent(_0x5c29x3))}));mxEvent[_0xd587[169]](_0x5c29x3,_0xd587[760],mxUtils[_0xd587[885]](this,function(_0x5c29x3){_0x5c29x2[_0xd587[761]](_0x5c29x3)}));var _0x5c29x4=function(_0x5c29x4){var _0x5c29x9=null;mxClient[_0xd587[754]]&& (_0x5c29x9= mxEvent[_0xd587[731]](_0x5c29x4),_0x5c29x4= mxEvent[_0xd587[733]](_0x5c29x4),_0x5c29x4= mxUtils[_0xd587[2196]](_0x5c29x3,_0x5c29x9,_0x5c29x4),_0x5c29x9= _0x5c29x2[_0xd587[441]][_0xd587[248]](_0x5c29x2[_0xd587[999]](_0x5c29x4[_0xd587[235]],_0x5c29x4[_0xd587[236]])));return _0x5c29x9};_0x5c29x2[_0xd587[1133]]({mouseDown:function(_0x5c29x3,_0x5c29x4){_0x5c29x2[_0xd587[2316]][_0xd587[1032]]()},mouseMove:function(){},mouseUp:function(){}});this[_0xd587[2317]]= mxUtils[_0xd587[885]](this,function(_0x5c29x3){null!= _0x5c29x2[_0xd587[2276]]&& _0x5c29x2[_0xd587[2276]][_0xd587[2277]]()&& _0x5c29x2[_0xd587[2276]][_0xd587[801]]();this[_0xd587[2252]]&& (_0x5c29x2[_0xd587[1009]]&& !mxEvent[_0xd587[721]](_0x5c29x3))&& _0x5c29x2[_0xd587[758]](mxEvent.MOUSE_MOVE, new mxMouseEvent(_0x5c29x3,_0x5c29x4(_0x5c29x3)))});this[_0xd587[2318]]= mxUtils[_0xd587[885]](this,function(_0x5c29x3){this[_0xd587[2252]]&& _0x5c29x2[_0xd587[758]](mxEvent.MOUSE_UP, new mxMouseEvent(_0x5c29x3))});mxEvent[_0xd587[759]](document,null,this[_0xd587[2317]],this[_0xd587[2318]])}};mxGraphView[_0xd587[202]][_0xd587[1570]]= function(){var _0x5c29x2=this[_0xd587[1179]][_0xd587[526]];null!= _0x5c29x2&& (this[_0xd587[510]]= this[_0xd587[2319]](_0xd587[118],_0xd587[118]),this[_0xd587[2053]]= this[_0xd587[2319]](_0xd587[942],_0xd587[942]),this[_0xd587[505]]= this[_0xd587[2319]](_0xd587[942],_0xd587[942]),this[_0xd587[506]]= this[_0xd587[2319]](_0xd587[942],_0xd587[942]),this[_0xd587[510]][_0xd587[62]](this[_0xd587[2053]]),this[_0xd587[510]][_0xd587[62]](this[_0xd587[505]]),this[_0xd587[510]][_0xd587[62]](this[_0xd587[506]]),_0x5c29x2[_0xd587[62]](this[_0xd587[510]]),mxClient[_0xd587[496]]&& (_0x5c29x2= mxUtils[_0xd587[885]](this,function(_0x5c29x2){_0x5c29x2= this[_0xd587[517]]();this[_0xd587[2320]](_0x5c29x2[_0xd587[235]]+ _0x5c29x2[_0xd587[117]]+ this[_0xd587[1179]][_0xd587[467]],_0x5c29x2[_0xd587[236]]+ _0x5c29x2[_0xd587[119]]+ this[_0xd587[1179]][_0xd587[467]])}),mxEvent[_0xd587[169]](window,_0xd587[129],_0x5c29x2)))};mxGraphView[_0xd587[202]][_0xd587[2320]]= function(_0x5c29x2,_0x5c29x3){if(null!= this[_0xd587[1179]][_0xd587[526]]){var _0x5c29x4=this[_0xd587[1179]][_0xd587[526]][_0xd587[167]];this[_0xd587[510]][_0xd587[124]][_0xd587[117]]= this[_0xd587[1179]][_0xd587[526]][_0xd587[359]]< _0x5c29x2?_0x5c29x2+ _0xd587[168]:_0xd587[118];this[_0xd587[510]][_0xd587[124]][_0xd587[119]]= _0x5c29x4< _0x5c29x3?_0x5c29x3+ _0xd587[168]:_0xd587[118]}};mxGraphView[_0xd587[202]][_0xd587[2319]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=document[_0xd587[55]](_0xd587[529]);null!= _0x5c29x2&& null!= _0x5c29x3?(_0x5c29x4[_0xd587[124]][_0xd587[491]]= _0xd587[492],_0x5c29x4[_0xd587[124]][_0xd587[361]]= _0xd587[946],_0x5c29x4[_0xd587[124]][_0xd587[125]]= _0xd587[946],_0x5c29x4[_0xd587[124]][_0xd587[117]]= _0x5c29x2,_0x5c29x4[_0xd587[124]][_0xd587[119]]= _0x5c29x3):_0x5c29x4[_0xd587[124]][_0xd587[491]]= _0xd587[1500];return _0x5c29x4};mxGraphView[_0xd587[202]][_0xd587[1571]]= function(){var _0x5c29x2=this[_0xd587[1179]][_0xd587[526]];if(null!= _0x5c29x2){var _0x5c29x3=_0x5c29x2[_0xd587[359]],_0x5c29x4=_0x5c29x2[_0xd587[167]];this[_0xd587[510]]= this[_0xd587[2321]](_0x5c29x3,_0x5c29x4);this[_0xd587[2053]]= this[_0xd587[2321]](_0x5c29x3,_0x5c29x4);this[_0xd587[505]]= this[_0xd587[2321]](_0x5c29x3,_0x5c29x4);this[_0xd587[506]]= this[_0xd587[2321]](_0x5c29x3,_0x5c29x4);this[_0xd587[510]][_0xd587[62]](this[_0xd587[2053]]);this[_0xd587[510]][_0xd587[62]](this[_0xd587[505]]);this[_0xd587[510]][_0xd587[62]](this[_0xd587[506]]);_0x5c29x2[_0xd587[62]](this[_0xd587[510]])}};mxGraphView[_0xd587[202]][_0xd587[2321]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=document[_0xd587[55]](mxClient[_0xd587[463]]+ _0xd587[1499]);_0x5c29x4[_0xd587[124]][_0xd587[491]]= _0xd587[492];_0x5c29x4[_0xd587[124]][_0xd587[361]]= _0xd587[946];_0x5c29x4[_0xd587[124]][_0xd587[125]]= _0xd587[946];_0x5c29x4[_0xd587[124]][_0xd587[117]]= _0x5c29x2+ _0xd587[168];_0x5c29x4[_0xd587[124]][_0xd587[119]]= _0x5c29x3+ _0xd587[168];_0x5c29x4[_0xd587[57]](_0xd587[1462],_0x5c29x2+ _0xd587[537]+ _0x5c29x3);_0x5c29x4[_0xd587[57]](_0xd587[2322],_0xd587[2323]);return _0x5c29x4};mxGraphView[_0xd587[202]][_0xd587[1569]]= function(){var _0x5c29x2=this[_0xd587[1179]][_0xd587[526]];this[_0xd587[510]]= document[_0xd587[509]](mxConstants.NS_SVG,_0xd587[449]);this[_0xd587[2053]]= document[_0xd587[509]](mxConstants.NS_SVG,_0xd587[449]);this[_0xd587[510]][_0xd587[62]](this[_0xd587[2053]]);this[_0xd587[505]]= document[_0xd587[509]](mxConstants.NS_SVG,_0xd587[449]);this[_0xd587[510]][_0xd587[62]](this[_0xd587[505]]);this[_0xd587[506]]= document[_0xd587[509]](mxConstants.NS_SVG,_0xd587[449]);this[_0xd587[510]][_0xd587[62]](this[_0xd587[506]]);var _0x5c29x3=document[_0xd587[509]](mxConstants.NS_SVG,_0xd587[571]);_0x5c29x3[_0xd587[124]][_0xd587[117]]= _0xd587[118];_0x5c29x3[_0xd587[124]][_0xd587[119]]= _0xd587[118];_0x5c29x3[_0xd587[124]][_0xd587[495]]= _0xd587[694];_0x5c29x3[_0xd587[62]](this[_0xd587[510]]);null!= _0x5c29x2&& (_0x5c29x2[_0xd587[62]](_0x5c29x3),_0xd587[2324]== mxUtils[_0xd587[275]](_0x5c29x2)[_0xd587[491]]&& (_0x5c29x2[_0xd587[124]][_0xd587[491]]= _0xd587[1500]))};mxGraphView[_0xd587[202]][_0xd587[515]]= function(){var _0x5c29x2=null!= this[_0xd587[510]]?this[_0xd587[510]][_0xd587[538]]:null;null== _0x5c29x2&& (_0x5c29x2= this[_0xd587[510]]);null!= _0x5c29x2&& null!= _0x5c29x2[_0xd587[265]]&& (this[_0xd587[200]](this[_0xd587[1741]],!0),mxEvent[_0xd587[938]](document,null,this[_0xd587[2317]],this[_0xd587[2318]]),mxEvent[_0xd587[762]](this[_0xd587[1179]][_0xd587[526]]),_0x5c29x2[_0xd587[265]][_0xd587[266]](_0x5c29x2),this[_0xd587[506]]= this[_0xd587[505]]= this[_0xd587[2053]]= this[_0xd587[510]]= this[_0xd587[2318]]= this[_0xd587[2317]]= null)};function mxCurrentRootChange(_0x5c29x2,_0x5c29x3){this[_0xd587[441]]= _0x5c29x2;this[_0xd587[257]]= this[_0xd587[813]]= _0x5c29x3;this[_0xd587[2325]]= null== _0x5c29x3;if(!this[_0xd587[2325]]){for(var _0x5c29x4=this[_0xd587[441]][_0xd587[1741]],_0x5c29x5=this[_0xd587[441]][_0xd587[1179]][_0xd587[502]]();null!= _0x5c29x4;){if(_0x5c29x4== _0x5c29x3){this[_0xd587[2325]]= !0;break};_0x5c29x4= _0x5c29x5[_0xd587[1197]](_0x5c29x4)}}}mxCurrentRootChange[_0xd587[202]][_0xd587[350]]= function(){var _0x5c29x2=this[_0xd587[441]][_0xd587[1741]];this[_0xd587[441]][_0xd587[1741]]= this[_0xd587[257]];this[_0xd587[257]]= _0x5c29x2;_0x5c29x2= this[_0xd587[441]][_0xd587[1179]][_0xd587[2326]](this[_0xd587[441]][_0xd587[1741]]);null!= _0x5c29x2&& (this[_0xd587[441]][_0xd587[513]]= new mxPoint(-_0x5c29x2[_0xd587[235]],-_0x5c29x2[_0xd587[236]]));this[_0xd587[441]][_0xd587[746]]( new mxEventObject(this[_0xd587[2325]]?mxEvent[_0xd587[2327]]:mxEvent[_0xd587[2328]],_0xd587[813],this[_0xd587[441]][_0xd587[1741]],_0xd587[257],this[_0xd587[257]]));this[_0xd587[2325]]?(this[_0xd587[441]][_0xd587[200]](this[_0xd587[441]][_0xd587[1741]],!0),this[_0xd587[441]][_0xd587[2264]]()):this[_0xd587[441]][_0xd587[802]]();this[_0xd587[2325]]= !this[_0xd587[2325]]};function mxGraph(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){this[_0xd587[2329]]= null;this[_0xd587[2330]]= _0x5c29x4;this[_0xd587[507]]= mxClient[_0xd587[48]]?mxConstants[_0xd587[508]]:_0x5c29x4== mxConstants[_0xd587[2331]]&& mxClient[_0xd587[47]]?mxConstants[_0xd587[1523]]:_0x5c29x4== mxConstants[_0xd587[2332]]?mxConstants[_0xd587[1656]]:_0x5c29x4== mxConstants[_0xd587[2333]]?mxConstants[_0xd587[2209]]:mxConstants[_0xd587[2334]];this[_0xd587[251]]= null!= _0x5c29x3?_0x5c29x3: new mxGraphModel;this[_0xd587[2335]]= [];this[_0xd587[2336]]= [];this[_0xd587[259]]= this[_0xd587[2337]]();this[_0xd587[2339]](this[_0xd587[2338]]());this[_0xd587[2341]](null!= _0x5c29x5?_0x5c29x5:this[_0xd587[2340]]());this[_0xd587[441]]= this[_0xd587[2342]]();this[_0xd587[2343]]= mxUtils[_0xd587[885]](this,function(_0x5c29x2,_0x5c29x3){this[_0xd587[1177]](_0x5c29x3[_0xd587[720]](_0xd587[1061])[_0xd587[1065]])});this[_0xd587[251]][_0xd587[169]](mxEvent.CHANGE,this[_0xd587[2343]]);this[_0xd587[2344]]();null!= _0x5c29x2&& this[_0xd587[176]](_0x5c29x2);this[_0xd587[441]][_0xd587[2259]]()}mxLoadResources&& mxResources[_0xd587[99]](mxClient[_0xd587[86]]+ _0xd587[2345]);mxGraph[_0xd587[202]]= new mxEventSource;mxGraph[_0xd587[202]][_0xd587[196]]= mxGraph;mxGraph[_0xd587[202]][_0xd587[2346]]= [];mxGraph[_0xd587[202]][_0xd587[2329]]= null;mxGraph[_0xd587[202]][_0xd587[1009]]= !1;mxGraph[_0xd587[202]][_0xd587[251]]= null;mxGraph[_0xd587[202]][_0xd587[441]]= null;mxGraph[_0xd587[202]][_0xd587[94]]= null;mxGraph[_0xd587[202]][_0xd587[2105]]= null;mxGraph[_0xd587[202]][_0xd587[2347]]= null;mxGraph[_0xd587[202]][_0xd587[259]]= null;mxGraph[_0xd587[202]][_0xd587[2335]]= null;mxGraph[_0xd587[202]][_0xd587[2330]]= null;mxGraph[_0xd587[202]][_0xd587[507]]= null;mxGraph[_0xd587[202]][_0xd587[1020]]= 10;mxGraph[_0xd587[202]][_0xd587[991]]= !0;mxGraph[_0xd587[202]][_0xd587[2348]]= !0;mxGraph[_0xd587[202]][_0xd587[2349]]= !0;mxGraph[_0xd587[202]][_0xd587[2350]]= 700;mxGraph[_0xd587[202]][_0xd587[2351]]= 25;mxGraph[_0xd587[202]][_0xd587[2352]]= 0;mxGraph[_0xd587[202]][_0xd587[2352]]= 0;mxGraph[_0xd587[202]][_0xd587[2213]]= 0;mxGraph[_0xd587[202]][_0xd587[2215]]= !0;mxGraph[_0xd587[202]][_0xd587[2353]]= 4;mxGraph[_0xd587[202]][_0xd587[2354]]= 0.5;mxGraph[_0xd587[202]][_0xd587[2355]]= null;mxGraph[_0xd587[202]][_0xd587[2356]]= null;mxGraph[_0xd587[202]][_0xd587[1617]]= null;mxGraph[_0xd587[202]][_0xd587[2273]]= !1;mxGraph[_0xd587[202]][_0xd587[2357]]= !1;mxGraph[_0xd587[202]][_0xd587[2358]]= _0xd587[579];mxGraph[_0xd587[202]][_0xd587[2359]]= !0;mxGraph[_0xd587[202]][_0xd587[2360]]= 20;mxGraph[_0xd587[202]][_0xd587[2361]]= !1;mxGraph[_0xd587[202]][_0xd587[2013]]= mxConstants[_0xd587[516]];mxGraph[_0xd587[202]][_0xd587[2012]]= 1.5;mxGraph[_0xd587[202]][_0xd587[984]]= !0;mxGraph[_0xd587[202]][_0xd587[2362]]= !0;mxGraph[_0xd587[202]][_0xd587[2363]]= !0;mxGraph[_0xd587[202]][_0xd587[2364]]= !1;mxGraph[_0xd587[202]][_0xd587[2365]]= !0;mxGraph[_0xd587[202]][_0xd587[2366]]= !0;mxGraph[_0xd587[202]][_0xd587[2367]]= !0;mxGraph[_0xd587[202]][_0xd587[2368]]= !1;mxGraph[_0xd587[202]][_0xd587[2369]]= !0;mxGraph[_0xd587[202]][_0xd587[2206]]= !0;mxGraph[_0xd587[202]][_0xd587[2370]]= !0;mxGraph[_0xd587[202]][_0xd587[2371]]= !0;mxGraph[_0xd587[202]][_0xd587[2372]]= !0;mxGraph[_0xd587[202]][_0xd587[2373]]= !0;mxGraph[_0xd587[202]][_0xd587[2374]]= !1;mxGraph[_0xd587[202]][_0xd587[2375]]= !1;mxGraph[_0xd587[202]][_0xd587[2376]]= !0;mxGraph[_0xd587[202]][_0xd587[2377]]= !0;mxGraph[_0xd587[202]][_0xd587[2378]]= !0;mxGraph[_0xd587[202]][_0xd587[2379]]= !0;mxGraph[_0xd587[202]][_0xd587[2380]]= !0;mxGraph[_0xd587[202]][_0xd587[2381]]= !1;mxGraph[_0xd587[202]][_0xd587[1012]]= !0;mxGraph[_0xd587[202]][_0xd587[2382]]= !1;mxGraph[_0xd587[202]][_0xd587[2383]]= !1;mxGraph[_0xd587[202]][_0xd587[2384]]= !1;mxGraph[_0xd587[202]][_0xd587[1013]]= !0;mxGraph[_0xd587[202]][_0xd587[2385]]= null;mxGraph[_0xd587[202]][_0xd587[2386]]= null;mxGraph[_0xd587[202]][_0xd587[2387]]= null;mxGraph[_0xd587[202]][_0xd587[2388]]= null;mxGraph[_0xd587[202]][_0xd587[2389]]= !1;mxGraph[_0xd587[202]][_0xd587[467]]= 0;mxGraph[_0xd587[202]][_0xd587[2158]]= !0;mxGraph[_0xd587[202]][_0xd587[2159]]= !1;mxGraph[_0xd587[202]][_0xd587[2168]]= !0;mxGraph[_0xd587[202]][_0xd587[2390]]= !0;mxGraph[_0xd587[202]][_0xd587[2391]]= !0;mxGraph[_0xd587[202]][_0xd587[2392]]= !0;mxGraph[_0xd587[202]][_0xd587[2393]]= !0;mxGraph[_0xd587[202]][_0xd587[2394]]= !0;mxGraph[_0xd587[202]][_0xd587[2395]]= 1.2;mxGraph[_0xd587[202]][_0xd587[2396]]= !1;mxGraph[_0xd587[202]][_0xd587[2397]]= !0;mxGraph[_0xd587[202]][_0xd587[2398]]= !0;mxGraph[_0xd587[202]][_0xd587[2399]]= !1;mxGraph[_0xd587[202]][_0xd587[2400]]= !1;mxGraph[_0xd587[202]][_0xd587[2401]]= !0;mxGraph[_0xd587[202]][_0xd587[2402]]= !1;mxGraph[_0xd587[202]][_0xd587[2293]]= mxEdgeStyle[_0xd587[2403]];mxGraph[_0xd587[202]][_0xd587[2404]]= !0;mxGraph[_0xd587[202]][_0xd587[2405]]= !1;mxGraph[_0xd587[202]][_0xd587[2406]]= !0;mxGraph[_0xd587[202]][_0xd587[2407]]= !1;mxGraph[_0xd587[202]][_0xd587[2408]]= !0;mxGraph[_0xd587[202]][_0xd587[2409]]= !0;mxGraph[_0xd587[202]][_0xd587[2410]]= !1;mxGraph[_0xd587[202]][_0xd587[2411]]= !0;mxGraph[_0xd587[202]][_0xd587[2412]]= !0;mxGraph[_0xd587[202]][_0xd587[2180]]= mxConstants[_0xd587[2065]];mxGraph[_0xd587[202]][_0xd587[2336]]= null;mxGraph[_0xd587[202]][_0xd587[2413]]= 0.1;mxGraph[_0xd587[202]][_0xd587[2414]]= 8;mxGraph[_0xd587[202]][_0xd587[1136]]= 0;mxGraph[_0xd587[202]][_0xd587[1137]]= 0;mxGraph[_0xd587[202]][_0xd587[2415]]= new mxImage(mxClient[_0xd587[88]]+ _0xd587[2416],9,9);mxGraph[_0xd587[202]][_0xd587[2417]]= new mxImage(mxClient[_0xd587[88]]+ _0xd587[2418],9,9);mxGraph[_0xd587[202]][_0xd587[2419]]= new mxImage(_0xd587[2420],16,16);mxGraph[_0xd587[202]][_0xd587[2421]]= _0xd587[130]!= mxClient[_0xd587[90]]?_0xd587[2422]:_0xd587[110];mxGraph[_0xd587[202]][_0xd587[2423]]= _0xd587[130]!= mxClient[_0xd587[90]]?_0xd587[2424]:_0xd587[110];mxGraph[_0xd587[202]][_0xd587[2425]]= _0xd587[130]!= mxClient[_0xd587[90]]?_0xd587[2426]:_0xd587[110];mxGraph[_0xd587[202]][_0xd587[176]]= function(_0x5c29x2){this[_0xd587[526]]= _0x5c29x2;this[_0xd587[2347]]= this[_0xd587[2427]]();this[_0xd587[441]][_0xd587[176]]();this[_0xd587[2258]]();mxClient[_0xd587[80]]&& (mxEvent[_0xd587[169]](window,_0xd587[2428],mxUtils[_0xd587[885]](this,function(){this[_0xd587[515]]()})),mxEvent[_0xd587[169]](_0x5c29x2,_0xd587[2429],mxUtils[_0xd587[885]](this,function(){return this[_0xd587[2203]]()})));8== document[_0xd587[5]]&& _0x5c29x2[_0xd587[1583]](_0xd587[1582],_0xd587[2430])};mxGraph[_0xd587[202]][_0xd587[2344]]= function(_0x5c29x2){this[_0xd587[2276]]= new mxTooltipHandler(this);this[_0xd587[2276]][_0xd587[995]](!1);this[_0xd587[2316]]= new mxPanningHandler(this);this[_0xd587[2316]][_0xd587[2431]]= !1;this[_0xd587[2432]]= new mxSelectionCellsHandler(this);this[_0xd587[2433]]= new mxConnectionHandler(this);this[_0xd587[2433]][_0xd587[995]](!1);this[_0xd587[1011]]= new mxGraphHandler(this)};mxGraph[_0xd587[202]][_0xd587[2338]]= function(){return new mxGraphSelectionModel(this)};mxGraph[_0xd587[202]][_0xd587[2340]]= function(){return new mxStylesheet};mxGraph[_0xd587[202]][_0xd587[2342]]= function(){return new mxGraphView(this)};mxGraph[_0xd587[202]][_0xd587[2337]]= function(){return new mxCellRenderer};mxGraph[_0xd587[202]][_0xd587[2427]]= function(){return new mxCellEditor(this)};mxGraph[_0xd587[202]][_0xd587[502]]= function(){return this[_0xd587[251]]};mxGraph[_0xd587[202]][_0xd587[249]]= function(){return this[_0xd587[441]]};mxGraph[_0xd587[202]][_0xd587[2434]]= function(){return this[_0xd587[94]]};mxGraph[_0xd587[202]][_0xd587[2341]]= function(_0x5c29x2){this[_0xd587[94]]= _0x5c29x2};mxGraph[_0xd587[202]][_0xd587[2435]]= function(){return this[_0xd587[2105]]};mxGraph[_0xd587[202]][_0xd587[2339]]= function(_0x5c29x2){this[_0xd587[2105]]= _0x5c29x2};mxGraph[_0xd587[202]][_0xd587[2436]]= function(_0x5c29x2){for(var _0x5c29x3=[],_0x5c29x4=0;_0x5c29x4< _0x5c29x2[_0xd587[67]];_0x5c29x4++){var _0x5c29x5=_0x5c29x2[_0x5c29x4];if(_0x5c29x5[_0xd587[196]]!= mxRootChange){var _0x5c29x9=null;_0x5c29x5 instanceof mxChildChange&& null== _0x5c29x5[_0xd587[257]]?_0x5c29x9= _0x5c29x5[_0xd587[247]]:null!= _0x5c29x5[_0xd587[246]]&& _0x5c29x5[_0xd587[246]] instanceof mxCell&& (_0x5c29x9= _0x5c29x5[_0xd587[246]]);null!= _0x5c29x9&& 0> mxUtils[_0xd587[2]](_0x5c29x3,_0x5c29x9)&& _0x5c29x3[_0xd587[207]](_0x5c29x9)}};return this[_0xd587[502]]()[_0xd587[1964]](_0x5c29x3)};mxGraph[_0xd587[202]][_0xd587[1177]]= function(_0x5c29x2){for(var _0x5c29x3=0;_0x5c29x3< _0x5c29x2[_0xd587[67]];_0x5c29x3++){this[_0xd587[2437]](_0x5c29x2[_0x5c29x3])};this[_0xd587[2439]](this[_0xd587[2438]](_0x5c29x2));this[_0xd587[441]][_0xd587[2264]]();this[_0xd587[2258]]()};mxGraph[_0xd587[202]][_0xd587[2438]]= function(_0x5c29x2){for(var _0x5c29x3=[],_0x5c29x4=0;_0x5c29x4< _0x5c29x2[_0xd587[67]];_0x5c29x4++){var _0x5c29x5=_0x5c29x2[_0x5c29x4];if(_0x5c29x5 instanceof mxRootChange){break}else {_0x5c29x5 instanceof mxChildChange?null!= _0x5c29x5[_0xd587[257]]&& null== _0x5c29x5[_0xd587[1101]]&& (_0x5c29x3= _0x5c29x3[_0xd587[1919]](this[_0xd587[251]][_0xd587[1939]](_0x5c29x5[_0xd587[247]]))):_0x5c29x5 instanceof mxVisibleChange&& (_0x5c29x3= _0x5c29x3[_0xd587[1919]](this[_0xd587[251]][_0xd587[1939]](_0x5c29x5[_0xd587[246]])))}};return _0x5c29x3};mxGraph[_0xd587[202]][_0xd587[2437]]= function(_0x5c29x2){if(_0x5c29x2 instanceof mxRootChange){this[_0xd587[2440]](),this[_0xd587[2441]](_0x5c29x2[_0xd587[257]]),this[_0xd587[2398]]&& (this[_0xd587[441]][_0xd587[255]]= 1,this[_0xd587[441]][_0xd587[513]][_0xd587[235]]= 0,this[_0xd587[441]][_0xd587[513]][_0xd587[236]]= 0),this[_0xd587[746]]( new mxEventObject(mxEvent.ROOT))}else {if(_0x5c29x2 instanceof mxChildChange){var _0x5c29x3=this[_0xd587[251]][_0xd587[1197]](_0x5c29x2[_0xd587[247]]);null!= _0x5c29x3?this[_0xd587[441]][_0xd587[2263]](_0x5c29x2[_0xd587[247]],!0,!1,null!= _0x5c29x2[_0xd587[257]]):(this[_0xd587[2441]](_0x5c29x2[_0xd587[247]]),this[_0xd587[441]][_0xd587[1741]]== _0x5c29x2[_0xd587[247]]&& this[_0xd587[2442]]());_0x5c29x3!= _0x5c29x2[_0xd587[257]]&& (null!= _0x5c29x3&& this[_0xd587[441]][_0xd587[2263]](_0x5c29x3,!1,!1),null!= _0x5c29x2[_0xd587[257]]&& this[_0xd587[441]][_0xd587[2263]](_0x5c29x2[_0xd587[257]],!1,!1))}else {_0x5c29x2 instanceof mxTerminalChange|| _0x5c29x2 instanceof mxGeometryChange?this[_0xd587[441]][_0xd587[2263]](_0x5c29x2[_0xd587[246]]):_0x5c29x2 instanceof mxValueChange?this[_0xd587[441]][_0xd587[2263]](_0x5c29x2[_0xd587[246]],!1,!1):_0x5c29x2 instanceof mxStyleChange?(this[_0xd587[441]][_0xd587[2263]](_0x5c29x2[_0xd587[246]],!0,!0,!1),this[_0xd587[441]][_0xd587[2265]](_0x5c29x2[_0xd587[246]])):null!= _0x5c29x2[_0xd587[246]]&& _0x5c29x2[_0xd587[246]] instanceof mxCell&& this[_0xd587[2441]](_0x5c29x2[_0xd587[246]])}}};mxGraph[_0xd587[202]][_0xd587[2441]]= function(_0x5c29x2){for(var _0x5c29x3=this[_0xd587[251]][_0xd587[262]](_0x5c29x2),_0x5c29x4=0;_0x5c29x4< _0x5c29x3;_0x5c29x4++){this[_0xd587[2441]](this[_0xd587[251]][_0xd587[263]](_0x5c29x2,_0x5c29x4))};this[_0xd587[441]][_0xd587[2265]](_0x5c29x2)};mxGraph[_0xd587[202]][_0xd587[2443]]= function(_0x5c29x2,_0x5c29x3){null== _0x5c29x2[_0xd587[1211]]&& (_0x5c29x2[_0xd587[1211]]= []);_0x5c29x2[_0xd587[1211]][_0xd587[207]](_0x5c29x3);var _0x5c29x4=this[_0xd587[441]][_0xd587[248]](_0x5c29x2);null!= _0x5c29x4&& this[_0xd587[259]][_0xd587[258]](_0x5c29x4);this[_0xd587[746]]( new mxEventObject(mxEvent.ADD_OVERLAY,_0xd587[246],_0x5c29x2,_0xd587[2201],_0x5c29x3));return _0x5c29x3};mxGraph[_0xd587[202]][_0xd587[2200]]= function(_0x5c29x2){return _0x5c29x2[_0xd587[1211]]};mxGraph[_0xd587[202]][_0xd587[2444]]= function(_0x5c29x2,_0x5c29x3){if(null== _0x5c29x3){this[_0xd587[2445]](_0x5c29x2)}else {var _0x5c29x4=mxUtils[_0xd587[2]](_0x5c29x2[_0xd587[1211]],_0x5c29x3);0<= _0x5c29x4?(_0x5c29x2[_0xd587[1211]][_0xd587[300]](_0x5c29x4,1),0== _0x5c29x2[_0xd587[1211]][_0xd587[67]]&& (_0x5c29x2[_0xd587[1211]]= null),_0x5c29x4= this[_0xd587[441]][_0xd587[248]](_0x5c29x2),null!= _0x5c29x4&& this[_0xd587[259]][_0xd587[258]](_0x5c29x4),this[_0xd587[746]]( new mxEventObject(mxEvent.REMOVE_OVERLAY,_0xd587[246],_0x5c29x2,_0xd587[2201],_0x5c29x3))):_0x5c29x3= null};return _0x5c29x3};mxGraph[_0xd587[202]][_0xd587[2445]]= function(_0x5c29x2){var _0x5c29x3=_0x5c29x2[_0xd587[1211]];if(null!= _0x5c29x3){_0x5c29x2[_0xd587[1211]]= null;var _0x5c29x4=this[_0xd587[441]][_0xd587[248]](_0x5c29x2);null!= _0x5c29x4&& this[_0xd587[259]][_0xd587[258]](_0x5c29x4);for(_0x5c29x4= 0;_0x5c29x4< _0x5c29x3[_0xd587[67]];_0x5c29x4++){this[_0xd587[746]]( new mxEventObject(mxEvent.REMOVE_OVERLAY,_0xd587[246],_0x5c29x2,_0xd587[2201],_0x5c29x3[_0x5c29x4]))}};return _0x5c29x3};mxGraph[_0xd587[202]][_0xd587[2446]]= function(_0x5c29x2){_0x5c29x2= null!= _0x5c29x2?_0x5c29x2:this[_0xd587[251]][_0xd587[501]]();this[_0xd587[2445]](_0x5c29x2);for(var _0x5c29x3=this[_0xd587[251]][_0xd587[262]](_0x5c29x2),_0x5c29x4=0;_0x5c29x4< _0x5c29x3;_0x5c29x4++){var _0x5c29x5=this[_0xd587[251]][_0xd587[263]](_0x5c29x2,_0x5c29x4);this[_0xd587[2446]](_0x5c29x5)}};mxGraph[_0xd587[202]][_0xd587[2447]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){if(null!= _0x5c29x3&& 0< _0x5c29x3[_0xd587[67]]){return _0x5c29x4= null!= _0x5c29x4?_0x5c29x4:this[_0xd587[2419]],_0x5c29x3= new mxCellOverlay(_0x5c29x4,_0xd587[2448]+ _0x5c29x3+ _0xd587[2449]),_0x5c29x5&& _0x5c29x3[_0xd587[169]](mxEvent.CLICK,mxUtils[_0xd587[885]](this,function(_0x5c29x3,_0x5c29x4){this[_0xd587[994]]()&& this[_0xd587[2450]](_0x5c29x2)})),this[_0xd587[2443]](_0x5c29x2,_0x5c29x3)};this[_0xd587[2445]](_0x5c29x2);return null};mxGraph[_0xd587[202]][_0xd587[855]]= function(_0x5c29x2){this[_0xd587[2451]](null,_0x5c29x2)};mxGraph[_0xd587[202]][_0xd587[2451]]= function(_0x5c29x2,_0x5c29x3){null== _0x5c29x2&& (_0x5c29x2= this[_0xd587[2452]](),null!= _0x5c29x2&& !this[_0xd587[2453]](_0x5c29x2)&& (_0x5c29x2= null));null!= _0x5c29x2&& (this[_0xd587[746]]( new mxEventObject(mxEvent.START_EDITING,_0xd587[246],_0x5c29x2,_0xd587[763],_0x5c29x3)),this[_0xd587[2347]][_0xd587[855]](_0x5c29x2,_0x5c29x3))};mxGraph[_0xd587[202]][_0xd587[2142]]= function(_0x5c29x2,_0x5c29x3){return this[_0xd587[2454]](_0x5c29x2)};mxGraph[_0xd587[202]][_0xd587[2126]]= function(_0x5c29x2){this[_0xd587[2347]][_0xd587[2126]](_0x5c29x2)};mxGraph[_0xd587[202]][_0xd587[850]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){this[_0xd587[251]][_0xd587[473]]();try{this[_0xd587[2456]](_0x5c29x2,_0x5c29x3,this[_0xd587[2455]](_0x5c29x2)),this[_0xd587[746]]( new mxEventObject(mxEvent.LABEL_CHANGED,_0xd587[246],_0x5c29x2,_0xd587[131],_0x5c29x3,_0xd587[763],_0x5c29x4))}finally{this[_0xd587[251]][_0xd587[476]]()};return _0x5c29x2};mxGraph[_0xd587[202]][_0xd587[2456]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){this[_0xd587[251]][_0xd587[473]]();try{this[_0xd587[251]][_0xd587[1966]](_0x5c29x2,_0x5c29x3),_0x5c29x4&& this[_0xd587[2457]](_0x5c29x2,!1)}finally{this[_0xd587[251]][_0xd587[476]]()}};mxGraph[_0xd587[202]][_0xd587[859]]= function(_0x5c29x2){this[_0xd587[2126]](!0);this[_0xd587[2433]][_0xd587[862]]();this[_0xd587[1011]][_0xd587[862]]();_0x5c29x2= this[_0xd587[897]]();for(var _0x5c29x3=0;_0x5c29x3< _0x5c29x2[_0xd587[67]];_0x5c29x3++){var _0x5c29x4=this[_0xd587[441]][_0xd587[248]](_0x5c29x2[_0x5c29x3]);null!= _0x5c29x4&& null!= _0x5c29x4[_0xd587[2458]]&& _0x5c29x4[_0xd587[2458]][_0xd587[862]]()}};mxGraph[_0xd587[202]][_0xd587[173]]= function(_0x5c29x2){var _0x5c29x3=_0x5c29x2[_0xd587[727]](),_0x5c29x4=_0x5c29x2[_0xd587[736]](),_0x5c29x5= new mxEventObject(mxEvent.CLICK,_0xd587[763],_0x5c29x3,_0xd587[246],_0x5c29x4);_0x5c29x2[_0xd587[721]]()&& _0x5c29x5[_0xd587[722]]();this[_0xd587[746]](_0x5c29x5);this[_0xd587[994]]()&& (!mxEvent[_0xd587[721]](_0x5c29x3)&& !_0x5c29x5[_0xd587[721]]())&& (null!= _0x5c29x4?this[_0xd587[2459]](_0x5c29x4,_0x5c29x3):(_0x5c29x4= null,this[_0xd587[2460]]()&& (_0x5c29x4= this[_0xd587[2461]](_0x5c29x2[_0xd587[734]](),_0x5c29x2[_0xd587[735]]())),null!= _0x5c29x4?this[_0xd587[2459]](_0x5c29x4,_0x5c29x3):this[_0xd587[2462]](_0x5c29x3)|| this[_0xd587[2440]]()))};mxGraph[_0xd587[202]][_0xd587[761]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4= new mxEventObject(mxEvent.DOUBLE_CLICK,_0xd587[763],_0x5c29x2,_0xd587[246],_0x5c29x3);this[_0xd587[746]](_0x5c29x4);this[_0xd587[994]]()&& (!mxEvent[_0xd587[721]](_0x5c29x2)&& !_0x5c29x4[_0xd587[721]]()&& null!= _0x5c29x3&& this[_0xd587[2453]](_0x5c29x3))&& this[_0xd587[2451]](_0x5c29x3,_0x5c29x2)};mxGraph[_0xd587[202]][_0xd587[1014]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){if(!this[_0xd587[2382]]&& (this[_0xd587[2384]]|| mxUtils[_0xd587[1134]](this[_0xd587[526]]))){var _0x5c29x9=this[_0xd587[526]];_0x5c29x5= null!= _0x5c29x5?_0x5c29x5:20;if(_0x5c29x2>= _0x5c29x9[_0xd587[360]]&& _0x5c29x3>= _0x5c29x9[_0xd587[190]]&& _0x5c29x2<= _0x5c29x9[_0xd587[360]]+ _0x5c29x9[_0xd587[159]]&& _0x5c29x3<= _0x5c29x9[_0xd587[190]]+ _0x5c29x9[_0xd587[157]]){var _0x5c29xa=_0x5c29x9[_0xd587[360]]+ _0x5c29x9[_0xd587[159]]- _0x5c29x2;if(_0x5c29xa< _0x5c29x5){if(_0x5c29x2= _0x5c29x9[_0xd587[360]],_0x5c29x9[_0xd587[360]]+= _0x5c29x5- _0x5c29xa,_0x5c29x4&& _0x5c29x2== _0x5c29x9[_0xd587[360]]){if(this[_0xd587[507]]== mxConstants[_0xd587[508]]){_0x5c29x2= this[_0xd587[441]][_0xd587[2024]]()[_0xd587[538]];var _0x5c29x12=this[_0xd587[526]][_0xd587[1526]]+ _0x5c29x5- _0x5c29xa}else {_0x5c29x12= Math[_0xd587[160]](_0x5c29x9[_0xd587[159]],_0x5c29x9[_0xd587[1526]])+ _0x5c29x5- _0x5c29xa,_0x5c29x2= this[_0xd587[441]][_0xd587[2051]]()};_0x5c29x2[_0xd587[124]][_0xd587[117]]= _0x5c29x12+ _0xd587[168];_0x5c29x9[_0xd587[360]]+= _0x5c29x5- _0x5c29xa}}else {_0x5c29xa= _0x5c29x2- _0x5c29x9[_0xd587[360]],_0x5c29xa< _0x5c29x5&& (_0x5c29x9[_0xd587[360]]-= _0x5c29x5- _0x5c29xa)};_0x5c29xa= _0x5c29x9[_0xd587[190]]+ _0x5c29x9[_0xd587[157]]- _0x5c29x3;_0x5c29xa< _0x5c29x5?(_0x5c29x2= _0x5c29x9[_0xd587[190]],_0x5c29x9[_0xd587[190]]+= _0x5c29x5- _0x5c29xa,_0x5c29x2== _0x5c29x9[_0xd587[190]]&& _0x5c29x4&& (this[_0xd587[507]]== mxConstants[_0xd587[508]]?(_0x5c29x2= this[_0xd587[441]][_0xd587[2024]]()[_0xd587[538]],_0x5c29x3= this[_0xd587[526]][_0xd587[191]]+ _0x5c29x5- _0x5c29xa):(_0x5c29x3= Math[_0xd587[160]](_0x5c29x9[_0xd587[157]],_0x5c29x9[_0xd587[191]])+ _0x5c29x5- _0x5c29xa,_0x5c29x2= this[_0xd587[441]][_0xd587[2051]]()),_0x5c29x2[_0xd587[124]][_0xd587[119]]= _0x5c29x3+ _0xd587[168],_0x5c29x9[_0xd587[190]]+= _0x5c29x5- _0x5c29xa)):(_0x5c29xa= _0x5c29x3- _0x5c29x9[_0xd587[190]],_0x5c29xa< _0x5c29x5&& (_0x5c29x9[_0xd587[190]]-= _0x5c29x5- _0x5c29xa))}}else {this[_0xd587[2383]]&& !this[_0xd587[2316]][_0xd587[1124]]&& (null== this[_0xd587[2463]]&& (this[_0xd587[2463]]= this[_0xd587[2464]]()),this[_0xd587[2463]][_0xd587[1143]](_0x5c29x2+ this[_0xd587[1136]],_0x5c29x3+ this[_0xd587[1137]]))}};mxGraph[_0xd587[202]][_0xd587[2464]]= function(){return new mxPanningManager(this)};mxGraph[_0xd587[202]][_0xd587[2465]]= function(){function _0x5c29x2(_0x5c29x2){var _0x5c29x3=0,_0x5c29x3=_0xd587[2466]== _0x5c29x2?2:_0xd587[2467]== _0x5c29x2?4:_0xd587[2468]== _0x5c29x2?6:parseInt(_0x5c29x2);isNaN(_0x5c29x3)&& (_0x5c29x3= 0);return _0x5c29x3}var _0x5c29x3=mxUtils[_0xd587[275]](this[_0xd587[526]]),_0x5c29x4= new mxRectangle;_0x5c29x4[_0xd587[235]]= _0x5c29x2(_0x5c29x3[_0xd587[2469]])+ parseInt(_0x5c29x3[_0xd587[357]]|| 0);_0x5c29x4[_0xd587[236]]= _0x5c29x2(_0x5c29x3[_0xd587[2470]])+ parseInt(_0x5c29x3[_0xd587[2471]]|| 0);_0x5c29x4[_0xd587[117]]= _0x5c29x2(_0x5c29x3[_0xd587[2472]])+ parseInt(_0x5c29x3[_0xd587[1164]]|| 0);_0x5c29x4[_0xd587[119]]= _0x5c29x2(_0x5c29x3[_0xd587[2473]])+ parseInt(_0x5c29x3[_0xd587[2474]]|| 0);return _0x5c29x4};mxGraph[_0xd587[202]][_0xd587[2475]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){_0x5c29x2= this[_0xd587[441]][_0xd587[255]];var _0x5c29x5=this[_0xd587[441]][_0xd587[513]],_0x5c29x9=this[_0xd587[2013]],_0x5c29xa=_0x5c29x2* this[_0xd587[2012]],_0x5c29x9= new mxRectangle(0,0,_0x5c29x9[_0xd587[117]]* _0x5c29xa,_0x5c29x9[_0xd587[119]]* _0x5c29xa);_0x5c29x3= this[_0xd587[2357]]?Math[_0xd587[430]](_0x5c29x3/ _0x5c29x9[_0xd587[117]]):1;_0x5c29x4= this[_0xd587[2357]]?Math[_0xd587[430]](_0x5c29x4/ _0x5c29x9[_0xd587[119]]):1;return new mxRectangle(0,0,_0x5c29x3* _0x5c29x9[_0xd587[117]]+ 2+ _0x5c29x5[_0xd587[235]]/ _0x5c29x2,_0x5c29x4* _0x5c29x9[_0xd587[119]]+ 2+ _0x5c29x5[_0xd587[236]]/ _0x5c29x2)};mxGraph[_0xd587[202]][_0xd587[2258]]= function(){var _0x5c29x2=this[_0xd587[517]]();if(null!= this[_0xd587[526]]){var _0x5c29x3=this[_0xd587[2476]](),_0x5c29x4=Math[_0xd587[160]](0,_0x5c29x2[_0xd587[235]]+ _0x5c29x2[_0xd587[117]]+ 1+ _0x5c29x3),_0x5c29x3=Math[_0xd587[160]](0,_0x5c29x2[_0xd587[236]]+ _0x5c29x2[_0xd587[119]]+ 1+ _0x5c29x3);null!= this[_0xd587[2387]]&& (_0x5c29x4= Math[_0xd587[160]](_0x5c29x4,this[_0xd587[2387]][_0xd587[117]]),_0x5c29x3= Math[_0xd587[160]](_0x5c29x3,this[_0xd587[2387]][_0xd587[119]]));this[_0xd587[2389]]&& this[_0xd587[2477]](_0x5c29x4,_0x5c29x3);if(this[_0xd587[2361]]|| !mxClient[_0xd587[80]]&& this[_0xd587[2273]]){var _0x5c29x5=this[_0xd587[2475]](_0x5c29x2,_0x5c29x4,_0x5c29x3);null!= _0x5c29x5&& (_0x5c29x4= _0x5c29x5[_0xd587[117]],_0x5c29x3= _0x5c29x5[_0xd587[119]])};null!= this[_0xd587[2386]]&& (_0x5c29x4= Math[_0xd587[160]](_0x5c29x4,this[_0xd587[2386]][_0xd587[117]]* this[_0xd587[441]][_0xd587[255]]),_0x5c29x3= Math[_0xd587[160]](_0x5c29x3,this[_0xd587[2386]][_0xd587[119]]* this[_0xd587[441]][_0xd587[255]]));_0x5c29x4= Math[_0xd587[430]](_0x5c29x4- 1);_0x5c29x3= Math[_0xd587[430]](_0x5c29x3- 1);this[_0xd587[507]]== mxConstants[_0xd587[508]]?(_0x5c29x5= this[_0xd587[441]][_0xd587[2024]]()[_0xd587[538]],_0x5c29x5[_0xd587[124]][_0xd587[2478]]= Math[_0xd587[160]](1,_0x5c29x4)+ _0xd587[168],_0x5c29x5[_0xd587[124]][_0xd587[2479]]= Math[_0xd587[160]](1,_0x5c29x3)+ _0xd587[168],_0x5c29x5[_0xd587[124]][_0xd587[117]]= _0xd587[118],_0x5c29x5[_0xd587[124]][_0xd587[119]]= _0xd587[118]):mxClient[_0xd587[496]]?this[_0xd587[441]][_0xd587[2320]](Math[_0xd587[160]](1,_0x5c29x4),Math[_0xd587[160]](1,_0x5c29x3)):(this[_0xd587[441]][_0xd587[510]][_0xd587[124]][_0xd587[2478]]= Math[_0xd587[160]](1,_0x5c29x4)+ _0xd587[168],this[_0xd587[441]][_0xd587[510]][_0xd587[124]][_0xd587[2479]]= Math[_0xd587[160]](1,_0x5c29x3)+ _0xd587[168]);this[_0xd587[2480]](this[_0xd587[2357]],_0x5c29x4- 1,_0x5c29x3- 1)};this[_0xd587[746]]( new mxEventObject(mxEvent.SIZE,_0xd587[1562],_0x5c29x2))};mxGraph[_0xd587[202]][_0xd587[2477]]= function(_0x5c29x2,_0x5c29x3){if(mxClient[_0xd587[80]]){if(mxClient[_0xd587[496]]){var _0x5c29x4=this[_0xd587[2465]]();_0x5c29x2+= Math[_0xd587[160]](2,_0x5c29x4[_0xd587[235]]+ _0x5c29x4[_0xd587[117]]+ 1);_0x5c29x3+= Math[_0xd587[160]](2,_0x5c29x4[_0xd587[236]]+ _0x5c29x4[_0xd587[119]]+ 1)}else {9<= document[_0xd587[5]]?(_0x5c29x2+= 3,_0x5c29x3+= 5):(_0x5c29x2+= 1,_0x5c29x3+= 1)}}else {_0x5c29x3+= 1};null!= this[_0xd587[2388]]&& (_0x5c29x2= Math[_0xd587[243]](this[_0xd587[2388]][_0xd587[117]],_0x5c29x2),_0x5c29x3= Math[_0xd587[243]](this[_0xd587[2388]][_0xd587[119]],_0x5c29x3));this[_0xd587[526]][_0xd587[124]][_0xd587[117]]= Math[_0xd587[430]](_0x5c29x2)+ _0xd587[168];this[_0xd587[526]][_0xd587[124]][_0xd587[119]]= Math[_0xd587[430]](_0x5c29x3)+ _0xd587[168]};mxGraph[_0xd587[202]][_0xd587[2480]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){var _0x5c29x5=this[_0xd587[441]][_0xd587[255]],_0x5c29x9=this[_0xd587[441]][_0xd587[513]],_0x5c29xa=this[_0xd587[2013]],_0x5c29x12=_0x5c29x5* this[_0xd587[2012]],_0x5c29x9= new mxRectangle(_0x5c29x5* _0x5c29x9[_0xd587[235]],_0x5c29x5* _0x5c29x9[_0xd587[236]],_0x5c29xa[_0xd587[117]]* _0x5c29x12,_0x5c29xa[_0xd587[119]]* _0x5c29x12);_0x5c29x2= _0x5c29x2&& Math[_0xd587[243]](_0x5c29x9[_0xd587[117]],_0x5c29x9[_0xd587[119]])> this[_0xd587[2360]];_0x5c29x9[_0xd587[235]]= mxUtils[_0xd587[1454]](_0x5c29x9[_0xd587[235]],_0x5c29x9[_0xd587[117]]);_0x5c29x9[_0xd587[236]]= mxUtils[_0xd587[1454]](_0x5c29x9[_0xd587[236]],_0x5c29x9[_0xd587[119]]);_0x5c29xa= _0x5c29x2?Math[_0xd587[430]]((_0x5c29x3- _0x5c29x9[_0xd587[235]])/ _0x5c29x9[_0xd587[117]]):0;_0x5c29x2= _0x5c29x2?Math[_0xd587[430]]((_0x5c29x4- _0x5c29x9[_0xd587[236]])/ _0x5c29x9[_0xd587[119]]):0;null== this[_0xd587[2481]]&& 0< _0x5c29xa&& (this[_0xd587[2481]]= []);if(null!= this[_0xd587[2481]]){for(_0x5c29x12= 0;_0x5c29x12<= _0x5c29xa;_0x5c29x12++){var _0x5c29x13=[ new mxPoint(_0x5c29x9[_0xd587[235]]+ _0x5c29x12* _0x5c29x9[_0xd587[117]],1), new mxPoint(_0x5c29x9[_0xd587[235]]+ _0x5c29x12* _0x5c29x9[_0xd587[117]],_0x5c29x4)];null!= this[_0xd587[2481]][_0x5c29x12]?(this[_0xd587[2481]][_0x5c29x12][_0xd587[255]]= 1,this[_0xd587[2481]][_0x5c29x12][_0xd587[1525]]= _0x5c29x13,this[_0xd587[2481]][_0x5c29x12][_0xd587[258]]()):(_0x5c29x13= new mxPolyline(_0x5c29x13,this[_0xd587[2358]],this[_0xd587[255]]),_0x5c29x13[_0xd587[507]]= this[_0xd587[507]],_0x5c29x13[_0xd587[1522]]= this[_0xd587[2359]],_0x5c29x13[_0xd587[255]]= _0x5c29x5,_0x5c29x13[_0xd587[176]](this[_0xd587[441]][_0xd587[2053]]),_0x5c29x13[_0xd587[258]](),this[_0xd587[2481]][_0x5c29x12]= _0x5c29x13)};for(_0x5c29x12= _0x5c29xa;_0x5c29x12< this[_0xd587[2481]][_0xd587[67]];_0x5c29x12++){this[_0xd587[2481]][_0x5c29x12][_0xd587[515]]()};this[_0xd587[2481]][_0xd587[300]](_0x5c29xa,this[_0xd587[2481]][_0xd587[67]]- _0x5c29xa)};null== this[_0xd587[2482]]&& 0< _0x5c29x2&& (this[_0xd587[2482]]= []);if(null!= this[_0xd587[2482]]){for(_0x5c29x12= 0;_0x5c29x12<= _0x5c29x2;_0x5c29x12++){_0x5c29x13= [ new mxPoint(1,_0x5c29x9[_0xd587[236]]+ _0x5c29x12* _0x5c29x9[_0xd587[119]]), new mxPoint(_0x5c29x3,_0x5c29x9[_0xd587[236]]+ _0x5c29x12* _0x5c29x9[_0xd587[119]])],null!= this[_0xd587[2482]][_0x5c29x12]?(this[_0xd587[2482]][_0x5c29x12][_0xd587[255]]= 1,this[_0xd587[2482]][_0x5c29x12][_0xd587[1525]]= _0x5c29x13,this[_0xd587[2482]][_0x5c29x12][_0xd587[258]]()):(_0x5c29x13= new mxPolyline(_0x5c29x13,this[_0xd587[2358]],_0x5c29x5),_0x5c29x13[_0xd587[507]]= this[_0xd587[507]],_0x5c29x13[_0xd587[1522]]= this[_0xd587[2359]],_0x5c29x13[_0xd587[255]]= _0x5c29x5,_0x5c29x13[_0xd587[176]](this[_0xd587[441]][_0xd587[2053]]),_0x5c29x13[_0xd587[258]](),this[_0xd587[2482]][_0x5c29x12]= _0x5c29x13)};for(_0x5c29x12= _0x5c29x2;_0x5c29x12< this[_0xd587[2482]][_0xd587[67]];_0x5c29x12++){this[_0xd587[2482]][_0x5c29x12][_0xd587[515]]()};this[_0xd587[2482]][_0xd587[300]](_0x5c29x2,this[_0xd587[2482]][_0xd587[67]]- _0x5c29x2)}};mxGraph[_0xd587[202]][_0xd587[1705]]= function(_0x5c29x2){var _0x5c29x3=this[_0xd587[251]][_0xd587[474]](_0x5c29x2),_0x5c29x4=null,_0x5c29x4=this[_0xd587[251]][_0xd587[250]](_0x5c29x2)?this[_0xd587[94]][_0xd587[2077]]():this[_0xd587[94]][_0xd587[2076]]();null!= _0x5c29x3&& (_0x5c29x4= this[_0xd587[2483]](this[_0xd587[94]][_0xd587[1705]](_0x5c29x3,_0x5c29x4)));null== _0x5c29x4&& (_0x5c29x4= mxGraph[_0xd587[202]][_0xd587[2346]]);return _0x5c29x4};mxGraph[_0xd587[202]][_0xd587[2483]]= function(_0x5c29x2){if(null!= _0x5c29x2){var _0x5c29x3=_0x5c29x2[mxConstants[_0xd587[2484]]],_0x5c29x4=this[_0xd587[2485]](_0x5c29x3);null!= _0x5c29x4?_0x5c29x2[mxConstants[_0xd587[2484]]]= _0x5c29x4:_0x5c29x4= _0x5c29x3;null!= _0x5c29x4&& _0xd587[2486]== _0x5c29x4[_0xd587[85]](0,11)&& (_0x5c29x3= _0x5c29x4[_0xd587[2]](_0xd587[537]),0< _0x5c29x3&& (_0x5c29x4= _0x5c29x4[_0xd587[85]](0,_0x5c29x3)+ _0xd587[2487]+ _0x5c29x4[_0xd587[85]](_0x5c29x3+ 1)),_0x5c29x2[mxConstants[_0xd587[2484]]]= _0x5c29x4)};return _0x5c29x2};mxGraph[_0xd587[202]][_0xd587[2488]]= function(_0x5c29x2,_0x5c29x3){_0x5c29x3= _0x5c29x3|| this[_0xd587[897]]();if(null!= _0x5c29x3){this[_0xd587[251]][_0xd587[473]]();try{for(var _0x5c29x4=0;_0x5c29x4< _0x5c29x3[_0xd587[67]];_0x5c29x4++){this[_0xd587[251]][_0xd587[475]](_0x5c29x3[_0x5c29x4],_0x5c29x2)}}finally{this[_0xd587[251]][_0xd587[476]]()}}};mxGraph[_0xd587[202]][_0xd587[2489]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){_0x5c29x4= _0x5c29x4|| this[_0xd587[2452]]();this[_0xd587[2490]](_0x5c29x2,_0x5c29x3,[_0x5c29x4])};mxGraph[_0xd587[202]][_0xd587[2490]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){_0x5c29x3= null!= _0x5c29x3?_0x5c29x3:!1;_0x5c29x4= _0x5c29x4|| this[_0xd587[897]]();if(null!= _0x5c29x4&& 0< _0x5c29x4[_0xd587[67]]){var _0x5c29x5=this[_0xd587[441]][_0xd587[248]](_0x5c29x4[0]),_0x5c29x5=null!= _0x5c29x5?_0x5c29x5[_0xd587[124]]:this[_0xd587[1705]](_0x5c29x4[0]);null!= _0x5c29x5&& (_0x5c29x3= mxUtils[_0xd587[433]](_0x5c29x5,_0x5c29x2,_0x5c29x3)?0:1,this[_0xd587[1717]](_0x5c29x2,_0x5c29x3,_0x5c29x4))}};mxGraph[_0xd587[202]][_0xd587[1717]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){_0x5c29x4= _0x5c29x4|| this[_0xd587[897]]();mxUtils[_0xd587[1717]](this[_0xd587[251]],_0x5c29x4,_0x5c29x2,_0x5c29x3)};mxGraph[_0xd587[202]][_0xd587[2491]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){this[_0xd587[2492]](_0x5c29x2,_0x5c29x3,null,_0x5c29x4)};mxGraph[_0xd587[202]][_0xd587[2492]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){_0x5c29x5= _0x5c29x5|| this[_0xd587[897]]();if(null!= _0x5c29x5&& 0< _0x5c29x5[_0xd587[67]]){if(null== _0x5c29x4){var _0x5c29x9=this[_0xd587[441]][_0xd587[248]](_0x5c29x5[0]),_0x5c29x9=null!= _0x5c29x9?_0x5c29x9[_0xd587[124]]:this[_0xd587[1705]](_0x5c29x5[0]);null!= _0x5c29x9&& (_0x5c29x4= (parseInt(_0x5c29x9[_0x5c29x2]|| 0)& _0x5c29x3)!= _0x5c29x3)};mxUtils[_0xd587[2492]](this[_0xd587[251]],_0x5c29x5,_0x5c29x2,_0x5c29x3,_0x5c29x4)}};mxGraph[_0xd587[202]][_0xd587[849]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){null== _0x5c29x3&& (_0x5c29x3= this[_0xd587[897]]());if(null!= _0x5c29x3&& 1< _0x5c29x3[_0xd587[67]]){if(null== _0x5c29x4){for(var _0x5c29x5=0;_0x5c29x5< _0x5c29x3[_0xd587[67]];_0x5c29x5++){var _0x5c29x9=this[_0xd587[1198]](_0x5c29x3[_0x5c29x5]);if(null!= _0x5c29x9&& !this[_0xd587[251]][_0xd587[250]](_0x5c29x3[_0x5c29x5])){if(null== _0x5c29x4){if(_0x5c29x2== mxConstants[_0xd587[479]]){_0x5c29x4= _0x5c29x9[_0xd587[235]]+ _0x5c29x9[_0xd587[117]]/ 2;break}else {if(_0x5c29x2== mxConstants[_0xd587[480]]){_0x5c29x4= _0x5c29x9[_0xd587[235]]+ _0x5c29x9[_0xd587[117]]}else {if(_0x5c29x2== mxConstants[_0xd587[1687]]){_0x5c29x4= _0x5c29x9[_0xd587[236]]}else {if(_0x5c29x2== mxConstants[_0xd587[481]]){_0x5c29x4= _0x5c29x9[_0xd587[236]]+ _0x5c29x9[_0xd587[119]]/ 2;break}else {_0x5c29x4= _0x5c29x2== mxConstants[_0xd587[482]]?_0x5c29x9[_0xd587[236]]+ _0x5c29x9[_0xd587[119]]:_0x5c29x9[_0xd587[235]]}}}}}else {_0x5c29x4= _0x5c29x2== mxConstants[_0xd587[480]]?Math[_0xd587[160]](_0x5c29x4,_0x5c29x9[_0xd587[235]]+ _0x5c29x9[_0xd587[117]]):_0x5c29x2== mxConstants[_0xd587[1687]]?Math[_0xd587[243]](_0x5c29x4,_0x5c29x9[_0xd587[236]]):_0x5c29x2== mxConstants[_0xd587[482]]?Math[_0xd587[160]](_0x5c29x4,_0x5c29x9[_0xd587[236]]+ _0x5c29x9[_0xd587[119]]):Math[_0xd587[243]](_0x5c29x4,_0x5c29x9[_0xd587[235]])}}}};if(null!= _0x5c29x4){this[_0xd587[251]][_0xd587[473]]();try{for(_0x5c29x5= 0;_0x5c29x5< _0x5c29x3[_0xd587[67]];_0x5c29x5++){_0x5c29x9= this[_0xd587[1198]](_0x5c29x3[_0x5c29x5]),null!= _0x5c29x9&& !this[_0xd587[251]][_0xd587[250]](_0x5c29x3[_0x5c29x5])&& (_0x5c29x9= _0x5c29x9[_0xd587[238]](),_0x5c29x2== mxConstants[_0xd587[479]]?_0x5c29x9[_0xd587[235]]= _0x5c29x4- _0x5c29x9[_0xd587[117]]/ 2:_0x5c29x2== mxConstants[_0xd587[480]]?_0x5c29x9[_0xd587[235]]= _0x5c29x4- _0x5c29x9[_0xd587[117]]:_0x5c29x2== mxConstants[_0xd587[1687]]?_0x5c29x9[_0xd587[236]]= _0x5c29x4:_0x5c29x2== mxConstants[_0xd587[481]]?_0x5c29x9[_0xd587[236]]= _0x5c29x4- _0x5c29x9[_0xd587[119]]/ 2:_0x5c29x2== mxConstants[_0xd587[482]]?_0x5c29x9[_0xd587[236]]= _0x5c29x4- _0x5c29x9[_0xd587[119]]:_0x5c29x9[_0xd587[235]]= _0x5c29x4,this[_0xd587[251]][_0xd587[1724]](_0x5c29x3[_0x5c29x5],_0x5c29x9))};this[_0xd587[746]]( new mxEventObject(mxEvent.ALIGN_CELLS,_0xd587[611],_0x5c29x2,_0xd587[895],_0x5c29x3))}finally{this[_0xd587[251]][_0xd587[476]]()}}};return _0x5c29x3};mxGraph[_0xd587[202]][_0xd587[854]]= function(_0x5c29x2){if(null!= _0x5c29x2&& null!= this[_0xd587[2356]]){this[_0xd587[251]][_0xd587[473]]();try{var _0x5c29x3=this[_0xd587[251]][_0xd587[474]](_0x5c29x2);null== _0x5c29x3|| 0== _0x5c29x3[_0xd587[67]]?this[_0xd587[251]][_0xd587[475]](_0x5c29x2,this[_0xd587[2356]]):this[_0xd587[251]][_0xd587[475]](_0x5c29x2,null);this[_0xd587[1809]](_0x5c29x2);this[_0xd587[746]]( new mxEventObject(mxEvent.FLIP_EDGE,_0xd587[1989],_0x5c29x2))}finally{this[_0xd587[251]][_0xd587[476]]()}};return _0x5c29x2};mxGraph[_0xd587[202]][_0xd587[2493]]= function(_0x5c29x2){this[_0xd587[2336]][_0xd587[207]](_0x5c29x2)};mxGraph[_0xd587[202]][_0xd587[2494]]= function(_0x5c29x2){for(var _0x5c29x3=[],_0x5c29x4=0;_0x5c29x4< this[_0xd587[2336]][_0xd587[67]];_0x5c29x4++){this[_0xd587[2336]][_0x5c29x4]!= _0x5c29x2&& _0x5c29x3[_0xd587[207]](this[_0xd587[2336]][_0x5c29x4])};this[_0xd587[2336]]= _0x5c29x3};mxGraph[_0xd587[202]][_0xd587[2485]]= function(_0x5c29x2){if(null!= _0x5c29x2){for(var _0x5c29x3=0;_0x5c29x3< this[_0xd587[2336]][_0xd587[67]];_0x5c29x3++){var _0x5c29x4=this[_0xd587[2336]][_0x5c29x3][_0xd587[1202]](_0x5c29x2);if(null!= _0x5c29x4){return _0x5c29x4}}};return null};mxGraph[_0xd587[202]][_0xd587[840]]= function(_0x5c29x2,_0x5c29x3){null== _0x5c29x3&& (_0x5c29x3= mxUtils[_0xd587[1779]](this[_0xd587[897]](),!0));this[_0xd587[251]][_0xd587[473]]();try{this[_0xd587[841]](_0x5c29x3,_0x5c29x2),this[_0xd587[746]]( new mxEventObject(mxEvent.ORDER_CELLS,_0xd587[2495],_0x5c29x2,_0xd587[895],_0x5c29x3))}finally{this[_0xd587[251]][_0xd587[476]]()};return _0x5c29x3};mxGraph[_0xd587[202]][_0xd587[841]]= function(_0x5c29x2,_0x5c29x3){if(null!= _0x5c29x2){this[_0xd587[251]][_0xd587[473]]();try{for(var _0x5c29x4=0;_0x5c29x4< _0x5c29x2[_0xd587[67]];_0x5c29x4++){var _0x5c29x5=this[_0xd587[251]][_0xd587[1197]](_0x5c29x2[_0x5c29x4]);_0x5c29x3?this[_0xd587[251]][_0xd587[99]](_0x5c29x5,_0x5c29x2[_0x5c29x4],_0x5c29x4):this[_0xd587[251]][_0xd587[99]](_0x5c29x5,_0x5c29x2[_0x5c29x4],this[_0xd587[251]][_0xd587[262]](_0x5c29x5)- 1)};this[_0xd587[746]]( new mxEventObject(mxEvent.CELLS_ORDERED,_0xd587[2495],_0x5c29x3,_0xd587[895],_0x5c29x2))}finally{this[_0xd587[251]][_0xd587[476]]()}}};mxGraph[_0xd587[202]][_0xd587[844]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){null== _0x5c29x4&& (_0x5c29x4= mxUtils[_0xd587[1779]](this[_0xd587[897]](),!0));_0x5c29x4= this[_0xd587[2496]](_0x5c29x4);null== _0x5c29x2&& (_0x5c29x2= this[_0xd587[2497]](_0x5c29x4));var _0x5c29x5=this[_0xd587[2498]](_0x5c29x2,_0x5c29x4,_0x5c29x3);if(0< _0x5c29x4[_0xd587[67]]&& null!= _0x5c29x5){var _0x5c29x9=this[_0xd587[251]][_0xd587[1197]](_0x5c29x2);null== _0x5c29x9&& (_0x5c29x9= this[_0xd587[251]][_0xd587[1197]](_0x5c29x4[0]));this[_0xd587[251]][_0xd587[473]]();try{null== this[_0xd587[1198]](_0x5c29x2)&& this[_0xd587[251]][_0xd587[1724]](_0x5c29x2, new mxGeometry);var _0x5c29xa=this[_0xd587[251]][_0xd587[262]](_0x5c29x9);this[_0xd587[833]]([_0x5c29x2],_0x5c29x9,_0x5c29xa,null,null,!1);_0x5c29xa= this[_0xd587[251]][_0xd587[262]](_0x5c29x2);this[_0xd587[833]](_0x5c29x4,_0x5c29x2,_0x5c29xa,null,null,!1,!1);this[_0xd587[835]](_0x5c29x4,-_0x5c29x5[_0xd587[235]],-_0x5c29x5[_0xd587[236]],!1,!0);this[_0xd587[837]]([_0x5c29x2],[_0x5c29x5]);this[_0xd587[746]]( new mxEventObject(mxEvent.GROUP_CELLS,_0xd587[1504],_0x5c29x2,_0xd587[467],_0x5c29x3,_0xd587[895],_0x5c29x4))}finally{this[_0xd587[251]][_0xd587[476]]()}};return _0x5c29x2};mxGraph[_0xd587[202]][_0xd587[2496]]= function(_0x5c29x2){var _0x5c29x3=[];if(null!= _0x5c29x2&& 0< _0x5c29x2[_0xd587[67]]){var _0x5c29x4=this[_0xd587[251]][_0xd587[1197]](_0x5c29x2[0]);_0x5c29x3[_0xd587[207]](_0x5c29x2[0]);for(var _0x5c29x5=1;_0x5c29x5< _0x5c29x2[_0xd587[67]];_0x5c29x5++){this[_0xd587[251]][_0xd587[1197]](_0x5c29x2[_0x5c29x5])== _0x5c29x4&& _0x5c29x3[_0xd587[207]](_0x5c29x2[_0x5c29x5])}};return _0x5c29x3};mxGraph[_0xd587[202]][_0xd587[2498]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){_0x5c29x3= this[_0xd587[1729]](_0x5c29x3);null!= _0x5c29x3&& (this[_0xd587[1730]](_0x5c29x2)&& (_0x5c29x2= this[_0xd587[1731]](_0x5c29x2),_0x5c29x3[_0xd587[235]]-= _0x5c29x2[_0xd587[117]],_0x5c29x3[_0xd587[236]]-= _0x5c29x2[_0xd587[119]],_0x5c29x3[_0xd587[117]]+= _0x5c29x2[_0xd587[117]],_0x5c29x3[_0xd587[119]]+= _0x5c29x2[_0xd587[119]]),_0x5c29x3[_0xd587[235]]-= _0x5c29x4,_0x5c29x3[_0xd587[236]]-= _0x5c29x4,_0x5c29x3[_0xd587[117]]+= 2* _0x5c29x4,_0x5c29x3[_0xd587[119]]+= 2* _0x5c29x4);return _0x5c29x3};mxGraph[_0xd587[202]][_0xd587[2497]]= function(_0x5c29x2){_0x5c29x2= new mxCell(_0xd587[110]);_0x5c29x2[_0xd587[1993]](!0);_0x5c29x2[_0xd587[1995]](!1);return _0x5c29x2};mxGraph[_0xd587[202]][_0xd587[845]]= function(_0x5c29x2){var _0x5c29x3=[];if(null== _0x5c29x2){_0x5c29x2= this[_0xd587[897]]();for(var _0x5c29x4=[],_0x5c29x5=0;_0x5c29x5< _0x5c29x2[_0xd587[67]];_0x5c29x5++){0< this[_0xd587[251]][_0xd587[262]](_0x5c29x2[_0x5c29x5])&& _0x5c29x4[_0xd587[207]](_0x5c29x2[_0x5c29x5])};_0x5c29x2= _0x5c29x4};if(null!= _0x5c29x2&& 0< _0x5c29x2[_0xd587[67]]){this[_0xd587[251]][_0xd587[473]]();try{for(_0x5c29x5= 0;_0x5c29x5< _0x5c29x2[_0xd587[67]];_0x5c29x5++){var _0x5c29x9=this[_0xd587[251]][_0xd587[1953]](_0x5c29x2[_0x5c29x5]);if(null!= _0x5c29x9&& 0< _0x5c29x9[_0xd587[67]]){var _0x5c29x9=_0x5c29x9[_0xd587[1853]](),_0x5c29xa=this[_0xd587[251]][_0xd587[1197]](_0x5c29x2[_0x5c29x5]),_0x5c29x12=this[_0xd587[251]][_0xd587[262]](_0x5c29xa);this[_0xd587[833]](_0x5c29x9,_0x5c29xa,_0x5c29x12,null,null,!0);_0x5c29x3= _0x5c29x3[_0xd587[1919]](_0x5c29x9)}};this[_0xd587[843]](this[_0xd587[2499]](_0x5c29x2));this[_0xd587[746]]( new mxEventObject(mxEvent.UNGROUP_CELLS,_0xd587[895],_0x5c29x2))}finally{this[_0xd587[251]][_0xd587[476]]()}};return _0x5c29x3};mxGraph[_0xd587[202]][_0xd587[846]]= function(_0x5c29x2){null== _0x5c29x2&& (_0x5c29x2= this[_0xd587[897]]());this[_0xd587[251]][_0xd587[473]]();try{var _0x5c29x3=this[_0xd587[902]](),_0x5c29x4=this[_0xd587[251]][_0xd587[262]](_0x5c29x3);this[_0xd587[833]](_0x5c29x2,_0x5c29x3,_0x5c29x4,null,null,!0);this[_0xd587[746]]( new mxEventObject(mxEvent.REMOVE_CELLS_FROM_PARENT,_0xd587[895],_0x5c29x2))}finally{this[_0xd587[251]][_0xd587[476]]()};return _0x5c29x2};mxGraph[_0xd587[202]][_0xd587[1917]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){null== _0x5c29x2&& (_0x5c29x2= this[_0xd587[897]]());_0x5c29x3= null!= _0x5c29x3?_0x5c29x3:0;_0x5c29x4= null!= _0x5c29x4?_0x5c29x4:!1;this[_0xd587[251]][_0xd587[473]]();try{for(var _0x5c29x5=0;_0x5c29x5< _0x5c29x2[_0xd587[67]];_0x5c29x5++){var _0x5c29x9=this[_0xd587[1198]](_0x5c29x2[_0x5c29x5]);if(null!= _0x5c29x9){var _0x5c29xa=this[_0xd587[1955]](_0x5c29x2[_0x5c29x5]);if(null!= _0x5c29xa&& 0< _0x5c29xa[_0xd587[67]]){var _0x5c29x12=this[_0xd587[1729]](_0x5c29xa);if(0< _0x5c29x12[_0xd587[117]]&& 0< _0x5c29x12[_0xd587[119]]){var _0x5c29x13=this[_0xd587[1730]](_0x5c29x2[_0x5c29x5])?this[_0xd587[1731]](_0x5c29x2[_0x5c29x5]): new mxRectangle,_0x5c29x9=_0x5c29x9[_0xd587[238]]();_0x5c29x4&& (_0x5c29x9[_0xd587[235]]+= _0x5c29x12[_0xd587[235]]- _0x5c29x13[_0xd587[117]]- _0x5c29x3,_0x5c29x9[_0xd587[236]]+= _0x5c29x12[_0xd587[236]]- _0x5c29x13[_0xd587[119]]- _0x5c29x3);_0x5c29x9[_0xd587[117]]= _0x5c29x12[_0xd587[117]]+ _0x5c29x13[_0xd587[117]]+ 2* _0x5c29x3;_0x5c29x9[_0xd587[119]]= _0x5c29x12[_0xd587[119]]+ _0x5c29x13[_0xd587[119]]+ 2* _0x5c29x3;this[_0xd587[251]][_0xd587[1724]](_0x5c29x2[_0x5c29x5],_0x5c29x9);this[_0xd587[834]](_0x5c29xa,-_0x5c29x12[_0xd587[235]]+ _0x5c29x13[_0xd587[117]]+ _0x5c29x3,-_0x5c29x12[_0xd587[236]]+ _0x5c29x13[_0xd587[119]]+ _0x5c29x3)}}}}}finally{this[_0xd587[251]][_0xd587[476]]()};return _0x5c29x2};mxGraph[_0xd587[202]][_0xd587[899]]= function(_0x5c29x2,_0x5c29x3){_0x5c29x3= null!= _0x5c29x3?_0x5c29x3:!0;var _0x5c29x4=null;if(null!= _0x5c29x2){for(var _0x5c29x5={},_0x5c29x4=[],_0x5c29x9=0;_0x5c29x9< _0x5c29x2[_0xd587[67]];_0x5c29x9++){var _0x5c29xa=mxCellPath[_0xd587[385]](_0x5c29x2[_0x5c29x9]);_0x5c29x5[_0x5c29xa]= _0x5c29x2[_0x5c29x9];_0x5c29x4[_0xd587[207]](_0x5c29x2[_0x5c29x9])};if(0< _0x5c29x4[_0xd587[67]]){for(var _0x5c29xa=this[_0xd587[441]][_0xd587[255]],_0x5c29x12=this[_0xd587[441]][_0xd587[513]],_0x5c29x4=this[_0xd587[251]][_0xd587[899]](_0x5c29x2,!0),_0x5c29x9=0;_0x5c29x9< _0x5c29x2[_0xd587[67]];_0x5c29x9++){if(!_0x5c29x3&& this[_0xd587[251]][_0xd587[250]](_0x5c29x4[_0x5c29x9])&& null!= this[_0xd587[2500]](_0x5c29x4[_0x5c29x9],this[_0xd587[251]][_0xd587[1709]](_0x5c29x4[_0x5c29x9],!0),this[_0xd587[251]][_0xd587[1709]](_0x5c29x4[_0x5c29x9],!1))){_0x5c29x4[_0x5c29x9]= null}else {var _0x5c29x13=this[_0xd587[251]][_0xd587[1721]](_0x5c29x4[_0x5c29x9]);if(null!= _0x5c29x13){var _0x5c29x14=this[_0xd587[441]][_0xd587[248]](_0x5c29x2[_0x5c29x9]),_0x5c29x15=this[_0xd587[441]][_0xd587[248]](this[_0xd587[251]][_0xd587[1197]](_0x5c29x2[_0x5c29x9]));if(null!= _0x5c29x14&& null!= _0x5c29x15){var _0x5c29x16=_0x5c29x15[_0xd587[2078]][_0xd587[235]],_0x5c29x15=_0x5c29x15[_0xd587[2078]][_0xd587[236]];if(this[_0xd587[251]][_0xd587[250]](_0x5c29x4[_0x5c29x9])){for(var _0x5c29x14=_0x5c29x14[_0xd587[439]],_0x5c29x17=this[_0xd587[251]][_0xd587[1709]](_0x5c29x2[_0x5c29x9],!0),_0x5c29x18=mxCellPath[_0xd587[385]](_0x5c29x17);null!= _0x5c29x17&& null== _0x5c29x5[_0x5c29x18];){_0x5c29x17= this[_0xd587[251]][_0xd587[1197]](_0x5c29x17),_0x5c29x18= mxCellPath[_0xd587[385]](_0x5c29x17)};null== _0x5c29x17&& _0x5c29x13[_0xd587[2007]]( new mxPoint(_0x5c29x14[0][_0xd587[235]]/ _0x5c29xa- _0x5c29x12[_0xd587[235]],_0x5c29x14[0][_0xd587[236]]/ _0x5c29xa- _0x5c29x12[_0xd587[236]]),!0);_0x5c29x17= this[_0xd587[251]][_0xd587[1709]](_0x5c29x2[_0x5c29x9],!1);for(_0x5c29x18= mxCellPath[_0xd587[385]](_0x5c29x17);null!= _0x5c29x17&& null== _0x5c29x5[_0x5c29x18];){_0x5c29x17= this[_0xd587[251]][_0xd587[1197]](_0x5c29x17),_0x5c29x18= mxCellPath[_0xd587[385]](_0x5c29x17)};null== _0x5c29x17&& (_0x5c29x17= _0x5c29x14[_0xd587[67]]- 1,_0x5c29x13[_0xd587[2007]]( new mxPoint(_0x5c29x14[_0x5c29x17][_0xd587[235]]/ _0x5c29xa- _0x5c29x12[_0xd587[235]],_0x5c29x14[_0x5c29x17][_0xd587[236]]/ _0x5c29xa- _0x5c29x12[_0xd587[236]]),!1));_0x5c29x13= _0x5c29x13[_0xd587[1525]];if(null!= _0x5c29x13){for(_0x5c29x14= 0;_0x5c29x14< _0x5c29x13[_0xd587[67]];_0x5c29x14++){_0x5c29x13[_0x5c29x14][_0xd587[235]]+= _0x5c29x16,_0x5c29x13[_0x5c29x14][_0xd587[236]]+= _0x5c29x15}}}else {_0x5c29x13[_0xd587[235]]+= _0x5c29x16,_0x5c29x13[_0xd587[236]]+= _0x5c29x15}}}}}}else {_0x5c29x4= []}};return _0x5c29x4};mxGraph[_0xd587[202]][_0xd587[2501]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa,_0x5c29x12,_0x5c29x13,_0x5c29x14){_0x5c29x3= this[_0xd587[2502]](_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa,_0x5c29x12,_0x5c29x13,_0x5c29x14);return this[_0xd587[2103]](_0x5c29x3,_0x5c29x2)};mxGraph[_0xd587[202]][_0xd587[2502]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa,_0x5c29x12,_0x5c29x13,_0x5c29x14){_0x5c29x2= new mxGeometry(_0x5c29x5,_0x5c29x9,_0x5c29xa,_0x5c29x12);_0x5c29x2[_0xd587[1500]]= null!= _0x5c29x14?_0x5c29x14:!1;_0x5c29x4= new mxCell(_0x5c29x4,_0x5c29x2,_0x5c29x13);_0x5c29x4[_0xd587[1945]](_0x5c29x3);_0x5c29x4[_0xd587[1993]](!0);_0x5c29x4[_0xd587[1995]](!0);return _0x5c29x4};mxGraph[_0xd587[202]][_0xd587[1960]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa){_0x5c29x3= this[_0xd587[2503]](_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa);return this[_0xd587[2504]](_0x5c29x3,_0x5c29x2,_0x5c29x5,_0x5c29x9)};mxGraph[_0xd587[202]][_0xd587[2503]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa){_0x5c29x2= new mxCell(_0x5c29x4, new mxGeometry,_0x5c29xa);_0x5c29x2[_0xd587[1945]](_0x5c29x3);_0x5c29x2[_0xd587[1994]](!0);_0x5c29x2[_0xd587[256]][_0xd587[1500]]= !0;return _0x5c29x2};mxGraph[_0xd587[202]][_0xd587[2504]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){return this[_0xd587[2103]](_0x5c29x2,_0x5c29x3,_0x5c29x9,_0x5c29x4,_0x5c29x5)};mxGraph[_0xd587[202]][_0xd587[2103]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){return this[_0xd587[832]]([_0x5c29x2],_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9)[0]};mxGraph[_0xd587[202]][_0xd587[832]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){null== _0x5c29x3&& (_0x5c29x3= this[_0xd587[902]]());null== _0x5c29x4&& (_0x5c29x4= this[_0xd587[251]][_0xd587[262]](_0x5c29x3));this[_0xd587[251]][_0xd587[473]]();try{this[_0xd587[833]](_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,!1,!0),this[_0xd587[746]]( new mxEventObject(mxEvent.ADD_CELLS,_0xd587[895],_0x5c29x2,_0xd587[1101],_0x5c29x3,_0xd587[1983],_0x5c29x4,_0xd587[1097],_0x5c29x5,_0xd587[772],_0x5c29x9))}finally{this[_0xd587[251]][_0xd587[476]]()};return _0x5c29x2};mxGraph[_0xd587[202]][_0xd587[833]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa,_0x5c29x12){if(null!= _0x5c29x2&& null!= _0x5c29x3&& null!= _0x5c29x4){this[_0xd587[251]][_0xd587[473]]();try{for(var _0x5c29x13=_0x5c29xa?this[_0xd587[441]][_0xd587[248]](_0x5c29x3):null,_0x5c29x14=null!= _0x5c29x13?_0x5c29x13[_0xd587[2078]]:null,_0x5c29x15= new mxPoint(0,0),_0x5c29x13=0;_0x5c29x13< _0x5c29x2[_0xd587[67]];_0x5c29x13++){if(null== _0x5c29x2[_0x5c29x13]){_0x5c29x4--}else {var _0x5c29x16=this[_0xd587[251]][_0xd587[1197]](_0x5c29x2[_0x5c29x13]);if(null!= _0x5c29x14&& _0x5c29x2[_0x5c29x13]!= _0x5c29x3&& _0x5c29x3!= _0x5c29x16){var _0x5c29x17=this[_0xd587[441]][_0xd587[248]](_0x5c29x16),_0x5c29x18=null!= _0x5c29x17?_0x5c29x17[_0xd587[2078]]:_0x5c29x15,_0x5c29x19=this[_0xd587[251]][_0xd587[1721]](_0x5c29x2[_0x5c29x13]);if(null!= _0x5c29x19){var _0x5c29x1a=_0x5c29x18[_0xd587[235]]- _0x5c29x14[_0xd587[235]],_0x5c29x1b=_0x5c29x18[_0xd587[236]]- _0x5c29x14[_0xd587[236]],_0x5c29x19=_0x5c29x19[_0xd587[238]]();_0x5c29x19[_0xd587[513]](_0x5c29x1a,_0x5c29x1b);!_0x5c29x19[_0xd587[1500]]&& (this[_0xd587[251]][_0xd587[1193]](_0x5c29x2[_0x5c29x13])&& !this[_0xd587[2505]]())&& (_0x5c29x19[_0xd587[235]]= Math[_0xd587[160]](0,_0x5c29x19[_0xd587[235]]),_0x5c29x19[_0xd587[236]]= Math[_0xd587[160]](0,_0x5c29x19[_0xd587[236]]));this[_0xd587[251]][_0xd587[1724]](_0x5c29x2[_0x5c29x13],_0x5c29x19)}};_0x5c29x3== _0x5c29x16&& _0x5c29x4+ _0x5c29x13> this[_0xd587[251]][_0xd587[262]](_0x5c29x3)&& _0x5c29x4--;this[_0xd587[251]][_0xd587[99]](_0x5c29x3,_0x5c29x2[_0x5c29x13],_0x5c29x4+ _0x5c29x13);this[_0xd587[2506]]()&& this[_0xd587[2507]](_0x5c29x2[_0x5c29x13])&& this[_0xd587[2508]](_0x5c29x2[_0x5c29x13]);(null== _0x5c29x12|| _0x5c29x12)&& this[_0xd587[2509]](_0x5c29x2[_0x5c29x13]);null!= _0x5c29x5&& this[_0xd587[852]](_0x5c29x2[_0x5c29x13],_0x5c29x5,!0);null!= _0x5c29x9&& this[_0xd587[852]](_0x5c29x2[_0x5c29x13],_0x5c29x9,!1)}};this[_0xd587[746]]( new mxEventObject(mxEvent.CELLS_ADDED,_0xd587[895],_0x5c29x2,_0xd587[1101],_0x5c29x3,_0xd587[1983],_0x5c29x4,_0xd587[1097],_0x5c29x5,_0xd587[772],_0x5c29x9,_0xd587[492],_0x5c29xa))}finally{this[_0xd587[251]][_0xd587[476]]()}}};mxGraph[_0xd587[202]][_0xd587[842]]= function(_0x5c29x2,_0x5c29x3){_0x5c29x3= null!= _0x5c29x3?_0x5c29x3:!0;null== _0x5c29x2&& (_0x5c29x2= this[_0xd587[2510]](this[_0xd587[897]]()));_0x5c29x3&& (_0x5c29x2= this[_0xd587[2510]](this[_0xd587[2499]](_0x5c29x2)));this[_0xd587[251]][_0xd587[473]]();try{this[_0xd587[843]](_0x5c29x2),this[_0xd587[746]]( new mxEventObject(mxEvent.REMOVE_CELLS,_0xd587[895],_0x5c29x2,_0xd587[2511],_0x5c29x3))}finally{this[_0xd587[251]][_0xd587[476]]()};return _0x5c29x2};mxGraph[_0xd587[202]][_0xd587[843]]= function(_0x5c29x2){if(null!= _0x5c29x2&& 0< _0x5c29x2[_0xd587[67]]){var _0x5c29x3=this[_0xd587[441]][_0xd587[255]],_0x5c29x4=this[_0xd587[441]][_0xd587[513]];this[_0xd587[251]][_0xd587[473]]();try{for(var _0x5c29x5={},_0x5c29x9=0;_0x5c29x9< _0x5c29x2[_0xd587[67]];_0x5c29x9++){var _0x5c29xa=mxCellPath[_0xd587[385]](_0x5c29x2[_0x5c29x9]);_0x5c29x5[_0x5c29xa]= _0x5c29x2[_0x5c29x9]};for(_0x5c29x9= 0;_0x5c29x9< _0x5c29x2[_0xd587[67]];_0x5c29x9++){for(var _0x5c29x12=this[_0xd587[1756]](_0x5c29x2[_0x5c29x9]),_0x5c29x13=0;_0x5c29x13< _0x5c29x12[_0xd587[67]];_0x5c29x13++){if(_0x5c29xa= mxCellPath[_0xd587[385]](_0x5c29x12[_0x5c29x13]),null== _0x5c29x5[_0x5c29xa]){var _0x5c29x14=this[_0xd587[251]][_0xd587[1721]](_0x5c29x12[_0x5c29x13]);if(null!= _0x5c29x14){var _0x5c29x15=this[_0xd587[441]][_0xd587[248]](_0x5c29x12[_0x5c29x13]);if(null!= _0x5c29x15){var _0x5c29x14=_0x5c29x14[_0xd587[238]](),_0x5c29x16=_0x5c29x15[_0xd587[1710]](!0) == _0x5c29x2[_0x5c29x9],_0x5c29x17=_0x5c29x15[_0xd587[439]],_0x5c29x18=_0x5c29x16?0:_0x5c29x17[_0xd587[67]]- 1;_0x5c29x14[_0xd587[2007]]( new mxPoint(_0x5c29x17[_0x5c29x18][_0xd587[235]]/ _0x5c29x3- _0x5c29x4[_0xd587[235]],_0x5c29x17[_0x5c29x18][_0xd587[236]]/ _0x5c29x3- _0x5c29x4[_0xd587[236]]),_0x5c29x16);this[_0xd587[251]][_0xd587[1957]](_0x5c29x12[_0x5c29x13],null,_0x5c29x16);this[_0xd587[251]][_0xd587[1724]](_0x5c29x12[_0x5c29x13],_0x5c29x14)}}}};this[_0xd587[251]][_0xd587[205]](_0x5c29x2[_0x5c29x9])};this[_0xd587[746]]( new mxEventObject(mxEvent.CELLS_REMOVED,_0xd587[895],_0x5c29x2))}finally{this[_0xd587[251]][_0xd587[476]]()}}};mxGraph[_0xd587[202]][_0xd587[853]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){_0x5c29x5= _0x5c29x5|| 0;_0x5c29x9= _0x5c29x9|| 0;null== _0x5c29x4&& (_0x5c29x4= this[_0xd587[899]]([_0x5c29x2])[0]);var _0x5c29xa=this[_0xd587[251]][_0xd587[1197]](_0x5c29x2),_0x5c29x12=this[_0xd587[251]][_0xd587[1709]](_0x5c29x2,!0);this[_0xd587[251]][_0xd587[473]]();try{this[_0xd587[835]](_0x5c29x3,_0x5c29x5,_0x5c29x9,!1,!1),this[_0xd587[833]](_0x5c29x3,_0x5c29xa,this[_0xd587[251]][_0xd587[262]](_0x5c29xa),null,null,!0),this[_0xd587[833]]([_0x5c29x4],_0x5c29xa,this[_0xd587[251]][_0xd587[262]](_0x5c29xa),_0x5c29x12,_0x5c29x3[0],!1),this[_0xd587[852]](_0x5c29x2,_0x5c29x3[0],!0),this[_0xd587[746]]( new mxEventObject(mxEvent.SPLIT_EDGE,_0xd587[1989],_0x5c29x2,_0xd587[895],_0x5c29x3,_0xd587[2512],_0x5c29x4,_0xd587[1126],_0x5c29x5,_0xd587[1125],_0x5c29x9))}finally{this[_0xd587[251]][_0xd587[476]]()};return _0x5c29x4};mxGraph[_0xd587[202]][_0xd587[838]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){null== _0x5c29x3&& (_0x5c29x3= this[_0xd587[897]]());_0x5c29x4&& (_0x5c29x3= this[_0xd587[2499]](_0x5c29x3));this[_0xd587[251]][_0xd587[473]]();try{this[_0xd587[839]](_0x5c29x3,_0x5c29x2),this[_0xd587[746]]( new mxEventObject(mxEvent.TOGGLE_CELLS,_0xd587[539],_0x5c29x2,_0xd587[895],_0x5c29x3,_0xd587[2511],_0x5c29x4))}finally{this[_0xd587[251]][_0xd587[476]]()};return _0x5c29x3};mxGraph[_0xd587[202]][_0xd587[839]]= function(_0x5c29x2,_0x5c29x3){if(null!= _0x5c29x2&& 0< _0x5c29x2[_0xd587[67]]){this[_0xd587[251]][_0xd587[473]]();try{for(var _0x5c29x4=0;_0x5c29x4< _0x5c29x2[_0xd587[67]];_0x5c29x4++){this[_0xd587[251]][_0xd587[175]](_0x5c29x2[_0x5c29x4],_0x5c29x3)}}finally{this[_0xd587[251]][_0xd587[476]]()}}};mxGraph[_0xd587[202]][_0xd587[847]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){_0x5c29x3= null!= _0x5c29x3?_0x5c29x3:!1;null== _0x5c29x4&& (_0x5c29x4= this[_0xd587[2513]](this[_0xd587[897]](),_0x5c29x2));this[_0xd587[2126]](!1);this[_0xd587[251]][_0xd587[473]]();try{this[_0xd587[848]](_0x5c29x4,_0x5c29x2,_0x5c29x3,_0x5c29x5),this[_0xd587[746]]( new mxEventObject(mxEvent.FOLD_CELLS,_0xd587[2514],_0x5c29x2,_0xd587[2515],_0x5c29x3,_0xd587[895],_0x5c29x4))}finally{this[_0xd587[251]][_0xd587[476]]()};return _0x5c29x4};mxGraph[_0xd587[202]][_0xd587[848]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){if(null!= _0x5c29x2&& 0< _0x5c29x2[_0xd587[67]]){this[_0xd587[251]][_0xd587[473]]();try{for(var _0x5c29x9=0;_0x5c29x9< _0x5c29x2[_0xd587[67]];_0x5c29x9++){if((!_0x5c29x5|| this[_0xd587[2516]](_0x5c29x2[_0x5c29x9],_0x5c29x3)) && _0x5c29x3!= this[_0xd587[1742]](_0x5c29x2[_0x5c29x9])){if(this[_0xd587[251]][_0xd587[1972]](_0x5c29x2[_0x5c29x9],_0x5c29x3),this[_0xd587[2517]](_0x5c29x2[_0x5c29x9],_0x5c29x3),this[_0xd587[2507]](_0x5c29x2[_0x5c29x9])&& this[_0xd587[2508]](_0x5c29x2[_0x5c29x9]),_0x5c29x4){var _0x5c29xa=this[_0xd587[251]][_0xd587[1953]](_0x5c29x2[_0x5c29x9]);this[_0xd587[847]](_0x5c29xa,_0x5c29x3,_0x5c29x4)}}};this[_0xd587[746]]( new mxEventObject(mxEvent.CELLS_FOLDED,_0xd587[895],_0x5c29x2,_0xd587[2514],_0x5c29x3,_0xd587[2515],_0x5c29x4))}finally{this[_0xd587[251]][_0xd587[476]]()}}};mxGraph[_0xd587[202]][_0xd587[2517]]= function(_0x5c29x2,_0x5c29x3){if(null!= _0x5c29x2){var _0x5c29x4=this[_0xd587[251]][_0xd587[1721]](_0x5c29x2);null!= _0x5c29x4&& (_0x5c29x4= _0x5c29x4[_0xd587[238]](),this[_0xd587[2518]](_0x5c29x2,_0x5c29x4,_0x5c29x3),_0x5c29x4[_0xd587[2005]](),this[_0xd587[251]][_0xd587[1724]](_0x5c29x2,_0x5c29x4))}};mxGraph[_0xd587[202]][_0xd587[2518]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){if(null!= _0x5c29x2&& null!= _0x5c29x3){_0x5c29x4= this[_0xd587[441]][_0xd587[248]](_0x5c29x2);_0x5c29x4= null!= _0x5c29x4?_0x5c29x4[_0xd587[124]]:this[_0xd587[1705]](_0x5c29x2);if(null== _0x5c29x3[_0xd587[2002]]){var _0x5c29x5=_0x5c29x3;this[_0xd587[2394]]&& (_0x5c29x2= this[_0xd587[2519]](_0x5c29x2),null!= _0x5c29x2&& (_0x5c29x5= _0x5c29x2,_0x5c29x2= mxUtils[_0xd587[433]](_0x5c29x4,mxConstants.STYLE_STARTSIZE),0< _0x5c29x2&& (_0x5c29x5[_0xd587[119]]= Math[_0xd587[160]](_0x5c29x5[_0xd587[119]],_0x5c29x2))));_0x5c29x3[_0xd587[2002]]= new mxRectangle(0,0,_0x5c29x5[_0xd587[117]],_0x5c29x5[_0xd587[119]])};if(null!= _0x5c29x3[_0xd587[2002]]){_0x5c29x3[_0xd587[2002]][_0xd587[235]]= _0x5c29x3[_0xd587[235]];_0x5c29x3[_0xd587[2002]][_0xd587[236]]= _0x5c29x3[_0xd587[236]];var _0x5c29x9=mxUtils[_0xd587[431]](_0x5c29x4[mxConstants[_0xd587[2278]]]|| _0xd587[468]);0!= _0x5c29x9&& (_0x5c29x2= _0x5c29x3[_0xd587[2002]][_0xd587[241]]()- _0x5c29x3[_0xd587[241]](),_0x5c29x4= _0x5c29x3[_0xd587[2002]][_0xd587[242]]()- _0x5c29x3[_0xd587[242]](),_0x5c29x5= Math[_0xd587[426]](_0x5c29x9),_0x5c29x9= Math[_0xd587[427]](_0x5c29x9),_0x5c29x3[_0xd587[2002]][_0xd587[235]]+= _0x5c29x5* _0x5c29x2- _0x5c29x9* _0x5c29x4- _0x5c29x2,_0x5c29x3[_0xd587[2002]][_0xd587[236]]+= _0x5c29x9* _0x5c29x2+ _0x5c29x5* _0x5c29x4- _0x5c29x4)}}};mxGraph[_0xd587[202]][_0xd587[2499]]= function(_0x5c29x2){var _0x5c29x3=_0x5c29x2[_0xd587[1853]]();return _0x5c29x3= _0x5c29x3[_0xd587[1919]](this[_0xd587[2520]](_0x5c29x2))};mxGraph[_0xd587[202]][_0xd587[2520]]= function(_0x5c29x2){var _0x5c29x3=[];if(null!= _0x5c29x2){for(var _0x5c29x4=0;_0x5c29x4< _0x5c29x2[_0xd587[67]];_0x5c29x4++){for(var _0x5c29x5=this[_0xd587[251]][_0xd587[1707]](_0x5c29x2[_0x5c29x4]),_0x5c29x9=0;_0x5c29x9< _0x5c29x5;_0x5c29x9++){_0x5c29x3[_0xd587[207]](this[_0xd587[251]][_0xd587[1708]](_0x5c29x2[_0x5c29x4],_0x5c29x9))};_0x5c29x5= this[_0xd587[251]][_0xd587[1953]](_0x5c29x2[_0x5c29x4]);_0x5c29x3= _0x5c29x3[_0xd587[1919]](this[_0xd587[2520]](_0x5c29x5))}};return _0x5c29x3};mxGraph[_0xd587[202]][_0xd587[858]]= function(_0x5c29x2,_0x5c29x3){_0x5c29x3= null!= _0x5c29x3?_0x5c29x3:!1;this[_0xd587[251]][_0xd587[473]]();try{this[_0xd587[2457]](_0x5c29x2,_0x5c29x3),this[_0xd587[746]]( new mxEventObject(mxEvent.UPDATE_CELL_SIZE,_0xd587[246],_0x5c29x2,_0xd587[2521],_0x5c29x3))}finally{this[_0xd587[251]][_0xd587[476]]()};return _0x5c29x2};mxGraph[_0xd587[202]][_0xd587[2457]]= function(_0x5c29x2,_0x5c29x3){if(null!= _0x5c29x2){this[_0xd587[251]][_0xd587[473]]();try{var _0x5c29x4=this[_0xd587[2519]](_0x5c29x2),_0x5c29x5=this[_0xd587[251]][_0xd587[1721]](_0x5c29x2);if(null!= _0x5c29x4&& null!= _0x5c29x5){var _0x5c29x9=this[_0xd587[1742]](_0x5c29x2),_0x5c29x5=_0x5c29x5[_0xd587[238]]();if(this[_0xd587[1730]](_0x5c29x2)){var _0x5c29xa=this[_0xd587[441]][_0xd587[248]](_0x5c29x2),_0x5c29x12=null!= _0x5c29xa?_0x5c29xa[_0xd587[124]]:this[_0xd587[1705]](_0x5c29x2),_0x5c29x13=this[_0xd587[251]][_0xd587[474]](_0x5c29x2);null== _0x5c29x13&& (_0x5c29x13= _0xd587[110]);mxUtils[_0xd587[433]](_0x5c29x12,mxConstants.STYLE_HORIZONTAL,!0)?(_0x5c29x13= mxUtils[_0xd587[475]](_0x5c29x13,mxConstants.STYLE_STARTSIZE,_0x5c29x4[_0xd587[119]]+ 8),_0x5c29x9&& (_0x5c29x5[_0xd587[119]]= _0x5c29x4[_0xd587[119]]+ 8),_0x5c29x5[_0xd587[117]]= _0x5c29x4[_0xd587[117]]):(_0x5c29x13= mxUtils[_0xd587[475]](_0x5c29x13,mxConstants.STYLE_STARTSIZE,_0x5c29x4[_0xd587[117]]+ 8),_0x5c29x9&& (_0x5c29x5[_0xd587[117]]= _0x5c29x4[_0xd587[117]]+ 8),_0x5c29x5[_0xd587[119]]= _0x5c29x4[_0xd587[119]]);this[_0xd587[251]][_0xd587[475]](_0x5c29x2,_0x5c29x13)}else {_0x5c29x5[_0xd587[117]]= _0x5c29x4[_0xd587[117]],_0x5c29x5[_0xd587[119]]= _0x5c29x4[_0xd587[119]]};if(!_0x5c29x3&& !_0x5c29x9){var _0x5c29x14=this[_0xd587[441]][_0xd587[1799]](this[_0xd587[251]][_0xd587[1953]](_0x5c29x2));if(null!= _0x5c29x14){var _0x5c29x15=this[_0xd587[441]][_0xd587[513]],_0x5c29x16=this[_0xd587[441]][_0xd587[255]],_0x5c29x17=(_0x5c29x14[_0xd587[236]]+ _0x5c29x14[_0xd587[119]])/ _0x5c29x16- _0x5c29x5[_0xd587[236]]- _0x5c29x15[_0xd587[236]];_0x5c29x5[_0xd587[117]]= Math[_0xd587[160]](_0x5c29x5[_0xd587[117]],(_0x5c29x14[_0xd587[235]]+ _0x5c29x14[_0xd587[117]])/ _0x5c29x16- _0x5c29x5[_0xd587[235]]- _0x5c29x15[_0xd587[235]]);_0x5c29x5[_0xd587[119]]= Math[_0xd587[160]](_0x5c29x5[_0xd587[119]],_0x5c29x17)}};this[_0xd587[837]]([_0x5c29x2],[_0x5c29x5])}}finally{this[_0xd587[251]][_0xd587[476]]()}}};mxGraph[_0xd587[202]][_0xd587[2519]]= function(_0x5c29x2){var _0x5c29x3=null;if(null!= _0x5c29x2){var _0x5c29x4=this[_0xd587[441]][_0xd587[248]](_0x5c29x2),_0x5c29x5=null!= _0x5c29x4?_0x5c29x4[_0xd587[124]]:this[_0xd587[1705]](_0x5c29x2);if(null!= _0x5c29x5&& !this[_0xd587[251]][_0xd587[250]](_0x5c29x2)){var _0x5c29x9=_0x5c29x5[mxConstants[_0xd587[2185]]]|| mxConstants[_0xd587[483]],_0x5c29xa=0,_0x5c29x3=0;if((null!= this[_0xd587[1202]](_0x5c29x4)|| null!= _0x5c29x5[mxConstants[_0xd587[2484]]])&& _0x5c29x5[mxConstants[_0xd587[2059]]]== mxConstants[_0xd587[2522]]){_0x5c29x5[mxConstants[_0xd587[2063]]]== mxConstants[_0xd587[481]]&& (_0x5c29xa+= parseFloat(_0x5c29x5[mxConstants[_0xd587[2523]]])|| mxLabel[_0xd587[202]][_0xd587[1680]]),_0x5c29x5[mxConstants[_0xd587[2064]]]!= mxConstants[_0xd587[479]]&& (_0x5c29x3+= parseFloat(_0x5c29x5[mxConstants[_0xd587[2524]]])|| mxLabel[_0xd587[202]][_0xd587[1680]])};_0x5c29xa+= 2* (_0x5c29x5[mxConstants[_0xd587[2143]]]|| 0);_0x5c29xa+= _0x5c29x5[mxConstants[_0xd587[2147]]]|| 0;_0x5c29xa+= _0x5c29x5[mxConstants[_0xd587[2145]]]|| 0;_0x5c29x3+= 2* (_0x5c29x5[mxConstants[_0xd587[2143]]]|| 0);_0x5c29x3+= _0x5c29x5[mxConstants[_0xd587[2144]]]|| 0;_0x5c29x3+= _0x5c29x5[mxConstants[_0xd587[2146]]]|| 0;_0x5c29x4= this[_0xd587[2205]](_0x5c29x4);null!= _0x5c29x4&& (_0x5c29xa+= _0x5c29x4[_0xd587[117]]+ 8);_0x5c29x4= this[_0xd587[2183]](_0x5c29x2);null!= _0x5c29x4&& 0< _0x5c29x4[_0xd587[67]]?(this[_0xd587[2186]](_0x5c29x2)|| (_0x5c29x4= _0x5c29x4[_0xd587[230]](/\n/g,_0xd587[545])),_0x5c29x9= mxUtils[_0xd587[2525]](_0x5c29x4,_0x5c29x9,_0x5c29x5[mxConstants[_0xd587[2188]]]),_0x5c29x2= _0x5c29x9[_0xd587[117]]+ _0x5c29xa,_0x5c29x3= _0x5c29x9[_0xd587[119]]+ _0x5c29x3,mxUtils[_0xd587[433]](_0x5c29x5,mxConstants.STYLE_HORIZONTAL,!0)|| (_0x5c29x5= _0x5c29x3,_0x5c29x3= _0x5c29x2,_0x5c29x2= _0x5c29x5),this[_0xd587[991]]&& (_0x5c29x2= this[_0xd587[1021]](_0x5c29x2+ this[_0xd587[1020]]/ 2),_0x5c29x3= this[_0xd587[1021]](_0x5c29x3+ this[_0xd587[1020]]/ 2)),_0x5c29x3= new mxRectangle(0,0,_0x5c29x2,_0x5c29x3)):(_0x5c29x5= 4* this[_0xd587[1020]],_0x5c29x3= new mxRectangle(0,0,_0x5c29x5,_0x5c29x5))}};return _0x5c29x3};mxGraph[_0xd587[202]][_0xd587[2216]]= function(_0x5c29x2,_0x5c29x3){if(0.2< Math[_0xd587[425]](1- _0x5c29x3[_0xd587[255]])){var _0x5c29x4=this[_0xd587[441]][_0xd587[255]],_0x5c29x5=this[_0xd587[441]][_0xd587[513]],_0x5c29x9=_0x5c29x2[_0xd587[117]]* _0x5c29x3[_0xd587[255]],_0x5c29xa=_0x5c29x2[_0xd587[119]]* _0x5c29x3[_0xd587[255]],_0x5c29x12=_0x5c29x2[_0xd587[236]]- (_0x5c29xa- _0x5c29x2[_0xd587[119]])/ 2,_0x5c29x4= new mxRectangle(this[_0xd587[1021]]((_0x5c29x2[_0xd587[235]]- (_0x5c29x9- _0x5c29x2[_0xd587[117]])/ 2)/ _0x5c29x4)- _0x5c29x5[_0xd587[235]],this[_0xd587[1021]](_0x5c29x12/ _0x5c29x4)- _0x5c29x5[_0xd587[236]],this[_0xd587[1021]](_0x5c29x9/ _0x5c29x4),this[_0xd587[1021]](_0x5c29xa/ _0x5c29x4));this[_0xd587[2526]](_0x5c29x2[_0xd587[246]],_0x5c29x4)}};mxGraph[_0xd587[202]][_0xd587[2526]]= function(_0x5c29x2,_0x5c29x3){return this[_0xd587[836]]([_0x5c29x2],[_0x5c29x3])[0]};mxGraph[_0xd587[202]][_0xd587[836]]= function(_0x5c29x2,_0x5c29x3){this[_0xd587[251]][_0xd587[473]]();try{this[_0xd587[837]](_0x5c29x2,_0x5c29x3),this[_0xd587[746]]( new mxEventObject(mxEvent.RESIZE_CELLS,_0xd587[895],_0x5c29x2,_0xd587[1562],_0x5c29x3))}finally{this[_0xd587[251]][_0xd587[476]]()};return _0x5c29x2};mxGraph[_0xd587[202]][_0xd587[837]]= function(_0x5c29x2,_0x5c29x3){if(null!= _0x5c29x2&& null!= _0x5c29x3&& _0x5c29x2[_0xd587[67]]== _0x5c29x3[_0xd587[67]]){this[_0xd587[251]][_0xd587[473]]();try{for(var _0x5c29x4=0;_0x5c29x4< _0x5c29x2[_0xd587[67]];_0x5c29x4++){var _0x5c29x5=_0x5c29x3[_0x5c29x4],_0x5c29x9=this[_0xd587[251]][_0xd587[1721]](_0x5c29x2[_0x5c29x4]);if(null!= _0x5c29x9&& (_0x5c29x9[_0xd587[235]]!= _0x5c29x5[_0xd587[235]]|| _0x5c29x9[_0xd587[236]]!= _0x5c29x5[_0xd587[236]]|| _0x5c29x9[_0xd587[117]]!= _0x5c29x5[_0xd587[117]]|| _0x5c29x9[_0xd587[119]]!= _0x5c29x5[_0xd587[119]])){_0x5c29x9= _0x5c29x9[_0xd587[238]]();if(_0x5c29x9[_0xd587[1500]]){var _0x5c29xa=_0x5c29x9[_0xd587[1368]];null!= _0x5c29xa&& (_0x5c29xa[_0xd587[235]]+= _0x5c29x5[_0xd587[235]]- _0x5c29x9[_0xd587[235]],_0x5c29xa[_0xd587[236]]+= _0x5c29x5[_0xd587[236]]- _0x5c29x9[_0xd587[236]])}else {_0x5c29x9[_0xd587[235]]= _0x5c29x5[_0xd587[235]],_0x5c29x9[_0xd587[236]]= _0x5c29x5[_0xd587[236]]};_0x5c29x9[_0xd587[117]]= _0x5c29x5[_0xd587[117]];_0x5c29x9[_0xd587[119]]= _0x5c29x5[_0xd587[119]];!_0x5c29x9[_0xd587[1500]]&& (this[_0xd587[251]][_0xd587[1193]](_0x5c29x2[_0x5c29x4])&& !this[_0xd587[2505]]())&& (_0x5c29x9[_0xd587[235]]= Math[_0xd587[160]](0,_0x5c29x9[_0xd587[235]]),_0x5c29x9[_0xd587[236]]= Math[_0xd587[160]](0,_0x5c29x9[_0xd587[236]]));this[_0xd587[251]][_0xd587[1724]](_0x5c29x2[_0x5c29x4],_0x5c29x9);this[_0xd587[2507]](_0x5c29x2[_0x5c29x4])&& this[_0xd587[2508]](_0x5c29x2[_0x5c29x4])}};this[_0xd587[2399]]&& this[_0xd587[1750]](_0x5c29x2);this[_0xd587[746]]( new mxEventObject(mxEvent.CELLS_RESIZED,_0xd587[895],_0x5c29x2,_0xd587[1562],_0x5c29x3))}finally{this[_0xd587[251]][_0xd587[476]]()}}};mxGraph[_0xd587[202]][_0xd587[2508]]= function(_0x5c29x2){if(null!= _0x5c29x2){var _0x5c29x3=this[_0xd587[251]][_0xd587[1197]](_0x5c29x2),_0x5c29x4=this[_0xd587[251]][_0xd587[1721]](_0x5c29x3);if(null!= _0x5c29x3&& (null!= _0x5c29x4&& !this[_0xd587[1742]](_0x5c29x3))&& (_0x5c29x2= this[_0xd587[251]][_0xd587[1721]](_0x5c29x2),null!= _0x5c29x2&& (_0x5c29x4[_0xd587[117]]< _0x5c29x2[_0xd587[235]]+ _0x5c29x2[_0xd587[117]]|| _0x5c29x4[_0xd587[119]]< _0x5c29x2[_0xd587[236]]+ _0x5c29x2[_0xd587[119]]))){_0x5c29x4= _0x5c29x4[_0xd587[238]](),_0x5c29x4[_0xd587[117]]= Math[_0xd587[160]](_0x5c29x4[_0xd587[117]],_0x5c29x2[_0xd587[235]]+ _0x5c29x2[_0xd587[117]]),_0x5c29x4[_0xd587[119]]= Math[_0xd587[160]](_0x5c29x4[_0xd587[119]],_0x5c29x2[_0xd587[236]]+ _0x5c29x2[_0xd587[119]]),this[_0xd587[837]]([_0x5c29x3],[_0x5c29x4])}}};mxGraph[_0xd587[202]][_0xd587[903]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){return this[_0xd587[834]](_0x5c29x2,_0x5c29x3,_0x5c29x4,!0,_0x5c29x5,_0x5c29x9)};mxGraph[_0xd587[202]][_0xd587[834]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa){_0x5c29x3= null!= _0x5c29x3?_0x5c29x3:0;_0x5c29x4= null!= _0x5c29x4?_0x5c29x4:0;_0x5c29x5= null!= _0x5c29x5?_0x5c29x5:!1;if(null!= _0x5c29x2&& (0!= _0x5c29x3|| 0!= _0x5c29x4|| _0x5c29x5|| null!= _0x5c29x9)){this[_0xd587[251]][_0xd587[473]]();try{_0x5c29x5&& (_0x5c29x2= this[_0xd587[899]](_0x5c29x2,this[_0xd587[2527]]()),null== _0x5c29x9&& (_0x5c29x9= this[_0xd587[902]]()));var _0x5c29x12=this[_0xd587[2505]]();null!= _0x5c29x9&& this[_0xd587[2528]](!0);this[_0xd587[835]](_0x5c29x2,_0x5c29x3,_0x5c29x4,!_0x5c29x5&& this[_0xd587[2529]]()&& this[_0xd587[2530]](),null== _0x5c29x9);this[_0xd587[2528]](_0x5c29x12);if(null!= _0x5c29x9){var _0x5c29x13=this[_0xd587[251]][_0xd587[262]](_0x5c29x9);this[_0xd587[833]](_0x5c29x2,_0x5c29x9,_0x5c29x13,null,null,!0)};this[_0xd587[746]]( new mxEventObject(mxEvent.MOVE_CELLS,_0xd587[895],_0x5c29x2,_0xd587[1126],_0x5c29x3,_0xd587[1125],_0x5c29x4,_0xd587[238],_0x5c29x5,_0xd587[772],_0x5c29x9,_0xd587[763],_0x5c29xa))}finally{this[_0xd587[251]][_0xd587[476]]()}};return _0x5c29x2};mxGraph[_0xd587[202]][_0xd587[835]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){if(null!= _0x5c29x2&& (0!= _0x5c29x3|| 0!= _0x5c29x4)){this[_0xd587[251]][_0xd587[473]]();try{_0x5c29x5&& this[_0xd587[2531]](_0x5c29x2);for(var _0x5c29xa=0;_0x5c29xa< _0x5c29x2[_0xd587[67]];_0x5c29xa++){this[_0xd587[2532]](_0x5c29x2[_0x5c29xa],_0x5c29x3,_0x5c29x4),_0x5c29x9&& this[_0xd587[2509]](_0x5c29x2[_0x5c29xa])};this[_0xd587[2400]]&& this[_0xd587[1750]](_0x5c29x2);this[_0xd587[746]]( new mxEventObject(mxEvent.CELLS_MOVED,_0xd587[895],_0x5c29x2,_0xd587[1126],_0x5c29x4,_0xd587[1125],_0x5c29x4,_0xd587[808],_0x5c29x5))}finally{this[_0xd587[251]][_0xd587[476]]()}}};mxGraph[_0xd587[202]][_0xd587[2532]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){var _0x5c29x5=this[_0xd587[251]][_0xd587[1721]](_0x5c29x2);null!= _0x5c29x5&& (_0x5c29x5= _0x5c29x5[_0xd587[238]](),_0x5c29x5[_0xd587[513]](_0x5c29x3,_0x5c29x4),!_0x5c29x5[_0xd587[1500]]&& (this[_0xd587[251]][_0xd587[1193]](_0x5c29x2)&& !this[_0xd587[2505]]())&& (_0x5c29x5[_0xd587[235]]= Math[_0xd587[160]](0,_0x5c29x5[_0xd587[235]]),_0x5c29x5[_0xd587[236]]= Math[_0xd587[160]](0,_0x5c29x5[_0xd587[236]])),_0x5c29x5[_0xd587[1500]]&& !this[_0xd587[251]][_0xd587[250]](_0x5c29x2)&& (null== _0x5c29x5[_0xd587[1368]]?_0x5c29x5[_0xd587[1368]]= new mxPoint(_0x5c29x3,_0x5c29x4):(_0x5c29x5[_0xd587[1368]][_0xd587[235]]+= _0x5c29x3,_0x5c29x5[_0xd587[1368]][_0xd587[236]]+= _0x5c29x4)),this[_0xd587[251]][_0xd587[1724]](_0x5c29x2,_0x5c29x5))};mxGraph[_0xd587[202]][_0xd587[2533]]= function(_0x5c29x2){if(null!= _0x5c29x2&& !this[_0xd587[251]][_0xd587[250]](_0x5c29x2)){var _0x5c29x3=this[_0xd587[251]][_0xd587[1197]](_0x5c29x2);if(_0x5c29x3== this[_0xd587[902]]()|| _0x5c29x3== this[_0xd587[2534]]()){return this[_0xd587[2535]]()};if(null!= _0x5c29x3&& _0x5c29x3!= this[_0xd587[902]]()){var _0x5c29x4=this[_0xd587[251]][_0xd587[1721]](_0x5c29x3);if(null!= _0x5c29x4){var _0x5c29x5=_0x5c29x2= 0,_0x5c29x9=_0x5c29x4[_0xd587[117]],_0x5c29x4=_0x5c29x4[_0xd587[119]];this[_0xd587[1730]](_0x5c29x3)&& (_0x5c29x3= this[_0xd587[1731]](_0x5c29x3),_0x5c29x2= _0x5c29x3[_0xd587[117]],_0x5c29x9-= _0x5c29x3[_0xd587[117]],_0x5c29x5= _0x5c29x3[_0xd587[119]],_0x5c29x4-= _0x5c29x3[_0xd587[119]]);return new mxRectangle(_0x5c29x2,_0x5c29x5,_0x5c29x9,_0x5c29x4)}}};return null};mxGraph[_0xd587[202]][_0xd587[2535]]= function(){return this[_0xd587[2385]]};mxGraph[_0xd587[202]][_0xd587[2509]]= function(_0x5c29x2){if(null!= _0x5c29x2){var _0x5c29x3=this[_0xd587[251]][_0xd587[1721]](_0x5c29x2),_0x5c29x4=this[_0xd587[2536]](_0x5c29x2)?this[_0xd587[2533]](_0x5c29x2):this[_0xd587[2535]]();if(null!= _0x5c29x3&& null!= _0x5c29x4&& !_0x5c29x3[_0xd587[1500]]&& (_0x5c29x3[_0xd587[235]]< _0x5c29x4[_0xd587[235]]|| _0x5c29x3[_0xd587[236]]< _0x5c29x4[_0xd587[236]]|| _0x5c29x4[_0xd587[117]]< _0x5c29x3[_0xd587[235]]+ _0x5c29x3[_0xd587[117]]|| _0x5c29x4[_0xd587[119]]< _0x5c29x3[_0xd587[236]]+ _0x5c29x3[_0xd587[119]])){_0x5c29x2= this[_0xd587[2537]](_0x5c29x2),0< _0x5c29x4[_0xd587[117]]&& (_0x5c29x3[_0xd587[235]]= Math[_0xd587[243]](_0x5c29x3[_0xd587[235]],_0x5c29x4[_0xd587[235]]+ _0x5c29x4[_0xd587[117]]- (1- _0x5c29x2)* _0x5c29x3[_0xd587[117]])),0< _0x5c29x4[_0xd587[119]]&& (_0x5c29x3[_0xd587[236]]= Math[_0xd587[243]](_0x5c29x3[_0xd587[236]],_0x5c29x4[_0xd587[236]]+ _0x5c29x4[_0xd587[119]]- (1- _0x5c29x2)* _0x5c29x3[_0xd587[119]])),_0x5c29x3[_0xd587[235]]= Math[_0xd587[160]](_0x5c29x3[_0xd587[235]],_0x5c29x4[_0xd587[235]]- _0x5c29x3[_0xd587[117]]* _0x5c29x2),_0x5c29x3[_0xd587[236]]= Math[_0xd587[160]](_0x5c29x3[_0xd587[236]],_0x5c29x4[_0xd587[236]]- _0x5c29x3[_0xd587[119]]* _0x5c29x2)}}};mxGraph[_0xd587[202]][_0xd587[1750]]= function(_0x5c29x2){if(null!= _0x5c29x2){for(var _0x5c29x3={},_0x5c29x4=0;_0x5c29x4< _0x5c29x2[_0xd587[67]];_0x5c29x4++){var _0x5c29x5=mxCellPath[_0xd587[385]](_0x5c29x2[_0x5c29x4]);_0x5c29x3[_0x5c29x5]= _0x5c29x2[_0x5c29x4]};this[_0xd587[251]][_0xd587[473]]();try{for(_0x5c29x4= 0;_0x5c29x4< _0x5c29x2[_0xd587[67]];_0x5c29x4++){var _0x5c29x9=this[_0xd587[251]][_0xd587[264]](_0x5c29x2[_0x5c29x4]);if(null!= _0x5c29x9){for(_0x5c29x5= 0;_0x5c29x5< _0x5c29x9[_0xd587[67]];_0x5c29x5++){var _0x5c29xa=this[_0xd587[441]][_0xd587[248]](_0x5c29x9[_0x5c29x5]),_0x5c29x12=null!= _0x5c29xa?_0x5c29xa[_0xd587[1710]](!0):this[_0xd587[441]][_0xd587[1710]](_0x5c29x9[_0x5c29x5],!0),_0x5c29x13=null!= _0x5c29xa?_0x5c29xa[_0xd587[1710]](!1):this[_0xd587[441]][_0xd587[1710]](_0x5c29x9[_0x5c29x5],!1),_0x5c29x14=mxCellPath[_0xd587[385]](_0x5c29x12),_0x5c29x15=mxCellPath[_0xd587[385]](_0x5c29x13);(null== _0x5c29x3[_0x5c29x14]|| null== _0x5c29x3[_0x5c29x15])&& this[_0xd587[1809]](_0x5c29x9[_0x5c29x5])}};this[_0xd587[1750]](this[_0xd587[251]][_0xd587[1953]](_0x5c29x2[_0x5c29x4]))}}finally{this[_0xd587[251]][_0xd587[476]]()}}};mxGraph[_0xd587[202]][_0xd587[1809]]= function(_0x5c29x2){var _0x5c29x3=this[_0xd587[251]][_0xd587[1721]](_0x5c29x2);null!= _0x5c29x3&& (null!= _0x5c29x3[_0xd587[1525]]&& 0< _0x5c29x3[_0xd587[1525]][_0xd587[67]])&& (_0x5c29x3= _0x5c29x3[_0xd587[238]](),_0x5c29x3[_0xd587[1525]]= [],this[_0xd587[251]][_0xd587[1724]](_0x5c29x2,_0x5c29x3));return _0x5c29x2};mxGraph[_0xd587[202]][_0xd587[2538]]= function(_0x5c29x2,_0x5c29x3){return null!= _0x5c29x2&& null!= _0x5c29x2[_0xd587[253]]&& null!= _0x5c29x2[_0xd587[253]][_0xd587[1561]]?_0x5c29x2[_0xd587[253]][_0xd587[1561]][_0xd587[1531]]:null};mxGraph[_0xd587[202]][_0xd587[2288]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){_0x5c29x3= null;var _0x5c29x5=_0x5c29x2[_0xd587[124]][_0x5c29x4?mxConstants[_0xd587[2539]]:mxConstants[_0xd587[2540]]];if(null!= _0x5c29x5){var _0x5c29x9=_0x5c29x2[_0xd587[124]][_0x5c29x4?mxConstants[_0xd587[2541]]:mxConstants[_0xd587[2542]]];null!= _0x5c29x9&& (_0x5c29x3= new mxPoint(parseFloat(_0x5c29x5),parseFloat(_0x5c29x9)))};_0x5c29x5= !1;null!= _0x5c29x3&& (_0x5c29x5= mxUtils[_0xd587[433]](_0x5c29x2[_0xd587[124]],_0x5c29x4?mxConstants[_0xd587[2543]]:mxConstants[_0xd587[2544]],!0));return new mxConnectionConstraint(_0x5c29x3,_0x5c29x5)};mxGraph[_0xd587[202]][_0xd587[2545]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){if(null!= _0x5c29x5){this[_0xd587[251]][_0xd587[473]]();try{null== _0x5c29x5|| null== _0x5c29x5[_0xd587[2546]]?(this[_0xd587[1717]](_0x5c29x4?mxConstants[_0xd587[2539]]:mxConstants[_0xd587[2540]],null,[_0x5c29x2]),this[_0xd587[1717]](_0x5c29x4?mxConstants[_0xd587[2541]]:mxConstants[_0xd587[2542]],null,[_0x5c29x2]),this[_0xd587[1717]](_0x5c29x4?mxConstants[_0xd587[2543]]:mxConstants[_0xd587[2544]],null,[_0x5c29x2])):null!= _0x5c29x5[_0xd587[2546]]&& (this[_0xd587[1717]](_0x5c29x4?mxConstants[_0xd587[2539]]:mxConstants[_0xd587[2540]],_0x5c29x5[_0xd587[2546]][_0xd587[235]],[_0x5c29x2]),this[_0xd587[1717]](_0x5c29x4?mxConstants[_0xd587[2541]]:mxConstants[_0xd587[2542]],_0x5c29x5[_0xd587[2546]][_0xd587[236]],[_0x5c29x2]),_0x5c29x5[_0xd587[591]]?this[_0xd587[1717]](_0x5c29x4?mxConstants[_0xd587[2543]]:mxConstants[_0xd587[2544]],null,[_0x5c29x2]):this[_0xd587[1717]](_0x5c29x4?mxConstants[_0xd587[2543]]:mxConstants[_0xd587[2544]],_0xd587[468],[_0x5c29x2]))}finally{this[_0xd587[251]][_0xd587[476]]()}}};mxGraph[_0xd587[202]][_0xd587[2290]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=null;if(null!= _0x5c29x2){var _0x5c29x5=this[_0xd587[441]][_0xd587[2087]](_0x5c29x2),_0x5c29x9= new mxPoint(_0x5c29x5[_0xd587[241]](),_0x5c29x5[_0xd587[242]]()),_0x5c29xa=_0x5c29x2[_0xd587[124]][mxConstants[_0xd587[2011]]],_0x5c29x12=0;if(null!= _0x5c29xa&& (_0xd587[700]== _0x5c29xa?_0x5c29x12+= 270:_0xd587[703]== _0x5c29xa?_0x5c29x12+= 180:_0xd587[701]== _0x5c29xa&& (_0x5c29x12+= 90),_0xd587[700]== _0x5c29xa|| _0xd587[701]== _0x5c29xa)){_0x5c29x5[_0xd587[235]]+= _0x5c29x5[_0xd587[117]]/ 2- _0x5c29x5[_0xd587[119]]/ 2;_0x5c29x5[_0xd587[236]]+= _0x5c29x5[_0xd587[119]]/ 2- _0x5c29x5[_0xd587[117]]/ 2;var _0x5c29x13=_0x5c29x5[_0xd587[117]];_0x5c29x5[_0xd587[117]]= _0x5c29x5[_0xd587[119]];_0x5c29x5[_0xd587[119]]= _0x5c29x13};if(null!= _0x5c29x3[_0xd587[2546]]){var _0x5c29x14=_0x5c29x4= 1,_0x5c29x15=0,_0x5c29x16=0;if(this[_0xd587[502]]()[_0xd587[1193]](_0x5c29x2[_0xd587[246]])){var _0x5c29x17=_0x5c29x2[_0xd587[124]][mxConstants[_0xd587[2547]]],_0x5c29x18=_0x5c29x2[_0xd587[124]][mxConstants[_0xd587[2548]]];null!= _0x5c29x2[_0xd587[253]][_0xd587[1561]]&& (_0x5c29x17= 1== mxUtils[_0xd587[433]](_0x5c29x2[_0xd587[124]],_0xd587[1607],0)|| _0x5c29x17,_0x5c29x18= 1== mxUtils[_0xd587[433]](_0x5c29x2[_0xd587[124]],_0xd587[1608],0)|| _0x5c29x18);if(_0xd587[700]== _0x5c29xa|| _0xd587[701]== _0x5c29xa){_0x5c29x13= _0x5c29x17,_0x5c29x17= _0x5c29x18,_0x5c29x18= _0x5c29x13};_0x5c29x17&& (_0x5c29x4= -1,_0x5c29x15= -_0x5c29x5[_0xd587[117]]);_0x5c29x18&& (_0x5c29x14= -1,_0x5c29x16= -_0x5c29x5[_0xd587[119]])};_0x5c29x4= new mxPoint(_0x5c29x5[_0xd587[235]]+ _0x5c29x3[_0xd587[2546]][_0xd587[235]]* _0x5c29x5[_0xd587[117]]* _0x5c29x4- _0x5c29x15,_0x5c29x5[_0xd587[236]]+ _0x5c29x3[_0xd587[2546]][_0xd587[236]]* _0x5c29x5[_0xd587[119]]* _0x5c29x14- _0x5c29x16)};_0x5c29xa= _0x5c29x2[_0xd587[124]][mxConstants[_0xd587[2278]]]|| 0;_0x5c29x3[_0xd587[591]]?(0!= _0x5c29x12&& null!= _0x5c29x4&& (_0x5c29x13= _0x5c29x5= 0,90== _0x5c29x12?_0x5c29x13= 1:180== _0x5c29x12?_0x5c29x5= -1:270== _0x5c29xa&& (_0x5c29x13= -1),_0x5c29x4= mxUtils[_0xd587[432]](_0x5c29x4,_0x5c29x5,_0x5c29x13,_0x5c29x9)),null!= _0x5c29x4&& _0x5c29x3[_0xd587[591]]&& (_0x5c29x4= this[_0xd587[441]][_0xd587[2302]](_0x5c29x2,_0x5c29x4,!1))):_0x5c29xa+= _0x5c29x12;0!= _0x5c29xa&& null!= _0x5c29x4&& (_0x5c29x12= mxUtils[_0xd587[431]](_0x5c29xa),_0x5c29x5= Math[_0xd587[426]](_0x5c29x12),_0x5c29x13= Math[_0xd587[427]](_0x5c29x12),_0x5c29x4= mxUtils[_0xd587[432]](_0x5c29x4,_0x5c29x5,_0x5c29x13,_0x5c29x9))};return _0x5c29x4};mxGraph[_0xd587[202]][_0xd587[851]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){this[_0xd587[251]][_0xd587[473]]();try{var _0x5c29x9=this[_0xd587[251]][_0xd587[1709]](_0x5c29x2,_0x5c29x4);this[_0xd587[852]](_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5);this[_0xd587[746]]( new mxEventObject(mxEvent.CONNECT_CELL,_0xd587[1989],_0x5c29x2,_0xd587[1984],_0x5c29x3,_0xd587[1097],_0x5c29x4,_0xd587[257],_0x5c29x9))}finally{this[_0xd587[251]][_0xd587[476]]()};return _0x5c29x2};mxGraph[_0xd587[202]][_0xd587[852]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){if(null!= _0x5c29x2){this[_0xd587[251]][_0xd587[473]]();try{var _0x5c29x9=this[_0xd587[251]][_0xd587[1709]](_0x5c29x2,_0x5c29x4);this[_0xd587[2545]](_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5);this[_0xd587[2549]]()&& (_0x5c29x5= null,this[_0xd587[1908]](_0x5c29x3)&& (_0x5c29x5= _0x5c29x3[_0xd587[1103]](),_0x5c29x3= this[_0xd587[2550]](_0x5c29x3,_0x5c29x4)),this[_0xd587[1717]](_0x5c29x4?mxConstants[_0xd587[2303]]:mxConstants[_0xd587[2304]],_0x5c29x5,[_0x5c29x2]));this[_0xd587[251]][_0xd587[1957]](_0x5c29x2,_0x5c29x3,_0x5c29x4);this[_0xd587[2401]]&& this[_0xd587[1809]](_0x5c29x2);this[_0xd587[746]]( new mxEventObject(mxEvent.CELL_CONNECTED,_0xd587[1989],_0x5c29x2,_0xd587[1984],_0x5c29x3,_0xd587[1097],_0x5c29x4,_0xd587[257],_0x5c29x9))}finally{this[_0xd587[251]][_0xd587[476]]()}}};mxGraph[_0xd587[202]][_0xd587[2531]]= function(_0x5c29x2){if(null!= _0x5c29x2){this[_0xd587[251]][_0xd587[473]]();try{for(var _0x5c29x3=this[_0xd587[441]][_0xd587[255]],_0x5c29x4=this[_0xd587[441]][_0xd587[513]],_0x5c29x5={},_0x5c29x9=0;_0x5c29x9< _0x5c29x2[_0xd587[67]];_0x5c29x9++){var _0x5c29xa=mxCellPath[_0xd587[385]](_0x5c29x2[_0x5c29x9]);_0x5c29x5[_0x5c29xa]= _0x5c29x2[_0x5c29x9]};for(_0x5c29x9= 0;_0x5c29x9< _0x5c29x2[_0xd587[67]];_0x5c29x9++){if(this[_0xd587[251]][_0xd587[250]](_0x5c29x2[_0x5c29x9])){var _0x5c29x12=this[_0xd587[251]][_0xd587[1721]](_0x5c29x2[_0x5c29x9]);if(null!= _0x5c29x12){var _0x5c29x13=this[_0xd587[441]][_0xd587[248]](_0x5c29x2[_0x5c29x9]),_0x5c29x14=this[_0xd587[441]][_0xd587[248]](this[_0xd587[251]][_0xd587[1197]](_0x5c29x2[_0x5c29x9]));if(null!= _0x5c29x13&& null!= _0x5c29x14){var _0x5c29x12=_0x5c29x12[_0xd587[238]](),_0x5c29x15=-_0x5c29x14[_0xd587[2078]][_0xd587[235]],_0x5c29x16=-_0x5c29x14[_0xd587[2078]][_0xd587[236]],_0x5c29x17=_0x5c29x13[_0xd587[439]],_0x5c29x18=this[_0xd587[251]][_0xd587[1709]](_0x5c29x2[_0x5c29x9],!0);if(null!= _0x5c29x18&& this[_0xd587[2551]](_0x5c29x2[_0x5c29x9],_0x5c29x18,!0)){for(var _0x5c29x19=mxCellPath[_0xd587[385]](_0x5c29x18);null!= _0x5c29x18&& null== _0x5c29x5[_0x5c29x19];){_0x5c29x18= this[_0xd587[251]][_0xd587[1197]](_0x5c29x18),_0x5c29x19= mxCellPath[_0xd587[385]](_0x5c29x18)};null== _0x5c29x18&& (_0x5c29x12[_0xd587[2007]]( new mxPoint(_0x5c29x17[0][_0xd587[235]]/ _0x5c29x3- _0x5c29x4[_0xd587[235]]+ _0x5c29x15,_0x5c29x17[0][_0xd587[236]]/ _0x5c29x3- _0x5c29x4[_0xd587[236]]+ _0x5c29x16),!0),this[_0xd587[251]][_0xd587[1957]](_0x5c29x2[_0x5c29x9],null,!0))};var _0x5c29x1a=this[_0xd587[251]][_0xd587[1709]](_0x5c29x2[_0x5c29x9],!1);if(null!= _0x5c29x1a&& this[_0xd587[2551]](_0x5c29x2[_0x5c29x9],_0x5c29x1a,!1)){for(var _0x5c29x1b=mxCellPath[_0xd587[385]](_0x5c29x1a);null!= _0x5c29x1a&& null== _0x5c29x5[_0x5c29x1b];){_0x5c29x1a= this[_0xd587[251]][_0xd587[1197]](_0x5c29x1a),_0x5c29x1b= mxCellPath[_0xd587[385]](_0x5c29x1a)};if(null== _0x5c29x1a){var _0x5c29x1c=_0x5c29x17[_0xd587[67]]- 1;_0x5c29x12[_0xd587[2007]]( new mxPoint(_0x5c29x17[_0x5c29x1c][_0xd587[235]]/ _0x5c29x3- _0x5c29x4[_0xd587[235]]+ _0x5c29x15,_0x5c29x17[_0x5c29x1c][_0xd587[236]]/ _0x5c29x3- _0x5c29x4[_0xd587[236]]+ _0x5c29x16),!1);this[_0xd587[251]][_0xd587[1957]](_0x5c29x2[_0x5c29x9],null,!1)}};this[_0xd587[251]][_0xd587[1724]](_0x5c29x2[_0x5c29x9],_0x5c29x12)}}}}}finally{this[_0xd587[251]][_0xd587[476]]()}}};mxGraph[_0xd587[202]][_0xd587[2534]]= function(){return this[_0xd587[441]][_0xd587[1741]]};mxGraph[_0xd587[202]][_0xd587[2326]]= function(_0x5c29x2){return null};mxGraph[_0xd587[202]][_0xd587[1908]]= function(_0x5c29x2){return !1};mxGraph[_0xd587[202]][_0xd587[2550]]= function(_0x5c29x2,_0x5c29x3){return this[_0xd587[251]][_0xd587[1197]](_0x5c29x2)};mxGraph[_0xd587[202]][_0xd587[2280]]= function(_0x5c29x2){return null};mxGraph[_0xd587[202]][_0xd587[2552]]= function(_0x5c29x2){_0x5c29x2= _0x5c29x2|| this[_0xd587[2452]]();null!= _0x5c29x2&& this[_0xd587[2553]](_0x5c29x2)&& (this[_0xd587[441]][_0xd587[2257]](_0x5c29x2),this[_0xd587[2440]]())};mxGraph[_0xd587[202]][_0xd587[2554]]= function(){var _0x5c29x2=this[_0xd587[251]][_0xd587[501]](),_0x5c29x3=this[_0xd587[2534]]();if(null!= _0x5c29x3){for(var _0x5c29x4=this[_0xd587[251]][_0xd587[1197]](_0x5c29x3);_0x5c29x4!= _0x5c29x2&& !this[_0xd587[2553]](_0x5c29x4)&& this[_0xd587[251]][_0xd587[1197]](_0x5c29x4)!= _0x5c29x2;){_0x5c29x4= this[_0xd587[251]][_0xd587[1197]](_0x5c29x4)};_0x5c29x4== _0x5c29x2|| this[_0xd587[251]][_0xd587[1197]](_0x5c29x4)== _0x5c29x2?this[_0xd587[441]][_0xd587[2257]](null):this[_0xd587[441]][_0xd587[2257]](_0x5c29x4);null!= this[_0xd587[441]][_0xd587[248]](_0x5c29x3)&& this[_0xd587[2450]](_0x5c29x3)}};mxGraph[_0xd587[202]][_0xd587[2442]]= function(){var _0x5c29x2=this[_0xd587[2534]]();null!= _0x5c29x2&& (this[_0xd587[441]][_0xd587[2257]](null),null!= this[_0xd587[441]][_0xd587[248]](_0x5c29x2)&& this[_0xd587[2450]](_0x5c29x2))};mxGraph[_0xd587[202]][_0xd587[2553]]= function(_0x5c29x2){return null!= _0x5c29x2};mxGraph[_0xd587[202]][_0xd587[517]]= function(){return this[_0xd587[441]][_0xd587[517]]()};mxGraph[_0xd587[202]][_0xd587[2555]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){var _0x5c29x5=[_0x5c29x2];_0x5c29x3&& (_0x5c29x5= _0x5c29x5[_0xd587[1919]](this[_0xd587[251]][_0xd587[264]](_0x5c29x2)));_0x5c29x5= this[_0xd587[441]][_0xd587[1799]](_0x5c29x5);if(_0x5c29x4){_0x5c29x4= this[_0xd587[251]][_0xd587[262]](_0x5c29x2);for(var _0x5c29x9=0;_0x5c29x9< _0x5c29x4;_0x5c29x9++){var _0x5c29xa=this[_0xd587[2555]](this[_0xd587[251]][_0xd587[263]](_0x5c29x2,_0x5c29x9),_0x5c29x3,!0);null!= _0x5c29x5?_0x5c29x5[_0xd587[99]](_0x5c29xa):_0x5c29x5= _0x5c29xa}};return _0x5c29x5};mxGraph[_0xd587[202]][_0xd587[1729]]= function(_0x5c29x2,_0x5c29x3){_0x5c29x3= null!= _0x5c29x3?_0x5c29x3:!1;var _0x5c29x4=null;if(null!= _0x5c29x2){for(var _0x5c29x5=0;_0x5c29x5< _0x5c29x2[_0xd587[67]];_0x5c29x5++){if(_0x5c29x3|| this[_0xd587[251]][_0xd587[1193]](_0x5c29x2[_0x5c29x5])){var _0x5c29x9=this[_0xd587[1198]](_0x5c29x2[_0x5c29x5]);if(null!= _0x5c29x9){var _0x5c29xa=_0x5c29x9[_0xd587[1525]];if(null!= _0x5c29xa&& 0< _0x5c29xa[_0xd587[67]]){for(var _0x5c29x12= new mxRectangle(_0x5c29xa[0][_0xd587[235]],_0x5c29xa[0][_0xd587[236]],0,0),_0x5c29x13=function(_0x5c29x2){null!= _0x5c29x2&& _0x5c29x12[_0xd587[99]]( new mxRectangle(_0x5c29x2[_0xd587[235]],_0x5c29x2[_0xd587[236]],0,0))},_0x5c29x14=1;_0x5c29x14< _0x5c29xa[_0xd587[67]];_0x5c29x14++){_0x5c29x13(_0x5c29xa[_0x5c29x14])};_0x5c29x13(_0x5c29x9[_0xd587[2006]](!0));_0x5c29x13(_0x5c29x9[_0xd587[2006]](!1))};null== _0x5c29x4?_0x5c29x4= new mxRectangle(_0x5c29x9[_0xd587[235]],_0x5c29x9[_0xd587[236]],_0x5c29x9[_0xd587[117]],_0x5c29x9[_0xd587[119]]):_0x5c29x4[_0xd587[99]](_0x5c29x9)}}}};return _0x5c29x4};mxGraph[_0xd587[202]][_0xd587[802]]= function(_0x5c29x2){this[_0xd587[441]][_0xd587[200]](_0x5c29x2,null== _0x5c29x2);this[_0xd587[441]][_0xd587[2264]]();this[_0xd587[2258]]();this[_0xd587[746]]( new mxEventObject(mxEvent.REFRESH))};mxGraph[_0xd587[202]][_0xd587[1021]]= function(_0x5c29x2){this[_0xd587[991]]&& (_0x5c29x2= Math[_0xd587[488]](_0x5c29x2/ this[_0xd587[1020]])* this[_0xd587[1020]]);return _0x5c29x2};mxGraph[_0xd587[202]][_0xd587[1135]]= function(_0x5c29x2,_0x5c29x3){if(this[_0xd587[2365]]&& mxUtils[_0xd587[1134]](this[_0xd587[526]])){this[_0xd587[526]][_0xd587[360]]= -_0x5c29x2,this[_0xd587[526]][_0xd587[190]]= -_0x5c29x3}else {var _0x5c29x4=this[_0xd587[441]][_0xd587[2051]]();if(this[_0xd587[507]]== mxConstants[_0xd587[508]]){if(0== _0x5c29x2&& 0== _0x5c29x3){if(mxClient[_0xd587[80]]?_0x5c29x4[_0xd587[57]](_0xd587[535],_0xd587[536]+ _0x5c29x2+ _0xd587[537]+ _0x5c29x3+ _0xd587[460]):_0x5c29x4[_0xd587[1390]](_0xd587[535]),null!= this[_0xd587[2556]]){for(var _0x5c29x5=this[_0xd587[2556]][_0xd587[285]];null!= _0x5c29x5;){var _0x5c29x9=_0x5c29x5[_0xd587[287]];this[_0xd587[526]][_0xd587[62]](_0x5c29x5);_0x5c29x5= _0x5c29x9};this[_0xd587[2556]][_0xd587[265]][_0xd587[266]](this[_0xd587[2556]]);this[_0xd587[2556]]= null;this[_0xd587[526]][_0xd587[62]](_0x5c29x4[_0xd587[265]]);for(_0x5c29x5= this[_0xd587[2557]][_0xd587[285]];null!= _0x5c29x5;){_0x5c29x9= _0x5c29x5[_0xd587[287]],this[_0xd587[526]][_0xd587[62]](_0x5c29x5),_0x5c29x5= _0x5c29x9};this[_0xd587[2557]][_0xd587[265]][_0xd587[266]](this[_0xd587[2557]]);this[_0xd587[2557]]= null}}else {_0x5c29x4[_0xd587[57]](_0xd587[535],_0xd587[536]+ _0x5c29x2+ _0xd587[537]+ _0x5c29x3+ _0xd587[460]);if(null== this[_0xd587[2556]]){this[_0xd587[2556]]= document[_0xd587[55]](_0xd587[485]);this[_0xd587[2556]][_0xd587[124]][_0xd587[491]]= _0xd587[492];this[_0xd587[2556]][_0xd587[124]][_0xd587[277]]= _0xd587[189];this[_0xd587[2557]]= document[_0xd587[55]](_0xd587[485]);this[_0xd587[2557]][_0xd587[124]][_0xd587[491]]= _0xd587[492];this[_0xd587[2557]][_0xd587[124]][_0xd587[277]]= _0xd587[189];for(var _0x5c29xa=this[_0xd587[2556]],_0x5c29x5=this[_0xd587[526]][_0xd587[285]];null!= _0x5c29x5;){_0x5c29x9= _0x5c29x5[_0xd587[287]],_0x5c29x5!= _0x5c29x4[_0xd587[265]]?_0x5c29xa[_0xd587[62]](_0x5c29x5):_0x5c29xa= this[_0xd587[2557]],_0x5c29x5= _0x5c29x9};this[_0xd587[526]][_0xd587[950]](this[_0xd587[2556]],_0x5c29x4[_0xd587[265]]);this[_0xd587[526]][_0xd587[62]](this[_0xd587[2557]])};this[_0xd587[2556]][_0xd587[124]][_0xd587[361]]= _0x5c29x2+ _0xd587[168];this[_0xd587[2556]][_0xd587[124]][_0xd587[125]]= _0x5c29x3+ _0xd587[168];this[_0xd587[2557]][_0xd587[124]][_0xd587[361]]= _0x5c29x2+ _0xd587[168];this[_0xd587[2557]][_0xd587[124]][_0xd587[125]]= _0x5c29x3+ _0xd587[168]}}else {_0x5c29x4[_0xd587[124]][_0xd587[361]]= _0x5c29x2+ _0xd587[168],_0x5c29x4[_0xd587[124]][_0xd587[125]]= _0x5c29x3+ _0xd587[168]};this[_0xd587[1136]]= _0x5c29x2;this[_0xd587[1137]]= _0x5c29x3;this[_0xd587[746]]( new mxEventObject(mxEvent.PAN))}};mxGraph[_0xd587[202]][_0xd587[2558]]= function(){this[_0xd587[499]](this[_0xd587[2395]])};mxGraph[_0xd587[202]][_0xd587[2559]]= function(){this[_0xd587[499]](1/ this[_0xd587[2395]])};mxGraph[_0xd587[202]][_0xd587[2560]]= function(){1== this[_0xd587[441]][_0xd587[255]]?this[_0xd587[441]][_0xd587[1147]](0,0):(this[_0xd587[441]][_0xd587[513]][_0xd587[235]]= 0,this[_0xd587[441]][_0xd587[513]][_0xd587[236]]= 0,this[_0xd587[441]][_0xd587[2262]](1))};mxGraph[_0xd587[202]][_0xd587[2561]]= function(_0x5c29x2,_0x5c29x3){this[_0xd587[499]](_0x5c29x2/ this[_0xd587[441]][_0xd587[255]],_0x5c29x3)};mxGraph[_0xd587[202]][_0xd587[499]]= function(_0x5c29x2,_0x5c29x3){_0x5c29x3= null!= _0x5c29x3?_0x5c29x3:this[_0xd587[2397]];var _0x5c29x4=this[_0xd587[441]][_0xd587[255]]* _0x5c29x2,_0x5c29x5=this[_0xd587[441]][_0xd587[248]](this[_0xd587[2452]]());if(this[_0xd587[2396]]&& null!= _0x5c29x5){_0x5c29x5= new mxRectangle(_0x5c29x5[_0xd587[235]]* _0x5c29x2,_0x5c29x5[_0xd587[236]]* _0x5c29x2,_0x5c29x5[_0xd587[117]]* _0x5c29x2,_0x5c29x5[_0xd587[119]]* _0x5c29x2),this[_0xd587[441]][_0xd587[255]]= _0x5c29x4,this[_0xd587[2562]](_0x5c29x5)|| (this[_0xd587[441]][_0xd587[2259]](),this[_0xd587[441]][_0xd587[2262]](_0x5c29x4))}else {if(_0x5c29x3&& !mxUtils[_0xd587[1134]](this[_0xd587[526]])){var _0x5c29x5=this[_0xd587[526]][_0xd587[359]],_0x5c29x9=this[_0xd587[526]][_0xd587[167]];if(1< _0x5c29x2){var _0x5c29xa=(_0x5c29x2- 1)/ (2* _0x5c29x4),_0x5c29x5=_0x5c29x5* -_0x5c29xa,_0x5c29x9=_0x5c29x9* -_0x5c29xa}else {_0x5c29xa= (1/ _0x5c29x2- 1)/ (2* this[_0xd587[441]][_0xd587[255]]),_0x5c29x5*= _0x5c29xa,_0x5c29x9*= _0x5c29xa};this[_0xd587[441]][_0xd587[829]](_0x5c29x4,this[_0xd587[441]][_0xd587[513]][_0xd587[235]]+ _0x5c29x5,this[_0xd587[441]][_0xd587[513]][_0xd587[236]]+ _0x5c29x9)}else {this[_0xd587[441]][_0xd587[2262]](_0x5c29x4),mxUtils[_0xd587[1134]](this[_0xd587[526]])&& (_0x5c29x9= _0x5c29x5= 0,_0x5c29x3&& (_0x5c29x5= this[_0xd587[526]][_0xd587[359]]* (_0x5c29x2- 1)/ 2,_0x5c29x9= this[_0xd587[526]][_0xd587[167]]* (_0x5c29x2- 1)/ 2),this[_0xd587[526]][_0xd587[360]]= Math[_0xd587[488]](this[_0xd587[526]][_0xd587[360]]* _0x5c29x2+ _0x5c29x5),this[_0xd587[526]][_0xd587[190]]= Math[_0xd587[488]](this[_0xd587[526]][_0xd587[190]]* _0x5c29x2+ _0x5c29x9))}}};mxGraph[_0xd587[202]][_0xd587[2563]]= function(_0x5c29x2){var _0x5c29x3=this[_0xd587[526]][_0xd587[159]]/ _0x5c29x2[_0xd587[117]]/ (this[_0xd587[526]][_0xd587[157]]/ _0x5c29x2[_0xd587[119]]);_0x5c29x2[_0xd587[235]]= Math[_0xd587[160]](0,_0x5c29x2[_0xd587[235]]);_0x5c29x2[_0xd587[236]]= Math[_0xd587[160]](0,_0x5c29x2[_0xd587[236]]);var _0x5c29x4=Math[_0xd587[243]](this[_0xd587[526]][_0xd587[1526]],_0x5c29x2[_0xd587[235]]+ _0x5c29x2[_0xd587[117]]),_0x5c29x5=Math[_0xd587[243]](this[_0xd587[526]][_0xd587[191]],_0x5c29x2[_0xd587[236]]+ _0x5c29x2[_0xd587[119]]);_0x5c29x2[_0xd587[117]]= _0x5c29x4- _0x5c29x2[_0xd587[235]];_0x5c29x2[_0xd587[119]]= _0x5c29x5- _0x5c29x2[_0xd587[236]];1> _0x5c29x3?(_0x5c29x3= _0x5c29x2[_0xd587[119]]/ _0x5c29x3,_0x5c29x4= (_0x5c29x3- _0x5c29x2[_0xd587[119]])/ 2,_0x5c29x2[_0xd587[119]]= _0x5c29x3,_0x5c29x3= Math[_0xd587[243]](_0x5c29x2[_0xd587[236]],_0x5c29x4),_0x5c29x2[_0xd587[236]]-= _0x5c29x3,_0x5c29x5= Math[_0xd587[243]](this[_0xd587[526]][_0xd587[191]],_0x5c29x2[_0xd587[236]]+ _0x5c29x2[_0xd587[119]]),_0x5c29x2[_0xd587[119]]= _0x5c29x5- _0x5c29x2[_0xd587[236]]):(_0x5c29x3*= _0x5c29x2[_0xd587[117]],_0x5c29x4= (_0x5c29x3- _0x5c29x2[_0xd587[117]])/ 2,_0x5c29x2[_0xd587[117]]= _0x5c29x3,_0x5c29x3= Math[_0xd587[243]](_0x5c29x2[_0xd587[235]],_0x5c29x4),_0x5c29x2[_0xd587[235]]-= _0x5c29x3,_0x5c29x4= Math[_0xd587[243]](this[_0xd587[526]][_0xd587[1526]],_0x5c29x2[_0xd587[235]]+ _0x5c29x2[_0xd587[117]]),_0x5c29x2[_0xd587[117]]= _0x5c29x4- _0x5c29x2[_0xd587[235]]);_0x5c29x3= this[_0xd587[526]][_0xd587[159]]/ _0x5c29x2[_0xd587[117]];_0x5c29x4= this[_0xd587[441]][_0xd587[255]]* _0x5c29x3;mxUtils[_0xd587[1134]](this[_0xd587[526]])?(this[_0xd587[441]][_0xd587[2262]](_0x5c29x4),this[_0xd587[526]][_0xd587[360]]= Math[_0xd587[488]](_0x5c29x2[_0xd587[235]]* _0x5c29x3),this[_0xd587[526]][_0xd587[190]]= Math[_0xd587[488]](_0x5c29x2[_0xd587[236]]* _0x5c29x3)):this[_0xd587[441]][_0xd587[829]](_0x5c29x4,this[_0xd587[441]][_0xd587[513]][_0xd587[235]]- _0x5c29x2[_0xd587[235]]/ this[_0xd587[441]][_0xd587[255]],this[_0xd587[441]][_0xd587[513]][_0xd587[236]]- _0x5c29x2[_0xd587[236]]/ this[_0xd587[441]][_0xd587[255]])};mxGraph[_0xd587[202]][_0xd587[933]]= function(_0x5c29x2,_0x5c29x3){if(null!= this[_0xd587[526]]){_0x5c29x2= null!= _0x5c29x2?_0x5c29x2:0;_0x5c29x3= null!= _0x5c29x3?_0x5c29x3:!1;var _0x5c29x4=this[_0xd587[526]][_0xd587[159]],_0x5c29x5=this[_0xd587[526]][_0xd587[157]],_0x5c29x9=this[_0xd587[441]][_0xd587[517]]();_0x5c29x3&& (null!= _0x5c29x9[_0xd587[235]]&& null!= _0x5c29x9[_0xd587[236]])&& (_0x5c29x9[_0xd587[117]]+= _0x5c29x9[_0xd587[235]],_0x5c29x9[_0xd587[119]]+= _0x5c29x9[_0xd587[236]],_0x5c29x9[_0xd587[235]]= 0,_0x5c29x9[_0xd587[236]]= 0);var _0x5c29xa=this[_0xd587[441]][_0xd587[255]],_0x5c29x12=_0x5c29x9[_0xd587[117]]/ _0x5c29xa,_0x5c29x13=_0x5c29x9[_0xd587[119]]/ _0x5c29xa;null!= this[_0xd587[1617]]&& (_0x5c29x12= Math[_0xd587[160]](_0x5c29x12,this[_0xd587[1617]][_0xd587[117]]- _0x5c29x9[_0xd587[235]]/ _0x5c29xa),_0x5c29x13= Math[_0xd587[160]](_0x5c29x13,this[_0xd587[1617]][_0xd587[119]]- _0x5c29x9[_0xd587[236]]/ _0x5c29xa));var _0x5c29x14=_0x5c29x3?_0x5c29x2:2* _0x5c29x2,_0x5c29x4=Math[_0xd587[519]](100* Math[_0xd587[243]](_0x5c29x4/ (_0x5c29x12+ _0x5c29x14),_0x5c29x5/ (_0x5c29x13+ _0x5c29x14)))/ 100;null!= this[_0xd587[2413]]&& (_0x5c29x4= Math[_0xd587[160]](_0x5c29x4,this[_0xd587[2413]]));null!= this[_0xd587[2414]]&& (_0x5c29x4= Math[_0xd587[243]](_0x5c29x4,this[_0xd587[2414]]));_0x5c29x3?this[_0xd587[441]][_0xd587[255]]!= _0x5c29x4&& this[_0xd587[441]][_0xd587[2262]](_0x5c29x4):mxUtils[_0xd587[1134]](this[_0xd587[526]])?(this[_0xd587[441]][_0xd587[2262]](_0x5c29x4),null!= _0x5c29x9[_0xd587[235]]&& (this[_0xd587[526]][_0xd587[360]]= Math[_0xd587[488]](_0x5c29x9[_0xd587[235]]/ _0x5c29xa)* _0x5c29x4- _0x5c29x2- Math[_0xd587[160]](0,(this[_0xd587[526]][_0xd587[159]]- _0x5c29x12* _0x5c29x4)/ 2)),null!= _0x5c29x9[_0xd587[236]]&& (this[_0xd587[526]][_0xd587[190]]= Math[_0xd587[488]](_0x5c29x9[_0xd587[236]]/ _0x5c29xa)* _0x5c29x4- _0x5c29x2- Math[_0xd587[160]](0,(this[_0xd587[526]][_0xd587[157]]- _0x5c29x13* _0x5c29x4)/ 2))):this[_0xd587[441]][_0xd587[829]](_0x5c29x4,null!= _0x5c29x9[_0xd587[235]]?Math[_0xd587[519]](this[_0xd587[441]][_0xd587[513]][_0xd587[235]]- _0x5c29x9[_0xd587[235]]/ _0x5c29xa+ _0x5c29x2+ 1):_0x5c29x2,null!= _0x5c29x9[_0xd587[236]]?Math[_0xd587[519]](this[_0xd587[441]][_0xd587[513]][_0xd587[236]]- _0x5c29x9[_0xd587[236]]/ _0x5c29xa+ _0x5c29x2+ 1):_0x5c29x2)};return this[_0xd587[441]][_0xd587[255]]};mxGraph[_0xd587[202]][_0xd587[2564]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=-this[_0xd587[441]][_0xd587[513]][_0xd587[235]],_0x5c29x5=-this[_0xd587[441]][_0xd587[513]][_0xd587[236]],_0x5c29x9=this[_0xd587[441]][_0xd587[248]](_0x5c29x2);null!= _0x5c29x9&& (_0x5c29x4= new mxRectangle(_0x5c29x4+ _0x5c29x9[_0xd587[235]],_0x5c29x5+ _0x5c29x9[_0xd587[236]],_0x5c29x9[_0xd587[117]],_0x5c29x9[_0xd587[119]]),_0x5c29x3&& null!= this[_0xd587[526]]&& (_0x5c29x5= this[_0xd587[526]][_0xd587[159]],_0x5c29x9= this[_0xd587[526]][_0xd587[157]],_0x5c29x4[_0xd587[235]]= _0x5c29x4[_0xd587[241]]()- _0x5c29x5/ 2,_0x5c29x4[_0xd587[117]]= _0x5c29x5,_0x5c29x4[_0xd587[236]]= _0x5c29x4[_0xd587[242]]()- _0x5c29x9/ 2,_0x5c29x4[_0xd587[119]]= _0x5c29x9),this[_0xd587[2562]](_0x5c29x4)&& this[_0xd587[441]][_0xd587[1147]](this[_0xd587[441]][_0xd587[513]][_0xd587[235]],this[_0xd587[441]][_0xd587[513]][_0xd587[236]]))};mxGraph[_0xd587[202]][_0xd587[2562]]= function(_0x5c29x2){var _0x5c29x3=!1;if(null!= _0x5c29x2){var _0x5c29x4=this[_0xd587[526]][_0xd587[359]],_0x5c29x5=this[_0xd587[526]][_0xd587[167]],_0x5c29x9=Math[_0xd587[243]](_0x5c29x4,_0x5c29x2[_0xd587[117]]),_0x5c29xa=Math[_0xd587[243]](_0x5c29x5,_0x5c29x2[_0xd587[119]]);if(mxUtils[_0xd587[1134]](this[_0xd587[526]])){_0x5c29x4= this[_0xd587[526]];_0x5c29x2[_0xd587[235]]+= this[_0xd587[441]][_0xd587[513]][_0xd587[235]];_0x5c29x2[_0xd587[236]]+= this[_0xd587[441]][_0xd587[513]][_0xd587[236]];var _0x5c29x12=_0x5c29x4[_0xd587[360]]- _0x5c29x2[_0xd587[235]],_0x5c29x5=Math[_0xd587[160]](_0x5c29x12- _0x5c29x4[_0xd587[360]],0);0< _0x5c29x12?_0x5c29x4[_0xd587[360]]-= _0x5c29x12+ 2:(_0x5c29x12= _0x5c29x2[_0xd587[235]]+ _0x5c29x9- _0x5c29x4[_0xd587[360]]- _0x5c29x4[_0xd587[159]],0< _0x5c29x12&& (_0x5c29x4[_0xd587[360]]+= _0x5c29x12+ 2));_0x5c29x9= _0x5c29x4[_0xd587[190]]- _0x5c29x2[_0xd587[236]];_0x5c29x12= Math[_0xd587[160]](0,_0x5c29x9- _0x5c29x4[_0xd587[190]]);0< _0x5c29x9?_0x5c29x4[_0xd587[190]]-= _0x5c29x9+ 2:(_0x5c29x9= _0x5c29x2[_0xd587[236]]+ _0x5c29xa- _0x5c29x4[_0xd587[190]]- _0x5c29x4[_0xd587[157]],0< _0x5c29x9&& (_0x5c29x4[_0xd587[190]]+= _0x5c29x9+ 2));!this[_0xd587[2365]]&& (0!= _0x5c29x5|| 0!= _0x5c29x12)&& this[_0xd587[441]][_0xd587[1147]](_0x5c29x5,_0x5c29x12)}else {var _0x5c29x12=-this[_0xd587[441]][_0xd587[513]][_0xd587[235]],_0x5c29x13=-this[_0xd587[441]][_0xd587[513]][_0xd587[236]],_0x5c29x14=this[_0xd587[441]][_0xd587[255]];_0x5c29x2[_0xd587[235]]+ _0x5c29x9> _0x5c29x12+ _0x5c29x4&& (this[_0xd587[441]][_0xd587[513]][_0xd587[235]]-= (_0x5c29x2[_0xd587[235]]+ _0x5c29x9- _0x5c29x4- _0x5c29x12)/ _0x5c29x14,_0x5c29x3= !0);_0x5c29x2[_0xd587[236]]+ _0x5c29xa> _0x5c29x13+ _0x5c29x5&& (this[_0xd587[441]][_0xd587[513]][_0xd587[236]]-= (_0x5c29x2[_0xd587[236]]+ _0x5c29xa- _0x5c29x5- _0x5c29x13)/ _0x5c29x14,_0x5c29x3= !0);_0x5c29x2[_0xd587[235]]< _0x5c29x12&& (this[_0xd587[441]][_0xd587[513]][_0xd587[235]]+= (_0x5c29x12- _0x5c29x2[_0xd587[235]])/ _0x5c29x14,_0x5c29x3= !0);_0x5c29x2[_0xd587[236]]< _0x5c29x13&& (this[_0xd587[441]][_0xd587[513]][_0xd587[236]]+= (_0x5c29x13- _0x5c29x2[_0xd587[236]])/ _0x5c29x14,_0x5c29x3= !0);_0x5c29x3&& (this[_0xd587[441]][_0xd587[802]](),null!= this[_0xd587[2432]]&& this[_0xd587[2432]][_0xd587[802]]())}};return _0x5c29x3};mxGraph[_0xd587[202]][_0xd587[1198]]= function(_0x5c29x2){return this[_0xd587[251]][_0xd587[1721]](_0x5c29x2)};mxGraph[_0xd587[202]][_0xd587[1714]]= function(_0x5c29x2){return this[_0xd587[251]][_0xd587[174]](_0x5c29x2)};mxGraph[_0xd587[202]][_0xd587[1742]]= function(_0x5c29x2){return this[_0xd587[251]][_0xd587[1971]](_0x5c29x2)};mxGraph[_0xd587[202]][_0xd587[2565]]= function(_0x5c29x2){return this[_0xd587[251]][_0xd587[1965]](_0x5c29x2)};mxGraph[_0xd587[202]][_0xd587[2298]]= function(_0x5c29x2){var _0x5c29x3=_0x5c29x2[_0xd587[124]][mxConstants[_0xd587[2566]]];if(null!= _0x5c29x3){return _0x5c29x3};_0x5c29x2= this[_0xd587[441]][_0xd587[2291]](_0x5c29x2);return _0x5c29x2== mxEdgeStyle[_0xd587[2567]]|| _0x5c29x2== mxEdgeStyle[_0xd587[2568]]|| _0x5c29x2== mxEdgeStyle[_0xd587[2569]]|| _0x5c29x2== mxEdgeStyle[_0xd587[2570]]|| _0x5c29x2== mxEdgeStyle[_0xd587[2571]]|| _0x5c29x2== mxEdgeStyle[_0xd587[2572]]};mxGraph[_0xd587[202]][_0xd587[2573]]= function(_0x5c29x2){var _0x5c29x3=_0x5c29x2[_0xd587[2089]](!0);_0x5c29x2= _0x5c29x2[_0xd587[2089]](!1);return null!= _0x5c29x3&& _0x5c29x3== _0x5c29x2};mxGraph[_0xd587[202]][_0xd587[2574]]= function(_0x5c29x2){return mxEvent[_0xd587[775]](_0x5c29x2)};mxGraph[_0xd587[202]][_0xd587[2462]]= function(_0x5c29x2){return mxClient[_0xd587[2575]]?mxEvent[_0xd587[2576]](_0x5c29x2):mxEvent[_0xd587[775]](_0x5c29x2)};mxGraph[_0xd587[202]][_0xd587[1018]]= function(_0x5c29x2){return null!= _0x5c29x2&& !mxEvent[_0xd587[2577]](_0x5c29x2)};mxGraph[_0xd587[202]][_0xd587[2578]]= function(_0x5c29x2){return mxEvent[_0xd587[774]](_0x5c29x2)};mxGraph[_0xd587[202]][_0xd587[2579]]= function(_0x5c29x2){return mxEvent[_0xd587[2577]](_0x5c29x2)};mxGraph[_0xd587[202]][_0xd587[2580]]= function(_0x5c29x2){mxUtils[_0xd587[150]](_0x5c29x2)};mxGraph[_0xd587[202]][_0xd587[2581]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){return null== this[_0xd587[2500]](_0x5c29x2,_0x5c29x3,_0x5c29x4)};mxGraph[_0xd587[202]][_0xd587[2500]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){if(null!= _0x5c29x2&& !this[_0xd587[2530]]()&& (null== _0x5c29x3|| null== _0x5c29x4)){return _0xd587[110]};if(null!= _0x5c29x2&& null== this[_0xd587[251]][_0xd587[1709]](_0x5c29x2,!0)&& null== this[_0xd587[251]][_0xd587[1709]](_0x5c29x2,!1)){return null};if(!this[_0xd587[2402]]&& _0x5c29x3== _0x5c29x4&& null!= _0x5c29x3|| !this[_0xd587[2582]](_0x5c29x3,_0x5c29x4)){return _0xd587[110]};if(null!= _0x5c29x3&& null!= _0x5c29x4){var _0x5c29x5=_0xd587[110];if(!this[_0xd587[2404]]){var _0x5c29x9=this[_0xd587[251]][_0xd587[1781]](_0x5c29x3,_0x5c29x4,!0);if(1< _0x5c29x9[_0xd587[67]]|| 1== _0x5c29x9[_0xd587[67]]&& _0x5c29x9[0]!= _0x5c29x2){_0x5c29x5+= (mxResources[_0xd587[203]](this[_0xd587[2421]])|| this[_0xd587[2421]])+ _0xd587[192]}};var _0x5c29x9=this[_0xd587[251]][_0xd587[1962]](_0x5c29x3,!0,_0x5c29x2),_0x5c29xa=this[_0xd587[251]][_0xd587[1962]](_0x5c29x4,!1,_0x5c29x2);if(null!= this[_0xd587[2335]]){for(var _0x5c29x12=0;_0x5c29x12< this[_0xd587[2335]][_0xd587[67]];_0x5c29x12++){var _0x5c29x13=this[_0xd587[2335]][_0x5c29x12][_0xd587[2583]](this,_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x9,_0x5c29xa);null!= _0x5c29x13&& (_0x5c29x5+= _0x5c29x13)}};_0x5c29x13= this[_0xd587[2584]](_0x5c29x2,_0x5c29x3,_0x5c29x4);null!= _0x5c29x13&& (_0x5c29x5+= _0x5c29x13);return 0< _0x5c29x5[_0xd587[67]]?_0x5c29x5:null};return this[_0xd587[2406]]?null:_0xd587[110]};mxGraph[_0xd587[202]][_0xd587[2584]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){return null};mxGraph[_0xd587[202]][_0xd587[2585]]= function(_0x5c29x2,_0x5c29x3){_0x5c29x2= null!= _0x5c29x2?_0x5c29x2:this[_0xd587[251]][_0xd587[501]]();_0x5c29x3= null!= _0x5c29x3?_0x5c29x3:{};for(var _0x5c29x4=!0,_0x5c29x5=this[_0xd587[251]][_0xd587[262]](_0x5c29x2),_0x5c29x9=0;_0x5c29x9< _0x5c29x5;_0x5c29x9++){var _0x5c29xa=this[_0xd587[251]][_0xd587[263]](_0x5c29x2,_0x5c29x9),_0x5c29x12=_0x5c29x3;this[_0xd587[2553]](_0x5c29xa)&& (_0x5c29x12= {});_0x5c29x12= this[_0xd587[2585]](_0x5c29xa,_0x5c29x12);null!= _0x5c29x12?this[_0xd587[2447]](_0x5c29xa,_0x5c29x12[_0xd587[230]](/\n/g,_0xd587[545])):this[_0xd587[2447]](_0x5c29xa,null);_0x5c29x4= _0x5c29x4&& null== _0x5c29x12};_0x5c29x5= _0xd587[110];this[_0xd587[1742]](_0x5c29x2)&& !_0x5c29x4&& (_0x5c29x5+= (mxResources[_0xd587[203]](this[_0xd587[2423]])|| this[_0xd587[2423]])+ _0xd587[192]);_0x5c29x5= this[_0xd587[251]][_0xd587[250]](_0x5c29x2)?_0x5c29x5+ (this[_0xd587[2500]](_0x5c29x2,this[_0xd587[251]][_0xd587[1709]](_0x5c29x2,!0),this[_0xd587[251]][_0xd587[1709]](_0x5c29x2,!1))|| _0xd587[110]):_0x5c29x5+ (this[_0xd587[2586]](_0x5c29x2)|| _0xd587[110]);_0x5c29x9= this[_0xd587[2587]](_0x5c29x2,_0x5c29x3);null!= _0x5c29x9&& (_0x5c29x5+= _0x5c29x9);null== this[_0xd587[251]][_0xd587[1197]](_0x5c29x2)&& this[_0xd587[441]][_0xd587[2264]]();return 0< _0x5c29x5[_0xd587[67]]|| !_0x5c29x4?_0x5c29x5:null};mxGraph[_0xd587[202]][_0xd587[2586]]= function(_0x5c29x2){var _0x5c29x3=this[_0xd587[251]][_0xd587[1962]](_0x5c29x2,!0),_0x5c29x4=this[_0xd587[251]][_0xd587[1962]](_0x5c29x2,!1);_0x5c29x2= this[_0xd587[251]][_0xd587[433]](_0x5c29x2);var _0x5c29x5=_0xd587[110];if(null!= this[_0xd587[2335]]){for(var _0x5c29x9=0;_0x5c29x9< this[_0xd587[2335]][_0xd587[67]];_0x5c29x9++){var _0x5c29xa=this[_0xd587[2335]][_0x5c29x9];if(_0x5c29xa[_0xd587[1097]]&& mxUtils[_0xd587[1331]](_0x5c29x2,_0x5c29xa[_0xd587[60]],_0x5c29xa[_0xd587[2588]],_0x5c29xa[_0xd587[131]])&& (0== _0x5c29xa[_0xd587[160]]&& 0< _0x5c29x3|| 1== _0x5c29xa[_0xd587[243]]&& 0== _0x5c29x3|| 1== _0x5c29xa[_0xd587[160]]&& 1< _0x5c29x3)){_0x5c29x5+= _0x5c29xa[_0xd587[2589]]+ _0xd587[192]}else {if(!_0x5c29xa[_0xd587[1097]]&& mxUtils[_0xd587[1331]](_0x5c29x2,_0x5c29xa[_0xd587[60]],_0x5c29xa[_0xd587[2588]],_0x5c29xa[_0xd587[131]])&& (0== _0x5c29xa[_0xd587[160]]&& 0< _0x5c29x4|| 1== _0x5c29xa[_0xd587[243]]&& 0== _0x5c29x4|| 1== _0x5c29xa[_0xd587[160]]&& 1< _0x5c29x4)){_0x5c29x5+= _0x5c29xa[_0xd587[2589]]+ _0xd587[192]}}}};return 0< _0x5c29x5[_0xd587[67]]?_0x5c29x5:null};mxGraph[_0xd587[202]][_0xd587[2587]]= function(_0x5c29x2,_0x5c29x3){return null};mxGraph[_0xd587[202]][_0xd587[2271]]= function(){return this[_0xd587[1617]]};mxGraph[_0xd587[202]][_0xd587[2590]]= function(_0x5c29x2){this[_0xd587[1617]]= _0x5c29x2};mxGraph[_0xd587[202]][_0xd587[2205]]= function(_0x5c29x2){if(null!= _0x5c29x2&& this[_0xd587[2206]]&& !this[_0xd587[502]]()[_0xd587[250]](_0x5c29x2[_0xd587[246]])){var _0x5c29x3=this[_0xd587[1742]](_0x5c29x2[_0xd587[246]]);if(this[_0xd587[2516]](_0x5c29x2[_0xd587[246]],!_0x5c29x3)){return _0x5c29x3?this[_0xd587[2415]]:this[_0xd587[2417]]}};return null};mxGraph[_0xd587[202]][_0xd587[2454]]= function(_0x5c29x2){_0x5c29x2= this[_0xd587[251]][_0xd587[433]](_0x5c29x2);if(null!= _0x5c29x2){if(mxUtils[_0xd587[1331]](_0x5c29x2)){return _0x5c29x2[_0xd587[301]]};if(_0xd587[279]== typeof _0x5c29x2[_0xd587[2591]]){return _0x5c29x2.toString()}};return _0xd587[110]};mxGraph[_0xd587[202]][_0xd587[2183]]= function(_0x5c29x2){var _0x5c29x3=_0xd587[110];if(this[_0xd587[2409]]&& null!= _0x5c29x2){var _0x5c29x4=this[_0xd587[441]][_0xd587[248]](_0x5c29x2),_0x5c29x4=null!= _0x5c29x4?_0x5c29x4[_0xd587[124]]:this[_0xd587[1705]](_0x5c29x2);mxUtils[_0xd587[433]](_0x5c29x4,mxConstants.STYLE_NOLABEL,!1)|| (_0x5c29x3= this[_0xd587[2454]](_0x5c29x2))};return _0x5c29x3};mxGraph[_0xd587[202]][_0xd587[2186]]= function(_0x5c29x2){return this[_0xd587[2592]]()};mxGraph[_0xd587[202]][_0xd587[2592]]= function(){return this[_0xd587[2410]]};mxGraph[_0xd587[202]][_0xd587[2593]]= function(_0x5c29x2){this[_0xd587[2410]]= _0x5c29x2};mxGraph[_0xd587[202]][_0xd587[2131]]= function(_0x5c29x2){var _0x5c29x3=this[_0xd587[441]][_0xd587[248]](_0x5c29x2);_0x5c29x2= null!= _0x5c29x3?_0x5c29x3[_0xd587[124]]:this[_0xd587[1705]](_0x5c29x2);return null!= _0x5c29x2?_0xd587[1333]== _0x5c29x2[mxConstants[_0xd587[2594]]]:!1};mxGraph[_0xd587[202]][_0xd587[2130]]= function(_0x5c29x2){var _0x5c29x3=this[_0xd587[441]][_0xd587[248]](_0x5c29x2);_0x5c29x2= null!= _0x5c29x3?_0x5c29x3[_0xd587[124]]:this[_0xd587[1705]](_0x5c29x2);return null!= _0x5c29x2?_0xd587[188]== _0x5c29x2[mxConstants[_0xd587[2193]]]:!1};mxGraph[_0xd587[202]][_0xd587[2595]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){var _0x5c29x9=null;if(null!= _0x5c29x2){if(null!= _0x5c29x2[_0xd587[2207]]&& (_0x5c29x3== _0x5c29x2[_0xd587[2207]][_0xd587[252]]|| _0x5c29x3[_0xd587[265]]== _0x5c29x2[_0xd587[2207]][_0xd587[252]])){_0x5c29x9= this[_0xd587[2425]],_0x5c29x9= mxResources[_0xd587[203]](_0x5c29x9)|| _0x5c29x9};null== _0x5c29x9&& null!= _0x5c29x2[_0xd587[1211]]&& _0x5c29x2[_0xd587[1211]][_0xd587[209]](function(_0x5c29x2,_0x5c29x4){if(null== _0x5c29x9&& (_0x5c29x3== _0x5c29x4[_0xd587[252]]|| _0x5c29x3[_0xd587[265]]== _0x5c29x4[_0xd587[252]])){_0x5c29x9= _0x5c29x4[_0xd587[2201]].toString()}});null== _0x5c29x9&& (_0x5c29x4= this[_0xd587[2432]][_0xd587[2596]](_0x5c29x2[_0xd587[246]]),null!= _0x5c29x4&& _0xd587[279]== typeof _0x5c29x4[_0xd587[2597]]&& (_0x5c29x9= _0x5c29x4[_0xd587[2597]](_0x5c29x3)));null== _0x5c29x9&& (_0x5c29x9= this[_0xd587[2598]](_0x5c29x2[_0xd587[246]]))};return _0x5c29x9};mxGraph[_0xd587[202]][_0xd587[2598]]= function(_0x5c29x2){var _0x5c29x3=null;return _0x5c29x3= null!= _0x5c29x2&& null!= _0x5c29x2[_0xd587[2595]]?_0x5c29x2[_0xd587[2595]]():this[_0xd587[2454]](_0x5c29x2)};mxGraph[_0xd587[202]][_0xd587[2599]]= function(_0x5c29x2){return null};mxGraph[_0xd587[202]][_0xd587[1731]]= function(_0x5c29x2){var _0x5c29x3= new mxRectangle,_0x5c29x4=this[_0xd587[441]][_0xd587[248]](_0x5c29x2);_0x5c29x2= null!= _0x5c29x4?_0x5c29x4[_0xd587[124]]:this[_0xd587[1705]](_0x5c29x2);null!= _0x5c29x2&& (_0x5c29x4= parseInt(mxUtils[_0xd587[433]](_0x5c29x2,mxConstants.STYLE_STARTSIZE,mxConstants.DEFAULT_STARTSIZE)),mxUtils[_0xd587[433]](_0x5c29x2,mxConstants.STYLE_HORIZONTAL,!0)?_0x5c29x3[_0xd587[119]]= _0x5c29x4:_0x5c29x3[_0xd587[117]]= _0x5c29x4);return _0x5c29x3};mxGraph[_0xd587[202]][_0xd587[1202]]= function(_0x5c29x2){return null!= _0x5c29x2&& null!= _0x5c29x2[_0xd587[124]]?_0x5c29x2[_0xd587[124]][mxConstants[_0xd587[2484]]]:null};mxGraph[_0xd587[202]][_0xd587[2187]]= function(_0x5c29x2){return null!= _0x5c29x2&& null!= _0x5c29x2[_0xd587[124]]?_0x5c29x2[_0xd587[124]][mxConstants[_0xd587[2063]]]|| mxConstants[_0xd587[481]]:null};mxGraph[_0xd587[202]][_0xd587[2173]]= function(_0x5c29x2){return null!= _0x5c29x2&& null!= _0x5c29x2[_0xd587[124]]?_0x5c29x2[_0xd587[124]][mxConstants[_0xd587[2600]]]:null};mxGraph[_0xd587[202]][_0xd587[2174]]= function(_0x5c29x2){return null!= _0x5c29x2&& null!= _0x5c29x2[_0xd587[124]]?_0x5c29x2[_0xd587[124]][mxConstants[_0xd587[2601]]]:null};mxGraph[_0xd587[202]][_0xd587[2172]]= function(_0x5c29x2){return null!= _0x5c29x2&& null!= _0x5c29x2[_0xd587[124]]?_0x5c29x2[_0xd587[124]][mxConstants[_0xd587[2602]]]:null};mxGraph[_0xd587[202]][_0xd587[2176]]= function(_0x5c29x2){return null!= _0x5c29x2&& null!= _0x5c29x2[_0xd587[124]]?_0x5c29x2[_0xd587[124]][mxConstants[_0xd587[2603]]]:null};mxGraph[_0xd587[202]][_0xd587[2476]]= function(){return this[_0xd587[467]]};mxGraph[_0xd587[202]][_0xd587[2604]]= function(_0x5c29x2){this[_0xd587[467]]= _0x5c29x2};mxGraph[_0xd587[202]][_0xd587[1730]]= function(_0x5c29x2){if(null!= _0x5c29x2&& this[_0xd587[251]][_0xd587[1197]](_0x5c29x2)!= this[_0xd587[251]][_0xd587[501]]()){var _0x5c29x3=this[_0xd587[441]][_0xd587[248]](_0x5c29x2),_0x5c29x3=null!= _0x5c29x3?_0x5c29x3[_0xd587[124]]:this[_0xd587[1705]](_0x5c29x2);if(null!= _0x5c29x3&& !this[_0xd587[251]][_0xd587[250]](_0x5c29x2)){return _0x5c29x3[mxConstants[_0xd587[2059]]]== mxConstants[_0xd587[2605]]}};return !1};mxGraph[_0xd587[202]][_0xd587[2606]]= function(){return this[_0xd587[2389]]};mxGraph[_0xd587[202]][_0xd587[2607]]= function(_0x5c29x2){this[_0xd587[2389]]= _0x5c29x2};mxGraph[_0xd587[202]][_0xd587[994]]= function(){return this[_0xd587[984]]};mxGraph[_0xd587[202]][_0xd587[995]]= function(_0x5c29x2){this[_0xd587[984]]= _0x5c29x2};mxGraph[_0xd587[202]][_0xd587[2608]]= function(){return this[_0xd587[2362]]};mxGraph[_0xd587[202]][_0xd587[2609]]= function(_0x5c29x2){this[_0xd587[2362]]= _0x5c29x2};mxGraph[_0xd587[202]][_0xd587[2134]]= function(){return this[_0xd587[2363]]};mxGraph[_0xd587[202]][_0xd587[2610]]= function(_0x5c29x2){this[_0xd587[2363]]= _0x5c29x2};mxGraph[_0xd587[202]][_0xd587[2125]]= function(){return this[_0xd587[2364]]};mxGraph[_0xd587[202]][_0xd587[2611]]= function(_0x5c29x2){this[_0xd587[2364]]= _0x5c29x2};mxGraph[_0xd587[202]][_0xd587[2612]]= function(_0x5c29x2){var _0x5c29x3=this[_0xd587[251]][_0xd587[1721]](_0x5c29x2);return this[_0xd587[2613]]()|| null!= _0x5c29x3&& this[_0xd587[251]][_0xd587[1193]](_0x5c29x2)&& _0x5c29x3[_0xd587[1500]]};mxGraph[_0xd587[202]][_0xd587[2613]]= function(){return this[_0xd587[2368]]};mxGraph[_0xd587[202]][_0xd587[2614]]= function(_0x5c29x2){this[_0xd587[2368]]= _0x5c29x2};mxGraph[_0xd587[202]][_0xd587[2615]]= function(_0x5c29x2){return this[_0xd587[251]][_0xd587[1938]](_0x5c29x2,mxUtils[_0xd587[885]](this,function(_0x5c29x2){return this[_0xd587[2616]](_0x5c29x2)}))};mxGraph[_0xd587[202]][_0xd587[2616]]= function(_0x5c29x2){var _0x5c29x3=this[_0xd587[441]][_0xd587[248]](_0x5c29x2);_0x5c29x2= null!= _0x5c29x3?_0x5c29x3[_0xd587[124]]:this[_0xd587[1705]](_0x5c29x2);return this[_0xd587[2617]]()&& 0!= _0x5c29x2[mxConstants[_0xd587[2618]]]};mxGraph[_0xd587[202]][_0xd587[2617]]= function(){return this[_0xd587[2369]]};mxGraph[_0xd587[202]][_0xd587[2619]]= function(_0x5c29x2){this[_0xd587[2369]]= _0x5c29x2};mxGraph[_0xd587[202]][_0xd587[898]]= function(_0x5c29x2){return this[_0xd587[251]][_0xd587[1938]](_0x5c29x2,mxUtils[_0xd587[885]](this,function(_0x5c29x2){return this[_0xd587[2620]](_0x5c29x2)}))};mxGraph[_0xd587[202]][_0xd587[2620]]= function(_0x5c29x2){return this[_0xd587[2366]]};mxGraph[_0xd587[202]][_0xd587[900]]= function(_0x5c29x2){return this[_0xd587[251]][_0xd587[1938]](_0x5c29x2,mxUtils[_0xd587[885]](this,function(_0x5c29x2){return this[_0xd587[2621]](_0x5c29x2)}))};mxGraph[_0xd587[202]][_0xd587[2621]]= function(_0x5c29x2){return this[_0xd587[2367]]};mxGraph[_0xd587[202]][_0xd587[2102]]= function(_0x5c29x2){return this[_0xd587[2622]]()};mxGraph[_0xd587[202]][_0xd587[2622]]= function(){return this[_0xd587[2379]]};mxGraph[_0xd587[202]][_0xd587[2623]]= function(_0x5c29x2){this[_0xd587[2379]]= _0x5c29x2};mxGraph[_0xd587[202]][_0xd587[2510]]= function(_0x5c29x2){return this[_0xd587[251]][_0xd587[1938]](_0x5c29x2,mxUtils[_0xd587[885]](this,function(_0x5c29x2){return this[_0xd587[2624]](_0x5c29x2)}))};mxGraph[_0xd587[202]][_0xd587[2624]]= function(_0x5c29x2){var _0x5c29x3=this[_0xd587[441]][_0xd587[248]](_0x5c29x2);_0x5c29x2= null!= _0x5c29x3?_0x5c29x3[_0xd587[124]]:this[_0xd587[1705]](_0x5c29x2);return this[_0xd587[2625]]()&& 0!= _0x5c29x2[mxConstants[_0xd587[2626]]]};mxGraph[_0xd587[202]][_0xd587[2625]]= function(){return this[_0xd587[2371]]};mxGraph[_0xd587[202]][_0xd587[2627]]= function(_0x5c29x2){this[_0xd587[2371]]= _0x5c29x2};mxGraph[_0xd587[202]][_0xd587[2628]]= function(_0x5c29x2){return !this[_0xd587[2612]](_0x5c29x2)&& (this[_0xd587[251]][_0xd587[250]](_0x5c29x2)&& this[_0xd587[2373]]|| this[_0xd587[251]][_0xd587[1193]](_0x5c29x2)&& this[_0xd587[2374]])};mxGraph[_0xd587[202]][_0xd587[2629]]= function(_0x5c29x2){return this[_0xd587[251]][_0xd587[1938]](_0x5c29x2,mxUtils[_0xd587[885]](this,function(_0x5c29x2){return this[_0xd587[1712]](_0x5c29x2)}))};mxGraph[_0xd587[202]][_0xd587[1712]]= function(_0x5c29x2){var _0x5c29x3=this[_0xd587[441]][_0xd587[248]](_0x5c29x2),_0x5c29x3=null!= _0x5c29x3?_0x5c29x3[_0xd587[124]]:this[_0xd587[1705]](_0x5c29x2);return this[_0xd587[2630]]()&& !this[_0xd587[2612]](_0x5c29x2)&& 0!= _0x5c29x3[mxConstants[_0xd587[2631]]]};mxGraph[_0xd587[202]][_0xd587[2630]]= function(){return this[_0xd587[2372]]};mxGraph[_0xd587[202]][_0xd587[2632]]= function(_0x5c29x2){this[_0xd587[2372]]= _0x5c29x2};mxGraph[_0xd587[202]][_0xd587[997]]= function(){return this[_0xd587[991]]};mxGraph[_0xd587[202]][_0xd587[998]]= function(_0x5c29x2){this[_0xd587[991]]= _0x5c29x2};mxGraph[_0xd587[202]][_0xd587[2549]]= function(){return this[_0xd587[2348]]};mxGraph[_0xd587[202]][_0xd587[2633]]= function(_0x5c29x2){this[_0xd587[2348]]= _0x5c29x2};mxGraph[_0xd587[202]][_0xd587[2634]]= function(){return this[_0xd587[1020]]};mxGraph[_0xd587[202]][_0xd587[2635]]= function(_0x5c29x2){this[_0xd587[1020]]= _0x5c29x2};mxGraph[_0xd587[202]][_0xd587[2636]]= function(){return this[_0xd587[2353]]};mxGraph[_0xd587[202]][_0xd587[2637]]= function(_0x5c29x2){this[_0xd587[2353]]= _0x5c29x2};mxGraph[_0xd587[202]][_0xd587[2638]]= function(){return this[_0xd587[2374]]};mxGraph[_0xd587[202]][_0xd587[2639]]= function(_0x5c29x2){this[_0xd587[2374]]= _0x5c29x2};mxGraph[_0xd587[202]][_0xd587[2640]]= function(){return this[_0xd587[2373]]};mxGraph[_0xd587[202]][_0xd587[2641]]= function(_0x5c29x2){this[_0xd587[2373]]= _0x5c29x2};mxGraph[_0xd587[202]][_0xd587[2642]]= function(){return this[_0xd587[2412]]};mxGraph[_0xd587[202]][_0xd587[2643]]= function(_0x5c29x2){this[_0xd587[2412]]= _0x5c29x2};mxGraph[_0xd587[202]][_0xd587[2460]]= function(){return this[_0xd587[2411]]};mxGraph[_0xd587[202]][_0xd587[2644]]= function(_0x5c29x2){this[_0xd587[2411]]= _0x5c29x2};mxGraph[_0xd587[202]][_0xd587[2645]]= function(){return this[_0xd587[2404]]};mxGraph[_0xd587[202]][_0xd587[2646]]= function(_0x5c29x2){this[_0xd587[2404]]= _0x5c29x2};mxGraph[_0xd587[202]][_0xd587[2647]]= function(){return this[_0xd587[2402]]};mxGraph[_0xd587[202]][_0xd587[2648]]= function(_0x5c29x2){this[_0xd587[2406]]= _0x5c29x2};mxGraph[_0xd587[202]][_0xd587[2530]]= function(){return this[_0xd587[2406]]};mxGraph[_0xd587[202]][_0xd587[2649]]= function(_0x5c29x2){this[_0xd587[2405]]= _0x5c29x2};mxGraph[_0xd587[202]][_0xd587[2650]]= function(){return this[_0xd587[2405]]};mxGraph[_0xd587[202]][_0xd587[2651]]= function(_0x5c29x2){this[_0xd587[2407]]= _0x5c29x2};mxGraph[_0xd587[202]][_0xd587[2527]]= function(){return this[_0xd587[2407]]};mxGraph[_0xd587[202]][_0xd587[2652]]= function(_0x5c29x2){this[_0xd587[2402]]= _0x5c29x2};mxGraph[_0xd587[202]][_0xd587[2529]]= function(){return this[_0xd587[2408]]};mxGraph[_0xd587[202]][_0xd587[2653]]= function(_0x5c29x2){this[_0xd587[2408]]= _0x5c29x2};mxGraph[_0xd587[202]][_0xd587[1015]]= function(){return this[_0xd587[2375]]};mxGraph[_0xd587[202]][_0xd587[2654]]= function(_0x5c29x2){this[_0xd587[2375]]= _0x5c29x2};mxGraph[_0xd587[202]][_0xd587[2655]]= function(){return this[_0xd587[2376]]};mxGraph[_0xd587[202]][_0xd587[2656]]= function(_0x5c29x2){this[_0xd587[2376]]= _0x5c29x2};mxGraph[_0xd587[202]][_0xd587[2657]]= function(_0x5c29x2){var _0x5c29x3=this[_0xd587[441]][_0xd587[248]](_0x5c29x2),_0x5c29x3=null!= _0x5c29x3?_0x5c29x3[_0xd587[124]]:this[_0xd587[1705]](_0x5c29x2);return this[_0xd587[2658]]()&& !this[_0xd587[2612]](_0x5c29x2)&& 0!= _0x5c29x3[mxConstants[_0xd587[2659]]]};mxGraph[_0xd587[202]][_0xd587[2658]]= function(){return this[_0xd587[2377]]};mxGraph[_0xd587[202]][_0xd587[2660]]= function(_0x5c29x2){this[_0xd587[2377]]= _0x5c29x2};mxGraph[_0xd587[202]][_0xd587[2661]]= function(_0x5c29x2,_0x5c29x3){return !0};mxGraph[_0xd587[202]][_0xd587[2662]]= function(_0x5c29x2){var _0x5c29x3=this[_0xd587[441]][_0xd587[248]](_0x5c29x2),_0x5c29x3=null!= _0x5c29x3?_0x5c29x3[_0xd587[124]]:this[_0xd587[1705]](_0x5c29x2);return this[_0xd587[2663]]()&& !this[_0xd587[2612]](_0x5c29x2)&& 0!= _0x5c29x3[mxConstants[_0xd587[2664]]]};mxGraph[_0xd587[202]][_0xd587[2663]]= function(){return this[_0xd587[2378]]};mxGraph[_0xd587[202]][_0xd587[2665]]= function(_0x5c29x2){this[_0xd587[2378]]= _0x5c29x2};mxGraph[_0xd587[202]][_0xd587[2453]]= function(_0x5c29x2){var _0x5c29x3=this[_0xd587[441]][_0xd587[248]](_0x5c29x2),_0x5c29x3=null!= _0x5c29x3?_0x5c29x3[_0xd587[124]]:this[_0xd587[1705]](_0x5c29x2);return this[_0xd587[2666]]()&& !this[_0xd587[2612]](_0x5c29x2)&& 0!= _0x5c29x3[mxConstants[_0xd587[2667]]]};mxGraph[_0xd587[202]][_0xd587[2666]]= function(){return this[_0xd587[2370]]};mxGraph[_0xd587[202]][_0xd587[2668]]= function(_0x5c29x2){this[_0xd587[2370]]= _0x5c29x2};mxGraph[_0xd587[202]][_0xd587[2551]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){return this[_0xd587[2669]]()&& !this[_0xd587[2612]](_0x5c29x2)};mxGraph[_0xd587[202]][_0xd587[2669]]= function(){return this[_0xd587[2380]]};mxGraph[_0xd587[202]][_0xd587[2670]]= function(_0x5c29x2){this[_0xd587[2380]]= _0x5c29x2};mxGraph[_0xd587[202]][_0xd587[2671]]= function(_0x5c29x2){return null== _0x5c29x2&& this[_0xd587[2406]]|| null!= _0x5c29x2&& (!this[_0xd587[251]][_0xd587[250]](_0x5c29x2)|| this[_0xd587[2405]])&& this[_0xd587[2565]](_0x5c29x2)};mxGraph[_0xd587[202]][_0xd587[2672]]= function(_0x5c29x2){return this[_0xd587[2671]](_0x5c29x2)};mxGraph[_0xd587[202]][_0xd587[2582]]= function(_0x5c29x2,_0x5c29x3){return this[_0xd587[2671]](_0x5c29x2)&& this[_0xd587[2672]](_0x5c29x3)};mxGraph[_0xd587[202]][_0xd587[1995]]= function(_0x5c29x2){this[_0xd587[2433]][_0xd587[995]](_0x5c29x2)};mxGraph[_0xd587[202]][_0xd587[1965]]= function(_0x5c29x2){return this[_0xd587[2433]][_0xd587[994]]()};mxGraph[_0xd587[202]][_0xd587[2673]]= function(_0x5c29x2){this[_0xd587[2276]][_0xd587[995]](_0x5c29x2)};mxGraph[_0xd587[202]][_0xd587[2674]]= function(_0x5c29x2){this[_0xd587[2316]][_0xd587[2431]]= _0x5c29x2};mxGraph[_0xd587[202]][_0xd587[2203]]= function(_0x5c29x2){if(null!= this[_0xd587[2347]]){var _0x5c29x3=this[_0xd587[2347]][_0xd587[2148]]();return null== _0x5c29x2?null!= _0x5c29x3:_0x5c29x2== _0x5c29x3};return !1};mxGraph[_0xd587[202]][_0xd587[2455]]= function(_0x5c29x2){var _0x5c29x3=this[_0xd587[441]][_0xd587[248]](_0x5c29x2);_0x5c29x2= null!= _0x5c29x3?_0x5c29x3[_0xd587[124]]:this[_0xd587[1705]](_0x5c29x2);return this[_0xd587[2675]]()|| 1== _0x5c29x2[mxConstants[_0xd587[2676]]]};mxGraph[_0xd587[202]][_0xd587[2675]]= function(){return this[_0xd587[2381]]};mxGraph[_0xd587[202]][_0xd587[2677]]= function(_0x5c29x2){this[_0xd587[2381]]= _0x5c29x2};mxGraph[_0xd587[202]][_0xd587[2507]]= function(_0x5c29x2){return !this[_0xd587[502]]()[_0xd587[250]](_0x5c29x2)&& this[_0xd587[2678]]()};mxGraph[_0xd587[202]][_0xd587[2678]]= function(){return this[_0xd587[2392]]};mxGraph[_0xd587[202]][_0xd587[2679]]= function(_0x5c29x2){this[_0xd587[2392]]= _0x5c29x2};mxGraph[_0xd587[202]][_0xd587[2506]]= function(){return this[_0xd587[2393]]};mxGraph[_0xd587[202]][_0xd587[2680]]= function(_0x5c29x2){this[_0xd587[2393]]= _0x5c29x2};mxGraph[_0xd587[202]][_0xd587[2536]]= function(_0x5c29x2){return this[_0xd587[2681]]()&& !this[_0xd587[502]]()[_0xd587[250]](this[_0xd587[502]]()[_0xd587[1197]](_0x5c29x2))};mxGraph[_0xd587[202]][_0xd587[2681]]= function(){return this[_0xd587[2391]]};mxGraph[_0xd587[202]][_0xd587[2682]]= function(_0x5c29x2){this[_0xd587[2391]]= _0x5c29x2};mxGraph[_0xd587[202]][_0xd587[2505]]= function(){return this[_0xd587[2390]]};mxGraph[_0xd587[202]][_0xd587[2528]]= function(_0x5c29x2){this[_0xd587[2390]]= _0x5c29x2};mxGraph[_0xd587[202]][_0xd587[2537]]= function(_0x5c29x2){return this[_0xd587[2683]](_0x5c29x2)?this[_0xd587[2354]]:0};mxGraph[_0xd587[202]][_0xd587[2683]]= function(_0x5c29x2){return !1};mxGraph[_0xd587[202]][_0xd587[2513]]= function(_0x5c29x2,_0x5c29x3){return this[_0xd587[251]][_0xd587[1938]](_0x5c29x2,mxUtils[_0xd587[885]](this,function(_0x5c29x2){return this[_0xd587[2516]](_0x5c29x2,_0x5c29x3)}))};mxGraph[_0xd587[202]][_0xd587[2516]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=this[_0xd587[441]][_0xd587[248]](_0x5c29x2),_0x5c29x4=null!= _0x5c29x4?_0x5c29x4[_0xd587[124]]:this[_0xd587[1705]](_0x5c29x2);return 0< this[_0xd587[251]][_0xd587[262]](_0x5c29x2)&& 0!= _0x5c29x4[mxConstants[_0xd587[2684]]]};mxGraph[_0xd587[202]][_0xd587[2685]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){return null!= _0x5c29x2&& (this[_0xd587[2655]]()&& this[_0xd587[2686]](_0x5c29x2,_0x5c29x3,_0x5c29x4)|| !this[_0xd587[251]][_0xd587[250]](_0x5c29x2)&& (this[_0xd587[1730]](_0x5c29x2)|| 0< this[_0xd587[251]][_0xd587[262]](_0x5c29x2)&& !this[_0xd587[1742]](_0x5c29x2)))};mxGraph[_0xd587[202]][_0xd587[2686]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){return this[_0xd587[251]][_0xd587[250]](_0x5c29x2)&& null!= _0x5c29x3&& 1== _0x5c29x3[_0xd587[67]]&& this[_0xd587[2565]](_0x5c29x3[0])&& null== this[_0xd587[2500]](_0x5c29x2,this[_0xd587[251]][_0xd587[1709]](_0x5c29x2,!0),_0x5c29x3[0])?(_0x5c29x4= this[_0xd587[251]][_0xd587[1709]](_0x5c29x2,!0),_0x5c29x2= this[_0xd587[251]][_0xd587[1709]](_0x5c29x2,!1),!this[_0xd587[251]][_0xd587[1720]](_0x5c29x3[0],_0x5c29x4)&& !this[_0xd587[251]][_0xd587[1720]](_0x5c29x3[0],_0x5c29x2)):!1};mxGraph[_0xd587[202]][_0xd587[564]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){if(!this[_0xd587[2642]]()){for(var _0x5c29x5=0;_0x5c29x5< _0x5c29x2[_0xd587[67]];_0x5c29x5++){if(this[_0xd587[1730]](_0x5c29x2[_0x5c29x5])){return null}}};_0x5c29x5= mxUtils[_0xd587[2196]](this[_0xd587[526]],mxEvent[_0xd587[731]](_0x5c29x3),mxEvent[_0xd587[733]](_0x5c29x3));_0x5c29x5[_0xd587[235]]-= this[_0xd587[1136]];_0x5c29x5[_0xd587[236]]-= this[_0xd587[1137]];_0x5c29x5= this[_0xd587[2461]](_0x5c29x5[_0xd587[235]],_0x5c29x5[_0xd587[236]]);if(null== _0x5c29x4){_0x5c29x4= _0x5c29x5}else {if(null!= _0x5c29x5){for(var _0x5c29x9=this[_0xd587[251]][_0xd587[1197]](_0x5c29x5);null!= _0x5c29x9&& this[_0xd587[1730]](_0x5c29x9)&& _0x5c29x9!= _0x5c29x4;){_0x5c29x9= this[_0xd587[251]][_0xd587[1197]](_0x5c29x9)};_0x5c29x9== _0x5c29x4&& (_0x5c29x4= _0x5c29x5)}};for(;null!= _0x5c29x4&& !this[_0xd587[2685]](_0x5c29x4,_0x5c29x2,_0x5c29x3)&& !this[_0xd587[251]][_0xd587[1740]](_0x5c29x4);){_0x5c29x4= this[_0xd587[251]][_0xd587[1197]](_0x5c29x4)};return !this[_0xd587[251]][_0xd587[1740]](_0x5c29x4)&& 0> mxUtils[_0xd587[2]](_0x5c29x2,_0x5c29x4)?_0x5c29x4:null};mxGraph[_0xd587[202]][_0xd587[902]]= function(){var _0x5c29x2=this[_0xd587[2355]];null== _0x5c29x2&& (_0x5c29x2= this[_0xd587[2534]](),null== _0x5c29x2&& (_0x5c29x2= this[_0xd587[251]][_0xd587[501]](),_0x5c29x2= this[_0xd587[251]][_0xd587[263]](_0x5c29x2,0)));return _0x5c29x2};mxGraph[_0xd587[202]][_0xd587[2687]]= function(_0x5c29x2){this[_0xd587[2355]]= _0x5c29x2};mxGraph[_0xd587[202]][_0xd587[2179]]= function(_0x5c29x2){for(;null!= _0x5c29x2&& !this[_0xd587[1730]](_0x5c29x2);){_0x5c29x2= this[_0xd587[251]][_0xd587[1197]](_0x5c29x2)};return _0x5c29x2};mxGraph[_0xd587[202]][_0xd587[2461]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){_0x5c29x4= _0x5c29x4|| this[_0xd587[902]]();if(null!= _0x5c29x4){for(var _0x5c29x5=this[_0xd587[251]][_0xd587[262]](_0x5c29x4),_0x5c29x9=0;_0x5c29x9< _0x5c29x5;_0x5c29x9++){var _0x5c29xa=this[_0xd587[251]][_0xd587[263]](_0x5c29x4,_0x5c29x9),_0x5c29x12=this[_0xd587[2461]](_0x5c29x2,_0x5c29x3,_0x5c29xa);if(null!= _0x5c29x12){return _0x5c29x12};if(this[_0xd587[1730]](_0x5c29xa)&& (_0x5c29x12= this[_0xd587[441]][_0xd587[248]](_0x5c29xa),this[_0xd587[1825]](_0x5c29x12,_0x5c29x2,_0x5c29x3))){return _0x5c29xa}}};return null};mxGraph[_0xd587[202]][_0xd587[999]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){_0x5c29x5= null!= _0x5c29x5?_0x5c29x5:!0;_0x5c29x9= null!= _0x5c29x9?_0x5c29x9:!0;_0x5c29x4= null!= _0x5c29x4?_0x5c29x4:this[_0xd587[902]]();if(null!= _0x5c29x4){for(var _0x5c29xa=this[_0xd587[251]][_0xd587[262]](_0x5c29x4)- 1;0<= _0x5c29xa;_0x5c29xa--){var _0x5c29x12=this[_0xd587[251]][_0xd587[263]](_0x5c29x4,_0x5c29xa),_0x5c29x13=this[_0xd587[999]](_0x5c29x2,_0x5c29x3,_0x5c29x12,_0x5c29x5,_0x5c29x9);if(null!= _0x5c29x13){return _0x5c29x13};if(this[_0xd587[1714]](_0x5c29x12)&& (_0x5c29x9&& this[_0xd587[251]][_0xd587[250]](_0x5c29x12)|| _0x5c29x5&& this[_0xd587[251]][_0xd587[1193]](_0x5c29x12))){if(_0x5c29x13= this[_0xd587[441]][_0xd587[248]](_0x5c29x12),this[_0xd587[1825]](_0x5c29x13,_0x5c29x2,_0x5c29x3)){return _0x5c29x12}}}};return null};mxGraph[_0xd587[202]][_0xd587[1825]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){if(null!= _0x5c29x2){var _0x5c29x5=_0x5c29x2[_0xd587[439]];if(null!= _0x5c29x5){_0x5c29x2= this[_0xd587[2353]]* this[_0xd587[2353]];for(var _0x5c29x9=_0x5c29x5[0],_0x5c29xa=1;_0x5c29xa< _0x5c29x5[_0xd587[67]];_0x5c29xa++){var _0x5c29x12=_0x5c29x5[_0x5c29xa];if(mxUtils[_0xd587[440]](_0x5c29x9[_0xd587[235]],_0x5c29x9[_0xd587[236]],_0x5c29x12[_0xd587[235]],_0x5c29x12[_0xd587[236]],_0x5c29x3,_0x5c29x4)<= _0x5c29x2){return !0};_0x5c29x9= _0x5c29x12}}else {if(_0x5c29x9= mxUtils[_0xd587[431]](mxUtils[_0xd587[433]](_0x5c29x2[_0xd587[124]],mxConstants.STYLE_ROTATION)|| 0),0!= _0x5c29x9&& (_0x5c29x5= Math[_0xd587[426]](-_0x5c29x9),_0x5c29x9= Math[_0xd587[427]](-_0x5c29x9),_0x5c29xa= new mxPoint(_0x5c29x2[_0xd587[241]](),_0x5c29x2[_0xd587[242]]()),_0x5c29x9= mxUtils[_0xd587[432]]( new mxPoint(_0x5c29x3,_0x5c29x4),_0x5c29x5,_0x5c29x9,_0x5c29xa),_0x5c29x3= _0x5c29x9[_0xd587[235]],_0x5c29x4= _0x5c29x9[_0xd587[236]]),mxUtils[_0xd587[442]](_0x5c29x2,_0x5c29x3,_0x5c29x4)){return !0}}};return !1};mxGraph[_0xd587[202]][_0xd587[2688]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){var _0x5c29x5=this[_0xd587[249]]()[_0xd587[248]](_0x5c29x2);_0x5c29x2= this[_0xd587[1731]](_0x5c29x2);if(null!= _0x5c29x5){var _0x5c29x9=this[_0xd587[249]]()[_0xd587[518]]();_0x5c29x3-= _0x5c29x5[_0xd587[235]];_0x5c29x4-= _0x5c29x5[_0xd587[236]];if(0< _0x5c29x2[_0xd587[117]]&& 0< _0x5c29x3&& _0x5c29x3> _0x5c29x2[_0xd587[117]]* _0x5c29x9|| 0< _0x5c29x2[_0xd587[119]]&& 0< _0x5c29x4&& _0x5c29x4> _0x5c29x2[_0xd587[119]]* _0x5c29x9){return !0}};return !1};mxGraph[_0xd587[202]][_0xd587[1728]]= function(_0x5c29x2){return this[_0xd587[1955]](_0x5c29x2,!0,!1)};mxGraph[_0xd587[202]][_0xd587[1956]]= function(_0x5c29x2){return this[_0xd587[1955]](_0x5c29x2,!1,!0)};mxGraph[_0xd587[202]][_0xd587[1955]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){_0x5c29x2= null!= _0x5c29x2?_0x5c29x2:this[_0xd587[902]]();_0x5c29x2= this[_0xd587[251]][_0xd587[1955]](_0x5c29x2,null!= _0x5c29x3?_0x5c29x3:!1,null!= _0x5c29x4?_0x5c29x4:!1);_0x5c29x3= [];for(_0x5c29x4= 0;_0x5c29x4< _0x5c29x2[_0xd587[67]];_0x5c29x4++){this[_0xd587[1714]](_0x5c29x2[_0x5c29x4])&& _0x5c29x3[_0xd587[207]](_0x5c29x2[_0x5c29x4])};return _0x5c29x3};mxGraph[_0xd587[202]][_0xd587[1756]]= function(_0x5c29x2,_0x5c29x3){return this[_0xd587[264]](_0x5c29x2,_0x5c29x3,!0,!0,!1)};mxGraph[_0xd587[202]][_0xd587[1867]]= function(_0x5c29x2,_0x5c29x3){return this[_0xd587[264]](_0x5c29x2,_0x5c29x3,!0,!1,!1)};mxGraph[_0xd587[202]][_0xd587[1963]]= function(_0x5c29x2,_0x5c29x3){return this[_0xd587[264]](_0x5c29x2,_0x5c29x3,!1,!0,!1)};mxGraph[_0xd587[202]][_0xd587[264]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa){_0x5c29x4= null!= _0x5c29x4?_0x5c29x4:!0;_0x5c29x5= null!= _0x5c29x5?_0x5c29x5:!0;_0x5c29x9= null!= _0x5c29x9?_0x5c29x9:!0;_0x5c29xa= null!= _0x5c29xa?_0x5c29xa:!1;for(var _0x5c29x12=[],_0x5c29x13=this[_0xd587[1742]](_0x5c29x2),_0x5c29x14=this[_0xd587[251]][_0xd587[262]](_0x5c29x2),_0x5c29x15=0;_0x5c29x15< _0x5c29x14;_0x5c29x15++){var _0x5c29x16=this[_0xd587[251]][_0xd587[263]](_0x5c29x2,_0x5c29x15);if(_0x5c29x13|| !this[_0xd587[1714]](_0x5c29x16)){_0x5c29x12= _0x5c29x12[_0xd587[1919]](this[_0xd587[251]][_0xd587[264]](_0x5c29x16,_0x5c29x4,_0x5c29x5))}};_0x5c29x12= _0x5c29x12[_0xd587[1919]](this[_0xd587[251]][_0xd587[264]](_0x5c29x2,_0x5c29x4,_0x5c29x5));_0x5c29x13= [];for(_0x5c29x15= 0;_0x5c29x15< _0x5c29x12[_0xd587[67]];_0x5c29x15++){_0x5c29x16= this[_0xd587[441]][_0xd587[248]](_0x5c29x12[_0x5c29x15]),_0x5c29x14= null!= _0x5c29x16?_0x5c29x16[_0xd587[1710]](!0):this[_0xd587[441]][_0xd587[1710]](_0x5c29x12[_0x5c29x15],!0),_0x5c29x16= null!= _0x5c29x16?_0x5c29x16[_0xd587[1710]](!1):this[_0xd587[441]][_0xd587[1710]](_0x5c29x12[_0x5c29x15],!1),(_0x5c29x9&& _0x5c29x14== _0x5c29x16|| _0x5c29x14!= _0x5c29x16&& (_0x5c29x4&& _0x5c29x16== _0x5c29x2&& (null== _0x5c29x3|| this[_0xd587[1920]](_0x5c29x14,_0x5c29x3,_0x5c29xa))|| _0x5c29x5&& _0x5c29x14== _0x5c29x2&& (null== _0x5c29x3|| this[_0xd587[1920]](_0x5c29x16,_0x5c29x3,_0x5c29xa))))&& _0x5c29x13[_0xd587[207]](_0x5c29x12[_0x5c29x15])};return _0x5c29x13};mxGraph[_0xd587[202]][_0xd587[1920]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){return _0x5c29x4?this[_0xd587[251]][_0xd587[1720]](_0x5c29x3,_0x5c29x2):this[_0xd587[251]][_0xd587[1197]](_0x5c29x2)== _0x5c29x3};mxGraph[_0xd587[202]][_0xd587[1808]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){_0x5c29x4= null!= _0x5c29x4?_0x5c29x4:!0;_0x5c29x5= null!= _0x5c29x5?_0x5c29x5:!0;var _0x5c29x9=[],_0x5c29xa={};if(null!= _0x5c29x2){for(var _0x5c29x12=0;_0x5c29x12< _0x5c29x2[_0xd587[67]];_0x5c29x12++){var _0x5c29x13=this[_0xd587[441]][_0xd587[248]](_0x5c29x2[_0x5c29x12]),_0x5c29x14=null!= _0x5c29x13?_0x5c29x13[_0xd587[1710]](!0):this[_0xd587[441]][_0xd587[1710]](_0x5c29x2[_0x5c29x12],!0),_0x5c29x13=null!= _0x5c29x13?_0x5c29x13[_0xd587[1710]](!1):this[_0xd587[441]][_0xd587[1710]](_0x5c29x2[_0x5c29x12],!1);if(_0x5c29x14== _0x5c29x3&& null!= _0x5c29x13&& _0x5c29x13!= _0x5c29x3&& _0x5c29x5){var _0x5c29x15=mxCellPath[_0xd587[385]](_0x5c29x13);null== _0x5c29xa[_0x5c29x15]&& (_0x5c29xa[_0x5c29x15]= _0x5c29x13,_0x5c29x9[_0xd587[207]](_0x5c29x13))}else {_0x5c29x13== _0x5c29x3&& (null!= _0x5c29x14&& _0x5c29x14!= _0x5c29x3&& _0x5c29x4)&& (_0x5c29x15= mxCellPath[_0xd587[385]](_0x5c29x14),null== _0x5c29xa[_0x5c29x15]&& (_0x5c29xa[_0x5c29x15]= _0x5c29x14,_0x5c29x9[_0xd587[207]](_0x5c29x14)))}}};return _0x5c29x9};mxGraph[_0xd587[202]][_0xd587[1781]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){_0x5c29x4= null!= _0x5c29x4?_0x5c29x4:!1;for(var _0x5c29x5=this[_0xd587[264]](_0x5c29x2),_0x5c29x9=[],_0x5c29xa=0;_0x5c29xa< _0x5c29x5[_0xd587[67]];_0x5c29xa++){var _0x5c29x12=this[_0xd587[441]][_0xd587[248]](_0x5c29x5[_0x5c29xa]),_0x5c29x13=null!= _0x5c29x12?_0x5c29x12[_0xd587[1710]](!0):this[_0xd587[441]][_0xd587[1710]](_0x5c29x5[_0x5c29xa],!0),_0x5c29x12=null!= _0x5c29x12?_0x5c29x12[_0xd587[1710]](!1):this[_0xd587[441]][_0xd587[1710]](_0x5c29x5[_0x5c29xa],!1);(_0x5c29x13== _0x5c29x2&& _0x5c29x12== _0x5c29x3|| !_0x5c29x4&& _0x5c29x13== _0x5c29x3&& _0x5c29x12== _0x5c29x2)&& _0x5c29x9[_0xd587[207]](_0x5c29x5[_0x5c29xa])};return _0x5c29x9};mxGraph[_0xd587[202]][_0xd587[2689]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=mxUtils[_0xd587[2196]](this[_0xd587[526]],mxEvent[_0xd587[731]](_0x5c29x2),mxEvent[_0xd587[733]](_0x5c29x2)),_0x5c29x5=this[_0xd587[441]][_0xd587[255]],_0x5c29x9=this[_0xd587[441]][_0xd587[513]],_0x5c29xa=!1!= _0x5c29x3?this[_0xd587[1020]]/ 2:0;_0x5c29x4[_0xd587[235]]= this[_0xd587[1021]](_0x5c29x4[_0xd587[235]]/ _0x5c29x5- _0x5c29x9[_0xd587[235]]- _0x5c29xa);_0x5c29x4[_0xd587[236]]= this[_0xd587[1021]](_0x5c29x4[_0xd587[236]]/ _0x5c29x5- _0x5c29x9[_0xd587[236]]- _0x5c29xa);return _0x5c29x4};mxGraph[_0xd587[202]][_0xd587[2690]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa){_0x5c29xa= null!= _0x5c29xa?_0x5c29xa:[];if(0< _0x5c29x4|| 0< _0x5c29x5){var _0x5c29x12=_0x5c29x2+ _0x5c29x4,_0x5c29x13=_0x5c29x3+ _0x5c29x5;_0x5c29x9= _0x5c29x9|| this[_0xd587[902]]();if(null!= _0x5c29x9){for(var _0x5c29x14=this[_0xd587[251]][_0xd587[262]](_0x5c29x9),_0x5c29x15=0;_0x5c29x15< _0x5c29x14;_0x5c29x15++){var _0x5c29x16=this[_0xd587[251]][_0xd587[263]](_0x5c29x9,_0x5c29x15),_0x5c29x17=this[_0xd587[441]][_0xd587[248]](_0x5c29x16);if(this[_0xd587[1714]](_0x5c29x16)&& null!= _0x5c29x17){var _0x5c29x18=_0x5c29x17,_0x5c29x17=mxUtils[_0xd587[433]](_0x5c29x17[_0xd587[124]],mxConstants.STYLE_ROTATION)|| 0;0!= _0x5c29x17&& (_0x5c29x18= mxUtils[_0xd587[1613]](_0x5c29x18,_0x5c29x17));_0x5c29x18[_0xd587[235]]>= _0x5c29x2&& _0x5c29x18[_0xd587[236]]+ _0x5c29x18[_0xd587[119]]<= _0x5c29x13&& _0x5c29x18[_0xd587[236]]>= _0x5c29x3&& _0x5c29x18[_0xd587[235]]+ _0x5c29x18[_0xd587[117]]<= _0x5c29x12?_0x5c29xa[_0xd587[207]](_0x5c29x16):this[_0xd587[2690]](_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x16,_0x5c29xa)}}}};return _0x5c29xa};mxGraph[_0xd587[202]][_0xd587[2691]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){var _0x5c29xa=[];if(_0x5c29x5|| _0x5c29x9){if(null== _0x5c29x4&& (_0x5c29x4= this[_0xd587[902]]()),null!= _0x5c29x4){for(var _0x5c29x12=this[_0xd587[251]][_0xd587[262]](_0x5c29x4),_0x5c29x13=0;_0x5c29x13< _0x5c29x12;_0x5c29x13++){var _0x5c29x14=this[_0xd587[251]][_0xd587[263]](_0x5c29x4,_0x5c29x13),_0x5c29x15=this[_0xd587[441]][_0xd587[248]](_0x5c29x14);this[_0xd587[1714]](_0x5c29x14)&& null!= _0x5c29x15&& (!_0x5c29x5|| _0x5c29x15[_0xd587[235]]>= _0x5c29x2) && (!_0x5c29x9|| _0x5c29x15[_0xd587[236]]>= _0x5c29x3) && _0x5c29xa[_0xd587[207]](_0x5c29x14)}}};return _0x5c29xa};mxGraph[_0xd587[202]][_0xd587[1757]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){_0x5c29x3= null!= _0x5c29x3?_0x5c29x3:!1;_0x5c29x4= null!= _0x5c29x4?_0x5c29x4:!1;var _0x5c29x5=[];if(null!= _0x5c29x2){for(var _0x5c29x9=this[_0xd587[502]](),_0x5c29xa=_0x5c29x9[_0xd587[262]](_0x5c29x2),_0x5c29x12=null,_0x5c29x13=0,_0x5c29x14=0;_0x5c29x14< _0x5c29xa;_0x5c29x14++){var _0x5c29x15=_0x5c29x9[_0xd587[263]](_0x5c29x2,_0x5c29x14);if(this[_0xd587[251]][_0xd587[1193]](_0x5c29x15)&& this[_0xd587[1714]](_0x5c29x15)){for(var _0x5c29x16=this[_0xd587[1756]](_0x5c29x15,_0x5c29x3?_0x5c29x2:null),_0x5c29x17=0,_0x5c29x18=0,_0x5c29x19=0;_0x5c29x19< _0x5c29x16[_0xd587[67]];_0x5c29x19++){this[_0xd587[441]][_0xd587[1710]](_0x5c29x16[_0x5c29x19],!0)== _0x5c29x15?_0x5c29x17++:_0x5c29x18++};(_0x5c29x4&& 0== _0x5c29x17&& 0< _0x5c29x18|| !_0x5c29x4&& 0== _0x5c29x18&& 0< _0x5c29x17)&& _0x5c29x5[_0xd587[207]](_0x5c29x15);_0x5c29x16= _0x5c29x4?_0x5c29x18- _0x5c29x17:_0x5c29x17- _0x5c29x18;_0x5c29x16> _0x5c29x13&& (_0x5c29x13= _0x5c29x16,_0x5c29x12= _0x5c29x15)}};0== _0x5c29x5[_0xd587[67]]&& null!= _0x5c29x12&& _0x5c29x5[_0xd587[207]](_0x5c29x12)};return _0x5c29x5};mxGraph[_0xd587[202]][_0xd587[1706]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){if(null!= _0x5c29x4&& null!= _0x5c29x2){_0x5c29x3= null!= _0x5c29x3?_0x5c29x3:!0;_0x5c29x9= _0x5c29x9|| [];var _0x5c29xa=mxCellPath[_0xd587[385]](_0x5c29x2);if(null== _0x5c29x9[_0x5c29xa]&& (_0x5c29x9[_0x5c29xa]= _0x5c29x2,_0x5c29x5= _0x5c29x4(_0x5c29x2,_0x5c29x5),null== _0x5c29x5|| _0x5c29x5)){if(_0x5c29x5= this[_0xd587[251]][_0xd587[1707]](_0x5c29x2),0< _0x5c29x5){for(_0x5c29xa= 0;_0x5c29xa< _0x5c29x5;_0x5c29xa++){var _0x5c29x12=this[_0xd587[251]][_0xd587[1708]](_0x5c29x2,_0x5c29xa),_0x5c29x13=this[_0xd587[251]][_0xd587[1709]](_0x5c29x12,!0)== _0x5c29x2;if(!_0x5c29x3|| _0x5c29x13){_0x5c29x13= this[_0xd587[251]][_0xd587[1709]](_0x5c29x12,!_0x5c29x13),this[_0xd587[1706]](_0x5c29x13,_0x5c29x3,_0x5c29x4,_0x5c29x12,_0x5c29x9)}}}}}};mxGraph[_0xd587[202]][_0xd587[2692]]= function(_0x5c29x2){return this[_0xd587[2435]]()[_0xd587[2097]](_0x5c29x2)};mxGraph[_0xd587[202]][_0xd587[2693]]= function(){return this[_0xd587[2435]]()[_0xd587[1107]]()};mxGraph[_0xd587[202]][_0xd587[2440]]= function(){return this[_0xd587[2435]]()[_0xd587[200]]()};mxGraph[_0xd587[202]][_0xd587[2694]]= function(){return this[_0xd587[2435]]()[_0xd587[895]][_0xd587[67]]};mxGraph[_0xd587[202]][_0xd587[2452]]= function(){return this[_0xd587[2435]]()[_0xd587[895]][0]};mxGraph[_0xd587[202]][_0xd587[897]]= function(){return this[_0xd587[2435]]()[_0xd587[895]][_0xd587[1853]]()};mxGraph[_0xd587[202]][_0xd587[2450]]= function(_0x5c29x2){this[_0xd587[2435]]()[_0xd587[2099]](_0x5c29x2)};mxGraph[_0xd587[202]][_0xd587[904]]= function(_0x5c29x2){this[_0xd587[2435]]()[_0xd587[2100]](_0x5c29x2)};mxGraph[_0xd587[202]][_0xd587[2695]]= function(_0x5c29x2){this[_0xd587[2435]]()[_0xd587[2103]](_0x5c29x2)};mxGraph[_0xd587[202]][_0xd587[2696]]= function(_0x5c29x2){this[_0xd587[2435]]()[_0xd587[832]](_0x5c29x2)};mxGraph[_0xd587[202]][_0xd587[2697]]= function(_0x5c29x2){this[_0xd587[2435]]()[_0xd587[2104]](_0x5c29x2)};mxGraph[_0xd587[202]][_0xd587[2439]]= function(_0x5c29x2){this[_0xd587[2435]]()[_0xd587[842]](_0x5c29x2)};mxGraph[_0xd587[202]][_0xd587[2698]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=this[_0xd587[2690]](_0x5c29x2[_0xd587[235]],_0x5c29x2[_0xd587[236]],_0x5c29x2[_0xd587[117]],_0x5c29x2[_0xd587[119]]);this[_0xd587[2699]](_0x5c29x4,_0x5c29x3);return _0x5c29x4};mxGraph[_0xd587[202]][_0xd587[2700]]= function(){this[_0xd587[2701]](!0)};mxGraph[_0xd587[202]][_0xd587[2702]]= function(){this[_0xd587[2701]]()};mxGraph[_0xd587[202]][_0xd587[2703]]= function(){this[_0xd587[2701]](!1,!0)};mxGraph[_0xd587[202]][_0xd587[2704]]= function(){this[_0xd587[2701]](!1,!1,!0)};mxGraph[_0xd587[202]][_0xd587[2701]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){var _0x5c29x5=this[_0xd587[2105]],_0x5c29x9=0< _0x5c29x5[_0xd587[895]][_0xd587[67]]?_0x5c29x5[_0xd587[895]][0]:null;1< _0x5c29x5[_0xd587[895]][_0xd587[67]]&& _0x5c29x5[_0xd587[200]]();var _0x5c29x5=null!= _0x5c29x9?this[_0xd587[251]][_0xd587[1197]](_0x5c29x9):this[_0xd587[902]](),_0x5c29xa=this[_0xd587[251]][_0xd587[262]](_0x5c29x5);null== _0x5c29x9&& 0< _0x5c29xa?(_0x5c29x2= this[_0xd587[251]][_0xd587[263]](_0x5c29x5,0),this[_0xd587[2450]](_0x5c29x2)):(null== _0x5c29x9|| _0x5c29x3)&& null!= this[_0xd587[441]][_0xd587[248]](_0x5c29x5)&& null!= this[_0xd587[251]][_0xd587[1721]](_0x5c29x5)?this[_0xd587[2534]]()!= _0x5c29x5&& this[_0xd587[2450]](_0x5c29x5):null!= _0x5c29x9&& _0x5c29x4?0< this[_0xd587[251]][_0xd587[262]](_0x5c29x9)&& (_0x5c29x2= this[_0xd587[251]][_0xd587[263]](_0x5c29x9,0),this[_0xd587[2450]](_0x5c29x2)):0< _0x5c29xa&& (_0x5c29x3= _0x5c29x5[_0xd587[1738]](_0x5c29x9),_0x5c29x2?(_0x5c29x3++,_0x5c29x2= this[_0xd587[251]][_0xd587[263]](_0x5c29x5,_0x5c29x3% _0x5c29xa)):(_0x5c29x3--,_0x5c29x2= this[_0xd587[251]][_0xd587[263]](_0x5c29x5,0> _0x5c29x3?_0x5c29xa- 1:_0x5c29x3)),this[_0xd587[2450]](_0x5c29x2))};mxGraph[_0xd587[202]][_0xd587[2705]]= function(_0x5c29x2){_0x5c29x2= _0x5c29x2|| this[_0xd587[902]]();_0x5c29x2= this[_0xd587[251]][_0xd587[1953]](_0x5c29x2);null!= _0x5c29x2&& this[_0xd587[904]](_0x5c29x2)};mxGraph[_0xd587[202]][_0xd587[2706]]= function(_0x5c29x2){this[_0xd587[2707]](!0,!1,_0x5c29x2)};mxGraph[_0xd587[202]][_0xd587[2708]]= function(_0x5c29x2){this[_0xd587[2707]](!1,!0,_0x5c29x2)};mxGraph[_0xd587[202]][_0xd587[2707]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){_0x5c29x4= _0x5c29x4|| this[_0xd587[902]]();var _0x5c29x5=mxUtils[_0xd587[885]](this,function(_0x5c29x4){return null!= this[_0xd587[441]][_0xd587[248]](_0x5c29x4)&& 0== this[_0xd587[251]][_0xd587[262]](_0x5c29x4)&& (this[_0xd587[251]][_0xd587[1193]](_0x5c29x4)&& _0x5c29x2|| this[_0xd587[251]][_0xd587[250]](_0x5c29x4)&& _0x5c29x3)});_0x5c29x4= this[_0xd587[251]][_0xd587[1921]](_0x5c29x5,_0x5c29x4);this[_0xd587[904]](_0x5c29x4)};mxGraph[_0xd587[202]][_0xd587[2459]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=this[_0xd587[2692]](_0x5c29x2);this[_0xd587[2462]](_0x5c29x3)?_0x5c29x4?this[_0xd587[2697]](_0x5c29x2):this[_0xd587[2695]](_0x5c29x2):(!_0x5c29x4|| 1!= this[_0xd587[2694]]()) && this[_0xd587[2450]](_0x5c29x2)};mxGraph[_0xd587[202]][_0xd587[2699]]= function(_0x5c29x2,_0x5c29x3){this[_0xd587[2462]](_0x5c29x3)?this[_0xd587[2696]](_0x5c29x2):this[_0xd587[904]](_0x5c29x2)};mxGraph[_0xd587[202]][_0xd587[2709]]= function(_0x5c29x2){var _0x5c29x3=null;null!= _0x5c29x2&& (this[_0xd587[251]][_0xd587[250]](_0x5c29x2[_0xd587[246]])?(_0x5c29x3= this[_0xd587[441]][_0xd587[2291]](_0x5c29x2),_0x5c29x3= this[_0xd587[2573]](_0x5c29x2)|| _0x5c29x3== mxEdgeStyle[_0xd587[2568]]|| _0x5c29x3== mxEdgeStyle[_0xd587[2569]]|| _0x5c29x3== mxEdgeStyle[_0xd587[2570]]? new mxElbowEdgeHandler(_0x5c29x2):_0x5c29x3== mxEdgeStyle[_0xd587[2567]]|| _0x5c29x3== mxEdgeStyle[_0xd587[2572]]? new mxEdgeSegmentHandler(_0x5c29x2): new mxEdgeHandler(_0x5c29x2)):_0x5c29x3= new mxVertexHandler(_0x5c29x2));return _0x5c29x3};mxGraph[_0xd587[202]][_0xd587[1133]]= function(_0x5c29x2){null== this[_0xd587[2329]]&& (this[_0xd587[2329]]= []);this[_0xd587[2329]][_0xd587[207]](_0x5c29x2)};mxGraph[_0xd587[202]][_0xd587[1148]]= function(_0x5c29x2){if(null!= this[_0xd587[2329]]){for(var _0x5c29x3=0;_0x5c29x3< this[_0xd587[2329]][_0xd587[67]];_0x5c29x3++){if(this[_0xd587[2329]][_0x5c29x3]== _0x5c29x2){this[_0xd587[2329]][_0xd587[300]](_0x5c29x3,1);break}}}};mxGraph[_0xd587[202]][_0xd587[2710]]= function(_0x5c29x2){if(null== _0x5c29x2[_0xd587[725]]|| null== _0x5c29x2[_0xd587[726]]){var _0x5c29x3=mxUtils[_0xd587[2196]](this[_0xd587[526]],_0x5c29x2[_0xd587[730]](),_0x5c29x2[_0xd587[732]]());_0x5c29x2[_0xd587[725]]= _0x5c29x3[_0xd587[235]]- this[_0xd587[1136]];_0x5c29x2[_0xd587[726]]= _0x5c29x3[_0xd587[236]]- this[_0xd587[1137]]}};mxGraph[_0xd587[202]][_0xd587[758]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){null== _0x5c29x4&& (_0x5c29x4= this);this[_0xd587[2710]](_0x5c29x3);_0x5c29x2== mxEvent[_0xd587[2711]]&& (this[_0xd587[1009]]= !0);if(mxClient[_0xd587[754]]&& this[_0xd587[2349]]&& _0x5c29x2== mxEvent[_0xd587[2711]]){var _0x5c29x5=( new Date)[_0xd587[178]]();_0x5c29x5- this[_0xd587[2213]]< this[_0xd587[2350]]&& Math[_0xd587[425]](this[_0xd587[2712]]- _0x5c29x3[_0xd587[730]]())< this[_0xd587[2351]]&& Math[_0xd587[425]](this[_0xd587[2352]]- _0x5c29x3[_0xd587[732]]())< this[_0xd587[2351]]?(this[_0xd587[2213]]= 0,this[_0xd587[761]](_0x5c29x3[_0xd587[727]](),_0x5c29x3[_0xd587[736]]()),_0x5c29x3[_0xd587[727]]()[_0xd587[786]]= !0):(this[_0xd587[2712]]= _0x5c29x3[_0xd587[730]](),this[_0xd587[2352]]= _0x5c29x3[_0xd587[732]](),this[_0xd587[2213]]= _0x5c29x5)};_0x5c29x5= 2!= _0x5c29x3[_0xd587[727]]()[_0xd587[764]];if(mxClient[_0xd587[80]]&& _0xd587[462]== document[_0xd587[135]]){if(null!= this[_0xd587[2713]]&& Math[_0xd587[425]](this[_0xd587[2713]]- _0x5c29x3[_0xd587[730]]())> this[_0xd587[2351]]|| null!= this[_0xd587[2714]]&& Math[_0xd587[425]](this[_0xd587[2714]]- _0x5c29x3[_0xd587[732]]())> this[_0xd587[2351]]){_0x5c29x5= !0};_0x5c29x2== mxEvent[_0xd587[2715]]&& (this[_0xd587[2713]]= _0x5c29x3[_0xd587[730]](),this[_0xd587[2714]]= _0x5c29x3[_0xd587[732]]())};if((_0x5c29x2!= mxEvent[_0xd587[2715]]|| this[_0xd587[1009]])&& _0x5c29x5){if(_0x5c29x2== mxEvent[_0xd587[2715]]&& (this[_0xd587[1009]]= !1),!this[_0xd587[2203]]()&& (mxClient[_0xd587[71]]|| mxClient[_0xd587[75]]|| mxClient[_0xd587[76]]|| mxClient[_0xd587[80]]&& mxClient[_0xd587[48]]|| _0x5c29x3[_0xd587[727]]()[_0xd587[772]]!= this[_0xd587[526]])){_0x5c29x2== mxEvent[_0xd587[2716]]&& (this[_0xd587[1009]]&& this[_0xd587[1012]])&& this[_0xd587[1014]](_0x5c29x3[_0xd587[734]](),_0x5c29x3[_0xd587[735]](),this[_0xd587[1013]]);if(null!= this[_0xd587[2329]]){_0x5c29x4= [_0x5c29x4,_0x5c29x3];_0x5c29x3[_0xd587[727]]()[_0xd587[739]]= !0;for(_0x5c29x5= 0;_0x5c29x5< this[_0xd587[2329]][_0xd587[67]];_0x5c29x5++){var _0x5c29x9=this[_0xd587[2329]][_0x5c29x5];_0x5c29x2== mxEvent[_0xd587[2711]]?_0x5c29x9[_0xd587[787]][_0xd587[183]](_0x5c29x9,_0x5c29x4):_0x5c29x2== mxEvent[_0xd587[2716]]?_0x5c29x9[_0xd587[788]][_0xd587[183]](_0x5c29x9,_0x5c29x4):_0x5c29x2== mxEvent[_0xd587[2715]]&& _0x5c29x9[_0xd587[789]][_0xd587[183]](_0x5c29x9,_0x5c29x4)}};_0x5c29x2== mxEvent[_0xd587[2715]]&& this[_0xd587[173]](_0x5c29x3)}}else {_0x5c29x2== mxEvent[_0xd587[2715]]&& (this[_0xd587[1009]]= !1)}};mxGraph[_0xd587[202]][_0xd587[515]]= function(){this[_0xd587[2717]]|| (this[_0xd587[2717]]= !0,null!= this[_0xd587[2276]]&& this[_0xd587[2276]][_0xd587[515]](),null!= this[_0xd587[2432]]&& this[_0xd587[2432]][_0xd587[515]](),null!= this[_0xd587[2316]]&& this[_0xd587[2316]][_0xd587[515]](),null!= this[_0xd587[2433]]&& this[_0xd587[2433]][_0xd587[515]](),null!= this[_0xd587[1011]]&& this[_0xd587[1011]][_0xd587[515]](),null!= this[_0xd587[2347]]&& this[_0xd587[2347]][_0xd587[515]](),null!= this[_0xd587[441]]&& this[_0xd587[441]][_0xd587[515]](),null!= this[_0xd587[251]]&& null!= this[_0xd587[2343]]&& (this[_0xd587[251]][_0xd587[745]](this[_0xd587[2343]]),this[_0xd587[2343]]= null),this[_0xd587[526]]= null)};function mxCellOverlay(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa){this[_0xd587[618]]= _0x5c29x2;this[_0xd587[2718]]= _0x5c29x3;this[_0xd587[611]]= null!= _0x5c29x4?_0x5c29x4:this[_0xd587[611]];this[_0xd587[123]]= null!= _0x5c29x5?_0x5c29x5:this[_0xd587[123]];this[_0xd587[1368]]= null!= _0x5c29x9?_0x5c29x9: new mxPoint;this[_0xd587[270]]= null!= _0x5c29xa?_0x5c29xa:_0xd587[2719]}mxCellOverlay[_0xd587[202]]= new mxEventSource;mxCellOverlay[_0xd587[202]][_0xd587[196]]= mxCellOverlay;mxCellOverlay[_0xd587[202]][_0xd587[618]]= null;mxCellOverlay[_0xd587[202]][_0xd587[2718]]= null;mxCellOverlay[_0xd587[202]][_0xd587[611]]= mxConstants[_0xd587[480]];mxCellOverlay[_0xd587[202]][_0xd587[123]]= mxConstants[_0xd587[482]];mxCellOverlay[_0xd587[202]][_0xd587[1368]]= null;mxCellOverlay[_0xd587[202]][_0xd587[270]]= null;mxCellOverlay[_0xd587[202]][_0xd587[2354]]= 0.5;mxCellOverlay[_0xd587[202]][_0xd587[1799]]= function(_0x5c29x2){var _0x5c29x3=_0x5c29x2[_0xd587[441]][_0xd587[1179]][_0xd587[502]]()[_0xd587[250]](_0x5c29x2[_0xd587[246]]),_0x5c29x4=_0x5c29x2[_0xd587[441]][_0xd587[255]],_0x5c29x5=null,_0x5c29x9=this[_0xd587[618]][_0xd587[117]],_0x5c29xa=this[_0xd587[618]][_0xd587[119]];_0x5c29x3?(_0x5c29x3= _0x5c29x2[_0xd587[439]],1== _0x5c29x3[_0xd587[67]]% 2?_0x5c29x5= _0x5c29x3[Math[_0xd587[519]](_0x5c29x3[_0xd587[67]]/ 2)]:(_0x5c29x5= _0x5c29x3[_0xd587[67]]/ 2,_0x5c29x2= _0x5c29x3[_0x5c29x5- 1],_0x5c29x3= _0x5c29x3[_0x5c29x5],_0x5c29x5= new mxPoint(_0x5c29x2[_0xd587[235]]+ (_0x5c29x3[_0xd587[235]]- _0x5c29x2[_0xd587[235]])/ 2,_0x5c29x2[_0xd587[236]]+ (_0x5c29x3[_0xd587[236]]- _0x5c29x2[_0xd587[236]])/ 2))):(_0x5c29x5= new mxPoint,_0x5c29x5[_0xd587[235]]= this[_0xd587[611]]== mxConstants[_0xd587[2132]]?_0x5c29x2[_0xd587[235]]:this[_0xd587[611]]== mxConstants[_0xd587[479]]?_0x5c29x2[_0xd587[235]]+ _0x5c29x2[_0xd587[117]]/ 2:_0x5c29x2[_0xd587[235]]+ _0x5c29x2[_0xd587[117]],_0x5c29x5[_0xd587[236]]= this[_0xd587[123]]== mxConstants[_0xd587[1687]]?_0x5c29x2[_0xd587[236]]:this[_0xd587[123]]== mxConstants[_0xd587[481]]?_0x5c29x2[_0xd587[236]]+ _0x5c29x2[_0xd587[119]]/ 2:_0x5c29x2[_0xd587[236]]+ _0x5c29x2[_0xd587[119]]);return new mxRectangle(Math[_0xd587[488]](_0x5c29x5[_0xd587[235]]- (_0x5c29x9* this[_0xd587[2354]]- this[_0xd587[1368]][_0xd587[235]])* _0x5c29x4),Math[_0xd587[488]](_0x5c29x5[_0xd587[236]]- (_0x5c29xa* this[_0xd587[2354]]- this[_0xd587[1368]][_0xd587[236]])* _0x5c29x4),_0x5c29x9* _0x5c29x4,_0x5c29xa* _0x5c29x4)};mxCellOverlay[_0xd587[202]][_0xd587[2591]]= function(){return this[_0xd587[2718]]};function mxOutline(_0x5c29x2,_0x5c29x3){this[_0xd587[1097]]= _0x5c29x2;null!= _0x5c29x3&& this[_0xd587[176]](_0x5c29x3)}mxOutline[_0xd587[202]][_0xd587[1097]]= null;mxOutline[_0xd587[202]][_0xd587[2136]]= null;mxOutline[_0xd587[202]][_0xd587[2720]]= mxConstants[_0xd587[2333]];mxOutline[_0xd587[202]][_0xd587[984]]= !0;mxOutline[_0xd587[202]][_0xd587[2721]]= !0;mxOutline[_0xd587[202]][_0xd587[467]]= 10;mxOutline[_0xd587[202]][_0xd587[2722]]= 8;mxOutline[_0xd587[202]][_0xd587[2723]]= !1;mxOutline[_0xd587[202]][_0xd587[2724]]= null;mxOutline[_0xd587[202]][_0xd587[1063]]= !1;mxOutline[_0xd587[202]][_0xd587[176]]= function(_0x5c29x2){this[_0xd587[2136]]= new mxGraph(_0x5c29x2,this[_0xd587[1097]][_0xd587[502]](),this[_0xd587[2720]],this[_0xd587[1097]][_0xd587[2434]]());this[_0xd587[2136]][_0xd587[2206]]= !1;this[_0xd587[2136]][_0xd587[1012]]= !1;var _0x5c29x3=this[_0xd587[2136]][_0xd587[1177]];this[_0xd587[2136]][_0xd587[1177]]= mxUtils[_0xd587[885]](this,function(_0x5c29x2){!this[_0xd587[1063]]&& null!= this[_0xd587[2136]]&& _0x5c29x3[_0xd587[183]](this[_0xd587[2136]],arguments)});mxClient[_0xd587[48]]&& (_0x5c29x2= this[_0xd587[2136]][_0xd587[249]]()[_0xd587[2051]]()[_0xd587[265]],_0x5c29x2[_0xd587[57]](_0xd587[2725],_0xd587[2726]),_0x5c29x2[_0xd587[57]](_0xd587[2727],_0xd587[2726]));this[_0xd587[2136]][_0xd587[2409]]= !1;this[_0xd587[2136]][_0xd587[995]](!1);this[_0xd587[2728]]= mxUtils[_0xd587[885]](this,function(_0x5c29x2,_0x5c29x3){!this[_0xd587[1063]]&& !this[_0xd587[1124]]&& this[_0xd587[2729]]()});this[_0xd587[1097]][_0xd587[502]]()[_0xd587[169]](mxEvent.CHANGE,this[_0xd587[2728]]);this[_0xd587[2136]][_0xd587[1133]](this);_0x5c29x2= this[_0xd587[1097]][_0xd587[249]]();_0x5c29x2[_0xd587[169]](mxEvent.SCALE,this[_0xd587[2728]]);_0x5c29x2[_0xd587[169]](mxEvent.TRANSLATE,this[_0xd587[2728]]);_0x5c29x2[_0xd587[169]](mxEvent.SCALE_AND_TRANSLATE,this[_0xd587[2728]]);_0x5c29x2[_0xd587[169]](mxEvent.DOWN,this[_0xd587[2728]]);_0x5c29x2[_0xd587[169]](mxEvent.UP,this[_0xd587[2728]]);mxEvent[_0xd587[169]](this[_0xd587[1097]][_0xd587[526]],_0xd587[276],this[_0xd587[2728]]);this[_0xd587[2730]]= mxUtils[_0xd587[885]](this,function(_0x5c29x2){this[_0xd587[2723]]&& this[_0xd587[2728]][_0xd587[183]](this,arguments)});this[_0xd587[1097]][_0xd587[169]](mxEvent.PAN,this[_0xd587[2730]]);this[_0xd587[2731]]= mxUtils[_0xd587[885]](this,function(_0x5c29x2){this[_0xd587[2136]][_0xd587[2341]](this[_0xd587[1097]][_0xd587[2434]]());this[_0xd587[2136]][_0xd587[802]]()});this[_0xd587[1097]][_0xd587[169]](mxEvent.REFRESH,this[_0xd587[2731]]);this[_0xd587[1562]]= new mxRectangle(0,0,0,0);this[_0xd587[2732]]= new mxRectangleShape(this[_0xd587[1562]],null,mxConstants.OUTLINE_COLOR,mxConstants.OUTLINE_STROKEWIDTH);this[_0xd587[2732]][_0xd587[507]]= this[_0xd587[2136]][_0xd587[507]]!= mxConstants[_0xd587[508]]?mxConstants[_0xd587[1523]]:mxConstants[_0xd587[508]];this[_0xd587[2732]][_0xd587[176]](this[_0xd587[2136]][_0xd587[249]]()[_0xd587[1524]]());mxEvent[_0xd587[2733]](this[_0xd587[2732]][_0xd587[252]],this[_0xd587[2136]]);this[_0xd587[2732]][_0xd587[252]][_0xd587[124]][_0xd587[1537]]= _0xd587[110];this[_0xd587[2734]]= this[_0xd587[2735]]();this[_0xd587[2734]][_0xd587[176]](this[_0xd587[2136]][_0xd587[249]]()[_0xd587[1524]]());this[_0xd587[984]]&& (this[_0xd587[2734]][_0xd587[252]][_0xd587[124]][_0xd587[270]]= _0xd587[356]);mxEvent[_0xd587[169]](this[_0xd587[2734]][_0xd587[252]],mxClient[_0xd587[754]]?_0xd587[755]:_0xd587[751],mxUtils[_0xd587[885]](this,function(_0x5c29x2){this[_0xd587[2136]][_0xd587[758]](mxEvent.MOUSE_DOWN, new mxMouseEvent(_0x5c29x2))}));this[_0xd587[2732]][_0xd587[252]][_0xd587[124]][_0xd587[495]]= this[_0xd587[2721]]?_0xd587[110]:_0xd587[130];this[_0xd587[2734]][_0xd587[252]][_0xd587[124]][_0xd587[495]]= this[_0xd587[2732]][_0xd587[252]][_0xd587[124]][_0xd587[495]];this[_0xd587[2732]][_0xd587[252]][_0xd587[124]][_0xd587[270]]= _0xd587[582];this[_0xd587[2729]](!1)};mxOutline[_0xd587[202]][_0xd587[994]]= function(){return this[_0xd587[984]]};mxOutline[_0xd587[202]][_0xd587[995]]= function(_0x5c29x2){this[_0xd587[984]]= _0x5c29x2};mxOutline[_0xd587[202]][_0xd587[2736]]= function(_0x5c29x2){this[_0xd587[2734]][_0xd587[252]][_0xd587[124]][_0xd587[187]]= _0x5c29x2?_0xd587[189]:_0xd587[188]};mxOutline[_0xd587[202]][_0xd587[802]]= function(){this[_0xd587[2729]](!0)};mxOutline[_0xd587[202]][_0xd587[2735]]= function(){var _0x5c29x2=null!= this[_0xd587[2724]]? new mxImageShape( new mxRectangle(0,0,this[_0xd587[2724]][_0xd587[117]],this[_0xd587[2724]][_0xd587[119]]),this[_0xd587[2724]][_0xd587[390]]): new mxRectangleShape( new mxRectangle(0,0,this[_0xd587[2722]],this[_0xd587[2722]]),mxConstants.OUTLINE_HANDLE_FILLCOLOR,mxConstants.OUTLINE_HANDLE_STROKECOLOR);_0x5c29x2[_0xd587[507]]= this[_0xd587[2136]][_0xd587[507]];return _0x5c29x2};mxOutline[_0xd587[202]][_0xd587[2737]]= function(){return new mxRectangle(0,0,this[_0xd587[1097]][_0xd587[526]][_0xd587[1526]],this[_0xd587[1097]][_0xd587[526]][_0xd587[191]])};mxOutline[_0xd587[202]][_0xd587[2738]]= function(_0x5c29x2){return null};mxOutline[_0xd587[202]][_0xd587[2729]]= function(_0x5c29x2){if(null!= this[_0xd587[1097]]){var _0x5c29x3=this[_0xd587[1097]][_0xd587[441]][_0xd587[255]],_0x5c29x4=this[_0xd587[1097]][_0xd587[517]](),_0x5c29x4= new mxRectangle(_0x5c29x4[_0xd587[235]]/ _0x5c29x3+ this[_0xd587[1097]][_0xd587[1136]],_0x5c29x4[_0xd587[236]]/ _0x5c29x3+ this[_0xd587[1097]][_0xd587[1137]],_0x5c29x4[_0xd587[117]]/ _0x5c29x3,_0x5c29x4[_0xd587[119]]/ _0x5c29x3),_0x5c29x5= new mxRectangle(0,0,this[_0xd587[1097]][_0xd587[526]][_0xd587[159]]/ _0x5c29x3,this[_0xd587[1097]][_0xd587[526]][_0xd587[157]]/ _0x5c29x3),_0x5c29x9=_0x5c29x4[_0xd587[238]]();_0x5c29x9[_0xd587[99]](_0x5c29x5);var _0x5c29xa=this[_0xd587[2737]](),_0x5c29x5=Math[_0xd587[160]](_0x5c29xa[_0xd587[117]]/ _0x5c29x3,_0x5c29x9[_0xd587[117]]),_0x5c29x3=Math[_0xd587[160]](_0x5c29xa[_0xd587[119]]/ _0x5c29x3,_0x5c29x9[_0xd587[119]]),_0x5c29x9=Math[_0xd587[160]](0,this[_0xd587[2136]][_0xd587[526]][_0xd587[159]]- this[_0xd587[467]]),_0x5c29xa=Math[_0xd587[160]](0,this[_0xd587[2136]][_0xd587[526]][_0xd587[157]]- this[_0xd587[467]]),_0x5c29x9=Math[_0xd587[243]](_0x5c29x9/ _0x5c29x5,_0x5c29xa/ _0x5c29x3);if(0< _0x5c29x9){this[_0xd587[2136]][_0xd587[249]]()[_0xd587[255]]!= _0x5c29x9&& (this[_0xd587[2136]][_0xd587[249]]()[_0xd587[255]]= _0x5c29x9,_0x5c29x2= !0);_0x5c29x5= this[_0xd587[2136]][_0xd587[249]]();_0x5c29x5[_0xd587[1741]]!= this[_0xd587[1097]][_0xd587[249]]()[_0xd587[1741]]&& _0x5c29x5[_0xd587[2257]](this[_0xd587[1097]][_0xd587[249]]()[_0xd587[1741]]);var _0x5c29x3=this[_0xd587[1097]][_0xd587[441]][_0xd587[513]],_0x5c29xa=_0x5c29x3[_0xd587[235]]+ this[_0xd587[1097]][_0xd587[1136]],_0x5c29x12=_0x5c29x3[_0xd587[236]]+ this[_0xd587[1097]][_0xd587[1137]],_0x5c29x9=this[_0xd587[2738]](_0x5c29x9);null!= _0x5c29x9&& (_0x5c29xa+= _0x5c29x9[_0xd587[235]],_0x5c29x12+= _0x5c29x9[_0xd587[236]]);0> _0x5c29x4[_0xd587[235]]&& (_0x5c29xa-= _0x5c29x4[_0xd587[235]]);0> _0x5c29x4[_0xd587[236]]&& (_0x5c29x12-= _0x5c29x4[_0xd587[236]]);if(_0x5c29x5[_0xd587[513]][_0xd587[235]]!= _0x5c29xa|| _0x5c29x5[_0xd587[513]][_0xd587[236]]!= _0x5c29x12){_0x5c29x5[_0xd587[513]][_0xd587[235]]= _0x5c29xa,_0x5c29x5[_0xd587[513]][_0xd587[236]]= _0x5c29x12,_0x5c29x2= !0};var _0x5c29x4=_0x5c29x5[_0xd587[513]],_0x5c29x9=this[_0xd587[1097]][_0xd587[249]]()[_0xd587[255]],_0x5c29xa=_0x5c29x9/ _0x5c29x5[_0xd587[255]],_0x5c29x12=1/ _0x5c29x5[_0xd587[255]],_0x5c29x13=this[_0xd587[1097]][_0xd587[526]];this[_0xd587[1562]]= new mxRectangle((_0x5c29x4[_0xd587[235]]- _0x5c29x3[_0xd587[235]]- this[_0xd587[1097]][_0xd587[1136]])/ _0x5c29x12,(_0x5c29x4[_0xd587[236]]- _0x5c29x3[_0xd587[236]]- this[_0xd587[1097]][_0xd587[1137]])/ _0x5c29x12,_0x5c29x13[_0xd587[159]]/ _0x5c29xa,_0x5c29x13[_0xd587[157]]/ _0x5c29xa);this[_0xd587[1562]][_0xd587[235]]+= this[_0xd587[1097]][_0xd587[526]][_0xd587[360]]* _0x5c29x5[_0xd587[255]]/ _0x5c29x9;this[_0xd587[1562]][_0xd587[236]]+= this[_0xd587[1097]][_0xd587[526]][_0xd587[190]]* _0x5c29x5[_0xd587[255]]/ _0x5c29x9;_0x5c29x4= this[_0xd587[2732]][_0xd587[1562]];if(_0x5c29x4[_0xd587[235]]!= this[_0xd587[1562]][_0xd587[235]]|| _0x5c29x4[_0xd587[236]]!= this[_0xd587[1562]][_0xd587[236]]|| _0x5c29x4[_0xd587[117]]!= this[_0xd587[1562]][_0xd587[117]]|| _0x5c29x4[_0xd587[119]]!= this[_0xd587[1562]][_0xd587[119]]){this[_0xd587[2732]][_0xd587[1562]]= this[_0xd587[1562]],this[_0xd587[2732]][_0xd587[258]]()};_0x5c29x4= this[_0xd587[2734]][_0xd587[1562]];_0x5c29x5= new mxRectangle(this[_0xd587[1562]][_0xd587[235]]+ this[_0xd587[1562]][_0xd587[117]]- _0x5c29x4[_0xd587[117]]/ 2,this[_0xd587[1562]][_0xd587[236]]+ this[_0xd587[1562]][_0xd587[119]]- _0x5c29x4[_0xd587[119]]/ 2,_0x5c29x4[_0xd587[117]],_0x5c29x4[_0xd587[119]]);if(_0x5c29x4[_0xd587[235]]!= _0x5c29x5[_0xd587[235]]|| _0x5c29x4[_0xd587[236]]!= _0x5c29x5[_0xd587[236]]|| _0x5c29x4[_0xd587[117]]!= _0x5c29x5[_0xd587[117]]|| _0x5c29x4[_0xd587[119]]!= _0x5c29x5[_0xd587[119]]){this[_0xd587[2734]][_0xd587[1562]]= _0x5c29x5,_0xd587[188]!= this[_0xd587[2734]][_0xd587[252]][_0xd587[124]][_0xd587[187]]&& this[_0xd587[2734]][_0xd587[258]]()};_0x5c29x2&& this[_0xd587[2136]][_0xd587[441]][_0xd587[2259]]()}}};mxOutline[_0xd587[202]][_0xd587[787]]= function(_0x5c29x2,_0x5c29x3){this[_0xd587[984]]&& this[_0xd587[2721]]&& (this[_0xd587[499]]= _0x5c29x3[_0xd587[729]](this[_0xd587[2734]]),this[_0xd587[2739]]= _0x5c29x3[_0xd587[730]](),this[_0xd587[2740]]= _0x5c29x3[_0xd587[732]](),this[_0xd587[1124]]= !0,this[_0xd587[1097]][_0xd587[2365]]&& mxUtils[_0xd587[1134]](this[_0xd587[1097]][_0xd587[526]])?(this[_0xd587[2741]]= this[_0xd587[1097]][_0xd587[526]][_0xd587[360]],this[_0xd587[2742]]= this[_0xd587[1097]][_0xd587[526]][_0xd587[190]]):this[_0xd587[2742]]= this[_0xd587[2741]]= 0);_0x5c29x3[_0xd587[722]]()};mxOutline[_0xd587[202]][_0xd587[788]]= function(_0x5c29x2,_0x5c29x3){if(this[_0xd587[1124]]){this[_0xd587[2732]][_0xd587[252]][_0xd587[124]][_0xd587[495]]= this[_0xd587[2721]]?_0xd587[110]:_0xd587[130];this[_0xd587[2734]][_0xd587[252]][_0xd587[124]][_0xd587[495]]= this[_0xd587[2732]][_0xd587[252]][_0xd587[124]][_0xd587[495]];var _0x5c29x4=_0x5c29x3[_0xd587[730]]()- this[_0xd587[2739]],_0x5c29x5=_0x5c29x3[_0xd587[732]]()- this[_0xd587[2740]],_0x5c29x9=null;if(this[_0xd587[499]]){_0x5c29x9= this[_0xd587[1097]][_0xd587[526]],_0x5c29x5= _0x5c29x4/ (_0x5c29x9[_0xd587[159]]/ _0x5c29x9[_0xd587[157]]),_0x5c29x9= new mxRectangle(this[_0xd587[1562]][_0xd587[235]],this[_0xd587[1562]][_0xd587[236]],Math[_0xd587[160]](1,this[_0xd587[1562]][_0xd587[117]]+ _0x5c29x4),Math[_0xd587[160]](1,this[_0xd587[1562]][_0xd587[119]]+ _0x5c29x5)),this[_0xd587[2732]][_0xd587[1562]]= _0x5c29x9,this[_0xd587[2732]][_0xd587[258]]()}else {var _0x5c29xa=this[_0xd587[2136]][_0xd587[249]]()[_0xd587[255]],_0x5c29x9= new mxRectangle(this[_0xd587[1562]][_0xd587[235]]+ _0x5c29x4,this[_0xd587[1562]][_0xd587[236]]+ _0x5c29x5,this[_0xd587[1562]][_0xd587[117]],this[_0xd587[1562]][_0xd587[119]]);this[_0xd587[2732]][_0xd587[1562]]= _0x5c29x9;this[_0xd587[2732]][_0xd587[258]]();_0x5c29x4= _0x5c29x4/ _0x5c29xa* this[_0xd587[1097]][_0xd587[249]]()[_0xd587[255]];_0x5c29x5= _0x5c29x5/ _0x5c29xa* this[_0xd587[1097]][_0xd587[249]]()[_0xd587[255]];this[_0xd587[1097]][_0xd587[1135]](-_0x5c29x4- this[_0xd587[2741]],-_0x5c29x5- this[_0xd587[2742]])};_0x5c29x4= this[_0xd587[2734]][_0xd587[1562]];this[_0xd587[2734]][_0xd587[1562]]= new mxRectangle(_0x5c29x9[_0xd587[235]]+ _0x5c29x9[_0xd587[117]]- _0x5c29x4[_0xd587[117]]/ 2,_0x5c29x9[_0xd587[236]]+ _0x5c29x9[_0xd587[119]]- _0x5c29x4[_0xd587[119]]/ 2,_0x5c29x4[_0xd587[117]],_0x5c29x4[_0xd587[119]]);_0xd587[188]!= this[_0xd587[2734]][_0xd587[252]][_0xd587[124]][_0xd587[187]]&& this[_0xd587[2734]][_0xd587[258]]();_0x5c29x3[_0xd587[722]]()}};mxOutline[_0xd587[202]][_0xd587[789]]= function(_0x5c29x2,_0x5c29x3){if(this[_0xd587[1124]]){var _0x5c29x4=_0x5c29x3[_0xd587[730]]()- this[_0xd587[2739]],_0x5c29x5=_0x5c29x3[_0xd587[732]]()- this[_0xd587[2740]];if(0< Math[_0xd587[425]](_0x5c29x4)|| 0< Math[_0xd587[425]](_0x5c29x5)){if(this[_0xd587[499]]){var _0x5c29x5=this[_0xd587[2732]][_0xd587[1562]][_0xd587[117]],_0x5c29x9=this[_0xd587[1097]][_0xd587[249]]()[_0xd587[255]];this[_0xd587[1097]][_0xd587[2561]](_0x5c29x9- _0x5c29x4* _0x5c29x9/ _0x5c29x5,!1)}else {if(!this[_0xd587[1097]][_0xd587[2365]]|| !mxUtils[_0xd587[1134]](this[_0xd587[1097]][_0xd587[526]])){this[_0xd587[1097]][_0xd587[1135]](0,0),_0x5c29x4/= this[_0xd587[2136]][_0xd587[249]]()[_0xd587[255]],_0x5c29x5/= this[_0xd587[2136]][_0xd587[249]]()[_0xd587[255]],_0x5c29x9= this[_0xd587[1097]][_0xd587[249]]()[_0xd587[513]],this[_0xd587[1097]][_0xd587[249]]()[_0xd587[1147]](_0x5c29x9[_0xd587[235]]- _0x5c29x4,_0x5c29x9[_0xd587[236]]- _0x5c29x5)}};this[_0xd587[2729]]();_0x5c29x3[_0xd587[722]]()};this[_0xd587[1983]]= null;this[_0xd587[1124]]= !1}};mxOutline[_0xd587[202]][_0xd587[515]]= function(){null!= this[_0xd587[1097]]&& (this[_0xd587[1097]][_0xd587[745]](this[_0xd587[2730]]),this[_0xd587[1097]][_0xd587[745]](this[_0xd587[2731]]),this[_0xd587[1097]][_0xd587[502]]()[_0xd587[745]](this[_0xd587[2728]]),this[_0xd587[1097]][_0xd587[249]]()[_0xd587[745]](this[_0xd587[2728]]),mxEvent[_0xd587[169]](this[_0xd587[1097]][_0xd587[526]],_0xd587[276],this[_0xd587[2728]]),this[_0xd587[1097]]= null);null!= this[_0xd587[2136]]&& (this[_0xd587[2136]][_0xd587[1148]](this),this[_0xd587[2136]][_0xd587[515]](),this[_0xd587[2136]]= null);null!= this[_0xd587[2732]]&& (this[_0xd587[2732]][_0xd587[515]](),this[_0xd587[2732]]= null);null!= this[_0xd587[2734]]&& (this[_0xd587[2734]][_0xd587[515]](),this[_0xd587[2734]]= null)};function mxMultiplicity(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa,_0x5c29x12,_0x5c29x13,_0x5c29x14,_0x5c29x15){this[_0xd587[1097]]= _0x5c29x2;this[_0xd587[60]]= _0x5c29x3;this[_0xd587[2588]]= _0x5c29x4;this[_0xd587[131]]= _0x5c29x5;this[_0xd587[243]]= null!= _0x5c29x9?_0x5c29x9:0;this[_0xd587[160]]= null!= _0x5c29xa?_0x5c29xa:_0xd587[2743];this[_0xd587[2744]]= _0x5c29x12;this[_0xd587[2589]]= mxResources[_0xd587[203]](_0x5c29x13)|| _0x5c29x13;this[_0xd587[2745]]= mxResources[_0xd587[203]](_0x5c29x14)|| _0x5c29x14;this[_0xd587[2746]]= null!= _0x5c29x15?_0x5c29x15:!0}mxMultiplicity[_0xd587[202]][_0xd587[60]]= null;mxMultiplicity[_0xd587[202]][_0xd587[2588]]= null;mxMultiplicity[_0xd587[202]][_0xd587[131]]= null;mxMultiplicity[_0xd587[202]][_0xd587[1097]]= null;mxMultiplicity[_0xd587[202]][_0xd587[243]]= null;mxMultiplicity[_0xd587[202]][_0xd587[160]]= null;mxMultiplicity[_0xd587[202]][_0xd587[2744]]= null;mxMultiplicity[_0xd587[202]][_0xd587[2746]]= !0;mxMultiplicity[_0xd587[202]][_0xd587[2589]]= null;mxMultiplicity[_0xd587[202]][_0xd587[2745]]= null;mxMultiplicity[_0xd587[202]][_0xd587[2583]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa){var _0x5c29x12=_0xd587[110];if(this[_0xd587[1097]]&& this[_0xd587[2747]](_0x5c29x2,_0x5c29x4,_0x5c29x3)|| !this[_0xd587[1097]]&& this[_0xd587[2747]](_0x5c29x2,_0x5c29x5,_0x5c29x3)){if(null!= this[_0xd587[2589]]&& (this[_0xd587[1097]]&& (0== this[_0xd587[160]]|| _0x5c29x9>= this[_0xd587[160]])|| !this[_0xd587[1097]]&& (0== this[_0xd587[160]]|| _0x5c29xa>= this[_0xd587[160]]))){_0x5c29x12+= this[_0xd587[2589]]+ _0xd587[192]};null!= this[_0xd587[2744]]&& (null!= this[_0xd587[2745]]&& 0< this[_0xd587[2744]][_0xd587[67]])&& (this[_0xd587[2748]](_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5)|| (_0x5c29x12+= this[_0xd587[2745]]+ _0xd587[192]))};return 0< _0x5c29x12[_0xd587[67]]?_0x5c29x12:null};mxMultiplicity[_0xd587[202]][_0xd587[2748]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){_0x5c29x3= _0x5c29x2[_0xd587[251]][_0xd587[433]](_0x5c29x4);_0x5c29x5= _0x5c29x2[_0xd587[251]][_0xd587[433]](_0x5c29x5);_0x5c29x4= !this[_0xd587[2746]];for(var _0x5c29x9=this[_0xd587[2744]],_0x5c29xa=0;_0x5c29xa< _0x5c29x9[_0xd587[67]];_0x5c29xa++){if(this[_0xd587[1097]]&& this[_0xd587[2749]](_0x5c29x2,_0x5c29x5,_0x5c29x9[_0x5c29xa])){_0x5c29x4= this[_0xd587[2746]];break}else {if(!this[_0xd587[1097]]&& this[_0xd587[2749]](_0x5c29x2,_0x5c29x3,_0x5c29x9[_0x5c29xa])){_0x5c29x4= this[_0xd587[2746]];break}}};return _0x5c29x4};mxMultiplicity[_0xd587[202]][_0xd587[2747]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){_0x5c29x3= _0x5c29x2[_0xd587[251]][_0xd587[433]](_0x5c29x3);return this[_0xd587[2749]](_0x5c29x2,_0x5c29x3,this[_0xd587[60]],this[_0xd587[2588]],this[_0xd587[131]])};mxMultiplicity[_0xd587[202]][_0xd587[2749]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){return null!= _0x5c29x3?isNaN(_0x5c29x3[_0xd587[288]])?_0x5c29x3== _0x5c29x4:mxUtils[_0xd587[1331]](_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9):!1};function mxLayoutManager(_0x5c29x2){this[_0xd587[2750]]= mxUtils[_0xd587[885]](this,function(_0x5c29x2,_0x5c29x4){this[_0xd587[994]]()&& this[_0xd587[823]](_0x5c29x4[_0xd587[720]](_0xd587[1061]))});this[_0xd587[2317]]= mxUtils[_0xd587[885]](this,function(_0x5c29x2,_0x5c29x4){this[_0xd587[994]]()&& this[_0xd587[835]](_0x5c29x4[_0xd587[720]](_0xd587[895]),_0x5c29x4[_0xd587[720]](_0xd587[763]))});this[_0xd587[1178]](_0x5c29x2)}mxLayoutManager[_0xd587[202]]= new mxEventSource;mxLayoutManager[_0xd587[202]][_0xd587[196]]= mxLayoutManager;mxLayoutManager[_0xd587[202]][_0xd587[1179]]= null;mxLayoutManager[_0xd587[202]][_0xd587[2751]]= !0;mxLayoutManager[_0xd587[202]][_0xd587[984]]= !0;mxLayoutManager[_0xd587[202]][_0xd587[2728]]= null;mxLayoutManager[_0xd587[202]][_0xd587[2317]]= null;mxLayoutManager[_0xd587[202]][_0xd587[994]]= function(){return this[_0xd587[984]]};mxLayoutManager[_0xd587[202]][_0xd587[995]]= function(_0x5c29x2){this[_0xd587[984]]= _0x5c29x2};mxLayoutManager[_0xd587[202]][_0xd587[2752]]= function(){return this[_0xd587[2751]]};mxLayoutManager[_0xd587[202]][_0xd587[2753]]= function(_0x5c29x2){this[_0xd587[2751]]= _0x5c29x2};mxLayoutManager[_0xd587[202]][_0xd587[1703]]= function(){return this[_0xd587[1179]]};mxLayoutManager[_0xd587[202]][_0xd587[1178]]= function(_0x5c29x2){if(null!= this[_0xd587[1179]]){var _0x5c29x3=this[_0xd587[1179]][_0xd587[502]]();_0x5c29x3[_0xd587[745]](this[_0xd587[2750]]);this[_0xd587[1179]][_0xd587[745]](this[_0xd587[2317]])};this[_0xd587[1179]]= _0x5c29x2;null!= this[_0xd587[1179]]&& (_0x5c29x3= this[_0xd587[1179]][_0xd587[502]](),_0x5c29x3[_0xd587[169]](mxEvent.BEFORE_UNDO,this[_0xd587[2750]]),this[_0xd587[1179]][_0xd587[169]](mxEvent.MOVE_CELLS,this[_0xd587[2317]]))};mxLayoutManager[_0xd587[202]][_0xd587[2754]]= function(_0x5c29x2){return null};mxLayoutManager[_0xd587[202]][_0xd587[823]]= function(_0x5c29x2){_0x5c29x2= this[_0xd587[2755]](_0x5c29x2[_0xd587[1065]]);var _0x5c29x3=this[_0xd587[1703]]()[_0xd587[502]]();if(this[_0xd587[2752]]()){for(var _0x5c29x4=_0x5c29x3[_0xd587[1977]](_0x5c29x2);0< _0x5c29x4[_0xd587[67]];){_0x5c29x2= _0x5c29x2[_0xd587[1919]](_0x5c29x4),_0x5c29x4= _0x5c29x3[_0xd587[1977]](_0x5c29x4)}};this[_0xd587[828]](mxUtils[_0xd587[1779]](_0x5c29x2,!1))};mxLayoutManager[_0xd587[202]][_0xd587[835]]= function(_0x5c29x2,_0x5c29x3){if(null!= _0x5c29x2&& null!= _0x5c29x3){for(var _0x5c29x4=mxUtils[_0xd587[2196]](this[_0xd587[1703]]()[_0xd587[526]],mxEvent[_0xd587[731]](_0x5c29x3),mxEvent[_0xd587[733]](_0x5c29x3)),_0x5c29x5=this[_0xd587[1703]]()[_0xd587[502]](),_0x5c29x9=0;_0x5c29x9< _0x5c29x2[_0xd587[67]];_0x5c29x9++){var _0x5c29xa=this[_0xd587[2754]](_0x5c29x5[_0xd587[1197]](_0x5c29x2[_0x5c29x9]));null!= _0x5c29xa&& _0x5c29xa[_0xd587[1702]](_0x5c29x2[_0x5c29x9],_0x5c29x4[_0xd587[235]],_0x5c29x4[_0xd587[236]])}}};mxLayoutManager[_0xd587[202]][_0xd587[2755]]= function(_0x5c29x2){for(var _0x5c29x3=[],_0x5c29x4={},_0x5c29x5=0;_0x5c29x5< _0x5c29x2[_0xd587[67]];_0x5c29x5++){var _0x5c29x9=_0x5c29x2[_0x5c29x5];if(_0x5c29x9 instanceof mxRootChange){return []};for(var _0x5c29x9=this[_0xd587[2756]](_0x5c29x9),_0x5c29xa=0;_0x5c29xa< _0x5c29x9[_0xd587[67]];_0x5c29xa++){if(null!= _0x5c29x9[_0x5c29xa]){var _0x5c29x12=mxCellPath[_0xd587[385]](_0x5c29x9[_0x5c29xa]);null== _0x5c29x4[_0x5c29x12]&& (_0x5c29x4[_0x5c29x12]= _0x5c29x9[_0x5c29xa],_0x5c29x3[_0xd587[207]](_0x5c29x9[_0x5c29xa]))}}};return _0x5c29x3};mxLayoutManager[_0xd587[202]][_0xd587[2756]]= function(_0x5c29x2){var _0x5c29x3=this[_0xd587[1703]]()[_0xd587[502]]();return _0x5c29x2 instanceof mxChildChange?[_0x5c29x2[_0xd587[247]],_0x5c29x2[_0xd587[257]],_0x5c29x3[_0xd587[1197]](_0x5c29x2[_0xd587[247]])]:_0x5c29x2 instanceof mxTerminalChange|| _0x5c29x2 instanceof mxGeometryChange?[_0x5c29x2[_0xd587[246]],_0x5c29x3[_0xd587[1197]](_0x5c29x2[_0xd587[246]])]:[]};mxLayoutManager[_0xd587[202]][_0xd587[828]]= function(_0x5c29x2){if(0< _0x5c29x2[_0xd587[67]]){var _0x5c29x3=this[_0xd587[1703]]()[_0xd587[502]]();_0x5c29x3[_0xd587[473]]();try{for(var _0x5c29x4=null,_0x5c29x5=0;_0x5c29x5< _0x5c29x2[_0xd587[67]];_0x5c29x5++){_0x5c29x2[_0x5c29x5]!= _0x5c29x3[_0xd587[501]]()&& _0x5c29x2[_0x5c29x5]!= _0x5c29x4&& (_0x5c29x4= _0x5c29x2[_0x5c29x5],this[_0xd587[2757]](this[_0xd587[2754]](_0x5c29x4),_0x5c29x4))};this[_0xd587[746]]( new mxEventObject(mxEvent.LAYOUT_CELLS,_0xd587[895],_0x5c29x2))}finally{_0x5c29x3[_0xd587[476]]()}}};mxLayoutManager[_0xd587[202]][_0xd587[2757]]= function(_0x5c29x2,_0x5c29x3){null!= _0x5c29x2&& null!= _0x5c29x3&& _0x5c29x2[_0xd587[350]](_0x5c29x3)};mxLayoutManager[_0xd587[202]][_0xd587[515]]= function(){this[_0xd587[1178]](null)};function mxSpaceManager(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){this[_0xd587[2758]]= mxUtils[_0xd587[885]](this,function(_0x5c29x2,_0x5c29x3){this[_0xd587[994]]()&& this[_0xd587[837]](_0x5c29x3[_0xd587[720]](_0xd587[895]))});this[_0xd587[2759]]= mxUtils[_0xd587[885]](this,function(_0x5c29x2,_0x5c29x3){this[_0xd587[994]]()&& this[_0xd587[837]](_0x5c29x3[_0xd587[720]](_0xd587[895]))});this[_0xd587[2760]]= null!= _0x5c29x3?_0x5c29x3:!0;this[_0xd587[2761]]= null!= _0x5c29x4?_0x5c29x4:!0;this[_0xd587[2392]]= null!= _0x5c29x5?_0x5c29x5:!0;this[_0xd587[1178]](_0x5c29x2)}mxSpaceManager[_0xd587[202]]= new mxEventSource;mxSpaceManager[_0xd587[202]][_0xd587[196]]= mxSpaceManager;mxSpaceManager[_0xd587[202]][_0xd587[1179]]= null;mxSpaceManager[_0xd587[202]][_0xd587[984]]= !0;mxSpaceManager[_0xd587[202]][_0xd587[2760]]= !0;mxSpaceManager[_0xd587[202]][_0xd587[2761]]= !0;mxSpaceManager[_0xd587[202]][_0xd587[2392]]= !0;mxSpaceManager[_0xd587[202]][_0xd587[2758]]= null;mxSpaceManager[_0xd587[202]][_0xd587[2759]]= null;mxSpaceManager[_0xd587[202]][_0xd587[2762]]= function(_0x5c29x2){return !this[_0xd587[1703]]()[_0xd587[502]]()[_0xd587[1193]](_0x5c29x2)};mxSpaceManager[_0xd587[202]][_0xd587[2763]]= function(_0x5c29x2){return this[_0xd587[1703]]()[_0xd587[502]]()[_0xd587[1193]](_0x5c29x2)&& this[_0xd587[1703]]()[_0xd587[1712]](_0x5c29x2)};mxSpaceManager[_0xd587[202]][_0xd587[994]]= function(){return this[_0xd587[984]]};mxSpaceManager[_0xd587[202]][_0xd587[995]]= function(_0x5c29x2){this[_0xd587[984]]= _0x5c29x2};mxSpaceManager[_0xd587[202]][_0xd587[2764]]= function(){return this[_0xd587[2760]]};mxSpaceManager[_0xd587[202]][_0xd587[2765]]= function(_0x5c29x2){this[_0xd587[2760]]= _0x5c29x2};mxSpaceManager[_0xd587[202]][_0xd587[2766]]= function(){return this[_0xd587[2761]]};mxSpaceManager[_0xd587[202]][_0xd587[2767]]= function(_0x5c29x2){this[_0xd587[2761]]= _0x5c29x2};mxSpaceManager[_0xd587[202]][_0xd587[2678]]= function(){return this[_0xd587[2392]]};mxSpaceManager[_0xd587[202]][_0xd587[2679]]= function(_0x5c29x2){this[_0xd587[2392]]= _0x5c29x2};mxSpaceManager[_0xd587[202]][_0xd587[1703]]= function(){return this[_0xd587[1179]]};mxSpaceManager[_0xd587[202]][_0xd587[1178]]= function(_0x5c29x2){null!= this[_0xd587[1179]]&& (this[_0xd587[1179]][_0xd587[745]](this[_0xd587[2758]]),this[_0xd587[1179]][_0xd587[745]](this[_0xd587[2759]]));this[_0xd587[1179]]= _0x5c29x2;null!= this[_0xd587[1179]]&& (this[_0xd587[1179]][_0xd587[169]](mxEvent.RESIZE_CELLS,this[_0xd587[2758]]),this[_0xd587[1179]][_0xd587[169]](mxEvent.FOLD_CELLS,this[_0xd587[2759]]))};mxSpaceManager[_0xd587[202]][_0xd587[837]]= function(_0x5c29x2){if(null!= _0x5c29x2){var _0x5c29x3=this[_0xd587[1179]][_0xd587[502]]();_0x5c29x3[_0xd587[473]]();try{for(var _0x5c29x4=0;_0x5c29x4< _0x5c29x2[_0xd587[67]];_0x5c29x4++){if(!this[_0xd587[2762]](_0x5c29x2[_0x5c29x4])){this[_0xd587[2768]](_0x5c29x2[_0x5c29x4]);break}}}finally{_0x5c29x3[_0xd587[476]]()}}};mxSpaceManager[_0xd587[202]][_0xd587[2768]]= function(_0x5c29x2){var _0x5c29x3=this[_0xd587[1703]](),_0x5c29x4=_0x5c29x3[_0xd587[249]](),_0x5c29x5=_0x5c29x3[_0xd587[502]](),_0x5c29x9=_0x5c29x4[_0xd587[248]](_0x5c29x2),_0x5c29xa=_0x5c29x4[_0xd587[248]](_0x5c29x5[_0xd587[1197]](_0x5c29x2));if(null!= _0x5c29x9&& null!= _0x5c29xa){var _0x5c29x12=this[_0xd587[2769]](_0x5c29x9),_0x5c29x13=_0x5c29x5[_0xd587[1721]](_0x5c29x2);if(null!= _0x5c29x12&& null!= _0x5c29x13){var _0x5c29x14=_0x5c29x4[_0xd587[513]],_0x5c29x15=_0x5c29x4[_0xd587[255]],_0x5c29x4=_0x5c29x9[_0xd587[235]]- _0x5c29xa[_0xd587[2078]][_0xd587[235]]- _0x5c29x14[_0xd587[235]]* _0x5c29x15,_0x5c29xa=_0x5c29x9[_0xd587[236]]- _0x5c29xa[_0xd587[2078]][_0xd587[236]]- _0x5c29x14[_0xd587[236]]* _0x5c29x15,_0x5c29x14=_0x5c29x9[_0xd587[235]]+ _0x5c29x9[_0xd587[117]],_0x5c29x16=_0x5c29x9[_0xd587[236]]+ _0x5c29x9[_0xd587[119]],_0x5c29x17=_0x5c29x9[_0xd587[117]]- _0x5c29x13[_0xd587[117]]* _0x5c29x15+ _0x5c29x4- _0x5c29x13[_0xd587[235]]* _0x5c29x15,_0x5c29x18=_0x5c29x9[_0xd587[119]]- _0x5c29x13[_0xd587[119]]* _0x5c29x15+ _0x5c29xa- _0x5c29x13[_0xd587[236]]* _0x5c29x15,_0x5c29x19=1- _0x5c29x13[_0xd587[117]]* _0x5c29x15/ _0x5c29x9[_0xd587[117]],_0x5c29x9=1- _0x5c29x13[_0xd587[119]]* _0x5c29x15/ _0x5c29x9[_0xd587[119]];_0x5c29x5[_0xd587[473]]();try{for(_0x5c29x13= 0;_0x5c29x13< _0x5c29x12[_0xd587[67]];_0x5c29x13++){_0x5c29x12[_0x5c29x13]!= _0x5c29x2&& this[_0xd587[2763]](_0x5c29x12[_0x5c29x13])&& this[_0xd587[2770]](_0x5c29x12[_0x5c29x13],_0x5c29x17,_0x5c29x18,_0x5c29x4,_0x5c29xa,_0x5c29x14,_0x5c29x16,_0x5c29x19,_0x5c29x9,this[_0xd587[2678]]()&& _0x5c29x3[_0xd587[2507]](_0x5c29x12[_0x5c29x13]))}}finally{_0x5c29x5[_0xd587[476]]()}}}};mxSpaceManager[_0xd587[202]][_0xd587[2770]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa,_0x5c29x12,_0x5c29x13,_0x5c29x14,_0x5c29x15){_0x5c29x5= this[_0xd587[1703]]();var _0x5c29x16=_0x5c29x5[_0xd587[249]]()[_0xd587[248]](_0x5c29x2);if(null!= _0x5c29x16){var _0x5c29x17=_0x5c29x5[_0xd587[502]](),_0x5c29x18=_0x5c29x17[_0xd587[1721]](_0x5c29x2);if(null!= _0x5c29x18){_0x5c29x17[_0xd587[473]]();try{if(this[_0xd587[2764]]()){if(_0x5c29x16[_0xd587[235]]>= _0x5c29xa){_0x5c29x18= _0x5c29x18[_0xd587[238]](),_0x5c29x18[_0xd587[513]](-_0x5c29x3,0)}else {var _0x5c29x19=Math[_0xd587[160]](0,_0x5c29x16[_0xd587[235]]- x0),_0x5c29x18=_0x5c29x18[_0xd587[238]]();_0x5c29x18[_0xd587[513]](-_0x5c29x13* _0x5c29x19,0)}};if(this[_0xd587[2766]]()){if(_0x5c29x16[_0xd587[236]]>= _0x5c29x12){_0x5c29x18= _0x5c29x18[_0xd587[238]](),_0x5c29x18[_0xd587[513]](0,-_0x5c29x4)}else {var _0x5c29x1a=Math[_0xd587[160]](0,_0x5c29x16[_0xd587[236]]- _0x5c29x9),_0x5c29x18=_0x5c29x18[_0xd587[238]]();_0x5c29x18[_0xd587[513]](0,-_0x5c29x14* _0x5c29x1a)}};_0x5c29x18!= _0x5c29x17[_0xd587[1721]](_0x5c29x2)&& (_0x5c29x17[_0xd587[1724]](_0x5c29x2,_0x5c29x18),_0x5c29x15&& _0x5c29x5[_0xd587[2508]](_0x5c29x2))}finally{_0x5c29x17[_0xd587[476]]()}}}};mxSpaceManager[_0xd587[202]][_0xd587[2769]]= function(_0x5c29x2){var _0x5c29x3=this[_0xd587[1703]](),_0x5c29x4=_0x5c29x3[_0xd587[502]]()[_0xd587[1197]](_0x5c29x2[_0xd587[246]]),_0x5c29x5=this[_0xd587[2766]](),_0x5c29x9=this[_0xd587[2764]]();return _0x5c29x3[_0xd587[2691]](_0x5c29x2[_0xd587[235]]+ (_0x5c29x5?0:_0x5c29x2[_0xd587[117]]),_0x5c29x2[_0xd587[236]]+ (_0x5c29x5&& _0x5c29x9?0:_0x5c29x2[_0xd587[119]]),_0x5c29x4,_0x5c29x9,_0x5c29x5)};mxSpaceManager[_0xd587[202]][_0xd587[515]]= function(){this[_0xd587[1178]](null)};function mxSwimlaneManager(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){this[_0xd587[662]]= null!= _0x5c29x3?_0x5c29x3:!0;this[_0xd587[2771]]= null!= _0x5c29x4?_0x5c29x4:!0;this[_0xd587[2772]]= null!= _0x5c29x5?_0x5c29x5:!0;this[_0xd587[2773]]= mxUtils[_0xd587[885]](this,function(_0x5c29x2,_0x5c29x3){this[_0xd587[994]]()&& this[_0xd587[2774]]()&& this[_0xd587[833]](_0x5c29x3[_0xd587[720]](_0xd587[895]))});this[_0xd587[2758]]= mxUtils[_0xd587[885]](this,function(_0x5c29x2,_0x5c29x3){this[_0xd587[994]]()&& this[_0xd587[2775]]()&& this[_0xd587[837]](_0x5c29x3[_0xd587[720]](_0xd587[895]))});this[_0xd587[1178]](_0x5c29x2)}mxSwimlaneManager[_0xd587[202]]= new mxEventSource;mxSwimlaneManager[_0xd587[202]][_0xd587[196]]= mxSwimlaneManager;mxSwimlaneManager[_0xd587[202]][_0xd587[1179]]= null;mxSwimlaneManager[_0xd587[202]][_0xd587[984]]= !0;mxSwimlaneManager[_0xd587[202]][_0xd587[662]]= !0;mxSwimlaneManager[_0xd587[202]][_0xd587[2771]]= !0;mxSwimlaneManager[_0xd587[202]][_0xd587[2772]]= !0;mxSwimlaneManager[_0xd587[202]][_0xd587[2773]]= null;mxSwimlaneManager[_0xd587[202]][_0xd587[2758]]= null;mxSwimlaneManager[_0xd587[202]][_0xd587[994]]= function(){return this[_0xd587[984]]};mxSwimlaneManager[_0xd587[202]][_0xd587[995]]= function(_0x5c29x2){this[_0xd587[984]]= _0x5c29x2};mxSwimlaneManager[_0xd587[202]][_0xd587[1737]]= function(){return this[_0xd587[662]]};mxSwimlaneManager[_0xd587[202]][_0xd587[2776]]= function(_0x5c29x2){this[_0xd587[662]]= _0x5c29x2};mxSwimlaneManager[_0xd587[202]][_0xd587[2774]]= function(){return this[_0xd587[2771]]};mxSwimlaneManager[_0xd587[202]][_0xd587[2777]]= function(_0x5c29x2){this[_0xd587[2771]]= _0x5c29x2};mxSwimlaneManager[_0xd587[202]][_0xd587[2775]]= function(){return this[_0xd587[2772]]};mxSwimlaneManager[_0xd587[202]][_0xd587[2778]]= function(_0x5c29x2){this[_0xd587[2772]]= _0x5c29x2};mxSwimlaneManager[_0xd587[202]][_0xd587[1703]]= function(){return this[_0xd587[1179]]};mxSwimlaneManager[_0xd587[202]][_0xd587[1178]]= function(_0x5c29x2){null!= this[_0xd587[1179]]&& (this[_0xd587[1179]][_0xd587[745]](this[_0xd587[2773]]),this[_0xd587[1179]][_0xd587[745]](this[_0xd587[2758]]));this[_0xd587[1179]]= _0x5c29x2;null!= this[_0xd587[1179]]&& (this[_0xd587[1179]][_0xd587[169]](mxEvent.ADD_CELLS,this[_0xd587[2773]]),this[_0xd587[1179]][_0xd587[169]](mxEvent.CELLS_RESIZED,this[_0xd587[2758]]))};mxSwimlaneManager[_0xd587[202]][_0xd587[2779]]= function(_0x5c29x2){return !this[_0xd587[1703]]()[_0xd587[1730]](_0x5c29x2)};mxSwimlaneManager[_0xd587[202]][_0xd587[2780]]= function(_0x5c29x2){if(this[_0xd587[1179]][_0xd587[1730]](_0x5c29x2)){var _0x5c29x3=this[_0xd587[1179]][_0xd587[441]][_0xd587[248]](_0x5c29x2);_0x5c29x2= null!= _0x5c29x3?_0x5c29x3[_0xd587[124]]:this[_0xd587[1179]][_0xd587[1705]](_0x5c29x2);return 1== mxUtils[_0xd587[433]](_0x5c29x2,mxConstants.STYLE_HORIZONTAL,1)};return !this[_0xd587[1737]]()};mxSwimlaneManager[_0xd587[202]][_0xd587[833]]= function(_0x5c29x2){if(null!= _0x5c29x2){var _0x5c29x3=this[_0xd587[1703]]()[_0xd587[502]]();_0x5c29x3[_0xd587[473]]();try{for(var _0x5c29x4=0;_0x5c29x4< _0x5c29x2[_0xd587[67]];_0x5c29x4++){this[_0xd587[2779]](_0x5c29x2[_0x5c29x4])|| this[_0xd587[2781]](_0x5c29x2[_0x5c29x4])}}finally{_0x5c29x3[_0xd587[476]]()}}};mxSwimlaneManager[_0xd587[202]][_0xd587[2781]]= function(_0x5c29x2){for(var _0x5c29x3=this[_0xd587[1703]]()[_0xd587[502]](),_0x5c29x4=_0x5c29x3[_0xd587[1197]](_0x5c29x2),_0x5c29x5=_0x5c29x3[_0xd587[262]](_0x5c29x4),_0x5c29x9=null,_0x5c29xa=0;_0x5c29xa< _0x5c29x5;_0x5c29xa++){var _0x5c29x12=_0x5c29x3[_0xd587[263]](_0x5c29x4,_0x5c29xa);if(_0x5c29x12!= _0x5c29x2&& !this[_0xd587[2779]](_0x5c29x12)&& (_0x5c29x9= _0x5c29x3[_0xd587[1721]](_0x5c29x12),null!= _0x5c29x9)){break}};null!= _0x5c29x9&& this[_0xd587[2782]](_0x5c29x2,_0x5c29x9[_0xd587[117]],_0x5c29x9[_0xd587[119]])};mxSwimlaneManager[_0xd587[202]][_0xd587[837]]= function(_0x5c29x2){if(null!= _0x5c29x2){var _0x5c29x3=this[_0xd587[1703]]()[_0xd587[502]]();_0x5c29x3[_0xd587[473]]();try{for(var _0x5c29x4=0;_0x5c29x4< _0x5c29x2[_0xd587[67]];_0x5c29x4++){if(!this[_0xd587[2779]](_0x5c29x2[_0x5c29x4])){var _0x5c29x5=_0x5c29x3[_0xd587[1721]](_0x5c29x2[_0x5c29x4]);if(null!= _0x5c29x5){for(var _0x5c29x9= new mxRectangle(0,0,_0x5c29x5[_0xd587[117]],_0x5c29x5[_0xd587[119]]),_0x5c29xa=_0x5c29x2[_0x5c29x4],_0x5c29x12=_0x5c29xa;null!= _0x5c29x12;){var _0x5c29xa=_0x5c29x12,_0x5c29x12=_0x5c29x3[_0xd587[1197]](_0x5c29x12),_0x5c29x13=this[_0xd587[1179]][_0xd587[1730]](_0x5c29x12)?this[_0xd587[1179]][_0xd587[1731]](_0x5c29x12): new mxRectangle;_0x5c29x9[_0xd587[117]]+= _0x5c29x13[_0xd587[117]];_0x5c29x9[_0xd587[119]]+= _0x5c29x13[_0xd587[119]]};this[_0xd587[2782]](_0x5c29xa,_0x5c29x9[_0xd587[117]],_0x5c29x9[_0xd587[119]])}}}}finally{_0x5c29x3[_0xd587[476]]()}}};mxSwimlaneManager[_0xd587[202]][_0xd587[2782]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){var _0x5c29x5=this[_0xd587[1703]]()[_0xd587[502]]();_0x5c29x5[_0xd587[473]]();try{if(!this[_0xd587[2779]](_0x5c29x2)){var _0x5c29x9=_0x5c29x5[_0xd587[1721]](_0x5c29x2);if(null!= _0x5c29x9){var _0x5c29xa=this[_0xd587[2780]](_0x5c29x2);if(_0x5c29xa&& _0x5c29x9[_0xd587[119]]!= _0x5c29x4|| !_0x5c29xa&& _0x5c29x9[_0xd587[117]]!= _0x5c29x3){_0x5c29x9= _0x5c29x9[_0xd587[238]](),_0x5c29xa?_0x5c29x9[_0xd587[119]]= _0x5c29x4:_0x5c29x9[_0xd587[117]]= _0x5c29x3,_0x5c29x5[_0xd587[1724]](_0x5c29x2,_0x5c29x9)}}};var _0x5c29x12=this[_0xd587[1179]][_0xd587[1730]](_0x5c29x2)?this[_0xd587[1179]][_0xd587[1731]](_0x5c29x2): new mxRectangle;_0x5c29x3-= _0x5c29x12[_0xd587[117]];_0x5c29x4-= _0x5c29x12[_0xd587[119]];for(var _0x5c29x13=_0x5c29x5[_0xd587[262]](_0x5c29x2),_0x5c29x9=0;_0x5c29x9< _0x5c29x13;_0x5c29x9++){var _0x5c29x14=_0x5c29x5[_0xd587[263]](_0x5c29x2,_0x5c29x9);this[_0xd587[2782]](_0x5c29x14,_0x5c29x3,_0x5c29x4)}}finally{_0x5c29x5[_0xd587[476]]()}};mxSwimlaneManager[_0xd587[202]][_0xd587[515]]= function(){this[_0xd587[1178]](null)};function mxTemporaryCellStates(_0x5c29x2,_0x5c29x3,_0x5c29x4){this[_0xd587[441]]= _0x5c29x2;_0x5c29x3= null!= _0x5c29x3?_0x5c29x3:1;this[_0xd587[2783]]= _0x5c29x2[_0xd587[517]]();this[_0xd587[2784]]= _0x5c29x2[_0xd587[2312]]();this[_0xd587[2785]]= _0x5c29x2[_0xd587[518]]();_0x5c29x2[_0xd587[1517]]( new mxDictionary);_0x5c29x2[_0xd587[2262]](_0x5c29x3);if(null!= _0x5c29x4){_0x5c29x3= _0x5c29x2[_0xd587[1230]]( new mxCell);for(var _0x5c29x5=0;_0x5c29x5< _0x5c29x4[_0xd587[67]];_0x5c29x5++){_0x5c29x2[_0xd587[2267]](_0x5c29x3,_0x5c29x4[_0x5c29x5])};for(var _0x5c29x9=null,_0x5c29x5=0;_0x5c29x5< _0x5c29x4[_0xd587[67]];_0x5c29x5++){var _0x5c29xa=_0x5c29x2[_0xd587[2268]](_0x5c29x3,_0x5c29x4[_0x5c29x5]);null== _0x5c29x9?_0x5c29x9= _0x5c29xa:_0x5c29x9[_0xd587[99]](_0x5c29xa)};null== _0x5c29x9&& (_0x5c29x9= new mxRectangle);_0x5c29x2[_0xd587[2256]](_0x5c29x9)}}mxTemporaryCellStates[_0xd587[202]][_0xd587[441]]= null;mxTemporaryCellStates[_0xd587[202]][_0xd587[2784]]= null;mxTemporaryCellStates[_0xd587[202]][_0xd587[2783]]= null;mxTemporaryCellStates[_0xd587[202]][_0xd587[2785]]= null;mxTemporaryCellStates[_0xd587[202]][_0xd587[515]]= function(){this[_0xd587[441]][_0xd587[2262]](this[_0xd587[2785]]);this[_0xd587[441]][_0xd587[1517]](this[_0xd587[2784]]);this[_0xd587[441]][_0xd587[2256]](this[_0xd587[2783]])};function mxCellStatePreview(_0x5c29x2){this[_0xd587[1179]]= _0x5c29x2;this[_0xd587[2786]]= {}}mxCellStatePreview[_0xd587[202]][_0xd587[1179]]= null;mxCellStatePreview[_0xd587[202]][_0xd587[2786]]= null;mxCellStatePreview[_0xd587[202]][_0xd587[2787]]= 0;mxCellStatePreview[_0xd587[202]][_0xd587[1107]]= function(){return 0== this[_0xd587[2787]]};mxCellStatePreview[_0xd587[202]][_0xd587[1194]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){_0x5c29x5= null!= _0x5c29x5?_0x5c29x5:!0;_0x5c29x9= null!= _0x5c29x9?_0x5c29x9:!0;var _0x5c29xa=mxCellPath[_0xd587[385]](_0x5c29x2[_0xd587[246]]),_0x5c29x12=this[_0xd587[2786]][_0x5c29xa];null== _0x5c29x12?(_0x5c29x12= new mxPoint(_0x5c29x3,_0x5c29x4),this[_0xd587[2786]][_0x5c29xa]= _0x5c29x12,this[_0xd587[2787]]++):_0x5c29x5?(_0x5c29x12[_0xd587[2788]]+= _0x5c29x3,_0x5c29x12[_0xd587[2789]]+= _0x5c29x4):(_0x5c29x12[_0xd587[2788]]= _0x5c29x3,_0x5c29x12[_0xd587[2789]]= _0x5c29x4);_0x5c29x9&& this[_0xd587[2790]](_0x5c29x2);return _0x5c29x12};mxCellStatePreview[_0xd587[202]][_0xd587[539]]= function(_0x5c29x2){var _0x5c29x3=this[_0xd587[1179]][_0xd587[502]](),_0x5c29x4=_0x5c29x3[_0xd587[501]](),_0x5c29x5;for(_0x5c29x5 in this[_0xd587[2786]]){var _0x5c29x9=mxCellPath[_0xd587[2791]](_0x5c29x4,_0x5c29x5),_0x5c29xa=this[_0xd587[1179]][_0xd587[441]][_0xd587[248]](_0x5c29x9),_0x5c29x12=this[_0xd587[2786]][_0x5c29x5],_0x5c29x9=this[_0xd587[1179]][_0xd587[441]][_0xd587[248]](_0x5c29x3[_0xd587[1197]](_0x5c29x9));this[_0xd587[2792]](_0x5c29x9,_0x5c29xa,_0x5c29x12[_0xd587[235]],_0x5c29x12[_0xd587[236]])};for(_0x5c29x5 in this[_0xd587[2786]]){_0x5c29x9= mxCellPath[_0xd587[2791]](_0x5c29x4,_0x5c29x5),_0x5c29xa= this[_0xd587[1179]][_0xd587[441]][_0xd587[248]](_0x5c29x9),_0x5c29x12= this[_0xd587[2786]][_0x5c29x5],_0x5c29x9= this[_0xd587[1179]][_0xd587[441]][_0xd587[248]](_0x5c29x3[_0xd587[1197]](_0x5c29x9)),this[_0xd587[2793]](_0x5c29x9,_0x5c29xa,_0x5c29x12[_0xd587[235]],_0x5c29x12[_0xd587[236]],_0x5c29x2)}};mxCellStatePreview[_0xd587[202]][_0xd587[2792]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){if(null!= _0x5c29x3){var _0x5c29x9=this[_0xd587[1179]][_0xd587[502]]();if(_0x5c29x9[_0xd587[1193]](_0x5c29x3[_0xd587[246]])){_0x5c29x3[_0xd587[2080]]= !0;this[_0xd587[1179]][_0xd587[441]][_0xd587[2267]](_0x5c29x2,_0x5c29x3[_0xd587[246]]);_0x5c29x2= _0x5c29x9[_0xd587[1721]](_0x5c29x3[_0xd587[246]]);var _0x5c29xa=mxCellPath[_0xd587[385]](_0x5c29x3[_0xd587[246]]);if((0!= _0x5c29x4|| 0!= _0x5c29x5)&& null!= _0x5c29x2&& (!_0x5c29x2[_0xd587[1500]]|| null!= this[_0xd587[2786]][_0x5c29xa])){_0x5c29x3[_0xd587[235]]+= _0x5c29x4,_0x5c29x3[_0xd587[236]]+= _0x5c29x5}};_0x5c29x2= _0x5c29x9[_0xd587[262]](_0x5c29x3[_0xd587[246]]);for(_0x5c29xa= 0;_0x5c29xa< _0x5c29x2;_0x5c29xa++){this[_0xd587[2792]](_0x5c29x3,this[_0xd587[1179]][_0xd587[441]][_0xd587[248]](_0x5c29x9[_0xd587[263]](_0x5c29x3[_0xd587[246]],_0x5c29xa)),_0x5c29x4,_0x5c29x5)}}};mxCellStatePreview[_0xd587[202]][_0xd587[2793]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){if(null!= _0x5c29x3){_0x5c29x3[_0xd587[2080]]= !0;this[_0xd587[1179]][_0xd587[441]][_0xd587[2268]](_0x5c29x2,_0x5c29x3[_0xd587[246]]);var _0x5c29xa=mxCellPath[_0xd587[385]](_0x5c29x3[_0xd587[246]]),_0x5c29x12=this[_0xd587[1179]][_0xd587[502]](),_0x5c29x13=this[_0xd587[1179]][_0xd587[1198]](_0x5c29x3[_0xd587[246]]);if((0!= _0x5c29x4|| 0!= _0x5c29x5)&& null!= _0x5c29x13&& _0x5c29x13[_0xd587[1500]]&& _0x5c29x12[_0xd587[1193]](_0x5c29x3[_0xd587[246]])&& (null== _0x5c29x2|| _0x5c29x12[_0xd587[1193]](_0x5c29x2[_0xd587[246]])|| null!= this[_0xd587[2786]][_0x5c29xa])){_0x5c29x3[_0xd587[235]]+= _0x5c29x4,_0x5c29x3[_0xd587[236]]+= _0x5c29x5,this[_0xd587[1179]][_0xd587[259]][_0xd587[258]](_0x5c29x3)};null!= _0x5c29x9&& _0x5c29x9(_0x5c29x3);_0x5c29x2= _0x5c29x12[_0xd587[262]](_0x5c29x3[_0xd587[246]]);for(_0x5c29xa= 0;_0x5c29xa< _0x5c29x2;_0x5c29xa++){this[_0xd587[2793]](_0x5c29x3,this[_0xd587[1179]][_0xd587[441]][_0xd587[248]](_0x5c29x12[_0xd587[263]](_0x5c29x3[_0xd587[246]],_0x5c29xa)),_0x5c29x4,_0x5c29x5,_0x5c29x9)}}};mxCellStatePreview[_0xd587[202]][_0xd587[2790]]= function(_0x5c29x2){for(var _0x5c29x3=this[_0xd587[1179]][_0xd587[502]](),_0x5c29x4=_0x5c29x3[_0xd587[1707]](_0x5c29x2[_0xd587[246]]),_0x5c29x5=0;_0x5c29x5< _0x5c29x4;_0x5c29x5++){var _0x5c29x9=this[_0xd587[1179]][_0xd587[441]][_0xd587[248]](_0x5c29x3[_0xd587[1708]](_0x5c29x2[_0xd587[246]],_0x5c29x5));null!= _0x5c29x9&& this[_0xd587[1194]](_0x5c29x9,0,0)}};function mxConnectionConstraint(_0x5c29x2,_0x5c29x3){this[_0xd587[2546]]= _0x5c29x2;this[_0xd587[591]]= null!= _0x5c29x3?_0x5c29x3:!0}mxConnectionConstraint[_0xd587[202]][_0xd587[2546]]= null;mxConnectionConstraint[_0xd587[202]][_0xd587[591]]= null;function mxGraphHandler(_0x5c29x2){this[_0xd587[1179]]= _0x5c29x2;this[_0xd587[1179]][_0xd587[1133]](this);this[_0xd587[2730]]= mxUtils[_0xd587[885]](this,function(){this[_0xd587[2794]]()});this[_0xd587[1179]][_0xd587[169]](mxEvent.PAN,this[_0xd587[2730]])}mxGraphHandler[_0xd587[202]][_0xd587[1179]]= null;mxGraphHandler[_0xd587[202]][_0xd587[2795]]= mxClient[_0xd587[80]]?20:50;mxGraphHandler[_0xd587[202]][_0xd587[984]]= !0;mxGraphHandler[_0xd587[202]][_0xd587[2796]]= !0;mxGraphHandler[_0xd587[202]][_0xd587[2797]]= !0;mxGraphHandler[_0xd587[202]][_0xd587[2798]]= !0;mxGraphHandler[_0xd587[202]][_0xd587[990]]= !1;mxGraphHandler[_0xd587[202]][_0xd587[2799]]= null;mxGraphHandler[_0xd587[202]][_0xd587[2800]]= null;mxGraphHandler[_0xd587[202]][_0xd587[2801]]= null;mxGraphHandler[_0xd587[202]][_0xd587[2802]]= !0;mxGraphHandler[_0xd587[202]][_0xd587[2803]]= !0;mxGraphHandler[_0xd587[202]][_0xd587[846]]= !0;mxGraphHandler[_0xd587[202]][_0xd587[2804]]= !1;mxGraphHandler[_0xd587[202]][_0xd587[2805]]= !0;mxGraphHandler[_0xd587[202]][_0xd587[923]]= 6;mxGraphHandler[_0xd587[202]][_0xd587[2806]]= _0xd587[586];mxGraphHandler[_0xd587[202]][_0xd587[2807]]= !1;mxGraphHandler[_0xd587[202]][_0xd587[253]]= null;mxGraphHandler[_0xd587[202]][_0xd587[2808]]= !1;mxGraphHandler[_0xd587[202]][_0xd587[2809]]= !0;mxGraphHandler[_0xd587[202]][_0xd587[994]]= function(){return this[_0xd587[984]]};mxGraphHandler[_0xd587[202]][_0xd587[995]]= function(_0x5c29x2){this[_0xd587[984]]= _0x5c29x2};mxGraphHandler[_0xd587[202]][_0xd587[2810]]= function(){return this[_0xd587[2797]]};mxGraphHandler[_0xd587[202]][_0xd587[2811]]= function(_0x5c29x2){this[_0xd587[2797]]= _0x5c29x2};mxGraphHandler[_0xd587[202]][_0xd587[2812]]= function(){return this[_0xd587[2798]]};mxGraphHandler[_0xd587[202]][_0xd587[2813]]= function(_0x5c29x2){this[_0xd587[2798]]= _0x5c29x2};mxGraphHandler[_0xd587[202]][_0xd587[2814]]= function(){return this[_0xd587[2803]]};mxGraphHandler[_0xd587[202]][_0xd587[2815]]= function(_0x5c29x2){this[_0xd587[2803]]= _0x5c29x2};mxGraphHandler[_0xd587[202]][_0xd587[2816]]= function(){return this[_0xd587[846]]};mxGraphHandler[_0xd587[202]][_0xd587[2817]]= function(_0x5c29x2){this[_0xd587[846]]= _0x5c29x2};mxGraphHandler[_0xd587[202]][_0xd587[2818]]= function(_0x5c29x2){return _0x5c29x2[_0xd587[736]]()};mxGraphHandler[_0xd587[202]][_0xd587[2819]]= function(_0x5c29x2){return this[_0xd587[1179]][_0xd587[2692]](_0x5c29x2)};mxGraphHandler[_0xd587[202]][_0xd587[787]]= function(_0x5c29x2,_0x5c29x3){if(!_0x5c29x3[_0xd587[721]]()&& this[_0xd587[994]]()&& this[_0xd587[1179]][_0xd587[994]]()&& !this[_0xd587[1179]][_0xd587[2579]](_0x5c29x3[_0xd587[727]]())&& null!= _0x5c29x3[_0xd587[248]]()){var _0x5c29x4=this[_0xd587[2818]](_0x5c29x3);this[_0xd587[246]]= null;this[_0xd587[2820]]= this[_0xd587[2819]](_0x5c29x4);this[_0xd587[2814]]()&& !this[_0xd587[2820]]&& this[_0xd587[1179]][_0xd587[2459]](_0x5c29x4,_0x5c29x3[_0xd587[727]]());if(this[_0xd587[2812]]()){var _0x5c29x5=this[_0xd587[1179]][_0xd587[251]],_0x5c29x9=_0x5c29x5[_0xd587[1721]](_0x5c29x4);this[_0xd587[1179]][_0xd587[1712]](_0x5c29x4)&& (!_0x5c29x5[_0xd587[250]](_0x5c29x4)|| 1< this[_0xd587[1179]][_0xd587[2694]]()|| null!= _0x5c29x9[_0xd587[1525]]&& 0< _0x5c29x9[_0xd587[1525]][_0xd587[67]]|| null== _0x5c29x5[_0xd587[1709]](_0x5c29x4,!0)|| null== _0x5c29x5[_0xd587[1709]](_0x5c29x4,!1)|| this[_0xd587[1179]][_0xd587[2406]]|| this[_0xd587[1179]][_0xd587[2574]](_0x5c29x3[_0xd587[727]]())&& this[_0xd587[1179]][_0xd587[2617]]())&& this[_0xd587[861]](_0x5c29x4,_0x5c29x3[_0xd587[730]](),_0x5c29x3[_0xd587[732]]());this[_0xd587[2821]]= !0;!mxClient[_0xd587[75]]&& !mxClient[_0xd587[76]]|| _0xd587[2822]!= _0x5c29x3[_0xd587[728]]()[_0xd587[301]]?_0x5c29x3[_0xd587[722]]():mxClient[_0xd587[75]]&& _0xd587[2822]== _0x5c29x3[_0xd587[728]]()[_0xd587[301]]&& (this[_0xd587[2821]]= !1,this[_0xd587[2823]]= null)}}};mxGraphHandler[_0xd587[202]][_0xd587[1010]]= function(){var _0x5c29x2=this[_0xd587[1179]][_0xd587[902]](),_0x5c29x3=this[_0xd587[1179]][_0xd587[502]](),_0x5c29x4=mxUtils[_0xd587[885]](this,function(_0x5c29x2){return null!= this[_0xd587[1179]][_0xd587[441]][_0xd587[248]](_0x5c29x2)&& _0x5c29x3[_0xd587[1193]](_0x5c29x2)&& null!= _0x5c29x3[_0xd587[1721]](_0x5c29x2)&& !_0x5c29x3[_0xd587[1721]](_0x5c29x2)[_0xd587[1500]]});return this[_0xd587[1179]][_0xd587[441]][_0xd587[2313]](_0x5c29x3[_0xd587[1921]](_0x5c29x4,_0x5c29x2))};mxGraphHandler[_0xd587[202]][_0xd587[2690]]= function(_0x5c29x2){return !this[_0xd587[2820]]&& this[_0xd587[1179]][_0xd587[1712]](_0x5c29x2)?[_0x5c29x2]:this[_0xd587[1179]][_0xd587[2629]](this[_0xd587[1179]][_0xd587[897]]())};mxGraphHandler[_0xd587[202]][_0xd587[2824]]= function(_0x5c29x2){_0x5c29x2= this[_0xd587[1613]](_0x5c29x2);null!= _0x5c29x2&& (_0x5c29x2[_0xd587[244]](-1,-1),_0x5c29x2[_0xd587[117]]< this[_0xd587[923]]&& (_0x5c29x2[_0xd587[235]]-= (this[_0xd587[923]]- _0x5c29x2[_0xd587[117]])/ 2,_0x5c29x2[_0xd587[117]]= this[_0xd587[923]]),_0x5c29x2[_0xd587[119]]< this[_0xd587[923]]&& (_0x5c29x2[_0xd587[236]]-= (this[_0xd587[923]]- _0x5c29x2[_0xd587[119]])/ 2,_0x5c29x2[_0xd587[119]]= this[_0xd587[923]]));return _0x5c29x2};mxGraphHandler[_0xd587[202]][_0xd587[1613]]= function(_0x5c29x2){var _0x5c29x3=null;if(null!= _0x5c29x2&& 0< _0x5c29x2[_0xd587[67]]){for(var _0x5c29x4=this[_0xd587[1179]][_0xd587[502]](),_0x5c29x5=0;_0x5c29x5< _0x5c29x2[_0xd587[67]];_0x5c29x5++){if(_0x5c29x4[_0xd587[1193]](_0x5c29x2[_0x5c29x5])|| _0x5c29x4[_0xd587[250]](_0x5c29x2[_0x5c29x5])){var _0x5c29x9=this[_0xd587[1179]][_0xd587[441]][_0xd587[248]](_0x5c29x2[_0x5c29x5]);if(null!= _0x5c29x9){var _0x5c29xa=_0x5c29x9;_0x5c29x4[_0xd587[1193]](_0x5c29x2[_0x5c29x5])&& (null!= _0x5c29x9[_0xd587[253]]&& null!= _0x5c29x9[_0xd587[253]][_0xd587[1563]])&& (_0x5c29xa= _0x5c29x9[_0xd587[253]][_0xd587[1563]]);null== _0x5c29x3?_0x5c29x3= new mxRectangle(_0x5c29xa[_0xd587[235]],_0x5c29xa[_0xd587[236]],_0x5c29xa[_0xd587[117]],_0x5c29xa[_0xd587[119]]):_0x5c29x3[_0xd587[99]](_0x5c29xa)}}}};return _0x5c29x3};mxGraphHandler[_0xd587[202]][_0xd587[2825]]= function(_0x5c29x2){_0x5c29x2= new mxRectangleShape(_0x5c29x2,null,this[_0xd587[2806]]);_0x5c29x2[_0xd587[1522]]= !0;this[_0xd587[2807]]?(_0x5c29x2[_0xd587[507]]= mxConstants[_0xd587[1656]],_0x5c29x2[_0xd587[176]](this[_0xd587[1179]][_0xd587[526]])):(_0x5c29x2[_0xd587[507]]= this[_0xd587[1179]][_0xd587[507]]!= mxConstants[_0xd587[508]]?mxConstants[_0xd587[1523]]:mxConstants[_0xd587[508]],_0x5c29x2[_0xd587[176]](this[_0xd587[1179]][_0xd587[249]]()[_0xd587[1524]]()),_0x5c29x2[_0xd587[1229]]= !1);return _0x5c29x2};mxGraphHandler[_0xd587[202]][_0xd587[861]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){this[_0xd587[246]]= _0x5c29x2;this[_0xd587[2823]]= mxUtils[_0xd587[2196]](this[_0xd587[1179]][_0xd587[526]],_0x5c29x3,_0x5c29x4);this[_0xd587[895]]= this[_0xd587[2690]](this[_0xd587[246]]);this[_0xd587[1562]]= this[_0xd587[1179]][_0xd587[249]]()[_0xd587[1799]](this[_0xd587[895]]);this[_0xd587[2826]]= this[_0xd587[2824]](this[_0xd587[895]]);this[_0xd587[990]]&& (this[_0xd587[2799]]= new mxGuide(this[_0xd587[1179]],this[_0xd587[1010]]()))};mxGraphHandler[_0xd587[202]][_0xd587[2827]]= function(_0x5c29x2){return null!= this[_0xd587[2799]]?this[_0xd587[2799]][_0xd587[1019]](_0x5c29x2[_0xd587[727]]()):!0};mxGraphHandler[_0xd587[202]][_0xd587[1021]]= function(_0x5c29x2){var _0x5c29x3=this[_0xd587[2808]]?this[_0xd587[1179]][_0xd587[441]][_0xd587[255]]:1;_0x5c29x2[_0xd587[235]]= this[_0xd587[1179]][_0xd587[1021]](_0x5c29x2[_0xd587[235]]/ _0x5c29x3)* _0x5c29x3;_0x5c29x2[_0xd587[236]]= this[_0xd587[1179]][_0xd587[1021]](_0x5c29x2[_0xd587[236]]/ _0x5c29x3)* _0x5c29x3;return _0x5c29x2};mxGraphHandler[_0xd587[202]][_0xd587[788]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=this[_0xd587[1179]];if(!_0x5c29x3[_0xd587[721]]()&& _0x5c29x4[_0xd587[1009]]&& null!= this[_0xd587[246]]&& null!= this[_0xd587[2823]]&& null!= this[_0xd587[1562]]){var _0x5c29x5=mxUtils[_0xd587[2196]](_0x5c29x4[_0xd587[526]],_0x5c29x3[_0xd587[730]](),_0x5c29x3[_0xd587[732]]()),_0x5c29x9=_0x5c29x5[_0xd587[235]]- this[_0xd587[2823]][_0xd587[235]],_0x5c29xa=_0x5c29x5[_0xd587[236]]- this[_0xd587[2823]][_0xd587[236]],_0x5c29x5=_0x5c29x4[_0xd587[2353]];if(null!= this[_0xd587[253]]|| Math[_0xd587[425]](_0x5c29x9)> _0x5c29x5|| Math[_0xd587[425]](_0x5c29xa)> _0x5c29x5){null== this[_0xd587[1016]]&& (this[_0xd587[1016]]= new mxCellHighlight(this[_0xd587[1179]],mxConstants.DROP_TARGET_COLOR,3));null== this[_0xd587[253]]&& (this[_0xd587[253]]= this[_0xd587[2825]](this[_0xd587[1562]]));var _0x5c29x12=_0x5c29x4[_0xd587[1018]](_0x5c29x3[_0xd587[727]]()),_0x5c29x5=!0;if(null!= this[_0xd587[2799]]&& this[_0xd587[2827]](_0x5c29x3)){_0x5c29xa= this[_0xd587[2799]][_0xd587[582]](this[_0xd587[1562]], new mxPoint(_0x5c29x9,_0x5c29xa),_0x5c29x12),_0x5c29x5= !1,_0x5c29x9= _0x5c29xa[_0xd587[235]],_0x5c29xa= _0x5c29xa[_0xd587[236]]}else {if(_0x5c29x12){var _0x5c29x13=_0x5c29x4[_0xd587[249]]()[_0xd587[513]],_0x5c29x14=_0x5c29x4[_0xd587[249]]()[_0xd587[255]],_0x5c29x12=this[_0xd587[1562]][_0xd587[235]]- (_0x5c29x4[_0xd587[1021]](this[_0xd587[1562]][_0xd587[235]]/ _0x5c29x14- _0x5c29x13[_0xd587[235]])+ _0x5c29x13[_0xd587[235]])* _0x5c29x14,_0x5c29x13=this[_0xd587[1562]][_0xd587[236]]- (_0x5c29x4[_0xd587[1021]](this[_0xd587[1562]][_0xd587[236]]/ _0x5c29x14- _0x5c29x13[_0xd587[236]])+ _0x5c29x13[_0xd587[236]])* _0x5c29x14,_0x5c29xa=this[_0xd587[1021]]( new mxPoint(_0x5c29x9,_0x5c29xa)),_0x5c29x9=_0x5c29xa[_0xd587[235]]- _0x5c29x12,_0x5c29xa=_0x5c29xa[_0xd587[236]]- _0x5c29x13}};null!= this[_0xd587[2799]]&& _0x5c29x5&& this[_0xd587[2799]][_0xd587[801]]();_0x5c29x4[_0xd587[2578]](_0x5c29x3[_0xd587[727]]())&& (Math[_0xd587[425]](_0x5c29x9)> Math[_0xd587[425]](_0x5c29xa)?_0x5c29xa= 0:_0x5c29x9= 0);this[_0xd587[2800]]= _0x5c29x9;this[_0xd587[2801]]= _0x5c29xa;this[_0xd587[2794]]();_0x5c29x5= null;_0x5c29xa= _0x5c29x3[_0xd587[736]]();_0x5c29x4[_0xd587[1015]]()&& this[_0xd587[2796]]&& (_0x5c29x5= _0x5c29x4[_0xd587[564]](this[_0xd587[895]],_0x5c29x3[_0xd587[727]](),_0x5c29xa));_0x5c29x12= _0x5c29x5;for(_0x5c29x13= _0x5c29x4[_0xd587[502]]();null!= _0x5c29x12&& _0x5c29x12!= this[_0xd587[895]][0];){_0x5c29x12= _0x5c29x13[_0xd587[1197]](_0x5c29x12)};var _0x5c29x14=_0x5c29x4[_0xd587[2574]](_0x5c29x3[_0xd587[727]]())&& _0x5c29x4[_0xd587[2617]]()&& this[_0xd587[2810]](),_0x5c29x9=_0x5c29x4[_0xd587[249]]()[_0xd587[248]](_0x5c29x5),_0x5c29x15=!1;null!= _0x5c29x9&& null== _0x5c29x12&& (_0x5c29x13[_0xd587[1197]](this[_0xd587[246]])!= _0x5c29x5|| _0x5c29x14)?(this[_0xd587[772]]!= _0x5c29x5&& (this[_0xd587[772]]= _0x5c29x5,this[_0xd587[2828]](mxConstants.DROP_TARGET_COLOR)),_0x5c29x15= !0):(this[_0xd587[772]]= null,this[_0xd587[2804]]&& (null!= _0x5c29xa&& 1== this[_0xd587[895]][_0xd587[67]]&& _0x5c29x4[_0xd587[502]]()[_0xd587[1193]](_0x5c29xa)&& _0x5c29x4[_0xd587[2565]](_0x5c29xa))&& (_0x5c29x9= _0x5c29x4[_0xd587[249]]()[_0xd587[248]](_0x5c29xa),null!= _0x5c29x9&& (_0x5c29x4= null== _0x5c29x4[_0xd587[2500]](null,this[_0xd587[246]],_0x5c29xa)?mxConstants[_0xd587[2829]]:mxConstants[_0xd587[2830]],this[_0xd587[2828]](_0x5c29x4),_0x5c29x15= !0)));null!= _0x5c29x9&& _0x5c29x15?this[_0xd587[1016]][_0xd587[1016]](_0x5c29x9):this[_0xd587[1016]][_0xd587[801]]()};_0x5c29x3[_0xd587[722]]();mxEvent[_0xd587[722]](_0x5c29x3[_0xd587[727]]())}else {if((this[_0xd587[2812]]()|| this[_0xd587[2810]]())&& this[_0xd587[2802]]&& !_0x5c29x3[_0xd587[721]]()&& null!= _0x5c29x3[_0xd587[248]]()&& !_0x5c29x4[_0xd587[1009]]){_0x5c29x9= _0x5c29x4[_0xd587[2599]](_0x5c29x3[_0xd587[736]]()),null== _0x5c29x9&& (_0x5c29x4[_0xd587[994]]()&& _0x5c29x4[_0xd587[1712]](_0x5c29x3[_0xd587[736]]()))&& (_0x5c29x9= _0x5c29x4[_0xd587[502]]()[_0xd587[250]](_0x5c29x3[_0xd587[736]]())?mxConstants[_0xd587[2831]]:mxConstants[_0xd587[2832]]),_0x5c29x3[_0xd587[248]]()[_0xd587[1609]](_0x5c29x9),_0x5c29x3[_0xd587[722]]()}}};mxGraphHandler[_0xd587[202]][_0xd587[2794]]= function(){null!= this[_0xd587[253]]&& (this[_0xd587[253]][_0xd587[1562]]= new mxRectangle(Math[_0xd587[488]](this[_0xd587[2826]][_0xd587[235]]+ this[_0xd587[2800]]- this[_0xd587[1179]][_0xd587[1136]]),Math[_0xd587[488]](this[_0xd587[2826]][_0xd587[236]]+ this[_0xd587[2801]]- this[_0xd587[1179]][_0xd587[1137]]),this[_0xd587[2826]][_0xd587[117]],this[_0xd587[2826]][_0xd587[119]]),this[_0xd587[253]][_0xd587[258]]())};mxGraphHandler[_0xd587[202]][_0xd587[2828]]= function(_0x5c29x2){null!= this[_0xd587[1016]]&& this[_0xd587[1016]][_0xd587[2828]](_0x5c29x2)};mxGraphHandler[_0xd587[202]][_0xd587[789]]= function(_0x5c29x2,_0x5c29x3){if(!_0x5c29x3[_0xd587[721]]()){var _0x5c29x4=this[_0xd587[1179]];if(null!= this[_0xd587[246]]&& null!= this[_0xd587[2823]]&& null!= this[_0xd587[253]]&& null!= this[_0xd587[2800]]&& null!= this[_0xd587[2801]]){var _0x5c29x5=_0x5c29x4[_0xd587[249]]()[_0xd587[255]],_0x5c29x9=_0x5c29x4[_0xd587[2574]](_0x5c29x3[_0xd587[727]]())&& _0x5c29x4[_0xd587[2617]]()&& this[_0xd587[2810]](),_0x5c29xa=this[_0xd587[2800]]/ _0x5c29x5,_0x5c29x5=this[_0xd587[2801]]/ _0x5c29x5,_0x5c29x12=_0x5c29x3[_0xd587[736]]();this[_0xd587[2804]]&& null== this[_0xd587[772]]&& null!= _0x5c29x12&& _0x5c29x4[_0xd587[502]]()[_0xd587[1193]](_0x5c29x12)&& _0x5c29x4[_0xd587[2565]](_0x5c29x12)&& _0x5c29x4[_0xd587[2581]](null,this[_0xd587[246]],_0x5c29x12)?_0x5c29x4[_0xd587[2433]][_0xd587[807]](this[_0xd587[246]],_0x5c29x12,_0x5c29x3[_0xd587[727]]()):(_0x5c29x12= this[_0xd587[772]],_0x5c29x4[_0xd587[2655]]()&& _0x5c29x4[_0xd587[2686]](_0x5c29x12,this[_0xd587[895]],_0x5c29x3[_0xd587[727]]())?_0x5c29x4[_0xd587[853]](_0x5c29x12,this[_0xd587[895]],null,_0x5c29xa,_0x5c29x5):this[_0xd587[834]](this[_0xd587[895]],_0x5c29xa,_0x5c29x5,_0x5c29x9,this[_0xd587[772]],_0x5c29x3[_0xd587[727]]()))}else {this[_0xd587[2814]]()&& (this[_0xd587[2820]]&& null!= this[_0xd587[246]])&& this[_0xd587[2833]](_0x5c29x3)}};this[_0xd587[2821]]&& _0x5c29x3[_0xd587[722]]();this[_0xd587[862]]()};mxGraphHandler[_0xd587[202]][_0xd587[2833]]= function(_0x5c29x2){this[_0xd587[1179]][_0xd587[2459]](this[_0xd587[246]],_0x5c29x2[_0xd587[727]]())};mxGraphHandler[_0xd587[202]][_0xd587[862]]= function(){this[_0xd587[2834]]();this[_0xd587[2820]]= this[_0xd587[2821]]= !1;this[_0xd587[772]]= this[_0xd587[246]]= this[_0xd587[2823]]= this[_0xd587[2835]]= this[_0xd587[2801]]= this[_0xd587[2800]]= null};mxGraphHandler[_0xd587[202]][_0xd587[2836]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){if(this[_0xd587[1179]][_0xd587[502]]()[_0xd587[1193]](_0x5c29x2)){_0x5c29x2= this[_0xd587[1179]][_0xd587[249]]()[_0xd587[248]](_0x5c29x2);_0x5c29x4= mxUtils[_0xd587[2196]](this[_0xd587[1179]][_0xd587[526]],mxEvent[_0xd587[731]](_0x5c29x4),mxEvent[_0xd587[733]](_0x5c29x4));var _0x5c29x5=mxUtils[_0xd587[431]](mxUtils[_0xd587[433]](_0x5c29x2[_0xd587[124]],mxConstants.STYLE_ROTATION)|| 0);if(0!= _0x5c29x5){_0x5c29x3= Math[_0xd587[426]](-_0x5c29x5);var _0x5c29x5=Math[_0xd587[427]](-_0x5c29x5),_0x5c29x9= new mxPoint(_0x5c29x2[_0xd587[241]](),_0x5c29x2[_0xd587[242]]());_0x5c29x4= mxUtils[_0xd587[432]](_0x5c29x4,_0x5c29x3,_0x5c29x5,_0x5c29x9)};return null!= _0x5c29x2&& !mxUtils[_0xd587[442]](_0x5c29x2,_0x5c29x4[_0xd587[235]],_0x5c29x4[_0xd587[236]])};return !1};mxGraphHandler[_0xd587[202]][_0xd587[834]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa){_0x5c29x5&& (_0x5c29x2= this[_0xd587[1179]][_0xd587[2615]](_0x5c29x2));null== _0x5c29x9&& (this[_0xd587[2816]]()&& this[_0xd587[2836]](this[_0xd587[1179]][_0xd587[502]]()[_0xd587[1197]](this[_0xd587[246]]),_0x5c29x2,_0x5c29xa))&& (_0x5c29x9= this[_0xd587[1179]][_0xd587[902]]());_0x5c29x2= this[_0xd587[1179]][_0xd587[834]](_0x5c29x2,_0x5c29x3- this[_0xd587[1179]][_0xd587[1136]]/ this[_0xd587[1179]][_0xd587[441]][_0xd587[255]],_0x5c29x4- this[_0xd587[1179]][_0xd587[1137]]/ this[_0xd587[1179]][_0xd587[441]][_0xd587[255]],_0x5c29x5,_0x5c29x9,_0x5c29xa);this[_0xd587[2814]]()&& this[_0xd587[2805]]&& this[_0xd587[1179]][_0xd587[2564]](_0x5c29x2[0]);_0x5c29x5&& this[_0xd587[1179]][_0xd587[904]](_0x5c29x2)};mxGraphHandler[_0xd587[202]][_0xd587[2834]]= function(){null!= this[_0xd587[253]]&& (this[_0xd587[253]][_0xd587[515]](),this[_0xd587[253]]= null);null!= this[_0xd587[2799]]&& (this[_0xd587[2799]][_0xd587[515]](),this[_0xd587[2799]]= null);null!= this[_0xd587[1016]]&& (this[_0xd587[1016]][_0xd587[515]](),this[_0xd587[1016]]= null)};mxGraphHandler[_0xd587[202]][_0xd587[515]]= function(){this[_0xd587[1179]][_0xd587[1148]](this);this[_0xd587[1179]][_0xd587[745]](this[_0xd587[2730]]);this[_0xd587[2834]]()};function mxPanningHandler(_0x5c29x2,_0x5c29x3){null!= _0x5c29x2&& (this[_0xd587[1179]]= _0x5c29x2,this[_0xd587[1033]]= _0x5c29x3,this[_0xd587[1179]][_0xd587[1133]](this),this[_0xd587[176]]())}mxPanningHandler[_0xd587[202]]= new mxPopupMenu;mxPanningHandler[_0xd587[202]][_0xd587[196]]= mxPanningHandler;mxPanningHandler[_0xd587[202]][_0xd587[1179]]= null;mxPanningHandler[_0xd587[202]][_0xd587[2837]]= null;mxPanningHandler[_0xd587[202]][_0xd587[2838]]= null;mxPanningHandler[_0xd587[202]][_0xd587[2839]]= !0;mxPanningHandler[_0xd587[202]][_0xd587[2840]]= !1;mxPanningHandler[_0xd587[202]][_0xd587[2841]]= !0;mxPanningHandler[_0xd587[202]][_0xd587[2842]]= !0;mxPanningHandler[_0xd587[202]][_0xd587[2843]]= !1;mxPanningHandler[_0xd587[202]][_0xd587[2844]]= !0;mxPanningHandler[_0xd587[202]][_0xd587[2845]]= !1;mxPanningHandler[_0xd587[202]][_0xd587[2431]]= !0;mxPanningHandler[_0xd587[202]][_0xd587[2846]]= function(){return this[_0xd587[2431]]};mxPanningHandler[_0xd587[202]][_0xd587[2847]]= function(_0x5c29x2){this[_0xd587[2431]]= _0x5c29x2};mxPanningHandler[_0xd587[202]][_0xd587[176]]= function(){mxPopupMenu[_0xd587[202]][_0xd587[176]][_0xd587[183]](this);mxEvent[_0xd587[169]](this[_0xd587[485]],mxClient[_0xd587[754]]?_0xd587[756]:_0xd587[752],mxUtils[_0xd587[885]](this,function(_0x5c29x2){this[_0xd587[1179]][_0xd587[2276]][_0xd587[801]]()}))};mxPanningHandler[_0xd587[202]][_0xd587[2848]]= function(_0x5c29x2){var _0x5c29x3=_0x5c29x2[_0xd587[727]]();return this[_0xd587[2840]]&& (this[_0xd587[2843]]|| null== _0x5c29x2[_0xd587[248]]())&& mxEvent[_0xd587[1158]](_0x5c29x3)|| mxEvent[_0xd587[775]](_0x5c29x3)&& mxEvent[_0xd587[774]](_0x5c29x3)|| this[_0xd587[2839]]&& mxEvent[_0xd587[737]](_0x5c29x3)};mxPanningHandler[_0xd587[202]][_0xd587[787]]= function(_0x5c29x2,_0x5c29x3){if(!_0x5c29x3[_0xd587[721]]()&& this[_0xd587[994]]()){this[_0xd587[1032]]();this[_0xd587[2741]]= -this[_0xd587[1179]][_0xd587[526]][_0xd587[360]];this[_0xd587[2742]]= -this[_0xd587[1179]][_0xd587[526]][_0xd587[190]];var _0x5c29x4=mxUtils[_0xd587[2196]](this[_0xd587[1179]][_0xd587[526]],_0x5c29x3[_0xd587[730]](),_0x5c29x3[_0xd587[732]]());this[_0xd587[2837]]= _0x5c29x4[_0xd587[235]];this[_0xd587[2838]]= _0x5c29x4[_0xd587[236]];this[_0xd587[2849]]= this[_0xd587[737]](_0x5c29x3);this[_0xd587[2850]]= this[_0xd587[2846]]()&& this[_0xd587[2848]](_0x5c29x3);this[_0xd587[2739]]= _0x5c29x3[_0xd587[730]]();this[_0xd587[2740]]= _0x5c29x3[_0xd587[732]]();this[_0xd587[2850]]&& this[_0xd587[2851]](_0x5c29x3)}};mxPanningHandler[_0xd587[202]][_0xd587[2851]]= function(_0x5c29x2){_0x5c29x2[_0xd587[722]]()};mxPanningHandler[_0xd587[202]][_0xd587[788]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=_0x5c29x3[_0xd587[730]]()- this[_0xd587[2739]],_0x5c29x5=_0x5c29x3[_0xd587[732]]()- this[_0xd587[2740]];if(this[_0xd587[1124]]){this[_0xd587[2844]]&& (this[_0xd587[2845]]&& (_0x5c29x4= this[_0xd587[1179]][_0xd587[1021]](_0x5c29x4),_0x5c29x5= this[_0xd587[1179]][_0xd587[1021]](_0x5c29x5)),this[_0xd587[1179]][_0xd587[1135]](_0x5c29x4+ this[_0xd587[2741]],_0x5c29x5+ this[_0xd587[2742]])),this[_0xd587[746]]( new mxEventObject(mxEvent.PAN,_0xd587[763],_0x5c29x3)),_0x5c29x3[_0xd587[722]]()}else {if(this[_0xd587[2850]]){var _0x5c29x9=this[_0xd587[1124]];this[_0xd587[1124]]= Math[_0xd587[425]](_0x5c29x4)> this[_0xd587[1179]][_0xd587[2353]]|| Math[_0xd587[425]](_0x5c29x5)> this[_0xd587[1179]][_0xd587[2353]];!_0x5c29x9&& this[_0xd587[1124]]&& this[_0xd587[746]]( new mxEventObject(mxEvent.PAN_START,_0xd587[763],_0x5c29x3))}}};mxPanningHandler[_0xd587[202]][_0xd587[789]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=Math[_0xd587[425]](_0x5c29x3[_0xd587[730]]()- this[_0xd587[2739]]),_0x5c29x5=Math[_0xd587[425]](_0x5c29x3[_0xd587[732]]()- this[_0xd587[2740]]);if(this[_0xd587[1124]]){if(!this[_0xd587[1179]][_0xd587[2365]]|| !mxUtils[_0xd587[1134]](this[_0xd587[1179]][_0xd587[526]])){_0x5c29x4= _0x5c29x3[_0xd587[730]]()- this[_0xd587[2739]];_0x5c29x5= _0x5c29x3[_0xd587[732]]()- this[_0xd587[2740]];this[_0xd587[2845]]&& (_0x5c29x4= this[_0xd587[1179]][_0xd587[1021]](_0x5c29x4),_0x5c29x5= this[_0xd587[1179]][_0xd587[1021]](_0x5c29x5));var _0x5c29x9=this[_0xd587[1179]][_0xd587[249]]()[_0xd587[255]],_0x5c29xa=this[_0xd587[1179]][_0xd587[249]]()[_0xd587[513]];this[_0xd587[1179]][_0xd587[1135]](0,0);this[_0xd587[1135]](_0x5c29xa[_0xd587[235]]+ _0x5c29x4/ _0x5c29x9,_0x5c29xa[_0xd587[236]]+ _0x5c29x5/ _0x5c29x9)};this[_0xd587[1124]]= !1;this[_0xd587[746]]( new mxEventObject(mxEvent.PAN_END,_0xd587[763],_0x5c29x3));_0x5c29x3[_0xd587[722]]()}else {this[_0xd587[2849]]&& (_0x5c29x4< this[_0xd587[1179]][_0xd587[2353]]&& _0x5c29x5< this[_0xd587[1179]][_0xd587[2353]])&& (_0x5c29x4= this[_0xd587[2852]](_0x5c29x3),this[_0xd587[1179]][_0xd587[994]]()&& this[_0xd587[2841]]&& null!= _0x5c29x4&& !this[_0xd587[1179]][_0xd587[2692]](_0x5c29x4)?this[_0xd587[1179]][_0xd587[2450]](_0x5c29x4):this[_0xd587[2842]]&& null== _0x5c29x4&& this[_0xd587[1179]][_0xd587[2440]](),this[_0xd587[1179]][_0xd587[2276]][_0xd587[801]](),_0x5c29x5= mxUtils[_0xd587[444]](),_0x5c29x5= new mxPoint(_0x5c29x3[_0xd587[730]]()+ _0x5c29x5[_0xd587[235]],_0x5c29x3[_0xd587[732]]()+ _0x5c29x5[_0xd587[236]]),this[_0xd587[152]](_0x5c29x5[_0xd587[235]]+ 1,_0x5c29x5[_0xd587[236]]+ 1,_0x5c29x4,_0x5c29x3[_0xd587[727]]()),_0x5c29x3[_0xd587[722]]())};this[_0xd587[2849]]= this[_0xd587[2850]]= !1};mxPanningHandler[_0xd587[202]][_0xd587[2852]]= function(_0x5c29x2){return _0x5c29x2[_0xd587[736]]()};mxPanningHandler[_0xd587[202]][_0xd587[1135]]= function(_0x5c29x2,_0x5c29x3){this[_0xd587[1179]][_0xd587[249]]()[_0xd587[1147]](_0x5c29x2,_0x5c29x3)};mxPanningHandler[_0xd587[202]][_0xd587[515]]= function(){this[_0xd587[1179]][_0xd587[1148]](this);mxPopupMenu[_0xd587[202]][_0xd587[515]][_0xd587[183]](this)};function mxCellMarker(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){mxEventSource[_0xd587[239]](this);null!= _0x5c29x2&& (this[_0xd587[1179]]= _0x5c29x2,this[_0xd587[2853]]= null!= _0x5c29x3?_0x5c29x3:mxConstants[_0xd587[2854]],this[_0xd587[2855]]= null!= _0x5c29x3?_0x5c29x4:mxConstants[_0xd587[2856]],this[_0xd587[2857]]= null!= _0x5c29x5?_0x5c29x5:mxConstants[_0xd587[2858]],this[_0xd587[1016]]= new mxCellHighlight(_0x5c29x2))}mxUtils[_0xd587[1284]](mxCellMarker,mxEventSource);mxCellMarker[_0xd587[202]][_0xd587[1179]]= null;mxCellMarker[_0xd587[202]][_0xd587[984]]= !0;mxCellMarker[_0xd587[202]][_0xd587[2857]]= mxConstants[_0xd587[2858]];mxCellMarker[_0xd587[202]][_0xd587[2859]]= !1;mxCellMarker[_0xd587[202]][_0xd587[2853]]= null;mxCellMarker[_0xd587[202]][_0xd587[2855]]= null;mxCellMarker[_0xd587[202]][_0xd587[2860]]= null;mxCellMarker[_0xd587[202]][_0xd587[2861]]= null;mxCellMarker[_0xd587[202]][_0xd587[2862]]= null;mxCellMarker[_0xd587[202]][_0xd587[995]]= function(_0x5c29x2){this[_0xd587[984]]= _0x5c29x2};mxCellMarker[_0xd587[202]][_0xd587[994]]= function(){return this[_0xd587[984]]};mxCellMarker[_0xd587[202]][_0xd587[2863]]= function(_0x5c29x2){this[_0xd587[2857]]= _0x5c29x2};mxCellMarker[_0xd587[202]][_0xd587[2864]]= function(){return this[_0xd587[2857]]};mxCellMarker[_0xd587[202]][_0xd587[2865]]= function(_0x5c29x2){this[_0xd587[2859]]= _0x5c29x2};mxCellMarker[_0xd587[202]][_0xd587[2866]]= function(){return this[_0xd587[2859]]};mxCellMarker[_0xd587[202]][_0xd587[2867]]= function(){return null!= this[_0xd587[2861]]};mxCellMarker[_0xd587[202]][_0xd587[2868]]= function(){return this[_0xd587[2861]]};mxCellMarker[_0xd587[202]][_0xd587[2869]]= function(){return this[_0xd587[2862]]};mxCellMarker[_0xd587[202]][_0xd587[862]]= function(){this[_0xd587[2861]]= null;null!= this[_0xd587[2862]]&& (this[_0xd587[2862]]= null,this[_0xd587[2870]]())};mxCellMarker[_0xd587[202]][_0xd587[2871]]= function(_0x5c29x2){var _0x5c29x3=null;if(this[_0xd587[994]]()){var _0x5c29x3=this[_0xd587[248]](_0x5c29x2),_0x5c29x4=null!= _0x5c29x3?this[_0xd587[2872]](_0x5c29x3):!1;_0x5c29x2= this[_0xd587[2873]](_0x5c29x2[_0xd587[727]](),_0x5c29x3,_0x5c29x4);this[_0xd587[2861]]= _0x5c29x4?_0x5c29x3:null;if(_0x5c29x3!= this[_0xd587[2862]]|| _0x5c29x2!= this[_0xd587[2860]]){this[_0xd587[2860]]= _0x5c29x2,null!= _0x5c29x3&& null!= this[_0xd587[2860]]?(this[_0xd587[2862]]= _0x5c29x3,this[_0xd587[811]]()):null!= this[_0xd587[2862]]&& (this[_0xd587[2862]]= null,this[_0xd587[2870]]())}};return _0x5c29x3};mxCellMarker[_0xd587[202]][_0xd587[2874]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=this[_0xd587[1179]][_0xd587[249]]()[_0xd587[248]](_0x5c29x2);null!= _0x5c29x4&& (this[_0xd587[2860]]= null!= _0x5c29x3?_0x5c29x3:this[_0xd587[2853]],this[_0xd587[2862]]= _0x5c29x4,this[_0xd587[811]]())};mxCellMarker[_0xd587[202]][_0xd587[811]]= function(){this[_0xd587[1016]][_0xd587[2828]](this[_0xd587[2860]]);this[_0xd587[1016]][_0xd587[1016]](this[_0xd587[2862]]);this[_0xd587[746]]( new mxEventObject(mxEvent.MARK,_0xd587[724],this[_0xd587[2862]]))};mxCellMarker[_0xd587[202]][_0xd587[2870]]= function(){this[_0xd587[811]]()};mxCellMarker[_0xd587[202]][_0xd587[2872]]= function(_0x5c29x2){return !0};mxCellMarker[_0xd587[202]][_0xd587[2873]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){return _0x5c29x4?this[_0xd587[2853]]:this[_0xd587[2855]]};mxCellMarker[_0xd587[202]][_0xd587[248]]= function(_0x5c29x2){var _0x5c29x3=this[_0xd587[1179]][_0xd587[249]]();cell= this[_0xd587[736]](_0x5c29x2);_0x5c29x3= this[_0xd587[2875]](_0x5c29x3[_0xd587[248]](cell));return null!= _0x5c29x3&& this[_0xd587[1825]](_0x5c29x3,_0x5c29x2)?_0x5c29x3:null};mxCellMarker[_0xd587[202]][_0xd587[736]]= function(_0x5c29x2){return _0x5c29x2[_0xd587[736]]()};mxCellMarker[_0xd587[202]][_0xd587[2875]]= function(_0x5c29x2){return _0x5c29x2};mxCellMarker[_0xd587[202]][_0xd587[1825]]= function(_0x5c29x2,_0x5c29x3){return this[_0xd587[2859]]?mxUtils[_0xd587[2876]](_0x5c29x2,_0x5c29x3[_0xd587[734]](),_0x5c29x3[_0xd587[735]](),this[_0xd587[2857]],mxConstants.MIN_HOTSPOT_SIZE,mxConstants.MAX_HOTSPOT_SIZE):!0};mxCellMarker[_0xd587[202]][_0xd587[515]]= function(){this[_0xd587[1179]][_0xd587[249]]()[_0xd587[745]](this[_0xd587[2877]]);this[_0xd587[1179]][_0xd587[502]]()[_0xd587[745]](this[_0xd587[2877]]);this[_0xd587[1016]][_0xd587[515]]()};function mxSelectionCellsHandler(_0x5c29x2){mxEventSource[_0xd587[239]](this);this[_0xd587[1179]]= _0x5c29x2;this[_0xd587[2878]]= new mxDictionary;this[_0xd587[1179]][_0xd587[1133]](this);this[_0xd587[2731]]= mxUtils[_0xd587[885]](this,function(_0x5c29x2,_0x5c29x4){this[_0xd587[994]]()&& this[_0xd587[802]]()});this[_0xd587[1179]][_0xd587[2435]]()[_0xd587[169]](mxEvent.CHANGE,this[_0xd587[2731]]);this[_0xd587[1179]][_0xd587[502]]()[_0xd587[169]](mxEvent.CHANGE,this[_0xd587[2731]]);this[_0xd587[1179]][_0xd587[249]]()[_0xd587[169]](mxEvent.SCALE,this[_0xd587[2731]]);this[_0xd587[1179]][_0xd587[249]]()[_0xd587[169]](mxEvent.TRANSLATE,this[_0xd587[2731]]);this[_0xd587[1179]][_0xd587[249]]()[_0xd587[169]](mxEvent.SCALE_AND_TRANSLATE,this[_0xd587[2731]]);this[_0xd587[1179]][_0xd587[249]]()[_0xd587[169]](mxEvent.DOWN,this[_0xd587[2731]]);this[_0xd587[1179]][_0xd587[249]]()[_0xd587[169]](mxEvent.UP,this[_0xd587[2731]])}mxUtils[_0xd587[1284]](mxSelectionCellsHandler,mxEventSource);mxSelectionCellsHandler[_0xd587[202]][_0xd587[1179]]= null;mxSelectionCellsHandler[_0xd587[202]][_0xd587[984]]= !0;mxSelectionCellsHandler[_0xd587[202]][_0xd587[2731]]= null;mxSelectionCellsHandler[_0xd587[202]][_0xd587[2879]]= 100;mxSelectionCellsHandler[_0xd587[202]][_0xd587[2878]]= null;mxSelectionCellsHandler[_0xd587[202]][_0xd587[994]]= function(){return this[_0xd587[984]]};mxSelectionCellsHandler[_0xd587[202]][_0xd587[995]]= function(_0x5c29x2){this[_0xd587[984]]= _0x5c29x2};mxSelectionCellsHandler[_0xd587[202]][_0xd587[2596]]= function(_0x5c29x2){return this[_0xd587[2878]][_0xd587[203]](_0x5c29x2)};mxSelectionCellsHandler[_0xd587[202]][_0xd587[862]]= function(){this[_0xd587[2878]][_0xd587[209]](function(_0x5c29x2,_0x5c29x3){_0x5c29x3[_0xd587[862]][_0xd587[183]](_0x5c29x3)})};mxSelectionCellsHandler[_0xd587[202]][_0xd587[802]]= function(){var _0x5c29x2=this[_0xd587[2878]];this[_0xd587[2878]]= new mxDictionary;for(var _0x5c29x3=this[_0xd587[1179]][_0xd587[897]](),_0x5c29x4=0;_0x5c29x4< _0x5c29x3[_0xd587[67]];_0x5c29x4++){var _0x5c29x5=this[_0xd587[1179]][_0xd587[441]][_0xd587[248]](_0x5c29x3[_0x5c29x4]);if(null!= _0x5c29x5){var _0x5c29x9=_0x5c29x2[_0xd587[205]](_0x5c29x3[_0x5c29x4]);null!= _0x5c29x9&& (_0x5c29x9[_0xd587[724]]!= _0x5c29x5?(_0x5c29x9[_0xd587[515]](),_0x5c29x9= null):_0x5c29x9[_0xd587[258]]());null== _0x5c29x9&& (_0x5c29x9= this[_0xd587[1179]][_0xd587[2709]](_0x5c29x5),this[_0xd587[746]]( new mxEventObject(mxEvent.ADD,_0xd587[724],_0x5c29x5)));null!= _0x5c29x9&& this[_0xd587[2878]][_0xd587[204]](_0x5c29x3[_0x5c29x4],_0x5c29x9)}};_0x5c29x2[_0xd587[209]](mxUtils[_0xd587[885]](this,function(_0x5c29x2,_0x5c29x3){this[_0xd587[746]]( new mxEventObject(mxEvent.REMOVE,_0xd587[724],_0x5c29x3[_0xd587[724]]));_0x5c29x3[_0xd587[515]]()}))};mxSelectionCellsHandler[_0xd587[202]][_0xd587[787]]= function(_0x5c29x2,_0x5c29x3){if(this[_0xd587[1179]][_0xd587[994]]()&& this[_0xd587[994]]()){var _0x5c29x4=[_0x5c29x2,_0x5c29x3];this[_0xd587[2878]][_0xd587[209]](function(_0x5c29x2,_0x5c29x3){_0x5c29x3[_0xd587[787]][_0xd587[183]](_0x5c29x3,_0x5c29x4)})}};mxSelectionCellsHandler[_0xd587[202]][_0xd587[788]]= function(_0x5c29x2,_0x5c29x3){if(this[_0xd587[1179]][_0xd587[994]]()&& this[_0xd587[994]]()){var _0x5c29x4=[_0x5c29x2,_0x5c29x3];this[_0xd587[2878]][_0xd587[209]](function(_0x5c29x2,_0x5c29x3){_0x5c29x3[_0xd587[788]][_0xd587[183]](_0x5c29x3,_0x5c29x4)})}};mxSelectionCellsHandler[_0xd587[202]][_0xd587[789]]= function(_0x5c29x2,_0x5c29x3){if(this[_0xd587[1179]][_0xd587[994]]()&& this[_0xd587[994]]()){var _0x5c29x4=[_0x5c29x2,_0x5c29x3];this[_0xd587[2878]][_0xd587[209]](function(_0x5c29x2,_0x5c29x3){_0x5c29x3[_0xd587[789]][_0xd587[183]](_0x5c29x3,_0x5c29x4)})}};mxSelectionCellsHandler[_0xd587[202]][_0xd587[515]]= function(){this[_0xd587[1179]][_0xd587[1148]](this);null!= this[_0xd587[2731]]&& (this[_0xd587[1179]][_0xd587[2435]]()[_0xd587[745]](this[_0xd587[2731]]),this[_0xd587[1179]][_0xd587[502]]()[_0xd587[745]](this[_0xd587[2731]]),this[_0xd587[1179]][_0xd587[249]]()[_0xd587[745]](this[_0xd587[2731]]),this[_0xd587[2731]]= null)};function mxConnectionHandler(_0x5c29x2,_0x5c29x3){mxEventSource[_0xd587[239]](this);null!= _0x5c29x2&& (this[_0xd587[1179]]= _0x5c29x2,this[_0xd587[1033]]= _0x5c29x3,this[_0xd587[176]]())}mxUtils[_0xd587[1284]](mxConnectionHandler,mxEventSource);mxConnectionHandler[_0xd587[202]][_0xd587[1179]]= null;mxConnectionHandler[_0xd587[202]][_0xd587[1033]]= !0;mxConnectionHandler[_0xd587[202]][_0xd587[2880]]= !1;mxConnectionHandler[_0xd587[202]][_0xd587[2881]]= !1;mxConnectionHandler[_0xd587[202]][_0xd587[2882]]= null;mxConnectionHandler[_0xd587[202]][_0xd587[2883]]= !1;mxConnectionHandler[_0xd587[202]][_0xd587[984]]= !0;mxConnectionHandler[_0xd587[202]][_0xd587[804]]= !0;mxConnectionHandler[_0xd587[202]][_0xd587[2884]]= !1;mxConnectionHandler[_0xd587[202]][_0xd587[2885]]= null;mxConnectionHandler[_0xd587[202]][_0xd587[2886]]= null;mxConnectionHandler[_0xd587[202]][_0xd587[267]]= null;mxConnectionHandler[_0xd587[202]][_0xd587[2887]]= !1;mxConnectionHandler[_0xd587[202]][_0xd587[2888]]= !0;mxConnectionHandler[_0xd587[202]][_0xd587[2889]]= 500;mxConnectionHandler[_0xd587[202]][_0xd587[2890]]= !1;mxConnectionHandler[_0xd587[202]][_0xd587[2891]]= !1;mxConnectionHandler[_0xd587[202]][_0xd587[2892]]= 4;mxConnectionHandler[_0xd587[202]][_0xd587[2893]]= 0;mxConnectionHandler[_0xd587[202]][_0xd587[2894]]= 0;mxConnectionHandler[_0xd587[202]][_0xd587[2895]]= !1;mxConnectionHandler[_0xd587[202]][_0xd587[2823]]= null;mxConnectionHandler[_0xd587[202]][_0xd587[2896]]= new mxPoint(0,mxConstants.TOOLTIP_VERTICAL_OFFSET);mxConnectionHandler[_0xd587[202]][_0xd587[2897]]= null;mxConnectionHandler[_0xd587[202]][_0xd587[1176]]= null;mxConnectionHandler[_0xd587[202]][_0xd587[2898]]= null;mxConnectionHandler[_0xd587[202]][_0xd587[2899]]= 0;mxConnectionHandler[_0xd587[202]][_0xd587[2900]]= mxClient[_0xd587[47]];mxConnectionHandler[_0xd587[202]][_0xd587[994]]= function(){return this[_0xd587[984]]};mxConnectionHandler[_0xd587[202]][_0xd587[995]]= function(_0x5c29x2){this[_0xd587[984]]= _0x5c29x2};mxConnectionHandler[_0xd587[202]][_0xd587[2901]]= function(){return this[_0xd587[2884]]};mxConnectionHandler[_0xd587[202]][_0xd587[2902]]= function(_0x5c29x2){this[_0xd587[2884]]= _0x5c29x2};mxConnectionHandler[_0xd587[202]][_0xd587[2156]]= function(){var _0x5c29x2= new mxPolyline([],mxConstants.INVALID_COLOR);_0x5c29x2[_0xd587[507]]= this[_0xd587[1179]][_0xd587[507]]!= mxConstants[_0xd587[508]]?mxConstants[_0xd587[1523]]:mxConstants[_0xd587[508]];_0x5c29x2[_0xd587[176]](this[_0xd587[1179]][_0xd587[249]]()[_0xd587[1524]]());_0x5c29x2[_0xd587[1564]]= 0;_0x5c29x2[_0xd587[1229]]= !1;_0x5c29x2[_0xd587[1522]]= !0;if(this[_0xd587[1179]][_0xd587[507]]== mxConstants[_0xd587[508]]){_0x5c29x2[_0xd587[252]][_0xd587[57]](_0xd587[1377],_0xd587[130])}else {var _0x5c29x3=mxUtils[_0xd587[885]](this,function(_0x5c29x2){_0x5c29x2= mxUtils[_0xd587[2196]](this[_0xd587[1179]][_0xd587[526]],mxEvent[_0xd587[731]](_0x5c29x2),mxEvent[_0xd587[733]](_0x5c29x2));return this[_0xd587[1179]][_0xd587[441]][_0xd587[248]](this[_0xd587[1179]][_0xd587[999]](_0x5c29x2[_0xd587[235]],_0x5c29x2[_0xd587[236]]))});mxEvent[_0xd587[2733]](_0x5c29x2[_0xd587[252]],this[_0xd587[1179]],_0x5c29x3)};return _0x5c29x2};mxConnectionHandler[_0xd587[202]][_0xd587[176]]= function(){this[_0xd587[1179]][_0xd587[1133]](this);this[_0xd587[2885]]= this[_0xd587[1689]]();this[_0xd587[2886]]= new mxConstraintHandler(this[_0xd587[1179]]);this[_0xd587[1176]]= mxUtils[_0xd587[885]](this,function(_0x5c29x2){null!= this[_0xd587[2903]]&& (this[_0xd587[2903]]= this[_0xd587[1179]][_0xd587[249]]()[_0xd587[248]](this[_0xd587[2903]][_0xd587[246]]));null!= this[_0xd587[2903]]?this[_0xd587[2905]](this[_0xd587[2904]],this[_0xd587[2903]]):(this[_0xd587[2906]](this[_0xd587[2904]]),this[_0xd587[257]]= null);this[_0xd587[2886]][_0xd587[862]]()});this[_0xd587[1179]][_0xd587[502]]()[_0xd587[169]](mxEvent.CHANGE,this[_0xd587[1176]]);this[_0xd587[1179]][_0xd587[249]]()[_0xd587[169]](mxEvent.SCALE,this[_0xd587[1176]]);this[_0xd587[1179]][_0xd587[249]]()[_0xd587[169]](mxEvent.TRANSLATE,this[_0xd587[1176]]);this[_0xd587[1179]][_0xd587[249]]()[_0xd587[169]](mxEvent.SCALE_AND_TRANSLATE,this[_0xd587[1176]]);this[_0xd587[2898]]= mxUtils[_0xd587[885]](this,function(_0x5c29x2){this[_0xd587[2906]](this[_0xd587[2904]])});this[_0xd587[1179]][_0xd587[169]](mxEvent.START_EDITING,this[_0xd587[2898]]);this[_0xd587[1179]][_0xd587[249]]()[_0xd587[169]](mxEvent.DOWN,this[_0xd587[2898]]);this[_0xd587[1179]][_0xd587[249]]()[_0xd587[169]](mxEvent.UP,this[_0xd587[2898]])};mxConnectionHandler[_0xd587[202]][_0xd587[2907]]= function(_0x5c29x2){return !0};mxConnectionHandler[_0xd587[202]][_0xd587[1689]]= function(){var _0x5c29x2= new mxCellMarker(this[_0xd587[1179]]);_0x5c29x2[_0xd587[2859]]= !0;_0x5c29x2[_0xd587[736]]= mxUtils[_0xd587[885]](this,function(_0x5c29x3,_0x5c29x4){_0x5c29x4= mxCellMarker[_0xd587[202]][_0xd587[736]][_0xd587[183]](_0x5c29x2,arguments);this[_0xd587[267]]= null;if(!this[_0xd587[2907]](_0x5c29x4)){return null};null!= _0x5c29x4?this[_0xd587[2908]]()?null!= this[_0xd587[257]]&& (this[_0xd587[267]]= this[_0xd587[2909]](this[_0xd587[257]][_0xd587[246]],_0x5c29x4),null!= this[_0xd587[267]]&& 0== this[_0xd587[267]][_0xd587[67]]&& (_0x5c29x4= null,this[_0xd587[2901]]()&& (this[_0xd587[267]]= null))):this[_0xd587[2671]](_0x5c29x4)|| (_0x5c29x4= null):this[_0xd587[2908]]()&& (!this[_0xd587[2901]]()&& !this[_0xd587[1179]][_0xd587[2406]])&& (this[_0xd587[267]]= _0xd587[110]);return _0x5c29x4});_0x5c29x2[_0xd587[2872]]= mxUtils[_0xd587[885]](this,function(_0x5c29x3){return this[_0xd587[2908]]()?null== this[_0xd587[267]]:mxCellMarker[_0xd587[202]][_0xd587[2872]][_0xd587[183]](_0x5c29x2,arguments)});_0x5c29x2[_0xd587[2873]]= mxUtils[_0xd587[885]](this,function(_0x5c29x3,_0x5c29x4,_0x5c29x5){return null== this[_0xd587[2882]]|| this[_0xd587[2908]]()?mxCellMarker[_0xd587[202]][_0xd587[2873]][_0xd587[183]](_0x5c29x2,arguments):null});_0x5c29x2[_0xd587[1825]]= mxUtils[_0xd587[885]](this,function(_0x5c29x3,_0x5c29x4){return null!= this[_0xd587[2882]]|| this[_0xd587[2908]]()?!0:mxCellMarker[_0xd587[202]][_0xd587[1825]][_0xd587[183]](_0x5c29x2,arguments)});return _0x5c29x2};mxConnectionHandler[_0xd587[202]][_0xd587[861]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){this[_0xd587[257]]= _0x5c29x2;this[_0xd587[2823]]= new mxPoint(_0x5c29x3,_0x5c29x4);this[_0xd587[2897]]= null!= _0x5c29x5?_0x5c29x5:this[_0xd587[2910]](null);this[_0xd587[2885]][_0xd587[2860]]= this[_0xd587[2885]][_0xd587[2853]];this[_0xd587[2885]][_0xd587[2862]]= _0x5c29x2;this[_0xd587[2885]][_0xd587[811]]();this[_0xd587[746]]( new mxEventObject(mxEvent.START,_0xd587[724],this[_0xd587[257]]))};mxConnectionHandler[_0xd587[202]][_0xd587[2908]]= function(){return null!= this[_0xd587[2823]]&& null!= this[_0xd587[253]]};mxConnectionHandler[_0xd587[202]][_0xd587[2671]]= function(_0x5c29x2){return this[_0xd587[1179]][_0xd587[2671]](_0x5c29x2)};mxConnectionHandler[_0xd587[202]][_0xd587[2672]]= function(_0x5c29x2){return !0};mxConnectionHandler[_0xd587[202]][_0xd587[2909]]= function(_0x5c29x2,_0x5c29x3){return !this[_0xd587[2672]](_0x5c29x3)?_0xd587[110]:this[_0xd587[1179]][_0xd587[2500]](null,_0x5c29x2,_0x5c29x3)};mxConnectionHandler[_0xd587[202]][_0xd587[2911]]= function(_0x5c29x2){return this[_0xd587[2882]]};mxConnectionHandler[_0xd587[202]][_0xd587[2912]]= function(_0x5c29x2){return null!= _0x5c29x2[_0xd587[963]]&& _0x5c29x2[_0xd587[963]][_0xd587[252]][_0xd587[265]]== this[_0xd587[1179]][_0xd587[526]]?!0:this[_0xd587[2880]]};mxConnectionHandler[_0xd587[202]][_0xd587[2913]]= function(_0x5c29x2){var _0x5c29x3=this[_0xd587[2911]](_0x5c29x2);if(null!= _0x5c29x3&& null!= _0x5c29x2){this[_0xd587[2903]]= _0x5c29x2;var _0x5c29x4=[],_0x5c29x5= new mxRectangle(0,0,_0x5c29x3[_0xd587[117]],_0x5c29x3[_0xd587[119]]),_0x5c29x9= new mxImageShape(_0x5c29x5,_0x5c29x3[_0xd587[390]],null,null,0);_0x5c29x9[_0xd587[1674]]= !1;this[_0xd587[2912]](_0x5c29x2)?(_0x5c29x9[_0xd587[507]]= mxConstants[_0xd587[1656]],_0x5c29x9[_0xd587[176]](this[_0xd587[1179]][_0xd587[526]])):(_0x5c29x9[_0xd587[507]]= this[_0xd587[1179]][_0xd587[507]]== mxConstants[_0xd587[508]]?mxConstants[_0xd587[508]]:mxConstants[_0xd587[1523]],_0x5c29x9[_0xd587[176]](this[_0xd587[1179]][_0xd587[249]]()[_0xd587[1524]]()),this[_0xd587[2881]]&& null!= _0x5c29x9[_0xd587[252]][_0xd587[328]]&& _0x5c29x9[_0xd587[252]][_0xd587[265]][_0xd587[950]](_0x5c29x9[_0xd587[252]],_0x5c29x9[_0xd587[252]][_0xd587[265]][_0xd587[285]]));_0x5c29x9[_0xd587[252]][_0xd587[124]][_0xd587[270]]= mxConstants[_0xd587[2914]];var _0x5c29xa=mxUtils[_0xd587[885]](this,function(){return null!= this[_0xd587[2915]]?this[_0xd587[2915]]:_0x5c29x2}),_0x5c29x3=mxUtils[_0xd587[885]](this,function(_0x5c29x2){mxEvent[_0xd587[721]](_0x5c29x2)|| (this[_0xd587[2916]]= _0x5c29x9,this[_0xd587[1179]][_0xd587[758]](mxEvent.MOUSE_DOWN, new mxMouseEvent(_0x5c29x2,_0x5c29xa())))});mxEvent[_0xd587[2733]](_0x5c29x9[_0xd587[252]],this[_0xd587[1179]],_0x5c29xa,_0x5c29x3);_0x5c29x4[_0xd587[207]](_0x5c29x9);this[_0xd587[2905]](_0x5c29x4,this[_0xd587[2903]]);return _0x5c29x4};return null};mxConnectionHandler[_0xd587[202]][_0xd587[2905]]= function(_0x5c29x2,_0x5c29x3){if(null!= _0x5c29x2&& null!= _0x5c29x2[0]&& null!= _0x5c29x3){var _0x5c29x4=this[_0xd587[2917]](_0x5c29x2[0],_0x5c29x3);_0x5c29x2[0][_0xd587[1562]][_0xd587[235]]= _0x5c29x4[_0xd587[235]];_0x5c29x2[0][_0xd587[1562]][_0xd587[236]]= _0x5c29x4[_0xd587[236]];_0x5c29x2[0][_0xd587[258]]()}};mxConnectionHandler[_0xd587[202]][_0xd587[2917]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=this[_0xd587[1179]][_0xd587[249]]()[_0xd587[255]],_0x5c29x5=_0x5c29x3[_0xd587[241]](),_0x5c29x9=_0x5c29x3[_0xd587[242]]();if(this[_0xd587[1179]][_0xd587[1730]](_0x5c29x3[_0xd587[246]])){var _0x5c29xa=this[_0xd587[1179]][_0xd587[1731]](_0x5c29x3[_0xd587[246]]),_0x5c29x5=0!= _0x5c29xa[_0xd587[117]]?_0x5c29x3[_0xd587[235]]+ _0x5c29xa[_0xd587[117]]* _0x5c29x4/ 2:_0x5c29x5,_0x5c29x9=0!= _0x5c29xa[_0xd587[119]]?_0x5c29x3[_0xd587[236]]+ _0x5c29xa[_0xd587[119]]* _0x5c29x4/ 2:_0x5c29x9,_0x5c29xa=mxUtils[_0xd587[431]](mxUtils[_0xd587[433]](_0x5c29x3[_0xd587[124]],mxConstants.STYLE_ROTATION)|| 0);if(0!= _0x5c29xa){var _0x5c29x4=Math[_0xd587[426]](_0x5c29xa),_0x5c29xa=Math[_0xd587[427]](_0x5c29xa),_0x5c29x12= new mxPoint(_0x5c29x3[_0xd587[241]](),_0x5c29x3[_0xd587[242]]()),_0x5c29x9=mxUtils[_0xd587[432]]( new mxPoint(_0x5c29x5,_0x5c29x9),_0x5c29x4,_0x5c29xa,_0x5c29x12),_0x5c29x5=_0x5c29x9[_0xd587[235]],_0x5c29x9=_0x5c29x9[_0xd587[236]]}};return new mxPoint(_0x5c29x5- _0x5c29x2[_0xd587[1562]][_0xd587[117]]/ 2,_0x5c29x9- _0x5c29x2[_0xd587[1562]][_0xd587[119]]/ 2)};mxConnectionHandler[_0xd587[202]][_0xd587[2906]]= function(_0x5c29x2){if(null!= _0x5c29x2){this[_0xd587[2903]]= null;for(var _0x5c29x3=0;_0x5c29x3< _0x5c29x2[_0xd587[67]];_0x5c29x3++){_0x5c29x2[_0x5c29x3][_0xd587[515]]()}}};mxConnectionHandler[_0xd587[202]][_0xd587[2918]]= function(_0x5c29x2){return !this[_0xd587[1179]][_0xd587[2579]](_0x5c29x2[_0xd587[727]]())&& (null!= this[_0xd587[2886]][_0xd587[2919]]&& null!= this[_0xd587[2886]][_0xd587[2920]]|| null!= this[_0xd587[257]]&& null== this[_0xd587[267]]&& (null== this[_0xd587[2904]]|| null!= this[_0xd587[2904]]&& null!= this[_0xd587[2916]]))};mxConnectionHandler[_0xd587[202]][_0xd587[787]]= function(_0x5c29x2,_0x5c29x3){this[_0xd587[2899]]++;if(this[_0xd587[994]]()&& this[_0xd587[1179]][_0xd587[994]]()&& !_0x5c29x3[_0xd587[721]]()&& !this[_0xd587[2908]]()&& this[_0xd587[2918]](_0x5c29x3)){null!= this[_0xd587[2886]][_0xd587[2920]]&& null!= this[_0xd587[2886]][_0xd587[2919]]&& null!= this[_0xd587[2886]][_0xd587[987]]?(this[_0xd587[2921]]= this[_0xd587[2886]][_0xd587[2920]],this[_0xd587[257]]= this[_0xd587[2886]][_0xd587[2919]],this[_0xd587[2823]]= this[_0xd587[2886]][_0xd587[987]][_0xd587[238]]()):this[_0xd587[2823]]= new mxPoint(_0x5c29x3[_0xd587[734]](),_0x5c29x3[_0xd587[735]]());this[_0xd587[2897]]= this[_0xd587[2910]](_0x5c29x3);this[_0xd587[2899]]= 1;this[_0xd587[2887]]&& null== this[_0xd587[253]]&& (this[_0xd587[2922]]= null,this[_0xd587[253]]= this[_0xd587[2156]]());if(null== this[_0xd587[257]]&& null!= this[_0xd587[2897]]){var _0x5c29x4=this[_0xd587[1179]][_0xd587[2689]](_0x5c29x3[_0xd587[727]]());this[_0xd587[2897]][_0xd587[246]][_0xd587[256]][_0xd587[2007]](_0x5c29x4,!0)};this[_0xd587[746]]( new mxEventObject(mxEvent.START,_0xd587[724],this[_0xd587[257]]));_0x5c29x3[_0xd587[722]]()}else {if(mxClient[_0xd587[754]]&& this[_0xd587[2888]]&& !this[_0xd587[2890]]&& this[_0xd587[994]]()&& this[_0xd587[1179]][_0xd587[994]]()&& !this[_0xd587[2908]]()){this[_0xd587[2890]]= !0;this[_0xd587[2893]]= _0x5c29x3[_0xd587[730]]();this[_0xd587[2894]]= _0x5c29x3[_0xd587[732]]();var _0x5c29x5=this[_0xd587[1179]][_0xd587[441]][_0xd587[248]](this[_0xd587[2885]][_0xd587[736]](_0x5c29x3));this[_0xd587[2923]]&& window[_0xd587[2924]](this[_0xd587[2923]]);this[_0xd587[2923]]= window[_0xd587[261]](mxUtils[_0xd587[885]](this,function(){this[_0xd587[2891]]&& this[_0xd587[2925]](_0x5c29x3,_0x5c29x5);this[_0xd587[2891]]= this[_0xd587[2890]]= !1}),this[_0xd587[2889]]);this[_0xd587[2891]]= !0}};this[_0xd587[2926]]= this[_0xd587[2916]];this[_0xd587[2916]]= null};mxConnectionHandler[_0xd587[202]][_0xd587[2925]]= function(_0x5c29x2,_0x5c29x3){null!= _0x5c29x3&& (this[_0xd587[2885]][_0xd587[2860]]= this[_0xd587[2885]][_0xd587[2853]],this[_0xd587[2885]][_0xd587[2862]]= _0x5c29x3,this[_0xd587[2885]][_0xd587[811]](),this[_0xd587[2823]]= new mxPoint(_0x5c29x2[_0xd587[734]](),_0x5c29x2[_0xd587[735]]()),this[_0xd587[2897]]= this[_0xd587[2910]](_0x5c29x2),this[_0xd587[257]]= _0x5c29x3,this[_0xd587[746]]( new mxEventObject(mxEvent.START,_0xd587[724],this[_0xd587[257]])))};mxConnectionHandler[_0xd587[202]][_0xd587[2927]]= function(_0x5c29x2){return !this[_0xd587[1179]][_0xd587[1712]](_0x5c29x2[_0xd587[246]])};mxConnectionHandler[_0xd587[202]][_0xd587[2910]]= function(_0x5c29x2){return null};mxConnectionHandler[_0xd587[202]][_0xd587[2928]]= function(_0x5c29x2){var _0x5c29x3=this[_0xd587[2885]][_0xd587[2871]](_0x5c29x2);this[_0xd587[2886]][_0xd587[2729]](_0x5c29x2,null== this[_0xd587[2823]]);this[_0xd587[2915]]= _0x5c29x3};mxConnectionHandler[_0xd587[202]][_0xd587[2929]]= function(_0x5c29x2){var _0x5c29x3=this[_0xd587[1179]][_0xd587[249]]()[_0xd587[518]](),_0x5c29x4=this[_0xd587[1179]][_0xd587[249]]()[_0xd587[512]]();_0x5c29x2[_0xd587[235]]= _0x5c29x2[_0xd587[235]]/ _0x5c29x3- _0x5c29x4[_0xd587[235]];_0x5c29x2[_0xd587[236]]= _0x5c29x2[_0xd587[236]]/ _0x5c29x3- _0x5c29x4[_0xd587[236]]};mxConnectionHandler[_0xd587[202]][_0xd587[788]]= function(_0x5c29x2,_0x5c29x3){this[_0xd587[2891]]&& (this[_0xd587[2891]]= Math[_0xd587[425]](this[_0xd587[2893]]- _0x5c29x3[_0xd587[730]]())< this[_0xd587[2892]]&& Math[_0xd587[425]](this[_0xd587[2894]]- _0x5c29x3[_0xd587[732]]())< this[_0xd587[2892]]);if(!_0x5c29x3[_0xd587[721]]()&& (this[_0xd587[2895]]|| null!= this[_0xd587[2823]]|| !this[_0xd587[1179]][_0xd587[1009]])){!this[_0xd587[994]]()&& null!= this[_0xd587[2915]]&& (this[_0xd587[2906]](this[_0xd587[2904]]),this[_0xd587[2915]]= null);(null!= this[_0xd587[2823]]|| this[_0xd587[994]]()&& this[_0xd587[1179]][_0xd587[994]]())&& this[_0xd587[2928]](_0x5c29x3);if(null!= this[_0xd587[2823]]){var _0x5c29x4=this[_0xd587[1179]][_0xd587[249]]()[_0xd587[255]],_0x5c29x4= new mxPoint(this[_0xd587[1179]][_0xd587[1021]](_0x5c29x3[_0xd587[734]]()/ _0x5c29x4)* _0x5c29x4,this[_0xd587[1179]][_0xd587[1021]](_0x5c29x3[_0xd587[735]]()/ _0x5c29x4)* _0x5c29x4),_0x5c29x5=null,_0x5c29x9=_0x5c29x4;null!= this[_0xd587[2886]][_0xd587[2920]]&& (null!= this[_0xd587[2886]][_0xd587[2919]]&& null!= this[_0xd587[2886]][_0xd587[987]])&& (_0x5c29x5= this[_0xd587[2886]][_0xd587[2920]],_0x5c29x9= this[_0xd587[2886]][_0xd587[987]][_0xd587[238]]());var _0x5c29xa=this[_0xd587[2823]];if(null!= this[_0xd587[2926]]){var _0x5c29x12=this[_0xd587[2926]][_0xd587[1562]][_0xd587[117]],_0x5c29x13=this[_0xd587[2926]][_0xd587[1562]][_0xd587[119]];null!= this[_0xd587[2915]]&& this[_0xd587[2883]]?(_0x5c29x12= this[_0xd587[2917]](this[_0xd587[2926]],this[_0xd587[2915]]),this[_0xd587[2926]][_0xd587[1562]][_0xd587[235]]= _0x5c29x12[_0xd587[235]],this[_0xd587[2926]][_0xd587[1562]][_0xd587[236]]= _0x5c29x12[_0xd587[236]]):(_0x5c29x12= new mxRectangle(_0x5c29x3[_0xd587[734]]()+ this[_0xd587[2896]][_0xd587[235]],_0x5c29x3[_0xd587[735]]()+ this[_0xd587[2896]][_0xd587[236]],_0x5c29x12,_0x5c29x13),this[_0xd587[2926]][_0xd587[1562]]= _0x5c29x12);this[_0xd587[2926]][_0xd587[258]]()};if(null!= this[_0xd587[2897]]){this[_0xd587[2897]][_0xd587[439]]= [null,null!= this[_0xd587[2915]]?null:_0x5c29x9];this[_0xd587[1179]][_0xd587[441]][_0xd587[2289]](this[_0xd587[2897]],this[_0xd587[257]],!0,this[_0xd587[2921]]);null!= this[_0xd587[2915]]&& (null== _0x5c29x5&& (_0x5c29x5= this[_0xd587[1179]][_0xd587[2288]](this[_0xd587[2897]],this[_0xd587[257]],!1)),this[_0xd587[2897]][_0xd587[2088]](null,!1),this[_0xd587[1179]][_0xd587[441]][_0xd587[2289]](this[_0xd587[2897]],this[_0xd587[2915]],!1,_0x5c29x5));_0x5c29xa= null;if(null!= this[_0xd587[2922]]){_0x5c29xa= [];for(_0x5c29x9= 0;_0x5c29x9< this[_0xd587[2922]][_0xd587[67]];_0x5c29x9++){_0x5c29x5= this[_0xd587[2922]][_0x5c29x9][_0xd587[238]](),this[_0xd587[2929]](_0x5c29x5),_0x5c29xa[_0x5c29x9]= _0x5c29x5}};this[_0xd587[1179]][_0xd587[441]][_0xd587[2282]](this[_0xd587[2897]],_0x5c29xa,this[_0xd587[257]],this[_0xd587[2915]]);this[_0xd587[1179]][_0xd587[441]][_0xd587[2283]](this[_0xd587[2897]],this[_0xd587[257]],this[_0xd587[2915]]);_0x5c29x9= this[_0xd587[2897]][_0xd587[439]][this[_0xd587[2897]][_0xd587[439]][_0xd587[67]]- 1];_0x5c29xa= this[_0xd587[2897]][_0xd587[439]][0]}else {null!= this[_0xd587[2915]]&& null== this[_0xd587[2886]][_0xd587[2920]]&& (_0x5c29x12= this[_0xd587[2930]](this[_0xd587[2915]],_0x5c29x3),null!= _0x5c29x12&& (_0x5c29x9= _0x5c29x12)),null== this[_0xd587[2921]]&& null!= this[_0xd587[257]]&& (_0x5c29x12= this[_0xd587[2931]](this[_0xd587[257]],null!= this[_0xd587[2922]]&& 0< this[_0xd587[2922]][_0xd587[67]]?this[_0xd587[2922]][0]:_0x5c29x9,_0x5c29x3),null!= _0x5c29x12&& (_0x5c29xa= _0x5c29x12))};if(null== this[_0xd587[2915]]&& this[_0xd587[2900]]){_0x5c29x12= _0x5c29xa;null!= this[_0xd587[2897]]&& 2< this[_0xd587[2897]][_0xd587[439]][_0xd587[67]]&& (_0x5c29x5= this[_0xd587[2897]][_0xd587[439]][this[_0xd587[2897]][_0xd587[439]][_0xd587[67]]- 2],null!= _0x5c29x5&& (_0x5c29x12= _0x5c29x5));_0x5c29x5= _0x5c29x9[_0xd587[235]]- _0x5c29x12[_0xd587[235]];_0x5c29x12= _0x5c29x9[_0xd587[236]]- _0x5c29x12[_0xd587[236]];_0x5c29x13= Math[_0xd587[428]](_0x5c29x5* _0x5c29x5+ _0x5c29x12* _0x5c29x12);if(0== _0x5c29x13){return};_0x5c29x9[_0xd587[235]]-= 4* _0x5c29x5/ _0x5c29x13;_0x5c29x9[_0xd587[236]]-= 4* _0x5c29x12/ _0x5c29x13};if(null== this[_0xd587[253]]&& (_0x5c29x5= Math[_0xd587[425]](_0x5c29x4[_0xd587[235]]- this[_0xd587[2823]][_0xd587[235]]),_0x5c29x12= Math[_0xd587[425]](_0x5c29x4[_0xd587[236]]- this[_0xd587[2823]][_0xd587[236]]),_0x5c29x5> this[_0xd587[1179]][_0xd587[2353]]|| _0x5c29x12> this[_0xd587[1179]][_0xd587[2353]])){this[_0xd587[253]]= this[_0xd587[2156]](),this[_0xd587[2928]](_0x5c29x3)};null!= this[_0xd587[253]]&& (null!= this[_0xd587[2897]]?this[_0xd587[253]][_0xd587[1525]]= this[_0xd587[2897]][_0xd587[439]]:(_0x5c29x4= [_0x5c29xa],null!= this[_0xd587[2922]]&& (_0x5c29x4= _0x5c29x4[_0xd587[1919]](this[_0xd587[2922]])),_0x5c29x4[_0xd587[207]](_0x5c29x9),this[_0xd587[253]][_0xd587[1525]]= _0x5c29x4),this[_0xd587[2932]]());mxEvent[_0xd587[722]](_0x5c29x3[_0xd587[727]]());_0x5c29x3[_0xd587[722]]()}else {!this[_0xd587[994]]()|| !this[_0xd587[1179]][_0xd587[994]]()?this[_0xd587[2886]][_0xd587[862]]():this[_0xd587[257]]!= this[_0xd587[2915]]&& null== this[_0xd587[2897]]?(this[_0xd587[2906]](this[_0xd587[2904]]),this[_0xd587[2904]]= null,null!= this[_0xd587[2915]]&& null== this[_0xd587[267]]&& (this[_0xd587[2904]]= this[_0xd587[2913]](this[_0xd587[2915]]),null== this[_0xd587[2904]]&& (this[_0xd587[2915]][_0xd587[1609]](mxConstants.CURSOR_CONNECT),_0x5c29x3[_0xd587[722]]())),this[_0xd587[257]]= this[_0xd587[2915]]):this[_0xd587[257]]== this[_0xd587[2915]]&& (null!= this[_0xd587[2915]]&& null== this[_0xd587[2904]]&& !this[_0xd587[1179]][_0xd587[1009]])&& _0x5c29x3[_0xd587[722]]()};null!= this[_0xd587[2886]][_0xd587[2920]]&& this[_0xd587[2885]][_0xd587[862]]();if(!this[_0xd587[1179]][_0xd587[1009]]&& null!= this[_0xd587[2915]]&& null!= this[_0xd587[2904]]){_0x5c29x4= !1;_0x5c29xa= _0x5c29x3[_0xd587[728]]();for(_0x5c29x9= 0;_0x5c29x9< this[_0xd587[2904]][_0xd587[67]]&& !_0x5c29x4;_0x5c29x9++){_0x5c29x4= _0x5c29xa== this[_0xd587[2904]][_0x5c29x9][_0xd587[252]]|| _0x5c29xa[_0xd587[265]]== this[_0xd587[2904]][_0x5c29x9][_0xd587[252]]};_0x5c29x4|| this[_0xd587[2933]](this[_0xd587[2915]],this[_0xd587[2904]],_0x5c29x3)}}else {this[_0xd587[2886]][_0xd587[862]]()}};mxConnectionHandler[_0xd587[202]][_0xd587[2930]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=null,_0x5c29x5=_0x5c29x2[_0xd587[441]],_0x5c29x9=_0x5c29x5[_0xd587[2305]](_0x5c29x2);if(null!= _0x5c29x9){var _0x5c29xa=null!= this[_0xd587[2922]]&& 0< this[_0xd587[2922]][_0xd587[67]]?this[_0xd587[2922]][this[_0xd587[2922]][_0xd587[67]]- 1]: new mxPoint(this[_0xd587[257]][_0xd587[241]](),this[_0xd587[257]][_0xd587[242]]()),_0x5c29x5=_0x5c29x9(_0x5c29x5[_0xd587[2087]](_0x5c29x2),this[_0xd587[2897]],_0x5c29xa,!1);null!= _0x5c29x5&& (_0x5c29x4= _0x5c29x5)}else {_0x5c29x4= new mxPoint(_0x5c29x2[_0xd587[241]](),_0x5c29x2[_0xd587[242]]())};return _0x5c29x4};mxConnectionHandler[_0xd587[202]][_0xd587[2931]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){_0x5c29x4= null;var _0x5c29x5=_0x5c29x2[_0xd587[441]],_0x5c29x9=_0x5c29x5[_0xd587[2305]](_0x5c29x2),_0x5c29xa= new mxPoint(_0x5c29x2[_0xd587[241]](),_0x5c29x2[_0xd587[242]]());if(null!= _0x5c29x9){var _0x5c29x12=mxUtils[_0xd587[433]](_0x5c29x2[_0xd587[124]],mxConstants.STYLE_ROTATION,0),_0x5c29x13=-_0x5c29x12* (Math[_0xd587[424]]/ 180);0!= _0x5c29x12&& (_0x5c29x3= mxUtils[_0xd587[432]]( new mxPoint(_0x5c29x3[_0xd587[235]],_0x5c29x3[_0xd587[236]]),Math[_0xd587[426]](_0x5c29x13),Math[_0xd587[427]](_0x5c29x13),_0x5c29xa));_0x5c29x2= _0x5c29x9(_0x5c29x5[_0xd587[2087]](_0x5c29x2),_0x5c29x2,_0x5c29x3,!1);null!= _0x5c29x2&& (0!= _0x5c29x12&& (_0x5c29x2= mxUtils[_0xd587[432]]( new mxPoint(_0x5c29x2[_0xd587[235]],_0x5c29x2[_0xd587[236]]),Math[_0xd587[426]](-_0x5c29x13),Math[_0xd587[427]](-_0x5c29x13),_0x5c29xa)),_0x5c29x4= _0x5c29x2)}else {_0x5c29x4= _0x5c29xa};return _0x5c29x4};mxConnectionHandler[_0xd587[202]][_0xd587[2933]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){};mxConnectionHandler[_0xd587[202]][_0xd587[2934]]= function(_0x5c29x2){return null!= _0x5c29x2[_0xd587[248]]()};mxConnectionHandler[_0xd587[202]][_0xd587[2935]]= function(_0x5c29x2){var _0x5c29x3=mxUtils[_0xd587[2196]](this[_0xd587[1179]][_0xd587[526]],_0x5c29x2[_0xd587[730]](),_0x5c29x2[_0xd587[732]]()),_0x5c29x4=Math[_0xd587[425]](_0x5c29x3[_0xd587[235]]- this[_0xd587[2823]][_0xd587[235]]),_0x5c29x3=Math[_0xd587[425]](_0x5c29x3[_0xd587[236]]- this[_0xd587[2823]][_0xd587[236]]);if(null!= this[_0xd587[2922]]|| 1< this[_0xd587[2899]]&& (_0x5c29x4> this[_0xd587[1179]][_0xd587[2353]]|| _0x5c29x3> this[_0xd587[1179]][_0xd587[2353]])){null== this[_0xd587[2922]]&& (this[_0xd587[2922]]= []),_0x5c29x4= this[_0xd587[1179]][_0xd587[441]][_0xd587[255]],_0x5c29x3= new mxPoint(this[_0xd587[1179]][_0xd587[1021]](_0x5c29x2[_0xd587[734]]()/ _0x5c29x4)* _0x5c29x4,this[_0xd587[1179]][_0xd587[1021]](_0x5c29x2[_0xd587[735]]()/ _0x5c29x4)* _0x5c29x4),this[_0xd587[2922]][_0xd587[207]](_0x5c29x3)}};mxConnectionHandler[_0xd587[202]][_0xd587[789]]= function(_0x5c29x2,_0x5c29x3){if(!_0x5c29x3[_0xd587[721]]()&& this[_0xd587[2908]]()){if(this[_0xd587[2887]]&& !this[_0xd587[2934]](_0x5c29x3)){this[_0xd587[2935]](_0x5c29x3);_0x5c29x3[_0xd587[722]]();return};if(null== this[_0xd587[267]]){var _0x5c29x4=null!= this[_0xd587[257]]?this[_0xd587[257]][_0xd587[246]]:null,_0x5c29x5=null;null!= this[_0xd587[2886]][_0xd587[2920]]&& null!= this[_0xd587[2886]][_0xd587[2919]]&& (_0x5c29x5= this[_0xd587[2886]][_0xd587[2919]][_0xd587[246]]);null== _0x5c29x5&& this[_0xd587[2885]][_0xd587[2867]]()&& (_0x5c29x5= this[_0xd587[2885]][_0xd587[2861]][_0xd587[246]]);this[_0xd587[807]](_0x5c29x4,_0x5c29x5,_0x5c29x3[_0xd587[727]](),_0x5c29x3[_0xd587[736]]())}else {null!= this[_0xd587[257]]&& (null!= this[_0xd587[2885]][_0xd587[2861]]&& this[_0xd587[257]][_0xd587[246]]== this[_0xd587[2885]][_0xd587[2861]][_0xd587[246]])&& this[_0xd587[1179]][_0xd587[2459]](this[_0xd587[2885]][_0xd587[1097]],evt),0< this[_0xd587[267]][_0xd587[67]]&& this[_0xd587[1179]][_0xd587[2580]](this[_0xd587[267]])};this[_0xd587[2906]](this[_0xd587[2904]]);_0x5c29x3[_0xd587[722]]()};null!= this[_0xd587[2823]]&& this[_0xd587[862]]();this[_0xd587[2891]]= this[_0xd587[2890]]= !1};mxConnectionHandler[_0xd587[202]][_0xd587[862]]= function(){null!= this[_0xd587[253]]&& (this[_0xd587[253]][_0xd587[515]](),this[_0xd587[253]]= null);this[_0xd587[2906]](this[_0xd587[2904]]);this[_0xd587[2904]]= null;this[_0xd587[2885]][_0xd587[862]]();this[_0xd587[2886]][_0xd587[862]]();this[_0xd587[2921]]= this[_0xd587[267]]= this[_0xd587[257]]= this[_0xd587[2897]]= this[_0xd587[2926]]= null;this[_0xd587[2899]]= 0;this[_0xd587[2916]]= this[_0xd587[2823]]= null;this[_0xd587[746]]( new mxEventObject(mxEvent.RESET))};mxConnectionHandler[_0xd587[202]][_0xd587[2932]]= function(){var _0x5c29x2=null== this[_0xd587[267]];this[_0xd587[253]][_0xd587[1307]]= this[_0xd587[2936]](_0x5c29x2);_0x5c29x2= this[_0xd587[2937]](_0x5c29x2);this[_0xd587[253]][_0xd587[1336]]= _0x5c29x2;this[_0xd587[253]][_0xd587[258]]()};mxConnectionHandler[_0xd587[202]][_0xd587[2937]]= function(_0x5c29x2){return _0x5c29x2?mxConstants[_0xd587[2829]]:mxConstants[_0xd587[2938]]};mxConnectionHandler[_0xd587[202]][_0xd587[2936]]= function(_0x5c29x2){return _0x5c29x2?3:1};mxConnectionHandler[_0xd587[202]][_0xd587[807]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){if(null!= _0x5c29x3|| this[_0xd587[2901]]()|| this[_0xd587[1179]][_0xd587[2406]]){var _0x5c29x9=this[_0xd587[1179]][_0xd587[502]](),_0x5c29xa=null;_0x5c29x9[_0xd587[473]]();try{if(null!= _0x5c29x2&& (null== _0x5c29x3&& this[_0xd587[2901]]())&& (_0x5c29x3= this[_0xd587[2939]](_0x5c29x4,_0x5c29x2),null!= _0x5c29x3)){_0x5c29x5= this[_0xd587[1179]][_0xd587[564]]([_0x5c29x3],_0x5c29x4,_0x5c29x5);if(null== _0x5c29x5|| !this[_0xd587[1179]][_0xd587[502]]()[_0xd587[250]](_0x5c29x5)){var _0x5c29x12=this[_0xd587[1179]][_0xd587[249]]()[_0xd587[248]](_0x5c29x5);if(null!= _0x5c29x12){var _0x5c29x13=_0x5c29x9[_0xd587[1721]](_0x5c29x3);_0x5c29x13[_0xd587[235]]-= _0x5c29x12[_0xd587[2078]][_0xd587[235]];_0x5c29x13[_0xd587[236]]-= _0x5c29x12[_0xd587[2078]][_0xd587[236]]}}else {_0x5c29x5= this[_0xd587[1179]][_0xd587[902]]()};this[_0xd587[1179]][_0xd587[2103]](_0x5c29x3,_0x5c29x5)};var _0x5c29x14=this[_0xd587[1179]][_0xd587[902]]();null!= _0x5c29x2&& (null!= _0x5c29x3&& _0x5c29x9[_0xd587[1197]](_0x5c29x2)== _0x5c29x9[_0xd587[1197]](_0x5c29x3)&& _0x5c29x9[_0xd587[1197]](_0x5c29x9[_0xd587[1197]](_0x5c29x2))!= _0x5c29x9[_0xd587[501]]())&& (_0x5c29x14= _0x5c29x9[_0xd587[1197]](_0x5c29x2),null!= _0x5c29x2[_0xd587[256]]&& _0x5c29x2[_0xd587[256]][_0xd587[1500]]&& (null!= _0x5c29x3[_0xd587[256]]&& _0x5c29x3[_0xd587[256]][_0xd587[1500]])&& (_0x5c29x14= _0x5c29x9[_0xd587[1197]](_0x5c29x14)));_0x5c29x13= _0x5c29x12= null;null!= this[_0xd587[2897]]&& (_0x5c29x12= this[_0xd587[2897]][_0xd587[246]][_0xd587[131]],_0x5c29x13= this[_0xd587[2897]][_0xd587[246]][_0xd587[124]]);_0x5c29xa= this[_0xd587[1960]](_0x5c29x14,null,_0x5c29x12,_0x5c29x2,_0x5c29x3,_0x5c29x13);if(null!= _0x5c29xa){this[_0xd587[1179]][_0xd587[2545]](_0x5c29xa,_0x5c29x2,!0,this[_0xd587[2921]]);this[_0xd587[1179]][_0xd587[2545]](_0x5c29xa,_0x5c29x3,!1,this[_0xd587[2886]][_0xd587[2920]]);null!= this[_0xd587[2897]]&& _0x5c29x9[_0xd587[1724]](_0x5c29xa,this[_0xd587[2897]][_0xd587[246]][_0xd587[256]]);var _0x5c29x15=_0x5c29x9[_0xd587[1721]](_0x5c29xa);null== _0x5c29x15&& (_0x5c29x15= new mxGeometry,_0x5c29x15[_0xd587[1500]]= !0,_0x5c29x9[_0xd587[1724]](_0x5c29xa,_0x5c29x15));if(null!= this[_0xd587[2922]]&& 0< this[_0xd587[2922]][_0xd587[67]]){var _0x5c29x16=this[_0xd587[1179]][_0xd587[441]][_0xd587[255]],_0x5c29x17=this[_0xd587[1179]][_0xd587[441]][_0xd587[513]];_0x5c29x15[_0xd587[1525]]= [];for(_0x5c29x2= 0;_0x5c29x2< this[_0xd587[2922]][_0xd587[67]];_0x5c29x2++){var _0x5c29x18=this[_0xd587[2922]][_0x5c29x2];_0x5c29x15[_0xd587[1525]][_0xd587[207]]( new mxPoint(_0x5c29x18[_0xd587[235]]/ _0x5c29x16- _0x5c29x17[_0xd587[235]],_0x5c29x18[_0xd587[236]]/ _0x5c29x16- _0x5c29x17[_0xd587[236]]))}};null== _0x5c29x3&& (_0x5c29x18= this[_0xd587[1179]][_0xd587[2689]](_0x5c29x4,!1),_0x5c29x18[_0xd587[235]]-= this[_0xd587[1179]][_0xd587[1136]]/ this[_0xd587[1179]][_0xd587[441]][_0xd587[255]],_0x5c29x18[_0xd587[236]]-= this[_0xd587[1179]][_0xd587[1137]]/ this[_0xd587[1179]][_0xd587[441]][_0xd587[255]],_0x5c29x15[_0xd587[2007]](_0x5c29x18,!1));this[_0xd587[746]]( new mxEventObject(mxEvent.CONNECT,_0xd587[246],_0x5c29xa,_0xd587[763],_0x5c29x4,_0xd587[772],_0x5c29x5))}}catch(q){mxLog[_0xd587[539]](),mxLog[_0xd587[143]](q[_0xd587[281]])}finally{_0x5c29x9[_0xd587[476]]()};this[_0xd587[804]]&& this[_0xd587[2707]](_0x5c29xa,_0x5c29x3)}};mxConnectionHandler[_0xd587[202]][_0xd587[2707]]= function(_0x5c29x2,_0x5c29x3){this[_0xd587[1179]][_0xd587[2450]](_0x5c29x2)};mxConnectionHandler[_0xd587[202]][_0xd587[1960]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa){if(null== this[_0xd587[1033]]){return this[_0xd587[1179]][_0xd587[1960]](_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa)};_0x5c29x3= this[_0xd587[2503]](_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa);return _0x5c29x3= this[_0xd587[1179]][_0xd587[2504]](_0x5c29x3,_0x5c29x2,_0x5c29x5,_0x5c29x9)};mxConnectionHandler[_0xd587[202]][_0xd587[2939]]= function(_0x5c29x2,_0x5c29x3){for(var _0x5c29x4=this[_0xd587[1179]][_0xd587[1198]](_0x5c29x3);null!= _0x5c29x4&& _0x5c29x4[_0xd587[1500]];){_0x5c29x3= this[_0xd587[1179]][_0xd587[502]]()[_0xd587[1197]](_0x5c29x3),_0x5c29x4= this[_0xd587[1179]][_0xd587[1198]](_0x5c29x3)};var _0x5c29x5=this[_0xd587[1179]][_0xd587[899]]([_0x5c29x3])[0],_0x5c29x4=this[_0xd587[1179]][_0xd587[502]]()[_0xd587[1721]](_0x5c29x5);if(null!= _0x5c29x4){var _0x5c29x9=this[_0xd587[1179]][_0xd587[2689]](_0x5c29x2);_0x5c29x4[_0xd587[235]]= this[_0xd587[1179]][_0xd587[1021]](_0x5c29x9[_0xd587[235]]- _0x5c29x4[_0xd587[117]]/ 2)- this[_0xd587[1179]][_0xd587[1136]]/ this[_0xd587[1179]][_0xd587[441]][_0xd587[255]];_0x5c29x4[_0xd587[236]]= this[_0xd587[1179]][_0xd587[1021]](_0x5c29x9[_0xd587[236]]- _0x5c29x4[_0xd587[119]]/ 2)- this[_0xd587[1179]][_0xd587[1137]]/ this[_0xd587[1179]][_0xd587[441]][_0xd587[255]];if(null!= this[_0xd587[2823]]){var _0x5c29xa=this[_0xd587[1179]][_0xd587[441]][_0xd587[248]](_0x5c29x3);if(null!= _0x5c29xa){var _0x5c29x12=this[_0xd587[2940]]();Math[_0xd587[425]](this[_0xd587[1179]][_0xd587[1021]](this[_0xd587[2823]][_0xd587[235]])- this[_0xd587[1179]][_0xd587[1021]](_0x5c29x9[_0xd587[235]]))<= _0x5c29x12?_0x5c29x4[_0xd587[235]]= _0x5c29xa[_0xd587[235]]:Math[_0xd587[425]](this[_0xd587[1179]][_0xd587[1021]](this[_0xd587[2823]][_0xd587[236]])- this[_0xd587[1179]][_0xd587[1021]](_0x5c29x9[_0xd587[236]]))<= _0x5c29x12&& (_0x5c29x4[_0xd587[236]]= _0x5c29xa[_0xd587[236]])}}};return _0x5c29x5};mxConnectionHandler[_0xd587[202]][_0xd587[2940]]= function(){return this[_0xd587[1179]][_0xd587[997]]()?this[_0xd587[1179]][_0xd587[1020]]:this[_0xd587[1179]][_0xd587[2353]]};mxConnectionHandler[_0xd587[202]][_0xd587[2503]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){var _0x5c29x9=null;null!= this[_0xd587[1033]]&& (_0x5c29x9= this[_0xd587[1033]](_0x5c29x3,_0x5c29x4,_0x5c29x5));null== _0x5c29x9&& (_0x5c29x9= new mxCell(_0x5c29x2|| _0xd587[110]),_0x5c29x9[_0xd587[1994]](!0),_0x5c29x9[_0xd587[475]](_0x5c29x5),_0x5c29x2= new mxGeometry,_0x5c29x2[_0xd587[1500]]= !0,_0x5c29x9[_0xd587[1724]](_0x5c29x2));return _0x5c29x9};mxConnectionHandler[_0xd587[202]][_0xd587[515]]= function(){this[_0xd587[1179]][_0xd587[1148]](this);null!= this[_0xd587[253]]&& (this[_0xd587[253]][_0xd587[515]](),this[_0xd587[253]]= null);null!= this[_0xd587[2885]]&& (this[_0xd587[2885]][_0xd587[515]](),this[_0xd587[2885]]= null);null!= this[_0xd587[2886]]&& (this[_0xd587[2886]][_0xd587[515]](),this[_0xd587[2886]]= null);null!= this[_0xd587[1176]]&& (this[_0xd587[1179]][_0xd587[502]]()[_0xd587[745]](this[_0xd587[1176]]),this[_0xd587[1179]][_0xd587[249]]()[_0xd587[745]](this[_0xd587[1176]]),this[_0xd587[1176]]= null);null!= this[_0xd587[2898]]&& (this[_0xd587[1179]][_0xd587[745]](this[_0xd587[2898]]),this[_0xd587[1179]][_0xd587[249]]()[_0xd587[745]](this[_0xd587[2898]]),this[_0xd587[2898]]= null)};function mxConstraintHandler(_0x5c29x2){this[_0xd587[1179]]= _0x5c29x2}mxConstraintHandler[_0xd587[202]][_0xd587[2941]]= new mxImage(mxClient[_0xd587[88]]+ _0xd587[2942],5,5);mxConstraintHandler[_0xd587[202]][_0xd587[1179]]= null;mxConstraintHandler[_0xd587[202]][_0xd587[984]]= !0;mxConstraintHandler[_0xd587[202]][_0xd587[2943]]= mxConstants[_0xd587[2854]];mxConstraintHandler[_0xd587[202]][_0xd587[994]]= function(){return this[_0xd587[984]]};mxConstraintHandler[_0xd587[202]][_0xd587[995]]= function(_0x5c29x2){this[_0xd587[984]]= _0x5c29x2};mxConstraintHandler[_0xd587[202]][_0xd587[862]]= function(){if(null!= this[_0xd587[2944]]){for(var _0x5c29x2=0;_0x5c29x2< this[_0xd587[2944]][_0xd587[67]];_0x5c29x2++){this[_0xd587[2944]][_0x5c29x2][_0xd587[515]]()};this[_0xd587[2944]]= null};null!= this[_0xd587[2945]]&& (this[_0xd587[2945]][_0xd587[515]](),this[_0xd587[2945]]= null);this[_0xd587[2946]]= this[_0xd587[2919]]= this[_0xd587[987]]= this[_0xd587[2947]]= this[_0xd587[2920]]= null};mxConstraintHandler[_0xd587[202]][_0xd587[2636]]= function(){return this[_0xd587[1179]][_0xd587[2636]]()};mxConstraintHandler[_0xd587[202]][_0xd587[2948]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){return this[_0xd587[2941]]};mxConstraintHandler[_0xd587[202]][_0xd587[2949]]= function(_0x5c29x2,_0x5c29x3){return !1};mxConstraintHandler[_0xd587[202]][_0xd587[2729]]= function(_0x5c29x2,_0x5c29x3){if(this[_0xd587[994]]()&& !this[_0xd587[2949]](_0x5c29x2)){var _0x5c29x4=this[_0xd587[2636]](),_0x5c29x5= new mxRectangle(_0x5c29x2[_0xd587[734]]()- _0x5c29x4,_0x5c29x2[_0xd587[735]]()- _0x5c29x4,2* _0x5c29x4,2* _0x5c29x4),_0x5c29x9=null!= _0x5c29x2[_0xd587[736]]()?this[_0xd587[1179]][_0xd587[2565]](_0x5c29x2[_0xd587[736]]()):!1;if(null== this[_0xd587[2947]]|| !mxUtils[_0xd587[1825]](this[_0xd587[2947]],_0x5c29x5)|| null!= _0x5c29x2[_0xd587[248]]()&& null!= this[_0xd587[2919]]&& _0x5c29x9){if(this[_0xd587[2947]]= null,_0x5c29x2[_0xd587[248]]()!= this[_0xd587[2919]]){if(this[_0xd587[2919]]= null,this[_0xd587[1531]]= null!= _0x5c29x2[_0xd587[248]]()&& _0x5c29x9?this[_0xd587[1179]][_0xd587[2538]](_0x5c29x2[_0xd587[248]](),_0x5c29x3):null,null!= this[_0xd587[1531]]){this[_0xd587[2919]]= _0x5c29x2[_0xd587[248]]();this[_0xd587[2947]]= new mxRectangle(_0x5c29x2[_0xd587[248]]()[_0xd587[235]],_0x5c29x2[_0xd587[248]]()[_0xd587[236]],_0x5c29x2[_0xd587[248]]()[_0xd587[117]],_0x5c29x2[_0xd587[248]]()[_0xd587[119]]);if(null!= this[_0xd587[2944]]){for(_0x5c29x9= 0;_0x5c29x9< this[_0xd587[2944]][_0xd587[67]];_0x5c29x9++){this[_0xd587[2944]][_0x5c29x9][_0xd587[515]]()};this[_0xd587[2946]]= this[_0xd587[2944]]= null};this[_0xd587[2944]]= [];this[_0xd587[2946]]= [];for(_0x5c29x9= 0;_0x5c29x9< this[_0xd587[1531]][_0xd587[67]];_0x5c29x9++){var _0x5c29xa=this[_0xd587[1179]][_0xd587[2290]](_0x5c29x2[_0xd587[248]](),this[_0xd587[1531]][_0x5c29x9]),_0x5c29x12=this[_0xd587[2948]](_0x5c29x2[_0xd587[248]](),this[_0xd587[1531]][_0x5c29x9],_0x5c29xa),_0x5c29x13=_0x5c29x12[_0xd587[390]],_0x5c29x12= new mxRectangle(_0x5c29xa[_0xd587[235]]- _0x5c29x12[_0xd587[117]]/ 2,_0x5c29xa[_0xd587[236]]- _0x5c29x12[_0xd587[119]]/ 2,_0x5c29x12[_0xd587[117]],_0x5c29x12[_0xd587[119]]),_0x5c29x12= new mxImageShape(_0x5c29x12,_0x5c29x13);_0x5c29x12[_0xd587[507]]= this[_0xd587[1179]][_0xd587[507]]!= mxConstants[_0xd587[508]]?mxConstants[_0xd587[2334]]:mxConstants[_0xd587[508]];_0x5c29x12[_0xd587[1674]]= !1;_0x5c29x12[_0xd587[176]](this[_0xd587[1179]][_0xd587[249]]()[_0xd587[1524]]());null!= _0x5c29x12[_0xd587[252]][_0xd587[328]]&& _0x5c29x12[_0xd587[252]][_0xd587[265]][_0xd587[950]](_0x5c29x12[_0xd587[252]],_0x5c29x12[_0xd587[252]][_0xd587[265]][_0xd587[285]]);_0x5c29x13= mxUtils[_0xd587[885]](this,function(){return null!= this[_0xd587[2919]]?this[_0xd587[2919]]:_0x5c29x2[_0xd587[248]]()});_0x5c29x12[_0xd587[258]]();mxEvent[_0xd587[2733]](_0x5c29x12[_0xd587[252]],this[_0xd587[1179]],_0x5c29x13);this[_0xd587[2947]][_0xd587[99]](_0x5c29x12[_0xd587[1562]]);this[_0xd587[2944]][_0xd587[207]](_0x5c29x12);this[_0xd587[2946]][_0xd587[207]](_0x5c29xa)};this[_0xd587[2947]][_0xd587[244]](_0x5c29x4)}else {if(null!= this[_0xd587[2944]]){null!= this[_0xd587[2945]]&& (this[_0xd587[2945]][_0xd587[515]](),this[_0xd587[2945]]= null);for(_0x5c29x9= 0;_0x5c29x9< this[_0xd587[2944]][_0xd587[67]];_0x5c29x9++){this[_0xd587[2944]][_0x5c29x9][_0xd587[515]]()};this[_0xd587[2946]]= this[_0xd587[2944]]= null}}}};this[_0xd587[987]]= this[_0xd587[2920]]= null;if(null!= this[_0xd587[2944]]&& null!= this[_0xd587[1531]]&& (null== _0x5c29x2[_0xd587[248]]()|| this[_0xd587[2919]]== _0x5c29x2[_0xd587[248]]())){for(_0x5c29x9= 0;_0x5c29x9< this[_0xd587[2944]][_0xd587[67]];_0x5c29x9++){if(mxUtils[_0xd587[1825]](this[_0xd587[2944]][_0x5c29x9][_0xd587[1562]],_0x5c29x5)){this[_0xd587[2920]]= this[_0xd587[1531]][_0x5c29x9];this[_0xd587[987]]= this[_0xd587[2946]][_0x5c29x9];_0x5c29x4= this[_0xd587[2944]][_0x5c29x9][_0xd587[1562]][_0xd587[238]]();_0x5c29x4[_0xd587[244]](mxClient[_0xd587[80]]?3:2);mxClient[_0xd587[80]]&& (_0x5c29x4[_0xd587[117]]-= 1,_0x5c29x4[_0xd587[119]]-= 1);null== this[_0xd587[2945]]?(_0x5c29x4= new mxRectangleShape(_0x5c29x4,null,this[_0xd587[2943]],3),_0x5c29x4[_0xd587[507]]= this[_0xd587[1179]][_0xd587[507]]== mxConstants[_0xd587[508]]?mxConstants[_0xd587[508]]:mxConstants[_0xd587[1523]],_0x5c29x4[_0xd587[176]](this[_0xd587[1179]][_0xd587[249]]()[_0xd587[1524]]()),this[_0xd587[2945]]= _0x5c29x4,_0x5c29x13= mxUtils[_0xd587[885]](this,function(){return null!= this[_0xd587[2919]]?this[_0xd587[2919]]:_0x5c29x2[_0xd587[248]]()}),mxEvent[_0xd587[2733]](_0x5c29x4[_0xd587[252]],this[_0xd587[1179]],_0x5c29x13)):(this[_0xd587[2945]][_0xd587[1562]]= _0x5c29x4,this[_0xd587[2945]][_0xd587[258]]());break}}};null== this[_0xd587[2920]]&& null!= this[_0xd587[2945]]&& (this[_0xd587[2945]][_0xd587[515]](),this[_0xd587[2945]]= null)}};mxConstraintHandler[_0xd587[202]][_0xd587[515]]= function(){this[_0xd587[862]]()};function mxRubberband(_0x5c29x2){null!= _0x5c29x2&& (this[_0xd587[1179]]= _0x5c29x2,this[_0xd587[1179]][_0xd587[1133]](this),this[_0xd587[2730]]= mxUtils[_0xd587[885]](this,function(){this[_0xd587[2950]]()}),this[_0xd587[1179]][_0xd587[169]](mxEvent.PAN,this[_0xd587[2730]]),mxClient[_0xd587[80]]&& mxEvent[_0xd587[169]](window,_0xd587[2428],mxUtils[_0xd587[885]](this,function(){this[_0xd587[515]]()})))}mxRubberband[_0xd587[202]][_0xd587[2951]]= 20;mxRubberband[_0xd587[202]][_0xd587[984]]= !0;mxRubberband[_0xd587[202]][_0xd587[485]]= null;mxRubberband[_0xd587[202]][_0xd587[2952]]= null;mxRubberband[_0xd587[202]][_0xd587[2953]]= 0;mxRubberband[_0xd587[202]][_0xd587[2954]]= 0;mxRubberband[_0xd587[202]][_0xd587[994]]= function(){return this[_0xd587[984]]};mxRubberband[_0xd587[202]][_0xd587[995]]= function(_0x5c29x2){this[_0xd587[984]]= _0x5c29x2};mxRubberband[_0xd587[202]][_0xd587[787]]= function(_0x5c29x2,_0x5c29x3){if(!_0x5c29x3[_0xd587[721]]()&& this[_0xd587[994]]()&& this[_0xd587[1179]][_0xd587[994]]()&& (this[_0xd587[1179]][_0xd587[2579]](_0x5c29x3[_0xd587[727]]())|| null== _0x5c29x3[_0xd587[248]]())){var _0x5c29x4=mxUtils[_0xd587[445]](this[_0xd587[1179]][_0xd587[526]]),_0x5c29x5=mxUtils[_0xd587[444]](this[_0xd587[1179]][_0xd587[526]]);_0x5c29x5[_0xd587[235]]-= _0x5c29x4[_0xd587[235]];_0x5c29x5[_0xd587[236]]-= _0x5c29x4[_0xd587[236]];this[_0xd587[861]](_0x5c29x3[_0xd587[730]]()+ _0x5c29x5[_0xd587[235]],_0x5c29x3[_0xd587[732]]()+ _0x5c29x5[_0xd587[236]]);if(mxClient[_0xd587[133]]&& !mxClient[_0xd587[75]]&& !mxClient[_0xd587[76]]){var _0x5c29x9=this[_0xd587[1179]][_0xd587[526]],_0x5c29xa=function(_0x5c29x2){_0x5c29x2= new mxMouseEvent(_0x5c29x2);var _0x5c29x3=mxUtils[_0xd587[2196]](_0x5c29x9,_0x5c29x2[_0xd587[730]](),_0x5c29x2[_0xd587[732]]());_0x5c29x2[_0xd587[725]]= _0x5c29x3[_0xd587[235]];_0x5c29x2[_0xd587[726]]= _0x5c29x3[_0xd587[236]];return _0x5c29x2};this[_0xd587[2955]]= mxUtils[_0xd587[885]](this,function(_0x5c29x2){this[_0xd587[788]](this[_0xd587[1179]],_0x5c29xa(_0x5c29x2))});this[_0xd587[981]]= mxUtils[_0xd587[885]](this,function(_0x5c29x2){this[_0xd587[789]](this[_0xd587[1179]],_0x5c29xa(_0x5c29x2))});mxEvent[_0xd587[169]](document,_0xd587[752],this[_0xd587[2955]]);mxEvent[_0xd587[169]](document,_0xd587[753],this[_0xd587[981]])};_0x5c29x3[_0xd587[722]](!1)}};mxRubberband[_0xd587[202]][_0xd587[861]]= function(_0x5c29x2,_0x5c29x3){this[_0xd587[2823]]= new mxPoint(_0x5c29x2,_0x5c29x3)};mxRubberband[_0xd587[202]][_0xd587[788]]= function(_0x5c29x2,_0x5c29x3){if(!_0x5c29x3[_0xd587[721]]()&& null!= this[_0xd587[2823]]){var _0x5c29x4=mxUtils[_0xd587[444]](this[_0xd587[1179]][_0xd587[526]]),_0x5c29x5=mxUtils[_0xd587[445]](this[_0xd587[1179]][_0xd587[526]]);_0x5c29x4[_0xd587[235]]-= _0x5c29x5[_0xd587[235]];_0x5c29x4[_0xd587[236]]-= _0x5c29x5[_0xd587[236]];var _0x5c29x5=_0x5c29x3[_0xd587[730]]()+ _0x5c29x4[_0xd587[235]],_0x5c29x4=_0x5c29x3[_0xd587[732]]()+ _0x5c29x4[_0xd587[236]],_0x5c29x9=this[_0xd587[2823]][_0xd587[235]]- _0x5c29x5,_0x5c29xa=this[_0xd587[2823]][_0xd587[236]]- _0x5c29x4,_0x5c29x12=this[_0xd587[1179]][_0xd587[2353]];if(null!= this[_0xd587[485]]|| Math[_0xd587[425]](_0x5c29x9)> _0x5c29x12|| Math[_0xd587[425]](_0x5c29xa)> _0x5c29x12){null== this[_0xd587[485]]&& (this[_0xd587[485]]= this[_0xd587[2156]]()),mxUtils[_0xd587[2440]](),this[_0xd587[2729]](_0x5c29x5,_0x5c29x4),_0x5c29x3[_0xd587[722]]()}}};mxRubberband[_0xd587[202]][_0xd587[2156]]= function(){null== this[_0xd587[2952]]&& (this[_0xd587[2952]]= document[_0xd587[55]](_0xd587[485]),this[_0xd587[2952]][_0xd587[926]]= _0xd587[2956],mxUtils[_0xd587[254]](this[_0xd587[2952]],this[_0xd587[2951]]));this[_0xd587[1179]][_0xd587[526]][_0xd587[62]](this[_0xd587[2952]]);return this[_0xd587[2952]]};mxRubberband[_0xd587[202]][_0xd587[789]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=null!= this[_0xd587[485]];this[_0xd587[862]]();_0x5c29x4&& (_0x5c29x4= new mxRectangle(this[_0xd587[235]],this[_0xd587[236]],this[_0xd587[117]],this[_0xd587[119]]),this[_0xd587[1179]][_0xd587[2698]](_0x5c29x4,_0x5c29x3[_0xd587[727]]()),_0x5c29x3[_0xd587[722]]())};mxRubberband[_0xd587[202]][_0xd587[862]]= function(){null!= this[_0xd587[485]]&& this[_0xd587[485]][_0xd587[265]][_0xd587[266]](this[_0xd587[485]]);null!= this[_0xd587[2955]]&& (mxEvent[_0xd587[745]](document,_0xd587[752],this[_0xd587[2955]]),this[_0xd587[2955]]= null);null!= this[_0xd587[981]]&& (mxEvent[_0xd587[745]](document,_0xd587[753],this[_0xd587[981]]),this[_0xd587[981]]= null);this[_0xd587[2954]]= this[_0xd587[2953]]= 0;this[_0xd587[485]]= this[_0xd587[2823]]= null};mxRubberband[_0xd587[202]][_0xd587[2729]]= function(_0x5c29x2,_0x5c29x3){this[_0xd587[2953]]= _0x5c29x2;this[_0xd587[2954]]= _0x5c29x3;this[_0xd587[2950]]()};mxRubberband[_0xd587[202]][_0xd587[2950]]= function(){if(null!= this[_0xd587[485]]){var _0x5c29x2=this[_0xd587[2953]]- this[_0xd587[1179]][_0xd587[1136]],_0x5c29x3=this[_0xd587[2954]]- this[_0xd587[1179]][_0xd587[1137]];this[_0xd587[235]]= Math[_0xd587[243]](this[_0xd587[2823]][_0xd587[235]],_0x5c29x2);this[_0xd587[236]]= Math[_0xd587[243]](this[_0xd587[2823]][_0xd587[236]],_0x5c29x3);this[_0xd587[117]]= Math[_0xd587[160]](this[_0xd587[2823]][_0xd587[235]],_0x5c29x2)- this[_0xd587[235]];this[_0xd587[119]]= Math[_0xd587[160]](this[_0xd587[2823]][_0xd587[236]],_0x5c29x3)- this[_0xd587[236]];_0x5c29x2= mxClient[_0xd587[47]]?this[_0xd587[1179]][_0xd587[1137]]:0;this[_0xd587[485]][_0xd587[124]][_0xd587[361]]= this[_0xd587[235]]+ (mxClient[_0xd587[47]]?this[_0xd587[1179]][_0xd587[1136]]:0)+ _0xd587[168];this[_0xd587[485]][_0xd587[124]][_0xd587[125]]= this[_0xd587[236]]+ _0x5c29x2+ _0xd587[168];this[_0xd587[485]][_0xd587[124]][_0xd587[117]]= Math[_0xd587[160]](1,this[_0xd587[117]])+ _0xd587[168];this[_0xd587[485]][_0xd587[124]][_0xd587[119]]= Math[_0xd587[160]](1,this[_0xd587[119]])+ _0xd587[168]}};mxRubberband[_0xd587[202]][_0xd587[515]]= function(){this[_0xd587[2717]]|| (this[_0xd587[2717]]= !0,this[_0xd587[1179]][_0xd587[1148]](this),this[_0xd587[1179]][_0xd587[745]](this[_0xd587[2730]]),this[_0xd587[862]](),null!= this[_0xd587[2952]]&& (this[_0xd587[2952]]= null))};function mxVertexHandler(_0x5c29x2){null!= _0x5c29x2&& (this[_0xd587[724]]= _0x5c29x2,this[_0xd587[176]]())}mxVertexHandler[_0xd587[202]][_0xd587[1179]]= null;mxVertexHandler[_0xd587[202]][_0xd587[724]]= null;mxVertexHandler[_0xd587[202]][_0xd587[2957]]= !1;mxVertexHandler[_0xd587[202]][_0xd587[1983]]= null;mxVertexHandler[_0xd587[202]][_0xd587[2958]]= !0;mxVertexHandler[_0xd587[202]][_0xd587[2959]]= null;mxVertexHandler[_0xd587[202]][_0xd587[2353]]= 0;mxVertexHandler[_0xd587[202]][_0xd587[2809]]= !1;mxVertexHandler[_0xd587[202]][_0xd587[2960]]= !0;mxVertexHandler[_0xd587[202]][_0xd587[176]]= function(){this[_0xd587[1179]]= this[_0xd587[724]][_0xd587[441]][_0xd587[1179]];this[_0xd587[2961]]= this[_0xd587[2962]](this[_0xd587[724]]);this[_0xd587[1562]]= new mxRectangle(this[_0xd587[2961]][_0xd587[235]],this[_0xd587[2961]][_0xd587[236]],this[_0xd587[2961]][_0xd587[117]],this[_0xd587[2961]][_0xd587[119]]);this[_0xd587[2732]]= this[_0xd587[2963]](this[_0xd587[1562]]);this[_0xd587[2732]][_0xd587[507]]= this[_0xd587[1179]][_0xd587[507]]!= mxConstants[_0xd587[508]]?mxConstants[_0xd587[1523]]:mxConstants[_0xd587[508]];this[_0xd587[2732]][_0xd587[1229]]= !1;this[_0xd587[2732]][_0xd587[176]](this[_0xd587[1179]][_0xd587[249]]()[_0xd587[1524]]());this[_0xd587[1179]][_0xd587[1712]](this[_0xd587[724]][_0xd587[246]])&& (this[_0xd587[2732]][_0xd587[252]][_0xd587[124]][_0xd587[270]]= mxConstants[_0xd587[2832]]);mxEvent[_0xd587[2733]](this[_0xd587[2732]][_0xd587[252]],this[_0xd587[1179]],this[_0xd587[724]]);if(0>= mxGraphHandler[_0xd587[202]][_0xd587[2795]]|| this[_0xd587[1179]][_0xd587[2694]]()< mxGraphHandler[_0xd587[202]][_0xd587[2795]]){var _0x5c29x2=this[_0xd587[1179]][_0xd587[2657]](this[_0xd587[724]][_0xd587[246]]);this[_0xd587[2964]]= [];if(_0x5c29x2|| this[_0xd587[1179]][_0xd587[2628]](this[_0xd587[724]][_0xd587[246]])&& 2<= this[_0xd587[724]][_0xd587[117]]&& 2<= this[_0xd587[724]][_0xd587[119]]){var _0x5c29x3=0;_0x5c29x2&& (this[_0xd587[2957]]|| (this[_0xd587[2964]][_0xd587[207]](this[_0xd587[2735]](_0xd587[936],_0x5c29x3++)),this[_0xd587[2964]][_0xd587[207]](this[_0xd587[2735]](_0xd587[2965],_0x5c29x3++)),this[_0xd587[2964]][_0xd587[207]](this[_0xd587[2735]](_0xd587[2966],_0x5c29x3++)),this[_0xd587[2964]][_0xd587[207]](this[_0xd587[2735]](_0xd587[2967],_0x5c29x3++)),this[_0xd587[2964]][_0xd587[207]](this[_0xd587[2735]](_0xd587[2968],_0x5c29x3++)),this[_0xd587[2964]][_0xd587[207]](this[_0xd587[2735]](_0xd587[2969],_0x5c29x3++)),this[_0xd587[2964]][_0xd587[207]](this[_0xd587[2735]](_0xd587[2970],_0x5c29x3++))),this[_0xd587[2964]][_0xd587[207]](this[_0xd587[2735]](_0xd587[2971],_0x5c29x3++)));_0x5c29x2= this[_0xd587[1179]][_0xd587[251]][_0xd587[1721]](this[_0xd587[724]][_0xd587[246]]);null!= _0x5c29x2&& (!_0x5c29x2[_0xd587[1500]]&& !this[_0xd587[1179]][_0xd587[1730]](this[_0xd587[724]][_0xd587[246]])&& this[_0xd587[1179]][_0xd587[2628]](this[_0xd587[724]][_0xd587[246]]))&& (this[_0xd587[2972]]= this[_0xd587[2735]](mxConstants.CURSOR_LABEL_HANDLE,mxEvent.LABEL_HANDLE,mxConstants.LABEL_HANDLE_SIZE,mxConstants.LABEL_HANDLE_FILLCOLOR),this[_0xd587[2964]][_0xd587[207]](this[_0xd587[2972]]))}else {this[_0xd587[1179]][_0xd587[1712]](this[_0xd587[724]][_0xd587[246]])&& (!this[_0xd587[1179]][_0xd587[2657]](this[_0xd587[724]][_0xd587[246]])&& 2> this[_0xd587[724]][_0xd587[117]]&& 2> this[_0xd587[724]][_0xd587[119]])&& (this[_0xd587[2972]]= this[_0xd587[2735]](mxConstants.CURSOR_MOVABLE_VERTEX,null,null,mxConstants.LABEL_HANDLE_FILLCOLOR),this[_0xd587[2964]][_0xd587[207]](this[_0xd587[2972]]))}};if(this[_0xd587[2809]]&& (0>= mxGraphHandler[_0xd587[202]][_0xd587[2795]]|| this[_0xd587[1179]][_0xd587[2694]]()< mxGraphHandler[_0xd587[202]][_0xd587[2795]])){this[_0xd587[2973]]= this[_0xd587[2735]](_0xd587[356],mxEvent.ROTATION_HANDLE,mxConstants[_0xd587[2974]]+ 3,mxConstants.HANDLE_FILLCOLOR),this[_0xd587[2964]][_0xd587[207]](this[_0xd587[2973]])};this[_0xd587[258]]()};mxVertexHandler[_0xd587[202]][_0xd587[2962]]= function(_0x5c29x2){return new mxRectangle(Math[_0xd587[488]](_0x5c29x2[_0xd587[235]]),Math[_0xd587[488]](_0x5c29x2[_0xd587[236]]),Math[_0xd587[488]](_0x5c29x2[_0xd587[117]]),Math[_0xd587[488]](_0x5c29x2[_0xd587[119]]))};mxVertexHandler[_0xd587[202]][_0xd587[2963]]= function(_0x5c29x2){_0x5c29x2= new mxRectangleShape(_0x5c29x2,null,this[_0xd587[2975]]());_0x5c29x2[_0xd587[1307]]= this[_0xd587[2976]]();_0x5c29x2[_0xd587[1522]]= this[_0xd587[2977]]();return _0x5c29x2};mxVertexHandler[_0xd587[202]][_0xd587[2975]]= function(){return mxConstants[_0xd587[2978]]};mxVertexHandler[_0xd587[202]][_0xd587[2976]]= function(){return mxConstants[_0xd587[2979]]};mxVertexHandler[_0xd587[202]][_0xd587[2977]]= function(){return mxConstants[_0xd587[2980]]};mxVertexHandler[_0xd587[202]][_0xd587[2735]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){_0x5c29x4= _0x5c29x4|| mxConstants[_0xd587[2974]];_0x5c29x4= new mxRectangle(0,0,_0x5c29x4,_0x5c29x4);_0x5c29x5= this[_0xd587[2981]](_0x5c29x4,_0x5c29x3,_0x5c29x5);_0x5c29x5[_0xd587[1567]]()&& null!= this[_0xd587[724]][_0xd587[963]]&& this[_0xd587[724]][_0xd587[963]][_0xd587[252]][_0xd587[265]]== this[_0xd587[1179]][_0xd587[526]]?(_0x5c29x5[_0xd587[1562]][_0xd587[119]]-= 1,_0x5c29x5[_0xd587[1562]][_0xd587[117]]-= 1,_0x5c29x5[_0xd587[507]]= mxConstants[_0xd587[1656]],_0x5c29x5[_0xd587[176]](this[_0xd587[1179]][_0xd587[526]])):(_0x5c29x5[_0xd587[507]]= this[_0xd587[1179]][_0xd587[507]]!= mxConstants[_0xd587[508]]?mxConstants[_0xd587[2334]]:mxConstants[_0xd587[508]],_0x5c29x5[_0xd587[176]](this[_0xd587[1179]][_0xd587[249]]()[_0xd587[1524]]()));mxEvent[_0xd587[2733]](_0x5c29x5[_0xd587[252]],this[_0xd587[1179]],this[_0xd587[724]]);this[_0xd587[1179]][_0xd587[994]]()&& (_0x5c29x5[_0xd587[252]][_0xd587[124]][_0xd587[270]]= _0x5c29x2);this[_0xd587[2982]](_0x5c29x3)|| (_0x5c29x5[_0xd587[252]][_0xd587[124]][_0xd587[187]]= _0xd587[188]);return _0x5c29x5};mxVertexHandler[_0xd587[202]][_0xd587[2982]]= function(_0x5c29x2){return !0};mxVertexHandler[_0xd587[202]][_0xd587[2981]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){return null!= this[_0xd587[2959]]?(_0x5c29x2[_0xd587[117]]= this[_0xd587[2959]][_0xd587[117]],_0x5c29x2[_0xd587[119]]= this[_0xd587[2959]][_0xd587[119]], new mxImageShape(_0x5c29x2,this[_0xd587[2959]][_0xd587[390]])):_0x5c29x3== mxEvent[_0xd587[2983]]? new mxEllipse(_0x5c29x2,_0x5c29x4|| mxConstants[_0xd587[2984]],mxConstants.HANDLE_STROKECOLOR): new mxRectangleShape(_0x5c29x2,_0x5c29x4|| mxConstants[_0xd587[2984]],mxConstants.HANDLE_STROKECOLOR)};mxVertexHandler[_0xd587[202]][_0xd587[2985]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){null!= _0x5c29x2&& (_0x5c29x2[_0xd587[1562]][_0xd587[235]]= Math[_0xd587[488]](_0x5c29x3- _0x5c29x2[_0xd587[1562]][_0xd587[117]]/ 2),_0x5c29x2[_0xd587[1562]][_0xd587[236]]= Math[_0xd587[488]](_0x5c29x4- _0x5c29x2[_0xd587[1562]][_0xd587[119]]/ 2),_0x5c29x2[_0xd587[258]]())};mxVertexHandler[_0xd587[202]][_0xd587[2986]]= function(_0x5c29x2){if(_0x5c29x2[_0xd587[729]](this[_0xd587[2973]])){return mxEvent[_0xd587[2983]]};if(_0x5c29x2[_0xd587[729]](this[_0xd587[2972]])){return mxEvent[_0xd587[2987]]};if(null!= this[_0xd587[2964]]){for(var _0x5c29x3=this[_0xd587[2353]],_0x5c29x3=this[_0xd587[2958]]&& (mxClient[_0xd587[80]]|| 0< _0x5c29x3)? new mxRectangle(_0x5c29x2[_0xd587[734]]()- _0x5c29x3,_0x5c29x2[_0xd587[735]]()- _0x5c29x3,2* _0x5c29x3,2* _0x5c29x3):null,_0x5c29x4=0;_0x5c29x4< this[_0xd587[2964]][_0xd587[67]];_0x5c29x4++){if(_0x5c29x2[_0xd587[729]](this[_0xd587[2964]][_0x5c29x4])|| null!= _0x5c29x3&& mxUtils[_0xd587[1825]](this[_0xd587[2964]][_0x5c29x4][_0xd587[1562]],_0x5c29x3)){return _0x5c29x4}}};return null};mxVertexHandler[_0xd587[202]][_0xd587[787]]= function(_0x5c29x2,_0x5c29x3){if(!_0x5c29x3[_0xd587[721]]()&& this[_0xd587[1179]][_0xd587[994]]()&& !this[_0xd587[1179]][_0xd587[2579]](_0x5c29x3[_0xd587[727]]())&& (0< this[_0xd587[2353]]|| _0x5c29x3[_0xd587[248]]()== this[_0xd587[724]])){var _0x5c29x4=this[_0xd587[2986]](_0x5c29x3);null!= _0x5c29x4&& (this[_0xd587[861]](_0x5c29x3[_0xd587[730]](),_0x5c29x3[_0xd587[732]](),_0x5c29x4),_0x5c29x3[_0xd587[722]]())}};mxVertexHandler[_0xd587[202]][_0xd587[861]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){_0x5c29x2= mxUtils[_0xd587[2196]](this[_0xd587[1179]][_0xd587[526]],_0x5c29x2,_0x5c29x3);this[_0xd587[2739]]= _0x5c29x2[_0xd587[235]];this[_0xd587[2740]]= _0x5c29x2[_0xd587[236]];this[_0xd587[1983]]= _0x5c29x4;this[_0xd587[2732]][_0xd587[252]][_0xd587[124]][_0xd587[495]]= _0x5c29x4== mxEvent[_0xd587[2983]]?_0xd587[497]:_0xd587[130];this[_0xd587[2988]]= this[_0xd587[2963]](this[_0xd587[1562]]);!(mxClient[_0xd587[48]]&& 0!= Number(this[_0xd587[724]][_0xd587[124]][mxConstants[_0xd587[2278]]]|| _0xd587[468]))&& null!= this[_0xd587[724]][_0xd587[963]]&& this[_0xd587[724]][_0xd587[963]][_0xd587[252]][_0xd587[265]]== this[_0xd587[1179]][_0xd587[526]]?(this[_0xd587[2988]][_0xd587[507]]= mxConstants[_0xd587[1656]],this[_0xd587[2988]][_0xd587[176]](this[_0xd587[1179]][_0xd587[526]])):(this[_0xd587[2988]][_0xd587[507]]= this[_0xd587[1179]][_0xd587[507]]!= mxConstants[_0xd587[508]]?mxConstants[_0xd587[1523]]:mxConstants[_0xd587[508]],this[_0xd587[2988]][_0xd587[176]](this[_0xd587[1179]][_0xd587[441]][_0xd587[1524]]()))};mxVertexHandler[_0xd587[202]][_0xd587[788]]= function(_0x5c29x2,_0x5c29x3){if(!_0x5c29x3[_0xd587[721]]()&& null!= this[_0xd587[1983]]){var _0x5c29x4= new mxPoint(_0x5c29x3[_0xd587[734]](),_0x5c29x3[_0xd587[735]]()),_0x5c29x5=this[_0xd587[1179]][_0xd587[1018]](_0x5c29x3[_0xd587[727]]()),_0x5c29x9=this[_0xd587[1179]][_0xd587[249]]()[_0xd587[255]];if(this[_0xd587[1983]]== mxEvent[_0xd587[2987]]){_0x5c29x5&& (_0x5c29x4[_0xd587[235]]= this[_0xd587[1179]][_0xd587[1021]](_0x5c29x4[_0xd587[235]]/ _0x5c29x9)* _0x5c29x9,_0x5c29x4[_0xd587[236]]= this[_0xd587[1179]][_0xd587[1021]](_0x5c29x4[_0xd587[236]]/ _0x5c29x9)* _0x5c29x9),this[_0xd587[2985]](this[_0xd587[2964]][this[_0xd587[2964]][_0xd587[67]]- 1],_0x5c29x4[_0xd587[235]],_0x5c29x4[_0xd587[236]])}else {if(this[_0xd587[1983]]== mxEvent[_0xd587[2983]]){var _0x5c29xa=this[_0xd587[724]][_0xd587[235]]+ this[_0xd587[724]][_0xd587[117]]/ 2- _0x5c29x4[_0xd587[235]],_0x5c29x12=this[_0xd587[724]][_0xd587[236]]+ this[_0xd587[724]][_0xd587[119]]/ 2- _0x5c29x4[_0xd587[236]];this[_0xd587[2989]]= 0!= _0x5c29xa?180* Math[_0xd587[2990]](_0x5c29x12/ _0x5c29xa)/ Math[_0xd587[424]]+ 90:0> _0x5c29x12?180:0;0< _0x5c29xa&& (this[_0xd587[2989]]-= 180);this[_0xd587[2960]]&& (_0x5c29xa= _0x5c29x4[_0xd587[235]]- this[_0xd587[724]][_0xd587[241]](),_0x5c29x12= _0x5c29x4[_0xd587[236]]- this[_0xd587[724]][_0xd587[242]](),_0x5c29xa= Math[_0xd587[425]](Math[_0xd587[428]](_0x5c29xa* _0x5c29xa+ _0x5c29x12* _0x5c29x12)- this[_0xd587[724]][_0xd587[119]]/ 2- 20),_0x5c29xa= Math[_0xd587[160]](1,5* Math[_0xd587[243]](3,Math[_0xd587[160]](0,Math[_0xd587[488]](80/ Math[_0xd587[425]](_0x5c29xa))))),this[_0xd587[2989]]= Math[_0xd587[488]](this[_0xd587[2989]]/ _0x5c29xa)* _0x5c29xa);this[_0xd587[2732]][_0xd587[603]]= this[_0xd587[2989]];this[_0xd587[2732]][_0xd587[258]]()}else {var _0x5c29x13=mxUtils[_0xd587[431]](this[_0xd587[724]][_0xd587[124]][mxConstants[_0xd587[2278]]]|| _0xd587[468]),_0x5c29x14=Math[_0xd587[426]](-_0x5c29x13),_0x5c29x15=Math[_0xd587[427]](-_0x5c29x13),_0x5c29x16= new mxPoint(this[_0xd587[724]][_0xd587[241]](),this[_0xd587[724]][_0xd587[242]]()),_0x5c29xa=_0x5c29x4[_0xd587[235]]- this[_0xd587[2739]],_0x5c29x12=_0x5c29x4[_0xd587[236]]- this[_0xd587[2740]],_0x5c29x4=this[_0xd587[1179]][_0xd587[441]][_0xd587[513]],_0x5c29x17=_0x5c29x15* _0x5c29xa+ _0x5c29x14* _0x5c29x12,_0x5c29xa=_0x5c29x14* _0x5c29xa- _0x5c29x15* _0x5c29x12;this[_0xd587[1562]]= this[_0xd587[2991]](this[_0xd587[2961]],_0x5c29xa,_0x5c29x17,this[_0xd587[1983]],_0x5c29x5,_0x5c29x9,_0x5c29x4);_0x5c29x14= Math[_0xd587[426]](_0x5c29x13);_0x5c29x15= Math[_0xd587[427]](_0x5c29x13);_0x5c29x12= new mxPoint(this[_0xd587[1562]][_0xd587[241]](),this[_0xd587[1562]][_0xd587[242]]());_0x5c29xa= _0x5c29x12[_0xd587[235]]- _0x5c29x16[_0xd587[235]];_0x5c29x12= _0x5c29x12[_0xd587[236]]- _0x5c29x16[_0xd587[236]];_0x5c29x16= _0x5c29x15* _0x5c29xa+ _0x5c29x14* _0x5c29x12- _0x5c29x12;this[_0xd587[1562]][_0xd587[235]]+= _0x5c29x14* _0x5c29xa- _0x5c29x15* _0x5c29x12- _0x5c29xa;this[_0xd587[1562]][_0xd587[236]]+= _0x5c29x16;this[_0xd587[2932]]()}};_0x5c29x3[_0xd587[722]]()}else {null!= this[_0xd587[2986]](_0x5c29x3)&& _0x5c29x3[_0xd587[722]](!1)}};mxVertexHandler[_0xd587[202]][_0xd587[789]]= function(_0x5c29x2,_0x5c29x3){if(!_0x5c29x3[_0xd587[721]]()&& null!= this[_0xd587[1983]]&& null!= this[_0xd587[724]]){var _0x5c29x4= new mxPoint(_0x5c29x3[_0xd587[734]](),_0x5c29x3[_0xd587[735]]());this[_0xd587[1179]][_0xd587[502]]()[_0xd587[473]]();try{if(this[_0xd587[1983]]== mxEvent[_0xd587[2983]]){null!= this[_0xd587[2989]]&& this[_0xd587[2992]](this[_0xd587[724]][_0xd587[246]],this[_0xd587[2989]]- (this[_0xd587[724]][_0xd587[124]][mxConstants[_0xd587[2278]]]|| 0))}else {var _0x5c29x5=this[_0xd587[1179]][_0xd587[1018]](_0x5c29x3[_0xd587[727]]()),_0x5c29x9=mxUtils[_0xd587[431]](this[_0xd587[724]][_0xd587[124]][mxConstants[_0xd587[2278]]]|| _0xd587[468]),_0x5c29xa=Math[_0xd587[426]](-_0x5c29x9),_0x5c29x12=Math[_0xd587[427]](-_0x5c29x9),_0x5c29x13=_0x5c29x4[_0xd587[235]]- this[_0xd587[2739]],_0x5c29x14=_0x5c29x4[_0xd587[236]]- this[_0xd587[2740]],_0x5c29x4=_0x5c29x12* _0x5c29x13+ _0x5c29xa* _0x5c29x14,_0x5c29x13=_0x5c29xa* _0x5c29x13- _0x5c29x12* _0x5c29x14,_0x5c29x14=_0x5c29x4,_0x5c29x15=this[_0xd587[1179]][_0xd587[441]][_0xd587[255]];this[_0xd587[2526]](this[_0xd587[724]][_0xd587[246]],_0x5c29x13/ _0x5c29x15,_0x5c29x14/ _0x5c29x15,this[_0xd587[1983]],_0x5c29x5)}}finally{this[_0xd587[1179]][_0xd587[502]]()[_0xd587[476]]()};this[_0xd587[862]]();_0x5c29x3[_0xd587[722]]()}};mxVertexHandler[_0xd587[202]][_0xd587[2992]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=this[_0xd587[1179]][_0xd587[502]]();if(_0x5c29x4[_0xd587[1193]](_0x5c29x2)){var _0x5c29x5=_0x5c29x2== this[_0xd587[724]]?this[_0xd587[724]]:this[_0xd587[1179]][_0xd587[441]][_0xd587[248]](_0x5c29x2);null!= _0x5c29x5&& this[_0xd587[1179]][_0xd587[1717]](mxConstants.STYLE_ROTATION,(_0x5c29x5[_0xd587[124]][mxConstants[_0xd587[2278]]]|| 0)+ _0x5c29x3,[_0x5c29x2]);if(this[_0xd587[724]][_0xd587[246]]!= _0x5c29x2&& (_0x5c29x5= this[_0xd587[1179]][_0xd587[1198]](_0x5c29x2),null!= _0x5c29x5&& !_0x5c29x5[_0xd587[1500]])){if(0!= _0x5c29x3){var _0x5c29x9=this[_0xd587[1179]][_0xd587[502]]()[_0xd587[1197]](_0x5c29x2),_0x5c29xa=this[_0xd587[1179]][_0xd587[1198]](_0x5c29x9);if(!_0x5c29x5[_0xd587[1500]]&& null!= _0x5c29xa){var _0x5c29x12=mxUtils[_0xd587[431]](_0x5c29x3),_0x5c29x9=Math[_0xd587[426]](_0x5c29x12),_0x5c29x12=Math[_0xd587[427]](_0x5c29x12),_0x5c29x13= new mxPoint(_0x5c29x5[_0xd587[241]](),_0x5c29x5[_0xd587[242]]()),_0x5c29xa= new mxPoint(_0x5c29xa[_0xd587[117]]/ 2,_0x5c29xa[_0xd587[119]]/ 2),_0x5c29x9=mxUtils[_0xd587[432]](_0x5c29x13,_0x5c29x9,_0x5c29x12,_0x5c29xa),_0x5c29x5=_0x5c29x5[_0xd587[238]]();_0x5c29x5[_0xd587[235]]= _0x5c29x9[_0xd587[235]]- _0x5c29x5[_0xd587[117]]/ 2;_0x5c29x5[_0xd587[236]]= _0x5c29x9[_0xd587[236]]- _0x5c29x5[_0xd587[119]]/ 2;_0x5c29x4[_0xd587[1724]](_0x5c29x2,_0x5c29x5)}}else {_0x5c29x5= _0x5c29x5[_0xd587[238]](),_0x5c29x5[_0xd587[235]]+= dx,_0x5c29x5[_0xd587[236]]+= dy,_0x5c29x4[_0xd587[1724]](_0x5c29x2,_0x5c29x5)}};_0x5c29x5= _0x5c29x4[_0xd587[262]](_0x5c29x2);for(_0x5c29x9= 0;_0x5c29x9< _0x5c29x5;_0x5c29x9++){this[_0xd587[2992]](_0x5c29x4[_0xd587[263]](_0x5c29x2,_0x5c29x9),_0x5c29x3)}}};mxVertexHandler[_0xd587[202]][_0xd587[862]]= function(){this[_0xd587[1983]]= this[_0xd587[2989]]= null;null!= this[_0xd587[2988]]&& (this[_0xd587[2988]][_0xd587[515]](),this[_0xd587[2988]]= null);null!= this[_0xd587[2732]]&& (this[_0xd587[2732]][_0xd587[252]][_0xd587[124]][_0xd587[495]]= _0xd587[497],this[_0xd587[2961]]= this[_0xd587[2962]](this[_0xd587[724]]),this[_0xd587[1562]]= new mxRectangle(this[_0xd587[2961]][_0xd587[235]],this[_0xd587[2961]][_0xd587[236]],this[_0xd587[2961]][_0xd587[117]],this[_0xd587[2961]][_0xd587[119]]),this[_0xd587[2932]]())};mxVertexHandler[_0xd587[202]][_0xd587[2526]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){var _0x5c29xa=this[_0xd587[1179]][_0xd587[251]][_0xd587[1721]](_0x5c29x2);if(null!= _0x5c29xa){if(_0x5c29x5== mxEvent[_0xd587[2987]]){_0x5c29x5= this[_0xd587[1179]][_0xd587[441]][_0xd587[255]],_0x5c29x3= (this[_0xd587[2972]][_0xd587[1562]][_0xd587[241]]()- this[_0xd587[2739]])/ _0x5c29x5,_0x5c29x4= (this[_0xd587[2972]][_0xd587[1562]][_0xd587[242]]()- this[_0xd587[2740]])/ _0x5c29x5,_0x5c29xa= _0x5c29xa[_0xd587[238]](),null== _0x5c29xa[_0xd587[1368]]?_0x5c29xa[_0xd587[1368]]= new mxPoint(_0x5c29x3,_0x5c29x4):(_0x5c29xa[_0xd587[1368]][_0xd587[235]]+= _0x5c29x3,_0x5c29xa[_0xd587[1368]][_0xd587[236]]+= _0x5c29x4),this[_0xd587[1179]][_0xd587[251]][_0xd587[1724]](_0x5c29x2,_0x5c29xa)}else {_0x5c29x5= this[_0xd587[2991]](_0x5c29xa,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,1, new mxPoint(0,0));var _0x5c29x12=mxUtils[_0xd587[431]](this[_0xd587[724]][_0xd587[124]][mxConstants[_0xd587[2278]]]|| _0xd587[468]);if(0!= _0x5c29x12){_0x5c29x3= _0x5c29x5[_0xd587[241]]()- _0x5c29xa[_0xd587[241]]();_0x5c29x4= _0x5c29x5[_0xd587[242]]()- _0x5c29xa[_0xd587[242]]();_0x5c29x9= Math[_0xd587[426]](_0x5c29x12);var _0x5c29x13=Math[_0xd587[427]](_0x5c29x12),_0x5c29x12=_0x5c29x9* _0x5c29x3- _0x5c29x13* _0x5c29x4- _0x5c29x3;_0x5c29x3= _0x5c29x13* _0x5c29x3+ _0x5c29x9* _0x5c29x4- _0x5c29x4;_0x5c29x4= _0x5c29x5[_0xd587[235]]- _0x5c29xa[_0xd587[235]];var _0x5c29x14=_0x5c29x5[_0xd587[236]]- _0x5c29xa[_0xd587[236]],_0x5c29x15=_0x5c29x9* _0x5c29x4- _0x5c29x13* _0x5c29x14;_0x5c29x9= _0x5c29x13* _0x5c29x4+ _0x5c29x9* _0x5c29x14;_0x5c29x5[_0xd587[235]]+= _0x5c29x12;_0x5c29x5[_0xd587[236]]+= _0x5c29x3;if(!this[_0xd587[1179]][_0xd587[1742]](_0x5c29x2)&& (0!= _0x5c29x12|| 0!= _0x5c29x3)){_0x5c29x4= _0x5c29xa[_0xd587[235]]- _0x5c29x5[_0xd587[235]]+ _0x5c29x15,_0x5c29x14= _0x5c29xa[_0xd587[236]]- _0x5c29x5[_0xd587[236]]+ _0x5c29x9,this[_0xd587[2993]](_0x5c29x2,_0x5c29x4,_0x5c29x14)}};this[_0xd587[1179]][_0xd587[2526]](_0x5c29x2,_0x5c29x5)}}};mxVertexHandler[_0xd587[202]][_0xd587[2993]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){for(var _0x5c29x5=this[_0xd587[1179]][_0xd587[502]](),_0x5c29x9=_0x5c29x5[_0xd587[262]](_0x5c29x2),_0x5c29xa=0;_0x5c29xa< _0x5c29x9;_0x5c29xa++){var _0x5c29x12=_0x5c29x5[_0xd587[263]](_0x5c29x2,_0x5c29xa);if(_0x5c29x5[_0xd587[1193]](_0x5c29x12)){var _0x5c29x13=this[_0xd587[1179]][_0xd587[1198]](_0x5c29x12);null!= _0x5c29x13&& !_0x5c29x13[_0xd587[1500]]&& (_0x5c29x13= _0x5c29x13[_0xd587[238]](),_0x5c29x13[_0xd587[235]]+= _0x5c29x3,_0x5c29x13[_0xd587[236]]+= _0x5c29x4,_0x5c29x5[_0xd587[1724]](_0x5c29x12,_0x5c29x13))}}};mxVertexHandler[_0xd587[202]][_0xd587[2991]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa,_0x5c29x12){if(this[_0xd587[2957]]){_0x5c29x12= _0x5c29x2[_0xd587[235]]+ _0x5c29x2[_0xd587[117]]+ _0x5c29x3;var _0x5c29x13=_0x5c29x2[_0xd587[236]]+ _0x5c29x2[_0xd587[119]]+ _0x5c29x4;_0x5c29x9&& (_0x5c29x12= this[_0xd587[1179]][_0xd587[1021]](_0x5c29x12/ _0x5c29xa)* _0x5c29xa,_0x5c29x13= this[_0xd587[1179]][_0xd587[1021]](_0x5c29x13/ _0x5c29xa)* _0x5c29xa);_0x5c29xa= new mxRectangle(_0x5c29x2[_0xd587[235]],_0x5c29x2[_0xd587[236]],0,0);_0x5c29xa[_0xd587[99]]( new mxRectangle(_0x5c29x12,_0x5c29x13,0,0));return _0x5c29xa};var _0x5c29x13=_0x5c29x2[_0xd587[235]]- _0x5c29x12[_0xd587[235]]* _0x5c29xa,_0x5c29x14=_0x5c29x13+ _0x5c29x2[_0xd587[117]],_0x5c29x15=_0x5c29x2[_0xd587[236]]- _0x5c29x12[_0xd587[236]]* _0x5c29xa;_0x5c29x2= _0x5c29x15+ _0x5c29x2[_0xd587[119]];4< _0x5c29x5?(_0x5c29x2+= _0x5c29x4,_0x5c29x9&& (_0x5c29x2= this[_0xd587[1179]][_0xd587[1021]](_0x5c29x2/ _0x5c29xa)* _0x5c29xa)):3> _0x5c29x5&& (_0x5c29x15+= _0x5c29x4,_0x5c29x9&& (_0x5c29x15= this[_0xd587[1179]][_0xd587[1021]](_0x5c29x15/ _0x5c29xa)* _0x5c29xa));if(0== _0x5c29x5|| 3== _0x5c29x5|| 5== _0x5c29x5){_0x5c29x13+= _0x5c29x3,_0x5c29x9&& (_0x5c29x13= this[_0xd587[1179]][_0xd587[1021]](_0x5c29x13/ _0x5c29xa)* _0x5c29xa)}else {if(2== _0x5c29x5|| 4== _0x5c29x5|| 7== _0x5c29x5){_0x5c29x14+= _0x5c29x3,_0x5c29x9&& (_0x5c29x14= this[_0xd587[1179]][_0xd587[1021]](_0x5c29x14/ _0x5c29xa)* _0x5c29xa)}};_0x5c29x9= _0x5c29x14- _0x5c29x13;_0x5c29x2-= _0x5c29x15;0> _0x5c29x9&& (_0x5c29x13+= _0x5c29x9,_0x5c29x9= Math[_0xd587[425]](_0x5c29x9));0> _0x5c29x2&& (_0x5c29x15+= _0x5c29x2,_0x5c29x2= Math[_0xd587[425]](_0x5c29x2));return new mxRectangle(_0x5c29x13+ _0x5c29x12[_0xd587[235]]* _0x5c29xa,_0x5c29x15+ _0x5c29x12[_0xd587[236]]* _0x5c29xa,_0x5c29x9,_0x5c29x2)};mxVertexHandler[_0xd587[202]][_0xd587[258]]= function(){this[_0xd587[2961]]= this[_0xd587[2962]](this[_0xd587[724]]);this[_0xd587[1562]]= new mxRectangle(this[_0xd587[724]][_0xd587[235]],this[_0xd587[724]][_0xd587[236]],this[_0xd587[724]][_0xd587[117]],this[_0xd587[724]][_0xd587[119]]);var _0x5c29x2=this[_0xd587[724]];if(null!= this[_0xd587[2964]]){var _0x5c29x3=_0x5c29x2[_0xd587[235]]+ _0x5c29x2[_0xd587[117]],_0x5c29x4=_0x5c29x2[_0xd587[236]]+ _0x5c29x2[_0xd587[119]];if(this[_0xd587[2957]]){this[_0xd587[2985]](this[_0xd587[2964]][0],_0x5c29x3,_0x5c29x4)}else {var _0x5c29x5=_0x5c29x2[_0xd587[235]]+ _0x5c29x2[_0xd587[117]]/ 2,_0x5c29x9=_0x5c29x2[_0xd587[236]]+ _0x5c29x2[_0xd587[119]]/ 2;if(1< this[_0xd587[2964]][_0xd587[67]]){var _0x5c29xa=mxUtils[_0xd587[431]](_0x5c29x2[_0xd587[124]][mxConstants[_0xd587[2278]]]|| _0xd587[468]),_0x5c29x12=Math[_0xd587[426]](_0x5c29xa),_0x5c29xa=Math[_0xd587[427]](_0x5c29xa),_0x5c29x13= new mxPoint(_0x5c29x2[_0xd587[241]](),_0x5c29x2[_0xd587[242]]()),_0x5c29x14=mxUtils[_0xd587[432]]( new mxPoint(_0x5c29x2[_0xd587[235]],_0x5c29x2[_0xd587[236]]),_0x5c29x12,_0x5c29xa,_0x5c29x13);this[_0xd587[2985]](this[_0xd587[2964]][0],_0x5c29x14[_0xd587[235]],_0x5c29x14[_0xd587[236]]);_0x5c29x14[_0xd587[235]]= _0x5c29x5;_0x5c29x14[_0xd587[236]]= _0x5c29x2[_0xd587[236]];_0x5c29x14= mxUtils[_0xd587[432]](_0x5c29x14,_0x5c29x12,_0x5c29xa,_0x5c29x13);this[_0xd587[2985]](this[_0xd587[2964]][1],_0x5c29x14[_0xd587[235]],_0x5c29x14[_0xd587[236]]);_0x5c29x14[_0xd587[235]]= _0x5c29x3;_0x5c29x14[_0xd587[236]]= _0x5c29x2[_0xd587[236]];_0x5c29x14= mxUtils[_0xd587[432]](_0x5c29x14,_0x5c29x12,_0x5c29xa,_0x5c29x13);this[_0xd587[2985]](this[_0xd587[2964]][2],_0x5c29x14[_0xd587[235]],_0x5c29x14[_0xd587[236]]);_0x5c29x14[_0xd587[235]]= _0x5c29x2[_0xd587[235]];_0x5c29x14[_0xd587[236]]= _0x5c29x9;_0x5c29x14= mxUtils[_0xd587[432]](_0x5c29x14,_0x5c29x12,_0x5c29xa,_0x5c29x13);this[_0xd587[2985]](this[_0xd587[2964]][3],_0x5c29x14[_0xd587[235]],_0x5c29x14[_0xd587[236]]);_0x5c29x14[_0xd587[235]]= _0x5c29x3;_0x5c29x14[_0xd587[236]]= _0x5c29x9;_0x5c29x14= mxUtils[_0xd587[432]](_0x5c29x14,_0x5c29x12,_0x5c29xa,_0x5c29x13);this[_0xd587[2985]](this[_0xd587[2964]][4],_0x5c29x14[_0xd587[235]],_0x5c29x14[_0xd587[236]]);_0x5c29x14[_0xd587[235]]= _0x5c29x2[_0xd587[235]];_0x5c29x14[_0xd587[236]]= _0x5c29x4;_0x5c29x14= mxUtils[_0xd587[432]](_0x5c29x14,_0x5c29x12,_0x5c29xa,_0x5c29x13);this[_0xd587[2985]](this[_0xd587[2964]][5],_0x5c29x14[_0xd587[235]],_0x5c29x14[_0xd587[236]]);_0x5c29x14[_0xd587[235]]= _0x5c29x5;_0x5c29x14[_0xd587[236]]= _0x5c29x4;_0x5c29x14= mxUtils[_0xd587[432]](_0x5c29x14,_0x5c29x12,_0x5c29xa,_0x5c29x13);this[_0xd587[2985]](this[_0xd587[2964]][6],_0x5c29x14[_0xd587[235]],_0x5c29x14[_0xd587[236]]);_0x5c29x14[_0xd587[235]]= _0x5c29x3;_0x5c29x14[_0xd587[236]]= _0x5c29x4;_0x5c29x14= mxUtils[_0xd587[432]](_0x5c29x14,_0x5c29x12,_0x5c29xa,_0x5c29x13);this[_0xd587[2985]](this[_0xd587[2964]][7],_0x5c29x14[_0xd587[235]],_0x5c29x14[_0xd587[236]]);this[_0xd587[2985]](this[_0xd587[2964]][8],_0x5c29x5+ _0x5c29x2[_0xd587[2079]][_0xd587[235]],_0x5c29x9+ _0x5c29x2[_0xd587[2079]][_0xd587[236]])}else {2<= this[_0xd587[724]][_0xd587[117]]&& 2<= this[_0xd587[724]][_0xd587[119]]?this[_0xd587[2985]](this[_0xd587[2964]][0],_0x5c29x5+ _0x5c29x2[_0xd587[2079]][_0xd587[235]],_0x5c29x9+ _0x5c29x2[_0xd587[2079]][_0xd587[236]]):this[_0xd587[2985]](this[_0xd587[2964]][0],_0x5c29x2[_0xd587[235]],_0x5c29x2[_0xd587[236]])}}};null!= this[_0xd587[2973]]&& (_0x5c29xa= mxUtils[_0xd587[431]](this[_0xd587[724]][_0xd587[124]][mxConstants[_0xd587[2278]]]|| _0xd587[468]),_0x5c29x12= Math[_0xd587[426]](_0x5c29xa),_0x5c29xa= Math[_0xd587[427]](_0x5c29xa),_0x5c29x13= new mxPoint(this[_0xd587[724]][_0xd587[241]](),this[_0xd587[724]][_0xd587[242]]()),_0x5c29x14= mxUtils[_0xd587[432]]( new mxPoint(_0x5c29x2[_0xd587[235]]+ _0x5c29x2[_0xd587[117]]/ 2,_0x5c29x2[_0xd587[236]]- 16),_0x5c29x12,_0x5c29xa,_0x5c29x13),this[_0xd587[2985]](this[_0xd587[2973]],_0x5c29x14[_0xd587[235]],_0x5c29x14[_0xd587[236]]));this[_0xd587[2732]][_0xd587[603]]= Number(this[_0xd587[724]][_0xd587[124]][mxConstants[_0xd587[2278]]]|| _0xd587[468]);this[_0xd587[2932]]()};mxVertexHandler[_0xd587[202]][_0xd587[2932]]= function(){null!= this[_0xd587[2988]]&& (this[_0xd587[2988]][_0xd587[1562]]= this[_0xd587[1562]],this[_0xd587[2988]][_0xd587[252]][_0xd587[265]]== this[_0xd587[1179]][_0xd587[526]]&& (this[_0xd587[2988]][_0xd587[1562]][_0xd587[117]]= Math[_0xd587[160]](0,this[_0xd587[2988]][_0xd587[1562]][_0xd587[117]]- 1),this[_0xd587[2988]][_0xd587[1562]][_0xd587[119]]= Math[_0xd587[160]](0,this[_0xd587[2988]][_0xd587[1562]][_0xd587[119]]- 1)),this[_0xd587[2988]][_0xd587[603]]= Number(this[_0xd587[724]][_0xd587[124]][mxConstants[_0xd587[2278]]]|| _0xd587[468]),this[_0xd587[2988]][_0xd587[258]]());this[_0xd587[2732]][_0xd587[1562]]= this[_0xd587[1562]];this[_0xd587[2732]][_0xd587[258]]()};mxVertexHandler[_0xd587[202]][_0xd587[515]]= function(){null!= this[_0xd587[2988]]&& (this[_0xd587[2988]][_0xd587[515]](),this[_0xd587[2988]]= null);this[_0xd587[2732]][_0xd587[515]]();this[_0xd587[2972]]= this[_0xd587[2732]]= null;if(null!= this[_0xd587[2964]]){for(var _0x5c29x2=0;_0x5c29x2< this[_0xd587[2964]][_0xd587[67]];_0x5c29x2++){this[_0xd587[2964]][_0x5c29x2][_0xd587[515]](),this[_0xd587[2964]][_0x5c29x2]= null}}};function mxEdgeHandler(_0x5c29x2){null!= _0x5c29x2&& (this[_0xd587[724]]= _0x5c29x2,this[_0xd587[176]]())}mxEdgeHandler[_0xd587[202]][_0xd587[1179]]= null;mxEdgeHandler[_0xd587[202]][_0xd587[724]]= null;mxEdgeHandler[_0xd587[202]][_0xd587[2885]]= null;mxEdgeHandler[_0xd587[202]][_0xd587[2886]]= null;mxEdgeHandler[_0xd587[202]][_0xd587[267]]= null;mxEdgeHandler[_0xd587[202]][_0xd587[253]]= null;mxEdgeHandler[_0xd587[202]][_0xd587[2994]]= null;mxEdgeHandler[_0xd587[202]][_0xd587[2972]]= null;mxEdgeHandler[_0xd587[202]][_0xd587[2797]]= !0;mxEdgeHandler[_0xd587[202]][_0xd587[2771]]= !1;mxEdgeHandler[_0xd587[202]][_0xd587[2995]]= !1;mxEdgeHandler[_0xd587[202]][_0xd587[574]]= !1;mxEdgeHandler[_0xd587[202]][_0xd587[2958]]= !0;mxEdgeHandler[_0xd587[202]][_0xd587[2996]]= !1;mxEdgeHandler[_0xd587[202]][_0xd587[2959]]= null;mxEdgeHandler[_0xd587[202]][_0xd587[2353]]= 0;mxEdgeHandler[_0xd587[202]][_0xd587[176]]= function(){this[_0xd587[1179]]= this[_0xd587[724]][_0xd587[441]][_0xd587[1179]];this[_0xd587[2885]]= this[_0xd587[1689]]();this[_0xd587[2886]]= new mxConstraintHandler(this[_0xd587[1179]]);this[_0xd587[1525]]= [];this[_0xd587[2997]]= this[_0xd587[2998]](this[_0xd587[724]]);this[_0xd587[253]]= this[_0xd587[2963]](this[_0xd587[2997]]);this[_0xd587[253]][_0xd587[507]]= this[_0xd587[1179]][_0xd587[507]]!= mxConstants[_0xd587[508]]?mxConstants[_0xd587[2334]]:mxConstants[_0xd587[508]];this[_0xd587[253]][_0xd587[176]](this[_0xd587[1179]][_0xd587[249]]()[_0xd587[1524]]());this[_0xd587[253]][_0xd587[1564]]= 0;this[_0xd587[253]][_0xd587[252]][_0xd587[124]][_0xd587[270]]= mxConstants[_0xd587[2831]];mxEvent[_0xd587[169]](this[_0xd587[253]][_0xd587[252]],_0xd587[760],mxUtils[_0xd587[885]](this,function(_0x5c29x2){this[_0xd587[1179]][_0xd587[761]](_0x5c29x2,this[_0xd587[724]][_0xd587[246]])}));mxEvent[_0xd587[759]](this[_0xd587[253]][_0xd587[252]],mxUtils[_0xd587[885]](this,function(_0x5c29x2){this[_0xd587[2771]]&& this[_0xd587[2999]](_0x5c29x2)?this[_0xd587[3000]](this[_0xd587[724]],_0x5c29x2):this[_0xd587[1179]][_0xd587[758]](mxEvent.MOUSE_DOWN, new mxMouseEvent(_0x5c29x2,this[_0xd587[724]]))}),mxUtils[_0xd587[885]](this,function(_0x5c29x2){var _0x5c29x4=this[_0xd587[724]][_0xd587[246]];if(null!= this[_0xd587[1983]]){var _0x5c29x5=mxUtils[_0xd587[2196]](this[_0xd587[1179]][_0xd587[526]],mxEvent[_0xd587[731]](_0x5c29x2),mxEvent[_0xd587[733]](_0x5c29x2)),_0x5c29x4=this[_0xd587[1179]][_0xd587[999]](_0x5c29x5[_0xd587[235]],_0x5c29x5[_0xd587[236]]);this[_0xd587[1179]][_0xd587[1730]](_0x5c29x4)&& this[_0xd587[1179]][_0xd587[2688]](_0x5c29x4,_0x5c29x5[_0xd587[235]],_0x5c29x5[_0xd587[236]])&& (_0x5c29x4= null)};this[_0xd587[1179]][_0xd587[758]](mxEvent.MOUSE_MOVE, new mxMouseEvent(_0x5c29x2,this[_0xd587[1179]][_0xd587[249]]()[_0xd587[248]](_0x5c29x4)))}),mxUtils[_0xd587[885]](this,function(_0x5c29x2){this[_0xd587[1179]][_0xd587[758]](mxEvent.MOUSE_UP, new mxMouseEvent(_0x5c29x2,this[_0xd587[724]]))}));this[_0xd587[574]]= null!= this[_0xd587[724]][_0xd587[963]]&& this[_0xd587[724]][_0xd587[963]][_0xd587[252]][_0xd587[265]]== this[_0xd587[1179]][_0xd587[526]];if(!this[_0xd587[574]]){var _0x5c29x2=this[_0xd587[724]][_0xd587[2089]](!0);null!= _0x5c29x2&& (this[_0xd587[574]]= null!= _0x5c29x2[_0xd587[963]]&& _0x5c29x2[_0xd587[963]][_0xd587[252]][_0xd587[265]]== this[_0xd587[1179]][_0xd587[526]]);this[_0xd587[574]]|| (_0x5c29x2= this[_0xd587[724]][_0xd587[2089]](!1),null!= _0x5c29x2&& (this[_0xd587[574]]= null!= _0x5c29x2[_0xd587[963]]&& _0x5c29x2[_0xd587[963]][_0xd587[252]][_0xd587[265]]== this[_0xd587[1179]][_0xd587[526]]))};if(this[_0xd587[1179]][_0xd587[2694]]()< mxGraphHandler[_0xd587[202]][_0xd587[2795]]|| 0>= mxGraphHandler[_0xd587[202]][_0xd587[2795]]){this[_0xd587[2994]]= this[_0xd587[3001]]()};this[_0xd587[685]]= new mxPoint(this[_0xd587[724]][_0xd587[2079]][_0xd587[235]],this[_0xd587[724]][_0xd587[2079]][_0xd587[236]]);this[_0xd587[2972]]= new mxRectangleShape( new mxRectangle,mxConstants.LABEL_HANDLE_FILLCOLOR,mxConstants.HANDLE_STROKECOLOR);this[_0xd587[2972]][_0xd587[1229]]= !1;this[_0xd587[3002]](this[_0xd587[2972]]);this[_0xd587[2972]][_0xd587[252]][_0xd587[124]][_0xd587[270]]= mxConstants[_0xd587[3003]];mxEvent[_0xd587[2733]](this[_0xd587[2972]][_0xd587[252]],this[_0xd587[1179]],this[_0xd587[724]]);this[_0xd587[258]]()};mxEdgeHandler[_0xd587[202]][_0xd587[2999]]= function(_0x5c29x2){return mxEvent[_0xd587[774]](_0x5c29x2)};mxEdgeHandler[_0xd587[202]][_0xd587[3004]]= function(_0x5c29x2){return mxEvent[_0xd587[774]](_0x5c29x2)};mxEdgeHandler[_0xd587[202]][_0xd587[2998]]= function(_0x5c29x2){return _0x5c29x2[_0xd587[439]]};mxEdgeHandler[_0xd587[202]][_0xd587[2963]]= function(_0x5c29x2){_0x5c29x2= new mxPolyline(_0x5c29x2,this[_0xd587[2975]]());_0x5c29x2[_0xd587[1307]]= this[_0xd587[2976]]();_0x5c29x2[_0xd587[1522]]= this[_0xd587[2977]]();return _0x5c29x2};mxEdgeHandler[_0xd587[202]][_0xd587[2975]]= function(){return mxConstants[_0xd587[3005]]};mxEdgeHandler[_0xd587[202]][_0xd587[2976]]= function(){return mxConstants[_0xd587[3006]]};mxEdgeHandler[_0xd587[202]][_0xd587[2977]]= function(){return mxConstants[_0xd587[3007]]};mxEdgeHandler[_0xd587[202]][_0xd587[2907]]= function(_0x5c29x2){return !0};mxEdgeHandler[_0xd587[202]][_0xd587[1689]]= function(){var _0x5c29x2= new mxCellMarker(this[_0xd587[1179]]),_0x5c29x3=this;_0x5c29x2[_0xd587[736]]= function(_0x5c29x2){var _0x5c29x5=mxCellMarker[_0xd587[202]][_0xd587[736]][_0xd587[183]](this,arguments);if(!_0x5c29x3[_0xd587[2907]](_0x5c29x5)){return null};var _0x5c29x9=_0x5c29x3[_0xd587[1179]][_0xd587[502]]();if(_0x5c29x5== _0x5c29x3[_0xd587[724]][_0xd587[246]]|| null!= _0x5c29x5&& !_0x5c29x3[_0xd587[1179]][_0xd587[2405]]&& _0x5c29x9[_0xd587[250]](_0x5c29x5)){_0x5c29x5= null};return _0x5c29x5};_0x5c29x2[_0xd587[2872]]= function(_0x5c29x2){var _0x5c29x5=_0x5c29x3[_0xd587[1179]][_0xd587[502]](),_0x5c29x5=_0x5c29x3[_0xd587[1179]][_0xd587[441]][_0xd587[2292]](_0x5c29x2,_0x5c29x3[_0xd587[1179]][_0xd587[441]][_0xd587[248]](_0x5c29x5[_0xd587[1709]](_0x5c29x3[_0xd587[724]][_0xd587[246]],!_0x5c29x3[_0xd587[729]])),!_0x5c29x3[_0xd587[729]]),_0x5c29x5=null!= _0x5c29x5?_0x5c29x5[_0xd587[246]]:null;_0x5c29x3[_0xd587[267]]= _0x5c29x3[_0xd587[2909]](_0x5c29x3[_0xd587[729]]?_0x5c29x2[_0xd587[246]]:_0x5c29x5,_0x5c29x3[_0xd587[729]]?_0x5c29x5:_0x5c29x2[_0xd587[246]]);return null== _0x5c29x3[_0xd587[267]]};return _0x5c29x2};mxEdgeHandler[_0xd587[202]][_0xd587[2909]]= function(_0x5c29x2,_0x5c29x3){return this[_0xd587[1179]][_0xd587[2500]](this[_0xd587[724]][_0xd587[246]],_0x5c29x2,_0x5c29x3)};mxEdgeHandler[_0xd587[202]][_0xd587[3001]]= function(){for(var _0x5c29x2=this[_0xd587[724]][_0xd587[246]],_0x5c29x3=[],_0x5c29x4=0;_0x5c29x4< this[_0xd587[2997]][_0xd587[67]];_0x5c29x4++){if(this[_0xd587[3008]](_0x5c29x4)){var _0x5c29x5=_0x5c29x4== this[_0xd587[2997]][_0xd587[67]]- 1;if((_0x5c29x5= 0== _0x5c29x4|| _0x5c29x5)|| this[_0xd587[1179]][_0xd587[2662]](_0x5c29x2)){var _0x5c29x9=this[_0xd587[3009]](_0x5c29x4);this[_0xd587[3002]](_0x5c29x9);mxClient[_0xd587[754]]&& _0x5c29x9[_0xd587[252]][_0xd587[57]](_0xd587[1377],_0xd587[130]);if(this[_0xd587[3010]](_0x5c29x4)){if(mxClient[_0xd587[754]]){var _0x5c29xa=mxUtils[_0xd587[885]](this,function(_0x5c29x2){_0x5c29x2= mxUtils[_0xd587[2196]](this[_0xd587[1179]][_0xd587[526]],mxEvent[_0xd587[731]](_0x5c29x2),mxEvent[_0xd587[733]](_0x5c29x2));return this[_0xd587[1179]][_0xd587[441]][_0xd587[248]](this[_0xd587[1179]][_0xd587[999]](_0x5c29x2[_0xd587[235]],_0x5c29x2[_0xd587[236]]))});mxEvent[_0xd587[2733]](_0x5c29x9[_0xd587[252]],this[_0xd587[1179]],_0x5c29xa)}else {_0x5c29x9[_0xd587[252]][_0xd587[124]][_0xd587[270]]= mxConstants[_0xd587[3011]],mxEvent[_0xd587[2733]](_0x5c29x9[_0xd587[252]],this[_0xd587[1179]],this[_0xd587[724]])}};_0x5c29x3[_0xd587[207]](_0x5c29x9);_0x5c29x5|| (this[_0xd587[1525]][_0xd587[207]]( new mxPoint(0,0)),_0x5c29x9[_0xd587[252]][_0xd587[124]][_0xd587[187]]= _0xd587[188])}}};return _0x5c29x3};mxEdgeHandler[_0xd587[202]][_0xd587[3010]]= function(_0x5c29x2){return !0};mxEdgeHandler[_0xd587[202]][_0xd587[3008]]= function(_0x5c29x2){return !0};mxEdgeHandler[_0xd587[202]][_0xd587[3009]]= function(_0x5c29x2){if(null!= this[_0xd587[2959]]){return new mxImageShape( new mxRectangle(0,0,this[_0xd587[2959]][_0xd587[117]],this[_0xd587[2959]][_0xd587[119]]),this[_0xd587[2959]][_0xd587[390]])};_0x5c29x2= mxConstants[_0xd587[2974]];this[_0xd587[574]]&& (_0x5c29x2-= 1);return new mxRectangleShape( new mxRectangle(0,0,_0x5c29x2,_0x5c29x2),mxConstants.HANDLE_FILLCOLOR,mxConstants.HANDLE_STROKECOLOR)};mxEdgeHandler[_0xd587[202]][_0xd587[3002]]= function(_0x5c29x2){this[_0xd587[574]]?(_0x5c29x2[_0xd587[507]]= mxConstants[_0xd587[1656]],_0x5c29x2[_0xd587[176]](this[_0xd587[1179]][_0xd587[526]])):(_0x5c29x2[_0xd587[507]]= this[_0xd587[1179]][_0xd587[507]]!= mxConstants[_0xd587[508]]?mxConstants[_0xd587[2334]]:mxConstants[_0xd587[508]],_0x5c29x2[_0xd587[176]](this[_0xd587[1179]][_0xd587[249]]()[_0xd587[1524]]()))};mxEdgeHandler[_0xd587[202]][_0xd587[2986]]= function(_0x5c29x2){if(null!= this[_0xd587[2994]]){for(var _0x5c29x3=this[_0xd587[2353]],_0x5c29x3=this[_0xd587[2958]]&& (mxClient[_0xd587[80]]|| 0< _0x5c29x3)? new mxRectangle(_0x5c29x2[_0xd587[734]]()- _0x5c29x3,_0x5c29x2[_0xd587[735]]()- _0x5c29x3,2* _0x5c29x3,2* _0x5c29x3):null,_0x5c29x4=0;_0x5c29x4< this[_0xd587[2994]][_0xd587[67]];_0x5c29x4++){if((_0x5c29x2[_0xd587[729]](this[_0xd587[2994]][_0x5c29x4])|| null!= _0x5c29x3&& mxUtils[_0xd587[1825]](this[_0xd587[2994]][_0x5c29x4][_0xd587[1562]],_0x5c29x3))&& _0xd587[188]!= this[_0xd587[2994]][_0x5c29x4][_0xd587[252]][_0xd587[124]][_0xd587[187]]){return _0x5c29x4}}};if(_0x5c29x2[_0xd587[729]](this[_0xd587[2972]])&& _0xd587[188]!= this[_0xd587[2972]][_0xd587[252]][_0xd587[124]][_0xd587[187]]|| _0x5c29x2[_0xd587[729]](this[_0xd587[724]][_0xd587[963]])){if(!mxClient[_0xd587[75]]&& !mxClient[_0xd587[76]]|| _0xd587[2822]!= _0x5c29x2[_0xd587[728]]()[_0xd587[301]]){return mxEvent[_0xd587[2987]]}};return null};mxEdgeHandler[_0xd587[202]][_0xd587[787]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=null,_0x5c29x4=this[_0xd587[2986]](_0x5c29x3);null!= _0x5c29x4&& (!_0x5c29x3[_0xd587[721]]()&& this[_0xd587[1179]][_0xd587[994]]()&& !this[_0xd587[1179]][_0xd587[2579]](_0x5c29x3[_0xd587[727]]()))&& (this[_0xd587[2995]]&& this[_0xd587[3004]](_0x5c29x3[_0xd587[727]]())?this[_0xd587[3012]](this[_0xd587[724]],_0x5c29x4):(_0x5c29x4!= mxEvent[_0xd587[2987]]|| this[_0xd587[1179]][_0xd587[2628]](_0x5c29x3[_0xd587[736]]()))&& this[_0xd587[861]](_0x5c29x3[_0xd587[730]](),_0x5c29x3[_0xd587[732]](),_0x5c29x4),_0x5c29x3[_0xd587[722]]())};mxEdgeHandler[_0xd587[202]][_0xd587[861]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){this[_0xd587[2739]]= _0x5c29x2;this[_0xd587[2740]]= _0x5c29x3;this[_0xd587[729]]= null== this[_0xd587[2994]]?!1:0== _0x5c29x4;this[_0xd587[3013]]= null== this[_0xd587[2994]]?!1:_0x5c29x4== this[_0xd587[2994]][_0xd587[67]]- 1;this[_0xd587[3014]]= _0x5c29x4== mxEvent[_0xd587[2987]];if(this[_0xd587[729]]|| this[_0xd587[3013]]){if(_0x5c29x2= this[_0xd587[724]][_0xd587[246]],_0x5c29x3= this[_0xd587[1179]][_0xd587[251]][_0xd587[1709]](_0x5c29x2,this[_0xd587[729]]),null== _0x5c29x3&& this[_0xd587[1179]][_0xd587[2661]](_0x5c29x2,this[_0xd587[729]])|| null!= _0x5c29x3&& this[_0xd587[1179]][_0xd587[2551]](_0x5c29x2,_0x5c29x3,this[_0xd587[729]])){this[_0xd587[1983]]= _0x5c29x4}}else {this[_0xd587[1983]]= _0x5c29x4}};mxEdgeHandler[_0xd587[202]][_0xd587[3015]]= function(_0x5c29x2,_0x5c29x3){return this[_0xd587[724]][_0xd587[238]]()};mxEdgeHandler[_0xd587[202]][_0xd587[3016]]= function(){return this[_0xd587[1179]][_0xd587[1020]]* this[_0xd587[1179]][_0xd587[441]][_0xd587[255]]/ 2};mxEdgeHandler[_0xd587[202]][_0xd587[2689]]= function(_0x5c29x2){var _0x5c29x3= new mxPoint(_0x5c29x2[_0xd587[734]](),_0x5c29x2[_0xd587[735]]()),_0x5c29x4=this[_0xd587[3016]](),_0x5c29x5=this[_0xd587[1179]][_0xd587[249]](),_0x5c29x9=!1,_0x5c29xa=!1;if(this[_0xd587[2996]]&& 0< _0x5c29x4){var _0x5c29x12=function(_0x5c29x2){if(null!= _0x5c29x2){var _0x5c29x5=_0x5c29x2[_0xd587[235]];Math[_0xd587[425]](_0x5c29x3[_0xd587[235]]- _0x5c29x5)< _0x5c29x4&& (_0x5c29x3[_0xd587[235]]= _0x5c29x5,_0x5c29x9= !0);_0x5c29x2= _0x5c29x2[_0xd587[236]];Math[_0xd587[425]](_0x5c29x3[_0xd587[236]]- _0x5c29x2)< _0x5c29x4&& (_0x5c29x3[_0xd587[236]]= _0x5c29x2,_0x5c29xa= !0)}},_0x5c29x13=function(_0x5c29x2){null!= _0x5c29x2&& _0x5c29x12[_0xd587[239]](this, new mxPoint(_0x5c29x5[_0xd587[2230]](_0x5c29x2),_0x5c29x5[_0xd587[2228]](_0x5c29x2)))};_0x5c29x13[_0xd587[239]](this,this[_0xd587[724]][_0xd587[2089]](!0));_0x5c29x13[_0xd587[239]](this,this[_0xd587[724]][_0xd587[2089]](!1));if(null!= this[_0xd587[2997]]){for(_0x5c29x13= 0;_0x5c29x13< this[_0xd587[2997]];_0x5c29x13++){_0x5c29x13!= this[_0xd587[1983]]&& _0x5c29x12[_0xd587[239]](this,this[_0xd587[2997]][_0x5c29x13])}}};this[_0xd587[1179]][_0xd587[1018]](_0x5c29x2[_0xd587[727]]())&& (_0x5c29x2= _0x5c29x5[_0xd587[255]],_0x5c29x13= _0x5c29x5[_0xd587[513]],_0x5c29x9|| (_0x5c29x3[_0xd587[235]]= (this[_0xd587[1179]][_0xd587[1021]](_0x5c29x3[_0xd587[235]]/ _0x5c29x2- _0x5c29x13[_0xd587[235]])+ _0x5c29x13[_0xd587[235]])* _0x5c29x2),_0x5c29xa|| (_0x5c29x3[_0xd587[236]]= (this[_0xd587[1179]][_0xd587[1021]](_0x5c29x3[_0xd587[236]]/ _0x5c29x2- _0x5c29x13[_0xd587[236]])+ _0x5c29x13[_0xd587[236]])* _0x5c29x2));return _0x5c29x3};mxEdgeHandler[_0xd587[202]][_0xd587[3017]]= function(_0x5c29x2){this[_0xd587[2886]][_0xd587[2729]](_0x5c29x2,this[_0xd587[729]]);this[_0xd587[2885]][_0xd587[2871]](_0x5c29x2);_0x5c29x2= this[_0xd587[2885]][_0xd587[2868]]();var _0x5c29x3=null;null!= this[_0xd587[2886]][_0xd587[2919]]&& null!= this[_0xd587[2886]][_0xd587[2920]]&& this[_0xd587[2885]][_0xd587[862]]();null!= _0x5c29x2?_0x5c29x3= _0x5c29x2:null!= this[_0xd587[2886]][_0xd587[2920]]&& null!= this[_0xd587[2886]][_0xd587[2919]]&& (_0x5c29x3= this[_0xd587[2886]][_0xd587[2919]]);return _0x5c29x3};mxEdgeHandler[_0xd587[202]][_0xd587[3018]]= function(_0x5c29x2){var _0x5c29x3=this[_0xd587[1179]][_0xd587[1198]](this[_0xd587[724]][_0xd587[246]]),_0x5c29x3=null!= _0x5c29x3[_0xd587[1525]]?_0x5c29x3[_0xd587[1525]][_0xd587[1853]]():null;!this[_0xd587[729]]&& !this[_0xd587[3013]]?(this[_0xd587[2196]](_0x5c29x2,!1),null== _0x5c29x3?_0x5c29x3= [_0x5c29x2]:_0x5c29x3[this[_0xd587[1983]]- 1]= _0x5c29x2):this[_0xd587[1179]][_0xd587[2401]]&& (_0x5c29x3= null);return _0x5c29x3};mxEdgeHandler[_0xd587[202]][_0xd587[3019]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){var _0x5c29x5=this[_0xd587[729]]?_0x5c29x4:this[_0xd587[724]][_0xd587[2089]](!0),_0x5c29x9=this[_0xd587[3013]]?_0x5c29x4:this[_0xd587[724]][_0xd587[2089]](!1),_0x5c29xa=this[_0xd587[1179]][_0xd587[2288]](_0x5c29x2,_0x5c29x5,!0),_0x5c29x12=this[_0xd587[1179]][_0xd587[2288]](_0x5c29x2,_0x5c29x9,!1),_0x5c29x13=this[_0xd587[2886]][_0xd587[2920]];null== _0x5c29x13&& (_0x5c29x13= new mxConnectionConstraint);this[_0xd587[729]]?_0x5c29xa= _0x5c29x13:this[_0xd587[3013]]&& (_0x5c29x12= _0x5c29x13);(!this[_0xd587[729]]|| null!= _0x5c29x5)&& _0x5c29x2[_0xd587[441]][_0xd587[2289]](_0x5c29x2,_0x5c29x5,!0,_0x5c29xa);(!this[_0xd587[3013]]|| null!= _0x5c29x9)&& _0x5c29x2[_0xd587[441]][_0xd587[2289]](_0x5c29x2,_0x5c29x9,!1,_0x5c29x12);if((this[_0xd587[729]]|| this[_0xd587[3013]])&& null== _0x5c29x4){_0x5c29x2[_0xd587[2088]](_0x5c29x3,this[_0xd587[729]]),null== this[_0xd587[2885]][_0xd587[2869]]()&& (this[_0xd587[267]]= this[_0xd587[1179]][_0xd587[2406]]?null:_0xd587[110])};_0x5c29x2[_0xd587[441]][_0xd587[2282]](_0x5c29x2,this[_0xd587[1525]],_0x5c29x5,_0x5c29x9);_0x5c29x2[_0xd587[441]][_0xd587[2283]](_0x5c29x2,_0x5c29x5,_0x5c29x9)};mxEdgeHandler[_0xd587[202]][_0xd587[788]]= function(_0x5c29x2,_0x5c29x3){if(null!= this[_0xd587[1983]]&& null!= this[_0xd587[2885]]){var _0x5c29x4=this[_0xd587[2689]](_0x5c29x3);if(this[_0xd587[3014]]){this[_0xd587[685]][_0xd587[235]]= _0x5c29x4[_0xd587[235]],this[_0xd587[685]][_0xd587[236]]= _0x5c29x4[_0xd587[236]]}else {this[_0xd587[1525]]= this[_0xd587[3018]](_0x5c29x4);var _0x5c29x5=this[_0xd587[729]]|| this[_0xd587[3013]]?this[_0xd587[3017]](_0x5c29x3):null,_0x5c29x9=this[_0xd587[3015]](_0x5c29x4,null!= _0x5c29x5?_0x5c29x5[_0xd587[246]]:null);this[_0xd587[3019]](_0x5c29x9,_0x5c29x4,_0x5c29x5);this[_0xd587[3020]](null== this[_0xd587[267]]?this[_0xd587[2885]][_0xd587[2853]]:this[_0xd587[2885]][_0xd587[2855]]);this[_0xd587[2997]]= _0x5c29x9[_0xd587[439]];this[_0xd587[1124]]= !0};this[_0xd587[2932]]();mxEvent[_0xd587[722]](_0x5c29x3[_0xd587[727]]());_0x5c29x3[_0xd587[722]]()}else {mxClient[_0xd587[80]]&& null!= this[_0xd587[2986]](_0x5c29x3)&& _0x5c29x3[_0xd587[722]](!1)}};mxEdgeHandler[_0xd587[202]][_0xd587[789]]= function(_0x5c29x2,_0x5c29x3){if(null!= this[_0xd587[1983]]&& null!= this[_0xd587[2885]]){var _0x5c29x4=this[_0xd587[724]][_0xd587[246]];if(_0x5c29x3[_0xd587[730]]()!= this[_0xd587[2739]]|| _0x5c29x3[_0xd587[732]]()!= this[_0xd587[2740]]){if(null!= this[_0xd587[267]]){0< this[_0xd587[267]][_0xd587[67]]&& this[_0xd587[1179]][_0xd587[2580]](this[_0xd587[267]])}else {if(this[_0xd587[3014]]){this[_0xd587[3021]](this[_0xd587[724]],this[_0xd587[685]][_0xd587[235]],this[_0xd587[685]][_0xd587[236]])}else {if(this[_0xd587[729]]|| this[_0xd587[3013]]){var _0x5c29x5=null;null!= this[_0xd587[2886]][_0xd587[2920]]&& null!= this[_0xd587[2886]][_0xd587[2919]]&& (_0x5c29x5= this[_0xd587[2886]][_0xd587[2919]][_0xd587[246]]);null== _0x5c29x5&& this[_0xd587[2885]][_0xd587[2867]]()&& (_0x5c29x5= this[_0xd587[2885]][_0xd587[2861]][_0xd587[246]]);if(null!= _0x5c29x5){_0x5c29x4= this[_0xd587[807]](_0x5c29x4,_0x5c29x5,this[_0xd587[729]],this[_0xd587[1179]][_0xd587[2574]](_0x5c29x3[_0xd587[727]]())&& this[_0xd587[2797]]&& this[_0xd587[1179]][_0xd587[2617]](),_0x5c29x3)}else {if(this[_0xd587[1179]][_0xd587[2530]]()){_0x5c29x5= this[_0xd587[2997]][this[_0xd587[729]]?0:this[_0xd587[2997]][_0xd587[67]]- 1];_0x5c29x5[_0xd587[235]]= _0x5c29x5[_0xd587[235]]/ this[_0xd587[1179]][_0xd587[441]][_0xd587[255]]- this[_0xd587[1179]][_0xd587[441]][_0xd587[513]][_0xd587[235]];_0x5c29x5[_0xd587[236]]= _0x5c29x5[_0xd587[236]]/ this[_0xd587[1179]][_0xd587[441]][_0xd587[255]]- this[_0xd587[1179]][_0xd587[441]][_0xd587[513]][_0xd587[236]];var _0x5c29x9=this[_0xd587[1179]][_0xd587[249]]()[_0xd587[248]](this[_0xd587[1179]][_0xd587[502]]()[_0xd587[1197]](_0x5c29x4));null!= _0x5c29x9&& (_0x5c29x5[_0xd587[235]]-= _0x5c29x9[_0xd587[2078]][_0xd587[235]],_0x5c29x5[_0xd587[236]]-= _0x5c29x9[_0xd587[2078]][_0xd587[236]]);_0x5c29x5[_0xd587[235]]-= this[_0xd587[1179]][_0xd587[1136]]/ this[_0xd587[1179]][_0xd587[441]][_0xd587[255]];_0x5c29x5[_0xd587[236]]-= this[_0xd587[1179]][_0xd587[1137]]/ this[_0xd587[1179]][_0xd587[441]][_0xd587[255]];this[_0xd587[3022]](_0x5c29x4,_0x5c29x5,this[_0xd587[729]])}}}else {this[_0xd587[1124]]?this[_0xd587[3023]](_0x5c29x4,this[_0xd587[1525]]):(this[_0xd587[1179]][_0xd587[249]]()[_0xd587[2263]](this[_0xd587[724]][_0xd587[246]]),this[_0xd587[1179]][_0xd587[249]]()[_0xd587[2259]](this[_0xd587[724]][_0xd587[246]]))}}}};null!= this[_0xd587[2885]]&& (this[_0xd587[862]](),_0x5c29x4!= this[_0xd587[724]][_0xd587[246]]&& this[_0xd587[1179]][_0xd587[2450]](_0x5c29x4));_0x5c29x3[_0xd587[722]]()}};mxEdgeHandler[_0xd587[202]][_0xd587[862]]= function(){this[_0xd587[1525]]= this[_0xd587[685]]= this[_0xd587[1983]]= this[_0xd587[267]]= null;this[_0xd587[3013]]= this[_0xd587[729]]= this[_0xd587[3014]]= this[_0xd587[1124]]= !1;this[_0xd587[2885]][_0xd587[862]]();this[_0xd587[2886]][_0xd587[862]]();this[_0xd587[3020]](mxConstants.EDGE_SELECTION_COLOR);this[_0xd587[258]]()};mxEdgeHandler[_0xd587[202]][_0xd587[3020]]= function(_0x5c29x2){null!= this[_0xd587[253]]&& (this[_0xd587[253]][_0xd587[1336]]= _0x5c29x2)};mxEdgeHandler[_0xd587[202]][_0xd587[2196]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=this[_0xd587[1179]][_0xd587[249]]()[_0xd587[518]](),_0x5c29x5=this[_0xd587[1179]][_0xd587[249]]()[_0xd587[512]]();_0x5c29x3&& (_0x5c29x2[_0xd587[235]]= this[_0xd587[1179]][_0xd587[1021]](_0x5c29x2[_0xd587[235]]),_0x5c29x2[_0xd587[236]]= this[_0xd587[1179]][_0xd587[1021]](_0x5c29x2[_0xd587[236]]));_0x5c29x2[_0xd587[235]]= Math[_0xd587[488]](_0x5c29x2[_0xd587[235]]/ _0x5c29x4- _0x5c29x5[_0xd587[235]]);_0x5c29x2[_0xd587[236]]= Math[_0xd587[488]](_0x5c29x2[_0xd587[236]]/ _0x5c29x4- _0x5c29x5[_0xd587[236]]);_0x5c29x4= this[_0xd587[1179]][_0xd587[249]]()[_0xd587[248]](this[_0xd587[1179]][_0xd587[502]]()[_0xd587[1197]](this[_0xd587[724]][_0xd587[246]]));null!= _0x5c29x4&& (_0x5c29x2[_0xd587[235]]-= _0x5c29x4[_0xd587[2078]][_0xd587[235]],_0x5c29x2[_0xd587[236]]-= _0x5c29x4[_0xd587[2078]][_0xd587[236]]);return _0x5c29x2};mxEdgeHandler[_0xd587[202]][_0xd587[3021]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){var _0x5c29x5=this[_0xd587[1179]][_0xd587[502]](),_0x5c29x9=_0x5c29x5[_0xd587[1721]](_0x5c29x2[_0xd587[246]]);if(null!= _0x5c29x9){var _0x5c29x9=_0x5c29x9[_0xd587[238]](),_0x5c29xa=this[_0xd587[1179]][_0xd587[249]]()[_0xd587[2308]](_0x5c29x2,_0x5c29x3,_0x5c29x4);_0x5c29x9[_0xd587[235]]= _0x5c29xa[_0xd587[235]];_0x5c29x9[_0xd587[236]]= _0x5c29xa[_0xd587[236]];var _0x5c29x12=this[_0xd587[1179]][_0xd587[249]]()[_0xd587[255]];_0x5c29x9[_0xd587[1368]]= new mxPoint(0,0);_0x5c29xa= this[_0xd587[1179]][_0xd587[441]][_0xd587[245]](_0x5c29x2,_0x5c29x9);_0x5c29x9[_0xd587[1368]]= new mxPoint((_0x5c29x3- _0x5c29xa[_0xd587[235]])/ _0x5c29x12,(_0x5c29x4- _0x5c29xa[_0xd587[236]])/ _0x5c29x12);_0x5c29x5[_0xd587[1724]](_0x5c29x2[_0xd587[246]],_0x5c29x9)}};mxEdgeHandler[_0xd587[202]][_0xd587[807]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){_0x5c29x9= this[_0xd587[1179]][_0xd587[502]]();var _0x5c29xa=_0x5c29x9[_0xd587[1197]](_0x5c29x2);_0x5c29x9[_0xd587[473]]();try{if(_0x5c29x5){var _0x5c29x12=_0x5c29x2[_0xd587[238]]();_0x5c29x9[_0xd587[99]](_0x5c29xa,_0x5c29x12,_0x5c29x9[_0xd587[262]](_0x5c29xa));var _0x5c29x13=_0x5c29x9[_0xd587[1709]](_0x5c29x2,!_0x5c29x4);this[_0xd587[1179]][_0xd587[851]](_0x5c29x12,_0x5c29x13,!_0x5c29x4);_0x5c29x2= _0x5c29x12};var _0x5c29x14=this[_0xd587[2886]][_0xd587[2920]];null== _0x5c29x14&& (_0x5c29x14= new mxConnectionConstraint);this[_0xd587[1179]][_0xd587[851]](_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x14)}finally{_0x5c29x9[_0xd587[476]]()};return _0x5c29x2};mxEdgeHandler[_0xd587[202]][_0xd587[3022]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){var _0x5c29x5=this[_0xd587[1179]][_0xd587[502]](),_0x5c29x9=_0x5c29x5[_0xd587[1721]](_0x5c29x2);if(null!= _0x5c29x9){_0x5c29x5[_0xd587[473]]();try{_0x5c29x9= _0x5c29x9[_0xd587[238]](),_0x5c29x9[_0xd587[2007]](_0x5c29x3,_0x5c29x4),_0x5c29x5[_0xd587[1724]](_0x5c29x2,_0x5c29x9),this[_0xd587[1179]][_0xd587[851]](_0x5c29x2,null,_0x5c29x4, new mxConnectionConstraint)}finally{_0x5c29x5[_0xd587[476]]()}}};mxEdgeHandler[_0xd587[202]][_0xd587[3023]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=this[_0xd587[1179]][_0xd587[502]](),_0x5c29x5=_0x5c29x4[_0xd587[1721]](_0x5c29x2);null!= _0x5c29x5&& (_0x5c29x5= _0x5c29x5[_0xd587[238]](),_0x5c29x5[_0xd587[1525]]= _0x5c29x3,_0x5c29x4[_0xd587[1724]](_0x5c29x2,_0x5c29x5))};mxEdgeHandler[_0xd587[202]][_0xd587[3000]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=mxUtils[_0xd587[2196]](this[_0xd587[1179]][_0xd587[526]],mxEvent[_0xd587[731]](_0x5c29x3),mxEvent[_0xd587[733]](_0x5c29x3)),_0x5c29x5=this[_0xd587[1179]][_0xd587[1018]](_0x5c29x3);this[_0xd587[2196]](_0x5c29x4,_0x5c29x5);this[_0xd587[3024]](_0x5c29x2,_0x5c29x4[_0xd587[235]],_0x5c29x4[_0xd587[236]]);mxEvent[_0xd587[722]](_0x5c29x3)};mxEdgeHandler[_0xd587[202]][_0xd587[3024]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){var _0x5c29x5=this[_0xd587[1179]][_0xd587[1198]](_0x5c29x2[_0xd587[246]]);_0x5c29x3= new mxPoint(_0x5c29x3,_0x5c29x4);if(null!= _0x5c29x5){_0x5c29x5= _0x5c29x5[_0xd587[238]]();_0x5c29x4= this[_0xd587[1179]][_0xd587[441]][_0xd587[513]];var _0x5c29x9=this[_0xd587[1179]][_0xd587[441]][_0xd587[255]];_0x5c29x4= mxUtils[_0xd587[3025]](_0x5c29x2,(_0x5c29x3[_0xd587[235]]+ _0x5c29x4[_0xd587[235]])* _0x5c29x9,(_0x5c29x3[_0xd587[236]]+ _0x5c29x4[_0xd587[236]])* _0x5c29x9);null== _0x5c29x5[_0xd587[1525]]?_0x5c29x5[_0xd587[1525]]= [_0x5c29x3]:_0x5c29x5[_0xd587[1525]][_0xd587[300]](_0x5c29x4,0,_0x5c29x3);this[_0xd587[1179]][_0xd587[502]]()[_0xd587[1724]](_0x5c29x2[_0xd587[246]],_0x5c29x5);this[_0xd587[515]]();this[_0xd587[176]]()}};mxEdgeHandler[_0xd587[202]][_0xd587[3012]]= function(_0x5c29x2,_0x5c29x3){if(0< _0x5c29x3&& _0x5c29x3< this[_0xd587[2997]][_0xd587[67]]- 1){var _0x5c29x4=this[_0xd587[1179]][_0xd587[1198]](this[_0xd587[724]][_0xd587[246]]);null!= _0x5c29x4&& null!= _0x5c29x4[_0xd587[1525]]&& (_0x5c29x4= _0x5c29x4[_0xd587[238]](),_0x5c29x4[_0xd587[1525]][_0xd587[300]](_0x5c29x3- 1,1),this[_0xd587[1179]][_0xd587[502]]()[_0xd587[1724]](_0x5c29x2[_0xd587[246]],_0x5c29x4),this[_0xd587[515]](),this[_0xd587[176]]())}};mxEdgeHandler[_0xd587[202]][_0xd587[3026]]= function(_0x5c29x2){_0x5c29x2= 0== _0x5c29x2;var _0x5c29x3=this[_0xd587[724]][_0xd587[246]],_0x5c29x4=this[_0xd587[1179]][_0xd587[502]]()[_0xd587[1709]](_0x5c29x3,_0x5c29x2),_0x5c29x5=mxConstants[_0xd587[2984]];null!= _0x5c29x4&& !this[_0xd587[1179]][_0xd587[2551]](_0x5c29x3,_0x5c29x4,_0x5c29x2)|| null== _0x5c29x4&& !this[_0xd587[1179]][_0xd587[2661]](_0x5c29x3,_0x5c29x2)?_0x5c29x5= mxConstants[_0xd587[3027]]:null!= _0x5c29x4&& this[_0xd587[1179]][_0xd587[2551]](_0x5c29x3,_0x5c29x4,_0x5c29x2)&& (_0x5c29x5= mxConstants[_0xd587[3028]]);return _0x5c29x5};mxEdgeHandler[_0xd587[202]][_0xd587[258]]= function(){this[_0xd587[2997]]= this[_0xd587[724]][_0xd587[439]][_0xd587[1853]]();var _0x5c29x2=this[_0xd587[724]][_0xd587[246]],_0x5c29x3=mxConstants[_0xd587[3029]];this[_0xd587[685]]= new mxPoint(this[_0xd587[724]][_0xd587[2079]][_0xd587[235]],this[_0xd587[724]][_0xd587[2079]][_0xd587[236]]);this[_0xd587[2972]][_0xd587[1562]]= new mxRectangle(Math[_0xd587[488]](this[_0xd587[685]][_0xd587[235]]- _0x5c29x3/ 2),Math[_0xd587[488]](this[_0xd587[685]][_0xd587[236]]- _0x5c29x3/ 2),_0x5c29x3,_0x5c29x3);this[_0xd587[2972]][_0xd587[258]]();_0x5c29x3= this[_0xd587[1179]][_0xd587[2183]](_0x5c29x2);null!= _0x5c29x3&& 0< _0x5c29x3[_0xd587[67]]&& this[_0xd587[1179]][_0xd587[2628]](_0x5c29x2)?this[_0xd587[2972]][_0xd587[252]][_0xd587[124]][_0xd587[187]]= _0xd587[189]:this[_0xd587[2972]][_0xd587[252]][_0xd587[124]][_0xd587[187]]= _0xd587[188];if(null!= this[_0xd587[2994]]&& 0< this[_0xd587[2994]][_0xd587[67]]){var _0x5c29x4=this[_0xd587[2997]][_0xd587[67]]- 1,_0x5c29x2=this[_0xd587[2997]][0],_0x5c29x5=this[_0xd587[2997]][0][_0xd587[236]],_0x5c29x3=this[_0xd587[2994]][0][_0xd587[1562]];this[_0xd587[2994]][0][_0xd587[1562]]= new mxRectangle(Math[_0xd587[488]](this[_0xd587[2997]][0][_0xd587[235]]- _0x5c29x3[_0xd587[117]]/ 2),Math[_0xd587[488]](_0x5c29x5- _0x5c29x3[_0xd587[119]]/ 2),_0x5c29x3[_0xd587[117]],_0x5c29x3[_0xd587[119]]);this[_0xd587[2994]][0][_0xd587[1334]]= this[_0xd587[3026]](0);this[_0xd587[2994]][0][_0xd587[258]]();var _0x5c29x5=this[_0xd587[2997]][_0x5c29x4],_0x5c29x9=this[_0xd587[2997]][_0x5c29x4][_0xd587[235]],_0x5c29x4=this[_0xd587[2997]][_0x5c29x4][_0xd587[236]],_0x5c29xa=this[_0xd587[2994]][_0xd587[67]]- 1,_0x5c29x3=this[_0xd587[2994]][_0x5c29xa][_0xd587[1562]];this[_0xd587[2994]][_0x5c29xa][_0xd587[1562]]= new mxRectangle(Math[_0xd587[488]](_0x5c29x9- _0x5c29x3[_0xd587[117]]/ 2),Math[_0xd587[488]](_0x5c29x4- _0x5c29x3[_0xd587[119]]/ 2),_0x5c29x3[_0xd587[117]],_0x5c29x3[_0xd587[119]]);this[_0xd587[2994]][_0x5c29xa][_0xd587[1334]]= this[_0xd587[3026]](_0x5c29xa);this[_0xd587[2994]][_0x5c29xa][_0xd587[258]]();this[_0xd587[3030]](_0x5c29x2,_0x5c29x5)};this[_0xd587[2932]]()};mxEdgeHandler[_0xd587[202]][_0xd587[3030]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=this[_0xd587[1179]][_0xd587[502]]()[_0xd587[1721]](this[_0xd587[724]][_0xd587[246]])[_0xd587[1525]];if(null!= _0x5c29x4){null== this[_0xd587[1525]]&& (this[_0xd587[1525]]= []);for(var _0x5c29x5=1;_0x5c29x5< this[_0xd587[2994]][_0xd587[67]]- 1;_0x5c29x5++){if(null!= this[_0xd587[2994]][_0x5c29x5]){if(null!= this[_0xd587[2997]][_0x5c29x5]){var _0x5c29x9=this[_0xd587[2997]][_0x5c29x5][_0xd587[235]],_0x5c29xa=this[_0xd587[2997]][_0x5c29x5][_0xd587[236]],_0x5c29x12=this[_0xd587[2994]][_0x5c29x5][_0xd587[1562]];this[_0xd587[2994]][_0x5c29x5][_0xd587[252]][_0xd587[124]][_0xd587[187]]= _0xd587[189];this[_0xd587[2994]][_0x5c29x5][_0xd587[1562]]= new mxRectangle(Math[_0xd587[488]](_0x5c29x9- _0x5c29x12[_0xd587[117]]/ 2),Math[_0xd587[488]](_0x5c29xa- _0x5c29x12[_0xd587[119]]/ 2),_0x5c29x12[_0xd587[117]],_0x5c29x12[_0xd587[119]]);this[_0xd587[2994]][_0x5c29x5][_0xd587[258]]();this[_0xd587[1525]][_0x5c29x5- 1]= _0x5c29x4[_0x5c29x5- 1]}else {this[_0xd587[2994]][_0x5c29x5][_0xd587[515]](),this[_0xd587[2994]][_0x5c29x5]= null}}}}};mxEdgeHandler[_0xd587[202]][_0xd587[2932]]= function(){if(this[_0xd587[3014]]){var _0x5c29x2=mxConstants[_0xd587[3029]],_0x5c29x2= new mxRectangle(Math[_0xd587[488]](this[_0xd587[685]][_0xd587[235]]- _0x5c29x2/ 2),Math[_0xd587[488]](this[_0xd587[685]][_0xd587[236]]- _0x5c29x2/ 2),_0x5c29x2,_0x5c29x2);this[_0xd587[2972]][_0xd587[1562]]= _0x5c29x2;this[_0xd587[2972]][_0xd587[258]]()}else {this[_0xd587[253]][_0xd587[1525]]= this[_0xd587[2997]],this[_0xd587[253]][_0xd587[258]]()}};mxEdgeHandler[_0xd587[202]][_0xd587[515]]= function(){null!= this[_0xd587[2885]]&& (this[_0xd587[2885]][_0xd587[515]](),this[_0xd587[2885]]= null);null!= this[_0xd587[253]]&& (this[_0xd587[253]][_0xd587[515]](),this[_0xd587[253]]= null);null!= this[_0xd587[2972]]&& (this[_0xd587[2972]][_0xd587[515]](),this[_0xd587[2972]]= null);null!= this[_0xd587[2886]]&& (this[_0xd587[2886]][_0xd587[515]](),this[_0xd587[2886]]= null);if(null!= this[_0xd587[2994]]){for(var _0x5c29x2=0;_0x5c29x2< this[_0xd587[2994]][_0xd587[67]];_0x5c29x2++){null!= this[_0xd587[2994]][_0x5c29x2]&& (this[_0xd587[2994]][_0x5c29x2][_0xd587[515]](),this[_0xd587[2994]][_0x5c29x2]= null)}}};function mxElbowEdgeHandler(_0x5c29x2){mxEdgeHandler[_0xd587[239]](this,_0x5c29x2)}mxUtils[_0xd587[1284]](mxElbowEdgeHandler,mxEdgeHandler);mxElbowEdgeHandler[_0xd587[202]]= new mxEdgeHandler;mxElbowEdgeHandler[_0xd587[202]][_0xd587[196]]= mxElbowEdgeHandler;mxElbowEdgeHandler[_0xd587[202]][_0xd587[3031]]= !0;mxElbowEdgeHandler[_0xd587[202]][_0xd587[3032]]= _0xd587[130]!= mxClient[_0xd587[90]]?_0xd587[3033]:_0xd587[110];mxElbowEdgeHandler[_0xd587[202]][_0xd587[3001]]= function(){var _0x5c29x2=[],_0x5c29x3=this[_0xd587[3009]](0);this[_0xd587[3002]](_0x5c29x3);_0x5c29x3[_0xd587[252]][_0xd587[124]][_0xd587[270]]= mxConstants[_0xd587[3011]];mxEvent[_0xd587[2733]](_0x5c29x3[_0xd587[252]],this[_0xd587[1179]],this[_0xd587[724]]);_0x5c29x2[_0xd587[207]](_0x5c29x3);mxClient[_0xd587[754]]&& _0x5c29x3[_0xd587[252]][_0xd587[57]](_0xd587[1377],_0xd587[130]);_0x5c29x2[_0xd587[207]](this[_0xd587[3034]]());this[_0xd587[1525]][_0xd587[207]]( new mxPoint(0,0));_0x5c29x3= this[_0xd587[3009]](2);this[_0xd587[3002]](_0x5c29x3);_0x5c29x3[_0xd587[252]][_0xd587[124]][_0xd587[270]]= mxConstants[_0xd587[3011]];mxEvent[_0xd587[2733]](_0x5c29x3[_0xd587[252]],this[_0xd587[1179]],this[_0xd587[724]]);_0x5c29x2[_0xd587[207]](_0x5c29x3);mxClient[_0xd587[754]]&& _0x5c29x3[_0xd587[252]][_0xd587[57]](_0xd587[1377],_0xd587[130]);return _0x5c29x2};mxElbowEdgeHandler[_0xd587[202]][_0xd587[3034]]= function(){var _0x5c29x2=this[_0xd587[3009]]();this[_0xd587[3002]](_0x5c29x2);var _0x5c29x3=this[_0xd587[3035]]();_0x5c29x2[_0xd587[252]][_0xd587[124]][_0xd587[270]]= _0x5c29x3;_0x5c29x3= mxUtils[_0xd587[885]](this,function(_0x5c29x2){!mxEvent[_0xd587[721]](_0x5c29x2)&& this[_0xd587[3031]]&& (this[_0xd587[1179]][_0xd587[854]](this[_0xd587[724]][_0xd587[246]],_0x5c29x2),mxEvent[_0xd587[722]](_0x5c29x2))});mxEvent[_0xd587[2733]](_0x5c29x2[_0xd587[252]],this[_0xd587[1179]],this[_0xd587[724]],null,null,null,_0x5c29x3);this[_0xd587[1179]][_0xd587[2662]](this[_0xd587[724]][_0xd587[246]])|| (_0x5c29x2[_0xd587[252]][_0xd587[124]][_0xd587[495]]= _0xd587[130]);return _0x5c29x2};mxElbowEdgeHandler[_0xd587[202]][_0xd587[3035]]= function(){return this[_0xd587[724]][_0xd587[124]][mxConstants[_0xd587[2294]]]== mxEdgeStyle[_0xd587[2570]]|| this[_0xd587[724]][_0xd587[124]][mxConstants[_0xd587[2294]]]== mxConstants[_0xd587[3036]]|| (this[_0xd587[724]][_0xd587[124]][mxConstants[_0xd587[2294]]]== mxEdgeStyle[_0xd587[2568]]|| this[_0xd587[724]][_0xd587[124]][mxConstants[_0xd587[2294]]]== mxConstants[_0xd587[3037]])&& this[_0xd587[724]][_0xd587[124]][mxConstants[_0xd587[2231]]]== mxConstants[_0xd587[2232]]?_0xd587[3038]:_0xd587[3039]};mxElbowEdgeHandler[_0xd587[202]][_0xd587[2597]]= function(_0x5c29x2){var _0x5c29x3=null;if(null!= this[_0xd587[2994]]&& null!= this[_0xd587[2994]][1]&& (_0x5c29x2== this[_0xd587[2994]][1][_0xd587[252]]|| _0x5c29x2[_0xd587[265]]== this[_0xd587[2994]][1][_0xd587[252]])){_0x5c29x3= this[_0xd587[3032]],_0x5c29x3= mxResources[_0xd587[203]](_0x5c29x3)|| _0x5c29x3};return _0x5c29x3};mxElbowEdgeHandler[_0xd587[202]][_0xd587[2196]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=this[_0xd587[1179]][_0xd587[249]]()[_0xd587[518]](),_0x5c29x5=this[_0xd587[1179]][_0xd587[249]]()[_0xd587[512]](),_0x5c29x9=this[_0xd587[724]][_0xd587[2078]];_0x5c29x3&& (_0x5c29x2[_0xd587[235]]= this[_0xd587[1179]][_0xd587[1021]](_0x5c29x2[_0xd587[235]]),_0x5c29x2[_0xd587[236]]= this[_0xd587[1179]][_0xd587[1021]](_0x5c29x2[_0xd587[236]]));_0x5c29x2[_0xd587[235]]= Math[_0xd587[488]](_0x5c29x2[_0xd587[235]]/ _0x5c29x4- _0x5c29x5[_0xd587[235]]- _0x5c29x9[_0xd587[235]]);_0x5c29x2[_0xd587[236]]= Math[_0xd587[488]](_0x5c29x2[_0xd587[236]]/ _0x5c29x4- _0x5c29x5[_0xd587[236]]- _0x5c29x9[_0xd587[236]])};mxElbowEdgeHandler[_0xd587[202]][_0xd587[3030]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=this[_0xd587[1179]][_0xd587[502]]()[_0xd587[1721]](this[_0xd587[724]][_0xd587[246]])[_0xd587[1525]],_0x5c29x4=null!= _0x5c29x4?_0x5c29x4[0]:null,_0x5c29x4=null== _0x5c29x4? new mxPoint(_0x5c29x2[_0xd587[235]]+ (_0x5c29x3[_0xd587[235]]- _0x5c29x2[_0xd587[235]])/ 2,_0x5c29x2[_0xd587[236]]+ (_0x5c29x3[_0xd587[236]]- _0x5c29x2[_0xd587[236]])/ 2): new mxPoint(this[_0xd587[1179]][_0xd587[249]]()[_0xd587[255]]* (_0x5c29x4[_0xd587[235]]+ this[_0xd587[1179]][_0xd587[249]]()[_0xd587[513]][_0xd587[235]]+ this[_0xd587[724]][_0xd587[2078]][_0xd587[235]]),this[_0xd587[1179]][_0xd587[249]]()[_0xd587[255]]* (_0x5c29x4[_0xd587[236]]+ this[_0xd587[1179]][_0xd587[249]]()[_0xd587[513]][_0xd587[236]]+ this[_0xd587[724]][_0xd587[2078]][_0xd587[236]])),_0x5c29x5=this[_0xd587[2994]][1][_0xd587[1562]],_0x5c29x9=_0x5c29x5[_0xd587[117]],_0x5c29x5=_0x5c29x5[_0xd587[119]];null== this[_0xd587[2959]]&& (_0x5c29x5= _0x5c29x9= mxConstants[_0xd587[2974]]);var _0x5c29xa= new mxRectangle(Math[_0xd587[488]](_0x5c29x4[_0xd587[235]]- _0x5c29x9/ 2),Math[_0xd587[488]](_0x5c29x4[_0xd587[236]]- _0x5c29x5/ 2),_0x5c29x9,_0x5c29x5);null== this[_0xd587[2959]]&& (_0xd587[188]!= this[_0xd587[2972]][_0xd587[252]][_0xd587[124]][_0xd587[187]]&& mxUtils[_0xd587[1825]](_0x5c29xa,this[_0xd587[2972]][_0xd587[1562]]))&& (_0x5c29x9+= 3,_0x5c29x5+= 3,_0x5c29xa= new mxRectangle(Math[_0xd587[488]](_0x5c29x4[_0xd587[235]]- _0x5c29x9/ 2),Math[_0xd587[488]](_0x5c29x4[_0xd587[236]]- _0x5c29x5/ 2),_0x5c29x9,_0x5c29x5));this[_0xd587[2994]][1][_0xd587[1562]]= _0x5c29xa;this[_0xd587[2994]][1][_0xd587[258]]()};function mxEdgeSegmentHandler(_0x5c29x2){mxEdgeHandler[_0xd587[239]](this,_0x5c29x2)}mxUtils[_0xd587[1284]](mxEdgeSegmentHandler,mxEdgeHandler);mxEdgeSegmentHandler[_0xd587[202]]= new mxElbowEdgeHandler;mxEdgeSegmentHandler[_0xd587[202]][_0xd587[196]]= mxEdgeSegmentHandler;mxEdgeSegmentHandler[_0xd587[202]][_0xd587[3018]]= function(_0x5c29x2){if(this[_0xd587[729]]|| this[_0xd587[3013]]){return mxElbowEdgeHandler[_0xd587[202]][_0xd587[3018]][_0xd587[183]](this,arguments)};this[_0xd587[2196]](_0x5c29x2,!1);var _0x5c29x3=this[_0xd587[724]][_0xd587[439]],_0x5c29x4=_0x5c29x3[0][_0xd587[238]]();this[_0xd587[2196]](_0x5c29x4,!1);for(var _0x5c29x5=[],_0x5c29x9=1;_0x5c29x9< _0x5c29x3[_0xd587[67]];_0x5c29x9++){var _0x5c29xa=_0x5c29x3[_0x5c29x9][_0xd587[238]]();this[_0xd587[2196]](_0x5c29xa,!1);_0x5c29x9== this[_0xd587[1983]]&& (_0x5c29x4[_0xd587[235]]== _0x5c29xa[_0xd587[235]]?(_0x5c29x4[_0xd587[235]]= _0x5c29x2[_0xd587[235]],_0x5c29xa[_0xd587[235]]= _0x5c29x2[_0xd587[235]]):(_0x5c29x4[_0xd587[236]]= _0x5c29x2[_0xd587[236]],_0x5c29xa[_0xd587[236]]= _0x5c29x2[_0xd587[236]]));_0x5c29x9< _0x5c29x3[_0xd587[67]]- 1&& _0x5c29x5[_0xd587[207]](_0x5c29xa);_0x5c29x4= _0x5c29xa};if(1== _0x5c29x5[_0xd587[67]]){if(_0x5c29x4= this[_0xd587[724]][_0xd587[441]],_0x5c29x9= this[_0xd587[724]][_0xd587[2089]](!0),_0x5c29xa= this[_0xd587[724]][_0xd587[2089]](!1),null!= _0x5c29xa& null!= _0x5c29x9){var _0x5c29x12=this[_0xd587[724]][_0xd587[2078]][_0xd587[235]],_0x5c29x13=this[_0xd587[724]][_0xd587[2078]][_0xd587[236]];mxUtils[_0xd587[442]](_0x5c29xa,_0x5c29x5[0][_0xd587[235]]+ _0x5c29x12,_0x5c29x5[0][_0xd587[236]]+ _0x5c29x13)?_0x5c29x3[1][_0xd587[236]]== _0x5c29x3[2][_0xd587[236]]?_0x5c29x5[0][_0xd587[236]]= _0x5c29x4[_0xd587[2228]](_0x5c29x9)- _0x5c29x13:_0x5c29x5[0][_0xd587[235]]= _0x5c29x4[_0xd587[2230]](_0x5c29x9)- _0x5c29x12:mxUtils[_0xd587[442]](_0x5c29x9,_0x5c29x5[0][_0xd587[235]]+ _0x5c29x12,_0x5c29x5[0][_0xd587[236]]+ _0x5c29x13)&& (_0x5c29x3[1][_0xd587[236]]== _0x5c29x3[0][_0xd587[236]]?_0x5c29x5[0][_0xd587[236]]= _0x5c29x4[_0xd587[2228]](_0x5c29xa)- _0x5c29x13:_0x5c29x5[0][_0xd587[235]]= _0x5c29x4[_0xd587[2230]](_0x5c29xa)- _0x5c29x12)}}else {0== _0x5c29x5[_0xd587[67]]&& (_0x5c29x5= [_0x5c29x2])};return _0x5c29x5};mxEdgeSegmentHandler[_0xd587[202]][_0xd587[3001]]= function(){var _0x5c29x2=[],_0x5c29x3=this[_0xd587[3009]](0);this[_0xd587[3002]](_0x5c29x3);_0x5c29x3[_0xd587[252]][_0xd587[124]][_0xd587[270]]= mxConstants[_0xd587[3011]];mxEvent[_0xd587[2733]](_0x5c29x3[_0xd587[252]],this[_0xd587[1179]],this[_0xd587[724]]);_0x5c29x2[_0xd587[207]](_0x5c29x3);mxClient[_0xd587[754]]&& _0x5c29x3[_0xd587[252]][_0xd587[57]](_0xd587[1377],_0xd587[130]);var _0x5c29x4=this[_0xd587[724]][_0xd587[439]];if(this[_0xd587[1179]][_0xd587[2662]](this[_0xd587[724]][_0xd587[246]])){null== this[_0xd587[1525]]&& (this[_0xd587[1525]]= []);for(var _0x5c29x5=0;_0x5c29x5< _0x5c29x4[_0xd587[67]]- 1;_0x5c29x5++){_0x5c29x3= this[_0xd587[3034]](),_0x5c29x2[_0xd587[207]](_0x5c29x3),_0x5c29x3[_0xd587[252]][_0xd587[124]][_0xd587[270]]= 0== _0x5c29x4[_0x5c29x5][_0xd587[235]]- _0x5c29x4[_0x5c29x5+ 1][_0xd587[235]]?_0xd587[3039]:_0xd587[3038],this[_0xd587[1525]][_0xd587[207]]( new mxPoint(0,0)),mxClient[_0xd587[754]]&& _0x5c29x3[_0xd587[252]][_0xd587[57]](_0xd587[1377],_0xd587[130])}};_0x5c29x3= this[_0xd587[3009]](_0x5c29x4[_0xd587[67]]);this[_0xd587[3002]](_0x5c29x3);_0x5c29x3[_0xd587[252]][_0xd587[124]][_0xd587[270]]= mxConstants[_0xd587[3011]];mxEvent[_0xd587[2733]](_0x5c29x3[_0xd587[252]],this[_0xd587[1179]],this[_0xd587[724]]);_0x5c29x2[_0xd587[207]](_0x5c29x3);mxClient[_0xd587[754]]&& _0x5c29x3[_0xd587[252]][_0xd587[57]](_0xd587[1377],_0xd587[130]);return _0x5c29x2};mxEdgeSegmentHandler[_0xd587[202]][_0xd587[258]]= function(){this[_0xd587[802]]();mxEdgeHandler[_0xd587[202]][_0xd587[258]][_0xd587[183]](this,arguments)};mxEdgeSegmentHandler[_0xd587[202]][_0xd587[802]]= function(){if(null!= this[_0xd587[2994]]){for(var _0x5c29x2=0;_0x5c29x2< this[_0xd587[2994]][_0xd587[67]];_0x5c29x2++){null!= this[_0xd587[2994]][_0x5c29x2]&& (this[_0xd587[2994]][_0x5c29x2][_0xd587[515]](),this[_0xd587[2994]][_0x5c29x2]= null)};this[_0xd587[2994]]= this[_0xd587[3001]]()}};mxEdgeSegmentHandler[_0xd587[202]][_0xd587[3030]]= function(_0x5c29x2,_0x5c29x3){if(this[_0xd587[1179]][_0xd587[2662]](this[_0xd587[724]][_0xd587[246]])){var _0x5c29x4=mxConstants[_0xd587[2974]],_0x5c29x5=this[_0xd587[724]][_0xd587[439]];if(null!= _0x5c29x5&& 1< _0x5c29x5[_0xd587[67]]){for(var _0x5c29x9=0;_0x5c29x9< this[_0xd587[724]][_0xd587[439]][_0xd587[67]]- 1;_0x5c29x9++){if(null!= this[_0xd587[2994]][_0x5c29x9+ 1]){_0x5c29x2= _0x5c29x5[_0x5c29x9];_0x5c29x3= _0x5c29x5[_0x5c29x9+ 1];var _0x5c29xa= new mxPoint(_0x5c29x2[_0xd587[235]]+ (_0x5c29x3[_0xd587[235]]- _0x5c29x2[_0xd587[235]])/ 2,_0x5c29x2[_0xd587[236]]+ (_0x5c29x3[_0xd587[236]]- _0x5c29x2[_0xd587[236]])/ 2);this[_0xd587[2994]][_0x5c29x9+ 1][_0xd587[1562]]= new mxRectangle(Math[_0xd587[488]](_0x5c29xa[_0xd587[235]]- _0x5c29x4/ 2),Math[_0xd587[488]](_0x5c29xa[_0xd587[236]]- _0x5c29x4/ 2),_0x5c29x4,_0x5c29x4);this[_0xd587[2994]][_0x5c29x9+ 1][_0xd587[258]]()}}}}};mxEdgeSegmentHandler[_0xd587[202]][_0xd587[3023]]= function(_0x5c29x2,_0x5c29x3){_0x5c29x3= [];var _0x5c29x4=this[_0xd587[2997]];if(1< _0x5c29x4[_0xd587[67]]){for(var _0x5c29x5=_0x5c29x4[0],_0x5c29x9=_0x5c29x4[1],_0x5c29xa=2;_0x5c29xa< _0x5c29x4[_0xd587[67]];_0x5c29xa++){var _0x5c29x12=_0x5c29x4[_0x5c29xa];if((Math[_0xd587[488]](_0x5c29x5[_0xd587[235]])!= Math[_0xd587[488]](_0x5c29x9[_0xd587[235]])|| Math[_0xd587[488]](_0x5c29x9[_0xd587[235]])!= Math[_0xd587[488]](_0x5c29x12[_0xd587[235]]))&& (Math[_0xd587[488]](_0x5c29x5[_0xd587[236]])!= Math[_0xd587[488]](_0x5c29x9[_0xd587[236]])|| Math[_0xd587[488]](_0x5c29x9[_0xd587[236]])!= Math[_0xd587[488]](_0x5c29x12[_0xd587[236]]))){_0x5c29x5= _0x5c29x9,_0x5c29x9= _0x5c29x9[_0xd587[238]](),this[_0xd587[2196]](_0x5c29x9,!1),_0x5c29x3[_0xd587[207]](_0x5c29x9)};_0x5c29x9= _0x5c29x12}};mxElbowEdgeHandler[_0xd587[202]][_0xd587[3023]][_0xd587[183]](this,arguments)};function mxKeyHandler(_0x5c29x2,_0x5c29x3){null!= _0x5c29x2&& (this[_0xd587[1179]]= _0x5c29x2,this[_0xd587[772]]= _0x5c29x3|| document[_0xd587[158]],this[_0xd587[3040]]= [],this[_0xd587[3041]]= [],this[_0xd587[3042]]= [],this[_0xd587[3043]]= [],mxEvent[_0xd587[169]](this[_0xd587[772]],_0xd587[2123],mxUtils[_0xd587[885]](this,function(_0x5c29x2){this[_0xd587[3044]](_0x5c29x2)})),mxClient[_0xd587[80]]&& mxEvent[_0xd587[169]](window,_0xd587[2428],mxUtils[_0xd587[885]](this,function(){this[_0xd587[515]]()})))}mxKeyHandler[_0xd587[202]][_0xd587[1179]]= null;mxKeyHandler[_0xd587[202]][_0xd587[772]]= null;mxKeyHandler[_0xd587[202]][_0xd587[3040]]= null;mxKeyHandler[_0xd587[202]][_0xd587[3041]]= null;mxKeyHandler[_0xd587[202]][_0xd587[3042]]= null;mxKeyHandler[_0xd587[202]][_0xd587[3043]]= null;mxKeyHandler[_0xd587[202]][_0xd587[984]]= !0;mxKeyHandler[_0xd587[202]][_0xd587[994]]= function(){return this[_0xd587[984]]};mxKeyHandler[_0xd587[202]][_0xd587[995]]= function(_0x5c29x2){this[_0xd587[984]]= _0x5c29x2};mxKeyHandler[_0xd587[202]][_0xd587[3045]]= function(_0x5c29x2,_0x5c29x3){this[_0xd587[3040]][_0x5c29x2]= _0x5c29x3};mxKeyHandler[_0xd587[202]][_0xd587[3046]]= function(_0x5c29x2,_0x5c29x3){this[_0xd587[3041]][_0x5c29x2]= _0x5c29x3};mxKeyHandler[_0xd587[202]][_0xd587[3047]]= function(_0x5c29x2,_0x5c29x3){this[_0xd587[3042]][_0x5c29x2]= _0x5c29x3};mxKeyHandler[_0xd587[202]][_0xd587[3048]]= function(_0x5c29x2,_0x5c29x3){this[_0xd587[3043]][_0x5c29x2]= _0x5c29x3};mxKeyHandler[_0xd587[202]][_0xd587[775]]= function(_0x5c29x2){return mxEvent[_0xd587[775]](_0x5c29x2)};mxKeyHandler[_0xd587[202]][_0xd587[3049]]= function(_0x5c29x2){return null!= _0x5c29x2?this[_0xd587[775]](_0x5c29x2)?mxEvent[_0xd587[774]](_0x5c29x2)?this[_0xd587[3043]][_0x5c29x2[_0xd587[2124]]]:this[_0xd587[3042]][_0x5c29x2[_0xd587[2124]]]:mxEvent[_0xd587[774]](_0x5c29x2)?this[_0xd587[3041]][_0x5c29x2[_0xd587[2124]]]:this[_0xd587[3040]][_0x5c29x2[_0xd587[2124]]]:null};mxKeyHandler[_0xd587[202]][_0xd587[3050]]= function(_0x5c29x2){_0x5c29x2= mxEvent[_0xd587[728]](_0x5c29x2);if(_0x5c29x2== this[_0xd587[772]]|| _0x5c29x2[_0xd587[265]]== this[_0xd587[772]]|| null!= this[_0xd587[1179]][_0xd587[2347]]&& _0x5c29x2== this[_0xd587[1179]][_0xd587[2347]][_0xd587[126]]){return !0};for(;null!= _0x5c29x2;){if(_0x5c29x2== this[_0xd587[1179]][_0xd587[526]]){return !0};_0x5c29x2= _0x5c29x2[_0xd587[265]]};return !1};mxKeyHandler[_0xd587[202]][_0xd587[3044]]= function(_0x5c29x2){if(this[_0xd587[1179]][_0xd587[994]]()&& !mxEvent[_0xd587[721]](_0x5c29x2)&& this[_0xd587[3050]](_0x5c29x2)&& this[_0xd587[994]]()){if(27== _0x5c29x2[_0xd587[2124]]){this[_0xd587[859]](_0x5c29x2)}else {if(!this[_0xd587[1179]][_0xd587[2203]]()){var _0x5c29x3=this[_0xd587[3049]](_0x5c29x2);null!= _0x5c29x3&& (_0x5c29x3(_0x5c29x2),mxEvent[_0xd587[722]](_0x5c29x2))}}}};mxKeyHandler[_0xd587[202]][_0xd587[859]]= function(_0x5c29x2){this[_0xd587[1179]][_0xd587[2608]]()&& this[_0xd587[1179]][_0xd587[859]](_0x5c29x2)};mxKeyHandler[_0xd587[202]][_0xd587[515]]= function(){this[_0xd587[772]]= null};function mxTooltipHandler(_0x5c29x2,_0x5c29x3){null!= _0x5c29x2&& (this[_0xd587[1179]]= _0x5c29x2,this[_0xd587[1140]]= _0x5c29x3|| 500,this[_0xd587[1179]][_0xd587[1133]](this))}mxTooltipHandler[_0xd587[202]][_0xd587[931]]= 10005;mxTooltipHandler[_0xd587[202]][_0xd587[1179]]= null;mxTooltipHandler[_0xd587[202]][_0xd587[1140]]= null;mxTooltipHandler[_0xd587[202]][_0xd587[3051]]= !1;mxTooltipHandler[_0xd587[202]][_0xd587[984]]= !0;mxTooltipHandler[_0xd587[202]][_0xd587[994]]= function(){return this[_0xd587[984]]};mxTooltipHandler[_0xd587[202]][_0xd587[995]]= function(_0x5c29x2){this[_0xd587[984]]= _0x5c29x2};mxTooltipHandler[_0xd587[202]][_0xd587[2277]]= function(){return this[_0xd587[3051]]};mxTooltipHandler[_0xd587[202]][_0xd587[3052]]= function(_0x5c29x2){this[_0xd587[3051]]= _0x5c29x2};mxTooltipHandler[_0xd587[202]][_0xd587[176]]= function(){null!= document[_0xd587[112]]&& (this[_0xd587[485]]= document[_0xd587[55]](_0xd587[485]),this[_0xd587[485]][_0xd587[926]]= _0xd587[3053],this[_0xd587[485]][_0xd587[124]][_0xd587[187]]= _0xd587[188],this[_0xd587[485]][_0xd587[124]][_0xd587[931]]= this[_0xd587[931]],document[_0xd587[112]][_0xd587[62]](this[_0xd587[485]]),mxEvent[_0xd587[169]](this[_0xd587[485]],_0xd587[751],mxUtils[_0xd587[885]](this,function(_0x5c29x2){this[_0xd587[3054]]()})))};mxTooltipHandler[_0xd587[202]][_0xd587[787]]= function(_0x5c29x2,_0x5c29x3){this[_0xd587[862]](_0x5c29x3,!1);this[_0xd587[3054]]()};mxTooltipHandler[_0xd587[202]][_0xd587[788]]= function(_0x5c29x2,_0x5c29x3){if(_0x5c29x3[_0xd587[730]]()!= this[_0xd587[1217]]|| _0x5c29x3[_0xd587[732]]()!= this[_0xd587[1218]]){this[_0xd587[862]](_0x5c29x3,!0),(this[_0xd587[2277]]()|| _0x5c29x3[_0xd587[248]]()!= this[_0xd587[724]]|| _0x5c29x3[_0xd587[728]]()!= this[_0xd587[252]]&& (!this[_0xd587[3055]]|| null!= _0x5c29x3[_0xd587[248]]()&& this[_0xd587[3055]]== (_0x5c29x3[_0xd587[729]](_0x5c29x3[_0xd587[248]]()[_0xd587[253]])|| !_0x5c29x3[_0xd587[729]](_0x5c29x3[_0xd587[248]]()[_0xd587[963]]))))&& this[_0xd587[3054]]()};this[_0xd587[1217]]= _0x5c29x3[_0xd587[730]]();this[_0xd587[1218]]= _0x5c29x3[_0xd587[732]]()};mxTooltipHandler[_0xd587[202]][_0xd587[789]]= function(_0x5c29x2,_0x5c29x3){this[_0xd587[862]](_0x5c29x3,!0);this[_0xd587[3054]]()};mxTooltipHandler[_0xd587[202]][_0xd587[3056]]= function(){null!= this[_0xd587[1123]]&& (window[_0xd587[2924]](this[_0xd587[1123]]),this[_0xd587[1123]]= null)};mxTooltipHandler[_0xd587[202]][_0xd587[862]]= function(_0x5c29x2,_0x5c29x3){this[_0xd587[3056]]();if(_0x5c29x3&& this[_0xd587[994]]()&& null!= _0x5c29x2[_0xd587[248]]()&& (null== this[_0xd587[485]]|| _0xd587[188]== this[_0xd587[485]][_0xd587[124]][_0xd587[187]])){var _0x5c29x4=_0x5c29x2[_0xd587[248]](),_0x5c29x5=_0x5c29x2[_0xd587[728]](),_0x5c29x9=_0x5c29x2[_0xd587[730]](),_0x5c29xa=_0x5c29x2[_0xd587[732]](),_0x5c29x12=_0x5c29x2[_0xd587[729]](_0x5c29x4[_0xd587[253]])|| _0x5c29x2[_0xd587[729]](_0x5c29x4[_0xd587[963]]);this[_0xd587[1123]]= window[_0xd587[261]](mxUtils[_0xd587[885]](this,function(){if(!this[_0xd587[1179]][_0xd587[2203]]()&& !this[_0xd587[1179]][_0xd587[2316]][_0xd587[1031]]()){var _0x5c29x2=this[_0xd587[1179]][_0xd587[2595]](_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa);this[_0xd587[539]](_0x5c29x2,_0x5c29x9,_0x5c29xa);this[_0xd587[724]]= _0x5c29x4;this[_0xd587[252]]= _0x5c29x5;this[_0xd587[3055]]= _0x5c29x12}}),this[_0xd587[1140]])}};mxTooltipHandler[_0xd587[202]][_0xd587[801]]= function(){this[_0xd587[3056]]();this[_0xd587[3054]]()};mxTooltipHandler[_0xd587[202]][_0xd587[3054]]= function(){null!= this[_0xd587[485]]&& (this[_0xd587[485]][_0xd587[124]][_0xd587[187]]= _0xd587[188])};mxTooltipHandler[_0xd587[202]][_0xd587[539]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){if(null!= _0x5c29x2&& 0< _0x5c29x2[_0xd587[67]]){null== this[_0xd587[485]]&& this[_0xd587[176]]();var _0x5c29x5=mxUtils[_0xd587[444]]();this[_0xd587[485]][_0xd587[124]][_0xd587[361]]= _0x5c29x3+ _0x5c29x5[_0xd587[235]]+ _0xd587[168];this[_0xd587[485]][_0xd587[124]][_0xd587[125]]= _0x5c29x4+ mxConstants[_0xd587[560]]+ _0x5c29x5[_0xd587[236]]+ _0xd587[168];mxUtils[_0xd587[1331]](_0x5c29x2)?(this[_0xd587[485]][_0xd587[339]]= _0xd587[110],this[_0xd587[485]][_0xd587[62]](_0x5c29x2)):this[_0xd587[485]][_0xd587[339]]= _0x5c29x2[_0xd587[230]](/\n/g,_0xd587[545]);this[_0xd587[485]][_0xd587[124]][_0xd587[187]]= _0xd587[110];mxUtils[_0xd587[933]](this[_0xd587[485]])}};mxTooltipHandler[_0xd587[202]][_0xd587[515]]= function(){this[_0xd587[1179]][_0xd587[1148]](this);mxEvent[_0xd587[762]](this[_0xd587[485]]);null!= this[_0xd587[485]]&& null!= this[_0xd587[485]][_0xd587[265]]&& this[_0xd587[485]][_0xd587[265]][_0xd587[266]](this[_0xd587[485]]);this[_0xd587[485]]= null};function mxCellTracker(_0x5c29x2,_0x5c29x3,_0x5c29x4){mxCellMarker[_0xd587[239]](this,_0x5c29x2,_0x5c29x3);this[_0xd587[1179]][_0xd587[1133]](this);null!= _0x5c29x4&& (this[_0xd587[736]]= _0x5c29x4);mxClient[_0xd587[80]]&& mxEvent[_0xd587[169]](window,_0xd587[2428],mxUtils[_0xd587[885]](this,function(){this[_0xd587[515]]()}))}mxUtils[_0xd587[1284]](mxCellTracker,mxCellMarker);mxCellTracker[_0xd587[202]][_0xd587[787]]= function(_0x5c29x2,_0x5c29x3){};mxCellTracker[_0xd587[202]][_0xd587[788]]= function(_0x5c29x2,_0x5c29x3){this[_0xd587[994]]()&& this[_0xd587[2871]](_0x5c29x3)};mxCellTracker[_0xd587[202]][_0xd587[789]]= function(_0x5c29x2,_0x5c29x3){this[_0xd587[862]]()};mxCellTracker[_0xd587[202]][_0xd587[515]]= function(){this[_0xd587[2717]]|| (this[_0xd587[2717]]= !0,this[_0xd587[1179]][_0xd587[1148]](this),mxCellMarker[_0xd587[202]][_0xd587[515]][_0xd587[183]](this))};function mxCellHighlight(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){null!= _0x5c29x2&& (this[_0xd587[1179]]= _0x5c29x2,this[_0xd587[2943]]= null!= _0x5c29x3?_0x5c29x3:mxConstants[_0xd587[2854]],this[_0xd587[610]]= null!= _0x5c29x4?_0x5c29x4:mxConstants[_0xd587[3057]],this[_0xd587[648]]= null!= _0x5c29x5?_0x5c29x5:!1,this[_0xd587[3058]]= mxUtils[_0xd587[885]](this,function(){this[_0xd587[2950]]()}),this[_0xd587[1179]][_0xd587[249]]()[_0xd587[169]](mxEvent.SCALE,this[_0xd587[3058]]),this[_0xd587[1179]][_0xd587[249]]()[_0xd587[169]](mxEvent.TRANSLATE,this[_0xd587[3058]]),this[_0xd587[1179]][_0xd587[249]]()[_0xd587[169]](mxEvent.SCALE_AND_TRANSLATE,this[_0xd587[3058]]),this[_0xd587[1179]][_0xd587[502]]()[_0xd587[169]](mxEvent.CHANGE,this[_0xd587[3058]]),this[_0xd587[2877]]= mxUtils[_0xd587[885]](this,function(){this[_0xd587[801]]()}),this[_0xd587[1179]][_0xd587[249]]()[_0xd587[169]](mxEvent.DOWN,this[_0xd587[2877]]),this[_0xd587[1179]][_0xd587[249]]()[_0xd587[169]](mxEvent.UP,this[_0xd587[2877]]))}mxCellHighlight[_0xd587[202]][_0xd587[3059]]= !1;mxCellHighlight[_0xd587[202]][_0xd587[1179]]= !0;mxCellHighlight[_0xd587[202]][_0xd587[724]]= null;mxCellHighlight[_0xd587[202]][_0xd587[657]]= 2;mxCellHighlight[_0xd587[202]][_0xd587[2877]]= null;mxCellHighlight[_0xd587[202]][_0xd587[2828]]= function(_0x5c29x2){this[_0xd587[2943]]= _0x5c29x2;null!= this[_0xd587[253]]&& (this[_0xd587[253]][_0xd587[1336]]= _0x5c29x2)};mxCellHighlight[_0xd587[202]][_0xd587[3060]]= function(){this[_0xd587[253]]= this[_0xd587[2156]]();this[_0xd587[2950]]();!this[_0xd587[3059]]&& this[_0xd587[253]][_0xd587[252]][_0xd587[265]][_0xd587[285]]!= this[_0xd587[253]][_0xd587[252]]&& this[_0xd587[253]][_0xd587[252]][_0xd587[265]][_0xd587[950]](this[_0xd587[253]][_0xd587[252]],this[_0xd587[253]][_0xd587[252]][_0xd587[265]][_0xd587[285]])};mxCellHighlight[_0xd587[202]][_0xd587[2156]]= function(){var _0x5c29x2=null,_0x5c29x2=this[_0xd587[1179]][_0xd587[251]][_0xd587[250]](this[_0xd587[724]][_0xd587[246]])? new mxPolyline(this[_0xd587[724]][_0xd587[439]],this[_0xd587[2943]],this[_0xd587[610]]): new mxRectangleShape( new mxRectangle,null,this[_0xd587[2943]],this[_0xd587[610]]);_0x5c29x2[_0xd587[507]]= this[_0xd587[1179]][_0xd587[507]]!= mxConstants[_0xd587[508]]?mxConstants[_0xd587[1523]]:mxConstants[_0xd587[508]];_0x5c29x2[_0xd587[176]](this[_0xd587[1179]][_0xd587[249]]()[_0xd587[1524]]());mxEvent[_0xd587[2733]](_0x5c29x2[_0xd587[252]],this[_0xd587[1179]],this[_0xd587[724]]);_0x5c29x2[_0xd587[1564]]= 0;_0x5c29x2[_0xd587[1229]]= !1;_0x5c29x2[_0xd587[1522]]= this[_0xd587[648]];return _0x5c29x2};mxCellHighlight[_0xd587[202]][_0xd587[2950]]= function(){if(null!= this[_0xd587[724]]&& null!= this[_0xd587[253]]){var _0x5c29x2=0;this[_0xd587[1179]][_0xd587[251]][_0xd587[250]](this[_0xd587[724]][_0xd587[246]])?this[_0xd587[253]][_0xd587[1525]]= this[_0xd587[724]][_0xd587[439]]:(this[_0xd587[253]][_0xd587[1562]]= new mxRectangle(this[_0xd587[724]][_0xd587[235]]- this[_0xd587[657]],this[_0xd587[724]][_0xd587[236]]- this[_0xd587[657]],this[_0xd587[724]][_0xd587[117]]+ 2* this[_0xd587[657]],this[_0xd587[724]][_0xd587[119]]+ 2* this[_0xd587[657]]),_0x5c29x2= Number(this[_0xd587[724]][_0xd587[124]][mxConstants[_0xd587[2278]]]|| _0xd587[468]));null!= this[_0xd587[724]][_0xd587[253]]&& this[_0xd587[253]][_0xd587[1609]](this[_0xd587[724]][_0xd587[253]][_0xd587[1610]]());0!= _0x5c29x2&& (this[_0xd587[253]][_0xd587[603]]= _0x5c29x2);this[_0xd587[253]][_0xd587[258]]()}};mxCellHighlight[_0xd587[202]][_0xd587[801]]= function(){this[_0xd587[1016]](null)};mxCellHighlight[_0xd587[202]][_0xd587[1016]]= function(_0x5c29x2){this[_0xd587[724]]!= _0x5c29x2&& (null!= this[_0xd587[253]]&& (this[_0xd587[253]][_0xd587[515]](),this[_0xd587[253]]= null),this[_0xd587[724]]= _0x5c29x2,null!= this[_0xd587[724]]&& this[_0xd587[3060]]())};mxCellHighlight[_0xd587[202]][_0xd587[515]]= function(){this[_0xd587[1179]][_0xd587[249]]()[_0xd587[745]](this[_0xd587[3058]]);this[_0xd587[1179]][_0xd587[502]]()[_0xd587[745]](this[_0xd587[3058]]);this[_0xd587[1179]][_0xd587[249]]()[_0xd587[745]](this[_0xd587[2877]]);this[_0xd587[1179]][_0xd587[502]]()[_0xd587[745]](this[_0xd587[2877]]);null!= this[_0xd587[253]]&& (this[_0xd587[253]][_0xd587[515]](),this[_0xd587[253]]= null)};function mxDefaultKeyHandler(_0x5c29x2){if(null!= _0x5c29x2){this[_0xd587[3061]]= _0x5c29x2;this[_0xd587[2458]]= new mxKeyHandler(_0x5c29x2[_0xd587[1179]]);var _0x5c29x3=this[_0xd587[2458]][_0xd587[859]];this[_0xd587[2458]][_0xd587[859]]= function(_0x5c29x4){_0x5c29x3[_0xd587[183]](this,arguments);_0x5c29x2[_0xd587[3062]]();_0x5c29x2[_0xd587[746]]( new mxEventObject(mxEvent.ESCAPE,_0xd587[763],_0x5c29x4))}}}mxDefaultKeyHandler[_0xd587[202]][_0xd587[3061]]= null;mxDefaultKeyHandler[_0xd587[202]][_0xd587[2458]]= null;mxDefaultKeyHandler[_0xd587[202]][_0xd587[3063]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){var _0x5c29x5=mxUtils[_0xd587[885]](this,function(){this[_0xd587[3061]][_0xd587[350]](_0x5c29x3)});_0x5c29x4?this[_0xd587[2458]][_0xd587[3047]](_0x5c29x2,_0x5c29x5):this[_0xd587[2458]][_0xd587[3045]](_0x5c29x2,_0x5c29x5)};mxDefaultKeyHandler[_0xd587[202]][_0xd587[515]]= function(){this[_0xd587[2458]][_0xd587[515]]();this[_0xd587[2458]]= null};function mxDefaultPopupMenu(_0x5c29x2){this[_0xd587[3064]]= _0x5c29x2}mxDefaultPopupMenu[_0xd587[202]][_0xd587[88]]= null;mxDefaultPopupMenu[_0xd587[202]][_0xd587[3064]]= null;mxDefaultPopupMenu[_0xd587[202]][_0xd587[3065]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){if(null!= this[_0xd587[3064]]){var _0x5c29x9=this[_0xd587[3066]](_0x5c29x2,_0x5c29x4,_0x5c29x5);this[_0xd587[3067]](_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,this[_0xd587[3064]][_0xd587[285]],null)}};mxDefaultPopupMenu[_0xd587[202]][_0xd587[3067]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa,_0x5c29x12){for(var _0x5c29x13=!1;null!= _0x5c29xa;){if(_0xd587[99]== _0x5c29xa[_0xd587[301]]){var _0x5c29x14=_0x5c29xa[_0xd587[284]](_0xd587[3068]);if(null== _0x5c29x14|| _0x5c29x9[_0x5c29x14]){var _0x5c29x14=_0x5c29xa[_0xd587[284]](_0xd587[3069]),_0x5c29x14=mxResources[_0xd587[203]](_0x5c29x14)|| _0x5c29x14,_0x5c29x15=mxUtils[_0xd587[1545]](mxUtils[_0xd587[329]](_0x5c29xa)),_0x5c29x16=_0x5c29xa[_0xd587[284]](_0xd587[892]),_0x5c29x17=_0x5c29xa[_0xd587[284]](_0xd587[2916]),_0x5c29x18=_0x5c29xa[_0xd587[284]](_0xd587[3070]);_0x5c29x13&& (_0x5c29x3[_0xd587[1051]](_0x5c29x12),_0x5c29x13= !1);null!= _0x5c29x17&& this[_0xd587[88]]&& (_0x5c29x17= this[_0xd587[88]]+ _0x5c29x17);_0x5c29x14= this[_0xd587[3071]](_0x5c29x3,_0x5c29x2,_0x5c29x14,_0x5c29x17,_0x5c29x15,_0x5c29x16,_0x5c29x4,_0x5c29x12,_0x5c29x18);this[_0xd587[3067]](_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa[_0xd587[285]],_0x5c29x14)}}else {_0xd587[3072]== _0x5c29xa[_0xd587[301]]&& (_0x5c29x13= !0)};_0x5c29xa= _0x5c29xa[_0xd587[287]]}};mxDefaultPopupMenu[_0xd587[202]][_0xd587[3071]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa,_0x5c29x12,_0x5c29x13,_0x5c29x14){return _0x5c29x2[_0xd587[1025]](_0x5c29x4,_0x5c29x5,function(_0x5c29x2){_0xd587[279]== typeof _0x5c29x9&& _0x5c29x9[_0xd587[239]](_0x5c29x3,_0x5c29x3,_0x5c29x12,_0x5c29x2);null!= _0x5c29xa&& _0x5c29x3[_0xd587[350]](_0x5c29xa,_0x5c29x12,_0x5c29x2)},_0x5c29x13,_0x5c29x14)};mxDefaultPopupMenu[_0xd587[202]][_0xd587[3066]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){var _0x5c29x5=_0x5c29x2[_0xd587[1179]][_0xd587[502]](),_0x5c29x9=_0x5c29x5[_0xd587[262]](_0x5c29x3),_0x5c29xa=[];_0x5c29xa[_0xd587[3073]]= null== _0x5c29x3;_0x5c29xa[_0xd587[3074]]= 1< _0x5c29x2[_0xd587[1179]][_0xd587[2694]]();_0x5c29xa[_0xd587[3075]]= _0x5c29x5[_0xd587[501]]()!= _0x5c29x5[_0xd587[1197]](_0x5c29x2[_0xd587[1179]][_0xd587[902]]());_0x5c29xa[_0xd587[246]]= null!= _0x5c29x3;_0x5c29x5= null!= _0x5c29x3&& 1== _0x5c29x2[_0xd587[1179]][_0xd587[2694]]();_0x5c29xa[_0xd587[3076]]= _0x5c29x5&& 0< _0x5c29x9;_0x5c29xa[_0xd587[3077]]= _0x5c29x5&& _0x5c29x2[_0xd587[1179]][_0xd587[2516]](_0x5c29x3,!1);_0x5c29xa[_0xd587[3078]]= _0x5c29x5&& _0x5c29x2[_0xd587[1179]][_0xd587[2516]](_0x5c29x3,!0);_0x5c29xa[_0xd587[3079]]= _0x5c29x5&& _0x5c29x2[_0xd587[1179]][_0xd587[2553]](_0x5c29x3);_0x5c29xa[_0xd587[3080]]= _0x5c29xa[_0xd587[3079]]&& 0== _0x5c29x9;_0x5c29xa[_0xd587[687]]= _0x5c29x5&& _0x5c29x2[_0xd587[1179]][_0xd587[1730]](_0x5c29x3);_0x5c29x9= this[_0xd587[3064]][_0xd587[64]](_0xd587[3081]);for(_0x5c29x5= 0;_0x5c29x5< _0x5c29x9[_0xd587[67]];_0x5c29x5++){var _0x5c29x12=mxUtils[_0xd587[1545]](mxUtils[_0xd587[329]](_0x5c29x9[_0x5c29x5])),_0x5c29x13=_0x5c29x9[_0x5c29x5][_0xd587[284]](_0xd587[298]);null!= _0x5c29x13&& _0xd587[279]== typeof _0x5c29x12&& (_0x5c29xa[_0x5c29x13]= _0x5c29x12(_0x5c29x2,_0x5c29x3,_0x5c29x4))};return _0x5c29xa};function mxDefaultToolbar(_0x5c29x2,_0x5c29x3){this[_0xd587[3061]]= _0x5c29x3;null!= _0x5c29x2&& null!= _0x5c29x3&& this[_0xd587[176]](_0x5c29x2)}mxDefaultToolbar[_0xd587[202]][_0xd587[3061]]= null;mxDefaultToolbar[_0xd587[202]][_0xd587[3082]]= null;mxDefaultToolbar[_0xd587[202]][_0xd587[2877]]= null;mxDefaultToolbar[_0xd587[202]][_0xd587[657]]= 4;mxDefaultToolbar[_0xd587[202]][_0xd587[2804]]= !1;mxDefaultToolbar[_0xd587[202]][_0xd587[176]]= function(_0x5c29x2){null!= _0x5c29x2&& (this[_0xd587[3082]]= new mxToolbar(_0x5c29x2),this[_0xd587[3082]][_0xd587[169]](mxEvent.SELECT,mxUtils[_0xd587[885]](this,function(_0x5c29x2,_0x5c29x4){var _0x5c29x5=_0x5c29x4[_0xd587[720]](_0xd587[279]);this[_0xd587[3061]][_0xd587[3083]]= null!= _0x5c29x5?mxUtils[_0xd587[885]](this,function(){_0x5c29x5[_0xd587[183]](this,arguments);this[_0xd587[3082]][_0xd587[1050]]()}):null})),this[_0xd587[2877]]= mxUtils[_0xd587[885]](this,function(){null!= this[_0xd587[3082]]&& this[_0xd587[3082]][_0xd587[1050]](!0)}),this[_0xd587[3061]][_0xd587[1179]][_0xd587[169]](mxEvent.DOUBLE_CLICK,this[_0xd587[2877]]),this[_0xd587[3061]][_0xd587[169]](mxEvent.ESCAPE,this[_0xd587[2877]]))};mxDefaultToolbar[_0xd587[202]][_0xd587[1025]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){var _0x5c29x9=mxUtils[_0xd587[885]](this,function(){null!= _0x5c29x4&& 0< _0x5c29x4[_0xd587[67]]&& this[_0xd587[3061]][_0xd587[350]](_0x5c29x4)});return this[_0xd587[3082]][_0xd587[1025]](_0x5c29x2,_0x5c29x3,_0x5c29x9,_0x5c29x5)};mxDefaultToolbar[_0xd587[202]][_0xd587[1051]]= function(_0x5c29x2){_0x5c29x2= _0x5c29x2|| mxClient[_0xd587[88]]+ _0xd587[3084];this[_0xd587[3082]][_0xd587[1051]](_0x5c29x2)};mxDefaultToolbar[_0xd587[202]][_0xd587[970]]= function(){return this[_0xd587[3082]][_0xd587[970]]()};mxDefaultToolbar[_0xd587[202]][_0xd587[1038]]= function(_0x5c29x2){return this[_0xd587[3082]][_0xd587[1038]](_0x5c29x2)};mxDefaultToolbar[_0xd587[202]][_0xd587[3085]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){var _0x5c29x5=mxUtils[_0xd587[885]](this,function(){this[_0xd587[3061]][_0xd587[350]](_0x5c29x4)});this[_0xd587[972]](_0x5c29x2,_0x5c29x3,_0x5c29x5)};mxDefaultToolbar[_0xd587[202]][_0xd587[972]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){return this[_0xd587[3082]][_0xd587[972]](_0x5c29x2,_0x5c29x3,_0x5c29x4)};mxDefaultToolbar[_0xd587[202]][_0xd587[1048]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){var _0x5c29xa=mxUtils[_0xd587[885]](this,function(){this[_0xd587[3061]][_0xd587[3086]](_0x5c29x4);null!= _0x5c29x9&& _0x5c29x9(this[_0xd587[3061]])});return this[_0xd587[3082]][_0xd587[1042]](_0x5c29x2,_0x5c29x3,_0x5c29xa,_0x5c29x5)};mxDefaultToolbar[_0xd587[202]][_0xd587[3087]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9,_0x5c29xa){var _0x5c29x12=function(){return _0xd587[279]== typeof _0x5c29x4?_0x5c29x4():null!= _0x5c29x4?_0x5c29x4[_0xd587[238]]():null},_0x5c29x13=mxUtils[_0xd587[885]](this,function(_0x5c29x2,_0x5c29x3){_0xd587[279]== typeof _0x5c29x9?_0x5c29x9(this[_0xd587[3061]],_0x5c29x12(),_0x5c29x2,_0x5c29x3):this[_0xd587[1008]](_0x5c29x12(),_0x5c29x2,_0x5c29x3);this[_0xd587[3082]][_0xd587[1050]]();mxEvent[_0xd587[722]](_0x5c29x2)});_0x5c29x2= this[_0xd587[3082]][_0xd587[1048]](_0x5c29x2,_0x5c29x3,_0x5c29x13,_0x5c29x5,null,_0x5c29xa);this[_0xd587[3088]](_0x5c29x2,function(_0x5c29x2,_0x5c29x3,_0x5c29x4){_0x5c29x13(_0x5c29x3,_0x5c29x4)});return _0x5c29x2};mxDefaultToolbar[_0xd587[202]][_0xd587[1008]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){var _0x5c29x5=this[_0xd587[3061]][_0xd587[1179]],_0x5c29x9=_0x5c29x5[_0xd587[502]]();if(null== _0x5c29x4|| _0x5c29x9[_0xd587[250]](_0x5c29x4)|| !this[_0xd587[2804]]|| !_0x5c29x5[_0xd587[2565]](_0x5c29x4)){for(;null!= _0x5c29x4&& !_0x5c29x5[_0xd587[2685]](_0x5c29x4,[_0x5c29x2],_0x5c29x3);){_0x5c29x4= _0x5c29x9[_0xd587[1197]](_0x5c29x4)};this[_0xd587[1937]](_0x5c29x2,_0x5c29x3,_0x5c29x4)}else {this[_0xd587[807]](_0x5c29x2,_0x5c29x3,_0x5c29x4)}};mxDefaultToolbar[_0xd587[202]][_0xd587[1937]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){var _0x5c29x5=this[_0xd587[3061]][_0xd587[1179]];if(_0x5c29x5[_0xd587[2621]](_0x5c29x2)){var _0x5c29x9=mxEvent[_0xd587[731]](_0x5c29x3),_0x5c29xa=mxEvent[_0xd587[733]](_0x5c29x3),_0x5c29x9=mxUtils[_0xd587[2196]](_0x5c29x5[_0xd587[526]],_0x5c29x9,_0x5c29xa);return _0x5c29x5[_0xd587[2655]]()&& _0x5c29x5[_0xd587[2686]](_0x5c29x4,[_0x5c29x2],_0x5c29x3)?_0x5c29x5[_0xd587[853]](_0x5c29x4,[_0x5c29x2],null,_0x5c29x9[_0xd587[235]],_0x5c29x9[_0xd587[236]]):this[_0xd587[3061]][_0xd587[817]](_0x5c29x4,_0x5c29x2,_0x5c29x9[_0xd587[235]],_0x5c29x9[_0xd587[236]])};return null};mxDefaultToolbar[_0xd587[202]][_0xd587[807]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){_0x5c29x3= this[_0xd587[3061]][_0xd587[1179]];var _0x5c29x5=_0x5c29x3[_0xd587[502]]();if(null!= _0x5c29x4&& _0x5c29x3[_0xd587[2565]](_0x5c29x2)&& _0x5c29x3[_0xd587[2581]](null,_0x5c29x4,_0x5c29x2)){var _0x5c29x9=null;_0x5c29x5[_0xd587[473]]();try{var _0x5c29xa=_0x5c29x5[_0xd587[1721]](_0x5c29x4),_0x5c29x12=_0x5c29x5[_0xd587[1721]](_0x5c29x2)[_0xd587[238]]();_0x5c29x12[_0xd587[235]]= _0x5c29xa[_0xd587[235]]+ (_0x5c29xa[_0xd587[117]]- _0x5c29x12[_0xd587[117]])/ 2;_0x5c29x12[_0xd587[236]]= _0x5c29xa[_0xd587[236]]+ (_0x5c29xa[_0xd587[119]]- _0x5c29x12[_0xd587[119]])/ 2;var _0x5c29x13=this[_0xd587[657]]* _0x5c29x3[_0xd587[1020]],_0x5c29x14=20* _0x5c29x5[_0xd587[1962]](_0x5c29x4,!0);this[_0xd587[3061]][_0xd587[3089]]?_0x5c29x12[_0xd587[235]]+= (_0x5c29x12[_0xd587[117]]+ _0x5c29xa[_0xd587[117]])/ 2+ _0x5c29x13+ _0x5c29x14:_0x5c29x12[_0xd587[236]]+= (_0x5c29x12[_0xd587[119]]+ _0x5c29xa[_0xd587[119]])/ 2+ _0x5c29x13+ _0x5c29x14;_0x5c29x2[_0xd587[1724]](_0x5c29x12);var _0x5c29x15=_0x5c29x5[_0xd587[1197]](_0x5c29x4);_0x5c29x3[_0xd587[2103]](_0x5c29x2,_0x5c29x15);_0x5c29x3[_0xd587[2509]](_0x5c29x2);_0x5c29x9= this[_0xd587[3061]][_0xd587[2503]](_0x5c29x4,_0x5c29x2);if(null== _0x5c29x5[_0xd587[1721]](_0x5c29x9)){var _0x5c29x16= new mxGeometry;_0x5c29x16[_0xd587[1500]]= !0;_0x5c29x5[_0xd587[1724]](_0x5c29x9,_0x5c29x16)};_0x5c29x3[_0xd587[2504]](_0x5c29x9,_0x5c29x15,_0x5c29x4,_0x5c29x2)}finally{_0x5c29x5[_0xd587[476]]()};_0x5c29x3[_0xd587[904]]([_0x5c29x2,_0x5c29x9]);_0x5c29x3[_0xd587[2564]](_0x5c29x2)}};mxDefaultToolbar[_0xd587[202]][_0xd587[3088]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=document[_0xd587[55]](_0xd587[466]);_0x5c29x4[_0xd587[57]](_0xd587[390],_0x5c29x2[_0xd587[284]](_0xd587[390]));var _0x5c29x5=mxUtils[_0xd587[885]](this,function(_0x5c29x9){_0x5c29x4[_0xd587[124]][_0xd587[117]]= 2* _0x5c29x2[_0xd587[359]]+ _0xd587[168];_0x5c29x4[_0xd587[124]][_0xd587[119]]= 2* _0x5c29x2[_0xd587[167]]+ _0xd587[168];mxUtils[_0xd587[3090]](_0x5c29x2,this[_0xd587[3061]][_0xd587[1179]],_0x5c29x3,_0x5c29x4);mxEvent[_0xd587[745]](_0x5c29x4,_0xd587[219],_0x5c29x5)});mxClient[_0xd587[80]]?_0x5c29x5():mxEvent[_0xd587[169]](_0x5c29x4,_0xd587[219],_0x5c29x5)};mxDefaultToolbar[_0xd587[202]][_0xd587[515]]= function(){null!= this[_0xd587[2877]]&& (this[_0xd587[3061]][_0xd587[1179]][_0xd587[745]](_0xd587[760],this[_0xd587[2877]]),this[_0xd587[3061]][_0xd587[745]](_0xd587[859],this[_0xd587[2877]]),this[_0xd587[2877]]= null);null!= this[_0xd587[3082]]&& (this[_0xd587[3082]][_0xd587[515]](),this[_0xd587[3082]]= null)};function mxEditor(_0x5c29x2){this[_0xd587[3091]]= [];this[_0xd587[3092]]();if(null!= document[_0xd587[112]]){this[_0xd587[3093]]= [];this[_0xd587[3094]]= new mxDefaultPopupMenu;this[_0xd587[3095]]= new mxUndoManager;this[_0xd587[1179]]= this[_0xd587[3096]]();this[_0xd587[3082]]= this[_0xd587[3097]]();this[_0xd587[3098]]= new mxDefaultKeyHandler(this);this[_0xd587[3099]](_0x5c29x2);this[_0xd587[1179]][_0xd587[2180]]= this[_0xd587[3100]];!mxClient[_0xd587[3101]]&& null!= this[_0xd587[1056]]&& (this[_0xd587[812]]= this[_0xd587[3102]]());if(null!= this[_0xd587[1987]]){this[_0xd587[1987]]()};mxClient[_0xd587[80]]&& mxEvent[_0xd587[169]](window,_0xd587[2428],mxUtils[_0xd587[885]](this,function(){this[_0xd587[515]]()}))}}mxLoadResources&& mxResources[_0xd587[99]](mxClient[_0xd587[86]]+ _0xd587[3103]);mxEditor[_0xd587[202]]= new mxEventSource;mxEditor[_0xd587[202]][_0xd587[196]]= mxEditor;mxEditor[_0xd587[202]][_0xd587[3104]]= _0xd587[130]!= mxClient[_0xd587[90]]?_0xd587[3105]:_0xd587[110];mxEditor[_0xd587[202]][_0xd587[3106]]= _0xd587[130]!= mxClient[_0xd587[90]]?_0xd587[3107]:_0xd587[110];mxEditor[_0xd587[202]][_0xd587[3108]]= _0xd587[130]!= mxClient[_0xd587[90]]?_0xd587[3109]:_0xd587[110];mxEditor[_0xd587[202]][_0xd587[3110]]= _0xd587[130]!= mxClient[_0xd587[90]]?_0xd587[716]:_0xd587[110];mxEditor[_0xd587[202]][_0xd587[3111]]= _0xd587[130]!= mxClient[_0xd587[90]]?_0xd587[3112]:_0xd587[110];mxEditor[_0xd587[202]][_0xd587[3113]]= _0xd587[130]!= mxClient[_0xd587[90]]?_0xd587[2719]:_0xd587[110];mxEditor[_0xd587[202]][_0xd587[3114]]= _0xd587[130]!= mxClient[_0xd587[90]]?_0xd587[2136]:_0xd587[110];mxEditor[_0xd587[202]][_0xd587[2136]]= null;mxEditor[_0xd587[202]][_0xd587[1179]]= null;mxEditor[_0xd587[202]][_0xd587[2720]]= null;mxEditor[_0xd587[202]][_0xd587[3082]]= null;mxEditor[_0xd587[202]][_0xd587[812]]= null;mxEditor[_0xd587[202]][_0xd587[879]]= null;mxEditor[_0xd587[202]][_0xd587[3094]]= null;mxEditor[_0xd587[202]][_0xd587[3095]]= null;mxEditor[_0xd587[202]][_0xd587[3098]]= null;mxEditor[_0xd587[202]][_0xd587[3091]]= null;mxEditor[_0xd587[202]][_0xd587[3115]]= _0xd587[1061];mxEditor[_0xd587[202]][_0xd587[3116]]= !1;mxEditor[_0xd587[202]][_0xd587[1157]]= !0;mxEditor[_0xd587[202]][_0xd587[3083]]= null;mxEditor[_0xd587[202]][_0xd587[3117]]= !1;mxEditor[_0xd587[202]][_0xd587[3118]]= null;mxEditor[_0xd587[202]][_0xd587[2075]]= null;mxEditor[_0xd587[202]][_0xd587[3119]]= null;mxEditor[_0xd587[202]][_0xd587[3120]]= null;mxEditor[_0xd587[202]][_0xd587[3121]]= null;mxEditor[_0xd587[202]][_0xd587[3122]]= null;mxEditor[_0xd587[202]][_0xd587[1069]]= _0xd587[336];mxEditor[_0xd587[202]][_0xd587[3123]]= _0xd587[338];mxEditor[_0xd587[202]][_0xd587[1070]]= !0;mxEditor[_0xd587[202]][_0xd587[3124]]= null;mxEditor[_0xd587[202]][_0xd587[3125]]= null;mxEditor[_0xd587[202]][_0xd587[1056]]= null;mxEditor[_0xd587[202]][_0xd587[1058]]= null;mxEditor[_0xd587[202]][_0xd587[1057]]= null;mxEditor[_0xd587[202]][_0xd587[3089]]= !1;mxEditor[_0xd587[202]][_0xd587[3126]]= !1;mxEditor[_0xd587[202]][_0xd587[3127]]= 0;mxEditor[_0xd587[202]][_0xd587[3128]]= !1;mxEditor[_0xd587[202]][_0xd587[3129]]= !1;mxEditor[_0xd587[202]][_0xd587[3093]]= null;mxEditor[_0xd587[202]][_0xd587[3130]]= 0;mxEditor[_0xd587[202]][_0xd587[3100]]= _0xd587[604];mxEditor[_0xd587[202]][_0xd587[3112]]= null;mxEditor[_0xd587[202]][_0xd587[3131]]= null;mxEditor[_0xd587[202]][_0xd587[3132]]= 20;mxEditor[_0xd587[202]][_0xd587[2719]]= null;mxEditor[_0xd587[202]][_0xd587[3133]]= null;mxEditor[_0xd587[202]][_0xd587[3134]]= null;mxEditor[_0xd587[202]][_0xd587[3135]]= 300;mxEditor[_0xd587[202]][_0xd587[3136]]= 260;mxEditor[_0xd587[202]][_0xd587[3137]]= 240;mxEditor[_0xd587[202]][_0xd587[3138]]= null;mxEditor[_0xd587[202]][_0xd587[3139]]= !1;mxEditor[_0xd587[202]][_0xd587[3140]]= !1;mxEditor[_0xd587[202]][_0xd587[2113]]= !1;mxEditor[_0xd587[202]][_0xd587[2133]]= function(){return this[_0xd587[2113]]};mxEditor[_0xd587[202]][_0xd587[2128]]= function(_0x5c29x2){this[_0xd587[2113]]= _0x5c29x2};mxEditor[_0xd587[202]][_0xd587[3092]]= function(){this[_0xd587[3071]](_0xd587[815],function(_0x5c29x2){_0x5c29x2[_0xd587[815]]()});this[_0xd587[3071]](_0xd587[540],function(_0x5c29x2){( new mxPrintPreview(_0x5c29x2[_0xd587[1179]],1))[_0xd587[392]]()});this[_0xd587[3071]](_0xd587[539],function(_0x5c29x2){mxUtils[_0xd587[539]](_0x5c29x2[_0xd587[1179]],null,10,10)});this[_0xd587[3071]](_0xd587[3141],function(_0x5c29x2){var _0x5c29x3=_0x5c29x2[_0xd587[3142]]();if(null== _0x5c29x3|| mxClient[_0xd587[3101]]){_0x5c29x2[_0xd587[350]](_0xd587[539])}else {var _0x5c29x4=mxUtils[_0xd587[3143]](_0x5c29x2[_0xd587[1179]],1),_0x5c29x4=mxUtils[_0xd587[875]](_0x5c29x4,_0xd587[192]);mxUtils[_0xd587[894]](_0x5c29x3,_0x5c29x2[_0xd587[3123]]+ _0xd587[226]+ encodeURIComponent(_0x5c29x4),document,_0xd587[3144])}});this[_0xd587[3071]](_0xd587[802],function(_0x5c29x2){_0x5c29x2[_0xd587[1179]][_0xd587[802]]()});this[_0xd587[3071]](_0xd587[3145],function(_0x5c29x2){_0x5c29x2[_0xd587[1179]][_0xd587[994]]()&& mxClipboard[_0xd587[3145]](_0x5c29x2[_0xd587[1179]])});this[_0xd587[3071]](_0xd587[149],function(_0x5c29x2){_0x5c29x2[_0xd587[1179]][_0xd587[994]]()&& mxClipboard[_0xd587[149]](_0x5c29x2[_0xd587[1179]])});this[_0xd587[3071]](_0xd587[3146],function(_0x5c29x2){_0x5c29x2[_0xd587[1179]][_0xd587[994]]()&& mxClipboard[_0xd587[3146]](_0x5c29x2[_0xd587[1179]])});this[_0xd587[3071]](_0xd587[3147],function(_0x5c29x2){_0x5c29x2[_0xd587[1179]][_0xd587[994]]()&& _0x5c29x2[_0xd587[1179]][_0xd587[842]]()});this[_0xd587[3071]](_0xd587[1504],function(_0x5c29x2){_0x5c29x2[_0xd587[1179]][_0xd587[994]]()&& _0x5c29x2[_0xd587[1179]][_0xd587[2450]](_0x5c29x2[_0xd587[844]]())});this[_0xd587[3071]](_0xd587[3148],function(_0x5c29x2){_0x5c29x2[_0xd587[1179]][_0xd587[994]]()&& _0x5c29x2[_0xd587[1179]][_0xd587[904]](_0x5c29x2[_0xd587[1179]][_0xd587[845]]())});this[_0xd587[3071]](_0xd587[1997],function(_0x5c29x2){_0x5c29x2[_0xd587[1179]][_0xd587[994]]()&& _0x5c29x2[_0xd587[1179]][_0xd587[846]]()});this[_0xd587[3071]](_0xd587[824],function(_0x5c29x2){_0x5c29x2[_0xd587[1179]][_0xd587[994]]()&& _0x5c29x2[_0xd587[824]]()});this[_0xd587[3071]](_0xd587[825],function(_0x5c29x2){_0x5c29x2[_0xd587[1179]][_0xd587[994]]()&& _0x5c29x2[_0xd587[825]]()});this[_0xd587[3071]](_0xd587[2558],function(_0x5c29x2){_0x5c29x2[_0xd587[1179]][_0xd587[2558]]()});this[_0xd587[3071]](_0xd587[2559],function(_0x5c29x2){_0x5c29x2[_0xd587[1179]][_0xd587[2559]]()});this[_0xd587[3071]](_0xd587[3149],function(_0x5c29x2){_0x5c29x2[_0xd587[1179]][_0xd587[2560]]()});this[_0xd587[3071]](_0xd587[933],function(_0x5c29x2){_0x5c29x2[_0xd587[1179]][_0xd587[933]]()});this[_0xd587[3071]](_0xd587[3150],function(_0x5c29x2,_0x5c29x3){_0x5c29x2[_0xd587[3150]](_0x5c29x3)});this[_0xd587[3071]](_0xd587[2705],function(_0x5c29x2){_0x5c29x2[_0xd587[1179]][_0xd587[994]]()&& _0x5c29x2[_0xd587[1179]][_0xd587[2705]]()});this[_0xd587[3071]](_0xd587[3151],function(_0x5c29x2){_0x5c29x2[_0xd587[1179]][_0xd587[994]]()&& _0x5c29x2[_0xd587[1179]][_0xd587[2440]]()});this[_0xd587[3071]](_0xd587[2706],function(_0x5c29x2){_0x5c29x2[_0xd587[1179]][_0xd587[994]]()&& _0x5c29x2[_0xd587[1179]][_0xd587[2706]]()});this[_0xd587[3071]](_0xd587[2708],function(_0x5c29x2){_0x5c29x2[_0xd587[1179]][_0xd587[994]]()&& _0x5c29x2[_0xd587[1179]][_0xd587[2708]]()});this[_0xd587[3071]](_0xd587[1061],function(_0x5c29x2,_0x5c29x3){_0x5c29x2[_0xd587[1179]][_0xd587[994]]()&& _0x5c29x2[_0xd587[1179]][_0xd587[2453]](_0x5c29x3)&& _0x5c29x2[_0xd587[1179]][_0xd587[2451]](_0x5c29x3)});this[_0xd587[3071]](_0xd587[3152],function(_0x5c29x2,_0x5c29x3){_0x5c29x2[_0xd587[1179]][_0xd587[994]]()&& _0x5c29x2[_0xd587[1179]][_0xd587[840]](!0)});this[_0xd587[3071]](_0xd587[3153],function(_0x5c29x2,_0x5c29x3){_0x5c29x2[_0xd587[1179]][_0xd587[994]]()&& _0x5c29x2[_0xd587[1179]][_0xd587[840]](!1)});this[_0xd587[3071]](_0xd587[2552],function(_0x5c29x2,_0x5c29x3){_0x5c29x2[_0xd587[1179]][_0xd587[2552]](_0x5c29x3)});this[_0xd587[3071]](_0xd587[2554],function(_0x5c29x2){_0x5c29x2[_0xd587[1179]][_0xd587[2554]]()});this[_0xd587[3071]](_0xd587[2442],function(_0x5c29x2){_0x5c29x2[_0xd587[1179]][_0xd587[2442]]()});this[_0xd587[3071]](_0xd587[3154],function(_0x5c29x2){_0x5c29x2[_0xd587[1179]][_0xd587[994]]()&& _0x5c29x2[_0xd587[1179]][_0xd587[2702]]()});this[_0xd587[3071]](_0xd587[3155],function(_0x5c29x2){_0x5c29x2[_0xd587[1179]][_0xd587[994]]()&& _0x5c29x2[_0xd587[1179]][_0xd587[2700]]()});this[_0xd587[3071]](_0xd587[3156],function(_0x5c29x2){_0x5c29x2[_0xd587[1179]][_0xd587[994]]()&& _0x5c29x2[_0xd587[1179]][_0xd587[2703]]()});this[_0xd587[3071]](_0xd587[3157],function(_0x5c29x2){_0x5c29x2[_0xd587[1179]][_0xd587[994]]()&& _0x5c29x2[_0xd587[1179]][_0xd587[2704]]()});this[_0xd587[3071]](_0xd587[2514],function(_0x5c29x2){_0x5c29x2[_0xd587[1179]][_0xd587[994]]()&& _0x5c29x2[_0xd587[1179]][_0xd587[847]](!0)});this[_0xd587[3071]](_0xd587[3158],function(_0x5c29x2){if(_0x5c29x2[_0xd587[1179]][_0xd587[994]]()){var _0x5c29x3=_0x5c29x2[_0xd587[1179]][_0xd587[1728]]();_0x5c29x2[_0xd587[1179]][_0xd587[847]](!0,!1,_0x5c29x3)}});this[_0xd587[3071]](_0xd587[3159],function(_0x5c29x2){_0x5c29x2[_0xd587[1179]][_0xd587[994]]()&& _0x5c29x2[_0xd587[1179]][_0xd587[847]](!1)});this[_0xd587[3071]](_0xd587[3160],function(_0x5c29x2){if(_0x5c29x2[_0xd587[1179]][_0xd587[994]]()){var _0x5c29x3=_0x5c29x2[_0xd587[1179]][_0xd587[1728]]();_0x5c29x2[_0xd587[1179]][_0xd587[847]](!1,!1,_0x5c29x3)}});this[_0xd587[3071]](_0xd587[1447],function(_0x5c29x2){_0x5c29x2[_0xd587[1179]][_0xd587[994]]()&& _0x5c29x2[_0xd587[1179]][_0xd587[2491]](mxConstants.STYLE_FONTSTYLE,mxConstants.FONT_BOLD)});this[_0xd587[3071]](_0xd587[1449],function(_0x5c29x2){_0x5c29x2[_0xd587[1179]][_0xd587[994]]()&& _0x5c29x2[_0xd587[1179]][_0xd587[2491]](mxConstants.STYLE_FONTSTYLE,mxConstants.FONT_ITALIC)});this[_0xd587[3071]](_0xd587[355],function(_0x5c29x2){_0x5c29x2[_0xd587[1179]][_0xd587[994]]()&& _0x5c29x2[_0xd587[1179]][_0xd587[2491]](mxConstants.STYLE_FONTSTYLE,mxConstants.FONT_UNDERLINE)});this[_0xd587[3071]](_0xd587[639],function(_0x5c29x2){_0x5c29x2[_0xd587[1179]][_0xd587[994]]()&& _0x5c29x2[_0xd587[1179]][_0xd587[2491]](mxConstants.STYLE_FONTSTYLE,mxConstants.FONT_SHADOW)});this[_0xd587[3071]](_0xd587[3161],function(_0x5c29x2){_0x5c29x2[_0xd587[1179]][_0xd587[994]]()&& _0x5c29x2[_0xd587[1179]][_0xd587[849]](mxConstants.ALIGN_LEFT)});this[_0xd587[3071]](_0xd587[3162],function(_0x5c29x2){_0x5c29x2[_0xd587[1179]][_0xd587[994]]()&& _0x5c29x2[_0xd587[1179]][_0xd587[849]](mxConstants.ALIGN_CENTER)});this[_0xd587[3071]](_0xd587[3163],function(_0x5c29x2){_0x5c29x2[_0xd587[1179]][_0xd587[994]]()&& _0x5c29x2[_0xd587[1179]][_0xd587[849]](mxConstants.ALIGN_RIGHT)});this[_0xd587[3071]](_0xd587[3164],function(_0x5c29x2){_0x5c29x2[_0xd587[1179]][_0xd587[994]]()&& _0x5c29x2[_0xd587[1179]][_0xd587[849]](mxConstants.ALIGN_TOP)});this[_0xd587[3071]](_0xd587[3165],function(_0x5c29x2){_0x5c29x2[_0xd587[1179]][_0xd587[994]]()&& _0x5c29x2[_0xd587[1179]][_0xd587[849]](mxConstants.ALIGN_MIDDLE)});this[_0xd587[3071]](_0xd587[3166],function(_0x5c29x2){_0x5c29x2[_0xd587[1179]][_0xd587[994]]()&& _0x5c29x2[_0xd587[1179]][_0xd587[849]](mxConstants.ALIGN_BOTTOM)});this[_0xd587[3071]](_0xd587[3167],function(_0x5c29x2){_0x5c29x2[_0xd587[1179]][_0xd587[1717]](mxConstants.STYLE_ALIGN,mxConstants.ALIGN_LEFT)});this[_0xd587[3071]](_0xd587[3168],function(_0x5c29x2){_0x5c29x2[_0xd587[1179]][_0xd587[994]]()&& _0x5c29x2[_0xd587[1179]][_0xd587[1717]](mxConstants.STYLE_ALIGN,mxConstants.ALIGN_CENTER)});this[_0xd587[3071]](_0xd587[3169],function(_0x5c29x2){_0x5c29x2[_0xd587[1179]][_0xd587[994]]()&& _0x5c29x2[_0xd587[1179]][_0xd587[1717]](mxConstants.STYLE_ALIGN,mxConstants.ALIGN_RIGHT)});this[_0xd587[3071]](_0xd587[3170],function(_0x5c29x2){_0x5c29x2[_0xd587[1179]][_0xd587[994]]()&& _0x5c29x2[_0xd587[1179]][_0xd587[1717]](mxConstants.STYLE_VERTICAL_ALIGN,mxConstants.ALIGN_TOP)});this[_0xd587[3071]](_0xd587[3171],function(_0x5c29x2){_0x5c29x2[_0xd587[1179]][_0xd587[994]]()&& _0x5c29x2[_0xd587[1179]][_0xd587[1717]](mxConstants.STYLE_VERTICAL_ALIGN,mxConstants.ALIGN_MIDDLE)});this[_0xd587[3071]](_0xd587[3172],function(_0x5c29x2){_0x5c29x2[_0xd587[1179]][_0xd587[994]]()&& _0x5c29x2[_0xd587[1179]][_0xd587[1717]](mxConstants.STYLE_VERTICAL_ALIGN,mxConstants.ALIGN_BOTTOM)});this[_0xd587[3071]](_0xd587[499],function(_0x5c29x2){var _0x5c29x3=100* _0x5c29x2[_0xd587[1179]][_0xd587[249]]()[_0xd587[255]],_0x5c29x3=parseFloat(mxUtils[_0xd587[3173]](mxResources[_0xd587[203]](_0x5c29x2[_0xd587[3104]])|| _0x5c29x2[_0xd587[3104]],_0x5c29x3))/ 100;isNaN(_0x5c29x3)|| _0x5c29x2[_0xd587[1179]][_0xd587[249]]()[_0xd587[2262]](_0x5c29x3)});this[_0xd587[3071]](_0xd587[3174],function(_0x5c29x2){null!= _0x5c29x2[_0xd587[3112]]?_0x5c29x2[_0xd587[3112]][_0xd587[175]](!_0x5c29x2[_0xd587[3112]][_0xd587[174]]()):_0x5c29x2[_0xd587[3175]]()});this[_0xd587[3071]](_0xd587[3176],function(_0x5c29x2){null!= _0x5c29x2[_0xd587[2719]]?_0x5c29x2[_0xd587[2719]][_0xd587[175]](!_0x5c29x2[_0xd587[2719]][_0xd587[174]]()):_0x5c29x2[_0xd587[3177]]()});this[_0xd587[3071]](_0xd587[3178],function(_0x5c29x2){null== _0x5c29x2[_0xd587[2136]]?_0x5c29x2[_0xd587[3179]]():_0x5c29x2[_0xd587[2136]][_0xd587[175]](!_0x5c29x2[_0xd587[2136]][_0xd587[174]]())});this[_0xd587[3071]](_0xd587[3180],function(_0x5c29x2){mxLog[_0xd587[175]](!mxLog[_0xd587[174]]())})};mxEditor[_0xd587[202]][_0xd587[3102]]= function(){var _0x5c29x2=mxUtils[_0xd587[885]](this,function(_0x5c29x2){this[_0xd587[746]]( new mxEventObject(mxEvent.SESSION,_0xd587[812],_0x5c29x2))});return this[_0xd587[807]](this[_0xd587[1056]],this[_0xd587[1057]],this[_0xd587[1058]],_0x5c29x2)};mxEditor[_0xd587[202]][_0xd587[3099]]= function(_0x5c29x2){null!= _0x5c29x2&& (( new mxCodec(_0x5c29x2[_0xd587[295]]))[_0xd587[1093]](_0x5c29x2,this),this[_0xd587[3181]]())};mxEditor[_0xd587[202]][_0xd587[3182]]= function(){document[_0xd587[3183]]= _0xd587[3184]};mxEditor[_0xd587[202]][_0xd587[3181]]= function(){this[_0xd587[1184]]= ( new Date)[_0xd587[178]]();this[_0xd587[3095]][_0xd587[200]]();this[_0xd587[1183]]= 0;this[_0xd587[2128]](!1)};mxEditor[_0xd587[202]][_0xd587[3071]]= function(_0x5c29x2,_0x5c29x3){this[_0xd587[3091]][_0x5c29x2]= _0x5c29x3};mxEditor[_0xd587[202]][_0xd587[350]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){var _0x5c29x5=this[_0xd587[3091]][_0x5c29x2];if(null!= _0x5c29x5){try{var _0x5c29x9=arguments;_0x5c29x9[0]= this;_0x5c29x5[_0xd587[183]](this,_0x5c29x9)}catch(f){throw mxUtils[_0xd587[267]](_0xd587[3185]+ _0x5c29x2+ _0xd587[3186]+ f[_0xd587[281]],280,!0),f}}else {mxUtils[_0xd587[267]](_0xd587[3187]+ _0x5c29x2,280,!0)}};mxEditor[_0xd587[202]][_0xd587[3188]]= function(_0x5c29x2,_0x5c29x3){this[_0xd587[3118]][_0x5c29x2]= _0x5c29x3};mxEditor[_0xd587[202]][_0xd587[3189]]= function(_0x5c29x2){return this[_0xd587[3118]][_0x5c29x2]};mxEditor[_0xd587[202]][_0xd587[3096]]= function(){var _0x5c29x2= new mxGraph(null,null,this[_0xd587[2720]]);_0x5c29x2[_0xd587[2673]](!0);_0x5c29x2[_0xd587[2674]](!0);this[_0xd587[3190]](_0x5c29x2);this[_0xd587[3191]](_0x5c29x2);this[_0xd587[3192]](_0x5c29x2);this[_0xd587[3193]](_0x5c29x2);this[_0xd587[3194]](_0x5c29x2);_0x5c29x2[_0xd587[2316]][_0xd587[1033]]= mxUtils[_0xd587[885]](this,function(_0x5c29x2,_0x5c29x4,_0x5c29x5){return this[_0xd587[3195]](_0x5c29x2,_0x5c29x4,_0x5c29x5)});_0x5c29x2[_0xd587[2433]][_0xd587[1033]]= mxUtils[_0xd587[885]](this,function(_0x5c29x2,_0x5c29x4){return this[_0xd587[2503]](_0x5c29x2,_0x5c29x4)});this[_0xd587[3196]](_0x5c29x2);this[_0xd587[3197]](_0x5c29x2);return _0x5c29x2};mxEditor[_0xd587[202]][_0xd587[3196]]= function(_0x5c29x2){_0x5c29x2= new mxSwimlaneManager(_0x5c29x2,!1);_0x5c29x2[_0xd587[1737]]= mxUtils[_0xd587[885]](this,function(){return this[_0xd587[3089]]});_0x5c29x2[_0xd587[994]]= mxUtils[_0xd587[885]](this,function(){return this[_0xd587[3128]]});return _0x5c29x2};mxEditor[_0xd587[202]][_0xd587[3197]]= function(_0x5c29x2){var _0x5c29x3= new mxLayoutManager(_0x5c29x2),_0x5c29x4=this;_0x5c29x3[_0xd587[2754]]= function(_0x5c29x3){var _0x5c29x9=null,_0x5c29xa=_0x5c29x4[_0xd587[1179]][_0xd587[502]]();if(null!= _0x5c29xa[_0xd587[1197]](_0x5c29x3)){if(_0x5c29x4[_0xd587[3129]]&& _0x5c29x2[_0xd587[1730]](_0x5c29x3)){null== _0x5c29x4[_0xd587[3198]]&& (_0x5c29x4[_0xd587[3198]]= _0x5c29x4[_0xd587[3199]]()),_0x5c29x9= _0x5c29x4[_0xd587[3198]]}else {if(_0x5c29x4[_0xd587[3126]]&& (_0x5c29x2[_0xd587[2553]](_0x5c29x3)|| null== _0x5c29xa[_0xd587[1197]](_0x5c29xa[_0xd587[1197]](_0x5c29x3)))){null== _0x5c29x4[_0xd587[3200]]&& (_0x5c29x4[_0xd587[3200]]= _0x5c29x4[_0xd587[3201]]()),_0x5c29x9= _0x5c29x4[_0xd587[3200]]}}};return _0x5c29x9};return _0x5c29x3};mxEditor[_0xd587[202]][_0xd587[3202]]= function(_0x5c29x2){null== this[_0xd587[1179]][_0xd587[526]]&& (this[_0xd587[1179]][_0xd587[176]](_0x5c29x2),this[_0xd587[3203]]= new mxRubberband(this[_0xd587[1179]]),this[_0xd587[1157]]&& mxEvent[_0xd587[1157]](_0x5c29x2),mxClient[_0xd587[496]]&& new mxDivResizer(_0x5c29x2))};mxEditor[_0xd587[202]][_0xd587[3190]]= function(_0x5c29x2){_0x5c29x2[_0xd587[169]](mxEvent.DOUBLE_CLICK,mxUtils[_0xd587[885]](this,function(_0x5c29x3,_0x5c29x4){var _0x5c29x5=_0x5c29x4[_0xd587[720]](_0xd587[246]);null!= _0x5c29x5&& (_0x5c29x2[_0xd587[994]]()&& null!= this[_0xd587[3115]])&& (this[_0xd587[350]](this[_0xd587[3115]],_0x5c29x5),_0x5c29x4[_0xd587[722]]())}))};mxEditor[_0xd587[202]][_0xd587[3191]]= function(_0x5c29x2){var _0x5c29x3=mxUtils[_0xd587[885]](this,function(_0x5c29x2,_0x5c29x3){var _0x5c29x9=_0x5c29x3[_0xd587[720]](_0xd587[1061]);this[_0xd587[3095]][_0xd587[1114]](_0x5c29x9)});_0x5c29x2[_0xd587[502]]()[_0xd587[169]](mxEvent.UNDO,_0x5c29x3);_0x5c29x2[_0xd587[249]]()[_0xd587[169]](mxEvent.UNDO,_0x5c29x3);_0x5c29x3= function(_0x5c29x3,_0x5c29x5){var _0x5c29x9=_0x5c29x5[_0xd587[720]](_0xd587[1061])[_0xd587[1065]];_0x5c29x2[_0xd587[904]](_0x5c29x2[_0xd587[2436]](_0x5c29x9))};this[_0xd587[3095]][_0xd587[169]](mxEvent.UNDO,_0x5c29x3);this[_0xd587[3095]][_0xd587[169]](mxEvent.REDO,_0x5c29x3)};mxEditor[_0xd587[202]][_0xd587[3192]]= function(_0x5c29x2){var _0x5c29x3=mxUtils[_0xd587[885]](this,function(_0x5c29x2){this[_0xd587[746]]( new mxEventObject(mxEvent.ROOT))});_0x5c29x2[_0xd587[249]]()[_0xd587[169]](mxEvent.DOWN,_0x5c29x3);_0x5c29x2[_0xd587[249]]()[_0xd587[169]](mxEvent.UP,_0x5c29x3)};mxEditor[_0xd587[202]][_0xd587[3193]]= function(_0x5c29x2){var _0x5c29x3=mxUtils[_0xd587[885]](this,function(_0x5c29x3,_0x5c29x5){this[_0xd587[2128]](!0);!0== this[_0xd587[3140]]&& _0x5c29x2[_0xd587[2585]]();for(var _0x5c29x9=_0x5c29x5[_0xd587[720]](_0xd587[1061])[_0xd587[1065]],_0x5c29xa=0;_0x5c29xa< _0x5c29x9[_0xd587[67]];_0x5c29xa++){var _0x5c29x12=_0x5c29x9[_0x5c29xa];if(_0x5c29x12 instanceof mxRootChange|| _0x5c29x12 instanceof mxValueChange&& _0x5c29x12[_0xd587[246]]== this[_0xd587[1179]][_0xd587[251]][_0xd587[813]]|| _0x5c29x12 instanceof mxCellAttributeChange&& _0x5c29x12[_0xd587[246]]== this[_0xd587[1179]][_0xd587[251]][_0xd587[813]]){this[_0xd587[746]]( new mxEventObject(mxEvent.ROOT));break}}});_0x5c29x2[_0xd587[502]]()[_0xd587[169]](mxEvent.CHANGE,_0x5c29x3)};mxEditor[_0xd587[202]][_0xd587[3194]]= function(_0x5c29x2){var _0x5c29x3=this;_0x5c29x2[_0xd587[1133]]({mouseDown:function(_0x5c29x2,_0x5c29x5){if(null!= _0x5c29x3[_0xd587[3083]]&& !_0x5c29x5[_0xd587[737]]()&& (_0x5c29x3[_0xd587[3117]]|| null== _0x5c29x5[_0xd587[248]]())){_0x5c29x3[_0xd587[1179]][_0xd587[2440]](),_0x5c29x3[_0xd587[3083]](_0x5c29x5[_0xd587[727]](),_0x5c29x5[_0xd587[736]]()),this[_0xd587[1142]]= !0,_0x5c29x5[_0xd587[722]]()}},mouseMove:function(_0x5c29x2,_0x5c29x3){this[_0xd587[1142]]&& _0x5c29x3[_0xd587[722]]()},mouseUp:function(_0x5c29x2,_0x5c29x3){this[_0xd587[1142]]&& (this[_0xd587[1142]]= !1,_0x5c29x3[_0xd587[722]]())}})};mxEditor[_0xd587[202]][_0xd587[3201]]= function(){var _0x5c29x2=this[_0xd587[1179]][_0xd587[1020]],_0x5c29x3= new mxStackLayout(this[_0xd587[1179]],!this[_0xd587[3089]],this[_0xd587[3127]],2* _0x5c29x2,2* _0x5c29x2);_0x5c29x3[_0xd587[1713]]= function(_0x5c29x2){return !_0x5c29x3[_0xd587[1179]][_0xd587[1730]](_0x5c29x2)};return _0x5c29x3};mxEditor[_0xd587[202]][_0xd587[3199]]= function(){return new mxCompactTreeLayout(this[_0xd587[1179]],this[_0xd587[3089]])};mxEditor[_0xd587[202]][_0xd587[3097]]= function(){return new mxDefaultToolbar(null,this)};mxEditor[_0xd587[202]][_0xd587[3204]]= function(_0x5c29x2){this[_0xd587[3082]][_0xd587[176]](_0x5c29x2);mxClient[_0xd587[496]]&& new mxDivResizer(_0x5c29x2)};mxEditor[_0xd587[202]][_0xd587[3205]]= function(_0x5c29x2){null== this[_0xd587[879]]&& (this[_0xd587[879]]= _0x5c29x2,this[_0xd587[169]](mxEvent.SAVE,mxUtils[_0xd587[885]](this,function(){var _0x5c29x2=( new Date)[_0xd587[3206]]();this[_0xd587[3207]]((mxResources[_0xd587[203]](this[_0xd587[3106]])|| this[_0xd587[3106]])+ _0xd587[3186]+ _0x5c29x2)})),this[_0xd587[169]](mxEvent.OPEN,mxUtils[_0xd587[885]](this,function(){this[_0xd587[3207]]((mxResources[_0xd587[203]](this[_0xd587[3108]])|| this[_0xd587[3108]])+ _0xd587[3186]+ this[_0xd587[3122]])})),mxClient[_0xd587[496]]&& new mxDivResizer(_0x5c29x2))};mxEditor[_0xd587[202]][_0xd587[3207]]= function(_0x5c29x2){null!= this[_0xd587[879]]&& null!= _0x5c29x2&& (this[_0xd587[879]][_0xd587[339]]= _0x5c29x2)};mxEditor[_0xd587[202]][_0xd587[3208]]= function(_0x5c29x2){this[_0xd587[169]](mxEvent.ROOT,mxUtils[_0xd587[885]](this,function(_0x5c29x3){_0x5c29x2[_0xd587[339]]= this[_0xd587[3209]]()}));mxClient[_0xd587[496]]&& new mxDivResizer(_0x5c29x2)};mxEditor[_0xd587[202]][_0xd587[3210]]= function(_0x5c29x2,_0x5c29x3){null!= _0x5c29x2&& ( new mxCompactTreeLayout(this[_0xd587[1179]],_0x5c29x3))[_0xd587[350]](_0x5c29x2)};mxEditor[_0xd587[202]][_0xd587[3209]]= function(){for(var _0x5c29x2=_0xd587[110],_0x5c29x3=this[_0xd587[1179]],_0x5c29x4=_0x5c29x3[_0xd587[2534]]();null!= _0x5c29x4&& null!= _0x5c29x3[_0xd587[502]]()[_0xd587[1197]](_0x5c29x3[_0xd587[502]]()[_0xd587[1197]](_0x5c29x4));){_0x5c29x3[_0xd587[2553]](_0x5c29x4)&& (_0x5c29x2= _0xd587[3211]+ _0x5c29x3[_0xd587[2454]](_0x5c29x4)+ _0x5c29x2),_0x5c29x4= _0x5c29x3[_0xd587[502]]()[_0xd587[1197]](_0x5c29x4)};return this[_0xd587[3212]]()+ _0x5c29x2};mxEditor[_0xd587[202]][_0xd587[3212]]= function(){var _0x5c29x2=this[_0xd587[1179]][_0xd587[502]]()[_0xd587[501]]();return this[_0xd587[1179]][_0xd587[2454]](_0x5c29x2)};mxEditor[_0xd587[202]][_0xd587[824]]= function(){this[_0xd587[3095]][_0xd587[824]]()};mxEditor[_0xd587[202]][_0xd587[825]]= function(){this[_0xd587[3095]][_0xd587[825]]()};mxEditor[_0xd587[202]][_0xd587[844]]= function(){var _0x5c29x2=null!= this[_0xd587[3121]]?this[_0xd587[3121]]:this[_0xd587[1179]][_0xd587[1020]];return this[_0xd587[1179]][_0xd587[844]](this[_0xd587[3213]](),_0x5c29x2)};mxEditor[_0xd587[202]][_0xd587[3213]]= function(){return this[_0xd587[1179]][_0xd587[502]]()[_0xd587[1978]](this[_0xd587[3120]])};mxEditor[_0xd587[202]][_0xd587[392]]= function(_0x5c29x2){if(null!= _0x5c29x2){var _0x5c29x3=mxUtils[_0xd587[219]](_0x5c29x2)[_0xd587[875]]();this[_0xd587[3214]](_0x5c29x3[_0xd587[158]]);this[_0xd587[3122]]= _0x5c29x2;this[_0xd587[746]]( new mxEventObject(mxEvent.OPEN,_0xd587[3122],_0x5c29x2))}};mxEditor[_0xd587[202]][_0xd587[3214]]= function(_0x5c29x2){( new mxCodec(_0x5c29x2[_0xd587[295]]))[_0xd587[1093]](_0x5c29x2,this[_0xd587[1179]][_0xd587[502]]());this[_0xd587[3181]]()};mxEditor[_0xd587[202]][_0xd587[815]]= function(_0x5c29x2,_0x5c29x3){_0x5c29x2= _0x5c29x2|| this[_0xd587[3215]]();if(null!= _0x5c29x2&& 0< _0x5c29x2[_0xd587[67]]){var _0x5c29x4=this[_0xd587[3216]](_0x5c29x3);this[_0xd587[3217]](_0x5c29x2,_0x5c29x4);this[_0xd587[2128]](!1)};this[_0xd587[746]]( new mxEventObject(mxEvent.SAVE,_0xd587[863],_0x5c29x2))};mxEditor[_0xd587[202]][_0xd587[3217]]= function(_0x5c29x2,_0x5c29x3){this[_0xd587[1070]]&& (_0x5c29x3= encodeURIComponent(_0x5c29x3));mxUtils[_0xd587[814]](_0x5c29x2,this[_0xd587[3123]]+ _0xd587[226]+ _0x5c29x3,mxUtils[_0xd587[885]](this,function(_0x5c29x4){this[_0xd587[746]]( new mxEventObject(mxEvent.POST,_0xd587[870],_0x5c29x4,_0xd587[863],_0x5c29x2,_0xd587[410],_0x5c29x3))}))};mxEditor[_0xd587[202]][_0xd587[3216]]= function(_0x5c29x2){_0x5c29x2= null!= _0x5c29x2?_0x5c29x2:this[_0xd587[1069]];var _0x5c29x3=( new mxCodec)[_0xd587[514]](this[_0xd587[1179]][_0xd587[502]]());return mxUtils[_0xd587[875]](_0x5c29x3,_0x5c29x2)};mxEditor[_0xd587[202]][_0xd587[3215]]= function(){return this[_0xd587[3124]]};mxEditor[_0xd587[202]][_0xd587[3142]]= function(){return this[_0xd587[3125]]};mxEditor[_0xd587[202]][_0xd587[807]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){var _0x5c29x9=null;mxClient[_0xd587[3101]]|| (_0x5c29x9= new mxSession(this[_0xd587[1179]][_0xd587[502]](),_0x5c29x2,_0x5c29x3,_0x5c29x4),_0x5c29x9[_0xd587[169]](mxEvent.RECEIVE,mxUtils[_0xd587[885]](this,function(_0x5c29x2,_0x5c29x3){null!= _0x5c29x3[_0xd587[720]](_0xd587[252])[_0xd587[284]](_0xd587[1088])&& this[_0xd587[3181]]()})),_0x5c29x9[_0xd587[169]](mxEvent.DISCONNECT,_0x5c29x5),_0x5c29x9[_0xd587[169]](mxEvent.CONNECT,_0x5c29x5),_0x5c29x9[_0xd587[169]](mxEvent.NOTIFY,_0x5c29x5),_0x5c29x9[_0xd587[169]](mxEvent.GET,_0x5c29x5),_0x5c29x9[_0xd587[861]]());return _0x5c29x9};mxEditor[_0xd587[202]][_0xd587[3218]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=this[_0xd587[1179]][_0xd587[2434]]()[_0xd587[2054]][_0x5c29x3];this[_0xd587[1179]][_0xd587[249]]()[_0xd587[2434]]()[_0xd587[2074]](_0x5c29x3,this[_0xd587[1179]][_0xd587[2434]]()[_0xd587[2054]][_0x5c29x2]);this[_0xd587[1179]][_0xd587[2434]]()[_0xd587[2074]](_0x5c29x2,_0x5c29x4);this[_0xd587[1179]][_0xd587[802]]()};mxEditor[_0xd587[202]][_0xd587[3150]]= function(_0x5c29x2){_0x5c29x2= _0x5c29x2|| this[_0xd587[1179]][_0xd587[2452]]();null== _0x5c29x2&& (_0x5c29x2= this[_0xd587[1179]][_0xd587[2534]](),null== _0x5c29x2&& (_0x5c29x2= this[_0xd587[1179]][_0xd587[502]]()[_0xd587[501]]()));if(null!= _0x5c29x2){this[_0xd587[1179]][_0xd587[2126]](!0);var _0x5c29x3=mxUtils[_0xd587[445]](this[_0xd587[1179]][_0xd587[526]]),_0x5c29x4=_0x5c29x3[_0xd587[235]]+ 10,_0x5c29x3=_0x5c29x3[_0xd587[236]];if(null!= this[_0xd587[716]]&& !this[_0xd587[3139]]){_0x5c29x4= this[_0xd587[716]][_0xd587[730]](),_0x5c29x3= this[_0xd587[716]][_0xd587[732]]()}else {var _0x5c29x5=this[_0xd587[1179]][_0xd587[2555]](_0x5c29x2);null!= _0x5c29x5&& (_0x5c29x4+= _0x5c29x5[_0xd587[235]]+ Math[_0xd587[243]](200,_0x5c29x5[_0xd587[117]]),_0x5c29x3+= _0x5c29x5[_0xd587[236]])};this[_0xd587[3062]]();_0x5c29x2= this[_0xd587[3219]](_0x5c29x2);null!= _0x5c29x2&& (this[_0xd587[716]]= new mxWindow(mxResources[_0xd587[203]](this[_0xd587[3110]])|| this[_0xd587[3110]],_0x5c29x2,_0x5c29x4,_0x5c29x3,this[_0xd587[3137]],this[_0xd587[3138]],!1),this[_0xd587[716]][_0xd587[175]](!0))}};mxEditor[_0xd587[202]][_0xd587[3220]]= function(){return null!= this[_0xd587[716]]};mxEditor[_0xd587[202]][_0xd587[3219]]= function(_0x5c29x2){var _0x5c29x3=this[_0xd587[1179]][_0xd587[502]](),_0x5c29x4=_0x5c29x3[_0xd587[433]](_0x5c29x2);if(mxUtils[_0xd587[1331]](_0x5c29x4)){var _0x5c29x5= new mxForm(_0xd587[716]);_0x5c29x5[_0xd587[961]](_0xd587[3222],_0x5c29x2[_0xd587[1103]]())[_0xd587[57]](_0xd587[3221],_0xd587[128]);var _0x5c29x9=null,_0x5c29xa=null,_0x5c29x12=null,_0x5c29x13=null,_0x5c29x14=null;_0x5c29x3[_0xd587[1193]](_0x5c29x2)&& (_0x5c29x9= _0x5c29x3[_0xd587[1721]](_0x5c29x2),null!= _0x5c29x9&& (_0x5c29xa= _0x5c29x5[_0xd587[961]](_0xd587[125],_0x5c29x9[_0xd587[236]]),_0x5c29x12= _0x5c29x5[_0xd587[961]](_0xd587[361],_0x5c29x9[_0xd587[235]]),_0x5c29x13= _0x5c29x5[_0xd587[961]](_0xd587[117],_0x5c29x9[_0xd587[117]]),_0x5c29x14= _0x5c29x5[_0xd587[961]](_0xd587[119],_0x5c29x9[_0xd587[119]])));for(var _0x5c29x15=_0x5c29x3[_0xd587[474]](_0x5c29x2),_0x5c29x16=_0x5c29x5[_0xd587[961]](_0xd587[3223],_0x5c29x15|| _0xd587[110]),_0x5c29x17=_0x5c29x4[_0xd587[320]],_0x5c29x18=[],_0x5c29x4=0;_0x5c29x4< _0x5c29x17[_0xd587[67]];_0x5c29x4++){_0x5c29x18[_0x5c29x4]= _0x5c29x5[_0xd587[968]](_0x5c29x17[_0x5c29x4][_0xd587[301]],_0x5c29x17[_0x5c29x4][_0xd587[318]],_0xd587[685]== _0x5c29x17[_0x5c29x4][_0xd587[301]]?4:2)};_0x5c29x4= mxUtils[_0xd587[885]](this,function(){this[_0xd587[3062]]();_0x5c29x3[_0xd587[473]]();try{null!= _0x5c29x9&& (_0x5c29x9= _0x5c29x9[_0xd587[238]](),_0x5c29x9[_0xd587[235]]= parseFloat(_0x5c29x12[_0xd587[131]]),_0x5c29x9[_0xd587[236]]= parseFloat(_0x5c29xa[_0xd587[131]]),_0x5c29x9[_0xd587[117]]= parseFloat(_0x5c29x13[_0xd587[131]]),_0x5c29x9[_0xd587[119]]= parseFloat(_0x5c29x14[_0xd587[131]]),_0x5c29x3[_0xd587[1724]](_0x5c29x2,_0x5c29x9));0< _0x5c29x16[_0xd587[131]][_0xd587[67]]?_0x5c29x3[_0xd587[475]](_0x5c29x2,_0x5c29x16[_0xd587[131]]):_0x5c29x3[_0xd587[475]](_0x5c29x2,null);for(var _0x5c29x4=0;_0x5c29x4< _0x5c29x17[_0xd587[67]];_0x5c29x4++){var _0x5c29x5= new mxCellAttributeChange(_0x5c29x2,_0x5c29x17[_0x5c29x4][_0xd587[301]],_0x5c29x18[_0x5c29x4][_0xd587[131]]);_0x5c29x3[_0xd587[350]](_0x5c29x5)};this[_0xd587[1179]][_0xd587[2455]](_0x5c29x2)&& this[_0xd587[1179]][_0xd587[858]](_0x5c29x2)}finally{_0x5c29x3[_0xd587[476]]()}});_0x5c29x15= mxUtils[_0xd587[885]](this,function(){this[_0xd587[3062]]()});_0x5c29x5[_0xd587[956]](_0x5c29x4,_0x5c29x15);return _0x5c29x5[_0xd587[116]]};return null};mxEditor[_0xd587[202]][_0xd587[3062]]= function(){null!= this[_0xd587[716]]&& (this[_0xd587[716]][_0xd587[515]](),this[_0xd587[716]]= null)};mxEditor[_0xd587[202]][_0xd587[3175]]= function(){if(null== this[_0xd587[3112]]){var _0x5c29x2=document[_0xd587[55]](_0xd587[485]);_0x5c29x2[_0xd587[124]][_0xd587[549]]= _0xd587[952];_0x5c29x2[_0xd587[124]][_0xd587[357]]= _0xd587[550];var _0x5c29x3=document[_0xd587[112]][_0xd587[159]],_0x5c29x3= new mxWindow(mxResources[_0xd587[203]](this[_0xd587[3111]])|| this[_0xd587[3111]],_0x5c29x2,_0x5c29x3- 220,this[_0xd587[3132]],200);_0x5c29x3[_0xd587[164]](!0);_0x5c29x3[_0xd587[165]]= !1;var _0x5c29x4=mxUtils[_0xd587[885]](this,function(_0x5c29x3){mxEvent[_0xd587[762]](_0x5c29x2);_0x5c29x2[_0xd587[339]]= _0xd587[110];this[_0xd587[3224]](_0x5c29x2)});this[_0xd587[1179]][_0xd587[502]]()[_0xd587[169]](mxEvent.CHANGE,_0x5c29x4);this[_0xd587[1179]][_0xd587[2435]]()[_0xd587[169]](mxEvent.CHANGE,_0x5c29x4);this[_0xd587[1179]][_0xd587[169]](mxEvent.ROOT,_0x5c29x4);null!= this[_0xd587[3131]]&& _0x5c29x3[_0xd587[951]](this[_0xd587[3131]]);this[_0xd587[3112]]= _0x5c29x3;this[_0xd587[3224]](_0x5c29x2)};this[_0xd587[3112]][_0xd587[175]](!0)};mxEditor[_0xd587[202]][_0xd587[3225]]= function(_0x5c29x2){null!= this[_0xd587[3112]]&& (_0x5c29x2= this[_0xd587[3112]][_0xd587[905]],mxEvent[_0xd587[762]](_0x5c29x2),_0x5c29x2[_0xd587[339]]= _0xd587[110],this[_0xd587[3224]](_0x5c29x2))};mxEditor[_0xd587[202]][_0xd587[3224]]= function(_0x5c29x2){};mxEditor[_0xd587[202]][_0xd587[3177]]= function(_0x5c29x2){if(null== this[_0xd587[2719]]){var _0x5c29x3=document[_0xd587[55]](_0xd587[389]);_0x5c29x3[_0xd587[57]](_0xd587[390],mxResources[_0xd587[203]](_0xd587[3134])|| this[_0xd587[3134]]);_0x5c29x3[_0xd587[57]](_0xd587[119],_0xd587[118]);_0x5c29x3[_0xd587[57]](_0xd587[117],_0xd587[118]);_0x5c29x3[_0xd587[57]](_0xd587[3226],_0xd587[468]);_0x5c29x3[_0xd587[124]][_0xd587[1028]]= _0xd587[1391];_0x5c29x2= document[_0xd587[112]][_0xd587[159]];var _0x5c29x4=document[_0xd587[112]][_0xd587[157]]|| document[_0xd587[158]][_0xd587[157]],_0x5c29x5= new mxWindow(mxResources[_0xd587[203]](this[_0xd587[3113]])|| this[_0xd587[3113]],_0x5c29x3,(_0x5c29x2- this[_0xd587[3135]])/ 2,(_0x5c29x4- this[_0xd587[3136]])/ 3,this[_0xd587[3135]],this[_0xd587[3136]]);_0x5c29x5[_0xd587[161]](!0);_0x5c29x5[_0xd587[164]](!0);_0x5c29x5[_0xd587[165]]= !1;_0x5c29x5[_0xd587[163]](!0);null!= this[_0xd587[3133]]&& _0x5c29x5[_0xd587[951]](this[_0xd587[3133]]);mxClient[_0xd587[133]]&& (_0x5c29x2= function(_0x5c29x2){_0x5c29x3[_0xd587[57]](_0xd587[119],_0x5c29x5[_0xd587[485]][_0xd587[167]]- 26+ _0xd587[168])},_0x5c29x5[_0xd587[169]](mxEvent.RESIZE_END,_0x5c29x2),_0x5c29x5[_0xd587[169]](mxEvent.MAXIMIZE,_0x5c29x2),_0x5c29x5[_0xd587[169]](mxEvent.NORMALIZE,_0x5c29x2),_0x5c29x5[_0xd587[169]](mxEvent.SHOW,_0x5c29x2));this[_0xd587[2719]]= _0x5c29x5};this[_0xd587[2719]][_0xd587[175]](!0)};mxEditor[_0xd587[202]][_0xd587[3179]]= function(){if(null== this[_0xd587[2136]]){var _0x5c29x2=document[_0xd587[55]](_0xd587[485]);_0x5c29x2[_0xd587[124]][_0xd587[277]]= _0xd587[188];_0x5c29x2[_0xd587[124]][_0xd587[117]]= _0xd587[118];_0x5c29x2[_0xd587[124]][_0xd587[119]]= _0xd587[118];_0x5c29x2[_0xd587[124]][_0xd587[1537]]= _0xd587[1391];_0x5c29x2[_0xd587[124]][_0xd587[270]]= _0xd587[582];var _0x5c29x3= new mxWindow(mxResources[_0xd587[203]](this[_0xd587[3114]])|| this[_0xd587[3114]],_0x5c29x2,600,480,200,200,!1),_0x5c29x4= new mxOutline(this[_0xd587[1179]],_0x5c29x2);_0x5c29x3[_0xd587[164]](!0);_0x5c29x3[_0xd587[163]](!0);_0x5c29x3[_0xd587[165]]= !1;_0x5c29x3[_0xd587[169]](mxEvent.RESIZE_END,function(){_0x5c29x4[_0xd587[2729]]()});this[_0xd587[2136]]= _0x5c29x3;this[_0xd587[2136]][_0xd587[2136]]= _0x5c29x4};this[_0xd587[2136]][_0xd587[175]](!0);this[_0xd587[2136]][_0xd587[2136]][_0xd587[2729]](!0)};mxEditor[_0xd587[202]][_0xd587[3086]]= function(_0x5c29x2){_0xd587[804]== _0x5c29x2?(this[_0xd587[1179]][_0xd587[2316]][_0xd587[2840]]= !1,this[_0xd587[1179]][_0xd587[1995]](!1)):_0xd587[807]== _0x5c29x2?(this[_0xd587[1179]][_0xd587[2316]][_0xd587[2840]]= !1,this[_0xd587[1179]][_0xd587[1995]](!0)):_0xd587[796]== _0x5c29x2&& (this[_0xd587[1179]][_0xd587[2316]][_0xd587[2840]]= !0,this[_0xd587[1179]][_0xd587[1995]](!1))};mxEditor[_0xd587[202]][_0xd587[3195]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){this[_0xd587[3094]][_0xd587[3065]](this,_0x5c29x2,_0x5c29x3,_0x5c29x4)};mxEditor[_0xd587[202]][_0xd587[2503]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=null;if(null!= this[_0xd587[2075]]){_0x5c29x4= this[_0xd587[1179]][_0xd587[502]]()[_0xd587[1978]](this[_0xd587[2075]])}else {_0x5c29x4= new mxCell(_0xd587[110]);_0x5c29x4[_0xd587[1994]](!0);var _0x5c29x5= new mxGeometry;_0x5c29x5[_0xd587[1500]]= !0;_0x5c29x4[_0xd587[1724]](_0x5c29x5)};_0x5c29x5= this[_0xd587[2291]]();null!= _0x5c29x5&& _0x5c29x4[_0xd587[475]](_0x5c29x5);return _0x5c29x4};mxEditor[_0xd587[202]][_0xd587[2291]]= function(){return this[_0xd587[3119]]};mxEditor[_0xd587[202]][_0xd587[3227]]= function(_0x5c29x2){return null!= this[_0xd587[3093]]&& 0< this[_0xd587[3093]][_0xd587[67]]&& this[_0xd587[1179]][_0xd587[1730]](_0x5c29x2)?this[_0xd587[3093]][this[_0xd587[3130]]++ % this[_0xd587[3093]][_0xd587[67]]]:null};mxEditor[_0xd587[202]][_0xd587[3228]]= function(_0x5c29x2){if(null!= this[_0xd587[3100]]){var _0x5c29x3=this[_0xd587[3227]](_0x5c29x2);null!= _0x5c29x3&& _0x5c29x2[_0xd587[475]](_0x5c29x2[_0xd587[474]]()+ _0xd587[471]+ this[_0xd587[3100]]+ _0xd587[226]+ _0x5c29x3)}};mxEditor[_0xd587[202]][_0xd587[817]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){for(var _0x5c29x9=this[_0xd587[1179]][_0xd587[502]]();null!= _0x5c29x2&& !this[_0xd587[1179]][_0xd587[2685]](_0x5c29x2);){_0x5c29x2= _0x5c29x9[_0xd587[1197]](_0x5c29x2)};_0x5c29x2= null!= _0x5c29x2?_0x5c29x2:this[_0xd587[1179]][_0xd587[2461]](_0x5c29x4,_0x5c29x5);var _0x5c29xa=this[_0xd587[1179]][_0xd587[249]]()[_0xd587[255]],_0x5c29x12=_0x5c29x9[_0xd587[1721]](_0x5c29x3),_0x5c29x13=_0x5c29x9[_0xd587[1721]](_0x5c29x2);if(this[_0xd587[1179]][_0xd587[1730]](_0x5c29x3)&& !this[_0xd587[1179]][_0xd587[2412]]){_0x5c29x2= null}else {if(null== _0x5c29x2&& this[_0xd587[3116]]){return null};if(null!= _0x5c29x2&& null!= _0x5c29x13){var _0x5c29x14=this[_0xd587[1179]][_0xd587[249]]()[_0xd587[248]](_0x5c29x2);if(null!= _0x5c29x14){if(_0x5c29x4-= _0x5c29x14[_0xd587[2078]][_0xd587[235]]* _0x5c29xa,_0x5c29x5-= _0x5c29x14[_0xd587[2078]][_0xd587[236]]* _0x5c29xa,this[_0xd587[1179]][_0xd587[3229]]){var _0x5c29x13=_0x5c29x12[_0xd587[117]],_0x5c29x15=_0x5c29x12[_0xd587[119]],_0x5c29x16=_0x5c29x14[_0xd587[235]]+ _0x5c29x14[_0xd587[117]];_0x5c29x4+ _0x5c29x13> _0x5c29x16&& (_0x5c29x4-= _0x5c29x4+ _0x5c29x13- _0x5c29x16);_0x5c29x16= _0x5c29x14[_0xd587[236]]+ _0x5c29x14[_0xd587[119]];_0x5c29x5+ _0x5c29x15> _0x5c29x16&& (_0x5c29x5-= _0x5c29x5+ _0x5c29x15- _0x5c29x16)}}else {null!= _0x5c29x13&& (_0x5c29x4-= _0x5c29x13[_0xd587[235]]* _0x5c29xa,_0x5c29x5-= _0x5c29x13[_0xd587[236]]* _0x5c29xa)}}};_0x5c29x12= _0x5c29x12[_0xd587[238]]();_0x5c29x12[_0xd587[235]]= this[_0xd587[1179]][_0xd587[1021]](_0x5c29x4/ _0x5c29xa- this[_0xd587[1179]][_0xd587[249]]()[_0xd587[513]][_0xd587[235]]- this[_0xd587[1179]][_0xd587[1020]]/ 2);_0x5c29x12[_0xd587[236]]= this[_0xd587[1179]][_0xd587[1021]](_0x5c29x5/ _0x5c29xa- this[_0xd587[1179]][_0xd587[249]]()[_0xd587[513]][_0xd587[236]]- this[_0xd587[1179]][_0xd587[1020]]/ 2);_0x5c29x3[_0xd587[1724]](_0x5c29x12);null== _0x5c29x2&& (_0x5c29x2= this[_0xd587[1179]][_0xd587[902]]());this[_0xd587[3228]](_0x5c29x3);this[_0xd587[746]]( new mxEventObject(mxEvent.BEFORE_ADD_VERTEX,_0xd587[1988],_0x5c29x3,_0xd587[1101],_0x5c29x2));_0x5c29x9[_0xd587[473]]();try{_0x5c29x3= this[_0xd587[1179]][_0xd587[2103]](_0x5c29x3,_0x5c29x2),null!= _0x5c29x3&& (this[_0xd587[1179]][_0xd587[2509]](_0x5c29x3),this[_0xd587[746]]( new mxEventObject(mxEvent.ADD_VERTEX,_0xd587[1988],_0x5c29x3)))}finally{_0x5c29x9[_0xd587[476]]()};null!= _0x5c29x3&& (this[_0xd587[1179]][_0xd587[2450]](_0x5c29x3),this[_0xd587[1179]][_0xd587[2564]](_0x5c29x3),this[_0xd587[746]]( new mxEventObject(mxEvent.AFTER_ADD_VERTEX,_0xd587[1988],_0x5c29x3)));return _0x5c29x3};mxEditor[_0xd587[202]][_0xd587[515]]= function(){this[_0xd587[2717]]|| (this[_0xd587[2717]]= !0,null!= this[_0xd587[3112]]&& this[_0xd587[3112]][_0xd587[515]](),null!= this[_0xd587[2136]]&& this[_0xd587[2136]][_0xd587[515]](),null!= this[_0xd587[716]]&& this[_0xd587[716]][_0xd587[515]](),null!= this[_0xd587[3098]]&& this[_0xd587[3098]][_0xd587[515]](),null!= this[_0xd587[3203]]&& this[_0xd587[3203]][_0xd587[515]](),null!= this[_0xd587[3082]]&& this[_0xd587[3082]][_0xd587[515]](),null!= this[_0xd587[1179]]&& this[_0xd587[1179]][_0xd587[515]](),this[_0xd587[3118]]= this[_0xd587[879]]= null)};var mxCodecRegistry={codecs:[],aliases:[],register:function(_0x5c29x2){if(null!= _0x5c29x2){var _0x5c29x3=_0x5c29x2[_0xd587[718]]();mxCodecRegistry[_0xd587[3230]][_0x5c29x3]= _0x5c29x2;var _0x5c29x4=mxUtils[_0xd587[197]](_0x5c29x2[_0xd587[3231]][_0xd587[196]]);_0x5c29x4!= _0x5c29x3&& mxCodecRegistry[_0xd587[3232]](_0x5c29x4,_0x5c29x3)};return _0x5c29x2},addAlias:function(_0x5c29x2,_0x5c29x3){mxCodecRegistry[_0xd587[3233]][_0x5c29x2]= _0x5c29x3},getCodec:function(_0x5c29x2){var _0x5c29x3=null;if(null!= _0x5c29x2){var _0x5c29x3=mxUtils[_0xd587[197]](_0x5c29x2),_0x5c29x4=mxCodecRegistry[_0xd587[3233]][_0x5c29x3];null!= _0x5c29x4&& (_0x5c29x3= _0x5c29x4);_0x5c29x3= mxCodecRegistry[_0xd587[3230]][_0x5c29x3];if(null== _0x5c29x3){try{_0x5c29x3= new mxObjectCodec( new _0x5c29x2),mxCodecRegistry[_0xd587[3234]](_0x5c29x3)}catch(d){}}};return _0x5c29x3}};function mxCodec(_0x5c29x2){this[_0xd587[395]]= _0x5c29x2|| mxUtils[_0xd587[306]]();this[_0xd587[68]]= []}mxCodec[_0xd587[202]][_0xd587[395]]= null;mxCodec[_0xd587[202]][_0xd587[68]]= null;mxCodec[_0xd587[202]][_0xd587[3235]]= !1;mxCodec[_0xd587[202]][_0xd587[1104]]= function(_0x5c29x2,_0x5c29x3){return this[_0xd587[68]][_0x5c29x2]= _0x5c29x3};mxCodec[_0xd587[202]][_0xd587[3236]]= function(_0x5c29x2){var _0x5c29x3=null;null!= _0x5c29x2&& (_0x5c29x3= this[_0xd587[68]][_0x5c29x2],null== _0x5c29x3&& (_0x5c29x3= this[_0xd587[1060]](_0x5c29x2),null== _0x5c29x3&& (_0x5c29x2= this[_0xd587[1362]](_0x5c29x2),null!= _0x5c29x2&& (_0x5c29x3= this[_0xd587[1093]](_0x5c29x2)))));return _0x5c29x3};mxCodec[_0xd587[202]][_0xd587[1060]]= function(_0x5c29x2){return null};mxCodec[_0xd587[202]][_0xd587[1362]]= function(_0x5c29x2,_0x5c29x3){return mxUtils[_0xd587[290]](this[_0xd587[395]][_0xd587[158]],null!= _0x5c29x3?_0x5c29x3:_0xd587[1363],_0x5c29x2)};mxCodec[_0xd587[202]][_0xd587[1103]]= function(_0x5c29x2){var _0x5c29x3=null;null!= _0x5c29x2&& (_0x5c29x3= this[_0xd587[3237]](_0x5c29x2),null== _0x5c29x3&& _0x5c29x2 instanceof mxCell&& (_0x5c29x3= _0x5c29x2[_0xd587[1103]](),null== _0x5c29x3&& (_0x5c29x3= mxCellPath[_0xd587[385]](_0x5c29x2),0== _0x5c29x3[_0xd587[67]]&& (_0x5c29x3= _0xd587[813]))));return _0x5c29x3};mxCodec[_0xd587[202]][_0xd587[3237]]= function(_0x5c29x2){return null};mxCodec[_0xd587[202]][_0xd587[514]]= function(_0x5c29x2){var _0x5c29x3=null;if(null!= _0x5c29x2&& null!= _0x5c29x2[_0xd587[196]]){var _0x5c29x4=mxCodecRegistry[_0xd587[3238]](_0x5c29x2[_0xd587[196]]);null!= _0x5c29x4?_0x5c29x3= _0x5c29x4[_0xd587[514]](this,_0x5c29x2):mxUtils[_0xd587[1331]](_0x5c29x2)?_0x5c29x3= mxClient[_0xd587[80]]?_0x5c29x2[_0xd587[511]](!0):this[_0xd587[395]][_0xd587[3239]](_0x5c29x2,!0):mxLog[_0xd587[283]](_0xd587[3240]+ mxUtils[_0xd587[197]](_0x5c29x2[_0xd587[196]]))};return _0x5c29x3};mxCodec[_0xd587[202]][_0xd587[1093]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=null;if(null!= _0x5c29x2&& _0x5c29x2[_0xd587[288]]== mxConstants[_0xd587[289]]){var _0x5c29x5=null;try{_0x5c29x5= eval(_0x5c29x2[_0xd587[301]])}catch(e){};try{var _0x5c29xa=mxCodecRegistry[_0xd587[3238]](_0x5c29x5);null!= _0x5c29xa?_0x5c29x4= _0x5c29xa[_0xd587[1093]](this,_0x5c29x2,_0x5c29x3):(_0x5c29x4= _0x5c29x2[_0xd587[511]](!0),_0x5c29x4[_0xd587[1390]](_0xd587[3069]))}catch(g){mxLog[_0xd587[143]](_0xd587[3241]+ _0x5c29x2[_0xd587[301]]+ _0xd587[3186]+ g[_0xd587[281]])}};return _0x5c29x4};mxCodec[_0xd587[202]][_0xd587[3242]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){_0x5c29x3[_0xd587[62]](this[_0xd587[514]](_0x5c29x2));if(null== _0x5c29x4|| _0x5c29x4){_0x5c29x4= _0x5c29x2[_0xd587[262]]();for(var _0x5c29x5=0;_0x5c29x5< _0x5c29x4;_0x5c29x5++){this[_0xd587[3242]](_0x5c29x2[_0xd587[263]](_0x5c29x5),_0x5c29x3)}}};mxCodec[_0xd587[202]][_0xd587[3243]]= function(_0x5c29x2){return null!= _0x5c29x2&& _0xd587[279]== typeof _0x5c29x2[_0xd587[3243]]?_0x5c29x2[_0xd587[3243]]():!1};mxCodec[_0xd587[202]][_0xd587[3244]]= function(_0x5c29x2,_0x5c29x3){_0x5c29x3= null!= _0x5c29x3?_0x5c29x3:!0;var _0x5c29x4=null;if(null!= _0x5c29x2&& _0x5c29x2[_0xd587[288]]== mxConstants[_0xd587[289]]){_0x5c29x4= mxCodecRegistry[_0xd587[3238]](_0x5c29x2[_0xd587[301]]);if(!this[_0xd587[3243]](_0x5c29x4)){for(var _0x5c29x5=_0x5c29x2[_0xd587[285]];null!= _0x5c29x5&& !this[_0xd587[3243]](_0x5c29x4);){_0x5c29x4= mxCodecRegistry[_0xd587[3238]](_0x5c29x5[_0xd587[301]]),_0x5c29x5= _0x5c29x5[_0xd587[287]]}};this[_0xd587[3243]](_0x5c29x4)|| (_0x5c29x4= mxCodecRegistry[_0xd587[3238]](mxCell));_0x5c29x4= _0x5c29x4[_0xd587[1093]](this,_0x5c29x2);_0x5c29x3&& this[_0xd587[3245]](_0x5c29x4)};return _0x5c29x4};mxCodec[_0xd587[202]][_0xd587[3245]]= function(_0x5c29x2){var _0x5c29x3=_0x5c29x2[_0xd587[1101]],_0x5c29x4=_0x5c29x2[_0xd587[1709]](!0),_0x5c29x5=_0x5c29x2[_0xd587[1709]](!1);_0x5c29x2[_0xd587[1957]](null,!1);_0x5c29x2[_0xd587[1957]](null,!0);_0x5c29x2[_0xd587[1101]]= null;null!= _0x5c29x3&& _0x5c29x3[_0xd587[1937]](_0x5c29x2);null!= _0x5c29x4&& _0x5c29x4[_0xd587[1960]](_0x5c29x2,!0);null!= _0x5c29x5&& _0x5c29x5[_0xd587[1960]](_0x5c29x2,!1)};mxCodec[_0xd587[202]][_0xd587[57]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){null!= _0x5c29x3&& null!= _0x5c29x4&& _0x5c29x2[_0xd587[57]](_0x5c29x3,_0x5c29x4)};function mxObjectCodec(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){this[_0xd587[3231]]= _0x5c29x2;this[_0xd587[3246]]= null!= _0x5c29x3?_0x5c29x3:[];this[_0xd587[3247]]= null!= _0x5c29x4?_0x5c29x4:[];this[_0xd587[3248]]= null!= _0x5c29x5?_0x5c29x5:[];this[_0xd587[3249]]= {};for(var _0x5c29x9 in this[_0xd587[3248]]){this[_0xd587[3249]][this[_0xd587[3248]][_0x5c29x9]]= _0x5c29x9}}mxObjectCodec[_0xd587[202]][_0xd587[3231]]= null;mxObjectCodec[_0xd587[202]][_0xd587[3246]]= null;mxObjectCodec[_0xd587[202]][_0xd587[3247]]= null;mxObjectCodec[_0xd587[202]][_0xd587[3248]]= null;mxObjectCodec[_0xd587[202]][_0xd587[3249]]= null;mxObjectCodec[_0xd587[202]][_0xd587[718]]= function(){return mxUtils[_0xd587[197]](this[_0xd587[3231]][_0xd587[196]])};mxObjectCodec[_0xd587[202]][_0xd587[3250]]= function(){return new this[_0xd587[3231]][_0xd587[196]]};mxObjectCodec[_0xd587[202]][_0xd587[3251]]= function(_0x5c29x2){if(null!= _0x5c29x2){var _0x5c29x3=this[_0xd587[3249]][_0x5c29x2];null!= _0x5c29x3&& (_0x5c29x2= _0x5c29x3)};return _0x5c29x2};mxObjectCodec[_0xd587[202]][_0xd587[3252]]= function(_0x5c29x2){if(null!= _0x5c29x2){var _0x5c29x3=this[_0xd587[3248]][_0x5c29x2];null!= _0x5c29x3&& (_0x5c29x2= _0x5c29x3)};return _0x5c29x2};mxObjectCodec[_0xd587[202]][_0xd587[3253]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){return _0x5c29x3== mxObjectIdentity[_0xd587[195]]|| 0<= mxUtils[_0xd587[2]](this[_0xd587[3246]],_0x5c29x3)};mxObjectCodec[_0xd587[202]][_0xd587[3254]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){return 0<= mxUtils[_0xd587[2]](this[_0xd587[3247]],_0x5c29x3)};mxObjectCodec[_0xd587[202]][_0xd587[514]]= function(_0x5c29x2,_0x5c29x3){var _0x5c29x4=_0x5c29x2[_0xd587[395]][_0xd587[55]](this[_0xd587[718]]());_0x5c29x3= this[_0xd587[3255]](_0x5c29x2,_0x5c29x3,_0x5c29x4);this[_0xd587[3256]](_0x5c29x2,_0x5c29x3,_0x5c29x4);return this[_0xd587[3257]](_0x5c29x2,_0x5c29x3,_0x5c29x4)};mxObjectCodec[_0xd587[202]][_0xd587[3256]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){_0x5c29x2[_0xd587[57]](_0x5c29x4,_0xd587[1363],_0x5c29x2[_0xd587[1103]](_0x5c29x3));for(var _0x5c29x5 in _0x5c29x3){var _0x5c29x9=_0x5c29x5,_0x5c29xa=_0x5c29x3[_0x5c29x9];null!= _0x5c29xa&& !this[_0xd587[3253]](_0x5c29x3,_0x5c29x9,_0x5c29xa,!0)&& (mxUtils[_0xd587[1946]](_0x5c29x9)&& (_0x5c29x9= null),this[_0xd587[3258]](_0x5c29x2,_0x5c29x3,_0x5c29x9,_0x5c29xa,_0x5c29x4))}};mxObjectCodec[_0xd587[202]][_0xd587[3258]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){if(null!= _0x5c29x5){if(this[_0xd587[3254]](_0x5c29x3,_0x5c29x4,_0x5c29x5,!0)){var _0x5c29xa=_0x5c29x2[_0xd587[1103]](_0x5c29x5);if(null== _0x5c29xa){mxLog[_0xd587[283]](_0xd587[3259]+ this[_0xd587[718]]()+ _0xd587[87]+ _0x5c29x4+ _0xd587[226]+ _0x5c29x5);return};_0x5c29x5= _0x5c29xa};_0x5c29xa= this[_0xd587[3231]][_0x5c29x4];if(null== _0x5c29x4|| _0x5c29x2[_0xd587[3235]]|| _0x5c29xa!= _0x5c29x5){_0x5c29x4= this[_0xd587[3252]](_0x5c29x4),this[_0xd587[3260]](_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9)}}};mxObjectCodec[_0xd587[202]][_0xd587[3260]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){_0xd587[194]!= typeof _0x5c29x5?this[_0xd587[3261]](_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9):this[_0xd587[3262]](_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9)};mxObjectCodec[_0xd587[202]][_0xd587[3261]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){_0x5c29x5= this[_0xd587[3263]](_0x5c29x5);null== _0x5c29x4?(_0x5c29x3= _0x5c29x2[_0xd587[395]][_0xd587[55]](_0xd587[99]),_0xd587[279]== typeof _0x5c29x5?_0x5c29x3[_0xd587[62]](_0x5c29x2[_0xd587[395]][_0xd587[344]](_0x5c29x5)):_0x5c29x2[_0xd587[57]](_0x5c29x3,_0xd587[131],_0x5c29x5),_0x5c29x9[_0xd587[62]](_0x5c29x3)):_0xd587[279]!= typeof _0x5c29x5&& _0x5c29x2[_0xd587[57]](_0x5c29x9,_0x5c29x4,_0x5c29x5)};mxObjectCodec[_0xd587[202]][_0xd587[3262]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5,_0x5c29x9){_0x5c29x2= _0x5c29x2[_0xd587[514]](_0x5c29x5);null!= _0x5c29x2?(null!= _0x5c29x4&& _0x5c29x2[_0xd587[57]](_0xd587[3069],_0x5c29x4),_0x5c29x9[_0xd587[62]](_0x5c29x2)):mxLog[_0xd587[283]](_0xd587[3264]+ this[_0xd587[718]]()+ _0xd587[87]+ _0x5c29x4+ _0xd587[3186]+ _0x5c29x5)};mxObjectCodec[_0xd587[202]][_0xd587[3263]]= function(_0x5c29x2){if(_0xd587[82]== typeof _0x5c29x2[_0xd587[67]]&& (!0== _0x5c29x2|| !1== _0x5c29x2)){_0x5c29x2= !0== _0x5c29x2?_0xd587[500]:_0xd587[468]};return _0x5c29x2};mxObjectCodec[_0xd587[202]][_0xd587[3265]]= function(_0x5c29x2){mxUtils[_0xd587[1946]](_0x5c29x2)&& (_0x5c29x2= parseFloat(_0x5c29x2));return _0x5c29x2};mxObjectCodec[_0xd587[202]][_0xd587[3255]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){return _0x5c29x3};mxObjectCodec[_0xd587[202]][_0xd587[3257]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){return _0x5c29x4};mxObjectCodec[_0xd587[202]][_0xd587[1093]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){var _0x5c29x5=_0x5c29x3[_0xd587[284]](_0xd587[1363]),_0x5c29x9=_0x5c29x2[_0xd587[68]][_0x5c29x5];null== _0x5c29x9&& (_0x5c29x9= _0x5c29x4|| this[_0xd587[3250]](),null!= _0x5c29x5&& _0x5c29x2[_0xd587[1104]](_0x5c29x5,_0x5c29x9));_0x5c29x3= this[_0xd587[3266]](_0x5c29x2,_0x5c29x3,_0x5c29x9);this[_0xd587[3267]](_0x5c29x2,_0x5c29x3,_0x5c29x9);return this[_0xd587[3268]](_0x5c29x2,_0x5c29x3,_0x5c29x9)};mxObjectCodec[_0xd587[202]][_0xd587[3267]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){null!= _0x5c29x3&& (this[_0xd587[3269]](_0x5c29x2,_0x5c29x3,_0x5c29x4),this[_0xd587[3270]](_0x5c29x2,_0x5c29x3,_0x5c29x4))};mxObjectCodec[_0xd587[202]][_0xd587[3269]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){_0x5c29x3= _0x5c29x3[_0xd587[320]];if(null!= _0x5c29x3){for(var _0x5c29x5=0;_0x5c29x5< _0x5c29x3[_0xd587[67]];_0x5c29x5++){this[_0xd587[3271]](_0x5c29x2,_0x5c29x3[_0x5c29x5],_0x5c29x4)}}};mxObjectCodec[_0xd587[202]][_0xd587[3271]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){var _0x5c29x5=_0x5c29x3[_0xd587[301]];if(_0xd587[3069]!= _0x5c29x5&& _0xd587[1363]!= _0x5c29x5){_0x5c29x3= this[_0xd587[3265]](_0x5c29x3[_0xd587[318]]);var _0x5c29x9=this[_0xd587[3251]](_0x5c29x5);if(this[_0xd587[3254]](_0x5c29x4,_0x5c29x9,_0x5c29x3,!1)){_0x5c29x2= _0x5c29x2[_0xd587[3236]](_0x5c29x3);if(null== _0x5c29x2){mxLog[_0xd587[283]](_0xd587[3272]+ this[_0xd587[718]]()+ _0xd587[87]+ _0x5c29x5+ _0xd587[226]+ _0x5c29x3);return};_0x5c29x3= _0x5c29x2};this[_0xd587[3253]](_0x5c29x4,_0x5c29x5,_0x5c29x3,!1)|| (_0x5c29x4[_0x5c29x5]= _0x5c29x3)}};mxObjectCodec[_0xd587[202]][_0xd587[3270]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){for(_0x5c29x3= _0x5c29x3[_0xd587[285]];null!= _0x5c29x3;){var _0x5c29x5=_0x5c29x3[_0xd587[287]];_0x5c29x3[_0xd587[288]]== mxConstants[_0xd587[289]]&& !this[_0xd587[3273]](_0x5c29x2,_0x5c29x3,_0x5c29x4)&& this[_0xd587[3274]](_0x5c29x2,_0x5c29x3,_0x5c29x4);_0x5c29x3= _0x5c29x5}};mxObjectCodec[_0xd587[202]][_0xd587[3274]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){var _0x5c29x5=this[_0xd587[3251]](_0x5c29x3[_0xd587[284]](_0xd587[3069]));if(null== _0x5c29x5|| !this[_0xd587[3253]](_0x5c29x4,_0x5c29x5,_0x5c29x3,!1)){var _0x5c29x9=this[_0xd587[3275]](_0x5c29x4,_0x5c29x5,_0x5c29x3),_0x5c29xa=null;_0xd587[99]== _0x5c29x3[_0xd587[301]]?(_0x5c29xa= _0x5c29x3[_0xd587[284]](_0xd587[131]),null== _0x5c29xa&& (_0x5c29xa= mxUtils[_0xd587[1545]](mxUtils[_0xd587[329]](_0x5c29x3)))):_0x5c29xa= _0x5c29x2[_0xd587[1093]](_0x5c29x3,_0x5c29x9);this[_0xd587[3276]](_0x5c29x4,_0x5c29x5,_0x5c29xa,_0x5c29x9)}};mxObjectCodec[_0xd587[202]][_0xd587[3275]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){_0x5c29x2= _0x5c29x2[_0x5c29x3];_0x5c29x2 instanceof Array&& 0< _0x5c29x2[_0xd587[67]]&& (_0x5c29x2= null);return _0x5c29x2};mxObjectCodec[_0xd587[202]][_0xd587[3276]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4,_0x5c29x5){null!= _0x5c29x4&& _0x5c29x4!= _0x5c29x5&& (null!= _0x5c29x3&& 0< _0x5c29x3[_0xd587[67]]?_0x5c29x2[_0x5c29x3]= _0x5c29x4:_0x5c29x2[_0xd587[207]](_0x5c29x4))};mxObjectCodec[_0xd587[202]][_0xd587[3273]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){if(_0xd587[3277]== _0x5c29x3[_0xd587[301]]){_0x5c29x3= _0x5c29x3[_0xd587[284]](_0xd587[298]);if(null!= _0x5c29x3){try{var _0x5c29x5=mxUtils[_0xd587[219]](_0x5c29x3)[_0xd587[874]]();null!= _0x5c29x5&& _0x5c29x2[_0xd587[1093]](_0x5c29x5,_0x5c29x4)}catch(e){}};return !0};return !1};mxObjectCodec[_0xd587[202]][_0xd587[3266]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){return _0x5c29x3};mxObjectCodec[_0xd587[202]][_0xd587[3268]]= function(_0x5c29x2,_0x5c29x3,_0x5c29x4){return _0x5c29x4};mxCodecRegistry[_0xd587[3234]](function(){var _0x5c29x2= new mxObjectCodec( new mxCell,[_0xd587[1954],_0xd587[1842],_0xd587[1211],_0xd587[1991]],[_0xd587[1101],_0xd587[1097],_0xd587[772]]);_0x5c29x2[_0xd587[3243]]= function(){return !0};_0x5c29x2[_0xd587[3253]]= function(_0x5c29x2,_0x5c29x4,_0x5c29x5,_0x5c29x9){return mxObjectCodec[_0xd587[202]][_0xd587[3253]][_0xd587[183]](this,arguments)|| _0x5c29x9&& _0xd587[131]== _0x5c29x4&& _0x5c29x5[_0xd587[288]]== mxConstants[_0xd587[289]]};_0x5c29x2[_0xd587[3257]]= function(_0x5c29x2,_0x5c29x4,_0x5c29x5){if(null!= _0x5c29x4[_0xd587[131]]&& _0x5c29x4[_0xd587[131]][_0xd587[288]]== mxConstants[_0xd587[289]]){var _0x5c29x9=_0x5c29x5;_0x5c29x5= mxClient[_0xd587[80]]?_0x5c29x4[_0xd587[131]][_0xd587[511]](!0):_0x5c29x2[_0xd587[395]][_0xd587[3239]](_0x5c29x4[_0xd587[131]],!0);_0x5c29x5[_0xd587[62]](_0x5c29x9);_0x5c29x2= _0x5c29x9[_0xd587[284]](_0xd587[1363]);_0x5c29x5[_0xd587[57]](_0xd587[1363],_0x5c29x2);_0x5c29x9[_0xd587[1390]](_0xd587[1363])};return _0x5c29x5};_0x5c29x2[_0xd587[3266]]= function(_0x5c29x2,_0x5c29x4,_0x5c29x5){var _0x5c29x9=_0x5c29x4,_0x5c29xa=this[_0xd587[718]]();_0x5c29x4[_0xd587[301]]!= _0x5c29xa?(_0x5c29x9= _0x5c29x4[_0xd587[64]](_0x5c29xa)[0],null!= _0x5c29x9&& _0x5c29x9[_0xd587[265]]== _0x5c29x4?(mxUtils[_0xd587[3278]](_0x5c29x9,!0),mxUtils[_0xd587[3278]](_0x5c29x9,!1),_0x5c29x9[_0xd587[265]][_0xd587[266]](_0x5c29x9)):_0x5c29x9= null,_0x5c29x5[_0xd587[131]]= _0x5c29x4[_0xd587[511]](!0),_0x5c29x4= _0x5c29x5[_0xd587[131]][_0xd587[284]](_0xd587[1363]),null!= _0x5c29x4&& (_0x5c29x5[_0xd587[1945]](_0x5c29x4),_0x5c29x5[_0xd587[131]][_0xd587[1390]](_0xd587[1363]))):_0x5c29x5[_0xd587[1945]](_0x5c29x4[_0xd587[284]](_0xd587[1363]));if(null!= _0x5c29x9){for(_0x5c29x4= 0;_0x5c29x4< this[_0xd587[3247]][_0xd587[67]];_0x5c29x4++){var _0x5c29xa=this[_0xd587[3247]][_0x5c29x4],_0x5c29x12=_0x5c29x9[_0xd587[284]](_0x5c29xa);if(null!= _0x5c29x12){_0x5c29x9[_0xd587[1390]](_0x5c29xa);var _0x5c29x13=_0x5c29x2[_0xd587[68]][_0x5c29x12]|| _0x5c29x2[_0xd587[1060]](_0x5c29x12);null== _0x5c29x13&& (_0x5c29x12= _0x5c29x2[_0xd587[1362]](_0x5c29x12),null!= _0x5c29x12&& (_0x5c29x13= (mxCodecRegistry[_0xd587[3230]][_0x5c29x12[_0xd587[301]]]|| this)[_0xd587[1093]](_0x5c29x2,_0x5c29x12)));_0x5c29x5[_0x5c29xa]= _0x5c29x13}}};return _0x5c29x9};return _0x5c29x2}());mxCodecRegistry[_0xd587[3234]](function(){var _0x5c29x2= new mxObjectCodec( new mxGraphModel);_0x5c29x2[_0xd587[3256]]= function(_0x5c29x2,_0x5c29x4,_0x5c29x5){var _0x5c29x9=_0x5c29x2[_0xd587[395]][_0xd587[55]](_0xd587[813]);_0x5c29x2[_0xd587[3242]](_0x5c29x4[_0xd587[501]](),_0x5c29x9);_0x5c29x5[_0xd587[62]](_0x5c29x9)};_0x5c29x2[_0xd587[3274]]= function(_0x5c29x2,_0x5c29x4,_0x5c29x5){_0xd587[813]== _0x5c29x4[_0xd587[301]]?this[_0xd587[3279]](_0x5c29x2,_0x5c29x4,_0x5c29x5):mxObjectCodec[_0xd587[202]][_0xd587[3274]][_0xd587[183]](this,arguments)};_0x5c29x2[_0xd587[3279]]= function(_0x5c29x2,_0x5c29x4,_0x5c29x5){var _0x5c29x9=null;for(_0x5c29x4= _0x5c29x4[_0xd587[285]];null!= _0x5c29x4;){var _0x5c29xa=_0x5c29x2[_0xd587[3244]](_0x5c29x4);null!= _0x5c29xa&& null== _0x5c29xa[_0xd587[1197]]()&& (_0x5c29x9= _0x5c29xa);_0x5c29x4= _0x5c29x4[_0xd587[287]]};null!= _0x5c29x9&& _0x5c29x5[_0xd587[1927]](_0x5c29x9)};return _0x5c29x2}());mxCodecRegistry[_0xd587[3234]](function(){var _0x5c29x2= new mxObjectCodec( new mxRootChange,[_0xd587[251],_0xd587[257],_0xd587[813]]);_0x5c29x2[_0xd587[3257]]= function(_0x5c29x2,_0x5c29x4,_0x5c29x5){_0x5c29x2[_0xd587[3242]](_0x5c29x4[_0xd587[813]],_0x5c29x5);return _0x5c29x5};_0x5c29x2[_0xd587[3266]]= function(_0x5c29x2,_0x5c29x4,_0x5c29x5){if(null!= _0x5c29x4[_0xd587[285]]&& _0x5c29x4[_0xd587[285]][_0xd587[288]]== mxConstants[_0xd587[289]]){_0x5c29x4= _0x5c29x4[_0xd587[511]](!0);var _0x5c29x9=_0x5c29x4[_0xd587[285]];_0x5c29x5[_0xd587[813]]= _0x5c29x2[_0xd587[3244]](_0x5c29x9,!1);_0x5c29x5= _0x5c29x9[_0xd587[287]];_0x5c29x9[_0xd587[265]][_0xd587[266]](_0x5c29x9);for(_0x5c29x9= _0x5c29x5;null!= _0x5c29x9;){_0x5c29x5= _0x5c29x9[_0xd587[287]],_0x5c29x2[_0xd587[3244]](_0x5c29x9),_0x5c29x9[_0xd587[265]][_0xd587[266]](_0x5c29x9),_0x5c29x9= _0x5c29x5}};return _0x5c29x4};_0x5c29x2[_0xd587[3268]]= function(_0x5c29x2,_0x5c29x4,_0x5c29x5){_0x5c29x5[_0xd587[257]]= _0x5c29x5[_0xd587[813]];return _0x5c29x5};return _0x5c29x2}());mxCodecRegistry[_0xd587[3234]](function(){var _0x5c29x2= new mxObjectCodec( new mxChildChange,[_0xd587[251],_0xd587[247],_0xd587[1982]],[_0xd587[1101],_0xd587[257]]);_0x5c29x2[_0xd587[3254]]= function(_0x5c29x2,_0x5c29x4,_0x5c29x5,_0x5c29x9){return _0xd587[247]== _0x5c29x4&& (null!= _0x5c29x2[_0xd587[257]]|| !_0x5c29x9)?!0:0<= mxUtils[_0xd587[2]](this[_0xd587[3247]],_0x5c29x4)};_0x5c29x2[_0xd587[3257]]= function(_0x5c29x2,_0x5c29x4,_0x5c29x5){this[_0xd587[3254]](_0x5c29x4,_0xd587[247],_0x5c29x4[_0xd587[247]],!0)?_0x5c29x5[_0xd587[57]](_0xd587[247],_0x5c29x2[_0xd587[1103]](_0x5c29x4[_0xd587[247]])):_0x5c29x2[_0xd587[3242]](_0x5c29x4[_0xd587[247]],_0x5c29x5);return _0x5c29x5};_0x5c29x2[_0xd587[3266]]= function(_0x5c29x2,_0x5c29x4,_0x5c29x5){if(null!= _0x5c29x4[_0xd587[285]]&& _0x5c29x4[_0xd587[285]][_0xd587[288]]== mxConstants[_0xd587[289]]){_0x5c29x4= _0x5c29x4[_0xd587[511]](!0);var _0x5c29x9=_0x5c29x4[_0xd587[285]];_0x5c29x5[_0xd587[247]]= _0x5c29x2[_0xd587[3244]](_0x5c29x9,!1);_0x5c29x5= _0x5c29x9[_0xd587[287]];_0x5c29x9[_0xd587[265]][_0xd587[266]](_0x5c29x9);for(_0x5c29x9= _0x5c29x5;null!= _0x5c29x9;){_0x5c29x5= _0x5c29x9[_0xd587[287]];if(_0x5c29x9[_0xd587[288]]== mxConstants[_0xd587[289]]){var _0x5c29xa=_0x5c29x9[_0xd587[284]](_0xd587[1363]);null== _0x5c29x2[_0xd587[1060]](_0x5c29xa)&& _0x5c29x2[_0xd587[3244]](_0x5c29x9)};_0x5c29x9[_0xd587[265]][_0xd587[266]](_0x5c29x9);_0x5c29x9= _0x5c29x5}}else {_0x5c29x9= _0x5c29x4[_0xd587[284]](_0xd587[247]),_0x5c29x5[_0xd587[247]]= _0x5c29x2[_0xd587[3236]](_0x5c29x9)};return _0x5c29x4};_0x5c29x2[_0xd587[3268]]= function(_0x5c29x2,_0x5c29x4,_0x5c29x5){_0x5c29x5[_0xd587[247]][_0xd587[1101]]= _0x5c29x5[_0xd587[257]];_0x5c29x5[_0xd587[257]]= _0x5c29x5[_0xd587[1101]];_0x5c29x5[_0xd587[1982]]= _0x5c29x5[_0xd587[1983]];return _0x5c29x5};return _0x5c29x2}());mxCodecRegistry[_0xd587[3234]](function(){var _0x5c29x2= new mxObjectCodec( new mxTerminalChange,[_0xd587[251],_0xd587[257]],[_0xd587[246],_0xd587[1984]]);_0x5c29x2[_0xd587[3268]]= function(_0x5c29x2,_0x5c29x4,_0x5c29x5){_0x5c29x5[_0xd587[257]]= _0x5c29x5[_0xd587[1984]];return _0x5c29x5};return _0x5c29x2}());var mxGenericChangeCodec=function(_0x5c29x2,_0x5c29x3){var _0x5c29x4= new mxObjectCodec(_0x5c29x2,[_0xd587[251],_0xd587[257]],[_0xd587[246]]);_0x5c29x4[_0xd587[3268]]= function(_0x5c29x2,_0x5c29x4,_0x5c29xa){mxUtils[_0xd587[1331]](_0x5c29xa[_0xd587[246]])&& (_0x5c29xa[_0xd587[246]]= _0x5c29x2[_0xd587[3244]](_0x5c29xa[_0xd587[246]],!1));_0x5c29xa[_0xd587[257]]= _0x5c29xa[_0x5c29x3];return _0x5c29xa};return _0x5c29x4};mxCodecRegistry[_0xd587[3234]](mxGenericChangeCodec( new mxValueChange,_0xd587[131]));mxCodecRegistry[_0xd587[3234]](mxGenericChangeCodec( new mxStyleChange,_0xd587[124]));mxCodecRegistry[_0xd587[3234]](mxGenericChangeCodec( new mxGeometryChange,_0xd587[256]));mxCodecRegistry[_0xd587[3234]](mxGenericChangeCodec( new mxCollapseChange,_0xd587[1985]));mxCodecRegistry[_0xd587[3234]](mxGenericChangeCodec( new mxVisibleChange,_0xd587[189]));mxCodecRegistry[_0xd587[3234]](mxGenericChangeCodec( new mxCellAttributeChange,_0xd587[131]));mxCodecRegistry[_0xd587[3234]](function(){return new mxObjectCodec( new mxGraph,_0xd587[3280][_0xd587[224]](_0xd587[185]))}());mxCodecRegistry[_0xd587[3234]](function(){var _0x5c29x2= new mxObjectCodec( new mxGraphView);_0x5c29x2[_0xd587[514]]= function(_0x5c29x2,_0x5c29x4){return this[_0xd587[3242]](_0x5c29x2,_0x5c29x4,_0x5c29x4[_0xd587[1179]][_0xd587[502]]()[_0xd587[501]]())};_0x5c29x2[_0xd587[3242]]= function(_0x5c29x2,_0x5c29x4,_0x5c29x5){var _0x5c29x9=_0x5c29x4[_0xd587[1179]][_0xd587[502]](),_0x5c29xa=_0x5c29x4[_0xd587[248]](_0x5c29x5),_0x5c29x12=_0x5c29x9[_0xd587[1197]](_0x5c29x5);if(null== _0x5c29x12|| null!= _0x5c29xa){var _0x5c29x13=_0x5c29x9[_0xd587[262]](_0x5c29x5),_0x5c29x14=_0x5c29x4[_0xd587[1179]][_0xd587[1198]](_0x5c29x5),_0x5c29x15=null;_0x5c29x12== _0x5c29x9[_0xd587[501]]()?_0x5c29x15= _0xd587[3281]:null== _0x5c29x12?_0x5c29x15= _0xd587[1179]:_0x5c29x9[_0xd587[250]](_0x5c29x5)?_0x5c29x15= _0xd587[1989]:0< _0x5c29x13&& null!= _0x5c29x14?_0x5c29x15= _0xd587[1504]:_0x5c29x9[_0xd587[1193]](_0x5c29x5)&& (_0x5c29x15= _0xd587[1988]);if(null!= _0x5c29x15){var _0x5c29x16=_0x5c29x2[_0xd587[395]][_0xd587[55]](_0x5c29x15);null!= _0x5c29x4[_0xd587[1179]][_0xd587[2183]](_0x5c29x5)&& (_0x5c29x16[_0xd587[57]](_0xd587[685],_0x5c29x4[_0xd587[1179]][_0xd587[2183]](_0x5c29x5)),_0x5c29x4[_0xd587[1179]][_0xd587[2186]](_0x5c29x5)&& _0x5c29x16[_0xd587[57]](_0xd587[1428],!0));if(null== _0x5c29x12){var _0x5c29x17=_0x5c29x4[_0xd587[517]]();null!= _0x5c29x17&& (_0x5c29x16[_0xd587[57]](_0xd587[235],Math[_0xd587[488]](_0x5c29x17[_0xd587[235]])),_0x5c29x16[_0xd587[57]](_0xd587[236],Math[_0xd587[488]](_0x5c29x17[_0xd587[236]])),_0x5c29x16[_0xd587[57]](_0xd587[117],Math[_0xd587[488]](_0x5c29x17[_0xd587[117]])),_0x5c29x16[_0xd587[57]](_0xd587[119],Math[_0xd587[488]](_0x5c29x17[_0xd587[119]])));_0x5c29x16[_0xd587[57]](_0xd587[255],_0x5c29x4[_0xd587[255]])}else {if(null!= _0x5c29xa&& null!= _0x5c29x14){for(_0x5c29x17 in _0x5c29xa[_0xd587[124]]){_0x5c29x12= _0x5c29xa[_0xd587[124]][_0x5c29x17],_0xd587[279]== typeof _0x5c29x12&& _0xd587[194]== typeof _0x5c29x12&& (_0x5c29x12= mxStyleRegistry[_0xd587[718]](_0x5c29x12)),null!= _0x5c29x12&& (_0xd587[279]!= typeof _0x5c29x12&& _0xd587[194]!= typeof _0x5c29x12)&& _0x5c29x16[_0xd587[57]](_0x5c29x17,_0x5c29x12)};_0x5c29x12= _0x5c29xa[_0xd587[439]];if(null!= _0x5c29x12&& 0< _0x5c29x12[_0xd587[67]]){_0x5c29x14= Math[_0xd587[488]](_0x5c29x12[0][_0xd587[235]])+ _0xd587[537]+ Math[_0xd587[488]](_0x5c29x12[0][_0xd587[236]]);for(_0x5c29x17= 1;_0x5c29x17< _0x5c29x12[_0xd587[67]];_0x5c29x17++){_0x5c29x14+= _0xd587[185]+ Math[_0xd587[488]](_0x5c29x12[_0x5c29x17][_0xd587[235]])+ _0xd587[537]+ Math[_0xd587[488]](_0x5c29x12[_0x5c29x17][_0xd587[236]])};_0x5c29x16[_0xd587[57]](_0xd587[1525],_0x5c29x14)}else {_0x5c29x16[_0xd587[57]](_0xd587[235],Math[_0xd587[488]](_0x5c29xa[_0xd587[235]])),_0x5c29x16[_0xd587[57]](_0xd587[236],Math[_0xd587[488]](_0x5c29xa[_0xd587[236]])),_0x5c29x16[_0xd587[57]](_0xd587[117],Math[_0xd587[488]](_0x5c29xa[_0xd587[117]])),_0x5c29x16[_0xd587[57]](_0xd587[119],Math[_0xd587[488]](_0x5c29xa[_0xd587[119]]))};_0x5c29x17= _0x5c29xa[_0xd587[2079]];null!= _0x5c29x17&& (0!= _0x5c29x17[_0xd587[235]]&& _0x5c29x16[_0xd587[57]](_0xd587[1126],Math[_0xd587[488]](_0x5c29x17[_0xd587[235]])),0!= _0x5c29x17[_0xd587[236]]&& _0x5c29x16[_0xd587[57]](_0xd587[1125],Math[_0xd587[488]](_0x5c29x17[_0xd587[236]])))}};for(_0x5c29x17= 0;_0x5c29x17< _0x5c29x13;_0x5c29x17++){_0x5c29xa= this[_0xd587[3242]](_0x5c29x2,_0x5c29x4,_0x5c29x9[_0xd587[263]](_0x5c29x5,_0x5c29x17)),null!= _0x5c29xa&& _0x5c29x16[_0xd587[62]](_0x5c29xa)}}};return _0x5c29x16};return _0x5c29x2}());mxCodecRegistry[_0xd587[3234]](function(){var _0x5c29x2= new mxObjectCodec( new mxStylesheet);_0x5c29x2[_0xd587[514]]= function(_0x5c29x2,_0x5c29x4){var _0x5c29x5=_0x5c29x2[_0xd587[395]][_0xd587[55]](this[_0xd587[718]]()),_0x5c29x9;for(_0x5c29x9 in _0x5c29x4[_0xd587[2054]]){var _0x5c29xa=_0x5c29x4[_0xd587[2054]][_0x5c29x9],_0x5c29x12=_0x5c29x2[_0xd587[395]][_0xd587[55]](_0xd587[99]);if(null!= _0x5c29x9){_0x5c29x12[_0xd587[57]](_0xd587[3069],_0x5c29x9);for(var _0x5c29x13 in _0x5c29xa){var _0x5c29x14=this[_0xd587[3282]](_0x5c29x13,_0x5c29xa[_0x5c29x13]);if(null!= _0x5c29x14){var _0x5c29x15=_0x5c29x2[_0xd587[395]][_0xd587[55]](_0xd587[99]);_0x5c29x15[_0xd587[57]](_0xd587[131],_0x5c29x14);_0x5c29x15[_0xd587[57]](_0xd587[3069],_0x5c29x13);_0x5c29x12[_0xd587[62]](_0x5c29x15)}};0< _0x5c29x12[_0xd587[271]][_0xd587[67]]&& _0x5c29x5[_0xd587[62]](_0x5c29x12)}};return _0x5c29x5};_0x5c29x2[_0xd587[3282]]= function(_0x5c29x2,_0x5c29x4){var _0x5c29x5= typeof _0x5c29x4;_0xd587[279]== _0x5c29x5?_0x5c29x4= mxStyleRegistry[_0xd587[718]](style[j]):_0xd587[194]== _0x5c29x5&& (_0x5c29x4= null);return _0x5c29x4};_0x5c29x2[_0xd587[1093]]= function(_0x5c29x2,_0x5c29x4,_0x5c29x5){_0x5c29x5= _0x5c29x5|| new this[_0xd587[3231]][_0xd587[196]];var _0x5c29x9=_0x5c29x4[_0xd587[284]](_0xd587[1363]);null!= _0x5c29x9&& (_0x5c29x2[_0xd587[68]][_0x5c29x9]= _0x5c29x5);for(_0x5c29x4= _0x5c29x4[_0xd587[285]];null!= _0x5c29x4;){if(!this[_0xd587[3273]](_0x5c29x2,_0x5c29x4,_0x5c29x5)&& _0xd587[99]== _0x5c29x4[_0xd587[301]]&& (_0x5c29x9= _0x5c29x4[_0xd587[284]](_0xd587[3069]),null!= _0x5c29x9)){var _0x5c29xa=_0x5c29x4[_0xd587[284]](_0xd587[1284]),_0x5c29x12=null!= _0x5c29xa?mxUtils[_0xd587[238]](_0x5c29x5[_0xd587[2054]][_0x5c29xa]):null;null== _0x5c29x12&& (null!= _0x5c29xa&& mxLog[_0xd587[283]](_0xd587[3283]+ _0x5c29xa+ _0xd587[3284]),_0x5c29x12= {});for(_0x5c29xa= _0x5c29x4[_0xd587[285]];null!= _0x5c29xa;){if(_0x5c29xa[_0xd587[288]]== mxConstants[_0xd587[289]]){var _0x5c29x13=_0x5c29xa[_0xd587[284]](_0xd587[3069]);if(_0xd587[99]== _0x5c29xa[_0xd587[301]]){var _0x5c29x14=mxUtils[_0xd587[329]](_0x5c29xa),_0x5c29x15=null;null!= _0x5c29x14&& 0< _0x5c29x14[_0xd587[67]]?_0x5c29x15= mxUtils[_0xd587[1545]](_0x5c29x14):(_0x5c29x15= _0x5c29xa[_0xd587[284]](_0xd587[131]),mxUtils[_0xd587[1946]](_0x5c29x15)&& (_0x5c29x15= parseFloat(_0x5c29x15)));null!= _0x5c29x15&& (_0x5c29x12[_0x5c29x13]= _0x5c29x15)}else {_0xd587[205]== _0x5c29xa[_0xd587[301]]&& delete _0x5c29x12[_0x5c29x13]}};_0x5c29xa= _0x5c29xa[_0xd587[287]]};_0x5c29x5[_0xd587[2074]](_0x5c29x9,_0x5c29x12)};_0x5c29x4= _0x5c29x4[_0xd587[287]]};return _0x5c29x5};return _0x5c29x2}());mxCodecRegistry[_0xd587[3234]](function(){var _0x5c29x2= new mxObjectCodec( new mxDefaultKeyHandler);_0x5c29x2[_0xd587[514]]= function(_0x5c29x2,_0x5c29x4){return null};_0x5c29x2[_0xd587[1093]]= function(_0x5c29x2,_0x5c29x4,_0x5c29x5){if(null!= _0x5c29x5){for(_0x5c29x4= _0x5c29x4[_0xd587[285]];null!= _0x5c29x4;){if(!this[_0xd587[3273]](_0x5c29x2,_0x5c29x4,_0x5c29x5)&& _0xd587[99]== _0x5c29x4[_0xd587[301]]){var _0x5c29x9=_0x5c29x4[_0xd587[284]](_0xd587[3069]),_0x5c29xa=_0x5c29x4[_0xd587[284]](_0xd587[892]),_0x5c29x12=_0x5c29x4[_0xd587[284]](_0xd587[2207]);_0x5c29x5[_0xd587[3063]](_0x5c29x9,_0x5c29xa,_0x5c29x12)};_0x5c29x4= _0x5c29x4[_0xd587[287]]}};return _0x5c29x5};return _0x5c29x2}());mxCodecRegistry[_0xd587[3234]](function(){var _0x5c29x2= new mxObjectCodec( new mxDefaultToolbar);_0x5c29x2[_0xd587[514]]= function(_0x5c29x2,_0x5c29x4){return null};_0x5c29x2[_0xd587[1093]]= function(_0x5c29x2,_0x5c29x4,_0x5c29x5){if(null!= _0x5c29x5){var _0x5c29x9=_0x5c29x5[_0xd587[3061]];for(_0x5c29x4= _0x5c29x4[_0xd587[285]];null!= _0x5c29x4;){if(_0x5c29x4[_0xd587[288]]== mxConstants[_0xd587[289]]&& !this[_0xd587[3273]](_0x5c29x2,_0x5c29x4,_0x5c29x5)){if(_0xd587[3072]== _0x5c29x4[_0xd587[301]]){_0x5c29x5[_0xd587[1051]]()}else {if(_0xd587[345]== _0x5c29x4[_0xd587[301]]){_0x5c29x5[_0xd587[3082]][_0xd587[1052]]()}else {if(_0xd587[1054]== _0x5c29x4[_0xd587[301]]){_0x5c29x5[_0xd587[3082]][_0xd587[1053]]()}else {if(_0xd587[99]== _0x5c29x4[_0xd587[301]]){var _0x5c29xa=_0x5c29x4[_0xd587[284]](_0xd587[3069]),_0x5c29xa=mxResources[_0xd587[203]](_0x5c29xa)|| _0x5c29xa,_0x5c29x12=_0x5c29x4[_0xd587[284]](_0xd587[2916]),_0x5c29x13=_0x5c29x4[_0xd587[284]](_0xd587[3285]),_0x5c29x14=_0x5c29x4[_0xd587[284]](_0xd587[892]),_0x5c29x15=_0x5c29x4[_0xd587[284]](_0xd587[3286]),_0x5c29x16=_0x5c29x4[_0xd587[284]](_0xd587[3231]),_0x5c29x17=_0xd587[468]!= _0x5c29x4[_0xd587[284]](_0xd587[3287]),_0x5c29x18=mxUtils[_0xd587[329]](_0x5c29x4),_0x5c29x19=null;if(null!= _0x5c29x14){_0x5c29x19= _0x5c29x5[_0xd587[1025]](_0x5c29xa,_0x5c29x12,_0x5c29x14,_0x5c29x13)}else {if(null!= _0x5c29x15){var _0x5c29x1a=mxUtils[_0xd587[1545]](_0x5c29x18),_0x5c29x19=_0x5c29x5[_0xd587[1048]](_0x5c29xa,_0x5c29x12,_0x5c29x15,_0x5c29x13,_0x5c29x1a)}else {if(null!= _0x5c29x16|| null!= _0x5c29x18&& 0< _0x5c29x18[_0xd587[67]]){_0x5c29x19= _0x5c29x9[_0xd587[3118]][_0x5c29x16],_0x5c29x16= _0x5c29x4[_0xd587[284]](_0xd587[124]),null!= _0x5c29x19&& null!= _0x5c29x16&& (_0x5c29x19= _0x5c29x19[_0xd587[238]](),_0x5c29x19[_0xd587[475]](_0x5c29x16)),_0x5c29x16= null,null!= _0x5c29x18&& 0< _0x5c29x18[_0xd587[67]]&& (_0x5c29x16= mxUtils[_0xd587[1545]](_0x5c29x18)),_0x5c29x19= _0x5c29x5[_0xd587[3087]](_0x5c29xa,_0x5c29x12,_0x5c29x19,_0x5c29x13,_0x5c29x16,_0x5c29x17)}else {if(_0x5c29x13= mxUtils[_0xd587[1540]](_0x5c29x4),0< _0x5c29x13[_0xd587[67]]){if(null== _0x5c29x12){_0x5c29x16= _0x5c29x5[_0xd587[1038]](_0x5c29xa);for(_0x5c29xa= 0;_0x5c29xa< _0x5c29x13[_0xd587[67]];_0x5c29xa++){_0x5c29x17= _0x5c29x13[_0x5c29xa],_0xd587[3072]== _0x5c29x17[_0xd587[301]]?_0x5c29x5[_0xd587[972]](_0x5c29x16,_0xd587[3288]):_0xd587[99]== _0x5c29x17[_0xd587[301]]&& (_0x5c29x12= _0x5c29x17[_0xd587[284]](_0xd587[3069]),_0x5c29x17= _0x5c29x17[_0xd587[284]](_0xd587[892]),_0x5c29x5[_0xd587[3085]](_0x5c29x16,_0x5c29x12,_0x5c29x17))}}else {var _0x5c29x1b=null,_0x5c29x1c=_0x5c29x5[_0xd587[3087]](_0x5c29xa,_0x5c29x12,function(){var _0x5c29x2=_0x5c29x9[_0xd587[3118]][_0x5c29x1b[_0xd587[131]]];if(null!= _0x5c29x2){var _0x5c29x2=_0x5c29x2[_0xd587[238]](),_0x5c29x3=_0x5c29x1b[_0xd587[1040]][_0x5c29x1b[_0xd587[1039]]][_0xd587[3289]];null!= _0x5c29x3&& _0x5c29x2[_0xd587[475]](_0x5c29x3);return _0x5c29x2};mxLog[_0xd587[283]](_0xd587[3290]+ _0x5c29x2+ _0xd587[3291]);return null},null,null,_0x5c29x17),_0x5c29x1b=_0x5c29x5[_0xd587[970]]();mxEvent[_0xd587[169]](_0x5c29x1b,_0xd587[826],function(){_0x5c29x5[_0xd587[3082]][_0xd587[1047]](_0x5c29x1c,function(_0x5c29x2){_0x5c29x2= mxUtils[_0xd587[2196]](_0x5c29x9[_0xd587[1179]][_0xd587[526]],mxEvent[_0xd587[731]](_0x5c29x2),mxEvent[_0xd587[733]](_0x5c29x2));return _0x5c29x9[_0xd587[817]](null,_0x5c29x1a(),_0x5c29x2[_0xd587[235]],_0x5c29x2[_0xd587[236]])});_0x5c29x5[_0xd587[3082]][_0xd587[1023]]= !1});for(_0x5c29xa= 0;_0x5c29xa< _0x5c29x13[_0xd587[67]];_0x5c29xa++){_0x5c29x17= _0x5c29x13[_0x5c29xa],_0xd587[3072]== _0x5c29x17[_0xd587[301]]?_0x5c29x5[_0xd587[972]](_0x5c29x1b,_0xd587[3288]):_0xd587[99]== _0x5c29x17[_0xd587[301]]&& (_0x5c29x12= _0x5c29x17[_0xd587[284]](_0xd587[3069]),_0x5c29x18= _0x5c29x17[_0xd587[284]](_0xd587[3231]),_0x5c29x5[_0xd587[972]](_0x5c29x1b,_0x5c29x12,_0x5c29x18|| _0x5c29x16)[_0xd587[3289]]= _0x5c29x17[_0xd587[284]](_0xd587[124]))}}}}}};null!= _0x5c29x19&& (_0x5c29x16= _0x5c29x4[_0xd587[284]](_0xd587[1363]),null!= _0x5c29x16&& 0< _0x5c29x16[_0xd587[67]]&& _0x5c29x19[_0xd587[57]](_0xd587[1363],_0x5c29x16))}}}}};_0x5c29x4= _0x5c29x4[_0xd587[287]]}};return _0x5c29x5};return _0x5c29x2}());mxCodecRegistry[_0xd587[3234]](function(){var _0x5c29x2= new mxObjectCodec( new mxDefaultPopupMenu);_0x5c29x2[_0xd587[514]]= function(_0x5c29x2,_0x5c29x4){return null};_0x5c29x2[_0xd587[1093]]= function(_0x5c29x2,_0x5c29x4,_0x5c29x5){var _0x5c29x9=_0x5c29x4[_0xd587[64]](_0xd587[3277])[0];null!= _0x5c29x9?this[_0xd587[3273]](_0x5c29x2,_0x5c29x9,_0x5c29x5):null!= _0x5c29x5&& (_0x5c29x5[_0xd587[3064]]= _0x5c29x4);return _0x5c29x5};return _0x5c29x2}());mxCodecRegistry[_0xd587[3234]](function(){var _0x5c29x2= new mxObjectCodec( new mxEditor,_0xd587[3292][_0xd587[224]](_0xd587[185]));_0x5c29x2[_0xd587[3268]]= function(_0x5c29x2,_0x5c29x4,_0x5c29x5){_0x5c29x2= _0x5c29x4[_0xd587[284]](_0xd587[2075]);null!= _0x5c29x2&& (_0x5c29x4[_0xd587[1390]](_0xd587[2075]),_0x5c29x5[_0xd587[2075]]= _0x5c29x5[_0xd587[3118]][_0x5c29x2]);_0x5c29x2= _0x5c29x4[_0xd587[284]](_0xd587[3120]);null!= _0x5c29x2&& (_0x5c29x4[_0xd587[1390]](_0xd587[3120]),_0x5c29x5[_0xd587[3120]]= _0x5c29x5[_0xd587[3118]][_0x5c29x2]);return _0x5c29x5};_0x5c29x2[_0xd587[3274]]= function(_0x5c29x2,_0x5c29x4,_0x5c29x5){if(_0xd587[3293]== _0x5c29x4[_0xd587[301]]){if(_0xd587[3118]== _0x5c29x4[_0xd587[284]](_0xd587[3069])){this[_0xd587[3294]](_0x5c29x2,_0x5c29x4,_0x5c29x5);return}}else {if(_0xd587[3295]== _0x5c29x4[_0xd587[301]]){this[_0xd587[3296]](_0x5c29x2,_0x5c29x4,_0x5c29x5);return}};mxObjectCodec[_0xd587[202]][_0xd587[3274]][_0xd587[183]](this,arguments)};_0x5c29x2[_0xd587[3296]]= function(_0x5c29x2,_0x5c29x4,_0x5c29x5){for(_0x5c29x2= _0x5c29x4[_0xd587[285]];null!= _0x5c29x2;){if(_0xd587[99]== _0x5c29x2[_0xd587[301]]){_0x5c29x4= _0x5c29x2[_0xd587[284]](_0xd587[3069]);var _0x5c29x9=_0x5c29x2[_0xd587[284]](_0xd587[980]),_0x5c29xa=_0x5c29x2[_0xd587[284]](_0xd587[124]),_0x5c29x12=null;if(null!= _0x5c29x9){_0x5c29x12= document[_0xd587[1362]](_0x5c29x9),null!= _0x5c29x12&& null!= _0x5c29xa&& (_0x5c29x12[_0xd587[124]][_0xd587[103]]+= _0xd587[471]+ _0x5c29xa)}else {var _0x5c29x9=parseInt(_0x5c29x2[_0xd587[284]](_0xd587[235])),_0x5c29x13=parseInt(_0x5c29x2[_0xd587[284]](_0xd587[236])),_0x5c29x14=_0x5c29x2[_0xd587[284]](_0xd587[117]),_0x5c29x15=_0x5c29x2[_0xd587[284]](_0xd587[119]),_0x5c29x12=document[_0xd587[55]](_0xd587[485]);_0x5c29x12[_0xd587[124]][_0xd587[103]]= _0x5c29xa;( new mxWindow(mxResources[_0xd587[203]](_0x5c29x4)|| _0x5c29x4,_0x5c29x12,_0x5c29x9,_0x5c29x13,_0x5c29x14,_0x5c29x15,!1,!0))[_0xd587[175]](!0)};_0xd587[1179]== _0x5c29x4?_0x5c29x5[_0xd587[3202]](_0x5c29x12):_0xd587[3082]== _0x5c29x4?_0x5c29x5[_0xd587[3204]](_0x5c29x12):_0xd587[924]== _0x5c29x4?_0x5c29x5[_0xd587[3208]](_0x5c29x12):_0xd587[879]== _0x5c29x4?_0x5c29x5[_0xd587[3205]](_0x5c29x12):_0xd587[201]== _0x5c29x4&& _0x5c29x5[_0xd587[3297]](_0x5c29x12)}else {_0xd587[3298]== _0x5c29x2[_0xd587[301]]?mxResources[_0xd587[99]](_0x5c29x2[_0xd587[284]](_0xd587[3299])):_0xd587[94]== _0x5c29x2[_0xd587[301]]&& mxClient[_0xd587[54]](_0xd587[94],_0x5c29x2[_0xd587[284]](_0xd587[298]))};_0x5c29x2= _0x5c29x2[_0xd587[287]]}};_0x5c29x2[_0xd587[3294]]= function(_0x5c29x2,_0x5c29x4,_0x5c29x5){null== _0x5c29x5[_0xd587[3118]]&& (_0x5c29x5[_0xd587[3118]]= []);_0x5c29x4= mxUtils[_0xd587[1540]](_0x5c29x4);for(var _0x5c29x9=0;_0x5c29x9< _0x5c29x4[_0xd587[67]];_0x5c29x9++){for(var _0x5c29xa=_0x5c29x4[_0x5c29x9][_0xd587[284]](_0xd587[3069]),_0x5c29x12=_0x5c29x4[_0x5c29x9][_0xd587[285]];null!= _0x5c29x12&& 1!= _0x5c29x12[_0xd587[288]];){_0x5c29x12= _0x5c29x12[_0xd587[287]]};null!= _0x5c29x12&& (_0x5c29x5[_0xd587[3118]][_0x5c29xa]= _0x5c29x2[_0xd587[3244]](_0x5c29x12))}};return _0x5c29x2}()) \ No newline at end of file diff --git a/public/assets/plugins/square/js/Actions.js b/public/assets/plugins/square/js/Actions.js index 891e88f..b5cad8b 100644 --- a/public/assets/plugins/square/js/Actions.js +++ b/public/assets/plugins/square/js/Actions.js @@ -1,638 +1 @@ -'use strict'; -/** - * $Id: Actions.js,v 1.7 2013-02-14 07:48:01 gaudenz Exp $ - * Copyright (c) 2006-2012, JGraph Ltd - */ -/** - * Constructs the actions object for the given UI. - */ -function Actions(editorUi) { - this.editorUi = editorUi; - this.actions = new Object(); - this.init(); -}; - -/** - * Adds the default actions. - */ -Actions.prototype.init = function() { - var ui = this.editorUi; - var editor = ui.editor; - var graph = editor.graph; - - // File actions - this.addAction('new', function() { - ui.showDialog(new NewDialog(ui).container, 300, 180, true, true); - }); - this.addAction('open', function() { - ui.showDialog(new OpenDialog(ui).container, 300, 180, true, true); - }); - this.addAction('save', function() { - ui.saveFile(false); - }, null, null, 'Ctrl+S'); - this.addAction('saveAs', function() { - ui.saveFile(true); - }, null, null, 'Ctrl+Shift-S'); - this.addAction('publish', function() { - ui.publishFile(false); - }, null, null, 'Ctrl+Shift+P'); - this.addAction('variable', function() { - ui.showDialog(new VariableDialog(ui).container, 300, 180, true, true); - }); - this.addAction('description', function() { - ui.showDialog(new DescriptionDialog(ui).container, 300, 180, true, true); - }); - this.addAction('import', function() { - ui.showDialog(new ImportDialog(ui).container, 300, 200, true, true); - }); - this.addAction('export', function() { - ui.showDialog(new ExportDialog(ui).container, 300, 200, true, true); - }, null, null, 'Ctrl+E'); - this.put('editFile', new Action(mxResources.get('edit'), mxUtils.bind(this, - function() { - this.editorUi.showDialog(new EditFileDialog(ui).container, 620, 420, - true, true); - }))); - // this.addAction('rename', function() { - // ui.showDialog(new RenameDialog(ui).container, 300, 180, true, true); - // }); - this.addAction('print', function() { - mxUtils.printScreen(graph); - }, null, 'sprite-print', 'Ctrl+P'); - this.addAction('preview', function() { - mxUtils.show(graph, null, 10, 10); - }); - - // Edit actions - this.addAction('undo', function() { - editor.undoManager.undo(); - }, null, 'sprite-undo', 'Ctrl+Z'); - this.addAction('redo', function() { - editor.undoManager.redo(); - }, null, 'sprite-redo', 'Ctrl+Y'); - this.addAction('cut', function() { - mxClipboard.cut(graph); - }, null, 'sprite-cut', 'Ctrl+X'); - this.addAction('copy', function() { - mxClipboard.copy(graph); - }, null, 'sprite-copy', 'Ctrl+C'); - this.addAction('paste', function() { - mxClipboard.paste(graph); - }, false, 'sprite-paste', 'Ctrl+V'); - this.addAction('delete', function() { - graph.removeCells(); - }, null, null, 'Delete'); - this.addAction('duplicate', function() { - var s = graph.gridSize; - graph.setSelectionCells(graph.moveCells(graph.getSelectionCells(), s, s, - true)); - }, null, null, 'Ctrl+D'); - this.addAction('selectVertices', function() { - graph.selectVertices(); - }, null, null, 'Ctrl+Shift+V'); - this.addAction('selectEdges', function() { - graph.selectEdges(); - }, null, null, 'Ctrl+Shift+E'); - this.addAction('selectAll', function() { - graph.selectAll(); - }, null, null, 'Ctrl+A'); - - // Navigation actions - this.addAction('home', function() { - graph.home(); - }, null, null, 'Home'); - this.addAction('exitGroup', function() { - graph.exitGroup(); - }, null, null, 'Page Up'); - this.addAction('enterGroup', function() { - graph.enterGroup(); - }, null, null, 'Page Down'); - this.addAction('expand', function() { - graph.foldCells(false); - }, null, null, 'Enter'); - this.addAction('collapse', function() { - graph.foldCells(true); - }, null, null, 'Backspace'); - - // Arrange actions - this.addAction('toFront', function() { - graph.orderCells(false); - }, null, null, 'Ctrl+F'); - this.addAction('toBack', function() { - graph.orderCells(true); - }, null, null, 'Ctrl+B'); - this.addAction('group', function() { - graph.setSelectionCell(graph.groupCells(null, 0)); - }, null, null, 'Ctrl+G'); - this.addAction('ungroup', function() { - graph.setSelectionCells(graph.ungroupCells()); - }, null, null, 'Ctrl+U'); - this.addAction('removeFromGroup', function() { - graph.removeCellsFromParent(); - }); - this.addAction('editLink', function() { - var cell = graph.getSelectionCell(); - var link = graph.getLinkForCell(cell); - - if (link == null) { - link = ''; - } - - link = mxUtils.prompt(mxResources.get('enterValue'), link); - - if (link != null) { - graph.setLinkForCell(cell, link); - } - }); - this.addAction('openLink', function() { - var cell = graph.getSelectionCell(); - var link = graph.getLinkForCell(cell); - - if (link != null) { - window.open(link); - } - }); - this.addAction('autosize', function() { - var cells = graph.getSelectionCells(); - - if (cells != null) { - graph.getModel().beginUpdate(); - try { - for (var i = 0; i < cells.length; i++) { - var cell = cells[i]; - - if (graph.getModel().getChildCount(cell)) { - graph.updateGroupBounds([cell], 20); - } else { - graph.updateCellSize(cell); - } - } - } finally { - graph.getModel().endUpdate(); - } - } - }); - this.addAction('wordWrap', function() { - var state = graph.getView().getState(graph.getSelectionCell()); - var value = 'wrap'; - - if (state != null && state.style[mxConstants.STYLE_WHITE_SPACE] == 'wrap') { - value = null; - } - - graph.setCellStyles(mxConstants.STYLE_WHITE_SPACE, value); - }); - this.addAction('rotation', function() { - var value = '0'; - var state = graph.getView().getState(graph.getSelectionCell()); - - if (state != null) { - value = state.style[mxConstants.STYLE_ROTATION] || value; - } - - value = mxUtils.prompt(mxResources.get('enterValue') + ' (' + - mxResources.get('rotation') + ' 0-360)', value); - - if (value != null) { - graph.setCellStyles(mxConstants.STYLE_ROTATION, value); - } - }); - this.addAction('tilt', function() { - var cells = graph.getSelectionCells(); - - if (cells != null) { - graph.getModel().beginUpdate(); - try { - for (var i = 0; i < cells.length; i++) { - var cell = cells[i]; - - if (graph.getModel().isVertex(cell) && graph.getModel().getChildCount( - cell) == 0) { - var geo = graph.getCellGeometry(cell); - - if (geo != null) { - // Rotates the size and position in the geometry - geo = geo.clone(); - geo.x += geo.width / 2 - geo.height / 2; - geo.y += geo.height / 2 - geo.width / 2; - var tmp = geo.width; - geo.width = geo.height; - geo.height = tmp; - graph.getModel().setGeometry(cell, geo); - - // Reads the current direction and advances by 90 degrees - var state = graph.view.getState(cell); - - if (state != null) { - var dir = state.style[mxConstants.STYLE_DIRECTION] || 'east' /*default*/ ; - - if (dir == 'east') { - dir = 'south'; - } else if (dir == 'south') { - dir = 'west'; - } else if (dir == 'west') { - dir = 'north'; - } else if (dir == 'north') { - dir = 'east'; - } - - graph.setCellStyles(mxConstants.STYLE_DIRECTION, dir, [cell]); - } - } - } - } - } finally { - graph.getModel().endUpdate(); - } - } - }, null, null, 'Ctrl+R'); - - // View actions - this.addAction('actualSize', function() { - graph.zoomTo(1); - }); - this.addAction('zoomIn', function() { - graph.zoomIn(); - }, null, null, 'Add'); - this.addAction('zoomOut', function() { - graph.zoomOut(); - }, null, null, 'Subtract'); - this.addAction('fitWindow', function() { - graph.fit(); - }); - - this.addAction('fitPage', mxUtils.bind(this, function() { - if (!graph.pageVisible) { - this.get('pageView').funct(); - } - - var fmt = graph.pageFormat; - var ps = graph.pageScale; - var cw = graph.container.clientWidth - 20; - var ch = graph.container.clientHeight - 20; - - var scale = Math.floor(100 * Math.min(cw / fmt.width / ps, ch / fmt.height / - ps)) / 100; - graph.zoomTo(scale); - - graph.container.scrollLeft = Math.round(graph.view.translate.x * scale - - Math.max(10, (graph.container.clientWidth - fmt.width * ps * scale) / 2) - ); - graph.container.scrollTop = Math.round(graph.view.translate.y * scale - - Math.max(10, (graph.container.clientHeight - fmt.height * ps * scale) / - 2)); - })); - this.addAction('fitPageWidth', mxUtils.bind(this, function() { - if (!graph.pageVisible) { - this.get('pageView').funct(); - } - - var fmt = graph.pageFormat; - var ps = graph.pageScale; - var cw = graph.container.clientWidth - 20; - - var scale = Math.floor(100 * cw / fmt.width / ps) / 100; - graph.zoomTo(scale); - - graph.container.scrollLeft = Math.round(graph.view.translate.x * scale - - Math.max(10, (graph.container.clientWidth - fmt.width * ps * scale) / 2) - ); - graph.container.scrollTop = Math.round(graph.view.translate.y * scale - - Math.max(10, (graph.container.clientHeight - fmt.height * ps * scale) / - 2)); - })); - this.put('customZoom', new Action(mxResources.get('custom'), function() { - var value = mxUtils.prompt(mxResources.get('enterValue') + ' (%)', - parseInt(graph.getView().getScale() * 100)); - - if (value != null && value.length > 0 && !isNaN(parseInt(value))) { - graph.zoomTo(parseInt(value) / 100); - } - })); - - // Option actions - var action = null; - action = this.addAction('grid', function() { - graph.setGridEnabled(!graph.isGridEnabled()); - editor.updateGraphComponents(); - }, null, null, 'Ctrl+Shift+G'); - action.setToggleAction(true); - action.setSelectedCallback(function() { - return graph.isGridEnabled(); - }); - action = this.addAction('guides', function() { - graph.graphHandler.guidesEnabled = !graph.graphHandler.guidesEnabled; - }); - action.setToggleAction(true); - action.setSelectedCallback(function() { - return graph.graphHandler.guidesEnabled; - }); - action = this.addAction('tooltips', function() { - graph.tooltipHandler.setEnabled(!graph.tooltipHandler.isEnabled()); - }); - action.setToggleAction(true); - action.setSelectedCallback(function() { - return graph.tooltipHandler.isEnabled(); - }); - action = this.addAction('navigation', function() { - graph.foldingEnabled = !graph.foldingEnabled; - graph.view.revalidate(); - }); - action.setToggleAction(true); - action.setSelectedCallback(function() { - return graph.foldingEnabled; - }); - action = this.addAction('scrollbars', function() { - graph.scrollbars = !graph.scrollbars; - editor.updateGraphComponents(); - - if (!graph.scrollbars) { - var t = graph.view.translate; - graph.view.setTranslate(t.x - graph.container.scrollLeft / graph.view.scale, - t.y - graph.container.scrollTop / graph.view.scale); - graph.container.scrollLeft = 0; - graph.container.scrollTop = 0; - graph.sizeDidChange(); - } else { - var dx = graph.view.translate.x; - var dy = graph.view.translate.y; - - graph.view.translate.x = 0; - graph.view.translate.y = 0; - graph.sizeDidChange(); - graph.container.scrollLeft -= Math.round(dx * graph.view.scale); - graph.container.scrollTop -= Math.round(dy * graph.view.scale); - } - }, !mxClient.IS_TOUCH); - action.setToggleAction(true); - action.setSelectedCallback(function() { - return graph.container.style.overflow == 'auto'; - }); - action = this.addAction('pageView', mxUtils.bind(this, function() { - graph.pageVisible = !graph.pageVisible; - graph.pageBreaksVisible = graph.pageVisible; - graph.preferPageSize = graph.pageBreaksVisible; - graph.view.validate(); - graph.sizeDidChange(); - - editor.updateGraphComponents(); - editor.outline.update(); - - if (mxUtils.hasScrollbars(graph.container)) { - if (graph.pageVisible) { - graph.container.scrollLeft -= 20; - graph.container.scrollTop -= 20; - } else { - graph.container.scrollLeft += 20; - graph.container.scrollTop += 20; - } - } - })); - action.setToggleAction(true); - action.setSelectedCallback(function() { - return graph.pageVisible; - }); - action = this.addAction('connect', function() { - graph.setConnectable(!graph.connectionHandler.isEnabled()); - }, null, null, 'Ctrl+Q'); - action.setToggleAction(true); - action.setSelectedCallback(function() { - return graph.connectionHandler.isEnabled(); - }); - action = this.addAction('copyConnect', function() { - graph.connectionHandler.setCreateTarget(!graph.connectionHandler.isCreateTarget()); - }); - action.setToggleAction(true); - action.setSelectedCallback(function() { - return graph.connectionHandler.isCreateTarget(); - }); - - // Help actions - this.addAction('help', function() { - var ext = ''; - - if (mxResources.isLanguageSupported(mxClient.language)) { - ext = '_' + mxClient.language; - } - - window.open("https://wiki.xcallymotion.com/display/XMD/Cally+Square"); - //window.open(RESOURCES_PATH + '/help' + ext + '.html'); - }); - this.put('about', new Action(mxResources.get('about') + ' Cally Square', - function() { - ui.showDialog(new AboutDialog(ui).container, 320, 280, true, true); - }, null, null, 'F1')); - - // Font style actions - var toggleFontStyle = mxUtils.bind(this, function(key, style) { - this.addAction(key, function() { - graph.toggleCellStyleFlags(mxConstants.STYLE_FONTSTYLE, style); - }); - }); - - toggleFontStyle('bold', mxConstants.FONT_BOLD); - toggleFontStyle('italic', mxConstants.FONT_ITALIC); - toggleFontStyle('underline', mxConstants.FONT_UNDERLINE); - - // Format actions - this.addAction('shadow', function() { - graph.toggleCellStyles(mxConstants.STYLE_SHADOW); - }); - this.addAction('dashed', function() { - graph.toggleCellStyles(mxConstants.STYLE_DASHED); - }); - this.addAction('rounded', function() { - graph.toggleCellStyles(mxConstants.STYLE_ROUNDED); - }); - this.addAction('curved', function() { - graph.toggleCellStyles(mxConstants.STYLE_CURVED); - }); - this.addAction('style', function() { - var cells = graph.getSelectionCells(); - - if (cells != null && cells.length > 0) { - var model = graph.getModel(); - var style = mxUtils.prompt(mxResources.get('enterValue') + ' (' + - mxResources.get('style') + ')', - model.getStyle(cells[0]) || ''); - - if (style != null) { - graph.setCellStyle(style, cells); - } - } - }); - this.addAction('setAsDefaultEdge', function() { - graph.setDefaultEdge(graph.getSelectionCell()); - }); - this.addAction('addWaypoint', function() { - var cell = graph.getSelectionCell(); - - if (cell != null && graph.getModel().isEdge(cell)) { - var handler = editor.graph.selectionCellsHandler.getHandler(cell); - - if (handler instanceof mxEdgeHandler) { - var t = graph.view.translate; - var s = graph.view.scale; - var dx = t.x; - var dy = t.y; - - var parent = graph.getModel().getParent(cell); - var pgeo = graph.getCellGeometry(parent); - - if (graph.getModel().isVertex(parent) && pgeo != null) { - dx += pgeo.x; - dy += pgeo.y; - } - - handler.addPointAt(handler.state, graph.panningHandler.triggerX / s - dx, - graph.panningHandler.triggerY / s - dy); - } - } - }); - this.addAction('removeWaypoint', function() { - // TODO: Action should run with "this" set to action - var rmWaypointAction = ui.actions.get('removeWaypoint'); - - if (rmWaypointAction.handler != null) { - // NOTE: Popupevent handled and action updated in Menus.createPopupMenu - rmWaypointAction.handler.removePoint(rmWaypointAction.handler.state, - rmWaypointAction.index); - } - }); - this.addAction('image', function() { - function updateImage(value, w, h) { - var select = null; - var cells = graph.getSelectionCells(); - - graph.getModel().beginUpdate(); - try { - // Inserts new cell if no cell is selected - if (cells.length == 0) { - var gs = graph.getGridSize(); - cells = [graph.insertVertex(graph.getDefaultParent(), null, '', gs, gs, - w, h)]; - select = cells; - } - - graph.setCellStyles(mxConstants.STYLE_IMAGE, value, cells); - graph.setCellStyles(mxConstants.STYLE_SHAPE, 'image', cells); - - if (graph.getSelectionCount() == 1) { - if (w != null && h != null) { - var cell = cells[0]; - var geo = graph.getModel().getGeometry(cell); - - if (geo != null) { - geo = geo.clone(); - geo.width = w; - geo.height = h; - graph.getModel().setGeometry(cell, geo); - } - } - } - } finally { - graph.getModel().endUpdate(); - } - - if (select != null) { - graph.setSelectionCells(select); - graph.scrollCellToVisible(select[0]); - } - }; - - var value = ''; - var state = graph.getView().getState(graph.getSelectionCell()); - - if (state != null) { - value = state.style[mxConstants.STYLE_IMAGE] || value; - } - - value = mxUtils.prompt(mxResources.get('enterValue') + ' (' + mxResources.get( - 'url') + ')', value); - - if (value != null) { - if (value.length > 0) { - var img = new Image(); - - img.onload = function() { - updateImage(value, img.width, img.height); - }; - img.onerror = function() { - mxUtils.alert(mxResources.get('fileNotFound')); - }; - - img.src = value; - } - } - }); -}; - -/** - * Registers the given action under the given name. - */ -Actions.prototype.addAction = function(key, funct, enabled, iconCls, shortcut) { - return this.put(key, new Action(mxResources.get(key), funct, enabled, iconCls, - shortcut)); -}; - -/** - * Registers the given action under the given name. - */ -Actions.prototype.put = function(name, action) { - this.actions[name] = action; - - return action; -}; - -/** - * Returns the action for the given name or null if no such action exists. - */ -Actions.prototype.get = function(name) { - return this.actions[name]; -}; - -/** - * Constructs a new action for the given parameters. - */ -function Action(label, funct, enabled, iconCls, shortcut) { - mxEventSource.call(this); - this.label = label; - this.funct = funct; - this.enabled = (enabled != null) ? enabled : true; - this.iconCls = iconCls; - this.shortcut = shortcut; -}; - -// Action inherits from mxEventSource -mxUtils.extend(Action, mxEventSource); - -/** - * Sets the enabled state of the action and fires a stateChanged event. - */ -Action.prototype.setEnabled = function(value) { - if (this.enabled != value) { - this.enabled = value; - this.fireEvent(new mxEventObject('stateChanged')); - } -}; - -/** - * Sets the enabled state of the action and fires a stateChanged event. - */ -Action.prototype.setToggleAction = function(value) { - this.toggleAction = value; -}; - -/** - * Sets the enabled state of the action and fires a stateChanged event. - */ -Action.prototype.setSelectedCallback = function(funct) { - this.selectedCallback = funct; -}; - -/** - * Sets the enabled state of the action and fires a stateChanged event. - */ -Action.prototype.isSelected = function() { - return this.selectedCallback(); -}; +var _0x1da6=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x64\x69\x74\x6F\x72\x55\x69","\x61\x63\x74\x69\x6F\x6E\x73","\x69\x6E\x69\x74","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x65\x64\x69\x74\x6F\x72","\x67\x72\x61\x70\x68","\x6E\x65\x77","\x63\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x73\x68\x6F\x77\x44\x69\x61\x6C\x6F\x67","\x61\x64\x64\x41\x63\x74\x69\x6F\x6E","\x6F\x70\x65\x6E","\x73\x61\x76\x65","\x73\x61\x76\x65\x46\x69\x6C\x65","\x43\x74\x72\x6C\x2B\x53","\x73\x61\x76\x65\x41\x73","\x43\x74\x72\x6C\x2B\x53\x68\x69\x66\x74\x2D\x53","\x70\x75\x62\x6C\x69\x73\x68","\x70\x75\x62\x6C\x69\x73\x68\x46\x69\x6C\x65","\x43\x74\x72\x6C\x2B\x53\x68\x69\x66\x74\x2B\x50","\x76\x61\x72\x69\x61\x62\x6C\x65","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x69\x6D\x70\x6F\x72\x74","\x65\x78\x70\x6F\x72\x74","\x43\x74\x72\x6C\x2B\x45","\x65\x64\x69\x74\x46\x69\x6C\x65","\x65\x64\x69\x74","\x67\x65\x74","\x62\x69\x6E\x64","\x70\x75\x74","\x70\x72\x69\x6E\x74","\x70\x72\x69\x6E\x74\x53\x63\x72\x65\x65\x6E","\x73\x70\x72\x69\x74\x65\x2D\x70\x72\x69\x6E\x74","\x43\x74\x72\x6C\x2B\x50","\x70\x72\x65\x76\x69\x65\x77","\x73\x68\x6F\x77","\x75\x6E\x64\x6F","\x75\x6E\x64\x6F\x4D\x61\x6E\x61\x67\x65\x72","\x73\x70\x72\x69\x74\x65\x2D\x75\x6E\x64\x6F","\x43\x74\x72\x6C\x2B\x5A","\x72\x65\x64\x6F","\x73\x70\x72\x69\x74\x65\x2D\x72\x65\x64\x6F","\x43\x74\x72\x6C\x2B\x59","\x63\x75\x74","\x73\x70\x72\x69\x74\x65\x2D\x63\x75\x74","\x43\x74\x72\x6C\x2B\x58","\x63\x6F\x70\x79","\x73\x70\x72\x69\x74\x65\x2D\x63\x6F\x70\x79","\x43\x74\x72\x6C\x2B\x43","\x70\x61\x73\x74\x65","\x73\x70\x72\x69\x74\x65\x2D\x70\x61\x73\x74\x65","\x43\x74\x72\x6C\x2B\x56","\x64\x65\x6C\x65\x74\x65","\x72\x65\x6D\x6F\x76\x65\x43\x65\x6C\x6C\x73","\x44\x65\x6C\x65\x74\x65","\x64\x75\x70\x6C\x69\x63\x61\x74\x65","\x67\x72\x69\x64\x53\x69\x7A\x65","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73","\x6D\x6F\x76\x65\x43\x65\x6C\x6C\x73","\x73\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73","\x43\x74\x72\x6C\x2B\x44","\x73\x65\x6C\x65\x63\x74\x56\x65\x72\x74\x69\x63\x65\x73","\x43\x74\x72\x6C\x2B\x53\x68\x69\x66\x74\x2B\x56","\x73\x65\x6C\x65\x63\x74\x45\x64\x67\x65\x73","\x43\x74\x72\x6C\x2B\x53\x68\x69\x66\x74\x2B\x45","\x73\x65\x6C\x65\x63\x74\x41\x6C\x6C","\x43\x74\x72\x6C\x2B\x41","\x68\x6F\x6D\x65","\x48\x6F\x6D\x65","\x65\x78\x69\x74\x47\x72\x6F\x75\x70","\x50\x61\x67\x65\x20\x55\x70","\x65\x6E\x74\x65\x72\x47\x72\x6F\x75\x70","\x50\x61\x67\x65\x20\x44\x6F\x77\x6E","\x65\x78\x70\x61\x6E\x64","\x66\x6F\x6C\x64\x43\x65\x6C\x6C\x73","\x45\x6E\x74\x65\x72","\x63\x6F\x6C\x6C\x61\x70\x73\x65","\x42\x61\x63\x6B\x73\x70\x61\x63\x65","\x74\x6F\x46\x72\x6F\x6E\x74","\x6F\x72\x64\x65\x72\x43\x65\x6C\x6C\x73","\x43\x74\x72\x6C\x2B\x46","\x74\x6F\x42\x61\x63\x6B","\x43\x74\x72\x6C\x2B\x42","\x67\x72\x6F\x75\x70","\x67\x72\x6F\x75\x70\x43\x65\x6C\x6C\x73","\x73\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C","\x43\x74\x72\x6C\x2B\x47","\x75\x6E\x67\x72\x6F\x75\x70","\x75\x6E\x67\x72\x6F\x75\x70\x43\x65\x6C\x6C\x73","\x43\x74\x72\x6C\x2B\x55","\x72\x65\x6D\x6F\x76\x65\x46\x72\x6F\x6D\x47\x72\x6F\x75\x70","\x72\x65\x6D\x6F\x76\x65\x43\x65\x6C\x6C\x73\x46\x72\x6F\x6D\x50\x61\x72\x65\x6E\x74","\x65\x64\x69\x74\x4C\x69\x6E\x6B","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C","\x67\x65\x74\x4C\x69\x6E\x6B\x46\x6F\x72\x43\x65\x6C\x6C","","\x65\x6E\x74\x65\x72\x56\x61\x6C\x75\x65","\x70\x72\x6F\x6D\x70\x74","\x73\x65\x74\x4C\x69\x6E\x6B\x46\x6F\x72\x43\x65\x6C\x6C","\x6F\x70\x65\x6E\x4C\x69\x6E\x6B","\x61\x75\x74\x6F\x73\x69\x7A\x65","\x62\x65\x67\x69\x6E\x55\x70\x64\x61\x74\x65","\x67\x65\x74\x4D\x6F\x64\x65\x6C","\x6C\x65\x6E\x67\x74\x68","\x67\x65\x74\x43\x68\x69\x6C\x64\x43\x6F\x75\x6E\x74","\x75\x70\x64\x61\x74\x65\x47\x72\x6F\x75\x70\x42\x6F\x75\x6E\x64\x73","\x75\x70\x64\x61\x74\x65\x43\x65\x6C\x6C\x53\x69\x7A\x65","\x65\x6E\x64\x55\x70\x64\x61\x74\x65","\x77\x6F\x72\x64\x57\x72\x61\x70","\x67\x65\x74\x53\x74\x61\x74\x65","\x67\x65\x74\x56\x69\x65\x77","\x77\x72\x61\x70","\x53\x54\x59\x4C\x45\x5F\x57\x48\x49\x54\x45\x5F\x53\x50\x41\x43\x45","\x73\x74\x79\x6C\x65","\x73\x65\x74\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65\x73","\x72\x6F\x74\x61\x74\x69\x6F\x6E","\x30","\x53\x54\x59\x4C\x45\x5F\x52\x4F\x54\x41\x54\x49\x4F\x4E","\x20\x28","\x20\x30\x2D\x33\x36\x30\x29","\x74\x69\x6C\x74","\x69\x73\x56\x65\x72\x74\x65\x78","\x67\x65\x74\x43\x65\x6C\x6C\x47\x65\x6F\x6D\x65\x74\x72\x79","\x63\x6C\x6F\x6E\x65","\x78","\x77\x69\x64\x74\x68","\x68\x65\x69\x67\x68\x74","\x79","\x73\x65\x74\x47\x65\x6F\x6D\x65\x74\x72\x79","\x76\x69\x65\x77","\x53\x54\x59\x4C\x45\x5F\x44\x49\x52\x45\x43\x54\x49\x4F\x4E","\x65\x61\x73\x74","\x73\x6F\x75\x74\x68","\x77\x65\x73\x74","\x6E\x6F\x72\x74\x68","\x43\x74\x72\x6C\x2B\x52","\x61\x63\x74\x75\x61\x6C\x53\x69\x7A\x65","\x7A\x6F\x6F\x6D\x54\x6F","\x7A\x6F\x6F\x6D\x49\x6E","\x41\x64\x64","\x7A\x6F\x6F\x6D\x4F\x75\x74","\x53\x75\x62\x74\x72\x61\x63\x74","\x66\x69\x74\x57\x69\x6E\x64\x6F\x77","\x66\x69\x74","\x66\x69\x74\x50\x61\x67\x65","\x70\x61\x67\x65\x56\x69\x73\x69\x62\x6C\x65","\x66\x75\x6E\x63\x74","\x70\x61\x67\x65\x56\x69\x65\x77","\x70\x61\x67\x65\x46\x6F\x72\x6D\x61\x74","\x70\x61\x67\x65\x53\x63\x61\x6C\x65","\x63\x6C\x69\x65\x6E\x74\x57\x69\x64\x74\x68","\x63\x6C\x69\x65\x6E\x74\x48\x65\x69\x67\x68\x74","\x6D\x69\x6E","\x66\x6C\x6F\x6F\x72","\x73\x63\x72\x6F\x6C\x6C\x4C\x65\x66\x74","\x74\x72\x61\x6E\x73\x6C\x61\x74\x65","\x6D\x61\x78","\x72\x6F\x75\x6E\x64","\x73\x63\x72\x6F\x6C\x6C\x54\x6F\x70","\x66\x69\x74\x50\x61\x67\x65\x57\x69\x64\x74\x68","\x63\x75\x73\x74\x6F\x6D\x5A\x6F\x6F\x6D","\x63\x75\x73\x74\x6F\x6D","\x20\x28\x25\x29","\x67\x65\x74\x53\x63\x61\x6C\x65","\x67\x72\x69\x64","\x69\x73\x47\x72\x69\x64\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x47\x72\x69\x64\x45\x6E\x61\x62\x6C\x65\x64","\x75\x70\x64\x61\x74\x65\x47\x72\x61\x70\x68\x43\x6F\x6D\x70\x6F\x6E\x65\x6E\x74\x73","\x43\x74\x72\x6C\x2B\x53\x68\x69\x66\x74\x2B\x47","\x73\x65\x74\x54\x6F\x67\x67\x6C\x65\x41\x63\x74\x69\x6F\x6E","\x73\x65\x74\x53\x65\x6C\x65\x63\x74\x65\x64\x43\x61\x6C\x6C\x62\x61\x63\x6B","\x67\x75\x69\x64\x65\x73","\x67\x75\x69\x64\x65\x73\x45\x6E\x61\x62\x6C\x65\x64","\x67\x72\x61\x70\x68\x48\x61\x6E\x64\x6C\x65\x72","\x74\x6F\x6F\x6C\x74\x69\x70\x73","\x69\x73\x45\x6E\x61\x62\x6C\x65\x64","\x74\x6F\x6F\x6C\x74\x69\x70\x48\x61\x6E\x64\x6C\x65\x72","\x73\x65\x74\x45\x6E\x61\x62\x6C\x65\x64","\x6E\x61\x76\x69\x67\x61\x74\x69\x6F\x6E","\x66\x6F\x6C\x64\x69\x6E\x67\x45\x6E\x61\x62\x6C\x65\x64","\x72\x65\x76\x61\x6C\x69\x64\x61\x74\x65","\x73\x63\x72\x6F\x6C\x6C\x62\x61\x72\x73","\x73\x63\x61\x6C\x65","\x73\x65\x74\x54\x72\x61\x6E\x73\x6C\x61\x74\x65","\x73\x69\x7A\x65\x44\x69\x64\x43\x68\x61\x6E\x67\x65","\x6F\x76\x65\x72\x66\x6C\x6F\x77","\x61\x75\x74\x6F","\x70\x61\x67\x65\x42\x72\x65\x61\x6B\x73\x56\x69\x73\x69\x62\x6C\x65","\x70\x72\x65\x66\x65\x72\x50\x61\x67\x65\x53\x69\x7A\x65","\x76\x61\x6C\x69\x64\x61\x74\x65","\x75\x70\x64\x61\x74\x65","\x6F\x75\x74\x6C\x69\x6E\x65","\x68\x61\x73\x53\x63\x72\x6F\x6C\x6C\x62\x61\x72\x73","\x63\x6F\x6E\x6E\x65\x63\x74","\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x48\x61\x6E\x64\x6C\x65\x72","\x73\x65\x74\x43\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65","\x43\x74\x72\x6C\x2B\x51","\x63\x6F\x70\x79\x43\x6F\x6E\x6E\x65\x63\x74","\x69\x73\x43\x72\x65\x61\x74\x65\x54\x61\x72\x67\x65\x74","\x73\x65\x74\x43\x72\x65\x61\x74\x65\x54\x61\x72\x67\x65\x74","\x68\x65\x6C\x70","\x6C\x61\x6E\x67\x75\x61\x67\x65","\x69\x73\x4C\x61\x6E\x67\x75\x61\x67\x65\x53\x75\x70\x70\x6F\x72\x74\x65\x64","\x5F","\x68\x74\x74\x70\x73\x3A\x2F\x2F\x77\x69\x6B\x69\x2E\x78\x63\x61\x6C\x6C\x79\x6D\x6F\x74\x69\x6F\x6E\x2E\x63\x6F\x6D\x2F\x64\x69\x73\x70\x6C\x61\x79\x2F\x58\x4D\x44\x2F\x43\x61\x6C\x6C\x79\x2B\x53\x71\x75\x61\x72\x65","\x61\x62\x6F\x75\x74","\x20\x43\x61\x6C\x6C\x79\x20\x53\x71\x75\x61\x72\x65","\x46\x31","\x74\x6F\x67\x67\x6C\x65\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65\x46\x6C\x61\x67\x73","\x62\x6F\x6C\x64","\x69\x74\x61\x6C\x69\x63","\x75\x6E\x64\x65\x72\x6C\x69\x6E\x65","\x73\x68\x61\x64\x6F\x77","\x74\x6F\x67\x67\x6C\x65\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65\x73","\x64\x61\x73\x68\x65\x64","\x72\x6F\x75\x6E\x64\x65\x64","\x63\x75\x72\x76\x65\x64","\x29","\x67\x65\x74\x53\x74\x79\x6C\x65","\x73\x65\x74\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65","\x73\x65\x74\x41\x73\x44\x65\x66\x61\x75\x6C\x74\x45\x64\x67\x65","\x73\x65\x74\x44\x65\x66\x61\x75\x6C\x74\x45\x64\x67\x65","\x61\x64\x64\x57\x61\x79\x70\x6F\x69\x6E\x74","\x69\x73\x45\x64\x67\x65","\x67\x65\x74\x48\x61\x6E\x64\x6C\x65\x72","\x73\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73\x48\x61\x6E\x64\x6C\x65\x72","\x67\x65\x74\x50\x61\x72\x65\x6E\x74","\x73\x74\x61\x74\x65","\x74\x72\x69\x67\x67\x65\x72\x58","\x70\x61\x6E\x6E\x69\x6E\x67\x48\x61\x6E\x64\x6C\x65\x72","\x74\x72\x69\x67\x67\x65\x72\x59","\x61\x64\x64\x50\x6F\x69\x6E\x74\x41\x74","\x72\x65\x6D\x6F\x76\x65\x57\x61\x79\x70\x6F\x69\x6E\x74","\x68\x61\x6E\x64\x6C\x65\x72","\x69\x6E\x64\x65\x78","\x72\x65\x6D\x6F\x76\x65\x50\x6F\x69\x6E\x74","\x69\x6D\x61\x67\x65","\x67\x65\x74\x47\x72\x69\x64\x53\x69\x7A\x65","\x67\x65\x74\x44\x65\x66\x61\x75\x6C\x74\x50\x61\x72\x65\x6E\x74","\x69\x6E\x73\x65\x72\x74\x56\x65\x72\x74\x65\x78","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x6F\x75\x6E\x74","\x67\x65\x74\x47\x65\x6F\x6D\x65\x74\x72\x79","\x73\x63\x72\x6F\x6C\x6C\x43\x65\x6C\x6C\x54\x6F\x56\x69\x73\x69\x62\x6C\x65","\x53\x54\x59\x4C\x45\x5F\x49\x4D\x41\x47\x45","\x75\x72\x6C","\x6F\x6E\x6C\x6F\x61\x64","\x6F\x6E\x65\x72\x72\x6F\x72","\x66\x69\x6C\x65\x4E\x6F\x74\x46\x6F\x75\x6E\x64","\x61\x6C\x65\x72\x74","\x73\x72\x63","\x63\x61\x6C\x6C","\x6C\x61\x62\x65\x6C","\x65\x6E\x61\x62\x6C\x65\x64","\x69\x63\x6F\x6E\x43\x6C\x73","\x73\x68\x6F\x72\x74\x63\x75\x74","\x65\x78\x74\x65\x6E\x64","\x73\x74\x61\x74\x65\x43\x68\x61\x6E\x67\x65\x64","\x66\x69\x72\x65\x45\x76\x65\x6E\x74","\x74\x6F\x67\x67\x6C\x65\x41\x63\x74\x69\x6F\x6E","\x73\x65\x6C\x65\x63\x74\x65\x64\x43\x61\x6C\x6C\x62\x61\x63\x6B","\x69\x73\x53\x65\x6C\x65\x63\x74\x65\x64"];_0x1da6[0];function Actions(_0x11dcx2){this[_0x1da6[1]]= _0x11dcx2;this[_0x1da6[2]]= new Object();this[_0x1da6[3]]()}Actions[_0x1da6[4]][_0x1da6[3]]= function(){var _0x11dcx3=this[_0x1da6[1]];var _0x11dcx4=_0x11dcx3[_0x1da6[5]];var _0x11dcx5=_0x11dcx4[_0x1da6[6]];this[_0x1da6[10]](_0x1da6[7],function(){_0x11dcx3[_0x1da6[9]]( new NewDialog(_0x11dcx3)[_0x1da6[8]],300,180,true,true)});this[_0x1da6[10]](_0x1da6[11],function(){_0x11dcx3[_0x1da6[9]]( new OpenDialog(_0x11dcx3)[_0x1da6[8]],300,180,true,true)});this[_0x1da6[10]](_0x1da6[12],function(){_0x11dcx3[_0x1da6[13]](false)},null,null,_0x1da6[14]);this[_0x1da6[10]](_0x1da6[15],function(){_0x11dcx3[_0x1da6[13]](true)},null,null,_0x1da6[16]);this[_0x1da6[10]](_0x1da6[17],function(){_0x11dcx3[_0x1da6[18]](false)},null,null,_0x1da6[19]);this[_0x1da6[10]](_0x1da6[20],function(){_0x11dcx3[_0x1da6[9]]( new VariableDialog(_0x11dcx3)[_0x1da6[8]],300,180,true,true)});this[_0x1da6[10]](_0x1da6[21],function(){_0x11dcx3[_0x1da6[9]]( new DescriptionDialog(_0x11dcx3)[_0x1da6[8]],300,180,true,true)});this[_0x1da6[10]](_0x1da6[22],function(){_0x11dcx3[_0x1da6[9]]( new ImportDialog(_0x11dcx3)[_0x1da6[8]],300,200,true,true)});this[_0x1da6[10]](_0x1da6[23],function(){_0x11dcx3[_0x1da6[9]]( new ExportDialog(_0x11dcx3)[_0x1da6[8]],300,200,true,true)},null,null,_0x1da6[24]);this[_0x1da6[29]](_0x1da6[25], new Action(mxResources[_0x1da6[27]](_0x1da6[26]),mxUtils[_0x1da6[28]](this,function(){this[_0x1da6[1]][_0x1da6[9]]( new EditFileDialog(_0x11dcx3)[_0x1da6[8]],620,420,true,true)})));this[_0x1da6[10]](_0x1da6[30],function(){mxUtils[_0x1da6[31]](_0x11dcx5)},null,_0x1da6[32],_0x1da6[33]);this[_0x1da6[10]](_0x1da6[34],function(){mxUtils[_0x1da6[35]](_0x11dcx5,null,10,10)});this[_0x1da6[10]](_0x1da6[36],function(){_0x11dcx4[_0x1da6[37]][_0x1da6[36]]()},null,_0x1da6[38],_0x1da6[39]);this[_0x1da6[10]](_0x1da6[40],function(){_0x11dcx4[_0x1da6[37]][_0x1da6[40]]()},null,_0x1da6[41],_0x1da6[42]);this[_0x1da6[10]](_0x1da6[43],function(){mxClipboard[_0x1da6[43]](_0x11dcx5)},null,_0x1da6[44],_0x1da6[45]);this[_0x1da6[10]](_0x1da6[46],function(){mxClipboard[_0x1da6[46]](_0x11dcx5)},null,_0x1da6[47],_0x1da6[48]);this[_0x1da6[10]](_0x1da6[49],function(){mxClipboard[_0x1da6[49]](_0x11dcx5)},false,_0x1da6[50],_0x1da6[51]);this[_0x1da6[10]](_0x1da6[52],function(){_0x11dcx5[_0x1da6[53]]()},null,null,_0x1da6[54]);this[_0x1da6[10]](_0x1da6[55],function(){var _0x11dcx6=_0x11dcx5[_0x1da6[56]];_0x11dcx5[_0x1da6[59]](_0x11dcx5[_0x1da6[58]](_0x11dcx5[_0x1da6[57]](),_0x11dcx6,_0x11dcx6,true))},null,null,_0x1da6[60]);this[_0x1da6[10]](_0x1da6[61],function(){_0x11dcx5[_0x1da6[61]]()},null,null,_0x1da6[62]);this[_0x1da6[10]](_0x1da6[63],function(){_0x11dcx5[_0x1da6[63]]()},null,null,_0x1da6[64]);this[_0x1da6[10]](_0x1da6[65],function(){_0x11dcx5[_0x1da6[65]]()},null,null,_0x1da6[66]);this[_0x1da6[10]](_0x1da6[67],function(){_0x11dcx5[_0x1da6[67]]()},null,null,_0x1da6[68]);this[_0x1da6[10]](_0x1da6[69],function(){_0x11dcx5[_0x1da6[69]]()},null,null,_0x1da6[70]);this[_0x1da6[10]](_0x1da6[71],function(){_0x11dcx5[_0x1da6[71]]()},null,null,_0x1da6[72]);this[_0x1da6[10]](_0x1da6[73],function(){_0x11dcx5[_0x1da6[74]](false)},null,null,_0x1da6[75]);this[_0x1da6[10]](_0x1da6[76],function(){_0x11dcx5[_0x1da6[74]](true)},null,null,_0x1da6[77]);this[_0x1da6[10]](_0x1da6[78],function(){_0x11dcx5[_0x1da6[79]](false)},null,null,_0x1da6[80]);this[_0x1da6[10]](_0x1da6[81],function(){_0x11dcx5[_0x1da6[79]](true)},null,null,_0x1da6[82]);this[_0x1da6[10]](_0x1da6[83],function(){_0x11dcx5[_0x1da6[85]](_0x11dcx5[_0x1da6[84]](null,0))},null,null,_0x1da6[86]);this[_0x1da6[10]](_0x1da6[87],function(){_0x11dcx5[_0x1da6[59]](_0x11dcx5[_0x1da6[88]]())},null,null,_0x1da6[89]);this[_0x1da6[10]](_0x1da6[90],function(){_0x11dcx5[_0x1da6[91]]()});this[_0x1da6[10]](_0x1da6[92],function(){var _0x11dcx7=_0x11dcx5[_0x1da6[93]]();var _0x11dcx8=_0x11dcx5[_0x1da6[94]](_0x11dcx7);if(_0x11dcx8== null){_0x11dcx8= _0x1da6[95]};_0x11dcx8= mxUtils[_0x1da6[97]](mxResources[_0x1da6[27]](_0x1da6[96]),_0x11dcx8);if(_0x11dcx8!= null){_0x11dcx5[_0x1da6[98]](_0x11dcx7,_0x11dcx8)}});this[_0x1da6[10]](_0x1da6[99],function(){var _0x11dcx7=_0x11dcx5[_0x1da6[93]]();var _0x11dcx8=_0x11dcx5[_0x1da6[94]](_0x11dcx7);if(_0x11dcx8!= null){window[_0x1da6[11]](_0x11dcx8)}});this[_0x1da6[10]](_0x1da6[100],function(){var _0x11dcx9=_0x11dcx5[_0x1da6[57]]();if(_0x11dcx9!= null){_0x11dcx5[_0x1da6[102]]()[_0x1da6[101]]();try{for(var _0x11dcxa=0;_0x11dcxa< _0x11dcx9[_0x1da6[103]];_0x11dcxa++){var _0x11dcx7=_0x11dcx9[_0x11dcxa];if(_0x11dcx5[_0x1da6[102]]()[_0x1da6[104]](_0x11dcx7)){_0x11dcx5[_0x1da6[105]]([_0x11dcx7],20)}else {_0x11dcx5[_0x1da6[106]](_0x11dcx7)}}}finally{_0x11dcx5[_0x1da6[102]]()[_0x1da6[107]]()}}});this[_0x1da6[10]](_0x1da6[108],function(){var _0x11dcxb=_0x11dcx5[_0x1da6[110]]()[_0x1da6[109]](_0x11dcx5[_0x1da6[93]]());var _0x11dcxc=_0x1da6[111];if(_0x11dcxb!= null&& _0x11dcxb[_0x1da6[113]][mxConstants[_0x1da6[112]]]== _0x1da6[111]){_0x11dcxc= null};_0x11dcx5[_0x1da6[114]](mxConstants.STYLE_WHITE_SPACE,_0x11dcxc)});this[_0x1da6[10]](_0x1da6[115],function(){var _0x11dcxc=_0x1da6[116];var _0x11dcxb=_0x11dcx5[_0x1da6[110]]()[_0x1da6[109]](_0x11dcx5[_0x1da6[93]]());if(_0x11dcxb!= null){_0x11dcxc= _0x11dcxb[_0x1da6[113]][mxConstants[_0x1da6[117]]]|| _0x11dcxc};_0x11dcxc= mxUtils[_0x1da6[97]](mxResources[_0x1da6[27]](_0x1da6[96])+ _0x1da6[118]+ mxResources[_0x1da6[27]](_0x1da6[115])+ _0x1da6[119],_0x11dcxc);if(_0x11dcxc!= null){_0x11dcx5[_0x1da6[114]](mxConstants.STYLE_ROTATION,_0x11dcxc)}});this[_0x1da6[10]](_0x1da6[120],function(){var _0x11dcx9=_0x11dcx5[_0x1da6[57]]();if(_0x11dcx9!= null){_0x11dcx5[_0x1da6[102]]()[_0x1da6[101]]();try{for(var _0x11dcxa=0;_0x11dcxa< _0x11dcx9[_0x1da6[103]];_0x11dcxa++){var _0x11dcx7=_0x11dcx9[_0x11dcxa];if(_0x11dcx5[_0x1da6[102]]()[_0x1da6[121]](_0x11dcx7)&& _0x11dcx5[_0x1da6[102]]()[_0x1da6[104]](_0x11dcx7)== 0){var _0x11dcxd=_0x11dcx5[_0x1da6[122]](_0x11dcx7);if(_0x11dcxd!= null){_0x11dcxd= _0x11dcxd[_0x1da6[123]]();_0x11dcxd[_0x1da6[124]]+= _0x11dcxd[_0x1da6[125]]/ 2- _0x11dcxd[_0x1da6[126]]/ 2;_0x11dcxd[_0x1da6[127]]+= _0x11dcxd[_0x1da6[126]]/ 2- _0x11dcxd[_0x1da6[125]]/ 2;var _0x11dcxe=_0x11dcxd[_0x1da6[125]];_0x11dcxd[_0x1da6[125]]= _0x11dcxd[_0x1da6[126]];_0x11dcxd[_0x1da6[126]]= _0x11dcxe;_0x11dcx5[_0x1da6[102]]()[_0x1da6[128]](_0x11dcx7,_0x11dcxd);var _0x11dcxb=_0x11dcx5[_0x1da6[129]][_0x1da6[109]](_0x11dcx7);if(_0x11dcxb!= null){var _0x11dcxf=_0x11dcxb[_0x1da6[113]][mxConstants[_0x1da6[130]]]|| _0x1da6[131];if(_0x11dcxf== _0x1da6[131]){_0x11dcxf= _0x1da6[132]}else {if(_0x11dcxf== _0x1da6[132]){_0x11dcxf= _0x1da6[133]}else {if(_0x11dcxf== _0x1da6[133]){_0x11dcxf= _0x1da6[134]}else {if(_0x11dcxf== _0x1da6[134]){_0x11dcxf= _0x1da6[131]}}}};_0x11dcx5[_0x1da6[114]](mxConstants.STYLE_DIRECTION,_0x11dcxf,[_0x11dcx7])}}}}}finally{_0x11dcx5[_0x1da6[102]]()[_0x1da6[107]]()}}},null,null,_0x1da6[135]);this[_0x1da6[10]](_0x1da6[136],function(){_0x11dcx5[_0x1da6[137]](1)});this[_0x1da6[10]](_0x1da6[138],function(){_0x11dcx5[_0x1da6[138]]()},null,null,_0x1da6[139]);this[_0x1da6[10]](_0x1da6[140],function(){_0x11dcx5[_0x1da6[140]]()},null,null,_0x1da6[141]);this[_0x1da6[10]](_0x1da6[142],function(){_0x11dcx5[_0x1da6[143]]()});this[_0x1da6[10]](_0x1da6[144],mxUtils[_0x1da6[28]](this,function(){if(!_0x11dcx5[_0x1da6[145]]){this[_0x1da6[27]](_0x1da6[147])[_0x1da6[146]]()};var _0x11dcx10=_0x11dcx5[_0x1da6[148]];var _0x11dcx11=_0x11dcx5[_0x1da6[149]];var _0x11dcx12=_0x11dcx5[_0x1da6[8]][_0x1da6[150]]- 20;var _0x11dcx13=_0x11dcx5[_0x1da6[8]][_0x1da6[151]]- 20;var _0x11dcx14=Math[_0x1da6[153]](100* Math[_0x1da6[152]](_0x11dcx12/ _0x11dcx10[_0x1da6[125]]/ _0x11dcx11,_0x11dcx13/ _0x11dcx10[_0x1da6[126]]/ _0x11dcx11))/ 100;_0x11dcx5[_0x1da6[137]](_0x11dcx14);_0x11dcx5[_0x1da6[8]][_0x1da6[154]]= Math[_0x1da6[157]](_0x11dcx5[_0x1da6[129]][_0x1da6[155]][_0x1da6[124]]* _0x11dcx14- Math[_0x1da6[156]](10,(_0x11dcx5[_0x1da6[8]][_0x1da6[150]]- _0x11dcx10[_0x1da6[125]]* _0x11dcx11* _0x11dcx14)/ 2));_0x11dcx5[_0x1da6[8]][_0x1da6[158]]= Math[_0x1da6[157]](_0x11dcx5[_0x1da6[129]][_0x1da6[155]][_0x1da6[127]]* _0x11dcx14- Math[_0x1da6[156]](10,(_0x11dcx5[_0x1da6[8]][_0x1da6[151]]- _0x11dcx10[_0x1da6[126]]* _0x11dcx11* _0x11dcx14)/ 2))}));this[_0x1da6[10]](_0x1da6[159],mxUtils[_0x1da6[28]](this,function(){if(!_0x11dcx5[_0x1da6[145]]){this[_0x1da6[27]](_0x1da6[147])[_0x1da6[146]]()};var _0x11dcx10=_0x11dcx5[_0x1da6[148]];var _0x11dcx11=_0x11dcx5[_0x1da6[149]];var _0x11dcx12=_0x11dcx5[_0x1da6[8]][_0x1da6[150]]- 20;var _0x11dcx14=Math[_0x1da6[153]](100* _0x11dcx12/ _0x11dcx10[_0x1da6[125]]/ _0x11dcx11)/ 100;_0x11dcx5[_0x1da6[137]](_0x11dcx14);_0x11dcx5[_0x1da6[8]][_0x1da6[154]]= Math[_0x1da6[157]](_0x11dcx5[_0x1da6[129]][_0x1da6[155]][_0x1da6[124]]* _0x11dcx14- Math[_0x1da6[156]](10,(_0x11dcx5[_0x1da6[8]][_0x1da6[150]]- _0x11dcx10[_0x1da6[125]]* _0x11dcx11* _0x11dcx14)/ 2));_0x11dcx5[_0x1da6[8]][_0x1da6[158]]= Math[_0x1da6[157]](_0x11dcx5[_0x1da6[129]][_0x1da6[155]][_0x1da6[127]]* _0x11dcx14- Math[_0x1da6[156]](10,(_0x11dcx5[_0x1da6[8]][_0x1da6[151]]- _0x11dcx10[_0x1da6[126]]* _0x11dcx11* _0x11dcx14)/ 2))}));this[_0x1da6[29]](_0x1da6[160], new Action(mxResources[_0x1da6[27]](_0x1da6[161]),function(){var _0x11dcxc=mxUtils[_0x1da6[97]](mxResources[_0x1da6[27]](_0x1da6[96])+ _0x1da6[162],parseInt(_0x11dcx5[_0x1da6[110]]()[_0x1da6[163]]()* 100));if(_0x11dcxc!= null&& _0x11dcxc[_0x1da6[103]]> 0&& !isNaN(parseInt(_0x11dcxc))){_0x11dcx5[_0x1da6[137]](parseInt(_0x11dcxc)/ 100)}}));var _0x11dcx15=null;_0x11dcx15= this[_0x1da6[10]](_0x1da6[164],function(){_0x11dcx5[_0x1da6[166]](!_0x11dcx5[_0x1da6[165]]());_0x11dcx4[_0x1da6[167]]()},null,null,_0x1da6[168]);_0x11dcx15[_0x1da6[169]](true);_0x11dcx15[_0x1da6[170]](function(){return _0x11dcx5[_0x1da6[165]]()});_0x11dcx15= this[_0x1da6[10]](_0x1da6[171],function(){_0x11dcx5[_0x1da6[173]][_0x1da6[172]]= !_0x11dcx5[_0x1da6[173]][_0x1da6[172]]});_0x11dcx15[_0x1da6[169]](true);_0x11dcx15[_0x1da6[170]](function(){return _0x11dcx5[_0x1da6[173]][_0x1da6[172]]});_0x11dcx15= this[_0x1da6[10]](_0x1da6[174],function(){_0x11dcx5[_0x1da6[176]][_0x1da6[177]](!_0x11dcx5[_0x1da6[176]][_0x1da6[175]]())});_0x11dcx15[_0x1da6[169]](true);_0x11dcx15[_0x1da6[170]](function(){return _0x11dcx5[_0x1da6[176]][_0x1da6[175]]()});_0x11dcx15= this[_0x1da6[10]](_0x1da6[178],function(){_0x11dcx5[_0x1da6[179]]= !_0x11dcx5[_0x1da6[179]];_0x11dcx5[_0x1da6[129]][_0x1da6[180]]()});_0x11dcx15[_0x1da6[169]](true);_0x11dcx15[_0x1da6[170]](function(){return _0x11dcx5[_0x1da6[179]]});_0x11dcx15= this[_0x1da6[10]](_0x1da6[181],function(){_0x11dcx5[_0x1da6[181]]= !_0x11dcx5[_0x1da6[181]];_0x11dcx4[_0x1da6[167]]();if(!_0x11dcx5[_0x1da6[181]]){var _0x11dcx16=_0x11dcx5[_0x1da6[129]][_0x1da6[155]];_0x11dcx5[_0x1da6[129]][_0x1da6[183]](_0x11dcx16[_0x1da6[124]]- _0x11dcx5[_0x1da6[8]][_0x1da6[154]]/ _0x11dcx5[_0x1da6[129]][_0x1da6[182]],_0x11dcx16[_0x1da6[127]]- _0x11dcx5[_0x1da6[8]][_0x1da6[158]]/ _0x11dcx5[_0x1da6[129]][_0x1da6[182]]);_0x11dcx5[_0x1da6[8]][_0x1da6[154]]= 0;_0x11dcx5[_0x1da6[8]][_0x1da6[158]]= 0;_0x11dcx5[_0x1da6[184]]()}else {var _0x11dcx17=_0x11dcx5[_0x1da6[129]][_0x1da6[155]][_0x1da6[124]];var _0x11dcx18=_0x11dcx5[_0x1da6[129]][_0x1da6[155]][_0x1da6[127]];_0x11dcx5[_0x1da6[129]][_0x1da6[155]][_0x1da6[124]]= 0;_0x11dcx5[_0x1da6[129]][_0x1da6[155]][_0x1da6[127]]= 0;_0x11dcx5[_0x1da6[184]]();_0x11dcx5[_0x1da6[8]][_0x1da6[154]]-= Math[_0x1da6[157]](_0x11dcx17* _0x11dcx5[_0x1da6[129]][_0x1da6[182]]);_0x11dcx5[_0x1da6[8]][_0x1da6[158]]-= Math[_0x1da6[157]](_0x11dcx18* _0x11dcx5[_0x1da6[129]][_0x1da6[182]])}},!mxClient.IS_TOUCH);_0x11dcx15[_0x1da6[169]](true);_0x11dcx15[_0x1da6[170]](function(){return _0x11dcx5[_0x1da6[8]][_0x1da6[113]][_0x1da6[185]]== _0x1da6[186]});_0x11dcx15= this[_0x1da6[10]](_0x1da6[147],mxUtils[_0x1da6[28]](this,function(){_0x11dcx5[_0x1da6[145]]= !_0x11dcx5[_0x1da6[145]];_0x11dcx5[_0x1da6[187]]= _0x11dcx5[_0x1da6[145]];_0x11dcx5[_0x1da6[188]]= _0x11dcx5[_0x1da6[187]];_0x11dcx5[_0x1da6[129]][_0x1da6[189]]();_0x11dcx5[_0x1da6[184]]();_0x11dcx4[_0x1da6[167]]();_0x11dcx4[_0x1da6[191]][_0x1da6[190]]();if(mxUtils[_0x1da6[192]](_0x11dcx5[_0x1da6[8]])){if(_0x11dcx5[_0x1da6[145]]){_0x11dcx5[_0x1da6[8]][_0x1da6[154]]-= 20;_0x11dcx5[_0x1da6[8]][_0x1da6[158]]-= 20}else {_0x11dcx5[_0x1da6[8]][_0x1da6[154]]+= 20;_0x11dcx5[_0x1da6[8]][_0x1da6[158]]+= 20}}}));_0x11dcx15[_0x1da6[169]](true);_0x11dcx15[_0x1da6[170]](function(){return _0x11dcx5[_0x1da6[145]]});_0x11dcx15= this[_0x1da6[10]](_0x1da6[193],function(){_0x11dcx5[_0x1da6[195]](!_0x11dcx5[_0x1da6[194]][_0x1da6[175]]())},null,null,_0x1da6[196]);_0x11dcx15[_0x1da6[169]](true);_0x11dcx15[_0x1da6[170]](function(){return _0x11dcx5[_0x1da6[194]][_0x1da6[175]]()});_0x11dcx15= this[_0x1da6[10]](_0x1da6[197],function(){_0x11dcx5[_0x1da6[194]][_0x1da6[199]](!_0x11dcx5[_0x1da6[194]][_0x1da6[198]]())});_0x11dcx15[_0x1da6[169]](true);_0x11dcx15[_0x1da6[170]](function(){return _0x11dcx5[_0x1da6[194]][_0x1da6[198]]()});this[_0x1da6[10]](_0x1da6[200],function(){var _0x11dcx19=_0x1da6[95];if(mxResources[_0x1da6[202]](mxClient[_0x1da6[201]])){_0x11dcx19= _0x1da6[203]+ mxClient[_0x1da6[201]]};window[_0x1da6[11]](_0x1da6[204])});this[_0x1da6[29]](_0x1da6[205], new Action(mxResources[_0x1da6[27]](_0x1da6[205])+ _0x1da6[206],function(){_0x11dcx3[_0x1da6[9]]( new AboutDialog(_0x11dcx3)[_0x1da6[8]],320,280,true,true)},null,null,_0x1da6[207]));var _0x11dcx1a=mxUtils[_0x1da6[28]](this,function(_0x11dcx1b,_0x11dcx1c){this[_0x1da6[10]](_0x11dcx1b,function(){_0x11dcx5[_0x1da6[208]](mxConstants.STYLE_FONTSTYLE,_0x11dcx1c)})});_0x11dcx1a(_0x1da6[209],mxConstants.FONT_BOLD);_0x11dcx1a(_0x1da6[210],mxConstants.FONT_ITALIC);_0x11dcx1a(_0x1da6[211],mxConstants.FONT_UNDERLINE);this[_0x1da6[10]](_0x1da6[212],function(){_0x11dcx5[_0x1da6[213]](mxConstants.STYLE_SHADOW)});this[_0x1da6[10]](_0x1da6[214],function(){_0x11dcx5[_0x1da6[213]](mxConstants.STYLE_DASHED)});this[_0x1da6[10]](_0x1da6[215],function(){_0x11dcx5[_0x1da6[213]](mxConstants.STYLE_ROUNDED)});this[_0x1da6[10]](_0x1da6[216],function(){_0x11dcx5[_0x1da6[213]](mxConstants.STYLE_CURVED)});this[_0x1da6[10]](_0x1da6[113],function(){var _0x11dcx9=_0x11dcx5[_0x1da6[57]]();if(_0x11dcx9!= null&& _0x11dcx9[_0x1da6[103]]> 0){var _0x11dcx1d=_0x11dcx5[_0x1da6[102]]();var _0x11dcx1c=mxUtils[_0x1da6[97]](mxResources[_0x1da6[27]](_0x1da6[96])+ _0x1da6[118]+ mxResources[_0x1da6[27]](_0x1da6[113])+ _0x1da6[217],_0x11dcx1d[_0x1da6[218]](_0x11dcx9[0])|| _0x1da6[95]);if(_0x11dcx1c!= null){_0x11dcx5[_0x1da6[219]](_0x11dcx1c,_0x11dcx9)}}});this[_0x1da6[10]](_0x1da6[220],function(){_0x11dcx5[_0x1da6[221]](_0x11dcx5[_0x1da6[93]]())});this[_0x1da6[10]](_0x1da6[222],function(){var _0x11dcx7=_0x11dcx5[_0x1da6[93]]();if(_0x11dcx7!= null&& _0x11dcx5[_0x1da6[102]]()[_0x1da6[223]](_0x11dcx7)){var _0x11dcx1e=_0x11dcx4[_0x1da6[6]][_0x1da6[225]][_0x1da6[224]](_0x11dcx7);if(_0x11dcx1e instanceof mxEdgeHandler){var _0x11dcx16=_0x11dcx5[_0x1da6[129]][_0x1da6[155]];var _0x11dcx6=_0x11dcx5[_0x1da6[129]][_0x1da6[182]];var _0x11dcx17=_0x11dcx16[_0x1da6[124]];var _0x11dcx18=_0x11dcx16[_0x1da6[127]];var _0x11dcx1f=_0x11dcx5[_0x1da6[102]]()[_0x1da6[226]](_0x11dcx7);var _0x11dcx20=_0x11dcx5[_0x1da6[122]](_0x11dcx1f);if(_0x11dcx5[_0x1da6[102]]()[_0x1da6[121]](_0x11dcx1f)&& _0x11dcx20!= null){_0x11dcx17+= _0x11dcx20[_0x1da6[124]];_0x11dcx18+= _0x11dcx20[_0x1da6[127]]};_0x11dcx1e[_0x1da6[231]](_0x11dcx1e[_0x1da6[227]],_0x11dcx5[_0x1da6[229]][_0x1da6[228]]/ _0x11dcx6- _0x11dcx17,_0x11dcx5[_0x1da6[229]][_0x1da6[230]]/ _0x11dcx6- _0x11dcx18)}}});this[_0x1da6[10]](_0x1da6[232],function(){var _0x11dcx21=_0x11dcx3[_0x1da6[2]][_0x1da6[27]](_0x1da6[232]);if(_0x11dcx21[_0x1da6[233]]!= null){_0x11dcx21[_0x1da6[233]][_0x1da6[235]](_0x11dcx21[_0x1da6[233]][_0x1da6[227]],_0x11dcx21[_0x1da6[234]])}});this[_0x1da6[10]](_0x1da6[236],function(){function _0x11dcx22(_0x11dcxc,_0x11dcx23,_0x11dcx24){var _0x11dcx25=null;var _0x11dcx9=_0x11dcx5[_0x1da6[57]]();_0x11dcx5[_0x1da6[102]]()[_0x1da6[101]]();try{if(_0x11dcx9[_0x1da6[103]]== 0){var _0x11dcx26=_0x11dcx5[_0x1da6[237]]();_0x11dcx9= [_0x11dcx5[_0x1da6[239]](_0x11dcx5[_0x1da6[238]](),null,_0x1da6[95],_0x11dcx26,_0x11dcx26,_0x11dcx23,_0x11dcx24)];_0x11dcx25= _0x11dcx9};_0x11dcx5[_0x1da6[114]](mxConstants.STYLE_IMAGE,_0x11dcxc,_0x11dcx9);_0x11dcx5[_0x1da6[114]](mxConstants.STYLE_SHAPE,_0x1da6[236],_0x11dcx9);if(_0x11dcx5[_0x1da6[240]]()== 1){if(_0x11dcx23!= null&& _0x11dcx24!= null){var _0x11dcx7=_0x11dcx9[0];var _0x11dcxd=_0x11dcx5[_0x1da6[102]]()[_0x1da6[241]](_0x11dcx7);if(_0x11dcxd!= null){_0x11dcxd= _0x11dcxd[_0x1da6[123]]();_0x11dcxd[_0x1da6[125]]= _0x11dcx23;_0x11dcxd[_0x1da6[126]]= _0x11dcx24;_0x11dcx5[_0x1da6[102]]()[_0x1da6[128]](_0x11dcx7,_0x11dcxd)}}}}finally{_0x11dcx5[_0x1da6[102]]()[_0x1da6[107]]()};if(_0x11dcx25!= null){_0x11dcx5[_0x1da6[59]](_0x11dcx25);_0x11dcx5[_0x1da6[242]](_0x11dcx25[0])}}var _0x11dcxc=_0x1da6[95];var _0x11dcxb=_0x11dcx5[_0x1da6[110]]()[_0x1da6[109]](_0x11dcx5[_0x1da6[93]]());if(_0x11dcxb!= null){_0x11dcxc= _0x11dcxb[_0x1da6[113]][mxConstants[_0x1da6[243]]]|| _0x11dcxc};_0x11dcxc= mxUtils[_0x1da6[97]](mxResources[_0x1da6[27]](_0x1da6[96])+ _0x1da6[118]+ mxResources[_0x1da6[27]](_0x1da6[244])+ _0x1da6[217],_0x11dcxc);if(_0x11dcxc!= null){if(_0x11dcxc[_0x1da6[103]]> 0){var _0x11dcx27= new Image();_0x11dcx27[_0x1da6[245]]= function(){_0x11dcx22(_0x11dcxc,_0x11dcx27[_0x1da6[125]],_0x11dcx27[_0x1da6[126]])};_0x11dcx27[_0x1da6[246]]= function(){mxUtils[_0x1da6[248]](mxResources[_0x1da6[27]](_0x1da6[247]))};_0x11dcx27[_0x1da6[249]]= _0x11dcxc}}})};Actions[_0x1da6[4]][_0x1da6[10]]= function(_0x11dcx1b,_0x11dcx28,_0x11dcx29,_0x11dcx2a,_0x11dcx2b){return this[_0x1da6[29]](_0x11dcx1b, new Action(mxResources[_0x1da6[27]](_0x11dcx1b),_0x11dcx28,_0x11dcx29,_0x11dcx2a,_0x11dcx2b))};Actions[_0x1da6[4]][_0x1da6[29]]= function(_0x11dcx2c,_0x11dcx15){this[_0x1da6[2]][_0x11dcx2c]= _0x11dcx15;return _0x11dcx15};Actions[_0x1da6[4]][_0x1da6[27]]= function(_0x11dcx2c){return this[_0x1da6[2]][_0x11dcx2c]};function Action(_0x11dcx2e,_0x11dcx28,_0x11dcx29,_0x11dcx2a,_0x11dcx2b){mxEventSource[_0x1da6[250]](this);this[_0x1da6[251]]= _0x11dcx2e;this[_0x1da6[146]]= _0x11dcx28;this[_0x1da6[252]]= (_0x11dcx29!= null)?_0x11dcx29:true;this[_0x1da6[253]]= _0x11dcx2a;this[_0x1da6[254]]= _0x11dcx2b}mxUtils[_0x1da6[255]](Action,mxEventSource);Action[_0x1da6[4]][_0x1da6[177]]= function(_0x11dcxc){if(this[_0x1da6[252]]!= _0x11dcxc){this[_0x1da6[252]]= _0x11dcxc;this[_0x1da6[257]]( new mxEventObject(_0x1da6[256]))}};Action[_0x1da6[4]][_0x1da6[169]]= function(_0x11dcxc){this[_0x1da6[258]]= _0x11dcxc};Action[_0x1da6[4]][_0x1da6[170]]= function(_0x11dcx28){this[_0x1da6[259]]= _0x11dcx28};Action[_0x1da6[4]][_0x1da6[260]]= function(){return this[_0x1da6[259]]()} \ No newline at end of file diff --git a/public/assets/plugins/square/js/Dialogs.js b/public/assets/plugins/square/js/Dialogs.js index 17e2529..6ce06a6 100644 --- a/public/assets/plugins/square/js/Dialogs.js +++ b/public/assets/plugins/square/js/Dialogs.js @@ -1,1276 +1 @@ -'use strict'; -/** - * $Id: Dialogs.js,v 1.5 2013-01-29 17:23:31 gaudenz Exp $ - * Copyright (c) 2006-2012, JGraph Ltd - */ -/** - * Constructs a new dialog. - */ - -function createCheckbox(value) { - var input = document.createElement('input'); - input.setAttribute('type', 'checkbox'); - if (value) { - input.setAttribute('checked', true); - } - return input; -} - -function createDropdownFromApi(path, value, option_name, option_value, editorUi, keys, pattern) { - var req = new XMLHttpRequest(); - req.open('GET', path, false); // `false` makes the request synchronous - req.setRequestHeader('Authorization', 'Bearer ' + editorUi.editor.data.token); - req.send(null); - var res = []; - if (req.status === 200) { - res = JSON.parse(req.response); - } - var input = document.createElement('select'); - var option = document.createElement('option'); - option.text = '-- None --'; - option.value = '-1'; - input.appendChild(option); - res.rows.forEach(function(elem) { - option = document.createElement('option'); - option.text = elem[option_name]; - if (keys && pattern) { - option.value = pattern; - keys.forEach(function(key) { - option.value = option.value.replace('%' + key + '%', elem[key]); - }); - option.selected = (option.value == value); - } else { - option.value = elem[option_value]; - option.selected = (elem[option_value] == value); - } - input.appendChild(option); - }); - input.className = 'form-control select2'; - - return input; -} - -function createDropdownWithOptgroupFromApi(path, value, option_name, option_value, editorUi, propertyGroup) { - var req = new XMLHttpRequest(); - req.open('GET', path, false); // `false` makes the request synchronous - req.setRequestHeader('Authorization', 'Bearer ' + editorUi.editor.data.token); - req.send(null); - var res = []; - if (req.status === 200) { - res = JSON.parse(req.response); - } - var input = document.createElement('select'); - var option = document.createElement('option'); - option.text = '-- None --'; - option.value = '-1'; - input.appendChild(option); - - var values = _.groupBy(res.rows, propertyGroup); - - for (var group in values) { - if (values.hasOwnProperty(group)) { - var optgroup = document.createElement('optgroup'); - optgroup.label = _.capitalize(group); - - var valGroup = values[group]; - valGroup.forEach(function(elem) { - // elem is the option - option = document.createElement('option'); - option.text = elem[option_name]; - option.value = elem[option_value]; - option.selected = (elem[option_value] == value); - optgroup.appendChild(option); - }) - - input.appendChild(optgroup); - } - } - - input.className = 'form-control select2'; - - return input; -} - -function createGroupedDropdownFromApi(path, value, option_name, option_value, editorUi, associationArray) { - var req = new XMLHttpRequest(); - req.open('GET', path, false); // `false` makes the request synchronous - req.setRequestHeader('Authorization', 'Bearer ' + editorUi.editor.data.token); - req.send(null); - var res = []; - if (req.status === 200) { - res = JSON.parse(req.response); - } - var input = document.createElement('select'); - var option = document.createElement('option'); - option.text = '-- None --'; - option.value = '0'; - input.appendChild(option); - res.rows.forEach(function(elem) { - option = document.createElement('option'); - option.className = 'select-group-father'; - option.text = elem[option_name].toUpperCase(); - option.value = elem[option_value]; - option.selected = (elem[option_value] == value); - input.appendChild(option); - elem[associationArray].forEach(function(elem) { - option = document.createElement('option'); - option.className = 'select-group-son'; - option.text = '-' + _.capitalize(elem[option_name]); - option.value = elem[option_value]; - option.selected = (elem[option_value] == value); - input.appendChild(option); - }); - }) - input.className = 'form-control select2'; - - return input; -} - -function createDropdownFromArray(array, value) { - var input = document.createElement('select'); - - for (var item in array) { - var option = document.createElement('option'); - option.text = array[item]; - option.value = item; - if (value > 0 || value != '') - option.selected = (value === item) ? true : false; - - input.appendChild(option); - } - - input.className = 'form-control select2'; - - return input; -} - -function createDropdownFromTigerDialList(value) { - var input = document.createElement('select'); - - var array = []; - var request = new XMLHttpRequest(); - try { - request.open('POST', '/api/rest/list/list', false); - request.send(JSON.stringify({ - page: 1, - size: 600000 //Max items ui-grid - })); - - if (request.status === 200) { - var res = JSON.parse(request.response); - if (res.status > 0) { - var rows = res.response.RMI.rows; - for (var index in rows) { - array[rows[index].id] = rows[index].name; - } - } - } - } catch (e) { - console.log(e); - } - - for (var item in array) { - var option = document.createElement('option'); - option.text = array[item]; - option.value = item; - if (value > 0 || value != '') - option.selected = (value === item) ? true : false; - - input.appendChild(option); - } - - input.className = 'form-control select2'; - - return input; -} - -function Dialog(editorUi, elt, w, h, modal, closable, onClose) { - var dx = 0; - - if (mxClient.IS_IE && document.documentMode != 9) { - dx = 60; - } - - w += dx; - h += dx; - - var left = Math.max(0, Math.round((document.body.scrollWidth - w) / 2)); - var top = Math.max(0, Math.round((Math.max(document.body.scrollHeight, - document.documentElement.scrollHeight) - h) / 3)); - - var div = editorUi.createDiv('geDialog'); - div.className = 'modal fade in center'; - div.style.display = 'block'; - div.style.paddingRight = '12px'; - // div.style.width = w + 'px'; - // div.style.height = h + 'px'; - // div.style.left = left + 'px'; - // div.style.top = top + 'px'; - - var divModalDialog = editorUi.createDiv('geModalDialog'); - divModalDialog.className = 'modal-dialog'; - - divModalDialog.appendChild(elt); - div.appendChild(divModalDialog); - - if (this.bg == null) { - this.bg = editorUi.createDiv('background'); - this.bg.className = 'modal-backdrop fade in'; - - if (mxClient.IS_QUIRKS) { - new mxDivResizer(this.bg); - } - } - - if (modal) { - document.body.appendChild(this.bg); - } - - document.body.appendChild(div); - - this.onDialogClose = onClose; - this.container = div; -}; - -/** - * Removes the dialog from the DOM. - */ -Dialog.prototype.close = function() { - if (this.onDialogClose != null) { - this.onDialogClose(); - this.onDialogClose = null; - } - - this.container.parentNode.removeChild(this.container); - this.bg.parentNode.removeChild(this.bg); -}; - -/** - * Constructs a new open dialog. - */ -function ImportDialog(editorUi) { - - var content = editorUi.createDiv('modal-content'); - var header = editorUi.createDiv('modal-header'); - var body = editorUi.createDiv('modal-body'); - var footer = editorUi.createDiv('modal-footer'); - - //--- START HEADER - var title = editorUi.createHeader('h4'); - mxUtils.write(title, mxResources.get('import') + ' XML'); - - var x = mxUtils.button('', function() { - editorUi.hideDialog(); - }); - x.className = 'close'; - - header.appendChild(x); - header.appendChild(title); - //--- END HEADER - - //--- START BODY - var row = editorUi.createDiv('row'); - var col1 = editorUi.createDiv('col-md-12'); - - var textarea = document.createElement('textarea'); - textarea.style.width = '100%'; - textarea.style.height = '374px'; - - var input = document.createElement('input'); - input.type = 'file'; - input.setAttribute('accept', 'text/xml'); - - input.addEventListener('change', function readSingleFile(evt) { - //Retrieve the first (and only!) File from the FileList object - var f = evt.target.files[0]; - console.log(f); - if (f) { - if (f.type === 'text/xml') { - var r = new FileReader(); - r.onload = function(e) { - var contents = e.target.result; - mxUtils.write(textarea, contents); - }; - r.readAsText(f); - } else { - alert('Failed to load format file'); - } - } else { - alert('Failed to load file'); - } - }, false); - - col1.appendChild(input); - col1.appendChild(textarea); - - row.appendChild(col1); - body.appendChild(row); - //--- END BODY - - //--- START FOOTER - var save = mxUtils.button(mxResources.get('import'), mxUtils.bind(this, - function(data) { - var doc = mxUtils.parseXml(textarea.value); - editorUi.editor.setGraphXml(doc.documentElement); - editorUi.hideDialog(); - })); - save.className = 'btn blue'; - - var close = mxUtils.button(mxResources.get('cancel'), function() { - editorUi.hideDialog(); - }); - close.className = 'btn default'; - - footer.appendChild(save); - footer.appendChild(close); - //--- END FOOTER - - //--- START CONTENT - content.appendChild(header); - content.appendChild(body); - content.appendChild(footer); - //--- END CONTENT - - this.container = content; - -}; - -/** - * Constructs a new about dialog. - */ -function AboutDialog(editorUi) { - var content = editorUi.createDiv('modal-content'); - var header = editorUi.createDiv('modal-header'); - var body = editorUi.createDiv('modal-body'); - var footer = editorUi.createDiv('modal-footer'); - - //--- START HEADER - var title = editorUi.createHeader('h4'); - mxUtils.write(title, mxResources.get('about') + ' Cally Square'); - - var x = mxUtils.button('', function() { - editorUi.hideDialog(); - }); - x.className = 'close'; - - header.appendChild(x); - header.appendChild(title); - //--- END HEADER - - //--- START BODY - var img = document.createElement('img'); - img.style.border = '0px'; - img.setAttribute('width', '176'); - img.setAttribute('width', '151'); - img.setAttribute('src', IMAGE_PATH + '/logo.png'); - body.appendChild(img); - mxUtils.br(body); - mxUtils.write(body, 'Powered by Xenialab ' + mxClient.VERSION); - mxUtils.br(body); - var link = document.createElement('a'); - link.setAttribute('href', 'http://www.callysquare.com/'); - link.setAttribute('target', '_blank'); - mxUtils.write(link, 'www.callysquare.com'); - body.appendChild(link); - mxUtils.br(body); - mxUtils.br(body); - //--- END BODY - - var close = mxUtils.button(mxResources.get('close'), function() { - editorUi.hideDialog(); - }); - close.className = 'btn default'; - - footer.appendChild(close); - //--- END FOOTER - - //--- START CONTENT - content.appendChild(header); - content.appendChild(body); - content.appendChild(footer); - //--- END CONTENT - - this.container = content; -}; - -/** - * Constructs a new save dialog. - */ -function SaveDialog(editorUi) { - - var content = editorUi.createDiv('modal-content'); - var header = editorUi.createDiv('modal-header'); - var body = editorUi.createDiv('modal-body'); - var footer = editorUi.createDiv('modal-footer'); - - //--- START HEADER - var title = editorUi.createHeader('h4'); - mxUtils.write(title, mxResources.get('saveAs')); - - var x = mxUtils.button('', function() { - editorUi.hideDialog(); - }); - x.className = 'close'; - - header.appendChild(x); - header.appendChild(title); - //--- END HEADER - - //--- START BODY - var name = 'name'; - var id = '_' + name; - var value = editorUi.editor.getOrCreateFilename(); - - var row = editorUi.createDiv('row'); - var col1 = editorUi.createDiv('col-md-4'); - var col2 = editorUi.createDiv('col-md-8'); - - var label = document.createElement('label'); - label.className = 'control-label pull-right'; - mxUtils.write(label, mxResources.get(name)); - col1.appendChild(label); - - var select = document.createElement('input'); - select.setAttribute('value', value + '_copy'); - select.setAttribute('id', id) - select.className = 'form-control'; - col2.appendChild(select); - - row.appendChild(col1); - row.appendChild(col2); - body.appendChild(row); - //--- END BODY - - //--- START FOOTER - var save = mxUtils.button(mxResources.get('save'), function() { - editorUi.saveAs(select.value); - editorUi.hideDialog(); - }); - save.className = 'btn blue'; - - var close = mxUtils.button(mxResources.get('cancel'), function() { - editorUi.hideDialog(); - }); - close.className = 'btn default'; - - footer.appendChild(save); - footer.appendChild(close); - //--- END FOOTER - - //--- START CONTENT - content.appendChild(header); - content.appendChild(body); - content.appendChild(footer); - //--- END CONTENT - - this.container = content; - //nameInput.setAttribute('value', editorUi.editor.getOrCreateFilename()); -}; - -/** - * Constructs a new save dialog. - */ -function NewDialog(editorUi) { - - var content = editorUi.createDiv('modal-content'); - var header = editorUi.createDiv('modal-header'); - var body = editorUi.createDiv('modal-body'); - var footer = editorUi.createDiv('modal-footer'); - - //--- START HEADER - var title = editorUi.createHeader('h4'); - mxUtils.write(title, mxResources.get('new')); - - var x = mxUtils.button('', function() { - editorUi.hideDialog(); - }); - x.className = 'close'; - - header.appendChild(x); - header.appendChild(title); - //--- END HEADER - - //--- START BODY - var name = 'name'; - var id = '_' + name; - var value = editorUi.editor.getOrCreateFilename(); - - var row = editorUi.createDiv('row'); - var col1 = editorUi.createDiv('col-md-4'); - var col2 = editorUi.createDiv('col-md-8'); - - var label = document.createElement('label'); - label.className = 'control-label pull-right'; - mxUtils.write(label, mxResources.get(name)); - col1.appendChild(label); - - var select = document.createElement('input'); - select.setAttribute('value', value + '_new'); - select.setAttribute('id', id) - select.className = 'form-control'; - col2.appendChild(select); - - row.appendChild(col1); - row.appendChild(col2); - body.appendChild(row); - //--- END BODY - - //--- START FOOTER - var save = mxUtils.button(mxResources.get('new'), function() { - editorUi.new(select.value); - editorUi.hideDialog(); - }); - save.className = 'btn blue'; - - var close = mxUtils.button(mxResources.get('cancel'), function() { - editorUi.hideDialog(); - }); - close.className = 'btn default'; - - footer.appendChild(save); - footer.appendChild(close); - //--- END FOOTER - - //--- START CONTENT - content.appendChild(header); - content.appendChild(body); - content.appendChild(footer); - //--- END CONTENT - - this.container = content; - //nameInput.setAttribute('value', editorUi.editor.getOrCreateFilename()); -}; - -/** - * Constructs a new description dialog. - */ -function DescriptionDialog(editorUi) { - console.log(editorUi.editor.data); - var content = editorUi.createDiv('modal-content'); - var header = editorUi.createDiv('modal-header'); - var body = editorUi.createDiv('modal-body'); - var footer = editorUi.createDiv('modal-footer'); - - //--- START HEADER - var title = editorUi.createHeader('h4'); - mxUtils.write(title, mxResources.get('description')); - - var x = mxUtils.button('', function() { - editorUi.hideDialog(); - }); - x.className = 'close'; - - header.appendChild(x); - header.appendChild(title); - //--- END HEADER - - //--- START BODY - - var form = editorUi.createDiv('form-horizontal form-row-seperated'); - - // START DESCRIPTION field - var name = 'description'; - var id = '_' + name; - var value = editorUi.editor.data.description || ''; - var group = editorUi.createDiv('form-group'); - - var label = document.createElement('label'); - label.className = 'col-sm-4 control-label'; - mxUtils.write(label, mxResources.get(name)); - group.appendChild(label); - - var input = document.createElement('input'); - input.setAttribute('value', value); - input.className = 'form-control'; - input.setAttribute('id', id); - - var div = editorUi.createDiv('col-sm-8'); - div.appendChild(input); - - group.appendChild(div); - form.appendChild(group); - //END DESCRIPTION field - - body.appendChild(form); - //--- END BODY - - //--- START FOOTER - var save = mxUtils.button(mxResources.get('update'), function() { - editorUi.description(input.value); - editorUi.hideDialog(); - }); - save.className = 'btn blue'; - - var close = mxUtils.button(mxResources.get('cancel'), function() { - editorUi.hideDialog(); - }); - close.className = 'btn default'; - - footer.appendChild(save); - footer.appendChild(close); - //--- END FOOTER - - //--- START CONTENT - content.appendChild(header); - content.appendChild(body); - content.appendChild(footer); - //--- END CONTENT - - this.container = content; - //nameInput.setAttribute('value', editorUi.editor.getOrCreateFilename()); -} - -/** - * Constructs a new variable dialog. - */ -function VariableDialog(editorUi) { - - var content = editorUi.createDiv('modal-content'); - var header = editorUi.createDiv('modal-header'); - var body = editorUi.createDiv('modal-body'); - var footer = editorUi.createDiv('modal-footer'); - - //--- START HEADER - var title = editorUi.createHeader('h4'); - mxUtils.write(title, mxResources.get('variable')); - - var x = mxUtils.button('', function() { - editorUi.hideDialog(); - }); - x.className = 'close'; - - header.appendChild(x); - header.appendChild(title); - //--- END HEADER - - //--- START BODY - - var form = editorUi.createDiv('form-horizontal form-row-seperated'); - - //NAME field - var name = 'name'; - var id = '_' + name; - var value = 'variable name'; - var group = editorUi.createDiv('form-group'); - - var label = document.createElement('label'); - label.className = 'col-sm-4 control-label'; - mxUtils.write(label, mxResources.get(name)); - group.appendChild(label); - - var input = document.createElement('input'); - input.setAttribute('value', value); - input.className = 'form-control'; - input.setAttribute('id', id); - - var div = editorUi.createDiv('col-sm-8'); - div.appendChild(input); - - group.appendChild(div); - form.appendChild(group); - //END NAME field - - //DESCRIPTION field - name = 'description'; - id = '_' + name; - value = 'variable description'; - group = editorUi.createDiv('form-group last'); - - label = document.createElement('label'); - label.className = 'col-sm-4 control-label'; - mxUtils.write(label, mxResources.get(name)); - group.appendChild(label); - - var inputDesc = document.createElement('input'); - inputDesc.setAttribute('value', value); - inputDesc.className = 'form-control'; - inputDesc.setAttribute('id', id); - - div = editorUi.createDiv('col-sm-8'); - div.appendChild(inputDesc); - - group.appendChild(div); - form.appendChild(group); - //END DESCRIPTION field - - body.appendChild(form); - //--- END BODY - - //--- START FOOTER - var save = mxUtils.button(mxResources.get('new'), function() { - editorUi.variable(input.value, inputDesc.value); - editorUi.hideDialog(); - }); - save.className = 'btn blue'; - - var close = mxUtils.button(mxResources.get('cancel'), function() { - editorUi.hideDialog(); - }); - close.className = 'btn default'; - - footer.appendChild(save); - footer.appendChild(close); - //--- END FOOTER - - //--- START CONTENT - content.appendChild(header); - content.appendChild(body); - content.appendChild(footer); - //--- END CONTENT - - this.container = content; - //nameInput.setAttribute('value', editorUi.editor.getOrCreateFilename()); -} - -/** - * Constructs a new save dialog. - */ -function OpenDialog(editorUi) { - - var content = editorUi.createDiv('modal-content'); - var header = editorUi.createDiv('modal-header'); - var body = editorUi.createDiv('modal-body'); - var footer = editorUi.createDiv('modal-footer'); - - //--- START HEADER - var title = editorUi.createHeader('h4'); - mxUtils.write(title, mxResources.get('open')); - - var x = mxUtils.button('', function() { - editorUi.hideDialog(); - }); - x.className = 'close'; - - header.appendChild(x); - header.appendChild(title); - //--- END HEADER - - //--- START BODY - var row = editorUi.createDiv('row'); - var col1 = editorUi.createDiv('col-md-4'); - var col2 = editorUi.createDiv('col-md-8'); - - var label = document.createElement('label'); - label.className = 'control-label pull-right'; - mxUtils.write(label, mxResources.get('name')); - col1.appendChild(label); - - var req = new XMLHttpRequest(); - req.open('GET', '/api/square/projects', false); // `false` makes the request synchronous - req.setRequestHeader('Authorization', 'Bearer ' + editorUi.editor.data.token); - req.send(null); - var res = []; - if (req.status === 200) { - res = JSON.parse(req.response); - } - - var select = document.createElement('select'); - - for (var j = 0; j < res.length; j++) { - var option = document.createElement('option'); - option.text = res[j].name; - option.value = res[j].id; - select.appendChild(option); - } - select.className = 'form-control'; - col2.appendChild(select); - - row.appendChild(col1); - row.appendChild(col2); - body.appendChild(row); - //--- END BODY - - //--- START FOOTER - var save = mxUtils.button(mxResources.get('open'), function() { - console.log(select); - console.log(select.value); - window.open('square/project/' + select.value, '_blank'); - editorUi.hideDialog(); - }); - save.className = 'btn blue'; - - var close = mxUtils.button(mxResources.get('cancel'), function() { - editorUi.hideDialog(); - }); - close.className = 'btn default'; - - footer.appendChild(save); - footer.appendChild(close); - //--- END FOOTER - - //--- START CONTENT - content.appendChild(header); - content.appendChild(body); - content.appendChild(footer); - //--- END CONTENT - - this.container = content; - //nameInput.setAttribute('value', editorUi.editor.getOrCreateFilename()); -}; -/** - * Constructs a new rename dialog. - */ -function RenameDialog(editorUi) { - - var content = editorUi.createDiv('modal-content'); - var header = editorUi.createDiv('modal-header'); - var body = editorUi.createDiv('modal-body'); - var footer = editorUi.createDiv('modal-footer'); - - //--- START HEADER - var title = editorUi.createHeader('h4'); - mxUtils.write(title, mxResources.get('rename')); - - var x = mxUtils.button('', function() { - editorUi.hideDialog(); - }); - x.className = 'close'; - - header.appendChild(x); - header.appendChild(title); - //--- END HEADER - - //--- START BODY - var row = editorUi.createDiv('row'); - var col1 = editorUi.createDiv('col-md-4'); - var col2 = editorUi.createDiv('col-md-8'); - - var label = document.createElement('label'); - label.className = 'control-label pull-right'; - mxUtils.write(label, mxResources.get('name')); - col1.appendChild(label); - var name = editorUi.editor.filename; - var input = document.createElement('input'); - input.setAttribute('value', name); - input.className = 'form-control'; - - col2.appendChild(input); - - row.appendChild(col1); - row.appendChild(col2); - body.appendChild(row); - //--- END BODY - - //--- START FOOTER - var save = mxUtils.button(mxResources.get('save'), function() { - var req = new XMLHttpRequest(); - - req.open("PUT", SAVE_URL + editorUi.editor.data.id, true); - req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); - req.setRequestHeader('Authorization', 'Bearer ' + editorUi.editor.data.token); - req.send('name=' + input.value); - - req.onload = function(e) { - if (req.status === 200) { - editorUi.editor.setStatus('Project successfully renamed'); - editorUi.editor.filename = input.value; - - } else { - console.log(req.response); - editorUi.editor.setStatus(JSON.parse(req.response).errors[0].message); - } - } - req.onerror = function(e) { - mxUtils.alert(req.statusText); - }; - editorUi.hideDialog(); - }); - save.className = 'btn blue'; - - var close = mxUtils.button(mxResources.get('cancel'), function() { - editorUi.hideDialog(); - }); - close.className = 'btn default'; - - footer.appendChild(save); - footer.appendChild(close); - //--- END FOOTER - - //--- START CONTENT - content.appendChild(header); - content.appendChild(body); - content.appendChild(footer); - //--- END CONTENT - - this.container = content; - //nameInput.setAttribute('value', editorUi.editor.getOrCreateFilename()); -}; - -/** - * Constructs a new edit file dialog. - */ -function EditFileDialog(editorUi) { - - var content = editorUi.createDiv('modal-content'); - var header = editorUi.createDiv('modal-header'); - var body = editorUi.createDiv('modal-body'); - var footer = editorUi.createDiv('modal-footer'); - - //--- START HEADER - var title = editorUi.createHeader('h4'); - mxUtils.write(title, mxResources.get('edit')); - - var x = mxUtils.button('', function() { - editorUi.hideDialog(); - }); - x.className = 'close'; - - header.appendChild(x); - header.appendChild(title); - //--- END HEADER - - //--- START BODY - var row = editorUi.createDiv('row'); - var col1 = editorUi.createDiv('col-md-12'); - - var textarea = document.createElement('textarea'); - textarea.style.width = '100%'; - textarea.style.height = '374px'; - textarea.value = mxUtils.getPrettyXml(editorUi.editor.getGraphXml()); - - // Enables dropping files - if (fileSupport) { - function handleDrop(evt) { - evt.stopPropagation(); - evt.preventDefault(); - - if (evt.dataTransfer.files.length > 0) { - var file = evt.dataTransfer.files[0]; - - var reader = new FileReader(); - reader.onload = function(e) { - textarea.value = e.target.result; - }; - reader.readAsText(file); - } - }; - - function handleDragOver(evt) { - evt.stopPropagation(); - evt.preventDefault(); - }; - - // Setup the dnd listeners. - textarea.addEventListener('dragover', handleDragOver, false); - textarea.addEventListener('drop', handleDrop, false); - } - col1.appendChild(textarea); - - row.appendChild(col1); - body.appendChild(row); - //--- END BODY - - //--- START FOOTER - var save = mxUtils.button(mxResources.get('save'), function() { - var doc = mxUtils.parseXml(textarea.value); - editorUi.editor.setGraphXml(doc.documentElement); - editorUi.hideDialog(); - }); - save.className = 'btn blue'; - - var close = mxUtils.button(mxResources.get('cancel'), function() { - editorUi.hideDialog(); - }); - close.className = 'btn default'; - - footer.appendChild(save); - footer.appendChild(close); - //--- END FOOTER - - //--- START CONTENT - content.appendChild(header); - content.appendChild(body); - content.appendChild(footer); - //--- END CONTENT - - this.container = content; -}; - -/** - * Constructs a new export dialog. - */ -function ExportDialog(editorUi) { - var content = editorUi.createDiv('modal-content'); - var header = editorUi.createDiv('modal-header'); - var body = editorUi.createDiv('modal-body form'); - var footer = editorUi.createDiv('modal-footer'); - - //--- START HEADER - var title = editorUi.createHeader('h4'); - mxUtils.write(title, mxResources.get('export') + ' XML'); - - var x = mxUtils.button('', function() { - editorUi.hideDialog(); - }); - x.className = 'close'; - - header.appendChild(x); - header.appendChild(title); - //--- END HEADER - - //--- START BODY - var form = editorUi.createDiv('form-horizontal form-row-seperated'); - var group = editorUi.createDiv('form-group last'); - - var label = document.createElement('label'); - label.className = 'col-sm-4 control-label'; - mxUtils.write(label, mxResources.get('filename')); - - var input = document.createElement('input'); - input.setAttribute('value', editorUi.editor.getOrCreateFilename()); - input.className = 'form-control'; - - var div = editorUi.createDiv('col-sm-8'); - div.appendChild(input); - - group.appendChild(label); - group.appendChild(div); - form.appendChild(group); - - body.appendChild(form); - //--- END BODY - - //--- START FOOTER - var save = mxUtils.button(mxResources.get('export'), mxUtils.bind(this, - function(data) { - editorUi.save(false); - - var xml = encodeURIComponent(mxUtils.getXml(editorUi.editor.getGraphXml())); - new mxXmlRequest(SAVE_URL + editorUi.editor.data.id + '/download', - 'filename=' + input.value, 'GET').simulate(document, "_blank"); - editorUi.hideDialog(); - })); - save.className = 'btn blue'; - - var close = mxUtils.button(mxResources.get('cancel'), function() { - editorUi.hideDialog(); - }); - close.className = 'btn default'; - - footer.appendChild(save); - footer.appendChild(close); - //--- END FOOTER - - //--- START CONTENT - content.appendChild(header); - content.appendChild(body); - content.appendChild(footer); - //--- END CONTENT - - this.container = content; -}; - -/** - * Giuseppe Careri - * Constructs a new general dialog. - */ -function GeneralDialog(editorUi, cell) { - var graph = editorUi.editor.graph; - - var content = editorUi.createDiv('modal-content'); - var header = editorUi.createDiv('modal-header'); - var body = editorUi.createDiv('modal-body form modal-body-scroll'); - var footer = editorUi.createDiv('modal-footer'); - - //--- START HEADER - var title = editorUi.createHeader('h4'); - mxUtils.write(title, mxResources.get('edit') + ' ' + mxResources.get(cell.value - .nodeName)); - - var x = mxUtils.button('', function() { - editorUi.hideDialog(); - }); - x.className = 'close'; - - header.appendChild(x); - header.appendChild(title); - //--- END HEADER - - //--- START BODY - var length = cell.value.attributes.length; - var form = editorUi.createDiv('form-horizontal form-row-seperated'); - - for (var i = 0; i < length; i++) { - var name = cell.value.attributes[i].name; - var id = '_' + name; - var value = cell.value.attributes[i].value; - - var group = editorUi.createDiv((i == length - 1) ? 'form-group last' : - 'form-group'); - - var label = document.createElement('label'); - label.className = 'col-sm-4 control-label'; - mxUtils.write(label, mxResources.get(name)); - group.appendChild(label); - - var input; - - switch (name) { - case 'sip_id': - input = createDropdownWithOptgroupFromApi('/api/users/all', value, 'fullname', 'id', editorUi, 'role'); - break; - case 'queue_id': - input = createDropdownFromApi('/api/voice/queues', value, 'name', 'name', - editorUi); - break; - case 'trunk_name': - input = createDropdownFromApi('/api/trunks', value, 'name', 'name', editorUi); - break; - case 'variable_id': - input = createDropdownFromApi('/api/variables', value, 'name', 'id', - editorUi); - break; - case 'account_id': - if (cell.value.nodeName == 'sendMail') { - input = createDropdownFromApi('/api/mail/servers/out', value, 'username', 'id', - editorUi); - } else { - input = createDropdownFromApi('/api/sms/accounts', value, 'name', 'id', - editorUi); - } - break; - case 'template_id': - input = createDropdownFromApi('/api/templates', value, 'name', 'id', - editorUi); - break; - case 'context': - input = createDropdownFromApi('/api/voice/contexts', value, 'name', 'name', - editorUi); - break; - case 'mailbox': - input = createDropdownFromApi('/api/voice/voicemails', value, 'mailbox', - 'id', editorUi, ['mailbox', 'context'], '%mailbox%@%context%'); - break; - case 'model': - input = createDropdownFromArray(ISPEECHASRMODEL, value); - break; - case 'ispeech_asr_language': - input = createDropdownFromArray(ISPEECHASRLANG, value); - break; - case 'beep': - input = createDropdownFromArray(ISPEECHBEEP, value); - break; - case 'hiddendigitspos': - input = createDropdownFromArray(SECRETDIGITSPOS, value); - break; - case 'ispeech_tts_language': - input = createDropdownFromArray(ISPEECHLANG, value); - break; - case 'google_tts_language': - input = createDropdownFromArray(GOOGLETTSLANG, value); - break; - case 'intKey': - input = createDropdownFromArray(ASRINTKEYS, value); - break; - case 'recordingFormat': - input = createDropdownFromArray(RECORDINGFORMAT, value); - break; - case 'answer': - input = createDropdownFromArray(BOOLSELECT, value); - break; - case 'list_id': - input = createDropdownFromTigerDialList(value); - break; - case 'interval_id': - input = createGroupedDropdownFromApi('/api/intervals', value, 'name', 'id', - editorUi, 'SubIntervals'); - break; - case 'project_id': - input = createDropdownFromApi('/api/square/projects', value, 'name', 'id', - editorUi); - break; - case 'odbc_id': - input = createDropdownFromApi('/api/square/odbc', value, 'name', 'id', - editorUi); - break; - case 'file_id': - input = createDropdownFromApi('/api/sounds', value, 'display_name', 'id', - editorUi); - break; - case 'timeout': - case 'digit': - case 'mindigit': - case 'maxdigit': - case 'response': - case 'retry': - case 'speed': - input = document.createElement('input'); - input.setAttribute('type', 'number'); - input.setAttribute('min', 0); - input.setAttribute('max', 1000); - input.setAttribute('value', value); - input.className = 'form-control'; - break; - case 'text': - case 'key': - case 'query': - case 'condition': - case 'command': - case 'body': - input = document.createElement('textarea'); - input.innerHTML = value; - input.className = 'form-control'; - break; - case 'sms_text': - input = document.createElement('textarea'); - input.innerHTML = value; - input.className = 'form-control'; - input.setAttribute('maxlength', '160'); - break; - default: - input = document.createElement('input'); - input.setAttribute('value', value); - input.className = 'form-control'; - break; - } - - input.setAttribute('id', id); - - var div = editorUi.createDiv('col-sm-8'); - div.appendChild(input); - - // Help - if (mxResources.get('help_' + name)) { - var help = editorUi.createDiv('p'); - help.className = 'help-block'; - mxUtils.write(help, mxResources.get('help_' + name)); - div.appendChild(help); - } - - group.appendChild(div); - form.appendChild(group); - } - body.appendChild(form); - //--- END BODY - - //--- START FOOTER - var save = mxUtils.button(mxResources.get('save'), mxUtils.bind(this, - function(data) { - for (var i = 0; i < cell.value.attributes.length; i++) { - var id = '_' + cell.value.attributes[i].name; - var name = cell.value.attributes[i].name; - // console.log(name, document.getElementById(id).value); - cell.setAttribute(name, document.getElementById(id).value); - }; - graph.refresh(cell); - editorUi.hideDialog(); - })); - save.className = 'btn blue'; - - var close = mxUtils.button(mxResources.get('cancel'), function() { - editorUi.hideDialog(); - }); - close.className = 'btn default'; - - footer.appendChild(save); - footer.appendChild(close); - //--- END FOOTER - - //--- START CONTENT - content.appendChild(header); - content.appendChild(body); - content.appendChild(footer); - //--- END CONTENT - - this.container = content; -}; +var _0x68b4=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x69\x6E\x70\x75\x74","\x63\x72\x65\x61\x74\x65\x45\x6C\x65\x6D\x65\x6E\x74","\x74\x79\x70\x65","\x63\x68\x65\x63\x6B\x62\x6F\x78","\x73\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x63\x68\x65\x63\x6B\x65\x64","\x47\x45\x54","\x6F\x70\x65\x6E","\x41\x75\x74\x68\x6F\x72\x69\x7A\x61\x74\x69\x6F\x6E","\x42\x65\x61\x72\x65\x72\x20","\x74\x6F\x6B\x65\x6E","\x64\x61\x74\x61","\x65\x64\x69\x74\x6F\x72","\x73\x65\x74\x52\x65\x71\x75\x65\x73\x74\x48\x65\x61\x64\x65\x72","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x72\x65\x73\x70\x6F\x6E\x73\x65","\x70\x61\x72\x73\x65","\x73\x65\x6C\x65\x63\x74","\x6F\x70\x74\x69\x6F\x6E","\x74\x65\x78\x74","\x2D\x2D\x20\x4E\x6F\x6E\x65\x20\x2D\x2D","\x76\x61\x6C\x75\x65","\x2D\x31","\x61\x70\x70\x65\x6E\x64\x43\x68\x69\x6C\x64","\x25","\x72\x65\x70\x6C\x61\x63\x65","\x66\x6F\x72\x45\x61\x63\x68","\x73\x65\x6C\x65\x63\x74\x65\x64","\x72\x6F\x77\x73","\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65","\x66\x6F\x72\x6D\x2D\x63\x6F\x6E\x74\x72\x6F\x6C\x20\x73\x65\x6C\x65\x63\x74\x32","\x67\x72\x6F\x75\x70\x42\x79","\x68\x61\x73\x4F\x77\x6E\x50\x72\x6F\x70\x65\x72\x74\x79","\x6F\x70\x74\x67\x72\x6F\x75\x70","\x6C\x61\x62\x65\x6C","\x63\x61\x70\x69\x74\x61\x6C\x69\x7A\x65","\x30","\x73\x65\x6C\x65\x63\x74\x2D\x67\x72\x6F\x75\x70\x2D\x66\x61\x74\x68\x65\x72","\x74\x6F\x55\x70\x70\x65\x72\x43\x61\x73\x65","\x73\x65\x6C\x65\x63\x74\x2D\x67\x72\x6F\x75\x70\x2D\x73\x6F\x6E","\x2D","","\x50\x4F\x53\x54","\x2F\x61\x70\x69\x2F\x72\x65\x73\x74\x2F\x6C\x69\x73\x74\x2F\x6C\x69\x73\x74","\x73\x74\x72\x69\x6E\x67\x69\x66\x79","\x52\x4D\x49","\x69\x64","\x6E\x61\x6D\x65","\x6C\x6F\x67","\x49\x53\x5F\x49\x45","\x64\x6F\x63\x75\x6D\x65\x6E\x74\x4D\x6F\x64\x65","\x73\x63\x72\x6F\x6C\x6C\x57\x69\x64\x74\x68","\x62\x6F\x64\x79","\x72\x6F\x75\x6E\x64","\x6D\x61\x78","\x73\x63\x72\x6F\x6C\x6C\x48\x65\x69\x67\x68\x74","\x64\x6F\x63\x75\x6D\x65\x6E\x74\x45\x6C\x65\x6D\x65\x6E\x74","\x67\x65\x44\x69\x61\x6C\x6F\x67","\x63\x72\x65\x61\x74\x65\x44\x69\x76","\x6D\x6F\x64\x61\x6C\x20\x66\x61\x64\x65\x20\x69\x6E\x20\x63\x65\x6E\x74\x65\x72","\x64\x69\x73\x70\x6C\x61\x79","\x73\x74\x79\x6C\x65","\x62\x6C\x6F\x63\x6B","\x70\x61\x64\x64\x69\x6E\x67\x52\x69\x67\x68\x74","\x31\x32\x70\x78","\x67\x65\x4D\x6F\x64\x61\x6C\x44\x69\x61\x6C\x6F\x67","\x6D\x6F\x64\x61\x6C\x2D\x64\x69\x61\x6C\x6F\x67","\x62\x67","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64","\x6D\x6F\x64\x61\x6C\x2D\x62\x61\x63\x6B\x64\x72\x6F\x70\x20\x66\x61\x64\x65\x20\x69\x6E","\x49\x53\x5F\x51\x55\x49\x52\x4B\x53","\x6F\x6E\x44\x69\x61\x6C\x6F\x67\x43\x6C\x6F\x73\x65","\x63\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x63\x6C\x6F\x73\x65","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x72\x65\x6D\x6F\x76\x65\x43\x68\x69\x6C\x64","\x70\x61\x72\x65\x6E\x74\x4E\x6F\x64\x65","\x6D\x6F\x64\x61\x6C\x2D\x63\x6F\x6E\x74\x65\x6E\x74","\x6D\x6F\x64\x61\x6C\x2D\x68\x65\x61\x64\x65\x72","\x6D\x6F\x64\x61\x6C\x2D\x62\x6F\x64\x79","\x6D\x6F\x64\x61\x6C\x2D\x66\x6F\x6F\x74\x65\x72","\x68\x34","\x63\x72\x65\x61\x74\x65\x48\x65\x61\x64\x65\x72","\x69\x6D\x70\x6F\x72\x74","\x67\x65\x74","\x20\x58\x4D\x4C","\x77\x72\x69\x74\x65","\x68\x69\x64\x65\x44\x69\x61\x6C\x6F\x67","\x62\x75\x74\x74\x6F\x6E","\x72\x6F\x77","\x63\x6F\x6C\x2D\x6D\x64\x2D\x31\x32","\x74\x65\x78\x74\x61\x72\x65\x61","\x77\x69\x64\x74\x68","\x31\x30\x30\x25","\x68\x65\x69\x67\x68\x74","\x33\x37\x34\x70\x78","\x66\x69\x6C\x65","\x61\x63\x63\x65\x70\x74","\x74\x65\x78\x74\x2F\x78\x6D\x6C","\x63\x68\x61\x6E\x67\x65","\x66\x69\x6C\x65\x73","\x74\x61\x72\x67\x65\x74","\x6F\x6E\x6C\x6F\x61\x64","\x72\x65\x73\x75\x6C\x74","\x72\x65\x61\x64\x41\x73\x54\x65\x78\x74","\x46\x61\x69\x6C\x65\x64\x20\x74\x6F\x20\x6C\x6F\x61\x64\x20\x66\x6F\x72\x6D\x61\x74\x20\x66\x69\x6C\x65","\x46\x61\x69\x6C\x65\x64\x20\x74\x6F\x20\x6C\x6F\x61\x64\x20\x66\x69\x6C\x65","\x61\x64\x64\x45\x76\x65\x6E\x74\x4C\x69\x73\x74\x65\x6E\x65\x72","\x70\x61\x72\x73\x65\x58\x6D\x6C","\x73\x65\x74\x47\x72\x61\x70\x68\x58\x6D\x6C","\x62\x69\x6E\x64","\x62\x74\x6E\x20\x62\x6C\x75\x65","\x63\x61\x6E\x63\x65\x6C","\x62\x74\x6E\x20\x64\x65\x66\x61\x75\x6C\x74","\x61\x62\x6F\x75\x74","\x20\x43\x61\x6C\x6C\x79\x20\x53\x71\x75\x61\x72\x65","\x69\x6D\x67","\x62\x6F\x72\x64\x65\x72","\x30\x70\x78","\x31\x37\x36","\x31\x35\x31","\x73\x72\x63","\x2F\x6C\x6F\x67\x6F\x2E\x70\x6E\x67","\x62\x72","\x50\x6F\x77\x65\x72\x65\x64\x20\x62\x79\x20\x58\x65\x6E\x69\x61\x6C\x61\x62\x20","\x56\x45\x52\x53\x49\x4F\x4E","\x61","\x68\x72\x65\x66","\x68\x74\x74\x70\x3A\x2F\x2F\x77\x77\x77\x2E\x63\x61\x6C\x6C\x79\x73\x71\x75\x61\x72\x65\x2E\x63\x6F\x6D\x2F","\x5F\x62\x6C\x61\x6E\x6B","\x77\x77\x77\x2E\x63\x61\x6C\x6C\x79\x73\x71\x75\x61\x72\x65\x2E\x63\x6F\x6D","\x73\x61\x76\x65\x41\x73","\x5F","\x67\x65\x74\x4F\x72\x43\x72\x65\x61\x74\x65\x46\x69\x6C\x65\x6E\x61\x6D\x65","\x63\x6F\x6C\x2D\x6D\x64\x2D\x34","\x63\x6F\x6C\x2D\x6D\x64\x2D\x38","\x63\x6F\x6E\x74\x72\x6F\x6C\x2D\x6C\x61\x62\x65\x6C\x20\x70\x75\x6C\x6C\x2D\x72\x69\x67\x68\x74","\x5F\x63\x6F\x70\x79","\x66\x6F\x72\x6D\x2D\x63\x6F\x6E\x74\x72\x6F\x6C","\x73\x61\x76\x65","\x6E\x65\x77","\x5F\x6E\x65\x77","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x66\x6F\x72\x6D\x2D\x68\x6F\x72\x69\x7A\x6F\x6E\x74\x61\x6C\x20\x66\x6F\x72\x6D\x2D\x72\x6F\x77\x2D\x73\x65\x70\x65\x72\x61\x74\x65\x64","\x66\x6F\x72\x6D\x2D\x67\x72\x6F\x75\x70","\x63\x6F\x6C\x2D\x73\x6D\x2D\x34\x20\x63\x6F\x6E\x74\x72\x6F\x6C\x2D\x6C\x61\x62\x65\x6C","\x63\x6F\x6C\x2D\x73\x6D\x2D\x38","\x75\x70\x64\x61\x74\x65","\x76\x61\x72\x69\x61\x62\x6C\x65","\x76\x61\x72\x69\x61\x62\x6C\x65\x20\x6E\x61\x6D\x65","\x76\x61\x72\x69\x61\x62\x6C\x65\x20\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x66\x6F\x72\x6D\x2D\x67\x72\x6F\x75\x70\x20\x6C\x61\x73\x74","\x2F\x61\x70\x69\x2F\x73\x71\x75\x61\x72\x65\x2F\x70\x72\x6F\x6A\x65\x63\x74\x73","\x6C\x65\x6E\x67\x74\x68","\x73\x71\x75\x61\x72\x65\x2F\x70\x72\x6F\x6A\x65\x63\x74\x2F","\x72\x65\x6E\x61\x6D\x65","\x66\x69\x6C\x65\x6E\x61\x6D\x65","\x50\x55\x54","\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65","\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x2F\x78\x2D\x77\x77\x77\x2D\x66\x6F\x72\x6D\x2D\x75\x72\x6C\x65\x6E\x63\x6F\x64\x65\x64","\x6E\x61\x6D\x65\x3D","\x50\x72\x6F\x6A\x65\x63\x74\x20\x73\x75\x63\x63\x65\x73\x73\x66\x75\x6C\x6C\x79\x20\x72\x65\x6E\x61\x6D\x65\x64","\x73\x65\x74\x53\x74\x61\x74\x75\x73","\x6D\x65\x73\x73\x61\x67\x65","\x65\x72\x72\x6F\x72\x73","\x6F\x6E\x65\x72\x72\x6F\x72","\x73\x74\x61\x74\x75\x73\x54\x65\x78\x74","\x61\x6C\x65\x72\x74","\x65\x64\x69\x74","\x67\x65\x74\x47\x72\x61\x70\x68\x58\x6D\x6C","\x67\x65\x74\x50\x72\x65\x74\x74\x79\x58\x6D\x6C","\x73\x74\x6F\x70\x50\x72\x6F\x70\x61\x67\x61\x74\x69\x6F\x6E","\x70\x72\x65\x76\x65\x6E\x74\x44\x65\x66\x61\x75\x6C\x74","\x64\x61\x74\x61\x54\x72\x61\x6E\x73\x66\x65\x72","\x64\x72\x61\x67\x6F\x76\x65\x72","\x64\x72\x6F\x70","\x6D\x6F\x64\x61\x6C\x2D\x62\x6F\x64\x79\x20\x66\x6F\x72\x6D","\x65\x78\x70\x6F\x72\x74","\x67\x65\x74\x58\x6D\x6C","\x73\x69\x6D\x75\x6C\x61\x74\x65","\x2F\x64\x6F\x77\x6E\x6C\x6F\x61\x64","\x66\x69\x6C\x65\x6E\x61\x6D\x65\x3D","\x67\x72\x61\x70\x68","\x6D\x6F\x64\x61\x6C\x2D\x62\x6F\x64\x79\x20\x66\x6F\x72\x6D\x20\x6D\x6F\x64\x61\x6C\x2D\x62\x6F\x64\x79\x2D\x73\x63\x72\x6F\x6C\x6C","\x20","\x6E\x6F\x64\x65\x4E\x61\x6D\x65","\x61\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x2F\x61\x70\x69\x2F\x75\x73\x65\x72\x73\x2F\x61\x6C\x6C","\x66\x75\x6C\x6C\x6E\x61\x6D\x65","\x72\x6F\x6C\x65","\x73\x69\x70\x5F\x69\x64","\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x2F\x71\x75\x65\x75\x65\x73","\x71\x75\x65\x75\x65\x5F\x69\x64","\x2F\x61\x70\x69\x2F\x74\x72\x75\x6E\x6B\x73","\x74\x72\x75\x6E\x6B\x5F\x6E\x61\x6D\x65","\x2F\x61\x70\x69\x2F\x76\x61\x72\x69\x61\x62\x6C\x65\x73","\x76\x61\x72\x69\x61\x62\x6C\x65\x5F\x69\x64","\x73\x65\x6E\x64\x4D\x61\x69\x6C","\x2F\x61\x70\x69\x2F\x6D\x61\x69\x6C\x2F\x73\x65\x72\x76\x65\x72\x73\x2F\x6F\x75\x74","\x75\x73\x65\x72\x6E\x61\x6D\x65","\x2F\x61\x70\x69\x2F\x73\x6D\x73\x2F\x61\x63\x63\x6F\x75\x6E\x74\x73","\x61\x63\x63\x6F\x75\x6E\x74\x5F\x69\x64","\x2F\x61\x70\x69\x2F\x74\x65\x6D\x70\x6C\x61\x74\x65\x73","\x74\x65\x6D\x70\x6C\x61\x74\x65\x5F\x69\x64","\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x2F\x63\x6F\x6E\x74\x65\x78\x74\x73","\x63\x6F\x6E\x74\x65\x78\x74","\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x2F\x76\x6F\x69\x63\x65\x6D\x61\x69\x6C\x73","\x6D\x61\x69\x6C\x62\x6F\x78","\x25\x6D\x61\x69\x6C\x62\x6F\x78\x25\x40\x25\x63\x6F\x6E\x74\x65\x78\x74\x25","\x6D\x6F\x64\x65\x6C","\x69\x73\x70\x65\x65\x63\x68\x5F\x61\x73\x72\x5F\x6C\x61\x6E\x67\x75\x61\x67\x65","\x62\x65\x65\x70","\x68\x69\x64\x64\x65\x6E\x64\x69\x67\x69\x74\x73\x70\x6F\x73","\x69\x73\x70\x65\x65\x63\x68\x5F\x74\x74\x73\x5F\x6C\x61\x6E\x67\x75\x61\x67\x65","\x67\x6F\x6F\x67\x6C\x65\x5F\x74\x74\x73\x5F\x6C\x61\x6E\x67\x75\x61\x67\x65","\x69\x6E\x74\x4B\x65\x79","\x72\x65\x63\x6F\x72\x64\x69\x6E\x67\x46\x6F\x72\x6D\x61\x74","\x61\x6E\x73\x77\x65\x72","\x6C\x69\x73\x74\x5F\x69\x64","\x2F\x61\x70\x69\x2F\x69\x6E\x74\x65\x72\x76\x61\x6C\x73","\x53\x75\x62\x49\x6E\x74\x65\x72\x76\x61\x6C\x73","\x69\x6E\x74\x65\x72\x76\x61\x6C\x5F\x69\x64","\x70\x72\x6F\x6A\x65\x63\x74\x5F\x69\x64","\x2F\x61\x70\x69\x2F\x73\x71\x75\x61\x72\x65\x2F\x6F\x64\x62\x63","\x6F\x64\x62\x63\x5F\x69\x64","\x2F\x61\x70\x69\x2F\x73\x6F\x75\x6E\x64\x73","\x64\x69\x73\x70\x6C\x61\x79\x5F\x6E\x61\x6D\x65","\x66\x69\x6C\x65\x5F\x69\x64","\x74\x69\x6D\x65\x6F\x75\x74","\x64\x69\x67\x69\x74","\x6D\x69\x6E\x64\x69\x67\x69\x74","\x6D\x61\x78\x64\x69\x67\x69\x74","\x72\x65\x74\x72\x79","\x6E\x75\x6D\x62\x65\x72","\x6D\x69\x6E","\x73\x70\x65\x65\x64","\x6B\x65\x79","\x71\x75\x65\x72\x79","\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E","\x63\x6F\x6D\x6D\x61\x6E\x64","\x69\x6E\x6E\x65\x72\x48\x54\x4D\x4C","\x6D\x61\x78\x6C\x65\x6E\x67\x74\x68","\x31\x36\x30","\x73\x6D\x73\x5F\x74\x65\x78\x74","\x68\x65\x6C\x70\x5F","\x70","\x68\x65\x6C\x70\x2D\x62\x6C\x6F\x63\x6B","\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74\x42\x79\x49\x64","\x72\x65\x66\x72\x65\x73\x68"];_0x68b4[0];function createCheckbox(_0x7890x2){var _0x7890x3=document[_0x68b4[2]](_0x68b4[1]);_0x7890x3[_0x68b4[5]](_0x68b4[3],_0x68b4[4]);if(_0x7890x2){_0x7890x3[_0x68b4[5]](_0x68b4[6],true)};return _0x7890x3}function createDropdownFromApi(_0x7890x5,_0x7890x2,_0x7890x6,_0x7890x7,_0x7890x8,_0x7890x9,_0x7890xa){var _0x7890xb= new XMLHttpRequest();_0x7890xb[_0x68b4[8]](_0x68b4[7],_0x7890x5,false);_0x7890xb[_0x68b4[14]](_0x68b4[9],_0x68b4[10]+ _0x7890x8[_0x68b4[13]][_0x68b4[12]][_0x68b4[11]]);_0x7890xb[_0x68b4[15]](null);var _0x7890xc=[];if(_0x7890xb[_0x68b4[16]]=== 200){_0x7890xc= JSON[_0x68b4[18]](_0x7890xb[_0x68b4[17]])};var _0x7890x3=document[_0x68b4[2]](_0x68b4[19]);var _0x7890xd=document[_0x68b4[2]](_0x68b4[20]);_0x7890xd[_0x68b4[21]]= _0x68b4[22];_0x7890xd[_0x68b4[23]]= _0x68b4[24];_0x7890x3[_0x68b4[25]](_0x7890xd);_0x7890xc[_0x68b4[30]][_0x68b4[28]](function(_0x7890xe){_0x7890xd= document[_0x68b4[2]](_0x68b4[20]);_0x7890xd[_0x68b4[21]]= _0x7890xe[_0x7890x6];if(_0x7890x9&& _0x7890xa){_0x7890xd[_0x68b4[23]]= _0x7890xa;_0x7890x9[_0x68b4[28]](function(_0x7890xf){_0x7890xd[_0x68b4[23]]= _0x7890xd[_0x68b4[23]][_0x68b4[27]](_0x68b4[26]+ _0x7890xf+ _0x68b4[26],_0x7890xe[_0x7890xf])});_0x7890xd[_0x68b4[29]]= (_0x7890xd[_0x68b4[23]]== _0x7890x2)}else {_0x7890xd[_0x68b4[23]]= _0x7890xe[_0x7890x7];_0x7890xd[_0x68b4[29]]= (_0x7890xe[_0x7890x7]== _0x7890x2)};_0x7890x3[_0x68b4[25]](_0x7890xd)});_0x7890x3[_0x68b4[31]]= _0x68b4[32];return _0x7890x3}function createDropdownWithOptgroupFromApi(_0x7890x5,_0x7890x2,_0x7890x6,_0x7890x7,_0x7890x8,_0x7890x11){var _0x7890xb= new XMLHttpRequest();_0x7890xb[_0x68b4[8]](_0x68b4[7],_0x7890x5,false);_0x7890xb[_0x68b4[14]](_0x68b4[9],_0x68b4[10]+ _0x7890x8[_0x68b4[13]][_0x68b4[12]][_0x68b4[11]]);_0x7890xb[_0x68b4[15]](null);var _0x7890xc=[];if(_0x7890xb[_0x68b4[16]]=== 200){_0x7890xc= JSON[_0x68b4[18]](_0x7890xb[_0x68b4[17]])};var _0x7890x3=document[_0x68b4[2]](_0x68b4[19]);var _0x7890xd=document[_0x68b4[2]](_0x68b4[20]);_0x7890xd[_0x68b4[21]]= _0x68b4[22];_0x7890xd[_0x68b4[23]]= _0x68b4[24];_0x7890x3[_0x68b4[25]](_0x7890xd);var _0x7890x12=_[_0x68b4[33]](_0x7890xc[_0x68b4[30]],_0x7890x11);for(var _0x7890x13 in _0x7890x12){if(_0x7890x12[_0x68b4[34]](_0x7890x13)){var _0x7890x14=document[_0x68b4[2]](_0x68b4[35]);_0x7890x14[_0x68b4[36]]= _[_0x68b4[37]](_0x7890x13);var _0x7890x15=_0x7890x12[_0x7890x13];_0x7890x15[_0x68b4[28]](function(_0x7890xe){_0x7890xd= document[_0x68b4[2]](_0x68b4[20]);_0x7890xd[_0x68b4[21]]= _0x7890xe[_0x7890x6];_0x7890xd[_0x68b4[23]]= _0x7890xe[_0x7890x7];_0x7890xd[_0x68b4[29]]= (_0x7890xe[_0x7890x7]== _0x7890x2);_0x7890x14[_0x68b4[25]](_0x7890xd)});_0x7890x3[_0x68b4[25]](_0x7890x14)}};_0x7890x3[_0x68b4[31]]= _0x68b4[32];return _0x7890x3}function createGroupedDropdownFromApi(_0x7890x5,_0x7890x2,_0x7890x6,_0x7890x7,_0x7890x8,_0x7890x17){var _0x7890xb= new XMLHttpRequest();_0x7890xb[_0x68b4[8]](_0x68b4[7],_0x7890x5,false);_0x7890xb[_0x68b4[14]](_0x68b4[9],_0x68b4[10]+ _0x7890x8[_0x68b4[13]][_0x68b4[12]][_0x68b4[11]]);_0x7890xb[_0x68b4[15]](null);var _0x7890xc=[];if(_0x7890xb[_0x68b4[16]]=== 200){_0x7890xc= JSON[_0x68b4[18]](_0x7890xb[_0x68b4[17]])};var _0x7890x3=document[_0x68b4[2]](_0x68b4[19]);var _0x7890xd=document[_0x68b4[2]](_0x68b4[20]);_0x7890xd[_0x68b4[21]]= _0x68b4[22];_0x7890xd[_0x68b4[23]]= _0x68b4[38];_0x7890x3[_0x68b4[25]](_0x7890xd);_0x7890xc[_0x68b4[30]][_0x68b4[28]](function(_0x7890xe){_0x7890xd= document[_0x68b4[2]](_0x68b4[20]);_0x7890xd[_0x68b4[31]]= _0x68b4[39];_0x7890xd[_0x68b4[21]]= _0x7890xe[_0x7890x6][_0x68b4[40]]();_0x7890xd[_0x68b4[23]]= _0x7890xe[_0x7890x7];_0x7890xd[_0x68b4[29]]= (_0x7890xe[_0x7890x7]== _0x7890x2);_0x7890x3[_0x68b4[25]](_0x7890xd);_0x7890xe[_0x7890x17][_0x68b4[28]](function(_0x7890xe){_0x7890xd= document[_0x68b4[2]](_0x68b4[20]);_0x7890xd[_0x68b4[31]]= _0x68b4[41];_0x7890xd[_0x68b4[21]]= _0x68b4[42]+ _[_0x68b4[37]](_0x7890xe[_0x7890x6]);_0x7890xd[_0x68b4[23]]= _0x7890xe[_0x7890x7];_0x7890xd[_0x68b4[29]]= (_0x7890xe[_0x7890x7]== _0x7890x2);_0x7890x3[_0x68b4[25]](_0x7890xd)})});_0x7890x3[_0x68b4[31]]= _0x68b4[32];return _0x7890x3}function createDropdownFromArray(_0x7890x19,_0x7890x2){var _0x7890x3=document[_0x68b4[2]](_0x68b4[19]);for(var _0x7890x1a in _0x7890x19){var _0x7890xd=document[_0x68b4[2]](_0x68b4[20]);_0x7890xd[_0x68b4[21]]= _0x7890x19[_0x7890x1a];_0x7890xd[_0x68b4[23]]= _0x7890x1a;if(_0x7890x2> 0|| _0x7890x2!= _0x68b4[43]){_0x7890xd[_0x68b4[29]]= (_0x7890x2=== _0x7890x1a)?true:false};_0x7890x3[_0x68b4[25]](_0x7890xd)};_0x7890x3[_0x68b4[31]]= _0x68b4[32];return _0x7890x3}function createDropdownFromTigerDialList(_0x7890x2){var _0x7890x3=document[_0x68b4[2]](_0x68b4[19]);var _0x7890x19=[];var _0x7890x1c= new XMLHttpRequest();try{_0x7890x1c[_0x68b4[8]](_0x68b4[44],_0x68b4[45],false);_0x7890x1c[_0x68b4[15]](JSON[_0x68b4[46]]({page:1,size:600000}));if(_0x7890x1c[_0x68b4[16]]=== 200){var _0x7890xc=JSON[_0x68b4[18]](_0x7890x1c[_0x68b4[17]]);if(_0x7890xc[_0x68b4[16]]> 0){var _0x7890x1d=_0x7890xc[_0x68b4[17]][_0x68b4[47]][_0x68b4[30]];for(var _0x7890x1e in _0x7890x1d){_0x7890x19[_0x7890x1d[_0x7890x1e][_0x68b4[48]]]= _0x7890x1d[_0x7890x1e][_0x68b4[49]]}}}}catch(e){console[_0x68b4[50]](e)};for(var _0x7890x1a in _0x7890x19){var _0x7890xd=document[_0x68b4[2]](_0x68b4[20]);_0x7890xd[_0x68b4[21]]= _0x7890x19[_0x7890x1a];_0x7890xd[_0x68b4[23]]= _0x7890x1a;if(_0x7890x2> 0|| _0x7890x2!= _0x68b4[43]){_0x7890xd[_0x68b4[29]]= (_0x7890x2=== _0x7890x1a)?true:false};_0x7890x3[_0x68b4[25]](_0x7890xd)};_0x7890x3[_0x68b4[31]]= _0x68b4[32];return _0x7890x3}function Dialog(_0x7890x8,_0x7890x20,_0x7890x21,_0x7890x22,_0x7890x23,_0x7890x24,_0x7890x25){var _0x7890x26=0;if(mxClient[_0x68b4[51]]&& document[_0x68b4[52]]!= 9){_0x7890x26= 60};_0x7890x21+= _0x7890x26;_0x7890x22+= _0x7890x26;var _0x7890x27=Math[_0x68b4[56]](0,Math[_0x68b4[55]]((document[_0x68b4[54]][_0x68b4[53]]- _0x7890x21)/ 2));var _0x7890x28=Math[_0x68b4[56]](0,Math[_0x68b4[55]]((Math[_0x68b4[56]](document[_0x68b4[54]][_0x68b4[57]],document[_0x68b4[58]][_0x68b4[57]])- _0x7890x22)/ 3));var _0x7890x29=_0x7890x8[_0x68b4[60]](_0x68b4[59]);_0x7890x29[_0x68b4[31]]= _0x68b4[61];_0x7890x29[_0x68b4[63]][_0x68b4[62]]= _0x68b4[64];_0x7890x29[_0x68b4[63]][_0x68b4[65]]= _0x68b4[66];var _0x7890x2a=_0x7890x8[_0x68b4[60]](_0x68b4[67]);_0x7890x2a[_0x68b4[31]]= _0x68b4[68];_0x7890x2a[_0x68b4[25]](_0x7890x20);_0x7890x29[_0x68b4[25]](_0x7890x2a);if(this[_0x68b4[69]]== null){this[_0x68b4[69]]= _0x7890x8[_0x68b4[60]](_0x68b4[70]);this[_0x68b4[69]][_0x68b4[31]]= _0x68b4[71];if(mxClient[_0x68b4[72]]){ new mxDivResizer(this[_0x68b4[69]])}};if(_0x7890x23){document[_0x68b4[54]][_0x68b4[25]](this[_0x68b4[69]])};document[_0x68b4[54]][_0x68b4[25]](_0x7890x29);this[_0x68b4[73]]= _0x7890x25;this[_0x68b4[74]]= _0x7890x29}Dialog[_0x68b4[76]][_0x68b4[75]]= function(){if(this[_0x68b4[73]]!= null){this[_0x68b4[73]]();this[_0x68b4[73]]= null};this[_0x68b4[74]][_0x68b4[78]][_0x68b4[77]](this[_0x68b4[74]]);this[_0x68b4[69]][_0x68b4[78]][_0x68b4[77]](this[_0x68b4[69]])};function ImportDialog(_0x7890x8){var _0x7890x2c=_0x7890x8[_0x68b4[60]](_0x68b4[79]);var _0x7890x2d=_0x7890x8[_0x68b4[60]](_0x68b4[80]);var _0x7890x2e=_0x7890x8[_0x68b4[60]](_0x68b4[81]);var _0x7890x2f=_0x7890x8[_0x68b4[60]](_0x68b4[82]);var _0x7890x30=_0x7890x8[_0x68b4[84]](_0x68b4[83]);mxUtils[_0x68b4[88]](_0x7890x30,mxResources[_0x68b4[86]](_0x68b4[85])+ _0x68b4[87]);var _0x7890x31=mxUtils[_0x68b4[90]](_0x68b4[43],function(){_0x7890x8[_0x68b4[89]]()});_0x7890x31[_0x68b4[31]]= _0x68b4[75];_0x7890x2d[_0x68b4[25]](_0x7890x31);_0x7890x2d[_0x68b4[25]](_0x7890x30);var _0x7890x32=_0x7890x8[_0x68b4[60]](_0x68b4[91]);var _0x7890x33=_0x7890x8[_0x68b4[60]](_0x68b4[92]);var _0x7890x34=document[_0x68b4[2]](_0x68b4[93]);_0x7890x34[_0x68b4[63]][_0x68b4[94]]= _0x68b4[95];_0x7890x34[_0x68b4[63]][_0x68b4[96]]= _0x68b4[97];var _0x7890x3=document[_0x68b4[2]](_0x68b4[1]);_0x7890x3[_0x68b4[3]]= _0x68b4[98];_0x7890x3[_0x68b4[5]](_0x68b4[99],_0x68b4[100]);_0x7890x3[_0x68b4[109]](_0x68b4[101],function _0x7890x35(_0x7890x36){var _0x7890x37=_0x7890x36[_0x68b4[103]][_0x68b4[102]][0];console[_0x68b4[50]](_0x7890x37);if(_0x7890x37){if(_0x7890x37[_0x68b4[3]]=== _0x68b4[100]){var _0x7890x38= new FileReader();_0x7890x38[_0x68b4[104]]= function(_0x7890x39){var _0x7890x3a=_0x7890x39[_0x68b4[103]][_0x68b4[105]];mxUtils[_0x68b4[88]](_0x7890x34,_0x7890x3a)};_0x7890x38[_0x68b4[106]](_0x7890x37)}else {alert(_0x68b4[107])}}else {alert(_0x68b4[108])}},false);_0x7890x33[_0x68b4[25]](_0x7890x3);_0x7890x33[_0x68b4[25]](_0x7890x34);_0x7890x32[_0x68b4[25]](_0x7890x33);_0x7890x2e[_0x68b4[25]](_0x7890x32);var _0x7890x3b=mxUtils[_0x68b4[90]](mxResources[_0x68b4[86]](_0x68b4[85]),mxUtils[_0x68b4[112]](this,function(_0x7890x3c){var _0x7890x3d=mxUtils[_0x68b4[110]](_0x7890x34[_0x68b4[23]]);_0x7890x8[_0x68b4[13]][_0x68b4[111]](_0x7890x3d[_0x68b4[58]]);_0x7890x8[_0x68b4[89]]()}));_0x7890x3b[_0x68b4[31]]= _0x68b4[113];var _0x7890x3e=mxUtils[_0x68b4[90]](mxResources[_0x68b4[86]](_0x68b4[114]),function(){_0x7890x8[_0x68b4[89]]()});_0x7890x3e[_0x68b4[31]]= _0x68b4[115];_0x7890x2f[_0x68b4[25]](_0x7890x3b);_0x7890x2f[_0x68b4[25]](_0x7890x3e);_0x7890x2c[_0x68b4[25]](_0x7890x2d);_0x7890x2c[_0x68b4[25]](_0x7890x2e);_0x7890x2c[_0x68b4[25]](_0x7890x2f);this[_0x68b4[74]]= _0x7890x2c}function AboutDialog(_0x7890x8){var _0x7890x2c=_0x7890x8[_0x68b4[60]](_0x68b4[79]);var _0x7890x2d=_0x7890x8[_0x68b4[60]](_0x68b4[80]);var _0x7890x2e=_0x7890x8[_0x68b4[60]](_0x68b4[81]);var _0x7890x2f=_0x7890x8[_0x68b4[60]](_0x68b4[82]);var _0x7890x30=_0x7890x8[_0x68b4[84]](_0x68b4[83]);mxUtils[_0x68b4[88]](_0x7890x30,mxResources[_0x68b4[86]](_0x68b4[116])+ _0x68b4[117]);var _0x7890x31=mxUtils[_0x68b4[90]](_0x68b4[43],function(){_0x7890x8[_0x68b4[89]]()});_0x7890x31[_0x68b4[31]]= _0x68b4[75];_0x7890x2d[_0x68b4[25]](_0x7890x31);_0x7890x2d[_0x68b4[25]](_0x7890x30);var _0x7890x40=document[_0x68b4[2]](_0x68b4[118]);_0x7890x40[_0x68b4[63]][_0x68b4[119]]= _0x68b4[120];_0x7890x40[_0x68b4[5]](_0x68b4[94],_0x68b4[121]);_0x7890x40[_0x68b4[5]](_0x68b4[94],_0x68b4[122]);_0x7890x40[_0x68b4[5]](_0x68b4[123],IMAGE_PATH+ _0x68b4[124]);_0x7890x2e[_0x68b4[25]](_0x7890x40);mxUtils[_0x68b4[125]](_0x7890x2e);mxUtils[_0x68b4[88]](_0x7890x2e,_0x68b4[126]+ mxClient[_0x68b4[127]]);mxUtils[_0x68b4[125]](_0x7890x2e);var _0x7890x41=document[_0x68b4[2]](_0x68b4[128]);_0x7890x41[_0x68b4[5]](_0x68b4[129],_0x68b4[130]);_0x7890x41[_0x68b4[5]](_0x68b4[103],_0x68b4[131]);mxUtils[_0x68b4[88]](_0x7890x41,_0x68b4[132]);_0x7890x2e[_0x68b4[25]](_0x7890x41);mxUtils[_0x68b4[125]](_0x7890x2e);mxUtils[_0x68b4[125]](_0x7890x2e);var _0x7890x3e=mxUtils[_0x68b4[90]](mxResources[_0x68b4[86]](_0x68b4[75]),function(){_0x7890x8[_0x68b4[89]]()});_0x7890x3e[_0x68b4[31]]= _0x68b4[115];_0x7890x2f[_0x68b4[25]](_0x7890x3e);_0x7890x2c[_0x68b4[25]](_0x7890x2d);_0x7890x2c[_0x68b4[25]](_0x7890x2e);_0x7890x2c[_0x68b4[25]](_0x7890x2f);this[_0x68b4[74]]= _0x7890x2c}function SaveDialog(_0x7890x8){var _0x7890x2c=_0x7890x8[_0x68b4[60]](_0x68b4[79]);var _0x7890x2d=_0x7890x8[_0x68b4[60]](_0x68b4[80]);var _0x7890x2e=_0x7890x8[_0x68b4[60]](_0x68b4[81]);var _0x7890x2f=_0x7890x8[_0x68b4[60]](_0x68b4[82]);var _0x7890x30=_0x7890x8[_0x68b4[84]](_0x68b4[83]);mxUtils[_0x68b4[88]](_0x7890x30,mxResources[_0x68b4[86]](_0x68b4[133]));var _0x7890x31=mxUtils[_0x68b4[90]](_0x68b4[43],function(){_0x7890x8[_0x68b4[89]]()});_0x7890x31[_0x68b4[31]]= _0x68b4[75];_0x7890x2d[_0x68b4[25]](_0x7890x31);_0x7890x2d[_0x68b4[25]](_0x7890x30);var _0x7890x43=_0x68b4[49];var _0x7890x44=_0x68b4[134]+ _0x7890x43;var _0x7890x2=_0x7890x8[_0x68b4[13]][_0x68b4[135]]();var _0x7890x32=_0x7890x8[_0x68b4[60]](_0x68b4[91]);var _0x7890x33=_0x7890x8[_0x68b4[60]](_0x68b4[136]);var _0x7890x45=_0x7890x8[_0x68b4[60]](_0x68b4[137]);var _0x7890x46=document[_0x68b4[2]](_0x68b4[36]);_0x7890x46[_0x68b4[31]]= _0x68b4[138];mxUtils[_0x68b4[88]](_0x7890x46,mxResources[_0x68b4[86]](_0x7890x43));_0x7890x33[_0x68b4[25]](_0x7890x46);var _0x7890x47=document[_0x68b4[2]](_0x68b4[1]);_0x7890x47[_0x68b4[5]](_0x68b4[23],_0x7890x2+ _0x68b4[139]);_0x7890x47[_0x68b4[5]](_0x68b4[48],_0x7890x44);_0x7890x47[_0x68b4[31]]= _0x68b4[140];_0x7890x45[_0x68b4[25]](_0x7890x47);_0x7890x32[_0x68b4[25]](_0x7890x33);_0x7890x32[_0x68b4[25]](_0x7890x45);_0x7890x2e[_0x68b4[25]](_0x7890x32);var _0x7890x3b=mxUtils[_0x68b4[90]](mxResources[_0x68b4[86]](_0x68b4[141]),function(){_0x7890x8[_0x68b4[133]](_0x7890x47[_0x68b4[23]]);_0x7890x8[_0x68b4[89]]()});_0x7890x3b[_0x68b4[31]]= _0x68b4[113];var _0x7890x3e=mxUtils[_0x68b4[90]](mxResources[_0x68b4[86]](_0x68b4[114]),function(){_0x7890x8[_0x68b4[89]]()});_0x7890x3e[_0x68b4[31]]= _0x68b4[115];_0x7890x2f[_0x68b4[25]](_0x7890x3b);_0x7890x2f[_0x68b4[25]](_0x7890x3e);_0x7890x2c[_0x68b4[25]](_0x7890x2d);_0x7890x2c[_0x68b4[25]](_0x7890x2e);_0x7890x2c[_0x68b4[25]](_0x7890x2f);this[_0x68b4[74]]= _0x7890x2c}function NewDialog(_0x7890x8){var _0x7890x2c=_0x7890x8[_0x68b4[60]](_0x68b4[79]);var _0x7890x2d=_0x7890x8[_0x68b4[60]](_0x68b4[80]);var _0x7890x2e=_0x7890x8[_0x68b4[60]](_0x68b4[81]);var _0x7890x2f=_0x7890x8[_0x68b4[60]](_0x68b4[82]);var _0x7890x30=_0x7890x8[_0x68b4[84]](_0x68b4[83]);mxUtils[_0x68b4[88]](_0x7890x30,mxResources[_0x68b4[86]](_0x68b4[142]));var _0x7890x31=mxUtils[_0x68b4[90]](_0x68b4[43],function(){_0x7890x8[_0x68b4[89]]()});_0x7890x31[_0x68b4[31]]= _0x68b4[75];_0x7890x2d[_0x68b4[25]](_0x7890x31);_0x7890x2d[_0x68b4[25]](_0x7890x30);var _0x7890x43=_0x68b4[49];var _0x7890x44=_0x68b4[134]+ _0x7890x43;var _0x7890x2=_0x7890x8[_0x68b4[13]][_0x68b4[135]]();var _0x7890x32=_0x7890x8[_0x68b4[60]](_0x68b4[91]);var _0x7890x33=_0x7890x8[_0x68b4[60]](_0x68b4[136]);var _0x7890x45=_0x7890x8[_0x68b4[60]](_0x68b4[137]);var _0x7890x46=document[_0x68b4[2]](_0x68b4[36]);_0x7890x46[_0x68b4[31]]= _0x68b4[138];mxUtils[_0x68b4[88]](_0x7890x46,mxResources[_0x68b4[86]](_0x7890x43));_0x7890x33[_0x68b4[25]](_0x7890x46);var _0x7890x47=document[_0x68b4[2]](_0x68b4[1]);_0x7890x47[_0x68b4[5]](_0x68b4[23],_0x7890x2+ _0x68b4[143]);_0x7890x47[_0x68b4[5]](_0x68b4[48],_0x7890x44);_0x7890x47[_0x68b4[31]]= _0x68b4[140];_0x7890x45[_0x68b4[25]](_0x7890x47);_0x7890x32[_0x68b4[25]](_0x7890x33);_0x7890x32[_0x68b4[25]](_0x7890x45);_0x7890x2e[_0x68b4[25]](_0x7890x32);var _0x7890x3b=mxUtils[_0x68b4[90]](mxResources[_0x68b4[86]](_0x68b4[142]),function(){_0x7890x8[_0x68b4[142]](_0x7890x47[_0x68b4[23]]);_0x7890x8[_0x68b4[89]]()});_0x7890x3b[_0x68b4[31]]= _0x68b4[113];var _0x7890x3e=mxUtils[_0x68b4[90]](mxResources[_0x68b4[86]](_0x68b4[114]),function(){_0x7890x8[_0x68b4[89]]()});_0x7890x3e[_0x68b4[31]]= _0x68b4[115];_0x7890x2f[_0x68b4[25]](_0x7890x3b);_0x7890x2f[_0x68b4[25]](_0x7890x3e);_0x7890x2c[_0x68b4[25]](_0x7890x2d);_0x7890x2c[_0x68b4[25]](_0x7890x2e);_0x7890x2c[_0x68b4[25]](_0x7890x2f);this[_0x68b4[74]]= _0x7890x2c}function DescriptionDialog(_0x7890x8){console[_0x68b4[50]](_0x7890x8[_0x68b4[13]][_0x68b4[12]]);var _0x7890x2c=_0x7890x8[_0x68b4[60]](_0x68b4[79]);var _0x7890x2d=_0x7890x8[_0x68b4[60]](_0x68b4[80]);var _0x7890x2e=_0x7890x8[_0x68b4[60]](_0x68b4[81]);var _0x7890x2f=_0x7890x8[_0x68b4[60]](_0x68b4[82]);var _0x7890x30=_0x7890x8[_0x68b4[84]](_0x68b4[83]);mxUtils[_0x68b4[88]](_0x7890x30,mxResources[_0x68b4[86]](_0x68b4[144]));var _0x7890x31=mxUtils[_0x68b4[90]](_0x68b4[43],function(){_0x7890x8[_0x68b4[89]]()});_0x7890x31[_0x68b4[31]]= _0x68b4[75];_0x7890x2d[_0x68b4[25]](_0x7890x31);_0x7890x2d[_0x68b4[25]](_0x7890x30);var _0x7890x4a=_0x7890x8[_0x68b4[60]](_0x68b4[145]);var _0x7890x43=_0x68b4[144];var _0x7890x44=_0x68b4[134]+ _0x7890x43;var _0x7890x2=_0x7890x8[_0x68b4[13]][_0x68b4[12]][_0x68b4[144]]|| _0x68b4[43];var _0x7890x13=_0x7890x8[_0x68b4[60]](_0x68b4[146]);var _0x7890x46=document[_0x68b4[2]](_0x68b4[36]);_0x7890x46[_0x68b4[31]]= _0x68b4[147];mxUtils[_0x68b4[88]](_0x7890x46,mxResources[_0x68b4[86]](_0x7890x43));_0x7890x13[_0x68b4[25]](_0x7890x46);var _0x7890x3=document[_0x68b4[2]](_0x68b4[1]);_0x7890x3[_0x68b4[5]](_0x68b4[23],_0x7890x2);_0x7890x3[_0x68b4[31]]= _0x68b4[140];_0x7890x3[_0x68b4[5]](_0x68b4[48],_0x7890x44);var _0x7890x29=_0x7890x8[_0x68b4[60]](_0x68b4[148]);_0x7890x29[_0x68b4[25]](_0x7890x3);_0x7890x13[_0x68b4[25]](_0x7890x29);_0x7890x4a[_0x68b4[25]](_0x7890x13);_0x7890x2e[_0x68b4[25]](_0x7890x4a);var _0x7890x3b=mxUtils[_0x68b4[90]](mxResources[_0x68b4[86]](_0x68b4[149]),function(){_0x7890x8[_0x68b4[144]](_0x7890x3[_0x68b4[23]]);_0x7890x8[_0x68b4[89]]()});_0x7890x3b[_0x68b4[31]]= _0x68b4[113];var _0x7890x3e=mxUtils[_0x68b4[90]](mxResources[_0x68b4[86]](_0x68b4[114]),function(){_0x7890x8[_0x68b4[89]]()});_0x7890x3e[_0x68b4[31]]= _0x68b4[115];_0x7890x2f[_0x68b4[25]](_0x7890x3b);_0x7890x2f[_0x68b4[25]](_0x7890x3e);_0x7890x2c[_0x68b4[25]](_0x7890x2d);_0x7890x2c[_0x68b4[25]](_0x7890x2e);_0x7890x2c[_0x68b4[25]](_0x7890x2f);this[_0x68b4[74]]= _0x7890x2c}function VariableDialog(_0x7890x8){var _0x7890x2c=_0x7890x8[_0x68b4[60]](_0x68b4[79]);var _0x7890x2d=_0x7890x8[_0x68b4[60]](_0x68b4[80]);var _0x7890x2e=_0x7890x8[_0x68b4[60]](_0x68b4[81]);var _0x7890x2f=_0x7890x8[_0x68b4[60]](_0x68b4[82]);var _0x7890x30=_0x7890x8[_0x68b4[84]](_0x68b4[83]);mxUtils[_0x68b4[88]](_0x7890x30,mxResources[_0x68b4[86]](_0x68b4[150]));var _0x7890x31=mxUtils[_0x68b4[90]](_0x68b4[43],function(){_0x7890x8[_0x68b4[89]]()});_0x7890x31[_0x68b4[31]]= _0x68b4[75];_0x7890x2d[_0x68b4[25]](_0x7890x31);_0x7890x2d[_0x68b4[25]](_0x7890x30);var _0x7890x4a=_0x7890x8[_0x68b4[60]](_0x68b4[145]);var _0x7890x43=_0x68b4[49];var _0x7890x44=_0x68b4[134]+ _0x7890x43;var _0x7890x2=_0x68b4[151];var _0x7890x13=_0x7890x8[_0x68b4[60]](_0x68b4[146]);var _0x7890x46=document[_0x68b4[2]](_0x68b4[36]);_0x7890x46[_0x68b4[31]]= _0x68b4[147];mxUtils[_0x68b4[88]](_0x7890x46,mxResources[_0x68b4[86]](_0x7890x43));_0x7890x13[_0x68b4[25]](_0x7890x46);var _0x7890x3=document[_0x68b4[2]](_0x68b4[1]);_0x7890x3[_0x68b4[5]](_0x68b4[23],_0x7890x2);_0x7890x3[_0x68b4[31]]= _0x68b4[140];_0x7890x3[_0x68b4[5]](_0x68b4[48],_0x7890x44);var _0x7890x29=_0x7890x8[_0x68b4[60]](_0x68b4[148]);_0x7890x29[_0x68b4[25]](_0x7890x3);_0x7890x13[_0x68b4[25]](_0x7890x29);_0x7890x4a[_0x68b4[25]](_0x7890x13);_0x7890x43= _0x68b4[144];_0x7890x44= _0x68b4[134]+ _0x7890x43;_0x7890x2= _0x68b4[152];_0x7890x13= _0x7890x8[_0x68b4[60]](_0x68b4[153]);_0x7890x46= document[_0x68b4[2]](_0x68b4[36]);_0x7890x46[_0x68b4[31]]= _0x68b4[147];mxUtils[_0x68b4[88]](_0x7890x46,mxResources[_0x68b4[86]](_0x7890x43));_0x7890x13[_0x68b4[25]](_0x7890x46);var _0x7890x4c=document[_0x68b4[2]](_0x68b4[1]);_0x7890x4c[_0x68b4[5]](_0x68b4[23],_0x7890x2);_0x7890x4c[_0x68b4[31]]= _0x68b4[140];_0x7890x4c[_0x68b4[5]](_0x68b4[48],_0x7890x44);_0x7890x29= _0x7890x8[_0x68b4[60]](_0x68b4[148]);_0x7890x29[_0x68b4[25]](_0x7890x4c);_0x7890x13[_0x68b4[25]](_0x7890x29);_0x7890x4a[_0x68b4[25]](_0x7890x13);_0x7890x2e[_0x68b4[25]](_0x7890x4a);var _0x7890x3b=mxUtils[_0x68b4[90]](mxResources[_0x68b4[86]](_0x68b4[142]),function(){_0x7890x8[_0x68b4[150]](_0x7890x3[_0x68b4[23]],_0x7890x4c[_0x68b4[23]]);_0x7890x8[_0x68b4[89]]()});_0x7890x3b[_0x68b4[31]]= _0x68b4[113];var _0x7890x3e=mxUtils[_0x68b4[90]](mxResources[_0x68b4[86]](_0x68b4[114]),function(){_0x7890x8[_0x68b4[89]]()});_0x7890x3e[_0x68b4[31]]= _0x68b4[115];_0x7890x2f[_0x68b4[25]](_0x7890x3b);_0x7890x2f[_0x68b4[25]](_0x7890x3e);_0x7890x2c[_0x68b4[25]](_0x7890x2d);_0x7890x2c[_0x68b4[25]](_0x7890x2e);_0x7890x2c[_0x68b4[25]](_0x7890x2f);this[_0x68b4[74]]= _0x7890x2c}function OpenDialog(_0x7890x8){var _0x7890x2c=_0x7890x8[_0x68b4[60]](_0x68b4[79]);var _0x7890x2d=_0x7890x8[_0x68b4[60]](_0x68b4[80]);var _0x7890x2e=_0x7890x8[_0x68b4[60]](_0x68b4[81]);var _0x7890x2f=_0x7890x8[_0x68b4[60]](_0x68b4[82]);var _0x7890x30=_0x7890x8[_0x68b4[84]](_0x68b4[83]);mxUtils[_0x68b4[88]](_0x7890x30,mxResources[_0x68b4[86]](_0x68b4[8]));var _0x7890x31=mxUtils[_0x68b4[90]](_0x68b4[43],function(){_0x7890x8[_0x68b4[89]]()});_0x7890x31[_0x68b4[31]]= _0x68b4[75];_0x7890x2d[_0x68b4[25]](_0x7890x31);_0x7890x2d[_0x68b4[25]](_0x7890x30);var _0x7890x32=_0x7890x8[_0x68b4[60]](_0x68b4[91]);var _0x7890x33=_0x7890x8[_0x68b4[60]](_0x68b4[136]);var _0x7890x45=_0x7890x8[_0x68b4[60]](_0x68b4[137]);var _0x7890x46=document[_0x68b4[2]](_0x68b4[36]);_0x7890x46[_0x68b4[31]]= _0x68b4[138];mxUtils[_0x68b4[88]](_0x7890x46,mxResources[_0x68b4[86]](_0x68b4[49]));_0x7890x33[_0x68b4[25]](_0x7890x46);var _0x7890xb= new XMLHttpRequest();_0x7890xb[_0x68b4[8]](_0x68b4[7],_0x68b4[154],false);_0x7890xb[_0x68b4[14]](_0x68b4[9],_0x68b4[10]+ _0x7890x8[_0x68b4[13]][_0x68b4[12]][_0x68b4[11]]);_0x7890xb[_0x68b4[15]](null);var _0x7890xc=[];if(_0x7890xb[_0x68b4[16]]=== 200){_0x7890xc= JSON[_0x68b4[18]](_0x7890xb[_0x68b4[17]])};var _0x7890x47=document[_0x68b4[2]](_0x68b4[19]);for(var _0x7890x4e=0;_0x7890x4e< _0x7890xc[_0x68b4[155]];_0x7890x4e++){var _0x7890xd=document[_0x68b4[2]](_0x68b4[20]);_0x7890xd[_0x68b4[21]]= _0x7890xc[_0x7890x4e][_0x68b4[49]];_0x7890xd[_0x68b4[23]]= _0x7890xc[_0x7890x4e][_0x68b4[48]];_0x7890x47[_0x68b4[25]](_0x7890xd)};_0x7890x47[_0x68b4[31]]= _0x68b4[140];_0x7890x45[_0x68b4[25]](_0x7890x47);_0x7890x32[_0x68b4[25]](_0x7890x33);_0x7890x32[_0x68b4[25]](_0x7890x45);_0x7890x2e[_0x68b4[25]](_0x7890x32);var _0x7890x3b=mxUtils[_0x68b4[90]](mxResources[_0x68b4[86]](_0x68b4[8]),function(){console[_0x68b4[50]](_0x7890x47);console[_0x68b4[50]](_0x7890x47[_0x68b4[23]]);window[_0x68b4[8]](_0x68b4[156]+ _0x7890x47[_0x68b4[23]],_0x68b4[131]);_0x7890x8[_0x68b4[89]]()});_0x7890x3b[_0x68b4[31]]= _0x68b4[113];var _0x7890x3e=mxUtils[_0x68b4[90]](mxResources[_0x68b4[86]](_0x68b4[114]),function(){_0x7890x8[_0x68b4[89]]()});_0x7890x3e[_0x68b4[31]]= _0x68b4[115];_0x7890x2f[_0x68b4[25]](_0x7890x3b);_0x7890x2f[_0x68b4[25]](_0x7890x3e);_0x7890x2c[_0x68b4[25]](_0x7890x2d);_0x7890x2c[_0x68b4[25]](_0x7890x2e);_0x7890x2c[_0x68b4[25]](_0x7890x2f);this[_0x68b4[74]]= _0x7890x2c}function RenameDialog(_0x7890x8){var _0x7890x2c=_0x7890x8[_0x68b4[60]](_0x68b4[79]);var _0x7890x2d=_0x7890x8[_0x68b4[60]](_0x68b4[80]);var _0x7890x2e=_0x7890x8[_0x68b4[60]](_0x68b4[81]);var _0x7890x2f=_0x7890x8[_0x68b4[60]](_0x68b4[82]);var _0x7890x30=_0x7890x8[_0x68b4[84]](_0x68b4[83]);mxUtils[_0x68b4[88]](_0x7890x30,mxResources[_0x68b4[86]](_0x68b4[157]));var _0x7890x31=mxUtils[_0x68b4[90]](_0x68b4[43],function(){_0x7890x8[_0x68b4[89]]()});_0x7890x31[_0x68b4[31]]= _0x68b4[75];_0x7890x2d[_0x68b4[25]](_0x7890x31);_0x7890x2d[_0x68b4[25]](_0x7890x30);var _0x7890x32=_0x7890x8[_0x68b4[60]](_0x68b4[91]);var _0x7890x33=_0x7890x8[_0x68b4[60]](_0x68b4[136]);var _0x7890x45=_0x7890x8[_0x68b4[60]](_0x68b4[137]);var _0x7890x46=document[_0x68b4[2]](_0x68b4[36]);_0x7890x46[_0x68b4[31]]= _0x68b4[138];mxUtils[_0x68b4[88]](_0x7890x46,mxResources[_0x68b4[86]](_0x68b4[49]));_0x7890x33[_0x68b4[25]](_0x7890x46);var _0x7890x43=_0x7890x8[_0x68b4[13]][_0x68b4[158]];var _0x7890x3=document[_0x68b4[2]](_0x68b4[1]);_0x7890x3[_0x68b4[5]](_0x68b4[23],_0x7890x43);_0x7890x3[_0x68b4[31]]= _0x68b4[140];_0x7890x45[_0x68b4[25]](_0x7890x3);_0x7890x32[_0x68b4[25]](_0x7890x33);_0x7890x32[_0x68b4[25]](_0x7890x45);_0x7890x2e[_0x68b4[25]](_0x7890x32);var _0x7890x3b=mxUtils[_0x68b4[90]](mxResources[_0x68b4[86]](_0x68b4[141]),function(){var _0x7890xb= new XMLHttpRequest();_0x7890xb[_0x68b4[8]](_0x68b4[159],SAVE_URL+ _0x7890x8[_0x68b4[13]][_0x68b4[12]][_0x68b4[48]],true);_0x7890xb[_0x68b4[14]](_0x68b4[160],_0x68b4[161]);_0x7890xb[_0x68b4[14]](_0x68b4[9],_0x68b4[10]+ _0x7890x8[_0x68b4[13]][_0x68b4[12]][_0x68b4[11]]);_0x7890xb[_0x68b4[15]](_0x68b4[162]+ _0x7890x3[_0x68b4[23]]);_0x7890xb[_0x68b4[104]]= function(_0x7890x39){if(_0x7890xb[_0x68b4[16]]=== 200){_0x7890x8[_0x68b4[13]][_0x68b4[164]](_0x68b4[163]);_0x7890x8[_0x68b4[13]][_0x68b4[158]]= _0x7890x3[_0x68b4[23]]}else {console[_0x68b4[50]](_0x7890xb[_0x68b4[17]]);_0x7890x8[_0x68b4[13]][_0x68b4[164]](JSON[_0x68b4[18]](_0x7890xb[_0x68b4[17]])[_0x68b4[166]][0][_0x68b4[165]])}};_0x7890xb[_0x68b4[167]]= function(_0x7890x39){mxUtils[_0x68b4[169]](_0x7890xb[_0x68b4[168]])};_0x7890x8[_0x68b4[89]]()});_0x7890x3b[_0x68b4[31]]= _0x68b4[113];var _0x7890x3e=mxUtils[_0x68b4[90]](mxResources[_0x68b4[86]](_0x68b4[114]),function(){_0x7890x8[_0x68b4[89]]()});_0x7890x3e[_0x68b4[31]]= _0x68b4[115];_0x7890x2f[_0x68b4[25]](_0x7890x3b);_0x7890x2f[_0x68b4[25]](_0x7890x3e);_0x7890x2c[_0x68b4[25]](_0x7890x2d);_0x7890x2c[_0x68b4[25]](_0x7890x2e);_0x7890x2c[_0x68b4[25]](_0x7890x2f);this[_0x68b4[74]]= _0x7890x2c}function EditFileDialog(_0x7890x8){var _0x7890x2c=_0x7890x8[_0x68b4[60]](_0x68b4[79]);var _0x7890x2d=_0x7890x8[_0x68b4[60]](_0x68b4[80]);var _0x7890x2e=_0x7890x8[_0x68b4[60]](_0x68b4[81]);var _0x7890x2f=_0x7890x8[_0x68b4[60]](_0x68b4[82]);var _0x7890x30=_0x7890x8[_0x68b4[84]](_0x68b4[83]);mxUtils[_0x68b4[88]](_0x7890x30,mxResources[_0x68b4[86]](_0x68b4[170]));var _0x7890x31=mxUtils[_0x68b4[90]](_0x68b4[43],function(){_0x7890x8[_0x68b4[89]]()});_0x7890x31[_0x68b4[31]]= _0x68b4[75];_0x7890x2d[_0x68b4[25]](_0x7890x31);_0x7890x2d[_0x68b4[25]](_0x7890x30);var _0x7890x32=_0x7890x8[_0x68b4[60]](_0x68b4[91]);var _0x7890x33=_0x7890x8[_0x68b4[60]](_0x68b4[92]);var _0x7890x34=document[_0x68b4[2]](_0x68b4[93]);_0x7890x34[_0x68b4[63]][_0x68b4[94]]= _0x68b4[95];_0x7890x34[_0x68b4[63]][_0x68b4[96]]= _0x68b4[97];_0x7890x34[_0x68b4[23]]= mxUtils[_0x68b4[172]](_0x7890x8[_0x68b4[13]][_0x68b4[171]]());if(fileSupport){function _0x7890x51(_0x7890x36){_0x7890x36[_0x68b4[173]]();_0x7890x36[_0x68b4[174]]();if(_0x7890x36[_0x68b4[175]][_0x68b4[102]][_0x68b4[155]]> 0){var _0x7890x52=_0x7890x36[_0x68b4[175]][_0x68b4[102]][0];var _0x7890x53= new FileReader();_0x7890x53[_0x68b4[104]]= function(_0x7890x39){_0x7890x34[_0x68b4[23]]= _0x7890x39[_0x68b4[103]][_0x68b4[105]]};_0x7890x53[_0x68b4[106]](_0x7890x52)}}function _0x7890x54(_0x7890x36){_0x7890x36[_0x68b4[173]]();_0x7890x36[_0x68b4[174]]()}_0x7890x34[_0x68b4[109]](_0x68b4[176],_0x7890x54,false);_0x7890x34[_0x68b4[109]](_0x68b4[177],_0x7890x51,false)};_0x7890x33[_0x68b4[25]](_0x7890x34);_0x7890x32[_0x68b4[25]](_0x7890x33);_0x7890x2e[_0x68b4[25]](_0x7890x32);var _0x7890x3b=mxUtils[_0x68b4[90]](mxResources[_0x68b4[86]](_0x68b4[141]),function(){var _0x7890x3d=mxUtils[_0x68b4[110]](_0x7890x34[_0x68b4[23]]);_0x7890x8[_0x68b4[13]][_0x68b4[111]](_0x7890x3d[_0x68b4[58]]);_0x7890x8[_0x68b4[89]]()});_0x7890x3b[_0x68b4[31]]= _0x68b4[113];var _0x7890x3e=mxUtils[_0x68b4[90]](mxResources[_0x68b4[86]](_0x68b4[114]),function(){_0x7890x8[_0x68b4[89]]()});_0x7890x3e[_0x68b4[31]]= _0x68b4[115];_0x7890x2f[_0x68b4[25]](_0x7890x3b);_0x7890x2f[_0x68b4[25]](_0x7890x3e);_0x7890x2c[_0x68b4[25]](_0x7890x2d);_0x7890x2c[_0x68b4[25]](_0x7890x2e);_0x7890x2c[_0x68b4[25]](_0x7890x2f);this[_0x68b4[74]]= _0x7890x2c}function ExportDialog(_0x7890x8){var _0x7890x2c=_0x7890x8[_0x68b4[60]](_0x68b4[79]);var _0x7890x2d=_0x7890x8[_0x68b4[60]](_0x68b4[80]);var _0x7890x2e=_0x7890x8[_0x68b4[60]](_0x68b4[178]);var _0x7890x2f=_0x7890x8[_0x68b4[60]](_0x68b4[82]);var _0x7890x30=_0x7890x8[_0x68b4[84]](_0x68b4[83]);mxUtils[_0x68b4[88]](_0x7890x30,mxResources[_0x68b4[86]](_0x68b4[179])+ _0x68b4[87]);var _0x7890x31=mxUtils[_0x68b4[90]](_0x68b4[43],function(){_0x7890x8[_0x68b4[89]]()});_0x7890x31[_0x68b4[31]]= _0x68b4[75];_0x7890x2d[_0x68b4[25]](_0x7890x31);_0x7890x2d[_0x68b4[25]](_0x7890x30);var _0x7890x4a=_0x7890x8[_0x68b4[60]](_0x68b4[145]);var _0x7890x13=_0x7890x8[_0x68b4[60]](_0x68b4[153]);var _0x7890x46=document[_0x68b4[2]](_0x68b4[36]);_0x7890x46[_0x68b4[31]]= _0x68b4[147];mxUtils[_0x68b4[88]](_0x7890x46,mxResources[_0x68b4[86]](_0x68b4[158]));var _0x7890x3=document[_0x68b4[2]](_0x68b4[1]);_0x7890x3[_0x68b4[5]](_0x68b4[23],_0x7890x8[_0x68b4[13]][_0x68b4[135]]());_0x7890x3[_0x68b4[31]]= _0x68b4[140];var _0x7890x29=_0x7890x8[_0x68b4[60]](_0x68b4[148]);_0x7890x29[_0x68b4[25]](_0x7890x3);_0x7890x13[_0x68b4[25]](_0x7890x46);_0x7890x13[_0x68b4[25]](_0x7890x29);_0x7890x4a[_0x68b4[25]](_0x7890x13);_0x7890x2e[_0x68b4[25]](_0x7890x4a);var _0x7890x3b=mxUtils[_0x68b4[90]](mxResources[_0x68b4[86]](_0x68b4[179]),mxUtils[_0x68b4[112]](this,function(_0x7890x3c){_0x7890x8[_0x68b4[141]](false);var _0x7890x56=encodeURIComponent(mxUtils[_0x68b4[180]](_0x7890x8[_0x68b4[13]][_0x68b4[171]]())); new mxXmlRequest(SAVE_URL+ _0x7890x8[_0x68b4[13]][_0x68b4[12]][_0x68b4[48]]+ _0x68b4[182],_0x68b4[183]+ _0x7890x3[_0x68b4[23]],_0x68b4[7])[_0x68b4[181]](document,_0x68b4[131]);_0x7890x8[_0x68b4[89]]()}));_0x7890x3b[_0x68b4[31]]= _0x68b4[113];var _0x7890x3e=mxUtils[_0x68b4[90]](mxResources[_0x68b4[86]](_0x68b4[114]),function(){_0x7890x8[_0x68b4[89]]()});_0x7890x3e[_0x68b4[31]]= _0x68b4[115];_0x7890x2f[_0x68b4[25]](_0x7890x3b);_0x7890x2f[_0x68b4[25]](_0x7890x3e);_0x7890x2c[_0x68b4[25]](_0x7890x2d);_0x7890x2c[_0x68b4[25]](_0x7890x2e);_0x7890x2c[_0x68b4[25]](_0x7890x2f);this[_0x68b4[74]]= _0x7890x2c}function GeneralDialog(_0x7890x8,_0x7890x58){var _0x7890x59=_0x7890x8[_0x68b4[13]][_0x68b4[184]];var _0x7890x2c=_0x7890x8[_0x68b4[60]](_0x68b4[79]);var _0x7890x2d=_0x7890x8[_0x68b4[60]](_0x68b4[80]);var _0x7890x2e=_0x7890x8[_0x68b4[60]](_0x68b4[185]);var _0x7890x2f=_0x7890x8[_0x68b4[60]](_0x68b4[82]);var _0x7890x30=_0x7890x8[_0x68b4[84]](_0x68b4[83]);mxUtils[_0x68b4[88]](_0x7890x30,mxResources[_0x68b4[86]](_0x68b4[170])+ _0x68b4[186]+ mxResources[_0x68b4[86]](_0x7890x58[_0x68b4[23]][_0x68b4[187]]));var _0x7890x31=mxUtils[_0x68b4[90]](_0x68b4[43],function(){_0x7890x8[_0x68b4[89]]()});_0x7890x31[_0x68b4[31]]= _0x68b4[75];_0x7890x2d[_0x68b4[25]](_0x7890x31);_0x7890x2d[_0x68b4[25]](_0x7890x30);var _0x7890x5a=_0x7890x58[_0x68b4[23]][_0x68b4[188]][_0x68b4[155]];var _0x7890x4a=_0x7890x8[_0x68b4[60]](_0x68b4[145]);for(var _0x7890x5b=0;_0x7890x5b< _0x7890x5a;_0x7890x5b++){var _0x7890x43=_0x7890x58[_0x68b4[23]][_0x68b4[188]][_0x7890x5b][_0x68b4[49]];var _0x7890x44=_0x68b4[134]+ _0x7890x43;var _0x7890x2=_0x7890x58[_0x68b4[23]][_0x68b4[188]][_0x7890x5b][_0x68b4[23]];var _0x7890x13=_0x7890x8[_0x68b4[60]]((_0x7890x5b== _0x7890x5a- 1)?_0x68b4[153]:_0x68b4[146]);var _0x7890x46=document[_0x68b4[2]](_0x68b4[36]);_0x7890x46[_0x68b4[31]]= _0x68b4[147];mxUtils[_0x68b4[88]](_0x7890x46,mxResources[_0x68b4[86]](_0x7890x43));_0x7890x13[_0x68b4[25]](_0x7890x46);var _0x7890x3;switch(_0x7890x43){case _0x68b4[192]:_0x7890x3= createDropdownWithOptgroupFromApi(_0x68b4[189],_0x7890x2,_0x68b4[190],_0x68b4[48],_0x7890x8,_0x68b4[191]);break;case _0x68b4[194]:_0x7890x3= createDropdownFromApi(_0x68b4[193],_0x7890x2,_0x68b4[49],_0x68b4[49],_0x7890x8);break;case _0x68b4[196]:_0x7890x3= createDropdownFromApi(_0x68b4[195],_0x7890x2,_0x68b4[49],_0x68b4[49],_0x7890x8);break;case _0x68b4[198]:_0x7890x3= createDropdownFromApi(_0x68b4[197],_0x7890x2,_0x68b4[49],_0x68b4[48],_0x7890x8);break;case _0x68b4[203]:if(_0x7890x58[_0x68b4[23]][_0x68b4[187]]== _0x68b4[199]){_0x7890x3= createDropdownFromApi(_0x68b4[200],_0x7890x2,_0x68b4[201],_0x68b4[48],_0x7890x8)}else {_0x7890x3= createDropdownFromApi(_0x68b4[202],_0x7890x2,_0x68b4[49],_0x68b4[48],_0x7890x8)};break;case _0x68b4[205]:_0x7890x3= createDropdownFromApi(_0x68b4[204],_0x7890x2,_0x68b4[49],_0x68b4[48],_0x7890x8);break;case _0x68b4[207]:_0x7890x3= createDropdownFromApi(_0x68b4[206],_0x7890x2,_0x68b4[49],_0x68b4[49],_0x7890x8);break;case _0x68b4[209]:_0x7890x3= createDropdownFromApi(_0x68b4[208],_0x7890x2,_0x68b4[209],_0x68b4[48],_0x7890x8,[_0x68b4[209],_0x68b4[207]],_0x68b4[210]);break;case _0x68b4[211]:_0x7890x3= createDropdownFromArray(ISPEECHASRMODEL,_0x7890x2);break;case _0x68b4[212]:_0x7890x3= createDropdownFromArray(ISPEECHASRLANG,_0x7890x2);break;case _0x68b4[213]:_0x7890x3= createDropdownFromArray(ISPEECHBEEP,_0x7890x2);break;case _0x68b4[214]:_0x7890x3= createDropdownFromArray(SECRETDIGITSPOS,_0x7890x2);break;case _0x68b4[215]:_0x7890x3= createDropdownFromArray(ISPEECHLANG,_0x7890x2);break;case _0x68b4[216]:_0x7890x3= createDropdownFromArray(GOOGLETTSLANG,_0x7890x2);break;case _0x68b4[217]:_0x7890x3= createDropdownFromArray(ASRINTKEYS,_0x7890x2);break;case _0x68b4[218]:_0x7890x3= createDropdownFromArray(RECORDINGFORMAT,_0x7890x2);break;case _0x68b4[219]:_0x7890x3= createDropdownFromArray(BOOLSELECT,_0x7890x2);break;case _0x68b4[220]:_0x7890x3= createDropdownFromTigerDialList(_0x7890x2);break;case _0x68b4[223]:_0x7890x3= createGroupedDropdownFromApi(_0x68b4[221],_0x7890x2,_0x68b4[49],_0x68b4[48],_0x7890x8,_0x68b4[222]);break;case _0x68b4[224]:_0x7890x3= createDropdownFromApi(_0x68b4[154],_0x7890x2,_0x68b4[49],_0x68b4[48],_0x7890x8);break;case _0x68b4[226]:_0x7890x3= createDropdownFromApi(_0x68b4[225],_0x7890x2,_0x68b4[49],_0x68b4[48],_0x7890x8);break;case _0x68b4[229]:_0x7890x3= createDropdownFromApi(_0x68b4[227],_0x7890x2,_0x68b4[228],_0x68b4[48],_0x7890x8);break;case _0x68b4[230]:;case _0x68b4[231]:;case _0x68b4[232]:;case _0x68b4[233]:;case _0x68b4[17]:;case _0x68b4[234]:;case _0x68b4[237]:_0x7890x3= document[_0x68b4[2]](_0x68b4[1]);_0x7890x3[_0x68b4[5]](_0x68b4[3],_0x68b4[235]);_0x7890x3[_0x68b4[5]](_0x68b4[236],0);_0x7890x3[_0x68b4[5]](_0x68b4[56],1000);_0x7890x3[_0x68b4[5]](_0x68b4[23],_0x7890x2);_0x7890x3[_0x68b4[31]]= _0x68b4[140];break;case _0x68b4[21]:;case _0x68b4[238]:;case _0x68b4[239]:;case _0x68b4[240]:;case _0x68b4[241]:;case _0x68b4[54]:_0x7890x3= document[_0x68b4[2]](_0x68b4[93]);_0x7890x3[_0x68b4[242]]= _0x7890x2;_0x7890x3[_0x68b4[31]]= _0x68b4[140];break;case _0x68b4[245]:_0x7890x3= document[_0x68b4[2]](_0x68b4[93]);_0x7890x3[_0x68b4[242]]= _0x7890x2;_0x7890x3[_0x68b4[31]]= _0x68b4[140];_0x7890x3[_0x68b4[5]](_0x68b4[243],_0x68b4[244]);break;default:_0x7890x3= document[_0x68b4[2]](_0x68b4[1]);_0x7890x3[_0x68b4[5]](_0x68b4[23],_0x7890x2);_0x7890x3[_0x68b4[31]]= _0x68b4[140];break};_0x7890x3[_0x68b4[5]](_0x68b4[48],_0x7890x44);var _0x7890x29=_0x7890x8[_0x68b4[60]](_0x68b4[148]);_0x7890x29[_0x68b4[25]](_0x7890x3);if(mxResources[_0x68b4[86]](_0x68b4[246]+ _0x7890x43)){var _0x7890x5c=_0x7890x8[_0x68b4[60]](_0x68b4[247]);_0x7890x5c[_0x68b4[31]]= _0x68b4[248];mxUtils[_0x68b4[88]](_0x7890x5c,mxResources[_0x68b4[86]](_0x68b4[246]+ _0x7890x43));_0x7890x29[_0x68b4[25]](_0x7890x5c)};_0x7890x13[_0x68b4[25]](_0x7890x29);_0x7890x4a[_0x68b4[25]](_0x7890x13)};_0x7890x2e[_0x68b4[25]](_0x7890x4a);var _0x7890x3b=mxUtils[_0x68b4[90]](mxResources[_0x68b4[86]](_0x68b4[141]),mxUtils[_0x68b4[112]](this,function(_0x7890x3c){for(var _0x7890x5b=0;_0x7890x5b< _0x7890x58[_0x68b4[23]][_0x68b4[188]][_0x68b4[155]];_0x7890x5b++){var _0x7890x44=_0x68b4[134]+ _0x7890x58[_0x68b4[23]][_0x68b4[188]][_0x7890x5b][_0x68b4[49]];var _0x7890x43=_0x7890x58[_0x68b4[23]][_0x68b4[188]][_0x7890x5b][_0x68b4[49]];_0x7890x58[_0x68b4[5]](_0x7890x43,document[_0x68b4[249]](_0x7890x44)[_0x68b4[23]])};_0x7890x59[_0x68b4[250]](_0x7890x58);_0x7890x8[_0x68b4[89]]()}));_0x7890x3b[_0x68b4[31]]= _0x68b4[113];var _0x7890x3e=mxUtils[_0x68b4[90]](mxResources[_0x68b4[86]](_0x68b4[114]),function(){_0x7890x8[_0x68b4[89]]()});_0x7890x3e[_0x68b4[31]]= _0x68b4[115];_0x7890x2f[_0x68b4[25]](_0x7890x3b);_0x7890x2f[_0x68b4[25]](_0x7890x3e);_0x7890x2c[_0x68b4[25]](_0x7890x2d);_0x7890x2c[_0x68b4[25]](_0x7890x2e);_0x7890x2c[_0x68b4[25]](_0x7890x2f);this[_0x68b4[74]]= _0x7890x2c} \ No newline at end of file diff --git a/public/assets/plugins/square/js/Editor.js b/public/assets/plugins/square/js/Editor.js index 9858989..634c857 100644 --- a/public/assets/plugins/square/js/Editor.js +++ b/public/assets/plugins/square/js/Editor.js @@ -1,888 +1 @@ -/** - * $Id: Editor.js,v 1.14 2013/03/06 17:57:10 boris Exp $ - * Copyright (c) 2006-2012, JGraph Ltd - */ -// Specifies if local storage should be used (eg. on the iPad which has no filesystem) -var useLocalStorage = (mxClient.IS_TOUCH || urlParams['storage'] == 'local') && typeof(localStorage) != 'undefined'; -var fileSupport = window.File != null && window.FileReader != null && window.FileList != null; - -// Specifies if connector should be shown on selected cells -var touchStyle = mxClient.IS_TOUCH || urlParams['touch'] == '1'; - -// Counts open editor tabs (must be global for cross-window access) -var counter = 0; - -// Cross-domain window access is not allowed in FF, so if we -// were opened from another domain then this will fail. -try { - var op = window; - - while (op.opener != null && !isNaN(op.opener.counter)) { - op = op.opener; - } - - // Increments the counter in the first opener in the chain - if (op != null) { - op.counter++; - counter = op.counter; - } -} catch (e) { - // ignore -} - -/** - * Editor constructor executed on page load. - */ -Editor = function() { - mxEventSource.call(this); - this.init(); - this.initStencilRegistry(); - this.graph = new Graph(); - this.outline = new mxOutline(this.graph); - this.outline.updateOnPan = true; - this.undoManager = this.createUndoManager(); - this.status = ''; - - // Contains the name which was used for the last save. Default value is null. - this.filename = null; - - this.getOrCreateFilename = function() { - return this.filename || mxResources.get('drawing', [counter]) + '.xml'; - }; - - this.getFilename = function() { - return this.filename; - }; - - // Sets the status and fires a statusChanged event - this.setStatus = function(value) { - this.status = value; - this.fireEvent(new mxEventObject('statusChanged')); - }; - - // Returns the current status - this.getStatus = function() { - return this.status; - }; - - // Contains the current modified state of the diagram. This is false for - // new diagrams and after the diagram was saved. - this.modified = false; - - // Updates modified state if graph changes - this.graphChangeListener = function() { - this.modified = true; - }; - this.graph.getModel().addListener(mxEvent.CHANGE, mxUtils.bind(this, function() { - this.graphChangeListener.apply(this, arguments); - })); - - // Installs dialog if browser window is closed without saving - // This must be disabled during save and image export - window.onbeforeunload = mxUtils.bind(this, function() { - if (this.modified) { - return mxResources.get('allChangesLost'); - } - }); - - // Sets persistent graph state defaults - this.graph.resetViewOnRootChange = false; - this.graph.scrollbars = true; - this.graph.background = null; -}; - -// Editor inherits from mxEventSource -mxUtils.extend(Editor, mxEventSource); - -/** - * Specifies the image URL to be used for the grid. - */ -Editor.prototype.gridImage = IMAGE_PATH + '/grid.gif'; - -/** - * Specifies the image URL to be used for the transparent background. - */ -Editor.prototype.transparentImage = IMAGE_PATH + '/transparent.gif'; - -/** - * Sets the XML node for the current diagram. - */ -Editor.prototype.setGraphXml = function(node) { - var dec = new mxCodec(node.ownerDocument); - - if (node.nodeName == 'mxGraphModel') { - this.graph.view.scale = 1; - this.graph.gridEnabled = node.getAttribute('grid') != '0'; - this.graph.graphHandler.guidesEnabled = node.getAttribute('guides') != '0'; - this.graph.setTooltips(node.getAttribute('tooltips') != '0'); - this.graph.setConnectable(node.getAttribute('connect') != '0'); - this.graph.foldingEnabled = node.getAttribute('fold') != '0'; - this.graph.scrollbars = node.getAttribute('scrollbars') != '0'; - - if (!this.graph.scrollbars) { - this.graph.container.scrollLeft = 0; - this.graph.container.scrollTop = 0; - this.graph.view.translate.x = Number(node.getAttribute('dx') || 0); - this.graph.view.translate.y = Number(node.getAttribute('dy') || 0); - } - - this.graph.pageVisible = node.getAttribute('page') == '1'; - this.graph.pageBreaksVisible = this.graph.pageVisible; - this.graph.preferPageSize = this.graph.pageBreaksVisible; - - // Loads the persistent state settings - var ps = node.getAttribute('pageScale'); - - if (ps != null) { - this.graph.pageScale = ps; - } else { - this.graph.pageScale = 1.5; - } - - var pw = node.getAttribute('pageWidth'); - var ph = node.getAttribute('pageHeight'); - - if (pw != null && ph != null) { - this.graph.pageFormat = new mxRectangle(0, 0, parseFloat(pw), parseFloat(ph)); - this.outline.outline.pageFormat = this.graph.pageFormat; - } - - // Loads the persistent state settings - var bg = node.getAttribute('background'); - - if (bg != null && bg.length > 0) { - this.graph.background = bg; - } - - dec.decode(node, this.graph.getModel()); - this.updateGraphComponents(); - } -}; - -/** - * Returns the XML node that represents the current diagram. - */ -Editor.prototype.getGraphXml = function() { - var enc = new mxCodec(mxUtils.createXmlDocument()); - var node = enc.encode(this.graph.getModel()); - - if (this.graph.view.translate.x != 0 || this.graph.view.translate.y != 0) { - node.setAttribute('dx', Math.round(this.graph.view.translate.x * 100) / 100); - node.setAttribute('dy', Math.round(this.graph.view.translate.y * 100) / 100); - } - - node.setAttribute('grid', (this.graph.isGridEnabled()) ? '1' : '0'); - node.setAttribute('guides', (this.graph.graphHandler.guidesEnabled) ? '1' : '0'); - node.setAttribute('guides', (this.graph.graphHandler.guidesEnabled) ? '1' : '0'); - node.setAttribute('tooltips', (this.graph.tooltipHandler.isEnabled()) ? '1' : '0'); - node.setAttribute('connect', (this.graph.connectionHandler.isEnabled()) ? '1' : '0'); - node.setAttribute('fold', (this.graph.foldingEnabled) ? '1' : '0'); - node.setAttribute('page', (this.graph.pageVisible) ? '1' : '0'); - node.setAttribute('pageScale', this.graph.pageScale); - node.setAttribute('pageWidth', this.graph.pageFormat.width); - node.setAttribute('pageHeight', this.graph.pageFormat.height); - - if (!this.graph.scrollbars) { - node.setAttribute('scrollbars', '0'); - } - - if (this.graph.background != null) { - node.setAttribute('background', this.graph.background); - } - - return node; -}; - -/** - * Keeps the graph container in sync with the persistent graph state - */ -Editor.prototype.updateGraphComponents = function() { - var graph = this.graph; - var outline = this.outline; - - if (graph.container != null && outline.outline.container != null) { - if (graph.background != null) { - if (graph.background == 'none') { - graph.container.style.backgroundColor = 'transparent'; - } else { - if (graph.view.backgroundPageShape != null) { - graph.view.backgroundPageShape.fill = graph.background; - graph.view.backgroundPageShape.reconfigure(); - } - - graph.container.style.backgroundColor = graph.background; - } - } else { - graph.container.style.backgroundColor = ''; - } - - if (graph.pageVisible) { - graph.container.style.backgroundColor = '#ebebeb'; - graph.container.style.borderStyle = 'solid'; - graph.container.style.borderColor = '#e5e5e5'; - graph.container.style.borderTopWidth = '1px'; - graph.container.style.borderLeftWidth = '1px'; - graph.container.style.borderRightWidth = '0px'; - graph.container.style.borderBottomWidth = '0px'; - } else { - graph.container.style.border = ''; - } - - outline.outline.container.style.backgroundColor = graph.container.style.backgroundColor; - - if (outline.outline.pageVisible != graph.pageVisible || - outline.outline.pageScale != graph.pageScale) { - outline.outline.pageScale = graph.pageScale; - outline.outline.pageVisible = graph.pageVisible; - outline.outline.view.validate(); - } - - if (graph.scrollbars && graph.container.style.overflow == 'hidden' && !touchStyle) { - graph.container.style.overflow = 'auto'; - } else if (!graph.scrollbars || touchStyle) { - graph.container.style.overflow = 'hidden'; - } - - // Transparent.gif is a workaround for focus repaint problems in IE - var noBackground = (mxClient.IS_IE && document.documentMode >= 9) ? 'url(' + this.transparentImage + ')' : 'none'; - graph.container.style.backgroundImage = (!graph.pageVisible && graph.isGridEnabled()) ? 'url(' + this.gridImage + ')' : noBackground; - - if (graph.view.backgroundPageShape != null) { - graph.view.backgroundPageShape.node.style.backgroundImage = (this.graph.isGridEnabled()) ? 'url(' + this.gridImage + ')' : 'none'; - } - } -}; - -/** - * Initializes the environment. - */ -Editor.prototype.init = function() { - // Adds stylesheet for IE6 - if (mxClient.IS_IE6) { - mxClient.link('stylesheet', CSS_PATH + '/grapheditor-ie6.css'); - } - - // Adds required resources (disables loading of fallback properties, this can only - // be used if we know that all keys are defined in the language specific file) - mxResources.loadDefaultBundle = false; - mxResources.add(RESOURCE_BASE); - - // Makes the connection hotspot smaller - mxConstants.DEFAULT_HOTSPOT = 0.3; - - var mxConnectionHandlerCreateMarker = mxConnectionHandler.prototype.createMarker; - mxConnectionHandler.prototype.createMarker = function() { - var marker = mxConnectionHandlerCreateMarker.apply(this, arguments); - - // Overrides to ignore hotspot only for target terminal - marker.intersects = mxUtils.bind(this, function(state, evt) { - if (this.isConnecting()) { - return true; - } - - return mxCellMarker.prototype.intersects.apply(marker, arguments); - }); - - return marker; - }; - - // Makes the shadow brighter - mxConstants.SHADOWCOLOR = '#d0d0d0'; - - // Changes some default colors - mxConstants.HANDLE_FILLCOLOR = '#99ccff'; - mxConstants.HANDLE_STROKECOLOR = '#0088cf'; - mxConstants.VERTEX_SELECTION_COLOR = '#00a8ff'; - mxConstants.OUTLINE_COLOR = '#00a8ff'; - mxConstants.OUTLINE_HANDLE_FILLCOLOR = '#99ccff'; - mxConstants.OUTLINE_HANDLE_STROKECOLOR = '#00a8ff'; - mxConstants.CONNECT_HANDLE_FILLCOLOR = '#cee7ff'; - mxConstants.EDGE_SELECTION_COLOR = '#00a8ff'; - mxConstants.DEFAULT_VALID_COLOR = '#00a8ff'; - mxConstants.LABEL_HANDLE_FILLCOLOR = '#cee7ff'; - mxConstants.GUIDE_COLOR = '#0088cf'; - - mxGraph.prototype.pageBreakColor = '#c0c0c0'; - mxGraph.prototype.pageScale = 1; - - // Increases default rubberband opacity (default is 20) - mxRubberband.prototype.defaultOpacity = 30; - - // Changes border color of background page shape - mxGraphView.prototype.createBackgroundPageShape = function(bounds) { - return new mxRectangleShape(bounds, this.graph.background || 'white', '#cacaca'); - }; - - // Fits the number of background pages to the graph - mxGraphView.prototype.getBackgroundPageBounds = function() { - var gb = this.getGraphBounds(); - - // Computes unscaled, untranslated graph bounds - var x = (gb.width > 0) ? gb.x / this.scale - this.translate.x : 0; - var y = (gb.height > 0) ? gb.y / this.scale - this.translate.y : 0; - var w = gb.width / this.scale; - var h = gb.height / this.scale; - - var fmt = this.graph.pageFormat; - var ps = this.graph.pageScale; - - var pw = fmt.width * ps; - var ph = fmt.height * ps; - - var x0 = Math.floor(Math.min(0, x) / pw); - var y0 = Math.floor(Math.min(0, y) / ph); - var xe = Math.ceil(Math.max(1, x + w) / pw); - var ye = Math.ceil(Math.max(1, y + h) / ph); - - var rows = xe - x0; - var cols = ye - y0; - - var bounds = new mxRectangle(this.scale * (this.translate.x + x0 * pw), this.scale * - (this.translate.y + y0 * ph), this.scale * rows * pw, this.scale * cols * ph); - - return bounds; - }; - - // Add panning for background page in VML - var graphPanGraph = mxGraph.prototype.panGraph; - mxGraph.prototype.panGraph = function(dx, dy) { - graphPanGraph.apply(this, arguments); - - if ((this.dialect != mxConstants.DIALECT_SVG && this.view.backgroundPageShape != null) && - (!this.useScrollbarsForPanning || !mxUtils.hasScrollbars(this.container))) { - this.view.backgroundPageShape.node.style.marginLeft = dx + 'px'; - this.view.backgroundPageShape.node.style.marginTop = dy + 'px'; - } - }; - - var editor = this; - - // Uses HTML for background pages (to support grid background image) - mxGraphView.prototype.validateBackground = function() { - var bg = this.graph.getBackgroundImage(); - - if (bg != null) { - if (this.backgroundImage == null || this.backgroundImage.image != bg.src) { - if (this.backgroundImage != null) { - this.backgroundImage.destroy(); - } - - var bounds = new mxRectangle(0, 0, 1, 1); - - this.backgroundImage = new mxImageShape(bounds, bg.src); - this.backgroundImage.dialect = this.graph.dialect; - this.backgroundImage.init(this.backgroundPane); - this.backgroundImage.redraw(); - } - - this.redrawBackgroundImage(this.backgroundImage, bg); - } else if (this.backgroundImage != null) { - this.backgroundImage.destroy(); - this.backgroundImage = null; - } - - if (this.graph.pageVisible) { - var bounds = this.getBackgroundPageBounds(); - - if (this.backgroundPageShape == null) { - this.backgroundPageShape = this.createBackgroundPageShape(bounds); - this.backgroundPageShape.scale = 1; - this.backgroundPageShape.isShadow = true; - this.backgroundPageShape.dialect = mxConstants.DIALECT_STRICTHTML; - this.backgroundPageShape.init(this.graph.container); - // Required for the browser to render the background page in correct order - this.graph.container.firstChild.style.position = 'absolute'; - this.graph.container.insertBefore(this.backgroundPageShape.node, this.graph.container.firstChild); - this.backgroundPageShape.redraw(); - - this.backgroundPageShape.node.className = 'geBackgroundPage'; - this.backgroundPageShape.node.style.backgroundPosition = '-1px -1px'; - - // Adds listener for double click handling on background - mxEvent.addListener(this.backgroundPageShape.node, 'dblclick', - mxUtils.bind(this, function(evt) { - this.graph.dblClick(evt); - }) - ); - - // Adds basic listeners for graph event dispatching outside of the - // container and finishing the handling of a single gesture - mxEvent.addGestureListeners(this.backgroundPageShape.node, - mxUtils.bind(this, function(evt) { - this.graph.fireMouseEvent(mxEvent.MOUSE_DOWN, new mxMouseEvent(evt)); - }), - mxUtils.bind(this, function(evt) { - // Hides the tooltip if mouse is outside container - if (this.graph.tooltipHandler != null && - this.graph.tooltipHandler.isHideOnHover()) { - this.graph.tooltipHandler.hide(); - } - - if (this.graph.isMouseDown && - !mxEvent.isConsumed(evt)) { - this.graph.fireMouseEvent(mxEvent.MOUSE_MOVE, - new mxMouseEvent(evt)); - } - }), - mxUtils.bind(this, function(evt) { - this.graph.fireMouseEvent(mxEvent.MOUSE_UP, - new mxMouseEvent(evt)); - })); - } else { - this.backgroundPageShape.scale = 1; - this.backgroundPageShape.bounds = bounds; - this.backgroundPageShape.redraw(); - } - - this.backgroundPageShape.node.style.backgroundImage = (this.graph.isGridEnabled()) ? - 'url(' + editor.gridImage + ')' : 'none'; - } else if (this.backgroundPageShape != null) { - this.backgroundPageShape.destroy(); - this.backgroundPageShape = null; - } - }; - - // Draws page breaks only within the page - mxGraph.prototype.updatePageBreaks = function(visible, width, height) { - var scale = this.view.scale; - var tr = this.view.translate; - var fmt = this.pageFormat; - var ps = scale * this.pageScale; - - var bounds2 = this.view.getBackgroundPageBounds(); - - width = bounds2.width; - height = bounds2.height; - var bounds = new mxRectangle(scale * tr.x, scale * tr.y, - fmt.width * ps, fmt.height * ps); - - // Does not show page breaks if the scale is too small - visible = visible && Math.min(bounds.width, bounds.height) > this.minPageBreakDist; - - var horizontalCount = (visible) ? Math.ceil(width / bounds.width) - 1 : 0; - var verticalCount = (visible) ? Math.ceil(height / bounds.height) - 1 : 0; - var right = bounds2.x + width; - var bottom = bounds2.y + height; - - if (this.horizontalPageBreaks == null && horizontalCount > 0) { - this.horizontalPageBreaks = []; - } - - if (this.horizontalPageBreaks != null) { - for (var i = 0; i <= horizontalCount; i++) { - var pts = [new mxPoint(bounds2.x + (i + 1) * bounds.width, bounds2.y), - new mxPoint(bounds2.x + (i + 1) * bounds.width, bottom) - ]; - - if (this.horizontalPageBreaks[i] != null) { - this.horizontalPageBreaks[i].scale = 1; - this.horizontalPageBreaks[i].points = pts; - this.horizontalPageBreaks[i].redraw(); - } else { - var pageBreak = new mxPolyline(pts, this.pageBreakColor, this.scale); - pageBreak.dialect = this.dialect; - pageBreak.isDashed = this.pageBreakDashed; - pageBreak.addPipe = false; - pageBreak.scale = scale; - pageBreak.init(this.view.backgroundPane); - pageBreak.redraw(); - - this.horizontalPageBreaks[i] = pageBreak; - } - } - - for (var i = horizontalCount; i < this.horizontalPageBreaks.length; i++) { - this.horizontalPageBreaks[i].destroy(); - } - - this.horizontalPageBreaks.splice(horizontalCount, this.horizontalPageBreaks.length - horizontalCount); - } - - if (this.verticalPageBreaks == null && verticalCount > 0) { - this.verticalPageBreaks = []; - } - - if (this.verticalPageBreaks != null) { - for (var i = 0; i <= verticalCount; i++) { - var pts = [new mxPoint(bounds2.x, bounds2.y + (i + 1) * bounds.height), - new mxPoint(right, bounds2.y + (i + 1) * bounds.height) - ]; - - if (this.verticalPageBreaks[i] != null) { - this.verticalPageBreaks[i].scale = 1; //scale; - this.verticalPageBreaks[i].points = pts; - this.verticalPageBreaks[i].redraw(); - } else { - var pageBreak = new mxPolyline(pts, this.pageBreakColor, scale); - pageBreak.dialect = this.dialect; - pageBreak.isDashed = this.pageBreakDashed; - pageBreak.addPipe = false; - pageBreak.scale = scale; - pageBreak.init(this.view.backgroundPane); - pageBreak.redraw(); - - this.verticalPageBreaks[i] = pageBreak; - } - } - - for (var i = verticalCount; i < this.verticalPageBreaks.length; i++) { - this.verticalPageBreaks[i].destroy(); - } - - this.verticalPageBreaks.splice(verticalCount, this.verticalPageBreaks.length - verticalCount); - } - }; - - // Enables snapping to off-grid terminals for edge waypoints - mxEdgeHandler.prototype.snapToTerminals = true; - - // Enables guides - mxGraphHandler.prototype.guidesEnabled = true; - - // Disables removing relative children from parents - var mxGraphHandlerShouldRemoveCellsFromParent = mxGraphHandler.prototype.shouldRemoveCellsFromParent; - mxGraphHandler.prototype.shouldRemoveCellsFromParent = function(parent, cells, evt) { - for (var i = 0; i < cells.length; i++) { - if (this.graph.getModel().isVertex(cells[i])) { - var geo = this.graph.getCellGeometry(cells[i]); - - if (geo != null && geo.relative) { - return false; - } - } - } - - return mxGraphHandlerShouldRemoveCellsFromParent.apply(this, arguments); - }; - - // Alt-move disables guides - mxGuide.prototype.isEnabledForEvent = function(evt) { - return !mxEvent.isAltDown(evt); - }; - - // Consumes click events for disabled menu items - mxPopupMenuAddItem = mxPopupMenu.prototype.addItem; - mxPopupMenu.prototype.addItem = function(title, image, funct, parent, iconCls, enabled) { - var result = mxPopupMenuAddItem.apply(this, arguments); - - if (enabled != null && !enabled) { - mxEvent.addListener(result, 'mousedown', function(evt) { - mxEvent.consume(evt); - }); - } - - return result; - }; - - // Selects descendants before children selection mode - var graphHandlerGetInitialCellForEvent = mxGraphHandler.prototype.getInitialCellForEvent; - mxGraphHandler.prototype.getInitialCellForEvent = function(me) { - var model = this.graph.getModel(); - var psel = model.getParent(this.graph.getSelectionCell()); - var cell = graphHandlerGetInitialCellForEvent.apply(this, arguments); - var parent = model.getParent(cell); - - if (psel == null || (psel != cell && psel != parent)) { - while (!this.graph.isCellSelected(cell) && !this.graph.isCellSelected(parent) && - model.isVertex(parent) && !this.graph.isValidRoot(parent)) { - cell = parent; - parent = this.graph.getModel().getParent(cell); - } - } - - return cell; - }; - - // Selection is delayed to mouseup if child selected - var graphHandlerIsDelayedSelection = mxGraphHandler.prototype.isDelayedSelection; - mxGraphHandler.prototype.isDelayedSelection = function(cell) { - var result = graphHandlerIsDelayedSelection.apply(this, arguments); - var model = this.graph.getModel(); - var psel = model.getParent(this.graph.getSelectionCell()); - var parent = model.getParent(cell); - - if (psel == null || (psel != cell && psel != parent)) { - if (!this.graph.isCellSelected(cell) && model.isVertex(parent) && !this.graph.isValidRoot(parent)) { - result = true; - } - } - - return result; - }; - - // Delayed selection of parent group - mxGraphHandler.prototype.selectDelayed = function(me) { - var cell = me.getCell(); - - if (cell == null) { - cell = this.cell; - } - - var model = this.graph.getModel(); - var parent = model.getParent(cell); - - while (this.graph.isCellSelected(cell) && model.isVertex(parent) && !this.graph.isValidRoot(parent)) { - cell = parent; - parent = model.getParent(cell); - } - - this.graph.selectCellForEvent(cell, me.getEvent()); - }; - - // Returns last selected ancestor - mxPanningHandler.prototype.getCellForPopupEvent = function(me) { - var cell = me.getCell(); - var model = this.graph.getModel(); - var parent = model.getParent(cell); - - while (model.isVertex(parent) && !this.graph.isValidRoot(parent)) { - if (this.graph.isCellSelected(parent)) { - cell = parent; - } - - parent = model.getParent(parent); - } - - return cell; - }; -}; - -/** - * Creates and returns a new undo manager. - */ -Editor.prototype.createUndoManager = function() { - var graph = this.graph; - var undoMgr = new mxUndoManager(); - - // Installs the command history - var listener = function(sender, evt) { - undoMgr.undoableEditHappened(evt.getProperty('edit')); - }; - - graph.getModel().addListener(mxEvent.UNDO, listener); - graph.getView().addListener(mxEvent.UNDO, listener); - - // Keeps the selection in sync with the history - var undoHandler = function(sender, evt) { - var cand = graph.getSelectionCellsForChanges(evt.getProperty('edit').changes); - var cells = []; - - for (var i = 1; i < cand.length; i++) { - if (graph.view.getState(cand[i]) != null) { - cells.push(cand[i]); - } - } - - graph.setSelectionCells(cells); - }; - - undoMgr.addListener(mxEvent.UNDO, undoHandler); - undoMgr.addListener(mxEvent.REDO, undoHandler); - - return undoMgr; -}; - -/** - * Adds basic stencil set (no namespace). - */ -Editor.prototype.initStencilRegistry = function() { - // Loads default stencils - mxStencilRegistry.loadStencilSet(STENCIL_PATH + '/general.xml'); -}; - -/** - * Overrides stencil registry for dynamic loading of stencils. - */ -(function() { - /** - * Maps from library names to an array of Javascript filenames, - * which are synchronously loaded. Currently only stencil files - * (.xml) and JS files (.js) are supported. - * IMPORTANT: For embedded diagrams to work entries must also - * be added in EmbedServlet.java. - */ - mxStencilRegistry.libraries = {}; - - /** - * Stores all package names that have been dynamically loaded. - * Each package is only loaded once. - */ - mxStencilRegistry.packages = []; - - // Extends the default stencil registry to add dynamic loading - mxStencilRegistry.getStencil = function(name) { - var result = mxStencilRegistry.stencils[name]; - - if (result == null) { - var basename = mxStencilRegistry.getBasenameForStencil(name); - - // Loads stencil files and tries again - if (basename != null) { - var libs = mxStencilRegistry.libraries[basename]; - - if (libs != null) { - if (mxStencilRegistry.packages[basename] == null) { - mxStencilRegistry.packages[basename] = 1; - - for (var i = 0; i < libs.length; i++) { - var fname = libs[i]; - - if (fname.toLowerCase().substring(fname.length - 4, fname.length) == '.xml') { - mxStencilRegistry.loadStencilSet(fname, null); - } else if (fname.toLowerCase().substring(fname.length - 3, fname.length) == '.js') { - var req = mxUtils.load(fname); - - if (req != null) { - eval.call(window, req.getText()); - } - } else { - // FIXME: This does not yet work as the loading is triggered after - // the shape was used in the graph, at which point the keys have - // typically been translated in the calling method. - //mxResources.add(fname); - } - } - } - } else { - mxStencilRegistry.loadStencilSet(STENCIL_PATH + '/' + basename + '.xml', null); - } - - result = mxStencilRegistry.stencils[name]; - } - } - - return result; - }; - - // Returns the basename for the given stencil or null if no file must be - // loaded to render the given stencil. - mxStencilRegistry.getBasenameForStencil = function(name) { - var parts = name.split('.'); - var tmp = null; - - if (parts.length > 0 && parts[0] == 'mxgraph') { - tmp = parts[1]; - - for (var i = 2; i < parts.length - 1; i++) { - tmp += '/' + parts[i]; - } - } - - return tmp; - }; - - // Loads the given stencil set - mxStencilRegistry.loadStencilSet = function(stencilFile, postStencilLoad, force) { - force = (force != null) ? force : false; - - // Uses additional cache for detecting previous load attempts - var xmlDoc = mxStencilRegistry.packages[stencilFile]; - - if (force || xmlDoc == null) { - var install = false; - - if (xmlDoc == null) { - var req = mxUtils.load(stencilFile); - xmlDoc = req.getXml(); - mxStencilRegistry.packages[stencilFile] = xmlDoc; - install = true; - } - - mxStencilRegistry.parseStencilSet(xmlDoc, postStencilLoad, install); - } - }; - - // Parses the given stencil set - mxStencilRegistry.parseStencilSet = function(xmlDocument, postStencilLoad, install) { - install = (install != null) ? install : true; - var root = xmlDocument.documentElement; - var shape = root.firstChild; - var packageName = ''; - var name = root.getAttribute('name'); - - if (name != null) { - packageName = name + '.'; - } - - while (shape != null) { - if (shape.nodeType == mxConstants.NODETYPE_ELEMENT) { - name = shape.getAttribute('name'); - - if (name != null) { - packageName = packageName.toLowerCase(); - var stencilName = name.replace(/ /g, "_"); - - if (install) { - mxStencilRegistry.addStencil(packageName + stencilName.toLowerCase(), new mxStencil(shape)); - } - - if (postStencilLoad != null) { - var w = shape.getAttribute('w'); - var h = shape.getAttribute('h'); - - w = (w == null) ? 80 : parseInt(w, 10); - h = (h == null) ? 80 : parseInt(h, 10); - - postStencilLoad(packageName, stencilName, name, w, h); - } - } - } - - shape = shape.nextSibling; - } - }; -})(); - -/** - * Class for asynchronously opening a new window and loading a file at the same - * time. This acts as a bridge between the open dialog and the new editor. - */ -OpenFile = function(done) { - this.producer = null; - this.consumer = null; - this.done = done; -}; - -/** - * Registers the editor from the new window. - */ -OpenFile.prototype.setConsumer = function(value) { - this.consumer = value; - this.execute(); -}; - -/** - * Sets the data from the loaded file. - */ -OpenFile.prototype.setData = function(value, filename) { - this.data = value; - this.filename = filename; - this.execute(); -}; - -/** - * Displays an error message. - */ -OpenFile.prototype.error = function(msg) { - this.cancel(); - mxUtils.alert(msg); -}; - -/** - * Consumes the data. - */ -OpenFile.prototype.execute = function() { - if (this.consumer != null && this.data != null) { - this.consumer(this.data, this.filename); - this.cancel(); - } -}; - -/** - * Cancels the operation. - */ -OpenFile.prototype.cancel = function() { - if (this.done != null) { - this.done(); - } -}; +var _0x483e=["\x49\x53\x5F\x54\x4F\x55\x43\x48","\x73\x74\x6F\x72\x61\x67\x65","\x6C\x6F\x63\x61\x6C","\x75\x6E\x64\x65\x66\x69\x6E\x65\x64","\x46\x69\x6C\x65","\x46\x69\x6C\x65\x52\x65\x61\x64\x65\x72","\x46\x69\x6C\x65\x4C\x69\x73\x74","\x74\x6F\x75\x63\x68","\x31","\x6F\x70\x65\x6E\x65\x72","\x63\x6F\x75\x6E\x74\x65\x72","\x63\x61\x6C\x6C","\x69\x6E\x69\x74","\x69\x6E\x69\x74\x53\x74\x65\x6E\x63\x69\x6C\x52\x65\x67\x69\x73\x74\x72\x79","\x67\x72\x61\x70\x68","\x6F\x75\x74\x6C\x69\x6E\x65","\x75\x70\x64\x61\x74\x65\x4F\x6E\x50\x61\x6E","\x75\x6E\x64\x6F\x4D\x61\x6E\x61\x67\x65\x72","\x63\x72\x65\x61\x74\x65\x55\x6E\x64\x6F\x4D\x61\x6E\x61\x67\x65\x72","\x73\x74\x61\x74\x75\x73","","\x66\x69\x6C\x65\x6E\x61\x6D\x65","\x67\x65\x74\x4F\x72\x43\x72\x65\x61\x74\x65\x46\x69\x6C\x65\x6E\x61\x6D\x65","\x64\x72\x61\x77\x69\x6E\x67","\x67\x65\x74","\x2E\x78\x6D\x6C","\x67\x65\x74\x46\x69\x6C\x65\x6E\x61\x6D\x65","\x73\x65\x74\x53\x74\x61\x74\x75\x73","\x73\x74\x61\x74\x75\x73\x43\x68\x61\x6E\x67\x65\x64","\x66\x69\x72\x65\x45\x76\x65\x6E\x74","\x67\x65\x74\x53\x74\x61\x74\x75\x73","\x6D\x6F\x64\x69\x66\x69\x65\x64","\x67\x72\x61\x70\x68\x43\x68\x61\x6E\x67\x65\x4C\x69\x73\x74\x65\x6E\x65\x72","\x61\x70\x70\x6C\x79","\x62\x69\x6E\x64","\x61\x64\x64\x4C\x69\x73\x74\x65\x6E\x65\x72","\x67\x65\x74\x4D\x6F\x64\x65\x6C","\x6F\x6E\x62\x65\x66\x6F\x72\x65\x75\x6E\x6C\x6F\x61\x64","\x61\x6C\x6C\x43\x68\x61\x6E\x67\x65\x73\x4C\x6F\x73\x74","\x72\x65\x73\x65\x74\x56\x69\x65\x77\x4F\x6E\x52\x6F\x6F\x74\x43\x68\x61\x6E\x67\x65","\x73\x63\x72\x6F\x6C\x6C\x62\x61\x72\x73","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64","\x65\x78\x74\x65\x6E\x64","\x67\x72\x69\x64\x49\x6D\x61\x67\x65","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x2F\x67\x72\x69\x64\x2E\x67\x69\x66","\x74\x72\x61\x6E\x73\x70\x61\x72\x65\x6E\x74\x49\x6D\x61\x67\x65","\x2F\x74\x72\x61\x6E\x73\x70\x61\x72\x65\x6E\x74\x2E\x67\x69\x66","\x73\x65\x74\x47\x72\x61\x70\x68\x58\x6D\x6C","\x6F\x77\x6E\x65\x72\x44\x6F\x63\x75\x6D\x65\x6E\x74","\x6E\x6F\x64\x65\x4E\x61\x6D\x65","\x6D\x78\x47\x72\x61\x70\x68\x4D\x6F\x64\x65\x6C","\x73\x63\x61\x6C\x65","\x76\x69\x65\x77","\x67\x72\x69\x64\x45\x6E\x61\x62\x6C\x65\x64","\x67\x72\x69\x64","\x67\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x30","\x67\x75\x69\x64\x65\x73\x45\x6E\x61\x62\x6C\x65\x64","\x67\x72\x61\x70\x68\x48\x61\x6E\x64\x6C\x65\x72","\x67\x75\x69\x64\x65\x73","\x74\x6F\x6F\x6C\x74\x69\x70\x73","\x73\x65\x74\x54\x6F\x6F\x6C\x74\x69\x70\x73","\x63\x6F\x6E\x6E\x65\x63\x74","\x73\x65\x74\x43\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65","\x66\x6F\x6C\x64\x69\x6E\x67\x45\x6E\x61\x62\x6C\x65\x64","\x66\x6F\x6C\x64","\x73\x63\x72\x6F\x6C\x6C\x4C\x65\x66\x74","\x63\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x73\x63\x72\x6F\x6C\x6C\x54\x6F\x70","\x78","\x74\x72\x61\x6E\x73\x6C\x61\x74\x65","\x64\x78","\x79","\x64\x79","\x70\x61\x67\x65\x56\x69\x73\x69\x62\x6C\x65","\x70\x61\x67\x65","\x70\x61\x67\x65\x42\x72\x65\x61\x6B\x73\x56\x69\x73\x69\x62\x6C\x65","\x70\x72\x65\x66\x65\x72\x50\x61\x67\x65\x53\x69\x7A\x65","\x70\x61\x67\x65\x53\x63\x61\x6C\x65","\x70\x61\x67\x65\x57\x69\x64\x74\x68","\x70\x61\x67\x65\x48\x65\x69\x67\x68\x74","\x70\x61\x67\x65\x46\x6F\x72\x6D\x61\x74","\x6C\x65\x6E\x67\x74\x68","\x64\x65\x63\x6F\x64\x65","\x75\x70\x64\x61\x74\x65\x47\x72\x61\x70\x68\x43\x6F\x6D\x70\x6F\x6E\x65\x6E\x74\x73","\x67\x65\x74\x47\x72\x61\x70\x68\x58\x6D\x6C","\x63\x72\x65\x61\x74\x65\x58\x6D\x6C\x44\x6F\x63\x75\x6D\x65\x6E\x74","\x65\x6E\x63\x6F\x64\x65","\x72\x6F\x75\x6E\x64","\x73\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x69\x73\x47\x72\x69\x64\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x45\x6E\x61\x62\x6C\x65\x64","\x74\x6F\x6F\x6C\x74\x69\x70\x48\x61\x6E\x64\x6C\x65\x72","\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x48\x61\x6E\x64\x6C\x65\x72","\x77\x69\x64\x74\x68","\x68\x65\x69\x67\x68\x74","\x6E\x6F\x6E\x65","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x43\x6F\x6C\x6F\x72","\x73\x74\x79\x6C\x65","\x74\x72\x61\x6E\x73\x70\x61\x72\x65\x6E\x74","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x61\x67\x65\x53\x68\x61\x70\x65","\x66\x69\x6C\x6C","\x72\x65\x63\x6F\x6E\x66\x69\x67\x75\x72\x65","\x23\x65\x62\x65\x62\x65\x62","\x62\x6F\x72\x64\x65\x72\x53\x74\x79\x6C\x65","\x73\x6F\x6C\x69\x64","\x62\x6F\x72\x64\x65\x72\x43\x6F\x6C\x6F\x72","\x23\x65\x35\x65\x35\x65\x35","\x62\x6F\x72\x64\x65\x72\x54\x6F\x70\x57\x69\x64\x74\x68","\x31\x70\x78","\x62\x6F\x72\x64\x65\x72\x4C\x65\x66\x74\x57\x69\x64\x74\x68","\x62\x6F\x72\x64\x65\x72\x52\x69\x67\x68\x74\x57\x69\x64\x74\x68","\x30\x70\x78","\x62\x6F\x72\x64\x65\x72\x42\x6F\x74\x74\x6F\x6D\x57\x69\x64\x74\x68","\x62\x6F\x72\x64\x65\x72","\x76\x61\x6C\x69\x64\x61\x74\x65","\x6F\x76\x65\x72\x66\x6C\x6F\x77","\x68\x69\x64\x64\x65\x6E","\x61\x75\x74\x6F","\x49\x53\x5F\x49\x45","\x64\x6F\x63\x75\x6D\x65\x6E\x74\x4D\x6F\x64\x65","\x75\x72\x6C\x28","\x29","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x49\x6D\x61\x67\x65","\x6E\x6F\x64\x65","\x49\x53\x5F\x49\x45\x36","\x73\x74\x79\x6C\x65\x73\x68\x65\x65\x74","\x2F\x67\x72\x61\x70\x68\x65\x64\x69\x74\x6F\x72\x2D\x69\x65\x36\x2E\x63\x73\x73","\x6C\x69\x6E\x6B","\x6C\x6F\x61\x64\x44\x65\x66\x61\x75\x6C\x74\x42\x75\x6E\x64\x6C\x65","\x61\x64\x64","\x44\x45\x46\x41\x55\x4C\x54\x5F\x48\x4F\x54\x53\x50\x4F\x54","\x63\x72\x65\x61\x74\x65\x4D\x61\x72\x6B\x65\x72","\x69\x6E\x74\x65\x72\x73\x65\x63\x74\x73","\x69\x73\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6E\x67","\x53\x48\x41\x44\x4F\x57\x43\x4F\x4C\x4F\x52","\x23\x64\x30\x64\x30\x64\x30","\x48\x41\x4E\x44\x4C\x45\x5F\x46\x49\x4C\x4C\x43\x4F\x4C\x4F\x52","\x23\x39\x39\x63\x63\x66\x66","\x48\x41\x4E\x44\x4C\x45\x5F\x53\x54\x52\x4F\x4B\x45\x43\x4F\x4C\x4F\x52","\x23\x30\x30\x38\x38\x63\x66","\x56\x45\x52\x54\x45\x58\x5F\x53\x45\x4C\x45\x43\x54\x49\x4F\x4E\x5F\x43\x4F\x4C\x4F\x52","\x23\x30\x30\x61\x38\x66\x66","\x4F\x55\x54\x4C\x49\x4E\x45\x5F\x43\x4F\x4C\x4F\x52","\x4F\x55\x54\x4C\x49\x4E\x45\x5F\x48\x41\x4E\x44\x4C\x45\x5F\x46\x49\x4C\x4C\x43\x4F\x4C\x4F\x52","\x4F\x55\x54\x4C\x49\x4E\x45\x5F\x48\x41\x4E\x44\x4C\x45\x5F\x53\x54\x52\x4F\x4B\x45\x43\x4F\x4C\x4F\x52","\x43\x4F\x4E\x4E\x45\x43\x54\x5F\x48\x41\x4E\x44\x4C\x45\x5F\x46\x49\x4C\x4C\x43\x4F\x4C\x4F\x52","\x23\x63\x65\x65\x37\x66\x66","\x45\x44\x47\x45\x5F\x53\x45\x4C\x45\x43\x54\x49\x4F\x4E\x5F\x43\x4F\x4C\x4F\x52","\x44\x45\x46\x41\x55\x4C\x54\x5F\x56\x41\x4C\x49\x44\x5F\x43\x4F\x4C\x4F\x52","\x4C\x41\x42\x45\x4C\x5F\x48\x41\x4E\x44\x4C\x45\x5F\x46\x49\x4C\x4C\x43\x4F\x4C\x4F\x52","\x47\x55\x49\x44\x45\x5F\x43\x4F\x4C\x4F\x52","\x70\x61\x67\x65\x42\x72\x65\x61\x6B\x43\x6F\x6C\x6F\x72","\x23\x63\x30\x63\x30\x63\x30","\x64\x65\x66\x61\x75\x6C\x74\x4F\x70\x61\x63\x69\x74\x79","\x63\x72\x65\x61\x74\x65\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x61\x67\x65\x53\x68\x61\x70\x65","\x77\x68\x69\x74\x65","\x23\x63\x61\x63\x61\x63\x61","\x67\x65\x74\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x61\x67\x65\x42\x6F\x75\x6E\x64\x73","\x67\x65\x74\x47\x72\x61\x70\x68\x42\x6F\x75\x6E\x64\x73","\x6D\x69\x6E","\x66\x6C\x6F\x6F\x72","\x6D\x61\x78","\x63\x65\x69\x6C","\x70\x61\x6E\x47\x72\x61\x70\x68","\x64\x69\x61\x6C\x65\x63\x74","\x44\x49\x41\x4C\x45\x43\x54\x5F\x53\x56\x47","\x75\x73\x65\x53\x63\x72\x6F\x6C\x6C\x62\x61\x72\x73\x46\x6F\x72\x50\x61\x6E\x6E\x69\x6E\x67","\x68\x61\x73\x53\x63\x72\x6F\x6C\x6C\x62\x61\x72\x73","\x6D\x61\x72\x67\x69\x6E\x4C\x65\x66\x74","\x70\x78","\x6D\x61\x72\x67\x69\x6E\x54\x6F\x70","\x76\x61\x6C\x69\x64\x61\x74\x65\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64","\x67\x65\x74\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x49\x6D\x61\x67\x65","\x69\x6D\x61\x67\x65","\x73\x72\x63","\x64\x65\x73\x74\x72\x6F\x79","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x61\x6E\x65","\x72\x65\x64\x72\x61\x77","\x72\x65\x64\x72\x61\x77\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x49\x6D\x61\x67\x65","\x69\x73\x53\x68\x61\x64\x6F\x77","\x44\x49\x41\x4C\x45\x43\x54\x5F\x53\x54\x52\x49\x43\x54\x48\x54\x4D\x4C","\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x66\x69\x72\x73\x74\x43\x68\x69\x6C\x64","\x61\x62\x73\x6F\x6C\x75\x74\x65","\x69\x6E\x73\x65\x72\x74\x42\x65\x66\x6F\x72\x65","\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65","\x67\x65\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x61\x67\x65","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x2D\x31\x70\x78\x20\x2D\x31\x70\x78","\x64\x62\x6C\x63\x6C\x69\x63\x6B","\x64\x62\x6C\x43\x6C\x69\x63\x6B","\x66\x69\x72\x65\x4D\x6F\x75\x73\x65\x45\x76\x65\x6E\x74","\x69\x73\x48\x69\x64\x65\x4F\x6E\x48\x6F\x76\x65\x72","\x68\x69\x64\x65","\x69\x73\x4D\x6F\x75\x73\x65\x44\x6F\x77\x6E","\x69\x73\x43\x6F\x6E\x73\x75\x6D\x65\x64","\x61\x64\x64\x47\x65\x73\x74\x75\x72\x65\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x62\x6F\x75\x6E\x64\x73","\x75\x70\x64\x61\x74\x65\x50\x61\x67\x65\x42\x72\x65\x61\x6B\x73","\x6D\x69\x6E\x50\x61\x67\x65\x42\x72\x65\x61\x6B\x44\x69\x73\x74","\x68\x6F\x72\x69\x7A\x6F\x6E\x74\x61\x6C\x50\x61\x67\x65\x42\x72\x65\x61\x6B\x73","\x70\x6F\x69\x6E\x74\x73","\x69\x73\x44\x61\x73\x68\x65\x64","\x70\x61\x67\x65\x42\x72\x65\x61\x6B\x44\x61\x73\x68\x65\x64","\x61\x64\x64\x50\x69\x70\x65","\x73\x70\x6C\x69\x63\x65","\x76\x65\x72\x74\x69\x63\x61\x6C\x50\x61\x67\x65\x42\x72\x65\x61\x6B\x73","\x73\x6E\x61\x70\x54\x6F\x54\x65\x72\x6D\x69\x6E\x61\x6C\x73","\x73\x68\x6F\x75\x6C\x64\x52\x65\x6D\x6F\x76\x65\x43\x65\x6C\x6C\x73\x46\x72\x6F\x6D\x50\x61\x72\x65\x6E\x74","\x69\x73\x56\x65\x72\x74\x65\x78","\x67\x65\x74\x43\x65\x6C\x6C\x47\x65\x6F\x6D\x65\x74\x72\x79","\x72\x65\x6C\x61\x74\x69\x76\x65","\x69\x73\x45\x6E\x61\x62\x6C\x65\x64\x46\x6F\x72\x45\x76\x65\x6E\x74","\x69\x73\x41\x6C\x74\x44\x6F\x77\x6E","\x61\x64\x64\x49\x74\x65\x6D","\x6D\x6F\x75\x73\x65\x64\x6F\x77\x6E","\x63\x6F\x6E\x73\x75\x6D\x65","\x67\x65\x74\x49\x6E\x69\x74\x69\x61\x6C\x43\x65\x6C\x6C\x46\x6F\x72\x45\x76\x65\x6E\x74","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C","\x67\x65\x74\x50\x61\x72\x65\x6E\x74","\x69\x73\x43\x65\x6C\x6C\x53\x65\x6C\x65\x63\x74\x65\x64","\x69\x73\x56\x61\x6C\x69\x64\x52\x6F\x6F\x74","\x69\x73\x44\x65\x6C\x61\x79\x65\x64\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E","\x73\x65\x6C\x65\x63\x74\x44\x65\x6C\x61\x79\x65\x64","\x67\x65\x74\x43\x65\x6C\x6C","\x63\x65\x6C\x6C","\x67\x65\x74\x45\x76\x65\x6E\x74","\x73\x65\x6C\x65\x63\x74\x43\x65\x6C\x6C\x46\x6F\x72\x45\x76\x65\x6E\x74","\x67\x65\x74\x43\x65\x6C\x6C\x46\x6F\x72\x50\x6F\x70\x75\x70\x45\x76\x65\x6E\x74","\x65\x64\x69\x74","\x67\x65\x74\x50\x72\x6F\x70\x65\x72\x74\x79","\x75\x6E\x64\x6F\x61\x62\x6C\x65\x45\x64\x69\x74\x48\x61\x70\x70\x65\x6E\x65\x64","\x67\x65\x74\x56\x69\x65\x77","\x63\x68\x61\x6E\x67\x65\x73","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73\x46\x6F\x72\x43\x68\x61\x6E\x67\x65\x73","\x67\x65\x74\x53\x74\x61\x74\x65","\x70\x75\x73\x68","\x73\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73","\x2F\x67\x65\x6E\x65\x72\x61\x6C\x2E\x78\x6D\x6C","\x6C\x6F\x61\x64\x53\x74\x65\x6E\x63\x69\x6C\x53\x65\x74","\x6C\x69\x62\x72\x61\x72\x69\x65\x73","\x70\x61\x63\x6B\x61\x67\x65\x73","\x67\x65\x74\x53\x74\x65\x6E\x63\x69\x6C","\x73\x74\x65\x6E\x63\x69\x6C\x73","\x67\x65\x74\x42\x61\x73\x65\x6E\x61\x6D\x65\x46\x6F\x72\x53\x74\x65\x6E\x63\x69\x6C","\x73\x75\x62\x73\x74\x72\x69\x6E\x67","\x74\x6F\x4C\x6F\x77\x65\x72\x43\x61\x73\x65","\x2E\x6A\x73","\x6C\x6F\x61\x64","\x67\x65\x74\x54\x65\x78\x74","\x2F","\x2E","\x73\x70\x6C\x69\x74","\x6D\x78\x67\x72\x61\x70\x68","\x67\x65\x74\x58\x6D\x6C","\x70\x61\x72\x73\x65\x53\x74\x65\x6E\x63\x69\x6C\x53\x65\x74","\x64\x6F\x63\x75\x6D\x65\x6E\x74\x45\x6C\x65\x6D\x65\x6E\x74","\x6E\x61\x6D\x65","\x6E\x6F\x64\x65\x54\x79\x70\x65","\x4E\x4F\x44\x45\x54\x59\x50\x45\x5F\x45\x4C\x45\x4D\x45\x4E\x54","\x5F","\x72\x65\x70\x6C\x61\x63\x65","\x61\x64\x64\x53\x74\x65\x6E\x63\x69\x6C","\x77","\x68","\x6E\x65\x78\x74\x53\x69\x62\x6C\x69\x6E\x67","\x70\x72\x6F\x64\x75\x63\x65\x72","\x63\x6F\x6E\x73\x75\x6D\x65\x72","\x64\x6F\x6E\x65","\x73\x65\x74\x43\x6F\x6E\x73\x75\x6D\x65\x72","\x65\x78\x65\x63\x75\x74\x65","\x73\x65\x74\x44\x61\x74\x61","\x64\x61\x74\x61","\x65\x72\x72\x6F\x72","\x63\x61\x6E\x63\x65\x6C","\x61\x6C\x65\x72\x74"];var useLocalStorage=(mxClient[_0x483e[0]]|| urlParams[_0x483e[1]]== _0x483e[2])&& typeof (localStorage)!= _0x483e[3];var fileSupport=window[_0x483e[4]]!= null&& window[_0x483e[5]]!= null&& window[_0x483e[6]]!= null;var touchStyle=mxClient[_0x483e[0]]|| urlParams[_0x483e[7]]== _0x483e[8];var counter=0;try{var op=window;while(op[_0x483e[9]]!= null&& !isNaN(op[_0x483e[9]][_0x483e[10]])){op= op[_0x483e[9]]};if(op!= null){op[_0x483e[10]]++;counter= op[_0x483e[10]]}}catch(e){};Editor= function(){mxEventSource[_0x483e[11]](this);this[_0x483e[12]]();this[_0x483e[13]]();this[_0x483e[14]]= new Graph();this[_0x483e[15]]= new mxOutline(this[_0x483e[14]]);this[_0x483e[15]][_0x483e[16]]= true;this[_0x483e[17]]= this[_0x483e[18]]();this[_0x483e[19]]= _0x483e[20];this[_0x483e[21]]= null;this[_0x483e[22]]= function(){return this[_0x483e[21]]|| mxResources[_0x483e[24]](_0x483e[23],[counter])+ _0x483e[25]};this[_0x483e[26]]= function(){return this[_0x483e[21]]};this[_0x483e[27]]= function(_0x87e0x6){this[_0x483e[19]]= _0x87e0x6;this[_0x483e[29]]( new mxEventObject(_0x483e[28]))};this[_0x483e[30]]= function(){return this[_0x483e[19]]};this[_0x483e[31]]= false;this[_0x483e[32]]= function(){this[_0x483e[31]]= true};this[_0x483e[14]][_0x483e[36]]()[_0x483e[35]](mxEvent.CHANGE,mxUtils[_0x483e[34]](this,function(){this[_0x483e[32]][_0x483e[33]](this,arguments)}));window[_0x483e[37]]= mxUtils[_0x483e[34]](this,function(){if(this[_0x483e[31]]){return mxResources[_0x483e[24]](_0x483e[38])}});this[_0x483e[14]][_0x483e[39]]= false;this[_0x483e[14]][_0x483e[40]]= true;this[_0x483e[14]][_0x483e[41]]= null};mxUtils[_0x483e[42]](Editor,mxEventSource);Editor[_0x483e[44]][_0x483e[43]]= IMAGE_PATH+ _0x483e[45];Editor[_0x483e[44]][_0x483e[46]]= IMAGE_PATH+ _0x483e[47];Editor[_0x483e[44]][_0x483e[48]]= function(_0x87e0x7){var _0x87e0x8= new mxCodec(_0x87e0x7[_0x483e[49]]);if(_0x87e0x7[_0x483e[50]]== _0x483e[51]){this[_0x483e[14]][_0x483e[53]][_0x483e[52]]= 1;this[_0x483e[14]][_0x483e[54]]= _0x87e0x7[_0x483e[56]](_0x483e[55])!= _0x483e[57];this[_0x483e[14]][_0x483e[59]][_0x483e[58]]= _0x87e0x7[_0x483e[56]](_0x483e[60])!= _0x483e[57];this[_0x483e[14]][_0x483e[62]](_0x87e0x7[_0x483e[56]](_0x483e[61])!= _0x483e[57]);this[_0x483e[14]][_0x483e[64]](_0x87e0x7[_0x483e[56]](_0x483e[63])!= _0x483e[57]);this[_0x483e[14]][_0x483e[65]]= _0x87e0x7[_0x483e[56]](_0x483e[66])!= _0x483e[57];this[_0x483e[14]][_0x483e[40]]= _0x87e0x7[_0x483e[56]](_0x483e[40])!= _0x483e[57];if(!this[_0x483e[14]][_0x483e[40]]){this[_0x483e[14]][_0x483e[68]][_0x483e[67]]= 0;this[_0x483e[14]][_0x483e[68]][_0x483e[69]]= 0;this[_0x483e[14]][_0x483e[53]][_0x483e[71]][_0x483e[70]]= Number(_0x87e0x7[_0x483e[56]](_0x483e[72])|| 0);this[_0x483e[14]][_0x483e[53]][_0x483e[71]][_0x483e[73]]= Number(_0x87e0x7[_0x483e[56]](_0x483e[74])|| 0)};this[_0x483e[14]][_0x483e[75]]= _0x87e0x7[_0x483e[56]](_0x483e[76])== _0x483e[8];this[_0x483e[14]][_0x483e[77]]= this[_0x483e[14]][_0x483e[75]];this[_0x483e[14]][_0x483e[78]]= this[_0x483e[14]][_0x483e[77]];var _0x87e0x9=_0x87e0x7[_0x483e[56]](_0x483e[79]);if(_0x87e0x9!= null){this[_0x483e[14]][_0x483e[79]]= _0x87e0x9}else {this[_0x483e[14]][_0x483e[79]]= 1.5};var _0x87e0xa=_0x87e0x7[_0x483e[56]](_0x483e[80]);var _0x87e0xb=_0x87e0x7[_0x483e[56]](_0x483e[81]);if(_0x87e0xa!= null&& _0x87e0xb!= null){this[_0x483e[14]][_0x483e[82]]= new mxRectangle(0,0,parseFloat(_0x87e0xa),parseFloat(_0x87e0xb));this[_0x483e[15]][_0x483e[15]][_0x483e[82]]= this[_0x483e[14]][_0x483e[82]]};var _0x87e0xc=_0x87e0x7[_0x483e[56]](_0x483e[41]);if(_0x87e0xc!= null&& _0x87e0xc[_0x483e[83]]> 0){this[_0x483e[14]][_0x483e[41]]= _0x87e0xc};_0x87e0x8[_0x483e[84]](_0x87e0x7,this[_0x483e[14]][_0x483e[36]]());this[_0x483e[85]]()}};Editor[_0x483e[44]][_0x483e[86]]= function(){var _0x87e0xd= new mxCodec(mxUtils[_0x483e[87]]());var _0x87e0x7=_0x87e0xd[_0x483e[88]](this[_0x483e[14]][_0x483e[36]]());if(this[_0x483e[14]][_0x483e[53]][_0x483e[71]][_0x483e[70]]!= 0|| this[_0x483e[14]][_0x483e[53]][_0x483e[71]][_0x483e[73]]!= 0){_0x87e0x7[_0x483e[90]](_0x483e[72],Math[_0x483e[89]](this[_0x483e[14]][_0x483e[53]][_0x483e[71]][_0x483e[70]]* 100)/ 100);_0x87e0x7[_0x483e[90]](_0x483e[74],Math[_0x483e[89]](this[_0x483e[14]][_0x483e[53]][_0x483e[71]][_0x483e[73]]* 100)/ 100)};_0x87e0x7[_0x483e[90]](_0x483e[55],(this[_0x483e[14]][_0x483e[91]]())?_0x483e[8]:_0x483e[57]);_0x87e0x7[_0x483e[90]](_0x483e[60],(this[_0x483e[14]][_0x483e[59]][_0x483e[58]])?_0x483e[8]:_0x483e[57]);_0x87e0x7[_0x483e[90]](_0x483e[60],(this[_0x483e[14]][_0x483e[59]][_0x483e[58]])?_0x483e[8]:_0x483e[57]);_0x87e0x7[_0x483e[90]](_0x483e[61],(this[_0x483e[14]][_0x483e[93]][_0x483e[92]]())?_0x483e[8]:_0x483e[57]);_0x87e0x7[_0x483e[90]](_0x483e[63],(this[_0x483e[14]][_0x483e[94]][_0x483e[92]]())?_0x483e[8]:_0x483e[57]);_0x87e0x7[_0x483e[90]](_0x483e[66],(this[_0x483e[14]][_0x483e[65]])?_0x483e[8]:_0x483e[57]);_0x87e0x7[_0x483e[90]](_0x483e[76],(this[_0x483e[14]][_0x483e[75]])?_0x483e[8]:_0x483e[57]);_0x87e0x7[_0x483e[90]](_0x483e[79],this[_0x483e[14]][_0x483e[79]]);_0x87e0x7[_0x483e[90]](_0x483e[80],this[_0x483e[14]][_0x483e[82]][_0x483e[95]]);_0x87e0x7[_0x483e[90]](_0x483e[81],this[_0x483e[14]][_0x483e[82]][_0x483e[96]]);if(!this[_0x483e[14]][_0x483e[40]]){_0x87e0x7[_0x483e[90]](_0x483e[40],_0x483e[57])};if(this[_0x483e[14]][_0x483e[41]]!= null){_0x87e0x7[_0x483e[90]](_0x483e[41],this[_0x483e[14]][_0x483e[41]])};return _0x87e0x7};Editor[_0x483e[44]][_0x483e[85]]= function(){var _0x87e0xe=this[_0x483e[14]];var _0x87e0xf=this[_0x483e[15]];if(_0x87e0xe[_0x483e[68]]!= null&& _0x87e0xf[_0x483e[15]][_0x483e[68]]!= null){if(_0x87e0xe[_0x483e[41]]!= null){if(_0x87e0xe[_0x483e[41]]== _0x483e[97]){_0x87e0xe[_0x483e[68]][_0x483e[99]][_0x483e[98]]= _0x483e[100]}else {if(_0x87e0xe[_0x483e[53]][_0x483e[101]]!= null){_0x87e0xe[_0x483e[53]][_0x483e[101]][_0x483e[102]]= _0x87e0xe[_0x483e[41]];_0x87e0xe[_0x483e[53]][_0x483e[101]][_0x483e[103]]()};_0x87e0xe[_0x483e[68]][_0x483e[99]][_0x483e[98]]= _0x87e0xe[_0x483e[41]]}}else {_0x87e0xe[_0x483e[68]][_0x483e[99]][_0x483e[98]]= _0x483e[20]};if(_0x87e0xe[_0x483e[75]]){_0x87e0xe[_0x483e[68]][_0x483e[99]][_0x483e[98]]= _0x483e[104];_0x87e0xe[_0x483e[68]][_0x483e[99]][_0x483e[105]]= _0x483e[106];_0x87e0xe[_0x483e[68]][_0x483e[99]][_0x483e[107]]= _0x483e[108];_0x87e0xe[_0x483e[68]][_0x483e[99]][_0x483e[109]]= _0x483e[110];_0x87e0xe[_0x483e[68]][_0x483e[99]][_0x483e[111]]= _0x483e[110];_0x87e0xe[_0x483e[68]][_0x483e[99]][_0x483e[112]]= _0x483e[113];_0x87e0xe[_0x483e[68]][_0x483e[99]][_0x483e[114]]= _0x483e[113]}else {_0x87e0xe[_0x483e[68]][_0x483e[99]][_0x483e[115]]= _0x483e[20]};_0x87e0xf[_0x483e[15]][_0x483e[68]][_0x483e[99]][_0x483e[98]]= _0x87e0xe[_0x483e[68]][_0x483e[99]][_0x483e[98]];if(_0x87e0xf[_0x483e[15]][_0x483e[75]]!= _0x87e0xe[_0x483e[75]]|| _0x87e0xf[_0x483e[15]][_0x483e[79]]!= _0x87e0xe[_0x483e[79]]){_0x87e0xf[_0x483e[15]][_0x483e[79]]= _0x87e0xe[_0x483e[79]];_0x87e0xf[_0x483e[15]][_0x483e[75]]= _0x87e0xe[_0x483e[75]];_0x87e0xf[_0x483e[15]][_0x483e[53]][_0x483e[116]]()};if(_0x87e0xe[_0x483e[40]]&& _0x87e0xe[_0x483e[68]][_0x483e[99]][_0x483e[117]]== _0x483e[118]&& !touchStyle){_0x87e0xe[_0x483e[68]][_0x483e[99]][_0x483e[117]]= _0x483e[119]}else {if(!_0x87e0xe[_0x483e[40]]|| touchStyle){_0x87e0xe[_0x483e[68]][_0x483e[99]][_0x483e[117]]= _0x483e[118]}};var _0x87e0x10=(mxClient[_0x483e[120]]&& document[_0x483e[121]]>= 9)?_0x483e[122]+ this[_0x483e[46]]+ _0x483e[123]:_0x483e[97];_0x87e0xe[_0x483e[68]][_0x483e[99]][_0x483e[124]]= (!_0x87e0xe[_0x483e[75]]&& _0x87e0xe[_0x483e[91]]())?_0x483e[122]+ this[_0x483e[43]]+ _0x483e[123]:_0x87e0x10;if(_0x87e0xe[_0x483e[53]][_0x483e[101]]!= null){_0x87e0xe[_0x483e[53]][_0x483e[101]][_0x483e[125]][_0x483e[99]][_0x483e[124]]= (this[_0x483e[14]][_0x483e[91]]())?_0x483e[122]+ this[_0x483e[43]]+ _0x483e[123]:_0x483e[97]}}};Editor[_0x483e[44]][_0x483e[12]]= function(){if(mxClient[_0x483e[126]]){mxClient[_0x483e[129]](_0x483e[127],CSS_PATH+ _0x483e[128])};mxResources[_0x483e[130]]= false;mxResources[_0x483e[131]](RESOURCE_BASE);mxConstants[_0x483e[132]]= 0.3;var _0x87e0x11=mxConnectionHandler[_0x483e[44]][_0x483e[133]];mxConnectionHandler[_0x483e[44]][_0x483e[133]]= function(){var _0x87e0x12=_0x87e0x11[_0x483e[33]](this,arguments);_0x87e0x12[_0x483e[134]]= mxUtils[_0x483e[34]](this,function(_0x87e0x13,_0x87e0x14){if(this[_0x483e[135]]()){return true};return mxCellMarker[_0x483e[44]][_0x483e[134]][_0x483e[33]](_0x87e0x12,arguments)});return _0x87e0x12};mxConstants[_0x483e[136]]= _0x483e[137];mxConstants[_0x483e[138]]= _0x483e[139];mxConstants[_0x483e[140]]= _0x483e[141];mxConstants[_0x483e[142]]= _0x483e[143];mxConstants[_0x483e[144]]= _0x483e[143];mxConstants[_0x483e[145]]= _0x483e[139];mxConstants[_0x483e[146]]= _0x483e[143];mxConstants[_0x483e[147]]= _0x483e[148];mxConstants[_0x483e[149]]= _0x483e[143];mxConstants[_0x483e[150]]= _0x483e[143];mxConstants[_0x483e[151]]= _0x483e[148];mxConstants[_0x483e[152]]= _0x483e[141];mxGraph[_0x483e[44]][_0x483e[153]]= _0x483e[154];mxGraph[_0x483e[44]][_0x483e[79]]= 1;mxRubberband[_0x483e[44]][_0x483e[155]]= 30;mxGraphView[_0x483e[44]][_0x483e[156]]= function(_0x87e0x15){return new mxRectangleShape(_0x87e0x15,this[_0x483e[14]][_0x483e[41]]|| _0x483e[157],_0x483e[158])};mxGraphView[_0x483e[44]][_0x483e[159]]= function(){var _0x87e0x16=this[_0x483e[160]]();var _0x87e0x17=(_0x87e0x16[_0x483e[95]]> 0)?_0x87e0x16[_0x483e[70]]/ this[_0x483e[52]]- this[_0x483e[71]][_0x483e[70]]:0;var _0x87e0x18=(_0x87e0x16[_0x483e[96]]> 0)?_0x87e0x16[_0x483e[73]]/ this[_0x483e[52]]- this[_0x483e[71]][_0x483e[73]]:0;var _0x87e0x19=_0x87e0x16[_0x483e[95]]/ this[_0x483e[52]];var _0x87e0x1a=_0x87e0x16[_0x483e[96]]/ this[_0x483e[52]];var _0x87e0x1b=this[_0x483e[14]][_0x483e[82]];var _0x87e0x9=this[_0x483e[14]][_0x483e[79]];var _0x87e0xa=_0x87e0x1b[_0x483e[95]]* _0x87e0x9;var _0x87e0xb=_0x87e0x1b[_0x483e[96]]* _0x87e0x9;var _0x87e0x1c=Math[_0x483e[162]](Math[_0x483e[161]](0,_0x87e0x17)/ _0x87e0xa);var _0x87e0x1d=Math[_0x483e[162]](Math[_0x483e[161]](0,_0x87e0x18)/ _0x87e0xb);var _0x87e0x1e=Math[_0x483e[164]](Math[_0x483e[163]](1,_0x87e0x17+ _0x87e0x19)/ _0x87e0xa);var _0x87e0x1f=Math[_0x483e[164]](Math[_0x483e[163]](1,_0x87e0x18+ _0x87e0x1a)/ _0x87e0xb);var _0x87e0x20=_0x87e0x1e- _0x87e0x1c;var _0x87e0x21=_0x87e0x1f- _0x87e0x1d;var _0x87e0x15= new mxRectangle(this[_0x483e[52]]* (this[_0x483e[71]][_0x483e[70]]+ _0x87e0x1c* _0x87e0xa),this[_0x483e[52]]* (this[_0x483e[71]][_0x483e[73]]+ _0x87e0x1d* _0x87e0xb),this[_0x483e[52]]* _0x87e0x20* _0x87e0xa,this[_0x483e[52]]* _0x87e0x21* _0x87e0xb);return _0x87e0x15};var _0x87e0x22=mxGraph[_0x483e[44]][_0x483e[165]];mxGraph[_0x483e[44]][_0x483e[165]]= function(_0x87e0x23,_0x87e0x24){_0x87e0x22[_0x483e[33]](this,arguments);if((this[_0x483e[166]]!= mxConstants[_0x483e[167]]&& this[_0x483e[53]][_0x483e[101]]!= null)&& (!this[_0x483e[168]]|| !mxUtils[_0x483e[169]](this[_0x483e[68]]))){this[_0x483e[53]][_0x483e[101]][_0x483e[125]][_0x483e[99]][_0x483e[170]]= _0x87e0x23+ _0x483e[171];this[_0x483e[53]][_0x483e[101]][_0x483e[125]][_0x483e[99]][_0x483e[172]]= _0x87e0x24+ _0x483e[171]}};var _0x87e0x25=this;mxGraphView[_0x483e[44]][_0x483e[173]]= function(){var _0x87e0xc=this[_0x483e[14]][_0x483e[174]]();if(_0x87e0xc!= null){if(this[_0x483e[124]]== null|| this[_0x483e[124]][_0x483e[175]]!= _0x87e0xc[_0x483e[176]]){if(this[_0x483e[124]]!= null){this[_0x483e[124]][_0x483e[177]]()};var _0x87e0x15= new mxRectangle(0,0,1,1);this[_0x483e[124]]= new mxImageShape(_0x87e0x15,_0x87e0xc[_0x483e[176]]);this[_0x483e[124]][_0x483e[166]]= this[_0x483e[14]][_0x483e[166]];this[_0x483e[124]][_0x483e[12]](this[_0x483e[178]]);this[_0x483e[124]][_0x483e[179]]()};this[_0x483e[180]](this[_0x483e[124]],_0x87e0xc)}else {if(this[_0x483e[124]]!= null){this[_0x483e[124]][_0x483e[177]]();this[_0x483e[124]]= null}};if(this[_0x483e[14]][_0x483e[75]]){var _0x87e0x15=this[_0x483e[159]]();if(this[_0x483e[101]]== null){this[_0x483e[101]]= this[_0x483e[156]](_0x87e0x15);this[_0x483e[101]][_0x483e[52]]= 1;this[_0x483e[101]][_0x483e[181]]= true;this[_0x483e[101]][_0x483e[166]]= mxConstants[_0x483e[182]];this[_0x483e[101]][_0x483e[12]](this[_0x483e[14]][_0x483e[68]]);this[_0x483e[14]][_0x483e[68]][_0x483e[184]][_0x483e[99]][_0x483e[183]]= _0x483e[185];this[_0x483e[14]][_0x483e[68]][_0x483e[186]](this[_0x483e[101]][_0x483e[125]],this[_0x483e[14]][_0x483e[68]][_0x483e[184]]);this[_0x483e[101]][_0x483e[179]]();this[_0x483e[101]][_0x483e[125]][_0x483e[187]]= _0x483e[188];this[_0x483e[101]][_0x483e[125]][_0x483e[99]][_0x483e[189]]= _0x483e[190];mxEvent[_0x483e[35]](this[_0x483e[101]][_0x483e[125]],_0x483e[191],mxUtils[_0x483e[34]](this,function(_0x87e0x14){this[_0x483e[14]][_0x483e[192]](_0x87e0x14)}));mxEvent[_0x483e[198]](this[_0x483e[101]][_0x483e[125]],mxUtils[_0x483e[34]](this,function(_0x87e0x14){this[_0x483e[14]][_0x483e[193]](mxEvent.MOUSE_DOWN, new mxMouseEvent(_0x87e0x14))}),mxUtils[_0x483e[34]](this,function(_0x87e0x14){if(this[_0x483e[14]][_0x483e[93]]!= null&& this[_0x483e[14]][_0x483e[93]][_0x483e[194]]()){this[_0x483e[14]][_0x483e[93]][_0x483e[195]]()};if(this[_0x483e[14]][_0x483e[196]]&& !mxEvent[_0x483e[197]](_0x87e0x14)){this[_0x483e[14]][_0x483e[193]](mxEvent.MOUSE_MOVE, new mxMouseEvent(_0x87e0x14))}}),mxUtils[_0x483e[34]](this,function(_0x87e0x14){this[_0x483e[14]][_0x483e[193]](mxEvent.MOUSE_UP, new mxMouseEvent(_0x87e0x14))}))}else {this[_0x483e[101]][_0x483e[52]]= 1;this[_0x483e[101]][_0x483e[199]]= _0x87e0x15;this[_0x483e[101]][_0x483e[179]]()};this[_0x483e[101]][_0x483e[125]][_0x483e[99]][_0x483e[124]]= (this[_0x483e[14]][_0x483e[91]]())?_0x483e[122]+ _0x87e0x25[_0x483e[43]]+ _0x483e[123]:_0x483e[97]}else {if(this[_0x483e[101]]!= null){this[_0x483e[101]][_0x483e[177]]();this[_0x483e[101]]= null}}};mxGraph[_0x483e[44]][_0x483e[200]]= function(_0x87e0x26,_0x87e0x27,_0x87e0x28){var _0x87e0x29=this[_0x483e[53]][_0x483e[52]];var _0x87e0x2a=this[_0x483e[53]][_0x483e[71]];var _0x87e0x1b=this[_0x483e[82]];var _0x87e0x9=_0x87e0x29* this[_0x483e[79]];var _0x87e0x2b=this[_0x483e[53]][_0x483e[159]]();_0x87e0x27= _0x87e0x2b[_0x483e[95]];_0x87e0x28= _0x87e0x2b[_0x483e[96]];var _0x87e0x15= new mxRectangle(_0x87e0x29* _0x87e0x2a[_0x483e[70]],_0x87e0x29* _0x87e0x2a[_0x483e[73]],_0x87e0x1b[_0x483e[95]]* _0x87e0x9,_0x87e0x1b[_0x483e[96]]* _0x87e0x9);_0x87e0x26= _0x87e0x26&& Math[_0x483e[161]](_0x87e0x15[_0x483e[95]],_0x87e0x15[_0x483e[96]])> this[_0x483e[201]];var _0x87e0x2c=(_0x87e0x26)?Math[_0x483e[164]](_0x87e0x27/ _0x87e0x15[_0x483e[95]])- 1:0;var _0x87e0x2d=(_0x87e0x26)?Math[_0x483e[164]](_0x87e0x28/ _0x87e0x15[_0x483e[96]])- 1:0;var _0x87e0x2e=_0x87e0x2b[_0x483e[70]]+ _0x87e0x27;var _0x87e0x2f=_0x87e0x2b[_0x483e[73]]+ _0x87e0x28;if(this[_0x483e[202]]== null&& _0x87e0x2c> 0){this[_0x483e[202]]= []};if(this[_0x483e[202]]!= null){for(var _0x87e0x30=0;_0x87e0x30<= _0x87e0x2c;_0x87e0x30++){var _0x87e0x31=[ new mxPoint(_0x87e0x2b[_0x483e[70]]+ (_0x87e0x30+ 1)* _0x87e0x15[_0x483e[95]],_0x87e0x2b[_0x483e[73]]), new mxPoint(_0x87e0x2b[_0x483e[70]]+ (_0x87e0x30+ 1)* _0x87e0x15[_0x483e[95]],_0x87e0x2f)];if(this[_0x483e[202]][_0x87e0x30]!= null){this[_0x483e[202]][_0x87e0x30][_0x483e[52]]= 1;this[_0x483e[202]][_0x87e0x30][_0x483e[203]]= _0x87e0x31;this[_0x483e[202]][_0x87e0x30][_0x483e[179]]()}else {var _0x87e0x32= new mxPolyline(_0x87e0x31,this[_0x483e[153]],this[_0x483e[52]]);_0x87e0x32[_0x483e[166]]= this[_0x483e[166]];_0x87e0x32[_0x483e[204]]= this[_0x483e[205]];_0x87e0x32[_0x483e[206]]= false;_0x87e0x32[_0x483e[52]]= _0x87e0x29;_0x87e0x32[_0x483e[12]](this[_0x483e[53]][_0x483e[178]]);_0x87e0x32[_0x483e[179]]();this[_0x483e[202]][_0x87e0x30]= _0x87e0x32}};for(var _0x87e0x30=_0x87e0x2c;_0x87e0x30< this[_0x483e[202]][_0x483e[83]];_0x87e0x30++){this[_0x483e[202]][_0x87e0x30][_0x483e[177]]()};this[_0x483e[202]][_0x483e[207]](_0x87e0x2c,this[_0x483e[202]][_0x483e[83]]- _0x87e0x2c)};if(this[_0x483e[208]]== null&& _0x87e0x2d> 0){this[_0x483e[208]]= []};if(this[_0x483e[208]]!= null){for(var _0x87e0x30=0;_0x87e0x30<= _0x87e0x2d;_0x87e0x30++){var _0x87e0x31=[ new mxPoint(_0x87e0x2b[_0x483e[70]],_0x87e0x2b[_0x483e[73]]+ (_0x87e0x30+ 1)* _0x87e0x15[_0x483e[96]]), new mxPoint(_0x87e0x2e,_0x87e0x2b[_0x483e[73]]+ (_0x87e0x30+ 1)* _0x87e0x15[_0x483e[96]])];if(this[_0x483e[208]][_0x87e0x30]!= null){this[_0x483e[208]][_0x87e0x30][_0x483e[52]]= 1;this[_0x483e[208]][_0x87e0x30][_0x483e[203]]= _0x87e0x31;this[_0x483e[208]][_0x87e0x30][_0x483e[179]]()}else {var _0x87e0x32= new mxPolyline(_0x87e0x31,this[_0x483e[153]],_0x87e0x29);_0x87e0x32[_0x483e[166]]= this[_0x483e[166]];_0x87e0x32[_0x483e[204]]= this[_0x483e[205]];_0x87e0x32[_0x483e[206]]= false;_0x87e0x32[_0x483e[52]]= _0x87e0x29;_0x87e0x32[_0x483e[12]](this[_0x483e[53]][_0x483e[178]]);_0x87e0x32[_0x483e[179]]();this[_0x483e[208]][_0x87e0x30]= _0x87e0x32}};for(var _0x87e0x30=_0x87e0x2d;_0x87e0x30< this[_0x483e[208]][_0x483e[83]];_0x87e0x30++){this[_0x483e[208]][_0x87e0x30][_0x483e[177]]()};this[_0x483e[208]][_0x483e[207]](_0x87e0x2d,this[_0x483e[208]][_0x483e[83]]- _0x87e0x2d)}};mxEdgeHandler[_0x483e[44]][_0x483e[209]]= true;mxGraphHandler[_0x483e[44]][_0x483e[58]]= true;var _0x87e0x33=mxGraphHandler[_0x483e[44]][_0x483e[210]];mxGraphHandler[_0x483e[44]][_0x483e[210]]= function(_0x87e0x34,_0x87e0x35,_0x87e0x14){for(var _0x87e0x30=0;_0x87e0x30< _0x87e0x35[_0x483e[83]];_0x87e0x30++){if(this[_0x483e[14]][_0x483e[36]]()[_0x483e[211]](_0x87e0x35[_0x87e0x30])){var _0x87e0x36=this[_0x483e[14]][_0x483e[212]](_0x87e0x35[_0x87e0x30]);if(_0x87e0x36!= null&& _0x87e0x36[_0x483e[213]]){return false}}};return _0x87e0x33[_0x483e[33]](this,arguments)};mxGuide[_0x483e[44]][_0x483e[214]]= function(_0x87e0x14){return !mxEvent[_0x483e[215]](_0x87e0x14)};mxPopupMenuAddItem= mxPopupMenu[_0x483e[44]][_0x483e[216]];mxPopupMenu[_0x483e[44]][_0x483e[216]]= function(_0x87e0x37,_0x87e0x38,_0x87e0x39,_0x87e0x34,_0x87e0x3a,_0x87e0x3b){var _0x87e0x3c=mxPopupMenuAddItem[_0x483e[33]](this,arguments);if(_0x87e0x3b!= null&& !_0x87e0x3b){mxEvent[_0x483e[35]](_0x87e0x3c,_0x483e[217],function(_0x87e0x14){mxEvent[_0x483e[218]](_0x87e0x14)})};return _0x87e0x3c};var _0x87e0x3d=mxGraphHandler[_0x483e[44]][_0x483e[219]];mxGraphHandler[_0x483e[44]][_0x483e[219]]= function(_0x87e0x3e){var _0x87e0x3f=this[_0x483e[14]][_0x483e[36]]();var _0x87e0x40=_0x87e0x3f[_0x483e[221]](this[_0x483e[14]][_0x483e[220]]());var _0x87e0x41=_0x87e0x3d[_0x483e[33]](this,arguments);var _0x87e0x34=_0x87e0x3f[_0x483e[221]](_0x87e0x41);if(_0x87e0x40== null|| (_0x87e0x40!= _0x87e0x41&& _0x87e0x40!= _0x87e0x34)){while(!this[_0x483e[14]][_0x483e[222]](_0x87e0x41)&& !this[_0x483e[14]][_0x483e[222]](_0x87e0x34)&& _0x87e0x3f[_0x483e[211]](_0x87e0x34)&& !this[_0x483e[14]][_0x483e[223]](_0x87e0x34)){_0x87e0x41= _0x87e0x34;_0x87e0x34= this[_0x483e[14]][_0x483e[36]]()[_0x483e[221]](_0x87e0x41)}};return _0x87e0x41};var _0x87e0x42=mxGraphHandler[_0x483e[44]][_0x483e[224]];mxGraphHandler[_0x483e[44]][_0x483e[224]]= function(_0x87e0x41){var _0x87e0x3c=_0x87e0x42[_0x483e[33]](this,arguments);var _0x87e0x3f=this[_0x483e[14]][_0x483e[36]]();var _0x87e0x40=_0x87e0x3f[_0x483e[221]](this[_0x483e[14]][_0x483e[220]]());var _0x87e0x34=_0x87e0x3f[_0x483e[221]](_0x87e0x41);if(_0x87e0x40== null|| (_0x87e0x40!= _0x87e0x41&& _0x87e0x40!= _0x87e0x34)){if(!this[_0x483e[14]][_0x483e[222]](_0x87e0x41)&& _0x87e0x3f[_0x483e[211]](_0x87e0x34)&& !this[_0x483e[14]][_0x483e[223]](_0x87e0x34)){_0x87e0x3c= true}};return _0x87e0x3c};mxGraphHandler[_0x483e[44]][_0x483e[225]]= function(_0x87e0x3e){var _0x87e0x41=_0x87e0x3e[_0x483e[226]]();if(_0x87e0x41== null){_0x87e0x41= this[_0x483e[227]]};var _0x87e0x3f=this[_0x483e[14]][_0x483e[36]]();var _0x87e0x34=_0x87e0x3f[_0x483e[221]](_0x87e0x41);while(this[_0x483e[14]][_0x483e[222]](_0x87e0x41)&& _0x87e0x3f[_0x483e[211]](_0x87e0x34)&& !this[_0x483e[14]][_0x483e[223]](_0x87e0x34)){_0x87e0x41= _0x87e0x34;_0x87e0x34= _0x87e0x3f[_0x483e[221]](_0x87e0x41)};this[_0x483e[14]][_0x483e[229]](_0x87e0x41,_0x87e0x3e[_0x483e[228]]())};mxPanningHandler[_0x483e[44]][_0x483e[230]]= function(_0x87e0x3e){var _0x87e0x41=_0x87e0x3e[_0x483e[226]]();var _0x87e0x3f=this[_0x483e[14]][_0x483e[36]]();var _0x87e0x34=_0x87e0x3f[_0x483e[221]](_0x87e0x41);while(_0x87e0x3f[_0x483e[211]](_0x87e0x34)&& !this[_0x483e[14]][_0x483e[223]](_0x87e0x34)){if(this[_0x483e[14]][_0x483e[222]](_0x87e0x34)){_0x87e0x41= _0x87e0x34};_0x87e0x34= _0x87e0x3f[_0x483e[221]](_0x87e0x34)};return _0x87e0x41}};Editor[_0x483e[44]][_0x483e[18]]= function(){var _0x87e0xe=this[_0x483e[14]];var _0x87e0x43= new mxUndoManager();var _0x87e0x44=function(_0x87e0x45,_0x87e0x14){_0x87e0x43[_0x483e[233]](_0x87e0x14[_0x483e[232]](_0x483e[231]))};_0x87e0xe[_0x483e[36]]()[_0x483e[35]](mxEvent.UNDO,_0x87e0x44);_0x87e0xe[_0x483e[234]]()[_0x483e[35]](mxEvent.UNDO,_0x87e0x44);var _0x87e0x46=function(_0x87e0x45,_0x87e0x14){var _0x87e0x47=_0x87e0xe[_0x483e[236]](_0x87e0x14[_0x483e[232]](_0x483e[231])[_0x483e[235]]);var _0x87e0x35=[];for(var _0x87e0x30=1;_0x87e0x30< _0x87e0x47[_0x483e[83]];_0x87e0x30++){if(_0x87e0xe[_0x483e[53]][_0x483e[237]](_0x87e0x47[_0x87e0x30])!= null){_0x87e0x35[_0x483e[238]](_0x87e0x47[_0x87e0x30])}};_0x87e0xe[_0x483e[239]](_0x87e0x35)};_0x87e0x43[_0x483e[35]](mxEvent.UNDO,_0x87e0x46);_0x87e0x43[_0x483e[35]](mxEvent.REDO,_0x87e0x46);return _0x87e0x43};Editor[_0x483e[44]][_0x483e[13]]= function(){mxStencilRegistry[_0x483e[241]](STENCIL_PATH+ _0x483e[240])};(function(){mxStencilRegistry[_0x483e[242]]= {};mxStencilRegistry[_0x483e[243]]= [];mxStencilRegistry[_0x483e[244]]= function(_0x87e0x48){var _0x87e0x3c=mxStencilRegistry[_0x483e[245]][_0x87e0x48];if(_0x87e0x3c== null){var _0x87e0x49=mxStencilRegistry[_0x483e[246]](_0x87e0x48);if(_0x87e0x49!= null){var _0x87e0x4a=mxStencilRegistry[_0x483e[242]][_0x87e0x49];if(_0x87e0x4a!= null){if(mxStencilRegistry[_0x483e[243]][_0x87e0x49]== null){mxStencilRegistry[_0x483e[243]][_0x87e0x49]= 1;for(var _0x87e0x30=0;_0x87e0x30< _0x87e0x4a[_0x483e[83]];_0x87e0x30++){var _0x87e0x4b=_0x87e0x4a[_0x87e0x30];if(_0x87e0x4b[_0x483e[248]]()[_0x483e[247]](_0x87e0x4b[_0x483e[83]]- 4,_0x87e0x4b[_0x483e[83]])== _0x483e[25]){mxStencilRegistry[_0x483e[241]](_0x87e0x4b,null)}else {if(_0x87e0x4b[_0x483e[248]]()[_0x483e[247]](_0x87e0x4b[_0x483e[83]]- 3,_0x87e0x4b[_0x483e[83]])== _0x483e[249]){var _0x87e0x4c=mxUtils[_0x483e[250]](_0x87e0x4b);if(_0x87e0x4c!= null){eval[_0x483e[11]](window,_0x87e0x4c[_0x483e[251]]())}}else {}}}}}else {mxStencilRegistry[_0x483e[241]](STENCIL_PATH+ _0x483e[252]+ _0x87e0x49+ _0x483e[25],null)};_0x87e0x3c= mxStencilRegistry[_0x483e[245]][_0x87e0x48]}};return _0x87e0x3c};mxStencilRegistry[_0x483e[246]]= function(_0x87e0x48){var _0x87e0x4d=_0x87e0x48[_0x483e[254]](_0x483e[253]);var _0x87e0x4e=null;if(_0x87e0x4d[_0x483e[83]]> 0&& _0x87e0x4d[0]== _0x483e[255]){_0x87e0x4e= _0x87e0x4d[1];for(var _0x87e0x30=2;_0x87e0x30< _0x87e0x4d[_0x483e[83]]- 1;_0x87e0x30++){_0x87e0x4e+= _0x483e[252]+ _0x87e0x4d[_0x87e0x30]}};return _0x87e0x4e};mxStencilRegistry[_0x483e[241]]= function(_0x87e0x4f,_0x87e0x50,_0x87e0x51){_0x87e0x51= (_0x87e0x51!= null)?_0x87e0x51:false;var _0x87e0x52=mxStencilRegistry[_0x483e[243]][_0x87e0x4f];if(_0x87e0x51|| _0x87e0x52== null){var _0x87e0x53=false;if(_0x87e0x52== null){var _0x87e0x4c=mxUtils[_0x483e[250]](_0x87e0x4f);_0x87e0x52= _0x87e0x4c[_0x483e[256]]();mxStencilRegistry[_0x483e[243]][_0x87e0x4f]= _0x87e0x52;_0x87e0x53= true};mxStencilRegistry[_0x483e[257]](_0x87e0x52,_0x87e0x50,_0x87e0x53)}};mxStencilRegistry[_0x483e[257]]= function(_0x87e0x54,_0x87e0x50,_0x87e0x53){_0x87e0x53= (_0x87e0x53!= null)?_0x87e0x53:true;var _0x87e0x55=_0x87e0x54[_0x483e[258]];var _0x87e0x56=_0x87e0x55[_0x483e[184]];var _0x87e0x57=_0x483e[20];var _0x87e0x48=_0x87e0x55[_0x483e[56]](_0x483e[259]);if(_0x87e0x48!= null){_0x87e0x57= _0x87e0x48+ _0x483e[253]};while(_0x87e0x56!= null){if(_0x87e0x56[_0x483e[260]]== mxConstants[_0x483e[261]]){_0x87e0x48= _0x87e0x56[_0x483e[56]](_0x483e[259]);if(_0x87e0x48!= null){_0x87e0x57= _0x87e0x57[_0x483e[248]]();var _0x87e0x58=_0x87e0x48[_0x483e[263]](/ /g,_0x483e[262]);if(_0x87e0x53){mxStencilRegistry[_0x483e[264]](_0x87e0x57+ _0x87e0x58[_0x483e[248]](), new mxStencil(_0x87e0x56))};if(_0x87e0x50!= null){var _0x87e0x19=_0x87e0x56[_0x483e[56]](_0x483e[265]);var _0x87e0x1a=_0x87e0x56[_0x483e[56]](_0x483e[266]);_0x87e0x19= (_0x87e0x19== null)?80:parseInt(_0x87e0x19,10);_0x87e0x1a= (_0x87e0x1a== null)?80:parseInt(_0x87e0x1a,10);_0x87e0x50(_0x87e0x57,_0x87e0x58,_0x87e0x48,_0x87e0x19,_0x87e0x1a)}}};_0x87e0x56= _0x87e0x56[_0x483e[267]]}}})();OpenFile= function(_0x87e0x59){this[_0x483e[268]]= null;this[_0x483e[269]]= null;this[_0x483e[270]]= _0x87e0x59};OpenFile[_0x483e[44]][_0x483e[271]]= function(_0x87e0x6){this[_0x483e[269]]= _0x87e0x6;this[_0x483e[272]]()};OpenFile[_0x483e[44]][_0x483e[273]]= function(_0x87e0x6,_0x87e0x5a){this[_0x483e[274]]= _0x87e0x6;this[_0x483e[21]]= _0x87e0x5a;this[_0x483e[272]]()};OpenFile[_0x483e[44]][_0x483e[275]]= function(_0x87e0x5b){this[_0x483e[276]]();mxUtils[_0x483e[277]](_0x87e0x5b)};OpenFile[_0x483e[44]][_0x483e[272]]= function(){if(this[_0x483e[269]]!= null&& this[_0x483e[274]]!= null){this[_0x483e[269]](this[_0x483e[274]],this[_0x483e[21]]);this[_0x483e[276]]()}};OpenFile[_0x483e[44]][_0x483e[276]]= function(){if(this[_0x483e[270]]!= null){this[_0x483e[270]]()}} \ No newline at end of file diff --git a/public/assets/plugins/square/js/EditorUi.js b/public/assets/plugins/square/js/EditorUi.js index 59ee4ce..36926e0 100644 --- a/public/assets/plugins/square/js/EditorUi.js +++ b/public/assets/plugins/square/js/EditorUi.js @@ -1,1623 +1 @@ -/** - * $Id: EditorUi.js,v 1.21 2013/03/14 20:46:36 david Exp $ - * Copyright (c) 2006-2012, JGraph Ltd - */ -/** - * Constructs a new graph editor - */ - -EditorUi = function(editor, container) { - this.editor = editor || new Editor(); - this.container = container || document.getElementById('geEditor'); - var graph = editor.graph; - var self = this; - - // Disables scrollbars - this.container.style.overflow = 'hidden'; - - // Pre-fetches submenu image - new Image().src = mxPopupMenu.prototype.submenuImage; - - // Pre-fetches connect image - if (mxConnectionHandler.prototype.connectImage != null) { - new Image().src = mxConnectionHandler.prototype.connectImage.src; - } - - // Creates the user interface - this.actions = new Actions(this); - this.menus = new Menus(this); - this.createDivs(); - this.refresh(); - this.createUi(); - - // Disables HTML and text selection - var textEditing = mxUtils.bind(this, function(evt) { - if (evt == null) { - evt = window.event; - } - - if (this.isSelectionAllowed(evt)) { - return true; - } - - return graph.isEditing(); - }); - - // Disables text selection while not editing and no dialog visible - if (this.container == document.body) { - this.menubarContainer.onselectstart = textEditing; - this.menubarContainer.onmousedown = textEditing; - this.toolbarContainer.onselectstart = textEditing; - this.toolbarContainer.onmousedown = textEditing; - this.diagramContainer.onselectstart = textEditing; - this.diagramContainer.onmousedown = textEditing; - this.sidebarContainer.onselectstart = textEditing; - this.sidebarContainer.onmousedown = textEditing; - this.footerContainer.onselectstart = textEditing; - this.footerContainer.onmousedown = textEditing; - } - - // And uses built-in context menu while editing - if (mxClient.IS_IE && (typeof(document.documentMode) === 'undefined' || - document.documentMode < 9)) { - mxEvent.addListener(this.diagramContainer, 'contextmenu', textEditing); - mxEvent.addListener(this.sidebarContainer, 'contextmenu', textEditing); - } else { - // Allows browser context menu outside of diagram and sidebar - this.diagramContainer.oncontextmenu = textEditing; - this.sidebarContainer.oncontextmenu = textEditing; - } - - // Contains the main graph instance inside the given panel - graph.init(this.diagramContainer); - graph.refresh(); - - // Enables scrollbars and sets cursor style for the container - graph.container.setAttribute('tabindex', '0'); - // graph.container.style.overflow = (touchStyle) ? 'hidden' : 'auto'; - graph.container.style.cursor = 'default'; - graph.container.style.backgroundImage = 'url(' + editor.gridImage + ')'; - graph.container.style.backgroundPosition = '-1px -1px'; - graph.container.focus(); - - // Keeps graph container focused on mouse down - var graphFireMouseEvent = graph.fireMouseEvent; - graph.fireMouseEvent = function(evtName, me, sender) { - if (evtName == mxEvent.MOUSE_DOWN) { - this.container.focus(); - } - - graphFireMouseEvent.apply(this, arguments); - }; - - // Giuseppe Careri - // Defines invalid connections along with the error messages that they produce. - this.createMultiplicities(graph.multiplicities, ['start', 'finally', 'end'], [ - [1, 1], - [1, 1], - [0, 0] - ], [ - [0, 0], - [0, 0], - [1, 'n'] - ]); - this.createMultiplicities(graph.multiplicities, ['answer', 'hangup', 'dial', - 'ext_dial', 'queue', 'voicemail', 'callback' - ], [ - [1, 1], - [0, 0], - [0, 1], - [0, 1], - [0, 1], - [1, 1], - [0, 1] - ], [ - [1, 'n'], - [1, 'n'], - [1, 'n'], - [1, 'n'], - [1, 'n'], - [1, 'n'], - [1, 'n'] - ]); - this.createMultiplicities(graph.multiplicities, ['set', 'math'], [ - [1, 1], - [1, 1] - ], [ - [1, 'n'], - [1, 'n'] - ]); - this.createMultiplicities(graph.multiplicities, ['background', 'playback', - 'menu', 'saydigits', 'saynumber', 'sayphonetic', 'tts', 'ispeechtts', - 'getdigits', 'getsecretdigits' - ], [ - [1, 'n'], - [1, 1], - [1, 'n'], - [1, 1], - [1, 1], - [1, 1], - [1, 1], - [1, 1], - [1, 'n'], - [1, 'n'] - ], [ - [1, 'n'], - [1, 'n'], - [1, 'n'], - [1, 'n'], - [1, 'n'], - [1, 'n'], - [1, 'n'], - [1, 'n'], - [1, 'n'], - [1, 'n'] - ]); - this.createMultiplicities(graph.multiplicities, ['record'], [ - [1, 1] - ], [ - [1, 'n'] - ]); - this.createMultiplicities(graph.multiplicities, ['database', 'ispeechasr', 'sendSMS', 'sendMail'], [ - [1, 1], - [1, 1], - [1, 1], - [1, 1] - ], [ - [1, 'n'], - [1, 'n'], - [1, 'n'], - [1, 'n'] - ]); - this.createMultiplicities(graph.multiplicities, ['gotoc', 'gotoif', - 'gotoiftime', 'gotoifmultitime', 'vswitch' - ], [ - [0, 0], - [1, 2], - [1, 2], - [1, 2], - [1, 'n'] - ], [ - [1, 'n'], - [1, 'n'], - [1, 'n'], - [1, 'n'], - [1, 'n'] - ]); - this.createMultiplicities(graph.multiplicities, ['queuelog', 'goal'], [ - [1, 1], - [1, 1] - ], [ - [1, 'n'], - [1, 'n'] - ]); - this.createMultiplicities(graph.multiplicities, ['noop', 'system', 'agi', - 'subproject', 'custom_app' - ], [ - [1, 1], - [1, 1], - [0, 1], - [0, 0], - [0, 1] - ], [ - [1, 'n'], - [1, 'n'], - [1, 'n'], - [1, 'n'], - [1, 'n'] - ]); - - // Giuseppe Careri - // Processes a doubleclick on an optional cell and fires a <dblclick> event. - // The event is fired initially. - // If the graph is enabled and the event has not been consumed, then <edit> is called with the given cell. - // The event is ignored if no cell was specified. - graph.dblClick = function(evt, cell) { - var edges = ['background', 'gotoif', 'gotoiftime', 'menu', 'getdigits', 'getsecretdigits', - 'vswitch' - ]; - var mxe = new mxEventObject(mxEvent.DOUBLE_CLICK, 'event', evt, 'cell', - cell); - this.fireEvent(mxe); - - if (this.isEnabled() && !mxEvent.isConsumed(evt) && !mxe.isConsumed()) { - // Override dblClick Vertices and Edges - if (this.getModel().isEdge(cell)) { - if (edges.indexOf(cell.source.value.tagName) >= 0) - this.startEditingAtCell(cell); - } else if (this.getModel().isVertex(cell)) { - self.showDialog(new GeneralDialog(self, cell).container, 320, 280, true, - true); - } - mxe.consume(); - } - } - - // Configures automatic expand on mouseover - graph.panningHandler.autoExpand = true; - - // Installs context menu - graph.panningHandler.factoryMethod = mxUtils.bind(this, function(menu, cell, - evt) { - this.menus.createPopupMenu(menu, cell, evt); - }); - - // Initializes the outline - editor.outline.init(this.outlineContainer); - - // Hides context menu - mxEvent.addGestureListeners(document, mxUtils.bind(this, function(evt) { - graph.panningHandler.hideMenu(); - })); - - // Adds gesture handling (pinch to zoom) - if (mxClient.IS_TOUCH) { - mxEvent.addListener(graph.container, 'gesturechange', - mxUtils.bind(this, function(evt) { - graph.view.getDrawPane().setAttribute('transform', 'scale(' + evt.scale + - ')'); - graph.view.getOverlayPane().style.visibility = 'hidden'; - }) - ); - - mxEvent.addListener(graph.container, 'gestureend', - mxUtils.bind(this, function(evt) { - graph.view.getDrawPane().removeAttribute('transform'); - graph.zoomToCenter = true; - graph.zoom(evt.scale); - graph.view.getOverlayPane().style.visibility = 'visible'; - }) - ); - } - - // Create handler for key events - var keyHandler = this.createKeyHandler(editor); - - // Getter for key handler - this.getKeyHandler = function() { - return keyHandler; - }; - - // Updates the editor UI after the window has been resized - mxEvent.addListener(window, 'resize', mxUtils.bind(this, function() { - this.refresh(); - graph.sizeDidChange(); - this.editor.outline.update(false); - this.editor.outline.outline.sizeDidChange(); - })); - - // Updates action and menu states - this.init(); - this.open(); -}; - -/** - * Specifies the size of the split bar. - */ -EditorUi.prototype.splitSize = (mxClient.IS_TOUCH) ? 16 : 8; - -/** - * Specifies the height of the menubar. Default is 34. - */ -EditorUi.prototype.menubarHeight = 33; - -/** - * Specifies the height of the toolbar. Default is 36. - */ -EditorUi.prototype.toolbarHeight = 36; - -/** - * Specifies the height of the footer. Default is 28. - */ -EditorUi.prototype.footerHeight = 28; - -/** - * Specifies the position of the horizontal split bar. Default is 212. - */ -EditorUi.prototype.hsplitPosition = 204; - -/** - * Specifies the position of the vertical split bar. Default is 190. - */ -EditorUi.prototype.vsplitPosition = 190; - -/** - * Installs the listeners to update the action states. - */ -EditorUi.prototype.init = function() { - // Updates action states - this.addUndoListener(); - this.addSelectionListener(); - - // Overrides clipboard to update paste action state - var paste = this.actions.get('paste'); - - var updatePaste = function() { - paste.setEnabled(!mxClipboard.isEmpty()); - }; - - var mxClipboardCut = mxClipboard.cut; - mxClipboard.cut = function() { - mxClipboardCut.apply(this, arguments); - updatePaste(); - }; - - var mxClipboardCopy = mxClipboard.copy; - mxClipboard.copy = function() { - mxClipboardCopy.apply(this, arguments); - updatePaste(); - }; -}; - -/** - * Hook for allowing selection and context menu for certain events. - */ -EditorUi.prototype.isSelectionAllowed = function(evt) { - return false; -}; - -/** - * Opens the current diagram via the window.opener if one exists. - */ -EditorUi.prototype.open = function() { - // Cross-domain window access is not allowed in FF, so if we - // were opened from another domain then this will fail. - try { - if (window.opener != null && window.opener.openFile != null) { - window.opener.openFile.setConsumer(mxUtils.bind(this, function(xml, - filename) { - try { - var doc = mxUtils.parseXml(xml); - this.editor.setGraphXml(doc.documentElement); - this.editor.modified = false; - this.editor.undoManager.clear(); - - if (filename != null) { - this.editor.filename = filename; - } - } catch (e) { - mxUtils.alert(mxResources.get('invalidOrMissingFile') + ': ' + e.message); - } - })); - } - } catch (e) { - // ignore - } -}; - -/** - * Giuseppe Careri - * Opens the current diagram via string. - */ -EditorUi.prototype.openString = function(xml, filename, data) { - try { - var doc = mxUtils.parseXml(xml); - this.editor.setGraphXml(doc.documentElement); - this.editor.modified = false; - this.editor.undoManager.clear(); - - if (filename != null) { - this.editor.filename = filename; - } - - if (data != null) { - this.editor.data = data; - } - } catch (e) { - mxUtils.alert(mxResources.get('invalidOrMissingFile') + ': ' + e.message); - } -}; - -/** - * Saves As the current graph under the given project name. - */ -EditorUi.prototype.new = function(name) { - var editor = this.editor; - - if (name != null) { - var xml = mxUtils.getPrettyXml(this.editor.getGraphXml()); - try { - if (useLocalStorage) { - if (localStorage.getItem(name) != null && - !mxUtils.confirm(mxResources.get('replace', [name]))) { - return; - } - - localStorage.setItem(name, xml); - this.editor.setStatus(mxResources.get('saved') + ' ' + new Date()); - } else { - console.log(xml.length); - console.log(MAX_REQUEST_SIZE); - if (xml.length < MAX_REQUEST_SIZE) { - xml = encodeURIComponent(xml); - name = encodeURIComponent(name); - - var xhr = new XMLHttpRequest(); - xhr.open("POST", SAVE_URL, true); - xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); - xhr.setRequestHeader('Authorization', 'Bearer ' + editor.data.token); - xhr.onload = function(e) { - if (xhr.readyState === 4) { - if (xhr.status === 201) { - editor.setStatus('Project ' + JSON.parse(xhr.response).name + - ' is opening in new window!'); - setTimeout(function() { - window.open('square/projects/view/' + JSON.parse(xhr.response).id, - '_blank'); - }, 1500); - } else { - try { - var response = JSON.parse(xhr.response); - editor.setStatus('Error creating project: ' + response.errors[0].message); - } catch (e) { - editor.setStatus('Error creating project' + ' (' + xhr.status + ' ' + xhr.statusText + ')'); - } - } - } - }; - xhr.onerror = function(e) { - mxUtils.alert(xhr.statusText); - }; - xhr.send('description=project_new&name=' + name); - } else { - mxUtils.alert(mxResources.get('drawingTooLarge')); - mxUtils.popup(xml); - - return; - } - } - - this.editor.filename = name; - this.editor.modified = false; - } catch (e) { - this.editor.setStatus('Error creating project'); - } - } else { - this.editor.setStatus('Error creating project'); - } -}; - - -/** - * Saves the current graph under the given project name. - */ -EditorUi.prototype.save = function(name) { - var editor = this.editor; - - if (name != null) { - var xml = mxUtils.getPrettyXml(this.editor.getGraphXml()); - try { - if (useLocalStorage) { - if (localStorage.getItem(name) != null && - !mxUtils.confirm(mxResources.get('replace', [name]))) { - return; - } - - localStorage.setItem(name, xml); - this.editor.setStatus(mxResources.get('saved') + ' ' + new Date()); - } else { - console.log(xml.length); - console.log(MAX_REQUEST_SIZE); - if (xml.length < MAX_REQUEST_SIZE) { - xml = encodeURIComponent(xml); - - var xhr = new XMLHttpRequest(); - xhr.open("PUT", SAVE_URL + this.editor.data.id, true); - xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); - xhr.setRequestHeader('Authorization', 'Bearer ' + editor.data.token); - xhr.onload = function(e) { - if (xhr.readyState === 4) { - if (xhr.status === 200) { - editor.setStatus('Updated at ' + JSON.parse(xhr.response).updatedAt + - ' (' + xhr.status + ' ' + xhr.statusText + ')'); - } else { - try { - var response = JSON.parse(xhr.response); - editor.setStatus('Error saving project: ' + response.errors[0].message); - } catch (e) { - editor.setStatus('Error saving project' + ' (' + xhr.status + ' ' + xhr.statusText + ')'); - } - } - } - }; - xhr.onerror = function(e) { - mxUtils.alert(xhr.statusText); - }; - xhr.send('preproduction=' + xml); - } else { - mxUtils.alert(mxResources.get('drawingTooLarge')); - mxUtils.popup(xml); - - return; - } - } - - this.editor.filename = name; - this.editor.modified = false; - } catch (e) { - this.editor.setStatus('Error saving file'); - } - } else { - this.editor.setStatus('Error saving file'); - } -}; - -/** - * Saves the current graph under the given project name. - */ -EditorUi.prototype.description = function(description) { - var editor = this.editor; - - if (description !== null) { - var xhr = new XMLHttpRequest(); - xhr.open("PUT", SAVE_URL + this.editor.data.id, true); - xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); - xhr.setRequestHeader('Authorization', 'Bearer ' + editor.data.token); - - xhr.onload = function(e) { - if (xhr.readyState === 4) { - if (xhr.status === 200) { - editor.setStatus('Updated at ' + JSON.parse(xhr.response).updatedAt + ' (' + xhr.status + ' ' + xhr.statusText + ')'); - editor.data.description = description; - } else { - try { - var response = JSON.parse(xhr.response); - editor.setStatus('Error updating description: ' + response.errors[0].message); - } catch (e) { - editor.setStatus('Error updating description' + ' (' + xhr.status + ' ' + xhr.statusText + ')'); - } - } - } - }; - xhr.onerror = function(e) { - mxUtils.alert(xhr.statusText); - }; - xhr.send('description=' + description); - } else { - this.editor.setStatus('Error updating description'); - } -}; - -/** - * Saves As the current graph under the given project name. - */ -EditorUi.prototype.saveAs = function(name) { - var editor = this.editor; - - if (name != null) { - var xml = mxUtils.getPrettyXml(this.editor.getGraphXml()); - try { - if (useLocalStorage) { - if (localStorage.getItem(name) != null && - !mxUtils.confirm(mxResources.get('replace', [name]))) { - return; - } - - localStorage.setItem(name, xml); - this.editor.setStatus(mxResources.get('saved') + ' ' + new Date()); - } else { - console.log(xml.length); - console.log(MAX_REQUEST_SIZE); - if (xml.length < MAX_REQUEST_SIZE) { - xml = encodeURIComponent(xml); - name = encodeURIComponent(name); - - var xhr = new XMLHttpRequest(); - xhr.open("POST", SAVE_URL, true); - xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); - xhr.setRequestHeader('Authorization', 'Bearer ' + editor.data.token); - xhr.onload = function(e) { - if (xhr.readyState === 4) { - if (xhr.status === 201) { - editor.setStatus('Project ' + JSON.parse(xhr.response).name + - ' is opening in new window!'); - setTimeout(function() { - window.open('square/projects/view/' + JSON.parse(xhr.response).id, - '_blank'); - }, 1500); - } else { - try { - var response = JSON.parse(xhr.response); - editor.setStatus('Error cloning project: ' + response.errors[0].message); - } catch (e) { - editor.setStatus('Error cloning project' + ' (' + xhr.status + ' ' + xhr.statusText + ')'); - } - } - } - }; - xhr.onerror = function(e) { - mxUtils.alert(xhr.statusText); - }; - xhr.send('description=project_cloned&name=' + name + - '&preproduction=' + xml + '&production=' + xml); - } else { - mxUtils.alert(mxResources.get('drawingTooLarge')); - mxUtils.popup(xml); - - return; - } - } - - this.editor.filename = name; - this.editor.modified = false; - } catch (e) { - this.editor.setStatus('Error saving file'); - } - } else { - this.editor.setStatus('Error saving file'); - } -}; - -/** - * Plush the current graph under the given project name. - */ -EditorUi.prototype.validate = function(a, b) { - var graph = this.editor.graph; - for (var a = a != null ? a : graph.model.getRoot(), b = b != null ? b : {}, c = - true, d = graph.model.getChildCount(a), e = 0; e < d; e++) { - var f = graph.model.getChildAt(a, e), - g = b; - graph.isValidRoot(f) && (g = {}); - g = this.validate(f, g); - g != null ? graph.setCellWarning(f, g.replace(/\n/g, "<br>")) : graph.setCellWarning( - f, null); - c = c && g == null - } - - d = ""; - - //--- Giuseppe Careri - Modify 12/12/2013 - giuseppe.careri@gmail.com - if (graph.model.isVertex(a)) { - switch (a.value.nodeName) { - case 'start': - d = this.validateBlock('start') ? '' : "Only one Start block is allowed" + - "\n"; - break; - case 'finally': - d = this.validateBlock('finally') ? '' : - "Only one Finally block is allowed" + "\n"; - break; - case 'playback': - d = (a.value.getAttribute('file_id') > 0) ? "" : mxResources.get( - 'noAudioSelected') + "\n"; - break; - case 'background': - case 'menu': - d = (a.value.getAttribute('file_id') > 0) ? "" : mxResources.get( - 'noAudioSelected') + "\n"; - d += (a.value.getAttribute('digit') > 0) ? "" : mxResources.get( - 'wrongMaxDigit') + "\n"; - break; - case 'getdigits': - d = (a.value.getAttribute('file_id') > 0) ? "" : mxResources.get( - 'noAudioSelected') + "\n"; - d += (a.value.getAttribute('variable_id') > 0) ? "" : mxResources.get( - 'noVariableSelected') + "\n"; - d += (a.value.getAttribute('mindigit') > 0) ? "" : mxResources.get( - 'wrongMinDigit') + "\n"; - d += (a.value.getAttribute('maxdigit') > 0) ? "" : mxResources.get( - 'wrongMaxDigit') + "\n"; - case 'getsecretdigits': - d = (a.value.getAttribute('file_id') > 0) ? "" : mxResources.get( - 'noAudioSelected') + "\n"; - d += (a.value.getAttribute('variable_id') > 0) ? "" : mxResources.get( - 'noVariableSelected') + "\n"; - d += (a.value.getAttribute('mindigit') > 0) ? "" : mxResources.get( - 'wrongMinDigit') + "\n"; - d += (a.value.getAttribute('maxdigit') > 0) ? "" : mxResources.get( - 'wrongMaxDigit') + "\n"; - d += (a.value.getAttribute('hiddendigitsnum') >= 0) ? "" : mxResources.get( - 'wrongHiddenDigitsnum') + "\n"; - break; - case 'vswitch': - d = (a.value.getAttribute('variable') !== "") ? "" : mxResources.get( - 'noVariableSelected') + "\n"; - break; - case 'database': - d = (a.value.getAttribute('odbc_id') > 0) ? "" : mxResources.get( - 'noDatabaseSelected') + "\n"; - break; - case 'ext_dial': - d = (a.value.getAttribute('trunk_name') !== '-1') ? "" : mxResources.get( - 'noTrunkSelected') + "\n"; - break; - case 'set': - case 'math': - d = (a.value.getAttribute('variable_id') > 0) ? "" : mxResources.get( - 'noVariableSelected') + "\n"; - break; - case 'gotoc': - d = (a.value.getAttribute('extension') !== "") ? "" : mxResources.get( - 'noExtensionSelected') + "\n"; - break; - case 'system': - case 'agi': - d = (a.value.getAttribute('command') !== "") ? "" : mxResources.get( - 'noCommandSelected') + "\n"; - break; - case 'gotoif': - d = (a.value.getAttribute('condition') !== "") ? "" : mxResources.get( - 'noConditionSelected') + "\n"; - break; - case 'saydigits': - d = (a.value.getAttribute('digits') !== "") ? "" : mxResources.get( - 'noDigitsSelected') + "\n"; - break; - case 'saynumber': - d = (a.value.getAttribute('number') !== "") ? "" : mxResources.get( - 'noNumberSelected') + "\n"; - break; - case 'sayphonetic': - d = (a.value.getAttribute('text') !== "") ? "" : mxResources.get( - 'noTextSelected') + "\n"; - break; - case 'record': - d = (a.value.getAttribute('file') !== "") ? "" : mxResources.get( - 'noFileSelected') + "\n"; - break; - case 'goal': - d = (a.value.getAttribute('goalname') !== "") ? "" : mxResources.get( - 'noGoalSelected') + "\n"; - break; - case 'ext_dial': - d = (a.value.getAttribute('phone') !== "") ? "" : mxResources.get( - 'noIdentifierSelected') + "\n"; - break; - case 'dial': - d = (a.value.getAttribute('sip_id') > 0) ? "" : mxResources.get( - 'noIdentifierSelected') + "\n"; - break; - case 'queue': - d = (a.value.getAttribute('queue_id') !== "-1") ? "" : mxResources.get( - 'noQueueSelected') + "\n"; - break; - case 'callback': - d = (a.value.getAttribute('list_id') > 0) ? "" : mxResources.get( - 'noListSelected') + "\n"; - break; - case 'gotoiftime': - d = (a.value.getAttribute('interval_id') > 0) ? "" : mxResources.get( - 'noIntervalSelected') + "\n"; - break; - case 'gotoifmultitime': - d = (a.value.getAttribute('interval_id') != "") ? "" : mxResources.get( - 'noIntervalSelected') + "\n"; - break; - case 'voicemail': - d = (a.value.getAttribute('mailbox') !== "") ? "" : mxResources.get( - 'noBoxNumberSelected') + "\n"; - break; - case 'subproject': - d = (a.value.getAttribute('project_id') > 0) ? "" : mxResources.get( - 'noProjectSelected') + "\n"; - break; - case 'sendSMS': - d = (a.value.getAttribute('account_id') > 0) ? "" : mxResources.get( - 'noAccountSelected') + "\n"; - d += (a.value.getAttribute('to') !== "") ? "" : mxResources.get( - 'noRecipientSelected') + "\n"; - d += (a.value.getAttribute('sms_text') !== "") ? "" : mxResources.get( - 'noTextSelected') + "\n"; - break; - case 'sendMail': - d = (a.value.getAttribute('account_id') > 0) ? "" : mxResources.get( - 'noAccountSelected') + "\n"; - d += (a.value.getAttribute('to') !== "") ? "" : mxResources.get( - 'noRecipientSelected') + "\n"; - break; - case 'tts': - d = (a.value.getAttribute('text') !== "") ? "" : mxResources.get( - 'noTextSelected') + "\n"; - break; - case 'ispeechtts': - d = (a.value.getAttribute('text') !== "") ? "" : mxResources.get( - 'noTextSelected') + "\n"; - d += (a.value.getAttribute('key') !== "") ? "" : mxResources.get( - 'noKeySelected') + "\n"; - break; - case 'ispeechasr': - d = (a.value.getAttribute('key') !== "") ? "" : mxResources.get( - 'noKeySelected') + "\n"; - break; - } - } - - if (graph.model.isEdge(a)) { - var z = graph.model.getCell(a.source.getId()); - switch (z.value.nodeName) { - case 'background': - var patt = /^[0-9]{1,45}$|^[i]{1}$|^[t]{1}|^[#]{1}|^[*]{1}$/; - d = d + ((patt.test(String(a.getValue()))) ? "" : mxResources.get( - 'numberOrInvalidOrTimeout') + "\n"); - break; - case 'menu': - var patt = /^[0-9]{1,45}$|^[-]{1}$|^[i]{1}$|^[t]{1}|^[#]{1}|^[*]{1}$/; - var str = String(a.getValue()); - var res = str.split(","); - res.forEach(function(entry) { - d = d + ((patt.test(entry)) ? "" : mxResources.get('numberOrAll') + - "\n"); - }); - break; - case 'getsecretdigits': - case 'getdigits': - var patt = /^(x|i|-)$/; - var str = String(a.getValue()); - d = d + ((patt.test(str)) ? "" : mxResources.get( - 'numberOrInvalidOrDefault') + "\n"); - break; - case 'gotoif': - case 'gotoiftime': - case 'gotoifmultitime': - var patt = /^(true){1}$|^(false){1}$/; - d = d + ((patt.test(String(a.getValue()))) ? "" : mxResources.get( - 'trueOrFalse') + "\n"); - break; - - } - } - // ----------------------------------------------------------------- - - - graph.isCellCollapsed(a) && !c && (d = d + ((mxResources.get(graph.containsValidationErrorsResource) || - graph.containsValidationErrorsResource) + "\n")); - d = graph.model.isEdge(a) ? - d + (graph.getEdgeValidationError(a, graph.model.getTerminal(a, true), graph - .model.getTerminal(a, false)) || "") : d + (graph.getCellValidationError(a) || - ""); - e = graph.validateCell(a, b); - e != null && (d = d + e); - graph.model.getParent(a) == null && graph.view.validate(); - return d.length > 0 || !c ? d : null -}; -EditorUi.prototype.validateBlock = function(blockName) { - var graph = this.editor.graph; - var parent = graph.getDefaultParent(); - var count = 0; - // var model = graph.getModel(); - //We can also use model.getChildren(parent) - parent.children.forEach(function(n) { - if (graph.model.isVertex(n) && n.value.nodeName == blockName) { - count++; - } - }); - return count > 1 ? false : true; -} -EditorUi.prototype.publish = function(name) { - var editor = this.editor; - - if (name != null) { - var response = this.validate(); - if (response === null) { - - var xml = mxUtils.getPrettyXml(this.editor.getGraphXml()); - try { - if (useLocalStorage) { - if (localStorage.getItem(name) != null && - !mxUtils.confirm(mxResources.get('replace', [name]))) { - return; - } - - localStorage.setItem(name, xml); - this.editor.setStatus(mxResources.get('saved') + ' ' + new Date()); - } else { - console.log(xml.length); - console.log(MAX_REQUEST_SIZE); - if (xml.length < MAX_REQUEST_SIZE) { - xml = encodeURIComponent(xml); - - var xhr = new XMLHttpRequest(); - xhr.open("PUT", SAVE_URL + this.editor.data.id, true); - xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); - xhr.setRequestHeader('Authorization', 'Bearer ' + editor.data.token); - xhr.onload = function(e) { - if (xhr.readyState === 4) { - if (xhr.status === 200) { - editor.setStatus('Published at ' + JSON.parse(xhr.response).updatedAt + - ' (' + xhr.status + ' ' + xhr.statusText + ')'); - } else { - try { - var response = JSON.parse(xhr.response); - editor.setStatus('Error publishing project: ' + response.errors[0].message); - } catch (e) { - editor.setStatus('Error publishing project' + ' (' + xhr.status + ' ' + xhr.statusText + ')'); - } - } - } - }; - xhr.onerror = function(e) { - mxUtils.alert(xhr.statusText); - }; - xhr.send('preproduction=' + xml + '&production=' + xml); - } else { - mxUtils.alert(mxResources.get('drawingTooLarge')); - mxUtils.popup(xml); - - return; - } - } - - this.editor.filename = name; - this.editor.modified = false; - } catch (e) { - this.editor.setStatus('Error publishing file'); - } - } else { - editor.setStatus('Error publishing project: '); - } - } else { - this.editor.setStatus('Error publishing file'); - } -}; - - -/** - * Create variable - */ -EditorUi.prototype.variable = function(name, description) { - var editor = this.editor; - - if (name != null) { - try { - - var xhr = new XMLHttpRequest(); - xhr.open("POST", VARIABLE_URL, true); - xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); - xhr.setRequestHeader('Authorization', 'Bearer ' + editor.data.token); - xhr.onload = function(e) { - if (xhr.readyState === 4) { - if (xhr.status === 201) { - editor.setStatus('Variable created at ' + JSON.parse(xhr.response).createdAt + - ' (' + xhr.status + ' ' + xhr.statusText + ')'); - } else { - try { - var response = JSON.parse(xhr.response); - editor.setStatus('Error creating variable: ' + response.errors[0].message); - } catch (e) { - editor.setStatus('Error creating variable' + ' (' + xhr.status + ' ' + xhr.statusText + ')'); - } - } - } - }; - xhr.onerror = function(e) { - mxUtils.alert(xhr.statusText); - }; - xhr.send('name=' + name + '&description=' + description); - } catch (e) { - this.editor.setStatus('Error creating variable'); - } - } else { - this.editor.setStatus('Error creating variable'); - } -}; - -/** - * Returns the URL for a copy of this editor with no state. - */ -EditorUi.prototype.getUrl = function(pathname) { - var href = (pathname != null) ? pathname : window.location.pathname; - var parms = (href.indexOf('?') > 0) ? 1 : 0; - - // Removes template URL parameter for new blank diagram - for (var key in urlParams) { - if (parms == 0) { - href += '?'; - } else { - href += '&'; - } - - href += key + '=' + urlParams[key]; - parms++; - } - - return href; -}; - -/** - * Updates the states of the given undo/redo items. - */ -EditorUi.prototype.addUndoListener = function() { - var undo = this.actions.get('undo'); - var redo = this.actions.get('redo'); - - var undoMgr = this.editor.undoManager; - - var undoListener = function() { - undo.setEnabled(undoMgr.canUndo()); - redo.setEnabled(undoMgr.canRedo()); - }; - - undoMgr.addListener(mxEvent.ADD, undoListener); - undoMgr.addListener(mxEvent.UNDO, undoListener); - undoMgr.addListener(mxEvent.REDO, undoListener); - undoMgr.addListener(mxEvent.CLEAR, undoListener); - - // Updates the button states once - undoListener(); -}; - -/** - * Updates the states of the given toolbar items based on the selection. - */ -EditorUi.prototype.addSelectionListener = function() { - var selectionListener = mxUtils.bind(this, function() { - var graph = this.editor.graph; - var selected = !graph.isSelectionEmpty(); - var vertexSelected = false; - var edgeSelected = false; - - var cells = graph.getSelectionCells(); - - if (cells != null) { - for (var i = 0; i < cells.length; i++) { - var cell = cells[i]; - - if (graph.getModel().isEdge(cell)) { - edgeSelected = true; - } - - if (graph.getModel().isVertex(cell)) { - vertexSelected = true; - } - - if (edgeSelected && vertexSelected) { - break; - } - } - } - - // Updates action states - var actions = ['cut', 'copy', 'delete', 'duplicate', 'bold', 'italic', - 'style', 'underline', 'toFront', 'toBack', 'dashed', 'rounded', - 'shadow', - 'tilt', 'autosize' - ]; - - for (var i = 0; i < actions.length; i++) { - this.actions.get(actions[i]).setEnabled(selected); - } - - this.actions.get('curved').setEnabled(edgeSelected); - this.actions.get('rotation').setEnabled(vertexSelected); - this.actions.get('wordWrap').setEnabled(vertexSelected); - this.actions.get('group').setEnabled(graph.getSelectionCount() > 1); - this.actions.get('ungroup').setEnabled(graph.getSelectionCount() == 1 && - graph.getModel().getChildCount(graph.getSelectionCell()) > 0); - var oneVertexSelected = vertexSelected && graph.getSelectionCount() == 1; - this.actions.get('removeFromGroup').setEnabled(oneVertexSelected && - graph.getModel().isVertex(graph.getModel().getParent(graph.getSelectionCell())) - ); - - // Updates menu states - var menus = ['fontFamily', 'fontSize', 'alignment', 'position', 'text', - 'format', - 'arrange', 'linewidth', 'spacing' - ]; - - for (var i = 0; i < menus.length; i++) { - this.menus.get(menus[i]).setEnabled(selected); - } - - menus = ['line', 'lineend', 'linestart']; - - for (var i = 0; i < menus.length; i++) { - this.menus.get(menus[i]).setEnabled(edgeSelected); - } - - this.actions.get('setAsDefaultEdge').setEnabled(edgeSelected); - - this.menus.get('align').setEnabled(graph.getSelectionCount() > 1); - this.menus.get('direction').setEnabled(vertexSelected || (edgeSelected && - graph.isLoop(graph.view.getState(graph.getSelectionCell())))); - this.menus.get('navigation').setEnabled(graph.foldingEnabled && ((graph.view - .currentRoot != null) || - (graph.getSelectionCount() == 1 && graph.isValidRoot(graph.getSelectionCell())) - )); - this.actions.get('home').setEnabled(graph.view.currentRoot != null); - this.actions.get('exitGroup').setEnabled(graph.view.currentRoot != null); - var groupEnabled = graph.getSelectionCount() == 1 && graph.isValidRoot( - graph.getSelectionCell()); - this.actions.get('enterGroup').setEnabled(groupEnabled); - this.actions.get('expand').setEnabled(groupEnabled); - this.actions.get('collapse').setEnabled(groupEnabled); - this.actions.get('editLink').setEnabled(graph.getSelectionCount() == 1); - this.actions.get('openLink').setEnabled(graph.getSelectionCount() == 1 && - graph.getLinkForCell(graph.getSelectionCell()) != null); - }); - - this.editor.graph.getSelectionModel().addListener(mxEvent.CHANGE, - selectionListener); - selectionListener(); -}; - -/** - * Refreshes the viewport. - */ -EditorUi.prototype.refresh = function() { - var quirks = mxClient.IS_IE && (document.documentMode == null || document.documentMode == - 5); - var w = this.container.clientWidth; - var h = this.container.clientHeight; - - if (this.container == document.body) { - w = document.body.clientWidth || document.documentElement.clientWidth; - h = (quirks) ? document.body.clientHeight || document.documentElement.clientHeight : - document.documentElement.clientHeight; - } - - var effHsplitPosition = Math.max(0, Math.min(this.hsplitPosition, w - this.splitSize - - 20)); - var effVsplitPosition = Math.max(0, Math.min(this.vsplitPosition, h - this.menubarHeight - - this.toolbarHeight - this.footerHeight - this.splitSize - 1)); - - this.menubarContainer.style.height = this.menubarHeight + 'px'; - this.toolbarContainer.style.top = this.menubarHeight + 'px'; - this.toolbarContainer.style.height = this.toolbarHeight + 'px'; - - var tmp = this.menubarHeight + this.toolbarHeight; - - if (!mxClient.IS_QUIRKS) { - tmp += 1; - } - - this.sidebarContainer.style.top = tmp + 'px'; - this.sidebarContainer.style.width = effHsplitPosition + 'px'; - this.outlineContainer.style.width = effHsplitPosition + 'px'; - this.outlineContainer.style.height = effVsplitPosition + 'px'; - this.outlineContainer.style.bottom = this.footerHeight + 'px'; - this.diagramContainer.style.left = (effHsplitPosition + this.splitSize) + - 'px'; - this.diagramContainer.style.top = this.sidebarContainer.style.top; - this.footerContainer.style.height = this.footerHeight + 'px'; - this.footerContainer.style.display = 'none'; - this.hsplit.style.top = this.sidebarContainer.style.top; - this.hsplit.style.bottom = this.outlineContainer.style.bottom; - this.hsplit.style.left = effHsplitPosition + 'px'; - this.vsplit.style.width = this.sidebarContainer.style.width; - this.vsplit.style.bottom = (effVsplitPosition + this.footerHeight) + 'px'; - - if (quirks) { - this.menubarContainer.style.width = w + 'px'; - this.toolbarContainer.style.width = this.menubarContainer.style.width; - var sidebarHeight = (h - effVsplitPosition - this.splitSize - this.footerHeight - - this.menubarHeight - this.toolbarHeight); - this.sidebarContainer.style.height = sidebarHeight + 'px'; - this.diagramContainer.style.width = (w - effHsplitPosition - this.splitSize) + - 'px'; - var diagramHeight = (h - this.footerHeight - this.menubarHeight - this.toolbarHeight); - this.diagramContainer.style.height = diagramHeight + 'px'; - this.footerContainer.style.width = this.menubarContainer.style.width; - this.hsplit.style.height = diagramHeight + 'px'; - } else { - this.sidebarContainer.style.bottom = (effVsplitPosition + this.splitSize + - this.footerHeight) + 'px'; - this.diagramContainer.style.bottom = this.outlineContainer.style.bottom; - } -}; - -/** - * Creates the required containers. - */ -EditorUi.prototype.createDivs = function() { - this.menubarContainer = this.createDiv('geMenubarContainer'); - this.toolbarContainer = this.createDiv('geToolbarContainer'); - this.sidebarContainer = this.createDiv('geSidebarContainer'); - this.outlineContainer = this.createDiv('geOutlineContainer'); - this.diagramContainer = this.createDiv('geDiagramContainer'); - this.footerContainer = this.createDiv('geFooterContainer'); - this.hsplit = this.createDiv('geHsplit'); - this.vsplit = this.createDiv('geVsplit'); - - // Sets static style for containers - this.menubarContainer.style.top = '0px'; - this.menubarContainer.style.left = '0px'; - this.menubarContainer.style.right = '0px'; - this.toolbarContainer.style.left = '0px'; - this.toolbarContainer.style.right = '0px'; - this.sidebarContainer.style.left = '0px'; - this.outlineContainer.style.left = '0px'; - this.diagramContainer.style.right = '0px'; - this.footerContainer.style.left = '0px'; - this.footerContainer.style.right = '0px'; - this.footerContainer.style.bottom = '0px'; - this.vsplit.style.left = '0px'; - this.vsplit.style.height = this.splitSize + 'px'; - this.hsplit.style.width = this.splitSize + 'px'; -}; - -/** - * Creates the required containers. - */ -EditorUi.prototype.createUi = function() { - // Creates menubar - this.menubar = this.menus.createMenubar(this.createDiv('geMenubar')); - this.menubarContainer.appendChild(this.menubar.container); - - // Creates toolbar - this.toolbar = this.createToolbar(this.createDiv('geToolbar')); - this.toolbarContainer.appendChild(this.toolbar.container); - - // Creates the sidebar - this.sidebar = this.createSidebar(this.sidebarContainer); - - // Creates the footer - this.footerContainer.appendChild(this.createFooter()); - - // Adds status bar in menubar - this.statusContainer = this.createStatusContainer(); - - // Connects the status bar to the editor status - this.editor.addListener('statusChanged', mxUtils.bind(this, function() { - this.setStatusText(this.editor.getStatus()); - })); - - this.setStatusText(this.editor.getStatus()); - this.menubar.container.appendChild(this.statusContainer); - - // Inserts into DOM - this.container.appendChild(this.menubarContainer); - this.container.appendChild(this.toolbarContainer); - this.container.appendChild(this.sidebarContainer); - this.container.appendChild(this.outlineContainer); - this.container.appendChild(this.diagramContainer); - this.container.appendChild(this.footerContainer); - this.container.appendChild(this.hsplit); - this.container.appendChild(this.vsplit); - - // HSplit - this.addSplitHandler(this.hsplit, true, 0, mxUtils.bind(this, function( - value) { - this.hsplitPosition = value; - this.refresh(); - this.editor.graph.sizeDidChange(); - this.editor.outline.update(false); - this.editor.outline.outline.sizeDidChange(); - })); - - // VSplit - this.addSplitHandler(this.vsplit, false, this.footerHeight, mxUtils.bind( - this, - function(value) { - this.vsplitPosition = value; - this.refresh(); - this.editor.outline.update(false); - this.editor.outline.outline.sizeDidChange(); - })); -}; - -/** - * Creates a new toolbar for the given container. - */ -EditorUi.prototype.createStatusContainer = function() { - var container = document.createElement('a'); - container.className = 'geItem geStatus'; - - return container; -}; - -/** - * Creates a new toolbar for the given container. - */ -EditorUi.prototype.createStatusContainer = function() { - var container = document.createElement('a'); - container.className = 'geItem geStatus'; - - return container; -}; - -/** - * Creates a new toolbar for the given container. - */ -EditorUi.prototype.setStatusText = function(value) { - this.statusContainer.innerHTML = value; -}; - -/** - * Creates a new toolbar for the given container. - */ -EditorUi.prototype.createToolbar = function(container) { - return new Toolbar(this, container); -}; - -/** - * Creates a new sidebar for the given container. - */ -EditorUi.prototype.createSidebar = function(container) { - return new Sidebar(this, container); -}; - -/** - * Creates and returns a new footer. - */ -EditorUi.prototype.createFooter = function() { - return this.createDiv('geFooter'); -}; - -/** - * Creates the actual toolbar for the toolbar container. - */ -EditorUi.prototype.createDiv = function(classname) { - var elt = document.createElement('div'); - elt.className = classname; - - return elt; -}; - -/** - * Creates the custom header. - */ -EditorUi.prototype.createHeader = function(classname) { - var elt = document.createElement(classname); - return elt; -}; - -/** - * Creates the custom header. - */ -EditorUi.prototype.createForm = function(classname) { - var elt = document.createElement('form'); - elt.className = classname; - - return elt; -}; - -/** - * Updates the states of the given undo/redo items. - */ -EditorUi.prototype.addSplitHandler = function(elt, horizontal, dx, onChange) { - var start = null; - var initial = null; - - function getValue() { - return parseInt(((horizontal) ? elt.style.left : elt.style.bottom)); - }; - - function moveHandler(evt) { - if (start != null) { - var pt = new mxPoint(mxEvent.getClientX(evt), mxEvent.getClientY(evt)); - onChange(Math.max(0, initial + ((horizontal) ? (pt.x - start.x) : (start.y - - pt.y)) - dx)); - mxEvent.consume(evt); - } - }; - - function dropHandler(evt) { - moveHandler(evt); - start = null; - initial = null; - }; - - mxEvent.addGestureListeners(elt, function(evt) { - start = new mxPoint(mxEvent.getClientX(evt), mxEvent.getClientY(evt)); - initial = getValue(); - mxEvent.consume(evt); - }); - - mxEvent.addListener(document, 'mousemove', moveHandler); - mxEvent.addListener(document, 'touchmove', moveHandler); - mxEvent.addListener(document, 'mouseup', dropHandler); - mxEvent.addListener(document, 'touchend', dropHandler); -}; - -/** - * Displays a print dialog. - */ -EditorUi.prototype.showDialog = function(elt, w, h, modal, closable, onClose) { - this.hideDialog(); - this.dialog = new Dialog(this, elt, w, (mxClient.IS_VML) ? h - 12 : h, - modal, - closable, onClose); -}; - -/** - * Displays a print dialog. - */ -EditorUi.prototype.hideDialog = function() { - if (this.dialog != null) { - this.dialog.close(); - this.dialog = null; - this.editor.graph.container.focus(); - } -}; - -/** - * Adds the label menu items to the given menu and parent. - */ -EditorUi.prototype.saveFile = function(forceDialog) { - if (!forceDialog && this.editor.filename != null) { - this.save(this.editor.getOrCreateFilename()); - } else { - this.showDialog(new SaveDialog(this).container, 300, 100, true, true); - } -}; - -/** - * Adds the label menu items to the given menu and parent. - */ -EditorUi.prototype.publishFile = function(forceDialog) { - if (!forceDialog && this.editor.filename != null) { - this.publish(this.editor.getOrCreateFilename()); - } else { - //this.showDialog(new SaveDialog(this).container, 300, 100, true, true); - } -}; - -/** - * Executes the given layout. - */ -EditorUi.prototype.executeLayout = function(layout, animate, ignoreChildCount) { - var graph = this.editor.graph; - var cell = graph.getSelectionCell(); - - // Allow global overridding of animation - animate = this.animate != null ? this.animate : animate; - - graph.getModel().beginUpdate(); - try { - layout.execute(graph.getDefaultParent(), cell); - } catch (e) { - throw e; - } finally { - // Animates the changes in the graph model except - // for Camino, where animation is too slow - if (animate && navigator.userAgent.indexOf('Camino') < 0) { - // New API for animating graph layout results asynchronously - var morph = new mxMorphing(graph); - morph.addListener(mxEvent.DONE, mxUtils.bind(this, function() { - graph.getModel().endUpdate(); - })); - - morph.startAnimation(); - } else { - graph.getModel().endUpdate(); - } - } -}; - -/** - * Creates the keyboard event handler for the current graph and history. - */ -EditorUi.prototype.createKeyHandler = function(editor) { - var graph = this.editor.graph; - var keyHandler = new mxKeyHandler(graph); - - // Routes command-key to control-key on Mac - keyHandler.isControlDown = function(evt) { - return mxEvent.isControlDown(evt) || (mxClient.IS_MAC && evt.metaKey); - }; - - // Helper function to move cells with the cursor keys - function nudge(keyCode) { - if (!graph.isSelectionEmpty()) { - var dx = 0; - var dy = 0; - - if (keyCode == 37) { - dx = -1; - } else if (keyCode == 38) { - dy = -1; - } else if (keyCode == 39) { - dx = 1; - } else if (keyCode == 40) { - dy = 1; - } - - graph.moveCells(graph.getSelectionCells(), dx, dy); - graph.scrollCellToVisible(graph.getSelectionCell()); - } - }; - - // Binds keystrokes to actions - var bindAction = mxUtils.bind(this, function(code, control, key, shift) { - var action = this.actions.get(key); - - if (action != null) { - var f = function() { - if (action.enabled) { - action.funct(); - } - }; - - if (control) { - if (shift) { - keyHandler.bindControlShiftKey(code, f); - } else { - keyHandler.bindControlKey(code, f); - } - } else { - if (shift) { - keyHandler.bindShiftKey(code, f); - } else { - keyHandler.bindKey(code, f); - } - } - } - }); - - var ui = this; - var keyHandleEscape = keyHandler.escape; - keyHandler.escape = function(evt) { - ui.hideDialog(); - keyHandleEscape.apply(this, arguments); - }; - - // Ignores enter keystroke. Remove this line if you want the - // enter keystroke to stop editing. - keyHandler.enter = function() {}; - keyHandler.bindKey(8, function() { - graph.foldCells(true); - }); // Backspace - keyHandler.bindKey(13, function() { - graph.foldCells(false); - }); // Enter - keyHandler.bindKey(33, function() { - graph.exitGroup(); - }); // Page Up - keyHandler.bindKey(34, function() { - graph.enterGroup(); - }); // Page Down - keyHandler.bindKey(36, function() { - graph.home(); - }); // Home - keyHandler.bindKey(35, function() { - graph.refresh(); - }); // End - keyHandler.bindKey(37, function() { - nudge(37); - }); // Left arrow - keyHandler.bindKey(38, function() { - nudge(38); - }); // Up arrow - keyHandler.bindKey(39, function() { - nudge(39); - }); // Right arrow - keyHandler.bindKey(40, function() { - nudge(40); - }); // Down arrow - keyHandler.bindKey(113, function() { - graph.startEditingAtCell(); - }); - bindAction(46, false, 'delete'); // Delete - bindAction(82, true, 'tilt'); // Ctrl+R - bindAction(83, true, 'save'); // Ctrl+S - bindAction(83, true, 'saveAs', true); // Ctrl+Shift+S - bindAction(107, false, 'zoomIn'); // Add - bindAction(109, false, 'zoomOut'); // Subtract - bindAction(65, true, 'selectAll'); // Ctrl+A - bindAction(86, true, 'selectVertices', true); // Ctrl+Shift+V - bindAction(69, true, 'selectEdges', true); // Ctrl+Shift+E - bindAction(69, true, 'export'); // Ctrl+Shift+E - bindAction(66, true, 'toBack'); // Ctrl+B - bindAction(70, true, 'toFront'); // Ctrl+F - bindAction(68, true, 'duplicate'); // Ctrl+D - bindAction(90, true, 'undo'); // Ctrl+Z - bindAction(89, true, 'redo'); // Ctrl+Y - bindAction(88, true, 'cut'); // Ctrl+X - bindAction(67, true, 'copy'); // Ctrl+C - bindAction(81, true, 'connect'); // Ctrl+Q - bindAction(86, true, 'paste'); // Ctrl+V - bindAction(71, true, 'group'); // Ctrl+G - bindAction(71, true, 'grid', true); // Ctrl+Shift+G - bindAction(85, true, 'ungroup'); // Ctrl+U - bindAction(112, false, 'about'); // F1 - bindAction(80, true, 'publish', true); // Ctrl+Shift+P - - return keyHandler; -}; - -/** - * Giuseppe Careri - * Creates a new toolbar for the given container. - */ -EditorUi.prototype.createMultiplicities = function(graph, cells, source, - target) { - for (var i = 0; i < cells.length; i++) { - - graph.push(new mxMultiplicity(true, cells[i], null, null, source[i][0], - source[i][1], null, mxResources.get(cells[i]) + mxResources.get( - 'musthave') + source[i][0] + mxResources.get('outgoingedge'), null)); - graph.push(new mxMultiplicity(false, cells[i], null, null, target[i][0], - target[i][1], null, mxResources.get(cells[i]) + mxResources.get( - 'musthave') + target[i][0] + mxResources.get('incomingedge'), null)); - }; -}; +var _0xc44a=["\x65\x64\x69\x74\x6F\x72","\x63\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x67\x65\x45\x64\x69\x74\x6F\x72","\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74\x42\x79\x49\x64","\x67\x72\x61\x70\x68","\x6F\x76\x65\x72\x66\x6C\x6F\x77","\x73\x74\x79\x6C\x65","\x68\x69\x64\x64\x65\x6E","\x73\x72\x63","\x73\x75\x62\x6D\x65\x6E\x75\x49\x6D\x61\x67\x65","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x63\x6F\x6E\x6E\x65\x63\x74\x49\x6D\x61\x67\x65","\x61\x63\x74\x69\x6F\x6E\x73","\x6D\x65\x6E\x75\x73","\x63\x72\x65\x61\x74\x65\x44\x69\x76\x73","\x72\x65\x66\x72\x65\x73\x68","\x63\x72\x65\x61\x74\x65\x55\x69","\x65\x76\x65\x6E\x74","\x69\x73\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x41\x6C\x6C\x6F\x77\x65\x64","\x69\x73\x45\x64\x69\x74\x69\x6E\x67","\x62\x69\x6E\x64","\x62\x6F\x64\x79","\x6F\x6E\x73\x65\x6C\x65\x63\x74\x73\x74\x61\x72\x74","\x6D\x65\x6E\x75\x62\x61\x72\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x6F\x6E\x6D\x6F\x75\x73\x65\x64\x6F\x77\x6E","\x74\x6F\x6F\x6C\x62\x61\x72\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x64\x69\x61\x67\x72\x61\x6D\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x73\x69\x64\x65\x62\x61\x72\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x66\x6F\x6F\x74\x65\x72\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x49\x53\x5F\x49\x45","\x64\x6F\x63\x75\x6D\x65\x6E\x74\x4D\x6F\x64\x65","\x75\x6E\x64\x65\x66\x69\x6E\x65\x64","\x63\x6F\x6E\x74\x65\x78\x74\x6D\x65\x6E\x75","\x61\x64\x64\x4C\x69\x73\x74\x65\x6E\x65\x72","\x6F\x6E\x63\x6F\x6E\x74\x65\x78\x74\x6D\x65\x6E\x75","\x69\x6E\x69\x74","\x74\x61\x62\x69\x6E\x64\x65\x78","\x30","\x73\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x63\x75\x72\x73\x6F\x72","\x64\x65\x66\x61\x75\x6C\x74","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x49\x6D\x61\x67\x65","\x75\x72\x6C\x28","\x67\x72\x69\x64\x49\x6D\x61\x67\x65","\x29","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x2D\x31\x70\x78\x20\x2D\x31\x70\x78","\x66\x6F\x63\x75\x73","\x66\x69\x72\x65\x4D\x6F\x75\x73\x65\x45\x76\x65\x6E\x74","\x4D\x4F\x55\x53\x45\x5F\x44\x4F\x57\x4E","\x61\x70\x70\x6C\x79","\x6D\x75\x6C\x74\x69\x70\x6C\x69\x63\x69\x74\x69\x65\x73","\x73\x74\x61\x72\x74","\x66\x69\x6E\x61\x6C\x6C\x79","\x65\x6E\x64","\x6E","\x63\x72\x65\x61\x74\x65\x4D\x75\x6C\x74\x69\x70\x6C\x69\x63\x69\x74\x69\x65\x73","\x61\x6E\x73\x77\x65\x72","\x68\x61\x6E\x67\x75\x70","\x64\x69\x61\x6C","\x65\x78\x74\x5F\x64\x69\x61\x6C","\x71\x75\x65\x75\x65","\x76\x6F\x69\x63\x65\x6D\x61\x69\x6C","\x63\x61\x6C\x6C\x62\x61\x63\x6B","\x73\x65\x74","\x6D\x61\x74\x68","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64","\x70\x6C\x61\x79\x62\x61\x63\x6B","\x6D\x65\x6E\x75","\x73\x61\x79\x64\x69\x67\x69\x74\x73","\x73\x61\x79\x6E\x75\x6D\x62\x65\x72","\x73\x61\x79\x70\x68\x6F\x6E\x65\x74\x69\x63","\x74\x74\x73","\x69\x73\x70\x65\x65\x63\x68\x74\x74\x73","\x67\x65\x74\x64\x69\x67\x69\x74\x73","\x67\x65\x74\x73\x65\x63\x72\x65\x74\x64\x69\x67\x69\x74\x73","\x72\x65\x63\x6F\x72\x64","\x64\x61\x74\x61\x62\x61\x73\x65","\x69\x73\x70\x65\x65\x63\x68\x61\x73\x72","\x73\x65\x6E\x64\x53\x4D\x53","\x73\x65\x6E\x64\x4D\x61\x69\x6C","\x67\x6F\x74\x6F\x63","\x67\x6F\x74\x6F\x69\x66","\x67\x6F\x74\x6F\x69\x66\x74\x69\x6D\x65","\x67\x6F\x74\x6F\x69\x66\x6D\x75\x6C\x74\x69\x74\x69\x6D\x65","\x76\x73\x77\x69\x74\x63\x68","\x71\x75\x65\x75\x65\x6C\x6F\x67","\x67\x6F\x61\x6C","\x6E\x6F\x6F\x70","\x73\x79\x73\x74\x65\x6D","\x61\x67\x69","\x73\x75\x62\x70\x72\x6F\x6A\x65\x63\x74","\x63\x75\x73\x74\x6F\x6D\x5F\x61\x70\x70","\x64\x62\x6C\x43\x6C\x69\x63\x6B","\x63\x65\x6C\x6C","\x66\x69\x72\x65\x45\x76\x65\x6E\x74","\x69\x73\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x43\x6F\x6E\x73\x75\x6D\x65\x64","\x69\x73\x45\x64\x67\x65","\x67\x65\x74\x4D\x6F\x64\x65\x6C","\x74\x61\x67\x4E\x61\x6D\x65","\x76\x61\x6C\x75\x65","\x73\x6F\x75\x72\x63\x65","\x69\x6E\x64\x65\x78\x4F\x66","\x73\x74\x61\x72\x74\x45\x64\x69\x74\x69\x6E\x67\x41\x74\x43\x65\x6C\x6C","\x69\x73\x56\x65\x72\x74\x65\x78","\x73\x68\x6F\x77\x44\x69\x61\x6C\x6F\x67","\x63\x6F\x6E\x73\x75\x6D\x65","\x61\x75\x74\x6F\x45\x78\x70\x61\x6E\x64","\x70\x61\x6E\x6E\x69\x6E\x67\x48\x61\x6E\x64\x6C\x65\x72","\x66\x61\x63\x74\x6F\x72\x79\x4D\x65\x74\x68\x6F\x64","\x63\x72\x65\x61\x74\x65\x50\x6F\x70\x75\x70\x4D\x65\x6E\x75","\x6F\x75\x74\x6C\x69\x6E\x65\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x6F\x75\x74\x6C\x69\x6E\x65","\x68\x69\x64\x65\x4D\x65\x6E\x75","\x61\x64\x64\x47\x65\x73\x74\x75\x72\x65\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x49\x53\x5F\x54\x4F\x55\x43\x48","\x67\x65\x73\x74\x75\x72\x65\x63\x68\x61\x6E\x67\x65","\x74\x72\x61\x6E\x73\x66\x6F\x72\x6D","\x73\x63\x61\x6C\x65\x28","\x73\x63\x61\x6C\x65","\x67\x65\x74\x44\x72\x61\x77\x50\x61\x6E\x65","\x76\x69\x65\x77","\x76\x69\x73\x69\x62\x69\x6C\x69\x74\x79","\x67\x65\x74\x4F\x76\x65\x72\x6C\x61\x79\x50\x61\x6E\x65","\x67\x65\x73\x74\x75\x72\x65\x65\x6E\x64","\x72\x65\x6D\x6F\x76\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x7A\x6F\x6F\x6D\x54\x6F\x43\x65\x6E\x74\x65\x72","\x7A\x6F\x6F\x6D","\x76\x69\x73\x69\x62\x6C\x65","\x63\x72\x65\x61\x74\x65\x4B\x65\x79\x48\x61\x6E\x64\x6C\x65\x72","\x67\x65\x74\x4B\x65\x79\x48\x61\x6E\x64\x6C\x65\x72","\x72\x65\x73\x69\x7A\x65","\x73\x69\x7A\x65\x44\x69\x64\x43\x68\x61\x6E\x67\x65","\x75\x70\x64\x61\x74\x65","\x6F\x70\x65\x6E","\x73\x70\x6C\x69\x74\x53\x69\x7A\x65","\x6D\x65\x6E\x75\x62\x61\x72\x48\x65\x69\x67\x68\x74","\x74\x6F\x6F\x6C\x62\x61\x72\x48\x65\x69\x67\x68\x74","\x66\x6F\x6F\x74\x65\x72\x48\x65\x69\x67\x68\x74","\x68\x73\x70\x6C\x69\x74\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x76\x73\x70\x6C\x69\x74\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x61\x64\x64\x55\x6E\x64\x6F\x4C\x69\x73\x74\x65\x6E\x65\x72","\x61\x64\x64\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x4C\x69\x73\x74\x65\x6E\x65\x72","\x70\x61\x73\x74\x65","\x67\x65\x74","\x69\x73\x45\x6D\x70\x74\x79","\x73\x65\x74\x45\x6E\x61\x62\x6C\x65\x64","\x63\x75\x74","\x63\x6F\x70\x79","\x6F\x70\x65\x6E\x65\x72","\x6F\x70\x65\x6E\x46\x69\x6C\x65","\x70\x61\x72\x73\x65\x58\x6D\x6C","\x64\x6F\x63\x75\x6D\x65\x6E\x74\x45\x6C\x65\x6D\x65\x6E\x74","\x73\x65\x74\x47\x72\x61\x70\x68\x58\x6D\x6C","\x6D\x6F\x64\x69\x66\x69\x65\x64","\x63\x6C\x65\x61\x72","\x75\x6E\x64\x6F\x4D\x61\x6E\x61\x67\x65\x72","\x66\x69\x6C\x65\x6E\x61\x6D\x65","\x69\x6E\x76\x61\x6C\x69\x64\x4F\x72\x4D\x69\x73\x73\x69\x6E\x67\x46\x69\x6C\x65","\x3A\x20","\x6D\x65\x73\x73\x61\x67\x65","\x61\x6C\x65\x72\x74","\x73\x65\x74\x43\x6F\x6E\x73\x75\x6D\x65\x72","\x6F\x70\x65\x6E\x53\x74\x72\x69\x6E\x67","\x64\x61\x74\x61","\x6E\x65\x77","\x67\x65\x74\x47\x72\x61\x70\x68\x58\x6D\x6C","\x67\x65\x74\x50\x72\x65\x74\x74\x79\x58\x6D\x6C","\x67\x65\x74\x49\x74\x65\x6D","\x72\x65\x70\x6C\x61\x63\x65","\x63\x6F\x6E\x66\x69\x72\x6D","\x73\x65\x74\x49\x74\x65\x6D","\x73\x61\x76\x65\x64","\x20","\x73\x65\x74\x53\x74\x61\x74\x75\x73","\x6C\x65\x6E\x67\x74\x68","\x6C\x6F\x67","\x50\x4F\x53\x54","\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65","\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x2F\x78\x2D\x77\x77\x77\x2D\x66\x6F\x72\x6D\x2D\x75\x72\x6C\x65\x6E\x63\x6F\x64\x65\x64","\x73\x65\x74\x52\x65\x71\x75\x65\x73\x74\x48\x65\x61\x64\x65\x72","\x41\x75\x74\x68\x6F\x72\x69\x7A\x61\x74\x69\x6F\x6E","\x42\x65\x61\x72\x65\x72\x20","\x74\x6F\x6B\x65\x6E","\x6F\x6E\x6C\x6F\x61\x64","\x72\x65\x61\x64\x79\x53\x74\x61\x74\x65","\x73\x74\x61\x74\x75\x73","\x50\x72\x6F\x6A\x65\x63\x74\x20","\x6E\x61\x6D\x65","\x72\x65\x73\x70\x6F\x6E\x73\x65","\x70\x61\x72\x73\x65","\x20\x69\x73\x20\x6F\x70\x65\x6E\x69\x6E\x67\x20\x69\x6E\x20\x6E\x65\x77\x20\x77\x69\x6E\x64\x6F\x77\x21","\x73\x71\x75\x61\x72\x65\x2F\x70\x72\x6F\x6A\x65\x63\x74\x73\x2F\x76\x69\x65\x77\x2F","\x69\x64","\x5F\x62\x6C\x61\x6E\x6B","\x45\x72\x72\x6F\x72\x20\x63\x72\x65\x61\x74\x69\x6E\x67\x20\x70\x72\x6F\x6A\x65\x63\x74\x3A\x20","\x65\x72\x72\x6F\x72\x73","\x45\x72\x72\x6F\x72\x20\x63\x72\x65\x61\x74\x69\x6E\x67\x20\x70\x72\x6F\x6A\x65\x63\x74","\x20\x28","\x73\x74\x61\x74\x75\x73\x54\x65\x78\x74","\x6F\x6E\x65\x72\x72\x6F\x72","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x3D\x70\x72\x6F\x6A\x65\x63\x74\x5F\x6E\x65\x77\x26\x6E\x61\x6D\x65\x3D","\x73\x65\x6E\x64","\x64\x72\x61\x77\x69\x6E\x67\x54\x6F\x6F\x4C\x61\x72\x67\x65","\x70\x6F\x70\x75\x70","\x73\x61\x76\x65","\x50\x55\x54","\x55\x70\x64\x61\x74\x65\x64\x20\x61\x74\x20","\x75\x70\x64\x61\x74\x65\x64\x41\x74","\x45\x72\x72\x6F\x72\x20\x73\x61\x76\x69\x6E\x67\x20\x70\x72\x6F\x6A\x65\x63\x74\x3A\x20","\x45\x72\x72\x6F\x72\x20\x73\x61\x76\x69\x6E\x67\x20\x70\x72\x6F\x6A\x65\x63\x74","\x70\x72\x65\x70\x72\x6F\x64\x75\x63\x74\x69\x6F\x6E\x3D","\x45\x72\x72\x6F\x72\x20\x73\x61\x76\x69\x6E\x67\x20\x66\x69\x6C\x65","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x45\x72\x72\x6F\x72\x20\x75\x70\x64\x61\x74\x69\x6E\x67\x20\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x3A\x20","\x45\x72\x72\x6F\x72\x20\x75\x70\x64\x61\x74\x69\x6E\x67\x20\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x3D","\x73\x61\x76\x65\x41\x73","\x45\x72\x72\x6F\x72\x20\x63\x6C\x6F\x6E\x69\x6E\x67\x20\x70\x72\x6F\x6A\x65\x63\x74\x3A\x20","\x45\x72\x72\x6F\x72\x20\x63\x6C\x6F\x6E\x69\x6E\x67\x20\x70\x72\x6F\x6A\x65\x63\x74","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x3D\x70\x72\x6F\x6A\x65\x63\x74\x5F\x63\x6C\x6F\x6E\x65\x64\x26\x6E\x61\x6D\x65\x3D","\x26\x70\x72\x65\x70\x72\x6F\x64\x75\x63\x74\x69\x6F\x6E\x3D","\x26\x70\x72\x6F\x64\x75\x63\x74\x69\x6F\x6E\x3D","\x76\x61\x6C\x69\x64\x61\x74\x65","\x67\x65\x74\x52\x6F\x6F\x74","\x6D\x6F\x64\x65\x6C","\x67\x65\x74\x43\x68\x69\x6C\x64\x43\x6F\x75\x6E\x74","\x67\x65\x74\x43\x68\x69\x6C\x64\x41\x74","\x69\x73\x56\x61\x6C\x69\x64\x52\x6F\x6F\x74","\x3C\x62\x72\x3E","\x73\x65\x74\x43\x65\x6C\x6C\x57\x61\x72\x6E\x69\x6E\x67","","\x76\x61\x6C\x69\x64\x61\x74\x65\x42\x6C\x6F\x63\x6B","\x4F\x6E\x6C\x79\x20\x6F\x6E\x65\x20\x53\x74\x61\x72\x74\x20\x62\x6C\x6F\x63\x6B\x20\x69\x73\x20\x61\x6C\x6C\x6F\x77\x65\x64","\x0A","\x4F\x6E\x6C\x79\x20\x6F\x6E\x65\x20\x46\x69\x6E\x61\x6C\x6C\x79\x20\x62\x6C\x6F\x63\x6B\x20\x69\x73\x20\x61\x6C\x6C\x6F\x77\x65\x64","\x66\x69\x6C\x65\x5F\x69\x64","\x67\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x6E\x6F\x41\x75\x64\x69\x6F\x53\x65\x6C\x65\x63\x74\x65\x64","\x64\x69\x67\x69\x74","\x77\x72\x6F\x6E\x67\x4D\x61\x78\x44\x69\x67\x69\x74","\x76\x61\x72\x69\x61\x62\x6C\x65\x5F\x69\x64","\x6E\x6F\x56\x61\x72\x69\x61\x62\x6C\x65\x53\x65\x6C\x65\x63\x74\x65\x64","\x6D\x69\x6E\x64\x69\x67\x69\x74","\x77\x72\x6F\x6E\x67\x4D\x69\x6E\x44\x69\x67\x69\x74","\x6D\x61\x78\x64\x69\x67\x69\x74","\x68\x69\x64\x64\x65\x6E\x64\x69\x67\x69\x74\x73\x6E\x75\x6D","\x77\x72\x6F\x6E\x67\x48\x69\x64\x64\x65\x6E\x44\x69\x67\x69\x74\x73\x6E\x75\x6D","\x76\x61\x72\x69\x61\x62\x6C\x65","\x6F\x64\x62\x63\x5F\x69\x64","\x6E\x6F\x44\x61\x74\x61\x62\x61\x73\x65\x53\x65\x6C\x65\x63\x74\x65\x64","\x74\x72\x75\x6E\x6B\x5F\x6E\x61\x6D\x65","\x2D\x31","\x6E\x6F\x54\x72\x75\x6E\x6B\x53\x65\x6C\x65\x63\x74\x65\x64","\x65\x78\x74\x65\x6E\x73\x69\x6F\x6E","\x6E\x6F\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E\x53\x65\x6C\x65\x63\x74\x65\x64","\x63\x6F\x6D\x6D\x61\x6E\x64","\x6E\x6F\x43\x6F\x6D\x6D\x61\x6E\x64\x53\x65\x6C\x65\x63\x74\x65\x64","\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E","\x6E\x6F\x43\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x53\x65\x6C\x65\x63\x74\x65\x64","\x64\x69\x67\x69\x74\x73","\x6E\x6F\x44\x69\x67\x69\x74\x73\x53\x65\x6C\x65\x63\x74\x65\x64","\x6E\x75\x6D\x62\x65\x72","\x6E\x6F\x4E\x75\x6D\x62\x65\x72\x53\x65\x6C\x65\x63\x74\x65\x64","\x74\x65\x78\x74","\x6E\x6F\x54\x65\x78\x74\x53\x65\x6C\x65\x63\x74\x65\x64","\x66\x69\x6C\x65","\x6E\x6F\x46\x69\x6C\x65\x53\x65\x6C\x65\x63\x74\x65\x64","\x67\x6F\x61\x6C\x6E\x61\x6D\x65","\x6E\x6F\x47\x6F\x61\x6C\x53\x65\x6C\x65\x63\x74\x65\x64","\x70\x68\x6F\x6E\x65","\x6E\x6F\x49\x64\x65\x6E\x74\x69\x66\x69\x65\x72\x53\x65\x6C\x65\x63\x74\x65\x64","\x73\x69\x70\x5F\x69\x64","\x71\x75\x65\x75\x65\x5F\x69\x64","\x6E\x6F\x51\x75\x65\x75\x65\x53\x65\x6C\x65\x63\x74\x65\x64","\x6C\x69\x73\x74\x5F\x69\x64","\x6E\x6F\x4C\x69\x73\x74\x53\x65\x6C\x65\x63\x74\x65\x64","\x69\x6E\x74\x65\x72\x76\x61\x6C\x5F\x69\x64","\x6E\x6F\x49\x6E\x74\x65\x72\x76\x61\x6C\x53\x65\x6C\x65\x63\x74\x65\x64","\x6D\x61\x69\x6C\x62\x6F\x78","\x6E\x6F\x42\x6F\x78\x4E\x75\x6D\x62\x65\x72\x53\x65\x6C\x65\x63\x74\x65\x64","\x70\x72\x6F\x6A\x65\x63\x74\x5F\x69\x64","\x6E\x6F\x50\x72\x6F\x6A\x65\x63\x74\x53\x65\x6C\x65\x63\x74\x65\x64","\x61\x63\x63\x6F\x75\x6E\x74\x5F\x69\x64","\x6E\x6F\x41\x63\x63\x6F\x75\x6E\x74\x53\x65\x6C\x65\x63\x74\x65\x64","\x74\x6F","\x6E\x6F\x52\x65\x63\x69\x70\x69\x65\x6E\x74\x53\x65\x6C\x65\x63\x74\x65\x64","\x73\x6D\x73\x5F\x74\x65\x78\x74","\x6B\x65\x79","\x6E\x6F\x4B\x65\x79\x53\x65\x6C\x65\x63\x74\x65\x64","\x6E\x6F\x64\x65\x4E\x61\x6D\x65","\x67\x65\x74\x49\x64","\x67\x65\x74\x43\x65\x6C\x6C","\x67\x65\x74\x56\x61\x6C\x75\x65","\x74\x65\x73\x74","\x6E\x75\x6D\x62\x65\x72\x4F\x72\x49\x6E\x76\x61\x6C\x69\x64\x4F\x72\x54\x69\x6D\x65\x6F\x75\x74","\x2C","\x73\x70\x6C\x69\x74","\x6E\x75\x6D\x62\x65\x72\x4F\x72\x41\x6C\x6C","\x66\x6F\x72\x45\x61\x63\x68","\x6E\x75\x6D\x62\x65\x72\x4F\x72\x49\x6E\x76\x61\x6C\x69\x64\x4F\x72\x44\x65\x66\x61\x75\x6C\x74","\x74\x72\x75\x65\x4F\x72\x46\x61\x6C\x73\x65","\x69\x73\x43\x65\x6C\x6C\x43\x6F\x6C\x6C\x61\x70\x73\x65\x64","\x63\x6F\x6E\x74\x61\x69\x6E\x73\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E\x45\x72\x72\x6F\x72\x73\x52\x65\x73\x6F\x75\x72\x63\x65","\x67\x65\x74\x54\x65\x72\x6D\x69\x6E\x61\x6C","\x67\x65\x74\x45\x64\x67\x65\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E\x45\x72\x72\x6F\x72","\x67\x65\x74\x43\x65\x6C\x6C\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E\x45\x72\x72\x6F\x72","\x76\x61\x6C\x69\x64\x61\x74\x65\x43\x65\x6C\x6C","\x67\x65\x74\x50\x61\x72\x65\x6E\x74","\x67\x65\x74\x44\x65\x66\x61\x75\x6C\x74\x50\x61\x72\x65\x6E\x74","\x63\x68\x69\x6C\x64\x72\x65\x6E","\x70\x75\x62\x6C\x69\x73\x68","\x50\x75\x62\x6C\x69\x73\x68\x65\x64\x20\x61\x74\x20","\x45\x72\x72\x6F\x72\x20\x70\x75\x62\x6C\x69\x73\x68\x69\x6E\x67\x20\x70\x72\x6F\x6A\x65\x63\x74\x3A\x20","\x45\x72\x72\x6F\x72\x20\x70\x75\x62\x6C\x69\x73\x68\x69\x6E\x67\x20\x70\x72\x6F\x6A\x65\x63\x74","\x45\x72\x72\x6F\x72\x20\x70\x75\x62\x6C\x69\x73\x68\x69\x6E\x67\x20\x66\x69\x6C\x65","\x56\x61\x72\x69\x61\x62\x6C\x65\x20\x63\x72\x65\x61\x74\x65\x64\x20\x61\x74\x20","\x63\x72\x65\x61\x74\x65\x64\x41\x74","\x45\x72\x72\x6F\x72\x20\x63\x72\x65\x61\x74\x69\x6E\x67\x20\x76\x61\x72\x69\x61\x62\x6C\x65\x3A\x20","\x45\x72\x72\x6F\x72\x20\x63\x72\x65\x61\x74\x69\x6E\x67\x20\x76\x61\x72\x69\x61\x62\x6C\x65","\x6E\x61\x6D\x65\x3D","\x26\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x3D","\x67\x65\x74\x55\x72\x6C","\x70\x61\x74\x68\x6E\x61\x6D\x65","\x6C\x6F\x63\x61\x74\x69\x6F\x6E","\x3F","\x26","\x3D","\x75\x6E\x64\x6F","\x72\x65\x64\x6F","\x63\x61\x6E\x55\x6E\x64\x6F","\x63\x61\x6E\x52\x65\x64\x6F","\x69\x73\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x45\x6D\x70\x74\x79","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73","\x64\x65\x6C\x65\x74\x65","\x64\x75\x70\x6C\x69\x63\x61\x74\x65","\x62\x6F\x6C\x64","\x69\x74\x61\x6C\x69\x63","\x75\x6E\x64\x65\x72\x6C\x69\x6E\x65","\x74\x6F\x46\x72\x6F\x6E\x74","\x74\x6F\x42\x61\x63\x6B","\x64\x61\x73\x68\x65\x64","\x72\x6F\x75\x6E\x64\x65\x64","\x73\x68\x61\x64\x6F\x77","\x74\x69\x6C\x74","\x61\x75\x74\x6F\x73\x69\x7A\x65","\x63\x75\x72\x76\x65\x64","\x72\x6F\x74\x61\x74\x69\x6F\x6E","\x77\x6F\x72\x64\x57\x72\x61\x70","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x6F\x75\x6E\x74","\x67\x72\x6F\x75\x70","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C","\x75\x6E\x67\x72\x6F\x75\x70","\x72\x65\x6D\x6F\x76\x65\x46\x72\x6F\x6D\x47\x72\x6F\x75\x70","\x66\x6F\x6E\x74\x46\x61\x6D\x69\x6C\x79","\x66\x6F\x6E\x74\x53\x69\x7A\x65","\x61\x6C\x69\x67\x6E\x6D\x65\x6E\x74","\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x66\x6F\x72\x6D\x61\x74","\x61\x72\x72\x61\x6E\x67\x65","\x6C\x69\x6E\x65\x77\x69\x64\x74\x68","\x73\x70\x61\x63\x69\x6E\x67","\x6C\x69\x6E\x65","\x6C\x69\x6E\x65\x65\x6E\x64","\x6C\x69\x6E\x65\x73\x74\x61\x72\x74","\x73\x65\x74\x41\x73\x44\x65\x66\x61\x75\x6C\x74\x45\x64\x67\x65","\x61\x6C\x69\x67\x6E","\x67\x65\x74\x53\x74\x61\x74\x65","\x69\x73\x4C\x6F\x6F\x70","\x64\x69\x72\x65\x63\x74\x69\x6F\x6E","\x66\x6F\x6C\x64\x69\x6E\x67\x45\x6E\x61\x62\x6C\x65\x64","\x63\x75\x72\x72\x65\x6E\x74\x52\x6F\x6F\x74","\x6E\x61\x76\x69\x67\x61\x74\x69\x6F\x6E","\x68\x6F\x6D\x65","\x65\x78\x69\x74\x47\x72\x6F\x75\x70","\x65\x6E\x74\x65\x72\x47\x72\x6F\x75\x70","\x65\x78\x70\x61\x6E\x64","\x63\x6F\x6C\x6C\x61\x70\x73\x65","\x65\x64\x69\x74\x4C\x69\x6E\x6B","\x67\x65\x74\x4C\x69\x6E\x6B\x46\x6F\x72\x43\x65\x6C\x6C","\x6F\x70\x65\x6E\x4C\x69\x6E\x6B","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x4D\x6F\x64\x65\x6C","\x63\x6C\x69\x65\x6E\x74\x57\x69\x64\x74\x68","\x63\x6C\x69\x65\x6E\x74\x48\x65\x69\x67\x68\x74","\x6D\x69\x6E","\x6D\x61\x78","\x68\x65\x69\x67\x68\x74","\x70\x78","\x74\x6F\x70","\x49\x53\x5F\x51\x55\x49\x52\x4B\x53","\x77\x69\x64\x74\x68","\x62\x6F\x74\x74\x6F\x6D","\x6C\x65\x66\x74","\x64\x69\x73\x70\x6C\x61\x79","\x6E\x6F\x6E\x65","\x68\x73\x70\x6C\x69\x74","\x76\x73\x70\x6C\x69\x74","\x67\x65\x4D\x65\x6E\x75\x62\x61\x72\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x63\x72\x65\x61\x74\x65\x44\x69\x76","\x67\x65\x54\x6F\x6F\x6C\x62\x61\x72\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x67\x65\x53\x69\x64\x65\x62\x61\x72\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x67\x65\x4F\x75\x74\x6C\x69\x6E\x65\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x67\x65\x44\x69\x61\x67\x72\x61\x6D\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x67\x65\x46\x6F\x6F\x74\x65\x72\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x67\x65\x48\x73\x70\x6C\x69\x74","\x67\x65\x56\x73\x70\x6C\x69\x74","\x30\x70\x78","\x72\x69\x67\x68\x74","\x6D\x65\x6E\x75\x62\x61\x72","\x67\x65\x4D\x65\x6E\x75\x62\x61\x72","\x63\x72\x65\x61\x74\x65\x4D\x65\x6E\x75\x62\x61\x72","\x61\x70\x70\x65\x6E\x64\x43\x68\x69\x6C\x64","\x74\x6F\x6F\x6C\x62\x61\x72","\x67\x65\x54\x6F\x6F\x6C\x62\x61\x72","\x63\x72\x65\x61\x74\x65\x54\x6F\x6F\x6C\x62\x61\x72","\x73\x69\x64\x65\x62\x61\x72","\x63\x72\x65\x61\x74\x65\x53\x69\x64\x65\x62\x61\x72","\x63\x72\x65\x61\x74\x65\x46\x6F\x6F\x74\x65\x72","\x73\x74\x61\x74\x75\x73\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x63\x72\x65\x61\x74\x65\x53\x74\x61\x74\x75\x73\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x73\x74\x61\x74\x75\x73\x43\x68\x61\x6E\x67\x65\x64","\x67\x65\x74\x53\x74\x61\x74\x75\x73","\x73\x65\x74\x53\x74\x61\x74\x75\x73\x54\x65\x78\x74","\x61\x64\x64\x53\x70\x6C\x69\x74\x48\x61\x6E\x64\x6C\x65\x72","\x61","\x63\x72\x65\x61\x74\x65\x45\x6C\x65\x6D\x65\x6E\x74","\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65","\x67\x65\x49\x74\x65\x6D\x20\x67\x65\x53\x74\x61\x74\x75\x73","\x69\x6E\x6E\x65\x72\x48\x54\x4D\x4C","\x67\x65\x46\x6F\x6F\x74\x65\x72","\x64\x69\x76","\x63\x72\x65\x61\x74\x65\x48\x65\x61\x64\x65\x72","\x63\x72\x65\x61\x74\x65\x46\x6F\x72\x6D","\x66\x6F\x72\x6D","\x67\x65\x74\x43\x6C\x69\x65\x6E\x74\x58","\x67\x65\x74\x43\x6C\x69\x65\x6E\x74\x59","\x78","\x79","\x6D\x6F\x75\x73\x65\x6D\x6F\x76\x65","\x74\x6F\x75\x63\x68\x6D\x6F\x76\x65","\x6D\x6F\x75\x73\x65\x75\x70","\x74\x6F\x75\x63\x68\x65\x6E\x64","\x68\x69\x64\x65\x44\x69\x61\x6C\x6F\x67","\x64\x69\x61\x6C\x6F\x67","\x49\x53\x5F\x56\x4D\x4C","\x63\x6C\x6F\x73\x65","\x73\x61\x76\x65\x46\x69\x6C\x65","\x67\x65\x74\x4F\x72\x43\x72\x65\x61\x74\x65\x46\x69\x6C\x65\x6E\x61\x6D\x65","\x70\x75\x62\x6C\x69\x73\x68\x46\x69\x6C\x65","\x65\x78\x65\x63\x75\x74\x65\x4C\x61\x79\x6F\x75\x74","\x61\x6E\x69\x6D\x61\x74\x65","\x62\x65\x67\x69\x6E\x55\x70\x64\x61\x74\x65","\x65\x78\x65\x63\x75\x74\x65","\x43\x61\x6D\x69\x6E\x6F","\x75\x73\x65\x72\x41\x67\x65\x6E\x74","\x65\x6E\x64\x55\x70\x64\x61\x74\x65","\x73\x74\x61\x72\x74\x41\x6E\x69\x6D\x61\x74\x69\x6F\x6E","\x69\x73\x43\x6F\x6E\x74\x72\x6F\x6C\x44\x6F\x77\x6E","\x49\x53\x5F\x4D\x41\x43","\x6D\x65\x74\x61\x4B\x65\x79","\x6D\x6F\x76\x65\x43\x65\x6C\x6C\x73","\x73\x63\x72\x6F\x6C\x6C\x43\x65\x6C\x6C\x54\x6F\x56\x69\x73\x69\x62\x6C\x65","\x65\x6E\x61\x62\x6C\x65\x64","\x66\x75\x6E\x63\x74","\x62\x69\x6E\x64\x43\x6F\x6E\x74\x72\x6F\x6C\x53\x68\x69\x66\x74\x4B\x65\x79","\x62\x69\x6E\x64\x43\x6F\x6E\x74\x72\x6F\x6C\x4B\x65\x79","\x62\x69\x6E\x64\x53\x68\x69\x66\x74\x4B\x65\x79","\x62\x69\x6E\x64\x4B\x65\x79","\x65\x73\x63\x61\x70\x65","\x65\x6E\x74\x65\x72","\x66\x6F\x6C\x64\x43\x65\x6C\x6C\x73","\x7A\x6F\x6F\x6D\x49\x6E","\x7A\x6F\x6F\x6D\x4F\x75\x74","\x73\x65\x6C\x65\x63\x74\x41\x6C\x6C","\x73\x65\x6C\x65\x63\x74\x56\x65\x72\x74\x69\x63\x65\x73","\x73\x65\x6C\x65\x63\x74\x45\x64\x67\x65\x73","\x65\x78\x70\x6F\x72\x74","\x63\x6F\x6E\x6E\x65\x63\x74","\x67\x72\x69\x64","\x61\x62\x6F\x75\x74","\x6D\x75\x73\x74\x68\x61\x76\x65","\x6F\x75\x74\x67\x6F\x69\x6E\x67\x65\x64\x67\x65","\x70\x75\x73\x68","\x69\x6E\x63\x6F\x6D\x69\x6E\x67\x65\x64\x67\x65"];EditorUi= function(_0x1365x1,_0x1365x2){this[_0xc44a[0]]= _0x1365x1|| new Editor();this[_0xc44a[1]]= _0x1365x2|| document[_0xc44a[3]](_0xc44a[2]);var _0x1365x3=_0x1365x1[_0xc44a[4]];var _0x1365x4=this;this[_0xc44a[1]][_0xc44a[6]][_0xc44a[5]]= _0xc44a[7]; new Image()[_0xc44a[8]]= mxPopupMenu[_0xc44a[10]][_0xc44a[9]];if(mxConnectionHandler[_0xc44a[10]][_0xc44a[11]]!= null){ new Image()[_0xc44a[8]]= mxConnectionHandler[_0xc44a[10]][_0xc44a[11]][_0xc44a[8]]};this[_0xc44a[12]]= new Actions(this);this[_0xc44a[13]]= new Menus(this);this[_0xc44a[14]]();this[_0xc44a[15]]();this[_0xc44a[16]]();var _0x1365x5=mxUtils[_0xc44a[20]](this,function(_0x1365x6){if(_0x1365x6== null){_0x1365x6= window[_0xc44a[17]]};if(this[_0xc44a[18]](_0x1365x6)){return true};return _0x1365x3[_0xc44a[19]]()});if(this[_0xc44a[1]]== document[_0xc44a[21]]){this[_0xc44a[23]][_0xc44a[22]]= _0x1365x5;this[_0xc44a[23]][_0xc44a[24]]= _0x1365x5;this[_0xc44a[25]][_0xc44a[22]]= _0x1365x5;this[_0xc44a[25]][_0xc44a[24]]= _0x1365x5;this[_0xc44a[26]][_0xc44a[22]]= _0x1365x5;this[_0xc44a[26]][_0xc44a[24]]= _0x1365x5;this[_0xc44a[27]][_0xc44a[22]]= _0x1365x5;this[_0xc44a[27]][_0xc44a[24]]= _0x1365x5;this[_0xc44a[28]][_0xc44a[22]]= _0x1365x5;this[_0xc44a[28]][_0xc44a[24]]= _0x1365x5};if(mxClient[_0xc44a[29]]&& ( typeof (document[_0xc44a[30]])=== _0xc44a[31]|| document[_0xc44a[30]]< 9)){mxEvent[_0xc44a[33]](this[_0xc44a[26]],_0xc44a[32],_0x1365x5);mxEvent[_0xc44a[33]](this[_0xc44a[27]],_0xc44a[32],_0x1365x5)}else {this[_0xc44a[26]][_0xc44a[34]]= _0x1365x5;this[_0xc44a[27]][_0xc44a[34]]= _0x1365x5};_0x1365x3[_0xc44a[35]](this[_0xc44a[26]]);_0x1365x3[_0xc44a[15]]();_0x1365x3[_0xc44a[1]][_0xc44a[38]](_0xc44a[36],_0xc44a[37]);_0x1365x3[_0xc44a[1]][_0xc44a[6]][_0xc44a[39]]= _0xc44a[40];_0x1365x3[_0xc44a[1]][_0xc44a[6]][_0xc44a[41]]= _0xc44a[42]+ _0x1365x1[_0xc44a[43]]+ _0xc44a[44];_0x1365x3[_0xc44a[1]][_0xc44a[6]][_0xc44a[45]]= _0xc44a[46];_0x1365x3[_0xc44a[1]][_0xc44a[47]]();var _0x1365x7=_0x1365x3[_0xc44a[48]];_0x1365x3[_0xc44a[48]]= function(_0x1365x8,_0x1365x9,_0x1365xa){if(_0x1365x8== mxEvent[_0xc44a[49]]){this[_0xc44a[1]][_0xc44a[47]]()};_0x1365x7[_0xc44a[50]](this,arguments)};this[_0xc44a[56]](_0x1365x3[_0xc44a[51]],[_0xc44a[52],_0xc44a[53],_0xc44a[54]],[[1,1],[1,1],[0,0]],[[0,0],[0,0],[1,_0xc44a[55]]]);this[_0xc44a[56]](_0x1365x3[_0xc44a[51]],[_0xc44a[57],_0xc44a[58],_0xc44a[59],_0xc44a[60],_0xc44a[61],_0xc44a[62],_0xc44a[63]],[[1,1],[0,0],[0,1],[0,1],[0,1],[1,1],[0,1]],[[1,_0xc44a[55]],[1,_0xc44a[55]],[1,_0xc44a[55]],[1,_0xc44a[55]],[1,_0xc44a[55]],[1,_0xc44a[55]],[1,_0xc44a[55]]]);this[_0xc44a[56]](_0x1365x3[_0xc44a[51]],[_0xc44a[64],_0xc44a[65]],[[1,1],[1,1]],[[1,_0xc44a[55]],[1,_0xc44a[55]]]);this[_0xc44a[56]](_0x1365x3[_0xc44a[51]],[_0xc44a[66],_0xc44a[67],_0xc44a[68],_0xc44a[69],_0xc44a[70],_0xc44a[71],_0xc44a[72],_0xc44a[73],_0xc44a[74],_0xc44a[75]],[[1,_0xc44a[55]],[1,1],[1,_0xc44a[55]],[1,1],[1,1],[1,1],[1,1],[1,1],[1,_0xc44a[55]],[1,_0xc44a[55]]],[[1,_0xc44a[55]],[1,_0xc44a[55]],[1,_0xc44a[55]],[1,_0xc44a[55]],[1,_0xc44a[55]],[1,_0xc44a[55]],[1,_0xc44a[55]],[1,_0xc44a[55]],[1,_0xc44a[55]],[1,_0xc44a[55]]]);this[_0xc44a[56]](_0x1365x3[_0xc44a[51]],[_0xc44a[76]],[[1,1]],[[1,_0xc44a[55]]]);this[_0xc44a[56]](_0x1365x3[_0xc44a[51]],[_0xc44a[77],_0xc44a[78],_0xc44a[79],_0xc44a[80]],[[1,1],[1,1],[1,1],[1,1]],[[1,_0xc44a[55]],[1,_0xc44a[55]],[1,_0xc44a[55]],[1,_0xc44a[55]]]);this[_0xc44a[56]](_0x1365x3[_0xc44a[51]],[_0xc44a[81],_0xc44a[82],_0xc44a[83],_0xc44a[84],_0xc44a[85]],[[0,0],[1,2],[1,2],[1,2],[1,_0xc44a[55]]],[[1,_0xc44a[55]],[1,_0xc44a[55]],[1,_0xc44a[55]],[1,_0xc44a[55]],[1,_0xc44a[55]]]);this[_0xc44a[56]](_0x1365x3[_0xc44a[51]],[_0xc44a[86],_0xc44a[87]],[[1,1],[1,1]],[[1,_0xc44a[55]],[1,_0xc44a[55]]]);this[_0xc44a[56]](_0x1365x3[_0xc44a[51]],[_0xc44a[88],_0xc44a[89],_0xc44a[90],_0xc44a[91],_0xc44a[92]],[[1,1],[1,1],[0,1],[0,0],[0,1]],[[1,_0xc44a[55]],[1,_0xc44a[55]],[1,_0xc44a[55]],[1,_0xc44a[55]],[1,_0xc44a[55]]]);_0x1365x3[_0xc44a[93]]= function(_0x1365x6,_0x1365xb){var _0x1365xc=[_0xc44a[66],_0xc44a[82],_0xc44a[83],_0xc44a[68],_0xc44a[74],_0xc44a[75],_0xc44a[85]];var _0x1365xd= new mxEventObject(mxEvent.DOUBLE_CLICK,_0xc44a[17],_0x1365x6,_0xc44a[94],_0x1365xb);this[_0xc44a[95]](_0x1365xd);if(this[_0xc44a[96]]()&& !mxEvent[_0xc44a[97]](_0x1365x6)&& !_0x1365xd[_0xc44a[97]]()){if(this[_0xc44a[99]]()[_0xc44a[98]](_0x1365xb)){if(_0x1365xc[_0xc44a[103]](_0x1365xb[_0xc44a[102]][_0xc44a[101]][_0xc44a[100]])>= 0){this[_0xc44a[104]](_0x1365xb)}}else {if(this[_0xc44a[99]]()[_0xc44a[105]](_0x1365xb)){_0x1365x4[_0xc44a[106]]( new GeneralDialog(_0x1365x4,_0x1365xb)[_0xc44a[1]],320,280,true,true)}};_0x1365xd[_0xc44a[107]]()}};_0x1365x3[_0xc44a[109]][_0xc44a[108]]= true;_0x1365x3[_0xc44a[109]][_0xc44a[110]]= mxUtils[_0xc44a[20]](this,function(_0x1365xe,_0x1365xb,_0x1365x6){this[_0xc44a[13]][_0xc44a[111]](_0x1365xe,_0x1365xb,_0x1365x6)});_0x1365x1[_0xc44a[113]][_0xc44a[35]](this[_0xc44a[112]]);mxEvent[_0xc44a[115]](document,mxUtils[_0xc44a[20]](this,function(_0x1365x6){_0x1365x3[_0xc44a[109]][_0xc44a[114]]()}));if(mxClient[_0xc44a[116]]){mxEvent[_0xc44a[33]](_0x1365x3[_0xc44a[1]],_0xc44a[117],mxUtils[_0xc44a[20]](this,function(_0x1365x6){_0x1365x3[_0xc44a[122]][_0xc44a[121]]()[_0xc44a[38]](_0xc44a[118],_0xc44a[119]+ _0x1365x6[_0xc44a[120]]+ _0xc44a[44]);_0x1365x3[_0xc44a[122]][_0xc44a[124]]()[_0xc44a[6]][_0xc44a[123]]= _0xc44a[7]}));mxEvent[_0xc44a[33]](_0x1365x3[_0xc44a[1]],_0xc44a[125],mxUtils[_0xc44a[20]](this,function(_0x1365x6){_0x1365x3[_0xc44a[122]][_0xc44a[121]]()[_0xc44a[126]](_0xc44a[118]);_0x1365x3[_0xc44a[127]]= true;_0x1365x3[_0xc44a[128]](_0x1365x6[_0xc44a[120]]);_0x1365x3[_0xc44a[122]][_0xc44a[124]]()[_0xc44a[6]][_0xc44a[123]]= _0xc44a[129]}))};var _0x1365xf=this[_0xc44a[130]](_0x1365x1);this[_0xc44a[131]]= function(){return _0x1365xf};mxEvent[_0xc44a[33]](window,_0xc44a[132],mxUtils[_0xc44a[20]](this,function(){this[_0xc44a[15]]();_0x1365x3[_0xc44a[133]]();this[_0xc44a[0]][_0xc44a[113]][_0xc44a[134]](false);this[_0xc44a[0]][_0xc44a[113]][_0xc44a[113]][_0xc44a[133]]()}));this[_0xc44a[35]]();this[_0xc44a[135]]()};EditorUi[_0xc44a[10]][_0xc44a[136]]= (mxClient[_0xc44a[116]])?16:8;EditorUi[_0xc44a[10]][_0xc44a[137]]= 33;EditorUi[_0xc44a[10]][_0xc44a[138]]= 36;EditorUi[_0xc44a[10]][_0xc44a[139]]= 28;EditorUi[_0xc44a[10]][_0xc44a[140]]= 204;EditorUi[_0xc44a[10]][_0xc44a[141]]= 190;EditorUi[_0xc44a[10]][_0xc44a[35]]= function(){this[_0xc44a[142]]();this[_0xc44a[143]]();var _0x1365x10=this[_0xc44a[12]][_0xc44a[145]](_0xc44a[144]);var _0x1365x11=function(){_0x1365x10[_0xc44a[147]](!mxClipboard[_0xc44a[146]]())};var _0x1365x12=mxClipboard[_0xc44a[148]];mxClipboard[_0xc44a[148]]= function(){_0x1365x12[_0xc44a[50]](this,arguments);_0x1365x11()};var _0x1365x13=mxClipboard[_0xc44a[149]];mxClipboard[_0xc44a[149]]= function(){_0x1365x13[_0xc44a[50]](this,arguments);_0x1365x11()}};EditorUi[_0xc44a[10]][_0xc44a[18]]= function(_0x1365x6){return false};EditorUi[_0xc44a[10]][_0xc44a[135]]= function(){try{if(window[_0xc44a[150]]!= null&& window[_0xc44a[150]][_0xc44a[151]]!= null){window[_0xc44a[150]][_0xc44a[151]][_0xc44a[163]](mxUtils[_0xc44a[20]](this,function(_0x1365x14,_0x1365x15){try{var _0x1365x16=mxUtils[_0xc44a[152]](_0x1365x14);this[_0xc44a[0]][_0xc44a[154]](_0x1365x16[_0xc44a[153]]);this[_0xc44a[0]][_0xc44a[155]]= false;this[_0xc44a[0]][_0xc44a[157]][_0xc44a[156]]();if(_0x1365x15!= null){this[_0xc44a[0]][_0xc44a[158]]= _0x1365x15}}catch(e){mxUtils[_0xc44a[162]](mxResources[_0xc44a[145]](_0xc44a[159])+ _0xc44a[160]+ e[_0xc44a[161]])}}))}}catch(e){}};EditorUi[_0xc44a[10]][_0xc44a[164]]= function(_0x1365x14,_0x1365x15,_0x1365x17){try{var _0x1365x16=mxUtils[_0xc44a[152]](_0x1365x14);this[_0xc44a[0]][_0xc44a[154]](_0x1365x16[_0xc44a[153]]);this[_0xc44a[0]][_0xc44a[155]]= false;this[_0xc44a[0]][_0xc44a[157]][_0xc44a[156]]();if(_0x1365x15!= null){this[_0xc44a[0]][_0xc44a[158]]= _0x1365x15};if(_0x1365x17!= null){this[_0xc44a[0]][_0xc44a[165]]= _0x1365x17}}catch(e){mxUtils[_0xc44a[162]](mxResources[_0xc44a[145]](_0xc44a[159])+ _0xc44a[160]+ e[_0xc44a[161]])}};EditorUi[_0xc44a[10]][_0xc44a[166]]= function(_0x1365x18){var _0x1365x1=this[_0xc44a[0]];if(_0x1365x18!= null){var _0x1365x14=mxUtils[_0xc44a[168]](this[_0xc44a[0]][_0xc44a[167]]());try{if(useLocalStorage){if(localStorage[_0xc44a[169]](_0x1365x18)!= null&& !mxUtils[_0xc44a[171]](mxResources[_0xc44a[145]](_0xc44a[170],[_0x1365x18]))){return};localStorage[_0xc44a[172]](_0x1365x18,_0x1365x14);this[_0xc44a[0]][_0xc44a[175]](mxResources[_0xc44a[145]](_0xc44a[173])+ _0xc44a[174]+ new Date())}else {console[_0xc44a[177]](_0x1365x14[_0xc44a[176]]);console[_0xc44a[177]](MAX_REQUEST_SIZE);if(_0x1365x14[_0xc44a[176]]< MAX_REQUEST_SIZE){_0x1365x14= encodeURIComponent(_0x1365x14);_0x1365x18= encodeURIComponent(_0x1365x18);var _0x1365x19= new XMLHttpRequest();_0x1365x19[_0xc44a[135]](_0xc44a[178],SAVE_URL,true);_0x1365x19[_0xc44a[181]](_0xc44a[179],_0xc44a[180]);_0x1365x19[_0xc44a[181]](_0xc44a[182],_0xc44a[183]+ _0x1365x1[_0xc44a[165]][_0xc44a[184]]);_0x1365x19[_0xc44a[185]]= function(_0x1365x1a){if(_0x1365x19[_0xc44a[186]]=== 4){if(_0x1365x19[_0xc44a[187]]=== 201){_0x1365x1[_0xc44a[175]](_0xc44a[188]+ JSON[_0xc44a[191]](_0x1365x19[_0xc44a[190]])[_0xc44a[189]]+ _0xc44a[192]);setTimeout(function(){window[_0xc44a[135]](_0xc44a[193]+ JSON[_0xc44a[191]](_0x1365x19[_0xc44a[190]])[_0xc44a[194]],_0xc44a[195])},1500)}else {try{var _0x1365x1b=JSON[_0xc44a[191]](_0x1365x19[_0xc44a[190]]);_0x1365x1[_0xc44a[175]](_0xc44a[196]+ _0x1365x1b[_0xc44a[197]][0][_0xc44a[161]])}catch(_0x1365x1a){_0x1365x1[_0xc44a[175]](_0xc44a[198]+ _0xc44a[199]+ _0x1365x19[_0xc44a[187]]+ _0xc44a[174]+ _0x1365x19[_0xc44a[200]]+ _0xc44a[44])}}}};_0x1365x19[_0xc44a[201]]= function(_0x1365x1a){mxUtils[_0xc44a[162]](_0x1365x19[_0xc44a[200]])};_0x1365x19[_0xc44a[203]](_0xc44a[202]+ _0x1365x18)}else {mxUtils[_0xc44a[162]](mxResources[_0xc44a[145]](_0xc44a[204]));mxUtils[_0xc44a[205]](_0x1365x14);return}};this[_0xc44a[0]][_0xc44a[158]]= _0x1365x18;this[_0xc44a[0]][_0xc44a[155]]= false}catch(e){this[_0xc44a[0]][_0xc44a[175]](_0xc44a[198])}}else {this[_0xc44a[0]][_0xc44a[175]](_0xc44a[198])}};EditorUi[_0xc44a[10]][_0xc44a[206]]= function(_0x1365x18){var _0x1365x1=this[_0xc44a[0]];if(_0x1365x18!= null){var _0x1365x14=mxUtils[_0xc44a[168]](this[_0xc44a[0]][_0xc44a[167]]());try{if(useLocalStorage){if(localStorage[_0xc44a[169]](_0x1365x18)!= null&& !mxUtils[_0xc44a[171]](mxResources[_0xc44a[145]](_0xc44a[170],[_0x1365x18]))){return};localStorage[_0xc44a[172]](_0x1365x18,_0x1365x14);this[_0xc44a[0]][_0xc44a[175]](mxResources[_0xc44a[145]](_0xc44a[173])+ _0xc44a[174]+ new Date())}else {console[_0xc44a[177]](_0x1365x14[_0xc44a[176]]);console[_0xc44a[177]](MAX_REQUEST_SIZE);if(_0x1365x14[_0xc44a[176]]< MAX_REQUEST_SIZE){_0x1365x14= encodeURIComponent(_0x1365x14);var _0x1365x19= new XMLHttpRequest();_0x1365x19[_0xc44a[135]](_0xc44a[207],SAVE_URL+ this[_0xc44a[0]][_0xc44a[165]][_0xc44a[194]],true);_0x1365x19[_0xc44a[181]](_0xc44a[179],_0xc44a[180]);_0x1365x19[_0xc44a[181]](_0xc44a[182],_0xc44a[183]+ _0x1365x1[_0xc44a[165]][_0xc44a[184]]);_0x1365x19[_0xc44a[185]]= function(_0x1365x1a){if(_0x1365x19[_0xc44a[186]]=== 4){if(_0x1365x19[_0xc44a[187]]=== 200){_0x1365x1[_0xc44a[175]](_0xc44a[208]+ JSON[_0xc44a[191]](_0x1365x19[_0xc44a[190]])[_0xc44a[209]]+ _0xc44a[199]+ _0x1365x19[_0xc44a[187]]+ _0xc44a[174]+ _0x1365x19[_0xc44a[200]]+ _0xc44a[44])}else {try{var _0x1365x1b=JSON[_0xc44a[191]](_0x1365x19[_0xc44a[190]]);_0x1365x1[_0xc44a[175]](_0xc44a[210]+ _0x1365x1b[_0xc44a[197]][0][_0xc44a[161]])}catch(_0x1365x1a){_0x1365x1[_0xc44a[175]](_0xc44a[211]+ _0xc44a[199]+ _0x1365x19[_0xc44a[187]]+ _0xc44a[174]+ _0x1365x19[_0xc44a[200]]+ _0xc44a[44])}}}};_0x1365x19[_0xc44a[201]]= function(_0x1365x1a){mxUtils[_0xc44a[162]](_0x1365x19[_0xc44a[200]])};_0x1365x19[_0xc44a[203]](_0xc44a[212]+ _0x1365x14)}else {mxUtils[_0xc44a[162]](mxResources[_0xc44a[145]](_0xc44a[204]));mxUtils[_0xc44a[205]](_0x1365x14);return}};this[_0xc44a[0]][_0xc44a[158]]= _0x1365x18;this[_0xc44a[0]][_0xc44a[155]]= false}catch(e){this[_0xc44a[0]][_0xc44a[175]](_0xc44a[213])}}else {this[_0xc44a[0]][_0xc44a[175]](_0xc44a[213])}};EditorUi[_0xc44a[10]][_0xc44a[214]]= function(_0x1365x1c){var _0x1365x1=this[_0xc44a[0]];if(_0x1365x1c!== null){var _0x1365x19= new XMLHttpRequest();_0x1365x19[_0xc44a[135]](_0xc44a[207],SAVE_URL+ this[_0xc44a[0]][_0xc44a[165]][_0xc44a[194]],true);_0x1365x19[_0xc44a[181]](_0xc44a[179],_0xc44a[180]);_0x1365x19[_0xc44a[181]](_0xc44a[182],_0xc44a[183]+ _0x1365x1[_0xc44a[165]][_0xc44a[184]]);_0x1365x19[_0xc44a[185]]= function(_0x1365x1a){if(_0x1365x19[_0xc44a[186]]=== 4){if(_0x1365x19[_0xc44a[187]]=== 200){_0x1365x1[_0xc44a[175]](_0xc44a[208]+ JSON[_0xc44a[191]](_0x1365x19[_0xc44a[190]])[_0xc44a[209]]+ _0xc44a[199]+ _0x1365x19[_0xc44a[187]]+ _0xc44a[174]+ _0x1365x19[_0xc44a[200]]+ _0xc44a[44]);_0x1365x1[_0xc44a[165]][_0xc44a[214]]= _0x1365x1c}else {try{var _0x1365x1b=JSON[_0xc44a[191]](_0x1365x19[_0xc44a[190]]);_0x1365x1[_0xc44a[175]](_0xc44a[215]+ _0x1365x1b[_0xc44a[197]][0][_0xc44a[161]])}catch(_0x1365x1a){_0x1365x1[_0xc44a[175]](_0xc44a[216]+ _0xc44a[199]+ _0x1365x19[_0xc44a[187]]+ _0xc44a[174]+ _0x1365x19[_0xc44a[200]]+ _0xc44a[44])}}}};_0x1365x19[_0xc44a[201]]= function(_0x1365x1a){mxUtils[_0xc44a[162]](_0x1365x19[_0xc44a[200]])};_0x1365x19[_0xc44a[203]](_0xc44a[217]+ _0x1365x1c)}else {this[_0xc44a[0]][_0xc44a[175]](_0xc44a[216])}};EditorUi[_0xc44a[10]][_0xc44a[218]]= function(_0x1365x18){var _0x1365x1=this[_0xc44a[0]];if(_0x1365x18!= null){var _0x1365x14=mxUtils[_0xc44a[168]](this[_0xc44a[0]][_0xc44a[167]]());try{if(useLocalStorage){if(localStorage[_0xc44a[169]](_0x1365x18)!= null&& !mxUtils[_0xc44a[171]](mxResources[_0xc44a[145]](_0xc44a[170],[_0x1365x18]))){return};localStorage[_0xc44a[172]](_0x1365x18,_0x1365x14);this[_0xc44a[0]][_0xc44a[175]](mxResources[_0xc44a[145]](_0xc44a[173])+ _0xc44a[174]+ new Date())}else {console[_0xc44a[177]](_0x1365x14[_0xc44a[176]]);console[_0xc44a[177]](MAX_REQUEST_SIZE);if(_0x1365x14[_0xc44a[176]]< MAX_REQUEST_SIZE){_0x1365x14= encodeURIComponent(_0x1365x14);_0x1365x18= encodeURIComponent(_0x1365x18);var _0x1365x19= new XMLHttpRequest();_0x1365x19[_0xc44a[135]](_0xc44a[178],SAVE_URL,true);_0x1365x19[_0xc44a[181]](_0xc44a[179],_0xc44a[180]);_0x1365x19[_0xc44a[181]](_0xc44a[182],_0xc44a[183]+ _0x1365x1[_0xc44a[165]][_0xc44a[184]]);_0x1365x19[_0xc44a[185]]= function(_0x1365x1a){if(_0x1365x19[_0xc44a[186]]=== 4){if(_0x1365x19[_0xc44a[187]]=== 201){_0x1365x1[_0xc44a[175]](_0xc44a[188]+ JSON[_0xc44a[191]](_0x1365x19[_0xc44a[190]])[_0xc44a[189]]+ _0xc44a[192]);setTimeout(function(){window[_0xc44a[135]](_0xc44a[193]+ JSON[_0xc44a[191]](_0x1365x19[_0xc44a[190]])[_0xc44a[194]],_0xc44a[195])},1500)}else {try{var _0x1365x1b=JSON[_0xc44a[191]](_0x1365x19[_0xc44a[190]]);_0x1365x1[_0xc44a[175]](_0xc44a[219]+ _0x1365x1b[_0xc44a[197]][0][_0xc44a[161]])}catch(_0x1365x1a){_0x1365x1[_0xc44a[175]](_0xc44a[220]+ _0xc44a[199]+ _0x1365x19[_0xc44a[187]]+ _0xc44a[174]+ _0x1365x19[_0xc44a[200]]+ _0xc44a[44])}}}};_0x1365x19[_0xc44a[201]]= function(_0x1365x1a){mxUtils[_0xc44a[162]](_0x1365x19[_0xc44a[200]])};_0x1365x19[_0xc44a[203]](_0xc44a[221]+ _0x1365x18+ _0xc44a[222]+ _0x1365x14+ _0xc44a[223]+ _0x1365x14)}else {mxUtils[_0xc44a[162]](mxResources[_0xc44a[145]](_0xc44a[204]));mxUtils[_0xc44a[205]](_0x1365x14);return}};this[_0xc44a[0]][_0xc44a[158]]= _0x1365x18;this[_0xc44a[0]][_0xc44a[155]]= false}catch(e){this[_0xc44a[0]][_0xc44a[175]](_0xc44a[213])}}else {this[_0xc44a[0]][_0xc44a[175]](_0xc44a[213])}};EditorUi[_0xc44a[10]][_0xc44a[224]]= function(_0x1365x1d,_0x1365x1e){var _0x1365x3=this[_0xc44a[0]][_0xc44a[4]];for(var _0x1365x1d=_0x1365x1d!= null?_0x1365x1d:_0x1365x3[_0xc44a[226]][_0xc44a[225]](),_0x1365x1e=_0x1365x1e!= null?_0x1365x1e:{},_0x1365x1f=true,_0x1365x20=_0x1365x3[_0xc44a[226]][_0xc44a[227]](_0x1365x1d),_0x1365x1a=0;_0x1365x1a< _0x1365x20;_0x1365x1a++){var _0x1365x21=_0x1365x3[_0xc44a[226]][_0xc44a[228]](_0x1365x1d,_0x1365x1a),_0x1365x22=_0x1365x1e;_0x1365x3[_0xc44a[229]](_0x1365x21)&& (_0x1365x22= {});_0x1365x22= this[_0xc44a[224]](_0x1365x21,_0x1365x22);_0x1365x22!= null?_0x1365x3[_0xc44a[231]](_0x1365x21,_0x1365x22[_0xc44a[170]](/\n/g,_0xc44a[230])):_0x1365x3[_0xc44a[231]](_0x1365x21,null);_0x1365x1f= _0x1365x1f&& _0x1365x22== null};_0x1365x20= _0xc44a[232];if(_0x1365x3[_0xc44a[226]][_0xc44a[105]](_0x1365x1d)){switch(_0x1365x1d[_0xc44a[101]][_0xc44a[291]]){case _0xc44a[52]:_0x1365x20= this[_0xc44a[233]](_0xc44a[52])?_0xc44a[232]:_0xc44a[234]+ _0xc44a[235];break;case _0xc44a[53]:_0x1365x20= this[_0xc44a[233]](_0xc44a[53])?_0xc44a[232]:_0xc44a[236]+ _0xc44a[235];break;case _0xc44a[67]:_0x1365x20= (_0x1365x1d[_0xc44a[101]][_0xc44a[238]](_0xc44a[237])> 0)?_0xc44a[232]:mxResources[_0xc44a[145]](_0xc44a[239])+ _0xc44a[235];break;case _0xc44a[66]:;case _0xc44a[68]:_0x1365x20= (_0x1365x1d[_0xc44a[101]][_0xc44a[238]](_0xc44a[237])> 0)?_0xc44a[232]:mxResources[_0xc44a[145]](_0xc44a[239])+ _0xc44a[235];_0x1365x20+= (_0x1365x1d[_0xc44a[101]][_0xc44a[238]](_0xc44a[240])> 0)?_0xc44a[232]:mxResources[_0xc44a[145]](_0xc44a[241])+ _0xc44a[235];break;case _0xc44a[74]:_0x1365x20= (_0x1365x1d[_0xc44a[101]][_0xc44a[238]](_0xc44a[237])> 0)?_0xc44a[232]:mxResources[_0xc44a[145]](_0xc44a[239])+ _0xc44a[235];_0x1365x20+= (_0x1365x1d[_0xc44a[101]][_0xc44a[238]](_0xc44a[242])> 0)?_0xc44a[232]:mxResources[_0xc44a[145]](_0xc44a[243])+ _0xc44a[235];_0x1365x20+= (_0x1365x1d[_0xc44a[101]][_0xc44a[238]](_0xc44a[244])> 0)?_0xc44a[232]:mxResources[_0xc44a[145]](_0xc44a[245])+ _0xc44a[235];_0x1365x20+= (_0x1365x1d[_0xc44a[101]][_0xc44a[238]](_0xc44a[246])> 0)?_0xc44a[232]:mxResources[_0xc44a[145]](_0xc44a[241])+ _0xc44a[235];case _0xc44a[75]:_0x1365x20= (_0x1365x1d[_0xc44a[101]][_0xc44a[238]](_0xc44a[237])> 0)?_0xc44a[232]:mxResources[_0xc44a[145]](_0xc44a[239])+ _0xc44a[235];_0x1365x20+= (_0x1365x1d[_0xc44a[101]][_0xc44a[238]](_0xc44a[242])> 0)?_0xc44a[232]:mxResources[_0xc44a[145]](_0xc44a[243])+ _0xc44a[235];_0x1365x20+= (_0x1365x1d[_0xc44a[101]][_0xc44a[238]](_0xc44a[244])> 0)?_0xc44a[232]:mxResources[_0xc44a[145]](_0xc44a[245])+ _0xc44a[235];_0x1365x20+= (_0x1365x1d[_0xc44a[101]][_0xc44a[238]](_0xc44a[246])> 0)?_0xc44a[232]:mxResources[_0xc44a[145]](_0xc44a[241])+ _0xc44a[235];_0x1365x20+= (_0x1365x1d[_0xc44a[101]][_0xc44a[238]](_0xc44a[247])>= 0)?_0xc44a[232]:mxResources[_0xc44a[145]](_0xc44a[248])+ _0xc44a[235];break;case _0xc44a[85]:_0x1365x20= (_0x1365x1d[_0xc44a[101]][_0xc44a[238]](_0xc44a[249])!== _0xc44a[232])?_0xc44a[232]:mxResources[_0xc44a[145]](_0xc44a[243])+ _0xc44a[235];break;case _0xc44a[77]:_0x1365x20= (_0x1365x1d[_0xc44a[101]][_0xc44a[238]](_0xc44a[250])> 0)?_0xc44a[232]:mxResources[_0xc44a[145]](_0xc44a[251])+ _0xc44a[235];break;case _0xc44a[60]:_0x1365x20= (_0x1365x1d[_0xc44a[101]][_0xc44a[238]](_0xc44a[252])!== _0xc44a[253])?_0xc44a[232]:mxResources[_0xc44a[145]](_0xc44a[254])+ _0xc44a[235];break;case _0xc44a[64]:;case _0xc44a[65]:_0x1365x20= (_0x1365x1d[_0xc44a[101]][_0xc44a[238]](_0xc44a[242])> 0)?_0xc44a[232]:mxResources[_0xc44a[145]](_0xc44a[243])+ _0xc44a[235];break;case _0xc44a[81]:_0x1365x20= (_0x1365x1d[_0xc44a[101]][_0xc44a[238]](_0xc44a[255])!== _0xc44a[232])?_0xc44a[232]:mxResources[_0xc44a[145]](_0xc44a[256])+ _0xc44a[235];break;case _0xc44a[89]:;case _0xc44a[90]:_0x1365x20= (_0x1365x1d[_0xc44a[101]][_0xc44a[238]](_0xc44a[257])!== _0xc44a[232])?_0xc44a[232]:mxResources[_0xc44a[145]](_0xc44a[258])+ _0xc44a[235];break;case _0xc44a[82]:_0x1365x20= (_0x1365x1d[_0xc44a[101]][_0xc44a[238]](_0xc44a[259])!== _0xc44a[232])?_0xc44a[232]:mxResources[_0xc44a[145]](_0xc44a[260])+ _0xc44a[235];break;case _0xc44a[69]:_0x1365x20= (_0x1365x1d[_0xc44a[101]][_0xc44a[238]](_0xc44a[261])!== _0xc44a[232])?_0xc44a[232]:mxResources[_0xc44a[145]](_0xc44a[262])+ _0xc44a[235];break;case _0xc44a[70]:_0x1365x20= (_0x1365x1d[_0xc44a[101]][_0xc44a[238]](_0xc44a[263])!== _0xc44a[232])?_0xc44a[232]:mxResources[_0xc44a[145]](_0xc44a[264])+ _0xc44a[235];break;case _0xc44a[71]:_0x1365x20= (_0x1365x1d[_0xc44a[101]][_0xc44a[238]](_0xc44a[265])!== _0xc44a[232])?_0xc44a[232]:mxResources[_0xc44a[145]](_0xc44a[266])+ _0xc44a[235];break;case _0xc44a[76]:_0x1365x20= (_0x1365x1d[_0xc44a[101]][_0xc44a[238]](_0xc44a[267])!== _0xc44a[232])?_0xc44a[232]:mxResources[_0xc44a[145]](_0xc44a[268])+ _0xc44a[235];break;case _0xc44a[87]:_0x1365x20= (_0x1365x1d[_0xc44a[101]][_0xc44a[238]](_0xc44a[269])!== _0xc44a[232])?_0xc44a[232]:mxResources[_0xc44a[145]](_0xc44a[270])+ _0xc44a[235];break;case _0xc44a[60]:_0x1365x20= (_0x1365x1d[_0xc44a[101]][_0xc44a[238]](_0xc44a[271])!== _0xc44a[232])?_0xc44a[232]:mxResources[_0xc44a[145]](_0xc44a[272])+ _0xc44a[235];break;case _0xc44a[59]:_0x1365x20= (_0x1365x1d[_0xc44a[101]][_0xc44a[238]](_0xc44a[273])> 0)?_0xc44a[232]:mxResources[_0xc44a[145]](_0xc44a[272])+ _0xc44a[235];break;case _0xc44a[61]:_0x1365x20= (_0x1365x1d[_0xc44a[101]][_0xc44a[238]](_0xc44a[274])!== _0xc44a[253])?_0xc44a[232]:mxResources[_0xc44a[145]](_0xc44a[275])+ _0xc44a[235];break;case _0xc44a[63]:_0x1365x20= (_0x1365x1d[_0xc44a[101]][_0xc44a[238]](_0xc44a[276])> 0)?_0xc44a[232]:mxResources[_0xc44a[145]](_0xc44a[277])+ _0xc44a[235];break;case _0xc44a[83]:_0x1365x20= (_0x1365x1d[_0xc44a[101]][_0xc44a[238]](_0xc44a[278])> 0)?_0xc44a[232]:mxResources[_0xc44a[145]](_0xc44a[279])+ _0xc44a[235];break;case _0xc44a[84]:_0x1365x20= (_0x1365x1d[_0xc44a[101]][_0xc44a[238]](_0xc44a[278])!= _0xc44a[232])?_0xc44a[232]:mxResources[_0xc44a[145]](_0xc44a[279])+ _0xc44a[235];break;case _0xc44a[62]:_0x1365x20= (_0x1365x1d[_0xc44a[101]][_0xc44a[238]](_0xc44a[280])!== _0xc44a[232])?_0xc44a[232]:mxResources[_0xc44a[145]](_0xc44a[281])+ _0xc44a[235];break;case _0xc44a[91]:_0x1365x20= (_0x1365x1d[_0xc44a[101]][_0xc44a[238]](_0xc44a[282])> 0)?_0xc44a[232]:mxResources[_0xc44a[145]](_0xc44a[283])+ _0xc44a[235];break;case _0xc44a[79]:_0x1365x20= (_0x1365x1d[_0xc44a[101]][_0xc44a[238]](_0xc44a[284])> 0)?_0xc44a[232]:mxResources[_0xc44a[145]](_0xc44a[285])+ _0xc44a[235];_0x1365x20+= (_0x1365x1d[_0xc44a[101]][_0xc44a[238]](_0xc44a[286])!== _0xc44a[232])?_0xc44a[232]:mxResources[_0xc44a[145]](_0xc44a[287])+ _0xc44a[235];_0x1365x20+= (_0x1365x1d[_0xc44a[101]][_0xc44a[238]](_0xc44a[288])!== _0xc44a[232])?_0xc44a[232]:mxResources[_0xc44a[145]](_0xc44a[266])+ _0xc44a[235];break;case _0xc44a[80]:_0x1365x20= (_0x1365x1d[_0xc44a[101]][_0xc44a[238]](_0xc44a[284])> 0)?_0xc44a[232]:mxResources[_0xc44a[145]](_0xc44a[285])+ _0xc44a[235];_0x1365x20+= (_0x1365x1d[_0xc44a[101]][_0xc44a[238]](_0xc44a[286])!== _0xc44a[232])?_0xc44a[232]:mxResources[_0xc44a[145]](_0xc44a[287])+ _0xc44a[235];break;case _0xc44a[72]:_0x1365x20= (_0x1365x1d[_0xc44a[101]][_0xc44a[238]](_0xc44a[265])!== _0xc44a[232])?_0xc44a[232]:mxResources[_0xc44a[145]](_0xc44a[266])+ _0xc44a[235];break;case _0xc44a[73]:_0x1365x20= (_0x1365x1d[_0xc44a[101]][_0xc44a[238]](_0xc44a[265])!== _0xc44a[232])?_0xc44a[232]:mxResources[_0xc44a[145]](_0xc44a[266])+ _0xc44a[235];_0x1365x20+= (_0x1365x1d[_0xc44a[101]][_0xc44a[238]](_0xc44a[289])!== _0xc44a[232])?_0xc44a[232]:mxResources[_0xc44a[145]](_0xc44a[290])+ _0xc44a[235];break;case _0xc44a[78]:_0x1365x20= (_0x1365x1d[_0xc44a[101]][_0xc44a[238]](_0xc44a[289])!== _0xc44a[232])?_0xc44a[232]:mxResources[_0xc44a[145]](_0xc44a[290])+ _0xc44a[235];break}};if(_0x1365x3[_0xc44a[226]][_0xc44a[98]](_0x1365x1d)){var _0x1365x23=_0x1365x3[_0xc44a[226]][_0xc44a[293]](_0x1365x1d[_0xc44a[102]][_0xc44a[292]]());switch(_0x1365x23[_0xc44a[101]][_0xc44a[291]]){case _0xc44a[66]:var _0x1365x24=/^[0-9]{1,45}$|^[i]{1}$|^[t]{1}|^[#]{1}|^[*]{1}$/;_0x1365x20= _0x1365x20+ ((_0x1365x24[_0xc44a[295]](String(_0x1365x1d[_0xc44a[294]]())))?_0xc44a[232]:mxResources[_0xc44a[145]](_0xc44a[296])+ _0xc44a[235]);break;case _0xc44a[68]:var _0x1365x24=/^[0-9]{1,45}$|^[-]{1}$|^[i]{1}$|^[t]{1}|^[#]{1}|^[*]{1}$/;var _0x1365x25=String(_0x1365x1d[_0xc44a[294]]());var _0x1365x26=_0x1365x25[_0xc44a[298]](_0xc44a[297]);_0x1365x26[_0xc44a[300]](function(_0x1365x27){_0x1365x20= _0x1365x20+ ((_0x1365x24[_0xc44a[295]](_0x1365x27))?_0xc44a[232]:mxResources[_0xc44a[145]](_0xc44a[299])+ _0xc44a[235])});break;case _0xc44a[75]:;case _0xc44a[74]:var _0x1365x24=/^(x|i|-)$/;var _0x1365x25=String(_0x1365x1d[_0xc44a[294]]());_0x1365x20= _0x1365x20+ ((_0x1365x24[_0xc44a[295]](_0x1365x25))?_0xc44a[232]:mxResources[_0xc44a[145]](_0xc44a[301])+ _0xc44a[235]);break;case _0xc44a[82]:;case _0xc44a[83]:;case _0xc44a[84]:var _0x1365x24=/^(true){1}$|^(false){1}$/;_0x1365x20= _0x1365x20+ ((_0x1365x24[_0xc44a[295]](String(_0x1365x1d[_0xc44a[294]]())))?_0xc44a[232]:mxResources[_0xc44a[145]](_0xc44a[302])+ _0xc44a[235]);break}};_0x1365x3[_0xc44a[303]](_0x1365x1d)&& !_0x1365x1f&& (_0x1365x20= _0x1365x20+ ((mxResources[_0xc44a[145]](_0x1365x3[_0xc44a[304]])|| _0x1365x3[_0xc44a[304]])+ _0xc44a[235]));_0x1365x20= _0x1365x3[_0xc44a[226]][_0xc44a[98]](_0x1365x1d)?_0x1365x20+ (_0x1365x3[_0xc44a[306]](_0x1365x1d,_0x1365x3[_0xc44a[226]][_0xc44a[305]](_0x1365x1d,true),_0x1365x3[_0xc44a[226]][_0xc44a[305]](_0x1365x1d,false))|| _0xc44a[232]):_0x1365x20+ (_0x1365x3[_0xc44a[307]](_0x1365x1d)|| _0xc44a[232]);_0x1365x1a= _0x1365x3[_0xc44a[308]](_0x1365x1d,_0x1365x1e);_0x1365x1a!= null&& (_0x1365x20= _0x1365x20+ _0x1365x1a);_0x1365x3[_0xc44a[226]][_0xc44a[309]](_0x1365x1d)== null&& _0x1365x3[_0xc44a[122]][_0xc44a[224]]();return _0x1365x20[_0xc44a[176]]> 0|| !_0x1365x1f?_0x1365x20:null};EditorUi[_0xc44a[10]][_0xc44a[233]]= function(_0x1365x28){var _0x1365x3=this[_0xc44a[0]][_0xc44a[4]];var _0x1365x29=_0x1365x3[_0xc44a[310]]();var _0x1365x2a=0;_0x1365x29[_0xc44a[311]][_0xc44a[300]](function(_0x1365x2b){if(_0x1365x3[_0xc44a[226]][_0xc44a[105]](_0x1365x2b)&& _0x1365x2b[_0xc44a[101]][_0xc44a[291]]== _0x1365x28){_0x1365x2a++}});return _0x1365x2a> 1?false:true};EditorUi[_0xc44a[10]][_0xc44a[312]]= function(_0x1365x18){var _0x1365x1=this[_0xc44a[0]];if(_0x1365x18!= null){var _0x1365x1b=this[_0xc44a[224]]();if(_0x1365x1b=== null){var _0x1365x14=mxUtils[_0xc44a[168]](this[_0xc44a[0]][_0xc44a[167]]());try{if(useLocalStorage){if(localStorage[_0xc44a[169]](_0x1365x18)!= null&& !mxUtils[_0xc44a[171]](mxResources[_0xc44a[145]](_0xc44a[170],[_0x1365x18]))){return};localStorage[_0xc44a[172]](_0x1365x18,_0x1365x14);this[_0xc44a[0]][_0xc44a[175]](mxResources[_0xc44a[145]](_0xc44a[173])+ _0xc44a[174]+ new Date())}else {console[_0xc44a[177]](_0x1365x14[_0xc44a[176]]);console[_0xc44a[177]](MAX_REQUEST_SIZE);if(_0x1365x14[_0xc44a[176]]< MAX_REQUEST_SIZE){_0x1365x14= encodeURIComponent(_0x1365x14);var _0x1365x19= new XMLHttpRequest();_0x1365x19[_0xc44a[135]](_0xc44a[207],SAVE_URL+ this[_0xc44a[0]][_0xc44a[165]][_0xc44a[194]],true);_0x1365x19[_0xc44a[181]](_0xc44a[179],_0xc44a[180]);_0x1365x19[_0xc44a[181]](_0xc44a[182],_0xc44a[183]+ _0x1365x1[_0xc44a[165]][_0xc44a[184]]);_0x1365x19[_0xc44a[185]]= function(_0x1365x1a){if(_0x1365x19[_0xc44a[186]]=== 4){if(_0x1365x19[_0xc44a[187]]=== 200){_0x1365x1[_0xc44a[175]](_0xc44a[313]+ JSON[_0xc44a[191]](_0x1365x19[_0xc44a[190]])[_0xc44a[209]]+ _0xc44a[199]+ _0x1365x19[_0xc44a[187]]+ _0xc44a[174]+ _0x1365x19[_0xc44a[200]]+ _0xc44a[44])}else {try{var _0x1365x1b=JSON[_0xc44a[191]](_0x1365x19[_0xc44a[190]]);_0x1365x1[_0xc44a[175]](_0xc44a[314]+ _0x1365x1b[_0xc44a[197]][0][_0xc44a[161]])}catch(_0x1365x1a){_0x1365x1[_0xc44a[175]](_0xc44a[315]+ _0xc44a[199]+ _0x1365x19[_0xc44a[187]]+ _0xc44a[174]+ _0x1365x19[_0xc44a[200]]+ _0xc44a[44])}}}};_0x1365x19[_0xc44a[201]]= function(_0x1365x1a){mxUtils[_0xc44a[162]](_0x1365x19[_0xc44a[200]])};_0x1365x19[_0xc44a[203]](_0xc44a[212]+ _0x1365x14+ _0xc44a[223]+ _0x1365x14)}else {mxUtils[_0xc44a[162]](mxResources[_0xc44a[145]](_0xc44a[204]));mxUtils[_0xc44a[205]](_0x1365x14);return}};this[_0xc44a[0]][_0xc44a[158]]= _0x1365x18;this[_0xc44a[0]][_0xc44a[155]]= false}catch(e){this[_0xc44a[0]][_0xc44a[175]](_0xc44a[316])}}else {_0x1365x1[_0xc44a[175]](_0xc44a[314])}}else {this[_0xc44a[0]][_0xc44a[175]](_0xc44a[316])}};EditorUi[_0xc44a[10]][_0xc44a[249]]= function(_0x1365x18,_0x1365x1c){var _0x1365x1=this[_0xc44a[0]];if(_0x1365x18!= null){try{var _0x1365x19= new XMLHttpRequest();_0x1365x19[_0xc44a[135]](_0xc44a[178],VARIABLE_URL,true);_0x1365x19[_0xc44a[181]](_0xc44a[179],_0xc44a[180]);_0x1365x19[_0xc44a[181]](_0xc44a[182],_0xc44a[183]+ _0x1365x1[_0xc44a[165]][_0xc44a[184]]);_0x1365x19[_0xc44a[185]]= function(_0x1365x1a){if(_0x1365x19[_0xc44a[186]]=== 4){if(_0x1365x19[_0xc44a[187]]=== 201){_0x1365x1[_0xc44a[175]](_0xc44a[317]+ JSON[_0xc44a[191]](_0x1365x19[_0xc44a[190]])[_0xc44a[318]]+ _0xc44a[199]+ _0x1365x19[_0xc44a[187]]+ _0xc44a[174]+ _0x1365x19[_0xc44a[200]]+ _0xc44a[44])}else {try{var _0x1365x1b=JSON[_0xc44a[191]](_0x1365x19[_0xc44a[190]]);_0x1365x1[_0xc44a[175]](_0xc44a[319]+ _0x1365x1b[_0xc44a[197]][0][_0xc44a[161]])}catch(_0x1365x1a){_0x1365x1[_0xc44a[175]](_0xc44a[320]+ _0xc44a[199]+ _0x1365x19[_0xc44a[187]]+ _0xc44a[174]+ _0x1365x19[_0xc44a[200]]+ _0xc44a[44])}}}};_0x1365x19[_0xc44a[201]]= function(_0x1365x1a){mxUtils[_0xc44a[162]](_0x1365x19[_0xc44a[200]])};_0x1365x19[_0xc44a[203]](_0xc44a[321]+ _0x1365x18+ _0xc44a[322]+ _0x1365x1c)}catch(e){this[_0xc44a[0]][_0xc44a[175]](_0xc44a[320])}}else {this[_0xc44a[0]][_0xc44a[175]](_0xc44a[320])}};EditorUi[_0xc44a[10]][_0xc44a[323]]= function(_0x1365x2c){var _0x1365x2d=(_0x1365x2c!= null)?_0x1365x2c:window[_0xc44a[325]][_0xc44a[324]];var _0x1365x2e=(_0x1365x2d[_0xc44a[103]](_0xc44a[326])> 0)?1:0;for(var _0x1365x2f in urlParams){if(_0x1365x2e== 0){_0x1365x2d+= _0xc44a[326]}else {_0x1365x2d+= _0xc44a[327]};_0x1365x2d+= _0x1365x2f+ _0xc44a[328]+ urlParams[_0x1365x2f];_0x1365x2e++};return _0x1365x2d};EditorUi[_0xc44a[10]][_0xc44a[142]]= function(){var _0x1365x30=this[_0xc44a[12]][_0xc44a[145]](_0xc44a[329]);var _0x1365x31=this[_0xc44a[12]][_0xc44a[145]](_0xc44a[330]);var _0x1365x32=this[_0xc44a[0]][_0xc44a[157]];var _0x1365x33=function(){_0x1365x30[_0xc44a[147]](_0x1365x32[_0xc44a[331]]());_0x1365x31[_0xc44a[147]](_0x1365x32[_0xc44a[332]]())};_0x1365x32[_0xc44a[33]](mxEvent.ADD,_0x1365x33);_0x1365x32[_0xc44a[33]](mxEvent.UNDO,_0x1365x33);_0x1365x32[_0xc44a[33]](mxEvent.REDO,_0x1365x33);_0x1365x32[_0xc44a[33]](mxEvent.CLEAR,_0x1365x33);_0x1365x33()};EditorUi[_0xc44a[10]][_0xc44a[143]]= function(){var _0x1365x34=mxUtils[_0xc44a[20]](this,function(){var _0x1365x3=this[_0xc44a[0]][_0xc44a[4]];var _0x1365x35=!_0x1365x3[_0xc44a[333]]();var _0x1365x36=false;var _0x1365x37=false;var _0x1365x38=_0x1365x3[_0xc44a[334]]();if(_0x1365x38!= null){for(var _0x1365x39=0;_0x1365x39< _0x1365x38[_0xc44a[176]];_0x1365x39++){var _0x1365xb=_0x1365x38[_0x1365x39];if(_0x1365x3[_0xc44a[99]]()[_0xc44a[98]](_0x1365xb)){_0x1365x37= true};if(_0x1365x3[_0xc44a[99]]()[_0xc44a[105]](_0x1365xb)){_0x1365x36= true};if(_0x1365x37&& _0x1365x36){break}}};var _0x1365x3a=[_0xc44a[148],_0xc44a[149],_0xc44a[335],_0xc44a[336],_0xc44a[337],_0xc44a[338],_0xc44a[6],_0xc44a[339],_0xc44a[340],_0xc44a[341],_0xc44a[342],_0xc44a[343],_0xc44a[344],_0xc44a[345],_0xc44a[346]];for(var _0x1365x39=0;_0x1365x39< _0x1365x3a[_0xc44a[176]];_0x1365x39++){this[_0xc44a[12]][_0xc44a[145]](_0x1365x3a[_0x1365x39])[_0xc44a[147]](_0x1365x35)};this[_0xc44a[12]][_0xc44a[145]](_0xc44a[347])[_0xc44a[147]](_0x1365x37);this[_0xc44a[12]][_0xc44a[145]](_0xc44a[348])[_0xc44a[147]](_0x1365x36);this[_0xc44a[12]][_0xc44a[145]](_0xc44a[349])[_0xc44a[147]](_0x1365x36);this[_0xc44a[12]][_0xc44a[145]](_0xc44a[351])[_0xc44a[147]](_0x1365x3[_0xc44a[350]]()> 1);this[_0xc44a[12]][_0xc44a[145]](_0xc44a[353])[_0xc44a[147]](_0x1365x3[_0xc44a[350]]()== 1&& _0x1365x3[_0xc44a[99]]()[_0xc44a[227]](_0x1365x3[_0xc44a[352]]())> 0);var _0x1365x3b=_0x1365x36&& _0x1365x3[_0xc44a[350]]()== 1;this[_0xc44a[12]][_0xc44a[145]](_0xc44a[354])[_0xc44a[147]](_0x1365x3b&& _0x1365x3[_0xc44a[99]]()[_0xc44a[105]](_0x1365x3[_0xc44a[99]]()[_0xc44a[309]](_0x1365x3[_0xc44a[352]]())));var _0x1365x3c=[_0xc44a[355],_0xc44a[356],_0xc44a[357],_0xc44a[358],_0xc44a[265],_0xc44a[359],_0xc44a[360],_0xc44a[361],_0xc44a[362]];for(var _0x1365x39=0;_0x1365x39< _0x1365x3c[_0xc44a[176]];_0x1365x39++){this[_0xc44a[13]][_0xc44a[145]](_0x1365x3c[_0x1365x39])[_0xc44a[147]](_0x1365x35)};_0x1365x3c= [_0xc44a[363],_0xc44a[364],_0xc44a[365]];for(var _0x1365x39=0;_0x1365x39< _0x1365x3c[_0xc44a[176]];_0x1365x39++){this[_0xc44a[13]][_0xc44a[145]](_0x1365x3c[_0x1365x39])[_0xc44a[147]](_0x1365x37)};this[_0xc44a[12]][_0xc44a[145]](_0xc44a[366])[_0xc44a[147]](_0x1365x37);this[_0xc44a[13]][_0xc44a[145]](_0xc44a[367])[_0xc44a[147]](_0x1365x3[_0xc44a[350]]()> 1);this[_0xc44a[13]][_0xc44a[145]](_0xc44a[370])[_0xc44a[147]](_0x1365x36|| (_0x1365x37&& _0x1365x3[_0xc44a[369]](_0x1365x3[_0xc44a[122]][_0xc44a[368]](_0x1365x3[_0xc44a[352]]()))));this[_0xc44a[13]][_0xc44a[145]](_0xc44a[373])[_0xc44a[147]](_0x1365x3[_0xc44a[371]]&& ((_0x1365x3[_0xc44a[122]][_0xc44a[372]]!= null)|| (_0x1365x3[_0xc44a[350]]()== 1&& _0x1365x3[_0xc44a[229]](_0x1365x3[_0xc44a[352]]()))));this[_0xc44a[12]][_0xc44a[145]](_0xc44a[374])[_0xc44a[147]](_0x1365x3[_0xc44a[122]][_0xc44a[372]]!= null);this[_0xc44a[12]][_0xc44a[145]](_0xc44a[375])[_0xc44a[147]](_0x1365x3[_0xc44a[122]][_0xc44a[372]]!= null);var _0x1365x3d=_0x1365x3[_0xc44a[350]]()== 1&& _0x1365x3[_0xc44a[229]](_0x1365x3[_0xc44a[352]]());this[_0xc44a[12]][_0xc44a[145]](_0xc44a[376])[_0xc44a[147]](_0x1365x3d);this[_0xc44a[12]][_0xc44a[145]](_0xc44a[377])[_0xc44a[147]](_0x1365x3d);this[_0xc44a[12]][_0xc44a[145]](_0xc44a[378])[_0xc44a[147]](_0x1365x3d);this[_0xc44a[12]][_0xc44a[145]](_0xc44a[379])[_0xc44a[147]](_0x1365x3[_0xc44a[350]]()== 1);this[_0xc44a[12]][_0xc44a[145]](_0xc44a[381])[_0xc44a[147]](_0x1365x3[_0xc44a[350]]()== 1&& _0x1365x3[_0xc44a[380]](_0x1365x3[_0xc44a[352]]())!= null)});this[_0xc44a[0]][_0xc44a[4]][_0xc44a[382]]()[_0xc44a[33]](mxEvent.CHANGE,_0x1365x34);_0x1365x34()};EditorUi[_0xc44a[10]][_0xc44a[15]]= function(){var _0x1365x3e=mxClient[_0xc44a[29]]&& (document[_0xc44a[30]]== null|| document[_0xc44a[30]]== 5);var _0x1365x3f=this[_0xc44a[1]][_0xc44a[383]];var _0x1365x40=this[_0xc44a[1]][_0xc44a[384]];if(this[_0xc44a[1]]== document[_0xc44a[21]]){_0x1365x3f= document[_0xc44a[21]][_0xc44a[383]]|| document[_0xc44a[153]][_0xc44a[383]];_0x1365x40= (_0x1365x3e)?document[_0xc44a[21]][_0xc44a[384]]|| document[_0xc44a[153]][_0xc44a[384]]:document[_0xc44a[153]][_0xc44a[384]]};var _0x1365x41=Math[_0xc44a[386]](0,Math[_0xc44a[385]](this[_0xc44a[140]],_0x1365x3f- this[_0xc44a[136]]- 20));var _0x1365x42=Math[_0xc44a[386]](0,Math[_0xc44a[385]](this[_0xc44a[141]],_0x1365x40- this[_0xc44a[137]]- this[_0xc44a[138]]- this[_0xc44a[139]]- this[_0xc44a[136]]- 1));this[_0xc44a[23]][_0xc44a[6]][_0xc44a[387]]= this[_0xc44a[137]]+ _0xc44a[388];this[_0xc44a[25]][_0xc44a[6]][_0xc44a[389]]= this[_0xc44a[137]]+ _0xc44a[388];this[_0xc44a[25]][_0xc44a[6]][_0xc44a[387]]= this[_0xc44a[138]]+ _0xc44a[388];var _0x1365x43=this[_0xc44a[137]]+ this[_0xc44a[138]];if(!mxClient[_0xc44a[390]]){_0x1365x43+= 1};this[_0xc44a[27]][_0xc44a[6]][_0xc44a[389]]= _0x1365x43+ _0xc44a[388];this[_0xc44a[27]][_0xc44a[6]][_0xc44a[391]]= _0x1365x41+ _0xc44a[388];this[_0xc44a[112]][_0xc44a[6]][_0xc44a[391]]= _0x1365x41+ _0xc44a[388];this[_0xc44a[112]][_0xc44a[6]][_0xc44a[387]]= _0x1365x42+ _0xc44a[388];this[_0xc44a[112]][_0xc44a[6]][_0xc44a[392]]= this[_0xc44a[139]]+ _0xc44a[388];this[_0xc44a[26]][_0xc44a[6]][_0xc44a[393]]= (_0x1365x41+ this[_0xc44a[136]])+ _0xc44a[388];this[_0xc44a[26]][_0xc44a[6]][_0xc44a[389]]= this[_0xc44a[27]][_0xc44a[6]][_0xc44a[389]];this[_0xc44a[28]][_0xc44a[6]][_0xc44a[387]]= this[_0xc44a[139]]+ _0xc44a[388];this[_0xc44a[28]][_0xc44a[6]][_0xc44a[394]]= _0xc44a[395];this[_0xc44a[396]][_0xc44a[6]][_0xc44a[389]]= this[_0xc44a[27]][_0xc44a[6]][_0xc44a[389]];this[_0xc44a[396]][_0xc44a[6]][_0xc44a[392]]= this[_0xc44a[112]][_0xc44a[6]][_0xc44a[392]];this[_0xc44a[396]][_0xc44a[6]][_0xc44a[393]]= _0x1365x41+ _0xc44a[388];this[_0xc44a[397]][_0xc44a[6]][_0xc44a[391]]= this[_0xc44a[27]][_0xc44a[6]][_0xc44a[391]];this[_0xc44a[397]][_0xc44a[6]][_0xc44a[392]]= (_0x1365x42+ this[_0xc44a[139]])+ _0xc44a[388];if(_0x1365x3e){this[_0xc44a[23]][_0xc44a[6]][_0xc44a[391]]= _0x1365x3f+ _0xc44a[388];this[_0xc44a[25]][_0xc44a[6]][_0xc44a[391]]= this[_0xc44a[23]][_0xc44a[6]][_0xc44a[391]];var _0x1365x44=(_0x1365x40- _0x1365x42- this[_0xc44a[136]]- this[_0xc44a[139]]- this[_0xc44a[137]]- this[_0xc44a[138]]);this[_0xc44a[27]][_0xc44a[6]][_0xc44a[387]]= _0x1365x44+ _0xc44a[388];this[_0xc44a[26]][_0xc44a[6]][_0xc44a[391]]= (_0x1365x3f- _0x1365x41- this[_0xc44a[136]])+ _0xc44a[388];var _0x1365x45=(_0x1365x40- this[_0xc44a[139]]- this[_0xc44a[137]]- this[_0xc44a[138]]);this[_0xc44a[26]][_0xc44a[6]][_0xc44a[387]]= _0x1365x45+ _0xc44a[388];this[_0xc44a[28]][_0xc44a[6]][_0xc44a[391]]= this[_0xc44a[23]][_0xc44a[6]][_0xc44a[391]];this[_0xc44a[396]][_0xc44a[6]][_0xc44a[387]]= _0x1365x45+ _0xc44a[388]}else {this[_0xc44a[27]][_0xc44a[6]][_0xc44a[392]]= (_0x1365x42+ this[_0xc44a[136]]+ this[_0xc44a[139]])+ _0xc44a[388];this[_0xc44a[26]][_0xc44a[6]][_0xc44a[392]]= this[_0xc44a[112]][_0xc44a[6]][_0xc44a[392]]}};EditorUi[_0xc44a[10]][_0xc44a[14]]= function(){this[_0xc44a[23]]= this[_0xc44a[399]](_0xc44a[398]);this[_0xc44a[25]]= this[_0xc44a[399]](_0xc44a[400]);this[_0xc44a[27]]= this[_0xc44a[399]](_0xc44a[401]);this[_0xc44a[112]]= this[_0xc44a[399]](_0xc44a[402]);this[_0xc44a[26]]= this[_0xc44a[399]](_0xc44a[403]);this[_0xc44a[28]]= this[_0xc44a[399]](_0xc44a[404]);this[_0xc44a[396]]= this[_0xc44a[399]](_0xc44a[405]);this[_0xc44a[397]]= this[_0xc44a[399]](_0xc44a[406]);this[_0xc44a[23]][_0xc44a[6]][_0xc44a[389]]= _0xc44a[407];this[_0xc44a[23]][_0xc44a[6]][_0xc44a[393]]= _0xc44a[407];this[_0xc44a[23]][_0xc44a[6]][_0xc44a[408]]= _0xc44a[407];this[_0xc44a[25]][_0xc44a[6]][_0xc44a[393]]= _0xc44a[407];this[_0xc44a[25]][_0xc44a[6]][_0xc44a[408]]= _0xc44a[407];this[_0xc44a[27]][_0xc44a[6]][_0xc44a[393]]= _0xc44a[407];this[_0xc44a[112]][_0xc44a[6]][_0xc44a[393]]= _0xc44a[407];this[_0xc44a[26]][_0xc44a[6]][_0xc44a[408]]= _0xc44a[407];this[_0xc44a[28]][_0xc44a[6]][_0xc44a[393]]= _0xc44a[407];this[_0xc44a[28]][_0xc44a[6]][_0xc44a[408]]= _0xc44a[407];this[_0xc44a[28]][_0xc44a[6]][_0xc44a[392]]= _0xc44a[407];this[_0xc44a[397]][_0xc44a[6]][_0xc44a[393]]= _0xc44a[407];this[_0xc44a[397]][_0xc44a[6]][_0xc44a[387]]= this[_0xc44a[136]]+ _0xc44a[388];this[_0xc44a[396]][_0xc44a[6]][_0xc44a[391]]= this[_0xc44a[136]]+ _0xc44a[388]};EditorUi[_0xc44a[10]][_0xc44a[16]]= function(){this[_0xc44a[409]]= this[_0xc44a[13]][_0xc44a[411]](this[_0xc44a[399]](_0xc44a[410]));this[_0xc44a[23]][_0xc44a[412]](this[_0xc44a[409]][_0xc44a[1]]);this[_0xc44a[413]]= this[_0xc44a[415]](this[_0xc44a[399]](_0xc44a[414]));this[_0xc44a[25]][_0xc44a[412]](this[_0xc44a[413]][_0xc44a[1]]);this[_0xc44a[416]]= this[_0xc44a[417]](this[_0xc44a[27]]);this[_0xc44a[28]][_0xc44a[412]](this[_0xc44a[418]]());this[_0xc44a[419]]= this[_0xc44a[420]]();this[_0xc44a[0]][_0xc44a[33]](_0xc44a[421],mxUtils[_0xc44a[20]](this,function(){this[_0xc44a[423]](this[_0xc44a[0]][_0xc44a[422]]())}));this[_0xc44a[423]](this[_0xc44a[0]][_0xc44a[422]]());this[_0xc44a[409]][_0xc44a[1]][_0xc44a[412]](this[_0xc44a[419]]);this[_0xc44a[1]][_0xc44a[412]](this[_0xc44a[23]]);this[_0xc44a[1]][_0xc44a[412]](this[_0xc44a[25]]);this[_0xc44a[1]][_0xc44a[412]](this[_0xc44a[27]]);this[_0xc44a[1]][_0xc44a[412]](this[_0xc44a[112]]);this[_0xc44a[1]][_0xc44a[412]](this[_0xc44a[26]]);this[_0xc44a[1]][_0xc44a[412]](this[_0xc44a[28]]);this[_0xc44a[1]][_0xc44a[412]](this[_0xc44a[396]]);this[_0xc44a[1]][_0xc44a[412]](this[_0xc44a[397]]);this[_0xc44a[424]](this[_0xc44a[396]],true,0,mxUtils[_0xc44a[20]](this,function(_0x1365x46){this[_0xc44a[140]]= _0x1365x46;this[_0xc44a[15]]();this[_0xc44a[0]][_0xc44a[4]][_0xc44a[133]]();this[_0xc44a[0]][_0xc44a[113]][_0xc44a[134]](false);this[_0xc44a[0]][_0xc44a[113]][_0xc44a[113]][_0xc44a[133]]()}));this[_0xc44a[424]](this[_0xc44a[397]],false,this[_0xc44a[139]],mxUtils[_0xc44a[20]](this,function(_0x1365x46){this[_0xc44a[141]]= _0x1365x46;this[_0xc44a[15]]();this[_0xc44a[0]][_0xc44a[113]][_0xc44a[134]](false);this[_0xc44a[0]][_0xc44a[113]][_0xc44a[113]][_0xc44a[133]]()}))};EditorUi[_0xc44a[10]][_0xc44a[420]]= function(){var _0x1365x2=document[_0xc44a[426]](_0xc44a[425]);_0x1365x2[_0xc44a[427]]= _0xc44a[428];return _0x1365x2};EditorUi[_0xc44a[10]][_0xc44a[420]]= function(){var _0x1365x2=document[_0xc44a[426]](_0xc44a[425]);_0x1365x2[_0xc44a[427]]= _0xc44a[428];return _0x1365x2};EditorUi[_0xc44a[10]][_0xc44a[423]]= function(_0x1365x46){this[_0xc44a[419]][_0xc44a[429]]= _0x1365x46};EditorUi[_0xc44a[10]][_0xc44a[415]]= function(_0x1365x2){return new Toolbar(this,_0x1365x2)};EditorUi[_0xc44a[10]][_0xc44a[417]]= function(_0x1365x2){return new Sidebar(this,_0x1365x2)};EditorUi[_0xc44a[10]][_0xc44a[418]]= function(){return this[_0xc44a[399]](_0xc44a[430])};EditorUi[_0xc44a[10]][_0xc44a[399]]= function(_0x1365x47){var _0x1365x48=document[_0xc44a[426]](_0xc44a[431]);_0x1365x48[_0xc44a[427]]= _0x1365x47;return _0x1365x48};EditorUi[_0xc44a[10]][_0xc44a[432]]= function(_0x1365x47){var _0x1365x48=document[_0xc44a[426]](_0x1365x47);return _0x1365x48};EditorUi[_0xc44a[10]][_0xc44a[433]]= function(_0x1365x47){var _0x1365x48=document[_0xc44a[426]](_0xc44a[434]);_0x1365x48[_0xc44a[427]]= _0x1365x47;return _0x1365x48};EditorUi[_0xc44a[10]][_0xc44a[424]]= function(_0x1365x48,_0x1365x49,_0x1365x4a,_0x1365x4b){var _0x1365x4c=null;var _0x1365x4d=null;function _0x1365x4e(){return parseInt(((_0x1365x49)?_0x1365x48[_0xc44a[6]][_0xc44a[393]]:_0x1365x48[_0xc44a[6]][_0xc44a[392]]))}function _0x1365x4f(_0x1365x6){if(_0x1365x4c!= null){var _0x1365x50= new mxPoint(mxEvent[_0xc44a[435]](_0x1365x6),mxEvent[_0xc44a[436]](_0x1365x6));_0x1365x4b(Math[_0xc44a[386]](0,_0x1365x4d+ ((_0x1365x49)?(_0x1365x50[_0xc44a[437]]- _0x1365x4c[_0xc44a[437]]):(_0x1365x4c[_0xc44a[438]]- _0x1365x50[_0xc44a[438]]))- _0x1365x4a));mxEvent[_0xc44a[107]](_0x1365x6)}}function _0x1365x51(_0x1365x6){_0x1365x4f(_0x1365x6);_0x1365x4c= null;_0x1365x4d= null}mxEvent[_0xc44a[115]](_0x1365x48,function(_0x1365x6){_0x1365x4c= new mxPoint(mxEvent[_0xc44a[435]](_0x1365x6),mxEvent[_0xc44a[436]](_0x1365x6));_0x1365x4d= _0x1365x4e();mxEvent[_0xc44a[107]](_0x1365x6)});mxEvent[_0xc44a[33]](document,_0xc44a[439],_0x1365x4f);mxEvent[_0xc44a[33]](document,_0xc44a[440],_0x1365x4f);mxEvent[_0xc44a[33]](document,_0xc44a[441],_0x1365x51);mxEvent[_0xc44a[33]](document,_0xc44a[442],_0x1365x51)};EditorUi[_0xc44a[10]][_0xc44a[106]]= function(_0x1365x48,_0x1365x3f,_0x1365x40,_0x1365x52,_0x1365x53,_0x1365x54){this[_0xc44a[443]]();this[_0xc44a[444]]= new Dialog(this,_0x1365x48,_0x1365x3f,(mxClient[_0xc44a[445]])?_0x1365x40- 12:_0x1365x40,_0x1365x52,_0x1365x53,_0x1365x54)};EditorUi[_0xc44a[10]][_0xc44a[443]]= function(){if(this[_0xc44a[444]]!= null){this[_0xc44a[444]][_0xc44a[446]]();this[_0xc44a[444]]= null;this[_0xc44a[0]][_0xc44a[4]][_0xc44a[1]][_0xc44a[47]]()}};EditorUi[_0xc44a[10]][_0xc44a[447]]= function(_0x1365x55){if(!_0x1365x55&& this[_0xc44a[0]][_0xc44a[158]]!= null){this[_0xc44a[206]](this[_0xc44a[0]][_0xc44a[448]]())}else {this[_0xc44a[106]]( new SaveDialog(this)[_0xc44a[1]],300,100,true,true)}};EditorUi[_0xc44a[10]][_0xc44a[449]]= function(_0x1365x55){if(!_0x1365x55&& this[_0xc44a[0]][_0xc44a[158]]!= null){this[_0xc44a[312]](this[_0xc44a[0]][_0xc44a[448]]())}else {}};EditorUi[_0xc44a[10]][_0xc44a[450]]= function(_0x1365x56,_0x1365x57,_0x1365x58){var _0x1365x3=this[_0xc44a[0]][_0xc44a[4]];var _0x1365xb=_0x1365x3[_0xc44a[352]]();_0x1365x57= this[_0xc44a[451]]!= null?this[_0xc44a[451]]:_0x1365x57;_0x1365x3[_0xc44a[99]]()[_0xc44a[452]]();try{_0x1365x56[_0xc44a[453]](_0x1365x3[_0xc44a[310]](),_0x1365xb)}catch(e){throw e}finally{if(_0x1365x57&& navigator[_0xc44a[455]][_0xc44a[103]](_0xc44a[454])< 0){var _0x1365x59= new mxMorphing(_0x1365x3);_0x1365x59[_0xc44a[33]](mxEvent.DONE,mxUtils[_0xc44a[20]](this,function(){_0x1365x3[_0xc44a[99]]()[_0xc44a[456]]()}));_0x1365x59[_0xc44a[457]]()}else {_0x1365x3[_0xc44a[99]]()[_0xc44a[456]]()}}};EditorUi[_0xc44a[10]][_0xc44a[130]]= function(_0x1365x1){var _0x1365x3=this[_0xc44a[0]][_0xc44a[4]];var _0x1365xf= new mxKeyHandler(_0x1365x3);_0x1365xf[_0xc44a[458]]= function(_0x1365x6){return mxEvent[_0xc44a[458]](_0x1365x6)|| (mxClient[_0xc44a[459]]&& _0x1365x6[_0xc44a[460]])};function _0x1365x5a(_0x1365x5b){if(!_0x1365x3[_0xc44a[333]]()){var _0x1365x4a=0;var _0x1365x5c=0;if(_0x1365x5b== 37){_0x1365x4a= -1}else {if(_0x1365x5b== 38){_0x1365x5c= -1}else {if(_0x1365x5b== 39){_0x1365x4a= 1}else {if(_0x1365x5b== 40){_0x1365x5c= 1}}}};_0x1365x3[_0xc44a[461]](_0x1365x3[_0xc44a[334]](),_0x1365x4a,_0x1365x5c);_0x1365x3[_0xc44a[462]](_0x1365x3[_0xc44a[352]]())}}var _0x1365x5d=mxUtils[_0xc44a[20]](this,function(_0x1365x5e,_0x1365x5f,_0x1365x2f,_0x1365x60){var _0x1365x61=this[_0xc44a[12]][_0xc44a[145]](_0x1365x2f);if(_0x1365x61!= null){var _0x1365x21=function(){if(_0x1365x61[_0xc44a[463]]){_0x1365x61[_0xc44a[464]]()}};if(_0x1365x5f){if(_0x1365x60){_0x1365xf[_0xc44a[465]](_0x1365x5e,_0x1365x21)}else {_0x1365xf[_0xc44a[466]](_0x1365x5e,_0x1365x21)}}else {if(_0x1365x60){_0x1365xf[_0xc44a[467]](_0x1365x5e,_0x1365x21)}else {_0x1365xf[_0xc44a[468]](_0x1365x5e,_0x1365x21)}}}});var _0x1365x62=this;var _0x1365x63=_0x1365xf[_0xc44a[469]];_0x1365xf[_0xc44a[469]]= function(_0x1365x6){_0x1365x62[_0xc44a[443]]();_0x1365x63[_0xc44a[50]](this,arguments)};_0x1365xf[_0xc44a[470]]= function(){};_0x1365xf[_0xc44a[468]](8,function(){_0x1365x3[_0xc44a[471]](true)});_0x1365xf[_0xc44a[468]](13,function(){_0x1365x3[_0xc44a[471]](false)});_0x1365xf[_0xc44a[468]](33,function(){_0x1365x3[_0xc44a[375]]()});_0x1365xf[_0xc44a[468]](34,function(){_0x1365x3[_0xc44a[376]]()});_0x1365xf[_0xc44a[468]](36,function(){_0x1365x3[_0xc44a[374]]()});_0x1365xf[_0xc44a[468]](35,function(){_0x1365x3[_0xc44a[15]]()});_0x1365xf[_0xc44a[468]](37,function(){_0x1365x5a(37)});_0x1365xf[_0xc44a[468]](38,function(){_0x1365x5a(38)});_0x1365xf[_0xc44a[468]](39,function(){_0x1365x5a(39)});_0x1365xf[_0xc44a[468]](40,function(){_0x1365x5a(40)});_0x1365xf[_0xc44a[468]](113,function(){_0x1365x3[_0xc44a[104]]()});_0x1365x5d(46,false,_0xc44a[335]);_0x1365x5d(82,true,_0xc44a[345]);_0x1365x5d(83,true,_0xc44a[206]);_0x1365x5d(83,true,_0xc44a[218],true);_0x1365x5d(107,false,_0xc44a[472]);_0x1365x5d(109,false,_0xc44a[473]);_0x1365x5d(65,true,_0xc44a[474]);_0x1365x5d(86,true,_0xc44a[475],true);_0x1365x5d(69,true,_0xc44a[476],true);_0x1365x5d(69,true,_0xc44a[477]);_0x1365x5d(66,true,_0xc44a[341]);_0x1365x5d(70,true,_0xc44a[340]);_0x1365x5d(68,true,_0xc44a[336]);_0x1365x5d(90,true,_0xc44a[329]);_0x1365x5d(89,true,_0xc44a[330]);_0x1365x5d(88,true,_0xc44a[148]);_0x1365x5d(67,true,_0xc44a[149]);_0x1365x5d(81,true,_0xc44a[478]);_0x1365x5d(86,true,_0xc44a[144]);_0x1365x5d(71,true,_0xc44a[351]);_0x1365x5d(71,true,_0xc44a[479],true);_0x1365x5d(85,true,_0xc44a[353]);_0x1365x5d(112,false,_0xc44a[480]);_0x1365x5d(80,true,_0xc44a[312],true);return _0x1365xf};EditorUi[_0xc44a[10]][_0xc44a[56]]= function(_0x1365x3,_0x1365x38,_0x1365x64,_0x1365x65){for(var _0x1365x39=0;_0x1365x39< _0x1365x38[_0xc44a[176]];_0x1365x39++){_0x1365x3[_0xc44a[483]]( new mxMultiplicity(true,_0x1365x38[_0x1365x39],null,null,_0x1365x64[_0x1365x39][0],_0x1365x64[_0x1365x39][1],null,mxResources[_0xc44a[145]](_0x1365x38[_0x1365x39])+ mxResources[_0xc44a[145]](_0xc44a[481])+ _0x1365x64[_0x1365x39][0]+ mxResources[_0xc44a[145]](_0xc44a[482]),null));_0x1365x3[_0xc44a[483]]( new mxMultiplicity(false,_0x1365x38[_0x1365x39],null,null,_0x1365x65[_0x1365x39][0],_0x1365x65[_0x1365x39][1],null,mxResources[_0xc44a[145]](_0x1365x38[_0x1365x39])+ mxResources[_0xc44a[145]](_0xc44a[481])+ _0x1365x65[_0x1365x39][0]+ mxResources[_0xc44a[145]](_0xc44a[484]),null))}} \ No newline at end of file diff --git a/public/assets/plugins/square/js/Graph.js b/public/assets/plugins/square/js/Graph.js index dda2a33..7353a93 100644 --- a/public/assets/plugins/square/js/Graph.js +++ b/public/assets/plugins/square/js/Graph.js @@ -1,644 +1 @@ -/** - * $Id: Graph.js,v 1.14 2013-02-16 10:19:54 gaudenz Exp $ - * Copyright (c) 2006-2012, JGraph Ltd - */ -/** - * Constructs a new graph instance. Note that the constructor does not take a - * container because the graph instance is needed for creating the UI, which - * in turn will create the container for the graph. Hence, the container is - * assigned later in EditorUi. - */ -Graph = function(container, model, renderHint, stylesheet) { - mxGraph.call(this, container, model, renderHint, stylesheet); - - this.setConnectable(true); - this.setDropEnabled(false); - this.setPanning(true); - this.setTooltips(!mxClient.IS_TOUCH); - this.setAllowLoops(false); - this.setMultigraph(false); - this.allowAutoPanning = true; - this.resetEdgesOnConnect = false; - this.constrainChildren = false; - - // Centers the port icon on the target port - this.connectionHandler.targetConnectImage = true; - - // Does not allow dangling edges - this.setAllowDanglingEdges(false); - - // Enables cloning of connection sources - this.connectionHandler.setCreateTarget(false); - - // Disables built-in connection starts - this.connectionHandler.isValidSource = function() { - return mxConnectionHandler.prototype.isValidSource.apply(this, arguments) && urlParams['connect'] != '2'; - }; - - // Sets the style to be used when an elbow edge is double clicked - this.alternateEdgeStyle = 'vertical'; - - if (stylesheet == null) { - this.loadStylesheet(); - } - - // Creates rubberband selection - var rubberband = new mxRubberband(this); - - this.getRubberband = function() { - return rubberband; - }; - - // Shows hand cursor while panning - this.panningHandler.addListener(mxEvent.PAN_START, mxUtils.bind(this, function() { - this.container.style.cursor = 'pointer'; - })); - - this.panningHandler.addListener(mxEvent.PAN_END, mxUtils.bind(this, function() { - this.container.style.cursor = 'default'; - })); - - // Adds support for HTML labels via style. Note: Currently, only the Java - // backend supports HTML labels but CSS support is limited to the following: - // http://docs.oracle.com/javase/6/docs/api/index.html?javax/swing/text/html/CSS.html - this.isHtmlLabel = function(cell) { - var state = this.view.getState(cell); - var style = (state != null) ? state.style : this.getCellStyle(cell); - - return style['html'] == '1' || style['whiteSpace'] == 'wrap'; - }; - - // HTML entities are displayed as plain text in wrapped plain text labels - this.cellRenderer.getLabelValue = function(state) { - var result = mxCellRenderer.prototype.getLabelValue.apply(this, arguments); - - if (state.style['whiteSpace'] == 'wrap' && state.style['html'] != 1) { - result = mxUtils.htmlEntities(result, false); - } - - return result; - }; - - // Unlocks all cells - this.isCellLocked = function(cell) { - return false; - }; - - // Tap and hold brings up context menu. - // Tolerance slightly below graph tolerance is better. - this.connectionHandler.tapAndHoldTolerance = 16; - - // Tap and hold on background starts rubberband on cell starts connecting - var connectionHandlerTapAndHold = this.connectionHandler.tapAndHold; - this.connectionHandler.tapAndHold = function(me, state) { - if (state == null) { - if (!this.graph.panningHandler.active) { - rubberband.start(me.getGraphX(), me.getGraphY()); - this.graph.panningHandler.panningTrigger = false; - } - } else if (tapAndHoldStartsConnection) { - connectionHandlerTapAndHold.apply(this, arguments); - } else if (this.graph.isCellSelected(state.cell) && this.graph.getSelectionCount() > 1) { - this.graph.removeSelectionCell(state.cell); - } - }; - - if (touchStyle) { - this.initTouch(); - } -}; - -// Graph inherits from mxGraph -mxUtils.extend(Graph, mxGraph); - -/** - * Allows to all values in fit. - */ -Graph.prototype.minFitScale = null; - -/** - * Allows to all values in fit. - */ -Graph.prototype.maxFitScale = null; - -/** - * Loads the stylesheet for this graph. - */ -Graph.prototype.loadStylesheet = function() { - var node = mxUtils.load(STYLE_PATH + '/default.xml').getDocumentElement(); - var dec = new mxCodec(node.ownerDocument); - dec.decode(node, this.getStylesheet()); -}; - -/** - * Inverts the elbow edge style without removing existing styles. - */ -Graph.prototype.flipEdge = function(edge) { - if (edge != null) { - var state = this.view.getState(edge); - var style = (state != null) ? state.style : this.getCellStyle(edge); - - if (style != null) { - var elbow = mxUtils.getValue(style, mxConstants.STYLE_ELBOW, - mxConstants.ELBOW_HORIZONTAL); - var value = (elbow == mxConstants.ELBOW_HORIZONTAL) ? - mxConstants.ELBOW_VERTICAL : mxConstants.ELBOW_HORIZONTAL; - this.setCellStyles(mxConstants.STYLE_ELBOW, value, [edge]); - } - } -}; - -/** - * Sets the default edge for future connections. - */ -Graph.prototype.setDefaultEdge = function(cell) { - if (cell != null && this.getModel().isEdge(cell)) { - // Take a snapshot of the cell at the moment of calling - var proto = this.getModel().cloneCells([cell])[0]; - - // Delete existing points - if (proto.geometry != null) { - proto.geometry.points = null; - } - - // Delete entry-/exitXY styles - var style = proto.getStyle(); - style = mxUtils.setStyle(style, mxConstants.STYLE_ENTRY_X, null); - style = mxUtils.setStyle(style, mxConstants.STYLE_ENTRY_Y, null); - style = mxUtils.setStyle(style, mxConstants.STYLE_EXIT_X, null); - style = mxUtils.setStyle(style, mxConstants.STYLE_EXIT_Y, null); - proto.setStyle(style); - - // Uses edge template for connect preview - this.connectionHandler.createEdgeState = function(me) { - return this.graph.view.createState(proto); - }; - - // Creates new connections from edge template - this.connectionHandler.factoryMethod = function() { - return this.graph.cloneCells([proto])[0]; - }; - } -}; - -/** - * Disables folding for non-swimlanes. - */ -Graph.prototype.isCellFoldable = function(cell) { - return this.foldingEnabled && this.isSwimlane(cell); -}; - -/** - * Disables drill-down for non-swimlanes. - */ -Graph.prototype.isValidRoot = function(cell) { - return this.isSwimlane(cell); -}; - -/** - * Overrides createGroupCell to set the group style for new groups to 'group'. - */ -Graph.prototype.createGroupCell = function() { - var group = mxGraph.prototype.createGroupCell.apply(this, arguments); - group.setStyle('group'); - - return group; -}; - -/** - * Giuseppe Careri - * Overrides tooltips to show position and size - */ -Graph.prototype.getTooltipForCell = function(cell) { - var tip = ''; - - if (this.getModel().isVertex(cell)) { - // var geo = this.getCellGeometry(cell); - - // var f2 = function(x) - // { - // return Math.round(parseFloat(x) * 100) / 100; - // }; - - // if (geo != null) - // { - // if (tip == null) - // { - // tip = ''; - // } - // else if (tip.length > 0) - // { - // tip += '\n'; - // } - - // tip += 'X: ' + f2(geo.x) + '\nY: ' + f2(geo.y) + '\nW: ' + f2(geo.width) + '\nH: ' + f2(geo.height); - // } - - tip += mxResources.get('description_' + cell.value.nodeName) || ''; - } else if (this.getModel().isEdge(cell)) { - tip = mxGraph.prototype.getTooltipForCell.apply(this, arguments); - } - - return tip; -}; - -/** - * Giuseppe Careri - * Returns the label for the given cell. - */ -Graph.prototype.convertValueToString = function(cell) { - if (cell.value != null && typeof(cell.value) == 'object') { - return cell.value.getAttribute('label'); - } - - return mxGraph.prototype.convertValueToString.apply(this, arguments); -}; - -/** - * Giuseppe Careri - * Handles label changes for XML user objects. - */ -Graph.prototype.cellLabelChanged = function(cell, value, autoSize) { - if (cell.value != null && typeof(cell.value) == 'object') { - var tmp = cell.value.cloneNode(true); - tmp.setAttribute('label', value); - value = tmp; - } - - mxGraph.prototype.cellLabelChanged.apply(this, arguments); -}; - -/** - * Sets the link for the given cell. - */ -Graph.prototype.setLinkForCell = function(cell, link) { - var value = null; - - if (cell.value != null && typeof(cell.value) == 'object') { - value = cell.value.cloneNode(true); - } else { - var doc = mxUtils.createXmlDocument(); - - value = doc.createElement('UserObject'); - value.setAttribute('label', cell.value); - } - - if (link != null && link.length > 0) { - value.setAttribute('link', link); - } else { - value.removeAttribute('link'); - } - - this.model.setValue(cell, value); -}; - -/** - * Returns the link for the given cell. - */ -Graph.prototype.getLinkForCell = function(cell) { - if (cell.value != null && typeof(cell.value) == 'object') { - return cell.value.getAttribute('link'); - } - - return null; -}; - -/** - * Customized graph for touch devices. - */ -Graph.prototype.initTouch = function() { - // Disables new connections via "hotspot" - this.connectionHandler.marker.isEnabled = function() { - return this.graph.connectionHandler.first != null; - }; - - // Hides menu when editing starts - this.addListener(mxEvent.START_EDITING, function(sender, evt) { - this.panningHandler.hideMenu(); - }); - - // Context menu for touchstyle - var showMenu = false; - var menuCell = null; - - // Checks if native hit detection did not return anything and does custom - // hit detection for edges to take into account the tolerance - this.updateMouseEvent = function(me) { - mxGraph.prototype.updateMouseEvent.apply(this, arguments); - - if (me.getState() == null) { - var cell = this.getCellAt(me.graphX, me.graphY); - - if (this.getModel().isEdge(cell)) { - me.state = this.view.getState(cell); - - if (me.state != null && me.state.shape != null) { - this.container.style.cursor = me.state.shape.node.style.cursor; - } - } - } - - if (me.getState() == null) { - this.container.style.cursor = 'default'; - } - }; - - // Handles popup menu on touch devices (tap selected cell) - this.fireMouseEvent = function(evtName, me, sender) { - if (evtName == mxEvent.MOUSE_DOWN) { - if (!this.panningHandler.isMenuShowing()) { - menuCell = me.getCell(); - showMenu = (menuCell != null) ? this.isCellSelected(menuCell) : this.isSelectionEmpty(); - } else { - showMenu = false; - menuCell = null; - } - } else if (evtName == mxEvent.MOUSE_UP) { - if (showMenu && !this.isEditing()) { - if (!this.panningHandler.isMenuShowing()) { - var x = mxEvent.getClientX(me.getEvent()); - var y = mxEvent.getClientY(me.getEvent()); - - this.panningHandler.popup(x + 16, y, menuCell, me.getEvent()); - } - - showMenu = false; - menuCell = null; - me.consume(); - - return; - } - - showMenu = false; - menuCell = null; - } - - mxGraph.prototype.fireMouseEvent.apply(this, arguments); - - if (evtName == mxEvent.MOUSE_MOVE && me.isConsumed()) { - showMenu = false; - menuCell = null; - } - }; -}; - -/** - * Implements touch devices. - */ -(function() { - // Enables rotation handle - mxVertexHandler.prototype.rotationEnabled = true; - - // Matches label positions of mxGraph 1.x - mxText.prototype.baseSpacingTop = 5; - mxText.prototype.baseSpacingBottom = 1; - - // Touch-specific static overrides - if (touchStyle) { - // Sets constants for touch style - mxConstants.HANDLE_SIZE = 16; - mxConstants.LABEL_HANDLE_SIZE = 7; - - // Larger tolerance and grid for real touch devices - if (mxClient.IS_TOUCH) { - mxVertexHandler.prototype.tolerance = 4; - mxEdgeHandler.prototype.tolerance = 6; - Graph.prototype.tolerance = 14; - Graph.prototype.gridSize = 20; - - // One finger pans (no rubberband selection) must start regardless of mouse button - mxPanningHandler.prototype.selectOnPopup = false; - mxPanningHandler.prototype.useLeftButtonForPanning = true; - mxPanningHandler.prototype.isPanningTrigger = function(me) { - var evt = me.getEvent(); - - return (this.useLeftButtonForPanning && (this.ignoreCell || me.getState() == null) - /* && - mxEvent.isLeftMouseButton(evt)*/ - ) || (mxEvent.isControlDown(evt) && - mxEvent.isShiftDown(evt)) || (this.usePopupTrigger && - mxEvent.isPopupTrigger(evt)); - }; - } - - // Don't clear selection if multiple cells selected - var graphHandlerMouseDown = mxGraphHandler.prototype.mouseDown; - mxGraphHandler.prototype.mouseDown = function(sender, me) { - graphHandlerMouseDown.apply(this, arguments); - - if (this.graph.isCellSelected(me.getCell()) && this.graph.getSelectionCount() > 1) { - this.delayedSelection = false; - } - }; - - // Changes order of panninghandler - Graph.prototype.createHandlers = function(container) { - this.tooltipHandler = new mxTooltipHandler(this); - this.tooltipHandler.setEnabled(false); - // Selection cells first - this.selectionCellsHandler = new mxSelectionCellsHandler(this); - this.panningHandler = new mxPanningHandler(this); - this.panningHandler.panningEnabled = false; - this.connectionHandler = new mxConnectionHandler(this); - this.connectionHandler.setEnabled(false); - this.graphHandler = new mxGraphHandler(this); - }; - - // On connect the target is selected and we clone the cell of the preview edge for insert - mxConnectionHandler.prototype.selectCells = function(edge, target) { - if (touchStyle && target != null) { - this.graph.setSelectionCell(target); - } else { - this.graph.setSelectionCell(edge); - } - }; - - // Overrides double click handling to use the tolerance - // FIXME: Double click on edges in iPad needs focus on textarea - var graphDblClick = mxGraph.prototype.dblClick; - Graph.prototype.dblClick = function(evt, cell) { - if (cell == null) { - var pt = mxUtils.convertPoint(this.container, - mxEvent.getClientX(evt), mxEvent.getClientY(evt)); - cell = this.getCellAt(pt.x, pt.y); - } - - graphDblClick.call(this, evt, cell); - }; - - // Rounded edge and vertex handles - var touchHandle = new mxImage(IMAGE_PATH + '/touch-handle.png', 16, 16); - mxVertexHandler.prototype.handleImage = touchHandle; - mxEdgeHandler.prototype.handleImage = touchHandle; - mxOutline.prototype.sizerImage = touchHandle; - - // Pre-fetches touch handle - new Image().src = touchHandle.src; - - // Adds connect icon to selected vertices - var connectorSrc = IMAGE_PATH + '/touch-connector.png'; - - var vertexHandlerInit = mxVertexHandler.prototype.init; - mxVertexHandler.prototype.init = function() { - vertexHandlerInit.apply(this, arguments); - - // Only show connector image on one cell and do not show on containers - if (showConnectorImg && this.graph.connectionHandler.isEnabled() && - this.graph.isCellConnectable(this.state.cell) && - !this.graph.isValidRoot(this.state.cell) && - this.graph.getSelectionCount() == 1) { - this.connectorImg = mxUtils.createImage(connectorSrc); - this.connectorImg.style.cursor = 'pointer'; - this.connectorImg.style.width = '29px'; - this.connectorImg.style.height = '29px'; - this.connectorImg.style.position = 'absolute'; - - if (!mxClient.IS_TOUCH) { - this.connectorImg.setAttribute('title', mxResources.get('connect')); - mxEvent.redirectMouseEvents(this.connectorImg, this.graph, this.state); - } - - // Adds 2px tolerance - this.connectorImg.style.padding = '2px'; - - // Starts connecting on touch/mouse down - mxEvent.addGestureListeners(this.connectorImg, - mxUtils.bind(this, function(evt) { - this.graph.panningHandler.hideMenu(); - var pt = mxUtils.convertPoint(this.graph.container, - mxEvent.getClientX(evt), mxEvent.getClientY(evt)); - this.graph.connectionHandler.start(this.state, pt.x, pt.y); - this.graph.isMouseDown = true; - mxEvent.consume(evt); - }) - ); - - this.graph.container.appendChild(this.connectorImg); - } - - this.redrawTools(); - }; - - var vertexHandlerRedraw = mxVertexHandler.prototype.redraw; - mxVertexHandler.prototype.redraw = function() { - vertexHandlerRedraw.apply(this); - this.redrawTools(); - }; - - mxVertexHandler.prototype.redrawTools = function() { - if (this.state != null && this.connectorImg != null) { - // Top right for single-sizer - if (mxVertexHandler.prototype.singleSizer) { - this.connectorImg.style.left = (this.state.x + this.state.width - this.connectorImg.offsetWidth / 2) + 'px'; - this.connectorImg.style.top = (this.state.y - this.connectorImg.offsetHeight / 2) + 'px'; - } else { - this.connectorImg.style.left = (this.state.x + this.state.width + mxConstants.HANDLE_SIZE / 2 + 4 /* - 2 padding*/ ) + 'px'; - this.connectorImg.style.top = (this.state.y + (this.state.height - this.connectorImg.offsetHeight) / 2) + 'px'; - } - } - }; - - var vertexHandlerDestroy = mxVertexHandler.prototype.destroy; - mxVertexHandler.prototype.destroy = function(sender, me) { - vertexHandlerDestroy.apply(this, arguments); - - if (this.connectorImg != null) { - this.connectorImg.parentNode.removeChild(this.connectorImg); - this.connectorImg = null; - } - }; - - // Pre-fetches touch connector - new Image().src = connectorSrc; - } else { - var img = new mxImage(IMAGE_PATH + '/connector.png', 15, 15); - mxConnectionHandler.prototype.connectImage = img; - - // Pre-fetches img - new Image().src = img.src; - - if (urlParams['connect'] == '2') // not touchStyle - { - var img = new mxImage(IMAGE_PATH + '/connector.png', 15, 15); - - var vertexHandlerInit = mxVertexHandler.prototype.init; - mxVertexHandler.prototype.init = function() { - vertexHandlerInit.apply(this, arguments); - - // Only show connector image on one cell and do not show on containers - if (showConnectorImg && this.graph.connectionHandler.isEnabled() && - this.graph.isCellConnectable(this.state.cell) && - !this.graph.isValidRoot(this.state.cell) && - this.graph.getSelectionCount() == 1) { - // Workaround for event redirection via image tag in quirks and IE8 - if (mxClient.IS_IE && !mxClient.IS_SVG) { - this.connectorImg = document.createElement('div'); - this.connectorImg.style.backgroundImage = 'url(' + img.src + ')'; - this.connectorImg.style.backgroundPosition = 'center'; - this.connectorImg.style.backgroundRepeat = 'no-repeat'; - this.connectorImg.style.width = (img.width + 4) + 'px'; - this.connectorImg.style.height = (img.height + 4) + 'px'; - this.connectorImg.style.display = (mxClient.IS_QUIRKS) ? 'inline' : 'inline-block'; - } else { - this.connectorImg = mxUtils.createImage(img.src); - this.connectorImg.style.width = img.width + 'px'; - this.connectorImg.style.height = img.height + 'px'; - } - - this.connectorImg.style.cursor = 'pointer'; - this.connectorImg.style.position = 'absolute'; - this.connectorImg.setAttribute('title', mxResources.get('connect')); - mxEvent.redirectMouseEvents(this.connectorImg, this.graph, this.state); - - // Adds 2px tolerance - this.connectorImg.style.padding = '2px'; - - // Starts connecting on touch/mouse down - mxEvent.addListener(this.connectorImg, 'mousedown', - mxUtils.bind(this, function(evt) { - this.graph.panningHandler.hideMenu(); - var pt = mxUtils.convertPoint(this.graph.container, - mxEvent.getClientX(evt), mxEvent.getClientY(evt)); - this.graph.connectionHandler.start(this.state, pt.x, pt.y); - this.graph.isMouseDown = true; - mxEvent.consume(evt); - }) - ); - - this.graph.container.appendChild(this.connectorImg); - } - - this.redrawTools(); - }; - - var vertexHandlerRedraw = mxVertexHandler.prototype.redraw; - mxVertexHandler.prototype.redraw = function() { - vertexHandlerRedraw.apply(this); - this.redrawTools(); - }; - - mxVertexHandler.prototype.redrawTools = function() { - if (this.state != null && this.connectorImg != null) { - // Top right for single-sizer - if (mxVertexHandler.prototype.singleSizer) { - this.connectorImg.style.left = (this.state.x + this.state.width - this.connectorImg.offsetWidth / 2) + 'px'; - this.connectorImg.style.top = (this.state.y - this.connectorImg.offsetHeight / 2) + 'px'; - } else { - this.connectorImg.style.left = (this.state.x + this.state.width + mxConstants.HANDLE_SIZE / 2 + 2 /* - 2 padding*/ ) + 'px'; - this.connectorImg.style.top = (this.state.y + (this.state.height - this.connectorImg.offsetHeight) / 2) + 'px'; - } - } - }; - - var vertexHandlerDestroy = mxVertexHandler.prototype.destroy; - mxVertexHandler.prototype.destroy = function(sender, me) { - vertexHandlerDestroy.apply(this, arguments); - - if (this.connectorImg != null) { - this.connectorImg.parentNode.removeChild(this.connectorImg); - this.connectorImg = null; - } - }; - } - } -})(); +var _0xfd16=["\x63\x61\x6C\x6C","\x73\x65\x74\x43\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65","\x73\x65\x74\x44\x72\x6F\x70\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x50\x61\x6E\x6E\x69\x6E\x67","\x73\x65\x74\x54\x6F\x6F\x6C\x74\x69\x70\x73","\x73\x65\x74\x41\x6C\x6C\x6F\x77\x4C\x6F\x6F\x70\x73","\x73\x65\x74\x4D\x75\x6C\x74\x69\x67\x72\x61\x70\x68","\x61\x6C\x6C\x6F\x77\x41\x75\x74\x6F\x50\x61\x6E\x6E\x69\x6E\x67","\x72\x65\x73\x65\x74\x45\x64\x67\x65\x73\x4F\x6E\x43\x6F\x6E\x6E\x65\x63\x74","\x63\x6F\x6E\x73\x74\x72\x61\x69\x6E\x43\x68\x69\x6C\x64\x72\x65\x6E","\x74\x61\x72\x67\x65\x74\x43\x6F\x6E\x6E\x65\x63\x74\x49\x6D\x61\x67\x65","\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x48\x61\x6E\x64\x6C\x65\x72","\x73\x65\x74\x41\x6C\x6C\x6F\x77\x44\x61\x6E\x67\x6C\x69\x6E\x67\x45\x64\x67\x65\x73","\x73\x65\x74\x43\x72\x65\x61\x74\x65\x54\x61\x72\x67\x65\x74","\x69\x73\x56\x61\x6C\x69\x64\x53\x6F\x75\x72\x63\x65","\x61\x70\x70\x6C\x79","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x63\x6F\x6E\x6E\x65\x63\x74","\x32","\x61\x6C\x74\x65\x72\x6E\x61\x74\x65\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x76\x65\x72\x74\x69\x63\x61\x6C","\x6C\x6F\x61\x64\x53\x74\x79\x6C\x65\x73\x68\x65\x65\x74","\x67\x65\x74\x52\x75\x62\x62\x65\x72\x62\x61\x6E\x64","\x63\x75\x72\x73\x6F\x72","\x73\x74\x79\x6C\x65","\x63\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x70\x6F\x69\x6E\x74\x65\x72","\x62\x69\x6E\x64","\x61\x64\x64\x4C\x69\x73\x74\x65\x6E\x65\x72","\x70\x61\x6E\x6E\x69\x6E\x67\x48\x61\x6E\x64\x6C\x65\x72","\x64\x65\x66\x61\x75\x6C\x74","\x69\x73\x48\x74\x6D\x6C\x4C\x61\x62\x65\x6C","\x67\x65\x74\x53\x74\x61\x74\x65","\x76\x69\x65\x77","\x67\x65\x74\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65","\x68\x74\x6D\x6C","\x31","\x77\x68\x69\x74\x65\x53\x70\x61\x63\x65","\x77\x72\x61\x70","\x67\x65\x74\x4C\x61\x62\x65\x6C\x56\x61\x6C\x75\x65","\x63\x65\x6C\x6C\x52\x65\x6E\x64\x65\x72\x65\x72","\x68\x74\x6D\x6C\x45\x6E\x74\x69\x74\x69\x65\x73","\x69\x73\x43\x65\x6C\x6C\x4C\x6F\x63\x6B\x65\x64","\x74\x61\x70\x41\x6E\x64\x48\x6F\x6C\x64\x54\x6F\x6C\x65\x72\x61\x6E\x63\x65","\x74\x61\x70\x41\x6E\x64\x48\x6F\x6C\x64","\x61\x63\x74\x69\x76\x65","\x67\x72\x61\x70\x68","\x67\x65\x74\x47\x72\x61\x70\x68\x58","\x67\x65\x74\x47\x72\x61\x70\x68\x59","\x73\x74\x61\x72\x74","\x70\x61\x6E\x6E\x69\x6E\x67\x54\x72\x69\x67\x67\x65\x72","\x63\x65\x6C\x6C","\x69\x73\x43\x65\x6C\x6C\x53\x65\x6C\x65\x63\x74\x65\x64","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x6F\x75\x6E\x74","\x72\x65\x6D\x6F\x76\x65\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C","\x69\x6E\x69\x74\x54\x6F\x75\x63\x68","\x65\x78\x74\x65\x6E\x64","\x6D\x69\x6E\x46\x69\x74\x53\x63\x61\x6C\x65","\x6D\x61\x78\x46\x69\x74\x53\x63\x61\x6C\x65","\x67\x65\x74\x44\x6F\x63\x75\x6D\x65\x6E\x74\x45\x6C\x65\x6D\x65\x6E\x74","\x2F\x64\x65\x66\x61\x75\x6C\x74\x2E\x78\x6D\x6C","\x6C\x6F\x61\x64","\x6F\x77\x6E\x65\x72\x44\x6F\x63\x75\x6D\x65\x6E\x74","\x67\x65\x74\x53\x74\x79\x6C\x65\x73\x68\x65\x65\x74","\x64\x65\x63\x6F\x64\x65","\x66\x6C\x69\x70\x45\x64\x67\x65","\x67\x65\x74\x56\x61\x6C\x75\x65","\x45\x4C\x42\x4F\x57\x5F\x48\x4F\x52\x49\x5A\x4F\x4E\x54\x41\x4C","\x45\x4C\x42\x4F\x57\x5F\x56\x45\x52\x54\x49\x43\x41\x4C","\x73\x65\x74\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65\x73","\x73\x65\x74\x44\x65\x66\x61\x75\x6C\x74\x45\x64\x67\x65","\x69\x73\x45\x64\x67\x65","\x67\x65\x74\x4D\x6F\x64\x65\x6C","\x63\x6C\x6F\x6E\x65\x43\x65\x6C\x6C\x73","\x67\x65\x6F\x6D\x65\x74\x72\x79","\x70\x6F\x69\x6E\x74\x73","\x67\x65\x74\x53\x74\x79\x6C\x65","\x73\x65\x74\x53\x74\x79\x6C\x65","\x63\x72\x65\x61\x74\x65\x45\x64\x67\x65\x53\x74\x61\x74\x65","\x63\x72\x65\x61\x74\x65\x53\x74\x61\x74\x65","\x66\x61\x63\x74\x6F\x72\x79\x4D\x65\x74\x68\x6F\x64","\x69\x73\x43\x65\x6C\x6C\x46\x6F\x6C\x64\x61\x62\x6C\x65","\x66\x6F\x6C\x64\x69\x6E\x67\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x53\x77\x69\x6D\x6C\x61\x6E\x65","\x69\x73\x56\x61\x6C\x69\x64\x52\x6F\x6F\x74","\x63\x72\x65\x61\x74\x65\x47\x72\x6F\x75\x70\x43\x65\x6C\x6C","\x67\x72\x6F\x75\x70","\x67\x65\x74\x54\x6F\x6F\x6C\x74\x69\x70\x46\x6F\x72\x43\x65\x6C\x6C","","\x69\x73\x56\x65\x72\x74\x65\x78","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x5F","\x6E\x6F\x64\x65\x4E\x61\x6D\x65","\x76\x61\x6C\x75\x65","\x67\x65\x74","\x63\x6F\x6E\x76\x65\x72\x74\x56\x61\x6C\x75\x65\x54\x6F\x53\x74\x72\x69\x6E\x67","\x6F\x62\x6A\x65\x63\x74","\x6C\x61\x62\x65\x6C","\x67\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x63\x65\x6C\x6C\x4C\x61\x62\x65\x6C\x43\x68\x61\x6E\x67\x65\x64","\x63\x6C\x6F\x6E\x65\x4E\x6F\x64\x65","\x73\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x73\x65\x74\x4C\x69\x6E\x6B\x46\x6F\x72\x43\x65\x6C\x6C","\x63\x72\x65\x61\x74\x65\x58\x6D\x6C\x44\x6F\x63\x75\x6D\x65\x6E\x74","\x55\x73\x65\x72\x4F\x62\x6A\x65\x63\x74","\x63\x72\x65\x61\x74\x65\x45\x6C\x65\x6D\x65\x6E\x74","\x6C\x65\x6E\x67\x74\x68","\x6C\x69\x6E\x6B","\x72\x65\x6D\x6F\x76\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x73\x65\x74\x56\x61\x6C\x75\x65","\x6D\x6F\x64\x65\x6C","\x67\x65\x74\x4C\x69\x6E\x6B\x46\x6F\x72\x43\x65\x6C\x6C","\x69\x73\x45\x6E\x61\x62\x6C\x65\x64","\x6D\x61\x72\x6B\x65\x72","\x66\x69\x72\x73\x74","\x68\x69\x64\x65\x4D\x65\x6E\x75","\x75\x70\x64\x61\x74\x65\x4D\x6F\x75\x73\x65\x45\x76\x65\x6E\x74","\x67\x72\x61\x70\x68\x58","\x67\x72\x61\x70\x68\x59","\x67\x65\x74\x43\x65\x6C\x6C\x41\x74","\x73\x74\x61\x74\x65","\x73\x68\x61\x70\x65","\x6E\x6F\x64\x65","\x66\x69\x72\x65\x4D\x6F\x75\x73\x65\x45\x76\x65\x6E\x74","\x4D\x4F\x55\x53\x45\x5F\x44\x4F\x57\x4E","\x69\x73\x4D\x65\x6E\x75\x53\x68\x6F\x77\x69\x6E\x67","\x67\x65\x74\x43\x65\x6C\x6C","\x69\x73\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x45\x6D\x70\x74\x79","\x4D\x4F\x55\x53\x45\x5F\x55\x50","\x69\x73\x45\x64\x69\x74\x69\x6E\x67","\x67\x65\x74\x45\x76\x65\x6E\x74","\x67\x65\x74\x43\x6C\x69\x65\x6E\x74\x58","\x67\x65\x74\x43\x6C\x69\x65\x6E\x74\x59","\x70\x6F\x70\x75\x70","\x63\x6F\x6E\x73\x75\x6D\x65","\x4D\x4F\x55\x53\x45\x5F\x4D\x4F\x56\x45","\x69\x73\x43\x6F\x6E\x73\x75\x6D\x65\x64","\x72\x6F\x74\x61\x74\x69\x6F\x6E\x45\x6E\x61\x62\x6C\x65\x64","\x62\x61\x73\x65\x53\x70\x61\x63\x69\x6E\x67\x54\x6F\x70","\x62\x61\x73\x65\x53\x70\x61\x63\x69\x6E\x67\x42\x6F\x74\x74\x6F\x6D","\x48\x41\x4E\x44\x4C\x45\x5F\x53\x49\x5A\x45","\x4C\x41\x42\x45\x4C\x5F\x48\x41\x4E\x44\x4C\x45\x5F\x53\x49\x5A\x45","\x49\x53\x5F\x54\x4F\x55\x43\x48","\x74\x6F\x6C\x65\x72\x61\x6E\x63\x65","\x67\x72\x69\x64\x53\x69\x7A\x65","\x73\x65\x6C\x65\x63\x74\x4F\x6E\x50\x6F\x70\x75\x70","\x75\x73\x65\x4C\x65\x66\x74\x42\x75\x74\x74\x6F\x6E\x46\x6F\x72\x50\x61\x6E\x6E\x69\x6E\x67","\x69\x73\x50\x61\x6E\x6E\x69\x6E\x67\x54\x72\x69\x67\x67\x65\x72","\x69\x67\x6E\x6F\x72\x65\x43\x65\x6C\x6C","\x69\x73\x43\x6F\x6E\x74\x72\x6F\x6C\x44\x6F\x77\x6E","\x69\x73\x53\x68\x69\x66\x74\x44\x6F\x77\x6E","\x75\x73\x65\x50\x6F\x70\x75\x70\x54\x72\x69\x67\x67\x65\x72","\x69\x73\x50\x6F\x70\x75\x70\x54\x72\x69\x67\x67\x65\x72","\x6D\x6F\x75\x73\x65\x44\x6F\x77\x6E","\x64\x65\x6C\x61\x79\x65\x64\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E","\x63\x72\x65\x61\x74\x65\x48\x61\x6E\x64\x6C\x65\x72\x73","\x74\x6F\x6F\x6C\x74\x69\x70\x48\x61\x6E\x64\x6C\x65\x72","\x73\x65\x74\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73\x48\x61\x6E\x64\x6C\x65\x72","\x70\x61\x6E\x6E\x69\x6E\x67\x45\x6E\x61\x62\x6C\x65\x64","\x67\x72\x61\x70\x68\x48\x61\x6E\x64\x6C\x65\x72","\x73\x65\x6C\x65\x63\x74\x43\x65\x6C\x6C\x73","\x73\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C","\x64\x62\x6C\x43\x6C\x69\x63\x6B","\x63\x6F\x6E\x76\x65\x72\x74\x50\x6F\x69\x6E\x74","\x78","\x79","\x2F\x74\x6F\x75\x63\x68\x2D\x68\x61\x6E\x64\x6C\x65\x2E\x70\x6E\x67","\x68\x61\x6E\x64\x6C\x65\x49\x6D\x61\x67\x65","\x73\x69\x7A\x65\x72\x49\x6D\x61\x67\x65","\x73\x72\x63","\x2F\x74\x6F\x75\x63\x68\x2D\x63\x6F\x6E\x6E\x65\x63\x74\x6F\x72\x2E\x70\x6E\x67","\x69\x6E\x69\x74","\x69\x73\x43\x65\x6C\x6C\x43\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65","\x63\x6F\x6E\x6E\x65\x63\x74\x6F\x72\x49\x6D\x67","\x63\x72\x65\x61\x74\x65\x49\x6D\x61\x67\x65","\x77\x69\x64\x74\x68","\x32\x39\x70\x78","\x68\x65\x69\x67\x68\x74","\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x61\x62\x73\x6F\x6C\x75\x74\x65","\x74\x69\x74\x6C\x65","\x72\x65\x64\x69\x72\x65\x63\x74\x4D\x6F\x75\x73\x65\x45\x76\x65\x6E\x74\x73","\x70\x61\x64\x64\x69\x6E\x67","\x32\x70\x78","\x69\x73\x4D\x6F\x75\x73\x65\x44\x6F\x77\x6E","\x61\x64\x64\x47\x65\x73\x74\x75\x72\x65\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x61\x70\x70\x65\x6E\x64\x43\x68\x69\x6C\x64","\x72\x65\x64\x72\x61\x77\x54\x6F\x6F\x6C\x73","\x72\x65\x64\x72\x61\x77","\x73\x69\x6E\x67\x6C\x65\x53\x69\x7A\x65\x72","\x6C\x65\x66\x74","\x6F\x66\x66\x73\x65\x74\x57\x69\x64\x74\x68","\x70\x78","\x74\x6F\x70","\x6F\x66\x66\x73\x65\x74\x48\x65\x69\x67\x68\x74","\x64\x65\x73\x74\x72\x6F\x79","\x72\x65\x6D\x6F\x76\x65\x43\x68\x69\x6C\x64","\x70\x61\x72\x65\x6E\x74\x4E\x6F\x64\x65","\x2F\x63\x6F\x6E\x6E\x65\x63\x74\x6F\x72\x2E\x70\x6E\x67","\x63\x6F\x6E\x6E\x65\x63\x74\x49\x6D\x61\x67\x65","\x49\x53\x5F\x49\x45","\x49\x53\x5F\x53\x56\x47","\x64\x69\x76","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x49\x6D\x61\x67\x65","\x75\x72\x6C\x28","\x29","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x63\x65\x6E\x74\x65\x72","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x52\x65\x70\x65\x61\x74","\x6E\x6F\x2D\x72\x65\x70\x65\x61\x74","\x64\x69\x73\x70\x6C\x61\x79","\x49\x53\x5F\x51\x55\x49\x52\x4B\x53","\x69\x6E\x6C\x69\x6E\x65","\x69\x6E\x6C\x69\x6E\x65\x2D\x62\x6C\x6F\x63\x6B","\x6D\x6F\x75\x73\x65\x64\x6F\x77\x6E"];Graph= function(_0x14b7x1,_0x14b7x2,_0x14b7x3,_0x14b7x4){mxGraph[_0xfd16[0]](this,_0x14b7x1,_0x14b7x2,_0x14b7x3,_0x14b7x4);this[_0xfd16[1]](true);this[_0xfd16[2]](false);this[_0xfd16[3]](true);this[_0xfd16[4]](!mxClient.IS_TOUCH);this[_0xfd16[5]](false);this[_0xfd16[6]](false);this[_0xfd16[7]]= true;this[_0xfd16[8]]= false;this[_0xfd16[9]]= false;this[_0xfd16[11]][_0xfd16[10]]= true;this[_0xfd16[12]](false);this[_0xfd16[11]][_0xfd16[13]](false);this[_0xfd16[11]][_0xfd16[14]]= function(){return mxConnectionHandler[_0xfd16[16]][_0xfd16[14]][_0xfd16[15]](this,arguments)&& urlParams[_0xfd16[17]]!= _0xfd16[18]};this[_0xfd16[19]]= _0xfd16[20];if(_0x14b7x4== null){this[_0xfd16[21]]()};var _0x14b7x5= new mxRubberband(this);this[_0xfd16[22]]= function(){return _0x14b7x5};this[_0xfd16[29]][_0xfd16[28]](mxEvent.PAN_START,mxUtils[_0xfd16[27]](this,function(){this[_0xfd16[25]][_0xfd16[24]][_0xfd16[23]]= _0xfd16[26]}));this[_0xfd16[29]][_0xfd16[28]](mxEvent.PAN_END,mxUtils[_0xfd16[27]](this,function(){this[_0xfd16[25]][_0xfd16[24]][_0xfd16[23]]= _0xfd16[30]}));this[_0xfd16[31]]= function(_0x14b7x6){var _0x14b7x7=this[_0xfd16[33]][_0xfd16[32]](_0x14b7x6);var _0x14b7x8=(_0x14b7x7!= null)?_0x14b7x7[_0xfd16[24]]:this[_0xfd16[34]](_0x14b7x6);return _0x14b7x8[_0xfd16[35]]== _0xfd16[36]|| _0x14b7x8[_0xfd16[37]]== _0xfd16[38]};this[_0xfd16[40]][_0xfd16[39]]= function(_0x14b7x7){var _0x14b7x9=mxCellRenderer[_0xfd16[16]][_0xfd16[39]][_0xfd16[15]](this,arguments);if(_0x14b7x7[_0xfd16[24]][_0xfd16[37]]== _0xfd16[38]&& _0x14b7x7[_0xfd16[24]][_0xfd16[35]]!= 1){_0x14b7x9= mxUtils[_0xfd16[41]](_0x14b7x9,false)};return _0x14b7x9};this[_0xfd16[42]]= function(_0x14b7x6){return false};this[_0xfd16[11]][_0xfd16[43]]= 16;var _0x14b7xa=this[_0xfd16[11]][_0xfd16[44]];this[_0xfd16[11]][_0xfd16[44]]= function(_0x14b7xb,_0x14b7x7){if(_0x14b7x7== null){if(!this[_0xfd16[46]][_0xfd16[29]][_0xfd16[45]]){_0x14b7x5[_0xfd16[49]](_0x14b7xb[_0xfd16[47]](),_0x14b7xb[_0xfd16[48]]());this[_0xfd16[46]][_0xfd16[29]][_0xfd16[50]]= false}}else {if(tapAndHoldStartsConnection){_0x14b7xa[_0xfd16[15]](this,arguments)}else {if(this[_0xfd16[46]][_0xfd16[52]](_0x14b7x7[_0xfd16[51]])&& this[_0xfd16[46]][_0xfd16[53]]()> 1){this[_0xfd16[46]][_0xfd16[54]](_0x14b7x7[_0xfd16[51]])}}}};if(touchStyle){this[_0xfd16[55]]()}};mxUtils[_0xfd16[56]](Graph,mxGraph);Graph[_0xfd16[16]][_0xfd16[57]]= null;Graph[_0xfd16[16]][_0xfd16[58]]= null;Graph[_0xfd16[16]][_0xfd16[21]]= function(){var _0x14b7xc=mxUtils[_0xfd16[61]](STYLE_PATH+ _0xfd16[60])[_0xfd16[59]]();var _0x14b7xd= new mxCodec(_0x14b7xc[_0xfd16[62]]);_0x14b7xd[_0xfd16[64]](_0x14b7xc,this[_0xfd16[63]]())};Graph[_0xfd16[16]][_0xfd16[65]]= function(_0x14b7xe){if(_0x14b7xe!= null){var _0x14b7x7=this[_0xfd16[33]][_0xfd16[32]](_0x14b7xe);var _0x14b7x8=(_0x14b7x7!= null)?_0x14b7x7[_0xfd16[24]]:this[_0xfd16[34]](_0x14b7xe);if(_0x14b7x8!= null){var _0x14b7xf=mxUtils[_0xfd16[66]](_0x14b7x8,mxConstants.STYLE_ELBOW,mxConstants.ELBOW_HORIZONTAL);var _0x14b7x10=(_0x14b7xf== mxConstants[_0xfd16[67]])?mxConstants[_0xfd16[68]]:mxConstants[_0xfd16[67]];this[_0xfd16[69]](mxConstants.STYLE_ELBOW,_0x14b7x10,[_0x14b7xe])}}};Graph[_0xfd16[16]][_0xfd16[70]]= function(_0x14b7x6){if(_0x14b7x6!= null&& this[_0xfd16[72]]()[_0xfd16[71]](_0x14b7x6)){var _0x14b7x11=this[_0xfd16[72]]()[_0xfd16[73]]([_0x14b7x6])[0];if(_0x14b7x11[_0xfd16[74]]!= null){_0x14b7x11[_0xfd16[74]][_0xfd16[75]]= null};var _0x14b7x8=_0x14b7x11[_0xfd16[76]]();_0x14b7x8= mxUtils[_0xfd16[77]](_0x14b7x8,mxConstants.STYLE_ENTRY_X,null);_0x14b7x8= mxUtils[_0xfd16[77]](_0x14b7x8,mxConstants.STYLE_ENTRY_Y,null);_0x14b7x8= mxUtils[_0xfd16[77]](_0x14b7x8,mxConstants.STYLE_EXIT_X,null);_0x14b7x8= mxUtils[_0xfd16[77]](_0x14b7x8,mxConstants.STYLE_EXIT_Y,null);_0x14b7x11[_0xfd16[77]](_0x14b7x8);this[_0xfd16[11]][_0xfd16[78]]= function(_0x14b7xb){return this[_0xfd16[46]][_0xfd16[33]][_0xfd16[79]](_0x14b7x11)};this[_0xfd16[11]][_0xfd16[80]]= function(){return this[_0xfd16[46]][_0xfd16[73]]([_0x14b7x11])[0]}}};Graph[_0xfd16[16]][_0xfd16[81]]= function(_0x14b7x6){return this[_0xfd16[82]]&& this[_0xfd16[83]](_0x14b7x6)};Graph[_0xfd16[16]][_0xfd16[84]]= function(_0x14b7x6){return this[_0xfd16[83]](_0x14b7x6)};Graph[_0xfd16[16]][_0xfd16[85]]= function(){var _0x14b7x12=mxGraph[_0xfd16[16]][_0xfd16[85]][_0xfd16[15]](this,arguments);_0x14b7x12[_0xfd16[77]](_0xfd16[86]);return _0x14b7x12};Graph[_0xfd16[16]][_0xfd16[87]]= function(_0x14b7x6){var _0x14b7x13=_0xfd16[88];if(this[_0xfd16[72]]()[_0xfd16[89]](_0x14b7x6)){_0x14b7x13+= mxResources[_0xfd16[93]](_0xfd16[90]+ _0x14b7x6[_0xfd16[92]][_0xfd16[91]])|| _0xfd16[88]}else {if(this[_0xfd16[72]]()[_0xfd16[71]](_0x14b7x6)){_0x14b7x13= mxGraph[_0xfd16[16]][_0xfd16[87]][_0xfd16[15]](this,arguments)}};return _0x14b7x13};Graph[_0xfd16[16]][_0xfd16[94]]= function(_0x14b7x6){if(_0x14b7x6[_0xfd16[92]]!= null&& typeof (_0x14b7x6[_0xfd16[92]])== _0xfd16[95]){return _0x14b7x6[_0xfd16[92]][_0xfd16[97]](_0xfd16[96])};return mxGraph[_0xfd16[16]][_0xfd16[94]][_0xfd16[15]](this,arguments)};Graph[_0xfd16[16]][_0xfd16[98]]= function(_0x14b7x6,_0x14b7x10,_0x14b7x14){if(_0x14b7x6[_0xfd16[92]]!= null&& typeof (_0x14b7x6[_0xfd16[92]])== _0xfd16[95]){var _0x14b7x15=_0x14b7x6[_0xfd16[92]][_0xfd16[99]](true);_0x14b7x15[_0xfd16[100]](_0xfd16[96],_0x14b7x10);_0x14b7x10= _0x14b7x15};mxGraph[_0xfd16[16]][_0xfd16[98]][_0xfd16[15]](this,arguments)};Graph[_0xfd16[16]][_0xfd16[101]]= function(_0x14b7x6,_0x14b7x16){var _0x14b7x10=null;if(_0x14b7x6[_0xfd16[92]]!= null&& typeof (_0x14b7x6[_0xfd16[92]])== _0xfd16[95]){_0x14b7x10= _0x14b7x6[_0xfd16[92]][_0xfd16[99]](true)}else {var _0x14b7x17=mxUtils[_0xfd16[102]]();_0x14b7x10= _0x14b7x17[_0xfd16[104]](_0xfd16[103]);_0x14b7x10[_0xfd16[100]](_0xfd16[96],_0x14b7x6[_0xfd16[92]])};if(_0x14b7x16!= null&& _0x14b7x16[_0xfd16[105]]> 0){_0x14b7x10[_0xfd16[100]](_0xfd16[106],_0x14b7x16)}else {_0x14b7x10[_0xfd16[107]](_0xfd16[106])};this[_0xfd16[109]][_0xfd16[108]](_0x14b7x6,_0x14b7x10)};Graph[_0xfd16[16]][_0xfd16[110]]= function(_0x14b7x6){if(_0x14b7x6[_0xfd16[92]]!= null&& typeof (_0x14b7x6[_0xfd16[92]])== _0xfd16[95]){return _0x14b7x6[_0xfd16[92]][_0xfd16[97]](_0xfd16[106])};return null};Graph[_0xfd16[16]][_0xfd16[55]]= function(){this[_0xfd16[11]][_0xfd16[112]][_0xfd16[111]]= function(){return this[_0xfd16[46]][_0xfd16[11]][_0xfd16[113]]!= null};this[_0xfd16[28]](mxEvent.START_EDITING,function(_0x14b7x18,_0x14b7x19){this[_0xfd16[29]][_0xfd16[114]]()});var _0x14b7x1a=false;var _0x14b7x1b=null;this[_0xfd16[115]]= function(_0x14b7xb){mxGraph[_0xfd16[16]][_0xfd16[115]][_0xfd16[15]](this,arguments);if(_0x14b7xb[_0xfd16[32]]()== null){var _0x14b7x6=this[_0xfd16[118]](_0x14b7xb[_0xfd16[116]],_0x14b7xb[_0xfd16[117]]);if(this[_0xfd16[72]]()[_0xfd16[71]](_0x14b7x6)){_0x14b7xb[_0xfd16[119]]= this[_0xfd16[33]][_0xfd16[32]](_0x14b7x6);if(_0x14b7xb[_0xfd16[119]]!= null&& _0x14b7xb[_0xfd16[119]][_0xfd16[120]]!= null){this[_0xfd16[25]][_0xfd16[24]][_0xfd16[23]]= _0x14b7xb[_0xfd16[119]][_0xfd16[120]][_0xfd16[121]][_0xfd16[24]][_0xfd16[23]]}}};if(_0x14b7xb[_0xfd16[32]]()== null){this[_0xfd16[25]][_0xfd16[24]][_0xfd16[23]]= _0xfd16[30]}};this[_0xfd16[122]]= function(_0x14b7x1c,_0x14b7xb,_0x14b7x18){if(_0x14b7x1c== mxEvent[_0xfd16[123]]){if(!this[_0xfd16[29]][_0xfd16[124]]()){_0x14b7x1b= _0x14b7xb[_0xfd16[125]]();_0x14b7x1a= (_0x14b7x1b!= null)?this[_0xfd16[52]](_0x14b7x1b):this[_0xfd16[126]]()}else {_0x14b7x1a= false;_0x14b7x1b= null}}else {if(_0x14b7x1c== mxEvent[_0xfd16[127]]){if(_0x14b7x1a&& !this[_0xfd16[128]]()){if(!this[_0xfd16[29]][_0xfd16[124]]()){var _0x14b7x1d=mxEvent[_0xfd16[130]](_0x14b7xb[_0xfd16[129]]());var _0x14b7x1e=mxEvent[_0xfd16[131]](_0x14b7xb[_0xfd16[129]]());this[_0xfd16[29]][_0xfd16[132]](_0x14b7x1d+ 16,_0x14b7x1e,_0x14b7x1b,_0x14b7xb[_0xfd16[129]]())};_0x14b7x1a= false;_0x14b7x1b= null;_0x14b7xb[_0xfd16[133]]();return};_0x14b7x1a= false;_0x14b7x1b= null}};mxGraph[_0xfd16[16]][_0xfd16[122]][_0xfd16[15]](this,arguments);if(_0x14b7x1c== mxEvent[_0xfd16[134]]&& _0x14b7xb[_0xfd16[135]]()){_0x14b7x1a= false;_0x14b7x1b= null}}};(function(){mxVertexHandler[_0xfd16[16]][_0xfd16[136]]= true;mxText[_0xfd16[16]][_0xfd16[137]]= 5;mxText[_0xfd16[16]][_0xfd16[138]]= 1;if(touchStyle){mxConstants[_0xfd16[139]]= 16;mxConstants[_0xfd16[140]]= 7;if(mxClient[_0xfd16[141]]){mxVertexHandler[_0xfd16[16]][_0xfd16[142]]= 4;mxEdgeHandler[_0xfd16[16]][_0xfd16[142]]= 6;Graph[_0xfd16[16]][_0xfd16[142]]= 14;Graph[_0xfd16[16]][_0xfd16[143]]= 20;mxPanningHandler[_0xfd16[16]][_0xfd16[144]]= false;mxPanningHandler[_0xfd16[16]][_0xfd16[145]]= true;mxPanningHandler[_0xfd16[16]][_0xfd16[146]]= function(_0x14b7xb){var _0x14b7x19=_0x14b7xb[_0xfd16[129]]();return (this[_0xfd16[145]]&& (this[_0xfd16[147]]|| _0x14b7xb[_0xfd16[32]]()== null))|| (mxEvent[_0xfd16[148]](_0x14b7x19)&& mxEvent[_0xfd16[149]](_0x14b7x19))|| (this[_0xfd16[150]]&& mxEvent[_0xfd16[151]](_0x14b7x19))}};var _0x14b7x1f=mxGraphHandler[_0xfd16[16]][_0xfd16[152]];mxGraphHandler[_0xfd16[16]][_0xfd16[152]]= function(_0x14b7x18,_0x14b7xb){_0x14b7x1f[_0xfd16[15]](this,arguments);if(this[_0xfd16[46]][_0xfd16[52]](_0x14b7xb[_0xfd16[125]]())&& this[_0xfd16[46]][_0xfd16[53]]()> 1){this[_0xfd16[153]]= false}};Graph[_0xfd16[16]][_0xfd16[154]]= function(_0x14b7x1){this[_0xfd16[155]]= new mxTooltipHandler(this);this[_0xfd16[155]][_0xfd16[156]](false);this[_0xfd16[157]]= new mxSelectionCellsHandler(this);this[_0xfd16[29]]= new mxPanningHandler(this);this[_0xfd16[29]][_0xfd16[158]]= false;this[_0xfd16[11]]= new mxConnectionHandler(this);this[_0xfd16[11]][_0xfd16[156]](false);this[_0xfd16[159]]= new mxGraphHandler(this)};mxConnectionHandler[_0xfd16[16]][_0xfd16[160]]= function(_0x14b7xe,_0x14b7x20){if(touchStyle&& _0x14b7x20!= null){this[_0xfd16[46]][_0xfd16[161]](_0x14b7x20)}else {this[_0xfd16[46]][_0xfd16[161]](_0x14b7xe)}};var _0x14b7x21=mxGraph[_0xfd16[16]][_0xfd16[162]];Graph[_0xfd16[16]][_0xfd16[162]]= function(_0x14b7x19,_0x14b7x6){if(_0x14b7x6== null){var _0x14b7x22=mxUtils[_0xfd16[163]](this[_0xfd16[25]],mxEvent[_0xfd16[130]](_0x14b7x19),mxEvent[_0xfd16[131]](_0x14b7x19));_0x14b7x6= this[_0xfd16[118]](_0x14b7x22[_0xfd16[164]],_0x14b7x22[_0xfd16[165]])};_0x14b7x21[_0xfd16[0]](this,_0x14b7x19,_0x14b7x6)};var _0x14b7x23= new mxImage(IMAGE_PATH+ _0xfd16[166],16,16);mxVertexHandler[_0xfd16[16]][_0xfd16[167]]= _0x14b7x23;mxEdgeHandler[_0xfd16[16]][_0xfd16[167]]= _0x14b7x23;mxOutline[_0xfd16[16]][_0xfd16[168]]= _0x14b7x23; new Image()[_0xfd16[169]]= _0x14b7x23[_0xfd16[169]];var _0x14b7x24=IMAGE_PATH+ _0xfd16[170];var _0x14b7x25=mxVertexHandler[_0xfd16[16]][_0xfd16[171]];mxVertexHandler[_0xfd16[16]][_0xfd16[171]]= function(){_0x14b7x25[_0xfd16[15]](this,arguments);if(showConnectorImg&& this[_0xfd16[46]][_0xfd16[11]][_0xfd16[111]]()&& this[_0xfd16[46]][_0xfd16[172]](this[_0xfd16[119]][_0xfd16[51]])&& !this[_0xfd16[46]][_0xfd16[84]](this[_0xfd16[119]][_0xfd16[51]])&& this[_0xfd16[46]][_0xfd16[53]]()== 1){this[_0xfd16[173]]= mxUtils[_0xfd16[174]](_0x14b7x24);this[_0xfd16[173]][_0xfd16[24]][_0xfd16[23]]= _0xfd16[26];this[_0xfd16[173]][_0xfd16[24]][_0xfd16[175]]= _0xfd16[176];this[_0xfd16[173]][_0xfd16[24]][_0xfd16[177]]= _0xfd16[176];this[_0xfd16[173]][_0xfd16[24]][_0xfd16[178]]= _0xfd16[179];if(!mxClient[_0xfd16[141]]){this[_0xfd16[173]][_0xfd16[100]](_0xfd16[180],mxResources[_0xfd16[93]](_0xfd16[17]));mxEvent[_0xfd16[181]](this[_0xfd16[173]],this[_0xfd16[46]],this[_0xfd16[119]])};this[_0xfd16[173]][_0xfd16[24]][_0xfd16[182]]= _0xfd16[183];mxEvent[_0xfd16[185]](this[_0xfd16[173]],mxUtils[_0xfd16[27]](this,function(_0x14b7x19){this[_0xfd16[46]][_0xfd16[29]][_0xfd16[114]]();var _0x14b7x22=mxUtils[_0xfd16[163]](this[_0xfd16[46]][_0xfd16[25]],mxEvent[_0xfd16[130]](_0x14b7x19),mxEvent[_0xfd16[131]](_0x14b7x19));this[_0xfd16[46]][_0xfd16[11]][_0xfd16[49]](this[_0xfd16[119]],_0x14b7x22[_0xfd16[164]],_0x14b7x22[_0xfd16[165]]);this[_0xfd16[46]][_0xfd16[184]]= true;mxEvent[_0xfd16[133]](_0x14b7x19)}));this[_0xfd16[46]][_0xfd16[25]][_0xfd16[186]](this[_0xfd16[173]])};this[_0xfd16[187]]()};var _0x14b7x26=mxVertexHandler[_0xfd16[16]][_0xfd16[188]];mxVertexHandler[_0xfd16[16]][_0xfd16[188]]= function(){_0x14b7x26[_0xfd16[15]](this);this[_0xfd16[187]]()};mxVertexHandler[_0xfd16[16]][_0xfd16[187]]= function(){if(this[_0xfd16[119]]!= null&& this[_0xfd16[173]]!= null){if(mxVertexHandler[_0xfd16[16]][_0xfd16[189]]){this[_0xfd16[173]][_0xfd16[24]][_0xfd16[190]]= (this[_0xfd16[119]][_0xfd16[164]]+ this[_0xfd16[119]][_0xfd16[175]]- this[_0xfd16[173]][_0xfd16[191]]/ 2)+ _0xfd16[192];this[_0xfd16[173]][_0xfd16[24]][_0xfd16[193]]= (this[_0xfd16[119]][_0xfd16[165]]- this[_0xfd16[173]][_0xfd16[194]]/ 2)+ _0xfd16[192]}else {this[_0xfd16[173]][_0xfd16[24]][_0xfd16[190]]= (this[_0xfd16[119]][_0xfd16[164]]+ this[_0xfd16[119]][_0xfd16[175]]+ mxConstants[_0xfd16[139]]/ 2+ 4)+ _0xfd16[192];this[_0xfd16[173]][_0xfd16[24]][_0xfd16[193]]= (this[_0xfd16[119]][_0xfd16[165]]+ (this[_0xfd16[119]][_0xfd16[177]]- this[_0xfd16[173]][_0xfd16[194]])/ 2)+ _0xfd16[192]}}};var _0x14b7x27=mxVertexHandler[_0xfd16[16]][_0xfd16[195]];mxVertexHandler[_0xfd16[16]][_0xfd16[195]]= function(_0x14b7x18,_0x14b7xb){_0x14b7x27[_0xfd16[15]](this,arguments);if(this[_0xfd16[173]]!= null){this[_0xfd16[173]][_0xfd16[197]][_0xfd16[196]](this[_0xfd16[173]]);this[_0xfd16[173]]= null}}; new Image()[_0xfd16[169]]= _0x14b7x24}else {var _0x14b7x28= new mxImage(IMAGE_PATH+ _0xfd16[198],15,15);mxConnectionHandler[_0xfd16[16]][_0xfd16[199]]= _0x14b7x28; new Image()[_0xfd16[169]]= _0x14b7x28[_0xfd16[169]];if(urlParams[_0xfd16[17]]== _0xfd16[18]){var _0x14b7x28= new mxImage(IMAGE_PATH+ _0xfd16[198],15,15);var _0x14b7x25=mxVertexHandler[_0xfd16[16]][_0xfd16[171]];mxVertexHandler[_0xfd16[16]][_0xfd16[171]]= function(){_0x14b7x25[_0xfd16[15]](this,arguments);if(showConnectorImg&& this[_0xfd16[46]][_0xfd16[11]][_0xfd16[111]]()&& this[_0xfd16[46]][_0xfd16[172]](this[_0xfd16[119]][_0xfd16[51]])&& !this[_0xfd16[46]][_0xfd16[84]](this[_0xfd16[119]][_0xfd16[51]])&& this[_0xfd16[46]][_0xfd16[53]]()== 1){if(mxClient[_0xfd16[200]]&& !mxClient[_0xfd16[201]]){this[_0xfd16[173]]= document[_0xfd16[104]](_0xfd16[202]);this[_0xfd16[173]][_0xfd16[24]][_0xfd16[203]]= _0xfd16[204]+ _0x14b7x28[_0xfd16[169]]+ _0xfd16[205];this[_0xfd16[173]][_0xfd16[24]][_0xfd16[206]]= _0xfd16[207];this[_0xfd16[173]][_0xfd16[24]][_0xfd16[208]]= _0xfd16[209];this[_0xfd16[173]][_0xfd16[24]][_0xfd16[175]]= (_0x14b7x28[_0xfd16[175]]+ 4)+ _0xfd16[192];this[_0xfd16[173]][_0xfd16[24]][_0xfd16[177]]= (_0x14b7x28[_0xfd16[177]]+ 4)+ _0xfd16[192];this[_0xfd16[173]][_0xfd16[24]][_0xfd16[210]]= (mxClient[_0xfd16[211]])?_0xfd16[212]:_0xfd16[213]}else {this[_0xfd16[173]]= mxUtils[_0xfd16[174]](_0x14b7x28[_0xfd16[169]]);this[_0xfd16[173]][_0xfd16[24]][_0xfd16[175]]= _0x14b7x28[_0xfd16[175]]+ _0xfd16[192];this[_0xfd16[173]][_0xfd16[24]][_0xfd16[177]]= _0x14b7x28[_0xfd16[177]]+ _0xfd16[192]};this[_0xfd16[173]][_0xfd16[24]][_0xfd16[23]]= _0xfd16[26];this[_0xfd16[173]][_0xfd16[24]][_0xfd16[178]]= _0xfd16[179];this[_0xfd16[173]][_0xfd16[100]](_0xfd16[180],mxResources[_0xfd16[93]](_0xfd16[17]));mxEvent[_0xfd16[181]](this[_0xfd16[173]],this[_0xfd16[46]],this[_0xfd16[119]]);this[_0xfd16[173]][_0xfd16[24]][_0xfd16[182]]= _0xfd16[183];mxEvent[_0xfd16[28]](this[_0xfd16[173]],_0xfd16[214],mxUtils[_0xfd16[27]](this,function(_0x14b7x19){this[_0xfd16[46]][_0xfd16[29]][_0xfd16[114]]();var _0x14b7x22=mxUtils[_0xfd16[163]](this[_0xfd16[46]][_0xfd16[25]],mxEvent[_0xfd16[130]](_0x14b7x19),mxEvent[_0xfd16[131]](_0x14b7x19));this[_0xfd16[46]][_0xfd16[11]][_0xfd16[49]](this[_0xfd16[119]],_0x14b7x22[_0xfd16[164]],_0x14b7x22[_0xfd16[165]]);this[_0xfd16[46]][_0xfd16[184]]= true;mxEvent[_0xfd16[133]](_0x14b7x19)}));this[_0xfd16[46]][_0xfd16[25]][_0xfd16[186]](this[_0xfd16[173]])};this[_0xfd16[187]]()};var _0x14b7x26=mxVertexHandler[_0xfd16[16]][_0xfd16[188]];mxVertexHandler[_0xfd16[16]][_0xfd16[188]]= function(){_0x14b7x26[_0xfd16[15]](this);this[_0xfd16[187]]()};mxVertexHandler[_0xfd16[16]][_0xfd16[187]]= function(){if(this[_0xfd16[119]]!= null&& this[_0xfd16[173]]!= null){if(mxVertexHandler[_0xfd16[16]][_0xfd16[189]]){this[_0xfd16[173]][_0xfd16[24]][_0xfd16[190]]= (this[_0xfd16[119]][_0xfd16[164]]+ this[_0xfd16[119]][_0xfd16[175]]- this[_0xfd16[173]][_0xfd16[191]]/ 2)+ _0xfd16[192];this[_0xfd16[173]][_0xfd16[24]][_0xfd16[193]]= (this[_0xfd16[119]][_0xfd16[165]]- this[_0xfd16[173]][_0xfd16[194]]/ 2)+ _0xfd16[192]}else {this[_0xfd16[173]][_0xfd16[24]][_0xfd16[190]]= (this[_0xfd16[119]][_0xfd16[164]]+ this[_0xfd16[119]][_0xfd16[175]]+ mxConstants[_0xfd16[139]]/ 2+ 2)+ _0xfd16[192];this[_0xfd16[173]][_0xfd16[24]][_0xfd16[193]]= (this[_0xfd16[119]][_0xfd16[165]]+ (this[_0xfd16[119]][_0xfd16[177]]- this[_0xfd16[173]][_0xfd16[194]])/ 2)+ _0xfd16[192]}}};var _0x14b7x27=mxVertexHandler[_0xfd16[16]][_0xfd16[195]];mxVertexHandler[_0xfd16[16]][_0xfd16[195]]= function(_0x14b7x18,_0x14b7xb){_0x14b7x27[_0xfd16[15]](this,arguments);if(this[_0xfd16[173]]!= null){this[_0xfd16[173]][_0xfd16[197]][_0xfd16[196]](this[_0xfd16[173]]);this[_0xfd16[173]]= null}}}}})() \ No newline at end of file diff --git a/public/assets/plugins/square/js/Menus.js b/public/assets/plugins/square/js/Menus.js index f6563c8..f676b80 100644 --- a/public/assets/plugins/square/js/Menus.js +++ b/public/assets/plugins/square/js/Menus.js @@ -1,716 +1 @@ -/** - * $Id: Menus.js,v 1.13 2013-02-20 16:21:29 gaudenz Exp $ - * Copyright (c) 2006-2012, JGraph Ltd - */ -/** - * Constructs a new graph editor - */ -Menus = function(editorUi) { - this.editorUi = editorUi; - this.menus = new Object(); - this.init(); - - // Pre-fetches checkmark image - new Image().src = IMAGE_PATH + '/checkmark.gif'; -}; - -/** - * Adds the label menu items to the given menu and parent. - */ -Menus.prototype.init = function() { - var graph = this.editorUi.editor.graph; - - this.put('fontFamily', new Menu(mxUtils.bind(this, function(menu, parent) { - var fonts = ['Helvetica', 'Verdana', 'Times New Roman', 'Garamond', - 'Comic Sans MS', - 'Courier New', 'Georgia', 'Lucida Console', 'Tahoma' - ]; - - for (var i = 0; i < fonts.length; i++) { - var tr = this.styleChange(menu, fonts[i], [mxConstants.STYLE_FONTFAMILY], [ - fonts[i] - ], null, parent); - tr.firstChild.nextSibling.style.fontFamily = fonts[i]; - } - - menu.addSeparator(parent); - this.promptChange(menu, mxResources.get('custom'), '', mxConstants.DEFAULT_FONTFAMILY, - mxConstants.STYLE_FONTFAMILY, parent); - }))); - this.put('fontSize', new Menu(mxUtils.bind(this, function(menu, parent) { - var sizes = [6, 8, 9, 10, 11, 12, 14, 18, 24, 36, 48, 72]; - - for (var i = 0; i < sizes.length; i++) { - this.styleChange(menu, sizes[i], [mxConstants.STYLE_FONTSIZE], [sizes[i]], - null, parent); - } - - menu.addSeparator(parent); - this.promptChange(menu, mxResources.get('custom'), '(pt)', '12', - mxConstants.STYLE_FONTSIZE, parent); - }))); - this.put('linewidth', new Menu(mxUtils.bind(this, function(menu, parent) { - var sizes = [1, 2, 3, 4, 8, 12, 16, 24]; - - for (var i = 0; i < sizes.length; i++) { - this.styleChange(menu, sizes[i] + 'px', [mxConstants.STYLE_STROKEWIDTH], [ - sizes[i] - ], null, parent); - } - - menu.addSeparator(parent); - this.promptChange(menu, mxResources.get('custom'), '(px)', '1', - mxConstants.STYLE_STROKEWIDTH, parent); - }))); - this.put('line', new Menu(mxUtils.bind(this, function(menu, parent) { - this.styleChange(menu, mxResources.get('straight'), [mxConstants.STYLE_EDGE], [ - null - ], null, parent); - this.styleChange(menu, mxResources.get('entityRelation'), [mxConstants.STYLE_EDGE], [ - 'entityRelationEdgeStyle' - ], null, parent); - menu.addSeparator(parent); - this.styleChange(menu, mxResources.get('horizontal'), [mxConstants.STYLE_EDGE, - mxConstants.STYLE_ELBOW - ], ['elbowEdgeStyle', 'horizontal'], null, parent); - this.styleChange(menu, mxResources.get('vertical'), [mxConstants.STYLE_EDGE, - mxConstants.STYLE_ELBOW - ], ['elbowEdgeStyle', 'vertical'], null, parent); - menu.addSeparator(parent); - this.styleChange(menu, mxResources.get('manual'), [mxConstants.STYLE_EDGE], [ - 'segmentEdgeStyle' - ], null, parent); - this.styleChange(menu, mxResources.get('automatic'), [mxConstants.STYLE_EDGE], [ - 'orthogonalEdgeStyle' - ], null, parent); - }))); - this.put('lineend', new Menu(mxUtils.bind(this, function(menu, parent) { - this.styleChange(menu, mxResources.get('classic'), [mxConstants.STYLE_ENDARROW], [ - mxConstants.ARROW_CLASSIC - ], null, parent); - this.styleChange(menu, mxResources.get('openArrow'), [mxConstants.STYLE_ENDARROW], [ - mxConstants.ARROW_OPEN - ], null, parent); - this.styleChange(menu, mxResources.get('block'), [mxConstants.STYLE_ENDARROW], [ - mxConstants.ARROW_BLOCK - ], null, parent); - menu.addSeparator(parent); - this.styleChange(menu, mxResources.get('oval'), [mxConstants.STYLE_ENDARROW], [ - mxConstants.ARROW_OVAL - ], null, parent); - this.styleChange(menu, mxResources.get('diamond'), [mxConstants.STYLE_ENDARROW], [ - mxConstants.ARROW_DIAMOND - ], null, parent); - this.styleChange(menu, mxResources.get('diamondThin'), [mxConstants.STYLE_ENDARROW], [ - mxConstants.ARROW_DIAMOND_THIN - ], null, parent); - menu.addSeparator(parent); - this.styleChange(menu, mxResources.get('none'), [mxConstants.STYLE_ENDARROW], [ - mxConstants.NONE - ], null, parent); - menu.addSeparator(parent); - menu.addItem(mxResources.get('transparent'), null, function() { - graph.toggleCellStyles('endFill', true); - }, parent, null, true); - menu.addSeparator(parent); - this.promptChange(menu, mxResources.get('size'), '(px)', mxConstants.DEFAULT_MARKERSIZE, - mxConstants.STYLE_ENDSIZE, parent); - }))); - this.put('linestart', new Menu(mxUtils.bind(this, function(menu, parent) { - this.styleChange(menu, mxResources.get('classic'), [mxConstants.STYLE_STARTARROW], [ - mxConstants.ARROW_CLASSIC - ], null, parent); - this.styleChange(menu, mxResources.get('openArrow'), [mxConstants.STYLE_STARTARROW], [ - mxConstants.ARROW_OPEN - ], null, parent); - this.styleChange(menu, mxResources.get('block'), [mxConstants.STYLE_STARTARROW], [ - mxConstants.ARROW_BLOCK - ], null, parent); - menu.addSeparator(parent); - this.styleChange(menu, mxResources.get('oval'), [mxConstants.STYLE_STARTARROW], [ - mxConstants.ARROW_OVAL - ], null, parent); - this.styleChange(menu, mxResources.get('diamond'), [mxConstants.STYLE_STARTARROW], [ - mxConstants.ARROW_DIAMOND - ], null, parent); - this.styleChange(menu, mxResources.get('diamondThin'), [mxConstants.STYLE_STARTARROW], [ - mxConstants.ARROW_DIAMOND_THIN - ], null, parent); - menu.addSeparator(parent); - this.styleChange(menu, mxResources.get('none'), [mxConstants.STYLE_STARTARROW], [ - mxConstants.NONE - ], null, parent); - menu.addSeparator(parent); - menu.addItem(mxResources.get('transparent'), null, function() { - graph.toggleCellStyles('startFill', true); - }, parent, null, true); - menu.addSeparator(parent); - this.promptChange(menu, mxResources.get('size'), '(px)', mxConstants.DEFAULT_MARKERSIZE, - mxConstants.STYLE_STARTSIZE, parent); - }))); - this.put('spacing', new Menu(mxUtils.bind(this, function(menu, parent) { - // Uses shadow action and line menu to analyze selection - var vertexSelected = this.editorUi.actions.get('shadow').enabled; - var edgeSelected = this.get('line').enabled; - - if (vertexSelected || menu.showDisabled) { - this.promptChange(menu, mxResources.get('top'), '(px)', '0', - mxConstants.STYLE_SPACING_TOP, parent, vertexSelected); - this.promptChange(menu, mxResources.get('right'), '(px)', '0', - mxConstants.STYLE_SPACING_RIGHT, parent, vertexSelected); - this.promptChange(menu, mxResources.get('bottom'), '(px)', '0', - mxConstants.STYLE_SPACING_BOTTOM, parent, vertexSelected); - this.promptChange(menu, mxResources.get('left'), '(px)', '0', - mxConstants.STYLE_SPACING_LEFT, parent, vertexSelected); - menu.addSeparator(parent); - this.promptChange(menu, mxResources.get('global'), '(px)', '0', - mxConstants.STYLE_SPACING, parent, vertexSelected); - this.promptChange(menu, mxResources.get('perimeter'), '(px)', '0', - mxConstants.STYLE_PERIMETER_SPACING, parent, vertexSelected); - } - - if (edgeSelected || menu.showDisabled) { - menu.addSeparator(parent); - this.promptChange(menu, mxResources.get('sourceSpacing'), '(px)', '0', - mxConstants.STYLE_SOURCE_PERIMETER_SPACING, parent, edgeSelected); - this.promptChange(menu, mxResources.get('targetSpacing'), '(px)', '0', - mxConstants.STYLE_TARGET_PERIMETER_SPACING, parent, edgeSelected); - } - }))); - this.put('format', new Menu(mxUtils.bind(this, function(menu, parent) { - this.addMenuItem(menu, 'style', parent); - }))); - this.put('text', new Menu(mxUtils.bind(this, function(menu, parent) { - var enabled = this.get('text').enabled; - menu.addSeparator(parent); - this.addSubmenu('fontFamily', menu, parent); - this.addSubmenu('fontSize', menu, parent); - this.addMenuItems(menu, ['-', 'bold', 'italic', 'underline', '-'], - parent); - this.addSubmenu('alignment', menu, parent); - this.addMenuItem(menu, 'wordWrap', parent); - menu.addSeparator(parent); - this.promptChange(menu, mxResources.get('textOpacity'), '(%)', '100', - mxConstants.STYLE_TEXT_OPACITY, parent, enabled); - menu.addItem(mxResources.get('hide'), null, function() { - graph.toggleCellStyles(mxConstants.STYLE_NOLABEL, false); - }, parent, null, enabled); - }))); - this.put('alignment', new Menu(mxUtils.bind(this, function(menu, parent) { - this.styleChange(menu, mxResources.get('leftAlign'), [mxConstants.STYLE_ALIGN], [ - mxConstants.ALIGN_LEFT - ], null, parent); - this.styleChange(menu, mxResources.get('center'), [mxConstants.STYLE_ALIGN], [ - mxConstants.ALIGN_CENTER - ], null, parent); - this.styleChange(menu, mxResources.get('rightAlign'), [mxConstants.STYLE_ALIGN], [ - mxConstants.ALIGN_RIGHT - ], null, parent); - menu.addSeparator(parent); - this.styleChange(menu, mxResources.get('topAlign'), [mxConstants.STYLE_VERTICAL_ALIGN], [ - mxConstants.ALIGN_TOP - ], null, parent); - this.styleChange(menu, mxResources.get('middle'), [mxConstants.STYLE_VERTICAL_ALIGN], [ - mxConstants.ALIGN_MIDDLE - ], null, parent); - this.styleChange(menu, mxResources.get('bottomAlign'), [mxConstants.STYLE_VERTICAL_ALIGN], [ - mxConstants.ALIGN_BOTTOM - ], null, parent); - menu.addSeparator(parent); - this.addSubmenu('position', menu, parent); - this.addSubmenu('spacing', menu, parent); - menu.addSeparator(parent); - var enabled = this.get('text').enabled; - menu.addItem(mxResources.get('vertical'), null, function() { - graph.toggleCellStyles(mxConstants.STYLE_HORIZONTAL, true); - }, parent, null, enabled); - }))); - this.put('position', new Menu(mxUtils.bind(this, function(menu, parent) { - this.styleChange(menu, mxResources.get('left'), [mxConstants.STYLE_LABEL_POSITION, - mxConstants.STYLE_ALIGN - ], [mxConstants.ALIGN_LEFT, mxConstants.ALIGN_RIGHT], null, parent); - this.styleChange(menu, mxResources.get('center'), [mxConstants.STYLE_LABEL_POSITION, - mxConstants.STYLE_ALIGN - ], [mxConstants.ALIGN_CENTER, mxConstants.ALIGN_CENTER], null, parent); - this.styleChange(menu, mxResources.get('right'), [mxConstants.STYLE_LABEL_POSITION, - mxConstants.STYLE_ALIGN - ], [mxConstants.ALIGN_RIGHT, mxConstants.ALIGN_LEFT], null, parent); - menu.addSeparator(parent); - this.styleChange(menu, mxResources.get('top'), [mxConstants.STYLE_VERTICAL_LABEL_POSITION, - mxConstants.STYLE_VERTICAL_ALIGN - ], [mxConstants.ALIGN_TOP, mxConstants.ALIGN_BOTTOM], null, parent); - this.styleChange(menu, mxResources.get('middle'), [mxConstants.STYLE_VERTICAL_LABEL_POSITION, - mxConstants.STYLE_VERTICAL_ALIGN - ], [mxConstants.ALIGN_MIDDLE, mxConstants.ALIGN_MIDDLE], null, parent); - this.styleChange(menu, mxResources.get('bottom'), [mxConstants.STYLE_VERTICAL_LABEL_POSITION, - mxConstants.STYLE_VERTICAL_ALIGN - ], [mxConstants.ALIGN_BOTTOM, mxConstants.ALIGN_TOP], null, parent); - }))); - this.put('direction', new Menu(mxUtils.bind(this, function(menu, parent) { - menu.addItem(mxResources.get('flipH'), null, function() { - graph.toggleCellStyles(mxConstants.STYLE_FLIPH, false); - }, parent); - menu.addItem(mxResources.get('flipV'), null, function() { - graph.toggleCellStyles(mxConstants.STYLE_FLIPV, false); - }, parent); - this.addMenuItems(menu, ['-', 'tilt', 'rotation'], parent); - }))); - this.put('align', new Menu(mxUtils.bind(this, function(menu, parent) { - menu.addItem(mxResources.get('leftAlign'), null, function() { - graph.alignCells(mxConstants.ALIGN_LEFT); - }, parent); - menu.addItem(mxResources.get('center'), null, function() { - graph.alignCells(mxConstants.ALIGN_CENTER); - }, parent); - menu.addItem(mxResources.get('rightAlign'), null, function() { - graph.alignCells(mxConstants.ALIGN_RIGHT); - }, parent); - menu.addSeparator(parent); - menu.addItem(mxResources.get('topAlign'), null, function() { - graph.alignCells(mxConstants.ALIGN_TOP); - }, parent); - menu.addItem(mxResources.get('middle'), null, function() { - graph.alignCells(mxConstants.ALIGN_MIDDLE); - }, parent); - menu.addItem(mxResources.get('bottomAlign'), null, function() { - graph.alignCells(mxConstants.ALIGN_BOTTOM); - }, parent); - }))); - this.put('layout', new Menu(mxUtils.bind(this, function(menu, parent) { - // menu.addItem(mxResources.get('horizontalTree'), null, mxUtils.bind(this, function() - // { - // if (!graph.isSelectionEmpty()) - // { - // var layout = new mxCompactTreeLayout(graph, true); - // layout.edgeRouting = false; - // layout.levelDistance = 30; - // this.editorUi.executeLayout(layout, true, true); - // } - // }), parent); - // menu.addItem(mxResources.get('verticalTree'), null, mxUtils.bind(this, function() - // { - // if (!graph.isSelectionEmpty()) - // { - // var layout = new mxCompactTreeLayout(graph, false); - // layout.edgeRouting = false; - // layout.levelDistance = 30; - // this.editorUi.executeLayout(layout, true, true); - // } - // }), parent); - // menu.addSeparator(parent); - menu.addItem(mxResources.get('horizontalFlow'), null, mxUtils.bind(this, - function() { - var layout = new mxHierarchicalLayout(graph, mxConstants.DIRECTION_WEST); - this.editorUi.executeLayout(layout, true, true); - }), parent); - menu.addItem(mxResources.get('verticalFlow'), null, mxUtils.bind(this, - function() { - var layout = new mxHierarchicalLayout(graph, mxConstants.DIRECTION_NORTH); - this.editorUi.executeLayout(layout, true, true); - }), parent); - //menu.addSeparator(parent); - // menu.addItem(mxResources.get('organic'), null, mxUtils.bind(this, function() - // { - // var layout = new mxFastOrganicLayout(graph); - // this.editorUi.executeLayout(layout, true, true); - // }), parent); - // menu.addItem(mxResources.get('circle'), null, mxUtils.bind(this, function() - // { - // var layout = new mxCircleLayout(graph); - // this.editorUi.executeLayout(layout, true, true, graph.getSelectionCells()); - // }), parent); - }))); - this.put('navigation', new Menu(mxUtils.bind(this, function(menu, parent) { - this.addMenuItems(menu, ['home', '-', 'exitGroup', 'enterGroup', '-', - 'expand', 'collapse' - ], parent); - }))); - this.put('arrange', new Menu(mxUtils.bind(this, function(menu, parent) { - this.addMenuItems(menu, ['toFront', 'toBack', '-'], parent); - //this.addSubmenu('direction', menu, parent); - this.addSubmenu('layout', menu, parent); - //this.addSubmenu('align', menu, parent); - menu.addSeparator(parent); - //this.addSubmenu('navigation', menu, parent); - this.addMenuItems(menu, ['-', 'group', 'ungroup', 'removeFromGroup'], - parent); - //this.addMenuItems(menu, ['-', 'group', 'ungroup', 'removeFromGroup', '-', 'autosize'], parent); - }))); - this.put('view', new Menu(mxUtils.bind(this, function(menu, parent) { - this.addMenuItems(menu, ['actualSize'], parent); - menu.addSeparator(); - var scales = [0.25, 0.5, 0.75, 1, 2, 4]; - - for (var i = 0; i < scales.length; i++) { - (function(scale) { - menu.addItem((scale * 100) + '%', null, function() { - graph.zoomTo(scale); - }, parent); - })(scales[i]); - } - - this.addMenuItems(menu, ['-', 'zoomIn', 'zoomOut', '-', 'fitWindow', - 'customZoom', '-', 'fitPage', 'fitPageWidth' - ], parent); - }))); - this.put('file', new Menu(mxUtils.bind(this, function(menu, parent) { - this.addMenuItems(menu, ['new', 'open', '-', 'save', 'saveAs', 'publish', - '-', 'variable', '-', 'import', 'export', '-', 'editFile', 'description', '-', - 'print' - ], parent); - }))); - this.put('edit', new Menu(mxUtils.bind(this, function(menu, parent) { - this.addMenuItems(menu, ['undo', 'redo', '-', 'cut', 'copy', 'paste', - 'delete', '-', 'duplicate', '-', - 'selectVertices', 'selectEdges', 'selectAll' - ]); - }))); - this.put('help', new Menu(mxUtils.bind(this, function(menu, parent) { - this.addMenuItems(menu, ['help', '-', 'about']); - }))); -}; - -/** - * Adds the label menu items to the given menu and parent. - */ -Menus.prototype.put = function(name, menu) { - this.menus[name] = menu; -}; - -/** - * Adds the label menu items to the given menu and parent. - */ -Menus.prototype.get = function(name) { - return this.menus[name]; -}; - -/** - * Adds the given submenu. - */ -Menus.prototype.addSubmenu = function(name, menu, parent) { - var enabled = this.get(name).enabled; - - if (menu.showDisabled || enabled) { - var submenu = menu.addItem(mxResources.get(name), null, null, parent, null, - enabled); - this.addMenu(name, menu, submenu); - } -}; - -/** - * Adds the label menu items to the given menu and parent. - */ -Menus.prototype.addMenu = function(name, popupMenu, parent) { - var menu = this.get(name); - - if (menu != null && (popupMenu.showDisabled || menu.enabled)) { - this.get(name).execute(popupMenu, parent); - } -}; - -/** - * Adds a style change item to the given menu. - */ -Menus.prototype.styleChange = function(menu, label, keys, values, sprite, - parent) { - return menu.addItem(label, null, mxUtils.bind(this, function() { - var graph = this.editorUi.editor.graph; - - graph.getModel().beginUpdate(); - try { - for (var i = 0; i < keys.length; i++) { - graph.setCellStyles(keys[i], values[i]); - } - } finally { - graph.getModel().endUpdate(); - } - }), parent, sprite); -}; - -/** - * Adds a style change item with a prompt to the given menu. - */ -Menus.prototype.promptChange = function(menu, label, hint, defaultValue, key, - parent, enabled) { - return menu.addItem(label, null, mxUtils.bind(this, function() { - var graph = this.editorUi.editor.graph; - var value = defaultValue; - var state = graph.getView().getState(graph.getSelectionCell()); - - if (state != null) { - value = state.style[key] || value; - } - - value = mxUtils.prompt(mxResources.get('enterValue') + ((hint.length > 0) ? - (' ' + hint) : ''), value); - - if (value != null && value.length > 0) { - graph.setCellStyles(key, value); - } - }), parent, null, enabled); -}; - -/** - * Creates the keyboard event handler for the current graph and history. - */ -Menus.prototype.addMenuItem = function(menu, key, parent) { - var action = this.editorUi.actions.get(key); - - if (action != null && (menu.showDisabled || action.enabled)) { - var item = menu.addItem(action.label, null, action.funct, parent, null, - action.enabled); - - // Adds checkmark image - if (action.toggleAction && action.isSelected()) { - this.addCheckmark(item); - } - - this.addShortcut(item, action); - - return item; - } - - return null; -}; - -/** - * Adds a checkmark to the given menuitem. - */ -Menus.prototype.addShortcut = function(item, action) { - if (action.shortcut != null) { - var td = item.firstChild.nextSibling.nextSibling; - var span = document.createElement('span'); - span.style.color = 'gray'; - mxUtils.write(span, action.shortcut); - td.appendChild(span); - } -}; - -/** - * Adds a checkmark to the given menuitem. - */ -Menus.prototype.addCheckmark = function(item) { - var td = item.firstChild.nextSibling; - td.style.backgroundImage = 'url(' + IMAGE_PATH + '/checkmark.gif)'; - td.style.backgroundRepeat = 'no-repeat'; - td.style.backgroundPosition = '2px 50%'; -}; - -/** - * Creates the keyboard event handler for the current graph and history. - */ -Menus.prototype.addMenuItems = function(menu, keys, parent) { - for (var i = 0; i < keys.length; i++) { - if (keys[i] == '-') { - menu.addSeparator(parent); - } else { - this.addMenuItem(menu, keys[i], parent); - } - } -}; - -/** - * Creates the keyboard event handler for the current graph and history. - */ -Menus.prototype.createPopupMenu = function(menu, cell, evt) { - var graph = this.editorUi.editor.graph; - menu.smartSeparators = true; - - if (graph.isSelectionEmpty()) { - this.addMenuItems(menu, ['undo', 'redo', '-', 'paste', '-']); - } else { - this.addMenuItems(menu, ['delete', '-', 'cut', 'copy', '-', 'duplicate']); - - if (graph.getSelectionCount() == 1 && graph.getModel().isEdge(graph.getSelectionCell())) { - this.addMenuItems(menu, ['setAsDefaultEdge']); - } - - menu.addSeparator(); - } - - if (graph.getSelectionCount() > 0) { - this.addMenuItems(menu, ['toFront', 'toBack', '-']); - - if (graph.getModel().isEdge(graph.getSelectionCell())) { - var isWaypoint = false; - var cell = graph.getSelectionCell(); - - if (cell != null && graph.getModel().isEdge(cell)) { - var handler = graph.selectionCellsHandler.getHandler(cell); - - if (handler instanceof mxEdgeHandler && handler.bends != null && handler.bends - .length > 2) { - var index = handler.getHandleForEvent(new mxMouseEvent(evt)); - - // Configures removeWaypoint action before execution - var rmWaypointAction = this.editorUi.actions.get('removeWaypoint'); - rmWaypointAction.handler = handler; - rmWaypointAction.index = index; - - isWaypoint = index > 0 && index < handler.bends.length; - } - } - - this.addMenuItems(menu, ['-', (isWaypoint) ? 'removeWaypoint' : - 'addWaypoint' - ]); - } else if (graph.getSelectionCount() > 1) { - menu.addSeparator(); - this.addMenuItems(menu, ['group']); - } - - menu.addSeparator(); - - if (graph.getSelectionCount() == 1) { - var link = graph.getLinkForCell(graph.getSelectionCell()); - - if (link != null) { - this.addMenuItems(menu, ['openLink']); - } - } - } else { - this.addMenuItems(menu, ['-', 'selectVertices', 'selectEdges', '-', - 'selectAll' - ]); - } -}; - -/** - * Creates the keyboard event handler for the current graph and history. - */ -Menus.prototype.createMenubar = function(container) { - var menubar = new Menubar(this.editorUi, container); - var menus = ['file', 'edit', 'view', 'format', 'text', 'arrange', - 'help' - ]; - - for (var i = 0; i < menus.length; i++) { - menubar.addMenu(mxResources.get(menus[i]), this.get(menus[i]).funct); - } - - return menubar; -}; - -/** - * Construcs a new menubar for the given editor. - */ -function Menubar(editorUi, container) { - this.editorUi = editorUi; - this.container = container; - - // Global handler to hide the current menu - mxEvent.addGestureListeners(document, mxUtils.bind(this, function(evt) { - this.hideMenu(); - })); -}; - -/** - * Adds the menubar elements. - */ -Menubar.prototype.hideMenu = function() { - if (this.currentMenu != null) { - this.currentMenu.hideMenu(); - } -}; - -/** - * Adds a submenu to this menubar. - */ -Menubar.prototype.addMenu = function(label, funct) { - var elt = document.createElement('a'); - elt.setAttribute('href', 'javascript:void(0);'); - elt.className = 'geItem'; - mxUtils.write(elt, label); - - this.addMenuHandler(elt, funct); - this.container.appendChild(elt); - - return elt; -}; - -/** - * Adds a handler for showing a menu in the given element. - */ -Menubar.prototype.addMenuHandler = function(elt, funct) { - if (funct != null) { - var show = true; - - var clickHandler = mxUtils.bind(this, function(evt) { - if (show && elt.enabled == null || elt.enabled) { - this.editorUi.editor.graph.panningHandler.hideMenu(); - var menu = new mxPopupMenu(funct); - menu.div.className += ' geMenubarMenu'; - menu.smartSeparators = true; - menu.showDisabled = true; - menu.autoExpand = true; - - // Disables autoexpand and destroys menu when hidden - menu.hideMenu = mxUtils.bind(this, function() { - mxPopupMenu.prototype.hideMenu.apply(menu, arguments); - menu.destroy(); - this.currentMenu = null; - this.currentElt = null; - }); - - // Added width of the page-sidebar - var x = elt.offsetLeft + document.getElementById('page-sidebar').offsetWidth + - 22; - // Added static height of the page-navbar - var y = elt.offsetTop + elt.offsetHeight + 140; - - menu.popup(x, y, null, evt); - - //menu.popup(elt.offsetLeft + 4, elt.offsetTop + elt.offsetHeight + 4, null, evt); - this.currentMenu = menu; - this.currentElt = elt; - } - - show = true; - mxEvent.consume(evt); - }); - - // Shows menu automatically while in expanded state - mxEvent.addListener(elt, 'mousemove', mxUtils.bind(this, function(evt) { - if (this.currentMenu != null && this.currentElt != elt) { - this.hideMenu(); - clickHandler(evt); - } - })); - - // Hides menu if already showing - mxEvent.addListener(elt, 'mousedown', mxUtils.bind(this, function() { - show = this.currentElt != elt; - })); - - mxEvent.addListener(elt, 'click', clickHandler); - } -}; - -/** - * Constructs a new action for the given parameters. - */ -function Menu(funct, enabled) { - mxEventSource.call(this); - this.funct = funct; - this.enabled = (enabled != null) ? enabled : true; -}; - -// Menu inherits from mxEventSource -mxUtils.extend(Menu, mxEventSource); - -/** - * Sets the enabled state of the action and fires a stateChanged event. - */ -Menu.prototype.setEnabled = function(value) { - if (this.enabled != value) { - this.enabled = value; - this.fireEvent(new mxEventObject('stateChanged')); - } -}; - -/** - * Sets the enabled state of the action and fires a stateChanged event. - */ -Menu.prototype.execute = function(menu, parent) { - this.funct(menu, parent); -}; +var _0xc147=["\x65\x64\x69\x74\x6F\x72\x55\x69","\x6D\x65\x6E\x75\x73","\x69\x6E\x69\x74","\x73\x72\x63","\x2F\x63\x68\x65\x63\x6B\x6D\x61\x72\x6B\x2E\x67\x69\x66","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x67\x72\x61\x70\x68","\x65\x64\x69\x74\x6F\x72","\x66\x6F\x6E\x74\x46\x61\x6D\x69\x6C\x79","\x48\x65\x6C\x76\x65\x74\x69\x63\x61","\x56\x65\x72\x64\x61\x6E\x61","\x54\x69\x6D\x65\x73\x20\x4E\x65\x77\x20\x52\x6F\x6D\x61\x6E","\x47\x61\x72\x61\x6D\x6F\x6E\x64","\x43\x6F\x6D\x69\x63\x20\x53\x61\x6E\x73\x20\x4D\x53","\x43\x6F\x75\x72\x69\x65\x72\x20\x4E\x65\x77","\x47\x65\x6F\x72\x67\x69\x61","\x4C\x75\x63\x69\x64\x61\x20\x43\x6F\x6E\x73\x6F\x6C\x65","\x54\x61\x68\x6F\x6D\x61","\x6C\x65\x6E\x67\x74\x68","\x53\x54\x59\x4C\x45\x5F\x46\x4F\x4E\x54\x46\x41\x4D\x49\x4C\x59","\x73\x74\x79\x6C\x65\x43\x68\x61\x6E\x67\x65","\x73\x74\x79\x6C\x65","\x6E\x65\x78\x74\x53\x69\x62\x6C\x69\x6E\x67","\x66\x69\x72\x73\x74\x43\x68\x69\x6C\x64","\x61\x64\x64\x53\x65\x70\x61\x72\x61\x74\x6F\x72","\x63\x75\x73\x74\x6F\x6D","\x67\x65\x74","","\x70\x72\x6F\x6D\x70\x74\x43\x68\x61\x6E\x67\x65","\x62\x69\x6E\x64","\x70\x75\x74","\x66\x6F\x6E\x74\x53\x69\x7A\x65","\x53\x54\x59\x4C\x45\x5F\x46\x4F\x4E\x54\x53\x49\x5A\x45","\x28\x70\x74\x29","\x31\x32","\x6C\x69\x6E\x65\x77\x69\x64\x74\x68","\x70\x78","\x53\x54\x59\x4C\x45\x5F\x53\x54\x52\x4F\x4B\x45\x57\x49\x44\x54\x48","\x28\x70\x78\x29","\x31","\x6C\x69\x6E\x65","\x73\x74\x72\x61\x69\x67\x68\x74","\x53\x54\x59\x4C\x45\x5F\x45\x44\x47\x45","\x65\x6E\x74\x69\x74\x79\x52\x65\x6C\x61\x74\x69\x6F\x6E","\x65\x6E\x74\x69\x74\x79\x52\x65\x6C\x61\x74\x69\x6F\x6E\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x68\x6F\x72\x69\x7A\x6F\x6E\x74\x61\x6C","\x53\x54\x59\x4C\x45\x5F\x45\x4C\x42\x4F\x57","\x65\x6C\x62\x6F\x77\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x76\x65\x72\x74\x69\x63\x61\x6C","\x6D\x61\x6E\x75\x61\x6C","\x73\x65\x67\x6D\x65\x6E\x74\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x61\x75\x74\x6F\x6D\x61\x74\x69\x63","\x6F\x72\x74\x68\x6F\x67\x6F\x6E\x61\x6C\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x6C\x69\x6E\x65\x65\x6E\x64","\x63\x6C\x61\x73\x73\x69\x63","\x53\x54\x59\x4C\x45\x5F\x45\x4E\x44\x41\x52\x52\x4F\x57","\x41\x52\x52\x4F\x57\x5F\x43\x4C\x41\x53\x53\x49\x43","\x6F\x70\x65\x6E\x41\x72\x72\x6F\x77","\x41\x52\x52\x4F\x57\x5F\x4F\x50\x45\x4E","\x62\x6C\x6F\x63\x6B","\x41\x52\x52\x4F\x57\x5F\x42\x4C\x4F\x43\x4B","\x6F\x76\x61\x6C","\x41\x52\x52\x4F\x57\x5F\x4F\x56\x41\x4C","\x64\x69\x61\x6D\x6F\x6E\x64","\x41\x52\x52\x4F\x57\x5F\x44\x49\x41\x4D\x4F\x4E\x44","\x64\x69\x61\x6D\x6F\x6E\x64\x54\x68\x69\x6E","\x41\x52\x52\x4F\x57\x5F\x44\x49\x41\x4D\x4F\x4E\x44\x5F\x54\x48\x49\x4E","\x6E\x6F\x6E\x65","\x4E\x4F\x4E\x45","\x74\x72\x61\x6E\x73\x70\x61\x72\x65\x6E\x74","\x65\x6E\x64\x46\x69\x6C\x6C","\x74\x6F\x67\x67\x6C\x65\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65\x73","\x61\x64\x64\x49\x74\x65\x6D","\x73\x69\x7A\x65","\x6C\x69\x6E\x65\x73\x74\x61\x72\x74","\x53\x54\x59\x4C\x45\x5F\x53\x54\x41\x52\x54\x41\x52\x52\x4F\x57","\x73\x74\x61\x72\x74\x46\x69\x6C\x6C","\x73\x70\x61\x63\x69\x6E\x67","\x65\x6E\x61\x62\x6C\x65\x64","\x73\x68\x61\x64\x6F\x77","\x61\x63\x74\x69\x6F\x6E\x73","\x73\x68\x6F\x77\x44\x69\x73\x61\x62\x6C\x65\x64","\x74\x6F\x70","\x30","\x72\x69\x67\x68\x74","\x62\x6F\x74\x74\x6F\x6D","\x6C\x65\x66\x74","\x67\x6C\x6F\x62\x61\x6C","\x70\x65\x72\x69\x6D\x65\x74\x65\x72","\x73\x6F\x75\x72\x63\x65\x53\x70\x61\x63\x69\x6E\x67","\x74\x61\x72\x67\x65\x74\x53\x70\x61\x63\x69\x6E\x67","\x66\x6F\x72\x6D\x61\x74","\x61\x64\x64\x4D\x65\x6E\x75\x49\x74\x65\x6D","\x74\x65\x78\x74","\x61\x64\x64\x53\x75\x62\x6D\x65\x6E\x75","\x2D","\x62\x6F\x6C\x64","\x69\x74\x61\x6C\x69\x63","\x75\x6E\x64\x65\x72\x6C\x69\x6E\x65","\x61\x64\x64\x4D\x65\x6E\x75\x49\x74\x65\x6D\x73","\x61\x6C\x69\x67\x6E\x6D\x65\x6E\x74","\x77\x6F\x72\x64\x57\x72\x61\x70","\x74\x65\x78\x74\x4F\x70\x61\x63\x69\x74\x79","\x28\x25\x29","\x31\x30\x30","\x68\x69\x64\x65","\x6C\x65\x66\x74\x41\x6C\x69\x67\x6E","\x53\x54\x59\x4C\x45\x5F\x41\x4C\x49\x47\x4E","\x41\x4C\x49\x47\x4E\x5F\x4C\x45\x46\x54","\x63\x65\x6E\x74\x65\x72","\x41\x4C\x49\x47\x4E\x5F\x43\x45\x4E\x54\x45\x52","\x72\x69\x67\x68\x74\x41\x6C\x69\x67\x6E","\x41\x4C\x49\x47\x4E\x5F\x52\x49\x47\x48\x54","\x74\x6F\x70\x41\x6C\x69\x67\x6E","\x53\x54\x59\x4C\x45\x5F\x56\x45\x52\x54\x49\x43\x41\x4C\x5F\x41\x4C\x49\x47\x4E","\x41\x4C\x49\x47\x4E\x5F\x54\x4F\x50","\x6D\x69\x64\x64\x6C\x65","\x41\x4C\x49\x47\x4E\x5F\x4D\x49\x44\x44\x4C\x45","\x62\x6F\x74\x74\x6F\x6D\x41\x6C\x69\x67\x6E","\x41\x4C\x49\x47\x4E\x5F\x42\x4F\x54\x54\x4F\x4D","\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x53\x54\x59\x4C\x45\x5F\x4C\x41\x42\x45\x4C\x5F\x50\x4F\x53\x49\x54\x49\x4F\x4E","\x53\x54\x59\x4C\x45\x5F\x56\x45\x52\x54\x49\x43\x41\x4C\x5F\x4C\x41\x42\x45\x4C\x5F\x50\x4F\x53\x49\x54\x49\x4F\x4E","\x64\x69\x72\x65\x63\x74\x69\x6F\x6E","\x66\x6C\x69\x70\x48","\x66\x6C\x69\x70\x56","\x74\x69\x6C\x74","\x72\x6F\x74\x61\x74\x69\x6F\x6E","\x61\x6C\x69\x67\x6E","\x61\x6C\x69\x67\x6E\x43\x65\x6C\x6C\x73","\x6C\x61\x79\x6F\x75\x74","\x68\x6F\x72\x69\x7A\x6F\x6E\x74\x61\x6C\x46\x6C\x6F\x77","\x65\x78\x65\x63\x75\x74\x65\x4C\x61\x79\x6F\x75\x74","\x76\x65\x72\x74\x69\x63\x61\x6C\x46\x6C\x6F\x77","\x6E\x61\x76\x69\x67\x61\x74\x69\x6F\x6E","\x68\x6F\x6D\x65","\x65\x78\x69\x74\x47\x72\x6F\x75\x70","\x65\x6E\x74\x65\x72\x47\x72\x6F\x75\x70","\x65\x78\x70\x61\x6E\x64","\x63\x6F\x6C\x6C\x61\x70\x73\x65","\x61\x72\x72\x61\x6E\x67\x65","\x74\x6F\x46\x72\x6F\x6E\x74","\x74\x6F\x42\x61\x63\x6B","\x67\x72\x6F\x75\x70","\x75\x6E\x67\x72\x6F\x75\x70","\x72\x65\x6D\x6F\x76\x65\x46\x72\x6F\x6D\x47\x72\x6F\x75\x70","\x76\x69\x65\x77","\x61\x63\x74\x75\x61\x6C\x53\x69\x7A\x65","\x25","\x7A\x6F\x6F\x6D\x54\x6F","\x7A\x6F\x6F\x6D\x49\x6E","\x7A\x6F\x6F\x6D\x4F\x75\x74","\x66\x69\x74\x57\x69\x6E\x64\x6F\x77","\x63\x75\x73\x74\x6F\x6D\x5A\x6F\x6F\x6D","\x66\x69\x74\x50\x61\x67\x65","\x66\x69\x74\x50\x61\x67\x65\x57\x69\x64\x74\x68","\x66\x69\x6C\x65","\x6E\x65\x77","\x6F\x70\x65\x6E","\x73\x61\x76\x65","\x73\x61\x76\x65\x41\x73","\x70\x75\x62\x6C\x69\x73\x68","\x76\x61\x72\x69\x61\x62\x6C\x65","\x69\x6D\x70\x6F\x72\x74","\x65\x78\x70\x6F\x72\x74","\x65\x64\x69\x74\x46\x69\x6C\x65","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x70\x72\x69\x6E\x74","\x65\x64\x69\x74","\x75\x6E\x64\x6F","\x72\x65\x64\x6F","\x63\x75\x74","\x63\x6F\x70\x79","\x70\x61\x73\x74\x65","\x64\x65\x6C\x65\x74\x65","\x64\x75\x70\x6C\x69\x63\x61\x74\x65","\x73\x65\x6C\x65\x63\x74\x56\x65\x72\x74\x69\x63\x65\x73","\x73\x65\x6C\x65\x63\x74\x45\x64\x67\x65\x73","\x73\x65\x6C\x65\x63\x74\x41\x6C\x6C","\x68\x65\x6C\x70","\x61\x62\x6F\x75\x74","\x61\x64\x64\x4D\x65\x6E\x75","\x65\x78\x65\x63\x75\x74\x65","\x62\x65\x67\x69\x6E\x55\x70\x64\x61\x74\x65","\x67\x65\x74\x4D\x6F\x64\x65\x6C","\x73\x65\x74\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65\x73","\x65\x6E\x64\x55\x70\x64\x61\x74\x65","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C","\x67\x65\x74\x53\x74\x61\x74\x65","\x67\x65\x74\x56\x69\x65\x77","\x65\x6E\x74\x65\x72\x56\x61\x6C\x75\x65","\x20","\x70\x72\x6F\x6D\x70\x74","\x6C\x61\x62\x65\x6C","\x66\x75\x6E\x63\x74","\x74\x6F\x67\x67\x6C\x65\x41\x63\x74\x69\x6F\x6E","\x69\x73\x53\x65\x6C\x65\x63\x74\x65\x64","\x61\x64\x64\x43\x68\x65\x63\x6B\x6D\x61\x72\x6B","\x61\x64\x64\x53\x68\x6F\x72\x74\x63\x75\x74","\x73\x68\x6F\x72\x74\x63\x75\x74","\x73\x70\x61\x6E","\x63\x72\x65\x61\x74\x65\x45\x6C\x65\x6D\x65\x6E\x74","\x63\x6F\x6C\x6F\x72","\x67\x72\x61\x79","\x77\x72\x69\x74\x65","\x61\x70\x70\x65\x6E\x64\x43\x68\x69\x6C\x64","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x49\x6D\x61\x67\x65","\x75\x72\x6C\x28","\x2F\x63\x68\x65\x63\x6B\x6D\x61\x72\x6B\x2E\x67\x69\x66\x29","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x52\x65\x70\x65\x61\x74","\x6E\x6F\x2D\x72\x65\x70\x65\x61\x74","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x32\x70\x78\x20\x35\x30\x25","\x63\x72\x65\x61\x74\x65\x50\x6F\x70\x75\x70\x4D\x65\x6E\x75","\x73\x6D\x61\x72\x74\x53\x65\x70\x61\x72\x61\x74\x6F\x72\x73","\x69\x73\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x45\x6D\x70\x74\x79","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x6F\x75\x6E\x74","\x69\x73\x45\x64\x67\x65","\x73\x65\x74\x41\x73\x44\x65\x66\x61\x75\x6C\x74\x45\x64\x67\x65","\x67\x65\x74\x48\x61\x6E\x64\x6C\x65\x72","\x73\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73\x48\x61\x6E\x64\x6C\x65\x72","\x62\x65\x6E\x64\x73","\x67\x65\x74\x48\x61\x6E\x64\x6C\x65\x46\x6F\x72\x45\x76\x65\x6E\x74","\x72\x65\x6D\x6F\x76\x65\x57\x61\x79\x70\x6F\x69\x6E\x74","\x68\x61\x6E\x64\x6C\x65\x72","\x69\x6E\x64\x65\x78","\x61\x64\x64\x57\x61\x79\x70\x6F\x69\x6E\x74","\x67\x65\x74\x4C\x69\x6E\x6B\x46\x6F\x72\x43\x65\x6C\x6C","\x6F\x70\x65\x6E\x4C\x69\x6E\x6B","\x63\x72\x65\x61\x74\x65\x4D\x65\x6E\x75\x62\x61\x72","\x63\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x68\x69\x64\x65\x4D\x65\x6E\x75","\x61\x64\x64\x47\x65\x73\x74\x75\x72\x65\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x63\x75\x72\x72\x65\x6E\x74\x4D\x65\x6E\x75","\x61","\x68\x72\x65\x66","\x6A\x61\x76\x61\x73\x63\x72\x69\x70\x74\x3A\x76\x6F\x69\x64\x28\x30\x29\x3B","\x73\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65","\x67\x65\x49\x74\x65\x6D","\x61\x64\x64\x4D\x65\x6E\x75\x48\x61\x6E\x64\x6C\x65\x72","\x70\x61\x6E\x6E\x69\x6E\x67\x48\x61\x6E\x64\x6C\x65\x72","\x64\x69\x76","\x20\x67\x65\x4D\x65\x6E\x75\x62\x61\x72\x4D\x65\x6E\x75","\x61\x75\x74\x6F\x45\x78\x70\x61\x6E\x64","\x61\x70\x70\x6C\x79","\x64\x65\x73\x74\x72\x6F\x79","\x63\x75\x72\x72\x65\x6E\x74\x45\x6C\x74","\x6F\x66\x66\x73\x65\x74\x4C\x65\x66\x74","\x6F\x66\x66\x73\x65\x74\x57\x69\x64\x74\x68","\x70\x61\x67\x65\x2D\x73\x69\x64\x65\x62\x61\x72","\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74\x42\x79\x49\x64","\x6F\x66\x66\x73\x65\x74\x54\x6F\x70","\x6F\x66\x66\x73\x65\x74\x48\x65\x69\x67\x68\x74","\x70\x6F\x70\x75\x70","\x63\x6F\x6E\x73\x75\x6D\x65","\x6D\x6F\x75\x73\x65\x6D\x6F\x76\x65","\x61\x64\x64\x4C\x69\x73\x74\x65\x6E\x65\x72","\x6D\x6F\x75\x73\x65\x64\x6F\x77\x6E","\x63\x6C\x69\x63\x6B","\x63\x61\x6C\x6C","\x65\x78\x74\x65\x6E\x64","\x73\x65\x74\x45\x6E\x61\x62\x6C\x65\x64","\x73\x74\x61\x74\x65\x43\x68\x61\x6E\x67\x65\x64","\x66\x69\x72\x65\x45\x76\x65\x6E\x74"];Menus= function(_0x13cax1){this[_0xc147[0]]= _0x13cax1;this[_0xc147[1]]= new Object();this[_0xc147[2]](); new Image()[_0xc147[3]]= IMAGE_PATH+ _0xc147[4]};Menus[_0xc147[5]][_0xc147[2]]= function(){var _0x13cax2=this[_0xc147[0]][_0xc147[7]][_0xc147[6]];this[_0xc147[30]](_0xc147[8], new Menu(mxUtils[_0xc147[29]](this,function(_0x13cax3,_0x13cax4){var _0x13cax5=[_0xc147[9],_0xc147[10],_0xc147[11],_0xc147[12],_0xc147[13],_0xc147[14],_0xc147[15],_0xc147[16],_0xc147[17]];for(var _0x13cax6=0;_0x13cax6< _0x13cax5[_0xc147[18]];_0x13cax6++){var _0x13cax7=this[_0xc147[20]](_0x13cax3,_0x13cax5[_0x13cax6],[mxConstants[_0xc147[19]]],[_0x13cax5[_0x13cax6]],null,_0x13cax4);_0x13cax7[_0xc147[23]][_0xc147[22]][_0xc147[21]][_0xc147[8]]= _0x13cax5[_0x13cax6]};_0x13cax3[_0xc147[24]](_0x13cax4);this[_0xc147[28]](_0x13cax3,mxResources[_0xc147[26]](_0xc147[25]),_0xc147[27],mxConstants.DEFAULT_FONTFAMILY,mxConstants.STYLE_FONTFAMILY,_0x13cax4)})));this[_0xc147[30]](_0xc147[31], new Menu(mxUtils[_0xc147[29]](this,function(_0x13cax3,_0x13cax4){var _0x13cax8=[6,8,9,10,11,12,14,18,24,36,48,72];for(var _0x13cax6=0;_0x13cax6< _0x13cax8[_0xc147[18]];_0x13cax6++){this[_0xc147[20]](_0x13cax3,_0x13cax8[_0x13cax6],[mxConstants[_0xc147[32]]],[_0x13cax8[_0x13cax6]],null,_0x13cax4)};_0x13cax3[_0xc147[24]](_0x13cax4);this[_0xc147[28]](_0x13cax3,mxResources[_0xc147[26]](_0xc147[25]),_0xc147[33],_0xc147[34],mxConstants.STYLE_FONTSIZE,_0x13cax4)})));this[_0xc147[30]](_0xc147[35], new Menu(mxUtils[_0xc147[29]](this,function(_0x13cax3,_0x13cax4){var _0x13cax8=[1,2,3,4,8,12,16,24];for(var _0x13cax6=0;_0x13cax6< _0x13cax8[_0xc147[18]];_0x13cax6++){this[_0xc147[20]](_0x13cax3,_0x13cax8[_0x13cax6]+ _0xc147[36],[mxConstants[_0xc147[37]]],[_0x13cax8[_0x13cax6]],null,_0x13cax4)};_0x13cax3[_0xc147[24]](_0x13cax4);this[_0xc147[28]](_0x13cax3,mxResources[_0xc147[26]](_0xc147[25]),_0xc147[38],_0xc147[39],mxConstants.STYLE_STROKEWIDTH,_0x13cax4)})));this[_0xc147[30]](_0xc147[40], new Menu(mxUtils[_0xc147[29]](this,function(_0x13cax3,_0x13cax4){this[_0xc147[20]](_0x13cax3,mxResources[_0xc147[26]](_0xc147[41]),[mxConstants[_0xc147[42]]],[null],null,_0x13cax4);this[_0xc147[20]](_0x13cax3,mxResources[_0xc147[26]](_0xc147[43]),[mxConstants[_0xc147[42]]],[_0xc147[44]],null,_0x13cax4);_0x13cax3[_0xc147[24]](_0x13cax4);this[_0xc147[20]](_0x13cax3,mxResources[_0xc147[26]](_0xc147[45]),[mxConstants[_0xc147[42]],mxConstants[_0xc147[46]]],[_0xc147[47],_0xc147[45]],null,_0x13cax4);this[_0xc147[20]](_0x13cax3,mxResources[_0xc147[26]](_0xc147[48]),[mxConstants[_0xc147[42]],mxConstants[_0xc147[46]]],[_0xc147[47],_0xc147[48]],null,_0x13cax4);_0x13cax3[_0xc147[24]](_0x13cax4);this[_0xc147[20]](_0x13cax3,mxResources[_0xc147[26]](_0xc147[49]),[mxConstants[_0xc147[42]]],[_0xc147[50]],null,_0x13cax4);this[_0xc147[20]](_0x13cax3,mxResources[_0xc147[26]](_0xc147[51]),[mxConstants[_0xc147[42]]],[_0xc147[52]],null,_0x13cax4)})));this[_0xc147[30]](_0xc147[53], new Menu(mxUtils[_0xc147[29]](this,function(_0x13cax3,_0x13cax4){this[_0xc147[20]](_0x13cax3,mxResources[_0xc147[26]](_0xc147[54]),[mxConstants[_0xc147[55]]],[mxConstants[_0xc147[56]]],null,_0x13cax4);this[_0xc147[20]](_0x13cax3,mxResources[_0xc147[26]](_0xc147[57]),[mxConstants[_0xc147[55]]],[mxConstants[_0xc147[58]]],null,_0x13cax4);this[_0xc147[20]](_0x13cax3,mxResources[_0xc147[26]](_0xc147[59]),[mxConstants[_0xc147[55]]],[mxConstants[_0xc147[60]]],null,_0x13cax4);_0x13cax3[_0xc147[24]](_0x13cax4);this[_0xc147[20]](_0x13cax3,mxResources[_0xc147[26]](_0xc147[61]),[mxConstants[_0xc147[55]]],[mxConstants[_0xc147[62]]],null,_0x13cax4);this[_0xc147[20]](_0x13cax3,mxResources[_0xc147[26]](_0xc147[63]),[mxConstants[_0xc147[55]]],[mxConstants[_0xc147[64]]],null,_0x13cax4);this[_0xc147[20]](_0x13cax3,mxResources[_0xc147[26]](_0xc147[65]),[mxConstants[_0xc147[55]]],[mxConstants[_0xc147[66]]],null,_0x13cax4);_0x13cax3[_0xc147[24]](_0x13cax4);this[_0xc147[20]](_0x13cax3,mxResources[_0xc147[26]](_0xc147[67]),[mxConstants[_0xc147[55]]],[mxConstants[_0xc147[68]]],null,_0x13cax4);_0x13cax3[_0xc147[24]](_0x13cax4);_0x13cax3[_0xc147[72]](mxResources[_0xc147[26]](_0xc147[69]),null,function(){_0x13cax2[_0xc147[71]](_0xc147[70],true)},_0x13cax4,null,true);_0x13cax3[_0xc147[24]](_0x13cax4);this[_0xc147[28]](_0x13cax3,mxResources[_0xc147[26]](_0xc147[73]),_0xc147[38],mxConstants.DEFAULT_MARKERSIZE,mxConstants.STYLE_ENDSIZE,_0x13cax4)})));this[_0xc147[30]](_0xc147[74], new Menu(mxUtils[_0xc147[29]](this,function(_0x13cax3,_0x13cax4){this[_0xc147[20]](_0x13cax3,mxResources[_0xc147[26]](_0xc147[54]),[mxConstants[_0xc147[75]]],[mxConstants[_0xc147[56]]],null,_0x13cax4);this[_0xc147[20]](_0x13cax3,mxResources[_0xc147[26]](_0xc147[57]),[mxConstants[_0xc147[75]]],[mxConstants[_0xc147[58]]],null,_0x13cax4);this[_0xc147[20]](_0x13cax3,mxResources[_0xc147[26]](_0xc147[59]),[mxConstants[_0xc147[75]]],[mxConstants[_0xc147[60]]],null,_0x13cax4);_0x13cax3[_0xc147[24]](_0x13cax4);this[_0xc147[20]](_0x13cax3,mxResources[_0xc147[26]](_0xc147[61]),[mxConstants[_0xc147[75]]],[mxConstants[_0xc147[62]]],null,_0x13cax4);this[_0xc147[20]](_0x13cax3,mxResources[_0xc147[26]](_0xc147[63]),[mxConstants[_0xc147[75]]],[mxConstants[_0xc147[64]]],null,_0x13cax4);this[_0xc147[20]](_0x13cax3,mxResources[_0xc147[26]](_0xc147[65]),[mxConstants[_0xc147[75]]],[mxConstants[_0xc147[66]]],null,_0x13cax4);_0x13cax3[_0xc147[24]](_0x13cax4);this[_0xc147[20]](_0x13cax3,mxResources[_0xc147[26]](_0xc147[67]),[mxConstants[_0xc147[75]]],[mxConstants[_0xc147[68]]],null,_0x13cax4);_0x13cax3[_0xc147[24]](_0x13cax4);_0x13cax3[_0xc147[72]](mxResources[_0xc147[26]](_0xc147[69]),null,function(){_0x13cax2[_0xc147[71]](_0xc147[76],true)},_0x13cax4,null,true);_0x13cax3[_0xc147[24]](_0x13cax4);this[_0xc147[28]](_0x13cax3,mxResources[_0xc147[26]](_0xc147[73]),_0xc147[38],mxConstants.DEFAULT_MARKERSIZE,mxConstants.STYLE_STARTSIZE,_0x13cax4)})));this[_0xc147[30]](_0xc147[77], new Menu(mxUtils[_0xc147[29]](this,function(_0x13cax3,_0x13cax4){var _0x13cax9=this[_0xc147[0]][_0xc147[80]][_0xc147[26]](_0xc147[79])[_0xc147[78]];var _0x13caxa=this[_0xc147[26]](_0xc147[40])[_0xc147[78]];if(_0x13cax9|| _0x13cax3[_0xc147[81]]){this[_0xc147[28]](_0x13cax3,mxResources[_0xc147[26]](_0xc147[82]),_0xc147[38],_0xc147[83],mxConstants.STYLE_SPACING_TOP,_0x13cax4,_0x13cax9);this[_0xc147[28]](_0x13cax3,mxResources[_0xc147[26]](_0xc147[84]),_0xc147[38],_0xc147[83],mxConstants.STYLE_SPACING_RIGHT,_0x13cax4,_0x13cax9);this[_0xc147[28]](_0x13cax3,mxResources[_0xc147[26]](_0xc147[85]),_0xc147[38],_0xc147[83],mxConstants.STYLE_SPACING_BOTTOM,_0x13cax4,_0x13cax9);this[_0xc147[28]](_0x13cax3,mxResources[_0xc147[26]](_0xc147[86]),_0xc147[38],_0xc147[83],mxConstants.STYLE_SPACING_LEFT,_0x13cax4,_0x13cax9);_0x13cax3[_0xc147[24]](_0x13cax4);this[_0xc147[28]](_0x13cax3,mxResources[_0xc147[26]](_0xc147[87]),_0xc147[38],_0xc147[83],mxConstants.STYLE_SPACING,_0x13cax4,_0x13cax9);this[_0xc147[28]](_0x13cax3,mxResources[_0xc147[26]](_0xc147[88]),_0xc147[38],_0xc147[83],mxConstants.STYLE_PERIMETER_SPACING,_0x13cax4,_0x13cax9)};if(_0x13caxa|| _0x13cax3[_0xc147[81]]){_0x13cax3[_0xc147[24]](_0x13cax4);this[_0xc147[28]](_0x13cax3,mxResources[_0xc147[26]](_0xc147[89]),_0xc147[38],_0xc147[83],mxConstants.STYLE_SOURCE_PERIMETER_SPACING,_0x13cax4,_0x13caxa);this[_0xc147[28]](_0x13cax3,mxResources[_0xc147[26]](_0xc147[90]),_0xc147[38],_0xc147[83],mxConstants.STYLE_TARGET_PERIMETER_SPACING,_0x13cax4,_0x13caxa)}})));this[_0xc147[30]](_0xc147[91], new Menu(mxUtils[_0xc147[29]](this,function(_0x13cax3,_0x13cax4){this[_0xc147[92]](_0x13cax3,_0xc147[21],_0x13cax4)})));this[_0xc147[30]](_0xc147[93], new Menu(mxUtils[_0xc147[29]](this,function(_0x13cax3,_0x13cax4){var _0x13caxb=this[_0xc147[26]](_0xc147[93])[_0xc147[78]];_0x13cax3[_0xc147[24]](_0x13cax4);this[_0xc147[94]](_0xc147[8],_0x13cax3,_0x13cax4);this[_0xc147[94]](_0xc147[31],_0x13cax3,_0x13cax4);this[_0xc147[99]](_0x13cax3,[_0xc147[95],_0xc147[96],_0xc147[97],_0xc147[98],_0xc147[95]],_0x13cax4);this[_0xc147[94]](_0xc147[100],_0x13cax3,_0x13cax4);this[_0xc147[92]](_0x13cax3,_0xc147[101],_0x13cax4);_0x13cax3[_0xc147[24]](_0x13cax4);this[_0xc147[28]](_0x13cax3,mxResources[_0xc147[26]](_0xc147[102]),_0xc147[103],_0xc147[104],mxConstants.STYLE_TEXT_OPACITY,_0x13cax4,_0x13caxb);_0x13cax3[_0xc147[72]](mxResources[_0xc147[26]](_0xc147[105]),null,function(){_0x13cax2[_0xc147[71]](mxConstants.STYLE_NOLABEL,false)},_0x13cax4,null,_0x13caxb)})));this[_0xc147[30]](_0xc147[100], new Menu(mxUtils[_0xc147[29]](this,function(_0x13cax3,_0x13cax4){this[_0xc147[20]](_0x13cax3,mxResources[_0xc147[26]](_0xc147[106]),[mxConstants[_0xc147[107]]],[mxConstants[_0xc147[108]]],null,_0x13cax4);this[_0xc147[20]](_0x13cax3,mxResources[_0xc147[26]](_0xc147[109]),[mxConstants[_0xc147[107]]],[mxConstants[_0xc147[110]]],null,_0x13cax4);this[_0xc147[20]](_0x13cax3,mxResources[_0xc147[26]](_0xc147[111]),[mxConstants[_0xc147[107]]],[mxConstants[_0xc147[112]]],null,_0x13cax4);_0x13cax3[_0xc147[24]](_0x13cax4);this[_0xc147[20]](_0x13cax3,mxResources[_0xc147[26]](_0xc147[113]),[mxConstants[_0xc147[114]]],[mxConstants[_0xc147[115]]],null,_0x13cax4);this[_0xc147[20]](_0x13cax3,mxResources[_0xc147[26]](_0xc147[116]),[mxConstants[_0xc147[114]]],[mxConstants[_0xc147[117]]],null,_0x13cax4);this[_0xc147[20]](_0x13cax3,mxResources[_0xc147[26]](_0xc147[118]),[mxConstants[_0xc147[114]]],[mxConstants[_0xc147[119]]],null,_0x13cax4);_0x13cax3[_0xc147[24]](_0x13cax4);this[_0xc147[94]](_0xc147[120],_0x13cax3,_0x13cax4);this[_0xc147[94]](_0xc147[77],_0x13cax3,_0x13cax4);_0x13cax3[_0xc147[24]](_0x13cax4);var _0x13caxb=this[_0xc147[26]](_0xc147[93])[_0xc147[78]];_0x13cax3[_0xc147[72]](mxResources[_0xc147[26]](_0xc147[48]),null,function(){_0x13cax2[_0xc147[71]](mxConstants.STYLE_HORIZONTAL,true)},_0x13cax4,null,_0x13caxb)})));this[_0xc147[30]](_0xc147[120], new Menu(mxUtils[_0xc147[29]](this,function(_0x13cax3,_0x13cax4){this[_0xc147[20]](_0x13cax3,mxResources[_0xc147[26]](_0xc147[86]),[mxConstants[_0xc147[121]],mxConstants[_0xc147[107]]],[mxConstants[_0xc147[108]],mxConstants[_0xc147[112]]],null,_0x13cax4);this[_0xc147[20]](_0x13cax3,mxResources[_0xc147[26]](_0xc147[109]),[mxConstants[_0xc147[121]],mxConstants[_0xc147[107]]],[mxConstants[_0xc147[110]],mxConstants[_0xc147[110]]],null,_0x13cax4);this[_0xc147[20]](_0x13cax3,mxResources[_0xc147[26]](_0xc147[84]),[mxConstants[_0xc147[121]],mxConstants[_0xc147[107]]],[mxConstants[_0xc147[112]],mxConstants[_0xc147[108]]],null,_0x13cax4);_0x13cax3[_0xc147[24]](_0x13cax4);this[_0xc147[20]](_0x13cax3,mxResources[_0xc147[26]](_0xc147[82]),[mxConstants[_0xc147[122]],mxConstants[_0xc147[114]]],[mxConstants[_0xc147[115]],mxConstants[_0xc147[119]]],null,_0x13cax4);this[_0xc147[20]](_0x13cax3,mxResources[_0xc147[26]](_0xc147[116]),[mxConstants[_0xc147[122]],mxConstants[_0xc147[114]]],[mxConstants[_0xc147[117]],mxConstants[_0xc147[117]]],null,_0x13cax4);this[_0xc147[20]](_0x13cax3,mxResources[_0xc147[26]](_0xc147[85]),[mxConstants[_0xc147[122]],mxConstants[_0xc147[114]]],[mxConstants[_0xc147[119]],mxConstants[_0xc147[115]]],null,_0x13cax4)})));this[_0xc147[30]](_0xc147[123], new Menu(mxUtils[_0xc147[29]](this,function(_0x13cax3,_0x13cax4){_0x13cax3[_0xc147[72]](mxResources[_0xc147[26]](_0xc147[124]),null,function(){_0x13cax2[_0xc147[71]](mxConstants.STYLE_FLIPH,false)},_0x13cax4);_0x13cax3[_0xc147[72]](mxResources[_0xc147[26]](_0xc147[125]),null,function(){_0x13cax2[_0xc147[71]](mxConstants.STYLE_FLIPV,false)},_0x13cax4);this[_0xc147[99]](_0x13cax3,[_0xc147[95],_0xc147[126],_0xc147[127]],_0x13cax4)})));this[_0xc147[30]](_0xc147[128], new Menu(mxUtils[_0xc147[29]](this,function(_0x13cax3,_0x13cax4){_0x13cax3[_0xc147[72]](mxResources[_0xc147[26]](_0xc147[106]),null,function(){_0x13cax2[_0xc147[129]](mxConstants.ALIGN_LEFT)},_0x13cax4);_0x13cax3[_0xc147[72]](mxResources[_0xc147[26]](_0xc147[109]),null,function(){_0x13cax2[_0xc147[129]](mxConstants.ALIGN_CENTER)},_0x13cax4);_0x13cax3[_0xc147[72]](mxResources[_0xc147[26]](_0xc147[111]),null,function(){_0x13cax2[_0xc147[129]](mxConstants.ALIGN_RIGHT)},_0x13cax4);_0x13cax3[_0xc147[24]](_0x13cax4);_0x13cax3[_0xc147[72]](mxResources[_0xc147[26]](_0xc147[113]),null,function(){_0x13cax2[_0xc147[129]](mxConstants.ALIGN_TOP)},_0x13cax4);_0x13cax3[_0xc147[72]](mxResources[_0xc147[26]](_0xc147[116]),null,function(){_0x13cax2[_0xc147[129]](mxConstants.ALIGN_MIDDLE)},_0x13cax4);_0x13cax3[_0xc147[72]](mxResources[_0xc147[26]](_0xc147[118]),null,function(){_0x13cax2[_0xc147[129]](mxConstants.ALIGN_BOTTOM)},_0x13cax4)})));this[_0xc147[30]](_0xc147[130], new Menu(mxUtils[_0xc147[29]](this,function(_0x13cax3,_0x13cax4){_0x13cax3[_0xc147[72]](mxResources[_0xc147[26]](_0xc147[131]),null,mxUtils[_0xc147[29]](this,function(){var _0x13caxc= new mxHierarchicalLayout(_0x13cax2,mxConstants.DIRECTION_WEST);this[_0xc147[0]][_0xc147[132]](_0x13caxc,true,true)}),_0x13cax4);_0x13cax3[_0xc147[72]](mxResources[_0xc147[26]](_0xc147[133]),null,mxUtils[_0xc147[29]](this,function(){var _0x13caxc= new mxHierarchicalLayout(_0x13cax2,mxConstants.DIRECTION_NORTH);this[_0xc147[0]][_0xc147[132]](_0x13caxc,true,true)}),_0x13cax4)})));this[_0xc147[30]](_0xc147[134], new Menu(mxUtils[_0xc147[29]](this,function(_0x13cax3,_0x13cax4){this[_0xc147[99]](_0x13cax3,[_0xc147[135],_0xc147[95],_0xc147[136],_0xc147[137],_0xc147[95],_0xc147[138],_0xc147[139]],_0x13cax4)})));this[_0xc147[30]](_0xc147[140], new Menu(mxUtils[_0xc147[29]](this,function(_0x13cax3,_0x13cax4){this[_0xc147[99]](_0x13cax3,[_0xc147[141],_0xc147[142],_0xc147[95]],_0x13cax4);this[_0xc147[94]](_0xc147[130],_0x13cax3,_0x13cax4);_0x13cax3[_0xc147[24]](_0x13cax4);this[_0xc147[99]](_0x13cax3,[_0xc147[95],_0xc147[143],_0xc147[144],_0xc147[145]],_0x13cax4)})));this[_0xc147[30]](_0xc147[146], new Menu(mxUtils[_0xc147[29]](this,function(_0x13cax3,_0x13cax4){this[_0xc147[99]](_0x13cax3,[_0xc147[147]],_0x13cax4);_0x13cax3[_0xc147[24]]();var _0x13caxd=[0.25,0.5,0.75,1,2,4];for(var _0x13cax6=0;_0x13cax6< _0x13caxd[_0xc147[18]];_0x13cax6++){(function(_0x13caxe){_0x13cax3[_0xc147[72]]((_0x13caxe* 100)+ _0xc147[148],null,function(){_0x13cax2[_0xc147[149]](_0x13caxe)},_0x13cax4)})(_0x13caxd[_0x13cax6])};this[_0xc147[99]](_0x13cax3,[_0xc147[95],_0xc147[150],_0xc147[151],_0xc147[95],_0xc147[152],_0xc147[153],_0xc147[95],_0xc147[154],_0xc147[155]],_0x13cax4)})));this[_0xc147[30]](_0xc147[156], new Menu(mxUtils[_0xc147[29]](this,function(_0x13cax3,_0x13cax4){this[_0xc147[99]](_0x13cax3,[_0xc147[157],_0xc147[158],_0xc147[95],_0xc147[159],_0xc147[160],_0xc147[161],_0xc147[95],_0xc147[162],_0xc147[95],_0xc147[163],_0xc147[164],_0xc147[95],_0xc147[165],_0xc147[166],_0xc147[95],_0xc147[167]],_0x13cax4)})));this[_0xc147[30]](_0xc147[168], new Menu(mxUtils[_0xc147[29]](this,function(_0x13cax3,_0x13cax4){this[_0xc147[99]](_0x13cax3,[_0xc147[169],_0xc147[170],_0xc147[95],_0xc147[171],_0xc147[172],_0xc147[173],_0xc147[174],_0xc147[95],_0xc147[175],_0xc147[95],_0xc147[176],_0xc147[177],_0xc147[178]])})));this[_0xc147[30]](_0xc147[179], new Menu(mxUtils[_0xc147[29]](this,function(_0x13cax3,_0x13cax4){this[_0xc147[99]](_0x13cax3,[_0xc147[179],_0xc147[95],_0xc147[180]])})))};Menus[_0xc147[5]][_0xc147[30]]= function(_0x13caxf,_0x13cax3){this[_0xc147[1]][_0x13caxf]= _0x13cax3};Menus[_0xc147[5]][_0xc147[26]]= function(_0x13caxf){return this[_0xc147[1]][_0x13caxf]};Menus[_0xc147[5]][_0xc147[94]]= function(_0x13caxf,_0x13cax3,_0x13cax4){var _0x13caxb=this[_0xc147[26]](_0x13caxf)[_0xc147[78]];if(_0x13cax3[_0xc147[81]]|| _0x13caxb){var _0x13cax10=_0x13cax3[_0xc147[72]](mxResources[_0xc147[26]](_0x13caxf),null,null,_0x13cax4,null,_0x13caxb);this[_0xc147[181]](_0x13caxf,_0x13cax3,_0x13cax10)}};Menus[_0xc147[5]][_0xc147[181]]= function(_0x13caxf,_0x13cax11,_0x13cax4){var _0x13cax3=this[_0xc147[26]](_0x13caxf);if(_0x13cax3!= null&& (_0x13cax11[_0xc147[81]]|| _0x13cax3[_0xc147[78]])){this[_0xc147[26]](_0x13caxf)[_0xc147[182]](_0x13cax11,_0x13cax4)}};Menus[_0xc147[5]][_0xc147[20]]= function(_0x13cax3,_0x13cax12,_0x13cax13,_0x13cax14,_0x13cax15,_0x13cax4){return _0x13cax3[_0xc147[72]](_0x13cax12,null,mxUtils[_0xc147[29]](this,function(){var _0x13cax2=this[_0xc147[0]][_0xc147[7]][_0xc147[6]];_0x13cax2[_0xc147[184]]()[_0xc147[183]]();try{for(var _0x13cax6=0;_0x13cax6< _0x13cax13[_0xc147[18]];_0x13cax6++){_0x13cax2[_0xc147[185]](_0x13cax13[_0x13cax6],_0x13cax14[_0x13cax6])}}finally{_0x13cax2[_0xc147[184]]()[_0xc147[186]]()}}),_0x13cax4,_0x13cax15)};Menus[_0xc147[5]][_0xc147[28]]= function(_0x13cax3,_0x13cax12,_0x13cax16,_0x13cax17,_0x13cax18,_0x13cax4,_0x13caxb){return _0x13cax3[_0xc147[72]](_0x13cax12,null,mxUtils[_0xc147[29]](this,function(){var _0x13cax2=this[_0xc147[0]][_0xc147[7]][_0xc147[6]];var _0x13cax19=_0x13cax17;var _0x13cax1a=_0x13cax2[_0xc147[189]]()[_0xc147[188]](_0x13cax2[_0xc147[187]]());if(_0x13cax1a!= null){_0x13cax19= _0x13cax1a[_0xc147[21]][_0x13cax18]|| _0x13cax19};_0x13cax19= mxUtils[_0xc147[192]](mxResources[_0xc147[26]](_0xc147[190])+ ((_0x13cax16[_0xc147[18]]> 0)?(_0xc147[191]+ _0x13cax16):_0xc147[27]),_0x13cax19);if(_0x13cax19!= null&& _0x13cax19[_0xc147[18]]> 0){_0x13cax2[_0xc147[185]](_0x13cax18,_0x13cax19)}}),_0x13cax4,null,_0x13caxb)};Menus[_0xc147[5]][_0xc147[92]]= function(_0x13cax3,_0x13cax18,_0x13cax4){var _0x13cax1b=this[_0xc147[0]][_0xc147[80]][_0xc147[26]](_0x13cax18);if(_0x13cax1b!= null&& (_0x13cax3[_0xc147[81]]|| _0x13cax1b[_0xc147[78]])){var _0x13cax1c=_0x13cax3[_0xc147[72]](_0x13cax1b[_0xc147[193]],null,_0x13cax1b[_0xc147[194]],_0x13cax4,null,_0x13cax1b[_0xc147[78]]);if(_0x13cax1b[_0xc147[195]]&& _0x13cax1b[_0xc147[196]]()){this[_0xc147[197]](_0x13cax1c)};this[_0xc147[198]](_0x13cax1c,_0x13cax1b);return _0x13cax1c};return null};Menus[_0xc147[5]][_0xc147[198]]= function(_0x13cax1c,_0x13cax1b){if(_0x13cax1b[_0xc147[199]]!= null){var _0x13cax1d=_0x13cax1c[_0xc147[23]][_0xc147[22]][_0xc147[22]];var _0x13cax1e=document[_0xc147[201]](_0xc147[200]);_0x13cax1e[_0xc147[21]][_0xc147[202]]= _0xc147[203];mxUtils[_0xc147[204]](_0x13cax1e,_0x13cax1b[_0xc147[199]]);_0x13cax1d[_0xc147[205]](_0x13cax1e)}};Menus[_0xc147[5]][_0xc147[197]]= function(_0x13cax1c){var _0x13cax1d=_0x13cax1c[_0xc147[23]][_0xc147[22]];_0x13cax1d[_0xc147[21]][_0xc147[206]]= _0xc147[207]+ IMAGE_PATH+ _0xc147[208];_0x13cax1d[_0xc147[21]][_0xc147[209]]= _0xc147[210];_0x13cax1d[_0xc147[21]][_0xc147[211]]= _0xc147[212]};Menus[_0xc147[5]][_0xc147[99]]= function(_0x13cax3,_0x13cax13,_0x13cax4){for(var _0x13cax6=0;_0x13cax6< _0x13cax13[_0xc147[18]];_0x13cax6++){if(_0x13cax13[_0x13cax6]== _0xc147[95]){_0x13cax3[_0xc147[24]](_0x13cax4)}else {this[_0xc147[92]](_0x13cax3,_0x13cax13[_0x13cax6],_0x13cax4)}}};Menus[_0xc147[5]][_0xc147[213]]= function(_0x13cax3,_0x13cax1f,_0x13cax20){var _0x13cax2=this[_0xc147[0]][_0xc147[7]][_0xc147[6]];_0x13cax3[_0xc147[214]]= true;if(_0x13cax2[_0xc147[215]]()){this[_0xc147[99]](_0x13cax3,[_0xc147[169],_0xc147[170],_0xc147[95],_0xc147[173],_0xc147[95]])}else {this[_0xc147[99]](_0x13cax3,[_0xc147[174],_0xc147[95],_0xc147[171],_0xc147[172],_0xc147[95],_0xc147[175]]);if(_0x13cax2[_0xc147[216]]()== 1&& _0x13cax2[_0xc147[184]]()[_0xc147[217]](_0x13cax2[_0xc147[187]]())){this[_0xc147[99]](_0x13cax3,[_0xc147[218]])};_0x13cax3[_0xc147[24]]()};if(_0x13cax2[_0xc147[216]]()> 0){this[_0xc147[99]](_0x13cax3,[_0xc147[141],_0xc147[142],_0xc147[95]]);if(_0x13cax2[_0xc147[184]]()[_0xc147[217]](_0x13cax2[_0xc147[187]]())){var _0x13cax21=false;var _0x13cax1f=_0x13cax2[_0xc147[187]]();if(_0x13cax1f!= null&& _0x13cax2[_0xc147[184]]()[_0xc147[217]](_0x13cax1f)){var _0x13cax22=_0x13cax2[_0xc147[220]][_0xc147[219]](_0x13cax1f);if(_0x13cax22 instanceof mxEdgeHandler&& _0x13cax22[_0xc147[221]]!= null&& _0x13cax22[_0xc147[221]][_0xc147[18]]> 2){var _0x13cax23=_0x13cax22[_0xc147[222]]( new mxMouseEvent(_0x13cax20));var _0x13cax24=this[_0xc147[0]][_0xc147[80]][_0xc147[26]](_0xc147[223]);_0x13cax24[_0xc147[224]]= _0x13cax22;_0x13cax24[_0xc147[225]]= _0x13cax23;_0x13cax21= _0x13cax23> 0&& _0x13cax23< _0x13cax22[_0xc147[221]][_0xc147[18]]}};this[_0xc147[99]](_0x13cax3,[_0xc147[95],(_0x13cax21)?_0xc147[223]:_0xc147[226]])}else {if(_0x13cax2[_0xc147[216]]()> 1){_0x13cax3[_0xc147[24]]();this[_0xc147[99]](_0x13cax3,[_0xc147[143]])}};_0x13cax3[_0xc147[24]]();if(_0x13cax2[_0xc147[216]]()== 1){var _0x13cax25=_0x13cax2[_0xc147[227]](_0x13cax2[_0xc147[187]]());if(_0x13cax25!= null){this[_0xc147[99]](_0x13cax3,[_0xc147[228]])}}}else {this[_0xc147[99]](_0x13cax3,[_0xc147[95],_0xc147[176],_0xc147[177],_0xc147[95],_0xc147[178]])}};Menus[_0xc147[5]][_0xc147[229]]= function(_0x13cax26){var _0x13cax27= new Menubar(this[_0xc147[0]],_0x13cax26);var _0x13cax28=[_0xc147[156],_0xc147[168],_0xc147[146],_0xc147[91],_0xc147[93],_0xc147[140],_0xc147[179]];for(var _0x13cax6=0;_0x13cax6< _0x13cax28[_0xc147[18]];_0x13cax6++){_0x13cax27[_0xc147[181]](mxResources[_0xc147[26]](_0x13cax28[_0x13cax6]),this[_0xc147[26]](_0x13cax28[_0x13cax6])[_0xc147[194]])};return _0x13cax27};function Menubar(_0x13cax1,_0x13cax26){this[_0xc147[0]]= _0x13cax1;this[_0xc147[230]]= _0x13cax26;mxEvent[_0xc147[232]](document,mxUtils[_0xc147[29]](this,function(_0x13cax20){this[_0xc147[231]]()}))}Menubar[_0xc147[5]][_0xc147[231]]= function(){if(this[_0xc147[233]]!= null){this[_0xc147[233]][_0xc147[231]]()}};Menubar[_0xc147[5]][_0xc147[181]]= function(_0x13cax12,_0x13cax2a){var _0x13cax2b=document[_0xc147[201]](_0xc147[234]);_0x13cax2b[_0xc147[237]](_0xc147[235],_0xc147[236]);_0x13cax2b[_0xc147[238]]= _0xc147[239];mxUtils[_0xc147[204]](_0x13cax2b,_0x13cax12);this[_0xc147[240]](_0x13cax2b,_0x13cax2a);this[_0xc147[230]][_0xc147[205]](_0x13cax2b);return _0x13cax2b};Menubar[_0xc147[5]][_0xc147[240]]= function(_0x13cax2b,_0x13cax2a){if(_0x13cax2a!= null){var _0x13cax2c=true;var _0x13cax2d=mxUtils[_0xc147[29]](this,function(_0x13cax20){if(_0x13cax2c&& _0x13cax2b[_0xc147[78]]== null|| _0x13cax2b[_0xc147[78]]){this[_0xc147[0]][_0xc147[7]][_0xc147[6]][_0xc147[241]][_0xc147[231]]();var _0x13cax3= new mxPopupMenu(_0x13cax2a);_0x13cax3[_0xc147[242]][_0xc147[238]]+= _0xc147[243];_0x13cax3[_0xc147[214]]= true;_0x13cax3[_0xc147[81]]= true;_0x13cax3[_0xc147[244]]= true;_0x13cax3[_0xc147[231]]= mxUtils[_0xc147[29]](this,function(){mxPopupMenu[_0xc147[5]][_0xc147[231]][_0xc147[245]](_0x13cax3,arguments);_0x13cax3[_0xc147[246]]();this[_0xc147[233]]= null;this[_0xc147[247]]= null});var _0x13cax2e=_0x13cax2b[_0xc147[248]]+ document[_0xc147[251]](_0xc147[250])[_0xc147[249]]+ 22;var _0x13cax2f=_0x13cax2b[_0xc147[252]]+ _0x13cax2b[_0xc147[253]]+ 140;_0x13cax3[_0xc147[254]](_0x13cax2e,_0x13cax2f,null,_0x13cax20);this[_0xc147[233]]= _0x13cax3;this[_0xc147[247]]= _0x13cax2b};_0x13cax2c= true;mxEvent[_0xc147[255]](_0x13cax20)});mxEvent[_0xc147[257]](_0x13cax2b,_0xc147[256],mxUtils[_0xc147[29]](this,function(_0x13cax20){if(this[_0xc147[233]]!= null&& this[_0xc147[247]]!= _0x13cax2b){this[_0xc147[231]]();_0x13cax2d(_0x13cax20)}}));mxEvent[_0xc147[257]](_0x13cax2b,_0xc147[258],mxUtils[_0xc147[29]](this,function(){_0x13cax2c= this[_0xc147[247]]!= _0x13cax2b}));mxEvent[_0xc147[257]](_0x13cax2b,_0xc147[259],_0x13cax2d)}};function Menu(_0x13cax2a,_0x13caxb){mxEventSource[_0xc147[260]](this);this[_0xc147[194]]= _0x13cax2a;this[_0xc147[78]]= (_0x13caxb!= null)?_0x13caxb:true}mxUtils[_0xc147[261]](Menu,mxEventSource);Menu[_0xc147[5]][_0xc147[262]]= function(_0x13cax19){if(this[_0xc147[78]]!= _0x13cax19){this[_0xc147[78]]= _0x13cax19;this[_0xc147[264]]( new mxEventObject(_0xc147[263]))}};Menu[_0xc147[5]][_0xc147[182]]= function(_0x13cax3,_0x13cax4){this[_0xc147[194]](_0x13cax3,_0x13cax4)} \ No newline at end of file diff --git a/public/assets/plugins/square/js/Shapes.js b/public/assets/plugins/square/js/Shapes.js index 42e13ca..3d3078f 100644 --- a/public/assets/plugins/square/js/Shapes.js +++ b/public/assets/plugins/square/js/Shapes.js @@ -1,1234 +1 @@ -/** - * $Id: Shapes.js,v 1.13 2013-02-02 06:44:30 gaudenz Exp $ - * Copyright (c) 2006-2012, JGraph Ltd - */ - -/** - * Registers shapes. - */ -(function() -{ - // Cube Shape, supports size style - function CubeShape() { }; - CubeShape.prototype = new mxCylinder(); - CubeShape.prototype.constructor = CubeShape; - CubeShape.prototype.size = 20; - CubeShape.prototype.redrawPath = function(path, x, y, w, h, isForeground) - { - var s = Math.min(w, Math.min(h, mxUtils.getValue(this.style, 'size', this.size))); - - if (isForeground) - { - path.moveTo(s, h); - path.lineTo(s, s); - path.lineTo(0, 0); - path.moveTo(s, s); - path.lineTo(w, s); - path.end(); - } - else - { - path.moveTo(0, 0); - path.lineTo(w - s, 0); - path.lineTo(w, s); - path.lineTo(w, h); - path.lineTo(s, h); - path.lineTo(0, h - s); - path.lineTo(0, 0); - path.close(); - path.end(); - } - }; - - mxCellRenderer.prototype.defaultShapes['cube'] = CubeShape; - - // Note Shape, supports size style - function NoteShape() { }; - NoteShape.prototype = new mxCylinder(); - NoteShape.prototype.constructor = NoteShape; - NoteShape.prototype.size = 30; - NoteShape.prototype.redrawPath = function(path, x, y, w, h, isForeground) - { - var s = Math.min(w, Math.min(h, mxUtils.getValue(this.style, 'size', this.size))); - - if (isForeground) - { - path.moveTo(w - s, 0); - path.lineTo(w - s, s); - path.lineTo(w, s); - path.end(); - } - else - { - path.moveTo(0, 0); - path.lineTo(w - s, 0); - path.lineTo(w, s); - path.lineTo(w, h); - path.lineTo(0, h); - path.lineTo(0, 0); - path.close(); - path.end(); - } - }; - - mxCellRenderer.prototype.defaultShapes['note'] = NoteShape; - - // Folder Shape, supports tabWidth, tabHeight styles - function FolderShape() { }; - FolderShape.prototype = new mxCylinder(); - FolderShape.prototype.constructor = FolderShape; - FolderShape.prototype.tabWidth = 60; - FolderShape.prototype.tabHeight = 20; - FolderShape.prototype.tabPosition = 'right'; - FolderShape.prototype.redrawPath = function(path, x, y, w, h, isForeground) - { - var tw = mxUtils.getValue(this.style, 'tabWidth', this.tabWidth); - var th = mxUtils.getValue(this.style, 'tabHeight', this.tabHeight); - var tp = mxUtils.getValue(this.style, 'tabPosition', this.tabPosition); - var dx = Math.min(w, tw); - var dy = Math.min(h, th); - - if (isForeground) - { - if (tp == 'left') - { - path.moveTo(0, dy); - path.lineTo(dx, dy); - } - // Right is default - else - { - path.moveTo(w - dx, dy); - path.lineTo(w, dy); - } - - path.end(); - } - else - { - if (tp == 'left') - { - path.moveTo(0, 0); - path.lineTo(dx, 0); - path.lineTo(dx, dy); - path.lineTo(w, dy); - } - // Right is default - else - { - path.moveTo(0, dy); - path.lineTo(w - dx, dy); - path.lineTo(w - dx, 0); - path.lineTo(w, 0); - } - - path.lineTo(w, h); - path.lineTo(0, h); - path.lineTo(0, dy); - path.close(); - path.end(); - } - }; - - mxCellRenderer.prototype.defaultShapes['folder'] = FolderShape; - - // Card Shape, supports size style - function CardShape() { }; - CardShape.prototype = new mxCylinder(); - CardShape.prototype.constructor = CardShape; - CardShape.prototype.size = 30; - CardShape.prototype.redrawPath = function(path, x, y, w, h, isForeground) - { - var s = Math.min(w, Math.min(h, mxUtils.getValue(this.style, 'size', this.size))); - - if (!isForeground) - { - path.moveTo(s, 0); - path.lineTo(w, 0); - path.lineTo(w, h); - path.lineTo(0, h); - path.lineTo(0, s); - path.lineTo(s, 0); - path.close(); - path.end(); - } - }; - - mxCellRenderer.prototype.defaultShapes['card'] = CardShape; - - // Tape Shape, supports size style - function TapeShape() { }; - TapeShape.prototype = new mxCylinder(); - TapeShape.prototype.constructor = TapeShape; - TapeShape.prototype.size = 0.4; - TapeShape.prototype.redrawPath = function(path, x, y, w, h, isForeground) - { - var s = mxUtils.getValue(this.style, 'size', this.size); - var dy = h * s; - var fy = 1.4; - - if (!isForeground) - { - path.moveTo(0, dy / 2); - path.quadTo(w / 4, dy * fy, w / 2, dy / 2); - path.quadTo(w * 3 / 4, dy * (1 - fy), w, dy / 2); - path.lineTo(w, h - dy / 2); - path.quadTo(w * 3 / 4, h - dy * fy, w / 2, h - dy / 2); - path.quadTo(w / 4, h - dy * (1 - fy), 0, h - dy / 2); - path.lineTo(0, dy / 2); - path.close(); - path.end(); - } - }; - - mxCellRenderer.prototype.defaultShapes['tape'] = TapeShape; - - // Tape Shape, supports size style - function StepShape() { }; - StepShape.prototype = new mxCylinder(); - StepShape.prototype.constructor = StepShape; - StepShape.prototype.size = 0.2; - StepShape.prototype.redrawPath = function(path, x, y, w, h, isForeground) - { - var s = w * mxUtils.getValue(this.style, 'size', this.size); - - if (!isForeground) - { - path.moveTo(0, 0); - path.lineTo(w - s, 0); - path.lineTo(w, h / 2); - path.lineTo(w - s, h); - path.lineTo(0, h); - path.lineTo(s, h / 2); - path.close(); - path.end(); - } - }; - - mxCellRenderer.prototype.defaultShapes['step'] = StepShape; - - // Plus Shape - function PlusShape() - { - mxRectangleShape.call(this); - }; - mxUtils.extend(PlusShape, mxRectangleShape); - PlusShape.prototype.isHtmlAllowed = function() - { - return false; - }; - PlusShape.prototype.paintForeground = function(c, x, y, w, h) - { - var border = Math.min(w / 5, h / 5) + 1; - - c.begin(); - c.moveTo(x + w / 2, y + border); - c.lineTo(x + w / 2, y + h - border); - c.moveTo(x + border, y + h / 2); - c.lineTo(x + w - border, y + h / 2); - c.end(); - c.stroke(); - mxRectangleShape.prototype.paintForeground.apply(this, arguments); - }; - - mxCellRenderer.prototype.defaultShapes['plus'] = PlusShape; - - // CompositeShape - function ExtendedShape() - { - mxRectangleShape.call(this); - }; - mxUtils.extend(ExtendedShape, mxRectangleShape); - ExtendedShape.prototype.isHtmlAllowed = function() - { - return false; - }; - ExtendedShape.prototype.paintForeground = function(c, x, y, w, h) - { - if (this.style != null) - { - if (this.style['double'] == 1) - { - var inset = Math.max(2, this.strokewidth + 1); - - mxRectangleShape.prototype.paintBackground.call(this, c, x + inset, y + inset, w - 2 * inset, h - 2 * inset); - mxRectangleShape.prototype.paintForeground.apply(this, arguments); - - x += inset; - y += inset; - w -= 2 * inset; - h -= 2 * inset; - } - - c.setDashed(false); - - // Draws the symbols defined in the style. The symbols are - // numbered from 1...n. Possible postfixes are align, - // verticalAlign, spacing, arcSpacing, width, height - var counter = 0; - var shape = null; - - do - { - shape = mxCellRenderer.prototype.defaultShapes[this.style['symbol' + counter]]; - - if (shape != null) - { - var align = this.style['symbol' + counter + 'Align']; - var valign = this.style['symbol' + counter + 'VerticalAlign']; - var width = this.style['symbol' + counter + 'Width']; - var height = this.style['symbol' + counter + 'Height']; - var spacing = this.style['symbol' + counter + 'Spacing'] || 0; - var arcspacing = this.style['symbol' + counter + 'ArcSpacing']; - - if (arcspacing != null) - { - spacing += this.getArcSize(w + this.strokewidth, h + this.strokewidth) * arcspacing; - } - - var x2 = x; - var y2 = y; - - if (align == mxConstants.ALIGN_CENTER) - { - x2 += (w - width) / 2; - } - else if (align == mxConstants.ALIGN_RIGHT) - { - x2 += w - width - spacing; - } - else - { - x2 += spacing; - } - - if (valign == mxConstants.ALIGN_MIDDLE) - { - y2 += (h - height) / 2; - } - else if (valign == mxConstants.ALIGN_BOTTOM) - { - y2 += h - height - spacing; - } - else - { - y2 += spacing; - } - - c.save(); - - // Small hack to pass style along into subshape - var tmp = new shape(); - // TODO: Clone style and override settings (eg. strokewidth) - tmp.style = this.style; - shape.prototype.paintVertexShape.call(tmp, c, x2, y2, width, height); - c.restore(); - } - - counter++; - } - while (shape != null); - } - }; - - mxCellRenderer.prototype.defaultShapes['ext'] = ExtendedShape; - - // Tape Shape, supports size style - function MessageShape() { }; - MessageShape.prototype = new mxCylinder(); - MessageShape.prototype.constructor = MessageShape; - MessageShape.prototype.redrawPath = function(path, x, y, w, h, isForeground) - { - if (isForeground) - { - path.moveTo(0, 0); - path.lineTo(w / 2, h / 2); - path.lineTo(w, 0); - path.end(); - } - else - { - path.moveTo(0, 0); - path.lineTo(w, 0); - path.lineTo(w, h); - path.lineTo(0, h); - path.close(); - } - }; - - mxCellRenderer.prototype.defaultShapes['message'] = MessageShape; - - // New Actor Shape - function UmlActorShape() { }; - UmlActorShape.prototype = new mxCylinder(); - UmlActorShape.prototype.constructor = UmlActorShape; - UmlActorShape.prototype.addPipe = true; - UmlActorShape.prototype.redrawPath = function(path, x, y, w, h, isForeground) - { - var width = w / 3; - var height = h / 4; - - if (!isForeground) - { - path.moveTo(w / 2, height); - path.curveTo(w / 2 - width, height, w / 2 - width, 0, w / 2, 0); - path.curveTo(w / 2 + width, 0, w / 2 + width, height, w / 2, height); - path.close(); - - path.moveTo(w / 2, height); - path.lineTo(w / 2, 2 * h / 3); - - // Arms - path.moveTo(w / 2, h / 3); - path.lineTo(0, h / 3); - path.moveTo(w / 2, h / 3); - path.lineTo(w, h / 3); - - // Legs - path.moveTo(w / 2, 2 * h / 3); - path.lineTo(0, h); - path.moveTo(w / 2, 2 * h / 3); - path.lineTo(w, h); - path.end(); - } - }; - - // Replaces existing actor shape - mxCellRenderer.prototype.defaultShapes['umlActor'] = UmlActorShape; - - // New Actor Shape - function LollipopShape() { }; - LollipopShape.prototype = new mxCylinder(); - LollipopShape.prototype.constructor = LollipopShape; - LollipopShape.prototype.size = 10; - LollipopShape.prototype.addPipe = true; - LollipopShape.prototype.redrawPath = function(path, x, y, w, h, isForeground) - { - var ss = mxUtils.getValue(this.style, 'size', this.size); - var width = ss * 2 / 3; - var height = ss; - - if (!isForeground) - { - path.moveTo(w / 2, height); - path.curveTo(w / 2 - width, height, w / 2 - width, 0, w / 2, 0); - path.curveTo(w / 2 + width, 0, w / 2 + width, height, w / 2, height); - path.close(); - - path.moveTo(w / 2, height); - path.lineTo(w / 2, h); - path.end(); - } - }; - - // Replaces existing actor shape - mxCellRenderer.prototype.defaultShapes['lollipop'] = LollipopShape; - - // Folder Shape, supports tabWidth, tabHeight styles - function ComponentShape() { }; - ComponentShape.prototype = new mxCylinder(); - ComponentShape.prototype.constructor = ComponentShape; - ComponentShape.prototype.jettyWidth = 32; - ComponentShape.prototype.jettyHeight = 12; - ComponentShape.prototype.redrawPath = function(path, x, y, w, h, isForeground) - { - var dx = mxUtils.getValue(this.style, 'jettyWidth', this.jettyWidth); - var dy = mxUtils.getValue(this.style, 'jettyHeight', this.jettyHeight); - var x0 = dx / 2; - var x1 = x0 + dx / 2; - var y0 = 0.3 * h - dy / 2; - var y1 = 0.7 * h - dy / 2; - - if (isForeground) - { - path.moveTo(x0, y0); - path.lineTo(x1, y0); - path.lineTo(x1, y0 + dy); - path.lineTo(x0, y0 + dy); - path.moveTo(x0, y1); - path.lineTo(x1, y1); - path.lineTo(x1, y1 + dy); - path.lineTo(x0, y1 + dy); - path.end(); - } - else - { - path.moveTo(x0, 0); - path.lineTo(w, 0); - path.lineTo(w, h); - path.lineTo(x0, h); - path.lineTo(x0, y1 + dy); - path.lineTo(0, y1 + dy); - path.lineTo(0, y1); - path.lineTo(x0, y1); - path.lineTo(x0, y0 + dy); - path.lineTo(0, y0 + dy); - path.lineTo(0, y0); - path.lineTo(x0, y0); - path.close(); - path.end(); - } - }; - - mxCellRenderer.prototype.defaultShapes['component'] = ComponentShape; - - // State Shapes derives from double ellipse - function StateShape() { }; - StateShape.prototype = new mxDoubleEllipse(); - StateShape.prototype.constructor = StateShape; - StateShape.prototype.outerStroke = true; - StateShape.prototype.paintVertexShape = function(c, x, y, w, h) - { - var inset = Math.min(4, Math.min(w / 5, h / 5)); - - if (w > 0 && h > 0) - { - c.ellipse(x + inset, y + inset, w - 2 * inset, h - 2 * inset); - c.fillAndStroke(); - } - - c.setShadow(false); - - if (this.outerStroke) - { - c.ellipse(x, y, w, h); - c.stroke(); - } - }; - - mxCellRenderer.prototype.defaultShapes['endState'] = StateShape; - - function StartStateShape() { }; - StartStateShape.prototype = new StateShape(); - StartStateShape.prototype.constructor = StartStateShape; - StartStateShape.prototype.outerStroke = false; - - mxCellRenderer.prototype.defaultShapes['startState'] = StartStateShape; - - // Image export for state shapes - var imageExportInitShapes = mxImageExport.prototype.initShapes; - mxImageExport.prototype.initShapes = function() - { - imageExportInitShapes.apply(this, arguments); - - function createStateShape(outerStroke) - { - return { - drawShape: function(canvas, state, bounds, background) - { - var x = bounds.x; - var y = bounds.y; - var w = bounds.width; - var h = bounds.height; - - if (background) - { - var inset = Math.min(4, Math.min(w / 5, h / 5)); - x += inset; - y += inset; - w -= 2 * inset; - h -= 2 * inset; - - if (w > 0 && h > 0) - { - canvas.ellipse(x, y, w, h); - } - - return true; - } - else - { - canvas.fillAndStroke(); - - if (outerStroke) - { - canvas.ellipse(x, y, w, h); - canvas.stroke(); - } - } - } - }; - }; - - this.shapes['endState'] = createStateShape(true); - this.shapes['startState'] = createStateShape(false); - }; - - // Defines custom edge shape - function LinkShape() - { - mxArrow.call(this); - }; - mxUtils.extend(LinkShape, mxArrow); - LinkShape.prototype.paintEdgeShape = function(c, pts) - { - var width = 10; - - // Base vector (between end points) - var p0 = pts[0]; - var pe = pts[pts.length - 1]; - - var dx = pe.x - p0.x; - var dy = pe.y - p0.y; - var dist = Math.sqrt(dx * dx + dy * dy); - var length = dist; - - // Computes the norm and the inverse norm - var nx = dx / dist; - var ny = dy / dist; - var basex = length * nx; - var basey = length * ny; - var floorx = width * ny/3; - var floory = -width * nx/3; - - // Computes points - var p0x = p0.x - floorx / 2; - var p0y = p0.y - floory / 2; - var p1x = p0x + floorx; - var p1y = p0y + floory; - var p2x = p1x + basex; - var p2y = p1y + basey; - var p3x = p2x + floorx; - var p3y = p2y + floory; - // p4 not necessary - var p5x = p3x - 3 * floorx; - var p5y = p3y - 3 * floory; - - c.begin(); - c.moveTo(p1x, p1y); - c.lineTo(p2x, p2y); - c.moveTo(p5x + floorx, p5y + floory); - c.lineTo(p0x, p0y); - c.stroke(); - }; - - // Registers the link shape - mxCellRenderer.prototype.defaultShapes['link'] = LinkShape; - - // Registers and defines the custom marker - mxMarker.addMarker('dash', function(canvas, shape, type, pe, unitX, unitY, size, source, sw, filled) - { - var nx = unitX * (size + sw + 1); - var ny = unitY * (size + sw + 1); - - return function() - { - canvas.begin(); - canvas.moveTo(pe.x - nx / 2 - ny / 2, pe.y - ny / 2 + nx / 2); - canvas.lineTo(pe.x + ny / 2 - 3 * nx / 2, pe.y - 3 * ny / 2 - nx / 2); - canvas.stroke(); - }; - }); - - // Implements custom handlers - var SPECIAL_HANDLE_INDEX = -99; - - // Handlers are only added if mxVertexHandler is defined (ie. not in embedded graph) - if (typeof(mxVertexHandler) != 'undefined') - { - function mxExtVertexHandler(state) - { - mxVertexHandler.call(this, state); - }; - - mxUtils.extend(mxExtVertexHandler, mxVertexHandler); - - mxExtVertexHandler.prototype.useGridForSpecialHandle = false; - - mxExtVertexHandler.prototype.init = function() - { - this.horizontal = mxUtils.getValue(this.state.style, mxConstants.STYLE_HORIZONTAL, true); - var graph = this.state.view.graph; - - if (this.handleImage != null) - { - var bounds = new mxRectangle(0, 0, this.handleImage.width, this.handleImage.height); - this.specialHandle = new mxImageShape(bounds, this.handleImage.src); - } - else - { - var size = 10; - var bounds = new mxRectangle(0, 0, size, size); - this.specialHandle = new mxRhombus(bounds, mxConstants.HANDLE_FILLCOLOR, mxConstants.HANDLE_STROKECOLOR); - } - - this.specialHandle.dialect = (graph.dialect != mxConstants.DIALECT_SVG) ? - mxConstants.DIALECT_VML : mxConstants.DIALECT_SVG; - this.specialHandle.init(graph.getView().getOverlayPane()); - this.specialHandle.node.style.cursor = this.getSpecialHandleCursor(); - - mxEvent.redirectMouseEvents(this.specialHandle.node, graph, this.state); - mxVertexHandler.prototype.init.apply(this, arguments); - }; - - mxExtVertexHandler.prototype.getSpecialHandleCursor = function() - { - return 'default'; - }; - - mxExtVertexHandler.prototype.redraw = function() - { - mxVertexHandler.prototype.redraw.apply(this, arguments); - - var size = this.specialHandle.bounds.width; - this.specialHandle.bounds = this.getSpecialHandleBounds(size); - this.specialHandle.redraw(); - }; - - mxExtVertexHandler.prototype.destroy = function() - { - mxVertexHandler.prototype.destroy.apply(this, arguments); - - if (this.specialHandle != null) - { - this.specialHandle.destroy(); - this.specialHandle = null; - } - }; - - mxExtVertexHandler.prototype.getHandleForEvent = function(me) - { - if (me.isSource(this.specialHandle)) - { - return SPECIAL_HANDLE_INDEX; - } - - return mxVertexHandler.prototype.getHandleForEvent.apply(this, arguments); - }; - - mxExtVertexHandler.prototype.mouseMove = function(sender, me) - { - if (!me.isConsumed() && this.index == SPECIAL_HANDLE_INDEX) - { - var point = new mxPoint(me.getGraphX(), me.getGraphY()); - this.constrainPoint(point); - var gridEnabled = this.graph.isGridEnabledEvent(me.getEvent()); - var scale = this.graph.getView().scale; - - if (gridEnabled && this.useGridForSpecialHandle) - { - point.x = this.graph.snap(point.x / scale) * scale; - point.y = this.graph.snap(point.y / scale) * scale; - } - - this.updateStyle(point); - this.moveSizerTo(this.specialHandle, point.x, point.y); - this.state.view.graph.cellRenderer.redraw(this.state, true); - me.consume(); - } - else - { - mxVertexHandler.prototype.mouseMove.apply(this, arguments); - } - }; - - mxExtVertexHandler.prototype.mouseUp = function(sender, me) - { - if (!me.isConsumed() && this.index == SPECIAL_HANDLE_INDEX) - { - this.applyStyle(); - this.reset(); - me.consume(); - } - else - { - mxVertexHandler.prototype.mouseUp.apply(this, arguments); - } - }; - - mxExtVertexHandler.prototype.getSpecialHandleBounds = function(size) - { - var rotation = this.state.shape.getShapeRotation(); - var alpha = mxUtils.toRadians(rotation); - var cos = Math.cos(alpha); - var sin = Math.sin(alpha); - - var bounds = new mxRectangle(this.state.x, this.state.y, this.state.width, this.state.height); - - if (this.state.shape.isPaintBoundsInverted()) - { - var t = (bounds.width - bounds.height) / 2; - bounds.x += t; - bounds.y -= t; - var tmp = bounds.width; - bounds.width = bounds.height; - bounds.height = tmp; - } - - var pt = this.getSpecialHandlePoint(bounds); - - if (this.state.shape.flipH) - { - pt.x = 2 * bounds.x + bounds.width - pt.x; - } - - if (this.state.shape.flipV) - { - pt.y = 2 * bounds.y + bounds.height - pt.y; - } - - pt = mxUtils.getRotatedPoint(pt, cos, sin, - new mxPoint(this.state.getCenterX(), this.state.getCenterY())); - - return new mxRectangle(pt.x - size / 2, pt.y - size / 2, size, size); - }; - - mxExtVertexHandler.prototype.getSpecialHandlePoint = function(bounds) - { - // Hook for subclassers - return null; - }; - - mxExtVertexHandler.prototype.updateStyle = function(point) - { - // Hook for subclassers - }; - - mxExtVertexHandler.prototype.constrainPoint = function(point) - { - point.x = Math.max(this.state.x, Math.min(this.state.x + this.state.width, point.x)); - point.y = Math.max(this.state.y, Math.min(this.state.y + this.state.height, point.y)); - }; - - mxExtVertexHandler.prototype.applyStyle = function() - { - // Hook for subclassers - }; - - // Folder Handler - function mxFolderHandler(state) - { - mxExtVertexHandler.call(this, state); - }; - - mxUtils.extend(mxFolderHandler, mxExtVertexHandler); - - mxFolderHandler.prototype.getSpecialHandlePoint = function(bounds) - { - var scale = this.graph.getView().scale; - var tw = Math.min(bounds.width, mxUtils.getValue(this.state.style, 'tabWidth', 60) * scale); - var th = Math.min(bounds.height, mxUtils.getValue(this.state.style, 'tabHeight', 20) * scale); - - var tp = mxUtils.getValue(this.state.style, 'tabPosition', 'right'); - var x = (tp == 'left') ? bounds.x + tw : bounds.x + bounds.width - tw; - - return new mxPoint(x, bounds.y + th); - }; - - mxFolderHandler.prototype.updateStyle = function(point) - { - var rotation = this.state.shape.getShapeRotation(); - var alpha = mxUtils.toRadians(rotation); - var cos = Math.cos(-alpha); - var sin = Math.sin(-alpha); - - var bounds = new mxRectangle(this.state.x, this.state.y, this.state.width, this.state.height); - - if (this.state.shape.isPaintBoundsInverted()) - { - var t = (bounds.width - bounds.height) / 2; - bounds.x += t; - bounds.y -= t; - var tmp = bounds.width; - bounds.width = bounds.height; - bounds.height = tmp; - } - - var pt = new mxPoint(point.x, point.y); - pt = mxUtils.getRotatedPoint(pt, cos, sin, - new mxPoint(this.state.getCenterX(), this.state.getCenterY())); - - if (this.state.shape.flipH) - { - pt.x = 2 * bounds.x + bounds.width - pt.x; - } - - if (this.state.shape.flipV) - { - pt.y = 2 * bounds.y + bounds.height - pt.y; - } - - var result = this.updateStyleUnrotated(pt, bounds); - - // Modifies point to use rotated coordinates of return value - if (result != null) - { - if (this.state.shape.flipH) - { - result.x = 2 * bounds.x + bounds.width - result.x; - } - - if (this.state.shape.flipV) - { - result.y = 2 * bounds.y + bounds.height - result.y; - } - - cos = Math.cos(alpha); - sin = Math.sin(alpha); - result = mxUtils.getRotatedPoint(result, cos, sin, - new mxPoint(this.state.getCenterX(), this.state.getCenterY())); - point.x = result.x; - point.y = result.y; - } - }; - - mxFolderHandler.prototype.updateStyleUnrotated = function(pt, bounds) - { - var tp = mxUtils.getValue(this.state.style, 'tabPosition', 'right'); - var tw = (tp == 'left') ? pt.x - bounds.x : bounds.x + bounds.width - pt.x; - var th = pt.y - bounds.y; - - var scale = this.graph.getView().scale; - this.state.style['tabWidth'] = Math.round(Math.max(1, tw) / scale); - this.state.style['tabHeight'] = Math.round(Math.max(1, th) / scale); - }; - - mxFolderHandler.prototype.applyStyle = function() - { - var model = this.graph.getModel(); - model.beginUpdate(); - try - { - this.state.view.graph.setCellStyles('tabWidth', this.state.style['tabWidth'], [this.state.cell]); - this.state.view.graph.setCellStyles('tabHeight', this.state.style['tabHeight'], [this.state.cell]); - } - finally - { - model.endUpdate(); - } - }; - - // Swimlane Handler - function mxSwimlaneHandler(state) - { - mxFolderHandler.call(this, state); - }; - - mxUtils.extend(mxSwimlaneHandler, mxFolderHandler); - - mxSwimlaneHandler.prototype.getSpecialHandlePoint = function(bounds) - { - var scale = this.graph.getView().scale; - var startSize = mxUtils.getValue(this.state.style, mxConstants.STYLE_STARTSIZE, mxConstants.DEFAULT_STARTSIZE); - - return new mxPoint(bounds.x + bounds.width / 2, bounds.y + Math.min(bounds.height, startSize * scale)); - }; - - mxSwimlaneHandler.prototype.updateStyleUnrotated = function(point, bounds) - { - point.x = bounds.x + bounds.width / 2; - startSize = point.y - bounds.y; - var scale = this.graph.getView().scale; - this.state.style['startSize'] = Math.round(Math.max(1, startSize) / scale); - - return point; - }; - - mxSwimlaneHandler.prototype.applyStyle = function() - { - this.state.view.graph.setCellStyles('startSize', this.state.style['startSize'], [this.state.cell]); - }; - - // Cube Handler - function mxCubeHandler(state) - { - mxFolderHandler.call(this, state); - }; - - mxUtils.extend(mxCubeHandler, mxFolderHandler); - - mxCubeHandler.prototype.defaultValue = 20; - - mxCubeHandler.prototype.scaleFactor = 1; - - mxCubeHandler.prototype.getSpecialHandlePoint = function(bounds) - { - var scale = this.graph.getView().scale; - var sz = Math.min(bounds.width, Math.min(bounds.height, - mxUtils.getValue(this.state.style, 'size', this.defaultValue) * scale / this.scaleFactor)); - - return new mxPoint(bounds.x + sz, bounds.y + sz); - }; - - mxCubeHandler.prototype.updateStyleUnrotated = function(pt, bounds) - { - var size = Math.max(0, Math.min(Math.min(bounds.width / this.scaleFactor, pt.x - bounds.x), - Math.min(bounds.height / this.scaleFactor, pt.y - bounds.y))); - var scale = this.graph.getView().scale; - this.state.style['size'] = Math.round(Math.max(1, size) / scale) * this.scaleFactor; - - // Stays on the diagonal - return new mxPoint(bounds.x + size, bounds.y + size); - }; - - mxCubeHandler.prototype.applyStyle = function() - { - this.state.view.graph.setCellStyles('size', this.state.style['size'], [this.state.cell]); - }; - - // Card Handler - function mxCardHandler(state) - { - mxCubeHandler.call(this, state); - }; - - mxUtils.extend(mxCardHandler, mxCubeHandler); - - mxCardHandler.prototype.defaultValue = 30; - - mxCardHandler.prototype.scaleFactor = 2; - - // Note Handler - function mxNoteHandler(state) - { - mxCubeHandler.call(this, state); - }; - - mxUtils.extend(mxNoteHandler, mxCubeHandler); - - mxNoteHandler.prototype.defaultValue = 30; - - mxNoteHandler.prototype.scaleFactor = 1; - - mxNoteHandler.prototype.getSpecialHandlePoint = function(bounds) - { - var scale = this.graph.getView().scale; - var sz = Math.min(bounds.width, Math.min(bounds.height, - mxUtils.getValue(this.state.style, 'size', this.defaultValue) * scale / this.scaleFactor)); - - return new mxPoint(bounds.x + bounds.width - sz, bounds.y + sz); - }; - - mxNoteHandler.prototype.updateStyleUnrotated = function(pt, bounds) - { - var size = Math.max(0, Math.min(Math.min(bounds.width / this.scaleFactor, pt.x - bounds.x + bounds.width), - Math.min(bounds.height / this.scaleFactor, pt.y - bounds.y))); - var scale = this.graph.getView().scale; - this.state.style['size'] = Math.round(Math.max(1, size) / scale) * this.scaleFactor; - - // Stays on the diagonal - return new mxPoint(bounds.x + bounds.width - size, bounds.y + size); - }; - - // Step Handler - function mxStepHandler(state) - { - mxCubeHandler.call(this, state); - }; - - mxUtils.extend(mxStepHandler, mxCubeHandler); - - mxStepHandler.prototype.defaultValue = 0.2; - - mxStepHandler.prototype.scaleFactor = 1; - - mxStepHandler.prototype.getSpecialHandlePoint = function(bounds) - { - var sz = mxUtils.getValue(this.state.style, 'size', this.defaultValue); - - return new mxPoint(bounds.x + bounds.width * sz, bounds.y + bounds.height / 2); - }; - - mxStepHandler.prototype.updateStyleUnrotated = function(pt, bounds) - { - var size = Math.min(1, (pt.x - bounds.x) / bounds.width); - this.state.style['size'] = size; - - return new mxPoint(bounds.x + size * bounds.width, bounds.y + bounds.height / 2); - }; - - // Tape Handler - function mxTapeHandler(state) - { - mxCubeHandler.call(this, state); - }; - - mxUtils.extend(mxTapeHandler, mxCubeHandler); - - mxTapeHandler.prototype.defaultValue = 0.4; - - mxTapeHandler.prototype.scaleFactor = 1; - - mxTapeHandler.prototype.getSpecialHandlePoint = function(bounds) - { - var sz = mxUtils.getValue(this.state.style, 'size', this.defaultValue); - - return new mxPoint(bounds.x + bounds.width / 2, bounds.y + sz * bounds.height / 2); - }; - - mxTapeHandler.prototype.updateStyleUnrotated = function(pt, bounds) - { - var size = Math.max(0, Math.min(1, ((pt.y - bounds.y) / bounds.height) * 2)); - this.state.style['size'] = size; - - return new mxPoint(bounds.x + bounds.width / 2, bounds.y + size * bounds.height / 2); - }; - - var handlers = {'swimlane': mxSwimlaneHandler, 'folder': mxFolderHandler, 'cube': mxCubeHandler, - 'card': mxCardHandler, 'note': mxNoteHandler, 'step': mxStepHandler, 'tape': mxTapeHandler}; - - var mxGraphCreateHandler = mxGraph.prototype.createHandler; - mxGraph.prototype.createHandler = function(state) - { - if (state != null) - { - var ctor = handlers[state.style['shape']]; - - if (ctor != null) - { - return new ctor(state); - } - } - - return mxGraphCreateHandler.apply(this, arguments); - }; - } - - // Constraints - mxGraph.prototype.getAllConnectionConstraints = function(terminal, source) - { - if (terminal != null && terminal.shape != null) - { - if (terminal.shape.stencil != null) - { - if (terminal.shape.stencil != null) - { - return terminal.shape.stencil.constraints; - } - } - else if (terminal.shape.constraints != null) - { - return terminal.shape.constraints; - } - } - - return null; - }; - - mxRectangleShape.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.25, 0), true), - new mxConnectionConstraint(new mxPoint(0.5, 0), true), - new mxConnectionConstraint(new mxPoint(0.75, 0), true), - new mxConnectionConstraint(new mxPoint(0, 0.25), true), - new mxConnectionConstraint(new mxPoint(0, 0.5), true), - new mxConnectionConstraint(new mxPoint(0, 0.75), true), - new mxConnectionConstraint(new mxPoint(1, 0.25), true), - new mxConnectionConstraint(new mxPoint(1, 0.5), true), - new mxConnectionConstraint(new mxPoint(1, 0.75), true), - new mxConnectionConstraint(new mxPoint(0.25, 1), true), - new mxConnectionConstraint(new mxPoint(0.5, 1), true), - new mxConnectionConstraint(new mxPoint(0.75, 1), true)]; - mxLabel.prototype.constraints = mxRectangleShape.prototype.constraints; - mxImageShape.prototype.constraints = mxRectangleShape.prototype.constraints; - mxSwimlane.prototype.constraints = mxRectangleShape.prototype.constraints; - PlusShape.prototype.constraints = mxRectangleShape.prototype.constraints; - NoteShape.prototype.constraints = mxRectangleShape.prototype.constraints; - CardShape.prototype.constraints = mxRectangleShape.prototype.constraints; - CubeShape.prototype.constraints = mxRectangleShape.prototype.constraints; - FolderShape.prototype.constraints = mxRectangleShape.prototype.constraints; - mxCylinder.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.15, 0.05), false), - new mxConnectionConstraint(new mxPoint(0.5, 0), true), - new mxConnectionConstraint(new mxPoint(0.85, 0.05), false), - new mxConnectionConstraint(new mxPoint(0, 0.3), true), - new mxConnectionConstraint(new mxPoint(0, 0.5), true), - new mxConnectionConstraint(new mxPoint(0, 0.7), true), - new mxConnectionConstraint(new mxPoint(1, 0.3), true), - new mxConnectionConstraint(new mxPoint(1, 0.5), true), - new mxConnectionConstraint(new mxPoint(1, 0.7), true), - new mxConnectionConstraint(new mxPoint(0.15, 0.95), false), - new mxConnectionConstraint(new mxPoint(0.5, 1), true), - new mxConnectionConstraint(new mxPoint(0.85, 0.95), false)]; - UmlActorShape.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.25, 0.1), false), - new mxConnectionConstraint(new mxPoint(0.5, 0), false), - new mxConnectionConstraint(new mxPoint(0.75, 0.1), false), - new mxConnectionConstraint(new mxPoint(0, 1/3), false), - new mxConnectionConstraint(new mxPoint(0, 1), false), - new mxConnectionConstraint(new mxPoint(1, 1/3), false), - new mxConnectionConstraint(new mxPoint(1, 1), false), - new mxConnectionConstraint(new mxPoint(0.5, 0.5), false)]; - ComponentShape.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.25, 0), true), - new mxConnectionConstraint(new mxPoint(0.5, 0), true), - new mxConnectionConstraint(new mxPoint(0.75, 0), true), - new mxConnectionConstraint(new mxPoint(0, 0.3), true), - new mxConnectionConstraint(new mxPoint(0, 0.7), true), - new mxConnectionConstraint(new mxPoint(1, 0.25), true), - new mxConnectionConstraint(new mxPoint(1, 0.5), true), - new mxConnectionConstraint(new mxPoint(1, 0.75), true), - new mxConnectionConstraint(new mxPoint(0.25, 1), true), - new mxConnectionConstraint(new mxPoint(0.5, 1), true), - new mxConnectionConstraint(new mxPoint(0.75, 1), true)]; - mxActor.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.5, 0), true), - new mxConnectionConstraint(new mxPoint(0.25, 0.2), false), - new mxConnectionConstraint(new mxPoint(0.1, 0.5), false), - new mxConnectionConstraint(new mxPoint(0, 0.75), true), - new mxConnectionConstraint(new mxPoint(0.75, 0.25), false), - new mxConnectionConstraint(new mxPoint(0.9, 0.5), false), - new mxConnectionConstraint(new mxPoint(1, 0.75), true), - new mxConnectionConstraint(new mxPoint(0.25, 1), true), - new mxConnectionConstraint(new mxPoint(0.5, 1), true), - new mxConnectionConstraint(new mxPoint(0.75, 1), true)]; - TapeShape.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0, 0.35), false), - new mxConnectionConstraint(new mxPoint(0, 0.5), false), - new mxConnectionConstraint(new mxPoint(0, 0.65), false), - new mxConnectionConstraint(new mxPoint(1, 0.35), false), - new mxConnectionConstraint(new mxPoint(1, 0.5), false), - new mxConnectionConstraint(new mxPoint(1, 0.65), false), - new mxConnectionConstraint(new mxPoint(0.25, 1), false), - new mxConnectionConstraint(new mxPoint(0.75, 0), false)]; - // TODO: Relative ports - StepShape.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.25, 0), true), - new mxConnectionConstraint(new mxPoint(0.5, 0), true), - new mxConnectionConstraint(new mxPoint(0.75, 0), true), - new mxConnectionConstraint(new mxPoint(0.25, 1), true), - new mxConnectionConstraint(new mxPoint(0.5, 1), true), - new mxConnectionConstraint(new mxPoint(0.75, 1), true), - new mxConnectionConstraint(new mxPoint(0.1, 0.25), false), - new mxConnectionConstraint(new mxPoint(0.2, 0.5), false), - new mxConnectionConstraint(new mxPoint(0.1, 0.75), false), - new mxConnectionConstraint(new mxPoint(0.9, 0.25), false), - new mxConnectionConstraint(new mxPoint(1, 0.5), false), - new mxConnectionConstraint(new mxPoint(0.9, 0.75), false)]; - mxLine.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0, 0.5), false), - new mxConnectionConstraint(new mxPoint(0.25, 0.5), false), - new mxConnectionConstraint(new mxPoint(0.75, 0.5), false), - new mxConnectionConstraint(new mxPoint(1, 0.5), false)]; - LollipopShape.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.5, 0), false), - new mxConnectionConstraint(new mxPoint(0.5, 1), false)]; - mxEllipse.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0, 0), true), new mxConnectionConstraint(new mxPoint(1, 0), true), - new mxConnectionConstraint(new mxPoint(0, 1), true), new mxConnectionConstraint(new mxPoint(1, 1), true), - new mxConnectionConstraint(new mxPoint(0.5, 0), true), new mxConnectionConstraint(new mxPoint(0.5, 1), true), - new mxConnectionConstraint(new mxPoint(0, 0.5), true), new mxConnectionConstraint(new mxPoint(1, 0.5))]; - mxDoubleEllipse.prototype.constraints = mxEllipse.prototype.constraints; - mxRhombus.prototype.constraints = mxEllipse.prototype.constraints; - mxTriangle.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0, 0.25), true), - new mxConnectionConstraint(new mxPoint(0, 0.5), true), - new mxConnectionConstraint(new mxPoint(0, 0.75), true), - new mxConnectionConstraint(new mxPoint(0.5, 0), true), - new mxConnectionConstraint(new mxPoint(0.5, 1), true), - new mxConnectionConstraint(new mxPoint(1, 0.5), true)]; - mxHexagon.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.375, 0), true), - new mxConnectionConstraint(new mxPoint(0.5, 0), true), - new mxConnectionConstraint(new mxPoint(0.625, 0), true), - new mxConnectionConstraint(new mxPoint(0.125, 0.25), false), - new mxConnectionConstraint(new mxPoint(0, 0.5), true), - new mxConnectionConstraint(new mxPoint(0.125, 0.75), false), - new mxConnectionConstraint(new mxPoint(0.875, 0.25), false), - new mxConnectionConstraint(new mxPoint(0, 0.5), true), - new mxConnectionConstraint(new mxPoint(1, 0.5), true), - new mxConnectionConstraint(new mxPoint(0.875, 0.75), false), - new mxConnectionConstraint(new mxPoint(0.375, 1), true), - new mxConnectionConstraint(new mxPoint(0.5, 1), true), - new mxConnectionConstraint(new mxPoint(0.625, 1), true)]; - mxCloud.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.25, 0.25), false), - new mxConnectionConstraint(new mxPoint(0.4, 0.1), false), - new mxConnectionConstraint(new mxPoint(0.16, 0.55), false), - new mxConnectionConstraint(new mxPoint(0.07, 0.4), false), - new mxConnectionConstraint(new mxPoint(0.31, 0.8), false), - new mxConnectionConstraint(new mxPoint(0.13, 0.77), false), - new mxConnectionConstraint(new mxPoint(0.8, 0.8), false), - new mxConnectionConstraint(new mxPoint(0.55, 0.95), false), - new mxConnectionConstraint(new mxPoint(0.875, 0.5), false), - new mxConnectionConstraint(new mxPoint(0.96, 0.7), false), - new mxConnectionConstraint(new mxPoint(0.625, 0.2), false), - new mxConnectionConstraint(new mxPoint(0.88, 0.25), false)]; - mxArrow.prototype.constraints = null; -})(); +var _0x7bc4=["\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x63\x6F\x6E\x73\x74\x72\x75\x63\x74\x6F\x72","\x73\x69\x7A\x65","\x72\x65\x64\x72\x61\x77\x50\x61\x74\x68","\x73\x74\x79\x6C\x65","\x67\x65\x74\x56\x61\x6C\x75\x65","\x6D\x69\x6E","\x6D\x6F\x76\x65\x54\x6F","\x6C\x69\x6E\x65\x54\x6F","\x65\x6E\x64","\x63\x6C\x6F\x73\x65","\x63\x75\x62\x65","\x64\x65\x66\x61\x75\x6C\x74\x53\x68\x61\x70\x65\x73","\x6E\x6F\x74\x65","\x74\x61\x62\x57\x69\x64\x74\x68","\x74\x61\x62\x48\x65\x69\x67\x68\x74","\x74\x61\x62\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x72\x69\x67\x68\x74","\x6C\x65\x66\x74","\x66\x6F\x6C\x64\x65\x72","\x63\x61\x72\x64","\x71\x75\x61\x64\x54\x6F","\x74\x61\x70\x65","\x73\x74\x65\x70","\x63\x61\x6C\x6C","\x65\x78\x74\x65\x6E\x64","\x69\x73\x48\x74\x6D\x6C\x41\x6C\x6C\x6F\x77\x65\x64","\x70\x61\x69\x6E\x74\x46\x6F\x72\x65\x67\x72\x6F\x75\x6E\x64","\x62\x65\x67\x69\x6E","\x73\x74\x72\x6F\x6B\x65","\x61\x70\x70\x6C\x79","\x70\x6C\x75\x73","\x64\x6F\x75\x62\x6C\x65","\x73\x74\x72\x6F\x6B\x65\x77\x69\x64\x74\x68","\x6D\x61\x78","\x70\x61\x69\x6E\x74\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64","\x73\x65\x74\x44\x61\x73\x68\x65\x64","\x73\x79\x6D\x62\x6F\x6C","\x41\x6C\x69\x67\x6E","\x56\x65\x72\x74\x69\x63\x61\x6C\x41\x6C\x69\x67\x6E","\x57\x69\x64\x74\x68","\x48\x65\x69\x67\x68\x74","\x53\x70\x61\x63\x69\x6E\x67","\x41\x72\x63\x53\x70\x61\x63\x69\x6E\x67","\x67\x65\x74\x41\x72\x63\x53\x69\x7A\x65","\x41\x4C\x49\x47\x4E\x5F\x43\x45\x4E\x54\x45\x52","\x41\x4C\x49\x47\x4E\x5F\x52\x49\x47\x48\x54","\x41\x4C\x49\x47\x4E\x5F\x4D\x49\x44\x44\x4C\x45","\x41\x4C\x49\x47\x4E\x5F\x42\x4F\x54\x54\x4F\x4D","\x73\x61\x76\x65","\x70\x61\x69\x6E\x74\x56\x65\x72\x74\x65\x78\x53\x68\x61\x70\x65","\x72\x65\x73\x74\x6F\x72\x65","\x65\x78\x74","\x6D\x65\x73\x73\x61\x67\x65","\x61\x64\x64\x50\x69\x70\x65","\x63\x75\x72\x76\x65\x54\x6F","\x75\x6D\x6C\x41\x63\x74\x6F\x72","\x6C\x6F\x6C\x6C\x69\x70\x6F\x70","\x6A\x65\x74\x74\x79\x57\x69\x64\x74\x68","\x6A\x65\x74\x74\x79\x48\x65\x69\x67\x68\x74","\x63\x6F\x6D\x70\x6F\x6E\x65\x6E\x74","\x6F\x75\x74\x65\x72\x53\x74\x72\x6F\x6B\x65","\x65\x6C\x6C\x69\x70\x73\x65","\x66\x69\x6C\x6C\x41\x6E\x64\x53\x74\x72\x6F\x6B\x65","\x73\x65\x74\x53\x68\x61\x64\x6F\x77","\x65\x6E\x64\x53\x74\x61\x74\x65","\x73\x74\x61\x72\x74\x53\x74\x61\x74\x65","\x69\x6E\x69\x74\x53\x68\x61\x70\x65\x73","\x78","\x79","\x77\x69\x64\x74\x68","\x68\x65\x69\x67\x68\x74","\x73\x68\x61\x70\x65\x73","\x70\x61\x69\x6E\x74\x45\x64\x67\x65\x53\x68\x61\x70\x65","\x6C\x65\x6E\x67\x74\x68","\x73\x71\x72\x74","\x6C\x69\x6E\x6B","\x64\x61\x73\x68","\x61\x64\x64\x4D\x61\x72\x6B\x65\x72","\x75\x6E\x64\x65\x66\x69\x6E\x65\x64","\x75\x73\x65\x47\x72\x69\x64\x46\x6F\x72\x53\x70\x65\x63\x69\x61\x6C\x48\x61\x6E\x64\x6C\x65","\x69\x6E\x69\x74","\x68\x6F\x72\x69\x7A\x6F\x6E\x74\x61\x6C","\x73\x74\x61\x74\x65","\x67\x72\x61\x70\x68","\x76\x69\x65\x77","\x68\x61\x6E\x64\x6C\x65\x49\x6D\x61\x67\x65","\x73\x70\x65\x63\x69\x61\x6C\x48\x61\x6E\x64\x6C\x65","\x73\x72\x63","\x64\x69\x61\x6C\x65\x63\x74","\x44\x49\x41\x4C\x45\x43\x54\x5F\x53\x56\x47","\x44\x49\x41\x4C\x45\x43\x54\x5F\x56\x4D\x4C","\x67\x65\x74\x4F\x76\x65\x72\x6C\x61\x79\x50\x61\x6E\x65","\x67\x65\x74\x56\x69\x65\x77","\x63\x75\x72\x73\x6F\x72","\x6E\x6F\x64\x65","\x67\x65\x74\x53\x70\x65\x63\x69\x61\x6C\x48\x61\x6E\x64\x6C\x65\x43\x75\x72\x73\x6F\x72","\x72\x65\x64\x69\x72\x65\x63\x74\x4D\x6F\x75\x73\x65\x45\x76\x65\x6E\x74\x73","\x64\x65\x66\x61\x75\x6C\x74","\x72\x65\x64\x72\x61\x77","\x62\x6F\x75\x6E\x64\x73","\x67\x65\x74\x53\x70\x65\x63\x69\x61\x6C\x48\x61\x6E\x64\x6C\x65\x42\x6F\x75\x6E\x64\x73","\x64\x65\x73\x74\x72\x6F\x79","\x67\x65\x74\x48\x61\x6E\x64\x6C\x65\x46\x6F\x72\x45\x76\x65\x6E\x74","\x69\x73\x53\x6F\x75\x72\x63\x65","\x6D\x6F\x75\x73\x65\x4D\x6F\x76\x65","\x69\x73\x43\x6F\x6E\x73\x75\x6D\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74\x47\x72\x61\x70\x68\x58","\x67\x65\x74\x47\x72\x61\x70\x68\x59","\x63\x6F\x6E\x73\x74\x72\x61\x69\x6E\x50\x6F\x69\x6E\x74","\x67\x65\x74\x45\x76\x65\x6E\x74","\x69\x73\x47\x72\x69\x64\x45\x6E\x61\x62\x6C\x65\x64\x45\x76\x65\x6E\x74","\x73\x63\x61\x6C\x65","\x73\x6E\x61\x70","\x75\x70\x64\x61\x74\x65\x53\x74\x79\x6C\x65","\x6D\x6F\x76\x65\x53\x69\x7A\x65\x72\x54\x6F","\x63\x65\x6C\x6C\x52\x65\x6E\x64\x65\x72\x65\x72","\x63\x6F\x6E\x73\x75\x6D\x65","\x6D\x6F\x75\x73\x65\x55\x70","\x61\x70\x70\x6C\x79\x53\x74\x79\x6C\x65","\x72\x65\x73\x65\x74","\x67\x65\x74\x53\x68\x61\x70\x65\x52\x6F\x74\x61\x74\x69\x6F\x6E","\x73\x68\x61\x70\x65","\x74\x6F\x52\x61\x64\x69\x61\x6E\x73","\x63\x6F\x73","\x73\x69\x6E","\x69\x73\x50\x61\x69\x6E\x74\x42\x6F\x75\x6E\x64\x73\x49\x6E\x76\x65\x72\x74\x65\x64","\x67\x65\x74\x53\x70\x65\x63\x69\x61\x6C\x48\x61\x6E\x64\x6C\x65\x50\x6F\x69\x6E\x74","\x66\x6C\x69\x70\x48","\x66\x6C\x69\x70\x56","\x67\x65\x74\x43\x65\x6E\x74\x65\x72\x58","\x67\x65\x74\x43\x65\x6E\x74\x65\x72\x59","\x67\x65\x74\x52\x6F\x74\x61\x74\x65\x64\x50\x6F\x69\x6E\x74","\x75\x70\x64\x61\x74\x65\x53\x74\x79\x6C\x65\x55\x6E\x72\x6F\x74\x61\x74\x65\x64","\x72\x6F\x75\x6E\x64","\x67\x65\x74\x4D\x6F\x64\x65\x6C","\x62\x65\x67\x69\x6E\x55\x70\x64\x61\x74\x65","\x63\x65\x6C\x6C","\x73\x65\x74\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65\x73","\x65\x6E\x64\x55\x70\x64\x61\x74\x65","\x73\x74\x61\x72\x74\x53\x69\x7A\x65","\x64\x65\x66\x61\x75\x6C\x74\x56\x61\x6C\x75\x65","\x73\x63\x61\x6C\x65\x46\x61\x63\x74\x6F\x72","\x63\x72\x65\x61\x74\x65\x48\x61\x6E\x64\x6C\x65\x72","\x67\x65\x74\x41\x6C\x6C\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74\x73","\x73\x74\x65\x6E\x63\x69\x6C","\x63\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74\x73"];(function(){function _0x9051x1(){}_0x9051x1[_0x7bc4[0]]= new mxCylinder();_0x9051x1[_0x7bc4[0]][_0x7bc4[1]]= _0x9051x1;_0x9051x1[_0x7bc4[0]][_0x7bc4[2]]= 20;_0x9051x1[_0x7bc4[0]][_0x7bc4[3]]= function(_0x9051x2,_0x9051x3,_0x9051x4,_0x9051x5,_0x9051x6,_0x9051x7){var _0x9051x8=Math[_0x7bc4[6]](_0x9051x5,Math[_0x7bc4[6]](_0x9051x6,mxUtils[_0x7bc4[5]](this[_0x7bc4[4]],_0x7bc4[2],this[_0x7bc4[2]])));if(_0x9051x7){_0x9051x2[_0x7bc4[7]](_0x9051x8,_0x9051x6);_0x9051x2[_0x7bc4[8]](_0x9051x8,_0x9051x8);_0x9051x2[_0x7bc4[8]](0,0);_0x9051x2[_0x7bc4[7]](_0x9051x8,_0x9051x8);_0x9051x2[_0x7bc4[8]](_0x9051x5,_0x9051x8);_0x9051x2[_0x7bc4[9]]()}else {_0x9051x2[_0x7bc4[7]](0,0);_0x9051x2[_0x7bc4[8]](_0x9051x5- _0x9051x8,0);_0x9051x2[_0x7bc4[8]](_0x9051x5,_0x9051x8);_0x9051x2[_0x7bc4[8]](_0x9051x5,_0x9051x6);_0x9051x2[_0x7bc4[8]](_0x9051x8,_0x9051x6);_0x9051x2[_0x7bc4[8]](0,_0x9051x6- _0x9051x8);_0x9051x2[_0x7bc4[8]](0,0);_0x9051x2[_0x7bc4[10]]();_0x9051x2[_0x7bc4[9]]()}};mxCellRenderer[_0x7bc4[0]][_0x7bc4[12]][_0x7bc4[11]]= _0x9051x1;function _0x9051x9(){}_0x9051x9[_0x7bc4[0]]= new mxCylinder();_0x9051x9[_0x7bc4[0]][_0x7bc4[1]]= _0x9051x9;_0x9051x9[_0x7bc4[0]][_0x7bc4[2]]= 30;_0x9051x9[_0x7bc4[0]][_0x7bc4[3]]= function(_0x9051x2,_0x9051x3,_0x9051x4,_0x9051x5,_0x9051x6,_0x9051x7){var _0x9051x8=Math[_0x7bc4[6]](_0x9051x5,Math[_0x7bc4[6]](_0x9051x6,mxUtils[_0x7bc4[5]](this[_0x7bc4[4]],_0x7bc4[2],this[_0x7bc4[2]])));if(_0x9051x7){_0x9051x2[_0x7bc4[7]](_0x9051x5- _0x9051x8,0);_0x9051x2[_0x7bc4[8]](_0x9051x5- _0x9051x8,_0x9051x8);_0x9051x2[_0x7bc4[8]](_0x9051x5,_0x9051x8);_0x9051x2[_0x7bc4[9]]()}else {_0x9051x2[_0x7bc4[7]](0,0);_0x9051x2[_0x7bc4[8]](_0x9051x5- _0x9051x8,0);_0x9051x2[_0x7bc4[8]](_0x9051x5,_0x9051x8);_0x9051x2[_0x7bc4[8]](_0x9051x5,_0x9051x6);_0x9051x2[_0x7bc4[8]](0,_0x9051x6);_0x9051x2[_0x7bc4[8]](0,0);_0x9051x2[_0x7bc4[10]]();_0x9051x2[_0x7bc4[9]]()}};mxCellRenderer[_0x7bc4[0]][_0x7bc4[12]][_0x7bc4[13]]= _0x9051x9;function _0x9051xa(){}_0x9051xa[_0x7bc4[0]]= new mxCylinder();_0x9051xa[_0x7bc4[0]][_0x7bc4[1]]= _0x9051xa;_0x9051xa[_0x7bc4[0]][_0x7bc4[14]]= 60;_0x9051xa[_0x7bc4[0]][_0x7bc4[15]]= 20;_0x9051xa[_0x7bc4[0]][_0x7bc4[16]]= _0x7bc4[17];_0x9051xa[_0x7bc4[0]][_0x7bc4[3]]= function(_0x9051x2,_0x9051x3,_0x9051x4,_0x9051x5,_0x9051x6,_0x9051x7){var _0x9051xb=mxUtils[_0x7bc4[5]](this[_0x7bc4[4]],_0x7bc4[14],this[_0x7bc4[14]]);var _0x9051xc=mxUtils[_0x7bc4[5]](this[_0x7bc4[4]],_0x7bc4[15],this[_0x7bc4[15]]);var _0x9051xd=mxUtils[_0x7bc4[5]](this[_0x7bc4[4]],_0x7bc4[16],this[_0x7bc4[16]]);var _0x9051xe=Math[_0x7bc4[6]](_0x9051x5,_0x9051xb);var _0x9051xf=Math[_0x7bc4[6]](_0x9051x6,_0x9051xc);if(_0x9051x7){if(_0x9051xd== _0x7bc4[18]){_0x9051x2[_0x7bc4[7]](0,_0x9051xf);_0x9051x2[_0x7bc4[8]](_0x9051xe,_0x9051xf)}else {_0x9051x2[_0x7bc4[7]](_0x9051x5- _0x9051xe,_0x9051xf);_0x9051x2[_0x7bc4[8]](_0x9051x5,_0x9051xf)};_0x9051x2[_0x7bc4[9]]()}else {if(_0x9051xd== _0x7bc4[18]){_0x9051x2[_0x7bc4[7]](0,0);_0x9051x2[_0x7bc4[8]](_0x9051xe,0);_0x9051x2[_0x7bc4[8]](_0x9051xe,_0x9051xf);_0x9051x2[_0x7bc4[8]](_0x9051x5,_0x9051xf)}else {_0x9051x2[_0x7bc4[7]](0,_0x9051xf);_0x9051x2[_0x7bc4[8]](_0x9051x5- _0x9051xe,_0x9051xf);_0x9051x2[_0x7bc4[8]](_0x9051x5- _0x9051xe,0);_0x9051x2[_0x7bc4[8]](_0x9051x5,0)};_0x9051x2[_0x7bc4[8]](_0x9051x5,_0x9051x6);_0x9051x2[_0x7bc4[8]](0,_0x9051x6);_0x9051x2[_0x7bc4[8]](0,_0x9051xf);_0x9051x2[_0x7bc4[10]]();_0x9051x2[_0x7bc4[9]]()}};mxCellRenderer[_0x7bc4[0]][_0x7bc4[12]][_0x7bc4[19]]= _0x9051xa;function _0x9051x10(){}_0x9051x10[_0x7bc4[0]]= new mxCylinder();_0x9051x10[_0x7bc4[0]][_0x7bc4[1]]= _0x9051x10;_0x9051x10[_0x7bc4[0]][_0x7bc4[2]]= 30;_0x9051x10[_0x7bc4[0]][_0x7bc4[3]]= function(_0x9051x2,_0x9051x3,_0x9051x4,_0x9051x5,_0x9051x6,_0x9051x7){var _0x9051x8=Math[_0x7bc4[6]](_0x9051x5,Math[_0x7bc4[6]](_0x9051x6,mxUtils[_0x7bc4[5]](this[_0x7bc4[4]],_0x7bc4[2],this[_0x7bc4[2]])));if(!_0x9051x7){_0x9051x2[_0x7bc4[7]](_0x9051x8,0);_0x9051x2[_0x7bc4[8]](_0x9051x5,0);_0x9051x2[_0x7bc4[8]](_0x9051x5,_0x9051x6);_0x9051x2[_0x7bc4[8]](0,_0x9051x6);_0x9051x2[_0x7bc4[8]](0,_0x9051x8);_0x9051x2[_0x7bc4[8]](_0x9051x8,0);_0x9051x2[_0x7bc4[10]]();_0x9051x2[_0x7bc4[9]]()}};mxCellRenderer[_0x7bc4[0]][_0x7bc4[12]][_0x7bc4[20]]= _0x9051x10;function _0x9051x11(){}_0x9051x11[_0x7bc4[0]]= new mxCylinder();_0x9051x11[_0x7bc4[0]][_0x7bc4[1]]= _0x9051x11;_0x9051x11[_0x7bc4[0]][_0x7bc4[2]]= 0.4;_0x9051x11[_0x7bc4[0]][_0x7bc4[3]]= function(_0x9051x2,_0x9051x3,_0x9051x4,_0x9051x5,_0x9051x6,_0x9051x7){var _0x9051x8=mxUtils[_0x7bc4[5]](this[_0x7bc4[4]],_0x7bc4[2],this[_0x7bc4[2]]);var _0x9051xf=_0x9051x6* _0x9051x8;var _0x9051x12=1.4;if(!_0x9051x7){_0x9051x2[_0x7bc4[7]](0,_0x9051xf/ 2);_0x9051x2[_0x7bc4[21]](_0x9051x5/ 4,_0x9051xf* _0x9051x12,_0x9051x5/ 2,_0x9051xf/ 2);_0x9051x2[_0x7bc4[21]](_0x9051x5* 3/ 4,_0x9051xf* (1- _0x9051x12),_0x9051x5,_0x9051xf/ 2);_0x9051x2[_0x7bc4[8]](_0x9051x5,_0x9051x6- _0x9051xf/ 2);_0x9051x2[_0x7bc4[21]](_0x9051x5* 3/ 4,_0x9051x6- _0x9051xf* _0x9051x12,_0x9051x5/ 2,_0x9051x6- _0x9051xf/ 2);_0x9051x2[_0x7bc4[21]](_0x9051x5/ 4,_0x9051x6- _0x9051xf* (1- _0x9051x12),0,_0x9051x6- _0x9051xf/ 2);_0x9051x2[_0x7bc4[8]](0,_0x9051xf/ 2);_0x9051x2[_0x7bc4[10]]();_0x9051x2[_0x7bc4[9]]()}};mxCellRenderer[_0x7bc4[0]][_0x7bc4[12]][_0x7bc4[22]]= _0x9051x11;function _0x9051x13(){}_0x9051x13[_0x7bc4[0]]= new mxCylinder();_0x9051x13[_0x7bc4[0]][_0x7bc4[1]]= _0x9051x13;_0x9051x13[_0x7bc4[0]][_0x7bc4[2]]= 0.2;_0x9051x13[_0x7bc4[0]][_0x7bc4[3]]= function(_0x9051x2,_0x9051x3,_0x9051x4,_0x9051x5,_0x9051x6,_0x9051x7){var _0x9051x8=_0x9051x5* mxUtils[_0x7bc4[5]](this[_0x7bc4[4]],_0x7bc4[2],this[_0x7bc4[2]]);if(!_0x9051x7){_0x9051x2[_0x7bc4[7]](0,0);_0x9051x2[_0x7bc4[8]](_0x9051x5- _0x9051x8,0);_0x9051x2[_0x7bc4[8]](_0x9051x5,_0x9051x6/ 2);_0x9051x2[_0x7bc4[8]](_0x9051x5- _0x9051x8,_0x9051x6);_0x9051x2[_0x7bc4[8]](0,_0x9051x6);_0x9051x2[_0x7bc4[8]](_0x9051x8,_0x9051x6/ 2);_0x9051x2[_0x7bc4[10]]();_0x9051x2[_0x7bc4[9]]()}};mxCellRenderer[_0x7bc4[0]][_0x7bc4[12]][_0x7bc4[23]]= _0x9051x13;function _0x9051x14(){mxRectangleShape[_0x7bc4[24]](this)}mxUtils[_0x7bc4[25]](_0x9051x14,mxRectangleShape);_0x9051x14[_0x7bc4[0]][_0x7bc4[26]]= function(){return false};_0x9051x14[_0x7bc4[0]][_0x7bc4[27]]= function(_0x9051x15,_0x9051x3,_0x9051x4,_0x9051x5,_0x9051x6){var _0x9051x16=Math[_0x7bc4[6]](_0x9051x5/ 5,_0x9051x6/ 5)+ 1;_0x9051x15[_0x7bc4[28]]();_0x9051x15[_0x7bc4[7]](_0x9051x3+ _0x9051x5/ 2,_0x9051x4+ _0x9051x16);_0x9051x15[_0x7bc4[8]](_0x9051x3+ _0x9051x5/ 2,_0x9051x4+ _0x9051x6- _0x9051x16);_0x9051x15[_0x7bc4[7]](_0x9051x3+ _0x9051x16,_0x9051x4+ _0x9051x6/ 2);_0x9051x15[_0x7bc4[8]](_0x9051x3+ _0x9051x5- _0x9051x16,_0x9051x4+ _0x9051x6/ 2);_0x9051x15[_0x7bc4[9]]();_0x9051x15[_0x7bc4[29]]();mxRectangleShape[_0x7bc4[0]][_0x7bc4[27]][_0x7bc4[30]](this,arguments)};mxCellRenderer[_0x7bc4[0]][_0x7bc4[12]][_0x7bc4[31]]= _0x9051x14;function _0x9051x17(){mxRectangleShape[_0x7bc4[24]](this)}mxUtils[_0x7bc4[25]](_0x9051x17,mxRectangleShape);_0x9051x17[_0x7bc4[0]][_0x7bc4[26]]= function(){return false};_0x9051x17[_0x7bc4[0]][_0x7bc4[27]]= function(_0x9051x15,_0x9051x3,_0x9051x4,_0x9051x5,_0x9051x6){if(this[_0x7bc4[4]]!= null){if(this[_0x7bc4[4]][_0x7bc4[32]]== 1){var _0x9051x18=Math[_0x7bc4[34]](2,this[_0x7bc4[33]]+ 1);mxRectangleShape[_0x7bc4[0]][_0x7bc4[35]][_0x7bc4[24]](this,_0x9051x15,_0x9051x3+ _0x9051x18,_0x9051x4+ _0x9051x18,_0x9051x5- 2* _0x9051x18,_0x9051x6- 2* _0x9051x18);mxRectangleShape[_0x7bc4[0]][_0x7bc4[27]][_0x7bc4[30]](this,arguments);_0x9051x3+= _0x9051x18;_0x9051x4+= _0x9051x18;_0x9051x5-= 2* _0x9051x18;_0x9051x6-= 2* _0x9051x18};_0x9051x15[_0x7bc4[36]](false);var _0x9051x19=0;var _0x9051x1a=null;do{_0x9051x1a= mxCellRenderer[_0x7bc4[0]][_0x7bc4[12]][this[_0x7bc4[4]][_0x7bc4[37]+ _0x9051x19]];if(_0x9051x1a!= null){var _0x9051x1b=this[_0x7bc4[4]][_0x7bc4[37]+ _0x9051x19+ _0x7bc4[38]];var _0x9051x1c=this[_0x7bc4[4]][_0x7bc4[37]+ _0x9051x19+ _0x7bc4[39]];var _0x9051x1d=this[_0x7bc4[4]][_0x7bc4[37]+ _0x9051x19+ _0x7bc4[40]];var _0x9051x1e=this[_0x7bc4[4]][_0x7bc4[37]+ _0x9051x19+ _0x7bc4[41]];var _0x9051x1f=this[_0x7bc4[4]][_0x7bc4[37]+ _0x9051x19+ _0x7bc4[42]]|| 0;var _0x9051x20=this[_0x7bc4[4]][_0x7bc4[37]+ _0x9051x19+ _0x7bc4[43]];if(_0x9051x20!= null){_0x9051x1f+= this[_0x7bc4[44]](_0x9051x5+ this[_0x7bc4[33]],_0x9051x6+ this[_0x7bc4[33]])* _0x9051x20};var _0x9051x21=_0x9051x3;var _0x9051x22=_0x9051x4;if(_0x9051x1b== mxConstants[_0x7bc4[45]]){_0x9051x21+= (_0x9051x5- _0x9051x1d)/ 2}else {if(_0x9051x1b== mxConstants[_0x7bc4[46]]){_0x9051x21+= _0x9051x5- _0x9051x1d- _0x9051x1f}else {_0x9051x21+= _0x9051x1f}};if(_0x9051x1c== mxConstants[_0x7bc4[47]]){_0x9051x22+= (_0x9051x6- _0x9051x1e)/ 2}else {if(_0x9051x1c== mxConstants[_0x7bc4[48]]){_0x9051x22+= _0x9051x6- _0x9051x1e- _0x9051x1f}else {_0x9051x22+= _0x9051x1f}};_0x9051x15[_0x7bc4[49]]();var _0x9051x23= new _0x9051x1a();_0x9051x23[_0x7bc4[4]]= this[_0x7bc4[4]];_0x9051x1a[_0x7bc4[0]][_0x7bc4[50]][_0x7bc4[24]](_0x9051x23,_0x9051x15,_0x9051x21,_0x9051x22,_0x9051x1d,_0x9051x1e);_0x9051x15[_0x7bc4[51]]()};_0x9051x19++}while(_0x9051x1a!= null);}};mxCellRenderer[_0x7bc4[0]][_0x7bc4[12]][_0x7bc4[52]]= _0x9051x17;function _0x9051x24(){}_0x9051x24[_0x7bc4[0]]= new mxCylinder();_0x9051x24[_0x7bc4[0]][_0x7bc4[1]]= _0x9051x24;_0x9051x24[_0x7bc4[0]][_0x7bc4[3]]= function(_0x9051x2,_0x9051x3,_0x9051x4,_0x9051x5,_0x9051x6,_0x9051x7){if(_0x9051x7){_0x9051x2[_0x7bc4[7]](0,0);_0x9051x2[_0x7bc4[8]](_0x9051x5/ 2,_0x9051x6/ 2);_0x9051x2[_0x7bc4[8]](_0x9051x5,0);_0x9051x2[_0x7bc4[9]]()}else {_0x9051x2[_0x7bc4[7]](0,0);_0x9051x2[_0x7bc4[8]](_0x9051x5,0);_0x9051x2[_0x7bc4[8]](_0x9051x5,_0x9051x6);_0x9051x2[_0x7bc4[8]](0,_0x9051x6);_0x9051x2[_0x7bc4[10]]()}};mxCellRenderer[_0x7bc4[0]][_0x7bc4[12]][_0x7bc4[53]]= _0x9051x24;function _0x9051x25(){}_0x9051x25[_0x7bc4[0]]= new mxCylinder();_0x9051x25[_0x7bc4[0]][_0x7bc4[1]]= _0x9051x25;_0x9051x25[_0x7bc4[0]][_0x7bc4[54]]= true;_0x9051x25[_0x7bc4[0]][_0x7bc4[3]]= function(_0x9051x2,_0x9051x3,_0x9051x4,_0x9051x5,_0x9051x6,_0x9051x7){var _0x9051x1d=_0x9051x5/ 3;var _0x9051x1e=_0x9051x6/ 4;if(!_0x9051x7){_0x9051x2[_0x7bc4[7]](_0x9051x5/ 2,_0x9051x1e);_0x9051x2[_0x7bc4[55]](_0x9051x5/ 2- _0x9051x1d,_0x9051x1e,_0x9051x5/ 2- _0x9051x1d,0,_0x9051x5/ 2,0);_0x9051x2[_0x7bc4[55]](_0x9051x5/ 2+ _0x9051x1d,0,_0x9051x5/ 2+ _0x9051x1d,_0x9051x1e,_0x9051x5/ 2,_0x9051x1e);_0x9051x2[_0x7bc4[10]]();_0x9051x2[_0x7bc4[7]](_0x9051x5/ 2,_0x9051x1e);_0x9051x2[_0x7bc4[8]](_0x9051x5/ 2,2* _0x9051x6/ 3);_0x9051x2[_0x7bc4[7]](_0x9051x5/ 2,_0x9051x6/ 3);_0x9051x2[_0x7bc4[8]](0,_0x9051x6/ 3);_0x9051x2[_0x7bc4[7]](_0x9051x5/ 2,_0x9051x6/ 3);_0x9051x2[_0x7bc4[8]](_0x9051x5,_0x9051x6/ 3);_0x9051x2[_0x7bc4[7]](_0x9051x5/ 2,2* _0x9051x6/ 3);_0x9051x2[_0x7bc4[8]](0,_0x9051x6);_0x9051x2[_0x7bc4[7]](_0x9051x5/ 2,2* _0x9051x6/ 3);_0x9051x2[_0x7bc4[8]](_0x9051x5,_0x9051x6);_0x9051x2[_0x7bc4[9]]()}};mxCellRenderer[_0x7bc4[0]][_0x7bc4[12]][_0x7bc4[56]]= _0x9051x25;function _0x9051x26(){}_0x9051x26[_0x7bc4[0]]= new mxCylinder();_0x9051x26[_0x7bc4[0]][_0x7bc4[1]]= _0x9051x26;_0x9051x26[_0x7bc4[0]][_0x7bc4[2]]= 10;_0x9051x26[_0x7bc4[0]][_0x7bc4[54]]= true;_0x9051x26[_0x7bc4[0]][_0x7bc4[3]]= function(_0x9051x2,_0x9051x3,_0x9051x4,_0x9051x5,_0x9051x6,_0x9051x7){var _0x9051x27=mxUtils[_0x7bc4[5]](this[_0x7bc4[4]],_0x7bc4[2],this[_0x7bc4[2]]);var _0x9051x1d=_0x9051x27* 2/ 3;var _0x9051x1e=_0x9051x27;if(!_0x9051x7){_0x9051x2[_0x7bc4[7]](_0x9051x5/ 2,_0x9051x1e);_0x9051x2[_0x7bc4[55]](_0x9051x5/ 2- _0x9051x1d,_0x9051x1e,_0x9051x5/ 2- _0x9051x1d,0,_0x9051x5/ 2,0);_0x9051x2[_0x7bc4[55]](_0x9051x5/ 2+ _0x9051x1d,0,_0x9051x5/ 2+ _0x9051x1d,_0x9051x1e,_0x9051x5/ 2,_0x9051x1e);_0x9051x2[_0x7bc4[10]]();_0x9051x2[_0x7bc4[7]](_0x9051x5/ 2,_0x9051x1e);_0x9051x2[_0x7bc4[8]](_0x9051x5/ 2,_0x9051x6);_0x9051x2[_0x7bc4[9]]()}};mxCellRenderer[_0x7bc4[0]][_0x7bc4[12]][_0x7bc4[57]]= _0x9051x26;function _0x9051x28(){}_0x9051x28[_0x7bc4[0]]= new mxCylinder();_0x9051x28[_0x7bc4[0]][_0x7bc4[1]]= _0x9051x28;_0x9051x28[_0x7bc4[0]][_0x7bc4[58]]= 32;_0x9051x28[_0x7bc4[0]][_0x7bc4[59]]= 12;_0x9051x28[_0x7bc4[0]][_0x7bc4[3]]= function(_0x9051x2,_0x9051x3,_0x9051x4,_0x9051x5,_0x9051x6,_0x9051x7){var _0x9051xe=mxUtils[_0x7bc4[5]](this[_0x7bc4[4]],_0x7bc4[58],this[_0x7bc4[58]]);var _0x9051xf=mxUtils[_0x7bc4[5]](this[_0x7bc4[4]],_0x7bc4[59],this[_0x7bc4[59]]);var _0x9051x29=_0x9051xe/ 2;var _0x9051x2a=_0x9051x29+ _0x9051xe/ 2;var _0x9051x2b=0.3* _0x9051x6- _0x9051xf/ 2;var _0x9051x2c=0.7* _0x9051x6- _0x9051xf/ 2;if(_0x9051x7){_0x9051x2[_0x7bc4[7]](_0x9051x29,_0x9051x2b);_0x9051x2[_0x7bc4[8]](_0x9051x2a,_0x9051x2b);_0x9051x2[_0x7bc4[8]](_0x9051x2a,_0x9051x2b+ _0x9051xf);_0x9051x2[_0x7bc4[8]](_0x9051x29,_0x9051x2b+ _0x9051xf);_0x9051x2[_0x7bc4[7]](_0x9051x29,_0x9051x2c);_0x9051x2[_0x7bc4[8]](_0x9051x2a,_0x9051x2c);_0x9051x2[_0x7bc4[8]](_0x9051x2a,_0x9051x2c+ _0x9051xf);_0x9051x2[_0x7bc4[8]](_0x9051x29,_0x9051x2c+ _0x9051xf);_0x9051x2[_0x7bc4[9]]()}else {_0x9051x2[_0x7bc4[7]](_0x9051x29,0);_0x9051x2[_0x7bc4[8]](_0x9051x5,0);_0x9051x2[_0x7bc4[8]](_0x9051x5,_0x9051x6);_0x9051x2[_0x7bc4[8]](_0x9051x29,_0x9051x6);_0x9051x2[_0x7bc4[8]](_0x9051x29,_0x9051x2c+ _0x9051xf);_0x9051x2[_0x7bc4[8]](0,_0x9051x2c+ _0x9051xf);_0x9051x2[_0x7bc4[8]](0,_0x9051x2c);_0x9051x2[_0x7bc4[8]](_0x9051x29,_0x9051x2c);_0x9051x2[_0x7bc4[8]](_0x9051x29,_0x9051x2b+ _0x9051xf);_0x9051x2[_0x7bc4[8]](0,_0x9051x2b+ _0x9051xf);_0x9051x2[_0x7bc4[8]](0,_0x9051x2b);_0x9051x2[_0x7bc4[8]](_0x9051x29,_0x9051x2b);_0x9051x2[_0x7bc4[10]]();_0x9051x2[_0x7bc4[9]]()}};mxCellRenderer[_0x7bc4[0]][_0x7bc4[12]][_0x7bc4[60]]= _0x9051x28;function _0x9051x2d(){}_0x9051x2d[_0x7bc4[0]]= new mxDoubleEllipse();_0x9051x2d[_0x7bc4[0]][_0x7bc4[1]]= _0x9051x2d;_0x9051x2d[_0x7bc4[0]][_0x7bc4[61]]= true;_0x9051x2d[_0x7bc4[0]][_0x7bc4[50]]= function(_0x9051x15,_0x9051x3,_0x9051x4,_0x9051x5,_0x9051x6){var _0x9051x18=Math[_0x7bc4[6]](4,Math[_0x7bc4[6]](_0x9051x5/ 5,_0x9051x6/ 5));if(_0x9051x5> 0&& _0x9051x6> 0){_0x9051x15[_0x7bc4[62]](_0x9051x3+ _0x9051x18,_0x9051x4+ _0x9051x18,_0x9051x5- 2* _0x9051x18,_0x9051x6- 2* _0x9051x18);_0x9051x15[_0x7bc4[63]]()};_0x9051x15[_0x7bc4[64]](false);if(this[_0x7bc4[61]]){_0x9051x15[_0x7bc4[62]](_0x9051x3,_0x9051x4,_0x9051x5,_0x9051x6);_0x9051x15[_0x7bc4[29]]()}};mxCellRenderer[_0x7bc4[0]][_0x7bc4[12]][_0x7bc4[65]]= _0x9051x2d;function _0x9051x2e(){}_0x9051x2e[_0x7bc4[0]]= new _0x9051x2d();_0x9051x2e[_0x7bc4[0]][_0x7bc4[1]]= _0x9051x2e;_0x9051x2e[_0x7bc4[0]][_0x7bc4[61]]= false;mxCellRenderer[_0x7bc4[0]][_0x7bc4[12]][_0x7bc4[66]]= _0x9051x2e;var _0x9051x2f=mxImageExport[_0x7bc4[0]][_0x7bc4[67]];mxImageExport[_0x7bc4[0]][_0x7bc4[67]]= function(){_0x9051x2f[_0x7bc4[30]](this,arguments);function _0x9051x30(_0x9051x31){return {drawShape:function(_0x9051x32,_0x9051x33,_0x9051x34,_0x9051x35){var _0x9051x3=_0x9051x34[_0x7bc4[68]];var _0x9051x4=_0x9051x34[_0x7bc4[69]];var _0x9051x5=_0x9051x34[_0x7bc4[70]];var _0x9051x6=_0x9051x34[_0x7bc4[71]];if(_0x9051x35){var _0x9051x18=Math[_0x7bc4[6]](4,Math[_0x7bc4[6]](_0x9051x5/ 5,_0x9051x6/ 5));_0x9051x3+= _0x9051x18;_0x9051x4+= _0x9051x18;_0x9051x5-= 2* _0x9051x18;_0x9051x6-= 2* _0x9051x18;if(_0x9051x5> 0&& _0x9051x6> 0){_0x9051x32[_0x7bc4[62]](_0x9051x3,_0x9051x4,_0x9051x5,_0x9051x6)};return true}else {_0x9051x32[_0x7bc4[63]]();if(_0x9051x31){_0x9051x32[_0x7bc4[62]](_0x9051x3,_0x9051x4,_0x9051x5,_0x9051x6);_0x9051x32[_0x7bc4[29]]()}}}}}this[_0x7bc4[72]][_0x7bc4[65]]= _0x9051x30(true);this[_0x7bc4[72]][_0x7bc4[66]]= _0x9051x30(false)};function _0x9051x36(){mxArrow[_0x7bc4[24]](this)}mxUtils[_0x7bc4[25]](_0x9051x36,mxArrow);_0x9051x36[_0x7bc4[0]][_0x7bc4[73]]= function(_0x9051x15,_0x9051x37){var _0x9051x1d=10;var _0x9051x38=_0x9051x37[0];var _0x9051x39=_0x9051x37[_0x9051x37[_0x7bc4[74]]- 1];var _0x9051xe=_0x9051x39[_0x7bc4[68]]- _0x9051x38[_0x7bc4[68]];var _0x9051xf=_0x9051x39[_0x7bc4[69]]- _0x9051x38[_0x7bc4[69]];var _0x9051x3a=Math[_0x7bc4[75]](_0x9051xe* _0x9051xe+ _0x9051xf* _0x9051xf);var _0x9051x3b=_0x9051x3a;var _0x9051x3c=_0x9051xe/ _0x9051x3a;var _0x9051x3d=_0x9051xf/ _0x9051x3a;var _0x9051x3e=_0x9051x3b* _0x9051x3c;var _0x9051x3f=_0x9051x3b* _0x9051x3d;var _0x9051x40=_0x9051x1d* _0x9051x3d/ 3;var _0x9051x41=-_0x9051x1d* _0x9051x3c/ 3;var _0x9051x42=_0x9051x38[_0x7bc4[68]]- _0x9051x40/ 2;var _0x9051x43=_0x9051x38[_0x7bc4[69]]- _0x9051x41/ 2;var _0x9051x44=_0x9051x42+ _0x9051x40;var _0x9051x45=_0x9051x43+ _0x9051x41;var _0x9051x46=_0x9051x44+ _0x9051x3e;var _0x9051x47=_0x9051x45+ _0x9051x3f;var _0x9051x48=_0x9051x46+ _0x9051x40;var _0x9051x49=_0x9051x47+ _0x9051x41;var _0x9051x4a=_0x9051x48- 3* _0x9051x40;var _0x9051x4b=_0x9051x49- 3* _0x9051x41;_0x9051x15[_0x7bc4[28]]();_0x9051x15[_0x7bc4[7]](_0x9051x44,_0x9051x45);_0x9051x15[_0x7bc4[8]](_0x9051x46,_0x9051x47);_0x9051x15[_0x7bc4[7]](_0x9051x4a+ _0x9051x40,_0x9051x4b+ _0x9051x41);_0x9051x15[_0x7bc4[8]](_0x9051x42,_0x9051x43);_0x9051x15[_0x7bc4[29]]()};mxCellRenderer[_0x7bc4[0]][_0x7bc4[12]][_0x7bc4[76]]= _0x9051x36;mxMarker[_0x7bc4[78]](_0x7bc4[77],function(_0x9051x32,_0x9051x1a,_0x9051x4c,_0x9051x39,_0x9051x4d,_0x9051x4e,_0x9051x4f,_0x9051x50,_0x9051x51,_0x9051x52){var _0x9051x3c=_0x9051x4d* (_0x9051x4f+ _0x9051x51+ 1);var _0x9051x3d=_0x9051x4e* (_0x9051x4f+ _0x9051x51+ 1);return function(){_0x9051x32[_0x7bc4[28]]();_0x9051x32[_0x7bc4[7]](_0x9051x39[_0x7bc4[68]]- _0x9051x3c/ 2- _0x9051x3d/ 2,_0x9051x39[_0x7bc4[69]]- _0x9051x3d/ 2+ _0x9051x3c/ 2);_0x9051x32[_0x7bc4[8]](_0x9051x39[_0x7bc4[68]]+ _0x9051x3d/ 2- 3* _0x9051x3c/ 2,_0x9051x39[_0x7bc4[69]]- 3* _0x9051x3d/ 2- _0x9051x3c/ 2);_0x9051x32[_0x7bc4[29]]()}});var _0x9051x53=-99;if( typeof (mxVertexHandler)!= _0x7bc4[79]){function _0x9051x54(_0x9051x33){mxVertexHandler[_0x7bc4[24]](this,_0x9051x33)}mxUtils[_0x7bc4[25]](_0x9051x54,mxVertexHandler);_0x9051x54[_0x7bc4[0]][_0x7bc4[80]]= false;_0x9051x54[_0x7bc4[0]][_0x7bc4[81]]= function(){this[_0x7bc4[82]]= mxUtils[_0x7bc4[5]](this[_0x7bc4[83]][_0x7bc4[4]],mxConstants.STYLE_HORIZONTAL,true);var _0x9051x55=this[_0x7bc4[83]][_0x7bc4[85]][_0x7bc4[84]];if(this[_0x7bc4[86]]!= null){var _0x9051x34= new mxRectangle(0,0,this[_0x7bc4[86]][_0x7bc4[70]],this[_0x7bc4[86]][_0x7bc4[71]]);this[_0x7bc4[87]]= new mxImageShape(_0x9051x34,this[_0x7bc4[86]][_0x7bc4[88]])}else {var _0x9051x4f=10;var _0x9051x34= new mxRectangle(0,0,_0x9051x4f,_0x9051x4f);this[_0x7bc4[87]]= new mxRhombus(_0x9051x34,mxConstants.HANDLE_FILLCOLOR,mxConstants.HANDLE_STROKECOLOR)};this[_0x7bc4[87]][_0x7bc4[89]]= (_0x9051x55[_0x7bc4[89]]!= mxConstants[_0x7bc4[90]])?mxConstants[_0x7bc4[91]]:mxConstants[_0x7bc4[90]];this[_0x7bc4[87]][_0x7bc4[81]](_0x9051x55[_0x7bc4[93]]()[_0x7bc4[92]]());this[_0x7bc4[87]][_0x7bc4[95]][_0x7bc4[4]][_0x7bc4[94]]= this[_0x7bc4[96]]();mxEvent[_0x7bc4[97]](this[_0x7bc4[87]][_0x7bc4[95]],_0x9051x55,this[_0x7bc4[83]]);mxVertexHandler[_0x7bc4[0]][_0x7bc4[81]][_0x7bc4[30]](this,arguments)};_0x9051x54[_0x7bc4[0]][_0x7bc4[96]]= function(){return _0x7bc4[98]};_0x9051x54[_0x7bc4[0]][_0x7bc4[99]]= function(){mxVertexHandler[_0x7bc4[0]][_0x7bc4[99]][_0x7bc4[30]](this,arguments);var _0x9051x4f=this[_0x7bc4[87]][_0x7bc4[100]][_0x7bc4[70]];this[_0x7bc4[87]][_0x7bc4[100]]= this[_0x7bc4[101]](_0x9051x4f);this[_0x7bc4[87]][_0x7bc4[99]]()};_0x9051x54[_0x7bc4[0]][_0x7bc4[102]]= function(){mxVertexHandler[_0x7bc4[0]][_0x7bc4[102]][_0x7bc4[30]](this,arguments);if(this[_0x7bc4[87]]!= null){this[_0x7bc4[87]][_0x7bc4[102]]();this[_0x7bc4[87]]= null}};_0x9051x54[_0x7bc4[0]][_0x7bc4[103]]= function(_0x9051x56){if(_0x9051x56[_0x7bc4[104]](this[_0x7bc4[87]])){return _0x9051x53};return mxVertexHandler[_0x7bc4[0]][_0x7bc4[103]][_0x7bc4[30]](this,arguments)};_0x9051x54[_0x7bc4[0]][_0x7bc4[105]]= function(_0x9051x57,_0x9051x56){if(!_0x9051x56[_0x7bc4[106]]()&& this[_0x7bc4[107]]== _0x9051x53){var _0x9051x58= new mxPoint(_0x9051x56[_0x7bc4[108]](),_0x9051x56[_0x7bc4[109]]());this[_0x7bc4[110]](_0x9051x58);var _0x9051x59=this[_0x7bc4[84]][_0x7bc4[112]](_0x9051x56[_0x7bc4[111]]());var _0x9051x5a=this[_0x7bc4[84]][_0x7bc4[93]]()[_0x7bc4[113]];if(_0x9051x59&& this[_0x7bc4[80]]){_0x9051x58[_0x7bc4[68]]= this[_0x7bc4[84]][_0x7bc4[114]](_0x9051x58[_0x7bc4[68]]/ _0x9051x5a)* _0x9051x5a;_0x9051x58[_0x7bc4[69]]= this[_0x7bc4[84]][_0x7bc4[114]](_0x9051x58[_0x7bc4[69]]/ _0x9051x5a)* _0x9051x5a};this[_0x7bc4[115]](_0x9051x58);this[_0x7bc4[116]](this[_0x7bc4[87]],_0x9051x58[_0x7bc4[68]],_0x9051x58[_0x7bc4[69]]);this[_0x7bc4[83]][_0x7bc4[85]][_0x7bc4[84]][_0x7bc4[117]][_0x7bc4[99]](this[_0x7bc4[83]],true);_0x9051x56[_0x7bc4[118]]()}else {mxVertexHandler[_0x7bc4[0]][_0x7bc4[105]][_0x7bc4[30]](this,arguments)}};_0x9051x54[_0x7bc4[0]][_0x7bc4[119]]= function(_0x9051x57,_0x9051x56){if(!_0x9051x56[_0x7bc4[106]]()&& this[_0x7bc4[107]]== _0x9051x53){this[_0x7bc4[120]]();this[_0x7bc4[121]]();_0x9051x56[_0x7bc4[118]]()}else {mxVertexHandler[_0x7bc4[0]][_0x7bc4[119]][_0x7bc4[30]](this,arguments)}};_0x9051x54[_0x7bc4[0]][_0x7bc4[101]]= function(_0x9051x4f){var _0x9051x5b=this[_0x7bc4[83]][_0x7bc4[123]][_0x7bc4[122]]();var _0x9051x5c=mxUtils[_0x7bc4[124]](_0x9051x5b);var _0x9051x5d=Math[_0x7bc4[125]](_0x9051x5c);var _0x9051x5e=Math[_0x7bc4[126]](_0x9051x5c);var _0x9051x34= new mxRectangle(this[_0x7bc4[83]][_0x7bc4[68]],this[_0x7bc4[83]][_0x7bc4[69]],this[_0x7bc4[83]][_0x7bc4[70]],this[_0x7bc4[83]][_0x7bc4[71]]);if(this[_0x7bc4[83]][_0x7bc4[123]][_0x7bc4[127]]()){var _0x9051x5f=(_0x9051x34[_0x7bc4[70]]- _0x9051x34[_0x7bc4[71]])/ 2;_0x9051x34[_0x7bc4[68]]+= _0x9051x5f;_0x9051x34[_0x7bc4[69]]-= _0x9051x5f;var _0x9051x23=_0x9051x34[_0x7bc4[70]];_0x9051x34[_0x7bc4[70]]= _0x9051x34[_0x7bc4[71]];_0x9051x34[_0x7bc4[71]]= _0x9051x23};var _0x9051x60=this[_0x7bc4[128]](_0x9051x34);if(this[_0x7bc4[83]][_0x7bc4[123]][_0x7bc4[129]]){_0x9051x60[_0x7bc4[68]]= 2* _0x9051x34[_0x7bc4[68]]+ _0x9051x34[_0x7bc4[70]]- _0x9051x60[_0x7bc4[68]]};if(this[_0x7bc4[83]][_0x7bc4[123]][_0x7bc4[130]]){_0x9051x60[_0x7bc4[69]]= 2* _0x9051x34[_0x7bc4[69]]+ _0x9051x34[_0x7bc4[71]]- _0x9051x60[_0x7bc4[69]]};_0x9051x60= mxUtils[_0x7bc4[133]](_0x9051x60,_0x9051x5d,_0x9051x5e, new mxPoint(this[_0x7bc4[83]][_0x7bc4[131]](),this[_0x7bc4[83]][_0x7bc4[132]]()));return new mxRectangle(_0x9051x60[_0x7bc4[68]]- _0x9051x4f/ 2,_0x9051x60[_0x7bc4[69]]- _0x9051x4f/ 2,_0x9051x4f,_0x9051x4f)};_0x9051x54[_0x7bc4[0]][_0x7bc4[128]]= function(_0x9051x34){return null};_0x9051x54[_0x7bc4[0]][_0x7bc4[115]]= function(_0x9051x58){};_0x9051x54[_0x7bc4[0]][_0x7bc4[110]]= function(_0x9051x58){_0x9051x58[_0x7bc4[68]]= Math[_0x7bc4[34]](this[_0x7bc4[83]][_0x7bc4[68]],Math[_0x7bc4[6]](this[_0x7bc4[83]][_0x7bc4[68]]+ this[_0x7bc4[83]][_0x7bc4[70]],_0x9051x58[_0x7bc4[68]]));_0x9051x58[_0x7bc4[69]]= Math[_0x7bc4[34]](this[_0x7bc4[83]][_0x7bc4[69]],Math[_0x7bc4[6]](this[_0x7bc4[83]][_0x7bc4[69]]+ this[_0x7bc4[83]][_0x7bc4[71]],_0x9051x58[_0x7bc4[69]]))};_0x9051x54[_0x7bc4[0]][_0x7bc4[120]]= function(){};function _0x9051x61(_0x9051x33){_0x9051x54[_0x7bc4[24]](this,_0x9051x33)}mxUtils[_0x7bc4[25]](_0x9051x61,_0x9051x54);_0x9051x61[_0x7bc4[0]][_0x7bc4[128]]= function(_0x9051x34){var _0x9051x5a=this[_0x7bc4[84]][_0x7bc4[93]]()[_0x7bc4[113]];var _0x9051xb=Math[_0x7bc4[6]](_0x9051x34[_0x7bc4[70]],mxUtils[_0x7bc4[5]](this[_0x7bc4[83]][_0x7bc4[4]],_0x7bc4[14],60)* _0x9051x5a);var _0x9051xc=Math[_0x7bc4[6]](_0x9051x34[_0x7bc4[71]],mxUtils[_0x7bc4[5]](this[_0x7bc4[83]][_0x7bc4[4]],_0x7bc4[15],20)* _0x9051x5a);var _0x9051xd=mxUtils[_0x7bc4[5]](this[_0x7bc4[83]][_0x7bc4[4]],_0x7bc4[16],_0x7bc4[17]);var _0x9051x3=(_0x9051xd== _0x7bc4[18])?_0x9051x34[_0x7bc4[68]]+ _0x9051xb:_0x9051x34[_0x7bc4[68]]+ _0x9051x34[_0x7bc4[70]]- _0x9051xb;return new mxPoint(_0x9051x3,_0x9051x34[_0x7bc4[69]]+ _0x9051xc)};_0x9051x61[_0x7bc4[0]][_0x7bc4[115]]= function(_0x9051x58){var _0x9051x5b=this[_0x7bc4[83]][_0x7bc4[123]][_0x7bc4[122]]();var _0x9051x5c=mxUtils[_0x7bc4[124]](_0x9051x5b);var _0x9051x5d=Math[_0x7bc4[125]](-_0x9051x5c);var _0x9051x5e=Math[_0x7bc4[126]](-_0x9051x5c);var _0x9051x34= new mxRectangle(this[_0x7bc4[83]][_0x7bc4[68]],this[_0x7bc4[83]][_0x7bc4[69]],this[_0x7bc4[83]][_0x7bc4[70]],this[_0x7bc4[83]][_0x7bc4[71]]);if(this[_0x7bc4[83]][_0x7bc4[123]][_0x7bc4[127]]()){var _0x9051x5f=(_0x9051x34[_0x7bc4[70]]- _0x9051x34[_0x7bc4[71]])/ 2;_0x9051x34[_0x7bc4[68]]+= _0x9051x5f;_0x9051x34[_0x7bc4[69]]-= _0x9051x5f;var _0x9051x23=_0x9051x34[_0x7bc4[70]];_0x9051x34[_0x7bc4[70]]= _0x9051x34[_0x7bc4[71]];_0x9051x34[_0x7bc4[71]]= _0x9051x23};var _0x9051x60= new mxPoint(_0x9051x58[_0x7bc4[68]],_0x9051x58[_0x7bc4[69]]);_0x9051x60= mxUtils[_0x7bc4[133]](_0x9051x60,_0x9051x5d,_0x9051x5e, new mxPoint(this[_0x7bc4[83]][_0x7bc4[131]](),this[_0x7bc4[83]][_0x7bc4[132]]()));if(this[_0x7bc4[83]][_0x7bc4[123]][_0x7bc4[129]]){_0x9051x60[_0x7bc4[68]]= 2* _0x9051x34[_0x7bc4[68]]+ _0x9051x34[_0x7bc4[70]]- _0x9051x60[_0x7bc4[68]]};if(this[_0x7bc4[83]][_0x7bc4[123]][_0x7bc4[130]]){_0x9051x60[_0x7bc4[69]]= 2* _0x9051x34[_0x7bc4[69]]+ _0x9051x34[_0x7bc4[71]]- _0x9051x60[_0x7bc4[69]]};var _0x9051x62=this[_0x7bc4[134]](_0x9051x60,_0x9051x34);if(_0x9051x62!= null){if(this[_0x7bc4[83]][_0x7bc4[123]][_0x7bc4[129]]){_0x9051x62[_0x7bc4[68]]= 2* _0x9051x34[_0x7bc4[68]]+ _0x9051x34[_0x7bc4[70]]- _0x9051x62[_0x7bc4[68]]};if(this[_0x7bc4[83]][_0x7bc4[123]][_0x7bc4[130]]){_0x9051x62[_0x7bc4[69]]= 2* _0x9051x34[_0x7bc4[69]]+ _0x9051x34[_0x7bc4[71]]- _0x9051x62[_0x7bc4[69]]};_0x9051x5d= Math[_0x7bc4[125]](_0x9051x5c);_0x9051x5e= Math[_0x7bc4[126]](_0x9051x5c);_0x9051x62= mxUtils[_0x7bc4[133]](_0x9051x62,_0x9051x5d,_0x9051x5e, new mxPoint(this[_0x7bc4[83]][_0x7bc4[131]](),this[_0x7bc4[83]][_0x7bc4[132]]()));_0x9051x58[_0x7bc4[68]]= _0x9051x62[_0x7bc4[68]];_0x9051x58[_0x7bc4[69]]= _0x9051x62[_0x7bc4[69]]}};_0x9051x61[_0x7bc4[0]][_0x7bc4[134]]= function(_0x9051x60,_0x9051x34){var _0x9051xd=mxUtils[_0x7bc4[5]](this[_0x7bc4[83]][_0x7bc4[4]],_0x7bc4[16],_0x7bc4[17]);var _0x9051xb=(_0x9051xd== _0x7bc4[18])?_0x9051x60[_0x7bc4[68]]- _0x9051x34[_0x7bc4[68]]:_0x9051x34[_0x7bc4[68]]+ _0x9051x34[_0x7bc4[70]]- _0x9051x60[_0x7bc4[68]];var _0x9051xc=_0x9051x60[_0x7bc4[69]]- _0x9051x34[_0x7bc4[69]];var _0x9051x5a=this[_0x7bc4[84]][_0x7bc4[93]]()[_0x7bc4[113]];this[_0x7bc4[83]][_0x7bc4[4]][_0x7bc4[14]]= Math[_0x7bc4[135]](Math[_0x7bc4[34]](1,_0x9051xb)/ _0x9051x5a);this[_0x7bc4[83]][_0x7bc4[4]][_0x7bc4[15]]= Math[_0x7bc4[135]](Math[_0x7bc4[34]](1,_0x9051xc)/ _0x9051x5a)};_0x9051x61[_0x7bc4[0]][_0x7bc4[120]]= function(){var _0x9051x63=this[_0x7bc4[84]][_0x7bc4[136]]();_0x9051x63[_0x7bc4[137]]();try{this[_0x7bc4[83]][_0x7bc4[85]][_0x7bc4[84]][_0x7bc4[139]](_0x7bc4[14],this[_0x7bc4[83]][_0x7bc4[4]][_0x7bc4[14]],[this[_0x7bc4[83]][_0x7bc4[138]]]);this[_0x7bc4[83]][_0x7bc4[85]][_0x7bc4[84]][_0x7bc4[139]](_0x7bc4[15],this[_0x7bc4[83]][_0x7bc4[4]][_0x7bc4[15]],[this[_0x7bc4[83]][_0x7bc4[138]]])}finally{_0x9051x63[_0x7bc4[140]]()}};function _0x9051x64(_0x9051x33){_0x9051x61[_0x7bc4[24]](this,_0x9051x33)}mxUtils[_0x7bc4[25]](_0x9051x64,_0x9051x61);_0x9051x64[_0x7bc4[0]][_0x7bc4[128]]= function(_0x9051x34){var _0x9051x5a=this[_0x7bc4[84]][_0x7bc4[93]]()[_0x7bc4[113]];var _0x9051x65=mxUtils[_0x7bc4[5]](this[_0x7bc4[83]][_0x7bc4[4]],mxConstants.STYLE_STARTSIZE,mxConstants.DEFAULT_STARTSIZE);return new mxPoint(_0x9051x34[_0x7bc4[68]]+ _0x9051x34[_0x7bc4[70]]/ 2,_0x9051x34[_0x7bc4[69]]+ Math[_0x7bc4[6]](_0x9051x34[_0x7bc4[71]],_0x9051x65* _0x9051x5a))};_0x9051x64[_0x7bc4[0]][_0x7bc4[134]]= function(_0x9051x58,_0x9051x34){_0x9051x58[_0x7bc4[68]]= _0x9051x34[_0x7bc4[68]]+ _0x9051x34[_0x7bc4[70]]/ 2;startSize= _0x9051x58[_0x7bc4[69]]- _0x9051x34[_0x7bc4[69]];var _0x9051x5a=this[_0x7bc4[84]][_0x7bc4[93]]()[_0x7bc4[113]];this[_0x7bc4[83]][_0x7bc4[4]][_0x7bc4[141]]= Math[_0x7bc4[135]](Math[_0x7bc4[34]](1,startSize)/ _0x9051x5a);return _0x9051x58};_0x9051x64[_0x7bc4[0]][_0x7bc4[120]]= function(){this[_0x7bc4[83]][_0x7bc4[85]][_0x7bc4[84]][_0x7bc4[139]](_0x7bc4[141],this[_0x7bc4[83]][_0x7bc4[4]][_0x7bc4[141]],[this[_0x7bc4[83]][_0x7bc4[138]]])};function _0x9051x66(_0x9051x33){_0x9051x61[_0x7bc4[24]](this,_0x9051x33)}mxUtils[_0x7bc4[25]](_0x9051x66,_0x9051x61);_0x9051x66[_0x7bc4[0]][_0x7bc4[142]]= 20;_0x9051x66[_0x7bc4[0]][_0x7bc4[143]]= 1;_0x9051x66[_0x7bc4[0]][_0x7bc4[128]]= function(_0x9051x34){var _0x9051x5a=this[_0x7bc4[84]][_0x7bc4[93]]()[_0x7bc4[113]];var _0x9051x67=Math[_0x7bc4[6]](_0x9051x34[_0x7bc4[70]],Math[_0x7bc4[6]](_0x9051x34[_0x7bc4[71]],mxUtils[_0x7bc4[5]](this[_0x7bc4[83]][_0x7bc4[4]],_0x7bc4[2],this[_0x7bc4[142]])* _0x9051x5a/ this[_0x7bc4[143]]));return new mxPoint(_0x9051x34[_0x7bc4[68]]+ _0x9051x67,_0x9051x34[_0x7bc4[69]]+ _0x9051x67)};_0x9051x66[_0x7bc4[0]][_0x7bc4[134]]= function(_0x9051x60,_0x9051x34){var _0x9051x4f=Math[_0x7bc4[34]](0,Math[_0x7bc4[6]](Math[_0x7bc4[6]](_0x9051x34[_0x7bc4[70]]/ this[_0x7bc4[143]],_0x9051x60[_0x7bc4[68]]- _0x9051x34[_0x7bc4[68]]),Math[_0x7bc4[6]](_0x9051x34[_0x7bc4[71]]/ this[_0x7bc4[143]],_0x9051x60[_0x7bc4[69]]- _0x9051x34[_0x7bc4[69]])));var _0x9051x5a=this[_0x7bc4[84]][_0x7bc4[93]]()[_0x7bc4[113]];this[_0x7bc4[83]][_0x7bc4[4]][_0x7bc4[2]]= Math[_0x7bc4[135]](Math[_0x7bc4[34]](1,_0x9051x4f)/ _0x9051x5a)* this[_0x7bc4[143]];return new mxPoint(_0x9051x34[_0x7bc4[68]]+ _0x9051x4f,_0x9051x34[_0x7bc4[69]]+ _0x9051x4f)};_0x9051x66[_0x7bc4[0]][_0x7bc4[120]]= function(){this[_0x7bc4[83]][_0x7bc4[85]][_0x7bc4[84]][_0x7bc4[139]](_0x7bc4[2],this[_0x7bc4[83]][_0x7bc4[4]][_0x7bc4[2]],[this[_0x7bc4[83]][_0x7bc4[138]]])};function _0x9051x68(_0x9051x33){_0x9051x66[_0x7bc4[24]](this,_0x9051x33)}mxUtils[_0x7bc4[25]](_0x9051x68,_0x9051x66);_0x9051x68[_0x7bc4[0]][_0x7bc4[142]]= 30;_0x9051x68[_0x7bc4[0]][_0x7bc4[143]]= 2;function _0x9051x69(_0x9051x33){_0x9051x66[_0x7bc4[24]](this,_0x9051x33)}mxUtils[_0x7bc4[25]](_0x9051x69,_0x9051x66);_0x9051x69[_0x7bc4[0]][_0x7bc4[142]]= 30;_0x9051x69[_0x7bc4[0]][_0x7bc4[143]]= 1;_0x9051x69[_0x7bc4[0]][_0x7bc4[128]]= function(_0x9051x34){var _0x9051x5a=this[_0x7bc4[84]][_0x7bc4[93]]()[_0x7bc4[113]];var _0x9051x67=Math[_0x7bc4[6]](_0x9051x34[_0x7bc4[70]],Math[_0x7bc4[6]](_0x9051x34[_0x7bc4[71]],mxUtils[_0x7bc4[5]](this[_0x7bc4[83]][_0x7bc4[4]],_0x7bc4[2],this[_0x7bc4[142]])* _0x9051x5a/ this[_0x7bc4[143]]));return new mxPoint(_0x9051x34[_0x7bc4[68]]+ _0x9051x34[_0x7bc4[70]]- _0x9051x67,_0x9051x34[_0x7bc4[69]]+ _0x9051x67)};_0x9051x69[_0x7bc4[0]][_0x7bc4[134]]= function(_0x9051x60,_0x9051x34){var _0x9051x4f=Math[_0x7bc4[34]](0,Math[_0x7bc4[6]](Math[_0x7bc4[6]](_0x9051x34[_0x7bc4[70]]/ this[_0x7bc4[143]],_0x9051x60[_0x7bc4[68]]- _0x9051x34[_0x7bc4[68]]+ _0x9051x34[_0x7bc4[70]]),Math[_0x7bc4[6]](_0x9051x34[_0x7bc4[71]]/ this[_0x7bc4[143]],_0x9051x60[_0x7bc4[69]]- _0x9051x34[_0x7bc4[69]])));var _0x9051x5a=this[_0x7bc4[84]][_0x7bc4[93]]()[_0x7bc4[113]];this[_0x7bc4[83]][_0x7bc4[4]][_0x7bc4[2]]= Math[_0x7bc4[135]](Math[_0x7bc4[34]](1,_0x9051x4f)/ _0x9051x5a)* this[_0x7bc4[143]];return new mxPoint(_0x9051x34[_0x7bc4[68]]+ _0x9051x34[_0x7bc4[70]]- _0x9051x4f,_0x9051x34[_0x7bc4[69]]+ _0x9051x4f)};function _0x9051x6a(_0x9051x33){_0x9051x66[_0x7bc4[24]](this,_0x9051x33)}mxUtils[_0x7bc4[25]](_0x9051x6a,_0x9051x66);_0x9051x6a[_0x7bc4[0]][_0x7bc4[142]]= 0.2;_0x9051x6a[_0x7bc4[0]][_0x7bc4[143]]= 1;_0x9051x6a[_0x7bc4[0]][_0x7bc4[128]]= function(_0x9051x34){var _0x9051x67=mxUtils[_0x7bc4[5]](this[_0x7bc4[83]][_0x7bc4[4]],_0x7bc4[2],this[_0x7bc4[142]]);return new mxPoint(_0x9051x34[_0x7bc4[68]]+ _0x9051x34[_0x7bc4[70]]* _0x9051x67,_0x9051x34[_0x7bc4[69]]+ _0x9051x34[_0x7bc4[71]]/ 2)};_0x9051x6a[_0x7bc4[0]][_0x7bc4[134]]= function(_0x9051x60,_0x9051x34){var _0x9051x4f=Math[_0x7bc4[6]](1,(_0x9051x60[_0x7bc4[68]]- _0x9051x34[_0x7bc4[68]])/ _0x9051x34[_0x7bc4[70]]);this[_0x7bc4[83]][_0x7bc4[4]][_0x7bc4[2]]= _0x9051x4f;return new mxPoint(_0x9051x34[_0x7bc4[68]]+ _0x9051x4f* _0x9051x34[_0x7bc4[70]],_0x9051x34[_0x7bc4[69]]+ _0x9051x34[_0x7bc4[71]]/ 2)};function _0x9051x6b(_0x9051x33){_0x9051x66[_0x7bc4[24]](this,_0x9051x33)}mxUtils[_0x7bc4[25]](_0x9051x6b,_0x9051x66);_0x9051x6b[_0x7bc4[0]][_0x7bc4[142]]= 0.4;_0x9051x6b[_0x7bc4[0]][_0x7bc4[143]]= 1;_0x9051x6b[_0x7bc4[0]][_0x7bc4[128]]= function(_0x9051x34){var _0x9051x67=mxUtils[_0x7bc4[5]](this[_0x7bc4[83]][_0x7bc4[4]],_0x7bc4[2],this[_0x7bc4[142]]);return new mxPoint(_0x9051x34[_0x7bc4[68]]+ _0x9051x34[_0x7bc4[70]]/ 2,_0x9051x34[_0x7bc4[69]]+ _0x9051x67* _0x9051x34[_0x7bc4[71]]/ 2)};_0x9051x6b[_0x7bc4[0]][_0x7bc4[134]]= function(_0x9051x60,_0x9051x34){var _0x9051x4f=Math[_0x7bc4[34]](0,Math[_0x7bc4[6]](1,((_0x9051x60[_0x7bc4[69]]- _0x9051x34[_0x7bc4[69]])/ _0x9051x34[_0x7bc4[71]])* 2));this[_0x7bc4[83]][_0x7bc4[4]][_0x7bc4[2]]= _0x9051x4f;return new mxPoint(_0x9051x34[_0x7bc4[68]]+ _0x9051x34[_0x7bc4[70]]/ 2,_0x9051x34[_0x7bc4[69]]+ _0x9051x4f* _0x9051x34[_0x7bc4[71]]/ 2)};var _0x9051x6c={"\x73\x77\x69\x6D\x6C\x61\x6E\x65":_0x9051x64,"\x66\x6F\x6C\x64\x65\x72":_0x9051x61,"\x63\x75\x62\x65":_0x9051x66,"\x63\x61\x72\x64":_0x9051x68,"\x6E\x6F\x74\x65":_0x9051x69,"\x73\x74\x65\x70":_0x9051x6a,"\x74\x61\x70\x65":_0x9051x6b};var _0x9051x6d=mxGraph[_0x7bc4[0]][_0x7bc4[144]];mxGraph[_0x7bc4[0]][_0x7bc4[144]]= function(_0x9051x33){if(_0x9051x33!= null){var _0x9051x6e=_0x9051x6c[_0x9051x33[_0x7bc4[4]][_0x7bc4[123]]];if(_0x9051x6e!= null){return new _0x9051x6e(_0x9051x33)}};return _0x9051x6d[_0x7bc4[30]](this,arguments)}};mxGraph[_0x7bc4[0]][_0x7bc4[145]]= function(_0x9051x6f,_0x9051x50){if(_0x9051x6f!= null&& _0x9051x6f[_0x7bc4[123]]!= null){if(_0x9051x6f[_0x7bc4[123]][_0x7bc4[146]]!= null){if(_0x9051x6f[_0x7bc4[123]][_0x7bc4[146]]!= null){return _0x9051x6f[_0x7bc4[123]][_0x7bc4[146]][_0x7bc4[147]]}}else {if(_0x9051x6f[_0x7bc4[123]][_0x7bc4[147]]!= null){return _0x9051x6f[_0x7bc4[123]][_0x7bc4[147]]}}};return null};mxRectangleShape[_0x7bc4[0]][_0x7bc4[147]]= [ new mxConnectionConstraint( new mxPoint(0.25,0),true), new mxConnectionConstraint( new mxPoint(0.5,0),true), new mxConnectionConstraint( new mxPoint(0.75,0),true), new mxConnectionConstraint( new mxPoint(0,0.25),true), new mxConnectionConstraint( new mxPoint(0,0.5),true), new mxConnectionConstraint( new mxPoint(0,0.75),true), new mxConnectionConstraint( new mxPoint(1,0.25),true), new mxConnectionConstraint( new mxPoint(1,0.5),true), new mxConnectionConstraint( new mxPoint(1,0.75),true), new mxConnectionConstraint( new mxPoint(0.25,1),true), new mxConnectionConstraint( new mxPoint(0.5,1),true), new mxConnectionConstraint( new mxPoint(0.75,1),true)];mxLabel[_0x7bc4[0]][_0x7bc4[147]]= mxRectangleShape[_0x7bc4[0]][_0x7bc4[147]];mxImageShape[_0x7bc4[0]][_0x7bc4[147]]= mxRectangleShape[_0x7bc4[0]][_0x7bc4[147]];mxSwimlane[_0x7bc4[0]][_0x7bc4[147]]= mxRectangleShape[_0x7bc4[0]][_0x7bc4[147]];_0x9051x14[_0x7bc4[0]][_0x7bc4[147]]= mxRectangleShape[_0x7bc4[0]][_0x7bc4[147]];_0x9051x9[_0x7bc4[0]][_0x7bc4[147]]= mxRectangleShape[_0x7bc4[0]][_0x7bc4[147]];_0x9051x10[_0x7bc4[0]][_0x7bc4[147]]= mxRectangleShape[_0x7bc4[0]][_0x7bc4[147]];_0x9051x1[_0x7bc4[0]][_0x7bc4[147]]= mxRectangleShape[_0x7bc4[0]][_0x7bc4[147]];_0x9051xa[_0x7bc4[0]][_0x7bc4[147]]= mxRectangleShape[_0x7bc4[0]][_0x7bc4[147]];mxCylinder[_0x7bc4[0]][_0x7bc4[147]]= [ new mxConnectionConstraint( new mxPoint(0.15,0.05),false), new mxConnectionConstraint( new mxPoint(0.5,0),true), new mxConnectionConstraint( new mxPoint(0.85,0.05),false), new mxConnectionConstraint( new mxPoint(0,0.3),true), new mxConnectionConstraint( new mxPoint(0,0.5),true), new mxConnectionConstraint( new mxPoint(0,0.7),true), new mxConnectionConstraint( new mxPoint(1,0.3),true), new mxConnectionConstraint( new mxPoint(1,0.5),true), new mxConnectionConstraint( new mxPoint(1,0.7),true), new mxConnectionConstraint( new mxPoint(0.15,0.95),false), new mxConnectionConstraint( new mxPoint(0.5,1),true), new mxConnectionConstraint( new mxPoint(0.85,0.95),false)];_0x9051x25[_0x7bc4[0]][_0x7bc4[147]]= [ new mxConnectionConstraint( new mxPoint(0.25,0.1),false), new mxConnectionConstraint( new mxPoint(0.5,0),false), new mxConnectionConstraint( new mxPoint(0.75,0.1),false), new mxConnectionConstraint( new mxPoint(0,1/ 3),false), new mxConnectionConstraint( new mxPoint(0,1),false), new mxConnectionConstraint( new mxPoint(1,1/ 3),false), new mxConnectionConstraint( new mxPoint(1,1),false), new mxConnectionConstraint( new mxPoint(0.5,0.5),false)];_0x9051x28[_0x7bc4[0]][_0x7bc4[147]]= [ new mxConnectionConstraint( new mxPoint(0.25,0),true), new mxConnectionConstraint( new mxPoint(0.5,0),true), new mxConnectionConstraint( new mxPoint(0.75,0),true), new mxConnectionConstraint( new mxPoint(0,0.3),true), new mxConnectionConstraint( new mxPoint(0,0.7),true), new mxConnectionConstraint( new mxPoint(1,0.25),true), new mxConnectionConstraint( new mxPoint(1,0.5),true), new mxConnectionConstraint( new mxPoint(1,0.75),true), new mxConnectionConstraint( new mxPoint(0.25,1),true), new mxConnectionConstraint( new mxPoint(0.5,1),true), new mxConnectionConstraint( new mxPoint(0.75,1),true)];mxActor[_0x7bc4[0]][_0x7bc4[147]]= [ new mxConnectionConstraint( new mxPoint(0.5,0),true), new mxConnectionConstraint( new mxPoint(0.25,0.2),false), new mxConnectionConstraint( new mxPoint(0.1,0.5),false), new mxConnectionConstraint( new mxPoint(0,0.75),true), new mxConnectionConstraint( new mxPoint(0.75,0.25),false), new mxConnectionConstraint( new mxPoint(0.9,0.5),false), new mxConnectionConstraint( new mxPoint(1,0.75),true), new mxConnectionConstraint( new mxPoint(0.25,1),true), new mxConnectionConstraint( new mxPoint(0.5,1),true), new mxConnectionConstraint( new mxPoint(0.75,1),true)];_0x9051x11[_0x7bc4[0]][_0x7bc4[147]]= [ new mxConnectionConstraint( new mxPoint(0,0.35),false), new mxConnectionConstraint( new mxPoint(0,0.5),false), new mxConnectionConstraint( new mxPoint(0,0.65),false), new mxConnectionConstraint( new mxPoint(1,0.35),false), new mxConnectionConstraint( new mxPoint(1,0.5),false), new mxConnectionConstraint( new mxPoint(1,0.65),false), new mxConnectionConstraint( new mxPoint(0.25,1),false), new mxConnectionConstraint( new mxPoint(0.75,0),false)];_0x9051x13[_0x7bc4[0]][_0x7bc4[147]]= [ new mxConnectionConstraint( new mxPoint(0.25,0),true), new mxConnectionConstraint( new mxPoint(0.5,0),true), new mxConnectionConstraint( new mxPoint(0.75,0),true), new mxConnectionConstraint( new mxPoint(0.25,1),true), new mxConnectionConstraint( new mxPoint(0.5,1),true), new mxConnectionConstraint( new mxPoint(0.75,1),true), new mxConnectionConstraint( new mxPoint(0.1,0.25),false), new mxConnectionConstraint( new mxPoint(0.2,0.5),false), new mxConnectionConstraint( new mxPoint(0.1,0.75),false), new mxConnectionConstraint( new mxPoint(0.9,0.25),false), new mxConnectionConstraint( new mxPoint(1,0.5),false), new mxConnectionConstraint( new mxPoint(0.9,0.75),false)];mxLine[_0x7bc4[0]][_0x7bc4[147]]= [ new mxConnectionConstraint( new mxPoint(0,0.5),false), new mxConnectionConstraint( new mxPoint(0.25,0.5),false), new mxConnectionConstraint( new mxPoint(0.75,0.5),false), new mxConnectionConstraint( new mxPoint(1,0.5),false)];_0x9051x26[_0x7bc4[0]][_0x7bc4[147]]= [ new mxConnectionConstraint( new mxPoint(0.5,0),false), new mxConnectionConstraint( new mxPoint(0.5,1),false)];mxEllipse[_0x7bc4[0]][_0x7bc4[147]]= [ new mxConnectionConstraint( new mxPoint(0,0),true), new mxConnectionConstraint( new mxPoint(1,0),true), new mxConnectionConstraint( new mxPoint(0,1),true), new mxConnectionConstraint( new mxPoint(1,1),true), new mxConnectionConstraint( new mxPoint(0.5,0),true), new mxConnectionConstraint( new mxPoint(0.5,1),true), new mxConnectionConstraint( new mxPoint(0,0.5),true), new mxConnectionConstraint( new mxPoint(1,0.5))];mxDoubleEllipse[_0x7bc4[0]][_0x7bc4[147]]= mxEllipse[_0x7bc4[0]][_0x7bc4[147]];mxRhombus[_0x7bc4[0]][_0x7bc4[147]]= mxEllipse[_0x7bc4[0]][_0x7bc4[147]];mxTriangle[_0x7bc4[0]][_0x7bc4[147]]= [ new mxConnectionConstraint( new mxPoint(0,0.25),true), new mxConnectionConstraint( new mxPoint(0,0.5),true), new mxConnectionConstraint( new mxPoint(0,0.75),true), new mxConnectionConstraint( new mxPoint(0.5,0),true), new mxConnectionConstraint( new mxPoint(0.5,1),true), new mxConnectionConstraint( new mxPoint(1,0.5),true)];mxHexagon[_0x7bc4[0]][_0x7bc4[147]]= [ new mxConnectionConstraint( new mxPoint(0.375,0),true), new mxConnectionConstraint( new mxPoint(0.5,0),true), new mxConnectionConstraint( new mxPoint(0.625,0),true), new mxConnectionConstraint( new mxPoint(0.125,0.25),false), new mxConnectionConstraint( new mxPoint(0,0.5),true), new mxConnectionConstraint( new mxPoint(0.125,0.75),false), new mxConnectionConstraint( new mxPoint(0.875,0.25),false), new mxConnectionConstraint( new mxPoint(0,0.5),true), new mxConnectionConstraint( new mxPoint(1,0.5),true), new mxConnectionConstraint( new mxPoint(0.875,0.75),false), new mxConnectionConstraint( new mxPoint(0.375,1),true), new mxConnectionConstraint( new mxPoint(0.5,1),true), new mxConnectionConstraint( new mxPoint(0.625,1),true)];mxCloud[_0x7bc4[0]][_0x7bc4[147]]= [ new mxConnectionConstraint( new mxPoint(0.25,0.25),false), new mxConnectionConstraint( new mxPoint(0.4,0.1),false), new mxConnectionConstraint( new mxPoint(0.16,0.55),false), new mxConnectionConstraint( new mxPoint(0.07,0.4),false), new mxConnectionConstraint( new mxPoint(0.31,0.8),false), new mxConnectionConstraint( new mxPoint(0.13,0.77),false), new mxConnectionConstraint( new mxPoint(0.8,0.8),false), new mxConnectionConstraint( new mxPoint(0.55,0.95),false), new mxConnectionConstraint( new mxPoint(0.875,0.5),false), new mxConnectionConstraint( new mxPoint(0.96,0.7),false), new mxConnectionConstraint( new mxPoint(0.625,0.2),false), new mxConnectionConstraint( new mxPoint(0.88,0.25),false)];mxArrow[_0x7bc4[0]][_0x7bc4[147]]= null})() \ No newline at end of file diff --git a/public/assets/plugins/square/js/Sidebar.js b/public/assets/plugins/square/js/Sidebar.js index 6e4129c..f2f6a17 100644 --- a/public/assets/plugins/square/js/Sidebar.js +++ b/public/assets/plugins/square/js/Sidebar.js @@ -1,932 +1 @@ -'use strict'; - -/** - * Construcs a new sidebar for the given editor. - */ -function Sidebar(editorUi, container) { - this.editorUi = editorUi; - this.container = container; - this.palettes = new Object(); - this.showTooltips = true; - this.graph = new Graph(document.createElement('div'), null, null, this.editorUi - .editor.graph.getStylesheet()); - this.graph.resetViewOnRootChange = false; - this.graph.foldingEnabled = false; - this.graph.setConnectable(false); - this.graph.autoScroll = false; - this.graph.setTooltips(false); - this.graph.setEnabled(false); - - // Container must be in the DOM for correct HTML rendering - this.graph.container.style.visibility = 'hidden'; - this.graph.container.style.position = 'absolute'; - document.body.appendChild(this.graph.container); - - if (!mxClient.IS_TOUCH) { - mxEvent.addListener(document, 'mouseup', mxUtils.bind(this, function() { - this.showTooltips = true; - })); - - // Enables tooltips after scroll - mxEvent.addListener(container, 'scroll', mxUtils.bind(this, function() { - this.showTooltips = true; - })); - - mxEvent.addListener(document, 'mousedown', mxUtils.bind(this, function() { - this.showTooltips = false; - this.hideTooltip(); - })); - - mxEvent.addListener(document, 'mousemove', mxUtils.bind(this, function(evt) { - var src = mxEvent.getSource(evt); - - while (src != null) { - if (src == this.currentElt) { - return; - } - - src = src.parentNode; - } - - this.hideTooltip(); - })); - - // Handles mouse leaving the window - mxEvent.addListener(document, 'mouseout', mxUtils.bind(this, function(evt) { - if (evt.toElement == null && evt.relatedTarget == null) { - this.hideTooltip(); - } - })); - } - - this.init(); - - // Pre-fetches tooltip image - new Image().src = IMAGE_PATH + '/tooltip.png'; -}; - -/** - * Adds all palettes to the sidebar. - */ -Sidebar.prototype.init = function() { - var dir = STENCIL_PATH; - console.log(dir); - - this.addImagePalette('entry', mxResources.get('entry'), dir + '/entry/', - '_128x128.png', ['start', 'finally', 'end'], [mxResources.get('start'), - mxResources.get('finally'), mxResources.get('end') - ]); - this.addImagePalette('call_management', mxResources.get('call_management'), - dir + '/call_management/', '_128x128.png', ['answer', 'hangup', 'dial', - 'ext_dial', 'queue', 'voicemail', 'callback' - ], [mxResources.get('answer'), mxResources.get('hangup'), mxResources.get( - 'dial'), mxResources.get('ext_dial'), mxResources.get('queue'), - mxResources.get('voicemail'), mxResources.get('callback') - ]); - this.addImagePalette('variable', mxResources.get('variable'), dir + - '/variable/', '_128x128.png', ['set', 'math'], [mxResources.get('set'), - mxResources.get('math') - ]); - this.addImagePalette('playback', mxResources.get('playback'), dir + - '/playback/', '_128x128.png', ['playback', 'menu', - 'saydigits', 'saynumber', 'sayphonetic', 'tts', 'ispeechtts', 'getdigits', 'getsecretdigits' - ], [mxResources.get('playback'), mxResources - .get('menu'), mxResources.get('saydigits'), mxResources.get('saynumber'), - mxResources.get('sayphonetic'), mxResources.get('tts'), mxResources.get( - 'ispeechtts'), mxResources.get('getdigits'), mxResources.get('getsecretdigits') - ]); - this.addImagePalette('recording', mxResources.get('recording'), dir + - '/recording/', '_128x128.png', ['record'], [mxResources.get('record')]); - this.addImagePalette('integrationServer', mxResources.get('integrationServer'), - dir + '/integration_server/', '_128x128.png', ['database', 'ispeechasr', - 'sendSMS', 'sendMail' - ], [ - mxResources.get('database'), mxResources.get('ispeechasr'), mxResources.get( - 'sendSMS'), mxResources.get( - 'sendMail') - ]); - this.addImagePalette('callflow', mxResources.get('callflow'), dir + - '/callflow/', '_128x128.png', ['gotoc', 'gotoif', 'gotoiftime', 'vswitch'], [ - mxResources.get('gotoc'), mxResources.get('gotoif'), mxResources.get( - 'gotoiftime'), mxResources.get('vswitch') - ]); - this.addImagePalette('stats', mxResources.get('stats'), dir + '/stats/', - '_128x128.png', [ - // 'queuelog', - 'goal' - ], [ - // mxResources.get('queuelog'), - mxResources.get('goal') - ]); - this.addImagePalette('general', mxResources.get('general'), dir + '/general/', - '_128x128.png', ['noop', 'system', 'agi', 'subproject', 'custom_app'], [ - mxResources.get( - 'noop'), mxResources.get('system'), mxResources.get('agi'), mxResources.get( - 'subproject'), mxResources.get( - 'custom_app') - ]); - -}; - -/** - * Specifies if tooltips should be visible. Default is true. - */ -Sidebar.prototype.enableTooltips = !mxClient.IS_TOUCH; - -/** - * Specifies the delay for the tooltip. Default is 16 px. - */ -Sidebar.prototype.tooltipBorder = 16; - -/** - * Specifies the delay for the tooltip. Default is 3 px. - */ -Sidebar.prototype.thumbBorder = 3; - -/** - * Specifies the delay for the tooltip. Default is 300 ms. - */ -Sidebar.prototype.tooltipDelay = 300; - -/** - * Specifies if edges should be used as templates if clicked. Default is true. - */ -Sidebar.prototype.installEdges = true; - -/** - * Specifies the URL of the gear image. - */ -Sidebar.prototype.gearImage = STENCIL_PATH + '/clipart/Gear_128x128.png'; - -/** - * Specifies the width of the thumbnails. - */ -Sidebar.prototype.thumbWidth = 34; - -/** - * Specifies the height of the thumbnails. - */ -Sidebar.prototype.thumbHeight = 34; - -/** - * Specifies the padding for the thumbnails. Default is 3. - */ -Sidebar.prototype.thumbPadding = 2; - -/** - * Specifies the size of the sidebar titles. - */ -Sidebar.prototype.sidebarTitleSize = 9; - -/** - * Specifies if titles in the sidebar should be enabled. - */ -Sidebar.prototype.sidebarTitles = false; - -/** - * Specifies if titles in the tooltips should be enabled. - */ -Sidebar.prototype.tooltipTitles = false; - -/** - * Adds all palettes to the sidebar. - */ -Sidebar.prototype.showTooltip = function(elt, cells, title, showLabel) { - if (this.enableTooltips && this.showTooltips) { - if (this.currentElt != elt) { - if (this.thread != null) { - window.clearTimeout(this.thread); - this.thread = null; - } - - var show = mxUtils.bind(this, function() { - // Lazy creation of the DOM nodes and graph instance - if (this.tooltip == null) { - this.tooltip = document.createElement('div'); - this.tooltip.className = 'geSidebarTooltip'; - document.body.appendChild(this.tooltip); - - this.graph2 = new Graph(this.tooltip, null, null, this.editorUi.editor.graph - .getStylesheet()); - this.graph2.view.setTranslate(this.tooltipBorder, this.tooltipBorder); - this.graph2.resetViewOnRootChange = false; - this.graph2.foldingEnabled = false; - this.graph2.autoScroll = false; - this.graph2.setTooltips(false); - this.graph2.setConnectable(false); - this.graph2.setEnabled(false); - - if (!mxClient.IS_SVG) { - this.graph2.view.canvas.style.position = 'relative'; - } - - this.tooltipImage = mxUtils.createImage(IMAGE_PATH + '/tooltip.png'); - this.tooltipImage.style.position = 'absolute'; - this.tooltipImage.style.width = '14px'; - this.tooltipImage.style.height = '27px'; - - document.body.appendChild(this.tooltipImage); - } - - this.tooltip.style.display = 'block'; - this.graph2.labelsVisible = (showLabel == null || showLabel); - this.graph2.model.clear(); - this.graph2.addCells(cells); - - var bounds = this.graph2.getGraphBounds(); - var width = bounds.width + 2 * this.tooltipBorder; - var height = bounds.height + 2 * this.tooltipBorder; - - if (mxClient.IS_QUIRKS) { - width += 4; - height += 4; - this.tooltip.style.overflow = 'hidden'; - } else { - this.tooltip.style.overflow = 'visible'; - } - - this.tooltipImage.style.visibility = 'visible'; - this.tooltip.style.width = width + 'px'; - - // Adds title for entry - if (this.tooltipTitles && title != null && title.length > 0) { - if (this.tooltipTitle == null) { - this.tooltipTitle = document.createElement('div'); - this.tooltipTitle.style.borderTop = '1px solid gray'; - this.tooltipTitle.style.textAlign = 'center'; - this.tooltipTitle.style.width = '100%'; - - // Oversize titles are cut-off currently. Should make tooltip wider later. - this.tooltipTitle.style.overflow = 'hidden'; - - if (mxClient.IS_SVG) { - this.tooltipTitle.style.paddingTop = '2px'; - } else { - this.tooltipTitle.style.position = 'absolute'; - this.tooltipTitle.style.paddingTop = '6px'; - } - - this.tooltip.appendChild(this.tooltipTitle); - } else { - this.tooltipTitle.innerHTML = ''; - } - - this.tooltipTitle.style.display = ''; - mxUtils.write(this.tooltipTitle, title); - - var dy = this.tooltipTitle.offsetHeight + 10; - height += dy; - - if (mxClient.IS_SVG) { - this.tooltipTitle.style.marginTop = (-dy) + 'px'; - } else { - height -= 6; - this.tooltipTitle.style.top = (height - dy) + 'px'; - } - } else if (this.tooltipTitle != null && this.tooltipTitle.parentNode != - null) { - this.tooltipTitle.style.display = 'none'; - } - - this.tooltip.style.height = height + 'px'; - var x0 = -Math.min(0, bounds.x - this.tooltipBorder); - var y0 = -Math.min(0, bounds.y - this.tooltipBorder); - - var left = this.container.clientWidth + this.editorUi.splitSize + 3; - var top = Math.max(0, (this.container.offsetTop + elt.offsetTop - this.container - .scrollTop - height / 2 + 16)); - - if (mxClient.IS_SVG) { - this.graph2.view.canvas.setAttribute('transform', 'translate(' + x0 + - ',' + y0 + ')'); - } else { - this.graph2.view.drawPane.style.left = x0 + 'px'; - this.graph2.view.drawPane.style.top = y0 + 'px'; - } - - // Workaround for ignored position CSS style in IE9 - // (changes to relative without the following line) - // Added width of the page-sidebar - left += document.getElementById('page-sidebar').offsetWidth; - // Added static height of the page-navbar - top += 90; - - this.tooltip.style.position = 'absolute'; - this.tooltip.style.left = left + 'px'; - this.tooltip.style.top = top + 'px'; - this.tooltipImage.style.left = (left - 13) + 'px'; - this.tooltipImage.style.top = (top + height / 2 - 13) + 'px'; - }); - - if (this.tooltip != null && this.tooltip.style.display != 'none') { - show(); - } else { - this.thread = window.setTimeout(show, this.tooltipDelay); - } - - this.currentElt = elt; - } - } -}; - -/** - * Hides the current tooltip. - */ -Sidebar.prototype.hideTooltip = function() { - if (this.thread != null) { - window.clearTimeout(this.thread); - this.thread = null; - } - - if (this.tooltip != null) { - this.tooltip.style.display = 'none'; - this.tooltipImage.style.visibility = 'hidden'; - this.currentElt = null; - } -}; - -/** - * Creates and returns the given title element. - */ -Sidebar.prototype.createTitle = function(label) { - var elt = document.createElement('a'); - elt.setAttribute('href', 'javascript:void(0);'); - elt.className = 'geTitle'; - mxUtils.write(elt, label); - - return elt; -}; - -/** - * Creates a thumbnail for the given cells. - */ -Sidebar.prototype.createThumb = function(cells, width, height, parent, title, - showLabel) { - this.graph.labelsVisible = (showLabel == null || showLabel); - this.graph.view.scaleAndTranslate(1, 0, 0); - this.graph.addCells(cells); - var bounds = this.graph.getGraphBounds(); - var corr = this.thumbBorder; - var s = Math.min((width - 2) / (bounds.width - bounds.x + corr), (height - 2) / - (bounds.height - bounds.y + corr)); - var x0 = -Math.min(bounds.x, 0); - var y0 = -Math.min(bounds.y, 0); - this.graph.view.scaleAndTranslate(s, x0, y0); - - bounds = this.graph.getGraphBounds(); - var dx = Math.max(0, Math.floor((width - bounds.width - bounds.x) / 2)); - var dy = Math.max(0, Math.floor((height - bounds.height - bounds.y) / 2)); - - var node = null; - - // For supporting HTML labels in IE9 standards mode the container is cloned instead - if (this.graph.dialect == mxConstants.DIALECT_SVG && !mxClient.NO_FO) { - node = this.graph.view.getCanvas().ownerSVGElement.cloneNode(true); - } - // LATER: Check if deep clone can be used for quirks if container in DOM - else { - node = this.graph.container.cloneNode(false); - node.innerHTML = this.graph.container.innerHTML; - } - - this.graph.getModel().clear(); - - // Catch-all event handling - if (mxClient.IS_IE6) { - parent.style.backgroundImage = 'url(' + this.editorUi.editor.transparentImage + - ')'; - } - - var dd = 3; - node.style.position = 'relative'; - node.style.overflow = 'hidden'; - node.style.cursor = 'pointer'; - node.style.left = (dx + dd) + 'px'; - node.style.top = (dy + dd) + 'px'; - node.style.width = width + 'px'; - node.style.height = height + 'px'; - node.style.visibility = ''; - node.style.minWidth = ''; - node.style.minHeight = ''; - - parent.appendChild(node); - - // Adds title for sidebar entries - if (this.sidebarTitles && title != null) { - var border = (mxClient.IS_QUIRKS) ? 2 * this.thumbPadding + 2 : 0; - parent.style.height = (this.thumbHeight + border + this.sidebarTitleSize + 8) + - 'px'; - - var div = document.createElement('div'); - div.style.fontSize = this.sidebarTitleSize + 'px'; - div.style.textAlign = 'center'; - div.style.whiteSpace = 'nowrap'; - - if (mxClient.IS_IE) { - div.style.height = (this.sidebarTitleSize + 12) + 'px'; - } - - div.style.paddingTop = '4px'; - mxUtils.write(div, title); - parent.appendChild(div); - } -}; - -/** - * Creates and returns a new palette item for the given image. - */ -Sidebar.prototype.createItem = function(cells, title, showLabel) { - var elt = document.createElement('a'); - elt.setAttribute('href', 'javascript:void(0);'); - elt.className = 'geItem'; - elt.style.overflow = 'hidden'; - var border = (mxClient.IS_QUIRKS) ? 8 + 2 * this.thumbPadding : 6; - elt.style.width = (this.thumbWidth + border) + 'px'; - elt.style.height = (this.thumbHeight + border) + 'px'; - elt.style.padding = this.thumbPadding + 'px'; - - // Blocks default click action - mxEvent.addListener(elt, 'click', function(evt) { - mxEvent.consume(evt); - }); - - this.createThumb(cells, this.thumbWidth, this.thumbHeight, elt, title, - showLabel); - - return elt; -}; - -/** - * Creates a drop handler for inserting the given cells. - */ -Sidebar.prototype.createDropHandler = function(cells, allowSplit) { - return function(graph, evt, target, x, y) { - if (graph.isEnabled()) { - cells = graph.getImportableCells(cells); - - if (cells.length > 0) { - var validDropTarget = (target != null) ? - graph.isValidDropTarget(target, cells, evt) : false; - var select = null; - - if (target != null && !validDropTarget) { - target = null; - } - - // Splits the target edge or inserts into target group - if (allowSplit && graph.isSplitEnabled() && graph.isSplitTarget(target, - cells, evt)) { - graph.splitEdge(target, cells, null, x, y); - select = cells; - } else if (cells.length > 0) { - select = graph.importCells(cells, x, y, target); - } - - if (select != null && select.length > 0) { - graph.scrollCellToVisible(select[0]); - graph.setSelectionCells(select); - } - } - } - }; -}; - -/** - * Creates and returns a preview element for the given width and height. - */ -Sidebar.prototype.createDragPreview = function(width, height) { - var elt = document.createElement('div'); - elt.style.border = '1px dashed black'; - elt.style.width = width + 'px'; - elt.style.height = height + 'px'; - - return elt; -}; - -/** - * Creates a drag source for the given element. - */ -Sidebar.prototype.createDragSource = function(elt, dropHandler, preview) { - var dragSource = mxUtils.makeDraggable(elt, this.editorUi.editor.graph, - dropHandler, - preview, 0, 0, this.editorUi.editor.graph.autoscroll, true, true); - - // Allows drop into cell only if target is a valid root - dragSource.getDropTarget = function(graph, x, y) { - var target = mxDragSource.prototype.getDropTarget.apply(this, arguments); - - if (!graph.isValidRoot(target)) { - target = null; - } - - return target; - }; - - return dragSource; -}; - -/** - * Adds a handler for inserting the cell with a single click. - */ -Sidebar.prototype.addClickHandler = function(elt, ds) { - var graph = this.editorUi.editor.graph; - var first = null; - - mxEvent.addGestureListeners(elt, function(evt) { - first = new mxPoint(mxEvent.getClientX(evt), mxEvent.getClientY(evt)); - }); - - var oldMouseUp = ds.mouseUp; - ds.mouseUp = function(evt) { - if (!mxEvent.isPopupTrigger(evt) && this.currentGraph == null && first != - null) { - var tol = graph.tolerance; - - if (Math.abs(first.x - mxEvent.getClientX(evt)) <= tol && - Math.abs(first.y - mxEvent.getClientY(evt)) <= tol) { - var gs = graph.getGridSize(); - ds.drop(graph, evt, null, gs, gs); - } - } - - oldMouseUp.apply(this, arguments); - first = null; - }; -}; - -/** - * Giuseppe Careri - * Create xml document vertex - */ -Sidebar.prototype.createXmlDocument = function(element, label, variables, - values) { - var doc = mxUtils.createXmlDocument(); - var node = doc.createElement(element) - node.setAttribute('label', label); - - variables.forEach(function(variable, index) { - node.setAttribute(variable, values[index] ? values[index] : ''); - }); - - return node; -} - -/** - * Giuseppe Careri - * Creates a drop handler for inserting the given cells. - */ -Sidebar.prototype.createVertexTemplate = function(style, width, height, value, - title, showLabel) { - var variables = []; - var values = []; - - switch (value) { - case 'answer': - break; - case 'start': - variables = ['answer']; - values = ['yes']; - break; - case 'ispeechasr': - variables = ['key', 'model', 'ispeech_asr_language', 'timeout', 'intKey', - 'beep' - ]; - values = ['', 0, 'it-IT', 1, '#', true]; - break; - case 'playback': - variables = ['file_id', 'opts']; - values = ['0']; - break; - case 'background': - variables = ['file_id', 'response', 'digit']; - values = ['0', '5', '1']; - break; - case 'menu': - variables = ['file_id', 'response', 'digit', 'retry', 'variable_id']; - values = ['0', '5', '1', '1', '0']; - break; - case 'getdigits': - variables = ['file_id', 'response', 'mindigit', 'maxdigit', 'retry', - 'variable_id' - ]; - values = ['0', '5', '1', '10', '1', '0']; - break; - case 'getsecretdigits': - variables = ['file_id', 'response', 'mindigit', 'maxdigit', 'retry', 'hiddendigitsnum', 'hiddendigitspos', - 'variable_id' - ]; - values = ['0', '5', '1', '10', '1', '0', 'first', '0']; - break; - case 'custom_app': - variables = ['application', 'options']; - values = ['', '']; - break; - case 'set': - variables = ['variable_id', 'variable_value']; - values = ['0', '']; - break; - case 'database': - variables = ['odbc_id', 'query', 'variable_id']; - values = ['0', '', '0']; - break; - case 'noop': - variables = ['output']; - values = []; - break; - case 'gotoc': - variables = ['context', 'extension']; - values = []; - break; - case 'system': - variables = ['variable_id', 'command']; - values = []; - break; - case 'agi': - variables = ['args', 'command']; - values = []; - break; - case 'gotoif': - variables = ['condition']; - values = []; - break; - case 'gotoiftime': - variables = ['interval_id']; - values = ['0']; - break; - case 'gotoifmultitime': - variables = ['interval_id']; - values = ['0']; - break; - case 'vswitch': - variables = ['variable_id']; - values = ['0']; - break; - case 'saydigits': - variables = ['digits', 'escape_digits']; - values = ['', '#']; - break; - case 'saynumber': - variables = ['number', 'escape_digits']; - values = ['', '#']; - break; - case 'sayphonetic': - variables = ['text', 'escape_digits']; - values = ['', '#']; - break; - case 'record': - variables = ['file', 'recordingFormat', 'timeout', 'escape_digits']; - values = ['', 'wav', '-1', '#']; - break; - case 'dial': - variables = ['sip_id', 'timeout', 'custom_app', 'url']; - values = ['0', '60']; - break; - case 'ext_dial': - variables = ['phone', 'trunk_name', 'timeout', 'opts', 'url']; - values = ['', '-1', '60']; - break; - case 'tts': - variables = ['text', 'google_tts_language']; - values = ['', 'it']; - break; - case 'ispeechtts': - variables = ['text', 'key', 'ispeech_tts_language', 'speed', 'intKey']; - values = ['', '', 'euritalianfemale', '0', '#']; - break; - case 'queue': - variables = ['queue_id', 'opts', 'url', 'file_id', 'timeout', 'agi', - 'macro', 'gosub', 'position' - ]; - values = ['-1', '', '', '0', '300']; - break; - case 'voicemail': - variables = ['mailbox', 'options']; - values = ['', '']; - break; - case 'subproject': - variables = ['project_id']; - values = ['0']; - break; - case 'math': - variables = ['operation', 'variable_id']; - values = ['', '0']; - break; - case 'queuelog': - variables = ['queuename', 'agent', 'queue_event', 'data1', 'data2', 'data3', - 'data4', 'data5' - ]; - values = []; - break; - case 'goal': - variables = ['goalname']; - values = []; - break; - case 'callback': - variables = ['name', 'phone', 'list_id', 'delay']; - values = ['', '{CALLERID(num)}', '0', '5']; - break; - case 'sendSMS': - variables = ['account_id', 'to', 'sms_text']; - values = ['0']; - break; - case 'sendMail': - variables = ['account_id', 'template_id', 'to', 'cc', 'subject', 'text']; - values = ['0']; - break; - - default: - variables = []; - values = []; - break; - } - - var node = this.createXmlDocument(value, title, variables, values); - - //var cells = [new mxCell((value != null) ? value : '', new mxGeometry(0, 0, width, height), style)]; - var cells = [new mxCell(node, new mxGeometry(0, 0, width, height), style)]; - cells[0].vertex = true; - - return this.createVertexTemplateFromCells(cells, width, height, title, - showLabel); -}; - -/** - * Creates a drop handler for inserting the given cells. - */ -Sidebar.prototype.createVertexTemplateFromCells = function(cells, width, height, - title, showLabel) { - var elt = this.createItem(cells, title, showLabel); - var ds = this.createDragSource(elt, this.createDropHandler(cells, true), this - .createDragPreview(width, height)); - this.addClickHandler(elt, ds); - - // Uses guides for vertices only if enabled in graph - ds.isGuidesEnabled = mxUtils.bind(this, function() { - return this.editorUi.editor.graph.graphHandler.guidesEnabled; - }); - - // Shows a tooltip with the rendered cell - if (!touchStyle) { - mxEvent.addListener(elt, 'mousemove', mxUtils.bind(this, function(evt) { - this.showTooltip(elt, cells, title, showLabel); - })); - } - - return elt; -}; - -/** - * Creates a drop handler for inserting the given cells. - */ -Sidebar.prototype.createEdgeTemplate = function(style, width, height, value, - title, showLabel) { - var cells = [new mxCell((value != null) ? value : '', new mxGeometry(0, 0, - width, height), style)]; - cells[0].geometry.setTerminalPoint(new mxPoint(0, height), true); - cells[0].geometry.setTerminalPoint(new mxPoint(width, 0), false); - cells[0].geometry.relative = true; - cells[0].edge = true; - - return this.createEdgeTemplateFromCells(cells, width, height, title, - showLabel); -}; - -/** - * Creates a drop handler for inserting the given cells. - */ -Sidebar.prototype.createEdgeTemplateFromCells = function(cells, width, height, - title, showLabel) { - var elt = this.createItem(cells, title, showLabel); - this.createDragSource(elt, this.createDropHandler(cells, false), this.createDragPreview( - width, height)); - - // Installs the default edge - var graph = this.editorUi.editor.graph; - mxEvent.addListener(elt, 'click', mxUtils.bind(this, function(evt) { - if (this.installEdges) { - graph.setDefaultEdge(cells[0]); - } - - // Highlights the entry for 200ms - elt.style.backgroundColor = '#ffffff'; - - window.setTimeout(function() { - elt.style.backgroundColor = ''; - }, 300); - - mxEvent.consume(evt); - })); - - // Shows a tooltip with the rendered cell - if (!touchStyle) { - mxEvent.addListener(elt, 'mousemove', mxUtils.bind(this, function(evt) { - this.showTooltip(elt, cells, title, showLabel); - })); - } - - return elt; -}; - -/** - * Adds the given palette. - */ -Sidebar.prototype.addPalette = function(id, title, expanded, onInit) { - var elt = this.createTitle(title); - this.container.appendChild(elt); - - var div = document.createElement('div'); - div.className = 'geSidebar'; - - if (expanded) { - onInit(div); - onInit = null; - } else { - div.style.display = 'none'; - } - - this.addFoldingHandler(elt, div, onInit); - - var outer = document.createElement('div'); - outer.appendChild(div); - this.container.appendChild(outer); - - // Keeps references to the DOM nodes - if (id != null) { - this.palettes[id] = [elt, outer]; - } -}; - -/** - * Create the given title element. - */ -Sidebar.prototype.addFoldingHandler = function(title, content, funct) { - var initialized = false; - - title.style.backgroundImage = (content.style.display == 'none') ? - 'url(' + IMAGE_PATH + '/collapsed.gif)' : 'url(' + IMAGE_PATH + - '/expanded.gif)'; - title.style.backgroundRepeat = 'no-repeat'; - title.style.backgroundPosition = '100% 50%'; - - mxEvent.addListener(title, 'click', function(evt) { - if (content.style.display == 'none') { - if (!initialized) { - initialized = true; - - if (funct != null) { - title.style.cursor = 'wait'; - window.setTimeout(function() { - funct(content); - title.style.cursor = ''; - }, 0); - } - } - - title.style.backgroundImage = 'url(' + IMAGE_PATH + '/expanded.gif)'; - content.style.display = 'block'; - } else { - title.style.backgroundImage = 'url(' + IMAGE_PATH + '/collapsed.gif)'; - content.style.display = 'none'; - } - - mxEvent.consume(evt); - }); -}; - -/** - * Removes the palette for the given ID. - */ -Sidebar.prototype.removePalette = function(id) { - var elts = this.palettes[id]; - - if (elts != null) { - this.palettes[id] = null; - - for (var i = 0; i < elts.length; i++) { - this.container.removeChild(elts[i]); - } - - return true; - } - - return false; -}; - -/** - * Adds the given image palette. - */ -Sidebar.prototype.addImagePalette = function(id, title, prefix, postfix, items, - titles) { - // Giuseppe Careri - // Expanded Sidebar only entry - this.addPalette(id, title, (id === 'entry'), mxUtils.bind(this, function( - content) { - var showTitles = titles != null; - - for (var i = 0; i < items.length; i++) { - var icon = prefix + items[i] + postfix; - content.appendChild(this.createVertexTemplate('image;image=' + icon, 80, - 80, items[i], (showTitles) ? titles[i] : null, showTitles)); - } - })); -}; +var _0x57ac=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x64\x69\x74\x6F\x72\x55\x69","\x63\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x70\x61\x6C\x65\x74\x74\x65\x73","\x73\x68\x6F\x77\x54\x6F\x6F\x6C\x74\x69\x70\x73","\x67\x72\x61\x70\x68","\x64\x69\x76","\x63\x72\x65\x61\x74\x65\x45\x6C\x65\x6D\x65\x6E\x74","\x67\x65\x74\x53\x74\x79\x6C\x65\x73\x68\x65\x65\x74","\x65\x64\x69\x74\x6F\x72","\x72\x65\x73\x65\x74\x56\x69\x65\x77\x4F\x6E\x52\x6F\x6F\x74\x43\x68\x61\x6E\x67\x65","\x66\x6F\x6C\x64\x69\x6E\x67\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x43\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65","\x61\x75\x74\x6F\x53\x63\x72\x6F\x6C\x6C","\x73\x65\x74\x54\x6F\x6F\x6C\x74\x69\x70\x73","\x73\x65\x74\x45\x6E\x61\x62\x6C\x65\x64","\x76\x69\x73\x69\x62\x69\x6C\x69\x74\x79","\x73\x74\x79\x6C\x65","\x68\x69\x64\x64\x65\x6E","\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x61\x62\x73\x6F\x6C\x75\x74\x65","\x61\x70\x70\x65\x6E\x64\x43\x68\x69\x6C\x64","\x62\x6F\x64\x79","\x49\x53\x5F\x54\x4F\x55\x43\x48","\x6D\x6F\x75\x73\x65\x75\x70","\x62\x69\x6E\x64","\x61\x64\x64\x4C\x69\x73\x74\x65\x6E\x65\x72","\x73\x63\x72\x6F\x6C\x6C","\x6D\x6F\x75\x73\x65\x64\x6F\x77\x6E","\x68\x69\x64\x65\x54\x6F\x6F\x6C\x74\x69\x70","\x6D\x6F\x75\x73\x65\x6D\x6F\x76\x65","\x67\x65\x74\x53\x6F\x75\x72\x63\x65","\x63\x75\x72\x72\x65\x6E\x74\x45\x6C\x74","\x70\x61\x72\x65\x6E\x74\x4E\x6F\x64\x65","\x6D\x6F\x75\x73\x65\x6F\x75\x74","\x74\x6F\x45\x6C\x65\x6D\x65\x6E\x74","\x72\x65\x6C\x61\x74\x65\x64\x54\x61\x72\x67\x65\x74","\x69\x6E\x69\x74","\x73\x72\x63","\x2F\x74\x6F\x6F\x6C\x74\x69\x70\x2E\x70\x6E\x67","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x6C\x6F\x67","\x65\x6E\x74\x72\x79","\x67\x65\x74","\x2F\x65\x6E\x74\x72\x79\x2F","\x5F\x31\x32\x38\x78\x31\x32\x38\x2E\x70\x6E\x67","\x73\x74\x61\x72\x74","\x66\x69\x6E\x61\x6C\x6C\x79","\x65\x6E\x64","\x61\x64\x64\x49\x6D\x61\x67\x65\x50\x61\x6C\x65\x74\x74\x65","\x63\x61\x6C\x6C\x5F\x6D\x61\x6E\x61\x67\x65\x6D\x65\x6E\x74","\x2F\x63\x61\x6C\x6C\x5F\x6D\x61\x6E\x61\x67\x65\x6D\x65\x6E\x74\x2F","\x61\x6E\x73\x77\x65\x72","\x68\x61\x6E\x67\x75\x70","\x64\x69\x61\x6C","\x65\x78\x74\x5F\x64\x69\x61\x6C","\x71\x75\x65\x75\x65","\x76\x6F\x69\x63\x65\x6D\x61\x69\x6C","\x63\x61\x6C\x6C\x62\x61\x63\x6B","\x76\x61\x72\x69\x61\x62\x6C\x65","\x2F\x76\x61\x72\x69\x61\x62\x6C\x65\x2F","\x73\x65\x74","\x6D\x61\x74\x68","\x70\x6C\x61\x79\x62\x61\x63\x6B","\x2F\x70\x6C\x61\x79\x62\x61\x63\x6B\x2F","\x6D\x65\x6E\x75","\x73\x61\x79\x64\x69\x67\x69\x74\x73","\x73\x61\x79\x6E\x75\x6D\x62\x65\x72","\x73\x61\x79\x70\x68\x6F\x6E\x65\x74\x69\x63","\x74\x74\x73","\x69\x73\x70\x65\x65\x63\x68\x74\x74\x73","\x67\x65\x74\x64\x69\x67\x69\x74\x73","\x67\x65\x74\x73\x65\x63\x72\x65\x74\x64\x69\x67\x69\x74\x73","\x72\x65\x63\x6F\x72\x64\x69\x6E\x67","\x2F\x72\x65\x63\x6F\x72\x64\x69\x6E\x67\x2F","\x72\x65\x63\x6F\x72\x64","\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x53\x65\x72\x76\x65\x72","\x2F\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x5F\x73\x65\x72\x76\x65\x72\x2F","\x64\x61\x74\x61\x62\x61\x73\x65","\x69\x73\x70\x65\x65\x63\x68\x61\x73\x72","\x73\x65\x6E\x64\x53\x4D\x53","\x73\x65\x6E\x64\x4D\x61\x69\x6C","\x63\x61\x6C\x6C\x66\x6C\x6F\x77","\x2F\x63\x61\x6C\x6C\x66\x6C\x6F\x77\x2F","\x67\x6F\x74\x6F\x63","\x67\x6F\x74\x6F\x69\x66","\x67\x6F\x74\x6F\x69\x66\x74\x69\x6D\x65","\x76\x73\x77\x69\x74\x63\x68","\x73\x74\x61\x74\x73","\x2F\x73\x74\x61\x74\x73\x2F","\x67\x6F\x61\x6C","\x67\x65\x6E\x65\x72\x61\x6C","\x2F\x67\x65\x6E\x65\x72\x61\x6C\x2F","\x6E\x6F\x6F\x70","\x73\x79\x73\x74\x65\x6D","\x61\x67\x69","\x73\x75\x62\x70\x72\x6F\x6A\x65\x63\x74","\x63\x75\x73\x74\x6F\x6D\x5F\x61\x70\x70","\x65\x6E\x61\x62\x6C\x65\x54\x6F\x6F\x6C\x74\x69\x70\x73","\x74\x6F\x6F\x6C\x74\x69\x70\x42\x6F\x72\x64\x65\x72","\x74\x68\x75\x6D\x62\x42\x6F\x72\x64\x65\x72","\x74\x6F\x6F\x6C\x74\x69\x70\x44\x65\x6C\x61\x79","\x69\x6E\x73\x74\x61\x6C\x6C\x45\x64\x67\x65\x73","\x67\x65\x61\x72\x49\x6D\x61\x67\x65","\x2F\x63\x6C\x69\x70\x61\x72\x74\x2F\x47\x65\x61\x72\x5F\x31\x32\x38\x78\x31\x32\x38\x2E\x70\x6E\x67","\x74\x68\x75\x6D\x62\x57\x69\x64\x74\x68","\x74\x68\x75\x6D\x62\x48\x65\x69\x67\x68\x74","\x74\x68\x75\x6D\x62\x50\x61\x64\x64\x69\x6E\x67","\x73\x69\x64\x65\x62\x61\x72\x54\x69\x74\x6C\x65\x53\x69\x7A\x65","\x73\x69\x64\x65\x62\x61\x72\x54\x69\x74\x6C\x65\x73","\x74\x6F\x6F\x6C\x74\x69\x70\x54\x69\x74\x6C\x65\x73","\x73\x68\x6F\x77\x54\x6F\x6F\x6C\x74\x69\x70","\x74\x68\x72\x65\x61\x64","\x63\x6C\x65\x61\x72\x54\x69\x6D\x65\x6F\x75\x74","\x74\x6F\x6F\x6C\x74\x69\x70","\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65","\x67\x65\x53\x69\x64\x65\x62\x61\x72\x54\x6F\x6F\x6C\x74\x69\x70","\x67\x72\x61\x70\x68\x32","\x73\x65\x74\x54\x72\x61\x6E\x73\x6C\x61\x74\x65","\x76\x69\x65\x77","\x49\x53\x5F\x53\x56\x47","\x63\x61\x6E\x76\x61\x73","\x72\x65\x6C\x61\x74\x69\x76\x65","\x74\x6F\x6F\x6C\x74\x69\x70\x49\x6D\x61\x67\x65","\x63\x72\x65\x61\x74\x65\x49\x6D\x61\x67\x65","\x77\x69\x64\x74\x68","\x31\x34\x70\x78","\x68\x65\x69\x67\x68\x74","\x32\x37\x70\x78","\x64\x69\x73\x70\x6C\x61\x79","\x62\x6C\x6F\x63\x6B","\x6C\x61\x62\x65\x6C\x73\x56\x69\x73\x69\x62\x6C\x65","\x63\x6C\x65\x61\x72","\x6D\x6F\x64\x65\x6C","\x61\x64\x64\x43\x65\x6C\x6C\x73","\x67\x65\x74\x47\x72\x61\x70\x68\x42\x6F\x75\x6E\x64\x73","\x49\x53\x5F\x51\x55\x49\x52\x4B\x53","\x6F\x76\x65\x72\x66\x6C\x6F\x77","\x76\x69\x73\x69\x62\x6C\x65","\x70\x78","\x6C\x65\x6E\x67\x74\x68","\x74\x6F\x6F\x6C\x74\x69\x70\x54\x69\x74\x6C\x65","\x62\x6F\x72\x64\x65\x72\x54\x6F\x70","\x31\x70\x78\x20\x73\x6F\x6C\x69\x64\x20\x67\x72\x61\x79","\x74\x65\x78\x74\x41\x6C\x69\x67\x6E","\x63\x65\x6E\x74\x65\x72","\x31\x30\x30\x25","\x70\x61\x64\x64\x69\x6E\x67\x54\x6F\x70","\x32\x70\x78","\x36\x70\x78","\x69\x6E\x6E\x65\x72\x48\x54\x4D\x4C","","\x77\x72\x69\x74\x65","\x6F\x66\x66\x73\x65\x74\x48\x65\x69\x67\x68\x74","\x6D\x61\x72\x67\x69\x6E\x54\x6F\x70","\x74\x6F\x70","\x6E\x6F\x6E\x65","\x78","\x6D\x69\x6E","\x79","\x63\x6C\x69\x65\x6E\x74\x57\x69\x64\x74\x68","\x73\x70\x6C\x69\x74\x53\x69\x7A\x65","\x6F\x66\x66\x73\x65\x74\x54\x6F\x70","\x73\x63\x72\x6F\x6C\x6C\x54\x6F\x70","\x6D\x61\x78","\x74\x72\x61\x6E\x73\x66\x6F\x72\x6D","\x74\x72\x61\x6E\x73\x6C\x61\x74\x65\x28","\x2C","\x29","\x73\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x6C\x65\x66\x74","\x64\x72\x61\x77\x50\x61\x6E\x65","\x6F\x66\x66\x73\x65\x74\x57\x69\x64\x74\x68","\x70\x61\x67\x65\x2D\x73\x69\x64\x65\x62\x61\x72","\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74\x42\x79\x49\x64","\x73\x65\x74\x54\x69\x6D\x65\x6F\x75\x74","\x63\x72\x65\x61\x74\x65\x54\x69\x74\x6C\x65","\x61","\x68\x72\x65\x66","\x6A\x61\x76\x61\x73\x63\x72\x69\x70\x74\x3A\x76\x6F\x69\x64\x28\x30\x29\x3B","\x67\x65\x54\x69\x74\x6C\x65","\x63\x72\x65\x61\x74\x65\x54\x68\x75\x6D\x62","\x73\x63\x61\x6C\x65\x41\x6E\x64\x54\x72\x61\x6E\x73\x6C\x61\x74\x65","\x66\x6C\x6F\x6F\x72","\x64\x69\x61\x6C\x65\x63\x74","\x44\x49\x41\x4C\x45\x43\x54\x5F\x53\x56\x47","\x4E\x4F\x5F\x46\x4F","\x63\x6C\x6F\x6E\x65\x4E\x6F\x64\x65","\x6F\x77\x6E\x65\x72\x53\x56\x47\x45\x6C\x65\x6D\x65\x6E\x74","\x67\x65\x74\x43\x61\x6E\x76\x61\x73","\x67\x65\x74\x4D\x6F\x64\x65\x6C","\x49\x53\x5F\x49\x45\x36","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x49\x6D\x61\x67\x65","\x75\x72\x6C\x28","\x74\x72\x61\x6E\x73\x70\x61\x72\x65\x6E\x74\x49\x6D\x61\x67\x65","\x63\x75\x72\x73\x6F\x72","\x70\x6F\x69\x6E\x74\x65\x72","\x6D\x69\x6E\x57\x69\x64\x74\x68","\x6D\x69\x6E\x48\x65\x69\x67\x68\x74","\x66\x6F\x6E\x74\x53\x69\x7A\x65","\x77\x68\x69\x74\x65\x53\x70\x61\x63\x65","\x6E\x6F\x77\x72\x61\x70","\x49\x53\x5F\x49\x45","\x34\x70\x78","\x63\x72\x65\x61\x74\x65\x49\x74\x65\x6D","\x67\x65\x49\x74\x65\x6D","\x70\x61\x64\x64\x69\x6E\x67","\x63\x6C\x69\x63\x6B","\x63\x6F\x6E\x73\x75\x6D\x65","\x63\x72\x65\x61\x74\x65\x44\x72\x6F\x70\x48\x61\x6E\x64\x6C\x65\x72","\x69\x73\x45\x6E\x61\x62\x6C\x65\x64","\x67\x65\x74\x49\x6D\x70\x6F\x72\x74\x61\x62\x6C\x65\x43\x65\x6C\x6C\x73","\x69\x73\x56\x61\x6C\x69\x64\x44\x72\x6F\x70\x54\x61\x72\x67\x65\x74","\x69\x73\x53\x70\x6C\x69\x74\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x53\x70\x6C\x69\x74\x54\x61\x72\x67\x65\x74","\x73\x70\x6C\x69\x74\x45\x64\x67\x65","\x69\x6D\x70\x6F\x72\x74\x43\x65\x6C\x6C\x73","\x73\x63\x72\x6F\x6C\x6C\x43\x65\x6C\x6C\x54\x6F\x56\x69\x73\x69\x62\x6C\x65","\x73\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73","\x63\x72\x65\x61\x74\x65\x44\x72\x61\x67\x50\x72\x65\x76\x69\x65\x77","\x62\x6F\x72\x64\x65\x72","\x31\x70\x78\x20\x64\x61\x73\x68\x65\x64\x20\x62\x6C\x61\x63\x6B","\x63\x72\x65\x61\x74\x65\x44\x72\x61\x67\x53\x6F\x75\x72\x63\x65","\x61\x75\x74\x6F\x73\x63\x72\x6F\x6C\x6C","\x6D\x61\x6B\x65\x44\x72\x61\x67\x67\x61\x62\x6C\x65","\x67\x65\x74\x44\x72\x6F\x70\x54\x61\x72\x67\x65\x74","\x61\x70\x70\x6C\x79","\x69\x73\x56\x61\x6C\x69\x64\x52\x6F\x6F\x74","\x61\x64\x64\x43\x6C\x69\x63\x6B\x48\x61\x6E\x64\x6C\x65\x72","\x67\x65\x74\x43\x6C\x69\x65\x6E\x74\x58","\x67\x65\x74\x43\x6C\x69\x65\x6E\x74\x59","\x61\x64\x64\x47\x65\x73\x74\x75\x72\x65\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x6D\x6F\x75\x73\x65\x55\x70","\x69\x73\x50\x6F\x70\x75\x70\x54\x72\x69\x67\x67\x65\x72","\x63\x75\x72\x72\x65\x6E\x74\x47\x72\x61\x70\x68","\x74\x6F\x6C\x65\x72\x61\x6E\x63\x65","\x61\x62\x73","\x67\x65\x74\x47\x72\x69\x64\x53\x69\x7A\x65","\x64\x72\x6F\x70","\x63\x72\x65\x61\x74\x65\x58\x6D\x6C\x44\x6F\x63\x75\x6D\x65\x6E\x74","\x6C\x61\x62\x65\x6C","\x66\x6F\x72\x45\x61\x63\x68","\x63\x72\x65\x61\x74\x65\x56\x65\x72\x74\x65\x78\x54\x65\x6D\x70\x6C\x61\x74\x65","\x79\x65\x73","\x6B\x65\x79","\x69\x73\x70\x65\x65\x63\x68\x5F\x61\x73\x72\x5F\x6C\x61\x6E\x67\x75\x61\x67\x65","\x74\x69\x6D\x65\x6F\x75\x74","\x69\x6E\x74\x4B\x65\x79","\x62\x65\x65\x70","\x69\x74\x2D\x49\x54","\x23","\x66\x69\x6C\x65\x5F\x69\x64","\x6F\x70\x74\x73","\x30","\x72\x65\x73\x70\x6F\x6E\x73\x65","\x64\x69\x67\x69\x74","\x35","\x31","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64","\x72\x65\x74\x72\x79","\x76\x61\x72\x69\x61\x62\x6C\x65\x5F\x69\x64","\x6D\x69\x6E\x64\x69\x67\x69\x74","\x6D\x61\x78\x64\x69\x67\x69\x74","\x31\x30","\x68\x69\x64\x64\x65\x6E\x64\x69\x67\x69\x74\x73\x6E\x75\x6D","\x68\x69\x64\x64\x65\x6E\x64\x69\x67\x69\x74\x73\x70\x6F\x73","\x66\x69\x72\x73\x74","\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x6F\x70\x74\x69\x6F\x6E\x73","\x76\x61\x72\x69\x61\x62\x6C\x65\x5F\x76\x61\x6C\x75\x65","\x6F\x64\x62\x63\x5F\x69\x64","\x71\x75\x65\x72\x79","\x6F\x75\x74\x70\x75\x74","\x63\x6F\x6E\x74\x65\x78\x74","\x65\x78\x74\x65\x6E\x73\x69\x6F\x6E","\x63\x6F\x6D\x6D\x61\x6E\x64","\x61\x72\x67\x73","\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E","\x69\x6E\x74\x65\x72\x76\x61\x6C\x5F\x69\x64","\x67\x6F\x74\x6F\x69\x66\x6D\x75\x6C\x74\x69\x74\x69\x6D\x65","\x64\x69\x67\x69\x74\x73","\x65\x73\x63\x61\x70\x65\x5F\x64\x69\x67\x69\x74\x73","\x6E\x75\x6D\x62\x65\x72","\x74\x65\x78\x74","\x66\x69\x6C\x65","\x72\x65\x63\x6F\x72\x64\x69\x6E\x67\x46\x6F\x72\x6D\x61\x74","\x77\x61\x76","\x2D\x31","\x73\x69\x70\x5F\x69\x64","\x75\x72\x6C","\x36\x30","\x70\x68\x6F\x6E\x65","\x74\x72\x75\x6E\x6B\x5F\x6E\x61\x6D\x65","\x67\x6F\x6F\x67\x6C\x65\x5F\x74\x74\x73\x5F\x6C\x61\x6E\x67\x75\x61\x67\x65","\x69\x74","\x69\x73\x70\x65\x65\x63\x68\x5F\x74\x74\x73\x5F\x6C\x61\x6E\x67\x75\x61\x67\x65","\x73\x70\x65\x65\x64","\x65\x75\x72\x69\x74\x61\x6C\x69\x61\x6E\x66\x65\x6D\x61\x6C\x65","\x71\x75\x65\x75\x65\x5F\x69\x64","\x6D\x61\x63\x72\x6F","\x67\x6F\x73\x75\x62","\x33\x30\x30","\x6D\x61\x69\x6C\x62\x6F\x78","\x70\x72\x6F\x6A\x65\x63\x74\x5F\x69\x64","\x6F\x70\x65\x72\x61\x74\x69\x6F\x6E","\x71\x75\x65\x75\x65\x6E\x61\x6D\x65","\x61\x67\x65\x6E\x74","\x71\x75\x65\x75\x65\x5F\x65\x76\x65\x6E\x74","\x64\x61\x74\x61\x31","\x64\x61\x74\x61\x32","\x64\x61\x74\x61\x33","\x64\x61\x74\x61\x34","\x64\x61\x74\x61\x35","\x71\x75\x65\x75\x65\x6C\x6F\x67","\x67\x6F\x61\x6C\x6E\x61\x6D\x65","\x6E\x61\x6D\x65","\x6C\x69\x73\x74\x5F\x69\x64","\x64\x65\x6C\x61\x79","\x7B\x43\x41\x4C\x4C\x45\x52\x49\x44\x28\x6E\x75\x6D\x29\x7D","\x61\x63\x63\x6F\x75\x6E\x74\x5F\x69\x64","\x74\x6F","\x73\x6D\x73\x5F\x74\x65\x78\x74","\x74\x65\x6D\x70\x6C\x61\x74\x65\x5F\x69\x64","\x63\x63","\x73\x75\x62\x6A\x65\x63\x74","\x76\x65\x72\x74\x65\x78","\x63\x72\x65\x61\x74\x65\x56\x65\x72\x74\x65\x78\x54\x65\x6D\x70\x6C\x61\x74\x65\x46\x72\x6F\x6D\x43\x65\x6C\x6C\x73","\x69\x73\x47\x75\x69\x64\x65\x73\x45\x6E\x61\x62\x6C\x65\x64","\x67\x75\x69\x64\x65\x73\x45\x6E\x61\x62\x6C\x65\x64","\x67\x72\x61\x70\x68\x48\x61\x6E\x64\x6C\x65\x72","\x63\x72\x65\x61\x74\x65\x45\x64\x67\x65\x54\x65\x6D\x70\x6C\x61\x74\x65","\x73\x65\x74\x54\x65\x72\x6D\x69\x6E\x61\x6C\x50\x6F\x69\x6E\x74","\x67\x65\x6F\x6D\x65\x74\x72\x79","\x65\x64\x67\x65","\x63\x72\x65\x61\x74\x65\x45\x64\x67\x65\x54\x65\x6D\x70\x6C\x61\x74\x65\x46\x72\x6F\x6D\x43\x65\x6C\x6C\x73","\x73\x65\x74\x44\x65\x66\x61\x75\x6C\x74\x45\x64\x67\x65","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x43\x6F\x6C\x6F\x72","\x23\x66\x66\x66\x66\x66\x66","\x61\x64\x64\x50\x61\x6C\x65\x74\x74\x65","\x67\x65\x53\x69\x64\x65\x62\x61\x72","\x61\x64\x64\x46\x6F\x6C\x64\x69\x6E\x67\x48\x61\x6E\x64\x6C\x65\x72","\x2F\x63\x6F\x6C\x6C\x61\x70\x73\x65\x64\x2E\x67\x69\x66\x29","\x2F\x65\x78\x70\x61\x6E\x64\x65\x64\x2E\x67\x69\x66\x29","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x52\x65\x70\x65\x61\x74","\x6E\x6F\x2D\x72\x65\x70\x65\x61\x74","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x31\x30\x30\x25\x20\x35\x30\x25","\x77\x61\x69\x74","\x72\x65\x6D\x6F\x76\x65\x50\x61\x6C\x65\x74\x74\x65","\x72\x65\x6D\x6F\x76\x65\x43\x68\x69\x6C\x64","\x69\x6D\x61\x67\x65\x3B\x69\x6D\x61\x67\x65\x3D"];_0x57ac[0];function Sidebar(_0xbae3x2,_0xbae3x3){this[_0x57ac[1]]= _0xbae3x2;this[_0x57ac[2]]= _0xbae3x3;this[_0x57ac[3]]= new Object();this[_0x57ac[4]]= true;this[_0x57ac[5]]= new Graph(document[_0x57ac[7]](_0x57ac[6]),null,null,this[_0x57ac[1]][_0x57ac[9]][_0x57ac[5]][_0x57ac[8]]());this[_0x57ac[5]][_0x57ac[10]]= false;this[_0x57ac[5]][_0x57ac[11]]= false;this[_0x57ac[5]][_0x57ac[12]](false);this[_0x57ac[5]][_0x57ac[13]]= false;this[_0x57ac[5]][_0x57ac[14]](false);this[_0x57ac[5]][_0x57ac[15]](false);this[_0x57ac[5]][_0x57ac[2]][_0x57ac[17]][_0x57ac[16]]= _0x57ac[18];this[_0x57ac[5]][_0x57ac[2]][_0x57ac[17]][_0x57ac[19]]= _0x57ac[20];document[_0x57ac[22]][_0x57ac[21]](this[_0x57ac[5]][_0x57ac[2]]);if(!mxClient[_0x57ac[23]]){mxEvent[_0x57ac[26]](document,_0x57ac[24],mxUtils[_0x57ac[25]](this,function(){this[_0x57ac[4]]= true}));mxEvent[_0x57ac[26]](_0xbae3x3,_0x57ac[27],mxUtils[_0x57ac[25]](this,function(){this[_0x57ac[4]]= true}));mxEvent[_0x57ac[26]](document,_0x57ac[28],mxUtils[_0x57ac[25]](this,function(){this[_0x57ac[4]]= false;this[_0x57ac[29]]()}));mxEvent[_0x57ac[26]](document,_0x57ac[30],mxUtils[_0x57ac[25]](this,function(_0xbae3x4){var _0xbae3x5=mxEvent[_0x57ac[31]](_0xbae3x4);while(_0xbae3x5!= null){if(_0xbae3x5== this[_0x57ac[32]]){return};_0xbae3x5= _0xbae3x5[_0x57ac[33]]};this[_0x57ac[29]]()}));mxEvent[_0x57ac[26]](document,_0x57ac[34],mxUtils[_0x57ac[25]](this,function(_0xbae3x4){if(_0xbae3x4[_0x57ac[35]]== null&& _0xbae3x4[_0x57ac[36]]== null){this[_0x57ac[29]]()}}))};this[_0x57ac[37]](); new Image()[_0x57ac[38]]= IMAGE_PATH+ _0x57ac[39]}Sidebar[_0x57ac[40]][_0x57ac[37]]= function(){var _0xbae3x6=STENCIL_PATH;console[_0x57ac[41]](_0xbae3x6);this[_0x57ac[49]](_0x57ac[42],mxResources[_0x57ac[43]](_0x57ac[42]),_0xbae3x6+ _0x57ac[44],_0x57ac[45],[_0x57ac[46],_0x57ac[47],_0x57ac[48]],[mxResources[_0x57ac[43]](_0x57ac[46]),mxResources[_0x57ac[43]](_0x57ac[47]),mxResources[_0x57ac[43]](_0x57ac[48])]);this[_0x57ac[49]](_0x57ac[50],mxResources[_0x57ac[43]](_0x57ac[50]),_0xbae3x6+ _0x57ac[51],_0x57ac[45],[_0x57ac[52],_0x57ac[53],_0x57ac[54],_0x57ac[55],_0x57ac[56],_0x57ac[57],_0x57ac[58]],[mxResources[_0x57ac[43]](_0x57ac[52]),mxResources[_0x57ac[43]](_0x57ac[53]),mxResources[_0x57ac[43]](_0x57ac[54]),mxResources[_0x57ac[43]](_0x57ac[55]),mxResources[_0x57ac[43]](_0x57ac[56]),mxResources[_0x57ac[43]](_0x57ac[57]),mxResources[_0x57ac[43]](_0x57ac[58])]);this[_0x57ac[49]](_0x57ac[59],mxResources[_0x57ac[43]](_0x57ac[59]),_0xbae3x6+ _0x57ac[60],_0x57ac[45],[_0x57ac[61],_0x57ac[62]],[mxResources[_0x57ac[43]](_0x57ac[61]),mxResources[_0x57ac[43]](_0x57ac[62])]);this[_0x57ac[49]](_0x57ac[63],mxResources[_0x57ac[43]](_0x57ac[63]),_0xbae3x6+ _0x57ac[64],_0x57ac[45],[_0x57ac[63],_0x57ac[65],_0x57ac[66],_0x57ac[67],_0x57ac[68],_0x57ac[69],_0x57ac[70],_0x57ac[71],_0x57ac[72]],[mxResources[_0x57ac[43]](_0x57ac[63]),mxResources[_0x57ac[43]](_0x57ac[65]),mxResources[_0x57ac[43]](_0x57ac[66]),mxResources[_0x57ac[43]](_0x57ac[67]),mxResources[_0x57ac[43]](_0x57ac[68]),mxResources[_0x57ac[43]](_0x57ac[69]),mxResources[_0x57ac[43]](_0x57ac[70]),mxResources[_0x57ac[43]](_0x57ac[71]),mxResources[_0x57ac[43]](_0x57ac[72])]);this[_0x57ac[49]](_0x57ac[73],mxResources[_0x57ac[43]](_0x57ac[73]),_0xbae3x6+ _0x57ac[74],_0x57ac[45],[_0x57ac[75]],[mxResources[_0x57ac[43]](_0x57ac[75])]);this[_0x57ac[49]](_0x57ac[76],mxResources[_0x57ac[43]](_0x57ac[76]),_0xbae3x6+ _0x57ac[77],_0x57ac[45],[_0x57ac[78],_0x57ac[79],_0x57ac[80],_0x57ac[81]],[mxResources[_0x57ac[43]](_0x57ac[78]),mxResources[_0x57ac[43]](_0x57ac[79]),mxResources[_0x57ac[43]](_0x57ac[80]),mxResources[_0x57ac[43]](_0x57ac[81])]);this[_0x57ac[49]](_0x57ac[82],mxResources[_0x57ac[43]](_0x57ac[82]),_0xbae3x6+ _0x57ac[83],_0x57ac[45],[_0x57ac[84],_0x57ac[85],_0x57ac[86],_0x57ac[87]],[mxResources[_0x57ac[43]](_0x57ac[84]),mxResources[_0x57ac[43]](_0x57ac[85]),mxResources[_0x57ac[43]](_0x57ac[86]),mxResources[_0x57ac[43]](_0x57ac[87])]);this[_0x57ac[49]](_0x57ac[88],mxResources[_0x57ac[43]](_0x57ac[88]),_0xbae3x6+ _0x57ac[89],_0x57ac[45],[_0x57ac[90]],[mxResources[_0x57ac[43]](_0x57ac[90])]);this[_0x57ac[49]](_0x57ac[91],mxResources[_0x57ac[43]](_0x57ac[91]),_0xbae3x6+ _0x57ac[92],_0x57ac[45],[_0x57ac[93],_0x57ac[94],_0x57ac[95],_0x57ac[96],_0x57ac[97]],[mxResources[_0x57ac[43]](_0x57ac[93]),mxResources[_0x57ac[43]](_0x57ac[94]),mxResources[_0x57ac[43]](_0x57ac[95]),mxResources[_0x57ac[43]](_0x57ac[96]),mxResources[_0x57ac[43]](_0x57ac[97])])};Sidebar[_0x57ac[40]][_0x57ac[98]]= !mxClient[_0x57ac[23]];Sidebar[_0x57ac[40]][_0x57ac[99]]= 16;Sidebar[_0x57ac[40]][_0x57ac[100]]= 3;Sidebar[_0x57ac[40]][_0x57ac[101]]= 300;Sidebar[_0x57ac[40]][_0x57ac[102]]= true;Sidebar[_0x57ac[40]][_0x57ac[103]]= STENCIL_PATH+ _0x57ac[104];Sidebar[_0x57ac[40]][_0x57ac[105]]= 34;Sidebar[_0x57ac[40]][_0x57ac[106]]= 34;Sidebar[_0x57ac[40]][_0x57ac[107]]= 2;Sidebar[_0x57ac[40]][_0x57ac[108]]= 9;Sidebar[_0x57ac[40]][_0x57ac[109]]= false;Sidebar[_0x57ac[40]][_0x57ac[110]]= false;Sidebar[_0x57ac[40]][_0x57ac[111]]= function(_0xbae3x7,_0xbae3x8,_0xbae3x9,_0xbae3xa){if(this[_0x57ac[98]]&& this[_0x57ac[4]]){if(this[_0x57ac[32]]!= _0xbae3x7){if(this[_0x57ac[112]]!= null){window[_0x57ac[113]](this[_0x57ac[112]]);this[_0x57ac[112]]= null};var _0xbae3xb=mxUtils[_0x57ac[25]](this,function(){if(this[_0x57ac[114]]== null){this[_0x57ac[114]]= document[_0x57ac[7]](_0x57ac[6]);this[_0x57ac[114]][_0x57ac[115]]= _0x57ac[116];document[_0x57ac[22]][_0x57ac[21]](this[_0x57ac[114]]);this[_0x57ac[117]]= new Graph(this[_0x57ac[114]],null,null,this[_0x57ac[1]][_0x57ac[9]][_0x57ac[5]][_0x57ac[8]]());this[_0x57ac[117]][_0x57ac[119]][_0x57ac[118]](this[_0x57ac[99]],this[_0x57ac[99]]);this[_0x57ac[117]][_0x57ac[10]]= false;this[_0x57ac[117]][_0x57ac[11]]= false;this[_0x57ac[117]][_0x57ac[13]]= false;this[_0x57ac[117]][_0x57ac[14]](false);this[_0x57ac[117]][_0x57ac[12]](false);this[_0x57ac[117]][_0x57ac[15]](false);if(!mxClient[_0x57ac[120]]){this[_0x57ac[117]][_0x57ac[119]][_0x57ac[121]][_0x57ac[17]][_0x57ac[19]]= _0x57ac[122]};this[_0x57ac[123]]= mxUtils[_0x57ac[124]](IMAGE_PATH+ _0x57ac[39]);this[_0x57ac[123]][_0x57ac[17]][_0x57ac[19]]= _0x57ac[20];this[_0x57ac[123]][_0x57ac[17]][_0x57ac[125]]= _0x57ac[126];this[_0x57ac[123]][_0x57ac[17]][_0x57ac[127]]= _0x57ac[128];document[_0x57ac[22]][_0x57ac[21]](this[_0x57ac[123]])};this[_0x57ac[114]][_0x57ac[17]][_0x57ac[129]]= _0x57ac[130];this[_0x57ac[117]][_0x57ac[131]]= (_0xbae3xa== null|| _0xbae3xa);this[_0x57ac[117]][_0x57ac[133]][_0x57ac[132]]();this[_0x57ac[117]][_0x57ac[134]](_0xbae3x8);var _0xbae3xc=this[_0x57ac[117]][_0x57ac[135]]();var _0xbae3xd=_0xbae3xc[_0x57ac[125]]+ 2* this[_0x57ac[99]];var _0xbae3xe=_0xbae3xc[_0x57ac[127]]+ 2* this[_0x57ac[99]];if(mxClient[_0x57ac[136]]){_0xbae3xd+= 4;_0xbae3xe+= 4;this[_0x57ac[114]][_0x57ac[17]][_0x57ac[137]]= _0x57ac[18]}else {this[_0x57ac[114]][_0x57ac[17]][_0x57ac[137]]= _0x57ac[138]};this[_0x57ac[123]][_0x57ac[17]][_0x57ac[16]]= _0x57ac[138];this[_0x57ac[114]][_0x57ac[17]][_0x57ac[125]]= _0xbae3xd+ _0x57ac[139];if(this[_0x57ac[110]]&& _0xbae3x9!= null&& _0xbae3x9[_0x57ac[140]]> 0){if(this[_0x57ac[141]]== null){this[_0x57ac[141]]= document[_0x57ac[7]](_0x57ac[6]);this[_0x57ac[141]][_0x57ac[17]][_0x57ac[142]]= _0x57ac[143];this[_0x57ac[141]][_0x57ac[17]][_0x57ac[144]]= _0x57ac[145];this[_0x57ac[141]][_0x57ac[17]][_0x57ac[125]]= _0x57ac[146];this[_0x57ac[141]][_0x57ac[17]][_0x57ac[137]]= _0x57ac[18];if(mxClient[_0x57ac[120]]){this[_0x57ac[141]][_0x57ac[17]][_0x57ac[147]]= _0x57ac[148]}else {this[_0x57ac[141]][_0x57ac[17]][_0x57ac[19]]= _0x57ac[20];this[_0x57ac[141]][_0x57ac[17]][_0x57ac[147]]= _0x57ac[149]};this[_0x57ac[114]][_0x57ac[21]](this[_0x57ac[141]])}else {this[_0x57ac[141]][_0x57ac[150]]= _0x57ac[151]};this[_0x57ac[141]][_0x57ac[17]][_0x57ac[129]]= _0x57ac[151];mxUtils[_0x57ac[152]](this[_0x57ac[141]],_0xbae3x9);var _0xbae3xf=this[_0x57ac[141]][_0x57ac[153]]+ 10;_0xbae3xe+= _0xbae3xf;if(mxClient[_0x57ac[120]]){this[_0x57ac[141]][_0x57ac[17]][_0x57ac[154]]= (-_0xbae3xf) + _0x57ac[139]}else {_0xbae3xe-= 6;this[_0x57ac[141]][_0x57ac[17]][_0x57ac[155]]= (_0xbae3xe- _0xbae3xf)+ _0x57ac[139]}}else {if(this[_0x57ac[141]]!= null&& this[_0x57ac[141]][_0x57ac[33]]!= null){this[_0x57ac[141]][_0x57ac[17]][_0x57ac[129]]= _0x57ac[156]}};this[_0x57ac[114]][_0x57ac[17]][_0x57ac[127]]= _0xbae3xe+ _0x57ac[139];var _0xbae3x10=-Math[_0x57ac[158]](0,_0xbae3xc[_0x57ac[157]]- this[_0x57ac[99]]);var _0xbae3x11=-Math[_0x57ac[158]](0,_0xbae3xc[_0x57ac[159]]- this[_0x57ac[99]]);var _0xbae3x12=this[_0x57ac[2]][_0x57ac[160]]+ this[_0x57ac[1]][_0x57ac[161]]+ 3;var _0xbae3x13=Math[_0x57ac[164]](0,(this[_0x57ac[2]][_0x57ac[162]]+ _0xbae3x7[_0x57ac[162]]- this[_0x57ac[2]][_0x57ac[163]]- _0xbae3xe/ 2+ 16));if(mxClient[_0x57ac[120]]){this[_0x57ac[117]][_0x57ac[119]][_0x57ac[121]][_0x57ac[169]](_0x57ac[165],_0x57ac[166]+ _0xbae3x10+ _0x57ac[167]+ _0xbae3x11+ _0x57ac[168])}else {this[_0x57ac[117]][_0x57ac[119]][_0x57ac[171]][_0x57ac[17]][_0x57ac[170]]= _0xbae3x10+ _0x57ac[139];this[_0x57ac[117]][_0x57ac[119]][_0x57ac[171]][_0x57ac[17]][_0x57ac[155]]= _0xbae3x11+ _0x57ac[139]};_0xbae3x12+= document[_0x57ac[174]](_0x57ac[173])[_0x57ac[172]];_0xbae3x13+= 90;this[_0x57ac[114]][_0x57ac[17]][_0x57ac[19]]= _0x57ac[20];this[_0x57ac[114]][_0x57ac[17]][_0x57ac[170]]= _0xbae3x12+ _0x57ac[139];this[_0x57ac[114]][_0x57ac[17]][_0x57ac[155]]= _0xbae3x13+ _0x57ac[139];this[_0x57ac[123]][_0x57ac[17]][_0x57ac[170]]= (_0xbae3x12- 13)+ _0x57ac[139];this[_0x57ac[123]][_0x57ac[17]][_0x57ac[155]]= (_0xbae3x13+ _0xbae3xe/ 2- 13)+ _0x57ac[139]});if(this[_0x57ac[114]]!= null&& this[_0x57ac[114]][_0x57ac[17]][_0x57ac[129]]!= _0x57ac[156]){_0xbae3xb()}else {this[_0x57ac[112]]= window[_0x57ac[175]](_0xbae3xb,this[_0x57ac[101]])};this[_0x57ac[32]]= _0xbae3x7}}};Sidebar[_0x57ac[40]][_0x57ac[29]]= function(){if(this[_0x57ac[112]]!= null){window[_0x57ac[113]](this[_0x57ac[112]]);this[_0x57ac[112]]= null};if(this[_0x57ac[114]]!= null){this[_0x57ac[114]][_0x57ac[17]][_0x57ac[129]]= _0x57ac[156];this[_0x57ac[123]][_0x57ac[17]][_0x57ac[16]]= _0x57ac[18];this[_0x57ac[32]]= null}};Sidebar[_0x57ac[40]][_0x57ac[176]]= function(_0xbae3x14){var _0xbae3x7=document[_0x57ac[7]](_0x57ac[177]);_0xbae3x7[_0x57ac[169]](_0x57ac[178],_0x57ac[179]);_0xbae3x7[_0x57ac[115]]= _0x57ac[180];mxUtils[_0x57ac[152]](_0xbae3x7,_0xbae3x14);return _0xbae3x7};Sidebar[_0x57ac[40]][_0x57ac[181]]= function(_0xbae3x8,_0xbae3xd,_0xbae3xe,_0xbae3x15,_0xbae3x9,_0xbae3xa){this[_0x57ac[5]][_0x57ac[131]]= (_0xbae3xa== null|| _0xbae3xa);this[_0x57ac[5]][_0x57ac[119]][_0x57ac[182]](1,0,0);this[_0x57ac[5]][_0x57ac[134]](_0xbae3x8);var _0xbae3xc=this[_0x57ac[5]][_0x57ac[135]]();var _0xbae3x16=this[_0x57ac[100]];var _0xbae3x17=Math[_0x57ac[158]]((_0xbae3xd- 2)/ (_0xbae3xc[_0x57ac[125]]- _0xbae3xc[_0x57ac[157]]+ _0xbae3x16),(_0xbae3xe- 2)/ (_0xbae3xc[_0x57ac[127]]- _0xbae3xc[_0x57ac[159]]+ _0xbae3x16));var _0xbae3x10=-Math[_0x57ac[158]](_0xbae3xc[_0x57ac[157]],0);var _0xbae3x11=-Math[_0x57ac[158]](_0xbae3xc[_0x57ac[159]],0);this[_0x57ac[5]][_0x57ac[119]][_0x57ac[182]](_0xbae3x17,_0xbae3x10,_0xbae3x11);_0xbae3xc= this[_0x57ac[5]][_0x57ac[135]]();var _0xbae3x18=Math[_0x57ac[164]](0,Math[_0x57ac[183]]((_0xbae3xd- _0xbae3xc[_0x57ac[125]]- _0xbae3xc[_0x57ac[157]])/ 2));var _0xbae3xf=Math[_0x57ac[164]](0,Math[_0x57ac[183]]((_0xbae3xe- _0xbae3xc[_0x57ac[127]]- _0xbae3xc[_0x57ac[159]])/ 2));var _0xbae3x19=null;if(this[_0x57ac[5]][_0x57ac[184]]== mxConstants[_0x57ac[185]]&& !mxClient[_0x57ac[186]]){_0xbae3x19= this[_0x57ac[5]][_0x57ac[119]][_0x57ac[189]]()[_0x57ac[188]][_0x57ac[187]](true)}else {_0xbae3x19= this[_0x57ac[5]][_0x57ac[2]][_0x57ac[187]](false);_0xbae3x19[_0x57ac[150]]= this[_0x57ac[5]][_0x57ac[2]][_0x57ac[150]]};this[_0x57ac[5]][_0x57ac[190]]()[_0x57ac[132]]();if(mxClient[_0x57ac[191]]){_0xbae3x15[_0x57ac[17]][_0x57ac[192]]= _0x57ac[193]+ this[_0x57ac[1]][_0x57ac[9]][_0x57ac[194]]+ _0x57ac[168]};var _0xbae3x1a=3;_0xbae3x19[_0x57ac[17]][_0x57ac[19]]= _0x57ac[122];_0xbae3x19[_0x57ac[17]][_0x57ac[137]]= _0x57ac[18];_0xbae3x19[_0x57ac[17]][_0x57ac[195]]= _0x57ac[196];_0xbae3x19[_0x57ac[17]][_0x57ac[170]]= (_0xbae3x18+ _0xbae3x1a)+ _0x57ac[139];_0xbae3x19[_0x57ac[17]][_0x57ac[155]]= (_0xbae3xf+ _0xbae3x1a)+ _0x57ac[139];_0xbae3x19[_0x57ac[17]][_0x57ac[125]]= _0xbae3xd+ _0x57ac[139];_0xbae3x19[_0x57ac[17]][_0x57ac[127]]= _0xbae3xe+ _0x57ac[139];_0xbae3x19[_0x57ac[17]][_0x57ac[16]]= _0x57ac[151];_0xbae3x19[_0x57ac[17]][_0x57ac[197]]= _0x57ac[151];_0xbae3x19[_0x57ac[17]][_0x57ac[198]]= _0x57ac[151];_0xbae3x15[_0x57ac[21]](_0xbae3x19);if(this[_0x57ac[109]]&& _0xbae3x9!= null){var _0xbae3x1b=(mxClient[_0x57ac[136]])?2* this[_0x57ac[107]]+ 2:0;_0xbae3x15[_0x57ac[17]][_0x57ac[127]]= (this[_0x57ac[106]]+ _0xbae3x1b+ this[_0x57ac[108]]+ 8)+ _0x57ac[139];var _0xbae3x1c=document[_0x57ac[7]](_0x57ac[6]);_0xbae3x1c[_0x57ac[17]][_0x57ac[199]]= this[_0x57ac[108]]+ _0x57ac[139];_0xbae3x1c[_0x57ac[17]][_0x57ac[144]]= _0x57ac[145];_0xbae3x1c[_0x57ac[17]][_0x57ac[200]]= _0x57ac[201];if(mxClient[_0x57ac[202]]){_0xbae3x1c[_0x57ac[17]][_0x57ac[127]]= (this[_0x57ac[108]]+ 12)+ _0x57ac[139]};_0xbae3x1c[_0x57ac[17]][_0x57ac[147]]= _0x57ac[203];mxUtils[_0x57ac[152]](_0xbae3x1c,_0xbae3x9);_0xbae3x15[_0x57ac[21]](_0xbae3x1c)}};Sidebar[_0x57ac[40]][_0x57ac[204]]= function(_0xbae3x8,_0xbae3x9,_0xbae3xa){var _0xbae3x7=document[_0x57ac[7]](_0x57ac[177]);_0xbae3x7[_0x57ac[169]](_0x57ac[178],_0x57ac[179]);_0xbae3x7[_0x57ac[115]]= _0x57ac[205];_0xbae3x7[_0x57ac[17]][_0x57ac[137]]= _0x57ac[18];var _0xbae3x1b=(mxClient[_0x57ac[136]])?8+ 2* this[_0x57ac[107]]:6;_0xbae3x7[_0x57ac[17]][_0x57ac[125]]= (this[_0x57ac[105]]+ _0xbae3x1b)+ _0x57ac[139];_0xbae3x7[_0x57ac[17]][_0x57ac[127]]= (this[_0x57ac[106]]+ _0xbae3x1b)+ _0x57ac[139];_0xbae3x7[_0x57ac[17]][_0x57ac[206]]= this[_0x57ac[107]]+ _0x57ac[139];mxEvent[_0x57ac[26]](_0xbae3x7,_0x57ac[207],function(_0xbae3x4){mxEvent[_0x57ac[208]](_0xbae3x4)});this[_0x57ac[181]](_0xbae3x8,this[_0x57ac[105]],this[_0x57ac[106]],_0xbae3x7,_0xbae3x9,_0xbae3xa);return _0xbae3x7};Sidebar[_0x57ac[40]][_0x57ac[209]]= function(_0xbae3x8,_0xbae3x1d){return function(_0xbae3x1e,_0xbae3x4,_0xbae3x1f,_0xbae3x20,_0xbae3x21){if(_0xbae3x1e[_0x57ac[210]]()){_0xbae3x8= _0xbae3x1e[_0x57ac[211]](_0xbae3x8);if(_0xbae3x8[_0x57ac[140]]> 0){var _0xbae3x22=(_0xbae3x1f!= null)?_0xbae3x1e[_0x57ac[212]](_0xbae3x1f,_0xbae3x8,_0xbae3x4):false;var _0xbae3x23=null;if(_0xbae3x1f!= null&& !_0xbae3x22){_0xbae3x1f= null};if(_0xbae3x1d&& _0xbae3x1e[_0x57ac[213]]()&& _0xbae3x1e[_0x57ac[214]](_0xbae3x1f,_0xbae3x8,_0xbae3x4)){_0xbae3x1e[_0x57ac[215]](_0xbae3x1f,_0xbae3x8,null,_0xbae3x20,_0xbae3x21);_0xbae3x23= _0xbae3x8}else {if(_0xbae3x8[_0x57ac[140]]> 0){_0xbae3x23= _0xbae3x1e[_0x57ac[216]](_0xbae3x8,_0xbae3x20,_0xbae3x21,_0xbae3x1f)}};if(_0xbae3x23!= null&& _0xbae3x23[_0x57ac[140]]> 0){_0xbae3x1e[_0x57ac[217]](_0xbae3x23[0]);_0xbae3x1e[_0x57ac[218]](_0xbae3x23)}}}}};Sidebar[_0x57ac[40]][_0x57ac[219]]= function(_0xbae3xd,_0xbae3xe){var _0xbae3x7=document[_0x57ac[7]](_0x57ac[6]);_0xbae3x7[_0x57ac[17]][_0x57ac[220]]= _0x57ac[221];_0xbae3x7[_0x57ac[17]][_0x57ac[125]]= _0xbae3xd+ _0x57ac[139];_0xbae3x7[_0x57ac[17]][_0x57ac[127]]= _0xbae3xe+ _0x57ac[139];return _0xbae3x7};Sidebar[_0x57ac[40]][_0x57ac[222]]= function(_0xbae3x7,_0xbae3x24,_0xbae3x25){var _0xbae3x26=mxUtils[_0x57ac[224]](_0xbae3x7,this[_0x57ac[1]][_0x57ac[9]][_0x57ac[5]],_0xbae3x24,_0xbae3x25,0,0,this[_0x57ac[1]][_0x57ac[9]][_0x57ac[5]][_0x57ac[223]],true,true);_0xbae3x26[_0x57ac[225]]= function(_0xbae3x1e,_0xbae3x20,_0xbae3x21){var _0xbae3x1f=mxDragSource[_0x57ac[40]][_0x57ac[225]][_0x57ac[226]](this,arguments);if(!_0xbae3x1e[_0x57ac[227]](_0xbae3x1f)){_0xbae3x1f= null};return _0xbae3x1f};return _0xbae3x26};Sidebar[_0x57ac[40]][_0x57ac[228]]= function(_0xbae3x7,_0xbae3x27){var _0xbae3x1e=this[_0x57ac[1]][_0x57ac[9]][_0x57ac[5]];var _0xbae3x28=null;mxEvent[_0x57ac[231]](_0xbae3x7,function(_0xbae3x4){_0xbae3x28= new mxPoint(mxEvent[_0x57ac[229]](_0xbae3x4),mxEvent[_0x57ac[230]](_0xbae3x4))});var _0xbae3x29=_0xbae3x27[_0x57ac[232]];_0xbae3x27[_0x57ac[232]]= function(_0xbae3x4){if(!mxEvent[_0x57ac[233]](_0xbae3x4)&& this[_0x57ac[234]]== null&& _0xbae3x28!= null){var _0xbae3x2a=_0xbae3x1e[_0x57ac[235]];if(Math[_0x57ac[236]](_0xbae3x28[_0x57ac[157]]- mxEvent[_0x57ac[229]](_0xbae3x4))<= _0xbae3x2a&& Math[_0x57ac[236]](_0xbae3x28[_0x57ac[159]]- mxEvent[_0x57ac[230]](_0xbae3x4))<= _0xbae3x2a){var _0xbae3x2b=_0xbae3x1e[_0x57ac[237]]();_0xbae3x27[_0x57ac[238]](_0xbae3x1e,_0xbae3x4,null,_0xbae3x2b,_0xbae3x2b)}};_0xbae3x29[_0x57ac[226]](this,arguments);_0xbae3x28= null}};Sidebar[_0x57ac[40]][_0x57ac[239]]= function(_0xbae3x2c,_0xbae3x14,_0xbae3x2d,_0xbae3x2e){var _0xbae3x2f=mxUtils[_0x57ac[239]]();var _0xbae3x19=_0xbae3x2f[_0x57ac[7]](_0xbae3x2c);_0xbae3x19[_0x57ac[169]](_0x57ac[240],_0xbae3x14);_0xbae3x2d[_0x57ac[241]](function(_0xbae3x30,_0xbae3x31){_0xbae3x19[_0x57ac[169]](_0xbae3x30,_0xbae3x2e[_0xbae3x31]?_0xbae3x2e[_0xbae3x31]:_0x57ac[151])});return _0xbae3x19};Sidebar[_0x57ac[40]][_0x57ac[242]]= function(_0xbae3x32,_0xbae3xd,_0xbae3xe,_0xbae3x33,_0xbae3x9,_0xbae3xa){var _0xbae3x2d=[];var _0xbae3x2e=[];switch(_0xbae3x33){case _0x57ac[52]:break;case _0x57ac[46]:_0xbae3x2d= [_0x57ac[52]];_0xbae3x2e= [_0x57ac[243]];break;case _0x57ac[79]:_0xbae3x2d= [_0x57ac[244],_0x57ac[133],_0x57ac[245],_0x57ac[246],_0x57ac[247],_0x57ac[248]];_0xbae3x2e= [_0x57ac[151],0,_0x57ac[249],1,_0x57ac[250],true];break;case _0x57ac[63]:_0xbae3x2d= [_0x57ac[251],_0x57ac[252]];_0xbae3x2e= [_0x57ac[253]];break;case _0x57ac[258]:_0xbae3x2d= [_0x57ac[251],_0x57ac[254],_0x57ac[255]];_0xbae3x2e= [_0x57ac[253],_0x57ac[256],_0x57ac[257]];break;case _0x57ac[65]:_0xbae3x2d= [_0x57ac[251],_0x57ac[254],_0x57ac[255],_0x57ac[259],_0x57ac[260]];_0xbae3x2e= [_0x57ac[253],_0x57ac[256],_0x57ac[257],_0x57ac[257],_0x57ac[253]];break;case _0x57ac[71]:_0xbae3x2d= [_0x57ac[251],_0x57ac[254],_0x57ac[261],_0x57ac[262],_0x57ac[259],_0x57ac[260]];_0xbae3x2e= [_0x57ac[253],_0x57ac[256],_0x57ac[257],_0x57ac[263],_0x57ac[257],_0x57ac[253]];break;case _0x57ac[72]:_0xbae3x2d= [_0x57ac[251],_0x57ac[254],_0x57ac[261],_0x57ac[262],_0x57ac[259],_0x57ac[264],_0x57ac[265],_0x57ac[260]];_0xbae3x2e= [_0x57ac[253],_0x57ac[256],_0x57ac[257],_0x57ac[263],_0x57ac[257],_0x57ac[253],_0x57ac[266],_0x57ac[253]];break;case _0x57ac[97]:_0xbae3x2d= [_0x57ac[267],_0x57ac[268]];_0xbae3x2e= [_0x57ac[151],_0x57ac[151]];break;case _0x57ac[61]:_0xbae3x2d= [_0x57ac[260],_0x57ac[269]];_0xbae3x2e= [_0x57ac[253],_0x57ac[151]];break;case _0x57ac[78]:_0xbae3x2d= [_0x57ac[270],_0x57ac[271],_0x57ac[260]];_0xbae3x2e= [_0x57ac[253],_0x57ac[151],_0x57ac[253]];break;case _0x57ac[93]:_0xbae3x2d= [_0x57ac[272]];_0xbae3x2e= [];break;case _0x57ac[84]:_0xbae3x2d= [_0x57ac[273],_0x57ac[274]];_0xbae3x2e= [];break;case _0x57ac[94]:_0xbae3x2d= [_0x57ac[260],_0x57ac[275]];_0xbae3x2e= [];break;case _0x57ac[95]:_0xbae3x2d= [_0x57ac[276],_0x57ac[275]];_0xbae3x2e= [];break;case _0x57ac[85]:_0xbae3x2d= [_0x57ac[277]];_0xbae3x2e= [];break;case _0x57ac[86]:_0xbae3x2d= [_0x57ac[278]];_0xbae3x2e= [_0x57ac[253]];break;case _0x57ac[279]:_0xbae3x2d= [_0x57ac[278]];_0xbae3x2e= [_0x57ac[253]];break;case _0x57ac[87]:_0xbae3x2d= [_0x57ac[260]];_0xbae3x2e= [_0x57ac[253]];break;case _0x57ac[66]:_0xbae3x2d= [_0x57ac[280],_0x57ac[281]];_0xbae3x2e= [_0x57ac[151],_0x57ac[250]];break;case _0x57ac[67]:_0xbae3x2d= [_0x57ac[282],_0x57ac[281]];_0xbae3x2e= [_0x57ac[151],_0x57ac[250]];break;case _0x57ac[68]:_0xbae3x2d= [_0x57ac[283],_0x57ac[281]];_0xbae3x2e= [_0x57ac[151],_0x57ac[250]];break;case _0x57ac[75]:_0xbae3x2d= [_0x57ac[284],_0x57ac[285],_0x57ac[246],_0x57ac[281]];_0xbae3x2e= [_0x57ac[151],_0x57ac[286],_0x57ac[287],_0x57ac[250]];break;case _0x57ac[54]:_0xbae3x2d= [_0x57ac[288],_0x57ac[246],_0x57ac[97],_0x57ac[289]];_0xbae3x2e= [_0x57ac[253],_0x57ac[290]];break;case _0x57ac[55]:_0xbae3x2d= [_0x57ac[291],_0x57ac[292],_0x57ac[246],_0x57ac[252],_0x57ac[289]];_0xbae3x2e= [_0x57ac[151],_0x57ac[287],_0x57ac[290]];break;case _0x57ac[69]:_0xbae3x2d= [_0x57ac[283],_0x57ac[293]];_0xbae3x2e= [_0x57ac[151],_0x57ac[294]];break;case _0x57ac[70]:_0xbae3x2d= [_0x57ac[283],_0x57ac[244],_0x57ac[295],_0x57ac[296],_0x57ac[247]];_0xbae3x2e= [_0x57ac[151],_0x57ac[151],_0x57ac[297],_0x57ac[253],_0x57ac[250]];break;case _0x57ac[56]:_0xbae3x2d= [_0x57ac[298],_0x57ac[252],_0x57ac[289],_0x57ac[251],_0x57ac[246],_0x57ac[95],_0x57ac[299],_0x57ac[300],_0x57ac[19]];_0xbae3x2e= [_0x57ac[287],_0x57ac[151],_0x57ac[151],_0x57ac[253],_0x57ac[301]];break;case _0x57ac[57]:_0xbae3x2d= [_0x57ac[302],_0x57ac[268]];_0xbae3x2e= [_0x57ac[151],_0x57ac[151]];break;case _0x57ac[96]:_0xbae3x2d= [_0x57ac[303]];_0xbae3x2e= [_0x57ac[253]];break;case _0x57ac[62]:_0xbae3x2d= [_0x57ac[304],_0x57ac[260]];_0xbae3x2e= [_0x57ac[151],_0x57ac[253]];break;case _0x57ac[313]:_0xbae3x2d= [_0x57ac[305],_0x57ac[306],_0x57ac[307],_0x57ac[308],_0x57ac[309],_0x57ac[310],_0x57ac[311],_0x57ac[312]];_0xbae3x2e= [];break;case _0x57ac[90]:_0xbae3x2d= [_0x57ac[314]];_0xbae3x2e= [];break;case _0x57ac[58]:_0xbae3x2d= [_0x57ac[315],_0x57ac[291],_0x57ac[316],_0x57ac[317]];_0xbae3x2e= [_0x57ac[151],_0x57ac[318],_0x57ac[253],_0x57ac[256]];break;case _0x57ac[80]:_0xbae3x2d= [_0x57ac[319],_0x57ac[320],_0x57ac[321]];_0xbae3x2e= [_0x57ac[253]];break;case _0x57ac[81]:_0xbae3x2d= [_0x57ac[319],_0x57ac[322],_0x57ac[320],_0x57ac[323],_0x57ac[324],_0x57ac[283]];_0xbae3x2e= [_0x57ac[253]];break;default:_0xbae3x2d= [];_0xbae3x2e= [];break};var _0xbae3x19=this[_0x57ac[239]](_0xbae3x33,_0xbae3x9,_0xbae3x2d,_0xbae3x2e);var _0xbae3x8=[ new mxCell(_0xbae3x19, new mxGeometry(0,0,_0xbae3xd,_0xbae3xe),_0xbae3x32)];_0xbae3x8[0][_0x57ac[325]]= true;return this[_0x57ac[326]](_0xbae3x8,_0xbae3xd,_0xbae3xe,_0xbae3x9,_0xbae3xa)};Sidebar[_0x57ac[40]][_0x57ac[326]]= function(_0xbae3x8,_0xbae3xd,_0xbae3xe,_0xbae3x9,_0xbae3xa){var _0xbae3x7=this[_0x57ac[204]](_0xbae3x8,_0xbae3x9,_0xbae3xa);var _0xbae3x27=this[_0x57ac[222]](_0xbae3x7,this[_0x57ac[209]](_0xbae3x8,true),this[_0x57ac[219]](_0xbae3xd,_0xbae3xe));this[_0x57ac[228]](_0xbae3x7,_0xbae3x27);_0xbae3x27[_0x57ac[327]]= mxUtils[_0x57ac[25]](this,function(){return this[_0x57ac[1]][_0x57ac[9]][_0x57ac[5]][_0x57ac[329]][_0x57ac[328]]});if(!touchStyle){mxEvent[_0x57ac[26]](_0xbae3x7,_0x57ac[30],mxUtils[_0x57ac[25]](this,function(_0xbae3x4){this[_0x57ac[111]](_0xbae3x7,_0xbae3x8,_0xbae3x9,_0xbae3xa)}))};return _0xbae3x7};Sidebar[_0x57ac[40]][_0x57ac[330]]= function(_0xbae3x32,_0xbae3xd,_0xbae3xe,_0xbae3x33,_0xbae3x9,_0xbae3xa){var _0xbae3x8=[ new mxCell((_0xbae3x33!= null)?_0xbae3x33:_0x57ac[151], new mxGeometry(0,0,_0xbae3xd,_0xbae3xe),_0xbae3x32)];_0xbae3x8[0][_0x57ac[332]][_0x57ac[331]]( new mxPoint(0,_0xbae3xe),true);_0xbae3x8[0][_0x57ac[332]][_0x57ac[331]]( new mxPoint(_0xbae3xd,0),false);_0xbae3x8[0][_0x57ac[332]][_0x57ac[122]]= true;_0xbae3x8[0][_0x57ac[333]]= true;return this[_0x57ac[334]](_0xbae3x8,_0xbae3xd,_0xbae3xe,_0xbae3x9,_0xbae3xa)};Sidebar[_0x57ac[40]][_0x57ac[334]]= function(_0xbae3x8,_0xbae3xd,_0xbae3xe,_0xbae3x9,_0xbae3xa){var _0xbae3x7=this[_0x57ac[204]](_0xbae3x8,_0xbae3x9,_0xbae3xa);this[_0x57ac[222]](_0xbae3x7,this[_0x57ac[209]](_0xbae3x8,false),this[_0x57ac[219]](_0xbae3xd,_0xbae3xe));var _0xbae3x1e=this[_0x57ac[1]][_0x57ac[9]][_0x57ac[5]];mxEvent[_0x57ac[26]](_0xbae3x7,_0x57ac[207],mxUtils[_0x57ac[25]](this,function(_0xbae3x4){if(this[_0x57ac[102]]){_0xbae3x1e[_0x57ac[335]](_0xbae3x8[0])};_0xbae3x7[_0x57ac[17]][_0x57ac[336]]= _0x57ac[337];window[_0x57ac[175]](function(){_0xbae3x7[_0x57ac[17]][_0x57ac[336]]= _0x57ac[151]},300);mxEvent[_0x57ac[208]](_0xbae3x4)}));if(!touchStyle){mxEvent[_0x57ac[26]](_0xbae3x7,_0x57ac[30],mxUtils[_0x57ac[25]](this,function(_0xbae3x4){this[_0x57ac[111]](_0xbae3x7,_0xbae3x8,_0xbae3x9,_0xbae3xa)}))};return _0xbae3x7};Sidebar[_0x57ac[40]][_0x57ac[338]]= function(_0xbae3x34,_0xbae3x9,_0xbae3x35,_0xbae3x36){var _0xbae3x7=this[_0x57ac[176]](_0xbae3x9);this[_0x57ac[2]][_0x57ac[21]](_0xbae3x7);var _0xbae3x1c=document[_0x57ac[7]](_0x57ac[6]);_0xbae3x1c[_0x57ac[115]]= _0x57ac[339];if(_0xbae3x35){_0xbae3x36(_0xbae3x1c);_0xbae3x36= null}else {_0xbae3x1c[_0x57ac[17]][_0x57ac[129]]= _0x57ac[156]};this[_0x57ac[340]](_0xbae3x7,_0xbae3x1c,_0xbae3x36);var _0xbae3x37=document[_0x57ac[7]](_0x57ac[6]);_0xbae3x37[_0x57ac[21]](_0xbae3x1c);this[_0x57ac[2]][_0x57ac[21]](_0xbae3x37);if(_0xbae3x34!= null){this[_0x57ac[3]][_0xbae3x34]= [_0xbae3x7,_0xbae3x37]}};Sidebar[_0x57ac[40]][_0x57ac[340]]= function(_0xbae3x9,_0xbae3x38,_0xbae3x39){var _0xbae3x3a=false;_0xbae3x9[_0x57ac[17]][_0x57ac[192]]= (_0xbae3x38[_0x57ac[17]][_0x57ac[129]]== _0x57ac[156])?_0x57ac[193]+ IMAGE_PATH+ _0x57ac[341]:_0x57ac[193]+ IMAGE_PATH+ _0x57ac[342];_0xbae3x9[_0x57ac[17]][_0x57ac[343]]= _0x57ac[344];_0xbae3x9[_0x57ac[17]][_0x57ac[345]]= _0x57ac[346];mxEvent[_0x57ac[26]](_0xbae3x9,_0x57ac[207],function(_0xbae3x4){if(_0xbae3x38[_0x57ac[17]][_0x57ac[129]]== _0x57ac[156]){if(!_0xbae3x3a){_0xbae3x3a= true;if(_0xbae3x39!= null){_0xbae3x9[_0x57ac[17]][_0x57ac[195]]= _0x57ac[347];window[_0x57ac[175]](function(){_0xbae3x39(_0xbae3x38);_0xbae3x9[_0x57ac[17]][_0x57ac[195]]= _0x57ac[151]},0)}};_0xbae3x9[_0x57ac[17]][_0x57ac[192]]= _0x57ac[193]+ IMAGE_PATH+ _0x57ac[342];_0xbae3x38[_0x57ac[17]][_0x57ac[129]]= _0x57ac[130]}else {_0xbae3x9[_0x57ac[17]][_0x57ac[192]]= _0x57ac[193]+ IMAGE_PATH+ _0x57ac[341];_0xbae3x38[_0x57ac[17]][_0x57ac[129]]= _0x57ac[156]};mxEvent[_0x57ac[208]](_0xbae3x4)})};Sidebar[_0x57ac[40]][_0x57ac[348]]= function(_0xbae3x34){var _0xbae3x3b=this[_0x57ac[3]][_0xbae3x34];if(_0xbae3x3b!= null){this[_0x57ac[3]][_0xbae3x34]= null;for(var _0xbae3x3c=0;_0xbae3x3c< _0xbae3x3b[_0x57ac[140]];_0xbae3x3c++){this[_0x57ac[2]][_0x57ac[349]](_0xbae3x3b[_0xbae3x3c])};return true};return false};Sidebar[_0x57ac[40]][_0x57ac[49]]= function(_0xbae3x34,_0xbae3x9,_0xbae3x3d,_0xbae3x3e,_0xbae3x3f,_0xbae3x40){this[_0x57ac[338]](_0xbae3x34,_0xbae3x9,(_0xbae3x34=== _0x57ac[42]),mxUtils[_0x57ac[25]](this,function(_0xbae3x38){var _0xbae3x41=_0xbae3x40!= null;for(var _0xbae3x3c=0;_0xbae3x3c< _0xbae3x3f[_0x57ac[140]];_0xbae3x3c++){var _0xbae3x42=_0xbae3x3d+ _0xbae3x3f[_0xbae3x3c]+ _0xbae3x3e;_0xbae3x38[_0x57ac[21]](this[_0x57ac[242]](_0x57ac[350]+ _0xbae3x42,80,80,_0xbae3x3f[_0xbae3x3c],(_0xbae3x41)?_0xbae3x40[_0xbae3x3c]:null,_0xbae3x41))}}))} \ No newline at end of file diff --git a/public/assets/plugins/square/js/Toolbar.js b/public/assets/plugins/square/js/Toolbar.js index 7eab562..d8a2bcb 100644 --- a/public/assets/plugins/square/js/Toolbar.js +++ b/public/assets/plugins/square/js/Toolbar.js @@ -1,407 +1 @@ -/** - * $Id: Toolbar.js,v 1.3 2013-02-20 16:21:29 gaudenz Exp $ - * Copyright (c) 2006-2012, JGraph Ltd - */ -/** - * Construcs a new toolbar for the given editor. - */ -function Toolbar(editorUi, container) -{ - this.editorUi = editorUi; - this.container = container; - this.init(); - - // Global handler to hide the current menu - mxEvent.addGestureListeners(document, mxUtils.bind(this, function(evt) - { - this.hideMenu(); - })); -}; - -/** - * Adds the toolbar elements. - */ -Toolbar.prototype.init = function() -{ - this.addItems(['save', 'publish', '-', 'print', 'undo', 'redo', '-', 'copy', 'cut', 'paste', 'delete', '-', 'duplicate', '-', 'actualSize', 'zoomIn', 'zoomOut', '-']); - var fontElt = this.addMenu('Helvetica', mxResources.get('fontFamily'), true, 'fontFamily'); - fontElt.style.whiteSpace = 'nowrap'; - fontElt.style.overflow = 'hidden'; - fontElt.style.width = '70px'; - this.addSeparator(); - var sizeElt = this.addMenu('12', mxResources.get('fontSize'), true, 'fontSize'); - sizeElt.style.whiteSpace = 'nowrap'; - sizeElt.style.overflow = 'hidden'; - sizeElt.style.width = '30px'; - - this.addItems(['-', 'bold', 'italic', 'underline']); - // Giuseppe Careri - // var align = this.addMenuFunction('geSprite-left', mxResources.get('align'), false, mxUtils.bind(this, function(menu) - // { - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ALIGN], [mxConstants.ALIGN_LEFT], 'geIcon geSprite geSprite-left', null).setAttribute('title', mxResources.get('left')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ALIGN], [mxConstants.ALIGN_CENTER], 'geIcon geSprite geSprite-center', null).setAttribute('title', mxResources.get('center')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ALIGN], [mxConstants.ALIGN_RIGHT], 'geIcon geSprite geSprite-right', null).setAttribute('title', mxResources.get('right')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_VERTICAL_ALIGN], [mxConstants.ALIGN_TOP], 'geIcon geSprite geSprite-top', null).setAttribute('title', mxResources.get('top')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_VERTICAL_ALIGN], [mxConstants.ALIGN_MIDDLE], 'geIcon geSprite geSprite-middle', null).setAttribute('title', mxResources.get('middle')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_VERTICAL_ALIGN], [mxConstants.ALIGN_BOTTOM], 'geIcon geSprite geSprite-bottom', null).setAttribute('title', mxResources.get('bottom')); - // })); - // this.addItems(['fontColor', '-']); - // var line = this.addMenuFunction('geSprite-straight', mxResources.get('line'), false, mxUtils.bind(this, function(menu) - // { - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_EDGE], [null], 'geIcon geSprite geSprite-straight', null).setAttribute('title', mxResources.get('straight')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_EDGE], ['entityRelationEdgeStyle'], 'geIcon geSprite geSprite-entity', null).setAttribute('title', mxResources.get('entityRelation')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_EDGE, mxConstants.STYLE_ELBOW], ['elbowEdgeStyle', 'horizontal'], 'geIcon geSprite geSprite-helbow', null).setAttribute('title', mxResources.get('horizontal')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_EDGE, mxConstants.STYLE_ELBOW], ['elbowEdgeStyle', 'vertical'], 'geIcon geSprite geSprite-velbow', null).setAttribute('title', mxResources.get('vertical')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_EDGE], ['segmentEdgeStyle'], 'geIcon geSprite geSprite-segment', null).setAttribute('title', mxResources.get('manual')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_EDGE], ['orthogonalEdgeStyle'], 'geIcon geSprite geSprite-orthogonal', null).setAttribute('title', mxResources.get('automatic')); - // })); - // var linestart = this.addMenuFunction('geSprite-startclassic', mxResources.get('lineend'), false, mxUtils.bind(this, function(menu) - // { - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.NONE, 0], 'geIcon geSprite geSprite-noarrow', null).setAttribute('title', mxResources.get('none')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_CLASSIC, 1], 'geIcon geSprite geSprite-startclassic', null).setAttribute('title', mxResources.get('classic')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_OPEN, 1], 'geIcon geSprite geSprite-startopen', null).setAttribute('title', mxResources.get('openArrow')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_BLOCK, 1], 'geIcon geSprite geSprite-startblock', null).setAttribute('title', mxResources.get('block')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_OVAL, 1], 'geIcon geSprite geSprite-startoval', null).setAttribute('title', mxResources.get('oval')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_DIAMOND, 1], 'geIcon geSprite geSprite-startdiamond', null).setAttribute('title', mxResources.get('diamond')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_DIAMOND_THIN, 1], 'geIcon geSprite geSprite-startthindiamond', null).setAttribute('title', mxResources.get('diamondThin')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_CLASSIC, 0], 'geIcon geSprite geSprite-startclassictrans', null).setAttribute('title', mxResources.get('classic')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_BLOCK, 0], 'geIcon geSprite geSprite-startblocktrans', null).setAttribute('title', mxResources.get('block')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_OVAL, 0], 'geIcon geSprite geSprite-startovaltrans', null).setAttribute('title', mxResources.get('oval')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_DIAMOND, 0], 'geIcon geSprite geSprite-startdiamondtrans', null).setAttribute('title', mxResources.get('diamond')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_DIAMOND_THIN, 0], 'geIcon geSprite geSprite-startthindiamondtrans', null).setAttribute('title', mxResources.get('diamondThin')); - // })); - // var lineend = this.addMenuFunction('geSprite-endclassic', mxResources.get('lineend'), false, mxUtils.bind(this, function(menu) - // { - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.NONE, 0], 'geIcon geSprite geSprite-noarrow', null).setAttribute('title', mxResources.get('none')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_CLASSIC, 1], 'geIcon geSprite geSprite-endclassic', null).setAttribute('title', mxResources.get('classic')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_OPEN, 1], 'geIcon geSprite geSprite-endopen', null).setAttribute('title', mxResources.get('openArrow')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_BLOCK, 1], 'geIcon geSprite geSprite-endblock', null).setAttribute('title', mxResources.get('block')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_OVAL, 1], 'geIcon geSprite geSprite-endoval', null).setAttribute('title', mxResources.get('oval')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_DIAMOND, 1], 'geIcon geSprite geSprite-enddiamond', null).setAttribute('title', mxResources.get('diamond')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_DIAMOND_THIN, 1], 'geIcon geSprite geSprite-endthindiamond', null).setAttribute('title', mxResources.get('diamondThin')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_CLASSIC, 0], 'geIcon geSprite geSprite-endclassictrans', null).setAttribute('title', mxResources.get('classic')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_BLOCK, 0], 'geIcon geSprite geSprite-endblocktrans', null).setAttribute('title', mxResources.get('block')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_OVAL, 0], 'geIcon geSprite geSprite-endovaltrans', null).setAttribute('title', mxResources.get('oval')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_DIAMOND, 0], 'geIcon geSprite geSprite-enddiamondtrans', null).setAttribute('title', mxResources.get('diamond')); - // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_DIAMOND_THIN, 0], 'geIcon geSprite geSprite-endthindiamondtrans', null).setAttribute('title', mxResources.get('diamondThin')); - // })); - // this.addItems(['-', 'strokeColor', 'image', 'fillColor']); - // this.addItem('geSprite-gradientcolor', 'gradientColor').setAttribute('title', mxResources.get('gradient')); - // this.addItems(['shadow']); - - var graph = this.editorUi.editor.graph; - - // Update font size and font family labels - var update = mxUtils.bind(this, function() - { - var ff = 'Helvetica'; - var fs = '12'; - var state = graph.getView().getState(graph.getSelectionCell()); - - if (state != null) - { - ff = state.style[mxConstants.STYLE_FONTFAMILY] || ff; - fs = state.style[mxConstants.STYLE_FONTSIZE] || fs; - - if (ff.length > 10) - { - ff = ff.substring(0, 8) + '...'; - } - - fontElt.innerHTML = ff; - sizeElt.innerHTML = fs; - } - }); - - graph.getSelectionModel().addListener(mxEvent.CHANGE, update); - graph.getModel().addListener(mxEvent.CHANGE, update); - - // Giuseppe Careri - // Updates button states - //this.addEdgeSelectionHandler([line, linestart, lineend]); - //this.addSelectionHandler([align]); -}; - -/** - * Hides the current menu. - */ -Toolbar.prototype.hideMenu = function() -{ - if (this.currentMenu != null) - { - this.currentMenu.hideMenu(); - this.currentMenu.destroy(); - this.currentMenu = null; - } -}; - -/** - * Adds a label to the toolbar. - */ -Toolbar.prototype.addMenu = function(label, tooltip, showLabels, name) -{ - var menu = this.editorUi.menus.get(name); - var elt = this.addMenuFunction(label, tooltip, showLabels, menu.funct); - - menu.addListener('stateChanged', function() - { - elt.setEnabled(menu.enabled); - }); - - return elt; -}; - -/** - * Adds a label to the toolbar. - */ -Toolbar.prototype.addMenuFunction = function(label, tooltip, showLabels, funct) -{ - var elt = (showLabels) ? this.createLabel(label) : this.createButton(label); - this.initElement(elt, tooltip); - this.addMenuHandler(elt, showLabels, funct); - this.container.appendChild(elt); - - return elt; -}; - -/** - * Adds a separator to the separator. - */ -Toolbar.prototype.addSeparator = function() -{ - var elt = document.createElement('div'); - elt.className = 'geSeparator'; - this.container.appendChild(elt); - - return elt; -}; - -/** - * Adds given action item - */ -Toolbar.prototype.addItems = function(keys) -{ - for (var i = 0; i < keys.length; i++) - { - var key = keys[i]; - - if (key == '-') - { - this.addSeparator(); - } - else - { - this.addItem('geSprite-' + key.toLowerCase(), key); - } - } -}; - -/** - * Adds given action item - */ -Toolbar.prototype.addItem = function(sprite, key) -{ - var action = this.editorUi.actions.get(key); - var elt = null; - - if (action != null) - { - elt = this.addButton(sprite, action.label, action.funct); - elt.setEnabled(action.enabled); - - action.addListener('stateChanged', function() - { - elt.setEnabled(action.enabled); - }); - } - - return elt; -}; - -/** - * Adds a button to the toolbar. - */ -Toolbar.prototype.addButton = function(classname, tooltip, funct) -{ - var elt = this.createButton(classname); - - this.initElement(elt, tooltip); - this.addClickHandler(elt, funct); - this.container.appendChild(elt); - - return elt; -}; - -/** - * Updates the states of the given toolbar items based on the selection. - */ -Toolbar.prototype.addSelectionHandler = function(items) -{ - var graph = this.editorUi.editor.graph; - - var selectionListener = function() - { - var selected = !graph.isSelectionEmpty(); - - for (var i = 0; i < items.length; i++) - { - items[i].setEnabled(selected); - } - }; - - graph.getSelectionModel().addListener(mxEvent.CHANGE, selectionListener); - selectionListener(); -}; - -/** - * Updates the states of the given toolbar items based on the selection. - */ -Toolbar.prototype.addEdgeSelectionHandler = function(items) -{ - var graph = this.editorUi.editor.graph; - - var selectionListener = function() - { - var edgeSelected = false; - - if (!graph.isSelectionEmpty()) - { - var cells = graph.getSelectionCells(); - - for (var i = 0; i < cells.length; i++) - { - if (graph.getModel().isEdge(cells[i])) - { - edgeSelected = true; - break; - } - } - } - - for (var i = 0; i < items.length; i++) - { - items[i].setEnabled(edgeSelected); - } - }; - - graph.getSelectionModel().addListener(mxEvent.CHANGE, selectionListener); - selectionListener(); -}; - -/** - * Initializes the given toolbar element. - */ -Toolbar.prototype.initElement = function(elt, tooltip) -{ - elt.setAttribute('tabindex', '0'); - - // Adds tooltip - if (tooltip != null) - { - elt.setAttribute('title', tooltip); - } - - this.addEnabledState(elt); -}; - -/** - * Adds enabled state with setter to DOM node (avoids JS wrapper). - */ -Toolbar.prototype.addEnabledState = function(elt) -{ - var classname = elt.className; - - elt.setEnabled = function(value) - { - elt.enabled = value; - - if (value) - { - elt.className = classname; - } - else - { - elt.className = classname + ' geDisabled'; - } - }; - - elt.setEnabled(true); -}; - -/** - * Adds enabled state with setter to DOM node (avoids JS wrapper). - */ -Toolbar.prototype.addClickHandler = function(elt, funct) -{ - if (funct != null) - { - mxEvent.addListener(elt, 'click', function(evt) - { - if (elt.enabled) - { - funct(evt); - } - - mxEvent.consume(evt); - }); - } -}; - -/** - * Creates and returns a new button. - */ -Toolbar.prototype.createButton = function(classname) -{ - var elt = document.createElement('a'); - elt.setAttribute('href', 'javascript:void(0);'); - elt.className = 'geButton'; - - var inner = document.createElement('div'); - inner.className = 'geSprite ' + classname; - elt.appendChild(inner); - - return elt; -}; - -/** - * Creates and returns a new button. - */ -Toolbar.prototype.createLabel = function(label, tooltip) -{ - var elt = document.createElement('a'); - elt.setAttribute('href', 'javascript:void(0);'); - elt.className = 'geLabel'; - mxUtils.write(elt, label); - - return elt; -}; - -/** - * Adds a handler for showing a menu in the given element. - */ -Toolbar.prototype.addMenuHandler = function(elt, showLabels, funct, showAll) -{ - if (funct != null) - { - var graph = this.editorUi.editor.graph; - var menu = null; - - mxEvent.addListener(elt, 'click', mxUtils.bind(this, function(evt) - { - if (elt.enabled == null || elt.enabled) - { - graph.panningHandler.hideMenu(); - menu = new mxPopupMenu(funct); - menu.div.className += ' geToolbarMenu'; - menu.showDisabled = showAll; - menu.labels = showLabels; - menu.autoExpand = true; - - menu.popup(elt.offsetLeft, elt.offsetTop + elt.offsetHeight + 34, null, evt); - this.currentMenu = menu; - } - - mxEvent.consume(evt); - })); - } -}; +var _0xa94a=["\x65\x64\x69\x74\x6F\x72\x55\x69","\x63\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x69\x6E\x69\x74","\x68\x69\x64\x65\x4D\x65\x6E\x75","\x62\x69\x6E\x64","\x61\x64\x64\x47\x65\x73\x74\x75\x72\x65\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x73\x61\x76\x65","\x70\x75\x62\x6C\x69\x73\x68","\x2D","\x70\x72\x69\x6E\x74","\x75\x6E\x64\x6F","\x72\x65\x64\x6F","\x63\x6F\x70\x79","\x63\x75\x74","\x70\x61\x73\x74\x65","\x64\x65\x6C\x65\x74\x65","\x64\x75\x70\x6C\x69\x63\x61\x74\x65","\x61\x63\x74\x75\x61\x6C\x53\x69\x7A\x65","\x7A\x6F\x6F\x6D\x49\x6E","\x7A\x6F\x6F\x6D\x4F\x75\x74","\x61\x64\x64\x49\x74\x65\x6D\x73","\x48\x65\x6C\x76\x65\x74\x69\x63\x61","\x66\x6F\x6E\x74\x46\x61\x6D\x69\x6C\x79","\x67\x65\x74","\x61\x64\x64\x4D\x65\x6E\x75","\x77\x68\x69\x74\x65\x53\x70\x61\x63\x65","\x73\x74\x79\x6C\x65","\x6E\x6F\x77\x72\x61\x70","\x6F\x76\x65\x72\x66\x6C\x6F\x77","\x68\x69\x64\x64\x65\x6E","\x77\x69\x64\x74\x68","\x37\x30\x70\x78","\x61\x64\x64\x53\x65\x70\x61\x72\x61\x74\x6F\x72","\x31\x32","\x66\x6F\x6E\x74\x53\x69\x7A\x65","\x33\x30\x70\x78","\x62\x6F\x6C\x64","\x69\x74\x61\x6C\x69\x63","\x75\x6E\x64\x65\x72\x6C\x69\x6E\x65","\x67\x72\x61\x70\x68","\x65\x64\x69\x74\x6F\x72","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C","\x67\x65\x74\x53\x74\x61\x74\x65","\x67\x65\x74\x56\x69\x65\x77","\x53\x54\x59\x4C\x45\x5F\x46\x4F\x4E\x54\x46\x41\x4D\x49\x4C\x59","\x53\x54\x59\x4C\x45\x5F\x46\x4F\x4E\x54\x53\x49\x5A\x45","\x6C\x65\x6E\x67\x74\x68","\x73\x75\x62\x73\x74\x72\x69\x6E\x67","\x2E\x2E\x2E","\x69\x6E\x6E\x65\x72\x48\x54\x4D\x4C","\x61\x64\x64\x4C\x69\x73\x74\x65\x6E\x65\x72","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x4D\x6F\x64\x65\x6C","\x67\x65\x74\x4D\x6F\x64\x65\x6C","\x63\x75\x72\x72\x65\x6E\x74\x4D\x65\x6E\x75","\x64\x65\x73\x74\x72\x6F\x79","\x6D\x65\x6E\x75\x73","\x66\x75\x6E\x63\x74","\x61\x64\x64\x4D\x65\x6E\x75\x46\x75\x6E\x63\x74\x69\x6F\x6E","\x73\x74\x61\x74\x65\x43\x68\x61\x6E\x67\x65\x64","\x65\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x45\x6E\x61\x62\x6C\x65\x64","\x63\x72\x65\x61\x74\x65\x4C\x61\x62\x65\x6C","\x63\x72\x65\x61\x74\x65\x42\x75\x74\x74\x6F\x6E","\x69\x6E\x69\x74\x45\x6C\x65\x6D\x65\x6E\x74","\x61\x64\x64\x4D\x65\x6E\x75\x48\x61\x6E\x64\x6C\x65\x72","\x61\x70\x70\x65\x6E\x64\x43\x68\x69\x6C\x64","\x64\x69\x76","\x63\x72\x65\x61\x74\x65\x45\x6C\x65\x6D\x65\x6E\x74","\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65","\x67\x65\x53\x65\x70\x61\x72\x61\x74\x6F\x72","\x67\x65\x53\x70\x72\x69\x74\x65\x2D","\x74\x6F\x4C\x6F\x77\x65\x72\x43\x61\x73\x65","\x61\x64\x64\x49\x74\x65\x6D","\x61\x63\x74\x69\x6F\x6E\x73","\x6C\x61\x62\x65\x6C","\x61\x64\x64\x42\x75\x74\x74\x6F\x6E","\x61\x64\x64\x43\x6C\x69\x63\x6B\x48\x61\x6E\x64\x6C\x65\x72","\x61\x64\x64\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x48\x61\x6E\x64\x6C\x65\x72","\x69\x73\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x45\x6D\x70\x74\x79","\x61\x64\x64\x45\x64\x67\x65\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x48\x61\x6E\x64\x6C\x65\x72","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73","\x69\x73\x45\x64\x67\x65","\x74\x61\x62\x69\x6E\x64\x65\x78","\x30","\x73\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x74\x69\x74\x6C\x65","\x61\x64\x64\x45\x6E\x61\x62\x6C\x65\x64\x53\x74\x61\x74\x65","\x20\x67\x65\x44\x69\x73\x61\x62\x6C\x65\x64","\x63\x6C\x69\x63\x6B","\x63\x6F\x6E\x73\x75\x6D\x65","\x61","\x68\x72\x65\x66","\x6A\x61\x76\x61\x73\x63\x72\x69\x70\x74\x3A\x76\x6F\x69\x64\x28\x30\x29\x3B","\x67\x65\x42\x75\x74\x74\x6F\x6E","\x67\x65\x53\x70\x72\x69\x74\x65\x20","\x67\x65\x4C\x61\x62\x65\x6C","\x77\x72\x69\x74\x65","\x70\x61\x6E\x6E\x69\x6E\x67\x48\x61\x6E\x64\x6C\x65\x72","\x20\x67\x65\x54\x6F\x6F\x6C\x62\x61\x72\x4D\x65\x6E\x75","\x73\x68\x6F\x77\x44\x69\x73\x61\x62\x6C\x65\x64","\x6C\x61\x62\x65\x6C\x73","\x61\x75\x74\x6F\x45\x78\x70\x61\x6E\x64","\x6F\x66\x66\x73\x65\x74\x4C\x65\x66\x74","\x6F\x66\x66\x73\x65\x74\x54\x6F\x70","\x6F\x66\x66\x73\x65\x74\x48\x65\x69\x67\x68\x74","\x70\x6F\x70\x75\x70"];function Toolbar(_0x1eecx2,_0x1eecx3){this[_0xa94a[0]]= _0x1eecx2;this[_0xa94a[1]]= _0x1eecx3;this[_0xa94a[2]]();mxEvent[_0xa94a[5]](document,mxUtils[_0xa94a[4]](this,function(_0x1eecx4){this[_0xa94a[3]]()}))}Toolbar[_0xa94a[6]][_0xa94a[2]]= function(){this[_0xa94a[21]]([_0xa94a[7],_0xa94a[8],_0xa94a[9],_0xa94a[10],_0xa94a[11],_0xa94a[12],_0xa94a[9],_0xa94a[13],_0xa94a[14],_0xa94a[15],_0xa94a[16],_0xa94a[9],_0xa94a[17],_0xa94a[9],_0xa94a[18],_0xa94a[19],_0xa94a[20],_0xa94a[9]]);var _0x1eecx5=this[_0xa94a[25]](_0xa94a[22],mxResources[_0xa94a[24]](_0xa94a[23]),true,_0xa94a[23]);_0x1eecx5[_0xa94a[27]][_0xa94a[26]]= _0xa94a[28];_0x1eecx5[_0xa94a[27]][_0xa94a[29]]= _0xa94a[30];_0x1eecx5[_0xa94a[27]][_0xa94a[31]]= _0xa94a[32];this[_0xa94a[33]]();var _0x1eecx6=this[_0xa94a[25]](_0xa94a[34],mxResources[_0xa94a[24]](_0xa94a[35]),true,_0xa94a[35]);_0x1eecx6[_0xa94a[27]][_0xa94a[26]]= _0xa94a[28];_0x1eecx6[_0xa94a[27]][_0xa94a[29]]= _0xa94a[30];_0x1eecx6[_0xa94a[27]][_0xa94a[31]]= _0xa94a[36];this[_0xa94a[21]]([_0xa94a[9],_0xa94a[37],_0xa94a[38],_0xa94a[39]]);var _0x1eecx7=this[_0xa94a[0]][_0xa94a[41]][_0xa94a[40]];var _0x1eecx8=mxUtils[_0xa94a[4]](this,function(){var _0x1eecx9=_0xa94a[22];var _0x1eecxa=_0xa94a[34];var _0x1eecxb=_0x1eecx7[_0xa94a[44]]()[_0xa94a[43]](_0x1eecx7[_0xa94a[42]]());if(_0x1eecxb!= null){_0x1eecx9= _0x1eecxb[_0xa94a[27]][mxConstants[_0xa94a[45]]]|| _0x1eecx9;_0x1eecxa= _0x1eecxb[_0xa94a[27]][mxConstants[_0xa94a[46]]]|| _0x1eecxa;if(_0x1eecx9[_0xa94a[47]]> 10){_0x1eecx9= _0x1eecx9[_0xa94a[48]](0,8)+ _0xa94a[49]};_0x1eecx5[_0xa94a[50]]= _0x1eecx9;_0x1eecx6[_0xa94a[50]]= _0x1eecxa}});_0x1eecx7[_0xa94a[52]]()[_0xa94a[51]](mxEvent.CHANGE,_0x1eecx8);_0x1eecx7[_0xa94a[53]]()[_0xa94a[51]](mxEvent.CHANGE,_0x1eecx8)};Toolbar[_0xa94a[6]][_0xa94a[3]]= function(){if(this[_0xa94a[54]]!= null){this[_0xa94a[54]][_0xa94a[3]]();this[_0xa94a[54]][_0xa94a[55]]();this[_0xa94a[54]]= null}};Toolbar[_0xa94a[6]][_0xa94a[25]]= function(_0x1eecxc,_0x1eecxd,_0x1eecxe,_0x1eecxf){var _0x1eecx10=this[_0xa94a[0]][_0xa94a[56]][_0xa94a[24]](_0x1eecxf);var _0x1eecx11=this[_0xa94a[58]](_0x1eecxc,_0x1eecxd,_0x1eecxe,_0x1eecx10[_0xa94a[57]]);_0x1eecx10[_0xa94a[51]](_0xa94a[59],function(){_0x1eecx11[_0xa94a[61]](_0x1eecx10[_0xa94a[60]])});return _0x1eecx11};Toolbar[_0xa94a[6]][_0xa94a[58]]= function(_0x1eecxc,_0x1eecxd,_0x1eecxe,_0x1eecx12){var _0x1eecx11=(_0x1eecxe)?this[_0xa94a[62]](_0x1eecxc):this[_0xa94a[63]](_0x1eecxc);this[_0xa94a[64]](_0x1eecx11,_0x1eecxd);this[_0xa94a[65]](_0x1eecx11,_0x1eecxe,_0x1eecx12);this[_0xa94a[1]][_0xa94a[66]](_0x1eecx11);return _0x1eecx11};Toolbar[_0xa94a[6]][_0xa94a[33]]= function(){var _0x1eecx11=document[_0xa94a[68]](_0xa94a[67]);_0x1eecx11[_0xa94a[69]]= _0xa94a[70];this[_0xa94a[1]][_0xa94a[66]](_0x1eecx11);return _0x1eecx11};Toolbar[_0xa94a[6]][_0xa94a[21]]= function(_0x1eecx13){for(var _0x1eecx14=0;_0x1eecx14< _0x1eecx13[_0xa94a[47]];_0x1eecx14++){var _0x1eecx15=_0x1eecx13[_0x1eecx14];if(_0x1eecx15== _0xa94a[9]){this[_0xa94a[33]]()}else {this[_0xa94a[73]](_0xa94a[71]+ _0x1eecx15[_0xa94a[72]](),_0x1eecx15)}}};Toolbar[_0xa94a[6]][_0xa94a[73]]= function(_0x1eecx16,_0x1eecx15){var _0x1eecx17=this[_0xa94a[0]][_0xa94a[74]][_0xa94a[24]](_0x1eecx15);var _0x1eecx11=null;if(_0x1eecx17!= null){_0x1eecx11= this[_0xa94a[76]](_0x1eecx16,_0x1eecx17[_0xa94a[75]],_0x1eecx17[_0xa94a[57]]);_0x1eecx11[_0xa94a[61]](_0x1eecx17[_0xa94a[60]]);_0x1eecx17[_0xa94a[51]](_0xa94a[59],function(){_0x1eecx11[_0xa94a[61]](_0x1eecx17[_0xa94a[60]])})};return _0x1eecx11};Toolbar[_0xa94a[6]][_0xa94a[76]]= function(_0x1eecx18,_0x1eecxd,_0x1eecx12){var _0x1eecx11=this[_0xa94a[63]](_0x1eecx18);this[_0xa94a[64]](_0x1eecx11,_0x1eecxd);this[_0xa94a[77]](_0x1eecx11,_0x1eecx12);this[_0xa94a[1]][_0xa94a[66]](_0x1eecx11);return _0x1eecx11};Toolbar[_0xa94a[6]][_0xa94a[78]]= function(_0x1eecx19){var _0x1eecx7=this[_0xa94a[0]][_0xa94a[41]][_0xa94a[40]];var _0x1eecx1a=function(){var _0x1eecx1b=!_0x1eecx7[_0xa94a[79]]();for(var _0x1eecx14=0;_0x1eecx14< _0x1eecx19[_0xa94a[47]];_0x1eecx14++){_0x1eecx19[_0x1eecx14][_0xa94a[61]](_0x1eecx1b)}};_0x1eecx7[_0xa94a[52]]()[_0xa94a[51]](mxEvent.CHANGE,_0x1eecx1a);_0x1eecx1a()};Toolbar[_0xa94a[6]][_0xa94a[80]]= function(_0x1eecx19){var _0x1eecx7=this[_0xa94a[0]][_0xa94a[41]][_0xa94a[40]];var _0x1eecx1a=function(){var _0x1eecx1c=false;if(!_0x1eecx7[_0xa94a[79]]()){var _0x1eecx1d=_0x1eecx7[_0xa94a[81]]();for(var _0x1eecx14=0;_0x1eecx14< _0x1eecx1d[_0xa94a[47]];_0x1eecx14++){if(_0x1eecx7[_0xa94a[53]]()[_0xa94a[82]](_0x1eecx1d[_0x1eecx14])){_0x1eecx1c= true;break}}};for(var _0x1eecx14=0;_0x1eecx14< _0x1eecx19[_0xa94a[47]];_0x1eecx14++){_0x1eecx19[_0x1eecx14][_0xa94a[61]](_0x1eecx1c)}};_0x1eecx7[_0xa94a[52]]()[_0xa94a[51]](mxEvent.CHANGE,_0x1eecx1a);_0x1eecx1a()};Toolbar[_0xa94a[6]][_0xa94a[64]]= function(_0x1eecx11,_0x1eecxd){_0x1eecx11[_0xa94a[85]](_0xa94a[83],_0xa94a[84]);if(_0x1eecxd!= null){_0x1eecx11[_0xa94a[85]](_0xa94a[86],_0x1eecxd)};this[_0xa94a[87]](_0x1eecx11)};Toolbar[_0xa94a[6]][_0xa94a[87]]= function(_0x1eecx11){var _0x1eecx18=_0x1eecx11[_0xa94a[69]];_0x1eecx11[_0xa94a[61]]= function(_0x1eecx1e){_0x1eecx11[_0xa94a[60]]= _0x1eecx1e;if(_0x1eecx1e){_0x1eecx11[_0xa94a[69]]= _0x1eecx18}else {_0x1eecx11[_0xa94a[69]]= _0x1eecx18+ _0xa94a[88]}};_0x1eecx11[_0xa94a[61]](true)};Toolbar[_0xa94a[6]][_0xa94a[77]]= function(_0x1eecx11,_0x1eecx12){if(_0x1eecx12!= null){mxEvent[_0xa94a[51]](_0x1eecx11,_0xa94a[89],function(_0x1eecx4){if(_0x1eecx11[_0xa94a[60]]){_0x1eecx12(_0x1eecx4)};mxEvent[_0xa94a[90]](_0x1eecx4)})}};Toolbar[_0xa94a[6]][_0xa94a[63]]= function(_0x1eecx18){var _0x1eecx11=document[_0xa94a[68]](_0xa94a[91]);_0x1eecx11[_0xa94a[85]](_0xa94a[92],_0xa94a[93]);_0x1eecx11[_0xa94a[69]]= _0xa94a[94];var _0x1eecx1f=document[_0xa94a[68]](_0xa94a[67]);_0x1eecx1f[_0xa94a[69]]= _0xa94a[95]+ _0x1eecx18;_0x1eecx11[_0xa94a[66]](_0x1eecx1f);return _0x1eecx11};Toolbar[_0xa94a[6]][_0xa94a[62]]= function(_0x1eecxc,_0x1eecxd){var _0x1eecx11=document[_0xa94a[68]](_0xa94a[91]);_0x1eecx11[_0xa94a[85]](_0xa94a[92],_0xa94a[93]);_0x1eecx11[_0xa94a[69]]= _0xa94a[96];mxUtils[_0xa94a[97]](_0x1eecx11,_0x1eecxc);return _0x1eecx11};Toolbar[_0xa94a[6]][_0xa94a[65]]= function(_0x1eecx11,_0x1eecxe,_0x1eecx12,_0x1eecx20){if(_0x1eecx12!= null){var _0x1eecx7=this[_0xa94a[0]][_0xa94a[41]][_0xa94a[40]];var _0x1eecx10=null;mxEvent[_0xa94a[51]](_0x1eecx11,_0xa94a[89],mxUtils[_0xa94a[4]](this,function(_0x1eecx4){if(_0x1eecx11[_0xa94a[60]]== null|| _0x1eecx11[_0xa94a[60]]){_0x1eecx7[_0xa94a[98]][_0xa94a[3]]();_0x1eecx10= new mxPopupMenu(_0x1eecx12);_0x1eecx10[_0xa94a[67]][_0xa94a[69]]+= _0xa94a[99];_0x1eecx10[_0xa94a[100]]= _0x1eecx20;_0x1eecx10[_0xa94a[101]]= _0x1eecxe;_0x1eecx10[_0xa94a[102]]= true;_0x1eecx10[_0xa94a[106]](_0x1eecx11[_0xa94a[103]],_0x1eecx11[_0xa94a[104]]+ _0x1eecx11[_0xa94a[105]]+ 34,null,_0x1eecx4);this[_0xa94a[54]]= _0x1eecx10};mxEvent[_0xa94a[90]](_0x1eecx4)}))}} \ No newline at end of file diff --git a/public/assets/plugins/square/js/custom.js b/public/assets/plugins/square/js/custom.js index 761d95c..7bd3e93 100644 --- a/public/assets/plugins/square/js/custom.js +++ b/public/assets/plugins/square/js/custom.js @@ -1,307 +1 @@ -var urlParams = (function(url) { - var result = new Object(); - var idx = url.lastIndexOf('?'); - - if (idx > 0) { - var params = url.substring(idx + 1).split('&'); - - for (var i = 0; i < params.length; i++) { - idx = params[i].indexOf('='); - - if (idx > 0) { - result[params[i].substring(0, idx)] = params[i].substring(idx + 1); - } - } - } - - return result; -})(window.location.href); - -var t0 = new Date(); - -// Public global variables -var MAX_REQUEST_SIZE = 10485760; -var MAX_WIDTH = 12000; -var MAX_HEIGHT = 12000; - -// CUSTOM_PARAMETERS - URLs for save and export -var EXPORT_URL = 'http://exp.draw.io/ImageExport2/export'; -var SHARE_HOST = 'http://localhost:3000'; - -var SAVE_URL = 'api/square/projects/'; -var VARIABLE_URL = '/api/variables'; - -// Paths and files -var STENCIL_PATH = '/assets/plugins/square/stencils'; -var SHAPES_PATH = '/assets/plugins/square/shapes'; -var IMAGE_PATH = '/assets/plugins/mxgraph/images'; -// Path for images inside the diagram -//var GRAPH_IMAGE_PATH = 'assets/plugins/mxgraph/img'; -//var ICONFINDER_PATH = 'iconfinder'; -var STYLE_PATH = '/assets/plugins/mxgraph/styles'; -var CSS_PATH = '/assets/plugins/mxgraph/styles'; -var OPEN_FORM = 'api/square/projects/open'; -var TEMPLATE_PATH = '/assets/plugins/square/templates'; - -// Directory for i18 files and basename for main i18n file -var RESOURCES_PATH = '/assets/plugins/square/resources'; -var RESOURCE_BASE = RESOURCES_PATH + '/dia'; - -// Specifies connection mode for touch devices (at least one should be true) -var tapAndHoldStartsConnection = true; -var showConnectorImg = true; - -var mxLoadResources = false; -var mxLanguage = 'en'; -console.log('custom', localStorage.getItem('NG_TRANSLATE_LANG_KEY')); -switch (localStorage.getItem('NG_TRANSLATE_LANG_KEY')) { - case 'en_EN': - mxLanguage = 'en'; - break; - case 'it': - mxLanguage = 'it'; - break; - default: - mxLanguage = 'en'; -} -console.log('mxLanguage', mxLanguage); - -var mxLanguages = ['ar', 'bs', 'cs', 'da', 'de', 'el', 'es', 'es-ar', 'fr', - 'hu', 'id', 'it', 'ja', 'ko', 'nl', 'no', 'pl', 'pt-br', 'pt', 'ro', 'ru', - 'sr', 'sv', 'th', 'tr', 'uk', 'zh' -]; -var mxBasePath = 'assets/plugins/mxgraph'; -var geBasePath = 'assets/plugins/mxgraph/js'; - -var ISPEECHLANG = { - usenglishfemale: 'US English Female', - usenglishmale: 'US English Male', - ukenglishfemale: 'UK English Female', - ukenglishmale: 'UK English Male', - auenglishfemale: 'Australian English', - usspanishfemale: 'US Spanish Female', - usspanishmale: 'US Spanish Male', - chchinesefemale: 'Chinese Female', - chchinesemale: 'Chinese Male', - hkchinesefemale: 'Hong Kong Cantonese Female', - twchinesefemale: 'Taiwan Chinese Female', - jpjapanesefemale: 'Japanese Female', - jpjapanesemale: 'Japanese Male', - krkoreanfemale: 'Korean Female', - krkoreanmale: 'Korean Male', - caenglishfemale: 'Canadian English Female', - huhungarianfemale: 'Hungarian Female', - brportuguesefemale: 'Brazilian Portuguese Female', - eurportuguesefemale: 'European Portuguese Female', - eurportuguesemale: 'European Portuguese Male', - eurspanishfemale: 'European Spanish Female', - eurspanishmale: 'European Spanish Male', - eurcatalanfemale: 'European Catalan Female', - eurczechfemale: 'European Czech Female', - eurdanishfemale: 'European Danish Female', - eurfinnishfemale: 'European Finnish Female', - eurfrenchfemale: 'European French Female', - eurfrenchmale: 'European French Male', - eurnorwegianfemale: 'European Norwegian Female', - eurdutchfemale: 'European Dutch Female', - eurpolishfemale: 'European Polish Female', - euritalianfemale: 'European Italian Female', - eurturkishfemale: 'European Turkish Female ', - eurturkishmale: 'European Turkish Male', - eurgermanfemale: 'European German Female', - eurgermanmale: 'European German Male', - rurussianfemale: 'Russian Female', - rurussianmale: 'Russian Male', - swswedishfemale: 'Swedish Female', - cafrenchfemale: 'Canadian French Female', - cafrenchmale: 'Canadian French Male' -}; -var BOOLSELECT = { - 'yes': 'Yes', - 'no': 'No' -}; - -var ISPEECHASRLANG = { - 'en-US': 'English (US)', - 'en-CA': 'English (Canada)', - 'en-GB': 'English (UK)', - 'en-AU': 'English (Australia)', - 'es-ES': 'Spanish (Spain)', - 'es-MX': 'Spanish (Mexico)', - 'it-IT': 'Italian (Italy) / Finnish (Finland)', - 'fr-FR': 'French (France)', - 'fr-CA': 'French (Canada)', - 'pl-PL': 'Polish (Poland)', - 'pt-PT': 'Portuguese (Portugal)', - 'ca-ES': 'Catalan (Catalan)', - 'zh-TW': 'Chinese (Taiwan)', - 'da-DK': 'Danish (Denmark)', - 'fr-FR': 'German (Germany)', - 'ja-JP': 'Japanese (Japan)', - 'ko-KR': 'Korean (Korea)', - 'nl-NL': 'Dutch (Netherlands)', - 'nb-NO': 'Norwegian (Norway)', - 'pt-BR': 'Portuguese (Brazil)', - 'ru-RU': 'Russian (Russia)', - 'sv-SE': 'Swedish (Sweden)', - 'zh-CN': 'Chinese (China)', - 'zh-HK': 'Chinese (Hong Kong)' -}; - -var ISPEECHASRMODEL = { - 0: 'Default', - date: 'Date', - usmoney: 'US Money', - numbersto9: 'Numbers to 9', - numbersto99: 'Numbers to 99', - numbersto999: 'Numbers to 999', - time: 'Time', - phonenumber: 'Phone number', - streets: 'Streets', - citystate: 'US City/States' -}; - -var ISPEECHBEEP = { - 'BEEP': 'Yes', - 'NOBEEP': 'No' -}; - -var RECORDINGFORMAT = { - 'wav': 'wav', - 'gsm': 'gsm' -}; - -var SECRETDIGITSPOS = { - 'first': 'First', - 'last': 'Last' -}; - -var ASRINTKEYS = { - '#': '#', - '*': '*' -}; - -var GOOGLETTSLANG = { - 'af': 'Afrikaans', - 'sq': 'Albanian', - 'am': 'Amharic', - 'ar': 'Arabic', - 'hy': 'Armenian', - 'az': 'Azerbaijani', - 'eu': 'Basque', - 'be': 'Belarusian', - 'bn': 'Bengali', - 'bh': 'Bihari', - 'bs': 'Bosnian', - 'br': 'Breton', - 'bg': 'Bulgarian', - 'km': 'Cambodian', - 'ca': 'Catalan', - 'zh-CN': 'Chinese (Simplified)', - 'zh-TW': 'Chinese (Traditional)', - 'co': 'Corsican', - 'hr': 'Croatian', - 'cs': 'Czech', - 'da': 'Danish', - 'nl': 'Dutch', - 'en': 'English', - 'eo': 'Esperanto', - 'et': 'Estonian', - 'fo': 'Faroese', - 'tl': 'Filipino', - 'fi': 'Finnish', - 'fr': 'French', - 'fy': 'Frisian', - 'gl': 'Galician', - 'ka': 'Georgian', - 'de': 'German', - 'el': 'Greek', - 'gn': 'Guarani', - 'gu': 'Gujarati', - 'xx-hacker': 'Hacker', - 'ha': 'Hausa', - 'iw': 'Hebrew', - 'hi': 'Hindi', - 'hu': 'Hungarian', - 'is': 'Icelandic', - 'id': 'Indonesian', - 'ia': 'Interlingua', - 'ga': 'Irish', - 'it': 'Italian', - 'jw': 'Javanese', - 'ja': 'Japanese', - 'kn': 'Kannada', - 'kk': 'Kazakh', - 'rw': 'Kinyarwanda', - 'rn': 'Kirundi', - 'xx-klingon': 'Klingon', - 'ku': 'Kurdish', - 'ko': 'Korean', - 'ky': 'Kyrgyz', - 'lo': 'Laothian', - 'la': 'Latin', - 'lv': 'Latvian', - 'ln': 'Lingala', - 'lt': 'Lithuanian', - 'mk': 'Macedonian', - 'mg': 'Malagasy', - 'ms': 'Malay', - 'ml': 'Malayalam', - 'mt': 'Maltese', - 'mi': 'Maori', - 'mr': 'Marathi', - 'mo': 'Moldavian', - 'mn': 'Mongolian', - 'sr-ME': 'Montenegrin', - 'ne': 'Nepali', - 'no': 'Norwegian', - 'nn': 'Norwegian (Nynorsk)', - 'oc': 'Occitan', - 'or': 'Oriya', - 'om': 'Oromo', - 'ps': 'Pashto', - 'fa': 'Persian', - 'xx-pirate': 'Pirate', - 'pl': 'Polish', - 'pt-BR': 'Portuguese (Brazil)', - 'pt-PT': 'Portuguese (Portugal)', - 'pa': 'Punjabi', - 'qu': 'Quechua', - 'ro': 'Romanian', - 'rm': 'Romansh', - 'ru': 'Russian', - 'gd': 'Scots Gaelic', - 'sr': 'Serbian', - 'sh': 'Serbo-Croatian', - 'st': 'Sesotho', - 'sn': 'Shona', - 'sd': 'Sindhi', - 'si': 'Sinhalese', - 'sk': 'Slovak', - 'sl': 'Slovenian', - 'so': 'Somali', - 'es': 'Spanish', - 'su': 'Sundanese', - 'sw': 'Swahili', - 'sv': 'Swedish', - 'tg': 'Tajik', - 'ta': 'Tamil', - 'tt': 'Tatar', - 'te': 'Telugu', - 'th': 'Thai', - 'ti': 'Tigrinya', - 'to': 'Tonga', - 'tr': 'Turkish', - 'tk': 'Turkmen', - 'tw': 'Twi', - 'ug': 'Uighur', - 'uk': 'Ukrainian', - 'ur': 'Urdu', - 'uz': 'Uzbek', - 'vi': 'Vietnamese', - 'cy': 'Welsh', - 'xh': 'Xhosa', - 'yi': 'Yiddish', - 'yo': 'Yoruba', - 'zu': 'Zulu' -}; +var _0x4b26=["\x68\x72\x65\x66","\x6C\x6F\x63\x61\x74\x69\x6F\x6E","\x3F","\x6C\x61\x73\x74\x49\x6E\x64\x65\x78\x4F\x66","\x26","\x73\x70\x6C\x69\x74","\x73\x75\x62\x73\x74\x72\x69\x6E\x67","\x6C\x65\x6E\x67\x74\x68","\x3D","\x69\x6E\x64\x65\x78\x4F\x66","\x68\x74\x74\x70\x3A\x2F\x2F\x65\x78\x70\x2E\x64\x72\x61\x77\x2E\x69\x6F\x2F\x49\x6D\x61\x67\x65\x45\x78\x70\x6F\x72\x74\x32\x2F\x65\x78\x70\x6F\x72\x74","\x68\x74\x74\x70\x3A\x2F\x2F\x6C\x6F\x63\x61\x6C\x68\x6F\x73\x74\x3A\x33\x30\x30\x30","\x61\x70\x69\x2F\x73\x71\x75\x61\x72\x65\x2F\x70\x72\x6F\x6A\x65\x63\x74\x73\x2F","\x2F\x61\x70\x69\x2F\x76\x61\x72\x69\x61\x62\x6C\x65\x73","\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x73\x71\x75\x61\x72\x65\x2F\x73\x74\x65\x6E\x63\x69\x6C\x73","\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x73\x71\x75\x61\x72\x65\x2F\x73\x68\x61\x70\x65\x73","\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x6D\x78\x67\x72\x61\x70\x68\x2F\x69\x6D\x61\x67\x65\x73","\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x6D\x78\x67\x72\x61\x70\x68\x2F\x73\x74\x79\x6C\x65\x73","\x61\x70\x69\x2F\x73\x71\x75\x61\x72\x65\x2F\x70\x72\x6F\x6A\x65\x63\x74\x73\x2F\x6F\x70\x65\x6E","\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x73\x71\x75\x61\x72\x65\x2F\x74\x65\x6D\x70\x6C\x61\x74\x65\x73","\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x73\x71\x75\x61\x72\x65\x2F\x72\x65\x73\x6F\x75\x72\x63\x65\x73","\x2F\x64\x69\x61","\x65\x6E","\x63\x75\x73\x74\x6F\x6D","\x4E\x47\x5F\x54\x52\x41\x4E\x53\x4C\x41\x54\x45\x5F\x4C\x41\x4E\x47\x5F\x4B\x45\x59","\x67\x65\x74\x49\x74\x65\x6D","\x6C\x6F\x67","\x65\x6E\x5F\x45\x4E","\x69\x74","\x6D\x78\x4C\x61\x6E\x67\x75\x61\x67\x65","\x61\x72","\x62\x73","\x63\x73","\x64\x61","\x64\x65","\x65\x6C","\x65\x73","\x65\x73\x2D\x61\x72","\x66\x72","\x68\x75","\x69\x64","\x6A\x61","\x6B\x6F","\x6E\x6C","\x6E\x6F","\x70\x6C","\x70\x74\x2D\x62\x72","\x70\x74","\x72\x6F","\x72\x75","\x73\x72","\x73\x76","\x74\x68","\x74\x72","\x75\x6B","\x7A\x68","\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x6D\x78\x67\x72\x61\x70\x68","\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x6D\x78\x67\x72\x61\x70\x68\x2F\x6A\x73","\x55\x53\x20\x45\x6E\x67\x6C\x69\x73\x68\x20\x46\x65\x6D\x61\x6C\x65","\x55\x53\x20\x45\x6E\x67\x6C\x69\x73\x68\x20\x4D\x61\x6C\x65","\x55\x4B\x20\x45\x6E\x67\x6C\x69\x73\x68\x20\x46\x65\x6D\x61\x6C\x65","\x55\x4B\x20\x45\x6E\x67\x6C\x69\x73\x68\x20\x4D\x61\x6C\x65","\x41\x75\x73\x74\x72\x61\x6C\x69\x61\x6E\x20\x45\x6E\x67\x6C\x69\x73\x68","\x55\x53\x20\x53\x70\x61\x6E\x69\x73\x68\x20\x46\x65\x6D\x61\x6C\x65","\x55\x53\x20\x53\x70\x61\x6E\x69\x73\x68\x20\x4D\x61\x6C\x65","\x43\x68\x69\x6E\x65\x73\x65\x20\x46\x65\x6D\x61\x6C\x65","\x43\x68\x69\x6E\x65\x73\x65\x20\x4D\x61\x6C\x65","\x48\x6F\x6E\x67\x20\x4B\x6F\x6E\x67\x20\x43\x61\x6E\x74\x6F\x6E\x65\x73\x65\x20\x46\x65\x6D\x61\x6C\x65","\x54\x61\x69\x77\x61\x6E\x20\x43\x68\x69\x6E\x65\x73\x65\x20\x46\x65\x6D\x61\x6C\x65","\x4A\x61\x70\x61\x6E\x65\x73\x65\x20\x46\x65\x6D\x61\x6C\x65","\x4A\x61\x70\x61\x6E\x65\x73\x65\x20\x4D\x61\x6C\x65","\x4B\x6F\x72\x65\x61\x6E\x20\x46\x65\x6D\x61\x6C\x65","\x4B\x6F\x72\x65\x61\x6E\x20\x4D\x61\x6C\x65","\x43\x61\x6E\x61\x64\x69\x61\x6E\x20\x45\x6E\x67\x6C\x69\x73\x68\x20\x46\x65\x6D\x61\x6C\x65","\x48\x75\x6E\x67\x61\x72\x69\x61\x6E\x20\x46\x65\x6D\x61\x6C\x65","\x42\x72\x61\x7A\x69\x6C\x69\x61\x6E\x20\x50\x6F\x72\x74\x75\x67\x75\x65\x73\x65\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x50\x6F\x72\x74\x75\x67\x75\x65\x73\x65\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x50\x6F\x72\x74\x75\x67\x75\x65\x73\x65\x20\x4D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x53\x70\x61\x6E\x69\x73\x68\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x53\x70\x61\x6E\x69\x73\x68\x20\x4D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x43\x61\x74\x61\x6C\x61\x6E\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x43\x7A\x65\x63\x68\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x44\x61\x6E\x69\x73\x68\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x46\x69\x6E\x6E\x69\x73\x68\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x46\x72\x65\x6E\x63\x68\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x46\x72\x65\x6E\x63\x68\x20\x4D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x4E\x6F\x72\x77\x65\x67\x69\x61\x6E\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x44\x75\x74\x63\x68\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x50\x6F\x6C\x69\x73\x68\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x49\x74\x61\x6C\x69\x61\x6E\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x54\x75\x72\x6B\x69\x73\x68\x20\x46\x65\x6D\x61\x6C\x65\x09","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x54\x75\x72\x6B\x69\x73\x68\x20\x4D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x47\x65\x72\x6D\x61\x6E\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x47\x65\x72\x6D\x61\x6E\x20\x4D\x61\x6C\x65","\x52\x75\x73\x73\x69\x61\x6E\x20\x46\x65\x6D\x61\x6C\x65","\x52\x75\x73\x73\x69\x61\x6E\x20\x4D\x61\x6C\x65","\x53\x77\x65\x64\x69\x73\x68\x20\x46\x65\x6D\x61\x6C\x65","\x43\x61\x6E\x61\x64\x69\x61\x6E\x20\x46\x72\x65\x6E\x63\x68\x20\x46\x65\x6D\x61\x6C\x65","\x43\x61\x6E\x61\x64\x69\x61\x6E\x20\x46\x72\x65\x6E\x63\x68\x20\x4D\x61\x6C\x65","\x59\x65\x73","\x4E\x6F","\x45\x6E\x67\x6C\x69\x73\x68\x20\x28\x55\x53\x29","\x45\x6E\x67\x6C\x69\x73\x68\x20\x28\x43\x61\x6E\x61\x64\x61\x29","\x45\x6E\x67\x6C\x69\x73\x68\x20\x28\x55\x4B\x29","\x45\x6E\x67\x6C\x69\x73\x68\x20\x28\x41\x75\x73\x74\x72\x61\x6C\x69\x61\x29","\x53\x70\x61\x6E\x69\x73\x68\x20\x28\x53\x70\x61\x69\x6E\x29","\x53\x70\x61\x6E\x69\x73\x68\x20\x28\x4D\x65\x78\x69\x63\x6F\x29","\x49\x74\x61\x6C\x69\x61\x6E\x20\x28\x49\x74\x61\x6C\x79\x29\x20\x2F\x20\x46\x69\x6E\x6E\x69\x73\x68\x20\x28\x46\x69\x6E\x6C\x61\x6E\x64\x29","\x46\x72\x65\x6E\x63\x68\x20\x28\x46\x72\x61\x6E\x63\x65\x29","\x46\x72\x65\x6E\x63\x68\x20\x28\x43\x61\x6E\x61\x64\x61\x29","\x50\x6F\x6C\x69\x73\x68\x20\x28\x50\x6F\x6C\x61\x6E\x64\x29","\x50\x6F\x72\x74\x75\x67\x75\x65\x73\x65\x20\x28\x50\x6F\x72\x74\x75\x67\x61\x6C\x29","\x43\x61\x74\x61\x6C\x61\x6E\x20\x28\x43\x61\x74\x61\x6C\x61\x6E\x29","\x43\x68\x69\x6E\x65\x73\x65\x20\x28\x54\x61\x69\x77\x61\x6E\x29","\x44\x61\x6E\x69\x73\x68\x20\x28\x44\x65\x6E\x6D\x61\x72\x6B\x29","\x47\x65\x72\x6D\x61\x6E\x20\x28\x47\x65\x72\x6D\x61\x6E\x79\x29","\x4A\x61\x70\x61\x6E\x65\x73\x65\x20\x28\x4A\x61\x70\x61\x6E\x29","\x4B\x6F\x72\x65\x61\x6E\x20\x28\x4B\x6F\x72\x65\x61\x29","\x44\x75\x74\x63\x68\x20\x28\x4E\x65\x74\x68\x65\x72\x6C\x61\x6E\x64\x73\x29","\x4E\x6F\x72\x77\x65\x67\x69\x61\x6E\x20\x28\x4E\x6F\x72\x77\x61\x79\x29","\x50\x6F\x72\x74\x75\x67\x75\x65\x73\x65\x20\x28\x42\x72\x61\x7A\x69\x6C\x29","\x52\x75\x73\x73\x69\x61\x6E\x20\x28\x52\x75\x73\x73\x69\x61\x29","\x53\x77\x65\x64\x69\x73\x68\x20\x28\x53\x77\x65\x64\x65\x6E\x29","\x43\x68\x69\x6E\x65\x73\x65\x20\x28\x43\x68\x69\x6E\x61\x29","\x43\x68\x69\x6E\x65\x73\x65\x20\x28\x48\x6F\x6E\x67\x20\x4B\x6F\x6E\x67\x29","\x44\x65\x66\x61\x75\x6C\x74","\x44\x61\x74\x65","\x55\x53\x20\x4D\x6F\x6E\x65\x79","\x4E\x75\x6D\x62\x65\x72\x73\x20\x74\x6F\x20\x39","\x4E\x75\x6D\x62\x65\x72\x73\x20\x74\x6F\x20\x39\x39","\x4E\x75\x6D\x62\x65\x72\x73\x20\x74\x6F\x20\x39\x39\x39","\x54\x69\x6D\x65","\x50\x68\x6F\x6E\x65\x20\x6E\x75\x6D\x62\x65\x72","\x53\x74\x72\x65\x65\x74\x73","\x55\x53\x20\x43\x69\x74\x79\x2F\x53\x74\x61\x74\x65\x73","\x77\x61\x76","\x67\x73\x6D","\x46\x69\x72\x73\x74","\x4C\x61\x73\x74","\x23","\x2A","\x41\x66\x72\x69\x6B\x61\x61\x6E\x73","\x41\x6C\x62\x61\x6E\x69\x61\x6E","\x41\x6D\x68\x61\x72\x69\x63","\x41\x72\x61\x62\x69\x63","\x41\x72\x6D\x65\x6E\x69\x61\x6E","\x41\x7A\x65\x72\x62\x61\x69\x6A\x61\x6E\x69","\x42\x61\x73\x71\x75\x65","\x42\x65\x6C\x61\x72\x75\x73\x69\x61\x6E","\x42\x65\x6E\x67\x61\x6C\x69","\x42\x69\x68\x61\x72\x69","\x42\x6F\x73\x6E\x69\x61\x6E","\x42\x72\x65\x74\x6F\x6E","\x42\x75\x6C\x67\x61\x72\x69\x61\x6E","\x43\x61\x6D\x62\x6F\x64\x69\x61\x6E","\x43\x61\x74\x61\x6C\x61\x6E","\x43\x68\x69\x6E\x65\x73\x65\x20\x28\x53\x69\x6D\x70\x6C\x69\x66\x69\x65\x64\x29","\x43\x68\x69\x6E\x65\x73\x65\x20\x28\x54\x72\x61\x64\x69\x74\x69\x6F\x6E\x61\x6C\x29","\x43\x6F\x72\x73\x69\x63\x61\x6E","\x43\x72\x6F\x61\x74\x69\x61\x6E","\x43\x7A\x65\x63\x68","\x44\x61\x6E\x69\x73\x68","\x44\x75\x74\x63\x68","\x45\x6E\x67\x6C\x69\x73\x68","\x45\x73\x70\x65\x72\x61\x6E\x74\x6F","\x45\x73\x74\x6F\x6E\x69\x61\x6E","\x46\x61\x72\x6F\x65\x73\x65","\x46\x69\x6C\x69\x70\x69\x6E\x6F","\x46\x69\x6E\x6E\x69\x73\x68","\x46\x72\x65\x6E\x63\x68","\x46\x72\x69\x73\x69\x61\x6E","\x47\x61\x6C\x69\x63\x69\x61\x6E","\x47\x65\x6F\x72\x67\x69\x61\x6E","\x47\x65\x72\x6D\x61\x6E","\x47\x72\x65\x65\x6B","\x47\x75\x61\x72\x61\x6E\x69","\x47\x75\x6A\x61\x72\x61\x74\x69","\x48\x61\x63\x6B\x65\x72","\x48\x61\x75\x73\x61","\x48\x65\x62\x72\x65\x77","\x48\x69\x6E\x64\x69","\x48\x75\x6E\x67\x61\x72\x69\x61\x6E","\x49\x63\x65\x6C\x61\x6E\x64\x69\x63","\x49\x6E\x64\x6F\x6E\x65\x73\x69\x61\x6E","\x49\x6E\x74\x65\x72\x6C\x69\x6E\x67\x75\x61","\x49\x72\x69\x73\x68","\x49\x74\x61\x6C\x69\x61\x6E","\x4A\x61\x76\x61\x6E\x65\x73\x65","\x4A\x61\x70\x61\x6E\x65\x73\x65","\x4B\x61\x6E\x6E\x61\x64\x61","\x4B\x61\x7A\x61\x6B\x68","\x4B\x69\x6E\x79\x61\x72\x77\x61\x6E\x64\x61","\x4B\x69\x72\x75\x6E\x64\x69","\x4B\x6C\x69\x6E\x67\x6F\x6E","\x4B\x75\x72\x64\x69\x73\x68","\x4B\x6F\x72\x65\x61\x6E","\x4B\x79\x72\x67\x79\x7A","\x4C\x61\x6F\x74\x68\x69\x61\x6E","\x4C\x61\x74\x69\x6E","\x4C\x61\x74\x76\x69\x61\x6E","\x4C\x69\x6E\x67\x61\x6C\x61","\x4C\x69\x74\x68\x75\x61\x6E\x69\x61\x6E","\x4D\x61\x63\x65\x64\x6F\x6E\x69\x61\x6E","\x4D\x61\x6C\x61\x67\x61\x73\x79","\x4D\x61\x6C\x61\x79","\x4D\x61\x6C\x61\x79\x61\x6C\x61\x6D","\x4D\x61\x6C\x74\x65\x73\x65","\x4D\x61\x6F\x72\x69","\x4D\x61\x72\x61\x74\x68\x69","\x4D\x6F\x6C\x64\x61\x76\x69\x61\x6E","\x4D\x6F\x6E\x67\x6F\x6C\x69\x61\x6E","\x4D\x6F\x6E\x74\x65\x6E\x65\x67\x72\x69\x6E","\x4E\x65\x70\x61\x6C\x69","\x4E\x6F\x72\x77\x65\x67\x69\x61\x6E","\x4E\x6F\x72\x77\x65\x67\x69\x61\x6E\x20\x28\x4E\x79\x6E\x6F\x72\x73\x6B\x29","\x4F\x63\x63\x69\x74\x61\x6E","\x4F\x72\x69\x79\x61","\x4F\x72\x6F\x6D\x6F","\x50\x61\x73\x68\x74\x6F","\x50\x65\x72\x73\x69\x61\x6E","\x50\x69\x72\x61\x74\x65","\x50\x6F\x6C\x69\x73\x68","\x50\x75\x6E\x6A\x61\x62\x69","\x51\x75\x65\x63\x68\x75\x61","\x52\x6F\x6D\x61\x6E\x69\x61\x6E","\x52\x6F\x6D\x61\x6E\x73\x68","\x52\x75\x73\x73\x69\x61\x6E","\x53\x63\x6F\x74\x73\x20\x47\x61\x65\x6C\x69\x63","\x53\x65\x72\x62\x69\x61\x6E","\x53\x65\x72\x62\x6F\x2D\x43\x72\x6F\x61\x74\x69\x61\x6E","\x53\x65\x73\x6F\x74\x68\x6F","\x53\x68\x6F\x6E\x61","\x53\x69\x6E\x64\x68\x69","\x53\x69\x6E\x68\x61\x6C\x65\x73\x65","\x53\x6C\x6F\x76\x61\x6B","\x53\x6C\x6F\x76\x65\x6E\x69\x61\x6E","\x53\x6F\x6D\x61\x6C\x69","\x53\x70\x61\x6E\x69\x73\x68","\x53\x75\x6E\x64\x61\x6E\x65\x73\x65","\x53\x77\x61\x68\x69\x6C\x69","\x53\x77\x65\x64\x69\x73\x68","\x54\x61\x6A\x69\x6B","\x54\x61\x6D\x69\x6C","\x54\x61\x74\x61\x72","\x54\x65\x6C\x75\x67\x75","\x54\x68\x61\x69","\x54\x69\x67\x72\x69\x6E\x79\x61","\x54\x6F\x6E\x67\x61","\x54\x75\x72\x6B\x69\x73\x68","\x54\x75\x72\x6B\x6D\x65\x6E","\x54\x77\x69","\x55\x69\x67\x68\x75\x72","\x55\x6B\x72\x61\x69\x6E\x69\x61\x6E","\x55\x72\x64\x75","\x55\x7A\x62\x65\x6B","\x56\x69\x65\x74\x6E\x61\x6D\x65\x73\x65","\x57\x65\x6C\x73\x68","\x58\x68\x6F\x73\x61","\x59\x69\x64\x64\x69\x73\x68","\x59\x6F\x72\x75\x62\x61","\x5A\x75\x6C\x75"];var urlParams=(function(_0x5471x2){var _0x5471x3= new Object();var _0x5471x4=_0x5471x2[_0x4b26[3]](_0x4b26[2]);if(_0x5471x4> 0){var _0x5471x5=_0x5471x2[_0x4b26[6]](_0x5471x4+ 1)[_0x4b26[5]](_0x4b26[4]);for(var _0x5471x6=0;_0x5471x6< _0x5471x5[_0x4b26[7]];_0x5471x6++){_0x5471x4= _0x5471x5[_0x5471x6][_0x4b26[9]](_0x4b26[8]);if(_0x5471x4> 0){_0x5471x3[_0x5471x5[_0x5471x6][_0x4b26[6]](0,_0x5471x4)]= _0x5471x5[_0x5471x6][_0x4b26[6]](_0x5471x4+ 1)}}};return _0x5471x3})(window[_0x4b26[1]][_0x4b26[0]]);var t0= new Date();var MAX_REQUEST_SIZE=10485760;var MAX_WIDTH=12000;var MAX_HEIGHT=12000;var EXPORT_URL=_0x4b26[10];var SHARE_HOST=_0x4b26[11];var SAVE_URL=_0x4b26[12];var VARIABLE_URL=_0x4b26[13];var STENCIL_PATH=_0x4b26[14];var SHAPES_PATH=_0x4b26[15];var IMAGE_PATH=_0x4b26[16];var STYLE_PATH=_0x4b26[17];var CSS_PATH=_0x4b26[17];var OPEN_FORM=_0x4b26[18];var TEMPLATE_PATH=_0x4b26[19];var RESOURCES_PATH=_0x4b26[20];var RESOURCE_BASE=RESOURCES_PATH+ _0x4b26[21];var tapAndHoldStartsConnection=true;var showConnectorImg=true;var mxLoadResources=false;var mxLanguage=_0x4b26[22];console[_0x4b26[26]](_0x4b26[23],localStorage[_0x4b26[25]](_0x4b26[24]));switch(localStorage[_0x4b26[25]](_0x4b26[24])){case _0x4b26[27]:mxLanguage= _0x4b26[22];break;case _0x4b26[28]:mxLanguage= _0x4b26[28];break;default:mxLanguage= _0x4b26[22]};console[_0x4b26[26]](_0x4b26[29],mxLanguage);var mxLanguages=[_0x4b26[30],_0x4b26[31],_0x4b26[32],_0x4b26[33],_0x4b26[34],_0x4b26[35],_0x4b26[36],_0x4b26[37],_0x4b26[38],_0x4b26[39],_0x4b26[40],_0x4b26[28],_0x4b26[41],_0x4b26[42],_0x4b26[43],_0x4b26[44],_0x4b26[45],_0x4b26[46],_0x4b26[47],_0x4b26[48],_0x4b26[49],_0x4b26[50],_0x4b26[51],_0x4b26[52],_0x4b26[53],_0x4b26[54],_0x4b26[55]];var mxBasePath=_0x4b26[56];var geBasePath=_0x4b26[57];var ISPEECHLANG={usenglishfemale:_0x4b26[58],usenglishmale:_0x4b26[59],ukenglishfemale:_0x4b26[60],ukenglishmale:_0x4b26[61],auenglishfemale:_0x4b26[62],usspanishfemale:_0x4b26[63],usspanishmale:_0x4b26[64],chchinesefemale:_0x4b26[65],chchinesemale:_0x4b26[66],hkchinesefemale:_0x4b26[67],twchinesefemale:_0x4b26[68],jpjapanesefemale:_0x4b26[69],jpjapanesemale:_0x4b26[70],krkoreanfemale:_0x4b26[71],krkoreanmale:_0x4b26[72],caenglishfemale:_0x4b26[73],huhungarianfemale:_0x4b26[74],brportuguesefemale:_0x4b26[75],eurportuguesefemale:_0x4b26[76],eurportuguesemale:_0x4b26[77],eurspanishfemale:_0x4b26[78],eurspanishmale:_0x4b26[79],eurcatalanfemale:_0x4b26[80],eurczechfemale:_0x4b26[81],eurdanishfemale:_0x4b26[82],eurfinnishfemale:_0x4b26[83],eurfrenchfemale:_0x4b26[84],eurfrenchmale:_0x4b26[85],eurnorwegianfemale:_0x4b26[86],eurdutchfemale:_0x4b26[87],eurpolishfemale:_0x4b26[88],euritalianfemale:_0x4b26[89],eurturkishfemale:_0x4b26[90],eurturkishmale:_0x4b26[91],eurgermanfemale:_0x4b26[92],eurgermanmale:_0x4b26[93],rurussianfemale:_0x4b26[94],rurussianmale:_0x4b26[95],swswedishfemale:_0x4b26[96],cafrenchfemale:_0x4b26[97],cafrenchmale:_0x4b26[98]};var BOOLSELECT={"\x79\x65\x73":_0x4b26[99],"\x6E\x6F":_0x4b26[100]};var ISPEECHASRLANG={"\x65\x6E\x2D\x55\x53":_0x4b26[101],"\x65\x6E\x2D\x43\x41":_0x4b26[102],"\x65\x6E\x2D\x47\x42":_0x4b26[103],"\x65\x6E\x2D\x41\x55":_0x4b26[104],"\x65\x73\x2D\x45\x53":_0x4b26[105],"\x65\x73\x2D\x4D\x58":_0x4b26[106],"\x69\x74\x2D\x49\x54":_0x4b26[107],"\x66\x72\x2D\x46\x52":_0x4b26[108],"\x66\x72\x2D\x43\x41":_0x4b26[109],"\x70\x6C\x2D\x50\x4C":_0x4b26[110],"\x70\x74\x2D\x50\x54":_0x4b26[111],"\x63\x61\x2D\x45\x53":_0x4b26[112],"\x7A\x68\x2D\x54\x57":_0x4b26[113],"\x64\x61\x2D\x44\x4B":_0x4b26[114],"\x66\x72\x2D\x46\x52":_0x4b26[115],"\x6A\x61\x2D\x4A\x50":_0x4b26[116],"\x6B\x6F\x2D\x4B\x52":_0x4b26[117],"\x6E\x6C\x2D\x4E\x4C":_0x4b26[118],"\x6E\x62\x2D\x4E\x4F":_0x4b26[119],"\x70\x74\x2D\x42\x52":_0x4b26[120],"\x72\x75\x2D\x52\x55":_0x4b26[121],"\x73\x76\x2D\x53\x45":_0x4b26[122],"\x7A\x68\x2D\x43\x4E":_0x4b26[123],"\x7A\x68\x2D\x48\x4B":_0x4b26[124]};var ISPEECHASRMODEL={0:_0x4b26[125],date:_0x4b26[126],usmoney:_0x4b26[127],numbersto9:_0x4b26[128],numbersto99:_0x4b26[129],numbersto999:_0x4b26[130],time:_0x4b26[131],phonenumber:_0x4b26[132],streets:_0x4b26[133],citystate:_0x4b26[134]};var ISPEECHBEEP={"\x42\x45\x45\x50":_0x4b26[99],"\x4E\x4F\x42\x45\x45\x50":_0x4b26[100]};var RECORDINGFORMAT={"\x77\x61\x76":_0x4b26[135],"\x67\x73\x6D":_0x4b26[136]};var SECRETDIGITSPOS={"\x66\x69\x72\x73\x74":_0x4b26[137],"\x6C\x61\x73\x74":_0x4b26[138]};var ASRINTKEYS={"\x23":_0x4b26[139],"\x2A":_0x4b26[140]};var GOOGLETTSLANG={"\x61\x66":_0x4b26[141],"\x73\x71":_0x4b26[142],"\x61\x6D":_0x4b26[143],"\x61\x72":_0x4b26[144],"\x68\x79":_0x4b26[145],"\x61\x7A":_0x4b26[146],"\x65\x75":_0x4b26[147],"\x62\x65":_0x4b26[148],"\x62\x6E":_0x4b26[149],"\x62\x68":_0x4b26[150],"\x62\x73":_0x4b26[151],"\x62\x72":_0x4b26[152],"\x62\x67":_0x4b26[153],"\x6B\x6D":_0x4b26[154],"\x63\x61":_0x4b26[155],"\x7A\x68\x2D\x43\x4E":_0x4b26[156],"\x7A\x68\x2D\x54\x57":_0x4b26[157],"\x63\x6F":_0x4b26[158],"\x68\x72":_0x4b26[159],"\x63\x73":_0x4b26[160],"\x64\x61":_0x4b26[161],"\x6E\x6C":_0x4b26[162],"\x65\x6E":_0x4b26[163],"\x65\x6F":_0x4b26[164],"\x65\x74":_0x4b26[165],"\x66\x6F":_0x4b26[166],"\x74\x6C":_0x4b26[167],"\x66\x69":_0x4b26[168],"\x66\x72":_0x4b26[169],"\x66\x79":_0x4b26[170],"\x67\x6C":_0x4b26[171],"\x6B\x61":_0x4b26[172],"\x64\x65":_0x4b26[173],"\x65\x6C":_0x4b26[174],"\x67\x6E":_0x4b26[175],"\x67\x75":_0x4b26[176],"\x78\x78\x2D\x68\x61\x63\x6B\x65\x72":_0x4b26[177],"\x68\x61":_0x4b26[178],"\x69\x77":_0x4b26[179],"\x68\x69":_0x4b26[180],"\x68\x75":_0x4b26[181],"\x69\x73":_0x4b26[182],"\x69\x64":_0x4b26[183],"\x69\x61":_0x4b26[184],"\x67\x61":_0x4b26[185],"\x69\x74":_0x4b26[186],"\x6A\x77":_0x4b26[187],"\x6A\x61":_0x4b26[188],"\x6B\x6E":_0x4b26[189],"\x6B\x6B":_0x4b26[190],"\x72\x77":_0x4b26[191],"\x72\x6E":_0x4b26[192],"\x78\x78\x2D\x6B\x6C\x69\x6E\x67\x6F\x6E":_0x4b26[193],"\x6B\x75":_0x4b26[194],"\x6B\x6F":_0x4b26[195],"\x6B\x79":_0x4b26[196],"\x6C\x6F":_0x4b26[197],"\x6C\x61":_0x4b26[198],"\x6C\x76":_0x4b26[199],"\x6C\x6E":_0x4b26[200],"\x6C\x74":_0x4b26[201],"\x6D\x6B":_0x4b26[202],"\x6D\x67":_0x4b26[203],"\x6D\x73":_0x4b26[204],"\x6D\x6C":_0x4b26[205],"\x6D\x74":_0x4b26[206],"\x6D\x69":_0x4b26[207],"\x6D\x72":_0x4b26[208],"\x6D\x6F":_0x4b26[209],"\x6D\x6E":_0x4b26[210],"\x73\x72\x2D\x4D\x45":_0x4b26[211],"\x6E\x65":_0x4b26[212],"\x6E\x6F":_0x4b26[213],"\x6E\x6E":_0x4b26[214],"\x6F\x63":_0x4b26[215],"\x6F\x72":_0x4b26[216],"\x6F\x6D":_0x4b26[217],"\x70\x73":_0x4b26[218],"\x66\x61":_0x4b26[219],"\x78\x78\x2D\x70\x69\x72\x61\x74\x65":_0x4b26[220],"\x70\x6C":_0x4b26[221],"\x70\x74\x2D\x42\x52":_0x4b26[120],"\x70\x74\x2D\x50\x54":_0x4b26[111],"\x70\x61":_0x4b26[222],"\x71\x75":_0x4b26[223],"\x72\x6F":_0x4b26[224],"\x72\x6D":_0x4b26[225],"\x72\x75":_0x4b26[226],"\x67\x64":_0x4b26[227],"\x73\x72":_0x4b26[228],"\x73\x68":_0x4b26[229],"\x73\x74":_0x4b26[230],"\x73\x6E":_0x4b26[231],"\x73\x64":_0x4b26[232],"\x73\x69":_0x4b26[233],"\x73\x6B":_0x4b26[234],"\x73\x6C":_0x4b26[235],"\x73\x6F":_0x4b26[236],"\x65\x73":_0x4b26[237],"\x73\x75":_0x4b26[238],"\x73\x77":_0x4b26[239],"\x73\x76":_0x4b26[240],"\x74\x67":_0x4b26[241],"\x74\x61":_0x4b26[242],"\x74\x74":_0x4b26[243],"\x74\x65":_0x4b26[244],"\x74\x68":_0x4b26[245],"\x74\x69":_0x4b26[246],"\x74\x6F":_0x4b26[247],"\x74\x72":_0x4b26[248],"\x74\x6B":_0x4b26[249],"\x74\x77":_0x4b26[250],"\x75\x67":_0x4b26[251],"\x75\x6B":_0x4b26[252],"\x75\x72":_0x4b26[253],"\x75\x7A":_0x4b26[254],"\x76\x69":_0x4b26[255],"\x63\x79":_0x4b26[256],"\x78\x68":_0x4b26[257],"\x79\x69":_0x4b26[258],"\x79\x6F":_0x4b26[259],"\x7A\x75":_0x4b26[260]} \ No newline at end of file diff --git a/public/index.html b/public/index.html index 0fe17cf..6dcbda6 100644 --- a/public/index.html +++ b/public/index.html @@ -50,7 +50,7 @@ <![endif]--> <script src="app/29680297.vendor.js"></script> - <script src="app/4a68e305.app.js"></script> + <script src="app/fc371ddc.app.js"></script> <!-- BEGIN JAVASCRIPTS(Load javascripts at bottom, this will reduce page load time) --> <!-- BEGIN CORE PLUGINS --> diff --git a/release-notes/changelog_0.0.148.txt b/release-notes/changelog_0.0.148.txt index 5a449a2..1ac665c 100644 --- a/release-notes/changelog_0.0.148.txt +++ b/release-notes/changelog_0.0.148.txt @@ -1,5 +1,10 @@ # xCALLY MOTION Changelog +- * 1d5a56b - 2016-10-26: Updated triggers +- * 842c61a - 2016-10-26: Changed urlforward promises order +- * 6c37db5 - 2016-10-26: Fixed yourdashboard permissions for main tour +- * c3dc798 - 2016-10-25: Fixed yourdashboards agent permission +- * 5a4227c - 2016-10-25: Removed all config hooks, sending the io and process messages before creation/update; Fixed cm trigger and contact choose for header notifications - * 68f82a2 - 2016-10-24: Replaced hooks with direct functions in ami to increase the performances - * 5a1b040 - 2016-10-24: add logs for slow triggers issue - * 0047ef3 - 2016-10-21: Replaced a timer @@ -23,9 +28,4 @@ - * 51e6a79 - 2016-10-19: Fixed agent dashboard queue table resize; Fixed td disposal. - * 978fb2d - 2016-10-19: Increased max size for custom dashboard - * 1829e0c - 2016-10-19: Added check for custom dashboard size -- * 9c831a6 - 2016-10-19: Fixed queue setting pattern -- * 9923e2c - 2016-10-19: update label for update complete -- * 72616fc - 2016-10-19: Fixed channels realtime socket synchronization; Fixed new queues setting retrocompatibility and added inputs pattern; Fixed telephone realtime unsync. -- * 1413a72 - 2016-10-18: Fixed voice realtime -- * 3713e54 - 2016-10-18: fix report_agent update (only one row and not all effected rows) diff --git a/server/api/_apidoc.js b/server/api/_apidoc.js index 2530c28..93f3758 100644 --- a/server/api/_apidoc.js +++ b/server/api/_apidoc.js @@ -1,21 +1 @@ -/** - * @api {post} /api/auth/local/ Basic authentication - * - * @apiVersion 0.0.143 - * @apiName BasicAuth - * @apiGroup Authentication - * - * @apiHeader (Header) {String} Authorization Authorization access token. - * - * @apiSuccess {String} role User/Agent role. - * @apiSuccess {String} token User/Agent token. - * @apiSuccess {Number} userId User/Agent ID. - * - * @apiSuccessExample {json} Success-Response: - * HTTP/1.1 200 OK - * { - * "role": "admin", - * "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6MTQsImlhdCI6MTQ3MjQ1ODIyMiwiZXhwIjoxNDcyNTQ0NjIyfQ" - * "userId": 5 - * } - */ +var _0x7d33=[] \ No newline at end of file diff --git a/server/api/action/action.controller.js b/server/api/action/action.controller.js index a5d8d27..78777aa 100644 --- a/server/api/action/action.controller.js +++ b/server/api/action/action.controller.js @@ -1,88 +1 @@ -/** - * Using Rails-like standard naming convention for endpoints. - * GET /api/actions -> index - * POST /api/actions -> create - * GET /api/actions/:id -> show - * PUT /api/actions/:id -> update - * DELETE /api/actions/:id -> destroy - */ - -'use strict'; - - -var _ = require('lodash'); - -var Action = require('../../models').Action; -var sequelize = require('../../models').sequelize; - -function handleError(res, err) { - return res.status(500).send(err); -} - -function responseWithResult(res, statusCode) { - statusCode = statusCode || 200; - return function(entity) { - if (entity) { - res.status(statusCode).json(entity); - } - }; -} - -function handleEntityNotFound(res) { - return function(entity) { - if (!entity) { - res.status(404).end(); - return null; - } - return entity; - }; -} - -function saveUpdates(updates) { - return function(entity) { - return entity.updateAttributes(updates) - .then(function(updated) { - return updated; - }); - }; -} - -function removeEntity(res) { - return function(entity) { - if (entity) { - return entity.destroy() - .then(function() { - res.status(204).end(); - }); - } - }; -} - -// Gets a list of Actions -exports.index = function(req, res) { - return Action.findAll() - .then(responseWithResult(res)) - .catch(handleError(res)); -} - -// Creates a new Action in the DB -exports.create = function(req, res, next) { - req.body.UserId = req.user.id; - return sequelize.transaction(function(t) { - return Action - .create(_.merge(req.body, req.params), { - transaction: t, - body: req.body - }); - }) - .then(function(action) { - return res.status(201).send(action); - }).catch(function(err) { - console.log(err); - if (err.message === 'Interface not found') { - err.message = 'No queues associated for the user'; - err.translatedMessage = 'MESSAGE_NO_USER_QUEUES'; - } - return handleError(res, err); - }); -} +var _0xe5eb=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x41\x63\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x6A\x73\x6F\x6E","\x65\x6E\x64","\x74\x68\x65\x6E","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x64\x65\x73\x74\x72\x6F\x79","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x66\x69\x6E\x64\x41\x6C\x6C","\x63\x72\x65\x61\x74\x65","\x55\x73\x65\x72\x49\x64","\x62\x6F\x64\x79","\x69\x64","\x75\x73\x65\x72","\x6C\x6F\x67","\x6D\x65\x73\x73\x61\x67\x65","\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x20\x6E\x6F\x74\x20\x66\x6F\x75\x6E\x64","\x4E\x6F\x20\x71\x75\x65\x75\x65\x73\x20\x61\x73\x73\x6F\x63\x69\x61\x74\x65\x64\x20\x66\x6F\x72\x20\x74\x68\x65\x20\x75\x73\x65\x72","\x74\x72\x61\x6E\x73\x6C\x61\x74\x65\x64\x4D\x65\x73\x73\x61\x67\x65","\x4D\x45\x53\x53\x41\x47\x45\x5F\x4E\x4F\x5F\x55\x53\x45\x52\x5F\x51\x55\x45\x55\x45\x53","\x70\x61\x72\x61\x6D\x73","\x6D\x65\x72\x67\x65","\x74\x72\x61\x6E\x73\x61\x63\x74\x69\x6F\x6E"];_0xe5eb[0];var _=require(_0xe5eb[1]);var Action=require(_0xe5eb[3])[_0xe5eb[2]];var sequelize=require(_0xe5eb[3])[_0xe5eb[4]];function handleError(_0xb8c6x5,_0xb8c6x6){return _0xb8c6x5[_0xe5eb[6]](500)[_0xe5eb[5]](_0xb8c6x6)}function responseWithResult(_0xb8c6x5,_0xb8c6x8){_0xb8c6x8= _0xb8c6x8|| 200;return function(_0xb8c6x9){if(_0xb8c6x9){_0xb8c6x5[_0xe5eb[6]](_0xb8c6x8)[_0xe5eb[7]](_0xb8c6x9)}}}function handleEntityNotFound(_0xb8c6x5){return function(_0xb8c6x9){if(!_0xb8c6x9){_0xb8c6x5[_0xe5eb[6]](404)[_0xe5eb[8]]();return null};return _0xb8c6x9}}function saveUpdates(_0xb8c6xc){return function(_0xb8c6x9){return _0xb8c6x9[_0xe5eb[10]](_0xb8c6xc)[_0xe5eb[9]](function(_0xb8c6xd){return _0xb8c6xd})}}function removeEntity(_0xb8c6x5){return function(_0xb8c6x9){if(_0xb8c6x9){return _0xb8c6x9[_0xe5eb[11]]()[_0xe5eb[9]](function(){_0xb8c6x5[_0xe5eb[6]](204)[_0xe5eb[8]]()})}}}exports[_0xe5eb[12]]= function(_0xb8c6xf,_0xb8c6x5){return Action[_0xe5eb[14]]()[_0xe5eb[9]](responseWithResult(_0xb8c6x5))[_0xe5eb[13]](handleError(_0xb8c6x5))};exports[_0xe5eb[15]]= function(_0xb8c6xf,_0xb8c6x5,_0xb8c6x10){_0xb8c6xf[_0xe5eb[17]][_0xe5eb[16]]= _0xb8c6xf[_0xe5eb[19]][_0xe5eb[18]];return sequelize[_0xe5eb[28]](function(_0xb8c6x12){return Action[_0xe5eb[15]](_[_0xe5eb[27]](_0xb8c6xf[_0xe5eb[17]],_0xb8c6xf[_0xe5eb[26]]),{transaction:_0xb8c6x12,body:_0xb8c6xf[_0xe5eb[17]]})})[_0xe5eb[9]](function(_0xb8c6x11){return _0xb8c6x5[_0xe5eb[6]](201)[_0xe5eb[5]](_0xb8c6x11)})[_0xe5eb[13]](function(_0xb8c6x6){console[_0xe5eb[20]](_0xb8c6x6);if(_0xb8c6x6[_0xe5eb[21]]=== _0xe5eb[22]){_0xb8c6x6[_0xe5eb[21]]= _0xe5eb[23];_0xb8c6x6[_0xe5eb[24]]= _0xe5eb[25]};return handleError(_0xb8c6x5,_0xb8c6x6)})} \ No newline at end of file diff --git a/server/api/action/action.events.js b/server/api/action/action.events.js index 597aed4..8cf212a 100644 --- a/server/api/action/action.events.js +++ b/server/api/action/action.events.js @@ -1,36 +1 @@ -/** - * Thing model events - */ - -'use strict'; - -const EventEmitter = require('events'); -const Action = require('../../models').Action; - -var ActionEvents = new EventEmitter(); - -// Set max event listeners (0 == unlimited) -ActionEvents.setMaxListeners(0); - -// Model events -var events = { - 'afterCreate': 'save', - 'afterUpdate': 'save', - 'afterDestroy': 'remove' -}; - -// Register the event emitter to the model events -for (var e in events) { - var event = events[e]; - Action.hook(e, emitEvent(event)); -} - -function emitEvent(event) { - return function(doc, options, done) { - ActionEvents.emit(event + ':' + doc._id, doc); - ActionEvents.emit(event, doc); - done(null); - } -} - -module.exports = ActionEvents; +var _0x2992=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x41\x63\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x2992[0];const EventEmitter=require(_0x2992[1]);const Action=require(_0x2992[3])[_0x2992[2]];var ActionEvents= new EventEmitter();ActionEvents[_0x2992[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x2992[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x2992[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x2992[6]};for(var e in events){var event=events[e];Action[_0x2992[7]](e,emitEvent(event))};function emitEvent(event){return function(_0x126bx8,_0x126bx9,_0x126bxa){ActionEvents[_0x2992[10]](event+ _0x2992[8]+ _0x126bx8[_0x2992[9]],_0x126bx8);ActionEvents[_0x2992[10]](event,_0x126bx8);_0x126bxa(null)}}module[_0x2992[11]]= ActionEvents \ No newline at end of file diff --git a/server/api/action/action.socket.js b/server/api/action/action.socket.js index 26d4dbd..41149d4 100644 --- a/server/api/action/action.socket.js +++ b/server/api/action/action.socket.js @@ -1,32 +1 @@ -/** - * Broadcast updates to client when the model changes - */ - -'use strict'; - -const ActionEvents = require('./action.events'); - -// Model events to emit -var events = ['save', 'remove']; - -exports.register = function(socket) { - for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { - var event = events[i]; - var listener = createListener('action:' + event, socket); - - ActionEvents.on(event, listener); - socket.on('disconnect', removeListener(event, listener)); - } -} - -function createListener(event, socket) { - return function(doc) { - socket.emit(event, doc); - }; -} - -function removeListener(event, listener) { - return function() { - ActionEvents.removeListener(event, listener); - }; -} +var _0xb30f=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x61\x63\x74\x69\x6F\x6E\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x61\x63\x74\x69\x6F\x6E\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0xb30f[0];const ActionEvents=require(_0xb30f[1]);var events=[_0xb30f[2],_0xb30f[3]];exports[_0xb30f[4]]= function(_0xcd8cx3){for(var _0xcd8cx4=0,_0xcd8cx5=events[_0xb30f[5]];_0xcd8cx4< _0xcd8cx5;_0xcd8cx4++){var _0xcd8cx6=events[_0xcd8cx4];var _0xcd8cx7=createListener(_0xb30f[6]+ _0xcd8cx6,_0xcd8cx3);ActionEvents[_0xb30f[7]](_0xcd8cx6,_0xcd8cx7);_0xcd8cx3[_0xb30f[7]](_0xb30f[8],removeListener(_0xcd8cx6,_0xcd8cx7))}};function createListener(_0xcd8cx6,_0xcd8cx3){return function(_0xcd8cx9){_0xcd8cx3[_0xb30f[9]](_0xcd8cx6,_0xcd8cx9)}}function removeListener(_0xcd8cx6,_0xcd8cx7){return function(){ActionEvents[_0xb30f[10]](_0xcd8cx6,_0xcd8cx7)}} \ No newline at end of file diff --git a/server/api/action/index.js b/server/api/action/index.js index 1882fa5..91927ea 100644 --- a/server/api/action/index.js +++ b/server/api/action/index.js @@ -1,13 +1 @@ -'use strict'; - -var express = require('express'); - -var auth = require('../../auth/auth.service'); -var controller = require('./action.controller'); - -var router = express.Router(); - -router.get('/', auth.isAuthenticated(), controller.index); -router.post('/:name', auth.isAuthenticated(), controller.create); - -module.exports = router; +var _0x3b93=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x61\x63\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x6E\x61\x6D\x65","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x3b93[0];var express=require(_0x3b93[1]);var auth=require(_0x3b93[2]);var controller=require(_0x3b93[3]);var router=express.Router();router[_0x3b93[7]](_0x3b93[4],auth[_0x3b93[5]](),controller[_0x3b93[6]]);router[_0x3b93[10]](_0x3b93[8],auth[_0x3b93[5]](),controller[_0x3b93[9]]);module[_0x3b93[11]]= router \ No newline at end of file diff --git a/server/api/agent/agent.controller.js b/server/api/agent/agent.controller.js index 355d4e4..d8cbdf3 100644 --- a/server/api/agent/agent.controller.js +++ b/server/api/agent/agent.controller.js @@ -1,1144 +1 @@ -'use strict'; - -var _ = require('lodash'); -var sequelize = require('../../models').sequelize; - -var util = require('util'); -var Util = require('../../config/util'); - -var OpenchannelQueue = require('../../models').OpenchannelQueue; -var VoiceQueue = require('../../models').VoiceQueue; -var ChatQueue = require('../../models').ChatQueue; -var MailQueue = require('../../models').MailQueue; -var FaxQueue = require('../../models').FaxQueue; -var SmsQueue = require('../../models').SmsQueue; -var MailRoom = require('../../models').MailRoom; -var Setting = require('../../models').Setting; -var Agent = require('../../models').User; -var User = require('../../models').User; -var Team = require('../../models').Team; -var List = require('../../models').List; - -// Get list of agents -exports.index = function(req, res, next) { - switch (req.user.role) { - case 'user': - return User - .findById(req.user.id, { - attributes: ['id'] - }) - .then(Util.getAgentsIdByUser(req.query)) - .then(function(result) { - return res.status(200).send(result); - }) - .catch(function(err) { - console.error(err); - return handleError(res, err); - }); - - default: - return Agent - .scope('agent') - .findAndCountAll(Util.getQuery(req.query)) - .then(function(result) { - return res.status(200).send(result); - }) - .catch(function(err) { - return handleError(res, err); - }); - } -}; - -exports.addQueues = function(req, res, next) { - return Agent - .findById(req.params.id, { - attributes: ['id', 'name'] - }) - .then(function(agent) { - if (!agent) { - return res.sendStatus(401); - } - - switch (req.params.channel) { - case 'voice': - return agent - .addVoiceQueues(req.body, { - interface: util.format('SIP/%s', agent.name), - stateinterface: util.format('SIP/%s', agent.name), - membername: agent.name, - UserId: agent.id, - }); - case 'chat': - return agent - .addChatQueues(req.body); - case 'mail': - return agent - .addMailQueues(req.body); - case 'fax': - return agent - .addFaxQueues(req.body); - case 'sms': - return agent - .addSmsQueues(req.body); - case 'openchannel': - return agent - .addOpenchannelQueues(req.body); - default: - return null; - } - }) - .then(function(queues) { - return res.sendStatus(queues ? 200 : 401); - }) - .catch(function(err) { - console.error(err); - }); -}; - -exports.removeQueues = function(req, res, next) { - return Agent - .findById(req.params.id, { - attributes: ['id'] - }) - .then(function(agent) { - if (!agent) { - return res.sendStatus(401); - } - - switch (req.params.channel) { - case 'voice': - return agent - .removeVoiceQueues(req.query.ids); - case 'chat': - return agent - .removeChatQueues(req.query.ids); - case 'mail': - return agent - .removeMailQueues(req.query.ids); - case 'sms': - return agent - .removeSmsQueues(req.query.ids); - case 'fax': - return agent - .removeFaxQueues(req.query.ids); - case 'openchannel': - return agent - .removeOpenchannelQueues(req.query.ids); - default: - return null; - } - }) - .then(function(queues) { - return res.sendStatus(queues ? 200 : 401); - }) - .catch(function(err) { - console.error(err); - }); -}; - - -// Get list of agents -exports.realtimeIndex = function(req, res, next) { - switch (req.user.role) { - case 'user': - return User - .findById(req.user.id, { - attributes: ['id'] - }) - .then(Util.getAgentsIdByUser(req.query)) - .then(function(result) { - return res.status(200).send(result); - }) - .catch(function(err) { - console.log(err); - return handleError(res, err); - }); - default: - return Agent - .scope('agent', { - method: ['checkPauseStatus', req.query] - }, { - method: ['checkQueueStatus', req.query] - }, { - method: ['checkOnlineStatus', req.query] - }, { - method: ['checkSipStatus', req.query] - }, 'queues') - .findAndCountAll(Util.getQuery(req.query)) - .then(function(result) { - return res.status(200).send(result); - }) - .catch(function(err) { - console.log(err); - return handleError(res, err); - }); - } -}; - -exports.realtimeVoiceIndex = function(req, res, next) { - switch (req.user.role) { - case 'user': - var agents = []; - return User - .findById(req.user.id, { - attributes: ['id'] - }) - .then(Util.getVoiceQueuesIdByUser({}, { - attributes: ['name'], - include: [{ - raw: true, - model: User, - attributes: ['id'] - }] - })) - .then(function(queues) { - var voiceQueues = _.map(queues.rows, 'name'); - queues.rows.forEach(function(queue) { - agents = _.union(agents, _.map(queue.Users, 'id')); - }); - return User - .scope('agent', { - method: ['checkPauseStatus', req.query] - }, { - method: ['checkQueueStatus', req.query] - }, { - method: ['checkOnlineStatus', req.query] - }, { - method: ['checkSipStatus', req.query] - }) - .findAndCountAll(_.merge(Util.getQuery(req.query, { - id: { - $in: agents - } - }), { - include: [{ - model: VoiceQueue, - where: { - name: { - $in: voiceQueues - } - }, - required: false - }] - })); - }) - .then(function(result) { - return res.status(200).send(result); - }) - .catch(function(err) { - console.log(err); - return handleError(res, err); - }); - default: - return Agent - .scope('agent', { - method: ['checkPauseStatus', req.query] - }, { - method: ['checkQueueStatus', req.query] - }, { - method: ['checkOnlineStatus', req.query] - }, { - method: ['checkSipStatus', req.query] - }, 'queues') - .findAndCountAll(Util.getQuery(req.query)) - .then(function(result) { - return res.status(200).send(result); - }) - .catch(function(err) { - console.log(err); - return handleError(res, err); - }); - } -}; - -exports.realtimeChatIndex = function(req, res, next) { - switch (req.user.role) { - case 'user': - var agents = []; - return User - .findById(req.user.id, { - attributes: ['id'] - }) - .then(Util.getChatQueuesIdByUser({}, { - attributes: ['id'], - include: [{ - raw: true, - model: User, - attributes: ['id'] - }] - })) - .then(function(queues) { - var chatQueues = _.map(queues.rows, 'id'); - queues.rows.forEach(function(queue) { - agents = _.union(agents, _.map(queue.Users, 'id')); - }); - return User - .scope('agent', { - method: ['checkPauseStatus', req.query] - }, { - method: ['checkQueueStatus', req.query] - }, { - method: ['checkOnlineStatus', req.query] - }, { - method: ['checkSipStatus', req.query] - }) - .findAndCountAll(_.merge(Util.getQuery(req.query, { - id: { - $in: agents - } - }), { - include: [{ - model: ChatQueue, - where: { - id: { - $in: chatQueues - } - }, - required: false - }] - })); - }) - .then(function(result) { - return res.status(200).send(result); - }) - .catch(function(err) { - console.log(err); - return handleError(res, err); - }); - default: - return Agent - .scope('agent', { - method: ['checkPauseStatus', req.query] - }, { - method: ['checkQueueStatus', req.query] - }, { - method: ['checkOnlineStatus', req.query] - }, { - method: ['checkSipStatus', req.query] - }, 'queues') - .findAndCountAll(Util.getQuery(req.query)) - .then(function(result) { - return res.status(200).send(result); - }) - .catch(function(err) { - console.log(err); - return handleError(res, err); - }); - } -}; - -exports.realtimeMailIndex = function(req, res, next) { - switch (req.user.role) { - case 'user': - var agents = []; - return User - .findById(req.user.id, { - attributes: ['id'] - }) - .then(Util.getMailQueuesIdByUser({}, { - attributes: ['id'], - include: [{ - raw: true, - model: User, - attributes: ['id'] - }] - })) - .then(function(queues) { - var mailQueues = _.map(queues.rows, 'id'); - queues.rows.forEach(function(queue) { - agents = _.union(agents, _.map(queue.Users, 'id')); - }); - return User - .scope('agent', { - method: ['checkPauseStatus', req.query] - }, { - method: ['checkQueueStatus', req.query] - }, { - method: ['checkOnlineStatus', req.query] - }, { - method: ['checkSipStatus', req.query] - }) - .findAndCountAll(_.merge(Util.getQuery(req.query, { - id: { - $in: agents - } - }), { - include: [{ - model: MailQueue, - where: { - id: { - $in: mailQueues - } - }, - required: false - }] - })); - }) - .then(function(result) { - return res.status(200).send(result); - }) - .catch(function(err) { - console.log(err); - return handleError(res, err); - }); - default: - return Agent - .scope('agent', { - method: ['checkPauseStatus', req.query] - }, { - method: ['checkQueueStatus', req.query] - }, { - method: ['checkOnlineStatus', req.query] - }, { - method: ['checkSipStatus', req.query] - }, 'queues') - .findAndCountAll(Util.getQuery(req.query)) - .then(function(result) { - return res.status(200).send(result); - }) - .catch(function(err) { - console.log(err); - return handleError(res, err); - }); - } -}; - -exports.realtimeFaxIndex = function(req, res, next) { - switch (req.user.role) { - case 'user': - var agents = []; - return User - .findById(req.user.id, { - attributes: ['id'] - }) - .then(Util.getFaxQueuesIdByUser({}, { - attributes: ['id'], - include: [{ - raw: true, - model: User, - attributes: ['id'] - }] - })) - .then(function(queues) { - var faxQueues = _.map(queues.rows, 'id'); - queues.rows.forEach(function(queue) { - agents = _.union(agents, _.map(queue.Users, 'id')); - }); - return User - .scope('agent', { - method: ['checkPauseStatus', req.query] - }, { - method: ['checkQueueStatus', req.query] - }, { - method: ['checkOnlineStatus', req.query] - }, { - method: ['checkSipStatus', req.query] - }) - .findAndCountAll(_.merge(Util.getQuery(req.query, { - id: { - $in: agents - } - }), { - include: [{ - model: FaxQueue, - where: { - id: { - $in: faxQueues - } - }, - required: false - }] - })); - }) - .then(function(result) { - return res.status(200).send(result); - }) - .catch(function(err) { - console.log(err); - return handleError(res, err); - }); - default: - return Agent - .scope('agent', { - method: ['checkPauseStatus', req.query] - }, { - method: ['checkQueueStatus', req.query] - }, { - method: ['checkOnlineStatus', req.query] - }, { - method: ['checkSipStatus', req.query] - }, 'queues') - .findAndCountAll(Util.getQuery(req.query)) - .then(function(result) { - return res.status(200).send(result); - }) - .catch(function(err) { - console.log(err); - return handleError(res, err); - }); - } -}; -exports.realtimeSmsIndex = function(req, res, next) { - switch (req.user.role) { - case 'user': - var agents = []; - return User - .findById(req.user.id, { - attributes: ['id'] - }) - .then(Util.getSmsQueuesIdByUser({}, { - attributes: ['id'], - include: [{ - raw: true, - model: User, - attributes: ['id'] - }] - })) - .then(function(queues) { - var smsQueues = _.map(queues.rows, 'id'); - queues.rows.forEach(function(queue) { - agents = _.union(agents, _.map(queue.Users, 'id')); - }); - return User - .scope('agent', { - method: ['checkPauseStatus', req.query] - }, { - method: ['checkQueueStatus', req.query] - }, { - method: ['checkOnlineStatus', req.query] - }, { - method: ['checkSipStatus', req.query] - }) - .findAndCountAll(_.merge(Util.getQuery(req.query, { - id: { - $in: agents - } - }), { - include: [{ - model: SmsQueue, - where: { - id: { - $in: smsQueues - } - }, - required: false - }] - })); - }) - .then(function(result) { - return res.status(200).send(result); - }) - .catch(function(err) { - console.log(err); - return handleError(res, err); - }); - default: - return Agent - .scope('agent', { - method: ['checkPauseStatus', req.query] - }, { - method: ['checkQueueStatus', req.query] - }, { - method: ['checkOnlineStatus', req.query] - }, { - method: ['checkSipStatus', req.query] - }, 'queues') - .findAndCountAll(Util.getQuery(req.query)) - .then(function(result) { - return res.status(200).send(result); - }) - .catch(function(err) { - console.log(err); - return handleError(res, err); - }); - } -}; - -exports.realtimeOpenchannelIndex = function(req, res, next) { - switch (req.user.role) { - case 'user': - var agents = []; - return User - .findById(req.user.id, { - attributes: ['id'] - }) - .then(Util.getOpenchannelQueuesIdByUser({}, { - attributes: ['id'], - include: [{ - raw: true, - model: User, - attributes: ['id'] - }] - })) - .then(function(queues) { - var openchannelQueues = _.map(queues.rows, 'id'); - queues.rows.forEach(function(queue) { - agents = _.union(agents, _.map(queue.Users, 'id')); - }); - return User - .scope('agent', { - method: ['checkPauseStatus', req.query] - }, { - method: ['checkQueueStatus', req.query] - }, { - method: ['checkOnlineStatus', req.query] - }, { - method: ['checkSipStatus', req.query] - }) - .findAndCountAll(_.merge(Util.getQuery(req.query, { - id: { - $in: agents - } - }), { - include: [{ - model: OpenchannelQueue, - where: { - id: { - $in: openchannelQueues - } - }, - required: false - }] - })); - }) - .then(function(result) { - return res.status(200).send(result); - }) - .catch(function(err) { - console.log(err); - return handleError(res, err); - }); - default: - return Agent - .scope('agent', { - method: ['checkPauseStatus', req.query] - }, { - method: ['checkQueueStatus', req.query] - }, { - method: ['checkOnlineStatus', req.query] - }, { - method: ['checkSipStatus', req.query] - }, 'queues') - .findAndCountAll(Util.getQuery(req.query)) - .then(function(result) { - return res.status(200).send(result); - }) - .catch(function(err) { - console.log(err); - return handleError(res, err); - }); - } -}; -// Get a single agent -exports.show = function(req, res) { - return Agent - .scope('agent') - .findById(req.params.id) - .then(function(agent) { - if (!agent) { - return res.sendStatus(404); - } - return res.send(agent); - }) - .catch(function(err) { - return handleError(res, err); - }); -}; - -// Get a single agent -exports.showVoiceQueues = function(req, res) { - return Agent - .scope('agent') - .findById(req.params.id) - .then(function(agent) { - if (!agent) { - return res.sendStatus(404); - } - - return agent - .getVoiceQueues({ - attributes: ['name'] - }); - }) - .then(function(voiceQueues) { - return res.send({ - count: voiceQueues.length, - rows: voiceQueues - }); - }) - .catch(function(err) { - return handleError(res, err); - }); -}; - -exports.showChatQueues = function(req, res) { - return Agent - .scope('agent') - .findById(req.params.id) - .then(function(agent) { - if (!agent) { - return res.sendStatus(404); - } - - return agent - .getChatQueues({ - attributes: ['id'] - }); - }) - .then(function(chatQueues) { - return res.send({ - count: chatQueues.length, - rows: chatQueues - }); - }) - .catch(function(err) { - return handleError(res, err); - }); -}; - -exports.showMailQueues = function(req, res) { - return Agent - .scope('agent') - .findById(req.params.id) - .then(function(agent) { - if (!agent) { - return res.sendStatus(404); - } - - return agent - .getMailQueues({ - attributes: ['id'] - }); - }) - .then(function(mailQueues) { - return res.send({ - count: mailQueues.length, - rows: mailQueues - }); - }) - .catch(function(err) { - return handleError(res, err); - }); -}; - -exports.showFaxQueues = function(req, res) { - return Agent - .scope('agent') - .findById(req.params.id) - .then(function(agent) { - if (!agent) { - return res.sendStatus(404); - } - - return agent - .getFaxQueues({ - attributes: ['id'] - }); - }) - .then(function(faxQueues) { - return res.send({ - count: faxQueues.length, - rows: faxQueues - }); - }) - .catch(function(err) { - return handleError(res, err); - }); -}; - -exports.showSmsQueues = function(req, res) { - return Agent - .scope('agent') - .findById(req.params.id) - .then(function(agent) { - if (!agent) { - return res.sendStatus(404); - } - - return agent - .getSmsQueues({ - attributes: ['id'] - }); - }) - .then(function(smsQueues) { - return res.send({ - count: smsQueues.length, - rows: smsQueues - }); - }) - .catch(function(err) { - return handleError(res, err); - }); -}; - -exports.showOpenchannelQueues = function(req, res) { - return Agent - .scope('agent') - .findById(req.params.id) - .then(function(agent) { - if (!agent) { - return res.sendStatus(404); - } - - return agent - .getOpenchannelQueues({ - attributes: ['id'] - }); - }) - .then(function(Queues) { - return res.send({ - count: Queues.length, - rows: Queues - }); - }) - .catch(function(err) { - return handleError(res, err); - }); -}; -// Creates a new agent in the DB. -exports.create = function(req, res) { - var _agent; - - // Set default role - req.body.role = 'agent'; - - return sequelize.transaction(function(t) { - return Agent - .scope('agent') - .create(req.body, { - transaction: t - }) - .then(function(agent) { - _agent = agent; - - return Team - .findOne({ - where: { - defaultEntry: true - } - }); - }) - .then(function(team) { - return team - .addUser(_agent.id, { - transaction: t - }); - }) - .then(function() { - return List - .findOne({ - where: { - defaultEntry: true - } - }); - }) - .then(function(list) { - return list - .addUser(_agent.id, { - transaction: t - }); - }); - // .then(function() { - // if (req.body.channels && req.body.channels.voice && req.body.channels.voice.queues) { - // return _agent - // .addVoiceQueues(req.body.channels.voice.queues, { - // interface: util.format('SIP/%s', _agent.name), - // stateinterface: util.format('SIP/%s', _agent.name), - // membername: _agent.name, - // UserId: _agent.id, - // transaction: t - // }); - // } - // }) - // .then(function() { - // if (req.body.channels && req.body.channels.chat && req.body.channels.chat.queues) { - // return _agent - // .addChatQueues(req.body.channels.chat.queues, { - // transaction: t - // }); - // } - // }) - // .then(function() { - // if (req.body.channels && req.body.channels.mail && req.body.channels.mail.queues) { - // return _agent - // .addMailQueues(req.body.channels.mail.queues, { - // transaction: t - // }); - // } - // }) - // .then(function() { - // if (req.body.channels && req.body.channels.sms && req.body.channels.sms.queues) { - // return _agent - // .addSmsQueues(req.body.channels.sms.queues, { - // transaction: t - // }); - // } - // }) - // .then(function() { - // if (req.body.channels && req.body.channels.fax && req.body.channels.fax.queues) { - // return _agent - // .addFaxQueues(req.body.channels.fax.queues, { - // transaction: t - // }); - // } - // }) - // .then(function() { - // if (req.body.channels && req.body.channels.openchannel && req.body.channels.openchannel.queues) { - // return _agent - // .addOpenchannelQueues(req.body.channels.openchannel.queues, { - // transaction: t - // }); - // } - // }); - }) - .then(function() { - return res.status(201).send(_agent); - }) - .catch(sequelize.UniqueConstraintError, function(err) { - console.log(err); - return Util.errorManager.handleUniqueConstraintError(res, err); - }) - .catch(function(err) { - console.log(err); - return handleError(res, err); - }); -}; - -// Creates a new agent in the DB. -exports.bulkCreate = function(req, res) { - var _agents; - var _setting; - - var items = []; - var password = String(req.body.password); - - return sequelize.transaction(function(t) { - - return Setting - .findById(1) - .then(function(setting) { - _setting = setting; - - var regEx = _setting.securePassword ? /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[~!@#$%^&\-_=+\[\{\]\}.])[0-9a-zA-Z~!@#$%^&\-_=+\[\{\]\}.]{8,}$/ : /^[a-zA-Z0-9]{6,}$/; - - if (!regEx.test(password)) { - throw new Error('Invalid password pattern'); - } - - var startIndex = 0; - if (req.body.hasOwnProperty('startIndex') && _.isNumber(req.body.startIndex) && req.body.startIndex >= 0) { - startIndex = req.body.startIndex; - delete req.body.startIndex; - } - var internalIndex = req.body.minInternal; - delete req.body.minInternal; - - if (req.body.amount) { - req.body.role = 'agent'; - for (var i = startIndex; i < req.body.amount + startIndex; i++, internalIndex++) { - var item = _.clone(req.body); - item.internal = internalIndex; - item.name = item.name + i; - item.fullname = item.fullname + i; - item.email = item.email.split('@')[0] + i + '@' + item.email.split('@')[1]; - items.push(item); - } - } else { - throw new Error('No agents amount specified!'); - } - return Agent - .bulkCreate(items, { - transaction: t, - individualHooks: true - }); - }) - .then(function(agents) { - _agents = agents; - - return Team - .findOne({ - where: { - defaultEntry: true - } - }); - }) - .then(function(team) { - return team - .addUsers(_.map(_agents, 'id'), { - transaction: t - }); - }) - }) - .then(function() { - return res.sendStatus(201); - }) - .catch(sequelize.UniqueConstraintError, function(err) { - console.log(err); - return Util.errorManager.handleUniqueConstraintError(res, err); - }) - .catch(function(err) { - console.log(err); - return handleError(res, err); - }); -}; - -// Updates an existing agent in the DB. -exports.update = function(req, res) { - if (req.body.id) { - delete req.body.id; - } - - delete req.body.role; - delete req.body.name; - delete req.body.password; - - return sequelize.transaction(function(t) { - return Agent - .findById(req.params.id) - .then(function(agent) { - if (!agent) { - return res.sendStatus(404); - } - var updated = _.merge(agent, req.body); - return updated - .save({ - transaction: t - }); - }) - .then(function(agent) { - return res.status(200).send(agent); - }) - }) - .catch(sequelize.UniqueConstraintError, function(err) { - console.log(err); - return Util.errorManager.handleUniqueConstraintError(res, err); - }) - .catch(function(err) { - console.log(err); - return handleError(res, err); - }); -}; - -// Deletes a agent from the DB. -exports.destroy = function(req, res) { - var _agent; - - return Agent - .findById(req.params.id) - .then(function(agent) { - _agent = agent; - if (!agent) { - return res.sendStatus(404); - } - return agent - .destroy(); - }) - .then(function() { - return res.sendStatus(204); - }) - .catch(sequelize.ForeignKeyConstraintError, function(err) { - return Util.errorManager.handleForeignKeyConstraintError(res, 'agent', _agent.name, err); - }) - .catch(function(err) { - return handleError(res, err); - }); -}; - -// Deletes a agent from the DB. -exports.bulkDestroy = function(req, res) { - return Agent - .destroy({ - where: { - id: req.query.ids - }, - individualHooks: true - }) - .then(function() { - return res.sendStatus(204); - }) - .catch(function(err) { - return handleError(res, err); - }); -}; - -/** - * Change a user password //DEPRECATED - */ -exports.changePassword = function(req, res, next) { - var _setting; - - var userId = req.user.id; - var oldPass = String(req.body.oldPassword); - var newPass = String(req.body.newPassword); - - return Setting - .findById(1) - .then(function(setting) { - _setting = setting; - - return Agent - .findById(userId); - }) - .then(function(user) { - var regEx = _setting.securePassword ? /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[~!@#$%^&\-_=+\[\{\]\}.])[0-9a-zA-Z~!@#$%^&\-_=+\[\{\]\}.]{8,}$/ : /^[a-zA-Z0-9]{6,}$/; - - if (!regEx.test(newPass)) { - throw new Error('Invalid password pattern'); - } - - if (user.authenticate(oldPass)) { - user.password = newPass; - - return user - .save(); - } else { - return res.sendStatus(403); - } - }) - .then(function() { - return res.sendStatus(200); - }) - .catch(function(err) { - return handleError(res, err); - }); -}; - -/** - * Change a user password by admin //DEPRECATED - */ -exports.resetPassword = function(req, res, next) { - var _setting; - - var userId = req.params.id; - var newPass = String(req.body.newPassword); - - return Setting - .findById(1) - .then(function(setting) { - _setting = setting; - - return Agent - .findById(userId); - }) - .then(function(user) { - var regEx = _setting.securePassword ? /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[~!@#$%^&\-_=+\[\{\]\}.])[0-9a-zA-Z~!@#$%^&\-_=+\[\{\]\}.]{8,}$/ : /^[a-zA-Z0-9]{6,}$/; - - if (!regEx.test(newPass)) { - throw new Error('Invalid password pattern'); - } - - user.password = newPass; - return user - .save(); - }) - .then(function() { - return res.sendStatus(200); - }) - .catch(function(err) { - return handleError(res, err); - }); -}; - -function handleError(res, err) { - return res.status(500).send(err); -} +var _0x942c=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x75\x74\x69\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x51\x75\x65\x75\x65","\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65","\x43\x68\x61\x74\x51\x75\x65\x75\x65","\x4D\x61\x69\x6C\x51\x75\x65\x75\x65","\x46\x61\x78\x51\x75\x65\x75\x65","\x53\x6D\x73\x51\x75\x65\x75\x65","\x4D\x61\x69\x6C\x52\x6F\x6F\x6D","\x53\x65\x74\x74\x69\x6E\x67","\x55\x73\x65\x72","\x54\x65\x61\x6D","\x4C\x69\x73\x74","\x69\x6E\x64\x65\x78","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x41\x67\x65\x6E\x74\x73\x49\x64\x42\x79\x55\x73\x65\x72","\x69\x64","\x75\x73\x65\x72","\x66\x69\x6E\x64\x42\x79\x49\x64","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x61\x67\x65\x6E\x74","\x73\x63\x6F\x70\x65","\x72\x6F\x6C\x65","\x61\x64\x64\x51\x75\x65\x75\x65\x73","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x62\x6F\x64\x79","\x53\x49\x50\x2F\x25\x73","\x6E\x61\x6D\x65","\x66\x6F\x72\x6D\x61\x74","\x61\x64\x64\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65\x73","\x76\x6F\x69\x63\x65","\x61\x64\x64\x43\x68\x61\x74\x51\x75\x65\x75\x65\x73","\x63\x68\x61\x74","\x61\x64\x64\x4D\x61\x69\x6C\x51\x75\x65\x75\x65\x73","\x6D\x61\x69\x6C","\x61\x64\x64\x46\x61\x78\x51\x75\x65\x75\x65\x73","\x66\x61\x78","\x61\x64\x64\x53\x6D\x73\x51\x75\x65\x75\x65\x73","\x73\x6D\x73","\x61\x64\x64\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x51\x75\x65\x75\x65\x73","\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C","\x63\x68\x61\x6E\x6E\x65\x6C","\x70\x61\x72\x61\x6D\x73","\x72\x65\x6D\x6F\x76\x65\x51\x75\x65\x75\x65\x73","\x69\x64\x73","\x72\x65\x6D\x6F\x76\x65\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65\x73","\x72\x65\x6D\x6F\x76\x65\x43\x68\x61\x74\x51\x75\x65\x75\x65\x73","\x72\x65\x6D\x6F\x76\x65\x4D\x61\x69\x6C\x51\x75\x65\x75\x65\x73","\x72\x65\x6D\x6F\x76\x65\x53\x6D\x73\x51\x75\x65\x75\x65\x73","\x72\x65\x6D\x6F\x76\x65\x46\x61\x78\x51\x75\x65\x75\x65\x73","\x72\x65\x6D\x6F\x76\x65\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x51\x75\x65\x75\x65\x73","\x72\x65\x61\x6C\x74\x69\x6D\x65\x49\x6E\x64\x65\x78","\x6C\x6F\x67","\x63\x68\x65\x63\x6B\x50\x61\x75\x73\x65\x53\x74\x61\x74\x75\x73","\x63\x68\x65\x63\x6B\x51\x75\x65\x75\x65\x53\x74\x61\x74\x75\x73","\x63\x68\x65\x63\x6B\x4F\x6E\x6C\x69\x6E\x65\x53\x74\x61\x74\x75\x73","\x63\x68\x65\x63\x6B\x53\x69\x70\x53\x74\x61\x74\x75\x73","\x71\x75\x65\x75\x65\x73","\x72\x65\x61\x6C\x74\x69\x6D\x65\x56\x6F\x69\x63\x65\x49\x6E\x64\x65\x78","\x72\x6F\x77\x73","\x6D\x61\x70","\x75\x6E\x69\x6F\x6E","\x66\x6F\x72\x45\x61\x63\x68","\x6D\x65\x72\x67\x65","\x67\x65\x74\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65\x73\x49\x64\x42\x79\x55\x73\x65\x72","\x72\x65\x61\x6C\x74\x69\x6D\x65\x43\x68\x61\x74\x49\x6E\x64\x65\x78","\x67\x65\x74\x43\x68\x61\x74\x51\x75\x65\x75\x65\x73\x49\x64\x42\x79\x55\x73\x65\x72","\x72\x65\x61\x6C\x74\x69\x6D\x65\x4D\x61\x69\x6C\x49\x6E\x64\x65\x78","\x67\x65\x74\x4D\x61\x69\x6C\x51\x75\x65\x75\x65\x73\x49\x64\x42\x79\x55\x73\x65\x72","\x72\x65\x61\x6C\x74\x69\x6D\x65\x46\x61\x78\x49\x6E\x64\x65\x78","\x67\x65\x74\x46\x61\x78\x51\x75\x65\x75\x65\x73\x49\x64\x42\x79\x55\x73\x65\x72","\x72\x65\x61\x6C\x74\x69\x6D\x65\x53\x6D\x73\x49\x6E\x64\x65\x78","\x67\x65\x74\x53\x6D\x73\x51\x75\x65\x75\x65\x73\x49\x64\x42\x79\x55\x73\x65\x72","\x72\x65\x61\x6C\x74\x69\x6D\x65\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x49\x6E\x64\x65\x78","\x67\x65\x74\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x51\x75\x65\x75\x65\x73\x49\x64\x42\x79\x55\x73\x65\x72","\x73\x68\x6F\x77","\x73\x68\x6F\x77\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65\x73","\x6C\x65\x6E\x67\x74\x68","\x67\x65\x74\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65\x73","\x73\x68\x6F\x77\x43\x68\x61\x74\x51\x75\x65\x75\x65\x73","\x67\x65\x74\x43\x68\x61\x74\x51\x75\x65\x75\x65\x73","\x73\x68\x6F\x77\x4D\x61\x69\x6C\x51\x75\x65\x75\x65\x73","\x67\x65\x74\x4D\x61\x69\x6C\x51\x75\x65\x75\x65\x73","\x73\x68\x6F\x77\x46\x61\x78\x51\x75\x65\x75\x65\x73","\x67\x65\x74\x46\x61\x78\x51\x75\x65\x75\x65\x73","\x73\x68\x6F\x77\x53\x6D\x73\x51\x75\x65\x75\x65\x73","\x67\x65\x74\x53\x6D\x73\x51\x75\x65\x75\x65\x73","\x73\x68\x6F\x77\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x51\x75\x65\x75\x65\x73","\x67\x65\x74\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x51\x75\x65\x75\x65\x73","\x63\x72\x65\x61\x74\x65","\x68\x61\x6E\x64\x6C\x65\x55\x6E\x69\x71\x75\x65\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74\x45\x72\x72\x6F\x72","\x65\x72\x72\x6F\x72\x4D\x61\x6E\x61\x67\x65\x72","\x61\x64\x64\x55\x73\x65\x72","\x66\x69\x6E\x64\x4F\x6E\x65","\x74\x72\x61\x6E\x73\x61\x63\x74\x69\x6F\x6E","\x62\x75\x6C\x6B\x43\x72\x65\x61\x74\x65","\x70\x61\x73\x73\x77\x6F\x72\x64","\x61\x64\x64\x55\x73\x65\x72\x73","\x73\x65\x63\x75\x72\x65\x50\x61\x73\x73\x77\x6F\x72\x64","\x74\x65\x73\x74","\x49\x6E\x76\x61\x6C\x69\x64\x20\x70\x61\x73\x73\x77\x6F\x72\x64\x20\x70\x61\x74\x74\x65\x72\x6E","\x73\x74\x61\x72\x74\x49\x6E\x64\x65\x78","\x68\x61\x73\x4F\x77\x6E\x50\x72\x6F\x70\x65\x72\x74\x79","\x69\x73\x4E\x75\x6D\x62\x65\x72","\x6D\x69\x6E\x49\x6E\x74\x65\x72\x6E\x61\x6C","\x61\x6D\x6F\x75\x6E\x74","\x63\x6C\x6F\x6E\x65","\x69\x6E\x74\x65\x72\x6E\x61\x6C","\x66\x75\x6C\x6C\x6E\x61\x6D\x65","\x65\x6D\x61\x69\x6C","\x40","\x73\x70\x6C\x69\x74","\x70\x75\x73\x68","\x4E\x6F\x20\x61\x67\x65\x6E\x74\x73\x20\x61\x6D\x6F\x75\x6E\x74\x20\x73\x70\x65\x63\x69\x66\x69\x65\x64\x21","\x75\x70\x64\x61\x74\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79","\x68\x61\x6E\x64\x6C\x65\x46\x6F\x72\x65\x69\x67\x6E\x4B\x65\x79\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74\x45\x72\x72\x6F\x72","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x63\x68\x61\x6E\x67\x65\x50\x61\x73\x73\x77\x6F\x72\x64","\x6F\x6C\x64\x50\x61\x73\x73\x77\x6F\x72\x64","\x6E\x65\x77\x50\x61\x73\x73\x77\x6F\x72\x64","\x61\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65","\x72\x65\x73\x65\x74\x50\x61\x73\x73\x77\x6F\x72\x64"];_0x942c[0];var _=require(_0x942c[1]);var sequelize=require(_0x942c[3])[_0x942c[2]];var util=require(_0x942c[4]);var Util=require(_0x942c[5]);var OpenchannelQueue=require(_0x942c[3])[_0x942c[6]];var VoiceQueue=require(_0x942c[3])[_0x942c[7]];var ChatQueue=require(_0x942c[3])[_0x942c[8]];var MailQueue=require(_0x942c[3])[_0x942c[9]];var FaxQueue=require(_0x942c[3])[_0x942c[10]];var SmsQueue=require(_0x942c[3])[_0x942c[11]];var MailRoom=require(_0x942c[3])[_0x942c[12]];var Setting=require(_0x942c[3])[_0x942c[13]];var Agent=require(_0x942c[3])[_0x942c[14]];var User=require(_0x942c[3])[_0x942c[14]];var Team=require(_0x942c[3])[_0x942c[15]];var List=require(_0x942c[3])[_0x942c[16]];exports[_0x942c[17]]= function(_0x3b13x11,_0x3b13x12,_0x3b13x13){switch(_0x3b13x11[_0x942c[26]][_0x942c[32]]){case _0x942c[26]:return User[_0x942c[27]](_0x3b13x11[_0x942c[26]][_0x942c[25]],{attributes:[_0x942c[25]]})[_0x942c[22]](Util[_0x942c[24]](_0x3b13x11[_0x942c[23]]))[_0x942c[22]](function(_0x3b13x15){return _0x3b13x12[_0x942c[21]](200)[_0x942c[20]](_0x3b13x15)})[_0x942c[19]](function(_0x3b13x14){console[_0x942c[18]](_0x3b13x14);return handleError(_0x3b13x12,_0x3b13x14)});default:return Agent[_0x942c[31]](_0x942c[30])[_0x942c[29]](Util[_0x942c[28]](_0x3b13x11[_0x942c[23]]))[_0x942c[22]](function(_0x3b13x15){return _0x3b13x12[_0x942c[21]](200)[_0x942c[20]](_0x3b13x15)})[_0x942c[19]](function(_0x3b13x14){return handleError(_0x3b13x12,_0x3b13x14)})}};exports[_0x942c[33]]= function(_0x3b13x11,_0x3b13x12,_0x3b13x13){return Agent[_0x942c[27]](_0x3b13x11[_0x942c[52]][_0x942c[25]],{attributes:[_0x942c[25],_0x942c[37]]})[_0x942c[22]](function(_0x3b13x17){if(!_0x3b13x17){return _0x3b13x12[_0x942c[34]](401)};switch(_0x3b13x11[_0x942c[52]][_0x942c[51]]){case _0x942c[40]:return _0x3b13x17[_0x942c[39]](_0x3b13x11[_0x942c[35]],{interface:util[_0x942c[38]](_0x942c[36],_0x3b13x17[_0x942c[37]]),stateinterface:util[_0x942c[38]](_0x942c[36],_0x3b13x17[_0x942c[37]]),membername:_0x3b13x17[_0x942c[37]],UserId:_0x3b13x17[_0x942c[25]]});case _0x942c[42]:return _0x3b13x17[_0x942c[41]](_0x3b13x11[_0x942c[35]]);case _0x942c[44]:return _0x3b13x17[_0x942c[43]](_0x3b13x11[_0x942c[35]]);case _0x942c[46]:return _0x3b13x17[_0x942c[45]](_0x3b13x11[_0x942c[35]]);case _0x942c[48]:return _0x3b13x17[_0x942c[47]](_0x3b13x11[_0x942c[35]]);case _0x942c[50]:return _0x3b13x17[_0x942c[49]](_0x3b13x11[_0x942c[35]]);default:return null}})[_0x942c[22]](function(_0x3b13x16){return _0x3b13x12[_0x942c[34]](_0x3b13x16?200:401)})[_0x942c[19]](function(_0x3b13x14){console[_0x942c[18]](_0x3b13x14)})};exports[_0x942c[53]]= function(_0x3b13x11,_0x3b13x12,_0x3b13x13){return Agent[_0x942c[27]](_0x3b13x11[_0x942c[52]][_0x942c[25]],{attributes:[_0x942c[25]]})[_0x942c[22]](function(_0x3b13x17){if(!_0x3b13x17){return _0x3b13x12[_0x942c[34]](401)};switch(_0x3b13x11[_0x942c[52]][_0x942c[51]]){case _0x942c[40]:return _0x3b13x17[_0x942c[55]](_0x3b13x11[_0x942c[23]][_0x942c[54]]);case _0x942c[42]:return _0x3b13x17[_0x942c[56]](_0x3b13x11[_0x942c[23]][_0x942c[54]]);case _0x942c[44]:return _0x3b13x17[_0x942c[57]](_0x3b13x11[_0x942c[23]][_0x942c[54]]);case _0x942c[48]:return _0x3b13x17[_0x942c[58]](_0x3b13x11[_0x942c[23]][_0x942c[54]]);case _0x942c[46]:return _0x3b13x17[_0x942c[59]](_0x3b13x11[_0x942c[23]][_0x942c[54]]);case _0x942c[50]:return _0x3b13x17[_0x942c[60]](_0x3b13x11[_0x942c[23]][_0x942c[54]]);default:return null}})[_0x942c[22]](function(_0x3b13x16){return _0x3b13x12[_0x942c[34]](_0x3b13x16?200:401)})[_0x942c[19]](function(_0x3b13x14){console[_0x942c[18]](_0x3b13x14)})};exports[_0x942c[61]]= function(_0x3b13x11,_0x3b13x12,_0x3b13x13){switch(_0x3b13x11[_0x942c[26]][_0x942c[32]]){case _0x942c[26]:return User[_0x942c[27]](_0x3b13x11[_0x942c[26]][_0x942c[25]],{attributes:[_0x942c[25]]})[_0x942c[22]](Util[_0x942c[24]](_0x3b13x11[_0x942c[23]]))[_0x942c[22]](function(_0x3b13x15){return _0x3b13x12[_0x942c[21]](200)[_0x942c[20]](_0x3b13x15)})[_0x942c[19]](function(_0x3b13x14){console[_0x942c[62]](_0x3b13x14);return handleError(_0x3b13x12,_0x3b13x14)});default:return Agent[_0x942c[31]](_0x942c[30],{method:[_0x942c[63],_0x3b13x11[_0x942c[23]]]},{method:[_0x942c[64],_0x3b13x11[_0x942c[23]]]},{method:[_0x942c[65],_0x3b13x11[_0x942c[23]]]},{method:[_0x942c[66],_0x3b13x11[_0x942c[23]]]},_0x942c[67])[_0x942c[29]](Util[_0x942c[28]](_0x3b13x11[_0x942c[23]]))[_0x942c[22]](function(_0x3b13x15){return _0x3b13x12[_0x942c[21]](200)[_0x942c[20]](_0x3b13x15)})[_0x942c[19]](function(_0x3b13x14){console[_0x942c[62]](_0x3b13x14);return handleError(_0x3b13x12,_0x3b13x14)})}};exports[_0x942c[68]]= function(_0x3b13x11,_0x3b13x12,_0x3b13x13){switch(_0x3b13x11[_0x942c[26]][_0x942c[32]]){case _0x942c[26]:var _0x3b13x18=[];return User[_0x942c[27]](_0x3b13x11[_0x942c[26]][_0x942c[25]],{attributes:[_0x942c[25]]})[_0x942c[22]](Util[_0x942c[74]]({},{attributes:[_0x942c[37]],include:[{raw:true,model:User,attributes:[_0x942c[25]]}]}))[_0x942c[22]](function(_0x3b13x16){var _0x3b13x19=_[_0x942c[70]](_0x3b13x16[_0x942c[69]],_0x942c[37]);_0x3b13x16[_0x942c[69]][_0x942c[72]](function(_0x3b13x1a){_0x3b13x18= _[_0x942c[71]](_0x3b13x18,_[_0x942c[70]](_0x3b13x1a.Users,_0x942c[25]))});return User[_0x942c[31]](_0x942c[30],{method:[_0x942c[63],_0x3b13x11[_0x942c[23]]]},{method:[_0x942c[64],_0x3b13x11[_0x942c[23]]]},{method:[_0x942c[65],_0x3b13x11[_0x942c[23]]]},{method:[_0x942c[66],_0x3b13x11[_0x942c[23]]]})[_0x942c[29]](_[_0x942c[73]](Util[_0x942c[28]](_0x3b13x11[_0x942c[23]],{id:{$in:_0x3b13x18}}),{include:[{model:VoiceQueue,where:{name:{$in:_0x3b13x19}},required:false}]}))})[_0x942c[22]](function(_0x3b13x15){return _0x3b13x12[_0x942c[21]](200)[_0x942c[20]](_0x3b13x15)})[_0x942c[19]](function(_0x3b13x14){console[_0x942c[62]](_0x3b13x14);return handleError(_0x3b13x12,_0x3b13x14)});default:return Agent[_0x942c[31]](_0x942c[30],{method:[_0x942c[63],_0x3b13x11[_0x942c[23]]]},{method:[_0x942c[64],_0x3b13x11[_0x942c[23]]]},{method:[_0x942c[65],_0x3b13x11[_0x942c[23]]]},{method:[_0x942c[66],_0x3b13x11[_0x942c[23]]]},_0x942c[67])[_0x942c[29]](Util[_0x942c[28]](_0x3b13x11[_0x942c[23]]))[_0x942c[22]](function(_0x3b13x15){return _0x3b13x12[_0x942c[21]](200)[_0x942c[20]](_0x3b13x15)})[_0x942c[19]](function(_0x3b13x14){console[_0x942c[62]](_0x3b13x14);return handleError(_0x3b13x12,_0x3b13x14)})}};exports[_0x942c[75]]= function(_0x3b13x11,_0x3b13x12,_0x3b13x13){switch(_0x3b13x11[_0x942c[26]][_0x942c[32]]){case _0x942c[26]:var _0x3b13x18=[];return User[_0x942c[27]](_0x3b13x11[_0x942c[26]][_0x942c[25]],{attributes:[_0x942c[25]]})[_0x942c[22]](Util[_0x942c[76]]({},{attributes:[_0x942c[25]],include:[{raw:true,model:User,attributes:[_0x942c[25]]}]}))[_0x942c[22]](function(_0x3b13x16){var _0x3b13x1b=_[_0x942c[70]](_0x3b13x16[_0x942c[69]],_0x942c[25]);_0x3b13x16[_0x942c[69]][_0x942c[72]](function(_0x3b13x1a){_0x3b13x18= _[_0x942c[71]](_0x3b13x18,_[_0x942c[70]](_0x3b13x1a.Users,_0x942c[25]))});return User[_0x942c[31]](_0x942c[30],{method:[_0x942c[63],_0x3b13x11[_0x942c[23]]]},{method:[_0x942c[64],_0x3b13x11[_0x942c[23]]]},{method:[_0x942c[65],_0x3b13x11[_0x942c[23]]]},{method:[_0x942c[66],_0x3b13x11[_0x942c[23]]]})[_0x942c[29]](_[_0x942c[73]](Util[_0x942c[28]](_0x3b13x11[_0x942c[23]],{id:{$in:_0x3b13x18}}),{include:[{model:ChatQueue,where:{id:{$in:_0x3b13x1b}},required:false}]}))})[_0x942c[22]](function(_0x3b13x15){return _0x3b13x12[_0x942c[21]](200)[_0x942c[20]](_0x3b13x15)})[_0x942c[19]](function(_0x3b13x14){console[_0x942c[62]](_0x3b13x14);return handleError(_0x3b13x12,_0x3b13x14)});default:return Agent[_0x942c[31]](_0x942c[30],{method:[_0x942c[63],_0x3b13x11[_0x942c[23]]]},{method:[_0x942c[64],_0x3b13x11[_0x942c[23]]]},{method:[_0x942c[65],_0x3b13x11[_0x942c[23]]]},{method:[_0x942c[66],_0x3b13x11[_0x942c[23]]]},_0x942c[67])[_0x942c[29]](Util[_0x942c[28]](_0x3b13x11[_0x942c[23]]))[_0x942c[22]](function(_0x3b13x15){return _0x3b13x12[_0x942c[21]](200)[_0x942c[20]](_0x3b13x15)})[_0x942c[19]](function(_0x3b13x14){console[_0x942c[62]](_0x3b13x14);return handleError(_0x3b13x12,_0x3b13x14)})}};exports[_0x942c[77]]= function(_0x3b13x11,_0x3b13x12,_0x3b13x13){switch(_0x3b13x11[_0x942c[26]][_0x942c[32]]){case _0x942c[26]:var _0x3b13x18=[];return User[_0x942c[27]](_0x3b13x11[_0x942c[26]][_0x942c[25]],{attributes:[_0x942c[25]]})[_0x942c[22]](Util[_0x942c[78]]({},{attributes:[_0x942c[25]],include:[{raw:true,model:User,attributes:[_0x942c[25]]}]}))[_0x942c[22]](function(_0x3b13x16){var _0x3b13x1c=_[_0x942c[70]](_0x3b13x16[_0x942c[69]],_0x942c[25]);_0x3b13x16[_0x942c[69]][_0x942c[72]](function(_0x3b13x1a){_0x3b13x18= _[_0x942c[71]](_0x3b13x18,_[_0x942c[70]](_0x3b13x1a.Users,_0x942c[25]))});return User[_0x942c[31]](_0x942c[30],{method:[_0x942c[63],_0x3b13x11[_0x942c[23]]]},{method:[_0x942c[64],_0x3b13x11[_0x942c[23]]]},{method:[_0x942c[65],_0x3b13x11[_0x942c[23]]]},{method:[_0x942c[66],_0x3b13x11[_0x942c[23]]]})[_0x942c[29]](_[_0x942c[73]](Util[_0x942c[28]](_0x3b13x11[_0x942c[23]],{id:{$in:_0x3b13x18}}),{include:[{model:MailQueue,where:{id:{$in:_0x3b13x1c}},required:false}]}))})[_0x942c[22]](function(_0x3b13x15){return _0x3b13x12[_0x942c[21]](200)[_0x942c[20]](_0x3b13x15)})[_0x942c[19]](function(_0x3b13x14){console[_0x942c[62]](_0x3b13x14);return handleError(_0x3b13x12,_0x3b13x14)});default:return Agent[_0x942c[31]](_0x942c[30],{method:[_0x942c[63],_0x3b13x11[_0x942c[23]]]},{method:[_0x942c[64],_0x3b13x11[_0x942c[23]]]},{method:[_0x942c[65],_0x3b13x11[_0x942c[23]]]},{method:[_0x942c[66],_0x3b13x11[_0x942c[23]]]},_0x942c[67])[_0x942c[29]](Util[_0x942c[28]](_0x3b13x11[_0x942c[23]]))[_0x942c[22]](function(_0x3b13x15){return _0x3b13x12[_0x942c[21]](200)[_0x942c[20]](_0x3b13x15)})[_0x942c[19]](function(_0x3b13x14){console[_0x942c[62]](_0x3b13x14);return handleError(_0x3b13x12,_0x3b13x14)})}};exports[_0x942c[79]]= function(_0x3b13x11,_0x3b13x12,_0x3b13x13){switch(_0x3b13x11[_0x942c[26]][_0x942c[32]]){case _0x942c[26]:var _0x3b13x18=[];return User[_0x942c[27]](_0x3b13x11[_0x942c[26]][_0x942c[25]],{attributes:[_0x942c[25]]})[_0x942c[22]](Util[_0x942c[80]]({},{attributes:[_0x942c[25]],include:[{raw:true,model:User,attributes:[_0x942c[25]]}]}))[_0x942c[22]](function(_0x3b13x16){var _0x3b13x1d=_[_0x942c[70]](_0x3b13x16[_0x942c[69]],_0x942c[25]);_0x3b13x16[_0x942c[69]][_0x942c[72]](function(_0x3b13x1a){_0x3b13x18= _[_0x942c[71]](_0x3b13x18,_[_0x942c[70]](_0x3b13x1a.Users,_0x942c[25]))});return User[_0x942c[31]](_0x942c[30],{method:[_0x942c[63],_0x3b13x11[_0x942c[23]]]},{method:[_0x942c[64],_0x3b13x11[_0x942c[23]]]},{method:[_0x942c[65],_0x3b13x11[_0x942c[23]]]},{method:[_0x942c[66],_0x3b13x11[_0x942c[23]]]})[_0x942c[29]](_[_0x942c[73]](Util[_0x942c[28]](_0x3b13x11[_0x942c[23]],{id:{$in:_0x3b13x18}}),{include:[{model:FaxQueue,where:{id:{$in:_0x3b13x1d}},required:false}]}))})[_0x942c[22]](function(_0x3b13x15){return _0x3b13x12[_0x942c[21]](200)[_0x942c[20]](_0x3b13x15)})[_0x942c[19]](function(_0x3b13x14){console[_0x942c[62]](_0x3b13x14);return handleError(_0x3b13x12,_0x3b13x14)});default:return Agent[_0x942c[31]](_0x942c[30],{method:[_0x942c[63],_0x3b13x11[_0x942c[23]]]},{method:[_0x942c[64],_0x3b13x11[_0x942c[23]]]},{method:[_0x942c[65],_0x3b13x11[_0x942c[23]]]},{method:[_0x942c[66],_0x3b13x11[_0x942c[23]]]},_0x942c[67])[_0x942c[29]](Util[_0x942c[28]](_0x3b13x11[_0x942c[23]]))[_0x942c[22]](function(_0x3b13x15){return _0x3b13x12[_0x942c[21]](200)[_0x942c[20]](_0x3b13x15)})[_0x942c[19]](function(_0x3b13x14){console[_0x942c[62]](_0x3b13x14);return handleError(_0x3b13x12,_0x3b13x14)})}};exports[_0x942c[81]]= function(_0x3b13x11,_0x3b13x12,_0x3b13x13){switch(_0x3b13x11[_0x942c[26]][_0x942c[32]]){case _0x942c[26]:var _0x3b13x18=[];return User[_0x942c[27]](_0x3b13x11[_0x942c[26]][_0x942c[25]],{attributes:[_0x942c[25]]})[_0x942c[22]](Util[_0x942c[82]]({},{attributes:[_0x942c[25]],include:[{raw:true,model:User,attributes:[_0x942c[25]]}]}))[_0x942c[22]](function(_0x3b13x16){var _0x3b13x1e=_[_0x942c[70]](_0x3b13x16[_0x942c[69]],_0x942c[25]);_0x3b13x16[_0x942c[69]][_0x942c[72]](function(_0x3b13x1a){_0x3b13x18= _[_0x942c[71]](_0x3b13x18,_[_0x942c[70]](_0x3b13x1a.Users,_0x942c[25]))});return User[_0x942c[31]](_0x942c[30],{method:[_0x942c[63],_0x3b13x11[_0x942c[23]]]},{method:[_0x942c[64],_0x3b13x11[_0x942c[23]]]},{method:[_0x942c[65],_0x3b13x11[_0x942c[23]]]},{method:[_0x942c[66],_0x3b13x11[_0x942c[23]]]})[_0x942c[29]](_[_0x942c[73]](Util[_0x942c[28]](_0x3b13x11[_0x942c[23]],{id:{$in:_0x3b13x18}}),{include:[{model:SmsQueue,where:{id:{$in:_0x3b13x1e}},required:false}]}))})[_0x942c[22]](function(_0x3b13x15){return _0x3b13x12[_0x942c[21]](200)[_0x942c[20]](_0x3b13x15)})[_0x942c[19]](function(_0x3b13x14){console[_0x942c[62]](_0x3b13x14);return handleError(_0x3b13x12,_0x3b13x14)});default:return Agent[_0x942c[31]](_0x942c[30],{method:[_0x942c[63],_0x3b13x11[_0x942c[23]]]},{method:[_0x942c[64],_0x3b13x11[_0x942c[23]]]},{method:[_0x942c[65],_0x3b13x11[_0x942c[23]]]},{method:[_0x942c[66],_0x3b13x11[_0x942c[23]]]},_0x942c[67])[_0x942c[29]](Util[_0x942c[28]](_0x3b13x11[_0x942c[23]]))[_0x942c[22]](function(_0x3b13x15){return _0x3b13x12[_0x942c[21]](200)[_0x942c[20]](_0x3b13x15)})[_0x942c[19]](function(_0x3b13x14){console[_0x942c[62]](_0x3b13x14);return handleError(_0x3b13x12,_0x3b13x14)})}};exports[_0x942c[83]]= function(_0x3b13x11,_0x3b13x12,_0x3b13x13){switch(_0x3b13x11[_0x942c[26]][_0x942c[32]]){case _0x942c[26]:var _0x3b13x18=[];return User[_0x942c[27]](_0x3b13x11[_0x942c[26]][_0x942c[25]],{attributes:[_0x942c[25]]})[_0x942c[22]](Util[_0x942c[84]]({},{attributes:[_0x942c[25]],include:[{raw:true,model:User,attributes:[_0x942c[25]]}]}))[_0x942c[22]](function(_0x3b13x16){var _0x3b13x1f=_[_0x942c[70]](_0x3b13x16[_0x942c[69]],_0x942c[25]);_0x3b13x16[_0x942c[69]][_0x942c[72]](function(_0x3b13x1a){_0x3b13x18= _[_0x942c[71]](_0x3b13x18,_[_0x942c[70]](_0x3b13x1a.Users,_0x942c[25]))});return User[_0x942c[31]](_0x942c[30],{method:[_0x942c[63],_0x3b13x11[_0x942c[23]]]},{method:[_0x942c[64],_0x3b13x11[_0x942c[23]]]},{method:[_0x942c[65],_0x3b13x11[_0x942c[23]]]},{method:[_0x942c[66],_0x3b13x11[_0x942c[23]]]})[_0x942c[29]](_[_0x942c[73]](Util[_0x942c[28]](_0x3b13x11[_0x942c[23]],{id:{$in:_0x3b13x18}}),{include:[{model:OpenchannelQueue,where:{id:{$in:_0x3b13x1f}},required:false}]}))})[_0x942c[22]](function(_0x3b13x15){return _0x3b13x12[_0x942c[21]](200)[_0x942c[20]](_0x3b13x15)})[_0x942c[19]](function(_0x3b13x14){console[_0x942c[62]](_0x3b13x14);return handleError(_0x3b13x12,_0x3b13x14)});default:return Agent[_0x942c[31]](_0x942c[30],{method:[_0x942c[63],_0x3b13x11[_0x942c[23]]]},{method:[_0x942c[64],_0x3b13x11[_0x942c[23]]]},{method:[_0x942c[65],_0x3b13x11[_0x942c[23]]]},{method:[_0x942c[66],_0x3b13x11[_0x942c[23]]]},_0x942c[67])[_0x942c[29]](Util[_0x942c[28]](_0x3b13x11[_0x942c[23]]))[_0x942c[22]](function(_0x3b13x15){return _0x3b13x12[_0x942c[21]](200)[_0x942c[20]](_0x3b13x15)})[_0x942c[19]](function(_0x3b13x14){console[_0x942c[62]](_0x3b13x14);return handleError(_0x3b13x12,_0x3b13x14)})}};exports[_0x942c[85]]= function(_0x3b13x11,_0x3b13x12){return Agent[_0x942c[31]](_0x942c[30])[_0x942c[27]](_0x3b13x11[_0x942c[52]][_0x942c[25]])[_0x942c[22]](function(_0x3b13x17){if(!_0x3b13x17){return _0x3b13x12[_0x942c[34]](404)};return _0x3b13x12[_0x942c[20]](_0x3b13x17)})[_0x942c[19]](function(_0x3b13x14){return handleError(_0x3b13x12,_0x3b13x14)})};exports[_0x942c[86]]= function(_0x3b13x11,_0x3b13x12){return Agent[_0x942c[31]](_0x942c[30])[_0x942c[27]](_0x3b13x11[_0x942c[52]][_0x942c[25]])[_0x942c[22]](function(_0x3b13x17){if(!_0x3b13x17){return _0x3b13x12[_0x942c[34]](404)};return _0x3b13x17[_0x942c[88]]({attributes:[_0x942c[37]]})})[_0x942c[22]](function(_0x3b13x19){return _0x3b13x12[_0x942c[20]]({count:_0x3b13x19[_0x942c[87]],rows:_0x3b13x19})})[_0x942c[19]](function(_0x3b13x14){return handleError(_0x3b13x12,_0x3b13x14)})};exports[_0x942c[89]]= function(_0x3b13x11,_0x3b13x12){return Agent[_0x942c[31]](_0x942c[30])[_0x942c[27]](_0x3b13x11[_0x942c[52]][_0x942c[25]])[_0x942c[22]](function(_0x3b13x17){if(!_0x3b13x17){return _0x3b13x12[_0x942c[34]](404)};return _0x3b13x17[_0x942c[90]]({attributes:[_0x942c[25]]})})[_0x942c[22]](function(_0x3b13x1b){return _0x3b13x12[_0x942c[20]]({count:_0x3b13x1b[_0x942c[87]],rows:_0x3b13x1b})})[_0x942c[19]](function(_0x3b13x14){return handleError(_0x3b13x12,_0x3b13x14)})};exports[_0x942c[91]]= function(_0x3b13x11,_0x3b13x12){return Agent[_0x942c[31]](_0x942c[30])[_0x942c[27]](_0x3b13x11[_0x942c[52]][_0x942c[25]])[_0x942c[22]](function(_0x3b13x17){if(!_0x3b13x17){return _0x3b13x12[_0x942c[34]](404)};return _0x3b13x17[_0x942c[92]]({attributes:[_0x942c[25]]})})[_0x942c[22]](function(_0x3b13x1c){return _0x3b13x12[_0x942c[20]]({count:_0x3b13x1c[_0x942c[87]],rows:_0x3b13x1c})})[_0x942c[19]](function(_0x3b13x14){return handleError(_0x3b13x12,_0x3b13x14)})};exports[_0x942c[93]]= function(_0x3b13x11,_0x3b13x12){return Agent[_0x942c[31]](_0x942c[30])[_0x942c[27]](_0x3b13x11[_0x942c[52]][_0x942c[25]])[_0x942c[22]](function(_0x3b13x17){if(!_0x3b13x17){return _0x3b13x12[_0x942c[34]](404)};return _0x3b13x17[_0x942c[94]]({attributes:[_0x942c[25]]})})[_0x942c[22]](function(_0x3b13x1d){return _0x3b13x12[_0x942c[20]]({count:_0x3b13x1d[_0x942c[87]],rows:_0x3b13x1d})})[_0x942c[19]](function(_0x3b13x14){return handleError(_0x3b13x12,_0x3b13x14)})};exports[_0x942c[95]]= function(_0x3b13x11,_0x3b13x12){return Agent[_0x942c[31]](_0x942c[30])[_0x942c[27]](_0x3b13x11[_0x942c[52]][_0x942c[25]])[_0x942c[22]](function(_0x3b13x17){if(!_0x3b13x17){return _0x3b13x12[_0x942c[34]](404)};return _0x3b13x17[_0x942c[96]]({attributes:[_0x942c[25]]})})[_0x942c[22]](function(_0x3b13x1e){return _0x3b13x12[_0x942c[20]]({count:_0x3b13x1e[_0x942c[87]],rows:_0x3b13x1e})})[_0x942c[19]](function(_0x3b13x14){return handleError(_0x3b13x12,_0x3b13x14)})};exports[_0x942c[97]]= function(_0x3b13x11,_0x3b13x12){return Agent[_0x942c[31]](_0x942c[30])[_0x942c[27]](_0x3b13x11[_0x942c[52]][_0x942c[25]])[_0x942c[22]](function(_0x3b13x17){if(!_0x3b13x17){return _0x3b13x12[_0x942c[34]](404)};return _0x3b13x17[_0x942c[98]]({attributes:[_0x942c[25]]})})[_0x942c[22]](function(_0x3b13x20){return _0x3b13x12[_0x942c[20]]({count:_0x3b13x20[_0x942c[87]],rows:_0x3b13x20})})[_0x942c[19]](function(_0x3b13x14){return handleError(_0x3b13x12,_0x3b13x14)})};exports[_0x942c[99]]= function(_0x3b13x11,_0x3b13x12){var _0x3b13x21;_0x3b13x11[_0x942c[35]][_0x942c[32]]= _0x942c[30];return sequelize[_0x942c[104]](function(_0x3b13x22){return Agent[_0x942c[31]](_0x942c[30])[_0x942c[99]](_0x3b13x11[_0x942c[35]],{transaction:_0x3b13x22})[_0x942c[22]](function(_0x3b13x17){_0x3b13x21= _0x3b13x17;return Team[_0x942c[103]]({where:{defaultEntry:true}})})[_0x942c[22]](function(_0x3b13x24){return _0x3b13x24[_0x942c[102]](_0x3b13x21[_0x942c[25]],{transaction:_0x3b13x22})})[_0x942c[22]](function(){return List[_0x942c[103]]({where:{defaultEntry:true}})})[_0x942c[22]](function(_0x3b13x23){return _0x3b13x23[_0x942c[102]](_0x3b13x21[_0x942c[25]],{transaction:_0x3b13x22})})})[_0x942c[22]](function(){return _0x3b13x12[_0x942c[21]](201)[_0x942c[20]](_0x3b13x21)})[_0x942c[19]](sequelize.UniqueConstraintError,function(_0x3b13x14){console[_0x942c[62]](_0x3b13x14);return Util[_0x942c[101]][_0x942c[100]](_0x3b13x12,_0x3b13x14)})[_0x942c[19]](function(_0x3b13x14){console[_0x942c[62]](_0x3b13x14);return handleError(_0x3b13x12,_0x3b13x14)})};exports[_0x942c[105]]= function(_0x3b13x11,_0x3b13x12){var _0x3b13x25;var _0x3b13x26;var _0x3b13x27=[];var _0x3b13x28=String(_0x3b13x11[_0x942c[35]][_0x942c[106]]);return sequelize[_0x942c[104]](function(_0x3b13x22){return Setting[_0x942c[27]](1)[_0x942c[22]](function(_0x3b13x29){_0x3b13x26= _0x3b13x29;var _0x3b13x2a=_0x3b13x26[_0x942c[108]]?/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[~!@#$%^&\-_=+\[\{\]\}.])[0-9a-zA-Z~!@#$%^&\-_=+\[\{\]\}.]{8,}$/:/^[a-zA-Z0-9]{6,}$/;if(!_0x3b13x2a[_0x942c[109]](_0x3b13x28)){throw new Error(_0x942c[110])};var _0x3b13x2b=0;if(_0x3b13x11[_0x942c[35]][_0x942c[112]](_0x942c[111])&& _[_0x942c[113]](_0x3b13x11[_0x942c[35]][_0x942c[111]])&& _0x3b13x11[_0x942c[35]][_0x942c[111]]>= 0){_0x3b13x2b= _0x3b13x11[_0x942c[35]][_0x942c[111]];delete _0x3b13x11[_0x942c[35]][_0x942c[111]]};var _0x3b13x2c=_0x3b13x11[_0x942c[35]][_0x942c[114]];delete _0x3b13x11[_0x942c[35]][_0x942c[114]];if(_0x3b13x11[_0x942c[35]][_0x942c[115]]){_0x3b13x11[_0x942c[35]][_0x942c[32]]= _0x942c[30];for(var _0x3b13x2d=_0x3b13x2b;_0x3b13x2d< _0x3b13x11[_0x942c[35]][_0x942c[115]]+ _0x3b13x2b;_0x3b13x2d++,_0x3b13x2c++){var _0x3b13x2e=_[_0x942c[116]](_0x3b13x11[_0x942c[35]]);_0x3b13x2e[_0x942c[117]]= _0x3b13x2c;_0x3b13x2e[_0x942c[37]]= _0x3b13x2e[_0x942c[37]]+ _0x3b13x2d;_0x3b13x2e[_0x942c[118]]= _0x3b13x2e[_0x942c[118]]+ _0x3b13x2d;_0x3b13x2e[_0x942c[119]]= _0x3b13x2e[_0x942c[119]][_0x942c[121]](_0x942c[120])[0]+ _0x3b13x2d+ _0x942c[120]+ _0x3b13x2e[_0x942c[119]][_0x942c[121]](_0x942c[120])[1];_0x3b13x27[_0x942c[122]](_0x3b13x2e)}}else {throw new Error(_0x942c[123])};return Agent[_0x942c[105]](_0x3b13x27,{transaction:_0x3b13x22,individualHooks:true})})[_0x942c[22]](function(_0x3b13x18){_0x3b13x25= _0x3b13x18;return Team[_0x942c[103]]({where:{defaultEntry:true}})})[_0x942c[22]](function(_0x3b13x24){return _0x3b13x24[_0x942c[107]](_[_0x942c[70]](_0x3b13x25,_0x942c[25]),{transaction:_0x3b13x22})})})[_0x942c[22]](function(){return _0x3b13x12[_0x942c[34]](201)})[_0x942c[19]](sequelize.UniqueConstraintError,function(_0x3b13x14){console[_0x942c[62]](_0x3b13x14);return Util[_0x942c[101]][_0x942c[100]](_0x3b13x12,_0x3b13x14)})[_0x942c[19]](function(_0x3b13x14){console[_0x942c[62]](_0x3b13x14);return handleError(_0x3b13x12,_0x3b13x14)})};exports[_0x942c[124]]= function(_0x3b13x11,_0x3b13x12){if(_0x3b13x11[_0x942c[35]][_0x942c[25]]){delete _0x3b13x11[_0x942c[35]][_0x942c[25]]};delete _0x3b13x11[_0x942c[35]][_0x942c[32]];delete _0x3b13x11[_0x942c[35]][_0x942c[37]];delete _0x3b13x11[_0x942c[35]][_0x942c[106]];return sequelize[_0x942c[104]](function(_0x3b13x22){return Agent[_0x942c[27]](_0x3b13x11[_0x942c[52]][_0x942c[25]])[_0x942c[22]](function(_0x3b13x17){if(!_0x3b13x17){return _0x3b13x12[_0x942c[34]](404)};var _0x3b13x2f=_[_0x942c[73]](_0x3b13x17,_0x3b13x11[_0x942c[35]]);return _0x3b13x2f[_0x942c[125]]({transaction:_0x3b13x22})})[_0x942c[22]](function(_0x3b13x17){return _0x3b13x12[_0x942c[21]](200)[_0x942c[20]](_0x3b13x17)})})[_0x942c[19]](sequelize.UniqueConstraintError,function(_0x3b13x14){console[_0x942c[62]](_0x3b13x14);return Util[_0x942c[101]][_0x942c[100]](_0x3b13x12,_0x3b13x14)})[_0x942c[19]](function(_0x3b13x14){console[_0x942c[62]](_0x3b13x14);return handleError(_0x3b13x12,_0x3b13x14)})};exports[_0x942c[126]]= function(_0x3b13x11,_0x3b13x12){var _0x3b13x21;return Agent[_0x942c[27]](_0x3b13x11[_0x942c[52]][_0x942c[25]])[_0x942c[22]](function(_0x3b13x17){_0x3b13x21= _0x3b13x17;if(!_0x3b13x17){return _0x3b13x12[_0x942c[34]](404)};return _0x3b13x17[_0x942c[126]]()})[_0x942c[22]](function(){return _0x3b13x12[_0x942c[34]](204)})[_0x942c[19]](sequelize.ForeignKeyConstraintError,function(_0x3b13x14){return Util[_0x942c[101]][_0x942c[127]](_0x3b13x12,_0x942c[30],_0x3b13x21[_0x942c[37]],_0x3b13x14)})[_0x942c[19]](function(_0x3b13x14){return handleError(_0x3b13x12,_0x3b13x14)})};exports[_0x942c[128]]= function(_0x3b13x11,_0x3b13x12){return Agent[_0x942c[126]]({where:{id:_0x3b13x11[_0x942c[23]][_0x942c[54]]},individualHooks:true})[_0x942c[22]](function(){return _0x3b13x12[_0x942c[34]](204)})[_0x942c[19]](function(_0x3b13x14){return handleError(_0x3b13x12,_0x3b13x14)})};exports[_0x942c[129]]= function(_0x3b13x11,_0x3b13x12,_0x3b13x13){var _0x3b13x26;var _0x3b13x30=_0x3b13x11[_0x942c[26]][_0x942c[25]];var _0x3b13x31=String(_0x3b13x11[_0x942c[35]][_0x942c[130]]);var _0x3b13x32=String(_0x3b13x11[_0x942c[35]][_0x942c[131]]);return Setting[_0x942c[27]](1)[_0x942c[22]](function(_0x3b13x29){_0x3b13x26= _0x3b13x29;return Agent[_0x942c[27]](_0x3b13x30)})[_0x942c[22]](function(_0x3b13x33){var _0x3b13x2a=_0x3b13x26[_0x942c[108]]?/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[~!@#$%^&\-_=+\[\{\]\}.])[0-9a-zA-Z~!@#$%^&\-_=+\[\{\]\}.]{8,}$/:/^[a-zA-Z0-9]{6,}$/;if(!_0x3b13x2a[_0x942c[109]](_0x3b13x32)){throw new Error(_0x942c[110])};if(_0x3b13x33[_0x942c[132]](_0x3b13x31)){_0x3b13x33[_0x942c[106]]= _0x3b13x32;return _0x3b13x33[_0x942c[125]]()}else {return _0x3b13x12[_0x942c[34]](403)}})[_0x942c[22]](function(){return _0x3b13x12[_0x942c[34]](200)})[_0x942c[19]](function(_0x3b13x14){return handleError(_0x3b13x12,_0x3b13x14)})};exports[_0x942c[133]]= function(_0x3b13x11,_0x3b13x12,_0x3b13x13){var _0x3b13x26;var _0x3b13x30=_0x3b13x11[_0x942c[52]][_0x942c[25]];var _0x3b13x32=String(_0x3b13x11[_0x942c[35]][_0x942c[131]]);return Setting[_0x942c[27]](1)[_0x942c[22]](function(_0x3b13x29){_0x3b13x26= _0x3b13x29;return Agent[_0x942c[27]](_0x3b13x30)})[_0x942c[22]](function(_0x3b13x33){var _0x3b13x2a=_0x3b13x26[_0x942c[108]]?/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[~!@#$%^&\-_=+\[\{\]\}.])[0-9a-zA-Z~!@#$%^&\-_=+\[\{\]\}.]{8,}$/:/^[a-zA-Z0-9]{6,}$/;if(!_0x3b13x2a[_0x942c[109]](_0x3b13x32)){throw new Error(_0x942c[110])};_0x3b13x33[_0x942c[106]]= _0x3b13x32;return _0x3b13x33[_0x942c[125]]()})[_0x942c[22]](function(){return _0x3b13x12[_0x942c[34]](200)})[_0x942c[19]](function(_0x3b13x14){return handleError(_0x3b13x12,_0x3b13x14)})};function handleError(_0x3b13x12,_0x3b13x14){return _0x3b13x12[_0x942c[21]](500)[_0x942c[20]](_0x3b13x14)} \ No newline at end of file diff --git a/server/api/agent/agent.events.js b/server/api/agent/agent.events.js index 24661dc..964f94c 100644 --- a/server/api/agent/agent.events.js +++ b/server/api/agent/agent.events.js @@ -1,36 +1 @@ -/** - * Thing model events - */ - -'use strict'; - -const EventEmitter = require('events'); -const Agent = require('../../models').User; - -var AgentEvents = new EventEmitter(); - -// Set max event listeners (0 == unlimited) -AgentEvents.setMaxListeners(0); - -// Model events -var events = { - 'afterCreate': 'save', - 'afterUpdate': 'save', - 'afterDestroy': 'remove' -}; - -// Register the event emitter to the model events -for (var e in events) { - var event = events[e]; - Agent.hook(e, emitEvent(event)); -} - -function emitEvent(event) { - return function(doc, options, done) { - AgentEvents.emit(event + ':' + doc._id, doc); - AgentEvents.emit(event, doc); - done(null); - } -} - -module.exports = AgentEvents; +var _0xdb61=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x55\x73\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xdb61[0];const EventEmitter=require(_0xdb61[1]);const Agent=require(_0xdb61[3])[_0xdb61[2]];var AgentEvents= new EventEmitter();AgentEvents[_0xdb61[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0xdb61[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0xdb61[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0xdb61[6]};for(var e in events){var event=events[e];Agent[_0xdb61[7]](e,emitEvent(event))};function emitEvent(event){return function(_0xe664x8,_0xe664x9,_0xe664xa){AgentEvents[_0xdb61[10]](event+ _0xdb61[8]+ _0xe664x8[_0xdb61[9]],_0xe664x8);AgentEvents[_0xdb61[10]](event,_0xe664x8);_0xe664xa(null)}}module[_0xdb61[11]]= AgentEvents \ No newline at end of file diff --git a/server/api/agent/agent.socket.js b/server/api/agent/agent.socket.js index 657829a..e074d07 100644 --- a/server/api/agent/agent.socket.js +++ b/server/api/agent/agent.socket.js @@ -1,51 +1 @@ -/** - * Broadcast updates to client when the model changes - */ - -'use strict'; - -const AgentEvents = require('./agent.events'); -const _ = require('lodash'); - -// Model events to emit -var events = ['save', 'remove']; - -exports.register = function(socket) { - for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { - var event = events[i]; - var listener = createListener('agent:' + event, socket); - - AgentEvents.on(event, listener); - socket.on('disconnect', removeListener(event, listener)); - } -} - -function createListener(event, socket) { - return function(doc) { - switch (event) { - case 'agent:save': - if (doc.role === 'agent' && (socket.role !== 'agent' || socket.userId == doc.id)) { - var myDoc = _.clone(doc.dataValues); - if (doc._changed.hasOwnProperty('status')) { - myDoc.queueStatus = undefined; - } else if (doc._changed.hasOwnProperty('queueStatus')) { - myDoc.status = undefined; - } - socket.emit(event, myDoc); - } - break; - case 'agent:remove': - socket.emit(event, doc); - break; - - default: - - } - }; -} - -function removeListener(event, listener) { - return function() { - AgentEvents.removeListener(event, listener); - }; -} +var _0x918a=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x61\x67\x65\x6E\x74\x2E\x65\x76\x65\x6E\x74\x73","\x6C\x6F\x64\x61\x73\x68","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x61\x67\x65\x6E\x74\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x72\x6F\x6C\x65","\x61\x67\x65\x6E\x74","\x75\x73\x65\x72\x49\x64","\x69\x64","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x63\x6C\x6F\x6E\x65","\x73\x74\x61\x74\x75\x73","\x68\x61\x73\x4F\x77\x6E\x50\x72\x6F\x70\x65\x72\x74\x79","\x5F\x63\x68\x61\x6E\x67\x65\x64","\x71\x75\x65\x75\x65\x53\x74\x61\x74\x75\x73","\x65\x6D\x69\x74","\x61\x67\x65\x6E\x74\x3A\x73\x61\x76\x65","\x61\x67\x65\x6E\x74\x3A\x72\x65\x6D\x6F\x76\x65","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x918a[0];const AgentEvents=require(_0x918a[1]);const _=require(_0x918a[2]);var events=[_0x918a[3],_0x918a[4]];exports[_0x918a[5]]= function(_0xc057x4){for(var _0xc057x5=0,_0xc057x6=events[_0x918a[6]];_0xc057x5< _0xc057x6;_0xc057x5++){var _0xc057x7=events[_0xc057x5];var _0xc057x8=createListener(_0x918a[7]+ _0xc057x7,_0xc057x4);AgentEvents[_0x918a[8]](_0xc057x7,_0xc057x8);_0xc057x4[_0x918a[8]](_0x918a[9],removeListener(_0xc057x7,_0xc057x8))}};function createListener(_0xc057x7,_0xc057x4){return function(_0xc057xa){switch(_0xc057x7){case _0x918a[21]:if(_0xc057xa[_0x918a[10]]=== _0x918a[11]&& (_0xc057x4[_0x918a[10]]!== _0x918a[11]|| _0xc057x4[_0x918a[12]]== _0xc057xa[_0x918a[13]])){var _0xc057xb=_[_0x918a[15]](_0xc057xa[_0x918a[14]]);if(_0xc057xa[_0x918a[18]][_0x918a[17]](_0x918a[16])){_0xc057xb[_0x918a[19]]= undefined}else {if(_0xc057xa[_0x918a[18]][_0x918a[17]](_0x918a[19])){_0xc057xb[_0x918a[16]]= undefined}};_0xc057x4[_0x918a[20]](_0xc057x7,_0xc057xb)};break;case _0x918a[22]:_0xc057x4[_0x918a[20]](_0xc057x7,_0xc057xa);break;default:}}}function removeListener(_0xc057x7,_0xc057x8){return function(){AgentEvents[_0x918a[23]](_0xc057x7,_0xc057x8)}} \ No newline at end of file diff --git a/server/api/agent/index.js b/server/api/agent/index.js index 0ad78b5..1f292df 100644 --- a/server/api/agent/index.js +++ b/server/api/agent/index.js @@ -1,312 +1 @@ -'use strict'; - -var express = require('express'); - -var controller = require('./agent.controller'); -var auth = require('../../auth/auth.service'); -var license = require('../../config/license/license.service'); - -var router = express.Router(); -/** - * @api {get} /api/agents/ Get agents' profile. - * - * @apiParam (Query) {Number} [offset] Pagination offset. - * @apiParam (Query) {Number} limit Pagination limit. - * - * @apiVersion 0.0.143 - * @apiName GetAgents - * @apiGroup Agents - * - * @apiHeader (Header) {String} Authorization Authorization access token. - * - * @apiHeaderExample {json} Header-Example: - * { - * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" - * } - * - * @apiSuccess {Number} count Number of agents. - * @apiSuccess {Object[]} rows Get agents' profile list. - * - * @apiSuccessExample {json} Success-Response: - * HTTP/1.1 200 OK - * { - * "count": 1, - * "rows": [{ - * "id": 1 - * "name": "john.doe", - * "email": "john.doe@xcally.com", - * "internal": 1001, - * "fullname": "John Doe", - * "chatCapacity": 0, - * "mailCapacity": 0, - * "faxCapacity": 0, - * "online": false, - * "voicePause": false, - * "mailPause": false, - * "faxPause": false, - * "chatPause": false, - * "pauseType": "Default Pause", - * ... - * }] - * } - */ -router.get('/', auth.isAuthenticated(), auth.hasModule([4], ['admin', 'agent']), controller.index); -router.get('/realtime', auth.isAuthenticated(), auth.hasModule([12], ['admin']), controller.realtimeIndex); -router.get('/realtime/voice', auth.isAuthenticated(), auth.hasModule([7], ['admin']), controller.realtimeVoiceIndex); -router.get('/realtime/mail', auth.isAuthenticated(), auth.hasModule([9], ['admin']), controller.realtimeMailIndex); -router.get('/realtime/chat', auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.realtimeChatIndex); -router.get('/realtime/fax', auth.isAuthenticated(), auth.hasModule([10], ['admin']), controller.realtimeFaxIndex); -router.get('/realtime/sms', auth.isAuthenticated(), auth.hasModule([11], ['admin']), controller.realtimeSmsIndex); -router.get('/realtime/openchannel', auth.isAuthenticated(), auth.hasModule([20], ['admin']), controller.realtimeOpenchannelIndex); - -/** - * @api {get} /api/agents/:id Get agent's profile. - * @apiParam {Number} id Agent's unique ID. - * @apiVersion 0.0.143 - * @apiName GetAgent - * @apiGroup Agents - * - * @apiHeader (Header) {String} Authorization Authorization access token. - * - * @apiHeaderExample {json} Header-Example: - * { - * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" - * } - * - * @apiSuccess {Object} Agent's profile. - * - * @apiSuccessExample {json} Success-Response: - * HTTP/1.1 200 OK - * { - * "id": 1 - * "name": "john.doe" - * "email": "john.doe@xcally.com", - * "internal": 1001, - * "fullname": "John Doe" - * "chatCapacity": 0, - * "mailCapacity": 0, - * "faxCapacity": 0, - * "online": false, - * "voicePause": false, - * "mailPause": false, - * "faxPause": false, - * "chatPause": false, - * "pauseType": "Default Pause", - * ... - * } - */ -router.get('/:id', auth.isAuthenticated(), auth.hasModule([4], ['admin', 'user', 'agent']), controller.show); - -/** - * @api {post} /api/agents/ Create agent's profile. - * @apiParam (Body) {String} name Agent's username. - * @apiParam (Body) {String} fullname Agent's fullname. - * @apiParam (Body) {String} email Agent's email. - * @apiParam (Body) {String} context="from-sip" Agent's SIP context. - * @apiParam (Body) {String} password Agent's password. - * @apiParam (Body) {Number} internal Agent's internal number. - * @apiParam (Body) {String="tcp", "udp", "tcp,udp"} transport="udp" Agent's SIP transport. - * @apiParam (Body) {String="alaw", "ulaw", "gsm"} allow="alaw;ulaw;gsm" Agent's SIP codecs. - * @apiParam (Body) {Number} internal Agent's internal number. - * @apiParam (Body) {String} [phone] Agent's phone. - * @apiParam (Body) {String} [mobile] Agent's mobile phone. - * @apiParam (Body) {String} [address] Agent's address. - * @apiParam (Body) {String} [zipcode] Agent's zipcode. - * @apiParam (Body) {String} [city] Agent's city. - * @apiParam (Body) {String} [country] Agent's country. - * - * @apiVersion 0.0.143 - * @apiName CreateAgent - * @apiGroup Agents - * - * @apiHeader (Header) {String} Authorization Authorization access token. - * - * @apiHeaderExample {json} Header-Example: - * { - * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" - * } - * - * @apiSuccessExample {json} Success-Response: - * HTTP/1.1 201 Created - * { - * "id": 1 - * "name": "john.doe", - * "email": "john.doe@xcally.com", - * "internal": 1001, - * "fullname": "John Doe", - * ... - * } - */ -router.post('/', auth.isAuthenticated(), auth.hasModule([4], ['admin']), controller.create); - -/** - * @api {post} /api/agents/bulk Bulk Create agent's profile. - * @apiParam (Body) {String} name Agent's prefix username. It's followed by index - * @apiParam (Body) {String} fullname Agent's prefix fullname. It's followed by index - * @apiParam (Body) {String} email Agent's email. The local part is followed by the index - * @apiParam (Body) {String} password Agent's password. It's the same for all agents - * @apiParam (Body) {Number} internal Agent's starting internal number. - * @apiParam (Body) {String} context="from-sip" Agent's SIP context. It's the same for all agents - * @apiParam (Body) {String="tcp", "udp", "tcp,udp"} transport="udp" Agent's SIP transport. It's the same for all agents - * @apiParam (Body) {String="alaw", "ulaw", "gsm"} allow="alaw;ulaw;gsm" Agent's SIP codecs. It's the same for all agents - * @apiParam (Body) {Number} amount=2 Number of new agents. - * @apiParam (Body) {Number} startIndex=0 Start index. - * - * @apiVersion 0.0.143 - * @apiName BulkCreateAgent - * @apiGroup Agents - * - * @apiHeader (Header) {String} Authorization Authorization access token. - * - * @apiHeaderExample {json} Header-Example: - * { - * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" - * } - * - * @apiSuccessExample {json} Success-Response: - * HTTP/1.1 201 Created - */ -router.post('/bulk', auth.isAuthenticated(), auth.hasModule([4], ['admin']), controller.bulkCreate); - -/** - * @api {update} /api/agents/:id Update agent's profile. - * - * @apiParam (Params) {Number} id Agent's unique ID. - * @apiParam (Body) {String} fullname Agent's fullname. - * @apiParam (Body) {String} email Agent's email. - * @apiParam (Body) {String} context="from-sip" Agent's SIP context. - * @apiParam (Body) {String} password Agent's password. - * @apiParam (Body) {Number} internal Agent's internal number. - * @apiParam (Body) {String="tcp", "udp", "tcp,udp"} transport="udp" Agent's SIP transport. - * @apiParam (Body) {String="alaw", "ulaw", "gsm"} allow="alaw;ulaw;gsm" Agent's SIP codecs. - * @apiParam (Body) {Number} internal Agent's internal number. - * @apiParam (Body) {String} [phone] Agent's phone. - * @apiParam (Body) {String} [mobile] Agent's mobile phone. - * @apiParam (Body) {String} [address] Agent's address. - * @apiParam (Body) {String} [zipcode] Agent's zipcode. - * @apiParam (Body) {String} [city] Agent's city. - * @apiParam (Body) {String} [country] Agent's country. - * - * @apiVersion 0.0.143 - * @apiName UpdateAgent - * @apiGroup Agents - * - * @apiHeader (Header) {String} Authorization Authorization access token. - * - * @apiHeaderExample {json} Header-Example: - * { - * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" - * } - * - * @apiSuccessExample {json} Success-Response: - * HTTP/1.1 200 OK - * { - * "id": 1 - * "name": "john.doe", - * "email": "john.doe@xcally.com", - * "internal": 1001, - * "fullname": "John Doe", - * ... - * } - */ -router.put('/:id', auth.isAuthenticated(), auth.hasModule([4], ['admin']), controller.update); - -/** - * @api {delete} /api/agents/ Bulk Delete agents' profile. - * - * @apiParam (Query) {Number[]} ids Agents' unique ID array. - * - * @apiVersion 0.0.143 - * @apiName BulkDeleteAgents - * @apiGroup Agents - * - * @apiHeader (Header) {String} Authorization Authorization access token. - * - * @apiHeaderExample {json} Header-Example: - * { - * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" - * } - * - * @apiSuccessExample {json} Success-Response: - * HTTP/1.1 204 No Content - */ -router.delete('/', auth.isAuthenticated(), auth.hasModule([4], ['admin']), controller.bulkDestroy); - -/** - * @api {delete} /api/agents/:id Delete agent's profile. - * - * @apiParam {Number} id Agent's unique ID. - * - * @apiVersion 0.0.143 - * @apiName DeleteAgent - * @apiGroup Agents - * - * @apiHeader (Header) {String} Authorization Authorization access token. - * - * @apiHeaderExample {json} Header-Example: - * { - * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" - * } - * - * @apiSuccessExample {json} Success-Response: - * HTTP/1.1 204 No Content - */ -router.delete('/:id', auth.isAuthenticated(), auth.hasModule([4], ['admin']), controller.destroy); - -/** - * @api {put} /api/agents/password Update agent's password. - * - * @apiParam (Body) {String} oldPassword Old agent's password. - * @apiParam (Body) {String} newPassword New agent's password. - * - * @apiVersion 0.0.143 - * @apiName UpdateAgentPassword - * @apiGroup Agents - * - * @apiHeader (Header) {String} Authorization Authorization access token. - * - * @apiHeaderExample {json} Header-Example: - * { - * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" - * } - * - * @apiSuccessExample {json} Success-Response: - * HTTP/1.1 200 OK - */ -// router.put('/password', auth.isAuthenticated(), auth.hasModule([4], ['admin']), controller.changePassword); - -/** - * @api {put} /api/agents/:id/password Reset agent's password. - * - * @apiParam (Params) {Number} id Agent's unique ID. - * @apiParam (Body) {String} newPassword New agent's password. - * - * @apiPermission admin - * - * @apiVersion 0.0.143 - * @apiName ResetAgentPassword - * @apiGroup Agents - * - * @apiHeader (Header) {String} Authorization Authorization access token. - * - * @apiHeaderExample {json} Header-Example: - * { - * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" - * } - * - * @apiSuccessExample {json} Success-Response: - * HTTP/1.1 200 OK - */ -// router.put('/:id/password', auth.isAuthenticated(), auth.hasModule([4], ['admin']), controller.resetPassword); - -router.get('/:id/voice/queues', auth.isAuthenticated(), auth.hasModule([4], ['admin', 'agent']), controller.showVoiceQueues); -router.get('/:id/chat/queues', auth.isAuthenticated(), auth.hasModule([4], ['admin', 'agent']), controller.showChatQueues); -router.get('/:id/mail/queues', auth.isAuthenticated(), auth.hasModule([4], ['admin', 'agent']), controller.showMailQueues); -router.get('/:id/fax/queues', auth.isAuthenticated(), auth.hasModule([4], ['admin', 'agent']), controller.showFaxQueues); -router.get('/:id/sms/queues', auth.isAuthenticated(), auth.hasModule([4], ['admin', 'agent']), controller.showSmsQueues); -router.get('/:id/openchannel/queues', auth.isAuthenticated(), auth.hasModule([4], ['admin', 'agent']), controller.showOpenchannelQueues); -router.post('/:id/:channel/queues', auth.isAuthenticated(), auth.hasModule([4], ['admin', 'agent']), controller.addQueues); -router.delete('/:id/:channel/queues', auth.isAuthenticated(), auth.hasModule([4], ['admin', 'agent']), controller.removeQueues); - - -module.exports = router; +var _0x2e64=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x61\x67\x65\x6E\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x61\x67\x65\x6E\x74","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x72\x65\x61\x6C\x74\x69\x6D\x65","\x72\x65\x61\x6C\x74\x69\x6D\x65\x49\x6E\x64\x65\x78","\x2F\x72\x65\x61\x6C\x74\x69\x6D\x65\x2F\x76\x6F\x69\x63\x65","\x72\x65\x61\x6C\x74\x69\x6D\x65\x56\x6F\x69\x63\x65\x49\x6E\x64\x65\x78","\x2F\x72\x65\x61\x6C\x74\x69\x6D\x65\x2F\x6D\x61\x69\x6C","\x72\x65\x61\x6C\x74\x69\x6D\x65\x4D\x61\x69\x6C\x49\x6E\x64\x65\x78","\x2F\x72\x65\x61\x6C\x74\x69\x6D\x65\x2F\x63\x68\x61\x74","\x72\x65\x61\x6C\x74\x69\x6D\x65\x43\x68\x61\x74\x49\x6E\x64\x65\x78","\x2F\x72\x65\x61\x6C\x74\x69\x6D\x65\x2F\x66\x61\x78","\x72\x65\x61\x6C\x74\x69\x6D\x65\x46\x61\x78\x49\x6E\x64\x65\x78","\x2F\x72\x65\x61\x6C\x74\x69\x6D\x65\x2F\x73\x6D\x73","\x72\x65\x61\x6C\x74\x69\x6D\x65\x53\x6D\x73\x49\x6E\x64\x65\x78","\x2F\x72\x65\x61\x6C\x74\x69\x6D\x65\x2F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C","\x72\x65\x61\x6C\x74\x69\x6D\x65\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x49\x6E\x64\x65\x78","\x2F\x3A\x69\x64","\x75\x73\x65\x72","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x2F\x62\x75\x6C\x6B","\x62\x75\x6C\x6B\x43\x72\x65\x61\x74\x65","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x2F\x3A\x69\x64\x2F\x76\x6F\x69\x63\x65\x2F\x71\x75\x65\x75\x65\x73","\x73\x68\x6F\x77\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65\x73","\x2F\x3A\x69\x64\x2F\x63\x68\x61\x74\x2F\x71\x75\x65\x75\x65\x73","\x73\x68\x6F\x77\x43\x68\x61\x74\x51\x75\x65\x75\x65\x73","\x2F\x3A\x69\x64\x2F\x6D\x61\x69\x6C\x2F\x71\x75\x65\x75\x65\x73","\x73\x68\x6F\x77\x4D\x61\x69\x6C\x51\x75\x65\x75\x65\x73","\x2F\x3A\x69\x64\x2F\x66\x61\x78\x2F\x71\x75\x65\x75\x65\x73","\x73\x68\x6F\x77\x46\x61\x78\x51\x75\x65\x75\x65\x73","\x2F\x3A\x69\x64\x2F\x73\x6D\x73\x2F\x71\x75\x65\x75\x65\x73","\x73\x68\x6F\x77\x53\x6D\x73\x51\x75\x65\x75\x65\x73","\x2F\x3A\x69\x64\x2F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x2F\x71\x75\x65\x75\x65\x73","\x73\x68\x6F\x77\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x51\x75\x65\x75\x65\x73","\x2F\x3A\x69\x64\x2F\x3A\x63\x68\x61\x6E\x6E\x65\x6C\x2F\x71\x75\x65\x75\x65\x73","\x61\x64\x64\x51\x75\x65\x75\x65\x73","\x72\x65\x6D\x6F\x76\x65\x51\x75\x65\x75\x65\x73","\x65\x78\x70\x6F\x72\x74\x73"];_0x2e64[0];var express=require(_0x2e64[1]);var controller=require(_0x2e64[2]);var auth=require(_0x2e64[3]);var license=require(_0x2e64[4]);var router=express.Router();router[_0x2e64[11]](_0x2e64[5],auth[_0x2e64[6]](),auth[_0x2e64[9]]([4],[_0x2e64[7],_0x2e64[8]]),controller[_0x2e64[10]]);router[_0x2e64[11]](_0x2e64[12],auth[_0x2e64[6]](),auth[_0x2e64[9]]([12],[_0x2e64[7]]),controller[_0x2e64[13]]);router[_0x2e64[11]](_0x2e64[14],auth[_0x2e64[6]](),auth[_0x2e64[9]]([7],[_0x2e64[7]]),controller[_0x2e64[15]]);router[_0x2e64[11]](_0x2e64[16],auth[_0x2e64[6]](),auth[_0x2e64[9]]([9],[_0x2e64[7]]),controller[_0x2e64[17]]);router[_0x2e64[11]](_0x2e64[18],auth[_0x2e64[6]](),auth[_0x2e64[9]]([8],[_0x2e64[7]]),controller[_0x2e64[19]]);router[_0x2e64[11]](_0x2e64[20],auth[_0x2e64[6]](),auth[_0x2e64[9]]([10],[_0x2e64[7]]),controller[_0x2e64[21]]);router[_0x2e64[11]](_0x2e64[22],auth[_0x2e64[6]](),auth[_0x2e64[9]]([11],[_0x2e64[7]]),controller[_0x2e64[23]]);router[_0x2e64[11]](_0x2e64[24],auth[_0x2e64[6]](),auth[_0x2e64[9]]([20],[_0x2e64[7]]),controller[_0x2e64[25]]);router[_0x2e64[11]](_0x2e64[26],auth[_0x2e64[6]](),auth[_0x2e64[9]]([4],[_0x2e64[7],_0x2e64[27],_0x2e64[8]]),controller[_0x2e64[28]]);router[_0x2e64[30]](_0x2e64[5],auth[_0x2e64[6]](),auth[_0x2e64[9]]([4],[_0x2e64[7]]),controller[_0x2e64[29]]);router[_0x2e64[30]](_0x2e64[31],auth[_0x2e64[6]](),auth[_0x2e64[9]]([4],[_0x2e64[7]]),controller[_0x2e64[32]]);router[_0x2e64[34]](_0x2e64[26],auth[_0x2e64[6]](),auth[_0x2e64[9]]([4],[_0x2e64[7]]),controller[_0x2e64[33]]);router[_0x2e64[36]](_0x2e64[5],auth[_0x2e64[6]](),auth[_0x2e64[9]]([4],[_0x2e64[7]]),controller[_0x2e64[35]]);router[_0x2e64[36]](_0x2e64[26],auth[_0x2e64[6]](),auth[_0x2e64[9]]([4],[_0x2e64[7]]),controller[_0x2e64[37]]);router[_0x2e64[11]](_0x2e64[38],auth[_0x2e64[6]](),auth[_0x2e64[9]]([4],[_0x2e64[7],_0x2e64[8]]),controller[_0x2e64[39]]);router[_0x2e64[11]](_0x2e64[40],auth[_0x2e64[6]](),auth[_0x2e64[9]]([4],[_0x2e64[7],_0x2e64[8]]),controller[_0x2e64[41]]);router[_0x2e64[11]](_0x2e64[42],auth[_0x2e64[6]](),auth[_0x2e64[9]]([4],[_0x2e64[7],_0x2e64[8]]),controller[_0x2e64[43]]);router[_0x2e64[11]](_0x2e64[44],auth[_0x2e64[6]](),auth[_0x2e64[9]]([4],[_0x2e64[7],_0x2e64[8]]),controller[_0x2e64[45]]);router[_0x2e64[11]](_0x2e64[46],auth[_0x2e64[6]](),auth[_0x2e64[9]]([4],[_0x2e64[7],_0x2e64[8]]),controller[_0x2e64[47]]);router[_0x2e64[11]](_0x2e64[48],auth[_0x2e64[6]](),auth[_0x2e64[9]]([4],[_0x2e64[7],_0x2e64[8]]),controller[_0x2e64[49]]);router[_0x2e64[30]](_0x2e64[50],auth[_0x2e64[6]](),auth[_0x2e64[9]]([4],[_0x2e64[7],_0x2e64[8]]),controller[_0x2e64[51]]);router[_0x2e64[36]](_0x2e64[50],auth[_0x2e64[6]](),auth[_0x2e64[9]]([4],[_0x2e64[7],_0x2e64[8]]),controller[_0x2e64[52]]);module[_0x2e64[53]]= router \ No newline at end of file diff --git a/server/api/ami/ami.ami.js b/server/api/ami/ami.ami.js index 1282301..7f57fdc 100644 --- a/server/api/ami/ami.ami.js +++ b/server/api/ami/ami.ami.js @@ -1,36 +1 @@ -/** - * Broadcast updates to client when the model changes - */ - -'use strict'; - -var Ami = require('../../models').Ami; -var _ = require('lodash'); - -var ami = null; - -exports.register = function(ami) { - this.ami = ami; -} - -exports.action = function(action, cb) { - if (this.ami && this.ami.isConnected()) { - this.ami.action(action, function(err, res) { - if (err) { - cb(err); - } - var data = _.merge(res, action); - Ami - .create(data) - .then(function(ami) { - cb(null, ami) - }) - .catch(function(err) { - return cb(err); - }); - - }); - } else { - cb(new Error('Asterisk Manager disconnected..')); - } -} +var _0x7739=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x41\x6D\x69","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x6C\x6F\x64\x61\x73\x68","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x6D\x69","\x61\x63\x74\x69\x6F\x6E","\x69\x73\x43\x6F\x6E\x6E\x65\x63\x74\x65\x64","\x6D\x65\x72\x67\x65","\x63\x61\x74\x63\x68","\x74\x68\x65\x6E","\x63\x72\x65\x61\x74\x65","\x41\x73\x74\x65\x72\x69\x73\x6B\x20\x4D\x61\x6E\x61\x67\x65\x72\x20\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x65\x64\x2E\x2E"];_0x7739[0];var Ami=require(_0x7739[2])[_0x7739[1]];var _=require(_0x7739[3]);var ami=null;exports[_0x7739[4]]= function(ami){this[_0x7739[5]]= ami};exports[_0x7739[6]]= function(_0xbe1bx4,_0xbe1bx5){if(this[_0x7739[5]]&& this[_0x7739[5]][_0x7739[7]]()){this[_0x7739[5]][_0x7739[6]](_0xbe1bx4,function(_0xbe1bx6,_0xbe1bx7){if(_0xbe1bx6){_0xbe1bx5(_0xbe1bx6)};var _0xbe1bx8=_[_0x7739[8]](_0xbe1bx7,_0xbe1bx4);Ami[_0x7739[11]](_0xbe1bx8)[_0x7739[10]](function(ami){_0xbe1bx5(null,ami)})[_0x7739[9]](function(_0xbe1bx6){return _0xbe1bx5(_0xbe1bx6)})})}else {_0xbe1bx5( new Error(_0x7739[12]))}} \ No newline at end of file diff --git a/server/api/ami/ami.controller.js b/server/api/ami/ami.controller.js index 9b00f54..fa6c3a0 100644 --- a/server/api/ami/ami.controller.js +++ b/server/api/ami/ami.controller.js @@ -1,37 +1 @@ -'use strict'; - -var _ = require('lodash'); -var Ami = require('../../models').Ami; -var Util = require('../../config/util'); - -// Get list of amis -exports.index = function(req, res, next) { - return Ami - .findAndCountAll(Util.getQuery(req.query)) - .then(function(result) { - return res.status(200).send(result); - }) - .catch(function(err) { - return handleError(res, err); - }); -}; - -// Creates a new ami in the DB. -exports.create = function(req, res) { - - req.body.data = JSON.stringify(req.body); - req.body.UserId = req.user.id; - - require('./ami.ami').action(req.body, function(err, result) { - if (err) { - handleError(res, err); - } else { - return res.status(201).send(result); - } - }); - -}; - -function handleError(res, err) { - return res.status(500).send(err); -} +var _0xc00f=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x41\x6D\x69","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x63\x72\x65\x61\x74\x65","\x64\x61\x74\x61","\x62\x6F\x64\x79","\x73\x74\x72\x69\x6E\x67\x69\x66\x79","\x55\x73\x65\x72\x49\x64","\x69\x64","\x75\x73\x65\x72","\x61\x63\x74\x69\x6F\x6E","\x2E\x2F\x61\x6D\x69\x2E\x61\x6D\x69"];_0xc00f[0];var _=require(_0xc00f[1]);var Ami=require(_0xc00f[3])[_0xc00f[2]];var Util=require(_0xc00f[4]);exports[_0xc00f[5]]= function(_0x4d09x4,_0x4d09x5,_0x4d09x6){return Ami[_0xc00f[12]](Util[_0xc00f[11]](_0x4d09x4[_0xc00f[10]]))[_0xc00f[9]](function(_0x4d09x8){return _0x4d09x5[_0xc00f[8]](200)[_0xc00f[7]](_0x4d09x8)})[_0xc00f[6]](function(_0x4d09x7){return handleError(_0x4d09x5,_0x4d09x7)})};exports[_0xc00f[13]]= function(_0x4d09x4,_0x4d09x5){_0x4d09x4[_0xc00f[15]][_0xc00f[14]]= JSON[_0xc00f[16]](_0x4d09x4[_0xc00f[15]]);_0x4d09x4[_0xc00f[15]][_0xc00f[17]]= _0x4d09x4[_0xc00f[19]][_0xc00f[18]];require(_0xc00f[21])[_0xc00f[20]](_0x4d09x4[_0xc00f[15]],function(_0x4d09x7,_0x4d09x8){if(_0x4d09x7){handleError(_0x4d09x5,_0x4d09x7)}else {return _0x4d09x5[_0xc00f[8]](201)[_0xc00f[7]](_0x4d09x8)}})};function handleError(_0x4d09x5,_0x4d09x7){return _0x4d09x5[_0xc00f[8]](500)[_0xc00f[7]](_0x4d09x7)} \ No newline at end of file diff --git a/server/api/ami/ami.events.js b/server/api/ami/ami.events.js index 69ed024..42507ca 100644 --- a/server/api/ami/ami.events.js +++ b/server/api/ami/ami.events.js @@ -1,36 +1 @@ -/** - * Thing model events - */ - -'use strict'; - -const EventEmitter = require('events'); -const Ami = require('../../models').Ami; - -var AmiEvents = new EventEmitter(); - -// Set max event listeners (0 == unlimited) -AmiEvents.setMaxListeners(0); - -// Model events -var events = { - 'afterCreate': 'save', - 'afterUpdate': 'save', - 'afterDestroy': 'remove' -}; - -// Register the event emitter to the model events -for (var e in events) { - var event = events[e]; - Ami.hook(e, emitEvent(event)); -} - -function emitEvent(event) { - return function(doc, options, done) { - AmiEvents.emit(event + ':' + doc._id, doc); - AmiEvents.emit(event, doc); - done(null); - } -} - -module.exports = AmiEvents; +var _0xa75f=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x41\x6D\x69","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xa75f[0];const EventEmitter=require(_0xa75f[1]);const Ami=require(_0xa75f[3])[_0xa75f[2]];var AmiEvents= new EventEmitter();AmiEvents[_0xa75f[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0xa75f[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0xa75f[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0xa75f[6]};for(var e in events){var event=events[e];Ami[_0xa75f[7]](e,emitEvent(event))};function emitEvent(event){return function(_0xd9bbx8,_0xd9bbx9,_0xd9bbxa){AmiEvents[_0xa75f[10]](event+ _0xa75f[8]+ _0xd9bbx8[_0xa75f[9]],_0xd9bbx8);AmiEvents[_0xa75f[10]](event,_0xd9bbx8);_0xd9bbxa(null)}}module[_0xa75f[11]]= AmiEvents \ No newline at end of file diff --git a/server/api/ami/ami.socket.js b/server/api/ami/ami.socket.js index b1ba530..bac06a7 100644 --- a/server/api/ami/ami.socket.js +++ b/server/api/ami/ami.socket.js @@ -1,32 +1 @@ -/** - * Broadcast updates to client when the model changes - */ - -'use strict'; - -const AmiEvents = require('./ami.events'); - -// Model events to emit -var events = ['save', 'remove']; - -exports.register = function(socket) { - for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { - var event = events[i]; - var listener = createListener('ami:' + event, socket); - - AmiEvents.on(event, listener); - socket.on('disconnect', removeListener(event, listener)); - } -} - -function createListener(event, socket) { - return function(doc) { - socket.emit(event, doc); - }; -} - -function removeListener(event, listener) { - return function() { - AmiEvents.removeListener(event, listener); - }; -} +var _0x8276=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x61\x6D\x69\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x61\x6D\x69\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x8276[0];const AmiEvents=require(_0x8276[1]);var events=[_0x8276[2],_0x8276[3]];exports[_0x8276[4]]= function(_0xadeex3){for(var _0xadeex4=0,_0xadeex5=events[_0x8276[5]];_0xadeex4< _0xadeex5;_0xadeex4++){var _0xadeex6=events[_0xadeex4];var _0xadeex7=createListener(_0x8276[6]+ _0xadeex6,_0xadeex3);AmiEvents[_0x8276[7]](_0xadeex6,_0xadeex7);_0xadeex3[_0x8276[7]](_0x8276[8],removeListener(_0xadeex6,_0xadeex7))}};function createListener(_0xadeex6,_0xadeex3){return function(_0xadeex9){_0xadeex3[_0x8276[9]](_0xadeex6,_0xadeex9)}}function removeListener(_0xadeex6,_0xadeex7){return function(){AmiEvents[_0x8276[10]](_0xadeex6,_0xadeex7)}} \ No newline at end of file diff --git a/server/api/ami/index.js b/server/api/ami/index.js index ae0b77c..e0edd37 100644 --- a/server/api/ami/index.js +++ b/server/api/ami/index.js @@ -1,12 +1 @@ -'use strict'; - -var express = require('express'); -var controller = require('./ami.controller'); -var auth = require('../../auth/auth.service'); - -var router = express.Router(); - -router.get('/', auth.isAuthenticated(), controller.index); -router.post('/', auth.isAuthenticated(), controller.create); - -module.exports = router; +var _0x7364=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x61\x6D\x69\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x7364[0];var express=require(_0x7364[1]);var controller=require(_0x7364[2]);var auth=require(_0x7364[3]);var router=express.Router();router[_0x7364[7]](_0x7364[4],auth[_0x7364[5]](),controller[_0x7364[6]]);router[_0x7364[9]](_0x7364[4],auth[_0x7364[5]](),controller[_0x7364[8]]);module[_0x7364[10]]= router \ No newline at end of file diff --git a/server/api/automation/automation.controller.js b/server/api/automation/automation.controller.js index 169fca5..4ad0cf6 100644 --- a/server/api/automation/automation.controller.js +++ b/server/api/automation/automation.controller.js @@ -1,205 +1 @@ -'use strict'; - -var _ = require('lodash'); -var util = require('util'); -var Util = require('../../config/util'); -var sequelize = require('../../models').sequelize; - -var Automation = require('../../models').Automation; -var ToolsCondition = require('../../models').ToolsCondition; -var ToolsAction = require('../../models').ToolsAction; - -// Get list of agents -exports.index = function(req, res, next) { - return Automation - .scope('all') - .findAndCountAll(_.merge(Util.getQuery(req.query), { - distinct: true - })) - .then(function(result) { - res.status(200).send(result); - }) - .catch(function(err) { - return handleError(res, err); - }); -}; - -// Get a single Automation -exports.show = function(req, res) { - return Automation - .scope('all') - .findById(req.params.id) - .then(function(Automation) { - if (!Automation) { - return res.sendStatus(404); - } - return res.send(Automation); - }) - .catch(function(err) { - return handleError(res, err); - }); -}; - -// Creates a new Automation in the DB. -exports.create = function(req, res, next) { - return Automation - .create(req.body, { - include: [{ - model: ToolsCondition, - as: 'All' - }, { - model: ToolsCondition, - as: 'Any' - }, { - model: ToolsAction, - as: 'Actions' - }] - }) - .then(function() { - return res.sendStatus(201); - }) - .catch(function(err) { - return handleError(res, err); - }); -}; - -// Updates an existing Automation in the DB. -exports.update = function(req, res, next) { - var _automation; - if (req.body.id) { - delete req.body.id; - } - return sequelize.transaction(function(t) { - return Automation - .findById(req.params.id) - .then(function(automation) { - if (!automation) { - return res.sendStatus(404); - } - _automation = automation; - if (req.body.Any) { - return ToolsCondition - .destroy({ - where: { - AutomationAnyId: req.params.id - }, - transaction: t - }); - } - }) - .then(function() { - if (req.body.Any && Array.isArray(req.body.Any) && req.body.Any.length) { - _.forEach(req.body.Any, function(elem) { - elem.AutomationAnyId = req.params.id; - }); - return ToolsCondition - .bulkCreate(req.body.Any, { - transaction: t - }); - } - return; - }) - .then(function() { - if (req.body.All) { - return ToolsCondition - .destroy({ - where: { - AutomationAllId: req.params.id - }, - transaction: t - }); - } - }) - .then(function() { - if (req.body.All && Array.isArray(req.body.All) && req.body.All.length) { - _.forEach(req.body.All, function(elem) { - elem.AutomationAllId = req.params.id; - }); - return ToolsCondition - .bulkCreate(req.body.All, { - transaction: t - }); - } - return; - }) - .then(function() { - if (req.body.Actions) { - return ToolsAction - .destroy({ - where: { - AutomationId: req.params.id - }, - transaction: t - }); - } - }) - .then(function() { - if (req.body.Actions && Array.isArray(req.body.Actions) && req.body.Actions.length) { - _.forEach(req.body.Actions, function(elem) { - elem.AutomationId = req.params.id; - }); - return ToolsAction - .bulkCreate(req.body.Actions, { - transaction: t - }); - } - return; - }) - .then(function() { - var updated = _.merge(_automation, req.body); - return updated - .save({ - transaction: t - }); - }); - }) - .then(function() { - return res.sendStatus(200); - }) - .catch(function(err) { - console.log(err); - return handleError(res, err); - }); -}; - - -// Deletes a Automation from the DB. -exports.destroy = function(req, res) { - return Automation - .findById(req.params.id) - .then(function(Automation) { - if (!Automation) { - return res.sendStatus(404); - } - Automation.destroy() - .then(function() { - return res.sendStatus(204); - }) - .catch(function(err) { - return handleError(res, err); - }); - }) - .catch(function(err) { - return handleError(res, err); - }); -} - -exports.bulkDestroy = function(req, res) { - return Automation - .destroy({ - where: { - id: req.query.ids - }, - individualHooks: true - }) - .then(function() { - return res.sendStatus(204); - }) - .catch(function(err) { - return handleError(res, err); - }); -}; - -function handleError(res, err) { - return res.status(500).send(err); -} +var _0x5626=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E","\x54\x6F\x6F\x6C\x73\x43\x6F\x6E\x64\x69\x74\x69\x6F\x6E","\x54\x6F\x6F\x6C\x73\x41\x63\x74\x69\x6F\x6E","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x6D\x65\x72\x67\x65","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x61\x6C\x6C","\x73\x63\x6F\x70\x65","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x41\x6C\x6C","\x41\x6E\x79","\x41\x63\x74\x69\x6F\x6E\x73","\x75\x70\x64\x61\x74\x65","\x6C\x6F\x67","\x73\x61\x76\x65","\x69\x73\x41\x72\x72\x61\x79","\x6C\x65\x6E\x67\x74\x68","\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x49\x64","\x66\x6F\x72\x45\x61\x63\x68","\x62\x75\x6C\x6B\x43\x72\x65\x61\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x41\x6C\x6C\x49\x64","\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x41\x6E\x79\x49\x64","\x74\x72\x61\x6E\x73\x61\x63\x74\x69\x6F\x